{"version":3,"file":"application.js","mappings":";kCAAAA,OAAOC,mBAAsBC,IAC3B,IAAIC,EAAYD,EAAWE,MAAM,GAAGC,KACnBC,SAASC,eAAe,aAC9BC,MAAQL,GAIrBH,OAAOS,YAAc,KACnBH,SAASC,eAAe,aAAaG,UAAUC,OAAO,UACtDL,SAASC,eAAe,aAAaG,UAAUC,OAAO,UACtD,MAAMC,EAAgBN,SAASO,uBAAuB,cAEtD,IAAK,IAAIC,EAAI,EAAGA,EAAIF,EAAcG,OAAQD,IACxCF,EAAcE,GAAGJ,UAAUC,OAAO,U,gFCbtC,OACEK,OAA2B,oBAAZC,QAA0BA,aAAUC,EACnDC,UAAgC,oBAAdA,UAA4BA,eAAYD,GCY5D,GACE,GAAAE,IAAOC,GACDC,KAAKC,UACPF,EAASG,KAAKC,KAAKC,OACnBC,EAASX,OAAOI,IAAI,mBAAoBC,GAE5C,GCfF,MAAMK,EAAM,KAAM,IAAID,MAAOG,UAEvBC,EAAeC,IAASJ,IAAQI,GAAQ,IAE9C,MAAMC,EACJ,WAAAC,CAAYC,GACVX,KAAKY,oBAAsBZ,KAAKY,oBAAoBC,KAAKb,MACzDA,KAAKW,WAAaA,EAClBX,KAAKc,kBAAoB,CAC3B,CAEA,KAAAC,GACOf,KAAKgB,cACRhB,KAAKiB,UAAYb,WACVJ,KAAKkB,UACZlB,KAAKmB,eACLC,iBAAiB,mBAAoBpB,KAAKY,qBAC1ClB,EAAOI,IAAI,gDAAgDE,KAAKU,YAAYW,oBAEhF,CAEA,IAAAC,GACMtB,KAAKgB,cACPhB,KAAKkB,UAAYd,IACjBJ,KAAKuB,cACLC,oBAAoB,mBAAoBxB,KAAKY,qBAC7ClB,EAAOI,IAAI,6BAEf,CAEA,SAAAkB,GACE,OAAOhB,KAAKiB,YAAcjB,KAAKkB,SACjC,CAEA,aAAAO,GACEzB,KAAK0B,SAAWtB,GAClB,CAEA,aAAAuB,GACE3B,KAAKc,kBAAoB,SAClBd,KAAK4B,eACZlC,EAAOI,IAAI,qCACb,CAEA,gBAAA+B,GACE7B,KAAK4B,eAAiBxB,IACtBV,EAAOI,IAAI,wCACb,CAIA,YAAAqB,GACEnB,KAAKuB,cACLvB,KAAK8B,MACP,CAEA,WAAAP,GACEQ,aAAa/B,KAAKgC,YACpB,CAEA,IAAAF,GACE9B,KAAKgC,YAAcC,WAAW,KAC5BjC,KAAKkC,mBACLlC,KAAK8B,QAEL9B,KAAKmC,kBACT,CAEA,eAAAA,GACE,MAAM,eAAEd,EAAc,wBAAEe,GAA4BpC,KAAKU,YAIzD,OAAwB,IAAjBW,EAHSgB,KAAKC,IAAI,EAAIF,EAAyBC,KAAKE,IAAIvC,KAAKc,kBAAmB,MAG7C,GAFG,IAA3Bd,KAAKc,kBAA0B,EAAMsB,GAC5BC,KAAKG,SAElC,CAEA,gBAAAN,GACMlC,KAAKyC,sBACP/C,EAAOI,IAAI,oEAAoEE,KAAKc,mCAAmCP,EAAaP,KAAK0C,qCAAqC1C,KAAKU,YAAYW,oBAC/LrB,KAAKc,oBACDd,KAAK2C,uBACPjD,EAAOI,IAAI,+EAA+ES,EAAaP,KAAK4B,sBAE5GlC,EAAOI,IAAI,+BACXE,KAAKW,WAAWiC,UAGtB,CAEA,eAAIF,GACF,OAAO1C,KAAK0B,SAAW1B,KAAK0B,SAAW1B,KAAKiB,SAC9C,CAEA,iBAAAwB,GACE,OAAOlC,EAAaP,KAAK0C,aAAe1C,KAAKU,YAAYW,cAC3D,CAEA,oBAAAsB,GACE,OAAO3C,KAAK4B,gBAAmBrB,EAAaP,KAAK4B,gBAAkB5B,KAAKU,YAAYW,cACtF,CAEA,mBAAAT,GACmC,YAA7B5B,SAAS6D,iBACXZ,WAAW,MACLjC,KAAKyC,qBAAwBzC,KAAKW,WAAWmC,WAC/CpD,EAAOI,IAAI,uFAAuFd,SAAS6D,mBAC3G7C,KAAKW,WAAWiC,WAGlB,IAEN,EAIFnC,EAAkBY,eAAiB,EACnCZ,EAAkB2B,wBAA0B,IAE5C,QC3HA,GACE,cAAiB,CACf,QAAW,UACX,WAAc,aACd,KAAQ,OACR,aAAgB,uBAChB,UAAa,uBAEf,mBAAsB,CACpB,aAAgB,eAChB,gBAAmB,kBACnB,eAAkB,iBAClB,OAAU,UAEZ,mBAAsB,SACtB,UAAa,CACX,sBACA,4BCVJ,MAAM,cAACW,EAAa,UAAEC,GAAa,EAC7BC,EAAqBD,EAAUE,MAAM,EAAGF,EAAUvD,OAAS,GAE3D0D,EAAU,GAAGA,QAEnB,MAAMC,EACJ,WAAA1C,CAAY2C,GACVrD,KAAKsD,KAAOtD,KAAKsD,KAAKzC,KAAKb,MAC3BA,KAAKqD,SAAWA,EAChBrD,KAAKuD,cAAgBvD,KAAKqD,SAASE,cACnCvD,KAAKwD,QAAU,IAAI,EAAkBxD,MACrCA,KAAKyD,cAAe,CACtB,CAEA,IAAAC,CAAKC,GACH,QAAI3D,KAAK8C,WACP9C,KAAK4D,UAAUF,KAAKG,KAAKC,UAAUH,KAC5B,EAIX,CAEA,IAAAL,GACE,GAAItD,KAAK+D,WAEP,OADArE,EAAOI,IAAI,uDAAuDE,KAAKgE,eAChE,EACF,CACL,MAAMC,EAAkB,IAAIjB,KAAchD,KAAKqD,SAASa,cAAgB,IAMxE,OALAxE,EAAOI,IAAI,uCAAuCE,KAAKgE,6BAA6BC,KAChFjE,KAAK4D,WAAa5D,KAAKmE,yBAC3BnE,KAAK4D,UAAY,IAAIvD,EAASR,UAAUG,KAAKqD,SAASe,IAAKH,GAC3DjE,KAAKqE,uBACLrE,KAAKwD,QAAQzC,SACN,CACT,CACF,CAEA,KAAAuD,EAAM,eAACC,GAAkB,CAACA,gBAAgB,IAGxC,GAFKA,GAAkBvE,KAAKwD,QAAQlC,OAEhCtB,KAAK8C,SACP,OAAO9C,KAAK4D,UAAUU,OAE1B,CAEA,MAAA1B,GAEE,GADAlD,EAAOI,IAAI,yCAAyCE,KAAKgE,eACrDhE,KAAK+D,WAWP,OAAO/D,KAAKsD,OAVZ,IACE,OAAOtD,KAAKsE,OACd,CAAE,MAAOE,GACP9E,EAAOI,IAAI,6BAA8B0E,EAC3C,CACA,QACE9E,EAAOI,IAAI,0BAA0BE,KAAKU,YAAY+D,iBACtDxC,WAAWjC,KAAKsD,KAAMtD,KAAKU,YAAY+D,YACzC,CAIJ,CAEA,WAAAC,GACE,GAAI1E,KAAK4D,UACP,OAAO5D,KAAK4D,UAAUe,QAE1B,CAEA,MAAA7B,GACE,OAAO9C,KAAK4E,QAAQ,OACtB,CAEA,QAAAb,GACE,OAAO/D,KAAK4E,QAAQ,OAAQ,aAC9B,CAEA,gBAAAC,GACE,OAAO7E,KAAKwD,QAAQ1C,kBAAoB,CAC1C,CAIA,mBAAAgE,GACE,OAAO3B,EAAQ4B,KAAK9B,EAAoBjD,KAAK0E,gBAAkB,CACjE,CAEA,OAAAE,IAAWI,GACT,OAAO7B,EAAQ4B,KAAKC,EAAQhF,KAAKgE,aAAe,CAClD,CAEA,QAAAA,GACE,GAAIhE,KAAK4D,UACP,IAAK,IAAIqB,KAAS5E,EAASR,UACzB,GAAIQ,EAASR,UAAUoF,KAAWjF,KAAK4D,UAAUsB,WAC/C,OAAOD,EAAME,cAInB,OAAO,IACT,CAEA,oBAAAd,GACE,IAAK,IAAIe,KAAapF,KAAKqF,OAAQ,CACjC,MAAMC,EAAUtF,KAAKqF,OAAOD,GAAWvE,KAAKb,MAC5CA,KAAK4D,UAAU,KAAKwB,KAAeE,CACrC,CACF,CAEA,sBAAAnB,GACE,IAAK,IAAIiB,KAAapF,KAAKqF,OACzBrF,KAAK4D,UAAU,KAAKwB,KAAe,WAAY,CAEnD,EAIFhC,EAAWqB,YAAc,IAEzBrB,EAAWmC,UAAUF,OAAS,CAC5B,OAAAG,CAAQC,GACN,IAAKzF,KAAK8E,sBAAyB,OACnC,MAAM,WAACY,EAAU,QAAEF,EAAO,OAAEG,EAAM,UAAEC,EAAS,KAAEC,GAAQhC,KAAKiC,MAAML,EAAM9B,MAExE,OADA3D,KAAKwD,QAAQ/B,gBACLoE,GACN,KAAK9C,EAAcgD,QAKjB,OAJI/F,KAAK6E,qBACP7E,KAAKgG,oBAAqB,GAE5BhG,KAAKwD,QAAQ7B,gBACN3B,KAAKuD,cAAc0C,SAC5B,KAAKlD,EAAcmD,WAEjB,OADAxG,EAAOI,IAAI,0BAA0B6F,KAC9B3F,KAAKsE,MAAM,CAACC,eAAgBqB,IACrC,KAAK7C,EAAcoD,KACjB,OAAO,KACT,KAAKpD,EAAcqD,aAEjB,OADApG,KAAKuD,cAAc8C,oBAAoBX,GACnC1F,KAAKgG,oBACPhG,KAAKgG,oBAAqB,EACnBhG,KAAKuD,cAAc+C,OAAOZ,EAAY,YAAa,CAACa,aAAa,KAEjEvG,KAAKuD,cAAc+C,OAAOZ,EAAY,YAAa,CAACa,aAAa,IAE5E,KAAKxD,EAAcyD,UACjB,OAAOxG,KAAKuD,cAAckD,OAAOf,GACnC,QACE,OAAO1F,KAAKuD,cAAc+C,OAAOZ,EAAY,WAAYF,GAE/D,EAEA,IAAAlC,GAGE,GAFA5D,EAAOI,IAAI,kCAAkCE,KAAK0E,8BAClD1E,KAAKyD,cAAe,GACfzD,KAAK8E,sBAER,OADApF,EAAOI,IAAI,gEACJE,KAAKsE,MAAM,CAACC,gBAAgB,GAEvC,EAEA,KAAAD,CAAMmB,GAEJ,GADA/F,EAAOI,IAAI,4BACPE,KAAKyD,aAGT,OAFAzD,KAAKyD,cAAe,EACpBzD,KAAKwD,QAAQ3B,mBACN7B,KAAKuD,cAAcmD,UAAU,eAAgB,CAACC,qBAAsB3G,KAAKwD,QAAQxC,aAC1F,EAEA,KAAAwD,GACE9E,EAAOI,IAAI,0BACb,GAGF,QChHe,MAAM8G,EACnB,WAAAlG,CAAY2C,EAAUwD,EAAS,CAAC,EAAGC,GACjC9G,KAAKqD,SAAWA,EAChBrD,KAAK0F,WAAa7B,KAAKC,UAAU+C,GAbtB,SAASE,EAAQC,GAC9B,GAAkB,MAAdA,EACF,IAAK,IAAIC,KAAOD,EAAY,CAC1B,MAAM9H,EAAQ8H,EAAWC,GACzBF,EAAOE,GAAO/H,CAChB,CAGJ,CAMIgI,CAAOlH,KAAM8G,EACf,CAGA,OAAAK,CAAQC,EAAQzD,EAAO,CAAC,GAEtB,OADAA,EAAKyD,OAASA,EACPpH,KAAK0D,KAAKC,EACnB,CAEA,IAAAD,CAAKC,GACH,OAAO3D,KAAKqD,SAASK,KAAK,CAAC2D,QAAS,UAAW3B,WAAY1F,KAAK0F,WAAY/B,KAAME,KAAKC,UAAUH,IACnG,CAEA,WAAA2D,GACE,OAAOtH,KAAKqD,SAASE,cAAcgE,OAAOvH,KAC5C,ECtCF,MA5CA,MACE,WAAAU,CAAY6C,GACVvD,KAAKuD,cAAgBA,EACrBvD,KAAKwH,qBAAuB,EAC9B,CAEA,SAAAC,CAAUC,IAC+C,GAApD1H,KAAKwH,qBAAqBrE,QAAQuE,IACnChI,EAAOI,IAAI,sCAAsC4H,EAAahC,cAC9D1F,KAAKwH,qBAAqBtH,KAAKwH,IAG/BhI,EAAOI,IAAI,8CAA8C4H,EAAahC,cAExE1F,KAAK2H,mBACP,CAEA,MAAAC,CAAOF,GACLhI,EAAOI,IAAI,oCAAoC4H,EAAahC,cAC5D1F,KAAKwH,qBAAwBxH,KAAKwH,qBAAqBK,OAAQC,GAAMA,IAAMJ,EAC7E,CAEA,iBAAAC,GACE3H,KAAK+H,mBACL/H,KAAKgI,kBACP,CAEA,gBAAAD,GACEhG,aAAa/B,KAAKiI,aACpB,CAEA,gBAAAD,GACEhI,KAAKiI,aAAehG,WAAW,KACzBjC,KAAKuD,eAA0D,mBAAlCvD,KAAKuD,cAAuB,WAC3DvD,KAAKwH,qBAAqBU,IAAKR,IAC7BhI,EAAOI,IAAI,uCAAuC4H,EAAahC,cAC/D1F,KAAKuD,cAAc4E,UAAUT,MAIjC,IACJ,GChCa,MAAMU,EACnB,WAAA1H,CAAY2C,GACVrD,KAAKqD,SAAWA,EAChBrD,KAAKqI,UAAY,IAAI,EAAsBrI,MAC3CA,KAAKuD,cAAgB,EACvB,CAEA,MAAA+E,CAAOC,EAAazB,GAClB,MACMD,EAA4B,iBADlB0B,IACuC,CAACC,QADxCD,GAEVb,EAAe,IAAId,EAAa5G,KAAKqD,SAAUwD,EAAQC,GAC7D,OAAO9G,KAAKyI,IAAIf,EAClB,CAIA,GAAAe,CAAIf,GAKF,OAJA1H,KAAKuD,cAAcrD,KAAKwH,GACxB1H,KAAKqD,SAASqF,yBACd1I,KAAKsG,OAAOoB,EAAc,eAC1B1H,KAAKmI,UAAUT,GACRA,CACT,CAEA,MAAAH,CAAOG,GAKL,OAJA1H,KAAK4H,OAAOF,GACP1H,KAAK2I,QAAQjB,EAAahC,YAAYjG,QACzCO,KAAK4I,YAAYlB,EAAc,eAE1BA,CACT,CAEA,MAAAjB,CAAOf,GACL,OAAO1F,KAAK2I,QAAQjD,GAAYwC,IAAKR,IACnC1H,KAAK4H,OAAOF,GACZ1H,KAAKsG,OAAOoB,EAAc,YACnBA,GAEX,CAEA,MAAAE,CAAOF,GAGL,OAFA1H,KAAKqI,UAAUT,OAAOF,GACtB1H,KAAKuD,cAAiBvD,KAAKuD,cAAcsE,OAAQC,GAAMA,IAAMJ,GACtDA,CACT,CAEA,OAAAiB,CAAQjD,GACN,OAAO1F,KAAKuD,cAAcsE,OAAQC,GAAMA,EAAEpC,aAAeA,EAC3D,CAEA,MAAAO,GACE,OAAOjG,KAAKuD,cAAc2E,IAAKR,GAC7B1H,KAAKmI,UAAUT,GACnB,CAEA,SAAAhB,CAAUmC,KAAiBC,GACzB,OAAO9I,KAAKuD,cAAc2E,IAAKR,GAC7B1H,KAAKsG,OAAOoB,EAAcmB,KAAiBC,GAC/C,CAEA,MAAAxC,CAAOoB,EAAcmB,KAAiBC,GACpC,IAAIvF,EAOJ,OALEA,EAD0B,iBAAjBmE,EACO1H,KAAK2I,QAAQjB,GAEb,CAACA,GAGZnE,EAAc2E,IAAKR,GACe,mBAA/BA,EAAamB,GAA+BnB,EAAamB,MAAiBC,QAAQlJ,EAC9F,CAEA,SAAAuI,CAAUT,GACJ1H,KAAK4I,YAAYlB,EAAc,cACjC1H,KAAKqI,UAAUZ,UAAUC,EAE7B,CAEA,mBAAArB,CAAoBX,GAClBhG,EAAOI,IAAI,0BAA0B4F,KACrC1F,KAAK2I,QAAQjD,GAAYwC,IAAKR,GAC5B1H,KAAKqI,UAAUT,OAAOF,GAC1B,CAEA,WAAAkB,CAAYlB,EAAcL,GACxB,MAAM,WAAC3B,GAAcgC,EACrB,OAAO1H,KAAKqD,SAASK,KAAK,CAAC2D,UAAS3B,cACtC,ECxEa,MAAMqD,EACnB,WAAArI,CAAY0D,GACVpE,KAAKgJ,KAAO5E,EACZpE,KAAKuD,cAAgB,IAAI6E,EAAcpI,MACvCA,KAAKW,WAAa,IAAI,EAAWX,MACjCA,KAAKkE,aAAe,EACtB,CAEA,OAAIE,GACF,OA0BG,SAA4BA,GAKjC,GAJmB,mBAARA,IACTA,EAAMA,KAGJA,IAAQ,UAAU6E,KAAK7E,GAAM,CAC/B,MAAM8E,EAAIlK,SAASmK,cAAc,KAKjC,OAJAD,EAAEE,KAAOhF,EAET8E,EAAEE,KAAOF,EAAEE,KACXF,EAAEvE,SAAWuE,EAAEvE,SAAS0E,QAAQ,OAAQ,MACjCH,EAAEE,IACX,CACE,OAAOhF,CAEX,CAzCWkF,CAAmBtJ,KAAKgJ,KACjC,CAEA,IAAAtF,CAAKC,GACH,OAAO3D,KAAKW,WAAW+C,KAAKC,EAC9B,CAEA,OAAA4F,GACE,OAAOvJ,KAAKW,WAAW2C,MACzB,CAEA,UAAA4C,GACE,OAAOlG,KAAKW,WAAW2D,MAAM,CAACC,gBAAgB,GAChD,CAEA,sBAAAmE,GACE,IAAK1I,KAAKW,WAAWoD,WACnB,OAAO/D,KAAKW,WAAW2C,MAE3B,CAEA,cAAAkG,CAAeC,GACbzJ,KAAKkE,aAAe,IAAIlE,KAAKkE,aAAcuF,EAC7C,ECtCK,SAASC,EAAetF,EAIxB,WACL,MAAMuF,EAAU3K,SAAS4K,KAAKC,cAAc,iCAC5C,GAAIF,EACF,OAAOA,EAAQG,aAAa,UAEhC,CATqCC,IAAoB,EAASC,oBAChE,OAAO,IAAIjB,EAAS3E,EACtB,C,+BCxBA6F,EAAOC,QAAU,SAAuBC,GACpC,GAAqB,iBAAVA,GAAsBC,OAAOC,MAAMF,GAC1C,MAAM,IAAIG,UAAU,iCAAiCH,GAEzD,MAAMI,EAAMJ,EAAQ,EACpB,IAAIK,EAAMnI,KAAKoI,IAAIN,GAInB,GAHII,IACAC,GAAOA,GAEC,IAARA,EACA,MAAO,MAEX,MAAME,EAAQ,CAAC,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MACxDC,EAAWtI,KAAKE,IAAIF,KAAKuI,MAAMvI,KAAKvC,IAAI0K,GAAOnI,KAAKvC,IAAI,OAAQ4K,EAAMjL,OAAS,GAC/EP,EAAQkL,OAAOI,EAAM,MAAQG,GAC7BE,EAAOH,EAAMC,GACnB,MAAO,GAAGzL,GAAS,IAAMA,EAAQ,GAAM,EAAImD,KAAKyI,MAAM5L,GAASA,EAAM6L,QAAQ,MAAMF,GACvF,C,+BChBA,IAAIG,EAAMC,OAAO1F,UAAU2F,eACvBC,EAAS,IASb,SAASC,IAAU,CA4BnB,SAASC,EAAGC,EAAIC,EAASC,GACvBxL,KAAKsL,GAAKA,EACVtL,KAAKuL,QAAUA,EACfvL,KAAKwL,KAAOA,IAAQ,CACtB,CAaA,SAASC,EAAYC,EAASjG,EAAO6F,EAAIC,EAASC,GAChD,GAAkB,mBAAPF,EACT,MAAM,IAAIhB,UAAU,mCAGtB,IAAIqB,EAAW,IAAIN,EAAGC,EAAIC,GAAWG,EAASF,GAC1CI,EAAMT,EAASA,EAAS1F,EAAQA,EAMpC,OAJKiG,EAAQG,QAAQD,GACXF,EAAQG,QAAQD,GAAKN,GAC1BI,EAAQG,QAAQD,GAAO,CAACF,EAAQG,QAAQD,GAAMD,GADhBD,EAAQG,QAAQD,GAAK1L,KAAKyL,IADlCD,EAAQG,QAAQD,GAAOD,EAAUD,EAAQI,gBAI7DJ,CACT,CASA,SAASK,EAAWL,EAASE,GACI,MAAzBF,EAAQI,aAAoBJ,EAAQG,QAAU,IAAIT,SAC5CM,EAAQG,QAAQD,EAC9B,CASA,SAASI,IACPhM,KAAK6L,QAAU,IAAIT,EACnBpL,KAAK8L,aAAe,CACtB,CAzEIb,OAAO3C,SACT8C,EAAO7F,UAAY0F,OAAO3C,OAAO,OAM5B,IAAI8C,GAASa,YAAWd,GAAS,IA2ExCa,EAAazG,UAAU2G,WAAa,WAClC,IACI7G,EACAtG,EAFAoN,EAAQ,GAIZ,GAA0B,IAAtBnM,KAAK8L,aAAoB,OAAOK,EAEpC,IAAKpN,KAASsG,EAASrF,KAAK6L,QACtBb,EAAIjG,KAAKM,EAAQtG,IAAOoN,EAAMjM,KAAKiL,EAASpM,EAAKmE,MAAM,GAAKnE,GAGlE,OAAIkM,OAAOmB,sBACFD,EAAME,OAAOpB,OAAOmB,sBAAsB/G,IAG5C8G,CACT,EASAH,EAAazG,UAAU+G,UAAY,SAAmB7G,GACpD,IAAImG,EAAMT,EAASA,EAAS1F,EAAQA,EAChC8G,EAAWvM,KAAK6L,QAAQD,GAE5B,IAAKW,EAAU,MAAO,GACtB,GAAIA,EAASjB,GAAI,MAAO,CAACiB,EAASjB,IAElC,IAAK,IAAI9L,EAAI,EAAGgN,EAAID,EAAS9M,OAAQgN,EAAK,IAAIC,MAAMF,GAAIhN,EAAIgN,EAAGhN,IAC7DiN,EAAGjN,GAAK+M,EAAS/M,GAAG8L,GAGtB,OAAOmB,CACT,EASAT,EAAazG,UAAUoH,cAAgB,SAAuBlH,GAC5D,IAAImG,EAAMT,EAASA,EAAS1F,EAAQA,EAChC6G,EAAYtM,KAAK6L,QAAQD,GAE7B,OAAKU,EACDA,EAAUhB,GAAW,EAClBgB,EAAU7M,OAFM,CAGzB,EASAuM,EAAazG,UAAUqH,KAAO,SAAcnH,EAAOoH,EAAIC,EAAIC,EAAIC,EAAIC,GACjE,IAAIrB,EAAMT,EAASA,EAAS1F,EAAQA,EAEpC,IAAKzF,KAAK6L,QAAQD,GAAM,OAAO,EAE/B,IAEI9C,EACAtJ,EAHA8M,EAAYtM,KAAK6L,QAAQD,GACzBsB,EAAMC,UAAU1N,OAIpB,GAAI6M,EAAUhB,GAAI,CAGhB,OAFIgB,EAAUd,MAAMxL,KAAKoN,eAAe3H,EAAO6G,EAAUhB,QAAI1L,GAAW,GAEhEsN,GACN,KAAK,EAAG,OAAOZ,EAAUhB,GAAGvG,KAAKuH,EAAUf,UAAU,EACrD,KAAK,EAAG,OAAOe,EAAUhB,GAAGvG,KAAKuH,EAAUf,QAASsB,IAAK,EACzD,KAAK,EAAG,OAAOP,EAAUhB,GAAGvG,KAAKuH,EAAUf,QAASsB,EAAIC,IAAK,EAC7D,KAAK,EAAG,OAAOR,EAAUhB,GAAGvG,KAAKuH,EAAUf,QAASsB,EAAIC,EAAIC,IAAK,EACjE,KAAK,EAAG,OAAOT,EAAUhB,GAAGvG,KAAKuH,EAAUf,QAASsB,EAAIC,EAAIC,EAAIC,IAAK,EACrE,KAAK,EAAG,OAAOV,EAAUhB,GAAGvG,KAAKuH,EAAUf,QAASsB,EAAIC,EAAIC,EAAIC,EAAIC,IAAK,EAG3E,IAAKzN,EAAI,EAAGsJ,EAAO,IAAI4D,MAAMQ,EAAK,GAAI1N,EAAI0N,EAAK1N,IAC7CsJ,EAAKtJ,EAAI,GAAK2N,UAAU3N,GAG1B8M,EAAUhB,GAAG+B,MAAMf,EAAUf,QAASzC,EACxC,KAAO,CACL,IACIwE,EADA7N,EAAS6M,EAAU7M,OAGvB,IAAKD,EAAI,EAAGA,EAAIC,EAAQD,IAGtB,OAFI8M,EAAU9M,GAAGgM,MAAMxL,KAAKoN,eAAe3H,EAAO6G,EAAU9M,GAAG8L,QAAI1L,GAAW,GAEtEsN,GACN,KAAK,EAAGZ,EAAU9M,GAAG8L,GAAGvG,KAAKuH,EAAU9M,GAAG+L,SAAU,MACpD,KAAK,EAAGe,EAAU9M,GAAG8L,GAAGvG,KAAKuH,EAAU9M,GAAG+L,QAASsB,GAAK,MACxD,KAAK,EAAGP,EAAU9M,GAAG8L,GAAGvG,KAAKuH,EAAU9M,GAAG+L,QAASsB,EAAIC,GAAK,MAC5D,KAAK,EAAGR,EAAU9M,GAAG8L,GAAGvG,KAAKuH,EAAU9M,GAAG+L,QAASsB,EAAIC,EAAIC,GAAK,MAChE,QACE,IAAKjE,EAAM,IAAKwE,EAAI,EAAGxE,EAAO,IAAI4D,MAAMQ,EAAK,GAAII,EAAIJ,EAAKI,IACxDxE,EAAKwE,EAAI,GAAKH,UAAUG,GAG1BhB,EAAU9M,GAAG8L,GAAG+B,MAAMf,EAAU9M,GAAG+L,QAASzC,GAGpD,CAEA,OAAO,CACT,EAWAkD,EAAazG,UAAUgI,GAAK,SAAY9H,EAAO6F,EAAIC,GACjD,OAAOE,EAAYzL,KAAMyF,EAAO6F,EAAIC,GAAS,EAC/C,EAWAS,EAAazG,UAAUiG,KAAO,SAAc/F,EAAO6F,EAAIC,GACrD,OAAOE,EAAYzL,KAAMyF,EAAO6F,EAAIC,GAAS,EAC/C,EAYAS,EAAazG,UAAU6H,eAAiB,SAAwB3H,EAAO6F,EAAIC,EAASC,GAClF,IAAII,EAAMT,EAASA,EAAS1F,EAAQA,EAEpC,IAAKzF,KAAK6L,QAAQD,GAAM,OAAO5L,KAC/B,IAAKsL,EAEH,OADAS,EAAW/L,KAAM4L,GACV5L,KAGT,IAAIsM,EAAYtM,KAAK6L,QAAQD,GAE7B,GAAIU,EAAUhB,GAEVgB,EAAUhB,KAAOA,GACfE,IAAQc,EAAUd,MAClBD,GAAWe,EAAUf,UAAYA,GAEnCQ,EAAW/L,KAAM4L,OAEd,CACL,IAAK,IAAIpM,EAAI,EAAG6F,EAAS,GAAI5F,EAAS6M,EAAU7M,OAAQD,EAAIC,EAAQD,KAEhE8M,EAAU9M,GAAG8L,KAAOA,GACnBE,IAASc,EAAU9M,GAAGgM,MACtBD,GAAWe,EAAU9M,GAAG+L,UAAYA,IAErClG,EAAOnF,KAAKoM,EAAU9M,IAOtB6F,EAAO5F,OAAQO,KAAK6L,QAAQD,GAAyB,IAAlBvG,EAAO5F,OAAe4F,EAAO,GAAKA,EACpE0G,EAAW/L,KAAM4L,EACxB,CAEA,OAAO5L,IACT,EASAgM,EAAazG,UAAUiI,mBAAqB,SAA4B/H,GACtE,IAAImG,EAUJ,OARInG,GACFmG,EAAMT,EAASA,EAAS1F,EAAQA,EAC5BzF,KAAK6L,QAAQD,IAAMG,EAAW/L,KAAM4L,KAExC5L,KAAK6L,QAAU,IAAIT,EACnBpL,KAAK8L,aAAe,GAGf9L,IACT,EAKAgM,EAAazG,UAAUkI,IAAMzB,EAAazG,UAAU6H,eACpDpB,EAAazG,UAAUkG,YAAcO,EAAazG,UAAUgI,GAK5DvB,EAAa0B,SAAWvC,EAKxBa,EAAaA,aAAeA,EAM1B/B,EAAOC,QAAU8B,C,kBC9UnB/B,EAAOC,QAAU,SAAyBhB,EAAGyE,GAC3C,GAAIzE,IAAMyE,EAAG,OAAO,EACpB,IAAK,IAAInO,KAAK0J,EAAG,KAAM1J,KAAKmO,GAAI,OAAO,EACvC,IAAK,IAAInO,KAAKmO,EAAG,GAAIzE,EAAE1J,KAAOmO,EAAEnO,GAAI,OAAO,EAC3C,OAAO,CACT,C,sBCLA,IAGIoO,EAHO,EAAQ,KAGDA,OAElB3D,EAAOC,QAAU0D,C,sBCLjB,IAAIA,EAAS,EAAQ,KACjBC,EAAY,EAAQ,KACpBC,EAAiB,EAAQ,KAOzBC,EAAiBH,EAASA,EAAOI,iBAAcpO,EAkBnDqK,EAAOC,QATP,SAAoBhL,GAClB,OAAa,MAATA,OACeU,IAAVV,EAdQ,qBADL,gBAiBJ6O,GAAkBA,KAAkB9C,OAAO/L,GAC/C2O,EAAU3O,GACV4O,EAAe5O,EACrB,C,sBCzBA,IAAI+O,EAAkB,EAAQ,KAG1BC,EAAc,OAelBjE,EAAOC,QANP,SAAkBiE,GAChB,OAAOA,EACHA,EAAOjL,MAAM,EAAG+K,EAAgBE,GAAU,GAAG9E,QAAQ6E,EAAa,IAClEC,CACN,C,sBCfA,IAAIC,EAA8B,iBAAV,EAAAC,GAAsB,EAAAA,GAAU,EAAAA,EAAOpD,SAAWA,QAAU,EAAAoD,EAEpFpE,EAAOC,QAAUkE,C,sBCHjB,IAAIR,EAAS,EAAQ,KAGjBU,EAAcrD,OAAO1F,UAGrB2F,EAAiBoD,EAAYpD,eAO7BqD,EAAuBD,EAAYE,SAGnCT,EAAiBH,EAASA,EAAOI,iBAAcpO,EA6BnDqK,EAAOC,QApBP,SAAmBhL,GACjB,IAAIuP,EAAQvD,EAAenG,KAAK7F,EAAO6O,GACnCW,EAAMxP,EAAM6O,GAEhB,IACE7O,EAAM6O,QAAkBnO,EACxB,IAAI+O,GAAW,CACjB,CAAE,MAAOC,GAAI,CAEb,IAAIC,EAASN,EAAqBxJ,KAAK7F,GAQvC,OAPIyP,IACEF,EACFvP,EAAM6O,GAAkBW,SAEjBxP,EAAM6O,IAGVc,CACT,C,kBC1CA,IAOIN,EAPctD,OAAO1F,UAOciJ,SAavCvE,EAAOC,QAJP,SAAwBhL,GACtB,OAAOqP,EAAqBxJ,KAAK7F,EACnC,C,sBCnBA,IAAIkP,EAAa,EAAQ,KAGrBU,EAA0B,iBAARC,MAAoBA,MAAQA,KAAK9D,SAAWA,QAAU8D,KAGxEC,EAAOZ,GAAcU,GAAYG,SAAS,cAATA,GAErChF,EAAOC,QAAU8E,C,kBCPjB,IAAIE,EAAe,KAiBnBjF,EAAOC,QAPP,SAAyBiE,GAGvB,IAFA,IAAIgB,EAAQhB,EAAO1O,OAEZ0P,KAAWD,EAAajG,KAAKkF,EAAOiB,OAAOD,MAClD,OAAOA,CACT,C,sBChBA,IAAIE,EAAW,EAAQ,KACnBjP,EAAM,EAAQ,KACdkP,EAAW,EAAQ,KAMnBC,EAAYlN,KAAKmN,IACjBC,EAAYpN,KAAKE,IAqLrB0H,EAAOC,QA7HP,SAAkBwF,EAAMC,EAAMC,GAC5B,IAAIC,EACAC,EACAC,EACAlB,EACAmB,EACAC,EACAC,EAAiB,EACjBC,GAAU,EACVC,GAAS,EACTC,GAAW,EAEf,GAAmB,mBAARX,EACT,MAAM,IAAIpF,UAzEQ,uBAmFpB,SAASgG,EAAW9P,GAClB,IAAIsI,EAAO+G,EACPU,EAAUT,EAKd,OAHAD,EAAWC,OAAWlQ,EACtBsQ,EAAiB1P,EACjBqO,EAASa,EAAKrC,MAAMkD,EAASzH,EAE/B,CAqBA,SAAS0H,EAAahQ,GACpB,IAAIiQ,EAAoBjQ,EAAOyP,EAM/B,YAAyBrQ,IAAjBqQ,GAA+BQ,GAAqBd,GACzDc,EAAoB,GAAOL,GANJ5P,EAAO0P,GAM8BH,CACjE,CAEA,SAASW,IACP,IAAIlQ,EAAOJ,IACX,GAAIoQ,EAAahQ,GACf,OAAOmQ,EAAanQ,GAGtBwP,EAAU/N,WAAWyO,EA3BvB,SAAuBlQ,GACrB,IAEIoQ,EAAcjB,GAFMnP,EAAOyP,GAI/B,OAAOG,EACHX,EAAUmB,EAAab,GAJDvP,EAAO0P,IAK7BU,CACN,CAmBqCC,CAAcrQ,GACnD,CAEA,SAASmQ,EAAanQ,GAKpB,OAJAwP,OAAUpQ,EAINyQ,GAAYR,EACPS,EAAW9P,IAEpBqP,EAAWC,OAAWlQ,EACfiP,EACT,CAcA,SAASiC,IACP,IAAItQ,EAAOJ,IACP2Q,EAAaP,EAAahQ,GAM9B,GAJAqP,EAAW1C,UACX2C,EAAW9P,KACXiQ,EAAezP,EAEXuQ,EAAY,CACd,QAAgBnR,IAAZoQ,EACF,OAzEN,SAAqBxP,GAMnB,OAJA0P,EAAiB1P,EAEjBwP,EAAU/N,WAAWyO,EAAcf,GAE5BQ,EAAUG,EAAW9P,GAAQqO,CACtC,CAkEamC,CAAYf,GAErB,GAAIG,EAIF,OAFArO,aAAaiO,GACbA,EAAU/N,WAAWyO,EAAcf,GAC5BW,EAAWL,EAEtB,CAIA,YAHgBrQ,IAAZoQ,IACFA,EAAU/N,WAAWyO,EAAcf,IAE9Bd,CACT,CAGA,OA3GAc,EAAOL,EAASK,IAAS,EACrBN,EAASO,KACXO,IAAYP,EAAQO,QAEpBJ,GADAK,EAAS,YAAaR,GACHL,EAAUD,EAASM,EAAQG,UAAY,EAAGJ,GAAQI,EACrEM,EAAW,aAAcT,IAAYA,EAAQS,SAAWA,GAoG1DS,EAAUG,OApCV,gBACkBrR,IAAZoQ,GACFjO,aAAaiO,GAEfE,EAAiB,EACjBL,EAAWI,EAAeH,EAAWE,OAAUpQ,CACjD,EA+BAkR,EAAUI,MA7BV,WACE,YAAmBtR,IAAZoQ,EAAwBnB,EAAS8B,EAAavQ,IACvD,EA4BO0Q,CACT,C,kBC9JA7G,EAAOC,QALP,SAAkBhL,GAChB,IAAI2G,SAAc3G,EAClB,OAAgB,MAATA,IAA0B,UAAR2G,GAA4B,YAARA,EAC/C,C,kBCAAoE,EAAOC,QAJP,SAAsBhL,GACpB,OAAgB,MAATA,GAAiC,iBAATA,CACjC,C,sBC1BA,IAAIiS,EAAa,EAAQ,KACrBC,EAAe,EAAQ,KA2B3BnH,EAAOC,QALP,SAAkBhL,GAChB,MAAuB,iBAATA,GACXkS,EAAalS,IArBF,mBAqBYiS,EAAWjS,EACvC,C,sBC1BA,IAAI8P,EAAO,EAAQ,KAsBnB/E,EAAOC,QAJG,WACR,OAAO8E,EAAK7O,KAAKC,KACnB,C,sBCpBA,IAAIiR,EAAW,EAAQ,KACnBhC,EAAW,EAAQ,KAmEvBpF,EAAOC,QAlBP,SAAkBwF,EAAMC,EAAMC,GAC5B,IAAIO,GAAU,EACVE,GAAW,EAEf,GAAmB,mBAARX,EACT,MAAM,IAAIpF,UAnDQ,uBAyDpB,OAJI+E,EAASO,KACXO,EAAU,YAAaP,IAAYA,EAAQO,QAAUA,EACrDE,EAAW,aAAcT,IAAYA,EAAQS,SAAWA,GAEnDgB,EAAS3B,EAAMC,EAAM,CAC1B,QAAWQ,EACX,QAAWR,EACX,SAAYU,GAEhB,C,sBClEA,IAAIiB,EAAW,EAAQ,KACnBjC,EAAW,EAAQ,KACnBkC,EAAW,EAAQ,KAMnBC,EAAa,qBAGbC,EAAa,aAGbC,EAAY,cAGZC,EAAeC,SA8CnB3H,EAAOC,QArBP,SAAkBhL,GAChB,GAAoB,iBAATA,EACT,OAAOA,EAET,GAAIqS,EAASrS,GACX,OA1CM,IA4CR,GAAImQ,EAASnQ,GAAQ,CACnB,IAAI2S,EAAgC,mBAAjB3S,EAAM4S,QAAwB5S,EAAM4S,UAAY5S,EACnEA,EAAQmQ,EAASwC,GAAUA,EAAQ,GAAMA,CAC3C,CACA,GAAoB,iBAAT3S,EACT,OAAiB,IAAVA,EAAcA,GAASA,EAEhCA,EAAQoS,EAASpS,GACjB,IAAI6S,EAAWN,EAAWxI,KAAK/J,GAC/B,OAAQ6S,GAAYL,EAAUzI,KAAK/J,GAC/ByS,EAAazS,EAAMgE,MAAM,GAAI6O,EAAW,EAAI,GAC3CP,EAAWvI,KAAK/J,GAvDb,KAuD6BA,CACvC,C,qBC7DA,IAAI8S,EAAW,EAAQ,KACnBC,EAAkB,WAatBhI,EAAOC,QAAU,SAASgI,EAAQC,GAChC,SAASlJ,EAAKkJ,GACZ,IAAItD,EAASmD,EAASG,EAASD,EAAQD,GAGvC,OAAOpD,GAAUA,EAAOpP,QAAU,CACpC,CAEA,OAAO0S,EAAUlJ,EAAKkJ,EAAQC,MAAM,KAAK,IAAMnJ,CACjD,C,kBCTAgB,EAAOC,QAAU,WACf,IAAIwB,EAAU,CAAC,EACX2G,EAAO3G,EAAQ2G,KAAO,CAAC,EAsH3B,OA1GA3G,EAAQkB,KAAO,SAAenH,EAAO6M,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,GACjE,IAAIC,EAsEN,SAAuBhE,GASrB,IARA,IAAIiE,EAAMR,EAAKzD,GAAKyD,EAAKzD,GAAK,GAC1BkE,EAAMlE,EAAEzL,QAAQ,KAChB2F,GAAiB,IAATgK,EAAc,CAAClE,GAAK,CAACA,EAAEmE,UAAU,EAAGD,GAAMlE,EAAEmE,UAAUD,EAAM,IAEpEE,EAAO/H,OAAO+H,KAAKX,GACnB7S,EAAI,EACJgN,EAAIwG,EAAKvT,OAELD,EAAIgN,EAAGhN,IAAK,CAClB,IAAIyH,EAAM+L,EAAKxT,GAKf,GAJY,MAARyH,IACF4L,EAAMA,EAAIxG,OAAOgG,EAAKpL,KAGJ,IAAhB6B,EAAKrJ,QAAgBqJ,EAAK,KAAO7B,EAAK,CACxC4L,EAAMA,EAAIxG,OAAOgG,EAAKpL,IACtB,KACF,CACF,CAEA,OAAO4L,CACT,CA5FeI,CAAaxN,GAEtBmN,EAAOnT,QA4Fb,SAAkBmP,EAAGsE,EAAKpK,GAIxB,IAHA,IAAItJ,EAAI,EACJgN,EAAI0G,EAAIzT,OAEJD,EAAIgN,GACL0G,EAAI1T,GADIA,IAEb0T,EAAI1T,GAAGiG,MAAQmJ,EACfsE,EAAI1T,GAAG6N,MAAM6F,EAAI1T,GAAIsJ,EAEzB,CApGIqK,CAAQ1N,EAAOmN,EAAQ,CAACN,EAAMC,EAAMC,EAAMC,EAAMC,EAAMC,GAE1D,EAWAjH,EAAQ6B,GAAK,SAAa9H,EAAO6F,GAC1B+G,EAAK5M,KACR4M,EAAK5M,GAAS,IAGhB4M,EAAK5M,GAAOvF,KAAKoL,EACnB,EAWAI,EAAQF,KAAO,SAAe/F,EAAO6F,GAKnCtL,KAAKuN,GAAG9H,EAJR,SAAS2N,IACP9H,EAAG+B,MAAMrN,KAAMmN,WACfzB,EAAQ+B,IAAIhI,EAAO2N,EACrB,EAEF,EAaA1H,EAAQ+B,IAAM,SAAchI,EAAO6F,GACjC,IAAI+H,EAAO,GAEX,GAAI5N,GAAS6F,EAKX,IAJA,IAAI4H,EAAMlT,KAAKqS,KAAK5M,GAChBjG,EAAI,EACJgN,EAAI0G,EAAMA,EAAIzT,OAAS,EAEnBD,EAAIgN,EAAGhN,IACT0T,EAAI1T,KAAO8L,GACb+H,EAAKnT,KAAKgT,EAAI1T,IAKpB6T,EAAK5T,OAASO,KAAKqS,KAAK5M,GAAS4N,SAAcrT,KAAKqS,KAAK5M,EAC3D,EAqCOiG,CACT,C,+BCzGA,SAAS4H,EAAgBC,EAAMC,GAC7BxT,KAAKuT,KAAOA,EAAOA,GAAQ,GAC3BvT,KAAKyT,SAAWF,EAAKpQ,QAAQ,KAC7BnD,KAAKwT,UAAYA,EACjBxT,KAAK0T,MAAQH,EAAKnB,MAAMoB,EAC1B,CAEAF,EAAgB/N,UAAUoO,MAAQ,SAASxJ,GACzC,IAEIyJ,EAEAC,EAJAC,GAAU,EACVJ,EAAQ1T,KAAK0T,MAEbK,EAAaL,EAAMjU,OAGvB,GAAoB,iBAAT0K,GAAqBA,aAAiB6J,OAC/C,GAAKhU,KAAKyT,SAAWzT,KAAKuT,MAAQpJ,EAE3B,CAEL,IADA0J,GAAa1J,GAAS,IAAIiI,MAAMpS,KAAKwT,WAChCI,EAAK,EAAGE,GAAWF,EAAKG,EAAYH,IACrB,MAAdF,EAAME,KAGRE,EADSF,EAAKC,EAAUpU,QACdiU,EAAME,KAAQC,EAAUD,IAOtCE,EAAUA,GAAWD,CACvB,MAfEC,GAAU,OAiBT,GAA2B,mBAAhB3J,EAAM8J,OAGpB,IAFAH,EAAU,GAELF,EAAKzJ,EAAM1K,OAAQmU,KAClB5T,KAAK2T,MAAMxJ,EAAMyJ,MACnBE,EAAQA,EAAQrU,QAAU0K,EAAMyJ,SAIjC,GAAoB,iBAATzJ,EAGd,IAAK,IAAIlD,KAFT6M,EAAU,CAAC,EAEK3J,EACVnK,KAAK2T,MAAM1M,KACb6M,EAAQ7M,GAAOkD,EAAMlD,IAK3B,OAAO6M,CACT,EAEA7J,EAAOC,QAAU,SAASqJ,EAAMtK,EAAMuK,GACpC,IAAIU,EAAU,IAAIZ,EAAgBC,EAAMC,GAAa,UACrD,YAAmB,IAARvK,EACFiL,EAAQP,MAAM1K,GAGhBiL,CACT,C,oBC5FA,OAOC,WACA,aAEA,IAAIC,EAAS,CAAC,EAAEjJ,eAEhB,SAASkJ,IAGR,IAFA,IAAIC,EAAU,GAEL7U,EAAI,EAAGA,EAAI2N,UAAU1N,OAAQD,IAAK,CAC1C,IAAI8U,EAAMnH,UAAU3N,GAChB8U,IACHD,EAAUE,EAAYF,EAASG,EAAWF,IAE5C,CAEA,OAAOD,CACR,CAEA,SAASG,EAAYF,GACpB,GAAmB,iBAARA,GAAmC,iBAARA,EACrC,OAAOA,EAGR,GAAmB,iBAARA,EACV,MAAO,GAGR,GAAI5H,MAAM+H,QAAQH,GACjB,OAAOF,EAAW/G,MAAM,KAAMiH,GAG/B,GAAIA,EAAI9F,WAAavD,OAAO1F,UAAUiJ,WAAa8F,EAAI9F,SAASA,WAAWkG,SAAS,iBACnF,OAAOJ,EAAI9F,WAGZ,IAAI6F,EAAU,GAEd,IAAK,IAAIpN,KAAOqN,EACXH,EAAOpP,KAAKuP,EAAKrN,IAAQqN,EAAIrN,KAChCoN,EAAUE,EAAYF,EAASpN,IAIjC,OAAOoN,CACR,CAEA,SAASE,EAAarV,EAAOyV,GAC5B,OAAKA,EAIDzV,EACIA,EAAQ,IAAMyV,EAGfzV,EAAQyV,EAPPzV,CAQT,CAEqC+K,EAAOC,SAC3CkK,EAAWQ,QAAUR,EACrBnK,EAAOC,QAAUkK,QAKhB,KAFwB,EAAF,WACtB,OAAOA,CACP,UAFoB,OAEpB,YAIH,CArEA,E,GCNIS,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBnV,IAAjBoV,EACH,OAAOA,EAAa9K,QAGrB,IAAID,EAAS4K,EAAyBE,GAAY,CAGjD7K,QAAS,CAAC,GAOX,OAHA+K,EAAoBF,GAAU9K,EAAQA,EAAOC,QAAS4K,GAG/C7K,EAAOC,OACf,CCrBA4K,EAAoBI,EAAI,SAAShL,EAASiL,GACzC,IAAI,IAAIlO,KAAOkO,EACXL,EAAoBM,EAAED,EAAYlO,KAAS6N,EAAoBM,EAAElL,EAASjD,IAC5EgE,OAAOoK,eAAenL,EAASjD,EAAK,CAAEqO,YAAY,EAAMC,IAAKJ,EAAWlO,IAG3E,ECPA6N,EAAoBzG,EAAI,WACvB,GAA0B,iBAAfmH,WAAyB,OAAOA,WAC3C,IACC,OAAOxV,MAAQ,IAAIiP,SAAS,cAAb,EAChB,CAAE,MAAOL,GACR,GAAsB,iBAAXlQ,OAAqB,OAAOA,MACxC,CACA,CAPuB,GCAxBoW,EAAoBM,EAAI,SAASK,EAAKC,GAAQ,OAAOzK,OAAO1F,UAAU2F,eAAenG,KAAK0Q,EAAKC,EAAO,E,yBCItG,WACI,QAAuB9V,IAAnBlB,OAAOiX,cACmB/V,IAA1BlB,OAAOkX,gBACPlX,OAAOkX,eAAeC,0BACtB,OAEJ,MAAMC,EAAqBC,YAM3BrX,OAAOqX,YAJU,WACT,OAAOJ,QAAQK,UAAUF,EAAoB,GAAI9V,KAAKU,YAC1D,EAGJqV,YAAYxQ,UAAYuQ,EAAmBvQ,UAC3CwQ,YAAYxQ,UAAU7E,YAAcqV,YACpC9K,OAAOgL,eAAeF,YAAaD,EACtC,CAhBD,GA0CA,SAAUvQ,GAuBR,SAAS2Q,EAAMC,EAAkB3Q,EAASzG,GACxC,MAAM,IAAIoX,EAAiB,2DAA6D3Q,EAAU,IAAKzG,EACzG,CAxBsC,mBAA3BwG,EAAU6Q,gBAErB7Q,EAAU6Q,cAAgB,SAASC,GAC7BA,GAaN,SAA2BA,EAAWC,GACpCD,aAAqBN,aAAeG,EAAM5L,UAAW,4CACnC,UAAlB+L,EAAUxQ,MAAoBqQ,EAAM5L,UAAW,gDAC/C+L,EAAUC,MAAQA,GAAQJ,EAAMK,aAAc,0DAA2D,gBAC3G,CAhBIC,CAAkBH,EAAWrW,MAC7BqW,EAAUI,WAEVJ,EAAYrX,SAASmK,cAAc,UACzBtD,KAAO,SACjBwQ,EAAUK,QAAS,EACnB1W,KAAK2W,YAAYN,GACjBA,EAAUI,QACVzW,KAAK4W,YAAYP,GAErB,EAWD,CA1BD,CA0BGQ,gBAAgBtR,WAEnB,MAAMuR,EAAmB,IAAIC,QAM7B,SAASC,EAAcvR,GACnB,MAAM4Q,EANV,SAAsCnE,GAClC,MAAMvI,EAAUuI,aAAkB+E,QAAU/E,EAASA,aAAkBgF,KAAOhF,EAAOiF,cAAgB,KAC/FC,EAAYzN,EAAUA,EAAQ0N,QAAQ,iBAAmB,KAC/D,MAAiF,WAAzED,aAAkD,EAAIA,EAAUvR,MAAoBuR,EAAY,IAC5G,CAEsBE,CAA6B7R,EAAMyM,QACjDmE,GAAaA,EAAUC,MACvBQ,EAAiBS,IAAIlB,EAAUC,KAAMD,EAE7C,CAqBA,IAAImB,EA0WAC,EA0LAC,EASAC,EAigCAC,EAOAC,GAzkDJ,WACI,GAAI,cAAeC,MAAMvS,UACrB,OACJ,IAAIA,EAAY7G,OAAOoZ,MAAMvS,UAC7B,GAAI,gBAAiB7G,QAAU,iBAAiBuK,KAAK8O,UAAUC,QAC3DzS,EAAY7G,OAAOuZ,YAAY1S,eAE9B,GAAI,gBAAiB7G,OACtB,OAEJ0C,iBAAiB,QAAS4V,GAAe,GACzC/L,OAAOoK,eAAe9P,EAAW,YAAa,CAC1C,GAAAgQ,GACI,GAAiB,UAAbvV,KAAK6F,MAAoB7F,KAAKkS,kBAAkB2E,gBAChD,OAAOC,EAAiBvB,IAAIvV,KAAKkS,OAEzC,GAEP,CAlBD,GAqBA,SAAWsF,GACPA,EAAyB,MAAI,QAC7BA,EAAwB,KAAI,MAC/B,CAHD,CAGGA,IAAsBA,EAAoB,CAAC,IAC9C,MAAMU,UAAqBnC,YACvB,6BAAWoC,GACP,MAAO,CAAC,WAAY,WAAY,UAAW,MAC/C,CACA,WAAAzX,GACI0X,QACApY,KAAKqY,OAASC,QAAQC,UACtBvY,KAAKwY,SAAW,IAAIN,EAAaO,oBAAoBzY,KACzD,CACA,iBAAA0Y,GACI1Y,KAAKwY,SAASjP,SAClB,CACA,oBAAAoP,GACI3Y,KAAKwY,SAAStS,YAClB,CACA,MAAAD,GACI,OAAOjG,KAAKwY,SAASI,mBACzB,CACA,wBAAAC,CAAyB9Z,GACT,WAARA,EACAiB,KAAKwY,SAASM,sBAED,YAAR/Z,EACLiB,KAAKwY,SAASO,kBAED,OAARha,EACLiB,KAAKwY,SAASQ,mBAGdhZ,KAAKwY,SAASS,iBAEtB,CACA,OAAIC,GACA,OAAOlZ,KAAK8J,aAAa,MAC7B,CACA,OAAIoP,CAAIha,GACAA,EACAc,KAAKmZ,aAAa,MAAOja,GAGzBc,KAAKoZ,gBAAgB,MAE7B,CACA,WAAIC,GACA,MA6CK,UA7C8BrZ,KAAK8J,aAAa,YAAc,IA4CzD3E,cAECqS,EAAkB8B,KAElB9B,EAAkB+B,KA/CjC,CACA,WAAIF,CAAQna,GACJA,EACAc,KAAKmZ,aAAa,UAAWja,GAG7Bc,KAAKoZ,gBAAgB,UAE7B,CACA,YAAII,GACA,OAAOxZ,KAAKyZ,aAAa,WAC7B,CACA,YAAID,CAASta,GACLA,EACAc,KAAKmZ,aAAa,WAAY,IAG9BnZ,KAAKoZ,gBAAgB,WAE7B,CACA,cAAIM,GACA,OAAO1Z,KAAKyZ,aAAa,aAC7B,CACA,cAAIC,CAAWxa,GACPA,EACAc,KAAKmZ,aAAa,aAAc,IAGhCnZ,KAAKoZ,gBAAgB,aAE7B,CACA,YAAIO,GACA,OAAQ3Z,KAAKwY,SAASoB,SAC1B,CACA,YAAI7V,GACA,OAAO/D,KAAK6Z,gBAAkB7a,WAAagB,KAAK8Z,SACpD,CACA,aAAIA,GACA,IAAIC,EAAIC,EACR,OAAoG,QAA5FA,EAAmC,QAA7BD,EAAK/Z,KAAK6Z,qBAAuC,IAAZE,OAAqB,EAAIA,EAAGE,uBAAyC,IAAZD,OAAqB,EAAIA,EAAGP,aAAa,qBACzJ,EAWJ,SAASS,EAAUC,GACf,OAAO,IAAIC,IAAID,EAAU3L,WAAYxP,SAASqb,QAClD,CACA,SAASC,EAAUlW,GACf,IAAImW,EACJ,OAAInW,EAAIoW,KACGpW,EAAIoW,KAAKtX,MAAM,IAEhBqX,EAAcnW,EAAIgF,KAAKuK,MAAM,WAC5B4G,EAAY,QADlB,CAGT,CACA,SAASE,EAAUnE,EAAMD,GAErB,OAAO6D,GADS7D,aAAkD,EAAIA,EAAUvM,aAAa,gBAAkBwM,EAAKxM,aAAa,WAAawM,EAAKlP,OAEvJ,CAWA,SAASsT,EAAoBC,EAAUC,GACnC,OALJ,SAAsBC,EAASzW,GAC3B,MAAM+G,EAsBV,SAAmB/G,GACf,OAEsBlF,EAFEkF,EAAI0W,OAAS1W,EAAI2W,UAG5BC,SAAS,KAAO9b,EAAQA,EAAQ,IADjD,IAA0BA,CAD1B,CAxBmB+b,CAAU7W,GACzB,OAAOyW,EAAQzR,OAAS8Q,EAAU/O,GAAQ/B,MAAQyR,EAAQzR,KAAK8R,WAAW/P,EAC9E,CAEWgQ,CAAaR,EAAUC,OAXZxW,EAWoCuW,GAe1D,SAA8BvW,GAC1B,OAJJ,SAA2BA,GACvB,OAAOA,EAAI2W,SAAS3I,MAAM,KAAKlP,MAAM,EACzC,CAEWkY,CAAkBhX,GAAKlB,OAAO,GAAG,EAC5C,CA3BYmY,CAAqBjX,GAAKuP,MAAM,aAAe,IAAI,IAAM,IAGtCA,MAAM,mCAJrC,IAAsBvP,CAYtB,CACA,SAASkX,EAAclX,GACnB,MAAMmX,EAASjB,EAAUlW,GACzB,OAAiB,MAAVmX,EAAiBnX,EAAIgF,KAAKlG,MAAM,IAAKqY,EAAO9b,OAAS,IAAM2E,EAAIgF,IAC1E,CACA,SAASoS,EAAWpX,GAChB,OAAOkX,EAAclX,EACzB,CAiBA,MAAMqX,EACF,WAAA/a,CAAYgb,GACR1b,KAAK0b,SAAWA,CACpB,CACA,aAAIC,GACA,OAAO3b,KAAK0b,SAASE,EACzB,CACA,UAAIC,GACA,OAAQ7b,KAAK2b,SACjB,CACA,eAAIG,GACA,OAAO9b,KAAK+b,YAAc,KAAO/b,KAAK+b,YAAc,GACxD,CACA,eAAIC,GACA,OAAOhc,KAAK+b,YAAc,KAAO/b,KAAK+b,YAAc,GACxD,CACA,cAAIE,GACA,OAAOjc,KAAK0b,SAASO,UACzB,CACA,YAAItB,GACA,OAAOT,EAAUla,KAAK0b,SAAStX,IACnC,CACA,UAAI8X,GACA,OAAOlc,KAAKmc,aAAenc,KAAKmc,YAAYxI,MAAM,yDACtD,CACA,cAAIoI,GACA,OAAO/b,KAAK0b,SAASU,MACzB,CACA,eAAID,GACA,OAAOnc,KAAKqc,OAAO,eACvB,CACA,gBAAIC,GACA,OAAOtc,KAAK0b,SAASa,QAAQhJ,MACjC,CACA,gBAAIiJ,GACA,OAAIxc,KAAKkc,OACElc,KAAK0b,SAASa,QAAQhJ,OAGtB+E,QAAQC,aAAQ3Y,EAE/B,CACA,MAAAyc,CAAOtd,GACH,OAAOiB,KAAK0b,SAASe,QAAQlH,IAAIxW,EACrC,EAGJ,SAAS2d,EAAsB/S,GAC3B,GAA+C,SAA3CA,EAAQG,aAAa,mBACrB,OAAOH,EAEN,CACD,MAAMgT,EAAuB3d,SAASmK,cAAc,UAC9CyT,EAAWC,EAAe,aAOhC,OANID,IACAD,EAAqBG,MAAQF,GAEjCD,EAAqBI,YAAcpT,EAAQoT,YAC3CJ,EAAqBK,OAAQ,EAKrC,SAA+BC,EAAoBC,GAC/C,IAAK,MAAM,KAAEne,EAAI,MAAEG,KAAWge,EAAcC,WACxCF,EAAmB9D,aAAapa,EAAMG,EAE9C,CARQke,CAAsBT,EAAsBhT,GACrCgT,CACX,CACJ,CAWA,SAASU,EAASjY,GAAW,OAAE8M,EAAM,WAAEoL,EAAU,OAAEC,GAAW,CAAC,GAC3D,MAAM9X,EAAQ,IAAI+X,YAAYpY,EAAW,CACrCkY,aACAG,SAAS,EACTC,UAAU,EACVH,WAQJ,OANIrL,GAAUA,EAAOyL,YACjBzL,EAAO0L,cAAcnY,GAGrBzG,SAASib,gBAAgB2D,cAAcnY,GAEpCA,CACX,CACA,SAASoY,IACL,OAAO,IAAIvF,QAASC,GAAYuF,sBAAsB,IAAMvF,KAChE,CAOA,SAASwF,EAAkBC,EAAO,IAC9B,OAAO,IAAIC,WAAYC,gBAAgBF,EAAM,YACjD,CACA,SAASG,EAASC,KAAYC,GAC1B,MAAMC,EAKV,SAAqBF,EAASC,GAC1B,OAAOD,EAAQG,OAAO,CAAC1P,EAAQV,EAAQ3O,IAE5BqP,EAASV,GADWvO,MAAbye,EAAO7e,GAAkB,GAAK6e,EAAO7e,IAEpD,GACP,CAVkBgf,CAAYJ,EAASC,GAAQhV,QAAQ,MAAO,IAAI+I,MAAM,MAC9DuB,EAAQ2K,EAAM,GAAG3K,MAAM,QACvB8K,EAAS9K,EAAQA,EAAM,GAAGlU,OAAS,EACzC,OAAO6e,EAAMpW,IAAKwW,GAASA,EAAKxb,MAAMub,IAASE,KAAK,KACxD,CAOA,SAASC,IACL,OAAOlS,MAAMmS,KAAK,CAAEpf,OAAQ,KACvByI,IAAI,CAAC4W,EAAGtf,IACA,GAALA,GAAe,IAALA,GAAgB,IAALA,GAAgB,IAALA,EACzB,IAEG,IAALA,EACE,IAEG,IAALA,GACG6C,KAAKuI,MAAsB,EAAhBvI,KAAKG,UAAgB,GAAGgM,SAAS,IAG7CnM,KAAKuI,MAAsB,GAAhBvI,KAAKG,UAAegM,SAAS,KAGlDmQ,KAAK,GACd,CACA,SAAS7U,EAAaiV,KAAkBC,GACpC,IAAK,MAAM9f,KAAS8f,EAAS9W,IAAKyB,GAAYA,aAA8C,EAAIA,EAAQG,aAAaiV,IACjH,GAAoB,iBAAT7f,EACP,OAAOA,EAEf,OAAO,IACX,CAIA,SAAS+f,KAAcD,GACnB,IAAK,MAAMrV,KAAWqV,EACO,eAArBrV,EAAQuV,WACRvV,EAAQwP,aAAa,OAAQ,IAEjCxP,EAAQwP,aAAa,YAAa,OAE1C,CACA,SAASgG,KAAkBH,GACvB,IAAK,MAAMrV,KAAWqV,EACO,eAArBrV,EAAQuV,WACRvV,EAAQyP,gBAAgB,QAE5BzP,EAAQyP,gBAAgB,YAEhC,CACA,SAASgG,EAAYzV,EAAS0V,EAAwB,KAClD,OAAO,IAAI/G,QAASC,IAChB,MAAM+G,EAAa,KACf3V,EAAQnI,oBAAoB,QAAS8d,GACrC3V,EAAQnI,oBAAoB,OAAQ8d,GACpC/G,KAEJ5O,EAAQvI,iBAAiB,OAAQke,EAAY,CAAE9T,MAAM,IACrD7B,EAAQvI,iBAAiB,QAASke,EAAY,CAAE9T,MAAM,IACtDvJ,WAAWsW,EAAS8G,IAE5B,CACA,SAASE,EAA0BnY,GAC/B,OAAQA,GACJ,IAAK,UACD,OAAOoY,QAAQC,aACnB,IAAK,UACL,IAAK,UACD,OAAOD,QAAQE,UAE3B,CAIA,SAASC,KAAkBX,GACvB,MAAM5X,EAAS0C,EAAa,uBAAwBkV,GACpD,OALJ,SAAkB5X,GACd,MAAiB,WAAVA,GAAiC,WAAVA,GAAiC,WAAVA,CACzD,CAGWwY,CAASxY,GAAUA,EAAS,IACvC,CACA,SAASyY,EAAe9gB,GACpB,OAAOC,SAAS6K,cAAc,cAAc9K,MAChD,CACA,SAAS8d,EAAe9d,GACpB,MAAM4K,EAAUkW,EAAe9gB,GAC/B,OAAO4K,GAAWA,EAAQmW,OAC9B,CAWA,SAASC,EAAuBpW,EAASqW,GACrC,IAAIjG,EACJ,GAAIpQ,aAAmBsN,QACnB,OAAQtN,EAAQ0N,QAAQ2I,IACpBD,EAAuBpW,EAAQsW,eAAkD,QAAhClG,EAAKpQ,EAAQuW,qBAAuC,IAAZnG,OAAqB,EAAIA,EAAGoG,MAAOH,EAExI,EAGA,SAAWvI,GACPA,EAAYA,EAAiB,IAAI,GAAK,MACtCA,EAAYA,EAAkB,KAAI,GAAK,OACvCA,EAAYA,EAAiB,IAAI,GAAK,MACtCA,EAAYA,EAAmB,MAAI,GAAK,QACxCA,EAAYA,EAAoB,OAAI,GAAK,QAC5C,CAND,CAMGA,IAAgBA,EAAc,CAAC,IAelC,MAAM2I,EACF,WAAA1f,CAAY8X,EAAU6H,EAAQ1F,EAAU2F,EAAO,IAAIC,gBAAmBrO,EAAS,MAC3ElS,KAAKwgB,gBAAkB,IAAIC,gBAC3BzgB,KAAK0gB,sBAAyBC,MAC9B3gB,KAAKwY,SAAWA,EAChBxY,KAAKqgB,OAASA,EACdrgB,KAAKyc,QAAUzc,KAAK4gB,eACpB5gB,KAAKsgB,KAAOA,EACZtgB,KAAKoE,IAAMuW,EACX3a,KAAKkS,OAASA,CAClB,CACA,YAAIyI,GACA,OAAO3a,KAAKoE,GAChB,CACA,UAAIyC,GACA,OAAO7G,KAAKoE,IAAIyc,YACpB,CACA,WAAIC,GACA,OAAO9gB,KAAKsgB,KAAO5T,MAAMmS,KAAK7e,KAAKsgB,KAAKQ,WAAa,EACzD,CACA,MAAA7P,GACIjR,KAAKwgB,gBAAgBO,OACzB,CACA,aAAM5Z,GACF,MAAM,aAAE6Z,GAAiBhhB,KACzBA,KAAKwY,SAASyI,eAAejhB,YACvBA,KAAKkhB,4BAA4BF,GACvC,IACIhhB,KAAKwY,SAAS2I,eAAenhB,MAC7B,MAAM0b,QAAiB0F,MAAMphB,KAAKoE,IAAIgF,KAAM4X,GAC5C,aAAahhB,KAAKqhB,QAAQ3F,EAC9B,CACA,MAAOlX,GACH,GAAmB,eAAfA,EAAMzF,KAIN,MAHIiB,KAAKshB,0BAA0B9c,IAC/BxE,KAAKwY,SAAS+I,eAAevhB,KAAMwE,GAEjCA,CAEd,CACA,QACIxE,KAAKwY,SAASgJ,gBAAgBxhB,KAClC,CACJ,CACA,aAAMqhB,CAAQ3F,GACV,MAAM+F,EAAgB,IAAIhG,EAAcC,GAexC,OAdc2B,EAAS,8BAA+B,CAClDC,YAAY,EACZC,OAAQ,CAAEkE,iBACVvP,OAAQlS,KAAKkS,SAEPwP,iBACN1hB,KAAKwY,SAASmJ,iCAAiC3hB,KAAMyhB,GAEhDA,EAAc9F,UACnB3b,KAAKwY,SAASoJ,6BAA6B5hB,KAAMyhB,GAGjDzhB,KAAKwY,SAASqJ,0BAA0B7hB,KAAMyhB,GAE3CA,CACX,CACA,gBAAIT,GACA,IAAIjH,EACJ,MAAO,CACHsG,OAAQ5I,EAAYzX,KAAKqgB,QAAQyB,cACjCC,YAAa,cACbtF,QAASzc,KAAKyc,QACduF,SAAU,SACV1B,KAAMtgB,KAAKiiB,OAAS,KAAOjiB,KAAKsgB,KAChC4B,OAAQliB,KAAKmiB,YACbC,SAA4C,QAAjCrI,EAAK/Z,KAAKwY,SAAS4J,gBAAkC,IAAZrI,OAAqB,EAAIA,EAAG3Q,KAExF,CACA,kBAAIwX,GACA,MAAO,CACHyB,OAAQ,mCAEhB,CACA,UAAIJ,GACA,OAAOjiB,KAAKqgB,SAAW5I,EAAYlC,GACvC,CACA,eAAI4M,GACA,OAAOniB,KAAKwgB,gBAAgB0B,MAChC,CACA,kBAAAI,CAAmBC,GACfviB,KAAKyc,QAAgB,OAAI,CAAC8F,EAAUviB,KAAKyc,QAAgB,QAAGkC,KAAK,KACrE,CACA,iCAAMuC,CAA4BF,GAC9B,MAAMwB,EAAsB,IAAIlK,QAASC,GAAavY,KAAK0gB,sBAAwBnI,GACrE8E,EAAS,6BAA8B,CACjDC,YAAY,EACZC,OAAQ,CACJyD,eACA5c,IAAKpE,KAAKoE,IACVqe,OAAQziB,KAAK0gB,uBAEjBxO,OAAQlS,KAAKkS,SAEPwP,wBACAc,CACd,CACA,yBAAAlB,CAA0B9c,GAMtB,OALc6Y,EAAS,4BAA6B,CAChDnL,OAAQlS,KAAKkS,OACboL,YAAY,EACZC,OAAQ,CAAEmF,QAAS1iB,KAAMwE,MAAOA,KAEtBkd,gBAClB,EAGJ,MAAMiB,EACF,WAAAjiB,CAAY8X,EAAU7O,GAClB3J,KAAK4iB,SAAU,EACf5iB,KAAK6iB,UAAa/B,IACd,MAAMgC,EAAYhC,EAAQ5d,OAAO,GAAG,IAChC4f,aAAkD,EAAIA,EAAUC,iBAChE/iB,KAAKwY,SAASwK,0BAA0BhjB,KAAK2J,UAGrD3J,KAAKwY,SAAWA,EAChBxY,KAAK2J,QAAUA,EACf3J,KAAKijB,qBAAuB,IAAIC,qBAAqBljB,KAAK6iB,UAC9D,CACA,KAAA9hB,GACSf,KAAK4iB,UACN5iB,KAAK4iB,SAAU,EACf5iB,KAAKijB,qBAAqBE,QAAQnjB,KAAK2J,SAE/C,CACA,IAAArI,GACQtB,KAAK4iB,UACL5iB,KAAK4iB,SAAU,EACf5iB,KAAKijB,qBAAqBG,UAAUpjB,KAAK2J,SAEjD,EAGJ,MAAM0Z,EACF,WAAOC,CAAK9d,GACR,MAAsB,iBAAXA,EACA,IAAIxF,KAjTvB,SAAgCge,GAC5B,MAAMuF,EAAWvkB,SAASmK,cAAc,YAExC,OADAoa,EAASC,UAAYxF,EACduF,EAASzD,OACpB,CA6S4B2D,CAAuBje,IAGhCA,CAEf,CACA,WAAA9E,CAAYgjB,GACR1jB,KAAK0jB,SAIb,SAA8BA,GAC1B,IAAK,MAAM/Z,KAAW+Z,EAASC,iBAAiB,gBAAiB,CAC7D,MAAMC,EAAgB5kB,SAAS6kB,WAAWla,GAAS,GACnD,IAAK,MAAMma,KAAsBF,EAAcG,gBAAgBjE,QAAQ6D,iBAAiB,UACpFG,EAAmBE,YAAYtH,EAAsBoH,IAEzDna,EAAQqa,YAAYJ,EACxB,CACA,OAAOF,CACX,CAbwBO,CAAqBP,EACzC,EAEJL,EAAclH,YAAc,6BAa5B,SAAWzE,GACPA,EAAoBA,EAAiC,YAAI,GAAK,cAC9DA,EAAoBA,EAAgC,WAAI,GAAK,aAC7DA,EAAoBA,EAA6B,QAAI,GAAK,UAC1DA,EAAoBA,EAA+B,UAAI,GAAK,YAC5DA,EAAoBA,EAA8B,SAAI,GAAK,WAC3DA,EAAoBA,EAA6B,QAAI,GAAK,SAC7D,CAPD,CAOGA,IAAwBA,EAAsB,CAAC,IAElD,SAAWC,GACPA,EAAwB,WAAI,oCAC5BA,EAAuB,UAAI,sBAC3BA,EAAmB,MAAI,YAC1B,CAJD,CAIGA,IAAgBA,EAAc,CAAC,IAWlC,MAAMuM,EACF,oBAAOC,CAAc3e,EAAS4e,EAAUC,GACpC,OAAO/L,QAAQC,QAAQ+L,QAAQ9e,GACnC,CACA,WAAA9E,CAAY8X,EAAU+L,EAAalO,EAAWmO,GAAe,GACzDxkB,KAAKiF,MAAQyS,EAAoB+M,YACjCzkB,KAAKwY,SAAWA,EAChBxY,KAAKukB,YAAcA,EACnBvkB,KAAKqW,UAAYA,EACjBrW,KAAK0kB,SA8Jb,SAAuBH,EAAalO,GAChC,MAAMqO,EAAW,IAAIC,SAASJ,GACxBxlB,EAAOsX,aAAkD,EAAIA,EAAUvM,aAAa,QACpF5K,EAAQmX,aAAkD,EAAIA,EAAUvM,aAAa,SAI3F,OAHI/K,GACA2lB,EAASE,OAAO7lB,EAAMG,GAAS,IAE5BwlB,CACX,CAtKwBG,CAAcN,EAAalO,GAC3CrW,KAAK2a,SAAWT,EAAUla,KAAKoH,QAC3BpH,KAAKqgB,QAAU5I,EAAYlC,KAkLvC,SAA8BnR,EAAK0c,GAC/B,MAAMD,EAAe,IAAIN,gBACzB,IAAK,MAAOxhB,EAAMG,KAAU4hB,EACpB5hB,aAAiB4lB,MAErBjE,EAAa+D,OAAO7lB,EAAMG,GAE9BkF,EAAI2gB,OAASlE,EAAarS,UAE9B,CA1LYwW,CAAqBhlB,KAAK2a,SAAU,IAAI3a,KAAKsgB,KAAKQ,YAEtD9gB,KAAKilB,aAAe,IAAI7E,EAAapgB,KAAMA,KAAKqgB,OAAQrgB,KAAK2a,SAAU3a,KAAKsgB,KAAMtgB,KAAKukB,aACvFvkB,KAAKwkB,aAAeA,CACxB,CACA,UAAInE,GACA,IAAItG,EAEJ,OA/NR,SAA+BsG,GAC3B,OAAQA,EAAOlb,eACX,IAAK,MACD,OAAOsS,EAAYlC,IACvB,IAAK,OACD,OAAOkC,EAAYyN,KACvB,IAAK,MACD,OAAOzN,EAAY0N,IACvB,IAAK,QACD,OAAO1N,EAAY2N,MACvB,IAAK,SACD,OAAO3N,EAAY4N,OAE/B,CAkNeC,GADmC,QAAzBvL,EAAK/Z,KAAKqW,iBAAmC,IAAZ0D,OAAqB,EAAIA,EAAGjQ,aAAa,gBAAkB9J,KAAKukB,YAAYza,aAAa,WAAa,IACpH3E,gBAAkBsS,EAAYlC,GACtE,CACA,UAAInO,GACA,IAAI2S,EACJ,MAAMwL,EAAuD,iBAA5BvlB,KAAKukB,YAAYnd,OAAsBpH,KAAKukB,YAAYnd,OAAS,KAClG,OAA8B,QAAzB2S,EAAK/Z,KAAKqW,iBAAmC,IAAZ0D,OAAqB,EAAIA,EAAGN,aAAa,eACpEzZ,KAAKqW,UAAUvM,aAAa,eAAiB,GAG7C9J,KAAKukB,YAAYza,aAAa,WAAayb,GAAqB,EAE/E,CACA,QAAIjF,GACA,OAAItgB,KAAKwlB,SAAW7N,EAAY8N,YAAczlB,KAAKqgB,QAAU5I,EAAYlC,IAC9D,IAAIgL,gBAAgBvgB,KAAK0lB,gBAGzB1lB,KAAK0kB,QAEpB,CACA,WAAIc,GACA,IAAIzL,EACJ,OApDR,SAA+B4L,GAC3B,OAAQA,EAASxgB,eACb,KAAKwS,EAAYiO,UACb,OAAOjO,EAAYiO,UACvB,KAAKjO,EAAYkO,MACb,OAAOlO,EAAYkO,MACvB,QACI,OAAOlO,EAAY8N,WAE/B,CA2CeK,EAAiD,QAAzB/L,EAAK/Z,KAAKqW,iBAAmC,IAAZ0D,OAAqB,EAAIA,EAAGjQ,aAAa,iBAAmB9J,KAAKukB,YAAYiB,QACjJ,CACA,UAAIvD,GACA,OAAOjiB,KAAKilB,aAAahD,MAC7B,CACA,kBAAIyD,GACA,MAAO,IAAI1lB,KAAK0kB,UAAUnG,OAAO,CAACuC,GAAU/hB,EAAMG,KACvC4hB,EAAQzU,OAAuB,iBAATnN,EAAoB,CAAC,CAACH,EAAMG,IAAU,IACpE,GACP,CACA,WAAM6B,GACF,MAAM,YAAE0jB,EAAW,WAAEsB,GAAerO,EAC9BsO,EAAsBlc,EAAa,qBAAsB9J,KAAKqW,UAAWrW,KAAKukB,aACpF,GAAmC,iBAAxByB,SACc9B,EAAeC,cAAc6B,EAAqBhmB,KAAKukB,YAAavkB,KAAKqW,WAKlG,OAAIrW,KAAKiF,OAASwf,GACdzkB,KAAKiF,MAAQ8gB,EACN/lB,KAAKilB,aAAa9d,gBAF7B,CAIJ,CACA,IAAA7F,GACI,MAAM,SAAE2kB,EAAQ,QAAEC,GAAYxO,EAC9B,GAAI1X,KAAKiF,OAASghB,GAAYjmB,KAAKiF,OAASihB,EAGxC,OAFAlmB,KAAKiF,MAAQghB,EACbjmB,KAAKilB,aAAahU,UACX,CAEf,CACA,cAAAgQ,CAAeyB,GACX,IAAKA,EAAQT,OAAQ,CACjB,MAAMkE,EAoGlB,SAAwBC,GACpB,GAAkB,MAAdA,EAAoB,CACpB,MACMC,GADUrnB,SAASqnB,OAASrnB,SAASqnB,OAAOjU,MAAM,MAAQ,IACzCkU,KAAMD,GAAWA,EAAOnL,WAAWkL,IAC1D,GAAIC,EAAQ,CACR,MAAMnnB,EAAQmnB,EAAOjU,MAAM,KAAKlP,MAAM,GAAGyb,KAAK,KAC9C,OAAOzf,EAAQqnB,mBAAmBrnB,QAASU,CAC/C,CACJ,CACJ,CA7G0B4mB,CAAe3J,EAAe,gBAAkBA,EAAe,cACzEsJ,IACAzD,EAAQjG,QAAQ,gBAAkB0J,EAE1C,CACInmB,KAAKymB,kCAAkC/D,IACvCA,EAAQJ,mBAAmBe,EAAclH,YAEjD,CACA,cAAAgF,CAAeuF,GACX,IAAI3M,EACJ/Z,KAAKiF,MAAQyS,EAAoBiP,QACP,QAAzB5M,EAAK/Z,KAAKqW,iBAAmC,IAAZ0D,GAAyBA,EAAGZ,aAAa,WAAY,IACvFnZ,KAAK4mB,iBACLvJ,EAAS,qBAAsB,CAC3BnL,OAAQlS,KAAKukB,YACbhH,OAAQ,CAAEsJ,eAAgB7mB,QAE9BA,KAAKwY,SAASsO,sBAAsB9mB,KACxC,CACA,gCAAA2hB,CAAiCe,EAAShH,GACtC1b,KAAK6O,OAAS,CAAEkY,QAASrL,EAASC,UAAW8F,cAAe/F,EAChE,CACA,4BAAAkG,CAA6Bc,EAAShH,GAClC,GAAIA,EAASI,aAAeJ,EAASM,YACjChc,KAAKwY,SAASwO,iCAAiChnB,KAAM0b,QAEpD,GAAI1b,KAAKinB,oBAAoBvE,IAmF1C,SAA0ChH,GACtC,OAA8B,KAAvBA,EAASK,aAAsBL,EAASO,UACnD,CArFsDiL,CAAiCxL,GAAW,CACtF,MAAMlX,EAAQ,IAAI2iB,MAAM,oDACxBnnB,KAAKwY,SAAS4O,sBAAsBpnB,KAAMwE,EAC9C,MAEIxE,KAAKiF,MAAQyS,EAAoB2P,UACjCrnB,KAAK6O,OAAS,CAAEkY,SAAS,EAAMtF,cAAe/F,GAC9C1b,KAAKwY,SAAS8O,oCAAoCtnB,KAAM0b,EAEhE,CACA,yBAAAmG,CAA0Ba,EAAShH,GAC/B1b,KAAK6O,OAAS,CAAEkY,SAAS,EAAOtF,cAAe/F,GAC/C1b,KAAKwY,SAASwO,iCAAiChnB,KAAM0b,EACzD,CACA,cAAA6F,CAAemB,EAASle,GACpBxE,KAAK6O,OAAS,CAAEkY,SAAS,EAAOviB,SAChCxE,KAAKwY,SAAS4O,sBAAsBpnB,KAAMwE,EAC9C,CACA,eAAAgd,CAAgBkF,GACZ,IAAI3M,EACJ/Z,KAAKiF,MAAQyS,EAAoBwO,QACP,QAAzBnM,EAAK/Z,KAAKqW,iBAAmC,IAAZ0D,GAAyBA,EAAGX,gBAAgB,YAC9EpZ,KAAKunB,qBACLlK,EAAS,mBAAoB,CACzBnL,OAAQlS,KAAKukB,YACbhH,OAAQtS,OAAOuc,OAAO,CAAEX,eAAgB7mB,MAAQA,KAAK6O,UAEzD7O,KAAKwY,SAASiP,uBAAuBznB,KACzC,CACA,cAAA4mB,GACI,GAAK5mB,KAAKqW,WAAcrW,KAAK0nB,YAE7B,GAAI1nB,KAAKqW,UAAUvC,QAAQ,UACvB9T,KAAK2nB,mBAAqB3nB,KAAKqW,UAAUmN,UACzCxjB,KAAKqW,UAAUmN,UAAYxjB,KAAK0nB,iBAE/B,GAAI1nB,KAAKqW,UAAUvC,QAAQ,SAAU,CACtC,MAAM3J,EAAQnK,KAAKqW,UACnBrW,KAAK2nB,mBAAqBxd,EAAMjL,MAChCiL,EAAMjL,MAAQc,KAAK0nB,WACvB,CACJ,CACA,kBAAAH,GACSvnB,KAAKqW,WAAcrW,KAAK2nB,qBAEzB3nB,KAAKqW,UAAUvC,QAAQ,UACvB9T,KAAKqW,UAAUmN,UAAYxjB,KAAK2nB,mBAE3B3nB,KAAKqW,UAAUvC,QAAQ,WACd9T,KAAKqW,UACbnX,MAAQc,KAAK2nB,oBAE3B,CACA,mBAAAV,CAAoBvE,GAChB,OAAQA,EAAQT,QAAUjiB,KAAKwkB,YACnC,CACA,iCAAAiC,CAAkC/D,GAC9B,OAAQA,EAAQT,QA3bxB,SAAsBlD,KAAkBC,GACpC,OAAOA,EAAS4I,KAAMje,GAAYA,GAAWA,EAAQ8P,aAAasF,GACtE,CAybkCtF,CAAa,oBAAqBzZ,KAAKqW,UAAWrW,KAAKukB,YACrF,CACA,eAAImD,GACA,IAAI3N,EACJ,OAAiC,QAAzBA,EAAK/Z,KAAKqW,iBAAmC,IAAZ0D,OAAqB,EAAIA,EAAGjQ,aAAa,0BACtF,EAmCJ,MAAM+d,EACF,WAAAnnB,CAAYiJ,GACR3J,KAAK2J,QAAUA,CACnB,CACA,iBAAIme,GACA,OAAO9nB,KAAK2J,QAAQkQ,cAAciO,aACtC,CACA,YAAIC,GACA,MAAO,IAAI/nB,KAAK2J,QAAQoe,SAC5B,CACA,SAAAC,CAAUzM,GACN,OAA2C,MAApCvb,KAAKioB,oBAAoB1M,EACpC,CACA,mBAAA0M,CAAoB1M,GAChB,OAAOA,EAASvb,KAAK2J,QAAQE,cAAc,QAAQ0R,gBAAqBA,OAAc,IAC1F,CACA,eAAIoC,GACA,OAAO3d,KAAK2J,QAAQgU,WACxB,CACA,6BAAIuK,GAEA,IAAK,MAAMve,KAAW3J,KAAK2J,QAAQga,iBAAiB,eAChD,GAA8C,MAA1Cha,EAAQ0N,QAFc,yEAGtB,OAAO1N,EAIf,OAAO,IACX,CACA,qBAAIwe,GACA,OAAOC,EAA0BpoB,KAAK2J,QAC1C,CACA,uBAAA0e,CAAwBC,GACpB,OAAOD,EAAwBroB,KAAK2J,QAAS2e,EACjD,CACA,iCAAAC,CAAkCC,GAC9B,MAAMC,EAAsB,CAAC,EAC7B,IAAK,MAAMC,KAA2B1oB,KAAKmoB,kBAAmB,CAC1D,MAAM,GAAEG,GAAOI,EACTC,EAAsBH,EAASH,wBAAwBC,GACzDK,IACAF,EAAoBH,GAAM,CAACI,EAAyBC,GAE5D,CACA,OAAOF,CACX,EAEJ,SAASJ,EAAwBO,EAAMN,GACnC,OAAOM,EAAK/e,cAAc,IAAIye,0BAClC,CACA,SAASF,EAA0BQ,GAC/B,OAAOA,EAAKjF,iBAAiB,6BACjC,CAEA,MAAMkF,EACF,WAAAnoB,CAAY8X,EAAUsQ,GAClB9oB,KAAK4iB,SAAU,EACf5iB,KAAK+oB,eAAiB,KAClB/oB,KAAK8oB,YAAYtnB,oBAAoB,SAAUxB,KAAKgpB,eAAe,GACnEhpB,KAAK8oB,YAAY1nB,iBAAiB,SAAUpB,KAAKgpB,eAAe,IAEpEhpB,KAAKgpB,cAAkBvjB,IACnB,IAAKA,EAAMic,iBAAkB,CACzB,MAAMpL,EAAO7Q,EAAMyM,kBAAkB2E,gBAAkBpR,EAAMyM,YAAStS,EAChEyW,EAAY5Q,EAAM4Q,gBAAazW,EACjC0W,GA0BpB,SAAwCA,EAAMD,GAE1C,MAAiB,YADDA,aAAkD,EAAIA,EAAUvM,aAAa,gBAAkBwM,EAAKxM,aAAa,UAErI,CA5BoBmf,CAA+B3S,EAAMD,IA6BzD,SAAuCC,EAAMD,GACzC,IAAKA,aAAkD,EAAIA,EAAUoD,aAAa,gBAAkBnD,EAAKmD,aAAa,UAAW,CAC7H,MAAMvH,GAAUmE,aAAkD,EAAIA,EAAUvM,aAAa,gBAAkBwM,EAAKpE,OACpH,IAAK,MAAMvI,KAAW3K,SAASkqB,kBAAkBhX,GAC7C,GAAIvI,aAAmBwf,kBACnB,OAAO,EAEf,OAAO,CACX,CAEI,OAAO,CAEf,CAxCoBC,CAA8B9S,EAAMD,IACpCrW,KAAKwY,SAAS6Q,eAAe/S,EAAMD,KACnC5Q,EAAM6jB,iBACN7jB,EAAM8jB,2BACNvpB,KAAKwY,SAASgR,cAAclT,EAAMD,GAE1C,CACH,EACDrW,KAAKwY,SAAWA,EAChBxY,KAAK8oB,YAAcA,CACvB,CACA,KAAA/nB,GACSf,KAAK4iB,UACN5iB,KAAK8oB,YAAY1nB,iBAAiB,SAAUpB,KAAK+oB,gBAAgB,GACjE/oB,KAAK4iB,SAAU,EAEvB,CACA,IAAAthB,GACQtB,KAAK4iB,UACL5iB,KAAK8oB,YAAYtnB,oBAAoB,SAAUxB,KAAK+oB,gBAAgB,GACpE/oB,KAAK4iB,SAAU,EAEvB,EAoBJ,MAAM6G,EACF,WAAA/oB,CAAY8X,EAAU7O,GAClB3J,KAAK0pB,qBAAwB/I,MAC7B3gB,KAAK2pB,2BAA8BhJ,MACnC3gB,KAAKwY,SAAWA,EAChBxY,KAAK2J,QAAUA,CACnB,CACA,cAAAigB,CAAerO,GACX,MAAM5R,EAAU3J,KAAKwoB,SAASP,oBAAoB1M,GAC9C5R,GACA3J,KAAK6pB,gBAAgBlgB,GACrB3J,KAAK8pB,aAAangB,IAGlB3J,KAAK+pB,iBAAiB,CAAEC,EAAG,EAAGC,EAAG,GAEzC,CACA,0BAAAC,CAA2BvP,GACvB3a,KAAK4pB,eAAetP,EAAUK,GAClC,CACA,eAAAkP,CAAgBlgB,GACZA,EAAQwgB,gBACZ,CACA,YAAAL,CAAangB,GACLA,aAAmBoM,cACfpM,EAAQ8P,aAAa,YACrB9P,EAAQygB,SAGRzgB,EAAQwP,aAAa,WAAY,MACjCxP,EAAQygB,QACRzgB,EAAQyP,gBAAgB,aAGpC,CACA,gBAAA2Q,EAAiB,EAAEC,EAAC,EAAEC,IAClBjqB,KAAKqqB,WAAWC,SAASN,EAAGC,EAChC,CACA,WAAAM,GACIvqB,KAAK+pB,iBAAiB,CAAEC,EAAG,EAAGC,EAAG,GACrC,CACA,cAAII,GACA,OAAO3rB,MACX,CACA,YAAM8rB,CAAOC,GACT,MAAM,UAAE3Q,EAAS,aAAE4Q,EAAcC,YAAanC,GAAaiC,EAC3D,GAAIC,EACA,IACI1qB,KAAK4qB,cAAgB,IAAItS,QAASC,GAAavY,KAAK0pB,qBAAuBnR,GAC3EvY,KAAKyqB,SAAWA,QACVzqB,KAAK6qB,wBAAwBJ,GACnC,MAAMK,EAAqB,IAAIxS,QAASC,GAAavY,KAAK2pB,2BAA6BpR,GACjF3I,EAAU,CAAE6S,OAAQziB,KAAK2pB,2BAA4Ba,OAAQxqB,KAAKyqB,SAASM,eACzD/qB,KAAKwY,SAASwS,sBAAsBxC,EAAU5Y,UAE5Dkb,QACJ9qB,KAAKirB,eAAeR,GAC1BzqB,KAAKwY,SAAS0S,qBAAqB1C,EAAU1O,GAC7C9Z,KAAKwY,SAAS2S,0BAA0BnrB,KAAK2J,SAC7C3J,KAAKorB,wBAAwBX,EACjC,CACA,eACWzqB,KAAKyqB,SACZzqB,KAAK0pB,0BAAqB9pB,UACnBI,KAAK4qB,aAChB,MAGA5qB,KAAKqrB,WAAWZ,EAASa,aAEjC,CACA,UAAAD,CAAW1lB,GACP3F,KAAKwY,SAAS+S,gBAAgB5lB,EAClC,CACA,6BAAMklB,CAAwBJ,GAC1BzqB,KAAKwrB,cAAcf,EAAS3Q,iBACtB2Q,EAASgB,iBACnB,CACA,aAAAD,CAAc1R,GACNA,EACA9Z,KAAK2J,QAAQwP,aAAa,qBAAsB,IAGhDnZ,KAAK2J,QAAQyP,gBAAgB,qBAErC,CACA,oBAAM6R,CAAeR,SACXA,EAASD,QACnB,CACA,uBAAAY,CAAwBX,GACpBA,EAASiB,iBACb,EAGJ,MAAMC,UAAkBlC,EACpB,OAAAmC,GACI5rB,KAAK2J,QAAQ6Z,UAAY,4DAC7B,CACA,YAAIgF,GACA,OAAO,IAAIX,EAAS7nB,KAAK2J,QAC7B,EAGJ,MAAMkiB,EACF,WAAAnrB,CAAY8X,EAAU7O,GAClB3J,KAAK8rB,aAAgBrmB,IACbzF,KAAK+rB,sBAAsBtmB,EAAMyM,QACjClS,KAAKgsB,WAAavmB,SAGXzF,KAAKgsB,YAGpBhsB,KAAKisB,YAAgBxmB,IACbzF,KAAKgsB,YAAchsB,KAAK+rB,sBAAsBtmB,EAAMyM,SAAWzM,EAAMyM,kBAAkB+E,SACnFjX,KAAKwY,SAAS0T,yBAAyBzmB,EAAMyM,OAAQzM,EAAM8X,OAAOnZ,IAAKqB,EAAM8X,OAAO4O,iBACpFnsB,KAAKgsB,WAAW1C,iBAChB7jB,EAAM6jB,iBACNtpB,KAAKwY,SAAS4T,qBAAqB3mB,EAAMyM,OAAQzM,EAAM8X,OAAOnZ,IAAKqB,EAAM8X,OAAO4O,uBAGjFnsB,KAAKgsB,UACf,EACDhsB,KAAKqsB,UAAcC,WACRtsB,KAAKgsB,UACf,EACDhsB,KAAKwY,SAAWA,EAChBxY,KAAK2J,QAAUA,CACnB,CACA,KAAA5I,GACIf,KAAK2J,QAAQvI,iBAAiB,QAASpB,KAAK8rB,cAC5C9sB,SAASoC,iBAAiB,cAAepB,KAAKisB,aAC9CjtB,SAASoC,iBAAiB,qBAAsBpB,KAAKqsB,UACzD,CACA,IAAA/qB,GACItB,KAAK2J,QAAQnI,oBAAoB,QAASxB,KAAK8rB,cAC/C9sB,SAASwC,oBAAoB,cAAexB,KAAKisB,aACjDjtB,SAASwC,oBAAoB,qBAAsBxB,KAAKqsB,UAC5D,CACA,qBAAAN,CAAsB7Z,GAClB,MAAMvI,EAAUuI,aAAkB+E,QAAU/E,EAASA,aAAkBgF,KAAOhF,EAAOiF,cAAgB,KACrG,OAAOxN,GAAWA,EAAQ0N,QAAQ,sBAAwBrX,KAAK2J,OACnE,EAGJ,MAAM4iB,EACF,WAAA7rB,CAAY8X,EAAUsQ,GAClB9oB,KAAK4iB,SAAU,EACf5iB,KAAKgX,cAAgB,KACjBhX,KAAK8oB,YAAYtnB,oBAAoB,QAASxB,KAAK8rB,cAAc,GACjE9rB,KAAK8oB,YAAY1nB,iBAAiB,QAASpB,KAAK8rB,cAAc,IAElE9rB,KAAK8rB,aAAgBrmB,IACjB,GAAIA,aAAiB+mB,YAAcxsB,KAAKysB,wBAAwBhnB,GAAQ,CACpE,MAAMyM,EAAUzM,EAAMinB,cAAgBjnB,EAAMinB,eAAe,IAAOjnB,EAAMyM,OAClEya,EAAO3sB,KAAK4sB,wBAAwB1a,GAC1C,GAAIya,GAwCpB,SAA6BpR,GACzB,GAAIA,EAAO9B,aAAa,UAAW,CAC/B,IAAK,MAAM9P,KAAW3K,SAASkqB,kBAAkB3N,EAAOrJ,QACpD,GAAIvI,aAAmBwf,kBACnB,OAAO,EAEf,OAAO,CACX,CAEI,OAAO,CAEf,CAnD4B0D,CAAoBF,GAAO,CACnC,MAAMhS,EAAW3a,KAAK8sB,mBAAmBH,GACrC3sB,KAAKwY,SAASuU,yBAAyBJ,EAAMhS,EAAUlV,KACvDA,EAAM6jB,iBACNtpB,KAAKwY,SAASwU,uBAAuBL,EAAMhS,GAEnD,CACJ,GAEJ3a,KAAKwY,SAAWA,EAChBxY,KAAK8oB,YAAcA,CACvB,CACA,KAAA/nB,GACSf,KAAK4iB,UACN5iB,KAAK8oB,YAAY1nB,iBAAiB,QAASpB,KAAKgX,eAAe,GAC/DhX,KAAK4iB,SAAU,EAEvB,CACA,IAAAthB,GACQtB,KAAK4iB,UACL5iB,KAAK8oB,YAAYtnB,oBAAoB,QAASxB,KAAKgX,eAAe,GAClEhX,KAAK4iB,SAAU,EAEvB,CACA,uBAAA6J,CAAwBhnB,GACpB,QAAUA,EAAMyM,QAAUzM,EAAMyM,OAAO+a,mBACnCxnB,EAAMic,kBACNjc,EAAMynB,MAAQ,GACdznB,EAAM0nB,QACN1nB,EAAM2nB,SACN3nB,EAAM4nB,SACN5nB,EAAM6nB,SACd,CACA,uBAAAV,CAAwB1a,GACpB,OAAO6N,EAAuB7N,EAAQ,2CAC1C,CACA,kBAAA4a,CAAmBH,GACf,OAAOzS,EAAUyS,EAAK7iB,aAAa,SAAW,GAClD,EAeJ,MAAMyjB,EACF,WAAA7sB,CAAY8X,EAAU7O,GAClB3J,KAAKwY,SAAWA,EAChBxY,KAAKwtB,gBAAkB,IAAIjB,EAAkBvsB,KAAM2J,EACvD,CACA,KAAA5I,GACIf,KAAKwtB,gBAAgBzsB,OACzB,CACA,IAAAO,GACItB,KAAKwtB,gBAAgBlsB,MACzB,CACA,wBAAAyrB,CAAyBJ,EAAMhS,EAAUwR,GACrC,OAAQnsB,KAAKwY,SAASiV,6BAA6Bd,EAAMhS,EAAUwR,IAC/DQ,EAAKlT,aAAa,oBAC1B,CACA,sBAAAuT,CAAuBL,EAAMhS,GACzB,MAAMrE,EAAOtX,SAASmK,cAAc,QAEpC,IAAK,MAAOpK,EAAMG,KAAUyb,EAASkG,aACjCvK,EAAKsO,OAAO3Z,OAAOuc,OAAOxoB,SAASmK,cAAc,SAAU,CAAEtD,KAFpD,SAE0D9G,OAAMG,WAE7E,MAAMkI,EAAS6D,OAAOuc,OAAO7M,EAAU,CAAEoK,OAAQ,KACjDzO,EAAK6C,aAAa,aAAc,QAChC7C,EAAK6C,aAAa,SAAU/R,EAAOgC,MACnCkN,EAAK6C,aAAa,SAAU,IAC5B,MAAMkH,EAASsM,EAAK7iB,aAAa,qBAC7BuW,GACA/J,EAAK6C,aAAa,SAAUkH,GAChC,MAAMqN,EAAaf,EAAK7iB,aAAa,oBACjC4jB,GACApX,EAAK6C,aAAa,mBAAoBuU,GAC1C,MAAMC,EAAchO,EAAegN,GAC/BgB,GACArX,EAAK6C,aAAa,oBAAqBwU,GAC3C,MAAMC,EAAejB,EAAK7iB,aAAa,sBACnC8jB,GACAtX,EAAK6C,aAAa,qBAAsByU,GACxBjB,EAAKlT,aAAa,sBAElCnD,EAAK6C,aAAa,oBAAqB,IAC3CnZ,KAAKwY,SAASqV,4BAA4BlB,EAAMhS,EAAUrE,GAC1DtX,SAASshB,KAAK3J,YAAYL,GAC1BA,EAAKlV,iBAAiB,mBAAoB,IAAMkV,EAAK/O,SAAU,CAAEiE,MAAM,IACvEsS,sBAAsB,IAAMxH,EAAKF,gBACrC,EAGJ,MAAM0X,EACF,wCAAaC,CAA4BvV,EAAUiQ,EAAqBuF,GACpE,MAAMC,EAAQ,IAAIjuB,KAAKwY,EAAUiQ,GACjCwF,EAAMC,cACAF,IACNC,EAAME,OACV,CACA,WAAAztB,CAAY8X,EAAUiQ,GAClBzoB,KAAKwY,SAAWA,EAChBxY,KAAKyoB,oBAAsBA,CAC/B,CACA,KAAAyF,GACI,IAAK,MAAM5F,KAAMtoB,KAAKyoB,oBAAqB,CACvC,MAAOC,EAAyBC,GAAuB3oB,KAAKyoB,oBAAoBH,GAChFtoB,KAAKwY,SAAS4V,cAAc1F,EAAyBC,GACrD3oB,KAAKquB,0CAA0C1F,EACnD,CACJ,CACA,KAAAwF,GACI,IAAK,MAAM7F,KAAMtoB,KAAKyoB,oBAAqB,CACvC,MAAOC,GAA2B1oB,KAAKyoB,oBAAoBH,GAC3DtoB,KAAKsuB,wCAAwC5F,GAC7C1oB,KAAKuuB,uCAAuC7F,GAC5C1oB,KAAKwY,SAASgW,aAAa9F,EAC/B,CACJ,CACA,yCAAA2F,CAA0CI,GACtC,MAAMC,EAkBd,SAA8CD,GAC1C,MAAM9kB,EAAU3K,SAASmK,cAAc,QAGvC,OAFAQ,EAAQwP,aAAa,OAAQ,+BAC7BxP,EAAQwP,aAAa,UAAWsV,EAAiBnG,IAC1C3e,CACX,CAvB4BglB,CAAqCF,GACzDA,EAAiBzK,YAAY0K,EACjC,CACA,uCAAAJ,CAAwCG,GACpC,MAAMlS,EAAQkS,EAAiBG,WAAU,GACzCH,EAAiBzK,YAAYzH,EACjC,CACA,sCAAAgS,CAAuCE,GACnC,MAAMC,EAAc1uB,KAAK6uB,mBAAmBJ,EAAiBnG,IAC7DoG,SAA0DA,EAAY1K,YAAYyK,EACtF,CACA,kBAAAI,CAAmBvG,GACf,OAAOtoB,KAAK8uB,aAAaxI,KAAM3c,GAAYA,EAAQmW,SAAWwI,EAClE,CACA,gBAAIwG,GACA,MAAO,IAAI9vB,SAAS2kB,iBAAiB,mDACzC,EASJ,MAAMoL,EACF,WAAAruB,CAAYsuB,EAAiBrE,EAAaI,EAAejR,EAAWmV,GAAa,GAC7EjvB,KAAK8nB,cAAgB,KACrB9nB,KAAKgvB,gBAAkBA,EACvBhvB,KAAK2qB,YAAcA,EACnB3qB,KAAK8Z,UAAYA,EACjB9Z,KAAKivB,WAAaA,EAClBjvB,KAAK+qB,cAAgBA,EACrB/qB,KAAKkvB,QAAU,IAAI5W,QAAQ,CAACC,EAAS9R,IAAYzG,KAAKmvB,mBAAqB,CAAE5W,UAAS9R,UAC1F,CACA,gBAAIikB,GACA,OAAO,CACX,CACA,gBAAIY,GAEJ,CACA,eAAAG,GAEA,CACA,eAAAC,GACQ1rB,KAAKmvB,qBACLnvB,KAAKmvB,mBAAmB5W,iBACjBvY,KAAKmvB,mBAEpB,CACA,iCAAMpB,CAA4BC,SACxBF,EAAMC,4BAA4B/tB,KAAMA,KAAKyoB,oBAAqBuF,EAC5E,CACA,8BAAAoB,GACI,MAAMzlB,EAAU3J,KAAKqvB,kBAAkBnH,2BA+B/C,SAA4Bve,GACxB,OAAOA,GAAmC,mBAAjBA,EAAQygB,KACrC,EAhCYkF,CAAmB3lB,IACnBA,EAAQygB,OAEhB,CACA,aAAAgE,CAAc1F,GACN1oB,KAAK8nB,eAELY,EAAwB6G,SAASvvB,KAAKgvB,gBAAgBlH,iBACtD9nB,KAAK8nB,cAAgB9nB,KAAKgvB,gBAAgBlH,cAElD,CACA,YAAA0G,CAAa9F,GACLA,EAAwB6G,SAASvvB,KAAK8nB,gBAAkB9nB,KAAK8nB,yBAAyB/R,cACtF/V,KAAK8nB,cAAcsC,QACnBpqB,KAAK8nB,cAAgB,KAE7B,CACA,qBAAIuH,GACA,OAAOrvB,KAAK2qB,YAAYhN,YAAc3d,KAAK2qB,YAAc3qB,KAAKgvB,eAClE,CACA,kBAAIQ,GACA,OAAOxvB,KAAKgvB,gBAAgBrlB,OAChC,CACA,cAAI8lB,GACA,OAAOzvB,KAAK2qB,YAAYhhB,OAC5B,CACA,uBAAI8e,GACA,OAAOzoB,KAAKgvB,gBAAgBzG,kCAAkCvoB,KAAK2qB,YACvE,EAMJ,MAAM+E,UAAsBX,EACxB,oBAAOhE,CAAcyE,EAAgBC,GACjC,IAAI1V,EACJ,MAAM4V,EAAmB3wB,SAAS4wB,cAClCD,EAAiBE,mBAAmBL,GACpCG,EAAiBG,iBACjB,MAAMC,EAAeN,EACfO,EAAoD,QAArCjW,EAAKgW,EAAalW,qBAAuC,IAAZE,OAAqB,EAAIA,EAAG6V,cAC1FI,IACAA,EAAYH,mBAAmBE,GAC/BP,EAAe7Y,YAAYqZ,EAAYC,mBAE/C,CACA,WAAAvvB,CAAY8X,EAAUwW,EAAiBrE,EAAaI,EAAejR,EAAWmV,GAAa,GACvF7W,MAAM4W,EAAiBrE,EAAaI,EAAejR,EAAWmV,GAC9DjvB,KAAKwY,SAAWA,CACpB,CACA,gBAAIkS,GACA,OAAO,CACX,CACA,YAAMF,SACI3M,IACN7d,KAAK+tB,4BAA4B,KAC7B/tB,KAAKkwB,qBAETlwB,KAAKmwB,4BACCtS,IACN7d,KAAKovB,uCACCvR,IACN7d,KAAKowB,wBACT,CACA,gBAAAF,GACIlwB,KAAKwY,SAAS6X,gBAAgBrwB,KAAKwvB,eAAgBxvB,KAAKyvB,YACxDzvB,KAAK+qB,cAAc/qB,KAAKwvB,eAAgBxvB,KAAKyvB,WACjD,CACA,mBAAAU,GACI,GAAInwB,KAAKwvB,eAAe9V,YAAc1Z,KAAKyvB,WAAW/V,WAAY,CAC9D,MAAM/P,EAAU3J,KAAKwvB,eAAec,kBAC9BC,EAoBD,QADkBrxB,EAnBiBc,KAAKwvB,eAAe1lB,aAAa,2BAoBlD,SAAT5K,GAA6B,UAATA,GAA8B,WAATA,EACpDA,EArBgG,MAC7FsxB,EA0BlB,SAA4BtxB,GACxB,MAAa,QAATA,GAA4B,UAATA,EACZA,EA5B+F,MAiC9G,CAjC6BuxB,CAAmBzwB,KAAKwvB,eAAe1lB,aAAa,6BACrE,GAAIH,EAEA,OADAA,EAAQwgB,eAAe,CAAEoG,QAAOC,cACzB,CAEf,CAaR,IAAmCtxB,EAZ3B,OAAO,CACX,CACA,sBAAAkxB,GACI,IAAK,MAAMtM,KAAsB9jB,KAAK0wB,kBAAmB,CACrD,MAAMC,EAAyBjU,EAAsBoH,GACrDA,EAAmBE,YAAY2M,EACnC,CACJ,CACA,qBAAID,GACA,OAAO1wB,KAAKwvB,eAAe7L,iBAAiB,SAChD,EAmBJ,MAAMiN,EACF,qBAAWC,GACP,OAAO1S,CAAS;;;;;;;;;;kBAUNyS,EAAYE;oBACVF,EAAYE,kBAAoB,OAAOF,EAAYE,kBAAoB;;;KAIvF,CACA,WAAApwB,GACIV,KAAK+wB,QAAS,EACd/wB,KAAKd,MAAQ,EACbc,KAAKgxB,SAAU,EACfhxB,KAAKixB,QAAU,KACXjxB,KAAKkxB,SAASlxB,KAAKd,MAAQmD,KAAKG,SAAW,MAE/CxC,KAAKmxB,kBAAoBnxB,KAAKoxB,0BAC9BpxB,KAAKqxB,gBAAkBrxB,KAAKsxB,wBAC5BtxB,KAAKuxB,2BACLvxB,KAAKkxB,SAAS,EAClB,CACA,IAAAM,GACSxxB,KAAKgxB,UACNhxB,KAAKgxB,SAAU,EACfhxB,KAAKyxB,yBACLzxB,KAAK0xB,iBAEb,CACA,IAAAC,GACQ3xB,KAAKgxB,UAAYhxB,KAAK+wB,SACtB/wB,KAAK+wB,QAAS,EACd/wB,KAAK4xB,oBAAoB,KACrB5xB,KAAK6xB,2BACL7xB,KAAK8xB,gBACL9xB,KAAKgxB,SAAU,EACfhxB,KAAK+wB,QAAS,IAG1B,CACA,QAAAG,CAAShyB,GACLc,KAAKd,MAAQA,EACbc,KAAK+xB,SACT,CACA,wBAAAR,GACIvyB,SAAS4K,KAAKooB,aAAahyB,KAAKmxB,kBAAmBnyB,SAAS4K,KAAKqoB,WACrE,CACA,sBAAAR,GACIzxB,KAAKqxB,gBAAgBa,MAAMC,MAAQ,IACnCnyB,KAAKqxB,gBAAgBa,MAAME,QAAU,IACrCpzB,SAASib,gBAAgB+X,aAAahyB,KAAKqxB,gBAAiBryB,SAASshB,MACrEtgB,KAAK+xB,SACT,CACA,mBAAAH,CAAoB5D,GAChBhuB,KAAKqxB,gBAAgBa,MAAME,QAAU,IACrCnwB,WAAW+rB,EAA0C,IAAhC4C,EAAYE,kBACrC,CACA,wBAAAe,GACQ7xB,KAAKqxB,gBAAgBgB,YACrBrzB,SAASib,gBAAgBrD,YAAY5W,KAAKqxB,gBAElD,CACA,cAAAK,GACS1xB,KAAKsyB,kBACNtyB,KAAKsyB,gBAAkB5zB,OAAO6zB,YAAYvyB,KAAKixB,QAASL,EAAYE,mBAE5E,CACA,aAAAgB,GACIpzB,OAAO8zB,cAAcxyB,KAAKsyB,wBACnBtyB,KAAKsyB,eAChB,CACA,OAAAP,GACIjU,sBAAsB,KAClB9d,KAAKqxB,gBAAgBa,MAAMC,MAAW,GAAkB,GAAbnyB,KAAKd,MAAb,KAE3C,CACA,uBAAAkyB,GACI,MAAMznB,EAAU3K,SAASmK,cAAc,SAMvC,OALAQ,EAAQ9D,KAAO,WACf8D,EAAQoT,YAAc6T,EAAYC,WAC9B7wB,KAAK4c,WACLjT,EAAQmT,MAAQ9c,KAAK4c,UAElBjT,CACX,CACA,qBAAA2nB,GACI,MAAM3nB,EAAU3K,SAASmK,cAAc,OAEvC,OADAQ,EAAQ8oB,UAAY,qBACb9oB,CACX,CACA,YAAIiT,GACA,OAAOC,EAAe,YAC1B,EAEJ+T,EAAYE,kBAAoB,IAEhC,MAAM4B,UAAqB7K,EACvB,WAAAnnB,GACI0X,SAASjL,WACTnN,KAAK2yB,mBAAqB3yB,KAAK+nB,SAC1BlgB,OAAQ8B,IAwErB,SAA2BA,GAEvB,MAAkB,YADFA,EAAQuV,SAE5B,CA3EkC0T,CAAkBjpB,IACvCzB,IAAKyB,GAmFlB,SAA6BA,GAIzB,OAHIA,EAAQ8P,aAAa,UACrB9P,EAAQwP,aAAa,QAAS,IAE3BxP,CACX,CAxF8BkpB,CAAoBlpB,IACrC4U,OAAO,CAAC1P,EAAQlF,KACjB,MAAM,UAAEmpB,GAAcnpB,EAChBopB,EAAUD,KAAajkB,EACvBA,EAAOikB,GACP,CACEjtB,KAAMmtB,EAAYrpB,GAClBspB,QAASC,EAAiBvpB,GAC1BqV,SAAU,IAElB,OAAO/T,OAAOuc,OAAOvc,OAAOuc,OAAO,CAAC,EAAG3Y,GAAS,CAAE,CAACikB,GAAY7nB,OAAOuc,OAAOvc,OAAOuc,OAAO,CAAC,EAAGuL,GAAU,CAAE/T,SAAU,IAAI+T,EAAQ/T,SAAUrV,QAC5I,CAAC,EACR,CACA,2BAAIwpB,GACA,OAAOloB,OAAO+H,KAAKhT,KAAK2yB,oBACnB9qB,OAAQirB,GAAc9yB,KAAK2yB,mBAAmBG,GAAWG,SACzDtU,KAAK,GACd,CACA,8BAAAyU,CAA+B5K,GAC3B,OAAOxoB,KAAKqzB,qCAAqC,SAAU7K,EAC/D,CACA,kCAAA8K,CAAmC9K,GAC/B,OAAOxoB,KAAKqzB,qCAAqC,aAAc7K,EACnE,CACA,oCAAA6K,CAAqCE,EAAa/K,GAC9C,OAAOvd,OAAO+H,KAAKhT,KAAK2yB,oBACnB9qB,OAAQirB,KAAgBA,KAAatK,EAASmK,qBAC9CzqB,IAAK4qB,GAAc9yB,KAAK2yB,mBAAmBG,IAC3CjrB,OAAO,EAAGhC,UAAWA,GAAQ0tB,GAC7BrrB,IAAI,EAAG8W,UAAWrV,MAAeA,EAC1C,CACA,uBAAI6pB,GACA,OAAOvoB,OAAO+H,KAAKhT,KAAK2yB,oBAAoBpU,OAAO,CAAC1P,EAAQikB,KACxD,MAAM,KAAEjtB,EAAI,QAAEotB,EAAO,SAAEjU,GAAahf,KAAK2yB,mBAAmBG,GAC5D,OAAY,MAARjtB,GAAiBotB,EAGZjU,EAASvf,OAAS,EAChB,IAAIoP,KAAWmQ,EAAS9b,MAAM,IAG9B2L,EANA,IAAIA,KAAWmQ,IAQ3B,GACP,CACA,YAAAyU,CAAa10B,GACT,MAAM4K,EAAU3J,KAAK0zB,sBAAsB30B,GAC3C,OAAO4K,EAAUA,EAAQG,aAAa,WAAa,IACvD,CACA,qBAAA4pB,CAAsB30B,GAClB,OAAOkM,OAAO+H,KAAKhT,KAAK2yB,oBAAoBpU,OAAO,CAAC1P,EAAQikB,KACxD,MAAQ9T,UAAWrV,IAAc3J,KAAK2yB,mBAAmBG,GACzD,OA2BZ,SAAsCnpB,EAAS5K,GAE3C,MAAkB,QADF4K,EAAQuV,WACIvV,EAAQG,aAAa,SAAW/K,CAChE,CA9BmB40B,CAA6BhqB,EAAS5K,GAAQ4K,EAAUkF,QAChEjP,EACP,EAEJ,SAASozB,EAAYrpB,GACjB,OAUJ,SAAyBA,GAErB,MAAkB,UADFA,EAAQuV,SAE5B,CAbQ0U,CAAgBjqB,GACT,SAiBf,SAA6BA,GACzB,MAAMkqB,EAAUlqB,EAAQuV,UACxB,MAAkB,SAAX2U,GAAkC,QAAXA,GAAoD,cAA/BlqB,EAAQG,aAAa,MAC5E,CAlBagqB,CAAoBnqB,GAClB,kBADN,CAGT,CACA,SAASupB,EAAiBvpB,GACtB,MAAmD,UAA5CA,EAAQG,aAAa,mBAChC,CAwBA,MAAMiqB,UAAqBlM,EACvB,qBAAOmM,CAAehW,EAAO,IACzB,OAAOhe,KAAKi0B,aAAalW,EAAkBC,GAC/C,CACA,kBAAOkW,CAAYvqB,GACf,OAAO3J,KAAKi0B,aAAatqB,EAAQkQ,cACrC,CACA,mBAAOoa,EAAa,KAAErqB,EAAI,KAAE0W,IACxB,OAAO,IAAItgB,KAAKsgB,EAAM,IAAIoS,EAAa9oB,GAC3C,CACA,WAAAlJ,CAAYiJ,EAASwqB,GACjB/b,MAAMzO,GACN3J,KAAKm0B,aAAeA,CACxB,CACA,KAAA5X,GACI,MAAM6X,EAAgBp0B,KAAK2J,QAAQilB,WAAU,GACvCyF,EAAiBr0B,KAAK2J,QAAQga,iBAAiB,UAC/C2Q,EAAuBF,EAAczQ,iBAAiB,UAC5D,IAAK,MAAOxU,EAAOolB,KAAWF,EAAevT,UAAW,CACpD,MAAMvE,EAAQ+X,EAAqBnlB,GACnC,IAAK,MAAMqlB,KAAUjY,EAAMkY,gBACvBD,EAAOE,UAAW,EACtB,IAAK,MAAMF,KAAUD,EAAOE,gBACxBlY,EAAM3M,QAAQ4kB,EAAOrlB,OAAOulB,UAAW,CAC/C,CACA,IAAK,MAAMC,KAAuBP,EAAczQ,iBAAiB,0BAC7DgR,EAAoBz1B,MAAQ,GAEhC,OAAO,IAAI60B,EAAaK,EAAep0B,KAAKm0B,aAChD,CACA,eAAIS,GACA,OAAO50B,KAAKm0B,aAAaxqB,OAC7B,CACA,gBAAIiR,GACA,IAAIb,EAEJ,OAAOG,EADyC,QAAlCH,EAAK/Z,KAAK60B,WAAW,eAAiC,IAAZ9a,EAAgBA,EAAK,IAEjF,CACA,qBAAI+a,GACA,OAAO90B,KAAK60B,WAAW,gBAC3B,CACA,iBAAIE,GACA,MAAiC,cAA1B/0B,KAAK80B,iBAChB,CACA,eAAIE,GACA,MAAiC,YAA1Bh1B,KAAK80B,iBAChB,CACA,eAAIG,GACA,MAA2C,UAApCj1B,KAAK60B,WAAW,gBAC3B,CACA,UAAAA,CAAW91B,GACP,OAAOiB,KAAKm0B,aAAaV,aAAa,SAAS10B,IACnD,GAIJ,SAAW6Y,GACPA,EAAyB,WAAI,aAC7BA,EAA2B,aAAI,eAC/BA,EAAyB,WAAI,aAC7BA,EAAuB,SAAI,UAC9B,CALD,CAKGA,IAAiBA,EAAe,CAAC,IAEpC,SAAWC,GACPA,EAAwB,YAAI,cAC5BA,EAAoB,QAAI,UACxBA,EAAqB,SAAI,WACzBA,EAAmB,OAAI,SACvBA,EAAsB,UAAI,WAC7B,CAND,CAMGA,IAAeA,EAAa,CAAC,IAChC,MAAMqd,EAAiB,CACnB9tB,OAAQ,UACR+tB,gBAAgB,EAChBC,oBAAqB,OACrBnG,YAAY,EACZoG,eAAe,EACfC,qBAAqB,EACrBC,uBAAuB,GAE3B,IAAIC,GAwtBAC,IAvtBJ,SAAWD,GACPA,EAAiBA,EAAiC,eAAI,GAAK,iBAC3DA,EAAiBA,EAAiC,gBAAK,GAAK,iBAC5DA,EAAiBA,EAAsC,qBAAK,GAAK,qBACpE,CAJD,CAIGA,KAAqBA,GAAmB,CAAC,IAC5C,MAAME,GACF,WAAAh1B,CAAY8X,EAAUmC,EAAUgb,EAAuB/lB,EAAU,CAAC,GAC9D5P,KAAK0F,WAAakZ,IAClB5e,KAAK41B,cAAgB,CAAC,EACtB51B,KAAK61B,kBAAmB,EACxB71B,KAAKm1B,gBAAiB,EACtBn1B,KAAK81B,UAAW,EAChB91B,KAAKs1B,qBAAsB,EAC3Bt1B,KAAKu1B,uBAAwB,EAC7Bv1B,KAAK+1B,gBAAiB,EACtB/1B,KAAKiF,MAAQ4S,EAAW4M,YACxBzkB,KAAKwY,SAAWA,EAChBxY,KAAK2a,SAAWA,EAChB3a,KAAK21B,sBAAwBA,GAAyB/W,IACtD,MAAM,OAAExX,EAAM,eAAE+tB,EAAc,SAAE/S,EAAQ,SAAEoG,EAAQ,aAAEwN,EAAY,SAAEta,EAAQ,oBAAE0Z,EAAmB,WAAEnG,EAAU,cAAEoG,EAAa,oBAAEC,EAAmB,sBAAEC,GAA2BtqB,OAAOuc,OAAOvc,OAAOuc,OAAO,CAAC,EAAG0N,GAAiBtlB,GAC7N5P,KAAKoH,OAASA,EACdpH,KAAKm1B,eAAiBA,EACtBn1B,KAAKoiB,SAAWA,EAChBpiB,KAAKwoB,SAAWA,EAChBxoB,KAAKg2B,aAAeA,EACpBh2B,KAAK0b,SAAWA,EAChB1b,KAAKi2B,WAAaj2B,KAAKwY,SAAS0d,6BAA6Bl2B,KAAK2a,SAAU3a,KAAKoH,QACjFpH,KAAKo1B,oBAAsBA,EAC3Bp1B,KAAKivB,WAAaA,EAClBjvB,KAAKq1B,cAAgBA,EACrBr1B,KAAK81B,UAAY7G,EACjBjvB,KAAKs1B,oBAAsBA,EAC3Bt1B,KAAKu1B,sBAAwBA,CACjC,CACA,WAAIY,GACA,OAAOn2B,KAAKwY,SAAS2d,OACzB,CACA,QAAIC,GACA,OAAOp2B,KAAKwY,SAAS4d,IACzB,CACA,WAAI5W,GACA,OAAOxf,KAAKwY,SAASgH,OACzB,CACA,mBAAI6W,GACA,OAAOr2B,KAAKwf,QAAQ8W,gCAAgCt2B,KAAK21B,sBAC7D,CACA,UAAIY,GACA,OAAOv2B,KAAKi2B,UAChB,CACA,KAAAl1B,GACQf,KAAKiF,OAAS4S,EAAW4M,cACzBzkB,KAAKw2B,mBAAmB5e,EAAa6e,YACrCz2B,KAAKiF,MAAQ4S,EAAW+K,QACxB5iB,KAAKm2B,QAAQO,aAAa12B,MAC1BA,KAAKwY,SAASke,aAAa12B,MAEnC,CACA,MAAAiR,GACQjR,KAAKiF,OAAS4S,EAAW+K,UACrB5iB,KAAK0iB,SACL1iB,KAAK0iB,QAAQzR,SAEjBjR,KAAK22B,eACL32B,KAAKiF,MAAQ4S,EAAW+e,SAEhC,CACA,QAAAjd,GACQ3Z,KAAKiF,OAAS4S,EAAW+K,UACzB5iB,KAAKw2B,mBAAmB5e,EAAaif,UACrC72B,KAAKiF,MAAQ4S,EAAWif,UACxB92B,KAAK+2B,iBACA/2B,KAAK61B,mBACN71B,KAAKm2B,QAAQa,eAAeh3B,MAC5BA,KAAKwY,SAASwe,eAAeh3B,OAGzC,CACA,IAAAi3B,GACQj3B,KAAKiF,OAAS4S,EAAW+K,UACzB5iB,KAAKiF,MAAQ4S,EAAWgE,OACxB7b,KAAKm2B,QAAQe,YAAYl3B,MAEjC,CACA,aAAAm3B,GACI,IAAIpd,EACJ,IAAK/Z,KAAKm1B,gBAAkBn1B,KAAKq1B,cAAe,CAC5C,MACMhV,EAASd,EADUvf,KAAK2a,SAASvR,QAAmC,QAAxB2Q,EAAK/Z,KAAKoiB,gBAAkC,IAAZrI,OAAqB,EAAIA,EAAG3Q,MAAQ,UAAYpJ,KAAKoH,QAEvIpH,KAAKwf,QAAQ4X,OAAO/W,EAAQrgB,KAAK2a,SAAU3a,KAAK21B,uBAChD31B,KAAKm1B,gBAAiB,CAC1B,CACJ,CACA,YAAAkC,GACQr3B,KAAKs3B,uBACLt3B,KAAKu3B,kBAEAv3B,KAAKw3B,uBAAyBx3B,KAAK0iB,UACxC1iB,KAAK0iB,QAAU,IAAItC,EAAapgB,KAAMyX,EAAYlC,IAAKvV,KAAK2a,UAC5D3a,KAAK0iB,QAAQvb,UAErB,CACA,eAAAowB,GACQv3B,KAAK0b,WACL1b,KAAKy3B,eACLz3B,KAAK03B,iBACL13B,KAAK23B,gBAEb,CACA,YAAAF,GACIz3B,KAAKw2B,mBAAmB5e,EAAaggB,cACrC53B,KAAKm2B,QAAQ0B,oBAAoB73B,KACrC,CACA,cAAA03B,CAAehc,EAAW1b,KAAK0b,UAE3B,GADA1b,KAAK0b,SAAWA,EACZA,EAAU,CACV,MAAM,WAAEK,GAAeL,EACnBoc,GAAa/b,GACb/b,KAAKm2B,QAAQ4B,sBAAsB/3B,MAGnCA,KAAKm2B,QAAQ6B,iCAAiCh4B,KAAM+b,EAE5D,CACJ,CACA,aAAA4b,GACI33B,KAAKw2B,mBAAmB5e,EAAaqgB,YACrCj4B,KAAKm2B,QAAQ+B,qBAAqBl4B,KACtC,CACA,YAAAm4B,GACI,GAAIn4B,KAAK0b,SAAU,CACf,MAAM,WAAEK,EAAU,aAAES,GAAiBxc,KAAK0b,SAC1C1b,KAAKwqB,OAAOxN,UACJhd,KAAKs1B,qBACLt1B,KAAKo4B,gBACLp4B,KAAKo2B,KAAKxL,qBACJ5qB,KAAKo2B,KAAKxL,cAChBkN,GAAa/b,IAA+B,MAAhBS,SACtBxc,KAAKo2B,KAAKiC,WAAWtE,EAAaC,eAAexX,IAAe,EAAOxc,KAAKivB,WAAYjvB,MAC9FA,KAAKs4B,gBACLt4B,KAAKm2B,QAAQoC,cAAcv4B,MAC3BA,KAAK2Z,mBAGC3Z,KAAKo2B,KAAKoC,YAAYzE,EAAaC,eAAexX,GAAexc,MACvEA,KAAKm2B,QAAQoC,cAAcv4B,MAC3BA,KAAKi3B,SAGjB,CACJ,CACA,iBAAAwB,GACI,MAAMjQ,EAAWxoB,KAAKo2B,KAAKsC,6BAA6B14B,KAAK2a,WAAa3a,KAAK24B,uBAC/E,GAAInQ,KAAclO,EAAUta,KAAK2a,WAAa6N,EAASR,UAAU1N,EAAUta,KAAK2a,cACzD,WAAf3a,KAAKoH,QAAuBohB,EAASuM,eACrC,OAAOvM,CAGnB,CACA,oBAAAmQ,GACI,GAAI34B,KAAKg2B,aACL,OAAOjC,EAAaC,eAAeh0B,KAAKg2B,aAEhD,CACA,iBAAA4C,GACI,OAAmC,MAA5B54B,KAAKy4B,mBAChB,CACA,kBAAAI,GACI,MAAMrQ,EAAWxoB,KAAKy4B,oBACtB,GAAIjQ,EAAU,CACV,MAAM1O,EAAY9Z,KAAKw3B,qBACvBx3B,KAAKwqB,OAAOxN,UACRhd,KAAKo4B,gBACDp4B,KAAKi2B,WACLj2B,KAAKm2B,QAAQoC,cAAcv4B,OAGvBA,KAAKo2B,KAAKxL,qBACJ5qB,KAAKo2B,KAAKxL,oBACd5qB,KAAKo2B,KAAKiC,WAAW7P,EAAU1O,EAAW9Z,KAAKivB,WAAYjvB,MACjEA,KAAKs4B,gBACLt4B,KAAKm2B,QAAQoC,cAAcv4B,MACtB8Z,GACD9Z,KAAK2Z,aAIrB,CACJ,CACA,cAAAod,GACI,IAAIhd,EACA/Z,KAAK84B,uBAAyB94B,KAAK61B,mBAA8C,QAAxB9b,EAAK/Z,KAAK0b,gBAAkC,IAAZ3B,OAAqB,EAAIA,EAAGkC,cACrHjc,KAAKm2B,QAAQ4C,wBAAwB/4B,KAAK84B,qBAAsB,CAC5D1xB,OAAQ,UACRsU,SAAU1b,KAAK0b,SACf4Z,qBAAqB,EACrBrG,YAAY,IAEhBjvB,KAAK61B,kBAAmB,EAEhC,CACA,kBAAAmD,GACQh5B,KAAKi2B,YACLj2B,KAAKwqB,OAAOxN,UACRhd,KAAKo4B,gBACLp4B,KAAKs4B,gBACLt4B,KAAKm3B,gBACLn3B,KAAKm2B,QAAQoC,cAAcv4B,OAGvC,CACA,cAAAihB,CAAeyB,GACP1iB,KAAKu1B,uBACL7S,EAAQJ,mBAAmBe,EAAclH,YAEjD,CACA,cAAAgF,GACInhB,KAAKy3B,cACT,CACA,gCAAA9V,CAAiC+E,EAAUuS,GAAa,CACxD,kCAAMrX,CAA6Bc,EAAShH,GACxC,MAAMc,QAAqBd,EAASc,cAC9B,WAAEP,EAAU,WAAEF,GAAeL,EACf9b,MAAhB4c,EACAxc,KAAK03B,eAAe,CAChB3b,WAAYyZ,GAAiB0D,oBAC7Bjd,gBAIJjc,KAAK84B,qBAAuBpd,EAASO,WAAaP,EAASf,cAAW/a,EACtEI,KAAK03B,eAAe,CAAE3b,WAAYA,EAAYS,eAAcP,eAEpE,CACA,+BAAM4F,CAA0Ba,EAAShH,GACrC,MAAMc,QAAqBd,EAASc,cAC9B,WAAEP,EAAU,WAAEF,GAAeL,EACf9b,MAAhB4c,EACAxc,KAAK03B,eAAe,CAChB3b,WAAYyZ,GAAiB0D,oBAC7Bjd,eAIJjc,KAAK03B,eAAe,CAAE3b,WAAYA,EAAYS,eAAcP,cAEpE,CACA,cAAAsF,CAAemF,EAAUyS,GACrBn5B,KAAK03B,eAAe,CAChB3b,WAAYyZ,GAAiB4D,eAC7Bnd,YAAY,GAEpB,CACA,eAAAuF,GACIxhB,KAAK23B,eACT,CACA,aAAAW,GACSt4B,KAAK81B,UAAa91B,KAAKo2B,KAAKiD,gBACV,WAAfr5B,KAAKoH,OACLpH,KAAKs5B,4BAA8Bt5B,KAAK4pB,kBAAoB5pB,KAAKo2B,KAAK7L,cAGtEvqB,KAAK4pB,kBAAoB5pB,KAAKo2B,KAAK7L,cAEnCvqB,KAAKi2B,YACLj2B,KAAKwY,SAAS+gB,gCAAgCv5B,KAAKo2B,KAAKoD,qBAAsBx5B,KAAK2a,UAEvF3a,KAAK81B,UAAW,EAExB,CACA,wBAAAwD,GACI,MAAM,eAAEG,GAAmBz5B,KAAKq2B,gBAChC,GAAIoD,EAEA,OADAz5B,KAAKo2B,KAAKrM,iBAAiB0P,IACpB,CAEf,CACA,cAAA7P,GACI,MAAMrO,EAASjB,EAAUta,KAAK2a,UAC9B,GAAc,MAAVY,EAEA,OADAvb,KAAKo2B,KAAKxM,eAAerO,IAClB,CAEf,CACA,kBAAAib,CAAmBkD,GACf15B,KAAK41B,cAAc8D,IAAU,IAAIv5B,MAAOG,SAC5C,CACA,gBAAAq5B,GACI,OAAO1uB,OAAOuc,OAAO,CAAC,EAAGxnB,KAAK41B,cAClC,CACA,yBAAArW,CAA0BnY,GACtB,OAAQA,GACJ,IAAK,UACD,OAAOoY,QAAQC,aACnB,IAAK,UACL,IAAK,UACD,OAAOD,QAAQE,UAE3B,CACA,oBAAA4X,GACI,MAA+B,iBAAjBt3B,KAAK0b,QACvB,CACA,kBAAA8b,GACI,OAAIx3B,KAAKi2B,aAGe,WAAfj2B,KAAKoH,QACFpH,KAAK44B,oBAGN54B,KAAKivB,WAEpB,CACA,aAAAmJ,GACSp4B,KAAK+1B,iBACN/1B,KAAKo2B,KAAKgC,cAAcp4B,KAAKwoB,UAAUoR,KAAMpR,GAAaA,GAAYxoB,KAAKo1B,oBAAoB5M,IAC/FxoB,KAAK+1B,gBAAiB,EAE9B,CACA,YAAMvL,CAAOwD,GACThuB,KAAK22B,qBACC,IAAIre,QAASC,IACfvY,KAAK65B,MAAQ/b,sBAAsB,IAAMvF,aAEvCyV,WACChuB,KAAK65B,KAChB,CACA,YAAAlD,GACQ32B,KAAK65B,QACLC,qBAAqB95B,KAAK65B,cACnB75B,KAAK65B,MAEpB,EAEJ,SAAS/B,GAAa/b,GAClB,OAAOA,GAAc,KAAOA,EAAa,GAC7C,CAEA,MAAMge,GACF,WAAAr5B,CAAYs5B,GACRh6B,KAAKi6B,YAAc,IAAIrJ,EACvB5wB,KAAKk6B,gBAAkB,KACnBl6B,KAAKi6B,YAAYzI,QAErBxxB,KAAKg6B,QAAUA,CACnB,CACA,uBAAAjB,CAAwBpe,EAAU/K,GAC9B5P,KAAK+X,UAAUoiB,WAAWxf,GAAW/K,aAA8C,EAAIA,EAAQ+lB,wBAA0B/W,IAAQhP,EACrI,CACA,YAAA8mB,CAAa0D,GACTp6B,KAAK2a,SAAWyf,EAAMzf,SACtByf,EAAMvB,qBACNuB,EAAM/C,eACN+C,EAAMpB,oBACV,CACA,mBAAAnB,CAAoBuC,GAChBp6B,KAAKi6B,YAAY/I,SAAS,GACtBkJ,EAAMxB,qBAAuC,WAAhBwB,EAAMhzB,OACnCpH,KAAKq6B,iCAGLr6B,KAAKk6B,iBAEb,CACA,qBAAAnC,CAAsBqC,GAClBA,EAAMjC,cACV,CACA,gCAAAH,CAAiCoC,EAAOre,GACpC,OAAQA,GACJ,KAAKyZ,GAAiB4D,eACtB,KAAK5D,GAAiB8E,eACtB,KAAK9E,GAAiB0D,oBAClB,OAAOl5B,KAAKiG,OAAO,CACfN,OAAQ,iBACR4F,QAAS,CACLwQ,gBAGZ,QACI,OAAOqe,EAAMjC,eAEzB,CACA,oBAAAD,CAAqBqC,GACjBv6B,KAAKi6B,YAAY/I,SAAS,GAC1BlxB,KAAKw6B,sBACT,CACA,cAAAxD,CAAeuD,GAAU,CACzB,eAAAE,CAAgB90B,GACZ3F,KAAKiG,OAAON,EAChB,CACA,WAAAuxB,CAAYqD,GAAU,CACtB,aAAAhC,CAAcgC,GAAU,CACxB,qBAAAzT,CAAsB4T,GAClB16B,KAAKi6B,YAAY/I,SAAS,GAC1BlxB,KAAK26B,+BACT,CACA,sBAAAlT,CAAuBiT,GACnB16B,KAAKi6B,YAAY/I,SAAS,GAC1BlxB,KAAK46B,qBACT,CACA,8BAAAP,GACIr6B,KAAK66B,wBAA0Bn8B,OAAOuD,WAAWjC,KAAKk6B,gBAAiBl6B,KAAKg6B,QAAQc,iBACxF,CACA,oBAAAN,GACIx6B,KAAKi6B,YAAYtI,OACmB,MAAhC3xB,KAAK66B,0BACLn8B,OAAOqD,aAAa/B,KAAK66B,gCAClB76B,KAAK66B,wBAEpB,CACA,6BAAAF,GACuC,MAA/B36B,KAAK+6B,yBACL/6B,KAAK+6B,uBAAyBr8B,OAAOuD,WAAWjC,KAAKk6B,gBAAiBl6B,KAAKg6B,QAAQc,kBAE3F,CACA,mBAAAF,GACI56B,KAAKi6B,YAAYtI,OACkB,MAA/B3xB,KAAK+6B,yBACLr8B,OAAOqD,aAAa/B,KAAK+6B,+BAClB/6B,KAAK+6B,uBAEpB,CACA,MAAA90B,CAAON,GACH,IAAIoU,EACJsD,EAAS,eAAgB,CAAEE,OAAQ5X,IACnCjH,OAAOic,SAASvR,MAAiC,QAAxB2Q,EAAK/Z,KAAK2a,gBAAkC,IAAZZ,OAAqB,EAAIA,EAAGvL,aAAe9P,OAAOic,SAASvR,IACxH,CACA,aAAI2O,GACA,OAAO/X,KAAKg6B,QAAQjiB,SACxB,EAGJ,MAAMijB,GACF,WAAAt6B,GACIV,KAAKggB,SAAW,yBAChBhgB,KAAKi7B,mBAAqB,2BAC1Bj7B,KAAK4iB,SAAU,EACf5iB,KAAKk7B,wBAA4B5O,IAC7B,IAAK,MAAM3iB,KAAW3J,KAAKm7B,kBACvBxxB,EAAQpC,QAEf,CACL,CACA,KAAAxG,GACSf,KAAK4iB,UACN5iB,KAAK4iB,SAAU,EACfxhB,iBAAiB,qBAAsBpB,KAAKk7B,yBAAyB,GAE7E,CACA,IAAA55B,GACQtB,KAAK4iB,UACL5iB,KAAK4iB,SAAU,EACfphB,oBAAoB,qBAAsBxB,KAAKk7B,yBAAyB,GAEhF,CACA,qBAAIC,GACA,MAAO,IAAIn8B,SAAS2kB,iBAAiB3jB,KAAKggB,aAAchgB,KAAKo7B,iCACjE,CACA,oCAAIA,GACA,MAAMpc,EAAWhgB,SAAS2kB,iBAAiB3jB,KAAKi7B,oBAIhD,OAHIjc,EAASvf,QACTE,QAAQ07B,KAAK,OAAOr7B,KAAKi7B,0FAA0Fj7B,KAAKggB,qBAErH,IAAIhB,EACf,EAGJ,MAAMsc,GACF,WAAA56B,CAAYs5B,EAASrwB,GACjB3J,KAAKg6B,QAAUA,EACfh6B,KAAK2J,QAAUA,EACf3J,KAAKwtB,gBAAkB,IAAI3B,EAAgB7rB,KAAM2J,GACjD3J,KAAKu7B,mBAAqB,IAAI1S,EAAmB7oB,KAAM2J,EAC3D,CACA,KAAA5I,GACIf,KAAKwtB,gBAAgBzsB,QACrBf,KAAKu7B,mBAAmBx6B,OAC5B,CACA,IAAAO,GACItB,KAAKwtB,gBAAgBlsB,OACrBtB,KAAKu7B,mBAAmBj6B,MAC5B,CACA,wBAAA4qB,CAAyBviB,EAAS6xB,EAAWlP,GACzC,OAAOtsB,KAAKy7B,eAAe9xB,EAC/B,CACA,oBAAAyiB,CAAqBziB,EAASvF,EAAKqB,GAC/B,MAAMo0B,EAAQ75B,KAAK07B,iBAAiB/xB,GAChCkwB,GACAA,EAAMrhB,SAAS4T,qBAAqBziB,EAASvF,EAAKqB,EAE1D,CACA,cAAA4jB,CAAe1f,EAAS0M,GACpB,OAA0C,MAAlC1M,EAAQ0N,QAAQ,gBACpBrX,KAAK27B,aAAahyB,EAAS0M,IAC3BrW,KAAKy7B,eAAe9xB,EAAS0M,EACrC,CACA,aAAAmT,CAAc7f,EAAS0M,GACnB,MAAMwjB,EAAQ75B,KAAK07B,iBAAiB/xB,EAAS0M,GACzCwjB,GACAA,EAAMrhB,SAASgR,cAAc7f,EAAS0M,EAE9C,CACA,YAAAslB,CAAarlB,EAAMD,GACf,IAAI0D,EACJ,MAAM3S,EAASqT,EAAUnE,EAAMD,GACzBulB,EAAO57B,KAAK2J,QAAQkQ,cAAchQ,cAAc,2BAChD+Q,EAAeV,EAA8E,QAAnEH,EAAK6hB,aAAwC,EAAIA,EAAK9b,eAAiC,IAAZ/F,EAAgBA,EAAK,KAChI,OAAO/Z,KAAKy7B,eAAenlB,EAAMD,IAAcqE,EAAoBtT,EAAQwT,EAC/E,CACA,cAAA6gB,CAAe9xB,EAAS0M,GAIpB,GAHsB1M,aAAmBkN,gBACnC7W,KAAKg6B,QAAQ6B,wBAAwBlyB,EAAS0M,GAC9CrW,KAAKg6B,QAAQ8B,qBAAqBnyB,GACrB,CACf,MAAMkwB,EAAQ75B,KAAK07B,iBAAiB/xB,EAAS0M,GAC7C,QAAOwjB,GAAQA,GAASlwB,EAAQ0N,QAAQ,cAC5C,CAEI,OAAO,CAEf,CACA,gBAAAqkB,CAAiB/xB,EAAS0M,GACtB,MAAMiS,GAAMjS,aAAkD,EAAIA,EAAUvM,aAAa,sBAAwBH,EAAQG,aAAa,oBACtI,GAAIwe,GAAY,QAANA,EAAc,CACpB,MAAMuR,EAAQ75B,KAAK2J,QAAQE,cAAc,IAAIye,qBAC7C,GAAIuR,aAAiB3hB,EACjB,OAAO2hB,CAEf,CACJ,EAGJ,MAAMkC,GACF,WAAAr7B,CAAY8X,GACRxY,KAAK21B,sBAAwB/W,IAC7B5e,KAAKq2B,gBAAkB,CAAC,EACxBr2B,KAAK4iB,SAAU,EACf5iB,KAAKg8B,YAAa,EAClBh8B,KAAKi8B,WAAcx2B,IACf,GAAIzF,KAAKk8B,uBAAwB,CAC7B,MAAM,MAAEC,GAAU12B,EAAMR,OAAS,CAAC,EAClC,GAAIk3B,EAAO,CACPn8B,KAAK2a,SAAW,IAAIP,IAAI1b,OAAOic,SAASvR,MACxC,MAAM,sBAAEusB,GAA0BwG,EAClCn8B,KAAK21B,sBAAwBA,EAC7B31B,KAAKwY,SAAS4jB,iDAAiDp8B,KAAK2a,SAAUgb,EAClF,CACJ,GAEJ31B,KAAKq8B,WAAarf,MAAOsP,UAn3DtBhU,QAAQC,UAq3DPvY,KAAKg8B,YAAa,GAEtBh8B,KAAKwY,SAAWA,CACpB,CACA,KAAAzX,GACSf,KAAK4iB,UACNxhB,iBAAiB,WAAYpB,KAAKi8B,YAAY,GAC9C76B,iBAAiB,OAAQpB,KAAKq8B,YAAY,GAC1Cr8B,KAAK4iB,SAAU,EACf5iB,KAAKqJ,QAAQ,IAAI+Q,IAAI1b,OAAOic,SAASvR,OAE7C,CACA,IAAA9H,GACQtB,KAAK4iB,UACLphB,oBAAoB,WAAYxB,KAAKi8B,YAAY,GACjDz6B,oBAAoB,OAAQxB,KAAKq8B,YAAY,GAC7Cr8B,KAAK4iB,SAAU,EAEvB,CACA,IAAA1iB,CAAKya,EAAUgb,GACX31B,KAAKo3B,OAAO5X,QAAQE,UAAW/E,EAAUgb,EAC7C,CACA,OAAAtsB,CAAQsR,EAAUgb,GACd31B,KAAKo3B,OAAO5X,QAAQC,aAAc9E,EAAUgb,EAChD,CACA,MAAAyB,CAAO/W,EAAQ1F,EAAUgb,EAAwB/W,KAC7C,MAAM3Z,EAAQ,CAAEk3B,MAAO,CAAExG,0BACzBtV,EAAOtb,KAAKya,QAASva,EAAO,GAAI0V,EAASvR,MACzCpJ,KAAK2a,SAAWA,EAChB3a,KAAK21B,sBAAwBA,CACjC,CACA,+BAAAW,CAAgCX,GAC5B,OAAO31B,KAAKq2B,gBAAgBV,IAA0B,CAAC,CAC3D,CACA,qBAAA2G,CAAsBC,GAClB,MAAM,sBAAE5G,GAA0B31B,KAC5Bq2B,EAAkBr2B,KAAKq2B,gBAAgBV,GAC7C31B,KAAKq2B,gBAAgBV,GAAyB1qB,OAAOuc,OAAOvc,OAAOuc,OAAO,CAAC,EAAG6O,GAAkBkG,EACpG,CACA,gCAAAC,GACI,IAAIziB,EACC/Z,KAAKy8B,4BACNz8B,KAAKy8B,0BAAiE,QAApC1iB,EAAKyF,QAAQkd,yBAA2C,IAAZ3iB,EAAgBA,EAAK,OACnGyF,QAAQkd,kBAAoB,SAEpC,CACA,oCAAAC,GACQ38B,KAAKy8B,4BACLjd,QAAQkd,kBAAoB18B,KAAKy8B,iCAC1Bz8B,KAAKy8B,0BAEpB,CACA,oBAAAP,GACI,OAAOl8B,KAAK48B,cAChB,CACA,YAAAA,GACI,OAAO58B,KAAKg8B,YAAqC,YAAvBh9B,SAASkG,UACvC,EAGJ,MAAM23B,GACF,WAAAn8B,CAAY8X,GACRxY,KAAKwY,SAAWA,CACpB,CACA,YAAAskB,CAAaniB,EAAU/K,EAAU,CAAC,GAC1B5P,KAAKwY,SAASukB,iCAAiCpiB,EAAU/K,EAAQxI,UAC7DsT,EAAoBC,EAAU3a,KAAKo2B,KAAK5N,SAAS5N,cACjD5a,KAAKwY,SAASugB,wBAAwBpe,EAAU/K,GAGhDlR,OAAOic,SAASvR,KAAOuR,EAASnM,WAG5C,CACA,UAAA2rB,CAAWhgB,EAAWwb,EAAuB/lB,EAAU,CAAC,GACpD5P,KAAKsB,OACLtB,KAAKg9B,aAAe,IAAItH,GAAM11B,KAAMka,EAAUC,GAAYwb,EAAuB1qB,OAAOuc,OAAO,CAAEpF,SAAUpiB,KAAK2a,UAAY/K,IAC5H5P,KAAKg9B,aAAaj8B,OACtB,CACA,UAAAk8B,CAAW3mB,EAAMD,GACbrW,KAAKsB,OACLtB,KAAK6mB,eAAiB,IAAI3C,EAAelkB,KAAMsW,EAAMD,GAAW,GAChErW,KAAK6mB,eAAe9lB,OACxB,CACA,IAAAO,GACQtB,KAAK6mB,iBACL7mB,KAAK6mB,eAAevlB,cACbtB,KAAK6mB,gBAEZ7mB,KAAKg9B,eACLh9B,KAAKg9B,aAAa/rB,gBACXjR,KAAKg9B,aAEpB,CACA,WAAI7G,GACA,OAAOn2B,KAAKwY,SAAS2d,OACzB,CACA,QAAIC,GACA,OAAOp2B,KAAKwY,SAAS4d,IACzB,CACA,WAAI5W,GACA,OAAOxf,KAAKwY,SAASgH,OACzB,CACA,qBAAAsH,CAAsBD,GACgC,mBAAvC7mB,KAAKm2B,QAAQrP,uBACpB9mB,KAAKm2B,QAAQrP,sBAAsBD,EAE3C,CACA,yCAAMS,CAAoCT,EAAgBpF,GACtD,GAAIoF,GAAkB7mB,KAAK6mB,eAAgB,CACvC,MAAMrK,QAAqBiF,EAAcjF,aACzC,GAAIA,EAAc,CACd,MAAM8Y,EAAsBzO,EAAe5E,OACtCqT,GACDt1B,KAAKo2B,KAAK8G,qBAEd,MAAM,WAAEnhB,EAAU,WAAEE,GAAewF,EAE7B0b,EAAe,CACjB/1B,OAFWpH,KAAKo9B,2BAA2BvW,GAG3CyO,sBACA5Z,SAAU,CAAEK,aAAYS,eAAcP,eAE1Cjc,KAAK88B,aAAarb,EAAc9G,SAAUwiB,EAC9C,CACJ,CACJ,CACA,sCAAMnW,CAAiCH,EAAgBpF,GACnD,MAAMjF,QAAqBiF,EAAcjF,aACzC,GAAIA,EAAc,CACd,MAAMgM,EAAWuL,EAAaC,eAAexX,GACzCiF,EAAczF,kBACRhc,KAAKo2B,KAAKoC,YAAYhQ,EAAUxoB,KAAKg9B,oBAGrCh9B,KAAKo2B,KAAKiC,WAAW7P,GAAU,GAAO,EAAMxoB,KAAKg9B,cAE3Dh9B,KAAKo2B,KAAK7L,cACVvqB,KAAKo2B,KAAK8G,oBACd,CACJ,CACA,qBAAA9V,CAAsBP,EAAgBriB,GAClC7E,QAAQ6E,MAAMA,EAClB,CACA,sBAAAijB,CAAuBZ,GACgC,mBAAxC7mB,KAAKm2B,QAAQ1O,wBACpBznB,KAAKm2B,QAAQ1O,uBAAuBZ,EAE5C,CACA,YAAA6P,CAAa0D,GACTp6B,KAAKwY,SAASke,aAAa0D,EAC/B,CACA,cAAApD,CAAeoD,GACXp6B,KAAKwY,SAASwe,eAAeoD,EACjC,CACA,4BAAAlE,CAA6Bvb,EAAUvT,GACnC,MAAMmU,EAASjB,EAAUK,GACnB0iB,EAAgB/iB,EAAUta,KAAKo2B,KAAKoD,sBACpC8D,EAAgC,YAAXl2B,QAA0C,IAAXmU,EAC1D,MAAmB,YAAXnU,GACJkU,EAAcX,KAAcW,EAActb,KAAKo2B,KAAKoD,wBACnD8D,GAAiC,MAAV/hB,GAAkBA,IAAW8hB,EAC7D,CACA,+BAAA9D,CAAgCgE,EAAQC,GACpCx9B,KAAKwY,SAAS+gB,gCAAgCgE,EAAQC,EAC1D,CACA,YAAI7iB,GACA,OAAO3a,KAAKwf,QAAQ7E,QACxB,CACA,yBAAIgb,GACA,OAAO31B,KAAKwf,QAAQmW,qBACxB,CACA,0BAAAyH,EAA2B,UAAE/mB,EAAS,YAAEkO,IACpC,OAAO5E,EAAetJ,EAAWkO,IAAgB,SACrD,GAIJ,SAAWkR,GACPA,EAAUA,EAAmB,QAAI,GAAK,UACtCA,EAAUA,EAAmB,QAAI,GAAK,UACtCA,EAAUA,EAAuB,YAAI,GAAK,cAC1CA,EAAUA,EAAoB,SAAI,GAAK,UAC1C,CALD,CAKGA,KAAcA,GAAY,CAAC,IAC9B,MAAMgI,GACF,WAAA/8B,CAAY8X,GACRxY,KAAK09B,MAAQjI,GAAUkI,QACvB39B,KAAK4iB,SAAU,EACf5iB,KAAK49B,oBAAsB,KACvB,MAAM,WAAE14B,GAAelF,KACL,eAAdkF,EACAlF,KAAK69B,oBAEc,YAAd34B,GACLlF,KAAK89B,kBAGb99B,KAAK+9B,eAAiB,KAClB/9B,KAAKwY,SAASulB,kBAElB/9B,KAAKwY,SAAWA,CACpB,CACA,KAAAzX,GACSf,KAAK4iB,UACF5iB,KAAK09B,OAASjI,GAAUkI,UACxB39B,KAAK09B,MAAQjI,GAAUpc,SAE3Bra,SAASoC,iBAAiB,mBAAoBpB,KAAK49B,qBAAqB,GACxEx8B,iBAAiB,WAAYpB,KAAK+9B,gBAAgB,GAClD/9B,KAAK4iB,SAAU,EAEvB,CACA,IAAAthB,GACQtB,KAAK4iB,UACL5jB,SAASwC,oBAAoB,mBAAoBxB,KAAK49B,qBAAqB,GAC3Ep8B,oBAAoB,WAAYxB,KAAK+9B,gBAAgB,GACrD/9B,KAAK4iB,SAAU,EAEvB,CACA,iBAAAib,GACQ79B,KAAK09B,OAASjI,GAAUpc,UACxBrZ,KAAK09B,MAAQjI,GAAUuI,YACvBh+B,KAAKwY,SAASylB,wBAEtB,CACA,cAAAH,GACI99B,KAAK69B,oBACD79B,KAAK09B,OAASjI,GAAUuI,cACxBh+B,KAAK09B,MAAQjI,GAAU9b,SACvB3Z,KAAKwY,SAASwjB,aAEtB,CACA,cAAI92B,GACA,OAAOlG,SAASkG,UACpB,EAGJ,MAAMg5B,GACF,WAAAx9B,CAAY8X,GACRxY,KAAK4iB,SAAU,EACf5iB,KAAKm+B,SAAW,KACZn+B,KAAKo+B,eAAe,CAAEpU,EAAGtrB,OAAO2/B,YAAapU,EAAGvrB,OAAO4/B,eAE3Dt+B,KAAKwY,SAAWA,CACpB,CACA,KAAAzX,GACSf,KAAK4iB,UACNxhB,iBAAiB,SAAUpB,KAAKm+B,UAAU,GAC1Cn+B,KAAKm+B,WACLn+B,KAAK4iB,SAAU,EAEvB,CACA,IAAAthB,GACQtB,KAAK4iB,UACLphB,oBAAoB,SAAUxB,KAAKm+B,UAAU,GAC7Cn+B,KAAK4iB,SAAU,EAEvB,CACA,cAAAwb,CAAeG,GACXv+B,KAAKwY,SAASgmB,sBAAsBD,EACxC,EAGJ,MAAME,GACF,MAAAjU,EAAO,SAAE9G,IACLoK,EAAMC,4BAA4B/tB,KAO1C,SAA2C0jB,GACvC,MAAMgb,EAA8BtW,EAA0BppB,SAASib,iBACjEwO,EAAsB,CAAC,EAC7B,IAAK,MAAMkW,KAA8BD,EAA6B,CAClE,MAAM,GAAEpW,GAAOqW,EACf,IAAK,MAAM/a,KAAiBF,EAASC,iBAAiB,gBAAiB,CACnE,MAAMib,EAAkBvW,EAAwBzE,EAAcG,gBAAgBjE,QAASwI,GACnFsW,IACAnW,EAAoBH,GAAM,CAACqW,EAA4BC,GAE/D,CACJ,CACA,OAAOnW,CACX,CApBgDoW,CAAkCnb,GAAW,IAAM1kB,SAASib,gBAAgBtD,YAAY+M,GACpI,CACA,aAAA0K,CAAc1F,EAAyBC,GACnCA,EAAoB3E,YAAY0E,EAAwBkG,WAAU,GACtE,CACA,YAAAJ,GAAiB,EAiBrB,MAAMsQ,GACF,WAAAp+B,CAAY8X,GACRxY,KAAK++B,QAAU,IAAIC,IACnBh/B,KAAK4iB,SAAU,EACf5iB,KAAKi/B,qBAAyBx5B,IAC1B,MAAMiW,EAkDlB,SAAgCjW,GAC5B,IAAIsU,EACJ,MAAM0H,EAAwC,QAAvB1H,EAAKtU,EAAM8X,cAAgC,IAAZxD,OAAqB,EAAIA,EAAG0H,cAClF,GAAIA,aAAyBhG,EACzB,OAAOgG,CAEf,CAxD6Byd,CAAuBz5B,GACpCiW,GAwDhB,SAA+BA,GAC3B,IAAI3B,EAEJ,OADoD,QAA/BA,EAAK2B,EAASS,mBAAqC,IAAZpC,EAAgBA,EAAK,IAC9DmB,WAAWmI,EAAclH,YAChD,CA5D4BgjB,CAAsBzjB,KAClCjW,EAAM6jB,iBACNtpB,KAAKo/B,uBAAuB1jB,GAEnC,EACD1b,KAAKq/B,oBAAuB55B,IACpBzF,KAAK4iB,SAAgC,iBAAdnd,EAAM9B,MAC7B3D,KAAKs/B,mBAAmB75B,EAAM9B,OAGtC3D,KAAKwY,SAAWA,CACpB,CACA,KAAAzX,GACSf,KAAK4iB,UACN5iB,KAAK4iB,SAAU,EACfxhB,iBAAiB,8BAA+BpB,KAAKi/B,sBAAsB,GAEnF,CACA,IAAA39B,GACQtB,KAAK4iB,UACL5iB,KAAK4iB,SAAU,EACfphB,oBAAoB,8BAA+BxB,KAAKi/B,sBAAsB,GAEtF,CACA,mBAAAM,CAAoBhL,GACXv0B,KAAKw/B,wBAAwBjL,KAC9Bv0B,KAAK++B,QAAQt2B,IAAI8rB,GACjBA,EAAOnzB,iBAAiB,UAAWpB,KAAKq/B,qBAAqB,GAErE,CACA,sBAAAI,CAAuBlL,GACfv0B,KAAKw/B,wBAAwBjL,KAC7Bv0B,KAAK++B,QAAQ1Z,OAAOkP,GACpBA,EAAO/yB,oBAAoB,UAAWxB,KAAKq/B,qBAAqB,GAExE,CACA,uBAAAG,CAAwBjL,GACpB,OAAOv0B,KAAK++B,QAAQ/zB,IAAIupB,EAC5B,CACA,4BAAM6K,CAAuB1jB,GACzB,MAAMsC,QAAatC,EAASc,aACxBwB,GACAhe,KAAKs/B,mBAAmBthB,EAEhC,CACA,kBAAAshB,CAAmBthB,GACfhe,KAAKwY,SAASknB,0BAA0Brc,EAAcC,KAAKtF,GAC/D,EAeJ,MAAM2hB,WAAsB5Q,EACxB,oBAAOhE,CAAcyE,EAAgBC,GACjC,MAAM,gBAAExV,EAAe,KAAEqG,GAASthB,SAClCib,EAAgB2lB,aAAanQ,EAAYnP,EAC7C,CACA,YAAMkK,GACFxqB,KAAK6/B,qBACL7/B,KAAKowB,wBACT,CACA,kBAAAyP,GACI,MAAM,gBAAE5lB,EAAe,KAAErQ,GAAS5K,SAClCib,EAAgB2lB,aAAa5/B,KAAK8/B,QAASl2B,GAC3C5J,KAAK+qB,cAAc/qB,KAAKwvB,eAAgBxvB,KAAKyvB,WACjD,CACA,sBAAAW,GACI,IAAK,MAAM2P,KAAsB//B,KAAKggC,eAAgB,CAClD,MAAM3N,EAAa0N,EAAmB1N,WACtC,GAAIA,EAAY,CACZ,MAAM1oB,EAAU+S,EAAsBqjB,GACtC1N,EAAWuN,aAAaj2B,EAASo2B,EACrC,CACJ,CACJ,CACA,WAAID,GACA,OAAO9/B,KAAK2qB,YAAYwJ,aAAaxqB,OACzC,CACA,kBAAIq2B,GACA,OAAOhhC,SAASib,gBAAgB0J,iBAAiB,SACrD,EAGJ,MAAMsc,WAAqBlR,EACvB,oBAAOhE,CAAcyE,EAAgBC,GAC7BzwB,SAASshB,MAAQmP,aAAsByQ,gBACvClhC,SAASshB,KAAK0D,YAAYyL,GAG1BzwB,SAASib,gBAAgBtD,YAAY8Y,EAE7C,CACA,gBAAI/E,GACA,OAAO1qB,KAAK2qB,YAAYsK,aAAej1B,KAAKmgC,2BAChD,CACA,gBAAI7U,GACA,OAAKtrB,KAAK2qB,YAAYsK,YAKjBj1B,KAAKmgC,iCAAV,EACW,CACHx6B,OAAQ,4BANL,CACHA,OAAQ,gCAQpB,CACA,qBAAM8lB,SACIzrB,KAAKogC,WACf,CACA,YAAM5V,GACExqB,KAAKivB,kBACCjvB,KAAKqgC,aAEnB,CACA,eAAA3U,GACItT,MAAMsT,kBACD1rB,KAAK8Z,WACN9Z,KAAKovB,gCAEb,CACA,uBAAIkR,GACA,OAAOtgC,KAAKgvB,gBAAgBmF,YAChC,CACA,mBAAIoM,GACA,OAAOvgC,KAAK2qB,YAAYwJ,YAC5B,CACA,cAAI1E,GACA,OAAOzvB,KAAK2qB,YAAYhhB,OAC5B,CACA,eAAMy2B,GACF,MAAMI,EAAqBxgC,KAAKygC,2BAC1BC,EAAwB1gC,KAAK2gC,gCACnC3gC,KAAK4gC,kCACCJ,QACAE,CACV,CACA,iBAAML,SACIrgC,KAAK+tB,4BAA4B/Q,UACnChd,KAAK6gC,wBACC7gC,KAAK8gC,iBAEnB,CACA,+BAAIX,GACA,OAAOngC,KAAKsgC,oBAAoBnN,yBAA2BnzB,KAAKugC,gBAAgBpN,uBACpF,CACA,mCAAMwN,GACF,MAAMI,EAAkB,GACxB,IAAK,MAAMp3B,KAAW3J,KAAKghC,0BACvBD,EAAgB7gC,KAAKkf,EAAYzV,IACjC3K,SAAS4K,KAAK+M,YAAYhN,SAExB2O,QAAQ2oB,IAAIF,EACtB,CACA,yBAAAH,GACI,IAAK,MAAMj3B,KAAW3J,KAAKkhC,sBACvBliC,SAAS4K,KAAK+M,YAAY+F,EAAsB/S,GAExD,CACA,8BAAM82B,GACF,MAAMU,EAAkB,IAAInhC,KAAKohC,4BACjC,IAAK,MAAMz3B,KAAW3J,KAAKqhC,+BAClBrhC,KAAKshC,8BAA8B33B,EAASw3B,IAC7CniC,SAAS4K,KAAKgN,YAAYjN,GAGlC,IAAK,MAAMA,KAAWw3B,EAClBniC,SAAS4K,KAAK+M,YAAYhN,EAElC,CACA,6BAAA23B,CAA8B33B,EAAS43B,GACnC,IAAK,MAAOpyB,EAAOsgB,KAAe8R,EAAYzgB,UAAW,CACrD,GAAuB,SAAnBnX,EAAQkqB,QAAoB,CAC5B,GAA0B,SAAtBpE,EAAWoE,QACX,SAEJ,GAAIlqB,EAAQ6Z,WAAaiM,EAAWjM,UAEhC,OADA+d,EAAYttB,OAAO9E,EAAO,IACnB,CAEf,CACA,GAAIsgB,EAAW+R,YAAY73B,GAEvB,OADA43B,EAAYttB,OAAO9E,EAAO,IACnB,CAEf,CACA,OAAO,CACX,CACA,oCAAAsyB,GACI,IAAK,MAAM93B,KAAW3J,KAAKqhC,+BACvBriC,SAAS4K,KAAKgN,YAAYjN,EAElC,CACA,8BAAA+3B,GACI,IAAK,MAAM/3B,KAAW3J,KAAKohC,2BACvBpiC,SAAS4K,KAAK+M,YAAYhN,EAElC,CACA,eAAAk3B,GACI7hC,SAAS2iC,UAAU3hC,KAAKyvB,YACxBzvB,KAAK4hC,+BACT,CACA,6BAAAA,GACI,IAAK,MAAM9d,KAAsB9jB,KAAK6hC,sBAAuB,CACzD,MAAMlR,EAAyBjU,EAAsBoH,GACrDA,EAAmBE,YAAY2M,EACnC,CACJ,CACA,mBAAMmQ,SACI9gC,KAAK+qB,cAAc/qB,KAAKwvB,eAAgBxvB,KAAKyvB,WACvD,CACA,6BAAIuR,GACA,OAAOhhC,KAAKugC,gBAAgBjN,mCAAmCtzB,KAAKsgC,oBACxE,CACA,yBAAIY,GACA,OAAOlhC,KAAKugC,gBAAgBnN,+BAA+BpzB,KAAKsgC,oBACpE,CACA,kCAAIe,GACA,OAAOrhC,KAAKsgC,oBAAoB9M,mBACpC,CACA,8BAAI4N,GACA,OAAOphC,KAAKugC,gBAAgB/M,mBAChC,CACA,yBAAIqO,GACA,OAAO7hC,KAAKyvB,WAAW9L,iBAAiB,SAC5C,EAGJ,MAAMme,GACF,WAAAphC,CAAYqhC,GACR/hC,KAAKgT,KAAO,GACZhT,KAAKgiC,UAAY,CAAC,EAClBhiC,KAAK+hC,KAAOA,CAChB,CACA,GAAA/2B,CAAI2P,GACA,OAAOa,EAAWb,KAAa3a,KAAKgiC,SACxC,CACA,GAAAzsB,CAAIoF,GACA,GAAI3a,KAAKgL,IAAI2P,GAAW,CACpB,MAAM6N,EAAWxoB,KAAKiiC,KAAKtnB,GAE3B,OADA3a,KAAKkiC,MAAMvnB,GACJ6N,CACX,CACJ,CACA,GAAArD,CAAIxK,EAAU6N,GAGV,OAFAxoB,KAAKmiC,MAAMxnB,EAAU6N,GACrBxoB,KAAKkiC,MAAMvnB,GACJ6N,CACX,CACA,KAAA4Z,GACIpiC,KAAKgiC,UAAY,CAAC,CACtB,CACA,IAAAC,CAAKtnB,GACD,OAAO3a,KAAKgiC,UAAUxmB,EAAWb,GACrC,CACA,KAAAwnB,CAAMxnB,EAAU6N,GACZxoB,KAAKgiC,UAAUxmB,EAAWb,IAAa6N,CAC3C,CACA,KAAA0Z,CAAMvnB,GACF,MAAM1T,EAAMuU,EAAWb,GACjBxL,EAAQnP,KAAKgT,KAAK7P,QAAQ8D,GAC5BkI,GAAS,GACTnP,KAAKgT,KAAKiB,OAAO9E,EAAO,GAC5BnP,KAAKgT,KAAKqvB,QAAQp7B,GAClBjH,KAAKsiC,MACT,CACA,IAAAA,GACI,IAAK,MAAMr7B,KAAOjH,KAAKgT,KAAKiB,OAAOjU,KAAK+hC,aAC7B/hC,KAAKgiC,UAAU/6B,EAE9B,EAGJ,MAAMs7B,WAAiB9Y,EACnB,WAAA/oB,GACI0X,SAASjL,WACTnN,KAAKwiC,cAAgB,IAAIV,GAAc,IACvC9hC,KAAKw5B,qBAAuB,IAAIpf,IAAIO,SAASvR,MAC7CpJ,KAAKq5B,eAAgB,CACzB,CACA,UAAAhB,CAAW7P,EAAU1O,GAAY,EAAOmV,GAAa,EAAMmL,GACvD,MAAM3P,EAAW,IAAIwV,GAAajgC,KAAKwoB,SAAUA,EAAUyX,GAAalV,cAAejR,EAAWmV,GAOlG,OANKxE,EAASC,aAIV0P,SAA8CA,EAAMjD,gBAHpDn3B,KAAKq5B,eAAgB,EAKlBr5B,KAAKwqB,OAAOC,EACvB,CACA,WAAA+N,CAAYhQ,EAAU4R,GAClBA,SAA8CA,EAAMjD,gBACpD,MAAM1M,EAAW,IAAIkV,GAAc3/B,KAAKwoB,SAAUA,EAAUmX,GAAc5U,eAAe,GACzF,OAAO/qB,KAAKwqB,OAAOC,EACvB,CACA,kBAAAyS,GACIl9B,KAAKwiC,cAAcJ,OACvB,CACA,mBAAMhK,CAAc5P,EAAWxoB,KAAKwoB,UAChC,GAAIA,EAASwM,YAAa,CACtBh1B,KAAKwY,SAASiqB,wBACd,MAAQjJ,qBAAsB7e,GAAa3a,WAp9E5C,IAAIsY,QAASC,GAAYtW,WAAW,IAAMsW,IAAW,IAs9EpD,MAAMmqB,EAAiBla,EAASjM,QAEhC,OADAvc,KAAKwiC,cAAcrd,IAAIxK,EAAU+nB,GAC1BA,CACX,CACJ,CACA,4BAAAhK,CAA6B/d,GACzB,OAAO3a,KAAKwiC,cAAcjtB,IAAIoF,EAClC,CACA,YAAI6N,GACA,OAAOuL,EAAaG,YAAYl0B,KAAK2J,QACzC,EAGJ,MAAMg5B,GACF,WAAAjiC,CAAY8X,GACRxY,KAAKggB,SAAW,wBAChBhgB,KAAKwY,SAAWA,CACpB,CACA,iBAAIgqB,GACA,OAAOxiC,KAAKwY,SAAST,UAAUqe,KAAKoM,aACxC,CACA,KAAAzhC,GACI,GAA4B,YAAxB/B,SAASkG,WACT,OAAOlG,SAASoC,iBAAiB,mBAAoB,KACjDpB,KAAKmrB,0BAA0BnsB,SAASshB,QAI5CtgB,KAAKmrB,0BAA0BnsB,SAASshB,KAEhD,CACA,yBAAA6K,CAA0BxhB,GACtB,IAAK,MAAMgjB,KAAQhjB,EAAQga,iBAAiB3jB,KAAKggB,UAC7ChgB,KAAK4iC,WAAWjW,EAExB,CACA,gBAAMiW,CAAWjW,GACb,MAAMhS,EAAW,IAAIP,IAAIuS,EAAKvjB,MAC9B,IAAIpJ,KAAKwiC,cAAcx3B,IAAI2P,GAG3B,IACI,MAAMe,QAAiB0F,MAAMzG,EAASnM,WAAY,CAAEiO,QAAS,CAAE,eAAgB,OAAQ4F,OAAQ,eACzF/F,QAAqBZ,EAASnI,OAC9BiV,EAAWuL,EAAaC,eAAe1X,GAC7Ctc,KAAKwiC,cAAcrd,IAAIxK,EAAU6N,EACrC,CACA,MAAO1J,GACP,CACJ,EA4SJ,SAAS+jB,GAAkCz+B,GACvC6G,OAAO63B,iBAAiB1+B,EAAK2+B,GACjC,CACA,MAAMA,GAAwC,CAC1CC,YAAa,CACT,GAAAztB,GACI,OAAOvV,KAAKwO,UAChB,IAyBFy0B,GAAgB,CAClB,KAAAC,GACIljC,KAAKmjC,eAAeC,QAASx0B,IAAQ,IAAImL,EAAI,OAAkC,QAA1BA,EAAKnL,EAAEuI,qBAAuC,IAAZ4C,OAAqB,EAAIA,EAAGiY,aAAahyB,KAAKqjC,gBAAiBz0B,EAAE00B,cAC5J,EACA,MAAA1e,GACI5kB,KAAKujC,gCACLvjC,KAAKmjC,eAAeC,QAASx0B,GAAMA,EAAEgW,OAAO5kB,KAAKqjC,iBACrD,EACA,MAAAG,GACIxjC,KAAKmjC,eAAeC,QAASx0B,IAAQ,IAAImL,EAAI,OAAkC,QAA1BA,EAAKnL,EAAEuI,qBAAuC,IAAZ4C,OAAqB,EAAIA,EAAGiY,aAAahyB,KAAKqjC,gBAAiBz0B,IAC1J,EACA,OAAA60B,GACIzjC,KAAKujC,gCACLvjC,KAAKmjC,eAAeC,QAASx0B,GAAMA,EAAE60B,QAAQzjC,KAAKqjC,iBACtD,EACA,MAAA97B,GACIvH,KAAKmjC,eAAeC,QAASx0B,GAAMA,EAAErH,SACzC,EACA,OAAA8B,GACIrJ,KAAKmjC,eAAeC,QAASx0B,GAAMA,EAAEoV,YAAYhkB,KAAKqjC,iBAC1D,EACA,MAAAjM,GACIp3B,KAAKmjC,eAAeC,QAASM,IACzBA,EAAclgB,UAAY,GAC1BkgB,EAAc9e,OAAO5kB,KAAKqjC,kBAElC,GAGErJ,GAAU,IAtWhB,MACI,WAAAt5B,GACIV,KAAK+X,UAAY,IAAI8kB,GAAU78B,MAC/BA,KAAKwf,QAAU,IAAIuc,GAAQ/7B,MAC3BA,KAAK2jC,UAAY,IAAIhB,GAAU3iC,MAC/BA,KAAKo2B,KAAO,IAAImM,GAASviC,KAAMhB,SAASib,iBACxCja,KAAKm2B,QAAU,IAAI4D,GAAe/5B,MAClCA,KAAK4jC,aAAe,IAAInG,GAAaz9B,MACrCA,KAAK6jC,cAAgB,IAAI7I,GACzBh7B,KAAK8jC,kBAAoB,IAAIvX,EAAkBvsB,KAAMtB,QACrDsB,KAAKu7B,mBAAqB,IAAI1S,EAAmB7oB,KAAMhB,UACvDgB,KAAK+jC,eAAiB,IAAI7F,GAAel+B,MACzCA,KAAKgkC,eAAiB,IAAIlF,GAAe9+B,MACzCA,KAAKikC,sBAAwB,IAAI1W,EAAsBvtB,KAAMhB,SAASib,iBACtEja,KAAKkkC,gBAAkB,IAAI5I,GAAgBt7B,KAAMhB,SAASib,iBAC1Dja,KAAKmkC,sBAAwB,IAAI1F,GACjCz+B,KAAKokC,OAAQ,EACbpkC,KAAKC,SAAU,EACfD,KAAK86B,iBAAmB,IACxB96B,KAAK4iB,SAAU,EACf5iB,KAAKqkC,SAAW,IACpB,CACA,KAAAtjC,GACSf,KAAK4iB,UACN5iB,KAAK4jC,aAAa7iC,QAClBf,KAAK6jC,cAAc9iC,QACnBf,KAAKikC,sBAAsBljC,QAC3Bf,KAAK8jC,kBAAkB/iC,QACvBf,KAAKu7B,mBAAmBx6B,QACxBf,KAAK+jC,eAAehjC,QACpBf,KAAKgkC,eAAejjC,QACpBf,KAAKkkC,gBAAgBnjC,QACrBf,KAAKwf,QAAQze,QACbf,KAAK2jC,UAAU5iC,QACff,KAAK4iB,SAAU,EACf5iB,KAAKC,SAAU,EAEvB,CACA,OAAAqkC,GACItkC,KAAKC,SAAU,CACnB,CACA,IAAAqB,GACQtB,KAAK4iB,UACL5iB,KAAK4jC,aAAatiC,OAClBtB,KAAK6jC,cAAcviC,OACnBtB,KAAKikC,sBAAsB3iC,OAC3BtB,KAAK8jC,kBAAkBxiC,OACvBtB,KAAKu7B,mBAAmBj6B,OACxBtB,KAAK+jC,eAAeziC,OACpBtB,KAAKgkC,eAAe1iC,OACpBtB,KAAKkkC,gBAAgB5iC,OACrBtB,KAAKwf,QAAQle,OACbtB,KAAK4iB,SAAU,EAEvB,CACA,eAAA2hB,CAAgBpO,GACZn2B,KAAKm2B,QAAUA,CACnB,CACA,KAAAiE,CAAMzf,EAAU/K,EAAU,CAAC,GACvB,MAAMmgB,EAAengB,EAAQiqB,MAAQ76B,SAASC,eAAe2Q,EAAQiqB,OAAS,KAC1E9J,aAAwB7X,GACxB6X,EAAa7W,IAAMyB,EAASnM,WAC5BuhB,EAAa1X,QAGbrY,KAAK+X,UAAU+kB,aAAa5iB,EAAUS,GAAW/K,EAEzD,CACA,mBAAA2vB,CAAoBhL,GAChBv0B,KAAKgkC,eAAezE,oBAAoBhL,EAC5C,CACA,sBAAAkL,CAAuBlL,GACnBv0B,KAAKgkC,eAAevE,uBAAuBlL,EAC/C,CACA,mBAAAiQ,CAAoBh/B,GAChBxF,KAAKmkC,sBAAsB3Z,OAAOnH,EAAcC,KAAK9d,GACzD,CACA,UAAAi/B,GACIzkC,KAAKo2B,KAAK8G,oBACd,CACA,mBAAAwH,CAAoBC,GAChB3kC,KAAK86B,iBAAmB6J,CAC5B,CACA,WAAAC,CAAYC,GACR7kC,KAAKqkC,SAAWQ,CACpB,CACA,YAAIlqB,GACA,OAAO3a,KAAKwf,QAAQ7E,QACxB,CACA,yBAAIgb,GACA,OAAO31B,KAAKwf,QAAQmW,qBACxB,CACA,gDAAAyG,CAAiDzhB,EAAUgb,GACnD31B,KAAKC,QACLD,KAAK+X,UAAUoiB,WAAWxf,EAAUgb,EAAuB,CACvDvuB,OAAQ,UACR+tB,gBAAgB,IAIpBn1B,KAAKm2B,QAAQsE,gBAAgB,CACzB90B,OAAQ,kBAGpB,CACA,qBAAA64B,CAAsBD,GAClBv+B,KAAKwf,QAAQ8c,sBAAsB,CAAE7C,eAAgB8E,GACzD,CACA,4BAAA9Q,CAA6Bd,EAAMhS,GAC/B,OAAO3a,KAAK87B,qBAAqBnP,IAASjS,EAAoBC,EAAU3a,KAAKwoB,SAAS5N,aAC1F,CACA,2BAAAiT,GAAgC,CAChC,wBAAAd,CAAyBJ,EAAMhS,EAAUlV,GACrC,OAAQzF,KAAK87B,qBAAqBnP,IAC9BjS,EAAoBC,EAAU3a,KAAKwoB,SAAS5N,eAC5C5a,KAAK8kC,yCAAyCnY,EAAMhS,EAAUlV,EACtE,CACA,sBAAAunB,CAAuBL,EAAMhS,GACzB,MAAMvT,EAASpH,KAAK+kC,iBAAiBpY,GAC/B4I,EAAwB5I,EAAKlT,aAAa,qBAChDzZ,KAAKo6B,MAAMzf,EAASvR,KAAM,CAAEhC,SAAQmuB,yBACxC,CACA,gCAAAwH,CAAiCpiB,EAAUvT,GACvC,OAAOpH,KAAKk2B,6BAA6Bvb,EAAUvT,IAAWpH,KAAKglC,kCAAkCrqB,EACzG,CACA,uBAAAoe,CAAwBpe,EAAU/K,GAC9BizB,GAAkCloB,GAClC3a,KAAKm2B,QAAQ4C,wBAAwBpe,EAAU/K,EACnD,CACA,YAAA8mB,CAAa0D,GACJA,EAAM7E,uBACPtW,EAAWjgB,SAASib,iBAExB4oB,GAAkCzI,EAAMzf,UACnCyf,EAAM7D,QACPv2B,KAAKilC,uCAAuC7K,EAAMzf,SAAUyf,EAAMhzB,OAE1E,CACA,cAAA4vB,CAAeoD,GACXjb,EAAengB,SAASib,iBACxBja,KAAKklC,+BAA+B9K,EAAMT,mBAC9C,CACA,4BAAAzD,CAA6Bvb,EAAUvT,GACnC,OAAOpH,KAAK+X,UAAUme,6BAA6Bvb,EAAUvT,EACjE,CACA,+BAAAmyB,CAAgCgE,EAAQC,GACpCx9B,KAAKmlC,+CAA+C5H,EAAQC,EAChE,CACA,cAAAnU,CAAe/S,EAAMD,GACjB,MAAMjP,EAASqT,EAAUnE,EAAMD,GAC/B,OAAQrW,KAAK67B,wBAAwBvlB,EAAMD,IACvCqE,EAAoBR,EAAU9S,GAASpH,KAAKwoB,SAAS5N,aAC7D,CACA,aAAA4O,CAAclT,EAAMD,GAChBrW,KAAK+X,UAAUklB,WAAW3mB,EAAMD,EACpC,CACA,qBAAA4nB,GACIj+B,KAAKo2B,KAAKoD,qBAAuBx5B,KAAK2a,SACtC3a,KAAKklC,gCACT,CACA,UAAAlJ,GACIh8B,KAAKwf,QAAQgd,kCACjB,CACA,cAAAuB,GACI/9B,KAAKwf,QAAQmd,sCACjB,CACA,yBAAA+C,CAA0Bl6B,GACtBxF,KAAKwkC,oBAAoBh/B,EAC7B,CACA,qBAAAi9B,GACI,IAAI1oB,GACyC,QAAtCA,EAAK/Z,KAAK+X,UAAUilB,oBAAsC,IAAZjjB,OAAqB,EAAIA,EAAGwc,SAC7Ev2B,KAAKolC,wCAEb,CACA,qBAAApa,EAAsB,QAAErhB,GAAWiG,GAC/B,MAAMnK,EAAQzF,KAAKqlC,8BAA8B17B,EAASiG,IACpD,iBAAE8R,EAAkBnE,QAAQ,OAAEiN,IAAc/kB,EAIlD,OAHIzF,KAAKo2B,KAAK3L,UAAYD,IACtBxqB,KAAKo2B,KAAK3L,SAASM,cAAgBP,IAE/B9I,CACZ,CACA,oBAAAwJ,CAAqBoa,EAAWC,GAC5BvlC,KAAKo2B,KAAKoD,qBAAuBx5B,KAAKwf,QAAQ7E,SAC9C3a,KAAKwlC,8BACT,CACA,yBAAAra,CAA0BxhB,GACtB3J,KAAK2jC,UAAUxY,0BAA0BxhB,EAC7C,CACA,eAAA4hB,CAAgB5lB,GACZ3F,KAAKm2B,QAAQsE,gBAAgB90B,EACjC,CACA,WAAA8/B,CAAY5L,GACR75B,KAAK0lC,gCAAgC7L,EACzC,CACA,aAAA8L,CAAclkB,EAAeoY,GACzB75B,KAAK4lC,kCAAkCnkB,EAAeoY,EAC1D,CACA,wCAAAiL,CAAyCnY,EAAMhS,EAAUkrB,GAErD,OADc7lC,KAAK8lC,6CAA6CnZ,EAAMhS,EAAUkrB,GAClEnkB,gBAClB,CACA,iCAAAsjB,CAAkCrqB,GAE9B,OADc3a,KAAK+lC,wCAAwCprB,GAC7C+G,gBAClB,CACA,4CAAAokB,CAA6CnZ,EAAMhS,EAAUlV,GACzD,OAAO4X,EAAS,cAAe,CAC3BnL,OAAQya,EACRpP,OAAQ,CAAEnZ,IAAKuW,EAASvR,KAAM+iB,cAAe1mB,GAC7C6X,YAAY,GAEpB,CACA,uCAAAyoB,CAAwCprB,GACpC,OAAO0C,EAAS,qBAAsB,CAClCE,OAAQ,CAAEnZ,IAAKuW,EAASvR,MACxBkU,YAAY,GAEpB,CACA,sCAAA2nB,CAAuCtqB,EAAUvT,GAC7C,OAAOiW,EAAS,cAAe,CAAEE,OAAQ,CAAEnZ,IAAKuW,EAASvR,KAAMhC,WACnE,CACA,sCAAAg+B,GACI,OAAO/nB,EAAS,qBACpB,CACA,6BAAAgoB,CAA8BW,EAASp2B,GACnC,OAAOyN,EAAS,sBAAuB,CACnCE,OAAQtS,OAAOuc,OAAO,CAAEwe,WAAWp2B,GACnC0N,YAAY,GAEpB,CACA,4BAAAkoB,GACI,OAAOnoB,EAAS,eACpB,CACA,8BAAA6nB,CAA+Be,EAAS,CAAC,GACrC,OAAO5oB,EAAS,aAAc,CAC1BE,OAAQ,CAAEnZ,IAAKpE,KAAK2a,SAASvR,KAAM68B,WAE3C,CACA,8CAAAd,CAA+C5H,EAAQC,GACnD5f,cAAc,IAAIsoB,gBAAgB,aAAc,CAC5C3I,OAAQA,EAAO/uB,WACfgvB,OAAQA,EAAOhvB,aAEvB,CACA,+BAAAk3B,CAAgC7L,GAC5B,OAAOxc,EAAS,mBAAoB,CAAEnL,OAAQ2nB,GAClD,CACA,iCAAA+L,CAAkCnkB,EAAeoY,GAC7C,OAAOxc,EAAS,qBAAsB,CAClCE,OAAQ,CAAEkE,iBACVvP,OAAQ2nB,EACRvc,YAAY,GAEpB,CACA,uBAAAue,CAAwBvlB,EAAMD,GAC1B,GAAqB,OAAjBrW,KAAKqkC,SACL,OAAO,EAEN,CACD,MAAM8B,GAAyB9vB,GAAYrW,KAAK87B,qBAAqBzlB,GACrE,MAAqB,SAAjBrW,KAAKqkC,SACE8B,GAAiE,MAAvC7vB,EAAKe,QAAQ,uBAGvC8uB,GAA0BnmC,KAAK87B,qBAAqBxlB,EAEnE,CACJ,CACA,oBAAAwlB,CAAqBnyB,GACjB,MAAMy8B,EAAYrmB,EAAuBpW,EAAS,gBAC5C08B,EAActmB,EAAuBpW,EAAS,eACpD,OAAI3J,KAAKokC,OAASiC,GACVD,GAC+C,SAAxCA,EAAUt8B,aAAa,gBAO9Bs8B,GAC+C,QAAxCA,EAAUt8B,aAAa,aAM1C,CACA,gBAAAi7B,CAAiBpY,GACb,OAAOhN,EAAegN,IAAS,SACnC,CACA,YAAInE,GACA,OAAOxoB,KAAKo2B,KAAK5N,QACrB,GAgEE8d,GAAQ,IAnDd,MACI,WAAA5lC,CAAYs5B,GACRh6B,KAAKg6B,QAAUA,CACnB,CACA,KAAAoI,GACIpiC,KAAKg6B,QAAQyK,YACjB,CACA,iBAAA8B,GACIvmC,KAAKwmC,gBAAgB,GACzB,CACA,mBAAAC,GACIzmC,KAAKwmC,gBAAgB,WACzB,CACA,qBAAAE,GACI1mC,KAAKwmC,gBAAgB,aACzB,CACA,eAAAA,CAAgBtnC,IA3uFpB,SAAwBH,EAAM+gB,GAC1B,IAAInW,EAAUkW,EAAe9gB,GACxB4K,IACDA,EAAU3K,SAASmK,cAAc,QACjCQ,EAAQwP,aAAa,OAAQpa,GAC7BC,SAAS4K,KAAK+M,YAAYhN,IAE9BA,EAAQwP,aAAa,UAAW2G,EAEpC,CAmuFQ6mB,CAAe,sBAAuBznC,EAC1C,GAiCoB86B,KAChBjiB,UAAW6uB,IAAgB5M,GACnC,SAASj5B,KACLi5B,GAAQj5B,OACZ,CAOA,SAASw+B,GAAoBhL,GACzByF,GAAQuF,oBAAoBhL,EAChC,CACA,SAASkL,GAAuBlL,GAC5ByF,GAAQyF,uBAAuBlL,EACnC,CAkBA,IAAIsS,GAAqB57B,OAAO67B,OAAO,CACnC76B,UAAW,KACX8L,UAAW6uB,GACX5M,QAASA,GACTsM,MAAOA,GACPrG,aAAcA,GACdlM,aAAcA,EACdrE,cAAeA,EACf3uB,MAAOA,GACPwjC,gBAtCJ,SAAyBpO,GACrB6D,GAAQuK,gBAAgBpO,EAC5B,EAqCIiE,MApCJ,SAAezf,EAAU/K,GACrBoqB,GAAQI,MAAMzf,EAAU/K,EAC5B,EAmCI2vB,oBAAqBA,GACrBE,uBAAwBA,GACxB+E,oBA9BJ,SAA6Bh/B,GACzBw0B,GAAQwK,oBAAoBh/B,EAChC,EA6BIi/B,WA5BJ,WACI9kC,QAAQ07B,KAAK,2JACbrB,GAAQyK,YACZ,EA0BIC,oBAzBJ,SAA6BC,GACzB3K,GAAQ0K,oBAAoBC,EAChC,EAwBIoC,iBAvBJ,SAA0B5iB,GACtBD,EAAeC,cAAgBA,CACnC,EAsBIygB,YArBJ,SAAqBC,GACjB7K,GAAQ4K,YAAYC,EACxB,EAoBI5B,cAAeA,KAGnB,MAAM+D,WAA+B7f,OA+arC,SAAS8f,GAAoB3e,GACzB,GAAU,MAANA,EAAY,CACZ,MAAM3e,EAAU3K,SAASC,eAAeqpB,GACxC,GAAI3e,aAAmBuO,EACnB,OAAOvO,CAEf,CACJ,CACA,SAASu9B,GAAgBv9B,EAASw9B,GAC9B,GAAIx9B,EAAS,CACT,MAAMuP,EAAMvP,EAAQG,aAAa,OACjC,GAAW,MAAPoP,GAA6B,MAAdiuB,IA98GCC,EA88GuCD,EA78GxDjtB,EA68GmDhB,GA78GnC9P,MAAQ8Q,EAAUktB,GAAOh+B,MA88GxC,MAAM,IAAI+d,MAAM,6BAA6Bxd,EAAQ2e,yDAKzD,GAHI3e,EAAQkQ,gBAAkB7a,WAC1B2K,EAAU3K,SAAS6kB,WAAWla,GAAS,IAEvCA,aAAmBuO,EAGnB,OAFAvO,EAAQ+O,oBACR/O,EAAQgP,uBACDhP,CAEf,CAz9GJ,IAA4By9B,CA09G5B,CAEA,MAAMC,WAAsBtxB,YACxB,0BAAagV,CAAc0E,SACjBA,EAAW6X,eACrB,CACA,uBAAM5uB,GACF,UACU1Y,KAAKwqB,QACf,CACA,MAAOhmB,GACH7E,QAAQ6E,MAAMA,EAClB,CACA,QACIxE,KAAKkG,YACT,CACJ,CACA,YAAMskB,GACF,IAAIzQ,EACJ,OAAsC,QAA7BA,EAAK/Z,KAAK4qB,qBAAuC,IAAZ7Q,EAAgBA,EAAM/Z,KAAK4qB,cAAgB,WACrF,MAAMnlB,EAAQzF,KAAKunC,kBACfvnC,KAAK4d,cAAcnY,WACboY,UACApY,EAAM8X,OAAOiN,OAAOxqB,MAEjC,EANwF,EAO7F,CACA,UAAAkG,GACI,IACIlG,KAAKuH,QACT,CACA,MAAOwS,GAAM,CACjB,CACA,6BAAAwpB,GACIvjC,KAAKwnC,kBAAkBpE,QAASqE,GAAMA,EAAElgC,SAC5C,CACA,qBAAIigC,GACA,IAAIztB,EACJ,MAAM2tB,EAAmB1nC,KAAKmjC,eAAewE,QAAS/4B,GAAM,IAAIA,EAAEmZ,WAAWlgB,OAAQ4/B,KAAQA,EAAEnf,IACzFsf,EAAiB,KAAsC,QAA/B7tB,EAAK/Z,KAAKqjC,uBAAyC,IAAZtpB,OAAqB,EAAIA,EAAGgO,WAAa,IAAKlgB,OAAQ4/B,KAAQA,EAAEnf,IAAIpgB,IAAKu/B,GAAMA,EAAEnf,IACtJ,OAAOof,EAAiB7/B,OAAQ4/B,GAAMG,EAAelzB,SAAS+yB,EAAEnf,IACpE,CACA,iBAAIgf,GACA,GAAItnC,KAAKoH,OAAQ,CACb,MAAMygC,EAAiB5E,GAAcjjC,KAAKoH,QAC1C,GAAIygC,EACA,OAAOA,EAEX7nC,KAAKkW,MAAM,iBACf,CACAlW,KAAKkW,MAAM,8BACf,CACA,kBAAIitB,GACA,OAAInjC,KAAKkS,OACElS,KAAK8nC,mBAEP9nC,KAAK+nC,QACH/nC,KAAKgoC,2BAGZhoC,KAAKkW,MAAM,yCAEnB,CACA,mBAAImtB,GACA,OAAOrjC,KAAK+jB,gBAAgBjE,QAAQ8O,WAAU,EAClD,CACA,mBAAI7K,GACA,GAA+B,OAA3B/jB,KAAKswB,kBAA4B,CACjC,MAAM/M,EAAWvjB,KAAK6Z,cAAc1Q,cAAc,YAElD,OADAnJ,KAAK2W,YAAY4M,GACVA,CACX,CACK,GAAIvjB,KAAKswB,6BAA6B2X,oBACvC,OAAOjoC,KAAKswB,kBAEhBtwB,KAAKkW,MAAM,mDACf,CACA,UAAI9O,GACA,OAAOpH,KAAK8J,aAAa,SAC7B,CACA,UAAIoI,GACA,OAAOlS,KAAK8J,aAAa,SAC7B,CACA,WAAIi+B,GACA,OAAO/nC,KAAK8J,aAAa,UAC7B,CACA,KAAAoM,CAAM1Q,GACF,MAAM,IAAI2hB,MAAM,GAAGnnB,KAAKkoC,gBAAgB1iC,IAC5C,CACA,eAAI0iC,GACA,IAAInuB,EAAIC,EACR,OAAkG,QAA1FA,GAAiD,QAA1CD,EAAK/Z,KAAK8yB,UAAUnf,MAAM,kBAAoC,IAAZoG,EAAgBA,EAAK,IAAI,UAA4B,IAAZC,EAAgBA,EAAK,gBACnI,CACA,qBAAIutB,GACA,OAAO,IAAI/pB,YAAY,6BAA8B,CACjDC,SAAS,EACTH,YAAY,EACZC,OAAQ,CAAE4qB,UAAWnoC,KAAMwqB,OAAQ6c,GAActc,gBAEzD,CACA,sBAAI+c,GACA,IAAI/tB,EACJ,MAAMpQ,EAAwC,QAA7BoQ,EAAK/Z,KAAK6Z,qBAAuC,IAAZE,OAAqB,EAAIA,EAAG9a,eAAee,KAAKkS,QACtG,OAAgB,OAAZvI,EACO,CAACA,GAGD,EAEf,CACA,yBAAIq+B,GACA,IAAIjuB,EACJ,MAAMiF,EAAyC,QAA7BjF,EAAK/Z,KAAK6Z,qBAAuC,IAAZE,OAAqB,EAAIA,EAAG4J,iBAAiB3jB,KAAK+nC,SACzG,OAAwB,IAApB/oB,EAASvf,OACFiN,MAAMnH,UAAUrC,MAAM6B,KAAKia,GAG3B,EAEf,EAGJ,MAAMopB,WAA4BryB,YAC9B,WAAArV,GACI0X,SAASjL,WACTnN,KAAKqoC,aAAe,IACxB,CACA,iBAAA3vB,GACI1Y,KAAKqoC,aAAeroC,KAAKkZ,IAAIvF,MAAM,aAAe,IAAI9T,UAAUG,KAAKkZ,KAAO,IAAIovB,YAAYtoC,KAAKkZ,KACjGqmB,GAAoBv/B,KAAKqoC,aAC7B,CACA,oBAAA1vB,GACQ3Y,KAAKqoC,cACL5I,GAAuBz/B,KAAKqoC,aAEpC,CACA,OAAInvB,GACA,OAAOlZ,KAAK8J,aAAa,QAAU,EACvC,ECv1HJ,IAAIzG,GAMG,SAASklC,GAAYC,GAC1B,OAAOnlC,GAAWmlC,CACpB,CCWe,SAASC,GAAMhzB,GAC1B,OAAKA,GAAsB,iBAARA,EACfA,aAAetV,MAAQsV,aAAeizB,OAAejzB,EACrD/I,MAAM+H,QAAQgB,GAAaA,EAAIvN,IAAIugC,IAChCx9B,OAAO+H,KAAKyC,GAAK8I,OAAO,SAAUoqB,EAAK1hC,GAC1C,IAAI2hC,EAAQ3hC,EAAI,GAAG9B,cAAgB8B,EAAI/D,MAAM,GAAGmG,QAAQ,YAAa,SAAUw/B,EAAG7e,GAC9E,MAAO,IAAMA,EAAE7kB,aACnB,GAEA,OADAwjC,EAAIC,GAASH,GAAKhzB,EAAIxO,IACf0hC,CACX,EAAG,CAAC,GATwClzB,CAUhD,CF4zHAyC,EAAaO,oBAhlBb,MACI,WAAA/X,CAAYiJ,GACR3J,KAAK8oC,oBAAuBC,MAC5B/oC,KAAKgpC,oBAAsB,KAC3BhpC,KAAKipC,oBAAsB,OAC3BjpC,KAAKkpC,WAAY,EACjBlpC,KAAKmpC,eAAgB,EACrBnpC,KAAKopC,kBAAoB,IAAIpK,IAC7Bh/B,KAAKoH,OAAS,KACdpH,KAAKo1B,oBAAsB,EAAGzrB,cAC1B,MAAMkwB,EAAQlwB,EAAQE,cAAc,IAAM7J,KAAK2J,QAAQ2e,IACnDuR,GAAS75B,KAAKqpC,sBACdxP,EAAMyP,mBAAmBtpC,KAAKqpC,qBAAqBthB,iBAEhD/nB,KAAKqpC,sBAEhBrpC,KAAK2J,QAAUA,EACf3J,KAAKo2B,KAAO,IAAIzK,EAAU3rB,KAAMA,KAAK2J,SACrC3J,KAAKupC,mBAAqB,IAAI5mB,EAAmB3iB,KAAMA,KAAK2J,SAC5D3J,KAAKikC,sBAAwB,IAAI1W,EAAsBvtB,KAAMA,KAAK2J,SAClE3J,KAAKwtB,gBAAkB,IAAI3B,EAAgB7rB,KAAMA,KAAK2J,SACtD3J,KAAK21B,sBAAwB/W,IAC7B5e,KAAKu7B,mBAAqB,IAAI1S,EAAmB7oB,KAAMA,KAAK2J,QAChE,CACA,OAAAJ,GACSvJ,KAAKkpC,YACNlpC,KAAKkpC,WAAY,EACblpC,KAAKwpC,cAAgBhyB,EAAkB8B,KACvCtZ,KAAKupC,mBAAmBxoC,QAGxBf,KAAKypC,gBAETzpC,KAAKikC,sBAAsBljC,QAC3Bf,KAAKwtB,gBAAgBzsB,QACrBf,KAAKu7B,mBAAmBx6B,QAEhC,CACA,UAAAmF,GACQlG,KAAKkpC,YACLlpC,KAAKkpC,WAAY,EACjBlpC,KAAKupC,mBAAmBjoC,OACxBtB,KAAKikC,sBAAsB3iC,OAC3BtB,KAAKwtB,gBAAgBlsB,OACrBtB,KAAKu7B,mBAAmBj6B,OAEhC,CACA,eAAA2X,GACQjZ,KAAKwpC,cAAgBhyB,EAAkB+B,OACvCvZ,KAAKypC,eAEb,CACA,gBAAAzwB,GACQhZ,KAAK0pC,oBAAoB,SAEzB1pC,KAAK2J,QAAQgU,cACb3d,KAAK2Z,UAAW,IAEhB3Z,KAAKwpC,cAAgBhyB,EAAkB+B,OAASvZ,KAAKmpC,gBACrDnpC,KAAKypC,gBAEb,CACA,iBAAA7wB,GACI,MAAM,IAAEM,GAAQlZ,KAAK2J,QAMrB,OALA3J,KAAK2pC,2BAA2B,WAAY,KACxC3pC,KAAK2J,QAAQyP,gBAAgB,cAEjCpZ,KAAK2J,QAAQuP,IAAM,KACnBlZ,KAAK2J,QAAQuP,IAAMA,EACZlZ,KAAK2J,QAAQ0O,MACxB,CACA,eAAAU,GACQ/Y,KAAK0pC,oBAAoB,aAE7B1pC,KAAKypC,eACT,CACA,mBAAA3wB,GACQ9Y,KAAKwpC,cAAgBhyB,EAAkB8B,KACvCtZ,KAAKupC,mBAAmBxoC,SAGxBf,KAAKupC,mBAAmBjoC,OACxBtB,KAAKypC,gBAEb,CACA,mBAAMA,GACEzpC,KAAKC,SAAWD,KAAK+D,WAAa/D,KAAK2Z,UAAY3Z,KAAK4pC,YACxD5pC,KAAK2J,QAAQ0O,OAASrY,KAAKo6B,MAAMlgB,EAAUla,KAAK4pC,YAChD5pC,KAAKupC,mBAAmBjoC,aAClBtB,KAAK2J,QAAQ0O,OACnBrY,KAAKmpC,eAAgB,EAE7B,CACA,kBAAMhR,CAAa1W,IACXA,EAAcxF,YAAewF,EAAc9F,WAAa8F,EAAcvF,UACtElc,KAAK4pC,UAAYnoB,EAAc/F,SAAStX,KAE5C,IACI,MAAM4Z,QAAayD,EAAcjF,aACjC,GAAIwB,EAAM,CACN,MAAMhf,EAAW+e,EAAkBC,GACd+V,EAAaE,aAAaj1B,GAC9Bi2B,kBACPj1B,KAAK6pC,kBAAkBpoB,EAAeziB,SAGtCgB,KAAK8pC,+BAA+BroB,EAElD,CACJ,CACA,QACIzhB,KAAK8oC,oBAAsB,MAC/B,CACJ,CACA,yBAAA9lB,CAA0BrZ,GACtB3J,KAAK+pC,kCAAkCpgC,EAASA,GAChD3J,KAAKypC,eACT,CACA,4BAAAhc,CAA6Bd,GACzB,OAAO3sB,KAAKgqC,0BAA0Brd,EAC1C,CACA,2BAAAkB,CAA4BlB,EAAM6O,EAAWllB,GACzC,MAAMujB,EAAQ75B,KAAK07B,iBAAiB/O,GAChCkN,GACAvjB,EAAK6C,aAAa,mBAAoB0gB,EAAMvR,GACpD,CACA,wBAAA4D,CAAyBviB,EAAS6xB,EAAWlP,GACzC,OAAOtsB,KAAKgqC,0BAA0BrgC,EAC1C,CACA,oBAAAyiB,CAAqBziB,EAASgR,GAC1B3a,KAAKiqC,cAActgC,EAASgR,EAChC,CACA,cAAA0O,CAAe1f,EAAS0M,GACpB,OAAO1M,EAAQ0N,QAAQ,gBAAkBrX,KAAK2J,SAAW3J,KAAKgqC,0BAA0BrgC,EAAS0M,EACrG,CACA,aAAAmT,CAAc7f,EAAS0M,GACfrW,KAAK6mB,gBACL7mB,KAAK6mB,eAAevlB,OAExBtB,KAAK6mB,eAAiB,IAAI3C,EAAelkB,KAAM2J,EAAS0M,GACxD,MAAM,aAAE4O,GAAiBjlB,KAAK6mB,eAC9B7mB,KAAKihB,eAAegE,GACpBjlB,KAAK6mB,eAAe9lB,OACxB,CACA,cAAAkgB,CAAeyB,GACX,IAAI3I,EACJ2I,EAAQjG,QAAQ,eAAiBzc,KAAKsoB,IACO,QAAxCvO,EAAK/Z,KAAKkqC,gCAAkD,IAAZnwB,OAAqB,EAAIA,EAAGN,aAAa,uBAC1FiJ,EAAQJ,mBAAmBe,EAAclH,YAEjD,CACA,cAAAgF,CAAeuF,GACXzH,EAAWjf,KAAK2J,QACpB,CACA,gCAAAgY,CAAiC+E,EAAUuS,GACvCj5B,KAAKipC,qBACT,CACA,kCAAMrnB,CAA6Bc,EAAShH,SAClC1b,KAAKm4B,aAAazc,GACxB1b,KAAKipC,qBACT,CACA,+BAAMpnB,CAA0Ba,EAAShH,SAC/B1b,KAAKm4B,aAAazc,GACxB1b,KAAKipC,qBACT,CACA,cAAA1nB,CAAemB,EAASle,GACpB7E,QAAQ6E,MAAMA,GACdxE,KAAKipC,qBACT,CACA,eAAAznB,CAAgBkF,GACZvH,EAAenf,KAAK2J,QACxB,CACA,qBAAAmd,EAAsB,YAAEvC,IACpBtF,EAAWsF,EAAavkB,KAAK07B,iBAAiBnX,GAClD,CACA,mCAAA+C,CAAoCT,EAAgBnL,GAChD,MAAMme,EAAQ75B,KAAK07B,iBAAiB7U,EAAetC,YAAasC,EAAexQ,WAC/EwjB,EAAMrhB,SAASuxB,kCAAkClQ,EAAOhT,EAAetC,YAAasC,EAAexQ,WACnGwjB,EAAMrhB,SAAS2f,aAAazc,GACvBmL,EAAe5E,QAChB+X,GAAQyK,YAEhB,CACA,gCAAAzd,CAAiCH,EAAgBpF,GAC7CzhB,KAAK2J,QAAQ6O,SAAS2f,aAAa1W,GACnCuY,GAAQyK,YACZ,CACA,qBAAArd,CAAsBP,EAAgBriB,GAClC7E,QAAQ6E,MAAMA,EAClB,CACA,sBAAAijB,EAAuB,YAAElD,IACrBpF,EAAeoF,EAAavkB,KAAK07B,iBAAiBnX,GACtD,CACA,qBAAAyG,EAAwBrhB,QAASwgC,GAAYv6B,GACzC,MAAMnK,EAAQ4X,EAAS,4BAA6B,CAChDnL,OAAQlS,KAAK2J,QACb4T,OAAQtS,OAAOuc,OAAO,CAAE2iB,YAAYv6B,GACpC0N,YAAY,KAEV,iBAAEoE,EAAkBnE,QAAQ,OAAEiN,IAAc/kB,EAIlD,OAHIzF,KAAKo2B,KAAK3L,UAAYD,IACtBxqB,KAAKo2B,KAAK3L,SAASM,cAAgBP,IAE/B9I,CACZ,CACA,oBAAAwJ,CAAqBoa,EAAWC,GAAc,CAC9C,yBAAApa,CAA0BxhB,GACtBqwB,GAAQ7O,0BAA0BxhB,EACtC,CACA,eAAA4hB,GAAoB,CACpB,eAAA8E,CAAgBb,EAAgB4a,GAC5BpqC,KAAKqpC,qBAAuB7Z,EAAeZ,WAAU,EACzD,CACA,uBAAMib,CAAkBpoB,EAAeziB,GACnC,MAAMqrC,QAAwBrqC,KAAKsqC,2BAA2BtrC,EAASshB,MACvE,GAAI+pB,EAAiB,CACjB,MAAM7hB,EAAW,IAAIX,EAASwiB,GACxB5f,EAAW,IAAIiF,EAAc1vB,KAAMA,KAAKo2B,KAAK5N,SAAUA,EAAUkH,EAAc3E,eAAe,GAAO,GACvG/qB,KAAKo2B,KAAKxL,qBACJ5qB,KAAKo2B,KAAKxL,cACpB5qB,KAAKm3B,sBACCn3B,KAAKo2B,KAAK5L,OAAOC,GACvBzqB,KAAK2Z,UAAW,EAChBqgB,GAAQ2L,cAAclkB,EAAezhB,KAAK2J,SAC1CqwB,GAAQyL,YAAYzlC,KAAK2J,SACzB3J,KAAK8oC,oBAAoBrnB,EAC7B,MACSzhB,KAAKuqC,mCAAmC9oB,IAC7CzhB,KAAKwqC,+BAA+B/oB,EAE5C,CACA,WAAM2Y,CAAMh2B,GACR,IAAI2V,EACJ,MAAM2I,EAAU,IAAItC,EAAapgB,KAAMyX,EAAYlC,IAAKnR,EAAK,IAAImc,gBAAmBvgB,KAAK2J,SAGzF,OAFoC,QAAnCoQ,EAAK/Z,KAAKgpC,2BAA6C,IAAZjvB,GAAyBA,EAAG9I,SACxEjR,KAAKgpC,oBAAsBtmB,EACpB,IAAIpK,QAASC,IAChBvY,KAAKipC,oBAAsB,KACvBjpC,KAAKipC,oBAAsB,OAC3BjpC,KAAKgpC,oBAAsB,KAC3BzwB,KAEJmK,EAAQvb,WAEhB,CACA,aAAA8iC,CAActgC,EAASvF,EAAKiS,GACxB,MAAMwjB,EAAQ75B,KAAK07B,iBAAiB/xB,EAAS0M,GAC7CwjB,EAAMrhB,SAASuxB,kCAAkClQ,EAAOlwB,EAAS0M,GACjErW,KAAKyqC,6BAA6B9gC,EAAS,KACvCkwB,EAAM3gB,IAAM9U,GAEpB,CACA,iCAAA2lC,CAAkClQ,EAAOlwB,EAAS0M,GAE9C,GADArW,KAAKoH,OAASuY,EAAetJ,EAAW1M,EAASkwB,GAC7C75B,KAAKoH,OAAQ,CACb,MAAMsjC,EAAe3W,EAAaG,YAAY2F,GAAOtd,SAC/C,oBAAE6Y,GAAwByE,EAAMrhB,SACtCqhB,EAAMrhB,SAASswB,oBAAuBrnB,IAClC,GAAIoY,EAAM3gB,IAAK,CACX,MAAM,WAAE6C,EAAU,WAAEE,GAAewF,EAG7B7R,EAAU,CACZ8L,SAFa,CAAEK,aAAYE,aAAYO,aADtBqd,EAAMhgB,cAAcI,gBAAgB6Y,WAIrDsC,sBACAnG,YAAY,EACZoG,eAAe,EACfM,sBAAuB31B,KAAK21B,sBAC5BnN,SAAUkiB,GAEV1qC,KAAKoH,SACLwI,EAAQxI,OAASpH,KAAKoH,QAC1B4yB,GAAQI,MAAMP,EAAM3gB,IAAKtJ,EAC7B,EAER,CACJ,CACA,aAAAunB,GACI,GAAIn3B,KAAKoH,OAAQ,CACb,MAAMiZ,EAASd,EAA0Bvf,KAAKoH,QAC9C4yB,GAAQxa,QAAQ4X,OAAO/W,EAAQnG,EAAUla,KAAK2J,QAAQuP,KAAO,IAAKlZ,KAAK21B,sBAC3E,CACJ,CACA,oCAAMmU,CAA+BroB,GACjC9hB,QAAQ07B,KAAK,iBAAiB5Z,EAAc1F,qCAAqC/b,KAAK2J,QAAQ2e,0EACxFtoB,KAAK2qC,cAAclpB,EAAc/F,SAC3C,CACA,kCAAA6uB,CAAmC9oB,GAC/BzhB,KAAK2J,QAAQwP,aAAa,WAAY,IACtC,MAAMuC,EAAW+F,EAAc/F,SAc/B,OALc2B,EAAS,sBAAuB,CAC1CnL,OAAQlS,KAAK2J,QACb4T,OAAQ,CAAE7B,WAAU0e,MAVVpd,MAAO5Y,EAAKwL,EAAU,CAAC,KAC7BxL,aAAewmC,SACf5qC,KAAK2qC,cAAcvmC,GAGnB41B,GAAQI,MAAMh2B,EAAKwL,KAMvB0N,YAAY,IAEFoE,gBAClB,CACA,8BAAA8oB,CAA+B/oB,GAC3BzhB,KAAKo2B,KAAKxK,UACV5rB,KAAK6qC,uBAAuBppB,EAChC,CACA,sBAAAopB,CAAuBppB,GACnB,MAAMjc,EAAU,iBAAiBic,EAAc1F,6DAA6D/b,KAAK2J,QAAQ2e,qGACzH,MAAM,IAAI0e,GAAuBxhC,EACrC,CACA,mBAAMmlC,CAAcjvB,GAChB,MAAMovB,EAAU,IAAIrvB,EAAcC,GAC5Bc,QAAqBsuB,EAAQtuB,cAC7B,SAAE7B,EAAQ,WAAEsB,EAAU,WAAEF,GAAe+uB,EAC7C,OAAO9Q,GAAQI,MAAMzf,EAAU,CAAEe,SAAU,CAAEO,aAAYF,aAAYS,iBACzE,CACA,gBAAAkf,CAAiB/xB,EAAS0M,GACtB,IAAI0D,EAEJ,OAA0C,QAAlCA,EAAKktB,GADFn9B,EAAa,mBAAoBuM,EAAW1M,IAAY3J,KAAK2J,QAAQG,aAAa,kBAC/B,IAAZiQ,EAAgBA,EAAK/Z,KAAK2J,OAChF,CACA,gCAAM2gC,CAA2BlE,GAC7B,IAAIz8B,EACJ,MAAM2e,EAAKyiB,IAAIC,OAAOhrC,KAAKsoB,IAC3B,IAEI,GADA3e,EAAUu9B,GAAgBd,EAAUv8B,cAAc,eAAeye,KAAOtoB,KAAK4pC,WACzEjgC,EACA,OAAOA,EAGX,GADAA,EAAUu9B,GAAgBd,EAAUv8B,cAAc,6BAA6Bye,MAAQtoB,KAAK4pC,WACxFjgC,EAEA,aADMA,EAAQ0O,aACDrY,KAAKsqC,2BAA2B3gC,EAErD,CACA,MAAOnF,GAEH,OADA7E,QAAQ6E,MAAMA,GACP,IAAI0T,CACf,CACA,OAAO,IACX,CACA,qBAAA+yB,CAAsB30B,EAAMD,GAExB,OAAOqE,EAAoBR,EADZO,EAAUnE,EAAMD,IACerW,KAAK4a,aACvD,CACA,yBAAAovB,CAA0BrgC,EAAS0M,GAC/B,MAAMiS,EAAKxe,EAAa,mBAAoBuM,EAAW1M,IAAY3J,KAAK2J,QAAQG,aAAa,UAC7F,GAAIH,aAAmBkN,kBAAoB7W,KAAKirC,sBAAsBthC,EAAS0M,GAC3E,OAAO,EAEX,IAAKrW,KAAKC,SAAiB,QAANqoB,EACjB,OAAO,EAEX,GAAIA,EAAI,CACJ,MAAMyH,EAAekX,GAAoB3e,GACzC,GAAIyH,EACA,OAAQA,EAAavW,QAE7B,CACA,SAAKwgB,GAAQ8B,qBAAqBnyB,IAG9B0M,IAAc2jB,GAAQ8B,qBAAqBzlB,GAInD,CACA,MAAIiS,GACA,OAAOtoB,KAAK2J,QAAQ2e,EACxB,CACA,WAAIroB,GACA,OAAQD,KAAK2J,QAAQ6P,QACzB,CACA,aAAIowB,GACA,GAAI5pC,KAAK2J,QAAQuP,IACb,OAAOlZ,KAAK2J,QAAQuP,GAE5B,CACA,aAAI0wB,CAAUA,GACV5pC,KAAK2pC,2BAA2B,MAAO,KACnC3pC,KAAK2J,QAAQuP,IAAM0wB,QAA6CA,EAAY,MAEpF,CACA,gBAAIJ,GACA,OAAOxpC,KAAK2J,QAAQ0P,OACxB,CACA,aAAIO,GACA,YAA+Bha,IAAxBI,KAAK6mB,qBAA+DjnB,IAA/BI,KAAKipC,qBACrD,CACA,YAAItvB,GACA,OAAO3Z,KAAK2J,QAAQ8P,aAAa,WACrC,CACA,YAAIE,CAASza,GACTc,KAAK2pC,2BAA2B,WAAY,KACpCzqC,EACAc,KAAK2J,QAAQwP,aAAa,WAAY,IAGtCnZ,KAAK2J,QAAQyP,gBAAgB,aAGzC,CACA,YAAIrV,GACA,OAAO/D,KAAK2J,QAAQ5F,UAAY/D,KAAKkpC,SACzC,CACA,gBAAItuB,GACA,IAAIb,EACJ,MAAM6hB,EAAO57B,KAAK2J,QAAQkQ,cAAchQ,cAAc,2BAEtD,OAAOqQ,EAD0E,QAAnEH,EAAK6hB,aAAwC,EAAIA,EAAK9b,eAAiC,IAAZ/F,EAAgBA,EAAK,IAElH,CACA,mBAAA2vB,CAAoB3qB,GAChB,OAAO/e,KAAKopC,kBAAkBp+B,IAAI+T,EACtC,CACA,0BAAA4qB,CAA2B5qB,EAAeiP,GACtChuB,KAAKopC,kBAAkB3gC,IAAIsW,GAC3BiP,IACAhuB,KAAKopC,kBAAkB/jB,OAAOtG,EAClC,CACA,4BAAA0rB,CAA6B9gC,EAASqkB,GAClChuB,KAAKkqC,yBAA2BvgC,EAChCqkB,WACOhuB,KAAKkqC,wBAChB,QAuKsCtqC,IAAtCgW,eAAeL,IAAI,gBACnBK,eAAes1B,OAAO,cAAehzB,QAEEtY,IAAvCgW,eAAeL,IAAI,iBACnBK,eAAes1B,OAAO,eAAgB7D,SAEQznC,IAA9CgW,eAAeL,IAAI,wBACnBK,eAAes1B,OAAO,sBAAuB9C,IAGjD,MACI,IAAIz+B,EAAU3K,SAASmsC,cACvB,GAAKxhC,IAEDA,EAAQ8P,aAAa,+BAGzB,IADA9P,EAAUA,EAAQwN,cACXxN,GAAS,CACZ,GAAIA,GAAW3K,SAASshB,KACpB,OAAO3gB,QAAQ07B,KAAKld,CAAS;;;;;;;;;QAShCxU,EAAQmpB,WAETnpB,EAAUA,EAAQwN,aACtB,CACH,EAtBD,GAwBAzY,OAAOmoC,MAAQA,GACf9lC,KG13HA,MAAMqqC,WAAsCr1B,YAC1C,uBAAM2C,GACJ6mB,GAAoBv/B,MACpBA,KAAK0H,mBFQFsV,eAA2BxU,EAAS1B,GACzC,MAAM,cAAEvD,SAdHyZ,iBACL,OAAO3Z,IAAYklC,GAOdvrB,iBACL,MAAM,eAAEtT,SAAyB,sCACjC,OAAOA,GACT,CAViCA,GAAiBkwB,KAAK2O,IACvD,CAYkC8C,GAChC,OAAO9nC,EAAc+E,OAAOE,EAAS1B,EACvC,CEX8BwkC,CAAYtrC,KAAKwI,QAAS,CAClD+iC,SAAUvrC,KAAKwrC,qBAAqB3qC,KAAKb,MACzCkpC,UAAWlpC,KAAKyrC,sBAAsB5qC,KAAKb,MAC3CyD,aAAczD,KAAK0rC,yBAAyB7qC,KAAKb,OAErD,CAEA,oBAAA2Y,GACE8mB,GAAuBz/B,MACnBA,KAAK0H,cAAc1H,KAAK0H,aAAaJ,aAC3C,CAEA,oBAAAkkC,CAAqB7nC,GACnB,MAAM8B,EAAQ,IAAIkmC,aAAa,UAAW,CAAEhoC,SAC5C,OAAO3D,KAAK4d,cAAcnY,EAC5B,CAEA,qBAAAgmC,GACEzrC,KAAKmZ,aAAa,YAAa,GACjC,CAEA,wBAAAuyB,GACE1rC,KAAKoZ,gBAAgB,YACvB,CAEA,WAAI5Q,GAGF,MAAO,CAAEA,QAFOxI,KAAK8J,aAAa,WAEhB8hC,mBADS5rC,KAAK8J,aAAa,yBACJ,GAAS,IAAK9J,KAAK6rC,UAC9D,OAIsDjsC,IAApDgW,eAAeL,IAAI,8BACrBK,eAAes1B,OAAO,4BAA6BE,IC/BrDhqC,iBAAiB,6BCVV,SAAqCqE,GAC1C,GAAIA,EAAMyM,kBAAkB2E,gBAAiB,CAC3C,MAAQ3E,OAAQoE,EAAMiH,QAAQ,aAAEyD,IAAmBvb,EAEnD6Q,EAAKlV,iBAAiB,qBAAsB,EAAGmc,QAAUsJ,gBAAkBxQ,kBACzE,MAAMiK,EA0CZ,SAAoBA,GAClB,OAAOA,aAAgBqE,UAAYrE,aAAgBC,eACrD,CA5CmBurB,CAAW9qB,EAAaV,MAAQU,EAAaV,KAAO,IAAIC,gBAC/DF,EAeZ,SAA8BhK,EAAWiK,EAAMhK,GAC7C,MAAMy1B,EAaR,SAA6B11B,GAC3B,OAAIA,aAAqB21B,mBAAqB31B,aAAqB41B,mBAC7D51B,EAAUoD,aAAa,cAClBpD,EAAU01B,WAKZ,IAEX,CAvBqBG,CAAoB71B,GACjC81B,EAAiB7rB,EAAK/K,IAAI,WAC1B8K,EAAS/J,EAAKxM,aAAa,WAAa,MAE9C,MAAyB,iBAAdiiC,EACFA,EAC2B,iBAAlBI,EACTA,EAEA9rB,CAEX,CA3BqB+rB,CAAqB/1B,EAAWiK,EAAMhK,GAEhD,OAAOrN,KAAKoX,KACX,QAAQpX,KAAKoX,GACfC,EAAK+E,OAAO,WAEZ/E,EAAK/I,IAAI,UAAW8I,GAGtBW,EAAaX,OAAS,SAEvB,CAAE7U,MAAM,GACb,CACF,GCfA,MAAM6gC,GACF,WAAA3rC,CAAYooB,EAAa1jB,EAAWknC,GAChCtsC,KAAK8oB,YAAcA,EACnB9oB,KAAKoF,UAAYA,EACjBpF,KAAKssC,aAAeA,EACpBtsC,KAAKusC,kBAAoB,IAAIvN,GACjC,CACA,OAAAz1B,GACIvJ,KAAK8oB,YAAY1nB,iBAAiBpB,KAAKoF,UAAWpF,KAAMA,KAAKssC,aACjE,CACA,UAAApmC,GACIlG,KAAK8oB,YAAYtnB,oBAAoBxB,KAAKoF,UAAWpF,KAAMA,KAAKssC,aACpE,CACA,gBAAAE,CAAiBC,GACbzsC,KAAKusC,kBAAkB9jC,IAAIgkC,EAC/B,CACA,mBAAAC,CAAoBD,GAChBzsC,KAAKusC,kBAAkBlnB,OAAOonB,EAClC,CACA,WAAAE,CAAYlnC,GACR,MAAMmnC,EAoBd,SAAqBnnC,GACjB,GAAI,gCAAiCA,EACjC,OAAOA,EAEN,CACD,MAAM,yBAAE8jB,GAA6B9jB,EACrC,OAAOwF,OAAOuc,OAAO/hB,EAAO,CACxBonC,6BAA6B,EAC7B,wBAAAtjB,GACIvpB,KAAK6sC,6BAA8B,EACnCtjB,EAAyBxkB,KAAK/E,KAClC,GAER,CACJ,CAlC8B8sC,CAAYrnC,GAClC,IAAK,MAAMgnC,KAAWzsC,KAAK+sC,SAAU,CACjC,GAAIH,EAAcC,4BACd,MAGAJ,EAAQE,YAAYC,EAE5B,CACJ,CACA,WAAAI,GACI,OAAOhtC,KAAKusC,kBAAkBxK,KAAO,CACzC,CACA,YAAIgL,GACA,OAAOrgC,MAAMmS,KAAK7e,KAAKusC,mBAAmBU,KAAK,CAACC,EAAM9F,KAClD,MAAM+F,EAAYD,EAAK/9B,MAAOi+B,EAAahG,EAAMj4B,MACjD,OAAOg+B,EAAYC,GAAc,EAAID,EAAYC,EAAa,EAAI,GAE1E,EAkBJ,MAAMC,GACF,WAAA3sC,CAAY4sC,GACRttC,KAAKstC,YAAcA,EACnBttC,KAAKutC,kBAAoB,IAAIC,IAC7BxtC,KAAK4iB,SAAU,CACnB,CACA,KAAA7hB,GACSf,KAAK4iB,UACN5iB,KAAK4iB,SAAU,EACf5iB,KAAKytC,eAAerK,QAASsK,GAAkBA,EAAcnkC,WAErE,CACA,IAAAjI,GACQtB,KAAK4iB,UACL5iB,KAAK4iB,SAAU,EACf5iB,KAAKytC,eAAerK,QAASsK,GAAkBA,EAAcxnC,cAErE,CACA,kBAAIunC,GACA,OAAO/gC,MAAMmS,KAAK7e,KAAKutC,kBAAkBlvB,UAAUE,OAAO,CAACjS,EAAWpE,IAAQoE,EAAUD,OAAOK,MAAMmS,KAAK3W,EAAImW,WAAY,GAC9H,CACA,gBAAAmuB,CAAiBC,GACbzsC,KAAK2tC,6BAA6BlB,GAASD,iBAAiBC,EAChE,CACA,mBAAAC,CAAoBD,EAASmB,GAAsB,GAC/C5tC,KAAK2tC,6BAA6BlB,GAASC,oBAAoBD,GAC3DmB,GACA5tC,KAAK6tC,8BAA8BpB,EAC3C,CACA,WAAAqB,CAAYtpC,EAAOgB,EAAS+X,EAAS,CAAC,GAClCvd,KAAKstC,YAAYQ,YAAYtpC,EAAO,SAASgB,IAAW+X,EAC5D,CACA,6BAAAswB,CAA8BpB,GAC1B,MAAMiB,EAAgB1tC,KAAK2tC,6BAA6BlB,GACnDiB,EAAcV,gBACfU,EAAcxnC,aACdlG,KAAK+tC,6BAA6BtB,GAE1C,CACA,4BAAAsB,CAA6BtB,GACzB,MAAM,YAAE3jB,EAAW,UAAE1jB,EAAS,aAAEknC,GAAiBG,EAC3CuB,EAAmBhuC,KAAKiuC,oCAAoCnlB,GAC5DolB,EAAWluC,KAAKkuC,SAAS9oC,EAAWknC,GAC1C0B,EAAiB3oB,OAAO6oB,GACK,GAAzBF,EAAiBjM,MACjB/hC,KAAKutC,kBAAkBloB,OAAOyD,EACtC,CACA,4BAAA6kB,CAA6BlB,GACzB,MAAM,YAAE3jB,EAAW,UAAE1jB,EAAS,aAAEknC,GAAiBG,EACjD,OAAOzsC,KAAKmuC,mBAAmBrlB,EAAa1jB,EAAWknC,EAC3D,CACA,kBAAA6B,CAAmBrlB,EAAa1jB,EAAWknC,GACvC,MAAM0B,EAAmBhuC,KAAKiuC,oCAAoCnlB,GAC5DolB,EAAWluC,KAAKkuC,SAAS9oC,EAAWknC,GAC1C,IAAIoB,EAAgBM,EAAiBz4B,IAAI24B,GAKzC,OAJKR,IACDA,EAAgB1tC,KAAKouC,oBAAoBtlB,EAAa1jB,EAAWknC,GACjE0B,EAAiBz2B,IAAI22B,EAAUR,IAE5BA,CACX,CACA,mBAAAU,CAAoBtlB,EAAa1jB,EAAWknC,GACxC,MAAMoB,EAAgB,IAAIrB,GAAcvjB,EAAa1jB,EAAWknC,GAIhE,OAHItsC,KAAK4iB,SACL8qB,EAAcnkC,UAEXmkC,CACX,CACA,mCAAAO,CAAoCnlB,GAChC,IAAIklB,EAAmBhuC,KAAKutC,kBAAkBh4B,IAAIuT,GAKlD,OAJKklB,IACDA,EAAmB,IAAIR,IACvBxtC,KAAKutC,kBAAkBh2B,IAAIuR,EAAaklB,IAErCA,CACX,CACA,QAAAE,CAAS9oC,EAAWknC,GAChB,MAAM54B,EAAQ,CAACtO,GAMf,OALA6F,OAAO+H,KAAKs5B,GACPW,OACA7J,QAASn8B,IACVyM,EAAMxT,KAAK,GAAGosC,EAAarlC,GAAO,GAAK,MAAMA,OAE1CyM,EAAMiL,KAAK,IACtB,EAGJ,MAAM0vB,GAAiC,CACnC,IAAA/sC,EAAK,MAAEmE,EAAK,MAAEvG,IAGV,OAFIA,GACAuG,EAAM6oC,mBACH,CACX,EACA,OAAAC,EAAQ,MAAE9oC,EAAK,MAAEvG,IAGb,OAFIA,GACAuG,EAAM6jB,kBACH,CACX,EACA,IAAAva,EAAK,MAAEtJ,EAAK,MAAEvG,EAAK,QAAEyK,IACjB,OAAIzK,GACOyK,IAAYlE,EAAMyM,MAKjC,GAEEs8B,GAAoB,+FAyC1B,SAASC,GAASvvC,GACd,OAAOA,EAAMmK,QAAQ,sBAAuB,CAACyV,EAAG4vB,IAASA,EAAK5sB,cAClE,CACA,SAAS6sB,GAAkBzvC,GACvB,OAAOuvC,GAASvvC,EAAMmK,QAAQ,MAAO,KAAKA,QAAQ,MAAO,KAC7D,CACA,SAASulC,GAAW1vC,GAChB,OAAOA,EAAMkQ,OAAO,GAAG0S,cAAgB5iB,EAAMgE,MAAM,EACvD,CACA,SAAS2rC,GAAU3vC,GACf,OAAOA,EAAMmK,QAAQ,WAAY,CAACyV,EAAG4vB,IAAS,IAAIA,EAAKvpC,gBAC3D,CAKA,SAAS2pC,GAAY/nC,GACjB,OAAOA,OACX,CACA,SAASgoC,GAAYhoC,EAAQioC,GACzB,OAAO/jC,OAAO1F,UAAU2F,eAAenG,KAAKgC,EAAQioC,EACxD,CAEA,MAAMC,GAAe,CAAC,OAAQ,OAAQ,MAAO,SAC7C,MAAMC,GACF,WAAAxuC,CAAYiJ,EAASwF,EAAOggC,EAAYC,GACpCpvC,KAAK2J,QAAUA,EACf3J,KAAKmP,MAAQA,EACbnP,KAAK8oB,YAAcqmB,EAAWrmB,aAAenf,EAC7C3J,KAAKoF,UAAY+pC,EAAW/pC,WA0EpC,SAAuCuE,GACnC,MAAMkqB,EAAUlqB,EAAQkqB,QAAQ1uB,cAChC,GAAI0uB,KAAWwb,GACX,OAAOA,GAAkBxb,GAASlqB,EAE1C,CA/EiD2lC,CAA8B3lC,IAAYnF,GAAM,sBACzFxE,KAAKssC,aAAe6C,EAAW7C,cAAgB,CAAC,EAChDtsC,KAAK0F,WAAaypC,EAAWzpC,YAAclB,GAAM,sBACjDxE,KAAKuvC,WAAaJ,EAAWI,YAAc/qC,GAAM,uBACjDxE,KAAKwvC,UAAYL,EAAWK,WAAa,GACzCxvC,KAAKovC,OAASA,CAClB,CACA,eAAOK,CAAStpB,EAAOipB,GACnB,OAAO,IAAIpvC,KAAKmmB,EAAMxc,QAASwc,EAAMhX,MA7E7C,SAAqCugC,GACjC,MACM57B,EADS47B,EAAiBpN,OACT3uB,MAAM66B,KAAsB,GACnD,IAAIppC,EAAY0O,EAAQ,GACpB07B,EAAY17B,EAAQ,GAKxB,OAJI07B,IAAc,CAAC,UAAW,QAAS,YAAY96B,SAAStP,KACxDA,GAAa,IAAIoqC,IACjBA,EAAY,IAET,CACH1mB,aAQkB6mB,EARY77B,EAAQ,GASnB,UAAnB67B,EACOjxC,OAEiB,YAAnBixC,EACE3wC,cADN,GAXDoG,YACAknC,aAAcx4B,EAAQ,IAcHw4B,EAd0Bx4B,EAAQ,GAelDw4B,EACFl6B,MAAM,KACNmM,OAAO,CAAC3O,EAASuW,IAAUlb,OAAOuc,OAAO5X,EAAS,CAAE,CAACuW,EAAM9c,QAAQ,KAAM,MAAO,KAAKJ,KAAKkd,KAAW,CAAC,IAjB5C,CAAC,EAC5DzgB,WAAYoO,EAAQ,GACpBy7B,WAAYz7B,EAAQ,GACpB07B,UAAW17B,EAAQ,IAAM07B,GAGjC,IAA0BG,EAQCrD,CAT3B,CA4DoDsD,CAA4BzpB,EAAMrG,SAAUsvB,EAC5F,CACA,QAAA5gC,GACI,MAAMqhC,EAAc7vC,KAAKwvC,UAAY,IAAIxvC,KAAKwvC,YAAc,GACtD1mB,EAAc9oB,KAAK2vC,gBAAkB,IAAI3vC,KAAK2vC,kBAAoB,GACxE,MAAO,GAAG3vC,KAAKoF,YAAYyqC,IAAc/mB,MAAgB9oB,KAAK0F,cAAc1F,KAAKuvC,YACrF,CACA,yBAAAO,CAA0BrqC,GACtB,IAAKzF,KAAKwvC,UACN,OAAO,EAEX,MAAMO,EAAU/vC,KAAKwvC,UAAUp9B,MAAM,KACrC,GAAIpS,KAAKgwC,sBAAsBvqC,EAAOsqC,GAClC,OAAO,EAEX,MAAME,EAAiBF,EAAQloC,OAAQZ,IAASgoC,GAAav6B,SAASzN,IAAM,GAC5E,QAAKgpC,IAGAlB,GAAY/uC,KAAKkwC,YAAaD,IAC/BzrC,GAAM,gCAAgCxE,KAAKwvC,aAExCxvC,KAAKkwC,YAAYD,GAAgB9qC,gBAAkBM,EAAMwB,IAAI9B,cACxE,CACA,sBAAAgrC,CAAuB1qC,GACnB,IAAKzF,KAAKwvC,UACN,OAAO,EAEX,MAAMO,EAAU,CAAC/vC,KAAKwvC,WACtB,QAAIxvC,KAAKgwC,sBAAsBvqC,EAAOsqC,EAI1C,CACA,UAAIlpC,GACA,MAAMA,EAAS,CAAC,EACVsL,EAAU,IAAIu2B,OAAO,SAAS1oC,KAAK0F,yBAA0B,KACnE,IAAK,MAAM,KAAE3G,EAAI,MAAEG,KAAWwN,MAAMmS,KAAK7e,KAAK2J,QAAQwT,YAAa,CAC/D,MAAMxJ,EAAQ5U,EAAK4U,MAAMxB,GACnBlL,EAAM0M,GAASA,EAAM,GACvB1M,IACAJ,EAAO4nC,GAASxnC,IAAQmpC,GAASlxC,GAEzC,CACA,OAAO2H,CACX,CACA,mBAAI8oC,GACA,OA7FsB7mB,EA6FM9oB,KAAK8oB,cA5FlBpqB,OACR,SAEFoqB,GAAe9pB,SACb,gBADN,EAJT,IAA8B8pB,CA8F1B,CACA,eAAIonB,GACA,OAAOlwC,KAAKovC,OAAOc,WACvB,CACA,qBAAAF,CAAsBvqC,EAAOsqC,GACzB,MAAOnU,EAAMyU,EAAMC,EAAKC,GAAStB,GAAa/mC,IAAKsoC,GAAaT,EAAQr7B,SAAS87B,IACjF,OAAO/qC,EAAM4nB,UAAYuO,GAAQn2B,EAAM2nB,UAAYijB,GAAQ5qC,EAAM0nB,SAAWmjB,GAAO7qC,EAAM6nB,WAAaijB,CAC1G,EAEJ,MAAMlB,GAAoB,CACtBnmC,EAAG,IAAM,QACTunC,OAAQ,IAAM,QACdn6B,KAAM,IAAM,SACZyc,QAAS,IAAM,SACf5oB,MAAQyE,GAAiC,UAA1BA,EAAE9E,aAAa,QAAsB,QAAU,QAC9D4mC,OAAQ,IAAM,SACdC,SAAU,IAAM,SAQpB,SAASnsC,GAAMgB,GACX,MAAM,IAAI2hB,MAAM3hB,EACpB,CACA,SAAS4qC,GAASlxC,GACd,IACI,OAAO2E,KAAKiC,MAAM5G,EACtB,CACA,MAAO0xC,GACH,OAAO1xC,CACX,CACJ,CAEA,MAAM2xC,GACF,WAAAnwC,CAAY6K,EAASnE,GACjBpH,KAAKuL,QAAUA,EACfvL,KAAKoH,OAASA,CAClB,CACA,SAAI+H,GACA,OAAOnP,KAAKoH,OAAO+H,KACvB,CACA,eAAI2Z,GACA,OAAO9oB,KAAKoH,OAAO0hB,WACvB,CACA,gBAAIwjB,GACA,OAAOtsC,KAAKoH,OAAOklC,YACvB,CACA,cAAI5mC,GACA,OAAO1F,KAAKuL,QAAQ7F,UACxB,CACA,WAAAinC,CAAYlnC,GACR,MAAMqrC,EAAc9wC,KAAK+wC,mBAAmBtrC,GACxCzF,KAAKgxC,qBAAqBvrC,IAAUzF,KAAKixC,oBAAoBH,IAC7D9wC,KAAKkxC,gBAAgBJ,EAE7B,CACA,aAAI1rC,GACA,OAAOpF,KAAKoH,OAAOhC,SACvB,CACA,UAAIib,GACA,MAAMA,EAASrgB,KAAKmxC,WAAWnxC,KAAKuvC,YACpC,GAAqB,mBAAVlvB,EACP,OAAOA,EAEX,MAAM,IAAI8G,MAAM,WAAWnnB,KAAKoH,wCAAwCpH,KAAKuvC,cACjF,CACA,mBAAA0B,CAAoBxrC,GAChB,MAAM,QAAEkE,GAAY3J,KAAKoH,QACnB,wBAAEgqC,GAA4BpxC,KAAKuL,QAAQ+hC,aAC3C,WAAE6D,GAAenxC,KAAKuL,QAC5B,IAAI8lC,GAAS,EACb,IAAK,MAAOtyC,EAAMG,KAAU+L,OAAO6V,QAAQ9gB,KAAKssC,cAC5C,GAAIvtC,KAAQqyC,EAAyB,CACjC,MAAMvpC,EAASupC,EAAwBryC,GACvCsyC,EAASA,GAAUxpC,EAAO,CAAE9I,OAAMG,QAAOuG,QAAOkE,UAASwnC,cAC7D,CAKJ,OAAOE,CACX,CACA,kBAAAN,CAAmBtrC,GACf,OAAOwF,OAAOuc,OAAO/hB,EAAO,CAAEoB,OAAQ7G,KAAKoH,OAAOP,QACtD,CACA,eAAAqqC,CAAgBzrC,GACZ,MAAM,OAAEyM,EAAM,cAAEo/B,GAAkB7rC,EAClC,IACIzF,KAAKqgB,OAAOtb,KAAK/E,KAAKmxC,WAAY1rC,GAClCzF,KAAKuL,QAAQgmC,iBAAiBvxC,KAAKuvC,WAAY,CAAE9pC,QAAOyM,SAAQo/B,gBAAelqC,OAAQpH,KAAKuvC,YAChG,CACA,MAAO/qC,GACH,MAAM,WAAEkB,EAAU,WAAEyrC,EAAU,QAAExnC,EAAO,MAAEwF,GAAUnP,KAC7Cud,EAAS,CAAE7X,aAAYyrC,aAAYxnC,UAASwF,QAAO1J,SACzDzF,KAAKuL,QAAQuiC,YAAYtpC,EAAO,oBAAoBxE,KAAKoH,UAAWmW,EACxE,CACJ,CACA,oBAAAyzB,CAAqBvrC,GACjB,MAAMqjB,EAAcrjB,EAAMyM,OAC1B,QAAIzM,aAAiB+rC,eAAiBxxC,KAAKoH,OAAO0oC,0BAA0BrqC,OAGxEA,aAAiB+mB,YAAcxsB,KAAKoH,OAAO+oC,uBAAuB1qC,MAGlEzF,KAAK2J,UAAYmf,IAGZA,aAAuB7R,SAAWjX,KAAK2J,QAAQ4lB,SAASzG,GACtD9oB,KAAKyxC,MAAMC,gBAAgB5oB,GAG3B9oB,KAAKyxC,MAAMC,gBAAgB1xC,KAAKoH,OAAOuC,UAEtD,CACA,cAAIwnC,GACA,OAAOnxC,KAAKuL,QAAQ4lC,UACxB,CACA,cAAI5B,GACA,OAAOvvC,KAAKoH,OAAOmoC,UACvB,CACA,WAAI5lC,GACA,OAAO3J,KAAKyxC,MAAM9nC,OACtB,CACA,SAAI8nC,GACA,OAAOzxC,KAAKuL,QAAQkmC,KACxB,EAGJ,MAAME,GACF,WAAAjxC,CAAYiJ,EAAS6O,GACjBxY,KAAK4xC,qBAAuB,CAAEz0B,YAAY,EAAM00B,WAAW,EAAMC,SAAS,GAC1E9xC,KAAK2J,QAAUA,EACf3J,KAAK4iB,SAAU,EACf5iB,KAAKwY,SAAWA,EAChBxY,KAAKgf,SAAW,IAAIggB,IACpBh/B,KAAK+xC,iBAAmB,IAAIC,iBAAkBC,GAAcjyC,KAAKkyC,iBAAiBD,GACtF,CACA,KAAAlxC,GACSf,KAAK4iB,UACN5iB,KAAK4iB,SAAU,EACf5iB,KAAK+xC,iBAAiB5uB,QAAQnjB,KAAK2J,QAAS3J,KAAK4xC,sBACjD5xC,KAAK+xB,UAEb,CACA,KAAAogB,CAAMnkB,GACEhuB,KAAK4iB,UACL5iB,KAAK+xC,iBAAiB7rC,aACtBlG,KAAK4iB,SAAU,GAEnBoL,IACKhuB,KAAK4iB,UACN5iB,KAAK+xC,iBAAiB5uB,QAAQnjB,KAAK2J,QAAS3J,KAAK4xC,sBACjD5xC,KAAK4iB,SAAU,EAEvB,CACA,IAAAthB,GACQtB,KAAK4iB,UACL5iB,KAAK+xC,iBAAiBK,cACtBpyC,KAAK+xC,iBAAiB7rC,aACtBlG,KAAK4iB,SAAU,EAEvB,CACA,OAAAmP,GACI,GAAI/xB,KAAK4iB,QAAS,CACd,MAAM9O,EAAU,IAAIkrB,IAAIh/B,KAAKqyC,uBAC7B,IAAK,MAAM1oC,KAAW+C,MAAMmS,KAAK7e,KAAKgf,UAC7BlL,EAAQ9I,IAAIrB,IACb3J,KAAKsyC,cAAc3oC,GAG3B,IAAK,MAAMA,KAAW+C,MAAMmS,KAAK/K,GAC7B9T,KAAKuyC,WAAW5oC,EAExB,CACJ,CACA,gBAAAuoC,CAAiBD,GACb,GAAIjyC,KAAK4iB,QACL,IAAK,MAAM4vB,KAAYP,EACnBjyC,KAAKyyC,gBAAgBD,EAGjC,CACA,eAAAC,CAAgBD,GACS,cAAjBA,EAAS3sC,KACT7F,KAAK0yC,uBAAuBF,EAAStgC,OAAQsgC,EAASzzB,eAEhC,aAAjByzB,EAAS3sC,OACd7F,KAAK2yC,oBAAoBH,EAASI,cAClC5yC,KAAK6yC,kBAAkBL,EAASM,YAExC,CACA,sBAAAJ,CAAuB/oC,EAASoV,GACxB/e,KAAKgf,SAAShU,IAAIrB,GACd3J,KAAKwY,SAASu6B,yBAA2B/yC,KAAKgzC,aAAarpC,GAC3D3J,KAAKwY,SAASu6B,wBAAwBppC,EAASoV,GAG/C/e,KAAKsyC,cAAc3oC,GAGlB3J,KAAKgzC,aAAarpC,IACvB3J,KAAKuyC,WAAW5oC,EAExB,CACA,mBAAAgpC,CAAoBM,GAChB,IAAK,MAAMrqB,KAAQlc,MAAMmS,KAAKo0B,GAAQ,CAClC,MAAMtpC,EAAU3J,KAAKkzC,gBAAgBtqB,GACjCjf,GACA3J,KAAKmzC,YAAYxpC,EAAS3J,KAAKsyC,cAEvC,CACJ,CACA,iBAAAO,CAAkBI,GACd,IAAK,MAAMrqB,KAAQlc,MAAMmS,KAAKo0B,GAAQ,CAClC,MAAMtpC,EAAU3J,KAAKkzC,gBAAgBtqB,GACjCjf,GAAW3J,KAAKozC,gBAAgBzpC,IAChC3J,KAAKmzC,YAAYxpC,EAAS3J,KAAKuyC,WAEvC,CACJ,CACA,YAAAS,CAAarpC,GACT,OAAO3J,KAAKwY,SAASw6B,aAAarpC,EACtC,CACA,mBAAA0oC,CAAoBgB,EAAOrzC,KAAK2J,SAC5B,OAAO3J,KAAKwY,SAAS65B,oBAAoBgB,EAC7C,CACA,WAAAF,CAAYE,EAAMC,GACd,IAAK,MAAM3pC,KAAW3J,KAAKqyC,oBAAoBgB,GAC3CC,EAAUvuC,KAAK/E,KAAM2J,EAE7B,CACA,eAAAupC,CAAgBtqB,GACZ,GAAIA,EAAK2qB,UAAYr8B,KAAKs8B,aACtB,OAAO5qB,CAEf,CACA,eAAAwqB,CAAgBzpC,GACZ,OAAIA,EAAQgU,aAAe3d,KAAK2J,QAAQgU,aAI7B3d,KAAK2J,QAAQ4lB,SAAS5lB,EAErC,CACA,UAAA4oC,CAAW5oC,GACF3J,KAAKgf,SAAShU,IAAIrB,IACf3J,KAAKozC,gBAAgBzpC,KACrB3J,KAAKgf,SAASvW,IAAIkB,GACd3J,KAAKwY,SAASi7B,gBACdzzC,KAAKwY,SAASi7B,eAAe9pC,GAI7C,CACA,aAAA2oC,CAAc3oC,GACN3J,KAAKgf,SAAShU,IAAIrB,KAClB3J,KAAKgf,SAASqG,OAAO1b,GACjB3J,KAAKwY,SAASk7B,kBACd1zC,KAAKwY,SAASk7B,iBAAiB/pC,GAG3C,EAGJ,MAAMgqC,GACF,WAAAjzC,CAAYiJ,EAASoV,EAAevG,GAChCxY,KAAK+e,cAAgBA,EACrB/e,KAAKwY,SAAWA,EAChBxY,KAAK4zC,gBAAkB,IAAIjC,GAAgBhoC,EAAS3J,KACxD,CACA,WAAI2J,GACA,OAAO3J,KAAK4zC,gBAAgBjqC,OAChC,CACA,YAAIqW,GACA,MAAO,IAAIhgB,KAAK+e,gBACpB,CACA,KAAAhe,GACIf,KAAK4zC,gBAAgB7yC,OACzB,CACA,KAAAoxC,CAAMnkB,GACFhuB,KAAK4zC,gBAAgBzB,MAAMnkB,EAC/B,CACA,IAAA1sB,GACItB,KAAK4zC,gBAAgBtyC,MACzB,CACA,OAAAywB,GACI/xB,KAAK4zC,gBAAgB7hB,SACzB,CACA,WAAInP,GACA,OAAO5iB,KAAK4zC,gBAAgBhxB,OAChC,CACA,YAAAowB,CAAarpC,GACT,OAAOA,EAAQ8P,aAAazZ,KAAK+e,cACrC,CACA,mBAAAszB,CAAoBgB,GAChB,MAAM1/B,EAAQ3T,KAAKgzC,aAAaK,GAAQ,CAACA,GAAQ,GAC3Cv/B,EAAUpH,MAAMmS,KAAKw0B,EAAK1vB,iBAAiB3jB,KAAKggB,WACtD,OAAOrM,EAAMtH,OAAOyH,EACxB,CACA,cAAA2/B,CAAe9pC,GACP3J,KAAKwY,SAASq7B,yBACd7zC,KAAKwY,SAASq7B,wBAAwBlqC,EAAS3J,KAAK+e,cAE5D,CACA,gBAAA20B,CAAiB/pC,GACT3J,KAAKwY,SAASs7B,2BACd9zC,KAAKwY,SAASs7B,0BAA0BnqC,EAAS3J,KAAK+e,cAE9D,CACA,uBAAAg0B,CAAwBppC,EAASoV,GACzB/e,KAAKwY,SAASu7B,8BAAgC/zC,KAAK+e,eAAiBA,GACpE/e,KAAKwY,SAASu7B,6BAA6BpqC,EAASoV,EAE5D,EAUJ,SAAS,GAAM7W,EAAKjB,GAChB,IAAIoX,EAASnW,EAAIqN,IAAItO,GAKrB,OAJKoX,IACDA,EAAS,IAAI2gB,IACb92B,EAAIqP,IAAItQ,EAAKoX,IAEVA,CACX,CAQA,MAAM21B,GACF,WAAAtzC,GACIV,KAAKi0C,YAAc,IAAIzG,GAC3B,CACA,QAAIx6B,GACA,OAAOtG,MAAMmS,KAAK7e,KAAKi0C,YAAYjhC,OACvC,CACA,UAAIqL,GAEA,OADa3R,MAAMmS,KAAK7e,KAAKi0C,YAAY51B,UAC7BE,OAAO,CAACF,EAAQ9G,IAAQ8G,EAAOhS,OAAOK,MAAMmS,KAAKtH,IAAO,GACxE,CACA,QAAIwqB,GAEA,OADar1B,MAAMmS,KAAK7e,KAAKi0C,YAAY51B,UAC7BE,OAAO,CAACwjB,EAAMxqB,IAAQwqB,EAAOxqB,EAAIwqB,KAAM,EACvD,CACA,GAAAt5B,CAAIxB,EAAK/H,IArCb,SAAagJ,EAAKjB,EAAK/H,GACnB,GAAMgJ,EAAKjB,GAAKwB,IAAIvJ,EACxB,CAoCQuJ,CAAIzI,KAAKi0C,YAAahtC,EAAK/H,EAC/B,CACA,OAAO+H,EAAK/H,IArChB,SAAagJ,EAAKjB,EAAK/H,GACnB,GAAMgJ,EAAKjB,GAAKoe,OAAOnmB,GAW3B,SAAegJ,EAAKjB,GAChB,MAAMoX,EAASnW,EAAIqN,IAAItO,GACT,MAAVoX,GAAiC,GAAfA,EAAO0jB,MACzB75B,EAAImd,OAAOpe,EAEnB,CAfIitC,CAAMhsC,EAAKjB,EACf,CAmCQktC,CAAIn0C,KAAKi0C,YAAahtC,EAAK/H,EAC/B,CACA,GAAA8L,CAAI/D,EAAK/H,GACL,MAAMmf,EAASre,KAAKi0C,YAAY1+B,IAAItO,GACpC,OAAiB,MAAVoX,GAAkBA,EAAOrT,IAAI9L,EACxC,CACA,MAAAk1C,CAAOntC,GACH,OAAOjH,KAAKi0C,YAAYjpC,IAAI/D,EAChC,CACA,QAAAotC,CAASn1C,GAEL,OADawN,MAAMmS,KAAK7e,KAAKi0C,YAAY51B,UAC7BuJ,KAAMrQ,GAAQA,EAAIvM,IAAI9L,GACtC,CACA,eAAAo1C,CAAgBrtC,GACZ,MAAMoX,EAASre,KAAKi0C,YAAY1+B,IAAItO,GACpC,OAAOoX,EAAS3R,MAAMmS,KAAKR,GAAU,EACzC,CACA,eAAAk2B,CAAgBr1C,GACZ,OAAOwN,MAAMmS,KAAK7e,KAAKi0C,aAClBpsC,OAAO,EAAE2sC,EAAMn2B,KAAYA,EAAOrT,IAAI9L,IACtCgJ,IAAI,EAAEjB,EAAKwtC,KAAaxtC,EACjC,EA4BJ,MAAMytC,GACF,WAAAh0C,CAAYiJ,EAASqW,EAAUxH,EAAUua,GACrC/yB,KAAK20C,UAAY30B,EACjBhgB,KAAK+yB,QAAUA,EACf/yB,KAAK4zC,gBAAkB,IAAIjC,GAAgBhoC,EAAS3J,MACpDA,KAAKwY,SAAWA,EAChBxY,KAAK40C,iBAAmB,IAAIZ,EAChC,CACA,WAAIpxB,GACA,OAAO5iB,KAAK4zC,gBAAgBhxB,OAChC,CACA,YAAI5C,GACA,OAAOhgB,KAAK20C,SAChB,CACA,YAAI30B,CAASA,GACThgB,KAAK20C,UAAY30B,EACjBhgB,KAAK+xB,SACT,CACA,KAAAhxB,GACIf,KAAK4zC,gBAAgB7yC,OACzB,CACA,KAAAoxC,CAAMnkB,GACFhuB,KAAK4zC,gBAAgBzB,MAAMnkB,EAC/B,CACA,IAAA1sB,GACItB,KAAK4zC,gBAAgBtyC,MACzB,CACA,OAAAywB,GACI/xB,KAAK4zC,gBAAgB7hB,SACzB,CACA,WAAIpoB,GACA,OAAO3J,KAAK4zC,gBAAgBjqC,OAChC,CACA,YAAAqpC,CAAarpC,GACT,MAAM,SAAEqW,GAAahgB,KACrB,GAAIggB,EAAU,CACV,MAAMlM,EAAUnK,EAAQmK,QAAQkM,GAChC,OAAIhgB,KAAKwY,SAASq8B,qBACP/gC,GAAW9T,KAAKwY,SAASq8B,qBAAqBlrC,EAAS3J,KAAK+yB,SAEhEjf,CACX,CAEI,OAAO,CAEf,CACA,mBAAAu+B,CAAoBgB,GAChB,MAAM,SAAErzB,GAAahgB,KACrB,GAAIggB,EAAU,CACV,MAAMrM,EAAQ3T,KAAKgzC,aAAaK,GAAQ,CAACA,GAAQ,GAC3Cv/B,EAAUpH,MAAMmS,KAAKw0B,EAAK1vB,iBAAiB3D,IAAWnY,OAAQ8L,GAAU3T,KAAKgzC,aAAar/B,IAChG,OAAOA,EAAMtH,OAAOyH,EACxB,CAEI,MAAO,EAEf,CACA,cAAA2/B,CAAe9pC,GACX,MAAM,SAAEqW,GAAahgB,KACjBggB,GACAhgB,KAAK80C,gBAAgBnrC,EAASqW,EAEtC,CACA,gBAAA0zB,CAAiB/pC,GACb,MAAMorC,EAAY/0C,KAAK40C,iBAAiBL,gBAAgB5qC,GACxD,IAAK,MAAMqW,KAAY+0B,EACnB/0C,KAAKg1C,kBAAkBrrC,EAASqW,EAExC,CACA,uBAAA+yB,CAAwBppC,EAASsrC,GAC7B,MAAM,SAAEj1B,GAAahgB,KACrB,GAAIggB,EAAU,CACV,MAAMlM,EAAU9T,KAAKgzC,aAAarpC,GAC5BurC,EAAgBl1C,KAAK40C,iBAAiB5pC,IAAIgV,EAAUrW,GACtDmK,IAAYohC,EACZl1C,KAAK80C,gBAAgBnrC,EAASqW,IAExBlM,GAAWohC,GACjBl1C,KAAKg1C,kBAAkBrrC,EAASqW,EAExC,CACJ,CACA,eAAA80B,CAAgBnrC,EAASqW,GACrBhgB,KAAKwY,SAASs8B,gBAAgBnrC,EAASqW,EAAUhgB,KAAK+yB,SACtD/yB,KAAK40C,iBAAiBnsC,IAAIuX,EAAUrW,EACxC,CACA,iBAAAqrC,CAAkBrrC,EAASqW,GACvBhgB,KAAKwY,SAASw8B,kBAAkBrrC,EAASqW,EAAUhgB,KAAK+yB,SACxD/yB,KAAK40C,iBAAiBvvB,OAAOrF,EAAUrW,EAC3C,EAGJ,MAAMwrC,GACF,WAAAz0C,CAAYiJ,EAAS6O,GACjBxY,KAAK2J,QAAUA,EACf3J,KAAKwY,SAAWA,EAChBxY,KAAK4iB,SAAU,EACf5iB,KAAKo1C,UAAY,IAAI5H,IACrBxtC,KAAK+xC,iBAAmB,IAAIC,iBAAkBC,GAAcjyC,KAAKkyC,iBAAiBD,GACtF,CACA,KAAAlxC,GACSf,KAAK4iB,UACN5iB,KAAK4iB,SAAU,EACf5iB,KAAK+xC,iBAAiB5uB,QAAQnjB,KAAK2J,QAAS,CAAEwT,YAAY,EAAMk4B,mBAAmB,IACnFr1C,KAAK+xB,UAEb,CACA,IAAAzwB,GACQtB,KAAK4iB,UACL5iB,KAAK+xC,iBAAiBK,cACtBpyC,KAAK+xC,iBAAiB7rC,aACtBlG,KAAK4iB,SAAU,EAEvB,CACA,OAAAmP,GACI,GAAI/xB,KAAK4iB,QACL,IAAK,MAAM7D,KAAiB/e,KAAKs1C,oBAC7Bt1C,KAAKu1C,iBAAiBx2B,EAAe,KAGjD,CACA,gBAAAmzB,CAAiBD,GACb,GAAIjyC,KAAK4iB,QACL,IAAK,MAAM4vB,KAAYP,EACnBjyC,KAAKyyC,gBAAgBD,EAGjC,CACA,eAAAC,CAAgBD,GACZ,MAAMzzB,EAAgByzB,EAASzzB,cAC3BA,GACA/e,KAAKu1C,iBAAiBx2B,EAAeyzB,EAASgD,SAEtD,CACA,gBAAAD,CAAiBx2B,EAAey2B,GAC5B,MAAMvuC,EAAMjH,KAAKwY,SAASi9B,4BAA4B12B,GACtD,GAAW,MAAP9X,EAAa,CACRjH,KAAKo1C,UAAUpqC,IAAI+T,IACpB/e,KAAK01C,kBAAkBzuC,EAAK8X,GAEhC,MAAM7f,EAAQc,KAAK2J,QAAQG,aAAaiV,GAIxC,GAHI/e,KAAKo1C,UAAU7/B,IAAIwJ,IAAkB7f,GACrCc,KAAK21C,sBAAsBz2C,EAAO+H,EAAKuuC,GAE9B,MAATt2C,EAAe,CACf,MAAMs2C,EAAWx1C,KAAKo1C,UAAU7/B,IAAIwJ,GACpC/e,KAAKo1C,UAAU/vB,OAAOtG,GAClBy2B,GACAx1C,KAAK41C,oBAAoB3uC,EAAK8X,EAAey2B,EACrD,MAEIx1C,KAAKo1C,UAAU79B,IAAIwH,EAAe7f,EAE1C,CACJ,CACA,iBAAAw2C,CAAkBzuC,EAAK8X,GACf/e,KAAKwY,SAASk9B,mBACd11C,KAAKwY,SAASk9B,kBAAkBzuC,EAAK8X,EAE7C,CACA,qBAAA42B,CAAsBz2C,EAAO+H,EAAKuuC,GAC1Bx1C,KAAKwY,SAASm9B,uBACd31C,KAAKwY,SAASm9B,sBAAsBz2C,EAAO+H,EAAKuuC,EAExD,CACA,mBAAAI,CAAoB3uC,EAAK8X,EAAey2B,GAChCx1C,KAAKwY,SAASo9B,qBACd51C,KAAKwY,SAASo9B,oBAAoB3uC,EAAK8X,EAAey2B,EAE9D,CACA,uBAAIF,GACA,OAAO5oC,MAAMmS,KAAK,IAAImgB,IAAIh/B,KAAK61C,sBAAsBxpC,OAAOrM,KAAK81C,yBACrE,CACA,yBAAID,GACA,OAAOnpC,MAAMmS,KAAK7e,KAAK2J,QAAQwT,YAAYjV,IAAK6tC,GAAcA,EAAUh3C,KAC5E,CACA,0BAAI+2C,GACA,OAAOppC,MAAMmS,KAAK7e,KAAKo1C,UAAUpiC,OACrC,EAGJ,MAAMgjC,GACF,WAAAt1C,CAAYiJ,EAASoV,EAAevG,GAChCxY,KAAKi2C,kBAAoB,IAAItC,GAAkBhqC,EAASoV,EAAe/e,MACvEA,KAAKwY,SAAWA,EAChBxY,KAAKk2C,gBAAkB,IAAIlC,EAC/B,CACA,WAAIpxB,GACA,OAAO5iB,KAAKi2C,kBAAkBrzB,OAClC,CACA,KAAA7hB,GACIf,KAAKi2C,kBAAkBl1C,OAC3B,CACA,KAAAoxC,CAAMnkB,GACFhuB,KAAKi2C,kBAAkB9D,MAAMnkB,EACjC,CACA,IAAA1sB,GACItB,KAAKi2C,kBAAkB30C,MAC3B,CACA,OAAAywB,GACI/xB,KAAKi2C,kBAAkBlkB,SAC3B,CACA,WAAIpoB,GACA,OAAO3J,KAAKi2C,kBAAkBtsC,OAClC,CACA,iBAAIoV,GACA,OAAO/e,KAAKi2C,kBAAkBl3B,aAClC,CACA,uBAAA80B,CAAwBlqC,GACpB3J,KAAKm2C,cAAcn2C,KAAKo2C,qBAAqBzsC,GACjD,CACA,4BAAAoqC,CAA6BpqC,GACzB,MAAO0sC,EAAiBC,GAAiBt2C,KAAKu2C,wBAAwB5sC,GACtE3J,KAAKw2C,gBAAgBH,GACrBr2C,KAAKm2C,cAAcG,EACvB,CACA,yBAAAxC,CAA0BnqC,GACtB3J,KAAKw2C,gBAAgBx2C,KAAKk2C,gBAAgB5B,gBAAgB3qC,GAC9D,CACA,aAAAwsC,CAAcM,GACVA,EAAOrT,QAASjd,GAAUnmB,KAAK02C,aAAavwB,GAChD,CACA,eAAAqwB,CAAgBC,GACZA,EAAOrT,QAASjd,GAAUnmB,KAAK22C,eAAexwB,GAClD,CACA,YAAAuwB,CAAavwB,GACTnmB,KAAKwY,SAASk+B,aAAavwB,GAC3BnmB,KAAKk2C,gBAAgBztC,IAAI0d,EAAMxc,QAASwc,EAC5C,CACA,cAAAwwB,CAAexwB,GACXnmB,KAAKwY,SAASm+B,eAAexwB,GAC7BnmB,KAAKk2C,gBAAgB7wB,OAAOc,EAAMxc,QAASwc,EAC/C,CACA,uBAAAowB,CAAwB5sC,GACpB,MAAMitC,EAAiB52C,KAAKk2C,gBAAgB5B,gBAAgB3qC,GACtDktC,EAAgB72C,KAAKo2C,qBAAqBzsC,GAC1CmtC,EAqBd,SAAa5J,EAAM9F,GACf,MAAM3nC,EAAS4C,KAAKmN,IAAI09B,EAAKztC,OAAQ2nC,EAAM3nC,QAC3C,OAAOiN,MAAMmS,KAAK,CAAEpf,UAAU,CAACqf,EAAG3P,IAAU,CAAC+9B,EAAK/9B,GAAQi4B,EAAMj4B,IACpE,CAxBoC4nC,CAAIH,EAAgBC,GAAeG,UAAU,EAAEC,EAAeC,MAAkB,OAyBtF9P,EAzBqH8P,KAyB3HhK,EAzB4G+J,IA0BjH7P,GAAS8F,EAAK/9B,OAASi4B,EAAMj4B,OAAS+9B,EAAKptB,SAAWsnB,EAAMtnB,SAD/E,IAAwBotB,EAAM9F,IAxBtB,OAA4B,GAAxB0P,EACO,CAAC,GAAI,IAGL,CAACF,EAAe1zC,MAAM4zC,GAAsBD,EAAc3zC,MAAM4zC,GAE/E,CACA,oBAAAV,CAAqBzsC,GACjB,MAAMoV,EAAgB/e,KAAK+e,cAE3B,OAGR,SAA0Bo4B,EAAaxtC,EAASoV,GAC5C,OAAOo4B,EACF7U,OACAlwB,MAAM,OACNvK,OAAQiY,GAAYA,EAAQrgB,QAC5ByI,IAAI,CAAC4X,EAAS3Q,KAAU,CAAGxF,UAASoV,gBAAee,UAAS3Q,UACrE,CATeioC,CADaztC,EAAQG,aAAaiV,IAAkB,GACtBpV,EAASoV,EAClD,EAiBJ,MAAMs4B,GACF,WAAA32C,CAAYiJ,EAASoV,EAAevG,GAChCxY,KAAKs3C,kBAAoB,IAAItB,GAAkBrsC,EAASoV,EAAe/e,MACvEA,KAAKwY,SAAWA,EAChBxY,KAAKu3C,oBAAsB,IAAIxgC,QAC/B/W,KAAKw3C,uBAAyB,IAAIzgC,OACtC,CACA,WAAI6L,GACA,OAAO5iB,KAAKs3C,kBAAkB10B,OAClC,CACA,KAAA7hB,GACIf,KAAKs3C,kBAAkBv2C,OAC3B,CACA,IAAAO,GACItB,KAAKs3C,kBAAkBh2C,MAC3B,CACA,OAAAywB,GACI/xB,KAAKs3C,kBAAkBvlB,SAC3B,CACA,WAAIpoB,GACA,OAAO3J,KAAKs3C,kBAAkB3tC,OAClC,CACA,iBAAIoV,GACA,OAAO/e,KAAKs3C,kBAAkBv4B,aAClC,CACA,YAAA23B,CAAavwB,GACT,MAAM,QAAExc,GAAYwc,GACd,MAAEjnB,GAAUc,KAAKy3C,yBAAyBtxB,GAC5CjnB,IACAc,KAAK03C,6BAA6B/tC,GAAS4N,IAAI4O,EAAOjnB,GACtDc,KAAKwY,SAASm/B,oBAAoBhuC,EAASzK,GAEnD,CACA,cAAAy3C,CAAexwB,GACX,MAAM,QAAExc,GAAYwc,GACd,MAAEjnB,GAAUc,KAAKy3C,yBAAyBtxB,GAC5CjnB,IACAc,KAAK03C,6BAA6B/tC,GAAS0b,OAAOc,GAClDnmB,KAAKwY,SAASo/B,sBAAsBjuC,EAASzK,GAErD,CACA,wBAAAu4C,CAAyBtxB,GACrB,IAAI0xB,EAAc73C,KAAKu3C,oBAAoBhiC,IAAI4Q,GAK/C,OAJK0xB,IACDA,EAAc73C,KAAK83C,WAAW3xB,GAC9BnmB,KAAKu3C,oBAAoBhgC,IAAI4O,EAAO0xB,IAEjCA,CACX,CACA,4BAAAH,CAA6B/tC,GACzB,IAAIouC,EAAgB/3C,KAAKw3C,uBAAuBjiC,IAAI5L,GAKpD,OAJKouC,IACDA,EAAgB,IAAIvK,IACpBxtC,KAAKw3C,uBAAuBjgC,IAAI5N,EAASouC,IAEtCA,CACX,CACA,UAAAD,CAAW3xB,GACP,IAEI,MAAO,CAAEjnB,MADKc,KAAKwY,SAASw/B,mBAAmB7xB,GAEnD,CACA,MAAO3hB,GACH,MAAO,CAAEA,QACb,CACJ,EAGJ,MAAMyzC,GACF,WAAAv3C,CAAY6K,EAASiN,GACjBxY,KAAKuL,QAAUA,EACfvL,KAAKwY,SAAWA,EAChBxY,KAAKk4C,iBAAmB,IAAI1K,GAChC,CACA,KAAAzsC,GACSf,KAAKm4C,oBACNn4C,KAAKm4C,kBAAoB,IAAId,GAAkBr3C,KAAK2J,QAAS3J,KAAKo4C,gBAAiBp4C,MACnFA,KAAKm4C,kBAAkBp3C,QAE/B,CACA,IAAAO,GACQtB,KAAKm4C,oBACLn4C,KAAKm4C,kBAAkB72C,cAChBtB,KAAKm4C,kBACZn4C,KAAKq4C,uBAEb,CACA,WAAI1uC,GACA,OAAO3J,KAAKuL,QAAQ5B,OACxB,CACA,cAAIjE,GACA,OAAO1F,KAAKuL,QAAQ7F,UACxB,CACA,mBAAI0yC,GACA,OAAOp4C,KAAKovC,OAAOgJ,eACvB,CACA,UAAIhJ,GACA,OAAOpvC,KAAKuL,QAAQ6jC,MACxB,CACA,YAAIrC,GACA,OAAOrgC,MAAMmS,KAAK7e,KAAKk4C,iBAAiB75B,SAC5C,CACA,aAAAi6B,CAAclxC,GACV,MAAMqlC,EAAU,IAAIoE,GAAQ7wC,KAAKuL,QAASnE,GAC1CpH,KAAKk4C,iBAAiB3gC,IAAInQ,EAAQqlC,GAClCzsC,KAAKwY,SAASg0B,iBAAiBC,EACnC,CACA,gBAAA8L,CAAiBnxC,GACb,MAAMqlC,EAAUzsC,KAAKk4C,iBAAiB3iC,IAAInO,GACtCqlC,IACAzsC,KAAKk4C,iBAAiB7yB,OAAOje,GAC7BpH,KAAKwY,SAASk0B,oBAAoBD,GAE1C,CACA,oBAAA4L,GACIr4C,KAAK+sC,SAAS3J,QAASqJ,GAAYzsC,KAAKwY,SAASk0B,oBAAoBD,GAAS,IAC9EzsC,KAAKk4C,iBAAiB9V,OAC1B,CACA,kBAAA4V,CAAmB7xB,GACf,MAAM/e,EAAS8nC,GAAOO,SAAStpB,EAAOnmB,KAAKovC,QAC3C,GAAIhoC,EAAO1B,YAAc1F,KAAK0F,WAC1B,OAAO0B,CAEf,CACA,mBAAAuwC,CAAoBhuC,EAASvC,GACzBpH,KAAKs4C,cAAclxC,EACvB,CACA,qBAAAwwC,CAAsBjuC,EAASvC,GAC3BpH,KAAKu4C,iBAAiBnxC,EAC1B,EAGJ,MAAMoxC,GACF,WAAA93C,CAAY6K,EAASktC,GACjBz4C,KAAKuL,QAAUA,EACfvL,KAAKy4C,SAAWA,EAChBz4C,KAAK04C,kBAAoB,IAAIvD,GAAkBn1C,KAAK2J,QAAS3J,MAC7DA,KAAK24C,mBAAqB34C,KAAKmxC,WAAWwH,kBAC9C,CACA,KAAA53C,GACIf,KAAK04C,kBAAkB33C,QACvBf,KAAK44C,wCACT,CACA,IAAAt3C,GACItB,KAAK04C,kBAAkBp3C,MAC3B,CACA,WAAIqI,GACA,OAAO3J,KAAKuL,QAAQ5B,OACxB,CACA,cAAIwnC,GACA,OAAOnxC,KAAKuL,QAAQ4lC,UACxB,CACA,2BAAAsE,CAA4B12B,GACxB,GAAIA,KAAiB/e,KAAK24C,mBACtB,OAAO34C,KAAK24C,mBAAmB55B,GAAehgB,IAEtD,CACA,iBAAA22C,CAAkBzuC,EAAK8X,GACnB,MAAMowB,EAAanvC,KAAK24C,mBAAmB55B,GACtC/e,KAAKq0C,SAASptC,IACfjH,KAAK64C,sBAAsB5xC,EAAKkoC,EAAW2J,OAAO94C,KAAKy4C,SAASxxC,IAAOkoC,EAAW2J,OAAO3J,EAAW4J,cAE5G,CACA,qBAAApD,CAAsBz2C,EAAOH,EAAMy2C,GAC/B,MAAMrG,EAAanvC,KAAKg5C,uBAAuBj6C,GACjC,OAAVG,IAEa,OAAbs2C,IACAA,EAAWrG,EAAW2J,OAAO3J,EAAW4J,eAE5C/4C,KAAK64C,sBAAsB95C,EAAMG,EAAOs2C,GAC5C,CACA,mBAAAI,CAAoB3uC,EAAK8X,EAAey2B,GACpC,MAAMrG,EAAanvC,KAAKg5C,uBAAuB/xC,GAC3CjH,KAAKq0C,SAASptC,GACdjH,KAAK64C,sBAAsB5xC,EAAKkoC,EAAW2J,OAAO94C,KAAKy4C,SAASxxC,IAAOuuC,GAGvEx1C,KAAK64C,sBAAsB5xC,EAAKkoC,EAAW2J,OAAO3J,EAAW4J,cAAevD,EAEpF,CACA,sCAAAoD,GACI,IAAK,MAAM,IAAE3xC,EAAG,KAAElI,EAAI,aAAEg6C,EAAY,OAAED,KAAY94C,KAAKi5C,iBAC/Br5C,MAAhBm5C,GAA8B/4C,KAAKmxC,WAAWxtC,KAAKqH,IAAI/D,IACvDjH,KAAK64C,sBAAsB95C,EAAM+5C,EAAOC,QAAen5C,EAGnE,CACA,qBAAAi5C,CAAsB95C,EAAMm6C,EAAUC,GAClC,MAAMC,EAAoB,GAAGr6C,WACvBs6C,EAAgBr5C,KAAKy4C,SAASW,GACpC,GAA4B,mBAAjBC,EAA6B,CACpC,MAAMlK,EAAanvC,KAAKg5C,uBAAuBj6C,GAC/C,IACI,MAAMG,EAAQiwC,EAAWmK,OAAOJ,GAChC,IAAI1D,EAAW2D,EACXA,IACA3D,EAAWrG,EAAWmK,OAAOH,IAEjCE,EAAct0C,KAAK/E,KAAKy4C,SAAUv5C,EAAOs2C,EAC7C,CACA,MAAOhxC,GAIH,MAHIA,aAAiB8F,YACjB9F,EAAMgB,QAAU,mBAAmBxF,KAAKuL,QAAQ7F,cAAcypC,EAAWpwC,WAAWyF,EAAMgB,WAExFhB,CACV,CACJ,CACJ,CACA,oBAAIy0C,GACA,MAAM,mBAAEN,GAAuB34C,KAC/B,OAAOiL,OAAO+H,KAAK2lC,GAAoBzwC,IAAKjB,GAAQ0xC,EAAmB1xC,GAC3E,CACA,0BAAI+xC,GACA,MAAMO,EAAc,CAAC,EAKrB,OAJAtuC,OAAO+H,KAAKhT,KAAK24C,oBAAoBvV,QAASn8B,IAC1C,MAAMkoC,EAAanvC,KAAK24C,mBAAmB1xC,GAC3CsyC,EAAYpK,EAAWpwC,MAAQowC,IAE5BoK,CACX,CACA,QAAAlF,CAASt1B,GACL,MACMy6B,EAAgB,MAAM5K,GADT5uC,KAAKg5C,uBAAuBj6B,GACGhgB,QAClD,OAAOiB,KAAKy4C,SAASe,EACzB,EAGJ,MAAMC,GACF,WAAA/4C,CAAY6K,EAASiN,GACjBxY,KAAKuL,QAAUA,EACfvL,KAAKwY,SAAWA,EAChBxY,KAAK05C,cAAgB,IAAI1F,EAC7B,CACA,KAAAjzC,GACSf,KAAKs3C,oBACNt3C,KAAKs3C,kBAAoB,IAAItB,GAAkBh2C,KAAK2J,QAAS3J,KAAK+e,cAAe/e,MACjFA,KAAKs3C,kBAAkBv2C,QAE/B,CACA,IAAAO,GACQtB,KAAKs3C,oBACLt3C,KAAK25C,uBACL35C,KAAKs3C,kBAAkBh2C,cAChBtB,KAAKs3C,kBAEpB,CACA,YAAAZ,EAAa,QAAE/sC,EAASmW,QAAS/gB,IACzBiB,KAAKyxC,MAAMC,gBAAgB/nC,IAC3B3J,KAAK45C,cAAcjwC,EAAS5K,EAEpC,CACA,cAAA43C,EAAe,QAAEhtC,EAASmW,QAAS/gB,IAC/BiB,KAAK65C,iBAAiBlwC,EAAS5K,EACnC,CACA,aAAA66C,CAAcjwC,EAAS5K,GACnB,IAAIgb,EACC/Z,KAAK05C,cAAc1uC,IAAIjM,EAAM4K,KAC9B3J,KAAK05C,cAAcjxC,IAAI1J,EAAM4K,GACK,QAAjCoQ,EAAK/Z,KAAKs3C,yBAA2C,IAAZv9B,GAAyBA,EAAGo4B,MAAM,IAAMnyC,KAAKwY,SAASshC,gBAAgBnwC,EAAS5K,IAEjI,CACA,gBAAA86C,CAAiBlwC,EAAS5K,GACtB,IAAIgb,EACA/Z,KAAK05C,cAAc1uC,IAAIjM,EAAM4K,KAC7B3J,KAAK05C,cAAcr0B,OAAOtmB,EAAM4K,GACE,QAAjCoQ,EAAK/Z,KAAKs3C,yBAA2C,IAAZv9B,GAAyBA,EAAGo4B,MAAM,IAAMnyC,KAAKwY,SAASuhC,mBAAmBpwC,EAAS5K,IAEpI,CACA,oBAAA46C,GACI,IAAK,MAAM56C,KAAQiB,KAAK05C,cAAc1mC,KAClC,IAAK,MAAMrJ,KAAW3J,KAAK05C,cAAcpF,gBAAgBv1C,GACrDiB,KAAK65C,iBAAiBlwC,EAAS5K,EAG3C,CACA,iBAAIggB,GACA,MAAO,QAAQ/e,KAAKuL,QAAQ7F,mBAChC,CACA,WAAIiE,GACA,OAAO3J,KAAKuL,QAAQ5B,OACxB,CACA,SAAI8nC,GACA,OAAOzxC,KAAKuL,QAAQkmC,KACxB,EAGJ,SAASuI,GAAiCt5C,EAAau5C,GACnD,MAAMC,EAAYC,GAA2Bz5C,GAC7C,OAAOgM,MAAMmS,KAAKq7B,EAAU37B,OAAO,CAACF,EAAQ3d,KAoBhD,SAAiCA,EAAau5C,GAC1C,MAAM9kC,EAAazU,EAAYu5C,GAC/B,OAAOvtC,MAAM+H,QAAQU,GAAcA,EAAa,EACpD,CAtBQilC,CAAwB15C,EAAau5C,GAAc7W,QAASrkC,GAASsf,EAAO5V,IAAI1J,IACzEsf,GACR,IAAI2gB,KACX,CAQA,SAASmb,GAA2Bz5C,GAChC,MAAMw5C,EAAY,GAClB,KAAOx5C,GACHw5C,EAAUh6C,KAAKQ,GACfA,EAAcuK,OAAOovC,eAAe35C,GAExC,OAAOw5C,EAAUI,SACrB,CAUA,MAAMC,GACF,WAAA75C,CAAY6K,EAASiN,GACjBxY,KAAK4iB,SAAU,EACf5iB,KAAKuL,QAAUA,EACfvL,KAAKwY,SAAWA,EAChBxY,KAAKw6C,cAAgB,IAAIxG,GACzBh0C,KAAKy6C,qBAAuB,IAAIzG,GAChCh0C,KAAK06C,oBAAsB,IAAIlN,IAC/BxtC,KAAK26C,qBAAuB,IAAInN,GACpC,CACA,KAAAzsC,GACSf,KAAK4iB,UACN5iB,KAAK46C,kBAAkBxX,QAASyX,IAC5B76C,KAAK86C,+BAA+BD,GACpC76C,KAAK+6C,gCAAgCF,KAEzC76C,KAAK4iB,SAAU,EACf5iB,KAAKg7C,kBAAkB5X,QAAS73B,GAAYA,EAAQwmB,WAE5D,CACA,OAAAA,GACI/xB,KAAK06C,oBAAoBtX,QAAS6X,GAAaA,EAASlpB,WACxD/xB,KAAK26C,qBAAqBvX,QAAS6X,GAAaA,EAASlpB,UAC7D,CACA,IAAAzwB,GACQtB,KAAK4iB,UACL5iB,KAAK4iB,SAAU,EACf5iB,KAAKk7C,uBACLl7C,KAAKm7C,wBACLn7C,KAAKo7C,yBAEb,CACA,qBAAAD,GACQn7C,KAAK06C,oBAAoB3Y,KAAO,IAChC/hC,KAAK06C,oBAAoBtX,QAAS6X,GAAaA,EAAS35C,QACxDtB,KAAK06C,oBAAoBtY,QAEjC,CACA,sBAAAgZ,GACQp7C,KAAK26C,qBAAqB5Y,KAAO,IACjC/hC,KAAK26C,qBAAqBvX,QAAS6X,GAAaA,EAAS35C,QACzDtB,KAAK26C,qBAAqBvY,QAElC,CACA,eAAA0S,CAAgBnrC,EAASgrC,GAAW,WAAEkG,IAClC,MAAMQ,EAASr7C,KAAKs7C,UAAU3xC,EAASkxC,GACnCQ,GACAr7C,KAAKu7C,cAAcF,EAAQ1xC,EAASkxC,EAE5C,CACA,iBAAA7F,CAAkBrrC,EAASgrC,GAAW,WAAEkG,IACpC,MAAMQ,EAASr7C,KAAKw7C,iBAAiB7xC,EAASkxC,GAC1CQ,GACAr7C,KAAKy7C,iBAAiBJ,EAAQ1xC,EAASkxC,EAE/C,CACA,oBAAAhG,CAAqBlrC,GAAS,WAAEkxC,IAC5B,MAAM76B,EAAWhgB,KAAKggB,SAAS66B,GACzBa,EAAY17C,KAAK07C,UAAU/xC,EAASkxC,GACpCc,EAAsBhyC,EAAQmK,QAAQ,IAAI9T,KAAKovC,OAAOwM,wBAAwBf,MACpF,QAAI76B,GACO07B,GAAaC,GAAuBhyC,EAAQmK,QAAQkM,EAKnE,CACA,uBAAA6zB,CAAwBzvB,EAAUrF,GAC9B,MAAM87B,EAAa76C,KAAK67C,qCAAqC98B,GACzD87B,GACA76C,KAAK87C,gCAAgCjB,EAE7C,CACA,4BAAA9G,CAA6B3vB,EAAUrF,GACnC,MAAM87B,EAAa76C,KAAK67C,qCAAqC98B,GACzD87B,GACA76C,KAAK87C,gCAAgCjB,EAE7C,CACA,yBAAA/G,CAA0B1vB,EAAUrF,GAChC,MAAM87B,EAAa76C,KAAK67C,qCAAqC98B,GACzD87B,GACA76C,KAAK87C,gCAAgCjB,EAE7C,CACA,aAAAU,CAAcF,EAAQ1xC,EAASkxC,GAC3B,IAAI9gC,EACC/Z,KAAKy6C,qBAAqBzvC,IAAI6vC,EAAYlxC,KAC3C3J,KAAKw6C,cAAc/xC,IAAIoyC,EAAYQ,GACnCr7C,KAAKy6C,qBAAqBhyC,IAAIoyC,EAAYlxC,GACU,QAAnDoQ,EAAK/Z,KAAK06C,oBAAoBnlC,IAAIslC,UAAqC,IAAZ9gC,GAAyBA,EAAGo4B,MAAM,IAAMnyC,KAAKwY,SAASujC,gBAAgBV,EAAQ1xC,EAASkxC,IAE3J,CACA,gBAAAY,CAAiBJ,EAAQ1xC,EAASkxC,GAC9B,IAAI9gC,EACA/Z,KAAKy6C,qBAAqBzvC,IAAI6vC,EAAYlxC,KAC1C3J,KAAKw6C,cAAcn1B,OAAOw1B,EAAYQ,GACtCr7C,KAAKy6C,qBAAqBp1B,OAAOw1B,EAAYlxC,GAEnB,QADzBoQ,EAAK/Z,KAAK06C,oBACNnlC,IAAIslC,UAAqC,IAAZ9gC,GAAyBA,EAAGo4B,MAAM,IAAMnyC,KAAKwY,SAASwjC,mBAAmBX,EAAQ1xC,EAASkxC,IAEpI,CACA,oBAAAK,GACI,IAAK,MAAML,KAAc76C,KAAKy6C,qBAAqBznC,KAC/C,IAAK,MAAMrJ,KAAW3J,KAAKy6C,qBAAqBnG,gBAAgBuG,GAC5D,IAAK,MAAMQ,KAAUr7C,KAAKw6C,cAAclG,gBAAgBuG,GACpD76C,KAAKy7C,iBAAiBJ,EAAQ1xC,EAASkxC,EAIvD,CACA,+BAAAiB,CAAgCjB,GAC5B,MAAMI,EAAWj7C,KAAK06C,oBAAoBnlC,IAAIslC,GAC1CI,IACAA,EAASj7B,SAAWhgB,KAAKggB,SAAS66B,GAE1C,CACA,8BAAAC,CAA+BD,GAC3B,MAAM76B,EAAWhgB,KAAKggB,SAAS66B,GACzBoB,EAAmB,IAAIvH,GAAiB11C,SAASshB,KAAMN,EAAUhgB,KAAM,CAAE66C,eAC/E76C,KAAK06C,oBAAoBnjC,IAAIsjC,EAAYoB,GACzCA,EAAiBl7C,OACrB,CACA,+BAAAg6C,CAAgCF,GAC5B,MAAM97B,EAAgB/e,KAAKk8C,2BAA2BrB,GAChD5E,EAAoB,IAAItC,GAAkB3zC,KAAKyxC,MAAM9nC,QAASoV,EAAe/e,MACnFA,KAAK26C,qBAAqBpjC,IAAIsjC,EAAY5E,GAC1CA,EAAkBl1C,OACtB,CACA,QAAAif,CAAS66B,GACL,OAAO76C,KAAKyxC,MAAM0K,QAAQC,yBAAyBvB,EACvD,CACA,0BAAAqB,CAA2BrB,GACvB,OAAO76C,KAAKyxC,MAAMrC,OAAOiN,wBAAwBr8C,KAAK0F,WAAYm1C,EACtE,CACA,oCAAAgB,CAAqC98B,GACjC,OAAO/e,KAAK46C,kBAAkBt0B,KAAMu0B,GAAe76C,KAAKk8C,2BAA2BrB,KAAgB97B,EACvG,CACA,sBAAIu9B,GACA,MAAMC,EAAe,IAAIvI,GAMzB,OALAh0C,KAAKw8C,OAAOC,QAAQrZ,QAASn5B,IAET+vC,GADI/vC,EAAOkL,WAAWunC,sBACwB,WACtDtZ,QAASiY,GAAWkB,EAAa9zC,IAAI4yC,EAAQpxC,EAAOvE,eAEzD62C,CACX,CACA,qBAAI3B,GACA,OAAO56C,KAAKs8C,mBAAmB/H,gBAAgBv0C,KAAK0F,WACxD,CACA,kCAAIi3C,GACA,OAAO38C,KAAKs8C,mBAAmBhI,gBAAgBt0C,KAAK0F,WACxD,CACA,qBAAIs1C,GACA,MAAM4B,EAAc58C,KAAK28C,+BACzB,OAAO38C,KAAKw8C,OAAOK,SAASh1C,OAAQ0D,GAAYqxC,EAAYloC,SAASnJ,EAAQ7F,YACjF,CACA,SAAAg2C,CAAU/xC,EAASkxC,GACf,QAAS76C,KAAKs7C,UAAU3xC,EAASkxC,MAAiB76C,KAAKw7C,iBAAiB7xC,EAASkxC,EACrF,CACA,SAAAS,CAAU3xC,EAASkxC,GACf,OAAO76C,KAAKstC,YAAYwP,qCAAqCnzC,EAASkxC,EAC1E,CACA,gBAAAW,CAAiB7xC,EAASkxC,GACtB,OAAO76C,KAAKw6C,cAAclG,gBAAgBuG,GAAYv0B,KAAM+0B,GAAWA,EAAO1xC,UAAYA,EAC9F,CACA,SAAI8nC,GACA,OAAOzxC,KAAKuL,QAAQkmC,KACxB,CACA,UAAIrC,GACA,OAAOpvC,KAAKuL,QAAQ6jC,MACxB,CACA,cAAI1pC,GACA,OAAO1F,KAAKuL,QAAQ7F,UACxB,CACA,eAAI4nC,GACA,OAAOttC,KAAKuL,QAAQ+hC,WACxB,CACA,UAAIkP,GACA,OAAOx8C,KAAKstC,YAAYkP,MAC5B,EAGJ,MAAMO,GACF,WAAAr8C,CAAYuJ,EAAQwnC,GAChBzxC,KAAKuxC,iBAAmB,CAACyL,EAAcz/B,EAAS,CAAC,KAC7C,MAAM,WAAE7X,EAAU,WAAEyrC,EAAU,QAAExnC,GAAY3J,KAC5Cud,EAAStS,OAAOuc,OAAO,CAAE9hB,aAAYyrC,aAAYxnC,WAAW4T,GAC5Dvd,KAAKstC,YAAYiE,iBAAiBvxC,KAAK0F,WAAYs3C,EAAcz/B,IAErEvd,KAAKiK,OAASA,EACdjK,KAAKyxC,MAAQA,EACbzxC,KAAKmxC,WAAa,IAAIlnC,EAAOyyC,sBAAsB18C,MACnDA,KAAKi9C,gBAAkB,IAAIhF,GAAgBj4C,KAAMA,KAAKk9C,YACtDl9C,KAAKm9C,cAAgB,IAAI3E,GAAcx4C,KAAMA,KAAKmxC,YAClDnxC,KAAKo9C,eAAiB,IAAI3D,GAAez5C,KAAMA,MAC/CA,KAAKq9C,eAAiB,IAAI9C,GAAev6C,KAAMA,MAC/C,IACIA,KAAKmxC,WAAWmM,aAChBt9C,KAAKuxC,iBAAiB,aAC1B,CACA,MAAO/sC,GACHxE,KAAK8tC,YAAYtpC,EAAO,0BAC5B,CACJ,CACA,OAAA+E,GACIvJ,KAAKi9C,gBAAgBl8C,QACrBf,KAAKm9C,cAAcp8C,QACnBf,KAAKo9C,eAAer8C,QACpBf,KAAKq9C,eAAet8C,QACpB,IACIf,KAAKmxC,WAAW5nC,UAChBvJ,KAAKuxC,iBAAiB,UAC1B,CACA,MAAO/sC,GACHxE,KAAK8tC,YAAYtpC,EAAO,wBAC5B,CACJ,CACA,OAAAutB,GACI/xB,KAAKq9C,eAAetrB,SACxB,CACA,UAAA7rB,GACI,IACIlG,KAAKmxC,WAAWjrC,aAChBlG,KAAKuxC,iBAAiB,aAC1B,CACA,MAAO/sC,GACHxE,KAAK8tC,YAAYtpC,EAAO,2BAC5B,CACAxE,KAAKq9C,eAAe/7C,OACpBtB,KAAKo9C,eAAe97C,OACpBtB,KAAKm9C,cAAc77C,OACnBtB,KAAKi9C,gBAAgB37C,MACzB,CACA,eAAIgsC,GACA,OAAOttC,KAAKiK,OAAOqjC,WACvB,CACA,cAAI5nC,GACA,OAAO1F,KAAKiK,OAAOvE,UACvB,CACA,UAAI0pC,GACA,OAAOpvC,KAAKstC,YAAY8B,MAC5B,CACA,cAAI8N,GACA,OAAOl9C,KAAKstC,YAAY4P,UAC5B,CACA,WAAIvzC,GACA,OAAO3J,KAAKyxC,MAAM9nC,OACtB,CACA,iBAAIwN,GACA,OAAOnX,KAAK2J,QAAQwN,aACxB,CACA,WAAA22B,CAAYtpC,EAAOgB,EAAS+X,EAAS,CAAC,GAClC,MAAM,WAAE7X,EAAU,WAAEyrC,EAAU,QAAExnC,GAAY3J,KAC5Cud,EAAStS,OAAOuc,OAAO,CAAE9hB,aAAYyrC,aAAYxnC,WAAW4T,GAC5Dvd,KAAKstC,YAAYQ,YAAYtpC,EAAO,SAASgB,IAAW+X,EAC5D,CACA,eAAAu8B,CAAgBnwC,EAAS5K,GACrBiB,KAAKu9C,uBAAuB,GAAGx+C,mBAAuB4K,EAC1D,CACA,kBAAAowC,CAAmBpwC,EAAS5K,GACxBiB,KAAKu9C,uBAAuB,GAAGx+C,sBAA0B4K,EAC7D,CACA,eAAAoyC,CAAgBV,EAAQ1xC,EAAS5K,GAC7BiB,KAAKu9C,uBAAuB,GAAG5O,GAAkB5vC,oBAAwBs8C,EAAQ1xC,EACrF,CACA,kBAAAqyC,CAAmBX,EAAQ1xC,EAAS5K,GAChCiB,KAAKu9C,uBAAuB,GAAG5O,GAAkB5vC,uBAA2Bs8C,EAAQ1xC,EACxF,CACA,sBAAA4zC,CAAuBhO,KAAezmC,GAClC,MAAMqoC,EAAanxC,KAAKmxC,WACa,mBAA1BA,EAAW5B,IAClB4B,EAAW5B,MAAezmC,EAElC,EA4CJ,MAAM00C,GACyC,mBAAhCvyC,OAAOmB,sBACNrF,GAAW,IAAIkE,OAAOwyC,oBAAoB12C,MAAYkE,OAAOmB,sBAAsBrF,IAGpFkE,OAAOwyC,oBAGhBv2C,GAAS,MACX,SAASw2C,EAAkBh9C,GACvB,SAASi9C,IACL,OAAOhoC,QAAQK,UAAUtV,EAAayM,qBAC1C,CAKA,OAJAwwC,EAASp4C,UAAY0F,OAAO3C,OAAO5H,EAAY6E,UAAW,CACtD7E,YAAa,CAAExB,MAAOy+C,KAE1BhoC,QAAQM,eAAe0nC,EAAUj9C,GAC1Bi9C,CACX,CASA,IAEI,OAVJ,WACI,MAGMhwC,EAAI+vC,EAHA,WACN19C,KAAKkJ,EAAEnE,KAAK/E,KAChB,GAEA2N,EAAEpI,UAAU2D,EAAI,WAAc,EACvB,IAAIyE,CACf,CAEIiwC,GACOF,CACX,CACA,MAAOl5C,GACH,OAAQ9D,GAAgB,cAAuBA,GAEnD,CACH,EA3Bc,GAoCf,MAAMm9C,GACF,WAAAn9C,CAAY4sC,EAAan4B,GACrBnV,KAAKstC,YAAcA,EACnBttC,KAAKmV,WAVb,SAAyBA,GACrB,MAAO,CACHzP,WAAYyP,EAAWzP,WACvBg3C,uBAjFOh8C,EAiFsByU,EAAWunC,sBA9EhD,SAAgBh8C,EAAasG,GACzB,MAAM82C,EAAoB52C,GAAOxG,GAC3Bq9C,EAeV,SAA6Bx4C,EAAWyB,GACpC,OAAOw2C,GAAWx2C,GAAYuX,OAAO,CAACw/B,EAAkB92C,KACpD,MAAMkoC,EAOd,SAA+B5pC,EAAWyB,EAAYC,GAClD,MAAM+2C,EAAsB/yC,OAAOgzC,yBAAyB14C,EAAW0B,GAEvE,IADwB+2C,KAAuB,UAAWA,GACpC,CAClB,MAAM7O,EAAalkC,OAAOgzC,yBAAyBj3C,EAAYC,GAAK/H,MAKpE,OAJI8+C,IACA7O,EAAW55B,IAAMyoC,EAAoBzoC,KAAO45B,EAAW55B,IACvD45B,EAAW53B,IAAMymC,EAAoBzmC,KAAO43B,EAAW53B,KAEpD43B,CACX,CACJ,CAlB2B+O,CAAsB34C,EAAWyB,EAAYC,GAIhE,OAHIkoC,GACAlkC,OAAOuc,OAAOu2B,EAAkB,CAAE,CAAC92C,GAAMkoC,IAEtC4O,GACR,CAAC,EACR,CAvB6BI,CAAoBz9C,EAAY6E,UAAWyB,GAEpE,OADAiE,OAAO63B,iBAAiBgb,EAAkBv4C,UAAWw4C,GAC9CD,CACX,CAPWM,CAAO19C,EAQlB,SAA8BA,GAE1B,OADkBs5C,GAAiCt5C,EAAa,aAC/C6d,OAAO,CAAC8/B,EAAmBC,KACxC,MAAMt3C,EAAas3C,EAAS59C,GAC5B,IAAK,MAAMuG,KAAOD,EAAY,CAC1B,MAAMmoC,EAAakP,EAAkBp3C,IAAQ,CAAC,EAC9Co3C,EAAkBp3C,GAAOgE,OAAOuc,OAAO2nB,EAAYnoC,EAAWC,GAClE,CACA,OAAOo3C,GACR,CAAC,EACR,CAlB+BE,CAAqB79C,MADpD,IAAeA,CAmFf,CAK0B89C,CAAgBrpC,GAClCnV,KAAKy+C,gBAAkB,IAAI1nC,QAC3B/W,KAAK0+C,kBAAoB,IAAI1f,GACjC,CACA,cAAIt5B,GACA,OAAO1F,KAAKmV,WAAWzP,UAC3B,CACA,yBAAIg3C,GACA,OAAO18C,KAAKmV,WAAWunC,qBAC3B,CACA,YAAIG,GACA,OAAOnwC,MAAMmS,KAAK7e,KAAK0+C,kBAC3B,CACA,sBAAAC,CAAuBlN,GACnB,MAAMlmC,EAAUvL,KAAK4+C,qBAAqBnN,GAC1CzxC,KAAK0+C,kBAAkBj2C,IAAI8C,GAC3BA,EAAQhC,SACZ,CACA,yBAAAs1C,CAA0BpN,GACtB,MAAMlmC,EAAUvL,KAAKy+C,gBAAgBlpC,IAAIk8B,GACrClmC,IACAvL,KAAK0+C,kBAAkBr5B,OAAO9Z,GAC9BA,EAAQrF,aAEhB,CACA,oBAAA04C,CAAqBnN,GACjB,IAAIlmC,EAAUvL,KAAKy+C,gBAAgBlpC,IAAIk8B,GAKvC,OAJKlmC,IACDA,EAAU,IAAIwxC,GAAQ/8C,KAAMyxC,GAC5BzxC,KAAKy+C,gBAAgBlnC,IAAIk6B,EAAOlmC,IAE7BA,CACX,EAGJ,MAAMuzC,GACF,WAAAp+C,CAAY+wC,GACRzxC,KAAKyxC,MAAQA,CACjB,CACA,GAAAzmC,CAAIjM,GACA,OAAOiB,KAAK2D,KAAKqH,IAAIhL,KAAK++C,WAAWhgD,GACzC,CACA,GAAAwW,CAAIxW,GACA,OAAOiB,KAAKg/C,OAAOjgD,GAAM,EAC7B,CACA,MAAAigD,CAAOjgD,GAEH,OADoBiB,KAAK2D,KAAK4R,IAAIvV,KAAK++C,WAAWhgD,KAAU,IAp8CnD4U,MAAM,YAAc,EAs8CjC,CACA,gBAAAsrC,CAAiBlgD,GACb,OAAOiB,KAAK2D,KAAKu7C,uBAAuBl/C,KAAK++C,WAAWhgD,GAC5D,CACA,UAAAggD,CAAWhgD,GACP,MAAO,GAAGA,SACd,CACA,QAAI4E,GACA,OAAO3D,KAAKyxC,MAAM9tC,IACtB,EAGJ,MAAMw7C,GACF,WAAAz+C,CAAY+wC,GACRzxC,KAAKyxC,MAAQA,CACjB,CACA,WAAI9nC,GACA,OAAO3J,KAAKyxC,MAAM9nC,OACtB,CACA,cAAIjE,GACA,OAAO1F,KAAKyxC,MAAM/rC,UACtB,CACA,GAAA6P,CAAItO,GACA,MAAMlI,EAAOiB,KAAKk/C,uBAAuBj4C,GACzC,OAAOjH,KAAK2J,QAAQG,aAAa/K,EACrC,CACA,GAAAwY,CAAItQ,EAAK/H,GACL,MAAMH,EAAOiB,KAAKk/C,uBAAuBj4C,GAEzC,OADAjH,KAAK2J,QAAQwP,aAAapa,EAAMG,GACzBc,KAAKuV,IAAItO,EACpB,CACA,GAAA+D,CAAI/D,GACA,MAAMlI,EAAOiB,KAAKk/C,uBAAuBj4C,GACzC,OAAOjH,KAAK2J,QAAQ8P,aAAa1a,EACrC,CACA,OAAOkI,GACH,GAAIjH,KAAKgL,IAAI/D,GAAM,CACf,MAAMlI,EAAOiB,KAAKk/C,uBAAuBj4C,GAEzC,OADAjH,KAAK2J,QAAQyP,gBAAgBra,IACtB,CACX,CAEI,OAAO,CAEf,CACA,sBAAAmgD,CAAuBj4C,GACnB,MAAO,QAAQjH,KAAK0F,cAAcmpC,GAAU5nC,IAChD,EAGJ,MAAMm4C,GACF,WAAA1+C,CAAYhB,GACRM,KAAKq/C,mBAAqB,IAAItoC,QAC9B/W,KAAKN,OAASA,CAClB,CACA,IAAA27B,CAAKt0B,EAAQE,EAAKzB,GACd,IAAI85C,EAAat/C,KAAKq/C,mBAAmB9pC,IAAIxO,GACxCu4C,IACDA,EAAa,IAAItgB,IACjBh/B,KAAKq/C,mBAAmB9nC,IAAIxQ,EAAQu4C,IAEnCA,EAAWt0C,IAAI/D,KAChBq4C,EAAW72C,IAAIxB,GACfjH,KAAKN,OAAO27B,KAAK71B,EAASuB,GAElC,EAGJ,SAASw4C,GAA4BxgC,EAAeoH,GAChD,MAAO,IAAIpH,OAAmBoH,KAClC,CAEA,MAAMq5B,GACF,WAAA9+C,CAAY+wC,GACRzxC,KAAKyxC,MAAQA,CACjB,CACA,WAAI9nC,GACA,OAAO3J,KAAKyxC,MAAM9nC,OACtB,CACA,cAAIjE,GACA,OAAO1F,KAAKyxC,MAAM/rC,UACtB,CACA,UAAI0pC,GACA,OAAOpvC,KAAKyxC,MAAMrC,MACtB,CACA,GAAApkC,CAAIy0C,GACA,OAAgC,MAAzBz/C,KAAKsmB,KAAKm5B,EACrB,CACA,IAAAn5B,IAAQo5B,GACJ,OAAOA,EAAYnhC,OAAO,CAACrM,EAAQutC,IAAevtC,GAAUlS,KAAK2/C,WAAWF,IAAez/C,KAAK4/C,iBAAiBH,QAAa7/C,EAClI,CACA,OAAA+I,IAAW+2C,GACP,OAAOA,EAAYnhC,OAAO,CAACwpB,EAAS0X,IAAe,IAC5C1X,KACA/nC,KAAK6/C,eAAeJ,MACpBz/C,KAAK8/C,qBAAqBL,IAC9B,GACP,CACA,UAAAE,CAAWF,GACP,MAAMz/B,EAAWhgB,KAAK+/C,yBAAyBN,GAC/C,OAAOz/C,KAAKyxC,MAAMuO,YAAYhgC,EAClC,CACA,cAAA6/B,CAAeJ,GACX,MAAMz/B,EAAWhgB,KAAK+/C,yBAAyBN,GAC/C,OAAOz/C,KAAKyxC,MAAMwO,gBAAgBjgC,EACtC,CACA,wBAAA+/B,CAAyBN,GAErB,OAAOF,GADev/C,KAAKovC,OAAO8Q,wBAAwBlgD,KAAK0F,YACb+5C,EACtD,CACA,gBAAAG,CAAiBH,GACb,MAAMz/B,EAAWhgB,KAAKmgD,+BAA+BV,GACrD,OAAOz/C,KAAKogD,UAAUpgD,KAAKyxC,MAAMuO,YAAYhgC,GAAWy/B,EAC5D,CACA,oBAAAK,CAAqBL,GACjB,MAAMz/B,EAAWhgB,KAAKmgD,+BAA+BV,GACrD,OAAOz/C,KAAKyxC,MAAMwO,gBAAgBjgC,GAAU9X,IAAKyB,GAAY3J,KAAKogD,UAAUz2C,EAAS81C,GACzF,CACA,8BAAAU,CAA+BV,GAC3B,MAAMY,EAAmB,GAAGrgD,KAAK0F,cAAc+5C,IAC/C,OAAOF,GAA4Bv/C,KAAKovC,OAAOkR,gBAAiBD,EACpE,CACA,SAAAD,CAAUz2C,EAAS81C,GACf,GAAI91C,EAAS,CACT,MAAM,WAAEjE,GAAe1F,KACjB+e,EAAgB/e,KAAKovC,OAAOkR,gBAC5BC,EAAuBvgD,KAAKovC,OAAO8Q,wBAAwBx6C,GACjE1F,KAAKwgD,MAAMnlB,KAAK1xB,EAAS,UAAU81C,IAAc,kBAAkB1gC,MAAkBrZ,KAAc+5C,WAAoBc,MAAyBd,WACrI1gC,iFACf,CACA,OAAOpV,CACX,CACA,SAAI62C,GACA,OAAOxgD,KAAKyxC,MAAM+O,KACtB,EAGJ,MAAMC,GACF,WAAA//C,CAAY+wC,EAAOiP,GACf1gD,KAAKyxC,MAAQA,EACbzxC,KAAK0gD,kBAAoBA,CAC7B,CACA,WAAI/2C,GACA,OAAO3J,KAAKyxC,MAAM9nC,OACtB,CACA,cAAIjE,GACA,OAAO1F,KAAKyxC,MAAM/rC,UACtB,CACA,UAAI0pC,GACA,OAAOpvC,KAAKyxC,MAAMrC,MACtB,CACA,GAAApkC,CAAI6vC,GACA,OAAgC,MAAzB76C,KAAKsmB,KAAKu0B,EACrB,CACA,IAAAv0B,IAAQq6B,GACJ,OAAOA,EAAYpiC,OAAO,CAAC88B,EAAQR,IAAeQ,GAAUr7C,KAAK4gD,WAAW/F,QAAaj7C,EAC7F,CACA,OAAA+I,IAAWg4C,GACP,OAAOA,EAAYpiC,OAAO,CAAC49B,EAAStB,IAAe,IAAIsB,KAAYn8C,KAAK6gD,eAAehG,IAAc,GACzG,CACA,wBAAAuB,CAAyBvB,GACrB,MAAM97B,EAAgB/e,KAAKovC,OAAOiN,wBAAwBr8C,KAAK0F,WAAYm1C,GAC3E,OAAO76C,KAAK0gD,kBAAkB52C,aAAaiV,EAC/C,CACA,UAAA6hC,CAAW/F,GACP,MAAM76B,EAAWhgB,KAAKo8C,yBAAyBvB,GAC/C,GAAI76B,EACA,OAAOhgB,KAAKggD,YAAYhgC,EAAU66B,EAC1C,CACA,cAAAgG,CAAehG,GACX,MAAM76B,EAAWhgB,KAAKo8C,yBAAyBvB,GAC/C,OAAO76B,EAAWhgB,KAAKigD,gBAAgBjgC,EAAU66B,GAAc,EACnE,CACA,WAAAmF,CAAYhgC,EAAU66B,GAElB,OADiB76C,KAAKyxC,MAAMqP,cAAc9gC,GAC1BnY,OAAQ8B,GAAY3J,KAAK+gD,eAAep3C,EAASqW,EAAU66B,IAAa,EAC5F,CACA,eAAAoF,CAAgBjgC,EAAU66B,GAEtB,OADiB76C,KAAKyxC,MAAMqP,cAAc9gC,GAC1BnY,OAAQ8B,GAAY3J,KAAK+gD,eAAep3C,EAASqW,EAAU66B,GAC/E,CACA,cAAAkG,CAAep3C,EAASqW,EAAU66B,GAC9B,MAAMe,EAAsBjyC,EAAQG,aAAa9J,KAAKyxC,MAAMrC,OAAOwM,sBAAwB,GAC3F,OAAOjyC,EAAQmK,QAAQkM,IAAa47B,EAAoBxpC,MAAM,KAAKsC,SAASmmC,EAChF,EAGJ,MAAMmG,GACF,WAAAtgD,CAAY0uC,EAAQzlC,EAASjE,EAAYhG,GACrCM,KAAK+nC,QAAU,IAAIyX,GAAUx/C,MAC7BA,KAAKqU,QAAU,IAAIyqC,GAAS9+C,MAC5BA,KAAK2D,KAAO,IAAIw7C,GAAQn/C,MACxBA,KAAK0xC,gBAAmB/nC,GACbA,EAAQ0N,QAAQrX,KAAKihD,sBAAwBjhD,KAAK2J,QAE7D3J,KAAKovC,OAASA,EACdpvC,KAAK2J,QAAUA,EACf3J,KAAK0F,WAAaA,EAClB1F,KAAKwgD,MAAQ,IAAIpB,GAAM1/C,GACvBM,KAAKm8C,QAAU,IAAIsE,GAAUzgD,KAAKkhD,cAAev3C,EACrD,CACA,WAAAq2C,CAAYhgC,GACR,OAAOhgB,KAAK2J,QAAQmK,QAAQkM,GAAYhgB,KAAK2J,QAAU3J,KAAK8gD,cAAc9gC,GAAUsG,KAAKtmB,KAAK0xC,gBAClG,CACA,eAAAuO,CAAgBjgC,GACZ,MAAO,IACChgB,KAAK2J,QAAQmK,QAAQkM,GAAY,CAAChgB,KAAK2J,SAAW,MACnD3J,KAAK8gD,cAAc9gC,GAAUnY,OAAO7H,KAAK0xC,iBAEpD,CACA,aAAAoP,CAAc9gC,GACV,OAAOtT,MAAMmS,KAAK7e,KAAK2J,QAAQga,iBAAiB3D,GACpD,CACA,sBAAIihC,GACA,OAAO1B,GAA4Bv/C,KAAKovC,OAAOwM,oBAAqB57C,KAAK0F,WAC7E,CACA,mBAAIy7C,GACA,OAAOnhD,KAAK2J,UAAY3K,SAASib,eACrC,CACA,iBAAIinC,GACA,OAAOlhD,KAAKmhD,gBACNnhD,KACA,IAAIghD,GAAMhhD,KAAKovC,OAAQpwC,SAASib,gBAAiBja,KAAK0F,WAAY1F,KAAKwgD,MAAM9gD,OACvF,EAGJ,MAAM0hD,GACF,WAAA1gD,CAAYiJ,EAASylC,EAAQ52B,GACzBxY,KAAK2J,QAAUA,EACf3J,KAAKovC,OAASA,EACdpvC,KAAKwY,SAAWA,EAChBxY,KAAKm4C,kBAAoB,IAAId,GAAkBr3C,KAAK2J,QAAS3J,KAAK47C,oBAAqB57C,MACvFA,KAAKqhD,4BAA8B,IAAItqC,QACvC/W,KAAKshD,qBAAuB,IAAIvqC,OACpC,CACA,KAAAhW,GACIf,KAAKm4C,kBAAkBp3C,OAC3B,CACA,IAAAO,GACItB,KAAKm4C,kBAAkB72C,MAC3B,CACA,uBAAIs6C,GACA,OAAO57C,KAAKovC,OAAOwM,mBACvB,CACA,kBAAA5D,CAAmB7xB,GACf,MAAM,QAAExc,EAASmW,QAASpa,GAAeygB,EACzC,OAAOnmB,KAAKuhD,kCAAkC53C,EAASjE,EAC3D,CACA,iCAAA67C,CAAkC53C,EAASjE,GACvC,MAAM87C,EAAqBxhD,KAAKyhD,kCAAkC93C,GAClE,IAAI8nC,EAAQ+P,EAAmBjsC,IAAI7P,GAKnC,OAJK+rC,IACDA,EAAQzxC,KAAKwY,SAASkpC,mCAAmC/3C,EAASjE,GAClE87C,EAAmBjqC,IAAI7R,EAAY+rC,IAEhCA,CACX,CACA,mBAAAkG,CAAoBhuC,EAASzK,GACzB,MAAMyiD,GAAkB3hD,KAAKshD,qBAAqB/rC,IAAIrW,IAAU,GAAK,EACrEc,KAAKshD,qBAAqB/pC,IAAIrY,EAAOyiD,GACf,GAAlBA,GACA3hD,KAAKwY,SAASopC,eAAe1iD,EAErC,CACA,qBAAA04C,CAAsBjuC,EAASzK,GAC3B,MAAMyiD,EAAiB3hD,KAAKshD,qBAAqB/rC,IAAIrW,GACjDyiD,IACA3hD,KAAKshD,qBAAqB/pC,IAAIrY,EAAOyiD,EAAiB,GAChC,GAAlBA,GACA3hD,KAAKwY,SAASqpC,kBAAkB3iD,GAG5C,CACA,iCAAAuiD,CAAkC93C,GAC9B,IAAI63C,EAAqBxhD,KAAKqhD,4BAA4B9rC,IAAI5L,GAK9D,OAJK63C,IACDA,EAAqB,IAAIhU,IACzBxtC,KAAKqhD,4BAA4B9pC,IAAI5N,EAAS63C,IAE3CA,CACX,EAGJ,MAAMM,GACF,WAAAphD,CAAY4sC,GACRttC,KAAKstC,YAAcA,EACnBttC,KAAK+hD,cAAgB,IAAIX,GAAcphD,KAAK2J,QAAS3J,KAAKovC,OAAQpvC,MAClEA,KAAKwhD,mBAAqB,IAAIxN,GAC9Bh0C,KAAKgiD,oBAAsB,IAAIxU,GACnC,CACA,WAAI7jC,GACA,OAAO3J,KAAKstC,YAAY3jC,OAC5B,CACA,UAAIylC,GACA,OAAOpvC,KAAKstC,YAAY8B,MAC5B,CACA,UAAI1vC,GACA,OAAOM,KAAKstC,YAAY5tC,MAC5B,CACA,uBAAIk8C,GACA,OAAO57C,KAAKovC,OAAOwM,mBACvB,CACA,WAAIa,GACA,OAAO/vC,MAAMmS,KAAK7e,KAAKgiD,oBAAoB3jC,SAC/C,CACA,YAAIw+B,GACA,OAAO78C,KAAKy8C,QAAQl+B,OAAO,CAACs+B,EAAU5yC,IAAW4yC,EAASxwC,OAAOpC,EAAO4yC,UAAW,GACvF,CACA,KAAA97C,GACIf,KAAK+hD,cAAchhD,OACvB,CACA,IAAAO,GACItB,KAAK+hD,cAAczgD,MACvB,CACA,cAAA2gD,CAAe9sC,GACXnV,KAAKkiD,iBAAiB/sC,EAAWzP,YACjC,MAAMuE,EAAS,IAAI4zC,GAAO79C,KAAKstC,YAAan4B,GAC5CnV,KAAKmiD,cAAcl4C,GACnB,MAAMm4C,EAAYjtC,EAAWunC,sBAAsB0F,UAC/CA,GACAA,EAAUr9C,KAAKoQ,EAAWunC,sBAAuBvnC,EAAWzP,WAAY1F,KAAKstC,YAErF,CACA,gBAAA4U,CAAiBx8C,GACb,MAAMuE,EAASjK,KAAKgiD,oBAAoBzsC,IAAI7P,GACxCuE,GACAjK,KAAKqiD,iBAAiBp4C,EAE9B,CACA,iCAAAq4C,CAAkC34C,EAASjE,GACvC,MAAMuE,EAASjK,KAAKgiD,oBAAoBzsC,IAAI7P,GAC5C,GAAIuE,EACA,OAAOA,EAAO4yC,SAASv2B,KAAM/a,GAAYA,EAAQ5B,SAAWA,EAEpE,CACA,4CAAA44C,CAA6C54C,EAASjE,GAClD,MAAM+rC,EAAQzxC,KAAK+hD,cAAcR,kCAAkC53C,EAASjE,GACxE+rC,EACAzxC,KAAK+hD,cAAcpK,oBAAoBlG,EAAM9nC,QAAS8nC,GAGtD9xC,QAAQ6E,MAAM,kDAAkDkB,kBAA4BiE,EAEpG,CACA,WAAAmkC,CAAYtpC,EAAOgB,EAAS+X,GACxBvd,KAAKstC,YAAYQ,YAAYtpC,EAAOgB,EAAS+X,EACjD,CACA,kCAAAmkC,CAAmC/3C,EAASjE,GACxC,OAAO,IAAIs7C,GAAMhhD,KAAKovC,OAAQzlC,EAASjE,EAAY1F,KAAKN,OAC5D,CACA,cAAAkiD,CAAenQ,GACXzxC,KAAKwhD,mBAAmB/4C,IAAIgpC,EAAM/rC,WAAY+rC,GAC9C,MAAMxnC,EAASjK,KAAKgiD,oBAAoBzsC,IAAIk8B,EAAM/rC,YAC9CuE,GACAA,EAAO00C,uBAAuBlN,EAEtC,CACA,iBAAAoQ,CAAkBpQ,GACdzxC,KAAKwhD,mBAAmBn8B,OAAOosB,EAAM/rC,WAAY+rC,GACjD,MAAMxnC,EAASjK,KAAKgiD,oBAAoBzsC,IAAIk8B,EAAM/rC,YAC9CuE,GACAA,EAAO40C,0BAA0BpN,EAEzC,CACA,aAAA0Q,CAAcl4C,GACVjK,KAAKgiD,oBAAoBzqC,IAAItN,EAAOvE,WAAYuE,GACjCjK,KAAKwhD,mBAAmBlN,gBAAgBrqC,EAAOvE,YACvD09B,QAASqO,GAAUxnC,EAAO00C,uBAAuBlN,GAC5D,CACA,gBAAA4Q,CAAiBp4C,GACbjK,KAAKgiD,oBAAoB38B,OAAOpb,EAAOvE,YACxB1F,KAAKwhD,mBAAmBlN,gBAAgBrqC,EAAOvE,YACvD09B,QAASqO,GAAUxnC,EAAO40C,0BAA0BpN,GAC/D,EAGJ,MAAM+Q,GAAgB,CAClB5G,oBAAqB,kBACrBxD,gBAAiB,cACjBkI,gBAAiB,cACjBJ,wBAA0Bx6C,GAAe,QAAQA,WACjD22C,wBAAyB,CAAC32C,EAAY21C,IAAW,QAAQ31C,KAAc21C,WACvEnL,YAAajlC,OAAOuc,OAAOvc,OAAOuc,OAAO,CAAE0G,MAAO,QAASu0B,IAAK,MAAOC,IAAK,SAAUC,MAAO,IAAKC,GAAI,UAAWC,KAAM,YAAa3V,KAAM,YAAa9F,MAAO,aAAc0b,KAAM,OAAQC,IAAK,MAAOC,QAAS,SAAUC,UAAW,YAAcC,GAAkB,6BAA6B9wC,MAAM,IAAIlK,IAAKu/B,GAAM,CAACA,EAAGA,MAAOyb,GAAkB,aAAa9wC,MAAM,IAAIlK,IAAKi7C,GAAM,CAACA,EAAGA,OAE7X,SAASD,GAAkBE,GACvB,OAAOA,EAAM7kC,OAAO,CAAC8kC,GAAOC,EAAGC,KAAQt4C,OAAOuc,OAAOvc,OAAOuc,OAAO,CAAC,EAAG67B,GAAO,CAAE,CAACC,GAAIC,IAAO,CAAC,EACjG,CA0HA,SAASC,GAAoBrS,EAAYxnC,EAASjE,GAC9C,OAAOyrC,EAAW7D,YAAYwP,qCAAqCnzC,EAASjE,EAChF,CACA,SAAS+9C,GAAqCtS,EAAYxnC,EAASkxC,GAC/D,IAAI6I,EAAmBF,GAAoBrS,EAAYxnC,EAASkxC,GAChE,OAAI6I,IAEJvS,EAAW7D,YAAYkP,OAAO+F,6CAA6C54C,EAASkxC,GACpF6I,EAAmBF,GAAoBrS,EAAYxnC,EAASkxC,GACxD6I,QAAJ,EAEJ,CAyIA,SAASC,IAA0Bx9B,EAAOy9B,GAAiBzS,GACvD,OAmFJ,SAAkD0S,GAC9C,MAAM,MAAE19B,EAAK,eAAEy9B,GAAmBC,EAC5B58C,EAAM,GAAG4nC,GAAU1oB,WACnBtgB,EAhCV,SAAkCg+C,GAC9B,MAAM,WAAE1S,EAAU,MAAEhrB,EAAK,eAAEy9B,GAAmBC,EAExCC,EAvBV,SAA8BD,GAC1B,MAAM,WAAE1S,EAAU,MAAEhrB,EAAK,WAAE49B,GAAeF,EACpCG,EAAUlV,GAAYiV,EAAWl+C,MACjCo+C,EAAanV,GAAYiV,EAAWnvC,SACpCsvC,EAAaF,GAAWC,EACxBE,EAAWH,IAAYC,EACvBG,GAAeJ,GAAWC,EAC1BH,EAAiBO,GAAuBN,EAAWl+C,MACnDy+C,EAAuBC,GAAsBV,EAAQE,WAAWnvC,SACtE,GAAIuvC,EACA,OAAOL,EACX,GAAIM,EACA,OAAOE,EACX,GAAIR,IAAmBQ,EAEnB,MAAM,IAAIn9B,MAAM,uDADKgqB,EAAa,GAAGA,KAAchrB,IAAUA,mCACwD29B,sCAAmDC,EAAWnvC,wBAAwB0vC,OAE/M,OAAIJ,EACOJ,OADX,CAEJ,CAI2BU,CADJ,CAAErT,aAAYhrB,QAAO49B,WAAYH,IAE9CU,EAAuBC,GAAsBX,GAC7Ca,EAAmBJ,GAAuBT,GAC1C/9C,EAAOi+C,GAAkBQ,GAAwBG,EACvD,GAAI5+C,EACA,OAAOA,EAEX,MAAM,IAAIshB,MAAM,uBADKgqB,EAAa,GAAGA,KAAcyS,IAAmBz9B,WACTA,WACjE,CAqBiBu+B,CAAyBb,GACtC,MAAO,CACHh+C,OACAoB,MACAlI,KAAM0vC,GAASxnC,GACf,gBAAI8xC,GACA,OA1BZ,SAAmC6K,GAC/B,MAAMe,EAAWN,GAAuBT,GACxC,GAAIe,EACA,OAAOC,GAAoBD,GAC/B,MAAMV,EAAalV,GAAY6U,EAAgB,WACzCI,EAAUjV,GAAY6U,EAAgB,QACtCG,EAAaH,EACnB,GAAIK,EACA,OAAOF,EAAWnvC,QACtB,GAAIovC,EAAS,CACT,MAAM,KAAEn+C,GAASk+C,EACXc,EAAmBR,GAAuBx+C,GAChD,GAAIg/C,EACA,OAAOD,GAAoBC,EACnC,CACA,OAAOjB,CACX,CAUmBkB,CAA0BlB,EACrC,EACA,yBAAImB,GACA,YAAiDnlD,IAA1C2kD,GAAsBX,EACjC,EACAtK,OAAQ0L,GAAQn/C,GAChBizC,OAAQmM,GAAQp/C,IAASo/C,GAAQrwC,QAEzC,CApGWswC,CAAyC,CAC5C/T,aACAhrB,QACAy9B,kBAER,CACA,SAASS,GAAuBM,GAC5B,OAAQA,GACJ,KAAKj4C,MACD,MAAO,QACX,KAAKy4C,QACD,MAAO,UACX,KAAK/6C,OACD,MAAO,SACX,KAAKa,OACD,MAAO,SACX,KAAK+I,OACD,MAAO,SAEnB,CACA,SAASuwC,GAAsBxL,GAC3B,cAAeA,GACX,IAAK,UACD,MAAO,UACX,IAAK,SACD,MAAO,SACX,IAAK,SACD,MAAO,SAEf,OAAIrsC,MAAM+H,QAAQskC,GACP,QAC0C,oBAAjD9tC,OAAO1F,UAAUiJ,SAASzJ,KAAKg0C,GACxB,cADX,CAEJ,CAoEA,MAAM6L,GAAsB,CACxB,SAAIxB,GACA,MAAO,EACX,EACAgC,SAAS,EACTC,OAAQ,EACR,UAAIt+C,GACA,MAAO,CAAC,CACZ,EACAoH,OAAQ,IAEN62C,GAAU,CACZ,KAAA5B,CAAMlkD,GACF,MAAMkkD,EAAQv/C,KAAKiC,MAAM5G,GACzB,IAAKwN,MAAM+H,QAAQ2uC,GACf,MAAM,IAAI94C,UAAU,yDAAyDpL,eAAmBqlD,GAAsBnB,OAE1H,OAAOA,CACX,EACA,OAAAgC,CAAQlmD,GACJ,QAAkB,KAATA,GAA+C,SAA/B8U,OAAO9U,GAAOiG,cAC3C,EACA,MAAAkgD,CAAOnmD,GACH,OAAOkL,OAAOlL,EAAMmK,QAAQ,KAAM,IACtC,EACA,MAAAtC,CAAO7H,GACH,MAAM6H,EAASlD,KAAKiC,MAAM5G,GAC1B,GAAe,OAAX6H,GAAoC,iBAAVA,GAAsB2F,MAAM+H,QAAQ1N,GAC9D,MAAM,IAAIuD,UAAU,0DAA0DpL,eAAmBqlD,GAAsBx9C,OAE3H,OAAOA,CACX,EACA,MAAAoH,CAAOjP,GACH,OAAOA,CACX,GAEE+lD,GAAU,CACZrwC,QAOJ,SAAqB1V,GACjB,MAAO,GAAGA,GACd,EARIkkD,MAAOkC,GACPv+C,OAAQu+C,IAEZ,SAASA,GAAUpmD,GACf,OAAO2E,KAAKC,UAAU5E,EAC1B,CAKA,MAAMqmD,GACF,WAAA7kD,CAAY6K,GACRvL,KAAKuL,QAAUA,CACnB,CACA,qBAAWi6C,GACP,OAAO,CACX,CACA,gBAAOpD,CAAUqD,EAAaC,GAE9B,CACA,eAAIpY,GACA,OAAOttC,KAAKuL,QAAQ+hC,WACxB,CACA,SAAImE,GACA,OAAOzxC,KAAKuL,QAAQkmC,KACxB,CACA,WAAI9nC,GACA,OAAO3J,KAAKyxC,MAAM9nC,OACtB,CACA,cAAIjE,GACA,OAAO1F,KAAKyxC,MAAM/rC,UACtB,CACA,WAAIqiC,GACA,OAAO/nC,KAAKyxC,MAAM1J,OACtB,CACA,WAAIoU,GACA,OAAOn8C,KAAKyxC,MAAM0K,OACtB,CACA,WAAI9nC,GACA,OAAOrU,KAAKyxC,MAAMp9B,OACtB,CACA,QAAI1Q,GACA,OAAO3D,KAAKyxC,MAAM9tC,IACtB,CACA,UAAA25C,GACA,CACA,OAAA/zC,GACA,CACA,UAAArD,GACA,CACA,QAAAmX,CAASjY,GAAW,OAAE8M,EAASlS,KAAK2J,QAAO,OAAE4T,EAAS,CAAC,EAAC,OAAEpS,EAASnL,KAAK0F,WAAU,QAAE+X,GAAU,EAAI,WAAEH,GAAa,GAAU,CAAC,GACxH,MACM7X,EAAQ,IAAI+X,YADLrS,EAAS,GAAGA,KAAU/F,IAAcA,EACb,CAAEmY,SAAQE,UAASH,eAEvD,OADApL,EAAO0L,cAAcnY,GACdA,CACX,EAEJ8/C,GAAWI,UAAY,CAhYvB,SAAiCjlD,GAE7B,OADgBs5C,GAAiCt5C,EAAa,WAC/C6d,OAAO,CAACvX,EAAY4+C,KAC/B,OAAO36C,OAAOuc,OAAOxgB,GAGSC,EAHgC2+C,EAI3D,CACH,CAAC,GAAG3+C,UAAa,CACb,GAAAsO,GACI,MAAM,QAAElB,GAAYrU,KACpB,GAAIqU,EAAQrJ,IAAI/D,GACZ,OAAOoN,EAAQkB,IAAItO,GAElB,CACD,MAAM8uC,EAAY1hC,EAAQ4qC,iBAAiBh4C,GAC3C,MAAM,IAAIkgB,MAAM,sBAAsB4uB,KAC1C,CACJ,GAEJ,CAAC,GAAG9uC,YAAe,CACf,GAAAsO,GACI,OAAOvV,KAAKqU,QAAQ2qC,OAAO/3C,EAC/B,GAEJ,CAAC,MAAM2nC,GAAW3nC,WAAc,CAC5B,GAAAsO,GACI,OAAOvV,KAAKqU,QAAQrJ,IAAI/D,EAC5B,MAtBZ,IAAsCA,GAF/B,CAAC,EACR,EAuGA,SAAkCvG,GAE9B,OADgBs5C,GAAiCt5C,EAAa,WAC/C6d,OAAO,CAACvX,EAAY6+C,KAC/B,OAAO56C,OAAOuc,OAAOxgB,GAGUjI,EAHgC8mD,EAI5D,CACH,CAAC,GAAG9mD,WAAe,CACf,GAAAwW,GACI,MAAMrD,EAASlS,KAAK+nC,QAAQzhB,KAAKvnB,GACjC,GAAImT,EACA,OAAOA,EAGP,MAAM,IAAIiV,MAAM,2BAA2BpoB,WAAciB,KAAK0F,yBAEtE,GAEJ,CAAC,GAAG3G,YAAgB,CAChB,GAAAwW,GACI,OAAOvV,KAAK+nC,QAAQp/B,QAAQ5J,EAChC,GAEJ,CAAC,MAAM6vC,GAAW7vC,YAAgB,CAC9B,GAAAwW,GACI,OAAOvV,KAAK+nC,QAAQ/8B,IAAIjM,EAC5B,MArBZ,IAAuCA,GAFhC,CAAC,EACR,EA2BA,SAAiC2B,GAC7B,MAAMolD,EAvhCV,SAA0CplD,EAAau5C,GAEnD,OADkBE,GAA2Bz5C,GAC5B6d,OAAO,CAACwnC,EAAOrlD,KAC5BqlD,EAAM7lD,QAgBd,SAAiCQ,EAAau5C,GAC1C,MAAM9kC,EAAazU,EAAYu5C,GAC/B,OAAO9kC,EAAalK,OAAO+H,KAAKmC,GAAYjN,IAAKjB,GAAQ,CAACA,EAAKkO,EAAWlO,KAAS,EACvF,CAnBsB++C,CAAwBtlD,EAAau5C,IAC5C8L,GACR,GACP,CAihCiCE,CAAiCvlD,EAAa,UACrEwlD,EAAwB,CAC1BvN,mBAAoB,CAChB,GAAApjC,GACI,OAAOuwC,EAAqBvnC,OAAO,CAAC1P,EAAQs3C,KACxC,MAAMC,EAAkBzC,GAAyBwC,EAAqBnmD,KAAK0F,YACrEqZ,EAAgB/e,KAAK2D,KAAKu7C,uBAAuBkH,EAAgBn/C,KACvE,OAAOgE,OAAOuc,OAAO3Y,EAAQ,CAAE,CAACkQ,GAAgBqnC,KACjD,CAAC,EACR,IAGR,OAAON,EAAqBvnC,OAAO,CAACvX,EAAYm/C,IACrCl7C,OAAOuc,OAAOxgB,EAG7B,SAA0Cm/C,GACtC,MAAMhxC,EAAawuC,GAAyBwC,OAJPE,IAK/B,IAAEp/C,EAAG,KAAElI,EAAMu6C,OAAQrX,EAAM6W,OAAQ3W,GAAUhtB,EACnD,MAAO,CACH,CAACpW,GAAO,CACJ,GAAAwW,GACI,MAAMrW,EAAQc,KAAK2D,KAAK4R,IAAItO,GAC5B,OAAc,OAAV/H,EACO+iC,EAAK/iC,GAGLiW,EAAW4jC,YAE1B,EACA,GAAAxhC,CAAIrY,QACcU,IAAVV,EACAc,KAAK2D,KAAK0hB,OAAOpe,GAGjBjH,KAAK2D,KAAK4T,IAAItQ,EAAKk7B,EAAMjjC,GAEjC,GAEJ,CAAC,MAAM0vC,GAAW7vC,MAAU,CACxB,GAAAwW,GACI,OAAOvV,KAAK2D,KAAKqH,IAAI/D,IAAQkO,EAAW4vC,qBAC5C,GAGZ,CAhCyCsB,CAAiCF,IACnED,EACP,EA3HA,SAAkCxlD,GAE9B,OADgBs5C,GAAiCt5C,EAAa,WAC/C6d,OAAO,CAACvX,EAAYs/C,IACxBr7C,OAAOuc,OAAOxgB,EAe7B,SAAuCjI,GACnC,MAAMwnD,EAAgB5X,GAAkB5vC,GACxC,MAAO,CACH,CAAC,GAAGwnD,WAAwB,CACxB,GAAAhxC,GACI,MAAMixC,EAAgBxmD,KAAKm8C,QAAQ71B,KAAKvnB,GAClCihB,EAAWhgB,KAAKm8C,QAAQC,yBAAyBr9C,GACvD,GAAIynD,EAAe,CACf,MAAM9C,EAAmBD,GAAqCzjD,KAAMwmD,EAAeznD,GACnF,GAAI2kD,EACA,OAAOA,EACX,MAAM,IAAIv8B,MAAM,gEAAgEpoB,oCAAuCiB,KAAK0F,cAChI,CACA,MAAM,IAAIyhB,MAAM,2BAA2BpoB,2BAA8BiB,KAAK0F,iFAAiFsa,MACnK,GAEJ,CAAC,GAAGumC,YAAyB,CACzB,GAAAhxC,GACI,MAAM4mC,EAAUn8C,KAAKm8C,QAAQxzC,QAAQ5J,GACrC,OAAIo9C,EAAQ18C,OAAS,EACV08C,EACFj0C,IAAKs+C,IACN,MAAM9C,EAAmBD,GAAqCzjD,KAAMwmD,EAAeznD,GACnF,GAAI2kD,EACA,OAAOA,EACX/jD,QAAQ07B,KAAK,gEAAgEt8B,oCAAuCiB,KAAK0F,cAAe8gD,KAEvI3+C,OAAQspC,GAAeA,GAEzB,EACX,GAEJ,CAAC,GAAGoV,kBAA+B,CAC/B,GAAAhxC,GACI,MAAMixC,EAAgBxmD,KAAKm8C,QAAQ71B,KAAKvnB,GAClCihB,EAAWhgB,KAAKm8C,QAAQC,yBAAyBr9C,GACvD,GAAIynD,EACA,OAAOA,EAGP,MAAM,IAAIr/B,MAAM,2BAA2BpoB,2BAA8BiB,KAAK0F,iFAAiFsa,MAEvK,GAEJ,CAAC,GAAGumC,mBAAgC,CAChC,GAAAhxC,GACI,OAAOvV,KAAKm8C,QAAQxzC,QAAQ5J,EAChC,GAEJ,CAAC,MAAM6vC,GAAW2X,YAAyB,CACvC,GAAAhxC,GACI,OAAOvV,KAAKm8C,QAAQnxC,IAAIjM,EAC5B,GAGZ,CAtEyC0nD,CAA8BH,IAChE,CAAC,EACR,GAgWAf,GAAWxd,QAAU,GACrBwd,GAAWpJ,QAAU,GACrBoJ,GAAWlnC,OAAS,CAAC,EC9/ErB,MAAMivB,GDqiEN,MACI,WAAA5sC,CAAYiJ,EAAU3K,SAASib,gBAAiBm1B,EAASoT,IACrDxiD,KAAKN,OAASC,QACdK,KAAK0mD,OAAQ,EACb1mD,KAAKuxC,iBAAmB,CAAC7rC,EAAYs3C,EAAcz/B,EAAS,CAAC,KACrDvd,KAAK0mD,OACL1mD,KAAK2mD,oBAAoBjhD,EAAYs3C,EAAcz/B,IAG3Dvd,KAAK2J,QAAUA,EACf3J,KAAKovC,OAASA,EACdpvC,KAAKk9C,WAAa,IAAI7P,GAAWrtC,MACjCA,KAAKw8C,OAAS,IAAIsF,GAAO9hD,MACzBA,KAAKoxC,wBAA0BnmC,OAAOuc,OAAO,CAAC,EAAG6mB,GACrD,CACA,YAAOttC,CAAM4I,EAASylC,GAClB,MAAM9B,EAAc,IAAIttC,KAAK2J,EAASylC,GAEtC,OADA9B,EAAYvsC,QACLusC,CACX,CACA,WAAMvsC,SAmDC,IAAIuX,QAASC,IACW,WAAvBvZ,SAASkG,WACTlG,SAASoC,iBAAiB,mBAAoB,IAAMmX,KAGpDA,MAtDJvY,KAAKuxC,iBAAiB,cAAe,YACrCvxC,KAAKk9C,WAAWn8C,QAChBf,KAAKw8C,OAAOz7C,QACZf,KAAKuxC,iBAAiB,cAAe,QACzC,CACA,IAAAjwC,GACItB,KAAKuxC,iBAAiB,cAAe,YACrCvxC,KAAKk9C,WAAW57C,OAChBtB,KAAKw8C,OAAOl7C,OACZtB,KAAKuxC,iBAAiB,cAAe,OACzC,CACA,QAAAqV,CAASlhD,EAAYg3C,GACjB18C,KAAK6mD,KAAK,CAAEnhD,aAAYg3C,yBAC5B,CACA,oBAAAoK,CAAqB/nD,EAAM8I,GACvB7H,KAAKoxC,wBAAwBryC,GAAQ8I,CACzC,CACA,IAAAg/C,CAAKj9C,KAASm9C,IACUr6C,MAAM+H,QAAQ7K,GAAQA,EAAO,CAACA,KAASm9C,IAC/C3jB,QAASjuB,IACbA,EAAWunC,sBAAsB8I,YACjCxlD,KAAKw8C,OAAOyF,eAAe9sC,IAGvC,CACA,MAAA6xC,CAAOp9C,KAASm9C,IACQr6C,MAAM+H,QAAQ7K,GAAQA,EAAO,CAACA,KAASm9C,IAC/C3jB,QAAS19B,GAAe1F,KAAKw8C,OAAO0F,iBAAiBx8C,GACrE,CACA,eAAIuhD,GACA,OAAOjnD,KAAKw8C,OAAOK,SAAS30C,IAAKqD,GAAYA,EAAQ4lC,WACzD,CACA,oCAAA2L,CAAqCnzC,EAASjE,GAC1C,MAAM6F,EAAUvL,KAAKw8C,OAAO8F,kCAAkC34C,EAASjE,GACvE,OAAO6F,EAAUA,EAAQ4lC,WAAa,IAC1C,CACA,WAAArD,CAAYtpC,EAAOgB,EAAS+X,GACxB,IAAIxD,EACJ/Z,KAAKN,OAAO8E,MAAM,iBAAkBgB,EAAShB,EAAO+Y,GAC1B,QAAzBxD,EAAKrb,OAAOwoD,eAAiC,IAAZntC,GAAyBA,EAAGhV,KAAKrG,OAAQ8G,EAAS,GAAI,EAAG,EAAGhB,EAClG,CACA,mBAAAmiD,CAAoBjhD,EAAYs3C,EAAcz/B,EAAS,CAAC,GACpDA,EAAStS,OAAOuc,OAAO,CAAE8lB,YAAattC,MAAQud,GAC9Cvd,KAAKN,OAAOynD,eAAe,GAAGzhD,MAAes3C,KAC7Ch9C,KAAKN,OAAOI,IAAI,WAAYmL,OAAOuc,OAAO,CAAC,EAAGjK,IAC9Cvd,KAAKN,OAAO0nD,UAChB,GCzmE4BrmD,QCFhC,SAASsmD,KACL,OAAOhlD,KAAKG,SAASgM,SAAS,IAAIuE,UAAU,EAAG,GACnD,CAwBA,SAAS1B,GAAS3B,EAAMC,EAAO,GAAI23C,GAAY,GAC3C,IAAIC,EACJ,OAAO,YAAaz+C,GAChB,MAAMyC,EAAUwD,KAOVy4C,EAAUF,IAAcC,EAC9BxlD,aAAawlD,GACbA,EAAUtlD,WARI,KACVslD,EAAU,KACLD,GACD53C,EAAKrC,MAAM9B,EAASzC,IAKA6G,GACxB63C,GACA93C,EAAKrC,MAAM9B,EAASzC,EAE5B,CACJ,CACA,SAAS2+C,GAAQv+C,EAAGyE,GAChB,OAAO9J,KAAKC,UAAUoF,KAAOrF,KAAKC,UAAU6J,EAChD,CDzCA2/B,GAAYoZ,OAAQ,EACpBhoD,OAAOgpD,SAAapa,GC8CpB,MAAMqa,GACF,WAAAjnD,CAAYknD,GACR5nD,KAAKsoB,GAAK,GACVtoB,KAAKkyB,MAAQ,GACblyB,KAAK6nD,MAAQ,GACb7nD,KAAK8nD,YAAa,EAClB9nD,KAAK8C,QAAS,EACd9C,KAAK+nD,YAAa,EAClB/nD,KAAKgoD,aAAe,KACfJ,IACDA,EAAW,CAAC,GAEhB5nD,KAAKsoB,GAAK,MAAQ++B,KAClBrnD,KAAKkyB,MAAQ01B,EAAS11B,OAAS,GAC/BlyB,KAAK6nD,MAAQD,EAASC,OAAS,GAC/B7nD,KAAKwZ,cAAiC5Z,IAAtBgoD,EAASpuC,UAAyBouC,EAASpuC,SAC3DxZ,KAAKioD,gBAAqCroD,IAAxBgoD,EAASK,YAA2BL,EAASK,WAC/DjoD,KAAKkoD,gBAAqCtoD,IAAxBgoD,EAASM,YAA2BN,EAASM,WAC/DloD,KAAKmoD,kBAAoBP,EAASO,mBAAqB,SACvDnoD,KAAKooD,WAAaR,EAASQ,YAAc,aACzCpoD,KAAKqoD,cAAgBT,EAASS,eAAiB,eAC/CroD,KAAKsoD,qBAA+C1oD,IAA7BgoD,EAASU,iBAAgCV,EAASU,gBACzEtoD,KAAKuoD,mBAA2C3oD,IAA3BgoD,EAASW,eAA8BX,EAASW,cACrEvoD,KAAKwoD,gBAAkBZ,EAASY,iBAAmBxpD,SAASshB,KAC5DtgB,KAAKyoD,gBAAkBb,EAASa,iBAAmB,WACnDzoD,KAAK0oD,aAAed,EAASc,cAAgB,OAC7C1oD,KAAK2oD,qBAA+C/oD,IAA7BgoD,EAASe,gBAAgCf,EAASe,gBAAkB,eAC3F3oD,KAAK4oD,mBAA2ChpD,IAA3BgoD,EAASgB,eAA8BhB,EAASgB,cACrE5oD,KAAK6oD,kBAAyCjpD,IAA1BgoD,EAASiB,cAA6BjB,EAASiB,aACnE7oD,KAAK8oD,wBAAqDlpD,IAAhCgoD,EAASkB,oBAAmClB,EAASkB,mBAC/E9oD,KAAK+oD,YAAcnB,EAASmB,aAAe,EAC3C/oD,KAAKgpD,YAAcpB,EAASoB,aAAe,IAC3ChpD,KAAKipD,aAAerB,EAASqB,cAAgB,IAC7CjpD,KAAKkpD,eAAiBtB,EAASsB,gBAAkB,GACjDlpD,KAAKmpD,iBAAmBvB,EAASuB,kBAAoB,mBACzD,EAGJ,MAAMC,GACF,WAAA1oD,CAAY2oD,GAOR,GANArpD,KAAKsoB,GAAM+gC,EAAS/gC,IAAsB,KAAhB+gC,EAAS/gC,GAA2B+gC,EAAS/gC,GAAxB++B,KAC/CrnD,KAAKspD,MAAQD,EAASC,OAAS,GAC/BtpD,KAAKupD,eAAmC3pD,IAAvBypD,EAASE,WAAkCF,EAASE,UACrEvpD,KAAKwpD,cAAgBH,EAASG,eAAiB,aAC/CxpD,KAAKypD,SAAWJ,EAASI,UAAY,MACrCzpD,KAAK4P,QAAU,GACXy5C,EAASz5C,QACT,IAAK,MAAMwF,KAAKi0C,EAASz5C,QACrB5P,KAAK4P,QAAQ1P,KAAK,IAAIwpD,GAAOt0C,GAGzC,EAEJ,MAAMs0C,GACF,WAAAhpD,CAAY8zB,GACRx0B,KAAKsoB,GAAMkM,EAAOlM,IAAoB,KAAdkM,EAAOlM,GAA2BkM,EAAOlM,GAAtB++B,KAC3CrnD,KAAKd,WAAyBU,IAAjB40B,EAAOt1B,MAAsBs1B,EAAOjhB,KAAOihB,EAAOt1B,MAC/Dc,KAAKuT,KAAOihB,EAAOjhB,MAAQ,GAC3BvT,KAAKge,KAAOwW,EAAOxW,MAAQ,GAC3Bhe,KAAK00B,cAA+B90B,IAApB40B,EAAOE,UAAyBF,EAAOE,SACvD10B,KAAK2pD,aAA6B/pD,IAAnB40B,EAAOm1B,SAAwBn1B,EAAOm1B,QACrD3pD,KAAKwZ,cAA+B5Z,IAApB40B,EAAOhb,UAAyBgb,EAAOhb,SACvDxZ,KAAK4pD,eAAiChqD,IAArB40B,EAAOo1B,WAA0Bp1B,EAAOo1B,UACzD5pD,KAAK0uB,iBAAqC9uB,IAAvB40B,EAAO9F,aAA4B8F,EAAO9F,YAC7D1uB,KAAK6nD,MAAQrzB,EAAOqzB,OAAS,GAC7B7nD,KAAKkyB,MAAQsC,EAAOtC,OAAS,GAC7BlyB,KAAK2D,KAAO6wB,EAAO7wB,MAAQ,CAAC,CAChC,EAEJ,MAAMkmD,GACF,WAAAnpD,CAAYmF,EAAMlC,GACd3D,KAAK8pD,WAAa,SAClB9pD,KAAK2D,KAAO,GACZ3D,KAAK8pD,WAAajkD,EAClB7F,KAAK+pD,QAAQpmD,EACjB,CACA,iBAAAqmD,CAAkBrmD,GACd,IAAK+I,MAAM+H,QAAQ9Q,GACf,OAAO,IAAIwjB,MAAM,yBAErB,IAAK,IAAI8iC,KAAWtmD,EAAM,CACtB,KAAIsmD,aAAmBb,IAAY,UAAWa,GAUzC,OAAIA,aAAmBP,IAAU,SAAUO,EACrCjqD,KAAKkqD,eAAeD,GAGpB,IAAI9iC,MAAM,kDAbjB,KAAM,UAAW8iC,GACb,OAAO,IAAI9iC,MAAM,8BAErB,GAAI,YAAa8iC,GAAWA,EAAQr6C,QAChC,IAAK,IAAI4kB,KAAUy1B,EAAQr6C,QACvB,OAAO5P,KAAKkqD,eAAe11B,EAU3C,CACA,OAAO,IACX,CACA,cAAA01B,CAAe11B,GACX,MAAM,SAAUA,EAGT,KAFI,IAAIrN,MAAM,0BAGzB,CACA,iBAAAgjC,CAAkBxmD,GACd,IAAIymD,EAAY,GAiBhB,OAhBAzmD,EAAKy/B,QAAS6mB,IACV,GAAIA,aAAmBb,IAAY,UAAWa,EAAS,CACnD,IAAII,EAAa,GACb,YAAaJ,GAAWA,EAAQr6C,SAChCq6C,EAAQr6C,QAAQwzB,QAAS5O,IACrB61B,EAAWnqD,KAAK,IAAIwpD,GAAOl1B,MAG/B61B,EAAW5qD,OAAS,GACpB2qD,EAAUlqD,KAAK,IAAIkpD,GAASa,GAEpC,EACIA,aAAmBP,IAAU,SAAUO,IACvCG,EAAUlqD,KAAK,IAAIwpD,GAAOO,MAG3BG,CACX,CACA,OAAAL,CAAQpmD,GACJ3D,KAAK2D,KAAO3D,KAAKmqD,kBAAkBxmD,GACX,WAApB3D,KAAK8pD,YACL9pD,KAAKsqD,cAAc,QAAStqD,KAAKuqD,cAEzC,CACA,OAAAC,GACI,OAAOxqD,KAAK6H,OAAO,MAAM,EAC7B,CACA,cAAA4iD,GACI,OAAOzqD,KAAK6H,OAAO,MAAM,EAC7B,CACA,SAAA6iD,CAAUl2B,GACNx0B,KAAK+pD,QAAQ/pD,KAAKwqD,UAAUn+C,OAAO,IAAIq9C,GAAOl1B,IAClD,CACA,aAAA81B,CAAcK,EAAcC,GACxB,IAAIC,EAAc,KACdC,GAAc,EAClB,IAAK,IAAIb,KAAWjqD,KAAK2D,KAAM,CAC3B,GAAIsmD,aAAmBb,GACnB,IAAK,IAAI50B,KAAUy1B,EAAQr6C,QAClBi7C,IACDA,EAAcr2B,GAElBA,EAAOE,UAAWo2B,GAAsBF,EAAel2C,SAAS8f,EAAOm2B,IACnEn2B,EAAOE,UAAgC,WAApB10B,KAAK8pD,aACxBgB,GAAc,GAItBb,aAAmBP,KACdmB,IACDA,EAAcZ,GAElBA,EAAQv1B,UAAWo2B,GAAsBF,EAAel2C,SAASu1C,EAAQU,IACrEV,EAAQv1B,UAAgC,WAApB10B,KAAK8pD,aACzBgB,GAAc,GAG1B,CACwB,WAApB9qD,KAAK8pD,YAA2Be,IAAgBC,IAChDD,EAAYn2B,UAAW,EAE/B,CACA,WAAA61B,GACI,IAAI91B,EAAkBz0B,KAAK+qD,qBACvBH,EAAiB,GAIrB,OAHAn2B,EAAgB2O,QAAS5O,IACrBo2B,EAAe1qD,KAAKs0B,EAAOt1B,SAExB0rD,CACX,CACA,kBAAAG,GACI,OAAO/qD,KAAK6H,OAAQmjD,GACTA,EAAIt2B,UACZ,EACP,CACA,cAAAu2B,GACI,IAAIx2B,EAAkBz0B,KAAK+qD,qBACvBG,EAAc,GAIlB,OAHAz2B,EAAgB2O,QAAS+nB,IACrBD,EAAYhrD,KAAKirD,EAAG7iC,MAEjB4iC,CACX,CACA,eAAAE,CAAgB9iC,GACZ,IAAK,IAAI2hC,KAAWjqD,KAAK2D,KACrB,GAAIsmD,aAAmBb,IAAYa,EAAQ3hC,KAAOA,EAC9C,OAAO2hC,EAGf,OAAO,IACX,CACA,aAAAoB,CAAc/iC,GACV,IAAI1Y,EAAU5P,KAAK6H,OAAQmjD,GAChBA,EAAI1iC,KAAOA,GACnB,GACH,OAAO1Y,EAAQnQ,OAASmQ,EAAQ,GAAK,IACzC,CACA,MAAAmV,CAAOA,EAAQumC,GAEX,MAAe,MADfvmC,EAASA,EAAOud,QAELtiC,KAAKwqD,UAETxqD,KAAK6H,OAAQmjD,GACTM,EAAaN,EAAKjmC,IAC1B,EACP,CACA,MAAAld,CAAOA,EAAQ0jD,GACX,MAAMC,EAAa,GA0BnB,OAzBAxrD,KAAK2D,KAAKy/B,QAAS6mB,IACf,GAAIA,aAAmBb,GAAU,CAC7B,IAAIiB,EAAa,GAWjB,GAVAJ,EAAQr6C,QAAQwzB,QAAS5O,IAChB3sB,IAAUA,EAAO2sB,KACb+2B,EAIDlB,EAAWnqD,KAAK,IAAIwpD,GAAOl1B,IAH3Bg3B,EAAWtrD,KAAK,IAAIwpD,GAAOl1B,OAOnC61B,EAAW5qD,OAAS,EAAG,CACvB,IAAI4pD,EAAW,IAAID,GAASa,GAC5BZ,EAASz5C,QAAUy6C,EACnBmB,EAAWtrD,KAAKmpD,EACpB,CACJ,CACIY,aAAmBP,KACd7hD,IAAUA,EAAOoiD,IAClBuB,EAAWtrD,KAAK,IAAIwpD,GAAOO,OAIhCuB,CACX,CACA,aAAAC,GACI,OAAOzrD,KAAK8pD,UAChB,EAGJ,MAAM4B,GACF,WAAAhrD,CAAYknD,EAAU+D,EAAOC,GACzB5rD,KAAKqU,QAAU,CACXw3C,KAAM,UACNn9B,YAAa,iBACbrQ,OAAQ,YACRytC,OAAQ,YACRt8C,IAAK,SACLtQ,MAAO,WACP6sD,UAAW,gBACXC,YAAa,kBACbC,SAAU,eACVC,SAAU,cACVC,aAAc,8BACdC,MAAO,WACPC,WAAY,uBACZC,UAAW,uBACXxsC,QAAS,aACTysC,UAAW,gBACXC,UAAW,gBACXznC,OAAQ,YACR0nC,kBAAmB,sBACnBC,UAAW,eACXC,QAAS,aACTC,YAAa,8BACbC,KAAM,UACNxD,SAAU,cACVyD,cAAe,oBACfC,kBAAmB,yBACnBC,gBAAiB,sBACjBC,kBAAmB,eACnBC,qBAAsB,qCACtBC,uBAAwB,uBACxBC,iBAAkB,cAClB54B,OAAQ,YACR64B,aAAc,8BACdC,YAAa,iBACbhqD,KAAM,UACNgB,MAAO,WACPowB,SAAU,cACVlwB,MAAO,WACPgV,SAAU,cACVmY,KAAM,WAEV3xB,KAAK2rD,MAAQA,EACb3rD,KAAK4nD,SAAWA,EAChB5nD,KAAK4rD,UAAYA,EACjB5rD,KAAK6rD,KAAO7rD,KAAKutD,UACjBvtD,KAAK8f,QAAU9f,KAAKwtD,aACpBxtD,KAAKytD,oBACLztD,KAAK0tD,uBACL1tD,KAAK4nD,SAASY,gBAAgB7xC,YAAY3W,KAAK8f,QAAQ+rC,KAC3D,CACA,MAAA8B,GACI3tD,KAAK6rD,KAAKA,KAAKzsD,UAAUmI,OAAOvH,KAAKqU,QAAQmF,UAC7CxZ,KAAK8f,QAAQiF,OAAO5a,MAAMqP,UAAW,CACzC,CACA,OAAA8qB,GACItkC,KAAK6rD,KAAKA,KAAKzsD,UAAUqJ,IAAIzI,KAAKqU,QAAQmF,UAC1CxZ,KAAK8f,QAAQiF,OAAO5a,MAAMqP,UAAW,CACzC,CACA,IAAAlW,GACItD,KAAK6rD,KAAKO,MAAMwB,KAAKz0C,aAAa,IAAKnZ,KAAKqU,QAAQi4C,WACpDtsD,KAAK6rD,KAAKA,KAAKzsD,UAAUqJ,IAAmC,OAA/BzI,KAAK4nD,SAASc,aAAwB1oD,KAAKqU,QAAQk4C,UAAYvsD,KAAKqU,QAAQm4C,WACzGxsD,KAAK6rD,KAAKA,KAAK1yC,aAAa,gBAAiB,QAC7CnZ,KAAK6tD,cACL,MAAMp5B,EAAkBz0B,KAAK2rD,MAAMZ,qBACnC,GAAIt2B,EAAgBh1B,OAAQ,CACxB,MAAMquD,EAAar5B,EAAgBA,EAAgBh1B,OAAS,GAAG6oB,GACzDylC,EAAiB/tD,KAAK8f,QAAQ+sC,KAAKhjD,cAAc,aAAeikD,EAAa,MAC/EC,GACA/tD,KAAKguD,oBAAoBhuD,KAAK8f,QAAQ+sC,KAAMkB,EAEpD,CACJ,CACA,KAAAzpD,GACItE,KAAK6rD,KAAKA,KAAKzsD,UAAUmI,OAAOvH,KAAKqU,QAAQk4C,WAC7CvsD,KAAK6rD,KAAKA,KAAKzsD,UAAUmI,OAAOvH,KAAKqU,QAAQm4C,WAC7CxsD,KAAK6rD,KAAKA,KAAK1yC,aAAa,gBAAiB,SAC7CnZ,KAAK8f,QAAQ+rC,KAAKzsD,UAAUmI,OAAOvH,KAAKqU,QAAQk4C,WAChDvsD,KAAK8f,QAAQ+rC,KAAKzsD,UAAUmI,OAAOvH,KAAKqU,QAAQm4C,WAChDxsD,KAAK6rD,KAAKO,MAAMwB,KAAKz0C,aAAa,IAAKnZ,KAAKqU,QAAQg4C,WACxD,CACA,iBAAAoB,GAWI,GAVAztD,KAAK6rD,KAAKA,KAAKp5B,UAAY,GAC3BzyB,KAAK6rD,KAAKA,KAAKzyC,gBAAgB,SAC/BpZ,KAAK8f,QAAQ+rC,KAAKp5B,UAAY,GAC9BzyB,KAAK8f,QAAQ+rC,KAAKzyC,gBAAgB,SAClCpZ,KAAK6rD,KAAKA,KAAKzsD,UAAUqJ,IAAIzI,KAAKqU,QAAQw3C,MAC1C7rD,KAAK8f,QAAQ+rC,KAAKzsD,UAAUqJ,IAAIzI,KAAKqU,QAAQyL,SACjB,KAAxB9f,KAAK4nD,SAAS11B,QACdlyB,KAAK6rD,KAAKA,KAAK35B,MAAM+7B,QAAUjuD,KAAK4nD,SAAS11B,MAC7ClyB,KAAK8f,QAAQ+rC,KAAK35B,MAAM+7B,QAAUjuD,KAAK4nD,SAAS11B,OAEhDlyB,KAAK4nD,SAASC,MAAMpoD,OACpB,IAAK,MAAMgoC,KAAKznC,KAAK4nD,SAASC,MACT,KAAbpgB,EAAEnF,SACFtiC,KAAK6rD,KAAKA,KAAKzsD,UAAUqJ,IAAIg/B,EAAEnF,QAC/BtiC,KAAK8f,QAAQ+rC,KAAKzsD,UAAUqJ,IAAIg/B,EAAEnF,SAIR,aAAlCtiC,KAAK4nD,SAASa,iBACdzoD,KAAK8f,QAAQ+rC,KAAKzsD,UAAUqJ,IAAI,MAAQzI,KAAK4nD,SAASa,gBAE9D,CACA,oBAAAiF,GACI1tD,KAAK6rD,KAAKA,KAAKqC,KAAO,WACtBluD,KAAK6rD,KAAKA,KAAK1yC,aAAa,gBAAiB,WAC7CnZ,KAAK6rD,KAAKA,KAAK1yC,aAAa,gBAAiBnZ,KAAK8f,QAAQ+rC,KAAKvjC,IAC/DtoB,KAAK6rD,KAAKA,KAAK1yC,aAAa,gBAAiB,SAC7CnZ,KAAK8f,QAAQ+rC,KAAK1yC,aAAa,OAAQ,UAC3C,CACA,OAAAo0C,GACI,IAAIxzC,EACJ,MAAM8xC,EAAO7sD,SAASmK,cAAc,OACpC0iD,EAAKhgB,QAAQvjB,GAAKtoB,KAAK4nD,SAASt/B,GAChCujC,EAAKvjC,GAAKtoB,KAAK4nD,SAASt/B,GACxBujC,EAAKsC,SAAW,EAChBtC,EAAKuC,UAAax/C,IACd,OAAQA,EAAE3H,KACN,IAAK,UACL,IAAK,YAGD,OAFAjH,KAAK4rD,UAAUtoD,OACL,cAAVsL,EAAE3H,IAAsBjH,KAAKquD,UAAU,QAAUruD,KAAKquD,UAAU,OACzD,EACX,IAAK,MAED,OADAruD,KAAK4rD,UAAUtnD,SACR,EACX,IAAK,QACL,IAAK,IACDtE,KAAK4rD,UAAUtoD,OACf,MAAMgqD,EAActtD,KAAK8f,QAAQ+sC,KAAKhjD,cAAc,IAAM7J,KAAKqU,QAAQi5C,aAIvE,OAHIA,GACAA,EAAY72C,SAET,EACX,IAAK,SAED,OADAzW,KAAK4rD,UAAUtnD,SACR,IAGnBunD,EAAKyC,QAAW1/C,IACR5O,KAAK4nD,SAASpuC,WAGlBxZ,KAAK4nD,SAAS9kD,OAAS9C,KAAK4rD,UAAUtnD,QAAUtE,KAAK4rD,UAAUtoD,SAEnE,MAAM+a,EAASrf,SAASmK,cAAc,OACtCkV,EAAOjf,UAAUqJ,IAAIzI,KAAKqU,QAAQgK,QAClCwtC,EAAKl1C,YAAY0H,GACjB,MAAM6tC,EAAWltD,SAASmK,cAAc,OACxC+iD,EAAS9sD,UAAUqJ,IAAIzI,KAAKqU,QAAQ63C,UACpC,MAAMz3B,EAAwC,QAArB1a,EAAK/Z,KAAK2rD,aAA+B,IAAZ5xC,OAAqB,EAAIA,EAAGgxC,sBAC7E/qD,KAAK4nD,SAASgB,eAAkB5oD,KAAK4nD,SAASE,YAAcrzB,GAAmBA,EAAgBh1B,QAAU,EAC1GysD,EAAS9sD,UAAUqJ,IAAIzI,KAAKqU,QAAQsd,MAGpCu6B,EAAS9sD,UAAUmI,OAAOvH,KAAKqU,QAAQsd,MAE3Cu6B,EAASoC,QAAW1/C,IAEhB,GADAA,EAAE0/B,kBACEtuC,KAAK4nD,SAASpuC,SACd,OAEJ,IAAI+0C,GAAe,EACnB,MAAM/qB,EAASxjC,KAAK2rD,MAAMZ,qBACpB7nB,EAAQ,GACVljC,KAAK4rD,UAAU4C,eACfD,GAA8D,IAA/CvuD,KAAK4rD,UAAU4C,aAAatrB,EAAOM,IAElD+qB,IACIvuD,KAAK4nD,SAASE,YACd9nD,KAAK4rD,UAAU6C,YAAY,IAAI,GAC/BzuD,KAAK0uD,qBAGL1uD,KAAK4rD,UAAU6C,YAAY,CAAC,KAAK,GAEjCzuD,KAAK4nD,SAASW,eACdvoD,KAAK4rD,UAAUtnD,QAEftE,KAAK4rD,UAAU+C,aACf3uD,KAAK4rD,UAAU+C,YAAYzrB,KAIvC,MAAM0rB,EAAc5vD,SAAS6vD,gBAAgB,6BAA8B,OAC3ED,EAAYz1C,aAAa,UAAW,eACpC,MAAMgzC,EAAentD,SAAS6vD,gBAAgB,6BAA8B,QAC5E1C,EAAahzC,aAAa,IAAKnZ,KAAKqU,QAAQ83C,cAC5CyC,EAAYj4C,YAAYw1C,GACxBD,EAASv1C,YAAYi4C,GACrB/C,EAAKl1C,YAAYu1C,GACjB,MAAME,EAAQptD,SAAS6vD,gBAAgB,6BAA8B,OACrEzC,EAAMhtD,UAAUqJ,IAAIzI,KAAKqU,QAAQ+3C,OACjCA,EAAMjzC,aAAa,UAAW,eAC9B,MAAM21C,EAAY9vD,SAAS6vD,gBAAgB,6BAA8B,QAOzE,OANAC,EAAU31C,aAAa,IAAKnZ,KAAKqU,QAAQg4C,YACrCrsD,KAAK4nD,SAASK,YACdmE,EAAMhtD,UAAUqJ,IAAIzI,KAAKqU,QAAQsd,MAErCy6B,EAAMz1C,YAAYm4C,GAClBjD,EAAKl1C,YAAYy1C,GACV,CACHP,KAAMA,EACNxtC,OAAQA,EACR6tC,SAAU,CACNL,KAAMK,EACN6C,IAAKH,EACLhB,KAAMzB,GAEVC,MAAO,CACHP,KAAMO,EACNwB,KAAMkB,GAGlB,CACA,SAAAE,CAAUC,GACY,UAAdA,GACAjvD,KAAK6rD,KAAKA,KAAKzhC,MAAM,CAAE8kC,eAAe,GAE9C,CACA,WAAAxgC,GACI,MAAMygC,EAAoBnvD,KAAK2rD,MAAM9jD,OAAQuN,GAAMA,EAAEsZ,aAAa,GAClE,IAAIi6B,EAAkB3oD,KAAK4nD,SAASe,gBAChCwG,EAAkB1vD,SACgB,KAA9B0vD,EAAkB,GAAGnxC,KACrB2qC,EAAkBwG,EAAkB,GAAGnxC,KAEJ,KAA9BmxC,EAAkB,GAAG57C,OAC1Bo1C,EAAkBwG,EAAkB,GAAG57C,OAG/C,MAAMmb,EAAc1vB,SAASmK,cAAc,OAG3C,OAFAulB,EAAYtvB,UAAUqJ,IAAIzI,KAAKqU,QAAQqa,aACvCA,EAAYlL,UAAYmlC,EACjBj6B,CACX,CACA,YAAA0gC,GACSpvD,KAAK4nD,SAASE,WAInB9nD,KAAKqvD,uBAHDrvD,KAAKsvD,mBAIb,CACA,iBAAAA,GACI,MAAM56B,EAAW10B,KAAK2rD,MAAM9jD,OAAQuN,GACzBA,EAAEsf,WAAatf,EAAEsZ,aACzB,GACG6gC,EAAiB76B,EAASj1B,OAAS,EAAIi1B,EAAS,GAAK,KAC3D,GAAK66B,EAGA,CACD,MAAMC,EAAcxwD,SAASmK,cAAc,OAC3CqmD,EAAYpwD,UAAUqJ,IAAIzI,KAAKqU,QAAQy3C,QACnCyD,EAAevxC,KACfwxC,EAAYhsC,UAAY+rC,EAAevxC,KAGvCwxC,EAAYC,UAAYF,EAAeh8C,KAE3CvT,KAAK6rD,KAAKxtC,OAAOmF,UAAYgsC,EAAY18B,SAC7C,MAZI9yB,KAAK6rD,KAAKxtC,OAAOmF,UAAYxjB,KAAK0uB,cAAcoE,UAa/C9yB,KAAK4nD,SAASgB,eAAkBl0B,EAASj1B,OAI1CO,KAAK6rD,KAAKK,SAASL,KAAKzsD,UAAUmI,OAAOvH,KAAKqU,QAAQsd,MAHtD3xB,KAAK6rD,KAAKK,SAASL,KAAKzsD,UAAUqJ,IAAIzI,KAAKqU,QAAQsd,KAK3D,CACA,oBAAA09B,GACI,IAAIK,EAAe1vD,KAAK6rD,KAAKxtC,OAAOsxC,WAChCl7B,EAAkBz0B,KAAK2rD,MAAM9jD,OAAQmjD,GAC9BA,EAAIt2B,UAAYs2B,EAAIrB,SAC5B,GACH,GAA+B,IAA3Bl1B,EAAgBh1B,OAEhB,YADAO,KAAK6rD,KAAKxtC,OAAOmF,UAAYxjB,KAAK0uB,cAAcoE,WAG/C,CACD,MAAMpE,EAAc1uB,KAAK6rD,KAAKxtC,OAAOxU,cAAc,IAAM7J,KAAKqU,QAAQqa,aAClEA,GACAA,EAAYnnB,QAEpB,CACA,GAAIktB,EAAgBh1B,OAASO,KAAK4nD,SAASsB,eAAgB,CACvD,MAAMsG,EAAcxwD,SAASmK,cAAc,OAI3C,OAHAqmD,EAAYpwD,UAAUqJ,IAAIzI,KAAKqU,QAAQ7E,KACvCggD,EAAYzyC,YAAc/c,KAAK4nD,SAASuB,iBAAiB9/C,QAAQ,WAAYorB,EAAgBh1B,OAAO+O,iBACpGxO,KAAK6rD,KAAKxtC,OAAOmF,UAAYgsC,EAAY18B,UAE7C,CACK,CACD,MAAMq2B,EAAmBnpD,KAAK6rD,KAAKxtC,OAAOxU,cAAc,IAAM7J,KAAKqU,QAAQ7E,KACvE25C,GACAA,EAAiB5hD,QAEzB,CACA,IAAIqoD,EAAc,GAClB,IAAK,IAAIpwD,EAAI,EAAGA,EAAIkwD,EAAajwD,OAAQD,IAAK,CAC1C,MAAMopB,EAAO8mC,EAAalwD,GACpB8oB,EAAKM,EAAK9e,aAAa,WACzBwe,IACcmM,EAAgB5sB,OAAQmjD,GAC3BA,EAAI1iC,KAAOA,GACnB,GACQ7oB,QACPmwD,EAAY1vD,KAAK0oB,GAG7B,CACA,IAAK,MAAMu6B,KAAKyM,EACZzM,EAAE/jD,UAAUqJ,IAAIzI,KAAKqU,QAAQ43C,UAC7BhqD,WAAW,KACHjC,KAAK6rD,KAAKxtC,OAAOwxC,iBAAmB7vD,KAAK6rD,KAAKxtC,OAAOkR,SAAS4zB,IAC9DnjD,KAAK6rD,KAAKxtC,OAAOzH,YAAYusC,IAElC,KAEPuM,EAAe1vD,KAAK6rD,KAAKxtC,OAAOsxC,WAChC,IAAK,IAAIz6C,EAAI,EAAGA,EAAIuf,EAAgBh1B,OAAQyV,IAAK,CAC7C,IAAI46C,GAAY,EAChB,IAAK,IAAItwD,EAAI,EAAGA,EAAIkwD,EAAajwD,OAAQD,IACjCi1B,EAAgBvf,GAAGoT,KAAOtU,OAAO07C,EAAalwD,GAAGqsC,QAAQvjB,MACzDwnC,GAAY,GAGhBA,IAC4B,IAAxBJ,EAAajwD,OACbO,KAAK6rD,KAAKxtC,OAAO1H,YAAY3W,KAAK+vD,cAAct7B,EAAgBvf,KAErD,IAANA,EACLlV,KAAK6rD,KAAKxtC,OAAO2T,aAAahyB,KAAK+vD,cAAct7B,EAAgBvf,IAAKw6C,EAAax6C,IAGnFw6C,EAAax6C,EAAI,GAAG86C,sBAAsB,WAAYhwD,KAAK+vD,cAAct7B,EAAgBvf,KAGrG,CACAlV,KAAK0uD,mBACT,CACA,aAAAqB,CAAcv7B,GACV,MAAMt1B,EAAQF,SAASmK,cAAc,OACrCjK,EAAME,UAAUqJ,IAAIzI,KAAKqU,QAAQnV,OACjCA,EAAM2sC,QAAQvjB,GAAKkM,EAAOlM,GAC1B,MAAM/U,EAAOvU,SAASmK,cAAc,OAIpC,GAHAoK,EAAKnU,UAAUqJ,IAAIzI,KAAKqU,QAAQ03C,WAChCx4C,EAAKk8C,UAAYj7B,EAAOjhB,KACxBrU,EAAMyX,YAAYpD,IACbihB,EAAOo1B,UAAW,CACnB,MAAMqG,EAAYjxD,SAASmK,cAAc,OACzC8mD,EAAU7wD,UAAUqJ,IAAIzI,KAAKqU,QAAQ23C,aACrCiE,EAAU3B,QAAW1/C,IAGjB,GAFAA,EAAE0a,iBACF1a,EAAE0/B,kBACEtuC,KAAK4nD,SAASpuC,SACd,OAEJ,IAAI+0C,GAAe,EACnB,MAAM/qB,EAASxjC,KAAK2rD,MAAMZ,qBACpB7nB,EAAQM,EAAO37B,OAAQuN,GAClBA,EAAEsf,UAAYtf,EAAEkT,KAAOkM,EAAOlM,IACtC,GACH,KAAItoB,KAAK4nD,SAASmB,aAAe7lB,EAAMzjC,OAASO,KAAK4nD,SAASmB,eAG1D/oD,KAAK4rD,UAAU4C,eACfD,GAA8D,IAA/CvuD,KAAK4rD,UAAU4C,aAAatrB,EAAOM,IAElD+qB,GAAc,CACd,IAAI3D,EAAiB,GACrB,IAAK,MAAMx1C,KAAK8tB,EAAO,CACnB,GAAI9tB,aAAag0C,GACb,IAAK,MAAM3hB,KAAKryB,EAAExF,QACdg7C,EAAe1qD,KAAKunC,EAAEvoC,OAG1BkW,aAAas0C,IACbkB,EAAe1qD,KAAKkV,EAAElW,MAE9B,CACAc,KAAK4rD,UAAU6C,YAAY7D,GAAgB,GACvC5qD,KAAK4nD,SAASW,eACdvoD,KAAK4rD,UAAUtnD,QAEftE,KAAK4rD,UAAU+C,aACf3uD,KAAK4rD,UAAU+C,YAAYzrB,GAE/BljC,KAAK0uD,mBACT,GAEJ,MAAMwB,EAAYlxD,SAAS6vD,gBAAgB,6BAA8B,OACzEqB,EAAU/2C,aAAa,UAAW,eAClC,MAAMg3C,EAAanxD,SAAS6vD,gBAAgB,6BAA8B,QAC1EsB,EAAWh3C,aAAa,IAAKnZ,KAAKqU,QAAQg5C,cAC1C6C,EAAUv5C,YAAYw5C,GACtBF,EAAUt5C,YAAYu5C,GACtBhxD,EAAMyX,YAAYs5C,EACtB,CACA,OAAO/wD,CACX,CACA,UAAAsuD,GACI,MAAM3B,EAAO7sD,SAASmK,cAAc,OACpC0iD,EAAKhgB,QAAQvjB,GAAKtoB,KAAK4nD,SAASt/B,GAChCujC,EAAKvjC,GAAKtoB,KAAK4nD,SAASt/B,GACxB,MAAMvD,EAAS/kB,KAAKowD,YACpBvE,EAAKl1C,YAAYoO,EAAO8mC,MACxB,MAAMgB,EAAO7sD,KAAKqwD,UAElB,OADAxE,EAAKl1C,YAAYk2C,GACV,CACHhB,KAAMA,EACN9mC,OAAQA,EACR8nC,KAAMA,EAEd,CACA,WAAAgB,GAC0C,aAAlC7tD,KAAK4nD,SAASa,iBAIiB,SAA/BzoD,KAAK4nD,SAASc,aAIsB,OAA/B1oD,KAAK4nD,SAASc,aAIG,OAAtB1oD,KAAKswD,aACLtwD,KAAKuwD,mBAGLvwD,KAAKwwD,mBAPLxwD,KAAKuwD,mBARLvwD,KAAKwwD,kBAiBb,CACA,SAAAJ,GACI,MAAMvE,EAAO7sD,SAASmK,cAAc,OAC9BgB,EAAQnL,SAASmK,cAAc,SAC/BwjD,EAAU3tD,SAASmK,cAAc,OACvC0iD,EAAKzsD,UAAUqJ,IAAIzI,KAAKqU,QAAQ0Q,QAChC,MAAM0rC,EAAe,CACjB5E,OACA1hD,SA6CJ,GA3CKnK,KAAK4nD,SAASM,aACf2D,EAAKzsD,UAAUqJ,IAAIzI,KAAKqU,QAAQsd,MAChCxnB,EAAMumD,UAAW,GAErBvmD,EAAMtE,KAAO,SACbsE,EAAMukB,YAAc1uB,KAAK4nD,SAASO,kBAClCh+C,EAAMgkD,UAAY,EAClBhkD,EAAMgP,aAAa,aAAcnZ,KAAK4nD,SAASO,mBAC/Ch+C,EAAMgP,aAAa,iBAAkB,OACrChP,EAAMgP,aAAa,eAAgB,OACnChP,EAAMgP,aAAa,cAAe,OAClChP,EAAMwmD,QAAUt/C,GAAUzC,IACtB5O,KAAK4rD,UAAU7mC,OAAOnW,EAAEsD,OAAOhT,QAChC,KACHiL,EAAMikD,UAAax/C,IACf,OAAQA,EAAE3H,KACN,IAAK,UACL,IAAK,YAED,MADU,cAAV2H,EAAE3H,IAAsBjH,KAAKquD,UAAU,QAAUruD,KAAKquD,UAAU,OACzD,EACX,IAAK,MAED,OADAruD,KAAK4rD,UAAUtnD,SACR,EACX,IAAK,SAED,OADAtE,KAAK4rD,UAAUtnD,SACR,EACX,IAAK,QACL,IAAK,IACD,GAAItE,KAAK4rD,UAAUe,SAAW/9C,EAAEwe,QAE5B,OADAu/B,EAAQl2C,SACD,EAEN,CACD,MAAM62C,EAActtD,KAAK8f,QAAQ+sC,KAAKhjD,cAAc,IAAM7J,KAAKqU,QAAQi5C,aACvE,GAAIA,EAEA,OADAA,EAAY72C,SACL,CAEf,CACA,OAAO,IAGnBo1C,EAAKl1C,YAAYxM,GACbnK,KAAK4rD,UAAUe,QAAS,CACxBA,EAAQvtD,UAAUqJ,IAAIzI,KAAKqU,QAAQs4C,SACnC,MAAMiE,EAAO5xD,SAAS6vD,gBAAgB,6BAA8B,OACpE+B,EAAKz3C,aAAa,UAAW,eAC7B,MAAM03C,EAAW7xD,SAAS6vD,gBAAgB,6BAA8B,QACxEgC,EAAS13C,aAAa,IAAKnZ,KAAKqU,QAAQu4C,aACxCgE,EAAKj6C,YAAYk6C,GACjBlE,EAAQh2C,YAAYi6C,GACpBjE,EAAQ2B,QAAW1/C,IAGf,GAFAA,EAAE0a,iBACF1a,EAAE0/B,mBACGtuC,KAAK4rD,UAAUe,QAChB,OAEJ,MAAMmE,EAAa9wD,KAAK8f,QAAQiF,OAAO5a,MAAMjL,MAAMojC,OACnD,GAAmB,KAAfwuB,EAEA,YADA9wD,KAAK8f,QAAQiF,OAAO5a,MAAMigB,QAG9B,MAAM2mC,EAAaC,IACf,IAAIC,EAAY,IAAIvH,GAAOsH,GAE3B,GADAhxD,KAAK4rD,UAAUlB,UAAUuG,GACrBjxD,KAAK4nD,SAASE,WAAY,CAC1B,IAAIzpC,EAASre,KAAK2rD,MAAMpB,cACxBlsC,EAAOne,KAAK+wD,EAAU/xD,OACtBc,KAAK4rD,UAAU6C,YAAYpwC,GAAQ,EACvC,MAEIre,KAAK4rD,UAAU6C,YAAY,CAACwC,EAAU/xD,QAAQ,GAElDc,KAAK4rD,UAAU7mC,OAAO,IAClB/kB,KAAK4nD,SAASW,eACdtmD,WAAW,KACPjC,KAAK4rD,UAAUtnD,SAChB,MAGL4sD,EAAelxD,KAAK4rD,UAAUe,QAAQmE,IACvB,IAAjBI,SAA0BA,IAG1BA,aAAwB54C,QACxB44C,EAAat3B,KAAM16B,IAEX6xD,EADiB,iBAAV7xD,EACG,CACNqU,KAAMrU,EACNA,MAAOA,GAIDA,KAKlB6xD,EAD6B,iBAAjBG,EACF,CACN39C,KAAM29C,EACNhyD,MAAOgyD,GAIDA,KAIlBrF,EAAKl1C,YAAYg2C,GACjB8D,EAAa9D,QAAU,CACnBd,KAAMc,EACNoC,IAAK6B,EACLhD,KAAMiD,EAEd,CACA,OAAOJ,CACX,CACA,WAAAU,GACInxD,KAAK8f,QAAQiF,OAAO5a,MAAMigB,OAC9B,CACA,UAAAgnC,CAAWC,GAAiB,EAAOC,GAAc,EAAOC,GAAY,GAChE,IAAIC,EAAQ,IAAMxxD,KAAKqU,QAAQmgB,OAU/B,OATI68B,IACAG,GAAS,SAAWxxD,KAAKqU,QAAQqa,YAAc,KAE/C4iC,IACAE,GAAS,SAAWxxD,KAAKqU,QAAQmF,SAAW,KAE5C+3C,IACAC,GAAS,SAAWxxD,KAAKqU,QAAQsd,KAAO,KAErCjlB,MAAMmS,KAAK7e,KAAK8f,QAAQ+sC,KAAKlpC,iBAAiB6tC,GACzD,CACA,SAAAnD,CAAUoD,GACN,MAAM7hD,EAAU5P,KAAKoxD,YAAW,GAAM,GAAM,GAC5C,GAAuB,IAAnBxhD,EAAQnQ,OAGZ,GAAuB,IAAnBmQ,EAAQnQ,QACHmQ,EAAQ,GAAGxQ,UAAUmwB,SAASvvB,KAAKqU,QAAQi5C,aADpD,CAMA,IAAK,IAAI9tD,EAAI,EAAGA,EAAIoQ,EAAQnQ,OAAQD,IAChC,GAAIoQ,EAAQpQ,GAAGJ,UAAUmwB,SAASvvB,KAAKqU,QAAQi5C,aAAc,CACzD,MAAMoE,EAAa9hD,EAAQpQ,GAC3BkyD,EAAWtyD,UAAUmI,OAAOvH,KAAKqU,QAAQi5C,aACzC,MAAMqE,EAAaD,EAAWv6C,cAC9B,GAAIw6C,GAAcA,EAAWvyD,UAAUmwB,SAASvvB,KAAKqU,QAAQ/Q,MAAO,CAChE,MAAMwpD,EAAgB6E,EAAW9nD,cAAc,IAAM7J,KAAKqU,QAAQy4C,eAC9DA,GACAA,EAAcr2C,OAEtB,CACA,IAAIm7C,EAAehiD,EAAgB,SAAR6hD,EAAkBjyD,EAAI,EAAIoQ,EAAQnQ,OAASD,EAAI,EAAI,EAAKA,EAAI,GAAK,EAAIA,EAAI,EAAIoQ,EAAQnQ,OAAS,GACzHmyD,EAAaxyD,UAAUqJ,IAAIzI,KAAKqU,QAAQi5C,aACxCttD,KAAKguD,oBAAoBhuD,KAAK8f,QAAQ+sC,KAAM+E,GAC5C,MAAMC,EAAeD,EAAaz6C,cAClC,GAAI06C,GAAgBA,EAAazyD,UAAUmwB,SAASvvB,KAAKqU,QAAQ/P,OAAQ,CACrE,MAAMwoD,EAAgB+E,EAAahoD,cAAc,IAAM7J,KAAKqU,QAAQy4C,eAChEA,GACAA,EAAcr2C,OAEtB,CACA,MACJ,CAEJ7G,EAAgB,SAAR6hD,EAAiB,EAAI7hD,EAAQnQ,OAAS,GAAGL,UAAUqJ,IAAIzI,KAAKqU,QAAQi5C,aAC5EttD,KAAKguD,oBAAoBhuD,KAAK8f,QAAQ+sC,KAAMj9C,EAAgB,SAAR6hD,EAAiB,EAAI7hD,EAAQnQ,OAAS,GA1B1F,MAHQmQ,EAAQ,GAAGxQ,UAAUqJ,IAAIzI,KAAKqU,QAAQi5C,YA8BlD,CACA,OAAA+C,GACI,MAAMzgD,EAAU5Q,SAASmK,cAAc,OAEvC,OADAyG,EAAQxQ,UAAUqJ,IAAIzI,KAAKqU,QAAQw4C,MAC5Bj9C,CACX,CACA,WAAA4oB,CAAYh0B,GACRxE,KAAK8f,QAAQ+sC,KAAKrpC,UAAY,GAC9B,MAAMsuC,EAAW9yD,SAASmK,cAAc,OACxC2oD,EAAS1yD,UAAUqJ,IAAIzI,KAAKqU,QAAQ7P,OACpCstD,EAAS/0C,YAAcvY,EACvBxE,KAAK8f,QAAQ+sC,KAAKl2C,YAAYm7C,EAClC,CACA,eAAAC,GACI/xD,KAAK8f,QAAQ+sC,KAAKrpC,UAAY,GAC9B,MAAMwuC,EAAehzD,SAASmK,cAAc,OAC5C6oD,EAAa5yD,UAAUqJ,IAAIzI,KAAKqU,QAAQq4C,WACxCsF,EAAaj1C,YAAc/c,KAAK4nD,SAASS,cACzCroD,KAAK8f,QAAQ+sC,KAAKl2C,YAAYq7C,EAClC,CACA,aAAAC,CAActuD,GAEV,GADA3D,KAAK8f,QAAQ+sC,KAAKrpC,UAAY,GACV,IAAhB7f,EAAKlE,OAAc,CACnB,MAAMyyD,EAAYlzD,SAASmK,cAAc,OAIzC,OAHA+oD,EAAU9yD,UAAUqJ,IAAIzI,KAAKqU,QAAQ0Q,QACrCmtC,EAAU1uC,UAAYxjB,KAAK4nD,SAASQ,gBACpCpoD,KAAK8f,QAAQ+sC,KAAKl2C,YAAYu7C,EAElC,CACA,IAAK,MAAMh9C,KAAKvR,EAAM,CAClB,GAAIuR,aAAak0C,GAAU,CACvB,MAAM+I,EAAanzD,SAASmK,cAAc,OAC1CgpD,EAAW/yD,UAAUqJ,IAAIzI,KAAKqU,QAAQg1C,UACtC,MAAMyD,EAAgB9tD,SAASmK,cAAc,OAC7C2jD,EAAc1tD,UAAUqJ,IAAIzI,KAAKqU,QAAQy4C,eACzCqF,EAAWx7C,YAAYm2C,GACvB,MAAMC,EAAoB/tD,SAASmK,cAAc,OACjD4jD,EAAkB3tD,UAAUqJ,IAAIzI,KAAKqU,QAAQ04C,mBAC7CA,EAAkBhwC,YAAc7H,EAAEo0C,MAClCwD,EAAcn2C,YAAYo2C,GAC1B,MAAMC,EAAkBhuD,SAASmK,cAAc,OAG/C,GAFA6jD,EAAgB5tD,UAAUqJ,IAAIzI,KAAKqU,QAAQ24C,iBAC3CF,EAAcn2C,YAAYq2C,GACtBhtD,KAAK4nD,SAASE,YAAc5yC,EAAEq0C,UAAW,CACzC,MAAMA,EAAYvqD,SAASmK,cAAc,OACzCogD,EAAUnqD,UAAUqJ,IAAIzI,KAAKqU,QAAQ44C,mBACrC,IAAImF,GAAc,EAClB,IAAK,MAAMh9C,KAAKF,EAAEtF,QACd,IAAKwF,EAAEsf,SAAU,CACb09B,GAAc,EACd,KACJ,CAEAA,GACA7I,EAAUnqD,UAAUqJ,IAAIzI,KAAKqU,QAAQqgB,UAEzC,MAAM80B,EAAgBxqD,SAASmK,cAAc,QAC7CqgD,EAAczsC,YAAc7H,EAAEs0C,cAC9BD,EAAU5yC,YAAY6yC,GACtB,MAAM6I,EAAerzD,SAAS6vD,gBAAgB,6BAA8B,OAC5EwD,EAAal5C,aAAa,UAAW,eACrCowC,EAAU5yC,YAAY07C,GACtB,MAAMC,EAAetzD,SAAS6vD,gBAAgB,6BAA8B,QAC5EyD,EAAan5C,aAAa,IAAKnZ,KAAKqU,QAAQ64C,sBAC5CmF,EAAa17C,YAAY27C,GACzB,MAAMC,EAAiBvzD,SAAS6vD,gBAAgB,6BAA8B,QAC9E0D,EAAep5C,aAAa,IAAKnZ,KAAKqU,QAAQ84C,wBAC9CkF,EAAa17C,YAAY47C,GACzBhJ,EAAUnoD,iBAAiB,QAAUwN,IACjCA,EAAE0a,iBACF1a,EAAE0/B,kBACF,MAAMkkB,EAAkBxyD,KAAK2rD,MAAMpB,cACnC,GAAI6H,EAAa,CACb,MAAMK,EAAcD,EAAgB3qD,OAAQC,IACxC,IAAK,MAAMsN,KAAKF,EAAEtF,QACd,GAAI9H,IAAMsN,EAAElW,MACR,OAAO,EAGf,OAAO,IAGX,YADAc,KAAK4rD,UAAU6C,YAAYgE,GAAa,EAE5C,CACK,CACD,MAAMA,EAAcD,EAAgBnmD,OAAO6I,EAAEtF,QAAQ1H,IAAKkN,GAAMA,EAAElW,QAClE,IAAK,MAAMkW,KAAKF,EAAEtF,QACT5P,KAAK2rD,MAAMN,cAAcj2C,EAAEkT,KAC5BtoB,KAAK4rD,UAAUlB,UAAUt1C,GAIjC,YADApV,KAAK4rD,UAAU6C,YAAYgE,GAAa,EAE5C,IAEJzF,EAAgBr2C,YAAY4yC,EAChC,CACA,GAAmB,QAAfr0C,EAAEu0C,SAAoB,CACtB,MAAM2D,EAAmBpuD,SAASmK,cAAc,OAChDikD,EAAiBhuD,UAAUqJ,IAAIzI,KAAKqU,QAAQ+4C,kBAC5C,MAAMsF,EAAsB1zD,SAAS6vD,gBAAgB,6BAA8B,OACnF6D,EAAoBv5C,aAAa,UAAW,eAC5Cu5C,EAAoBtzD,UAAUqJ,IAAIzI,KAAKqU,QAAQ+3C,OAC/CgB,EAAiBz2C,YAAY+7C,GAC7B,MAAMC,EAAwB3zD,SAAS6vD,gBAAgB,6BAA8B,QACrF6D,EAAoB/7C,YAAYg8C,GAC5Bz9C,EAAEtF,QAAQgY,KAAMxS,GAAMA,EAAEsf,WAAwD,KAA3C10B,KAAK8f,QAAQiF,OAAO5a,MAAMjL,MAAMojC,QACrE8qB,EAAiBhuD,UAAUqJ,IAAIzI,KAAKqU,QAAQ/Q,MAC5CqvD,EAAsBx5C,aAAa,IAAKnZ,KAAKqU,QAAQi4C,YAEjC,SAAfp3C,EAAEu0C,UACP0I,EAAW/yD,UAAUqJ,IAAIzI,KAAKqU,QAAQ/Q,MACtCqvD,EAAsBx5C,aAAa,IAAKnZ,KAAKqU,QAAQi4C,YAEjC,UAAfp3C,EAAEu0C,WACP0I,EAAW/yD,UAAUqJ,IAAIzI,KAAKqU,QAAQ/P,OACtCquD,EAAsBx5C,aAAa,IAAKnZ,KAAKqU,QAAQg4C,aAEzDS,EAAc1rD,iBAAiB,QAAUwN,IACrCA,EAAE0a,iBACF1a,EAAE0/B,kBACE6jB,EAAW/yD,UAAUmwB,SAASvvB,KAAKqU,QAAQ/P,QAC3C6tD,EAAW/yD,UAAUmI,OAAOvH,KAAKqU,QAAQ/P,OACzC6tD,EAAW/yD,UAAUqJ,IAAIzI,KAAKqU,QAAQ/Q,MACtCqvD,EAAsBx5C,aAAa,IAAKnZ,KAAKqU,QAAQi4C,aAGrD6F,EAAW/yD,UAAUmI,OAAOvH,KAAKqU,QAAQ/Q,MACzC6uD,EAAW/yD,UAAUqJ,IAAIzI,KAAKqU,QAAQ/P,OACtCquD,EAAsBx5C,aAAa,IAAKnZ,KAAKqU,QAAQg4C,eAG7DW,EAAgBr2C,YAAYy2C,EAChC,CACA+E,EAAWx7C,YAAYm2C,GACvB,IAAK,MAAM13C,KAAKF,EAAEtF,QACduiD,EAAWx7C,YAAY3W,KAAKw0B,OAAOpf,IAEvCpV,KAAK8f,QAAQ+sC,KAAKl2C,YAAYw7C,EAClC,CACIj9C,aAAaw0C,IACb1pD,KAAK8f,QAAQ+sC,KAAKl2C,YAAY3W,KAAKw0B,OAAOtf,GAElD,CACJ,CACA,MAAAsf,CAAOA,GACH,GAAIA,EAAO9F,YAAa,CACpB,MAAMA,EAAc1vB,SAASmK,cAAc,OAG3C,OAFAulB,EAAYtvB,UAAUqJ,IAAIzI,KAAKqU,QAAQmgB,QACvC9F,EAAYtvB,UAAUqJ,IAAIzI,KAAKqU,QAAQsd,MAChCjD,CACX,CACA,MAAMkkC,EAAW5zD,SAASmK,cAAc,OAmGxC,OAlGAypD,EAAS/mB,QAAQvjB,GAAKkM,EAAOlM,GAC7BsqC,EAAStqC,GAAKkM,EAAOlM,GACrBsqC,EAASxzD,UAAUqJ,IAAIzI,KAAKqU,QAAQmgB,QACpCo+B,EAASz5C,aAAa,OAAQ,UAC1Bqb,EAAOqzB,OACPrzB,EAAOqzB,MAAMz1C,MAAM,KAAKgxB,QAASyvB,IAC7BD,EAASxzD,UAAUqJ,IAAIoqD,KAG3Br+B,EAAOtC,QACP0gC,EAAS1gC,MAAM+7B,QAAUz5B,EAAOtC,OAEhClyB,KAAK4nD,SAASU,iBAA8D,KAA3CtoD,KAAK8f,QAAQiF,OAAO5a,MAAMjL,MAAMojC,OACjEswB,EAASpvC,UAAYxjB,KAAK8yD,cAA8B,KAAhBt+B,EAAOxW,KAAcwW,EAAOxW,KAAOwW,EAAOjhB,KAAMvT,KAAK8f,QAAQiF,OAAO5a,MAAMjL,MAAOc,KAAKqU,QAAQo4C,mBAEjH,KAAhBj4B,EAAOxW,KACZ40C,EAASpvC,UAAYgR,EAAOxW,KAG5B40C,EAAS71C,YAAcyX,EAAOjhB,KAE9BvT,KAAK4nD,SAASkB,oBAAsB8J,EAAS71C,aAC7C61C,EAASz5C,aAAa,QAASy5C,EAAS71C,aAEvCyX,EAAOm1B,SACRiJ,EAASxzD,UAAUqJ,IAAIzI,KAAKqU,QAAQsd,MAEpC6C,EAAOhb,UACPo5C,EAASxzD,UAAUqJ,IAAIzI,KAAKqU,QAAQmF,UAEpCgb,EAAOE,UAAY10B,KAAK4nD,SAASiB,cACjC+J,EAASxzD,UAAUqJ,IAAIzI,KAAKqU,QAAQsd,MAEpC6C,EAAOE,UACPk+B,EAASxzD,UAAUqJ,IAAIzI,KAAKqU,QAAQqgB,UACpCk+B,EAASz5C,aAAa,gBAAiB,QACvCnZ,KAAK6rD,KAAKA,KAAK1yC,aAAa,wBAAyBy5C,EAAStqC,MAG9DsqC,EAASxzD,UAAUmI,OAAOvH,KAAKqU,QAAQqgB,UACvCk+B,EAASz5C,aAAa,gBAAiB,UAE3Cy5C,EAASxxD,iBAAiB,QAAUwN,IAChCA,EAAE0a,iBACF1a,EAAE0/B,kBACF,MAAM7Z,EAAkBz0B,KAAK2rD,MAAMpB,cAC7B5gD,EAAUiF,EAAE0iC,cACZyhB,EAAY/+C,OAAOrK,EAAQkiC,QAAQvjB,IACzC,GAAIkM,EAAOhb,UAAagb,EAAOE,WAAa10B,KAAK4nD,SAASgB,cACtD,OAEJ,GAAK5oD,KAAK4nD,SAASE,YAAc9nD,KAAK4nD,SAASoB,aAAev0B,EAAgBh1B,SAAW+0B,EAAOE,UAC3F10B,KAAK4nD,SAASE,YAAc9nD,KAAK4nD,SAASmB,aAAet0B,EAAgBh1B,QAAU+0B,EAAOE,SAC3F,OAEJ,IAAIs+B,GAAe,EACnB,MAAMxvB,EAASxjC,KAAK2rD,MAAMZ,qBAC1B,IAAI7nB,EAAQ,GACRljC,KAAK4nD,SAASE,aAEV5kB,EADA1O,EAAOE,SACC8O,EAAO37B,OAAQuN,GAAMA,EAAEkT,KAAOyqC,GAG9BvvB,EAAOn3B,OAAOmoB,IAGzBx0B,KAAK4nD,SAASE,aAEX5kB,EADA1O,EAAOE,SACC,GAGA,CAACF,IAGZx0B,KAAK4rD,UAAU4C,eAChBwE,GAAe,GAEfhzD,KAAK4rD,UAAU4C,eAEXwE,GAD+C,IAA/ChzD,KAAK4rD,UAAU4C,aAAatrB,EAAOM,IAOvCwvB,IACKhzD,KAAK2rD,MAAMN,cAAc0H,IAC1B/yD,KAAK4rD,UAAUlB,UAAUl2B,GAE7Bx0B,KAAK4rD,UAAU6C,YAAYvrB,EAAMh7B,IAAKkN,GAAMA,EAAElW,QAAQ,GAClDc,KAAK4nD,SAASW,eACdvoD,KAAK4rD,UAAUtnD,QAEftE,KAAK4rD,UAAU+C,aACf3uD,KAAK4rD,UAAU+C,YAAYzrB,MAIhC0vB,CACX,CACA,OAAAK,GACIjzD,KAAK6rD,KAAKA,KAAKtkD,SACfvH,KAAK8f,QAAQ+rC,KAAKtkD,QACtB,CACA,aAAAurD,CAAcI,EAAKnuC,EAAQ0N,GACvB,IAAI0gC,EAAkBD,EACtB,MAAME,EAAQ,IAAI1qB,OAAO,IAAM3jB,EAAOud,OAAS,sBAAuB,KACtE,IAAK4wB,EAAIv/C,MAAMy/C,GACX,OAAOF,EAEX,MAAMG,EAAqBH,EAAIv/C,MAAMy/C,GAAOjkD,MACtCmkD,EAAmBD,EAAqBH,EAAIv/C,MAAMy/C,GAAO,GAAG5kD,WAAW/O,OACvE8zD,EAA2BL,EAAIngD,UAAUsgD,EAAoBC,GAEnE,OADAH,EAAkBA,EAAgB9pD,QAAQ+pD,EAAO,gBAAgB3gC,MAAc8gC,YACxEJ,CACX,CACA,gBAAA5C,GACI,MAAMiD,EAAaxzD,KAAK6rD,KAAKA,KAAK4H,aAC5BC,EAAgB1zD,KAAK8f,QAAQ+rC,KAAK4H,aACxCzzD,KAAK6rD,KAAKA,KAAKzsD,UAAUmI,OAAOvH,KAAKqU,QAAQm4C,WAC7CxsD,KAAK6rD,KAAKA,KAAKzsD,UAAUqJ,IAAIzI,KAAKqU,QAAQk4C,WAC1CvsD,KAAK8f,QAAQ+rC,KAAKzsD,UAAUmI,OAAOvH,KAAKqU,QAAQm4C,WAChDxsD,KAAK8f,QAAQ+rC,KAAKzsD,UAAUqJ,IAAIzI,KAAKqU,QAAQk4C,WAC7C,MAAMoH,EAAgB3zD,KAAK6rD,KAAKA,KAAK+H,wBACrC5zD,KAAK8f,QAAQ+rC,KAAK35B,MAAM2hC,OAAS,KAAOL,EAAaE,EAAgB,GAAK,iBAC1E1zD,KAAK8f,QAAQ+rC,KAAK35B,MAAM4hC,IAAMH,EAAcG,IAAMH,EAAcI,OAASr1D,OAAOs1D,QAAU,KAC1Fh0D,KAAK8f,QAAQ+rC,KAAK35B,MAAMgb,KAAOymB,EAAczmB,KAAOxuC,OAAOu1D,QAAU,KACrEj0D,KAAK8f,QAAQ+rC,KAAK35B,MAAMC,MAAQwhC,EAAcxhC,MAAQ,IAC1D,CACA,gBAAAq+B,GACIxwD,KAAK6rD,KAAKA,KAAKzsD,UAAUmI,OAAOvH,KAAKqU,QAAQk4C,WAC7CvsD,KAAK6rD,KAAKA,KAAKzsD,UAAUqJ,IAAIzI,KAAKqU,QAAQm4C,WAC1CxsD,KAAK8f,QAAQ+rC,KAAKzsD,UAAUmI,OAAOvH,KAAKqU,QAAQk4C,WAChDvsD,KAAK8f,QAAQ+rC,KAAKzsD,UAAUqJ,IAAIzI,KAAKqU,QAAQm4C,WAC7C,MAAMmH,EAAgB3zD,KAAK6rD,KAAKA,KAAK+H,wBACrC5zD,KAAK8f,QAAQ+rC,KAAK35B,MAAM2hC,OAAS,mBACK,aAAlC7zD,KAAK4nD,SAASa,kBACdzoD,KAAK8f,QAAQ+rC,KAAK35B,MAAM4hC,IAAMH,EAAcG,IAAMH,EAAcI,OAASr1D,OAAOs1D,QAAU,KAC1Fh0D,KAAK8f,QAAQ+rC,KAAK35B,MAAMgb,KAAOymB,EAAczmB,KAAOxuC,OAAOu1D,QAAU,KACrEj0D,KAAK8f,QAAQ+rC,KAAK35B,MAAMC,MAAQwhC,EAAcxhC,MAAQ,KAE9D,CACA,mBAAA67B,CAAoB5nB,EAAWz8B,GAC3B,MAAMuqD,EAAO9tB,EAAU+tB,UAAY/tB,EAAUguB,UACvCC,EAAUH,EAAO9tB,EAAUkuB,aAC3BC,EAAO5qD,EAAQyqD,UACfI,EAAUD,EAAO5qD,EAAQ2qD,aAC3BC,EAAOL,EACP9tB,EAAU+tB,WAAaD,EAAOK,EAEzBC,EAAUH,IACfjuB,EAAU+tB,WAAaK,EAAUH,EAEzC,CACA,UAAA/D,GACI,MAAMkD,EAAaxzD,KAAK6rD,KAAKA,KAAK4H,aAC5BgB,EAAWz0D,KAAK6rD,KAAKA,KAAK+H,wBAC1BF,EAAgB1zD,KAAK8f,QAAQ+rC,KAAK4H,aAExC,OADmB/0D,OAAOg2D,aAAeD,EAASX,IAAMN,IACtCE,GACVe,EAASX,IAAMJ,EACR,KAMR,MACX,CACA,iBAAAhF,GACI,IAAK1uD,KAAK2rD,QAAU3rD,KAAK4nD,SACrB,OAEJ,MAAMlzB,EAAW10B,KAAK2rD,MAAMZ,qBACtB4J,EAAmBjgC,GAAYA,EAASj1B,OAAS,EACjDqoD,EAAa9nD,KAAK4nD,SAASE,WAC3Bc,EAAgB5oD,KAAK4nD,SAASgB,cAC9BgM,EAAiB50D,KAAK6rD,KAAKK,SAASL,KACpCgJ,EAAY70D,KAAKqU,QAAQsd,MAC3Bi3B,GAAmBd,IAAe6M,EAIlCC,EAAex1D,UAAUqJ,IAAIosD,GAH7BD,EAAex1D,UAAUmI,OAAOstD,EAKxC,EAGJ,MAAMC,GACF,WAAAp0D,CAAYgwC,GACR1wC,KAAK+0D,QAAS,EACd/0D,KAAKi7C,SAAW,KAChBj7C,KAAK0wC,OAASA,EACd1wC,KAAK0wC,OAAOtvC,iBAAiB,SAAUpB,KAAKg1D,YAAYn0D,KAAKb,MAAO,CAChEi1D,SAAS,IAEbj1D,KAAKi7C,SAAW,IAAIjJ,iBAAiBhyC,KAAKk1D,YAAYr0D,KAAKb,OAC3DA,KAAKm1D,cAAa,EACtB,CACA,MAAAxH,GACI3tD,KAAK0wC,OAAOl3B,UAAW,CAC3B,CACA,OAAA8qB,GACItkC,KAAK0wC,OAAOl3B,UAAW,CAC3B,CACA,MAAA47C,GACIp1D,KAAK0wC,OAAOyd,UAAY,EACxBnuD,KAAK0wC,OAAOxe,MAAMy3B,QAAU,OAC5B3pD,KAAK0wC,OAAOv3B,aAAa,cAAe,OAC5C,CACA,MAAAk8C,GACIr1D,KAAK0wC,OAAOt3B,gBAAgB,YAC5BpZ,KAAK0wC,OAAOxe,MAAMy3B,QAAU,GAC5B3pD,KAAK0wC,OAAOt3B,gBAAgB,cAChC,CACA,YAAA+7C,CAAaJ,GACT/0D,KAAK+0D,OAASA,EACVA,GACI/0D,KAAKi7C,UACLj7C,KAAKi7C,SAAS93B,QAAQnjB,KAAK0wC,OAAQ,CAC/BoB,SAAS,EACTD,WAAW,EACX10B,YAAY,IAInB43C,GACG/0D,KAAKi7C,UACLj7C,KAAKi7C,SAAS/0C,YAG1B,CACA,WAAA8uD,CAAYnvB,GAIR,OAHI7lC,KAAK+0D,QAAU/0D,KAAKs1D,eACpBt1D,KAAKs1D,cAAct1D,KAAKu1D,sBAErB,CACX,CACA,WAAAL,CAAYjjB,GACR,IAAKjyC,KAAK+0D,OACN,OAEJ,IAAIS,GAAe,EACfv8C,GAAkB,EAClBw8C,GAAwB,EAC5B,IAAK,MAAM5sB,KAAKoJ,EACRpJ,EAAE32B,SAAWlS,KAAK0wC,SACM,aAApB7H,EAAE9pB,gBACF9F,GAAkB,GAEE,UAApB4vB,EAAE9pB,gBACFy2C,GAAe,IAGG,aAAtB3sB,EAAE32B,OAAOwjD,UAAiD,WAAtB7sB,EAAE32B,OAAOwjD,WAC7CD,GAAwB,GAG5BD,GAAgBx1D,KAAK21D,eACrB31D,KAAK21D,cAAc31D,KAAK0wC,OAAOje,UAAUrgB,MAAM,MAE/C6G,GAAmBjZ,KAAK41D,mBACxB51D,KAAKm1D,cAAa,GAClBn1D,KAAK41D,iBAAiB51D,KAAK0wC,OAAOl3B,UAClCxZ,KAAKm1D,cAAa,IAElBM,GAAyBz1D,KAAK61D,kBAC9B71D,KAAKm1D,cAAa,GAClBn1D,KAAK61D,gBAAgB71D,KAAKwqD,WAC1BxqD,KAAKm1D,cAAa,GAE1B,CACA,OAAA3K,GACI,IAAI7mD,EAAO,GACX,MAAMsvC,EAAQjzC,KAAK0wC,OAAOif,WAC1B,IAAK,MAAMxM,KAAKlQ,EACO,aAAfkQ,EAAEuS,UACF/xD,EAAKzD,KAAKF,KAAK81D,oBAAoB3S,IAEpB,WAAfA,EAAEuS,UACF/xD,EAAKzD,KAAKF,KAAK+1D,kBAAkB5S,IAGzC,OAAOx/C,CACX,CACA,mBAAAmyD,CAAoBzM,GAChB,IAAI1lD,EAAO,CACP2kB,GAAI+gC,EAAS/gC,GACbghC,MAAOD,EAASC,MAChBC,YAAWF,EAASxd,SAAyC,SAA/Bwd,EAASxd,QAAQmqB,UAC/CxM,cAAeH,EAASxd,QAAUwd,EAASxd,QAAQoqB,cAAgB,aACnExM,SAAUJ,EAASxd,QAAUwd,EAASxd,QAAQ4d,SAAW,MACzD75C,QAAS,IAEb,MAAMA,EAAUy5C,EAASsG,WACzB,IAAK,MAAMv6C,KAAKxF,EACO,WAAfwF,EAAEsgD,UACF/xD,EAAKiM,QAAQ1P,KAAKF,KAAK+1D,kBAAkB3gD,IAGjD,OAAOzR,CACX,CACA,iBAAAoyD,CAAkBvhC,GACd,MAAO,CACHlM,GAAIkM,EAAOlM,GACXppB,MAAOs1B,EAAOt1B,MACdqU,KAAMihB,EAAOjhB,KACbyK,KAAMwW,EAAOqX,SAAWrX,EAAOqX,QAAQ7tB,KAAOwW,EAAOqX,QAAQ7tB,KAAO,GACpE0W,SAAUF,EAAOE,SACjBi1B,QAAkC,SAAzBn1B,EAAOtC,MAAMy3B,QACtBnwC,SAAUgb,EAAOhb,SACjBowC,YAAWp1B,EAAOqX,SAAuC,SAA7BrX,EAAOqX,QAAQ+d,UAC3Cl7B,YAA4C,SAA/B8F,EAAOqX,QAAQnd,YAC5Bm5B,MAAOrzB,EAAO/B,UACdP,MAAOsC,EAAOtC,MAAM+7B,QACpBtqD,KAAM6wB,EAAOqX,QAErB,CACA,iBAAA0pB,GACI,IAAIl3C,EAAS,GACb,MAAMzO,EAAU5P,KAAK0wC,OAAOif,WAC5B,IAAK,MAAMv6C,KAAKxF,EAAS,CACrB,GAAmB,aAAfwF,EAAEsgD,SAAyB,CAC3B,MAAMQ,EAAkB9gD,EAAEu6C,WAC1B,IAAK,MAAMqB,KAAMkF,EACb,GAAoB,WAAhBlF,EAAG0E,SAAuB,CAC1B,MAAMlhC,EAASw8B,EACXx8B,EAAOE,UACPrW,EAAOne,KAAKs0B,EAAOt1B,MAE3B,CAER,CACA,GAAmB,WAAfkW,EAAEsgD,SAAuB,CACzB,MAAMlhC,EAASpf,EACXof,EAAOE,UACPrW,EAAOne,KAAKs0B,EAAOt1B,MAE3B,CACJ,CACA,OAAOmf,CACX,CACA,WAAAowC,CAAYvvD,GACRc,KAAKm1D,cAAa,GAClB,MAAMvlD,EAAU5P,KAAK0wC,OAAOif,WAC5B,IAAK,MAAMv6C,KAAKxF,EAAS,CACrB,GAAmB,aAAfwF,EAAEsgD,SAAyB,CAC3B,MACMQ,EADW9gD,EACgBu6C,WACjC,IAAK,MAAMqB,KAAMkF,EACb,GAAoB,WAAhBlF,EAAG0E,SAAuB,CAC1B,MAAMlhC,EAASw8B,EACfx8B,EAAOE,SAAWx1B,EAAMwV,SAAS8f,EAAOt1B,MAC5C,CAER,CACA,GAAmB,WAAfkW,EAAEsgD,SAAuB,CACzB,MAAMlhC,EAASpf,EACfof,EAAOE,SAAWx1B,EAAMwV,SAAS8f,EAAOt1B,MAC5C,CACJ,CACAc,KAAKm1D,cAAa,EACtB,CACA,YAAAgB,CAAa7tC,EAAI4J,EAAO7d,GACpBrU,KAAKm1D,cAAa,GACd7sC,IACAtoB,KAAK0wC,OAAO7E,QAAQvjB,GAAKA,GAEzB4J,IACAlyB,KAAK0wC,OAAOxe,MAAM+7B,QAAU/7B,GAE5B7d,IACArU,KAAK0wC,OAAOje,UAAY,GACxBpe,EAAQ+uB,QAASqE,IACI,KAAbA,EAAEnF,QACFtiC,KAAK0wC,OAAOtxC,UAAUqJ,IAAIg/B,EAAEnF,WAIxCtiC,KAAKm1D,cAAa,EACtB,CACA,aAAAiB,CAAczyD,GACV3D,KAAKm1D,cAAa,GAClBn1D,KAAK0wC,OAAOltB,UAAY,GACxB,IAAK,MAAMtO,KAAKvR,EACRuR,aAAak0C,IACbppD,KAAK0wC,OAAO/5B,YAAY3W,KAAKq2D,eAAenhD,IAE5CA,aAAaw0C,IACb1pD,KAAK0wC,OAAO/5B,YAAY3W,KAAKs2D,aAAaphD,IAGlDlV,KAAK0wC,OAAO9yB,cAAc,IAAI9F,MAAM,WACpC9X,KAAKm1D,cAAa,EACtB,CACA,cAAAkB,CAAehN,GACX,MAAM8I,EAAanzD,SAASmK,cAAc,YAS1C,GARAgpD,EAAW7pC,GAAK+gC,EAAS/gC,GACzB6pC,EAAW7I,MAAQD,EAASC,MACxBD,EAASE,YACT4I,EAAWtmB,QAAQ0d,UAAY,QAET,QAAtBF,EAASI,WACT0I,EAAWtmB,QAAQ4d,SAAWJ,EAASI,UAEvCJ,EAASz5C,QACT,IAAK,MAAMwF,KAAKi0C,EAASz5C,QACrBuiD,EAAWx7C,YAAY3W,KAAKs2D,aAAalhD,IAGjD,OAAO+8C,CACX,CACA,YAAAmE,CAAaC,GACT,MAAM3D,EAAW5zD,SAASmK,cAAc,UAgCxC,OA/BAypD,EAAStqC,GAAKiuC,EAAKjuC,GACnBsqC,EAAS1zD,MAAQq3D,EAAKr3D,MACtB0zD,EAASpvC,UAAY+yC,EAAKhjD,KACR,KAAdgjD,EAAKv4C,MACL40C,EAASz5C,aAAa,YAAao9C,EAAKv4C,MAExCu4C,EAAK7hC,WACLk+B,EAASl+B,SAAW6hC,EAAK7hC,UAEzB6hC,EAAK/8C,WACLo5C,EAASp5C,UAAW,IAEH,IAAjB+8C,EAAK5M,UACLiJ,EAAS1gC,MAAMy3B,QAAU,QAEzB4M,EAAK7nC,aACLkkC,EAASz5C,aAAa,mBAAoB,QAE1Co9C,EAAK3M,WACLgJ,EAASz5C,aAAa,iBAAkB,QAExCo9C,EAAK1O,OACL0O,EAAK1O,MAAMz1C,MAAM,KAAKgxB,QAASozB,IAC3B5D,EAASxzD,UAAUqJ,IAAI+tD,KAG3BD,EAAK5yD,MAA6B,iBAAd4yD,EAAK5yD,MACzBsH,OAAO+H,KAAKujD,EAAK5yD,MAAMy/B,QAASn8B,IAC5B2rD,EAASz5C,aAAa,QAx7CtC,SAAmB+5C,GACf,MAAMrkD,EAASqkD,EAAI7pD,QAAQ,mCAAqCsK,GAAU,IAAMA,EAAMxO,eACtF,OAAO+tD,EAAI,KAAOA,EAAI,GAAGpxC,cAAgBjT,EAAOkE,UAAU,GAAKlE,CACnE,CAq7CgD4nD,CAAUxvD,GAAMsvD,EAAK5yD,KAAKsD,MAG3D2rD,CACX,CACA,OAAAK,GACIjzD,KAAKm1D,cAAa,GAClBn1D,KAAK0wC,OAAOlvC,oBAAoB,SAAUxB,KAAKg1D,YAAYn0D,KAAKb,OAC5DA,KAAKi7C,WACLj7C,KAAKi7C,SAAS/0C,aACdlG,KAAKi7C,SAAW,aAEbj7C,KAAK0wC,OAAO7E,QAAQvjB,GAC3BtoB,KAAKq1D,QACT,EAGJ,MAAMqB,GACF,WAAAh2D,CAAYi2D,GACR,IAAI58C,EAwCJ,GAvCA/Z,KAAKqF,OAAS,CACV0f,YAAQnlB,EACR0rD,aAAc,CAACN,EAAKjmC,KACiD,IAA1DimC,EAAIz3C,KAAKpO,cAAchC,QAAQ4hB,EAAO5f,eAEjDwnD,aAAS/sD,EACT4uD,kBAAc5uD,EACd+uD,iBAAa/uD,EACbg3D,gBAAYh3D,EACZi3D,eAAWj3D,EACXk3D,iBAAal3D,EACbm3D,gBAAYn3D,GAEhBI,KAAKg3D,aAAe3lD,GAAS,MACpBrR,KAAK4nD,SAAS9kD,QAAW9C,KAAK4nD,SAASG,aAG5C/nD,KAAKwqB,OAAOqjC,gBAEhB7tD,KAAKi3D,aAAe5lD,GAAS,MACpBrR,KAAK4nD,SAAS9kD,QAAW9C,KAAK4nD,SAASG,aAG5C/nD,KAAKwqB,OAAOqjC,gBAEhB7tD,KAAKk3D,cAAiBtoD,IACb5O,KAAK4nD,SAAS9kD,QAGf8L,EAAEsD,SArhDlB,SAAwBvI,EAAS8oB,GAC7B,SAAS0kC,EAASvoD,EAAG64B,GACjB,OAAIA,GAAK74B,GAAKA,EAAExP,WAAawP,EAAExP,UAAUmwB,SAASkY,IAG9CA,GAAK74B,GAAKA,EAAEi9B,SAAWj9B,EAAEi9B,QAAQvjB,IAAM1Z,EAAEi9B,QAAQvjB,KAAOmK,EAFjD7jB,EAKJ,IACX,CAYA,OAAOuoD,EAASxtD,EAAS8oB,IAXzB,SAAS2kC,EAAcxoD,EAAG64B,GACtB,OAAK74B,GAAKA,IAAM5P,SAGPm4D,EAASvoD,EAAG64B,GACV74B,EAGAwoD,EAAcxoD,EAAEyjB,WAAYoV,GAN5B,IAQf,CACuC2vB,CAAcztD,EAAS8oB,EAClE,CA+/C6B4kC,CAAezoD,EAAEsD,OAAQlS,KAAK4nD,SAASt/B,KACpDtoB,KAAKsE,MAAMsK,EAAE/I,OAGrB7F,KAAKs3D,uBAAyB,KACtBt4D,SAAS0X,QACT1W,KAAKsE,SAGbtE,KAAKu3D,SAAqC,iBAAlBZ,EAAOjmB,OAAsB1xC,SAAS6K,cAAc8sD,EAAOjmB,QAAUimB,EAAOjmB,QAC/F1wC,KAAKu3D,SAIN,YAHIZ,EAAOtxD,QAAUsxD,EAAOtxD,OAAOb,OAC/BmyD,EAAOtxD,OAAOb,MAAM,IAAI2iB,MAAM,mCAItC,GAA8B,WAA1BnnB,KAAKu3D,SAAS1jC,QAId,YAHI8iC,EAAOtxD,QAAUsxD,EAAOtxD,OAAOb,OAC/BmyD,EAAOtxD,OAAOb,MAAM,IAAI2iB,MAAM,iCAIlCnnB,KAAKu3D,SAAS1rB,QAAQ2rB,MACtBx3D,KAAKizD,UAETjzD,KAAK4nD,SAAW,IAAID,GAASgP,EAAO/O,UACpC,MAAM6P,EAAiB,CAAC,cAAe,aAAc,YAAa,cAAe,cACjF,IAAK,MAAMxwD,KAAO0vD,EAAOtxD,OAChBsxD,EAAOtxD,OAAO6F,eAAejE,MAGG,IAAjCwwD,EAAet0D,QAAQ8D,GACvBjH,KAAKqF,OAAO4B,GAAOoK,GAASslD,EAAOtxD,OAAO4B,GAAM,KAGhDjH,KAAKqF,OAAO4B,GAAO0vD,EAAOtxD,OAAO4B,IAGzCjH,KAAK4nD,SAASpuC,UAAuC,QAA1BO,EAAK48C,EAAO/O,gBAAkC,IAAZ7tC,OAAqB,EAAIA,EAAGP,UAAYm9C,EAAO/O,SAASpuC,SAAWxZ,KAAKu3D,SAAS/9C,SAC9IxZ,KAAK4nD,SAASE,WAAa9nD,KAAKu3D,SAASG,SACzC13D,KAAK4nD,SAAS11B,MAAQlyB,KAAKu3D,SAASrlC,MAAM+7B,QAC1CjuD,KAAK4nD,SAASC,MAAQ7nD,KAAKu3D,SAAS9kC,UAAUrgB,MAAM,KACpDpS,KAAK0wC,OAAS,IAAIokB,GAAO90D,KAAKu3D,UAC9Bv3D,KAAK0wC,OAAOylB,aAAan2D,KAAK4nD,SAASt/B,GAAItoB,KAAK4nD,SAAS11B,MAAOlyB,KAAK4nD,SAASC,OAC9E7nD,KAAK0wC,OAAO0kB,SACZp1D,KAAK0wC,OAAO4kB,cAAiBj3C,IACzBre,KAAKyuD,YAAYpwC,IAErBre,KAAK0wC,OAAOilB,cAAiBthD,IACzBrU,KAAK4nD,SAASC,MAAQxzC,EACtBrU,KAAKwqB,OAAOijC,qBAEhBztD,KAAK0wC,OAAOklB,iBAAoBp8C,IACxBA,EACAxZ,KAAKskC,UAGLtkC,KAAK2tD,UAGb3tD,KAAK0wC,OAAOmlB,gBAAmBlyD,IAC3B3D,KAAK+pD,QAAQpmD,IAEjB3D,KAAK2rD,MAAQ,IAAI9B,GAAM7pD,KAAK4nD,SAASE,WAAa,WAAa,SAAU6O,EAAOhzD,KAAOgzD,EAAOhzD,KAAO3D,KAAK0wC,OAAO8Z,WAC7GmM,EAAOhzD,MACP3D,KAAK0wC,OAAO0lB,cAAcp2D,KAAK2rD,MAAMnB,WAEzC,MAAMoB,EAAY,CACdtoD,KAAMtD,KAAKsD,KAAKzC,KAAKb,MACrBsE,MAAOtE,KAAKsE,MAAMzD,KAAKb,MACvB2sD,QAAS3sD,KAAKqF,OAAOsnD,QAAU3sD,KAAKqF,OAAOsnD,aAAU/sD,EACrD6uD,YAAazuD,KAAKyuD,YAAY5tD,KAAKb,MACnC0qD,UAAW1qD,KAAK0qD,UAAU7pD,KAAKb,MAC/B+kB,OAAQ/kB,KAAK+kB,OAAOlkB,KAAKb,MACzBwuD,aAAcxuD,KAAKqF,OAAOmpD,aAC1BG,YAAa3uD,KAAKqF,OAAOspD,aAE7B3uD,KAAKwqB,OAAS,IAAIkhC,GAAO1rD,KAAK4nD,SAAU5nD,KAAK2rD,MAAOC,GACpD5rD,KAAKwqB,OAAO4kC,eACZpvD,KAAKwqB,OAAOynC,cAAcjyD,KAAK2rD,MAAMnB,WACrC,MAAMmN,EAAkB33D,KAAKu3D,SAASztD,aAAa,cAC7C8tD,EAAuB53D,KAAKu3D,SAASztD,aAAa,mBACpD6tD,EACA33D,KAAKwqB,OAAOqhC,KAAKA,KAAK1yC,aAAa,aAAcw+C,GAE5CC,GACL53D,KAAKwqB,OAAOqhC,KAAKA,KAAK1yC,aAAa,kBAAmBy+C,GAEtD53D,KAAKu3D,SAASllC,YACdryB,KAAKu3D,SAASllC,WAAWL,aAAahyB,KAAKwqB,OAAOqhC,KAAKA,KAAM7rD,KAAKu3D,SAASj0B,aAE/EtkC,SAASoC,iBAAiB,QAASpB,KAAKk3D,eACxCx4D,OAAO0C,iBAAiB,SAAUpB,KAAKg3D,cAAc,GAClB,SAA/Bh3D,KAAK4nD,SAASc,cACdhqD,OAAO0C,iBAAiB,SAAUpB,KAAKi3D,cAAc,GAEzDj4D,SAASoC,iBAAiB,mBAAoBpB,KAAKs3D,wBAC/Ct3D,KAAK4nD,SAASpuC,UACdxZ,KAAKskC,UAELtkC,KAAK4nD,SAASK,YACdjoD,KAAKsD,OAETtD,KAAKu3D,SAASM,KAAO73D,IACzB,CACA,MAAA2tD,GACI3tD,KAAK4nD,SAASpuC,UAAW,EACzBxZ,KAAK0wC,OAAOid,SACZ3tD,KAAKwqB,OAAOmjC,QAChB,CACA,OAAArpB,GACItkC,KAAK4nD,SAASpuC,UAAW,EACzBxZ,KAAK0wC,OAAOpM,UACZtkC,KAAKwqB,OAAO8Z,SAChB,CACA,OAAAkmB,GACI,OAAOxqD,KAAK2rD,MAAMnB,SACtB,CACA,OAAAT,CAAQpmD,GACJ,MAAM+wB,EAAW10B,KAAK2rD,MAAMpB,cACtBuN,EAAM93D,KAAK2rD,MAAM3B,kBAAkBrmD,GACzC,GAAIm0D,EAIA,YAHI93D,KAAKqF,OAAOb,OACZxE,KAAKqF,OAAOb,MAAMszD,IAI1B93D,KAAK2rD,MAAM5B,QAAQpmD,GACnB,MAAMo0D,EAAY/3D,KAAK2rD,MAAMnB,UAC7BxqD,KAAK0wC,OAAO0lB,cAAc2B,GAC1B/3D,KAAKwqB,OAAO4kC,eACZpvD,KAAKwqB,OAAOynC,cAAc8F,GACtB/3D,KAAKqF,OAAOspD,cAAgBlH,GAAQ/yB,EAAU10B,KAAK2rD,MAAMpB,gBACzDvqD,KAAKqF,OAAOspD,YAAY3uD,KAAK2rD,MAAMZ,qBAE3C,CACA,WAAAR,GACI,OAAOvqD,KAAK2rD,MAAMpB,aACtB,CACA,WAAAkE,CAAYvvD,EAAO84D,GAAiB,GAChC,MAAMtjC,EAAW10B,KAAK2rD,MAAMpB,cAC5BvqD,KAAK2rD,MAAMrB,cAAc,QAAS59C,MAAM+H,QAAQvV,GAASA,EAAQ,CAACA,IAClE,MAAMyE,EAAO3D,KAAK2rD,MAAMnB,UACxBxqD,KAAK0wC,OAAO0lB,cAAczyD,GAC1B3D,KAAKwqB,OAAO4kC,eACmC,KAA3CpvD,KAAKwqB,OAAO1K,QAAQiF,OAAO5a,MAAMjL,MACjCc,KAAK+kB,OAAO/kB,KAAKwqB,OAAO1K,QAAQiF,OAAO5a,MAAMjL,OAG7Cc,KAAKwqB,OAAOynC,cAActuD,GAE1Bq0D,GAAkBh4D,KAAKqF,OAAOspD,cAAgBlH,GAAQ/yB,EAAU10B,KAAK2rD,MAAMpB,gBAC3EvqD,KAAKqF,OAAOspD,YAAY3uD,KAAK2rD,MAAMZ,qBAE3C,CACA,SAAAL,CAAUl2B,GACN,MAAME,EAAW10B,KAAK2rD,MAAMpB,cACvBvqD,KAAK2rD,MAAMlB,iBAAiB7iC,KAAMxS,IAAQ,IAAI2E,EAAI,OAAO3E,EAAElW,SAAmC,QAAvB6a,EAAKya,EAAOt1B,aAA+B,IAAZ6a,EAAgBA,EAAKya,EAAOjhB,SACnIvT,KAAK2rD,MAAMjB,UAAUl2B,GAEzB,MAAM7wB,EAAO3D,KAAK2rD,MAAMnB,UACxBxqD,KAAK0wC,OAAO0lB,cAAczyD,GAC1B3D,KAAKwqB,OAAO4kC,eACZpvD,KAAKwqB,OAAOynC,cAActuD,GACtB3D,KAAKqF,OAAOspD,cAAgBlH,GAAQ/yB,EAAU10B,KAAK2rD,MAAMpB,gBACzDvqD,KAAKqF,OAAOspD,YAAY3uD,KAAK2rD,MAAMZ,qBAE3C,CACA,IAAAznD,GACQtD,KAAK4nD,SAASpuC,UAAYxZ,KAAK4nD,SAAS9kD,SAGxC9C,KAAKqF,OAAOuxD,YACZ52D,KAAKqF,OAAOuxD,aAEhB52D,KAAKwqB,OAAOlnB,OACRtD,KAAK4nD,SAASM,YACdloD,KAAKwqB,OAAO2mC,cAEhBnxD,KAAK4nD,SAAS9kD,QAAS,EACvBb,WAAW,KACHjC,KAAKqF,OAAOwxD,WACZ72D,KAAKqF,OAAOwxD,YAEZ72D,KAAK4nD,SAAS9kD,SACd9C,KAAK4nD,SAASG,YAAa,IAEhC/nD,KAAK4nD,SAASqB,cACqB,aAAlCjpD,KAAK4nD,SAASa,kBACVzoD,KAAK4nD,SAASI,cACdx1B,cAAcxyB,KAAK4nD,SAASI,cAEhChoD,KAAK4nD,SAASI,aAAez1B,YAAYvyB,KAAKwqB,OAAOqjC,YAAYhtD,KAAKb,KAAKwqB,QAAS,MAE5F,CACA,KAAAlmB,CAAM2qD,EAAY,MACTjvD,KAAK4nD,SAAS9kD,SAAU9C,KAAK4nD,SAASK,aAGvCjoD,KAAKqF,OAAOyxD,aACZ92D,KAAKqF,OAAOyxD,cAEhB92D,KAAKwqB,OAAOlmB,QACmC,KAA3CtE,KAAKwqB,OAAO1K,QAAQiF,OAAO5a,MAAMjL,OACjCc,KAAK+kB,OAAO,IAEhB/kB,KAAKwqB,OAAOwkC,UAAUC,GACtBjvD,KAAK4nD,SAAS9kD,QAAS,EACvB9C,KAAK4nD,SAASG,YAAa,EAC3B9lD,WAAW,KACHjC,KAAKqF,OAAO0xD,YACZ/2D,KAAKqF,OAAO0xD,cAEjB/2D,KAAK4nD,SAASqB,cACbjpD,KAAK4nD,SAASI,cACdx1B,cAAcxyB,KAAK4nD,SAASI,cAEpC,CACA,MAAAjjC,CAAO7lB,GAIH,GAHIc,KAAKwqB,OAAO1K,QAAQiF,OAAO5a,MAAMjL,QAAUA,IAC3Cc,KAAKwqB,OAAO1K,QAAQiF,OAAO5a,MAAMjL,MAAQA,IAExCc,KAAKqF,OAAO0f,OAEb,YADA/kB,KAAKwqB,OAAOynC,cAAwB,KAAV/yD,EAAec,KAAK2rD,MAAMnB,UAAYxqD,KAAK2rD,MAAM5mC,OAAO7lB,EAAOc,KAAKqF,OAAOimD,eAGzGtrD,KAAKwqB,OAAOunC,kBACZ,MAAMkG,EAAaj4D,KAAKqF,OAAO0f,OAAO7lB,EAAOc,KAAK2rD,MAAMZ,sBACpDkN,aAAsB3/C,QACtB2/C,EACKr+B,KAAMj2B,IACP3D,KAAKwqB,OAAOynC,cAAcjyD,KAAK2rD,MAAMxB,kBAAkBxmD,MAEtDu0D,MAAOJ,IACR93D,KAAKwqB,OAAOgO,YAA2B,iBAARs/B,EAAmBA,EAAMA,EAAItyD,WAI3DkH,MAAM+H,QAAQwjD,GACnBj4D,KAAKwqB,OAAOynC,cAAcjyD,KAAK2rD,MAAMxB,kBAAkB8N,IAGvDj4D,KAAKwqB,OAAOgO,YAAY,yDAEhC,CACA,OAAAy6B,GACIj0D,SAASwC,oBAAoB,QAASxB,KAAKk3D,eAC3Cx4D,OAAO8C,oBAAoB,SAAUxB,KAAKg3D,cAAc,GACrB,SAA/Bh3D,KAAK4nD,SAASc,cACdhqD,OAAO8C,oBAAoB,SAAUxB,KAAKi3D,cAAc,GAE5Dj4D,SAASwC,oBAAoB,mBAAoBxB,KAAKs3D,wBACtDt3D,KAAK2rD,MAAM5B,QAAQ,IACnB/pD,KAAKwqB,OAAOyoC,UACZjzD,KAAK0wC,OAAOuiB,SAChB,ECjxDJ,SAASnoD,GAAMy4C,GACb,OAAOA,EAAI,GAAM,CACnB,CCDAjW,GAAYsZ,SAAS,QCLrB,cAA6BrB,GAC3B,OAAAh8C,GACEvJ,KAAK2J,QAAQoT,YAAc,cAC7B,IDKFuwB,GAAYsZ,SAAS,cEPrB,cAA6BrB,GAC3B,OAAAh8C,GACE,IAAImtD,GAAW,CACbhmB,OAAQ1wC,KAAK2J,QACbi+C,SAAU,CACRe,gBAAiB,kBAGvB,CAEA,MAAAwP,CAAO1yD,GACL,MAAM2yD,EAAU3yD,EAAMyM,OAAOhT,MACvBm5D,EAAe5yD,EAAMyM,OAAO25B,QAAQysB,KACpCl0D,EAAMqB,EAAMyM,OAAO25B,QAAQznC,IAC3Bic,EAAS5a,EAAMyM,OAAO25B,QAAQxrB,OAC9BwZ,EAAQ76B,SAASC,eAAe,gBACtC46B,EAAM3gB,IAAM,aAAam/C,WAAsBD,sBAA4Bh0D,YAAcic,IACzFwZ,EAAM5zB,QACR,IFRFqnC,GAAYsZ,SAAS,QGXrB,cAA6BrB,GAC3BgT,eAAiB,CAAC,QAAS,QAE3B,IAAAj1D,CAAKmC,GACHA,EAAM6jB,iBACNtqB,SAASC,eAAe,cAAcC,MAAQuG,EAAM6rC,cAAczF,QAAQysB,KAC1Et5D,SAASC,eAAe,iBAAiBC,MAAQuG,EAAM6rC,cAAczF,QAAQ2sB,UAC7Ex4D,KAAKy4D,WAAWp4C,OAAS,QACzBrgB,KAAKy4D,WAAWrxD,OAAS,YAAY3B,EAAM6rC,cAAczF,QAAQysB,OAEjEt4D,KAAK04D,YAAYt5D,UAAUC,OAAO,SACpC,CAEA,KAAAiF,CAAMmB,GACJA,EAAM6jB,iBACNtpB,KAAK04D,YAAYt5D,UAAUC,OAAO,SACpC,IHFFiuC,GAAYsZ,SAAS,aIdrB,cAA6BrB,GAC3BjiD,KAAQmC,IACNA,EAAM6jB,iBACN,MAAMqvC,EAAmBlzD,EAAMyM,OAAgB,QAAa,UACtD0mD,EAAgBnzD,EAAMyM,OAAgB,QAAgB,aAE5DlT,SAAS6K,cAAc,0BAA0B3K,MAAQy5D,EACzD35D,SAAS6K,cAAc,6BAA6B3K,MAAQ05D,EAE5D55D,SAASC,eAAewG,EAAM6rC,cAAczF,QAAQvjB,IAAIlpB,UAAUmI,OAAO,WAG3EsxD,KAAO,KACLl5D,QAAQG,IAAId,SAAS2kB,iBAAiB,qBACtC3kB,SAAS2kB,iBAAiB,oBAAoByf,QAASj5B,IACrDA,EAAMqP,UAAW,IAEnBxa,SAAS2kB,iBAAiB,uBAAuByf,QAASj5B,IACxDA,EAAMqP,UAAW,IAEnBxa,SAAS2kB,iBAAiB,qBAAqByf,QAASj5B,IACtDA,EAAMqP,UAAW,IAEnBxa,SAAS6K,cAAc,iCAAiCzK,UAAUmI,OAAO,UACzEvI,SAAS6K,cAAc,8BAA8BzK,UAAUqJ,IAAI,WAGrEnE,MAASmB,IACPA,EAAM6jB,iBACNtqB,SAASC,eAAewG,EAAM6rC,cAAczF,QAAQvjB,IAAIlpB,UAAUqJ,IAAI,WAGxEqwD,UAAarzD,IACXA,EAAM6jB,iBACN,MAAMyvC,EAAkB/5D,SAAS6K,cAAc,4BAA4BkT,YAC3E/d,SAAS6K,cAAc,YAAYkT,YAAcg8C,KJlBrDzrB,GAAYsZ,SAAS,eKhBrB,cAA6BrB,GAC3B,OAAAh8C,GACE,IAAImtD,GAAW,CAAEhmB,OAAQ1wC,KAAK2J,UAE9B3K,SAASoC,iBAAiB,aAAc,KACtCpC,SAAS2kB,iBAAiB,iBAAiByf,QAASvJ,IAClDA,EAAM3gB,IAAM,kBAAkB2gB,EAAMgS,QAAQmtB,2BAA2Bn/B,EAAMgS,QAAQvjB,iBAEvFtpB,SAAS2kB,iBAAiB,eAAeyf,QAASvJ,IAChDA,EAAM3gB,IAAM,kBAAkB2gB,EAAMgS,QAAQmtB,2BAA2Bn/B,EAAMgS,QAAQvjB,eAEvF,MAAMuR,EAAQ76B,SAAS6K,cAAc,cACrCgwB,EAAM3gB,IAAM,kBAAkB2gB,EAAMgS,QAAQvjB,gBAEhD,CAEA,UAAA2wC,CAAWxzD,GACT,MAAMyzD,EAAOzzD,EAAMyM,OAAOhT,MACpBqc,EAASvc,SAASC,eAAe,gBACvCsc,EAAOnS,KAAO,4BAA4B8vD,IAC1C39C,EAAO9E,OACT,CAEA,mBAAA0iD,CAAoB1zD,GAClB,MAAM2zD,EAAS3zD,EAAMyM,OAAOmF,QAAQ,wBAC7BgiD,EAAQC,GAAYF,EAAOvvD,cAAc,iBAAiB3K,MAAMkT,MAAM,UACtEmnD,EAAMC,GAAUJ,EAAOvvD,cAAc,eAAe3K,MAAMkT,MAAM,SAEjEqnD,EAAMz6D,SAAS2kB,iBAAiB,2BAA2BlkB,OACjET,SAAS6K,cAAc,uBACpB6vD,mBAAmB,YAAa,kHAE4CD,6EACrEH,GAAY,mDACgBD,sDAA2DI,kEAC3DF,sDAAyDE,+DAI/Fz6D,SAAS6K,cAAc,qBACpB6vD,mBAAmB,YAAa,4BAA4BD,MAAQD,GAAU,gBACtE,IAAI9C,GAAW,CAAEhmB,OAAQ,kBACjC+d,YAAY,IACJ,IAAIiI,GAAW,CAAEhmB,OAAQ,gBACjC+d,YAAY,GACjB,CAEA,sBAAAkL,CAAuBl0D,GACrB,MAAMm0D,EAASn0D,EAAMyM,OAAO25B,QAAQvjB,GACrB7iB,EAAMyM,OAAOmF,QAAQ,OAC7B9P,SACPvI,SAASC,eAAe,MAAM26D,KAAUryD,QAC1C,CAEA,WAAAsyD,CAAYp0D,GACNA,EAAMyM,OAAO4nD,SACfr0D,EAAMyM,OAAOmF,QAAQ,YAAYjY,UAAUqJ,IAAI,iBAC/ChD,EAAMyM,OAAOoxB,YAAYlkC,UAAUmI,OAAO,YAE1C9B,EAAMyM,OAAOmF,QAAQ,YAAYjY,UAAUmI,OAAO,iBAClD9B,EAAMyM,OAAOoxB,YAAYlkC,UAAUqJ,IAAI,UAE3C,IL3CF6kC,GAAYsZ,SAAS,UMpBrB,cAA6BrB,GAE3BwU,UAAY,KACV/6D,SAASC,eAAe,cAAcG,UAAUmI,OAAO,WAGzDyyD,WAAa,KACXr6D,QAAQG,IAAI,eACZd,SAASC,eAAe,cAAcG,UAAUqJ,IAAI,WAGtD,aAAAwxD,CAAcx0D,GACZA,EAAM6jB,iBACN7jB,EAAM6oC,kBAGN,IAYI4rB,EAZA9zB,EAAY3gC,EAAMyM,OAAOmF,QAAQ,cACjC8iD,GAAmB,EAQvB,GANK/zB,IAEHA,EAAY3gC,EAAMyM,OAAOmF,QAAQ,MACjC8iD,GAAmB,IAGhB/zB,EAAW,OAIhB,GAAI+zB,EAAkB,CAEpB,MAAMC,EAAWh0B,EAAUv8B,cAAc,gBACzC,IAAKuwD,EAAU,OACfF,EAAQtoD,SAASwoD,EAASvuB,QAAQquB,MACpC,MAEEA,EAAQtoD,SAASw0B,EAAUyF,QAAQquB,OAGrC,IAAIG,EAAcj0B,EAAUk0B,mBAGxBC,EAAgB5wD,IAClB,GAAIwwD,EAAkB,CACpB,MAAMC,EAAWzwD,EAAQE,cAAc,gBACvC,OAAOuwD,EAAWxoD,SAASwoD,EAASvuB,QAAQquB,OAAS,IACvD,CACE,OAAOvwD,EAAQkiC,QAAQquB,MAAQtoD,SAASjI,EAAQkiC,QAAQquB,OAAS,MAKrE,IAAKG,EAAa,OAClB,MAAMG,EAAYD,EAAaF,GAC/B,GAAkB,OAAdG,GAAsBA,GAAaN,EAAO,OAG9C,MAAMO,EAAah1D,EAAMyM,OAAOmF,QAAQ,gBACxC,GAAIojD,EAAY,CACd,MAAMC,EAAeD,EAAW5wD,cAAc,oBACxC8wD,EAAgBF,EAAW5wD,cAAc,qBAC3C6wD,GAAcA,EAAat7D,UAAUC,OAAO,UAC5Cs7D,GAAeA,EAAcv7D,UAAUC,OAAO,SACpD,CAGA,GAAI86D,EAAkB,CACpB,MAAMS,EAAWx0B,EAAUv8B,cAAc,aACrC+wD,GACFA,EAASx7D,UAAUC,OAAO,SAE9B,CAGA,KAAOg7D,GAAa,CAClB,MAAMQ,EAAmBN,EAAaF,GACtC,GAAyB,OAArBQ,GAA6BA,GAAoBX,EAAO,MAE5DG,EAAYj7D,UAAUC,OAAO,UAC7Bg7D,EAAcA,EAAYC,kBAC5B,CACF,I,OP1EF,MAAMQ,GAAM,CAACvX,EAAG/2C,EAAGuuD,IAAM14D,KAAKmN,IAAInN,KAAKE,IAAIghD,EAAGwX,GAAIvuD,GAClD,SAASwuD,GAAIzX,GACX,OAAOuX,GAAIhwD,GAAU,KAAJy4C,GAAW,EAAG,IACjC,CAIA,SAAS0X,GAAI1X,GACX,OAAOuX,GAAIhwD,GAAU,IAAJy4C,GAAU,EAAG,IAChC,CACA,SAAS2X,GAAI3X,GACX,OAAOuX,GAAIhwD,GAAMy4C,EAAI,MAAQ,IAAK,EAAG,EACvC,CACA,SAAS4X,GAAI5X,GACX,OAAOuX,GAAIhwD,GAAU,IAAJy4C,GAAU,EAAG,IAChC,CAEA,MAAM6X,GAAQ,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAGC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIC,EAAG,GAAIxyD,EAAG,GAAIyE,EAAG,GAAI85B,EAAG,GAAIvyB,EAAG,GAAItG,EAAG,GAAI+sD,EAAG,IACrJC,GAAM,IAAI,oBACVC,GAAKluD,GAAKiuD,GAAQ,GAAJjuD,GACdmuD,GAAKnuD,GAAKiuD,IAAS,IAAJjuD,IAAa,GAAKiuD,GAAQ,GAAJjuD,GACrCouD,GAAKpuD,IAAW,IAAJA,IAAa,IAAY,GAAJA,GAgCvC,MAAMquD,GAAS,+GACf,SAASC,GAASlB,EAAGjzD,EAAG0E,GACtB,MAAMtD,EAAIpB,EAAIzF,KAAKE,IAAIiK,EAAG,EAAIA,GACxBmvD,EAAI,CAACxY,EAAGG,GAAKH,EAAI4X,EAAI,IAAM,KAAOvuD,EAAItD,EAAI7G,KAAKmN,IAAInN,KAAKE,IAAI+gD,EAAI,EAAG,EAAIA,EAAG,IAAK,GACrF,MAAO,CAACqY,EAAE,GAAIA,EAAE,GAAIA,EAAE,GACxB,CACA,SAASO,GAASnB,EAAGjzD,EAAGy7C,GACtB,MAAMoY,EAAI,CAACxY,EAAGG,GAAKH,EAAI4X,EAAI,IAAM,IAAMxX,EAAIA,EAAIz7C,EAAIzF,KAAKmN,IAAInN,KAAKE,IAAI+gD,EAAG,EAAIA,EAAG,GAAI,GACnF,MAAO,CAACqY,EAAE,GAAIA,EAAE,GAAIA,EAAE,GACxB,CACA,SAASQ,GAASpB,EAAGqB,EAAGzuD,GACtB,MAAM0uD,EAAMJ,GAASlB,EAAG,EAAG,IAC3B,IAAIv7D,EAMJ,IALI48D,EAAIzuD,EAAI,IACVnO,EAAI,GAAK48D,EAAIzuD,GACbyuD,GAAK58D,EACLmO,GAAKnO,GAEFA,EAAI,EAAGA,EAAI,EAAGA,IACjB68D,EAAI78D,IAAM,EAAI48D,EAAIzuD,EAClB0uD,EAAI78D,IAAM48D,EAEZ,OAAOC,CACT,CAUA,SAASC,GAAQ/Y,GACf,MACMgZ,EAAIhZ,EAAEgZ,EADE,IAERluD,EAAIk1C,EAAEl1C,EAFE,IAGRV,EAAI41C,EAAE51C,EAHE,IAIR6B,EAAMnN,KAAKmN,IAAI+sD,EAAGluD,EAAGV,GACrBpL,EAAMF,KAAKE,IAAIg6D,EAAGluD,EAAGV,GACrBnB,GAAKgD,EAAMjN,GAAO,EACxB,IAAIw4D,EAAGjzD,EAAGoN,EAOV,OANI1F,IAAQjN,IACV2S,EAAI1F,EAAMjN,EACVuF,EAAI0E,EAAI,GAAM0I,GAAK,EAAI1F,EAAMjN,GAAO2S,GAAK1F,EAAMjN,GAC/Cw4D,EArBJ,SAAkBwB,EAAGluD,EAAGV,EAAGuH,EAAG1F,GAC5B,OAAI+sD,IAAM/sD,GACCnB,EAAIV,GAAKuH,GAAM7G,EAAIV,EAAI,EAAI,GAElCU,IAAMmB,GACA7B,EAAI4uD,GAAKrnD,EAAI,GAEfqnD,EAAIluD,GAAK6G,EAAI,CACvB,CAaQsnD,CAASD,EAAGluD,EAAGV,EAAGuH,EAAG1F,GACzBurD,EAAQ,GAAJA,EAAS,IAER,CAAK,EAAJA,EAAOjzD,GAAK,EAAG0E,EACzB,CACA,SAASiwD,GAAMd,EAAGzyD,EAAGyE,EAAG85B,GACtB,OACE/6B,MAAM+H,QAAQvL,GACVyyD,EAAEzyD,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAChByyD,EAAEzyD,EAAGyE,EAAG85B,IACZv/B,IAAI+yD,GACR,CACA,SAASyB,GAAQ3B,EAAGjzD,EAAG0E,GACrB,OAAOiwD,GAAMR,GAAUlB,EAAGjzD,EAAG0E,EAC/B,CAOA,SAASmwD,GAAI5B,GACX,OAAQA,EAAI,IAAM,KAAO,GAC3B,CAiDA,MAAM7yD,GAAM,CACX8hB,EAAG,OACH4yC,EAAG,QACHC,EAAG,KACHC,EAAG,MACHC,EAAG,KACHC,EAAG,SACHC,EAAG,QACH5B,EAAG,KACH6B,EAAG,KACHC,EAAG,KACH7B,EAAG,KACHC,EAAG,QACHC,EAAG,QACH4B,EAAG,KACHC,EAAG,WACH5B,EAAG,KACH6B,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,KACHC,EAAG,QACHhC,EAAG,KACHiC,EAAG,KACHC,EAAG,OACHC,EAAG,KACHC,EAAG,QACHC,EAAG,MAEEC,GAAU,CACfC,OAAQ,SACRC,YAAa,SACbC,KAAM,OACNC,UAAW,SACXC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,MAAO,IACPC,aAAc,SACdC,GAAI,KACJC,QAAS,SACTC,KAAM,SACNC,UAAW,SACXC,OAAQ,SACRC,SAAU,SACVC,QAAS,SACTC,IAAK,SACLC,YAAa,SACbC,QAAS,SACTC,QAAS,SACTC,KAAM,OACNC,IAAK,KACLC,MAAO,OACPC,QAAS,SACTC,KAAM,SACNC,KAAM,OACNC,KAAM,SACNC,OAAQ,SACRC,QAAS,SACTC,SAAU,SACVC,OAAQ,SACRC,MAAO,SACPC,IAAK,SACLC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,MAAO,SACPC,MAAO,SACPC,IAAK,OACLC,OAAQ,SACRC,OAAQ,SACRC,SAAU,OACVC,OAAQ,SACRC,OAAQ,SACRC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,SAAU,SACVC,OAAQ,SACRC,QAAS,SACTC,UAAW,SACXC,IAAK,SACLC,OAAQ,SACRC,IAAK,SACLC,IAAK,OACLC,MAAO,SACPC,IAAK,SACLC,QAAS,SACTC,OAAQ,SACRC,QAAS,SACTC,MAAO,SACPC,KAAM,SACNC,MAAO,SACPC,OAAQ,SACRC,UAAW,SACXC,QAAS,SACTC,WAAY,SACZC,IAAK,SACLC,KAAM,SACNC,MAAO,SACPC,UAAW,SACXC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRC,MAAO,SACPC,MAAO,SACPC,QAAS,SACTC,IAAK,SACLC,KAAM,OACNC,QAAS,SACTC,IAAK,SACLC,OAAQ,SACRC,MAAO,SACPC,WAAY,SACZC,IAAK,KACLC,MAAO,SACPC,OAAQ,SACRC,OAAQ,SACRC,KAAM,SACNC,UAAW,OACXC,IAAK,SACLC,SAAU,SACVC,WAAY,SACZC,QAAS,SACTC,SAAU,SACVC,QAAS,SACTC,WAAY,SACZC,KAAM,KACNC,OAAQ,SACRC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,QAAS,SACTC,KAAM,SACNC,UAAW,SACXC,OAAQ,SACRC,MAAO,SACPC,WAAY,SACZC,UAAW,SACXC,QAAS,SACTC,KAAM,SACNC,IAAK,SACLC,KAAM,SACNC,QAAS,SACTC,MAAO,SACPC,YAAa,SACbC,GAAI,SACJC,SAAU,SACVC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,UAAW,SACXC,MAAO,SACPC,QAAS,SACTC,MAAO,SACPC,OAAQ,SACRC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,KAAM,SACNC,KAAM,SACNC,SAAU,OACVC,OAAQ,SACRC,IAAK,SACLC,IAAK,OACLC,MAAO,SACPC,OAAQ,SACRC,GAAI,SACJC,MAAO,SACPC,IAAK,SACLC,KAAM,SACNC,UAAW,SACXC,GAAI,SACJC,MAAO,UAmBR,IAAIj7D,GAeJ,MAAMk7D,GAAS,uGAiCTC,GAAK/jB,GAAKA,GAAK,SAAgB,MAAJA,EAAqC,MAAzBlhD,KAAKC,IAAIihD,EAAG,EAAM,KAAe,KACxE1kC,GAAO0kC,GAAKA,GAAK,OAAUA,EAAI,MAAQlhD,KAAKC,KAAKihD,EAAI,MAAS,MAAO,KAa3E,SAASgkB,GAAOhkB,EAAG/jD,EAAGgoE,GACpB,GAAIjkB,EAAG,CACL,IAAIkkB,EAAMnL,GAAQ/Y,GAClBkkB,EAAIjoE,GAAK6C,KAAKmN,IAAI,EAAGnN,KAAKE,IAAIklE,EAAIjoE,GAAKioE,EAAIjoE,GAAKgoE,EAAa,IAANhoE,EAAU,IAAM,IACvEioE,EAAM/K,GAAQ+K,GACdlkB,EAAEgZ,EAAIkL,EAAI,GACVlkB,EAAEl1C,EAAIo5D,EAAI,GACVlkB,EAAE51C,EAAI85D,EAAI,EACZ,CACF,CACA,SAASlrD,GAAMgnC,EAAGmkB,GAChB,OAAOnkB,EAAIt4C,OAAOuc,OAAOkgD,GAAS,CAAC,EAAGnkB,GAAKA,CAC7C,CACA,SAASokB,GAAWx9D,GAClB,IAAIo5C,EAAI,CAACgZ,EAAG,EAAGluD,EAAG,EAAGV,EAAG,EAAGzE,EAAG,KAY9B,OAXIwD,MAAM+H,QAAQtK,GACZA,EAAM1K,QAAU,IAClB8jD,EAAI,CAACgZ,EAAGpyD,EAAM,GAAIkE,EAAGlE,EAAM,GAAIwD,EAAGxD,EAAM,GAAIjB,EAAG,KAC3CiB,EAAM1K,OAAS,IACjB8jD,EAAEr6C,EAAI+xD,GAAI9wD,EAAM,OAIpBo5C,EAAIhnC,GAAMpS,EAAO,CAACoyD,EAAG,EAAGluD,EAAG,EAAGV,EAAG,EAAGzE,EAAG,KACrCA,EAAI+xD,GAAI1X,EAAEr6C,GAEPq6C,CACT,CACA,SAASqkB,GAAc1U,GACrB,MAAsB,MAAlBA,EAAI9jD,OAAO,GA3EjB,SAAkB8jD,GAChB,MAAMrqB,EAAIw+B,GAAOQ,KAAK3U,GACtB,IACIqJ,EAAGluD,EAAGV,EADNzE,EAAI,IAER,GAAK2/B,EAAL,CAGA,GAAIA,EAAE,KAAO0zB,EAAG,CACd,MAAMhZ,GAAK1a,EAAE,GACb3/B,EAAI2/B,EAAE,GAAKmyB,GAAIzX,GAAKuX,GAAQ,IAAJvX,EAAS,EAAG,IACtC,CAOA,OANAgZ,GAAK1zB,EAAE,GACPx6B,GAAKw6B,EAAE,GACPl7B,GAAKk7B,EAAE,GACP0zB,EAAI,KAAO1zB,EAAE,GAAKmyB,GAAIuB,GAAKzB,GAAIyB,EAAG,EAAG,MACrCluD,EAAI,KAAOw6B,EAAE,GAAKmyB,GAAI3sD,GAAKysD,GAAIzsD,EAAG,EAAG,MACrCV,EAAI,KAAOk7B,EAAE,GAAKmyB,GAAIrtD,GAAKmtD,GAAIntD,EAAG,EAAG,MAC9B,CACL4uD,EAAGA,EACHluD,EAAGA,EACHV,EAAGA,EACHzE,EAAGA,EAfL,CAiBF,CAqDW4+D,CAAS5U,GAhVpB,SAAkBA,GAChB,MAAMrqB,EAAImzB,GAAO6L,KAAK3U,GACtB,IACI3P,EADAr6C,EAAI,IAER,IAAK2/B,EACH,OAEEA,EAAE,KAAO0a,IACXr6C,EAAI2/B,EAAE,GAAKmyB,IAAKnyB,EAAE,IAAMoyB,IAAKpyB,EAAE,KAEjC,MAAMkyB,EAAI4B,IAAK9zB,EAAE,IACXk/B,GAAMl/B,EAAE,GAAK,IACbm/B,GAAMn/B,EAAE,GAAK,IAQnB,OANE0a,EADW,QAAT1a,EAAE,GAtBR,SAAiBkyB,EAAGqB,EAAGzuD,GACrB,OAAO8uD,GAAMN,GAAUpB,EAAGqB,EAAGzuD,EAC/B,CAqBQs6D,CAAQlN,EAAGgN,EAAIC,GACD,QAATn/B,EAAE,GArBf,SAAiBkyB,EAAGjzD,EAAGy7C,GACrB,OAAOkZ,GAAMP,GAAUnB,EAAGjzD,EAAGy7C,EAC/B,CAoBQ2kB,CAAQnN,EAAGgN,EAAIC,GAEftL,GAAQ3B,EAAGgN,EAAIC,GAEd,CACLzL,EAAGhZ,EAAE,GACLl1C,EAAGk1C,EAAE,GACL51C,EAAG41C,EAAE,GACLr6C,EAAGA,EAEP,CAwTSi/D,CAASjV,EAClB,CACA,MAAMkV,GACJ,WAAA1nE,CAAYyJ,GACV,GAAIA,aAAiBi+D,GACnB,OAAOj+D,EAET,MAAMtE,SAAcsE,EACpB,IAAIo5C,EA7bR,IAAkB2P,EAEZmV,EADAn7D,EA6bW,WAATrH,EACF09C,EAAIokB,GAAWx9D,GACG,WAATtE,IA/bTqH,GADYgmD,EAicC/oD,GAhcH1K,OAEC,MAAXyzD,EAAI,KACM,IAARhmD,GAAqB,IAARA,EACfm7D,EAAM,CACJ9L,EAAG,IAAsB,GAAhBnB,GAAMlI,EAAI,IACnB7kD,EAAG,IAAsB,GAAhB+sD,GAAMlI,EAAI,IACnBvlD,EAAG,IAAsB,GAAhBytD,GAAMlI,EAAI,IACnBhqD,EAAW,IAARgE,EAA4B,GAAhBkuD,GAAMlI,EAAI,IAAW,KAErB,IAARhmD,GAAqB,IAARA,IACtBm7D,EAAM,CACJ9L,EAAGnB,GAAMlI,EAAI,KAAO,EAAIkI,GAAMlI,EAAI,IAClC7kD,EAAG+sD,GAAMlI,EAAI,KAAO,EAAIkI,GAAMlI,EAAI,IAClCvlD,EAAGytD,GAAMlI,EAAI,KAAO,EAAIkI,GAAMlI,EAAI,IAClChqD,EAAW,IAARgE,EAAakuD,GAAMlI,EAAI,KAAO,EAAIkI,GAAMlI,EAAI,IAAO,OAibxD3P,EA7aG8kB,GAoUT,SAAmBnV,GACZ/mD,KACHA,GApBJ,WACE,MAAMm8D,EAAW,CAAC,EACZt1D,EAAO/H,OAAO+H,KAAKgrD,IACnBuK,EAAQt9D,OAAO+H,KAAK9K,IAC1B,IAAI1I,EAAG8N,EAAGg2C,EAAG1nC,EAAI4sD,EACjB,IAAKhpE,EAAI,EAAGA,EAAIwT,EAAKvT,OAAQD,IAAK,CAEhC,IADAoc,EAAK4sD,EAAKx1D,EAAKxT,GACV8N,EAAI,EAAGA,EAAIi7D,EAAM9oE,OAAQ6N,IAC5Bg2C,EAAIilB,EAAMj7D,GACVk7D,EAAKA,EAAGn/D,QAAQi6C,EAAGp7C,GAAIo7C,IAEzBA,EAAI1xC,SAASosD,GAAQpiD,GAAK,IAC1B0sD,EAASE,GAAM,CAACllB,GAAK,GAAK,IAAMA,GAAK,EAAI,IAAU,IAAJA,EACjD,CACA,OAAOglB,CACT,CAKYG,GACRt8D,GAAMu8D,YAAc,CAAC,EAAG,EAAG,EAAG,IAEhC,MAAMx/D,EAAIiD,GAAM+mD,EAAI/tD,eACpB,OAAO+D,GAAK,CACVqzD,EAAGrzD,EAAE,GACLmF,EAAGnF,EAAE,GACLyE,EAAGzE,EAAE,GACLA,EAAgB,IAAbA,EAAEzJ,OAAeyJ,EAAE,GAAK,IAE/B,CA6F6By/D,CAAUx+D,IAAUy9D,GAAcz9D,IAE3DnK,KAAK4oE,KAAOrlB,EACZvjD,KAAK6oE,SAAWtlB,CAClB,CACA,SAAIulB,GACF,OAAO9oE,KAAK6oE,MACd,CACA,OAAIxM,GACF,IAAI9Y,EAAIhnC,GAAMvc,KAAK4oE,MAInB,OAHIrlB,IACFA,EAAEr6C,EAAIgyD,GAAI3X,EAAEr6C,IAEPq6C,CACT,CACA,OAAI8Y,CAAI5mD,GACNzV,KAAK4oE,KAAOjB,GAAWlyD,EACzB,CACA,SAAAszD,GACE,OAAO/oE,KAAK6oE,OArFhB,SAAmBtlB,GACjB,OAAOA,IACLA,EAAEr6C,EAAI,IACF,QAAQq6C,EAAEgZ,MAAMhZ,EAAEl1C,MAAMk1C,EAAE51C,MAAMutD,GAAI3X,EAAEr6C,MACtC,OAAOq6C,EAAEgZ,MAAMhZ,EAAEl1C,MAAMk1C,EAAE51C,KAEjC,CA+EyBo7D,CAAU/oE,KAAK4oE,WAAQhpE,CAC9C,CACA,SAAAopE,GACE,OAAOhpE,KAAK6oE,OAhchB,SAAmBtlB,GACjB,IAAIoY,EAzBUpY,IAAKwY,GAAGxY,EAAEgZ,IAAMR,GAAGxY,EAAEl1C,IAAM0tD,GAAGxY,EAAE51C,IAAMouD,GAAGxY,EAAEr6C,GAyBjD+/D,CAAQ1lB,GAAKsY,GAAKC,GAC1B,OAAOvY,EACH,IAAMoY,EAAEpY,EAAEgZ,GAAKZ,EAAEpY,EAAEl1C,GAAKstD,EAAEpY,EAAE51C,GAJpB,EAACzE,EAAGyyD,IAAMzyD,EAAI,IAAMyyD,EAAEzyD,GAAK,GAIFggE,CAAM3lB,EAAEr6C,EAAGyyD,QAC5C/7D,CACN,CA2byBopE,CAAUhpE,KAAK4oE,WAAQhpE,CAC9C,CACA,SAAAupE,GACE,OAAOnpE,KAAK6oE,OApVhB,SAAmBtlB,GACjB,IAAKA,EACH,OAEF,MAAMr6C,EAAIozD,GAAQ/Y,GACZwX,EAAI7xD,EAAE,GACNpB,EAAIqzD,GAAIjyD,EAAE,IACVsD,EAAI2uD,GAAIjyD,EAAE,IAChB,OAAOq6C,EAAEr6C,EAAI,IACT,QAAQ6xD,MAAMjzD,OAAO0E,OAAO0uD,GAAI3X,EAAEr6C,MAClC,OAAO6xD,MAAMjzD,OAAO0E,KAC1B,CAyUyB28D,CAAUnpE,KAAK4oE,WAAQhpE,CAC9C,CACA,GAAAwpE,CAAIC,EAAOC,GACT,GAAID,EAAO,CACT,MAAME,EAAKvpE,KAAKq8D,IACVmN,EAAKH,EAAMhN,IACjB,IAAIoN,EACJ,MAAMC,EAAIJ,IAAWG,EAAK,GAAMH,EAC1BlN,EAAI,EAAIsN,EAAI,EACZxgE,EAAIqgE,EAAGrgE,EAAIsgE,EAAGtgE,EACdygE,IAAOvN,EAAIlzD,KAAO,EAAIkzD,GAAKA,EAAIlzD,IAAM,EAAIkzD,EAAIlzD,IAAM,GAAK,EAC9DugE,EAAK,EAAIE,EACTJ,EAAGhN,EAAI,IAAOoN,EAAKJ,EAAGhN,EAAIkN,EAAKD,EAAGjN,EAAI,GACtCgN,EAAGl7D,EAAI,IAAOs7D,EAAKJ,EAAGl7D,EAAIo7D,EAAKD,EAAGn7D,EAAI,GACtCk7D,EAAG57D,EAAI,IAAOg8D,EAAKJ,EAAG57D,EAAI87D,EAAKD,EAAG77D,EAAI,GACtC47D,EAAGrgE,EAAIwgE,EAAIH,EAAGrgE,GAAK,EAAIwgE,GAAKF,EAAGtgE,EAC/BlJ,KAAKq8D,IAAMkN,CACb,CACA,OAAOvpE,IACT,CACA,WAAAwe,CAAY6qD,EAAOO,GAIjB,OAHIP,IACFrpE,KAAK4oE,KAvGX,SAAqBiB,EAAMC,EAAMF,GAC/B,MAAMrN,EAAI19C,GAAKq8C,GAAI2O,EAAKtN,IAClBluD,EAAIwQ,GAAKq8C,GAAI2O,EAAKx7D,IAClBV,EAAIkR,GAAKq8C,GAAI2O,EAAKl8D,IACxB,MAAO,CACL4uD,EAAGtB,GAAIqM,GAAG/K,EAAIqN,GAAK/qD,GAAKq8C,GAAI4O,EAAKvN,IAAMA,KACvCluD,EAAG4sD,GAAIqM,GAAGj5D,EAAIu7D,GAAK/qD,GAAKq8C,GAAI4O,EAAKz7D,IAAMA,KACvCV,EAAGstD,GAAIqM,GAAG35D,EAAIi8D,GAAK/qD,GAAKq8C,GAAI4O,EAAKn8D,IAAMA,KACvCzE,EAAG2gE,EAAK3gE,EAAI0gE,GAAKE,EAAK5gE,EAAI2gE,EAAK3gE,GAEnC,CA6FkB,CAAYlJ,KAAK4oE,KAAMS,EAAMT,KAAMgB,IAE1C5pE,IACT,CACA,KAAAuc,GACE,OAAO,IAAI6rD,GAAMpoE,KAAKq8D,IACxB,CACA,KAAA6M,CAAMhgE,GAEJ,OADAlJ,KAAK4oE,KAAK1/D,EAAI+xD,GAAI/xD,GACXlJ,IACT,CACA,OAAA+pE,CAAQvC,GAGN,OAFYxnE,KAAK4oE,KACb1/D,GAAK,EAAIs+D,EACNxnE,IACT,CACA,SAAAgqE,GACE,MAAM3N,EAAMr8D,KAAK4oE,KACXqB,EAAMn/D,GAAc,GAARuxD,EAAIE,EAAkB,IAARF,EAAIhuD,EAAmB,IAARguD,EAAI1uD,GAEnD,OADA0uD,EAAIE,EAAIF,EAAIhuD,EAAIguD,EAAI1uD,EAAIs8D,EACjBjqE,IACT,CACA,OAAAkqE,CAAQ1C,GAGN,OAFYxnE,KAAK4oE,KACb1/D,GAAK,EAAIs+D,EACNxnE,IACT,CACA,MAAAmqE,GACE,MAAM5mB,EAAIvjD,KAAK4oE,KAIf,OAHArlB,EAAEgZ,EAAI,IAAMhZ,EAAEgZ,EACdhZ,EAAEl1C,EAAI,IAAMk1C,EAAEl1C,EACdk1C,EAAE51C,EAAI,IAAM41C,EAAE51C,EACP3N,IACT,CACA,OAAAoqE,CAAQ5C,GAEN,OADAD,GAAOvnE,KAAK4oE,KAAM,EAAGpB,GACdxnE,IACT,CACA,MAAAqqE,CAAO7C,GAEL,OADAD,GAAOvnE,KAAK4oE,KAAM,GAAIpB,GACfxnE,IACT,CACA,QAAAsqE,CAAS9C,GAEP,OADAD,GAAOvnE,KAAK4oE,KAAM,EAAGpB,GACdxnE,IACT,CACA,UAAAuqE,CAAW/C,GAET,OADAD,GAAOvnE,KAAK4oE,KAAM,GAAIpB,GACfxnE,IACT,CACA,MAAAwqE,CAAOC,GAEL,OAtaJ,SAAgBlnB,EAAGknB,GACjB,IAAI1P,EAAIuB,GAAQ/Y,GAChBwX,EAAE,GAAK4B,GAAI5B,EAAE,GAAK0P,GAClB1P,EAAI2B,GAAQ3B,GACZxX,EAAEgZ,EAAIxB,EAAE,GACRxX,EAAEl1C,EAAI0sD,EAAE,GACRxX,EAAE51C,EAAIotD,EAAE,EACV,CA8ZIyP,CAAOxqE,KAAK4oE,KAAM6B,GACXzqE,IACT,EQzjBE,SAAS0qE,KACF,CAGP,MAAMC,GAAM,MACZ,IAAIriD,EAAK,EACT,MAAO,IAAIA,GACd,EAHe,GAQZ,SAASsiD,GAAc1rE,GACvB,OAAOA,OACX,CAKI,SAASuV,GAAQvV,GACjB,GAAIwN,MAAM+H,SAAW/H,MAAM+H,QAAQvV,GAC/B,OAAO,EAEX,MAAM2G,EAAOoF,OAAO1F,UAAUiJ,SAASzJ,KAAK7F,GAC5C,MAAyB,YAArB2G,EAAK3C,MAAM,EAAG,IAAuC,WAAnB2C,EAAK3C,OAAO,EAItD,CAKI,SAASmM,GAASnQ,GAClB,OAAiB,OAAVA,GAA4D,oBAA1C+L,OAAO1F,UAAUiJ,SAASzJ,KAAK7F,EAC5D,CAII,SAAS2rE,GAAe3rE,GACxB,OAAyB,iBAAVA,GAAsBA,aAAiBkL,SAAW0gE,UAAU5rE,EAC/E,CAKI,SAAS6rE,GAAgB7rE,EAAO65C,GAChC,OAAO8xB,GAAe3rE,GAASA,EAAQ65C,CAC3C,CAKI,SAASiyB,GAAe9rE,EAAO65C,GAC/B,YAAwB,IAAV75C,EAAwB65C,EAAe75C,CACzD,CACA,MACM+rE,GAAc,CAAC/rE,EAAOgsE,IAA6B,iBAAVhsE,GAAsBA,EAAM8b,SAAS,KAAOmwD,WAAWjsE,GAAS,IAAMgsE,GAAahsE,EAO9H,SAAS8uB,GAAS1iB,EAAIxC,EAAMyH,GAC5B,GAAIjF,GAAyB,mBAAZA,EAAGvG,KAChB,OAAOuG,EAAG+B,MAAMkD,EAASzH,EAEjC,CACA,SAASsiE,GAAKC,EAAU//D,EAAIiF,EAAS+pC,GACjC,IAAI96C,EAAG0N,EAAK8F,EACZ,GAAIyB,GAAQ42D,GAER,GADAn+D,EAAMm+D,EAAS5rE,OACX66C,EACA,IAAI96C,EAAI0N,EAAM,EAAG1N,GAAK,EAAGA,IACrB8L,EAAGvG,KAAKwL,EAAS86D,EAAS7rE,GAAIA,QAGlC,IAAIA,EAAI,EAAGA,EAAI0N,EAAK1N,IAChB8L,EAAGvG,KAAKwL,EAAS86D,EAAS7rE,GAAIA,QAGnC,GAAI6P,GAASg8D,GAGhB,IAFAr4D,EAAO/H,OAAO+H,KAAKq4D,GACnBn+D,EAAM8F,EAAKvT,OACPD,EAAI,EAAGA,EAAI0N,EAAK1N,IAChB8L,EAAGvG,KAAKwL,EAAS86D,EAASr4D,EAAKxT,IAAKwT,EAAKxT,GAGrD,CAMI,SAAS8rE,GAAeC,EAAI1+D,GAC5B,IAAIrN,EAAGgsE,EAAMC,EAAIC,EACjB,IAAKH,IAAO1+D,GAAM0+D,EAAG9rE,SAAWoN,EAAGpN,OAC/B,OAAO,EAEX,IAAID,EAAI,EAAGgsE,EAAOD,EAAG9rE,OAAQD,EAAIgsE,IAAQhsE,EAGrC,GAFAisE,EAAKF,EAAG/rE,GACRksE,EAAK7+D,EAAGrN,GACJisE,EAAGE,eAAiBD,EAAGC,cAAgBF,EAAGt8D,QAAUu8D,EAAGv8D,MACvD,OAAO,EAGf,OAAO,CACX,CAII,SAAS,GAAMolB,GACf,GAAI9f,GAAQ8f,GACR,OAAOA,EAAOrsB,IAAI,IAEtB,GAAImH,GAASklB,GAAS,CAClB,MAAMriB,EAASjH,OAAO3C,OAAO,MACvB0K,EAAO/H,OAAO+H,KAAKuhB,GACnBq3C,EAAO54D,EAAKvT,OAClB,IAAI6jD,EAAI,EACR,KAAMA,EAAIsoB,IAAQtoB,EACdpxC,EAAOc,EAAKswC,IAAM,GAAM/uB,EAAOvhB,EAAKswC,KAExC,OAAOpxC,CACX,CACA,OAAOqiB,CACX,CACA,SAASs3C,GAAW5kE,GAChB,OAIoB,IAJb,CACH,YACA,YACA,eACF9D,QAAQ8D,EACd,CAKI,SAAS6kE,GAAQ7kE,EAAKiL,EAAQqiB,EAAQ3kB,GACtC,IAAKi8D,GAAW5kE,GACZ,OAEJ,MAAM8kE,EAAO75D,EAAOjL,GACd+kE,EAAOz3C,EAAOttB,GAChBoI,GAAS08D,IAAS18D,GAAS28D,GAE3BC,GAAMF,EAAMC,EAAMp8D,GAElBsC,EAAOjL,GAAO,GAAM+kE,EAE5B,CACA,SAASC,GAAM/5D,EAAQqiB,EAAQ3kB,GAC3B,MAAMmvB,EAAUtqB,GAAQ8f,GAAUA,EAAS,CACvCA,GAEEi3C,EAAOzsC,EAAQt/B,OACrB,IAAK4P,GAAS6C,GACV,OAAOA,EAGX,MAAMg6D,GADNt8D,EAAUA,GAAW,CAAC,GACCs8D,QAAUJ,GACjC,IAAIK,EACJ,IAAI,IAAI3sE,EAAI,EAAGA,EAAIgsE,IAAQhsE,EAAE,CAEzB,GADA2sE,EAAUptC,EAAQv/B,IACb6P,GAAS88D,GACV,SAEJ,MAAMn5D,EAAO/H,OAAO+H,KAAKm5D,GACzB,IAAI,IAAI7oB,EAAI,EAAGsoB,EAAO54D,EAAKvT,OAAQ6jD,EAAIsoB,IAAQtoB,EAC3C4oB,EAAOl5D,EAAKswC,GAAIpxC,EAAQi6D,EAASv8D,EAEzC,CACA,OAAOsC,CACX,CACA,SAASk6D,GAAQl6D,EAAQqiB,GAErB,OAAO03C,GAAM/5D,EAAQqiB,EAAQ,CACzB23C,OAAQG,IAEhB,CAII,SAASA,GAAUplE,EAAKiL,EAAQqiB,GAChC,IAAKs3C,GAAW5kE,GACZ,OAEJ,MAAM8kE,EAAO75D,EAAOjL,GACd+kE,EAAOz3C,EAAOttB,GAChBoI,GAAS08D,IAAS18D,GAAS28D,GAC3BI,GAAQL,EAAMC,GACN/gE,OAAO1F,UAAU2F,eAAenG,KAAKmN,EAAQjL,KACrDiL,EAAOjL,GAAO,GAAM+kE,GAE5B,CASA,MAAMM,GAAe,CAEjB,GAAK/oB,GAAIA,EAETv5B,EAAI5U,GAAIA,EAAE4U,EACVC,EAAI7U,GAAIA,EAAE6U,GA+Bd,SAASsiD,GAAiB92D,EAAKxO,GAC3B,MAAMulE,EAAWF,GAAarlE,KAASqlE,GAAarlE,GAbxD,SAAyBA,GACrB,MAAM+L,EAhBN,SAAmB/L,GACnB,MAAMyM,EAAQzM,EAAImL,MAAM,KAClBY,EAAO,GACb,IAAIy0D,EAAM,GACV,IAAK,MAAMgF,KAAQ/4D,EACf+zD,GAAOgF,EACHhF,EAAIzsD,SAAS,MACbysD,EAAMA,EAAIvkE,MAAM,GAAI,GAAK,KAEzB8P,EAAK9S,KAAKunE,GACVA,EAAM,IAGd,OAAOz0D,CACX,CAEiB05D,CAAUzlE,GACvB,OAAQwO,IACJ,IAAK,MAAM6tC,KAAKtwC,EAAK,CACjB,GAAU,KAANswC,EACA,MAEJ7tC,EAAMA,GAAOA,EAAI6tC,EACrB,CACA,OAAO7tC,EAEf,CAE+Dk3D,CAAgB1lE,IAC3E,OAAOulE,EAAS/2D,EACpB,CAGI,SAASm3D,GAAY1Z,GACrB,OAAOA,EAAI9jD,OAAO,GAAG0S,cAAgBoxC,EAAIhwD,MAAM,EACnD,CACA,MAAM2pE,GAAW3tE,QAAyB,IAAVA,EAC1B4tE,GAAc5tE,GAAyB,mBAAVA,EAE7B6tE,GAAY,CAAC7jE,EAAGyE,KAClB,GAAIzE,EAAE64B,OAASp0B,EAAEo0B,KACb,OAAO,EAEX,IAAK,MAAMirC,KAAQ9jE,EACf,IAAKyE,EAAE3C,IAAIgiE,GACP,OAAO,EAGf,OAAO,GAYDC,GAAK5qE,KAAK4qE,GACdC,GAAM,EAAID,GACVE,GAAQD,GAAMD,GACdG,GAAWhjE,OAAOijE,kBAClBC,GAAcL,GAAK,IACnBM,GAAUN,GAAK,EACfO,GAAaP,GAAK,EAClBQ,GAAqB,EAALR,GAAS,EACzBS,GAAQrrE,KAAKqrE,MACbC,GAAOtrE,KAAKsrE,KAClB,SAASC,GAAa5jD,EAAGC,EAAG4jD,GACxB,OAAOxrE,KAAKoI,IAAIuf,EAAIC,GAAK4jD,CAC7B,CAGI,SAASC,GAAQC,GACjB,MAAMC,EAAe3rE,KAAKyI,MAAMijE,GAChCA,EAAQH,GAAaG,EAAOC,EAAcD,EAAQ,KAAQC,EAAeD,EACzE,MAAME,EAAY5rE,KAAKC,IAAI,GAAID,KAAKuI,MAAM8iE,GAAMK,KAC1CG,EAAWH,EAAQE,EAEzB,OADqBC,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAIA,GAAY,EAAI,EAAI,IAC3DD,CAC1B,CAyBA,SAASE,GAAShrB,GACd,OAJA,SAAwBA,GACxB,MAAoB,iBAANA,GAA+B,iBAANA,GAAwB,OAANA,KAAgBv1C,OAAOwgE,eAAejrB,GAAK,aAAcA,GAAK,YAAaA,EACxI,CAEYkrB,CAAelrB,KAAO94C,MAAM8gE,WAAWhoB,KAAO2nB,SAAS3nB,EACnE,CAOI,SAASmrB,GAAmBlrB,EAAOlxC,EAAQ88B,GAC3C,IAAIxvC,EAAGgsE,EAAMtsE,EACb,IAAIM,EAAI,EAAGgsE,EAAOpoB,EAAM3jD,OAAQD,EAAIgsE,EAAMhsE,IACtCN,EAAQkkD,EAAM5jD,GAAGwvC,GACZ3kC,MAAMnL,KACPgT,EAAO3P,IAAMF,KAAKE,IAAI2P,EAAO3P,IAAKrD,GAClCgT,EAAO1C,IAAMnN,KAAKmN,IAAI0C,EAAO1C,IAAKtQ,GAG9C,CACA,SAASqvE,GAAUC,GACf,OAAOA,GAAWvB,GAAK,IAC3B,CACA,SAASwB,GAAUC,GACf,OAAOA,GAAW,IAAMzB,GAC5B,CAOI,SAAS0B,GAAe3kD,GACxB,IAAK6gD,GAAe7gD,GAChB,OAEJ,IAAIpb,EAAI,EACJ86D,EAAI,EACR,KAAMrnE,KAAKyI,MAAMkf,EAAIpb,GAAKA,IAAMob,GAC5Bpb,GAAK,GACL86D,IAEJ,OAAOA,CACX,CAEA,SAASkF,GAAkBC,EAAaC,GACpC,MAAMC,EAAsBD,EAAW9kD,EAAI6kD,EAAY7kD,EACjDglD,EAAsBF,EAAW7kD,EAAI4kD,EAAY5kD,EACjDglD,EAA2B5sE,KAAK6sE,KAAKH,EAAsBA,EAAsBC,EAAsBA,GAC7G,IAAIG,EAAQ9sE,KAAK+sE,MAAMJ,EAAqBD,GAI5C,OAHII,GAAS,GAAMlC,KACfkC,GAASjC,IAEN,CACHiC,QACAE,SAAUJ,EAElB,CACA,SAASK,GAAsBC,EAAKC,GAChC,OAAOntE,KAAK6sE,KAAK7sE,KAAKC,IAAIktE,EAAIxlD,EAAIulD,EAAIvlD,EAAG,GAAK3nB,KAAKC,IAAIktE,EAAIvlD,EAAIslD,EAAItlD,EAAG,GAC1E,CAII,SAASwlD,GAAWvmE,EAAGyE,GACvB,OAAQzE,EAAIyE,EAAIw/D,IAASD,GAAMD,EACnC,CAII,SAASyC,GAAgBxmE,GACzB,OAAQA,EAAIgkE,GAAMA,IAAOA,EAC7B,CAGI,SAASyC,GAAcR,EAAOpuE,EAAOgiD,EAAK6sB,GAC1C,MAAM1mE,EAAIwmE,GAAgBP,GACpBrnE,EAAI4nE,GAAgB3uE,GACpB6N,EAAI8gE,GAAgB3sB,GACpB8sB,EAAeH,GAAgB5nE,EAAIoB,GACnC4mE,EAAaJ,GAAgB9gE,EAAI1F,GACjC6mE,EAAeL,GAAgBxmE,EAAIpB,GACnCkoE,EAAaN,GAAgBxmE,EAAI0F,GACvC,OAAO1F,IAAMpB,GAAKoB,IAAM0F,GAAKghE,GAAyB9nE,IAAM8G,GAAKihE,EAAeC,GAAcC,EAAeC,CACjH,CAOI,SAASC,GAAY/wE,EAAOqD,EAAKiN,GACjC,OAAOnN,KAAKmN,IAAIjN,EAAKF,KAAKE,IAAIiN,EAAKtQ,GACvC,CAaI,SAASgxE,GAAWhxE,EAAO6B,EAAOgiD,EAAK8qB,EAAU,MACjD,OAAO3uE,GAASmD,KAAKE,IAAIxB,EAAOgiD,GAAO8qB,GAAW3uE,GAASmD,KAAKmN,IAAIzO,EAAOgiD,GAAO8qB,CACtF,CAEA,SAASsC,GAAQC,EAAOlxE,EAAOmxE,GAC3BA,EAAMA,GAAO,CAAElhE,GAAQihE,EAAMjhE,GAASjQ,GACtC,IAEIoxE,EAFAC,EAAKH,EAAM3wE,OAAS,EACpB+wE,EAAK,EAET,KAAMD,EAAKC,EAAK,GACZF,EAAME,EAAKD,GAAM,EACbF,EAAIC,GACJE,EAAKF,EAELC,EAAKD,EAGb,MAAO,CACHE,KACAD,KAER,CAQI,MAAME,GAAe,CAACL,EAAOnpE,EAAK/H,EAAOwxE,IAAOP,GAAQC,EAAOlxE,EAAOwxE,EAAQvhE,IAC1E,MAAMwhE,EAAKP,EAAMjhE,GAAOlI,GACxB,OAAO0pE,EAAKzxE,GAASyxE,IAAOzxE,GAASkxE,EAAMjhE,EAAQ,GAAGlI,KAAS/H,GAC9DiQ,GAAQihE,EAAMjhE,GAAOlI,GAAO/H,GAO3B0xE,GAAgB,CAACR,EAAOnpE,EAAK/H,IAAQixE,GAAQC,EAAOlxE,EAAQiQ,GAAQihE,EAAMjhE,GAAOlI,IAAQ/H,GAkB7F2xE,GAAc,CAChB,OACA,MACA,QACA,SACA,WAkCJ,SAASC,GAAoB1tB,EAAOz3C,GAChC,MAAMolE,EAAO3tB,EAAM4tB,SACnB,IAAKD,EACD,OAEJ,MAAMzkE,EAAYykE,EAAKzkE,UACjB6C,EAAQ7C,EAAUnJ,QAAQwI,IACjB,IAAXwD,GACA7C,EAAU2H,OAAO9E,EAAO,GAExB7C,EAAU7M,OAAS,IAGvBoxE,GAAYztC,QAASn8B,WACVm8C,EAAMn8C,YAEVm8C,EAAM4tB,SACjB,CAGI,SAASC,GAAaC,GACtB,MAAM35D,EAAM,IAAIynB,IAAIkyC,GACpB,OAAI35D,EAAIwqB,OAASmvC,EAAMzxE,OACZyxE,EAEJxkE,MAAMmS,KAAKtH,EACtB,CAOG,MAAM45D,GACiB,oBAAXzyE,OACA,SAASsvB,GACZ,OAAOA,GACX,EAEGtvB,OAAOof,sBAKd,SAASszD,GAAU9lE,EAAIiF,GACvB,IAAI8gE,EAAY,GACZC,GAAU,EACd,OAAO,YAAYxoE,GAEfuoE,EAAYvoE,EACPwoE,IACDA,GAAU,EACVH,GAAiBpsE,KAAKrG,OAAQ,KAC1B4yE,GAAU,EACVhmE,EAAG+B,MAAMkD,EAAS8gE,KAG9B,CACJ,CAkBI,MAAME,GAAsBC,GAAkB,UAAVA,EAAoB,OAAmB,QAAVA,EAAkB,QAAU,SAIvFC,GAAiB,CAACD,EAAOzwE,EAAOgiD,IAAgB,UAAVyuB,EAAoBzwE,EAAkB,QAAVywE,EAAkBzuB,GAAOhiD,EAAQgiD,GAAO,EAWhH,SAAS2uB,GAAiC91C,EAAM+1C,EAAQC,GACxD,MAAMC,EAAaF,EAAOlyE,OAC1B,IAAIsB,EAAQ,EACR+wE,EAAQD,EACZ,GAAIj2C,EAAKm2C,QAAS,CACd,MAAM,OAAEC,EAAO,OAAEC,EAAO,QAAEC,GAAat2C,EACjCu2C,EAAWv2C,EAAKiQ,SAAUjQ,EAAKiQ,QAAQj8B,QAAUgsB,EAAKiQ,QAAQj8B,QAAQuiE,SAAkB,KACxFC,EAAOJ,EAAOI,MACd,IAAE7vE,EAAI,IAAEiN,EAAI,WAAE6iE,EAAW,WAAEC,GAAgBN,EAAOO,gBACxD,GAAIF,EAAY,CAIZ,GAHAtxE,EAAQsB,KAAKE,IACbkuE,GAAayB,EAASE,EAAM7vE,GAAKiuE,GACjCoB,EAAqBC,EAAapB,GAAakB,EAAQS,EAAMJ,EAAOQ,iBAAiBjwE,IAAMiuE,IACvF2B,EAAU,CACV,MAAMM,EAAsBP,EAAQhvE,MAAM,EAAGnC,EAAQ,GAAGu5C,UAAUtD,UAAW07B,IAAS9H,GAAc8H,EAAMT,EAAOG,QACjHrxE,GAASsB,KAAKmN,IAAI,EAAGijE,EACzB,CACA1xE,EAAQkvE,GAAYlvE,EAAO,EAAG8wE,EAAa,EAC/C,CACA,GAAIS,EAAY,CACZ,IAAIvvB,EAAM1gD,KAAKmN,IACfihE,GAAayB,EAASF,EAAOI,KAAM5iE,GAAK,GAAM+gE,GAAK,EACnDqB,EAAqB,EAAInB,GAAakB,EAAQS,EAAMJ,EAAOQ,iBAAiBhjE,IAAM,GAAM+gE,GAAK,GAC7F,GAAI4B,EAAU,CACV,MAAMQ,EAAsBT,EAAQhvE,MAAM6/C,EAAM,GAAG/L,UAAW07B,IAAS9H,GAAc8H,EAAMT,EAAOG,QAClGrvB,GAAO1gD,KAAKmN,IAAI,EAAGmjE,EACvB,CACAb,EAAQ7B,GAAYltB,EAAKhiD,EAAO8wE,GAAc9wE,CAClD,MACI+wE,EAAQD,EAAa9wE,CAE7B,CACA,MAAO,CACHA,QACA+wE,QAER,CAMI,SAASc,GAAoBh3C,GAC7B,MAAM,OAAEi3C,EAAO,OAAEC,EAAO,aAAEC,GAAkBn3C,EACtCo3C,EAAY,CACdC,KAAMJ,EAAOtwE,IACb2wE,KAAML,EAAOrjE,IACb2jE,KAAML,EAAOvwE,IACb6wE,KAAMN,EAAOtjE,KAEjB,IAAKujE,EAED,OADAn3C,EAAKm3C,aAAeC,GACb,EAEX,MAAMK,EAAUN,EAAaE,OAASJ,EAAOtwE,KAAOwwE,EAAaG,OAASL,EAAOrjE,KAAOujE,EAAaI,OAASL,EAAOvwE,KAAOwwE,EAAaK,OAASN,EAAOtjE,IAEzJ,OADAvE,OAAOuc,OAAOurD,EAAcC,GACrBK,CACX,CAEA,MAAMC,GAAU1J,GAAU,IAANA,GAAiB,IAANA,EACzB2J,GAAY,CAAC3J,EAAG9hE,EAAG4hE,KAAMrnE,KAAKC,IAAI,EAAG,IAAMsnE,GAAK,IAAMvnE,KAAKmxE,KAAK5J,EAAI9hE,GAAKolE,GAAMxD,GAC/E+J,GAAa,CAAC7J,EAAG9hE,EAAG4hE,IAAIrnE,KAAKC,IAAI,GAAI,GAAKsnE,GAAKvnE,KAAKmxE,KAAK5J,EAAI9hE,GAAKolE,GAAMxD,GAAK,EAKzEgK,GAAU,CAChBC,OAAS/J,GAAIA,EACbgK,WAAahK,GAAIA,EAAIA,EACrBiK,YAAcjK,IAAKA,GAAKA,EAAI,GAC5BkK,cAAgBlK,IAAKA,GAAK,IAAO,EAAI,GAAMA,EAAIA,GAAK,MAASA,GAAKA,EAAI,GAAK,GAC3EmK,YAAcnK,GAAIA,EAAIA,EAAIA,EAC1BoK,aAAepK,IAAKA,GAAK,GAAKA,EAAIA,EAAI,EACtCqK,eAAiBrK,IAAKA,GAAK,IAAO,EAAI,GAAMA,EAAIA,EAAIA,EAAI,KAAQA,GAAK,GAAKA,EAAIA,EAAI,GAClFsK,YAActK,GAAIA,EAAIA,EAAIA,EAAIA,EAC9BuK,aAAevK,MAAOA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAC5CwK,eAAiBxK,IAAKA,GAAK,IAAO,EAAI,GAAMA,EAAIA,EAAIA,EAAIA,GAAK,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAI,GAC3FyK,YAAczK,GAAIA,EAAIA,EAAIA,EAAIA,EAAIA,EAClC0K,aAAe1K,IAAKA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,EAC9C2K,eAAiB3K,IAAKA,GAAK,IAAO,EAAI,GAAMA,EAAIA,EAAIA,EAAIA,EAAIA,EAAI,KAAQA,GAAK,GAAKA,EAAIA,EAAIA,EAAIA,EAAI,GAClG4K,WAAa5K,GAA6B,EAAxBvnE,KAAKoyE,IAAI7K,EAAI2D,IAC/BmH,YAAc9K,GAAIvnE,KAAKmxE,IAAI5J,EAAI2D,IAC/BoH,cAAgB/K,IAAK,IAAOvnE,KAAKoyE,IAAIxH,GAAKrD,GAAK,GAC/CgL,WAAahL,GAAU,IAANA,EAAU,EAAIvnE,KAAKC,IAAI,EAAG,IAAMsnE,EAAI,IACrDiL,YAAcjL,GAAU,IAANA,EAAU,EAA4B,EAAvBvnE,KAAKC,IAAI,GAAI,GAAKsnE,GACnDkL,cAAgBlL,GAAI0J,GAAO1J,GAAKA,EAAIA,EAAI,GAAM,GAAMvnE,KAAKC,IAAI,EAAG,IAAU,EAAJsnE,EAAQ,IAAM,IAAyC,EAAjCvnE,KAAKC,IAAI,GAAI,IAAU,EAAJsnE,EAAQ,KACvHmL,WAAanL,GAAIA,GAAK,EAAIA,IAAMvnE,KAAK6sE,KAAK,EAAItF,EAAIA,GAAK,GACvDoL,YAAcpL,GAAIvnE,KAAK6sE,KAAK,GAAKtF,GAAK,GAAKA,GAC3CqL,cAAgBrL,IAAKA,GAAK,IAAO,GAAK,IAAOvnE,KAAK6sE,KAAK,EAAItF,EAAIA,GAAK,GAAK,IAAOvnE,KAAK6sE,KAAK,GAAKtF,GAAK,GAAKA,GAAK,GAC9GsL,cAAgBtL,GAAI0J,GAAO1J,GAAKA,EAAI2J,GAAU3J,EAAG,KAAO,IACxDuL,eAAiBvL,GAAI0J,GAAO1J,GAAKA,EAAI6J,GAAW7J,EAAG,KAAO,IAC1D,gBAAAwL,CAAkBxL,GACd,MAAM9hE,EAAI,MAEV,OAAOwrE,GAAO1J,GAAKA,EAAIA,EAAI,GAAM,GAAM2J,GAAc,EAAJ3J,EAAO9hE,EAD9C,KACsD,GAAM,GAAM2rE,GAAe,EAAJ7J,EAAQ,EAAG9hE,EADxF,IAEd,EACA,UAAAutE,CAAYzL,GACR,MAAM9hE,EAAI,QACV,OAAO8hE,EAAIA,IAAM9hE,EAAI,GAAK8hE,EAAI9hE,EAClC,EACA,WAAAwtE,CAAa1L,GACT,MAAM9hE,EAAI,QACV,OAAQ8hE,GAAK,GAAKA,IAAM9hE,EAAI,GAAK8hE,EAAI9hE,GAAK,CAC9C,EACA,aAAAytE,CAAe3L,GACX,IAAI9hE,EAAI,QACR,OAAK8hE,GAAK,IAAO,EACCA,EAAIA,IAAqB,GAAd9hE,GAAK,QAAc8hE,EAAI9hE,GAAzC,GAEJ,KAAQ8hE,GAAK,GAAKA,IAAqB,GAAd9hE,GAAK,QAAc8hE,EAAI9hE,GAAK,EAChE,EACA0tE,aAAe5L,GAAI,EAAI8J,GAAQ+B,cAAc,EAAI7L,GACjD,aAAA6L,CAAe7L,GACX,MAAM/gC,EAAI,OACJ3zB,EAAI,KACV,OAAI00D,EAAI,EAAI10D,EACD2zB,EAAI+gC,EAAIA,EAEfA,EAAI,EAAI10D,EACD2zB,GAAK+gC,GAAK,IAAM10D,GAAK00D,EAAI,IAEhCA,EAAI,IAAM10D,EACH2zB,GAAK+gC,GAAK,KAAO10D,GAAK00D,EAAI,MAE9B/gC,GAAK+gC,GAAK,MAAQ10D,GAAK00D,EAAI,OACtC,EACA8L,gBAAkB9L,GAAIA,EAAI,GAAoC,GAA9B8J,GAAQ8B,aAAiB,EAAJ5L,GAAkD,GAAnC8J,GAAQ+B,cAAkB,EAAJ7L,EAAQ,GAAW,IAGjH,SAAS+L,GAAoBz2E,GACzB,GAAIA,GAA0B,iBAAVA,EAAoB,CACpC,MAAM2G,EAAO3G,EAAMsP,WACnB,MAAgB,2BAAT3I,GAA8C,4BAATA,CAChD,CACA,OAAO,CACX,CACA,SAASwjE,GAAMnqE,GACX,OAAOy2E,GAAoBz2E,GAASA,EAAQ,IAAIkpE,GAAMlpE,EAC1D,CACA,SAAS02E,GAAc12E,GACnB,OAAOy2E,GAAoBz2E,GAASA,EAAQ,IAAIkpE,GAAMlpE,GAAOorE,SAAS,IAAKD,OAAO,IAAKrB,WAC3F,CAEA,MAAM6M,GAAU,CACZ,IACA,IACA,cACA,SACA,WAEEC,GAAS,CACX,QACA,cACA,mBAgFEC,GAAY,IAAIvoC,IAWtB,SAASwoC,GAAaxrE,EAAKyrE,EAAQrmE,GAC/B,OAXJ,SAAyBqmE,EAAQrmE,GAC7BA,EAAUA,GAAW,CAAC,EACtB,MAAMs+B,EAAW+nC,EAASpyE,KAAKC,UAAU8L,GACzC,IAAIsmE,EAAYH,GAAUxgE,IAAI24B,GAK9B,OAJKgoC,IACDA,EAAY,IAAIC,KAAKC,aAAaH,EAAQrmE,GAC1CmmE,GAAUx+D,IAAI22B,EAAUgoC,IAErBA,CACX,CAEWG,CAAgBJ,EAAQrmE,GAAS0mE,OAAO9rE,EACnD,CAEA,MAAM+rE,GAAa,CAClB,MAAAl4D,CAAQnf,GACD,OAAOuV,GAAQvV,GAAUA,EAAQ,GAAKA,CAC1C,EACH,OAAAs3E,CAASC,EAAWtnE,EAAOunE,GACpB,GAAkB,IAAdD,EACA,MAAO,IAEX,MAAMR,EAASj2E,KAAK22E,MAAM/mE,QAAQqmE,OAClC,IAAIW,EACAC,EAAQJ,EACZ,GAAIC,EAAMj3E,OAAS,EAAG,CAClB,MAAMq3E,EAAUz0E,KAAKmN,IAAInN,KAAKoI,IAAIisE,EAAM,GAAGx3E,OAAQmD,KAAKoI,IAAIisE,EAAMA,EAAMj3E,OAAS,GAAGP,SAChF43E,EAAU,MAAQA,EAAU,QAC5BF,EAAW,cAEfC,EA8BZ,SAAwBJ,EAAWC,GAC/B,IAAIG,EAAQH,EAAMj3E,OAAS,EAAIi3E,EAAM,GAAGx3E,MAAQw3E,EAAM,GAAGx3E,MAAQw3E,EAAM,GAAGx3E,MAAQw3E,EAAM,GAAGx3E,MAI3F,OAHImD,KAAKoI,IAAIosE,IAAU,GAAKJ,IAAcp0E,KAAKuI,MAAM6rE,KACjDI,EAAQJ,EAAYp0E,KAAKuI,MAAM6rE,IAE5BI,CACX,CApCoBE,CAAeN,EAAWC,EACtC,CACA,MAAMM,EAAWtJ,GAAMrrE,KAAKoI,IAAIosE,IAC1BI,EAAa5sE,MAAM2sE,GAAY,EAAI30E,KAAKmN,IAAInN,KAAKE,KAAK,EAAIF,KAAKuI,MAAMosE,GAAW,IAAK,GACrFpnE,EAAU,CACZgnE,WACAM,sBAAuBD,EACvBE,sBAAuBF,GAG3B,OADAhsE,OAAOuc,OAAO5X,EAAS5P,KAAK4P,QAAQ8mE,MAAMJ,QACnCN,GAAaS,EAAWR,EAAQrmE,EAC3C,EACH,WAAAwnE,CAAaX,EAAWtnE,EAAOunE,GACxB,GAAkB,IAAdD,EACA,MAAO,IAEX,MAAMY,EAASX,EAAMvnE,GAAOmoE,aAAeb,EAAYp0E,KAAKC,IAAI,GAAID,KAAKuI,MAAM8iE,GAAM+I,KACrF,MAAI,CACA,EACA,EACA,EACA,EACA,GACA,IACF/hE,SAAS2iE,IAAWloE,EAAQ,GAAMunE,EAAMj3E,OAC/B82E,GAAWC,QAAQzxE,KAAK/E,KAAMy2E,EAAWtnE,EAAOunE,GAEpD,EACX,GASH,IAAIa,GAAQ,CACThB,eA2EJ,MAAMiB,GAAYvsE,OAAO3C,OAAO,MAC1BixC,GAActuC,OAAO3C,OAAO,MACjC,SAASmvE,GAAW7uD,EAAM3hB,GACvB,IAAKA,EACD,OAAO2hB,EAEX,MAAM5V,EAAO/L,EAAImL,MAAM,KACvB,IAAI,IAAI5S,EAAI,EAAG2jD,EAAInwC,EAAKvT,OAAQD,EAAI2jD,IAAK3jD,EAAE,CACvC,MAAM8jD,EAAItwC,EAAKxT,GACfopB,EAAOA,EAAK06B,KAAO16B,EAAK06B,GAAKr4C,OAAO3C,OAAO,MAC/C,CACA,OAAOsgB,CACX,CACA,SAASrR,GAAIvI,EAAMyiC,EAAOpzB,GACtB,MAAqB,iBAAVozB,EACAw6B,GAAMwL,GAAWzoE,EAAMyiC,GAAQpzB,GAEnC4tD,GAAMwL,GAAWzoE,EAAM,IAAKyiC,EACvC,CACC,MAAMimC,GACH,WAAAh3E,CAAYi3E,EAAcC,GACtB53E,KAAK63E,eAAYj4E,EACjBI,KAAK83E,gBAAkB,kBACvB93E,KAAK+3E,YAAc,kBACnB/3E,KAAKqpE,MAAQ,OACbrpE,KAAKg4E,SAAW,CAAC,EACjBh4E,KAAKi4E,iBAAoB1sE,GAAUA,EAAQorE,MAAMuB,SAASC,sBAC1Dn4E,KAAKgf,SAAW,CAAC,EACjBhf,KAAKqF,OAAS,CACV,YACA,WACA,QACA,aACA,aAEJrF,KAAKo4E,KAAO,CACRC,OAAQ,qDACRt2C,KAAM,GACN7P,MAAO,SACPomD,WAAY,IACZhP,OAAQ,MAEZtpE,KAAKu4E,MAAQ,CAAC,EACdv4E,KAAKw4E,qBAAuB,CAACC,EAAK7oE,IAAUgmE,GAAchmE,EAAQkoE,iBAClE93E,KAAK04E,iBAAmB,CAACD,EAAK7oE,IAAUgmE,GAAchmE,EAAQmoE,aAC9D/3E,KAAK24E,WAAa,CAACF,EAAK7oE,IAAUgmE,GAAchmE,EAAQy5D,OACxDrpE,KAAK44E,UAAY,IACjB54E,KAAK64E,YAAc,CACfh0C,KAAM,UACNhiB,WAAW,EACXi2D,kBAAkB,GAEtB94E,KAAK+4E,qBAAsB,EAC3B/4E,KAAKg5E,QAAU,KACfh5E,KAAKi5E,QAAU,KACfj5E,KAAKk5E,SAAU,EACfl5E,KAAKm5E,QAAU,CAAC,EAChBn5E,KAAKo5E,YAAa,EAClBp5E,KAAKq5E,WAAQz5E,EACbI,KAAKs5E,OAAS,CAAC,EACft5E,KAAKu5E,UAAW,EAChBv5E,KAAKw5E,yBAA0B,EAC/Bx5E,KAAKy5E,SAAS9B,GACd33E,KAAKqN,MAAMuqE,EACf,CACH,GAAArgE,CAAIk6B,EAAOpzB,GACJ,OAAO9G,GAAIvX,KAAMyxC,EAAOpzB,EAC5B,CACH,GAAA9I,CAAIk8B,GACG,OAAOgmC,GAAWz3E,KAAMyxC,EAC5B,CACH,QAAAgoC,CAAShoC,EAAOpzB,GACT,OAAO9G,GAAIgiC,GAAa9H,EAAOpzB,EACnC,CACA,QAAAq7D,CAASjoC,EAAOpzB,GACZ,OAAO9G,GAAIigE,GAAW/lC,EAAOpzB,EACjC,CACH,KAAAs7D,CAAMloC,EAAO1yC,EAAM66E,EAAan6B,GACzB,MAAMo6B,EAAcpC,GAAWz3E,KAAMyxC,GAC/BqoC,EAAoBrC,GAAWz3E,KAAM45E,GACrCG,EAAc,IAAMh7E,EAC1BkM,OAAO63B,iBAAiB+2C,EAAa,CACjC,CAACE,GAAc,CACX76E,MAAO26E,EAAY96E,GACnBi7E,UAAU,GAEd,CAACj7E,GAAO,CACJuW,YAAY,EACZ,GAAAC,GACI,MAAM0kE,EAAQj6E,KAAK+5E,GACb7nE,EAAS4nE,EAAkBr6B,GACjC,OAAIpwC,GAAS4qE,GACFhvE,OAAOuc,OAAO,CAAC,EAAGtV,EAAQ+nE,GAE9BjP,GAAeiP,EAAO/nE,EACjC,EACA,GAAAqF,CAAKrY,GACDc,KAAK+5E,GAAe76E,CACxB,IAGZ,CACA,KAAAmO,CAAM6sE,GACFA,EAAS92C,QAAS/1B,GAAQA,EAAMrN,MACpC,EAEJ,IAAIm6E,GAA2B,IAAIzC,GAAS,CACxC0C,YAAcr7E,IAAQA,EAAKmc,WAAW,MACtCm/D,WAAat7E,GAAgB,WAATA,EACpBw5E,MAAO,CACH+B,UAAW,eAEfzB,YAAa,CACTuB,aAAa,EACbC,YAAY,IAEjB,CAlVH,SAAiCF,GAC7BA,EAAS5iE,IAAI,YAAa,CACtBotB,WAAO/kC,EACP26E,SAAU,IACVC,OAAQ,eACRlvE,QAAI1L,EACJif,UAAMjf,EACN66E,UAAM76E,EACN0nE,QAAI1nE,EACJiG,UAAMjG,IAEVu6E,EAASV,SAAS,YAAa,CAC3Ba,WAAW,EACXD,YAAY,EACZD,YAAcr7E,GAAgB,eAATA,GAAkC,eAATA,GAAkC,OAATA,IAE3Eo7E,EAAS5iE,IAAI,aAAc,CACvBu+D,OAAQ,CACJjwE,KAAM,QACNmB,WAAY8uE,IAEhBD,QAAS,CACLhwE,KAAM,SACNmB,WAAY6uE,MAGpBsE,EAASV,SAAS,aAAc,CAC5Ba,UAAW,cAEfH,EAAS5iE,IAAI,cAAe,CACxBmjE,OAAQ,CACJ7C,UAAW,CACP0C,SAAU,MAGlBI,OAAQ,CACJ9C,UAAW,CACP0C,SAAU,IAGlB/oD,KAAM,CACFopD,WAAY,CACR9E,OAAQ,CACJj3D,KAAM,eAEVmS,QAAS,CACLnrB,KAAM,UACN00E,SAAU,KAItB5oD,KAAM,CACFipD,WAAY,CACR9E,OAAQ,CACJxO,GAAI,eAERt2C,QAAS,CACLnrB,KAAM,UACN20E,OAAQ,SACRlvE,GAAKi4C,GAAQ,EAAJA,MAK7B,EAEA,SAA8B42B,GAC1BA,EAAS5iE,IAAI,SAAU,CACnBsjE,aAAa,EACbC,QAAS,CACLhnB,IAAK,EACL1sB,MAAO,EACP2zC,OAAQ,EACR7tC,KAAM,IAGlB,EA0EA,SAA4BitC,GACxBA,EAAS5iE,IAAI,QAAS,CAClBoyC,SAAS,EACTqxB,QAAQ,EACR1gC,SAAS,EACT2gC,aAAa,EACpBC,OAAQ,QACDC,MAAM,EACbC,MAAO,EACAC,KAAM,CACF1xB,SAAS,EACT2xB,UAAW,EACXC,iBAAiB,EACjBC,WAAW,EACXC,WAAY,EACZC,UAAW,CAACC,EAAM/rE,IAAUA,EAAQ0rE,UACpCM,UAAW,CAACD,EAAM/rE,IAAUA,EAAQy5D,MACpC2R,QAAQ,GAEZa,OAAQ,CACJlyB,SAAS,EACTmyB,KAAM,GACNC,WAAY,EACZ5pD,MAAO,GAEX6pD,MAAO,CACHryB,SAAS,EACTp2C,KAAM,GACNunE,QAAS,CACLhnB,IAAK,EACLinB,OAAQ,IAGhBrE,MAAO,CACHuF,YAAa,EACbC,YAAa,GACbC,QAAQ,EACRC,gBAAiB,EACjBC,gBAAiB,GACjBvB,QAAS,EACTnxB,SAAS,EACT2yB,UAAU,EACVC,gBAAiB,EACjBC,YAAa,EACbxuD,SAAUupD,GAAMhB,WAAWl4D,OAC3Bo+D,MAAO,CAAC,EACRC,MAAO,CAAC,EACRlL,MAAO,SACPmL,WAAY,OACZC,mBAAmB,EACnBC,cAAe,4BACfC,gBAAiB,KAGzB3C,EAASR,MAAM,cAAe,QAAS,GAAI,SAC3CQ,EAASR,MAAM,aAAc,QAAS,GAAI,eAC1CQ,EAASR,MAAM,eAAgB,QAAS,GAAI,eAC5CQ,EAASR,MAAM,cAAe,QAAS,GAAI,SAC3CQ,EAASV,SAAS,QAAS,CACvBa,WAAW,EACXF,YAAcr7E,IAAQA,EAAKmc,WAAW,YAAcnc,EAAKmc,WAAW,UAAqB,aAATnc,GAAgC,WAATA,EACvGs7E,WAAat7E,GAAgB,eAATA,GAAkC,mBAATA,GAAsC,SAATA,IAE9Eo7E,EAASV,SAAS,SAAU,CACxBa,UAAW,UAEfH,EAASV,SAAS,cAAe,CAC7BW,YAAcr7E,GAAgB,oBAATA,GAAuC,aAATA,EACnDs7E,WAAat7E,GAAgB,oBAATA,GAE5B,IAyII,SAASg+E,GAAatE,EAAK90E,EAAMq5E,EAAIC,EAAS9uE,GAC9C,IAAI+uE,EAAYv5E,EAAKwK,GAQrB,OAPK+uE,IACDA,EAAYv5E,EAAKwK,GAAUsqE,EAAI0E,YAAYhvE,GAAQgkB,MACnD6qD,EAAG98E,KAAKiO,IAER+uE,EAAYD,IACZA,EAAUC,GAEPD,CACX,CAIA,SAASG,GAAa3E,EAAKL,EAAMiF,EAAe/2C,GAE5C,IAAI3iC,GADJ2iC,EAAQA,GAAS,CAAC,GACD3iC,KAAO2iC,EAAM3iC,MAAQ,CAAC,EACnCq5E,EAAK12C,EAAMg3C,eAAiBh3C,EAAMg3C,gBAAkB,GACpDh3C,EAAM8xC,OAASA,IACfz0E,EAAO2iC,EAAM3iC,KAAO,CAAC,EACrBq5E,EAAK12C,EAAMg3C,eAAiB,GAC5Bh3C,EAAM8xC,KAAOA,GAEjBK,EAAI8E,OACJ9E,EAAIL,KAAOA,EACX,IAAI6E,EAAU,EACd,MAAMzR,EAAO6R,EAAc59E,OAC3B,IAAID,EAAG8N,EAAGkwE,EAAMC,EAAOC,EACvB,IAAIl+E,EAAI,EAAGA,EAAIgsE,EAAMhsE,IAGjB,GAFAi+E,EAAQJ,EAAc79E,GAElBi+E,SAA0ChpE,GAAQgpE,IAE/C,GAAIhpE,GAAQgpE,GAGf,IAAInwE,EAAI,EAAGkwE,EAAOC,EAAMh+E,OAAQ6N,EAAIkwE,EAAMlwE,IACtCowE,EAAcD,EAAMnwE,GAEhBowE,SAAsDjpE,GAAQipE,KAC9DT,EAAUF,GAAatE,EAAK90E,EAAMq5E,EAAIC,EAASS,SARvDT,EAAUF,GAAatE,EAAK90E,EAAMq5E,EAAIC,EAASQ,GAavDhF,EAAIkF,UACJ,MAAMC,EAAQZ,EAAGv9E,OAAS,EAC1B,GAAIm+E,EAAQP,EAAc59E,OAAQ,CAC9B,IAAID,EAAI,EAAGA,EAAIo+E,EAAOp+E,WACXmE,EAAKq5E,EAAGx9E,IAEnBw9E,EAAG/oE,OAAO,EAAG2pE,EACjB,CACA,OAAOX,CACX,CAQI,SAASY,GAAYlH,EAAOmH,EAAO3rD,GACnC,MAAM8lD,EAAmBtB,EAAMoH,wBACzBC,EAAsB,IAAV7rD,EAAc9vB,KAAKmN,IAAI2iB,EAAQ,EAAG,IAAO,EAC3D,OAAO9vB,KAAKyI,OAAOgzE,EAAQE,GAAa/F,GAAoBA,EAAmB+F,CACnF,CAGI,SAASC,GAAYC,EAAQzF,IACxBA,GAAQyF,MAGbzF,EAAMA,GAAOyF,EAAOC,WAAW,OAC3BZ,OAGJ9E,EAAI2F,iBACJ3F,EAAI4F,UAAU,EAAG,EAAGH,EAAO/rD,MAAO+rD,EAAOnqB,QACzC0kB,EAAIkF,UACR,CACA,SAASW,GAAU7F,EAAK7oE,EAASoa,EAAGC,GAEhCs0D,GAAgB9F,EAAK7oE,EAASoa,EAAGC,EAAG,KACxC,CAEA,SAASs0D,GAAgB9F,EAAK7oE,EAASoa,EAAGC,EAAGmyC,GACzC,IAAIv2D,EAAM24E,EAASC,EAAS18C,EAAM28C,EAAcvsD,EAAOwsD,EAAUC,EACjE,MAAM1sD,EAAQtiB,EAAQivE,WAChBC,EAAWlvE,EAAQkvE,SACnBC,EAASnvE,EAAQmvE,OACvB,IAAIC,GAAOF,GAAY,GAAKxR,GAC5B,GAAIp7C,GAA0B,iBAAVA,IAChBrsB,EAAOqsB,EAAM1jB,WACA,8BAAT3I,GAAiD,+BAATA,GAMxC,OALA4yE,EAAI8E,OACJ9E,EAAIwG,UAAUj1D,EAAGC,GACjBwuD,EAAIjO,OAAOwU,GACXvG,EAAIyG,UAAUhtD,GAAQA,EAAMC,MAAQ,GAAID,EAAM6hC,OAAS,EAAG7hC,EAAMC,MAAOD,EAAM6hC,aAC7E0kB,EAAIkF,UAIZ,KAAItzE,MAAM00E,IAAWA,GAAU,GAA/B,CAIA,OADAtG,EAAI0G,YACGjtD,GAEH,QACQkqC,EACAqc,EAAI2G,QAAQp1D,EAAGC,EAAGmyC,EAAI,EAAG2iB,EAAQ,EAAG,EAAG7R,IAEvCuL,EAAI4G,IAAIr1D,EAAGC,EAAG80D,EAAQ,EAAG7R,IAE7BuL,EAAI6G,YACJ,MACJ,IAAK,WACDntD,EAAQiqC,EAAIA,EAAI,EAAI2iB,EACpBtG,EAAI8G,OAAOv1D,EAAI3nB,KAAKmxE,IAAIwL,GAAO7sD,EAAOlI,EAAI5nB,KAAKoyE,IAAIuK,GAAOD,GAC1DC,GAAOvR,GACPgL,EAAI+G,OAAOx1D,EAAI3nB,KAAKmxE,IAAIwL,GAAO7sD,EAAOlI,EAAI5nB,KAAKoyE,IAAIuK,GAAOD,GAC1DC,GAAOvR,GACPgL,EAAI+G,OAAOx1D,EAAI3nB,KAAKmxE,IAAIwL,GAAO7sD,EAAOlI,EAAI5nB,KAAKoyE,IAAIuK,GAAOD,GAC1DtG,EAAI6G,YACJ,MACJ,IAAK,cAQDZ,EAAwB,KAATK,EACfh9C,EAAOg9C,EAASL,EAChBF,EAAUn8E,KAAKoyE,IAAIuK,EAAMxR,IAAczrC,EACvC48C,EAAWt8E,KAAKoyE,IAAIuK,EAAMxR,KAAepR,EAAIA,EAAI,EAAIsiB,EAAe38C,GACpE08C,EAAUp8E,KAAKmxE,IAAIwL,EAAMxR,IAAczrC,EACvC68C,EAAWv8E,KAAKmxE,IAAIwL,EAAMxR,KAAepR,EAAIA,EAAI,EAAIsiB,EAAe38C,GACpE02C,EAAI4G,IAAIr1D,EAAI20D,EAAU10D,EAAIw0D,EAASC,EAAcM,EAAM/R,GAAI+R,EAAMzR,IACjEkL,EAAI4G,IAAIr1D,EAAI40D,EAAU30D,EAAIu0D,EAASE,EAAcM,EAAMzR,GAASyR,GAChEvG,EAAI4G,IAAIr1D,EAAI20D,EAAU10D,EAAIw0D,EAASC,EAAcM,EAAKA,EAAMzR,IAC5DkL,EAAI4G,IAAIr1D,EAAI40D,EAAU30D,EAAIu0D,EAASE,EAAcM,EAAMzR,GAASyR,EAAM/R,IACtEwL,EAAI6G,YACJ,MACJ,IAAK,OACD,IAAKR,EAAU,CACX/8C,EAAO1/B,KAAKo9E,QAAUV,EACtB5sD,EAAQiqC,EAAIA,EAAI,EAAIr6B,EACpB02C,EAAIiH,KAAK11D,EAAImI,EAAOlI,EAAI8X,EAAM,EAAI5P,EAAO,EAAI4P,GAC7C,KACJ,CACAi9C,GAAOxR,GACS,IAAK,UACrBmR,EAAWt8E,KAAKoyE,IAAIuK,IAAQ5iB,EAAIA,EAAI,EAAI2iB,GACxCP,EAAUn8E,KAAKoyE,IAAIuK,GAAOD,EAC1BN,EAAUp8E,KAAKmxE,IAAIwL,GAAOD,EAC1BH,EAAWv8E,KAAKmxE,IAAIwL,IAAQ5iB,EAAIA,EAAI,EAAI2iB,GACxCtG,EAAI8G,OAAOv1D,EAAI20D,EAAU10D,EAAIw0D,GAC7BhG,EAAI+G,OAAOx1D,EAAI40D,EAAU30D,EAAIu0D,GAC7B/F,EAAI+G,OAAOx1D,EAAI20D,EAAU10D,EAAIw0D,GAC7BhG,EAAI+G,OAAOx1D,EAAI40D,EAAU30D,EAAIu0D,GAC7B/F,EAAI6G,YACJ,MACJ,IAAK,WACDN,GAAOxR,GACS,IAAK,QACrBmR,EAAWt8E,KAAKoyE,IAAIuK,IAAQ5iB,EAAIA,EAAI,EAAI2iB,GACxCP,EAAUn8E,KAAKoyE,IAAIuK,GAAOD,EAC1BN,EAAUp8E,KAAKmxE,IAAIwL,GAAOD,EAC1BH,EAAWv8E,KAAKmxE,IAAIwL,IAAQ5iB,EAAIA,EAAI,EAAI2iB,GACxCtG,EAAI8G,OAAOv1D,EAAI20D,EAAU10D,EAAIw0D,GAC7BhG,EAAI+G,OAAOx1D,EAAI20D,EAAU10D,EAAIw0D,GAC7BhG,EAAI8G,OAAOv1D,EAAI40D,EAAU30D,EAAIu0D,GAC7B/F,EAAI+G,OAAOx1D,EAAI40D,EAAU30D,EAAIu0D,GAC7B,MACJ,IAAK,OACDG,EAAWt8E,KAAKoyE,IAAIuK,IAAQ5iB,EAAIA,EAAI,EAAI2iB,GACxCP,EAAUn8E,KAAKoyE,IAAIuK,GAAOD,EAC1BN,EAAUp8E,KAAKmxE,IAAIwL,GAAOD,EAC1BH,EAAWv8E,KAAKmxE,IAAIwL,IAAQ5iB,EAAIA,EAAI,EAAI2iB,GACxCtG,EAAI8G,OAAOv1D,EAAI20D,EAAU10D,EAAIw0D,GAC7BhG,EAAI+G,OAAOx1D,EAAI20D,EAAU10D,EAAIw0D,GAC7BhG,EAAI8G,OAAOv1D,EAAI40D,EAAU30D,EAAIu0D,GAC7B/F,EAAI+G,OAAOx1D,EAAI40D,EAAU30D,EAAIu0D,GAC7BQ,GAAOxR,GACPmR,EAAWt8E,KAAKoyE,IAAIuK,IAAQ5iB,EAAIA,EAAI,EAAI2iB,GACxCP,EAAUn8E,KAAKoyE,IAAIuK,GAAOD,EAC1BN,EAAUp8E,KAAKmxE,IAAIwL,GAAOD,EAC1BH,EAAWv8E,KAAKmxE,IAAIwL,IAAQ5iB,EAAIA,EAAI,EAAI2iB,GACxCtG,EAAI8G,OAAOv1D,EAAI20D,EAAU10D,EAAIw0D,GAC7BhG,EAAI+G,OAAOx1D,EAAI20D,EAAU10D,EAAIw0D,GAC7BhG,EAAI8G,OAAOv1D,EAAI40D,EAAU30D,EAAIu0D,GAC7B/F,EAAI+G,OAAOx1D,EAAI40D,EAAU30D,EAAIu0D,GAC7B,MACJ,IAAK,OACDA,EAAUpiB,EAAIA,EAAI,EAAI/5D,KAAKoyE,IAAIuK,GAAOD,EACtCN,EAAUp8E,KAAKmxE,IAAIwL,GAAOD,EAC1BtG,EAAI8G,OAAOv1D,EAAIw0D,EAASv0D,EAAIw0D,GAC5BhG,EAAI+G,OAAOx1D,EAAIw0D,EAASv0D,EAAIw0D,GAC5B,MACJ,IAAK,OACDhG,EAAI8G,OAAOv1D,EAAGC,GACdwuD,EAAI+G,OAAOx1D,EAAI3nB,KAAKoyE,IAAIuK,IAAQ5iB,EAAIA,EAAI,EAAI2iB,GAAS90D,EAAI5nB,KAAKmxE,IAAIwL,GAAOD,GACzE,MACJ,KAAK,EACDtG,EAAI6G,YAGZ7G,EAAIkH,OACA/vE,EAAQgwE,YAAc,GACtBnH,EAAIoH,QA3GR,CA6GJ,CAOI,SAASC,GAAepN,EAAOqN,EAAMlsB,GAErC,OADAA,EAASA,GAAU,IACXksB,GAAQrN,GAASA,EAAM1oD,EAAI+1D,EAAK7yC,KAAO2mB,GAAU6e,EAAM1oD,EAAI+1D,EAAK34C,MAAQysB,GAAU6e,EAAMzoD,EAAI81D,EAAKjsB,IAAMD,GAAU6e,EAAMzoD,EAAI81D,EAAKhF,OAASlnB,CACrJ,CACA,SAASmsB,GAASvH,EAAKsH,GACnBtH,EAAI8E,OACJ9E,EAAI0G,YACJ1G,EAAIiH,KAAKK,EAAK7yC,KAAM6yC,EAAKjsB,IAAKisB,EAAK34C,MAAQ24C,EAAK7yC,KAAM6yC,EAAKhF,OAASgF,EAAKjsB,KACzE2kB,EAAI0C,MACR,CACA,SAAS8E,GAAWxH,GAChBA,EAAIkF,SACR,CAGI,SAASuC,GAAezH,EAAK0H,EAAUjuE,EAAQkuE,EAAMv7C,GACrD,IAAKs7C,EACD,OAAO1H,EAAI+G,OAAOttE,EAAO8X,EAAG9X,EAAO+X,GAEvC,GAAa,WAAT4a,EAAmB,CACnB,MAAMw7C,GAAYF,EAASn2D,EAAI9X,EAAO8X,GAAK,EAC3CyuD,EAAI+G,OAAOa,EAAUF,EAASl2D,GAC9BwuD,EAAI+G,OAAOa,EAAUnuE,EAAO+X,EAChC,KAAoB,UAAT4a,KAAuBu7C,EAC9B3H,EAAI+G,OAAOW,EAASn2D,EAAG9X,EAAO+X,GAE9BwuD,EAAI+G,OAAOttE,EAAO8X,EAAGm2D,EAASl2D,GAElCwuD,EAAI+G,OAAOttE,EAAO8X,EAAG9X,EAAO+X,EAChC,CAGI,SAASq2D,GAAe7H,EAAK0H,EAAUjuE,EAAQkuE,GAC/C,IAAKD,EACD,OAAO1H,EAAI+G,OAAOttE,EAAO8X,EAAG9X,EAAO+X,GAEvCwuD,EAAI8H,cAAcH,EAAOD,EAASK,KAAOL,EAASM,KAAML,EAAOD,EAASO,KAAOP,EAASQ,KAAMP,EAAOluE,EAAOuuE,KAAOvuE,EAAOsuE,KAAMJ,EAAOluE,EAAOyuE,KAAOzuE,EAAOwuE,KAAMxuE,EAAO8X,EAAG9X,EAAO+X,EACvL,CAkBA,SAAS22D,GAAanI,EAAKzuD,EAAGC,EAAGvL,EAAMmiE,GACnC,GAAIA,EAAKC,eAAiBD,EAAKE,UAAW,CAOtC,MAAMC,EAAUvI,EAAI0E,YAAYz+D,GAC1BwuB,EAAOljB,EAAIg3D,EAAQC,sBACnB75C,EAAQpd,EAAIg3D,EAAQE,uBACpBptB,EAAM7pC,EAAI+2D,EAAQG,wBAClBpG,EAAS9wD,EAAI+2D,EAAQI,yBACrBC,EAAcR,EAAKC,eAAiBhtB,EAAMinB,GAAU,EAAIA,EAC9DtC,EAAI6I,YAAc7I,EAAI8I,UACtB9I,EAAI0G,YACJ1G,EAAI6C,UAAYuF,EAAKW,iBAAmB,EACxC/I,EAAI8G,OAAOryC,EAAMm0C,GACjB5I,EAAI+G,OAAOp4C,EAAOi6C,GAClB5I,EAAIoH,QACR,CACJ,CACA,SAAS4B,GAAahJ,EAAKoI,GACvB,MAAMa,EAAWjJ,EAAI8I,UACrB9I,EAAI8I,UAAYV,EAAKxX,MACrBoP,EAAIkJ,SAASd,EAAK3zC,KAAM2zC,EAAK/sB,IAAK+sB,EAAK1uD,MAAO0uD,EAAK9sB,QACnD0kB,EAAI8I,UAAYG,CACpB,CAGI,SAASE,GAAWnJ,EAAKllE,EAAMyW,EAAGC,EAAGmuD,EAAMyI,EAAO,CAAC,GACnD,MAAMviE,EAAQ7J,GAAQlB,GAAQA,EAAO,CACjCA,GAEEssE,EAASgB,EAAKgB,YAAc,GAA0B,KAArBhB,EAAKiB,YAC5C,IAAItiF,EAAGkf,EAIP,IAHA+5D,EAAI8E,OACJ9E,EAAIL,KAAOA,EAAKjqE,OAtDpB,SAAuBsqE,EAAKoI,GACpBA,EAAKkB,aACLtJ,EAAIwG,UAAU4B,EAAKkB,YAAY,GAAIlB,EAAKkB,YAAY,IAEnDnX,GAAciW,EAAK/B,WACpBrG,EAAIjO,OAAOqW,EAAK/B,UAEhB+B,EAAKxX,QACLoP,EAAI8I,UAAYV,EAAKxX,OAErBwX,EAAKmB,YACLvJ,EAAIuJ,UAAYnB,EAAKmB,WAErBnB,EAAKoB,eACLxJ,EAAIwJ,aAAepB,EAAKoB,aAEhC,CAuCIC,CAAczJ,EAAKoI,GACfrhF,EAAI,EAAGA,EAAI8e,EAAM7e,SAAUD,EAC3Bkf,EAAOJ,EAAM9e,GACTqhF,EAAKsB,UACLV,GAAahJ,EAAKoI,EAAKsB,UAEvBtC,IACIgB,EAAKiB,cACLrJ,EAAI6I,YAAcT,EAAKiB,aAEtBlX,GAAciW,EAAKgB,eACpBpJ,EAAI6C,UAAYuF,EAAKgB,aAEzBpJ,EAAI2J,WAAW1jE,EAAMsL,EAAGC,EAAG42D,EAAKwB,WAEpC5J,EAAI6J,SAAS5jE,EAAMsL,EAAGC,EAAG42D,EAAKwB,UAC9BzB,GAAanI,EAAKzuD,EAAGC,EAAGvL,EAAMmiE,GAC9B52D,GAAK7f,OAAOguE,EAAKE,YAErBG,EAAIkF,SACR,CAKI,SAAS4E,GAAmB9J,EAAKiH,GACjC,MAAM,EAAE11D,EAAE,EAAEC,EAAE,EAAEmyC,EAAE,EAAErB,EAAE,OAAEgkB,GAAYW,EAEpCjH,EAAI4G,IAAIr1D,EAAI+0D,EAAOyD,QAASv4D,EAAI80D,EAAOyD,QAASzD,EAAOyD,QAAS,IAAMvV,GAAIA,IAAI,GAE9EwL,EAAI+G,OAAOx1D,EAAGC,EAAI8wC,EAAIgkB,EAAO0D,YAE7BhK,EAAI4G,IAAIr1D,EAAI+0D,EAAO0D,WAAYx4D,EAAI8wC,EAAIgkB,EAAO0D,WAAY1D,EAAO0D,WAAYxV,GAAIM,IAAS,GAE1FkL,EAAI+G,OAAOx1D,EAAIoyC,EAAI2iB,EAAO2D,YAAaz4D,EAAI8wC,GAE3C0d,EAAI4G,IAAIr1D,EAAIoyC,EAAI2iB,EAAO2D,YAAaz4D,EAAI8wC,EAAIgkB,EAAO2D,YAAa3D,EAAO2D,YAAanV,GAAS,GAAG,GAEhGkL,EAAI+G,OAAOx1D,EAAIoyC,EAAGnyC,EAAI80D,EAAO4D,UAE7BlK,EAAI4G,IAAIr1D,EAAIoyC,EAAI2iB,EAAO4D,SAAU14D,EAAI80D,EAAO4D,SAAU5D,EAAO4D,SAAU,GAAIpV,IAAS,GAEpFkL,EAAI+G,OAAOx1D,EAAI+0D,EAAOyD,QAASv4D,EACnC,CAEA,MAAM24D,GAAc,uCACdC,GAAa,wEAWf,SAASC,GAAa5jF,EAAO6iC,GAC7B,MAAMjuB,GAAW,GAAK5U,GAAOyU,MAAMivE,IACnC,IAAK9uE,GAA0B,WAAfA,EAAQ,GACpB,OAAc,IAAPiuB,EAGX,OADA7iC,GAAS4U,EAAQ,GACVA,EAAQ,IACX,IAAK,KACD,OAAO5U,EACX,IAAK,IACDA,GAAS,IAGjB,OAAO6iC,EAAO7iC,CAClB,CACA,MAAM6jF,GAAgBx/B,IAAKA,GAAK,EAChC,SAASy/B,GAAkB9jF,EAAO+jF,GAC9B,MAAM5a,EAAM,CAAC,EACP6a,EAAW7zE,GAAS4zE,GACpBjwE,EAAOkwE,EAAWj4E,OAAO+H,KAAKiwE,GAASA,EACvChhD,EAAO5yB,GAASnQ,GAASgkF,EAAYxtE,GAAOs1D,GAAe9rE,EAAMwW,GAAOxW,EAAM+jF,EAAMvtE,KAAWA,GAAOxW,EAAMwW,GAAQ,IAAIxW,EAC9H,IAAK,MAAMwW,KAAQ1C,EACfq1D,EAAI3yD,GAAQqtE,GAAa9gD,EAAKvsB,IAElC,OAAO2yD,CACX,CAQI,SAAS8a,GAAOjkF,GAChB,OAAO8jF,GAAkB9jF,EAAO,CAC5B40D,IAAK,IACL1sB,MAAO,IACP2zC,OAAQ,IACR7tC,KAAM,KAEd,CAOI,SAASk2C,GAAclkF,GACvB,OAAO8jF,GAAkB9jF,EAAO,CAC5B,UACA,WACA,aACA,eAER,CAQI,SAASmkF,GAAUnkF,GACnB,MAAMuW,EAAM0tE,GAAOjkF,GAGnB,OAFAuW,EAAI0c,MAAQ1c,EAAIy3B,KAAOz3B,EAAI2xB,MAC3B3xB,EAAIs+C,OAASt+C,EAAIq+C,IAAMr+C,EAAIslE,OACpBtlE,CACX,CAOI,SAAS6tE,GAAO1zE,EAAS2zE,GACzB3zE,EAAUA,GAAW,CAAC,EACtB2zE,EAAWA,GAAYpJ,GAAS/B,KAChC,IAAIr2C,EAAOipC,GAAep7D,EAAQmyB,KAAMwhD,EAASxhD,MAC7B,iBAATA,IACPA,EAAOnwB,SAASmwB,EAAM,KAE1B,IAAI7P,EAAQ84C,GAAep7D,EAAQsiB,MAAOqxD,EAASrxD,OAC/CA,KAAW,GAAKA,GAAOve,MAAMkvE,MAC7BljF,QAAQ07B,KAAK,kCAAoCnJ,EAAQ,KACzDA,OAAQtyB,GAEZ,MAAMw4E,EAAO,CACTC,OAAQrN,GAAep7D,EAAQyoE,OAAQkL,EAASlL,QAChDC,WAAYwK,GAAa9X,GAAep7D,EAAQ0oE,WAAYiL,EAASjL,YAAav2C,GAClFA,OACA7P,QACAo3C,OAAQ0B,GAAep7D,EAAQ05D,OAAQia,EAASja,QAChDn7D,OAAQ,IAGZ,OADAiqE,EAAKjqE,OAzdL,SAAsBiqE,GACtB,OAAKA,GAAQxN,GAAcwN,EAAKr2C,OAAS6oC,GAAcwN,EAAKC,QACjD,MAEHD,EAAKlmD,MAAQkmD,EAAKlmD,MAAQ,IAAM,KAAOkmD,EAAK9O,OAAS8O,EAAK9O,OAAS,IAAM,IAAM8O,EAAKr2C,KAAO,MAAQq2C,EAAKC,MACpH,CAodkBmL,CAAapL,GACpBA,CACX,CAWI,SAAS7/D,GAAQkrE,EAAQl4E,EAAS4D,EAAOonD,GACzC,IACI/2D,EAAGgsE,EAAMtsE,EADTwkF,GAAY,EAEhB,IAAIlkF,EAAI,EAAGgsE,EAAOiY,EAAOhkF,OAAQD,EAAIgsE,IAAQhsE,EAEzC,GADAN,EAAQukF,EAAOjkF,QACDI,IAAVV,SAGYU,IAAZ2L,GAA0C,mBAAVrM,IAChCA,EAAQA,EAAMqM,GACdm4E,GAAY,QAEF9jF,IAAVuP,GAAuBsF,GAAQvV,KAC/BA,EAAQA,EAAMiQ,EAAQjQ,EAAMO,QAC5BikF,GAAY,QAEF9jF,IAAVV,GAIA,OAHIq3D,IAASmtB,IACTntB,EAAKmtB,WAAY,GAEdxkF,CAGnB,CAeA,SAASykF,GAAcC,EAAer4E,GAClC,OAAON,OAAOuc,OAAOvc,OAAO3C,OAAOs7E,GAAgBr4E,EACvD,CAWI,SAASs4E,GAAgBC,EAAQC,EAAW,CAC5C,IACDC,EAAYT,EAAUU,EAAY,IAAIH,EAAO,IAC5C,MAAMI,EAAkBF,GAAcF,OACd,IAAbP,IACPA,EAAWY,GAAS,YAAaL,IAErC,MAAMx9C,EAAQ,CACV,CAAC14B,OAAOI,aAAc,SACtBo2E,YAAY,EACZC,QAASP,EACTQ,YAAaJ,EACb5J,UAAWiJ,EACXgB,WAAYN,EACZvK,SAAWjoC,GAAQoyC,GAAgB,CAC3BpyC,KACGqyC,GACJC,EAAUG,EAAiBX,IAEtC,OAAO,IAAIiB,MAAMl+C,EAAO,CAGpB,cAAAm+C,CAAgBvyE,EAAQwD,GAIpB,cAHOxD,EAAOwD,UACPxD,EAAOwyE,aACPZ,EAAO,GAAGpuE,IACV,CACX,EAGA,GAAAH,CAAKrD,EAAQwD,GACT,OAAOivE,GAAQzyE,EAAQwD,EAAM,IAyOzC,SAA8BA,EAAMquE,EAAUD,EAAQc,GAClD,IAAI1lF,EACJ,IAAK,MAAMiM,KAAU44E,EAEjB,GADA7kF,EAAQilF,GAASU,GAAQ15E,EAAQuK,GAAOouE,QACnB,IAAV5kF,EACP,OAAO4lF,GAAiBpvE,EAAMxW,GAAS6lF,GAAkBjB,EAAQc,EAAOlvE,EAAMxW,GAASA,CAGnG,CAjP6C8lF,CAAqBtvE,EAAMquE,EAAUD,EAAQ5xE,GAClF,EAIA,wBAAA+rC,CAA0B/rC,EAAQwD,GAC9B,OAAOC,QAAQsoC,yBAAyB/rC,EAAOmyE,QAAQ,GAAI3uE,EAC/D,EAGA,cAAA2kC,GACI,OAAO1kC,QAAQ0kC,eAAeypC,EAAO,GACzC,EAGA,GAAA94E,CAAKkH,EAAQwD,GACT,OAAOuvE,GAAqB/yE,GAAQwC,SAASgB,EACjD,EAGA,OAAAwvE,CAAShzE,GACL,OAAO+yE,GAAqB/yE,EAChC,EAGA,GAAAqF,CAAKrF,EAAQwD,EAAMxW,GACf,MAAMimF,EAAUjzE,EAAOkzE,WAAalzE,EAAOkzE,SAAWnB,KAGtD,OAFA/xE,EAAOwD,GAAQyvE,EAAQzvE,GAAQxW,SACxBgT,EAAOwyE,OACP,CACX,GAER,CAQI,SAASW,GAAeT,EAAOr5E,EAAS+5E,EAAUC,GAClD,MAAMj/C,EAAQ,CACV89C,YAAY,EACZoB,OAAQZ,EACRa,SAAUl6E,EACVm6E,UAAWJ,EACXK,OAAQ,IAAI3mD,IACZ24C,aAAcA,GAAaiN,EAAOW,GAClCK,WAAanN,GAAM4M,GAAeT,EAAOnM,EAAK6M,EAAUC,GACxD7L,SAAWjoC,GAAQ4zC,GAAeT,EAAMlL,SAASjoC,GAAQlmC,EAAS+5E,EAAUC,IAEhF,OAAO,IAAIf,MAAMl+C,EAAO,CAGpB,cAAAm+C,CAAgBvyE,EAAQwD,GAGpB,cAFOxD,EAAOwD,UACPkvE,EAAMlvE,IACN,CACX,EAGA,GAAAH,CAAKrD,EAAQwD,EAAM+iC,GACf,OAAOksC,GAAQzyE,EAAQwD,EAAM,IA6DzC,SAA6BxD,EAAQwD,EAAM+iC,GACvC,MAAM,OAAE+sC,EAAO,SAAEC,EAAS,UAAEC,EAAY/N,aAAcp+B,GAAiBrnC,EACvE,IAAIhT,EAAQsmF,EAAO9vE,GAYnB,OAVIo3D,GAAW5tE,IAAUq6C,EAAYssC,aAAanwE,KAC9CxW,EAWR,SAA4BwW,EAAMowE,EAAU5zE,EAAQumC,GAChD,MAAM,OAAE+sC,EAAO,SAAEC,EAAS,UAAEC,EAAU,OAAEC,GAAYzzE,EACpD,GAAIyzE,EAAO36E,IAAI0K,GACX,MAAM,IAAIyR,MAAM,uBAAyBza,MAAMmS,KAAK8mE,GAAQhnE,KAAK,MAAQ,KAAOjJ,GAEpFiwE,EAAOl9E,IAAIiN,GACX,IAAIxW,EAAQ4mF,EAASL,EAAUC,GAAajtC,GAM5C,OALAktC,EAAOtgE,OAAO3P,GACVovE,GAAiBpvE,EAAMxW,KAEvBA,EAAQ6lF,GAAkBS,EAAOnB,QAASmB,EAAQ9vE,EAAMxW,IAErDA,CACX,CAxBgB6mF,CAAmBrwE,EAAMxW,EAAOgT,EAAQumC,IAEhDhkC,GAAQvV,IAAUA,EAAMO,SACxBP,EAsBR,SAAuBwW,EAAMxW,EAAOgT,EAAQ8zE,GACxC,MAAM,OAAER,EAAO,SAAEC,EAAS,UAAEC,EAAY/N,aAAcp+B,GAAiBrnC,EACvE,QAA8B,IAAnBuzE,EAASt2E,OAAyB62E,EAAYtwE,GACrD,OAAOxW,EAAMumF,EAASt2E,MAAQjQ,EAAMO,QACjC,GAAI4P,GAASnQ,EAAM,IAAK,CAE3B,MAAM+mF,EAAM/mF,EACN4kF,EAAS0B,EAAOnB,QAAQx8E,OAAQC,GAAIA,IAAMm+E,GAChD/mF,EAAQ,GACR,IAAK,MAAM8tE,KAAQiZ,EAAI,CACnB,MAAMzZ,EAAWuY,GAAkBjB,EAAQ0B,EAAQ9vE,EAAMs3D,GACzD9tE,EAAMgB,KAAKmlF,GAAe7Y,EAAUiZ,EAAUC,GAAaA,EAAUhwE,GAAO6jC,GAChF,CACJ,CACA,OAAOr6C,CACX,CArCgBgnF,CAAcxwE,EAAMxW,EAAOgT,EAAQqnC,EAAYysC,cAEvDlB,GAAiBpvE,EAAMxW,KAEvBA,EAAQmmF,GAAenmF,EAAOumF,EAAUC,GAAaA,EAAUhwE,GAAO6jC,IAEnEr6C,CACX,CA5E6CinF,CAAoBj0E,EAAQwD,EAAM+iC,GACvE,EAIA,wBAAAwF,CAA0B/rC,EAAQwD,GAC9B,OAAOxD,EAAOylE,aAAayO,QAAUzwE,QAAQ3K,IAAI45E,EAAOlvE,GAAQ,CAC5DJ,YAAY,EACZ+wE,cAAc,QACdzmF,EAAY+V,QAAQsoC,yBAAyB2mC,EAAOlvE,EAC5D,EAGA,cAAA2kC,GACI,OAAO1kC,QAAQ0kC,eAAeuqC,EAClC,EAGA,GAAA55E,CAAKkH,EAAQwD,GACT,OAAOC,QAAQ3K,IAAI45E,EAAOlvE,EAC9B,EAGA,OAAAwvE,GACI,OAAOvvE,QAAQuvE,QAAQN,EAC3B,EAGA,GAAArtE,CAAKrF,EAAQwD,EAAMxW,GAGf,OAFA0lF,EAAMlvE,GAAQxW,SACPgT,EAAOwD,IACP,CACX,GAER,CAGI,SAASiiE,GAAaiN,EAAOzK,EAAW,CACxCmM,YAAY,EACZC,WAAW,IAEX,MAAM,YAAEnM,EAAaD,EAASmM,WAAW,WAAEjM,EAAYF,EAASoM,UAAU,SAAEC,EAAUrM,EAASiM,SAAaxB,EAC5G,MAAO,CACHwB,QAASI,EACTF,WAAYlM,EACZmM,UAAWlM,EACXwL,aAAc/Y,GAAWsN,GAAeA,EAAc,IAAIA,EAC1D4L,YAAalZ,GAAWuN,GAAcA,EAAa,IAAIA,EAE/D,CACA,MAAMwK,GAAU,CAAC15E,EAAQpM,IAAOoM,EAASA,EAASyhE,GAAY7tE,GAAQA,EAChE+lF,GAAmB,CAACpvE,EAAMxW,IAAQmQ,GAASnQ,IAAmB,aAATwW,IAAyD,OAAjCzK,OAAOovC,eAAen7C,IAAmBA,EAAMwB,cAAgBuK,QAClJ,SAAS05E,GAAQzyE,EAAQwD,EAAM6C,GAC3B,GAAItN,OAAO1F,UAAU2F,eAAenG,KAAKmN,EAAQwD,IAAkB,gBAATA,EACtD,OAAOxD,EAAOwD,GAElB,MAAMxW,EAAQqZ,IAGd,OADArG,EAAOwD,GAAQxW,EACRA,CACX,CA+CA,SAASunF,GAAgBlD,EAAU7tE,EAAMxW,GACrC,OAAO4tE,GAAWyW,GAAYA,EAAS7tE,EAAMxW,GAASqkF,CAC1D,CACA,MAAMmD,GAAW,CAACz/E,EAAKmyD,KAAiB,IAARnyD,EAAemyD,EAAwB,iBAARnyD,EAAmBslE,GAAiBnT,EAAQnyD,QAAOrH,EAClH,SAAS+mF,GAAUpvE,EAAKqvE,EAAc3/E,EAAK4/E,EAAgB3nF,GACvD,IAAK,MAAMk6D,KAAUwtB,EAAa,CAC9B,MAAMn1C,EAAQi1C,GAASz/E,EAAKmyD,GAC5B,GAAI3nB,EAAO,CACPl6B,EAAI9O,IAAIgpC,GACR,MAAM8xC,EAAWkD,GAAgBh1C,EAAM6oC,UAAWrzE,EAAK/H,GACvD,QAAwB,IAAbqkF,GAA4BA,IAAat8E,GAAOs8E,IAAasD,EAGpE,OAAOtD,CAEf,MAAO,IAAc,IAAV9xC,QAA6C,IAAnBo1C,GAAkC5/E,IAAQ4/E,EAG3E,OAAO,IAEf,CACA,OAAO,CACX,CACA,SAAS9B,GAAkB6B,EAAcpa,EAAU92D,EAAMxW,GACrD,MAAM8kF,EAAaxX,EAAS8X,YACtBf,EAAWkD,GAAgBja,EAAS8N,UAAW5kE,EAAMxW,GACrD4nF,EAAY,IACXF,KACA5C,GAEDzsE,EAAM,IAAIynB,IAChBznB,EAAI9O,IAAIvJ,GACR,IAAI+H,EAAM8/E,GAAiBxvE,EAAKuvE,EAAWpxE,EAAM6tE,GAAY7tE,EAAMxW,GACnE,OAAY,OAAR+H,SAGoB,IAAbs8E,GAA4BA,IAAa7tE,IAChDzO,EAAM8/E,GAAiBxvE,EAAKuvE,EAAWvD,EAAUt8E,EAAK/H,GAC1C,OAAR+H,KAID48E,GAAgBn3E,MAAMmS,KAAKtH,GAAM,CACpC,IACDysE,EAAYT,EAAU,IAQ7B,SAAsB/W,EAAU92D,EAAMxW,GAClC,MAAMk6D,EAASoT,EAAS+X,aAClB7uE,KAAQ0jD,IACVA,EAAO1jD,GAAQ,CAAC,GAEpB,MAAMxD,EAASknD,EAAO1jD,GACtB,OAAIjB,GAAQvC,IAAW7C,GAASnQ,GAErBA,EAEJgT,GAAU,CAAC,CACtB,CAnBiC80E,CAAaxa,EAAU92D,EAAMxW,GAC9D,CACA,SAAS6nF,GAAiBxvE,EAAKuvE,EAAW7/E,EAAKs8E,EAAUvW,GACrD,KAAM/lE,GACFA,EAAM0/E,GAAUpvE,EAAKuvE,EAAW7/E,EAAKs8E,EAAUvW,GAEnD,OAAO/lE,CACX,CAsBA,SAASk9E,GAASl9E,EAAK68E,GACnB,IAAK,MAAMryC,KAASqyC,EAAO,CACvB,IAAKryC,EACD,SAEJ,MAAMvyC,EAAQuyC,EAAMxqC,GACpB,QAAqB,IAAV/H,EACP,OAAOA,CAEf,CACJ,CACA,SAAS+lF,GAAqB/yE,GAC1B,IAAIc,EAAOd,EAAOwyE,MAIlB,OAHK1xE,IACDA,EAAOd,EAAOwyE,MAItB,SAAkCZ,GAC9B,MAAMvsE,EAAM,IAAIynB,IAChB,IAAK,MAAMyS,KAASqyC,EAChB,IAAK,MAAM78E,KAAOgE,OAAO+H,KAAKy+B,GAAO5pC,OAAQy7C,IAAKA,EAAEpoC,WAAW,MAC3D3D,EAAI9O,IAAIxB,GAGhB,OAAOyF,MAAMmS,KAAKtH,EACtB,CAZ8B0vE,CAAyB/0E,EAAOmyE,UAEnDrxE,CACX,CAUA,SAASk0E,GAA4BtrD,EAAMj4B,EAAM5C,EAAO+wE,GACpD,MAAM,OAAEE,GAAYp2C,GACd,IAAE30B,EAAK,KAASjH,KAAKmnF,SACrBC,EAAS,IAAI16E,MAAMolE,GACzB,IAAItyE,EAAGgsE,EAAMr8D,EAAO69D,EACpB,IAAIxtE,EAAI,EAAGgsE,EAAOsG,EAAOtyE,EAAIgsE,IAAQhsE,EACjC2P,EAAQ3P,EAAIuB,EACZisE,EAAOrpE,EAAKwL,GACZi4E,EAAO5nF,GAAK,CACR+8D,EAAGyV,EAAOlsE,MAAMymE,GAAiBS,EAAM/lE,GAAMkI,IAGrD,OAAOi4E,CACX,CAEA,MAAMC,GAAUj9E,OAAOi9E,SAAW,MAC5BC,GAAW,CAAC3V,EAAQnyE,IAAIA,EAAImyE,EAAOlyE,SAAWkyE,EAAOnyE,GAAG+nF,MAAQ5V,EAAOnyE,GACvEgoF,GAAgB5O,GAA0B,MAAdA,EAAoB,IAAM,IAC5D,SAAS6O,GAAYC,EAAYC,EAAaC,EAAYhe,GAItD,MAAMuW,EAAWuH,EAAWH,KAAOI,EAAcD,EAC3Cvb,EAAUwb,EACVE,EAAOD,EAAWL,KAAOI,EAAcC,EACvCE,EAAMxY,GAAsBnD,EAASgU,GACrC4H,EAAMzY,GAAsBuY,EAAM1b,GACxC,IAAI6b,EAAMF,GAAOA,EAAMC,GACnBE,EAAMF,GAAOD,EAAMC,GAEvBC,EAAM39E,MAAM29E,GAAO,EAAIA,EACvBC,EAAM59E,MAAM49E,GAAO,EAAIA,EACvB,MAAMC,EAAKte,EAAIoe,EACTG,EAAKve,EAAIqe,EACf,MAAO,CACH9H,SAAU,CACNn2D,EAAGmiD,EAAQniD,EAAIk+D,GAAML,EAAK79D,EAAIm2D,EAASn2D,GACvCC,EAAGkiD,EAAQliD,EAAIi+D,GAAML,EAAK59D,EAAIk2D,EAASl2D,IAE3C49D,KAAM,CACF79D,EAAGmiD,EAAQniD,EAAIm+D,GAAMN,EAAK79D,EAAIm2D,EAASn2D,GACvCC,EAAGkiD,EAAQliD,EAAIk+D,GAAMN,EAAK59D,EAAIk2D,EAASl2D,IAGnD,CAoFA,SAASm+D,GAAgBC,EAAI9lF,EAAKiN,GAC9B,OAAOnN,KAAKmN,IAAInN,KAAKE,IAAI8lF,EAAI74E,GAAMjN,EACvC,CAwBI,SAAS+lF,GAA2B3W,EAAQ/hE,EAASmwE,EAAMtF,EAAM7B,GACjE,IAAIp5E,EAAGgsE,EAAMkH,EAAO6V,EAKpB,GAHI34E,EAAQuiE,WACRR,EAASA,EAAO9pE,OAAQwgF,IAAMA,EAAGd,OAEE,aAAnC33E,EAAQ44E,wBAzDZ,SAA6B7W,EAAQiH,EAAY,KACjD,MAAM6P,EAAYjB,GAAa5O,GACzB8P,EAAY/W,EAAOlyE,OACnBkpF,EAASj8E,MAAMg8E,GAAW/I,KAAK,GAC/BiJ,EAAKl8E,MAAMg8E,GAEjB,IAAIlpF,EAAGqpF,EAAaC,EAChBC,EAAazB,GAAS3V,EAAQ,GAClC,IAAInyE,EAAI,EAAGA,EAAIkpF,IAAalpF,EAIxB,GAHAqpF,EAAcC,EACdA,EAAeC,EACfA,EAAazB,GAAS3V,EAAQnyE,EAAI,GAC7BspF,EAAL,CAGA,GAAIC,EAAY,CACZ,MAAMC,EAAaD,EAAWnQ,GAAakQ,EAAalQ,GAExD+P,EAAOnpF,GAAoB,IAAfwpF,GAAoBD,EAAWN,GAAaK,EAAaL,IAAcO,EAAa,CACpG,CACAJ,EAAGppF,GAAMqpF,EAA2BE,EAA6Bpb,GAAKgb,EAAOnpF,EAAI,MAAQmuE,GAAKgb,EAAOnpF,IAAM,GAAKmpF,EAAOnpF,EAAI,GAAKmpF,EAAOnpF,IAAM,EAA5FmpF,EAAOnpF,EAAI,GAArCmpF,EAAOnpF,EAN9B,EAtEJ,SAAwBmyE,EAAQgX,EAAQC,GACxC,MAAMF,EAAY/W,EAAOlyE,OACzB,IAAIwpF,EAAQC,EAAOC,EAAMC,EAAkBN,EACvCC,EAAazB,GAAS3V,EAAQ,GAClC,IAAI,IAAInyE,EAAI,EAAGA,EAAIkpF,EAAY,IAAKlpF,EAChCspF,EAAeC,EACfA,EAAazB,GAAS3V,EAAQnyE,EAAI,GAC7BspF,GAAiBC,IAGlBnb,GAAa+a,EAAOnpF,GAAI,EAAG6nF,IAC3BuB,EAAGppF,GAAKopF,EAAGppF,EAAI,GAAK,GAGxBypF,EAASL,EAAGppF,GAAKmpF,EAAOnpF,GACxB0pF,EAAQN,EAAGppF,EAAI,GAAKmpF,EAAOnpF,GAC3B4pF,EAAmB/mF,KAAKC,IAAI2mF,EAAQ,GAAK5mF,KAAKC,IAAI4mF,EAAO,GACrDE,GAAoB,IAGxBD,EAAO,EAAI9mF,KAAK6sE,KAAKka,GACrBR,EAAGppF,GAAKypF,EAASE,EAAOR,EAAOnpF,GAC/BopF,EAAGppF,EAAI,GAAK0pF,EAAQC,EAAOR,EAAOnpF,KAE1C,CAsDI6pF,CAAe1X,EAAQgX,EAAQC,GArDnC,SAAyBjX,EAAQiX,EAAIhQ,EAAY,KAC7C,MAAM6P,EAAYjB,GAAa5O,GACzB8P,EAAY/W,EAAOlyE,OACzB,IAAIo3E,EAAOgS,EAAaC,EACpBC,EAAazB,GAAS3V,EAAQ,GAClC,IAAI,IAAInyE,EAAI,EAAGA,EAAIkpF,IAAalpF,EAAE,CAI9B,GAHAqpF,EAAcC,EACdA,EAAeC,EACfA,EAAazB,GAAS3V,EAAQnyE,EAAI,IAC7BspF,EACD,SAEJ,MAAMQ,EAASR,EAAalQ,GACtB2Q,EAAST,EAAaL,GACxBI,IACAhS,GAASyS,EAAST,EAAYjQ,IAAc,EAC5CkQ,EAAa,MAAMlQ,KAAe0Q,EAASzS,EAC3CiS,EAAa,MAAML,KAAec,EAAS1S,EAAQ+R,EAAGppF,IAEtDupF,IACAlS,GAASkS,EAAWnQ,GAAa0Q,GAAU,EAC3CR,EAAa,MAAMlQ,KAAe0Q,EAASzS,EAC3CiS,EAAa,MAAML,KAAec,EAAS1S,EAAQ+R,EAAGppF,GAE9D,CACJ,CA6BIgqF,CAAgB7X,EAAQiX,EAAIhQ,EAChC,CAkCQ6Q,CAAoB9X,EAAQiH,OACzB,CACH,IAAI8Q,EAAOjP,EAAO9I,EAAOA,EAAOlyE,OAAS,GAAKkyE,EAAO,GACrD,IAAInyE,EAAI,EAAGgsE,EAAOmG,EAAOlyE,OAAQD,EAAIgsE,IAAQhsE,EACzCkzE,EAAQf,EAAOnyE,GACf+oF,EAAgBd,GAAYiC,EAAMhX,EAAOf,EAAOtvE,KAAKE,IAAI/C,EAAI,EAAGgsE,GAAQiP,EAAO,EAAI,IAAMjP,GAAO57D,EAAQ+5E,SACxGjX,EAAM8N,KAAO+H,EAAcpI,SAASn2D,EACpC0oD,EAAMgO,KAAO6H,EAAcpI,SAASl2D,EACpCyoD,EAAM+N,KAAO8H,EAAcV,KAAK79D,EAChC0oD,EAAMiO,KAAO4H,EAAcV,KAAK59D,EAChCy/D,EAAOhX,CAEf,CACI9iE,EAAQg6E,iBA3ChB,SAAyBjY,EAAQoO,GAC7B,IAAIvgF,EAAGgsE,EAAMkH,EAAOmX,EAAQC,EACxBC,EAAajK,GAAenO,EAAO,GAAIoO,GAC3C,IAAIvgF,EAAI,EAAGgsE,EAAOmG,EAAOlyE,OAAQD,EAAIgsE,IAAQhsE,EACzCsqF,EAAaD,EACbA,EAASE,EACTA,EAAavqF,EAAIgsE,EAAO,GAAKsU,GAAenO,EAAOnyE,EAAI,GAAIugF,GACtD8J,IAGLnX,EAAQf,EAAOnyE,GACXsqF,IACApX,EAAM8N,KAAO4H,GAAgB1V,EAAM8N,KAAMT,EAAK7yC,KAAM6yC,EAAK34C,OACzDsrC,EAAMgO,KAAO0H,GAAgB1V,EAAMgO,KAAMX,EAAKjsB,IAAKisB,EAAKhF,SAExDgP,IACArX,EAAM+N,KAAO2H,GAAgB1V,EAAM+N,KAAMV,EAAK7yC,KAAM6yC,EAAK34C,OACzDsrC,EAAMiO,KAAOyH,GAAgB1V,EAAMiO,KAAMZ,EAAKjsB,IAAKisB,EAAKhF,SAGpE,CAwBQ6O,CAAgBjY,EAAQoO,EAEhC,CAII,SAASiK,KACT,MAAyB,oBAAXtrF,QAA8C,oBAAbM,QACnD,CAGI,SAASirF,GAAeC,GACxB,IAAI9wB,EAAS8wB,EAAQ73D,WAIrB,OAHI+mC,GAAgC,wBAAtBA,EAAO5qD,aACjB4qD,EAASA,EAAOj5C,MAEbi5C,CACX,CAII,SAAS+wB,GAAcC,EAAYxhE,EAAMyhE,GACzC,IAAIC,EAUJ,MAT0B,iBAAfF,GACPE,EAAgB14E,SAASw4E,EAAY,KACJ,IAA7BA,EAAWjnF,QAAQ,OAEnBmnF,EAAgBA,EAAgB,IAAM1hE,EAAKyJ,WAAWg4D,KAG1DC,EAAgBF,EAEbE,CACX,CACA,MAAMC,GAAoB5gF,GAAUA,EAAQkQ,cAAc2wE,YAAYD,iBAAiB5gF,EAAS,MAI1F8gF,GAAY,CACd,MACA,QACA,SACA,QAEJ,SAASC,GAAmBC,EAAQz4D,EAAO04D,GACvC,MAAM/7E,EAAS,CAAC,EAChB+7E,EAASA,EAAS,IAAMA,EAAS,GACjC,IAAI,IAAIprF,EAAI,EAAGA,EAAI,EAAGA,IAAI,CACtB,MAAMqrF,EAAMJ,GAAUjrF,GACtBqP,EAAOg8E,GAAO1f,WAAWwf,EAAOz4D,EAAQ,IAAM24D,EAAMD,KAAY,CACpE,CAGA,OAFA/7E,EAAOsjB,MAAQtjB,EAAOq+B,KAAOr+B,EAAOu4B,MACpCv4B,EAAOklD,OAASllD,EAAOilD,IAAMjlD,EAAOksE,OAC7BlsE,CACX,CAgCI,SAASi8E,GAAoBrlF,EAAOkxE,GACpC,GAAI,WAAYlxE,EACZ,OAAOA,EAEX,MAAM,OAAEy4E,EAAO,wBAAEH,GAA6BpH,EACxCzkD,EAAQq4D,GAAiBrM,GACzB6M,EAAgC,eAApB74D,EAAM84D,UAClBC,EAAWP,GAAmBx4D,EAAO,WACrCg5D,EAAUR,GAAmBx4D,EAAO,SAAU,UAC9C,EAAElI,EAAE,EAAEC,EAAE,IAAEkhE,GAnChB,SAA2Bv8E,EAAGsvE,GAC9B,MAAMkN,EAAUx8E,EAAEw8E,QACZ72D,EAAS62D,GAAWA,EAAQ3rF,OAAS2rF,EAAQ,GAAKx8E,GAClD,QAAEy8E,EAAQ,QAAEC,GAAa/2D,EAC/B,IACIvK,EAAGC,EADHkhE,GAAM,EAEV,GAXiB,EAACnhE,EAAGC,EAAG/X,KAAU8X,EAAI,GAAKC,EAAI,MAAQ/X,IAAWA,EAAOq5E,YAWrEC,CAAaH,EAASC,EAAS18E,EAAEsD,QACjC8X,EAAIqhE,EACJphE,EAAIqhE,MACD,CACH,MAAM5L,EAAOxB,EAAOtqB,wBACpB5pC,EAAIuK,EAAOk3D,QAAU/L,EAAKxyC,KAC1BjjB,EAAIsK,EAAOm3D,QAAUhM,EAAK5rB,IAC1Bq3B,GAAM,CACV,CACA,MAAO,CACHnhE,IACAC,IACAkhE,MAER,CAe6BQ,CAAkBlmF,EAAOy4E,GAC5CM,EAAUyM,EAAS/9C,MAAQi+C,GAAOD,EAAQh+C,MAC1CuxC,EAAUwM,EAASn3B,KAAOq3B,GAAOD,EAAQp3B,KAC/C,IAAI,MAAE3hC,EAAM,OAAE4hC,GAAY4iB,EAK1B,OAJIoU,IACA54D,GAAS84D,EAAS94D,MAAQ+4D,EAAQ/4D,MAClC4hC,GAAUk3B,EAASl3B,OAASm3B,EAAQn3B,QAEjC,CACH/pC,EAAG3nB,KAAKyI,OAAOkf,EAAIw0D,GAAWrsD,EAAQ+rD,EAAO/rD,MAAQ4rD,GACrD9zD,EAAG5nB,KAAKyI,OAAOmf,EAAIw0D,GAAW1qB,EAASmqB,EAAOnqB,OAASgqB,GAE/D,CA0BA,MAAM6N,GAAUroC,GAAIlhD,KAAKyI,MAAU,GAAJy4C,GAAU,GAuCrC,SAASsoC,GAAYlV,EAAOmV,EAAYC,GACxC,MAAMC,EAAaF,GAAc,EAC3BG,EAAeL,GAAOjV,EAAM5iB,OAASi4B,GACrCE,EAAcN,GAAOjV,EAAMxkD,MAAQ65D,GACzCrV,EAAM5iB,OAAS63B,GAAOjV,EAAM5iB,QAC5B4iB,EAAMxkD,MAAQy5D,GAAOjV,EAAMxkD,OAC3B,MAAM+rD,EAASvH,EAAMuH,OAQrB,OAJIA,EAAOhsD,QAAU65D,IAAe7N,EAAOhsD,MAAM6hC,SAAWmqB,EAAOhsD,MAAMC,SACrE+rD,EAAOhsD,MAAM6hC,OAAS,GAAG4iB,EAAM5iB,WAC/BmqB,EAAOhsD,MAAMC,MAAQ,GAAGwkD,EAAMxkD,YAE9BwkD,EAAMoH,0BAA4BiO,GAAc9N,EAAOnqB,SAAWk4B,GAAgB/N,EAAO/rD,QAAU+5D,KACnGvV,EAAMoH,wBAA0BiO,EAChC9N,EAAOnqB,OAASk4B,EAChB/N,EAAO/rD,MAAQ+5D,EACfvV,EAAM8B,IAAI0T,aAAaH,EAAY,EAAG,EAAGA,EAAY,EAAG,IACjD,EAGf,CAKI,MAAMI,GAA+B,WACrC,IAAIC,GAAmB,EACvB,IACI,MAAMz8E,EAAU,CACZ,WAAIqlD,GAEA,OADAo3B,GAAmB,GACZ,CACX,GAEArC,OACAtrF,OAAO0C,iBAAiB,OAAQ,KAAMwO,GACtClR,OAAO8C,oBAAoB,OAAQ,KAAMoO,GAEjD,CAAE,MAAOhB,GAET,CACA,OAAOy9E,CACX,CAjByC,GA0BrC,SAASC,GAAa3iF,EAASqlC,GAC/B,MAAM9vC,EA/LV,SAAkBqtF,EAAIv9C,GAClB,OAAOu7C,GAAiBgC,GAAIC,iBAAiBx9C,EACjD,CA6LkBy9C,CAAS9iF,EAASqlC,GAC1Bl7B,EAAU5U,GAASA,EAAMyU,MAAM,qBACrC,OAAOG,GAAWA,EAAQ,QAAKlU,CACnC,CAII,SAAS8sF,GAAa3kB,EAAIC,EAAI4B,EAAG/kC,GACjC,MAAO,CACH7a,EAAG+9C,EAAG/9C,EAAI4/C,GAAK5B,EAAGh+C,EAAI+9C,EAAG/9C,GACzBC,EAAG89C,EAAG99C,EAAI2/C,GAAK5B,EAAG/9C,EAAI89C,EAAG99C,GAEjC,CAGI,SAAS0iE,GAAsB5kB,EAAIC,EAAI4B,EAAG/kC,GAC1C,MAAO,CACH7a,EAAG+9C,EAAG/9C,EAAI4/C,GAAK5B,EAAGh+C,EAAI+9C,EAAG/9C,GACzBC,EAAY,WAAT4a,EAAoB+kC,EAAI,GAAM7B,EAAG99C,EAAI+9C,EAAG/9C,EAAa,UAAT4a,EAAmB+kC,EAAI,EAAI7B,EAAG99C,EAAI+9C,EAAG/9C,EAAI2/C,EAAI,EAAI5B,EAAG/9C,EAAI89C,EAAG99C,EAElH,CAGI,SAAS2iE,GAAqB7kB,EAAIC,EAAI4B,EAAG/kC,GACzC,MAAMgoD,EAAM,CACR7iE,EAAG+9C,EAAG0Y,KACNx2D,EAAG89C,EAAG4Y,MAEJmM,EAAM,CACR9iE,EAAGg+C,EAAGwY,KACNv2D,EAAG+9C,EAAG0Y,MAEJx3E,EAAIwjF,GAAa3kB,EAAI8kB,EAAKjjB,GAC1Bj8D,EAAI++E,GAAaG,EAAKC,EAAKljB,GAC3BniC,EAAIilD,GAAaI,EAAK9kB,EAAI4B,GAC1B10D,EAAIw3E,GAAaxjF,EAAGyE,EAAGi8D,GACvBh7D,EAAI89E,GAAa/+E,EAAG85B,EAAGmiC,GAC7B,OAAO8iB,GAAax3E,EAAGtG,EAAGg7D,EAC9B,CAyCA,SAASmjB,GAAcC,EAAKC,EAAO96D,GAC/B,OAAO66D,EAxCmB,SAASC,EAAO96D,GAC1C,MAAO,CACH,CAAAnI,CAAGA,GACC,OAAOijE,EAAQA,EAAQ96D,EAAQnI,CACnC,EACA,QAAAkjE,CAAU9wB,GACNjqC,EAAQiqC,CACZ,EACA,SAAA4lB,CAAWxQ,GACP,MAAc,WAAVA,EACOA,EAEM,UAAVA,EAAoB,OAAS,OACxC,EACA,KAAA2b,CAAOnjE,EAAG9qB,GACN,OAAO8qB,EAAI9qB,CACf,EACA,UAAAkuF,CAAYpjE,EAAGqjE,GACX,OAAOrjE,EAAIqjE,CACf,EAER,CAmBiBC,CAAsBL,EAAO96D,GAjBnC,CACH,CAAAnI,CAAGA,GACC,OAAOA,CACX,EACA,QAAAkjE,CAAU9wB,GAAI,EACd,SAAA4lB,CAAWxQ,GACP,OAAOA,CACX,EACA,KAAA2b,CAAOnjE,EAAG9qB,GACN,OAAO8qB,EAAI9qB,CACf,EACA,UAAAkuF,CAAYpjE,EAAGujE,GACX,OAAOvjE,CACX,EAKR,CACA,SAASwjE,GAAsB/U,EAAKgV,GAChC,IAAIv7D,EAAOw7D,EACO,QAAdD,GAAqC,QAAdA,IACvBv7D,EAAQumD,EAAIyF,OAAOhsD,MACnBw7D,EAAW,CACPx7D,EAAMs6D,iBAAiB,aACvBt6D,EAAMy7D,oBAAoB,cAE9Bz7D,EAAM07D,YAAY,YAAaH,EAAW,aAC1ChV,EAAIoV,kBAAoBH,EAEhC,CACA,SAASI,GAAqBrV,EAAKiV,QACd9tF,IAAb8tF,WACOjV,EAAIoV,kBACXpV,EAAIyF,OAAOhsD,MAAM07D,YAAY,YAAaF,EAAS,GAAIA,EAAS,IAExE,CAEA,SAASK,GAAW/+C,GAChB,MAAiB,UAAbA,EACO,CACHg/C,QAASre,GACTse,QAASxe,GACTye,UAAWxe,IAGZ,CACHse,QAAS9d,GACT+d,QAAS,CAAC/kF,EAAGyE,IAAIzE,EAAIyE,EACrBugF,UAAYlkE,GAAIA,EAExB,CACA,SAASmkE,IAAiB,MAAEptF,EAAM,IAAEgiD,EAAI,MAAE+uB,EAAM,KAAE2I,EAAK,MAAEvoD,IACrD,MAAO,CACHnxB,MAAOA,EAAQ+wE,EACf/uB,IAAKA,EAAM+uB,EACX2I,KAAMA,IAAS13B,EAAMhiD,EAAQ,GAAK+wE,GAAU,EAC5C5/C,QAER,CA8BC,SAASk8D,GAAcC,EAAS1c,EAAQuJ,GACrC,IAAKA,EACD,MAAO,CACHmT,GAGR,MAAM,SAAEr/C,EAAWjuC,MAAOutF,EAAavrC,IAAKwrC,GAAcrT,EACpDpJ,EAAQH,EAAOlyE,QACf,QAAEwuF,EAAQ,QAAED,EAAQ,UAAEE,GAAeH,GAAW/+C,IAChD,MAAEjuC,EAAM,IAAEgiD,EAAI,KAAE03B,EAAK,MAAEvoD,GAtCjC,SAAoBm8D,EAAS1c,EAAQuJ,GACjC,MAAM,SAAElsC,EAAWjuC,MAAOutF,EAAavrC,IAAKwrC,GAAcrT,GACpD,QAAE8S,EAAQ,UAAEE,GAAeH,GAAW/+C,GACtC8iC,EAAQH,EAAOlyE,OACrB,IACID,EAAGgsE,GADH,MAAEzqE,EAAM,IAAEgiD,EAAI,KAAE03B,GAAU4T,EAE9B,GAAI5T,EAAM,CAGN,IAFA15E,GAAS+wE,EACT/uB,GAAO+uB,EACHtyE,EAAI,EAAGgsE,EAAOsG,EAAOtyE,EAAIgsE,GACpBwiB,EAAQE,EAAUvc,EAAO5wE,EAAQ+wE,GAAO9iC,IAAYs/C,EAAYC,KADpC/uF,EAIjCuB,IACAgiD,IAEJhiD,GAAS+wE,EACT/uB,GAAO+uB,CACX,CAIA,OAHI/uB,EAAMhiD,IACNgiD,GAAO+uB,GAEJ,CACH/wE,QACAgiD,MACA03B,OACAvoD,MAAOm8D,EAAQn8D,MAEvB,CAU4Cs8D,CAAWH,EAAS1c,EAAQuJ,GAC9DrsE,EAAS,GACf,IAEI3P,EAAOwzE,EAAO+b,EAFdC,GAAS,EACTC,EAAW,KAEf,MAEMC,EAAc,IAAIF,GAFEV,EAAQM,EAAYG,EAAWvvF,IAA6C,IAAnC+uF,EAAQK,EAAYG,GAGjFI,EAAa,KAAKH,GAF6B,IAA7BT,EAAQM,EAAUrvF,IAAgB8uF,EAAQO,EAAUE,EAAWvvF,GAGvF,IAAI,IAAIM,EAAIuB,EAAO2oF,EAAO3oF,EAAOvB,GAAKujD,IAAOvjD,EACzCkzE,EAAQf,EAAOnyE,EAAIsyE,GACfY,EAAM6U,OAGVroF,EAAQgvF,EAAUxb,EAAM1jC,IACpB9vC,IAAUuvF,IAGdC,EAASV,EAAQ9uF,EAAOovF,EAAYC,GACnB,OAAbI,GAAqBC,MACrBD,EAA0C,IAA/BV,EAAQ/uF,EAAOovF,GAAoB9uF,EAAIkqF,GAErC,OAAbiF,GAAqBE,MACrBhgF,EAAO3O,KAAKiuF,GAAiB,CACzBptF,MAAO4tF,EACP5rC,IAAKvjD,EACLi7E,OACA3I,QACA5/C,WAEJy8D,EAAW,MAEfjF,EAAOlqF,EACPivF,EAAYvvF,IAWhB,OATiB,OAAbyvF,GACA9/E,EAAO3O,KAAKiuF,GAAiB,CACzBptF,MAAO4tF,EACP5rC,MACA03B,OACA3I,QACA5/C,WAGDrjB,CACX,CACC,SAASigF,GAAepwE,EAAMw8D,GAC3B,MAAMrsE,EAAS,GACTkgF,EAAWrwE,EAAKqwE,SACtB,IAAI,IAAIvvF,EAAI,EAAGA,EAAIuvF,EAAStvF,OAAQD,IAAI,CACpC,MAAMwvF,EAAMZ,GAAcW,EAASvvF,GAAIkf,EAAKizD,OAAQuJ,GAChD8T,EAAIvvF,QACJoP,EAAO3O,QAAQ8uF,EAEvB,CACA,OAAOngF,CACX,CAkJA,SAASogF,GAAUr/E,GACf,MAAO,CACHkoE,gBAAiBloE,EAAQkoE,gBACzBoX,eAAgBt/E,EAAQs/E,eACxBC,WAAYv/E,EAAQu/E,WACpBC,iBAAkBx/E,EAAQw/E,iBAC1BC,gBAAiBz/E,EAAQy/E,gBACzBzP,YAAahwE,EAAQgwE,YACrB7H,YAAanoE,EAAQmoE,YAE7B,CACA,SAASuX,GAAap9D,EAAOq9D,GACzB,IAAKA,EACD,OAAO,EAEX,MAAMjpD,EAAQ,GACRkpD,EAAW,SAASvoF,EAAK/H,GAC3B,OAAKy2E,GAAoBz2E,IAGpBonC,EAAM5xB,SAASxV,IAChBonC,EAAMpmC,KAAKhB,GAERonC,EAAMnjC,QAAQjE,IALVA,CAMf,EACA,OAAO2E,KAAKC,UAAUouB,EAAOs9D,KAAc3rF,KAAKC,UAAUyrF,EAAWC,EACzE,CAEA,SAASC,GAAepW,EAAOqW,EAAWC,GACtC,OAAOtW,EAAMzpE,QAAQurE,KAAO9B,EAAMsW,GAASD,EAAUC,EACzD,CAaA,SAASC,GAAmBjZ,EAAO/6C,GAC/B,MAAMu/C,EAAOv/C,EAAKi0D,MAClB,GAAI1U,EAAK3hE,SACL,OAAO,EAEX,MAAMumE,EAjBV,SAAwBnkD,EAAM8zD,GAC1B,MAAM,OAAE7c,EAAO,OAAEC,GAAYl3C,EAC7B,OAAIi3C,GAAUC,EACH,CACH5lC,KAAMuiD,GAAe5c,EAAQ6c,EAAW,QACxCtoD,MAAOqoD,GAAe5c,EAAQ6c,EAAW,SACzC57B,IAAK27B,GAAe3c,EAAQ4c,EAAW,OACvC3U,OAAQ0U,GAAe3c,EAAQ4c,EAAW,WAG3CA,CACX,CAMiBI,CAAel0D,EAAM+6C,EAAM+Y,WACxC,MAAO,CACHxiD,MAAoB,IAAdiuC,EAAKjuC,KAAiB,EAAI6yC,EAAK7yC,OAAsB,IAAdiuC,EAAKjuC,KAAgB,EAAIiuC,EAAKjuC,MAC3E9F,OAAsB,IAAf+zC,EAAK/zC,MAAkBuvC,EAAMxkD,MAAQ4tD,EAAK34C,QAAwB,IAAf+zC,EAAK/zC,MAAiB,EAAI+zC,EAAK/zC,OACzF0sB,KAAkB,IAAbqnB,EAAKrnB,IAAgB,EAAIisB,EAAKjsB,MAAoB,IAAbqnB,EAAKrnB,IAAe,EAAIqnB,EAAKrnB,KACvEinB,QAAwB,IAAhBI,EAAKJ,OAAmBpE,EAAM5iB,OAASgsB,EAAKhF,SAA0B,IAAhBI,EAAKJ,OAAkB,EAAII,EAAKJ,QAEtG,CCvtFA,MAAMgV,GACF,WAAArvF,GACIV,KAAK0mB,SAAW,KAChB1mB,KAAKgwF,QAAU,IAAIxiD,IACnBxtC,KAAKiwF,UAAW,EAChBjwF,KAAKkwF,eAAYtwF,CACrB,CACH,OAAAuwF,CAAQxZ,EAAOyZ,EAAOC,EAAMxqF,GACrB,MAAM+lD,EAAYwkC,EAAM9jF,UAAUzG,GAC5ByqF,EAAWF,EAAM7V,SACvB3uB,EAAUxoB,QAAS93B,GAAKA,EAAG,CACnBqrE,QACAh5C,QAASyyD,EAAMzyD,QACf2yD,WACAC,YAAaluF,KAAKE,IAAI8tF,EAAOD,EAAMrvF,MAAOuvF,KAEtD,CACH,QAAAE,GACWxwF,KAAK0mB,WAGT1mB,KAAKiwF,UAAW,EAChBjwF,KAAK0mB,SAAWyqD,GAAiBpsE,KAAKrG,OAAQ,KAC1CsB,KAAKywF,UACLzwF,KAAK0mB,SAAW,KACZ1mB,KAAKiwF,UACLjwF,KAAKwwF,aAGjB,CACH,OAAAC,CAAQJ,EAAOlwF,KAAKC,OACb,IAAIswF,EAAY,EAChB1wF,KAAKgwF,QAAQ5sD,QAAQ,CAACgtD,EAAOzZ,KACzB,IAAKyZ,EAAMO,UAAYP,EAAMlf,MAAMzxE,OAC/B,OAEJ,MAAMyxE,EAAQkf,EAAMlf,MACpB,IAEIlE,EAFAxtE,EAAI0xE,EAAMzxE,OAAS,EACnBmxF,GAAO,EAEX,KAAMpxF,GAAK,IAAKA,EACZwtE,EAAOkE,EAAM1xE,GACTwtE,EAAK6jB,SACD7jB,EAAK8jB,OAASV,EAAM7V,WACpB6V,EAAM7V,SAAWvN,EAAK8jB,QAE1B9jB,EAAK+jB,KAAKV,GACVO,GAAO,IAEP1f,EAAM1xE,GAAK0xE,EAAMA,EAAMzxE,OAAS,GAChCyxE,EAAM8f,OAGVJ,IACAja,EAAMia,OACN5wF,KAAKmwF,QAAQxZ,EAAOyZ,EAAOC,EAAM,aAEhCnf,EAAMzxE,SACP2wF,EAAMO,SAAU,EAChB3wF,KAAKmwF,QAAQxZ,EAAOyZ,EAAOC,EAAM,YACjCD,EAAMzyD,SAAU,GAEpB+yD,GAAaxf,EAAMzxE,SAEvBO,KAAKkwF,UAAYG,EACC,IAAdK,IACA1wF,KAAKiwF,UAAW,EAExB,CACH,SAAAgB,CAAUta,GACH,MAAMua,EAASlxF,KAAKgwF,QACpB,IAAII,EAAQc,EAAO37E,IAAIohE,GAavB,OAZKyZ,IACDA,EAAQ,CACJO,SAAS,EACThzD,SAAS,EACTuzC,MAAO,GACP5kE,UAAW,CACPqN,SAAU,GACVw3E,SAAU,KAGlBD,EAAO35E,IAAIo/D,EAAOyZ,IAEfA,CACX,CACH,MAAAr7B,CAAO4hB,EAAOlxE,EAAO2rF,GACdpxF,KAAKixF,UAAUta,GAAOrqE,UAAU7G,GAAOvF,KAAKkxF,EAChD,CACH,GAAA3oF,CAAIkuE,EAAOzF,GACCA,GAAUA,EAAMzxE,QAGrBO,KAAKixF,UAAUta,GAAOzF,MAAMhxE,QAAQgxE,EACxC,CACH,GAAAlmE,CAAI2rE,GACG,OAAO32E,KAAKixF,UAAUta,GAAOzF,MAAMzxE,OAAS,CAChD,CACH,KAAAsB,CAAM41E,GACC,MAAMyZ,EAAQpwF,KAAKgwF,QAAQz6E,IAAIohE,GAC1ByZ,IAGLA,EAAMO,SAAU,EAChBP,EAAMrvF,MAAQZ,KAAKC,MACnBgwF,EAAM7V,SAAW6V,EAAMlf,MAAM3yD,OAAO,CAACoqB,EAAK0oD,IAAMhvF,KAAKmN,IAAIm5B,EAAK0oD,EAAIC,WAAY,GAC9EtxF,KAAKwwF,WACT,CACA,OAAAG,CAAQha,GACJ,IAAK32E,KAAKiwF,SACN,OAAO,EAEX,MAAMG,EAAQpwF,KAAKgwF,QAAQz6E,IAAIohE,GAC/B,SAAKyZ,GAAUA,EAAMO,SAAYP,EAAMlf,MAAMzxE,OAIjD,CACH,IAAA6B,CAAKq1E,GACE,MAAMyZ,EAAQpwF,KAAKgwF,QAAQz6E,IAAIohE,GAC/B,IAAKyZ,IAAUA,EAAMlf,MAAMzxE,OACvB,OAEJ,MAAMyxE,EAAQkf,EAAMlf,MACpB,IAAI1xE,EAAI0xE,EAAMzxE,OAAS,EACvB,KAAMD,GAAK,IAAKA,EACZ0xE,EAAM1xE,GAAGyR,SAEbm/E,EAAMlf,MAAQ,GACdlxE,KAAKmwF,QAAQxZ,EAAOyZ,EAAOjwF,KAAKC,MAAO,WAC3C,CACH,MAAAmH,CAAOovE,GACA,OAAO32E,KAAKgwF,QAAQ3qE,OAAOsxD,EAC/B,EAEJ,IAAI4a,GAA2B,IAAIxB,GAEnC,MAAMrnB,GAAc,cACd8oB,GAAgB,CAClB,OAAApsC,CAASvmC,EAAMyoD,EAAImqB,GACf,OAAOA,EAAS,GAAMnqB,EAAKzoD,CAC/B,EACH,KAAAwqD,CAAOxqD,EAAMyoD,EAAImqB,GACV,MAAMC,EAAKroB,GAAMxqD,GAAQ6pD,IACnBa,EAAKmoB,EAAG5oB,OAASO,GAAM/B,GAAMoB,IACnC,OAAOa,GAAMA,EAAGT,MAAQS,EAAGH,IAAIsoB,EAAID,GAAQzoB,YAAc1B,CAC7D,EACA,MAAAjiB,CAAQxmC,EAAMyoD,EAAImqB,GACd,OAAO5yE,GAAQyoD,EAAKzoD,GAAQ4yE,CAChC,GAEJ,MAAME,GACF,WAAAjxF,CAAYkxF,EAAK1/E,EAAQwD,EAAM4xD,GAC3B,MAAMuqB,EAAe3/E,EAAOwD,GAC5B4xD,EAAK/uD,GAAQ,CACTq5E,EAAItqB,GACJA,EACAuqB,EACAD,EAAI/yE,OAER,MAAMA,EAAOtG,GAAQ,CACjBq5E,EAAI/yE,KACJgzE,EACAvqB,IAEJtnE,KAAK6wF,SAAU,EACf7wF,KAAK8xF,IAAMF,EAAItmF,IAAMkmF,GAAcI,EAAI/rF,aAAegZ,GACtD7e,KAAK+xF,QAAUre,GAAQke,EAAIpX,SAAW9G,GAAQC,OAC9C3zE,KAAKgyF,OAAS3vF,KAAKuI,MAAMzK,KAAKC,OAASwxF,EAAIjtD,OAAS,IACpD3kC,KAAKsxF,UAAYtxF,KAAK8wF,OAASzuF,KAAKuI,MAAMgnF,EAAIrX,UAC9Cv6E,KAAKiyF,QAAUL,EAAInX,KACnBz6E,KAAKkyF,QAAUhgF,EACflS,KAAKmyF,MAAQz8E,EACb1V,KAAKoyF,MAAQvzE,EACb7e,KAAKqyF,IAAM/qB,EACXtnE,KAAKsyF,eAAY1yF,CACrB,CACA,MAAA86E,GACI,OAAO16E,KAAK6wF,OAChB,CACA,MAAAz5D,CAAOw6D,EAAKtqB,EAAI+oB,GACZ,GAAIrwF,KAAK6wF,QAAS,CACd7wF,KAAKmwF,SAAQ,GACb,MAAM0B,EAAe7xF,KAAKkyF,QAAQlyF,KAAKmyF,OACjCI,EAAUlC,EAAOrwF,KAAKgyF,OACtB3a,EAASr3E,KAAKsxF,UAAYiB,EAChCvyF,KAAKgyF,OAAS3B,EACdrwF,KAAKsxF,UAAYjvF,KAAKuI,MAAMvI,KAAKmN,IAAI6nE,EAAQua,EAAIrX,WACjDv6E,KAAK8wF,QAAUyB,EACfvyF,KAAKiyF,QAAUL,EAAInX,KACnBz6E,KAAKqyF,IAAM95E,GAAQ,CACfq5E,EAAItqB,GACJA,EACAuqB,EACAD,EAAI/yE,OAER7e,KAAKoyF,MAAQ75E,GAAQ,CACjBq5E,EAAI/yE,KACJgzE,EACAvqB,GAER,CACJ,CACA,MAAAr2D,GACQjR,KAAK6wF,UACL7wF,KAAK+wF,KAAK5wF,KAAKC,OACfJ,KAAK6wF,SAAU,EACf7wF,KAAKmwF,SAAQ,GAErB,CACA,IAAAY,CAAKV,GACD,MAAMkC,EAAUlC,EAAOrwF,KAAKgyF,OACtBzX,EAAWv6E,KAAKsxF,UAChB57E,EAAO1V,KAAKmyF,MACZtzE,EAAO7e,KAAKoyF,MACZ3X,EAAOz6E,KAAKiyF,MACZ3qB,EAAKtnE,KAAKqyF,IAChB,IAAIZ,EAEJ,GADAzxF,KAAK6wF,QAAUhyE,IAASyoD,IAAOmT,GAAQ8X,EAAUhY,IAC5Cv6E,KAAK6wF,QAGN,OAFA7wF,KAAKkyF,QAAQx8E,GAAQ4xD,OACrBtnE,KAAKmwF,SAAQ,GAGboC,EAAU,EACVvyF,KAAKkyF,QAAQx8E,GAAQmJ,GAGzB4yE,EAASc,EAAUhY,EAAW,EAC9BkX,EAAShX,GAAQgX,EAAS,EAAI,EAAIA,EAASA,EAC3CA,EAASzxF,KAAK+xF,QAAQ1vF,KAAKE,IAAI,EAAGF,KAAKmN,IAAI,EAAGiiF,KAC9CzxF,KAAKkyF,QAAQx8E,GAAQ1V,KAAK8xF,IAAIjzE,EAAMyoD,EAAImqB,GAC5C,CACA,IAAA9hF,GACI,MAAM6iF,EAAWxyF,KAAKsyF,YAActyF,KAAKsyF,UAAY,IACrD,OAAO,IAAIh6E,QAAQ,CAACm6E,EAAKC,KACrBF,EAAStyF,KAAK,CACVuyF,MACAC,SAGZ,CACA,OAAAvC,CAAQwC,GACJ,MAAMtyE,EAASsyE,EAAW,MAAQ,MAC5BH,EAAWxyF,KAAKsyF,WAAa,GACnC,IAAI,IAAI9yF,EAAI,EAAGA,EAAIgzF,EAAS/yF,OAAQD,IAChCgzF,EAAShzF,GAAG6gB,IAEpB,EAGJ,MAAMuyE,GACF,WAAAlyF,CAAYi2E,EAAOhgB,GACf32D,KAAK6yF,OAASlc,EACd32E,KAAK8yF,YAAc,IAAItlD,IACvBxtC,KAAK+yF,UAAUp8B,EACnB,CACA,SAAAo8B,CAAUp8B,GACN,IAAKtnD,GAASsnD,GACV,OAEJ,MAAMq8B,EAAmB/nF,OAAO+H,KAAKmnE,GAAStC,WACxCob,EAAgBjzF,KAAK8yF,YAC3B7nF,OAAOwyC,oBAAoBkZ,GAAQvzB,QAASn8B,IACxC,MAAM2qF,EAAMj7B,EAAO1vD,GACnB,IAAKoI,GAASuiF,GACV,OAEJ,MAAMe,EAAW,CAAC,EAClB,IAAK,MAAMn+D,KAAUw+D,EACjBL,EAASn+D,GAAUo9D,EAAIp9D,IAE1B/f,GAAQm9E,EAAI5qF,aAAe4qF,EAAI5qF,YAAc,CAC1CC,IACDm8B,QAAS1tB,IACJA,IAASzO,GAAQgsF,EAAcjoF,IAAI0K,IACnCu9E,EAAc17E,IAAI7B,EAAMi9E,MAIxC,CACH,eAAAO,CAAgBhhF,EAAQmM,GACjB,MAAM80E,EAAa90E,EAAOzO,QACpBA,EAwEd,SAA8BsC,EAAQihF,GAClC,IAAKA,EACD,OAEJ,IAAIvjF,EAAUsC,EAAOtC,QACrB,GAAKA,EAUL,OANIA,EAAQwjF,UACRlhF,EAAOtC,QAAUA,EAAU3E,OAAOuc,OAAO,CAAC,EAAG5X,EAAS,CAClDwjF,SAAS,EACTC,YAAa,CAAC,KAGfzjF,EATHsC,EAAOtC,QAAUujF,CAUzB,CAxFwBG,CAAqBphF,EAAQihF,GAC7C,IAAKvjF,EACD,MAAO,GAEX,MAAMgrE,EAAa56E,KAAKuzF,kBAAkB3jF,EAASujF,GAOnD,OANIA,EAAWC,SAwDvB,SAAkBxY,EAAY5zE,GAC1B,MAAM2pF,EAAU,GACV39E,EAAO/H,OAAO+H,KAAKhM,GACzB,IAAI,IAAIxH,EAAI,EAAGA,EAAIwT,EAAKvT,OAAQD,IAAI,CAChC,MAAMg0F,EAAO5Y,EAAW5nE,EAAKxT,IACzBg0F,GAAQA,EAAK9Y,UACbiW,EAAQzwF,KAAKszF,EAAK7jF,OAE1B,CACA,OAAO2I,QAAQ2oB,IAAI0vD,EACvB,CAjEY8C,CAASvhF,EAAOtC,QAAQyjF,YAAaF,GAAYv5D,KAAK,KAClD1nB,EAAOtC,QAAUujF,GAClB,QAGAvY,CACX,CACH,iBAAA2Y,CAAkBrhF,EAAQmM,GACnB,MAAM40E,EAAgBjzF,KAAK8yF,YACrBlY,EAAa,GACb+V,EAAUz+E,EAAOmhF,cAAgBnhF,EAAOmhF,YAAc,CAAC,GACvDpQ,EAAQh4E,OAAO+H,KAAKqL,GACpBgyE,EAAOlwF,KAAKC,MAClB,IAAIZ,EACJ,IAAIA,EAAIyjF,EAAMxjF,OAAS,EAAGD,GAAK,IAAKA,EAAE,CAClC,MAAMkW,EAAOutE,EAAMzjF,GACnB,GAAuB,MAAnBkW,EAAKtG,OAAO,GACZ,SAEJ,GAAa,YAATsG,EAAoB,CACpBklE,EAAW16E,QAAQF,KAAKkzF,gBAAgBhhF,EAAQmM,IAChD,QACJ,CACA,MAAMnf,EAAQmf,EAAO3I,GACrB,IAAImiE,EAAY8Y,EAAQj7E,GACxB,MAAMk8E,EAAMqB,EAAc19E,IAAIG,GAC9B,GAAImiE,EAAW,CACX,GAAI+Z,GAAO/Z,EAAU6C,SAAU,CAC3B7C,EAAUzgD,OAAOw6D,EAAK1yF,EAAOmxF,GAC7B,QACJ,CACIxY,EAAU5mE,QAElB,CACK2gF,GAAQA,EAAIrX,UAIjBoW,EAAQj7E,GAAQmiE,EAAY,IAAI8Z,GAAUC,EAAK1/E,EAAQwD,EAAMxW,GAC7D07E,EAAW16E,KAAK23E,IAJZ3lE,EAAOwD,GAAQxW,CAKvB,CACA,OAAO07E,CACX,CACH,MAAAxjD,CAAOllB,EAAQmM,GACR,GAA8B,IAA1Bre,KAAK8yF,YAAY/wD,KAEjB,YADA92B,OAAOuc,OAAOtV,EAAQmM,GAG1B,MAAMu8D,EAAa56E,KAAKuzF,kBAAkBrhF,EAAQmM,GAClD,OAAIu8D,EAAWn7E,QACX8xF,GAAS9oF,IAAIzI,KAAK6yF,OAAQjY,IACnB,QAFX,CAIJ,EA+BJ,SAAS8Y,GAAUra,EAAOsa,GACtB,MAAM9S,EAAOxH,GAASA,EAAMzpE,SAAW,CAAC,EAClC0qC,EAAUumC,EAAKvmC,QACf/3C,OAAmB3C,IAAbihF,EAAKt+E,IAAoBoxF,EAAkB,EACjDnkF,OAAmB5P,IAAbihF,EAAKrxE,IAAoBmkF,EAAkB,EACvD,MAAO,CACH5yF,MAAOu5C,EAAU9qC,EAAMjN,EACvBwgD,IAAKzI,EAAU/3C,EAAMiN,EAE7B,CAgCA,SAASokF,GAAwBjd,EAAOkd,GACpC,MAAM7gF,EAAO,GACP8gF,EAAWnd,EAAMod,uBAAuBF,GAC9C,IAAIr0F,EAAGgsE,EACP,IAAIhsE,EAAI,EAAGgsE,EAAOsoB,EAASr0F,OAAQD,EAAIgsE,IAAQhsE,EAC3CwT,EAAK9S,KAAK4zF,EAASt0F,GAAG2P,OAE1B,OAAO6D,CACX,CACA,SAASghF,GAAWC,EAAO/0F,EAAOg1F,EAAStkF,EAAU,CAAC,GAClD,MAAMoD,EAAOihF,EAAMjhF,KACbmhF,EAA8B,WAAjBvkF,EAAQi1B,KAC3B,IAAIrlC,EAAGgsE,EAAMG,EAAcyoB,EAC3B,GAAc,OAAVl1F,EACA,OAEJ,IAAIm1F,GAAQ,EACZ,IAAI70F,EAAI,EAAGgsE,EAAOx4D,EAAKvT,OAAQD,EAAIgsE,IAAQhsE,EAAE,CAEzC,GADAmsE,GAAgB34D,EAAKxT,GACjBmsE,IAAiBuoB,EAAS,CAE1B,GADAG,GAAQ,EACJzkF,EAAQqxB,IACR,SAEJ,KACJ,CACAmzD,EAAaH,EAAM51E,OAAOstD,GACtBd,GAAeupB,KAAgBD,GAAwB,IAAVj1F,GAAeyuE,GAAKzuE,KAAWyuE,GAAKymB,MACjFl1F,GAASk1F,EAEjB,CACA,OAAKC,GAAUzkF,EAAQqxB,IAGhB/hC,EAFI,CAGf,CAiBA,SAASo1F,GAAUjb,EAAOz9C,GACtB,MAAM24D,EAAUlb,GAASA,EAAMzpE,QAAQ2kF,QACvC,OAAOA,QAAuB30F,IAAZ20F,QAAwC30F,IAAfg8B,EAAKq4D,KACpD,CAWA,SAASO,GAAiBC,EAAQC,EAAUC,GACxC,MAAMC,EAAWH,EAAOC,KAAcD,EAAOC,GAAY,CAAC,GAC1D,OAAOE,EAASD,KAAgBC,EAASD,GAAc,CAAC,EAC5D,CACA,SAASE,GAAoBZ,EAAOhiB,EAAQ6iB,EAAUjvF,GAClD,IAAK,MAAM+1B,KAAQq2C,EAAO8iB,wBAAwBlvF,GAAMy0C,UAAU,CAC9D,MAAMp7C,EAAQ+0F,EAAMr4D,EAAKzsB,OACzB,GAAI2lF,GAAY51F,EAAQ,IAAM41F,GAAY51F,EAAQ,EAC9C,OAAO08B,EAAKzsB,KAEpB,CACA,OAAO,IACX,CACA,SAAS6lF,GAAa7jD,EAAYi2C,GAC9B,MAAM,MAAEzQ,EAAQse,YAAar5D,GAAUuV,EACjCsjD,EAAS9d,EAAMue,UAAYve,EAAMue,QAAU,CAAC,IAC5C,OAAEljB,EAAO,OAAEC,EAAS9iE,MAAOw8D,GAAkB/vC,EAC7Cu5D,EAAQnjB,EAAOI,KACfgjB,EAAQnjB,EAAOG,KACfnrE,EA7BV,SAAqBouF,EAAYC,EAAY15D,GACzC,MAAO,GAAGy5D,EAAW/sE,MAAMgtE,EAAWhtE,MAAMsT,EAAKq4D,OAASr4D,EAAK/1B,MACnE,CA2BgB0vF,CAAYvjB,EAAQC,EAAQr2C,GAClC4vC,EAAO4b,EAAO3nF,OACpB,IAAIw0F,EACJ,IAAI,IAAIz0F,EAAI,EAAGA,EAAIgsE,IAAQhsE,EAAE,CACzB,MAAMwtE,EAAOoa,EAAO5nF,IACZ,CAAC21F,GAAQhmF,EAAQ,CAACimF,GAAQl2F,GAAW8tE,EAE7CinB,GADmBjnB,EAAKkoB,UAAYloB,EAAKkoB,QAAU,CAAC,IACjCE,GAASZ,GAAiBC,EAAQxtF,EAAKkI,GAC1D8kF,EAAMtoB,GAAgBzsE,EACtB+0F,EAAMuB,KAAOX,GAAoBZ,EAAOhiB,GAAQ,EAAMr2C,EAAK/1B,MAC3DouF,EAAMwB,QAAUZ,GAAoBZ,EAAOhiB,GAAQ,EAAOr2C,EAAK/1B,OAC1CouF,EAAMyB,gBAAkBzB,EAAMyB,cAAgB,CAAC,IACvD/pB,GAAgBzsE,CACjC,CACJ,CACA,SAASy2F,GAAgBhf,EAAOvE,GAC5B,MAAMkH,EAAS3C,EAAM2C,OACrB,OAAOruE,OAAO+H,KAAKsmE,GAAQzxE,OAAQZ,GAAMqyE,EAAOryE,GAAKmrE,OAASA,GAAM7hC,OACxE,CAuBA,SAASqlD,GAAYh6D,EAAMs1C,GACvB,MAAMvF,EAAe/vC,EAAKuV,WAAWhiC,MAC/BijE,EAAOx2C,EAAKq2C,QAAUr2C,EAAKq2C,OAAOG,KACxC,GAAKA,EAAL,CAGAlB,EAAQA,GAASt1C,EAAKs2C,QACtB,IAAK,MAAMkV,KAAUlW,EAAM,CACvB,MAAMujB,EAASrN,EAAO8N,QACtB,IAAKT,QAA2B70F,IAAjB60F,EAAOriB,SAAsDxyE,IAA/B60F,EAAOriB,GAAMzG,GACtD,cAEG8oB,EAAOriB,GAAMzG,QACe/rE,IAA/B60F,EAAOriB,GAAMsjB,oBAA4E91F,IAA7C60F,EAAOriB,GAAMsjB,cAAc/pB,WAChE8oB,EAAOriB,GAAMsjB,cAAc/pB,EAE1C,CAXA,CAYJ,CACA,MAAMkqB,GAAsBhxD,GAAgB,UAATA,GAA6B,SAATA,EACjDixD,GAAmB,CAACC,EAAQC,IAASA,EAASD,EAAS9qF,OAAOuc,OAAO,CAAC,EAAGuuE,GAK/E,MAAME,GACL19B,gBAAkB,CAAC,EACnBA,0BAA4B,KAC5BA,uBAAyB,KACzB,WAAA73D,CAAYi2E,EAAOhL,GACZ3rE,KAAK22E,MAAQA,EACb32E,KAAK27E,KAAOhF,EAAM8B,IAClBz4E,KAAKmP,MAAQw8D,EACb3rE,KAAKk2F,gBAAkB,CAAC,EACxBl2F,KAAKi1F,YAAcj1F,KAAKm2F,UACxBn2F,KAAKo2F,MAAQp2F,KAAKi1F,YAAYpvF,KAC9B7F,KAAK4P,aAAUhQ,EACdI,KAAKmnF,UAAW,EACjBnnF,KAAKq2F,WAAQz2F,EACbI,KAAKs2F,iBAAc12F,EACnBI,KAAKu2F,oBAAiB32F,EACtBI,KAAKw2F,gBAAa52F,EAClBI,KAAKy2F,gBAAa72F,EAClBI,KAAK02F,qBAAsB,EAC3B12F,KAAK22F,oBAAqB,EAC1B32F,KAAK42F,cAAWh3F,EAChBI,KAAK62F,UAAY,GACjB72F,KAAK82F,8BAAgCA,mBACrC92F,KAAK+2F,2BAA6BA,gBAClC/2F,KAAKs9C,YACT,CACA,UAAAA,GACI,MAAM1hB,EAAO57B,KAAKi1F,YAClBj1F,KAAK+yF,YACL/yF,KAAKg3F,aACLp7D,EAAKq7D,SAAW3C,GAAU14D,EAAKq2C,OAAQr2C,GACvC57B,KAAKk3F,cACDl3F,KAAK4P,QAAQ+vE,OAAS3/E,KAAK22E,MAAMwgB,gBAAgB,WACjDx3F,QAAQ07B,KAAK,qKAErB,CACA,WAAA+7D,CAAYzrB,GACJ3rE,KAAKmP,QAAUw8D,GACfiqB,GAAY51F,KAAKi1F,aAErBj1F,KAAKmP,MAAQw8D,CACjB,CACA,UAAAqrB,GACI,MAAMrgB,EAAQ32E,KAAK22E,MACb/6C,EAAO57B,KAAKi1F,YACZppD,EAAU7rC,KAAKq3F,aACfC,EAAW,CAACllB,EAAMpoD,EAAGC,EAAGsyC,IAAa,MAAT6V,EAAepoD,EAAa,MAATooD,EAAe7V,EAAItyC,EAClEstE,EAAM37D,EAAK47D,QAAUxsB,GAAen/B,EAAQ2rD,QAAS7B,GAAgBhf,EAAO,MAC5E8gB,EAAM77D,EAAK87D,QAAU1sB,GAAen/B,EAAQ6rD,QAAS/B,GAAgBhf,EAAO,MAC5EghB,EAAM/7D,EAAKg8D,QAAU5sB,GAAen/B,EAAQ+rD,QAASjC,GAAgBhf,EAAO,MAC5EiC,EAAYh9C,EAAKg9C,UACjBif,EAAMj8D,EAAKk8D,QAAUR,EAAS1e,EAAW2e,EAAKE,EAAKE,GACnDI,EAAMn8D,EAAKo8D,QAAUV,EAAS1e,EAAW6e,EAAKF,EAAKI,GACzD/7D,EAAKi3C,OAAS7yE,KAAKi4F,cAAcV,GACjC37D,EAAKk3C,OAAS9yE,KAAKi4F,cAAcR,GACjC77D,EAAKs8D,OAASl4F,KAAKi4F,cAAcN,GACjC/7D,EAAKo2C,OAAShyE,KAAKi4F,cAAcJ,GACjCj8D,EAAKq2C,OAASjyE,KAAKi4F,cAAcF,EACrC,CACA,UAAAV,GACI,OAAOr3F,KAAK22E,MAAMhzE,KAAKq0E,SAASh4E,KAAKmP,MACzC,CACA,OAAAgnF,GACI,OAAOn2F,KAAK22E,MAAMwhB,eAAen4F,KAAKmP,MAC1C,CACH,aAAA8oF,CAAcG,GACP,OAAOp4F,KAAK22E,MAAM2C,OAAO8e,EAC7B,CACH,cAAAC,CAAehf,GACR,MAAMz9C,EAAO57B,KAAKi1F,YAClB,OAAO5b,IAAUz9C,EAAKo2C,OAASp2C,EAAKq2C,OAASr2C,EAAKo2C,MACtD,CACA,KAAAsmB,GACIt4F,KAAKywF,QAAQ,QACjB,CACH,QAAA8H,GACO,MAAM38D,EAAO57B,KAAKi1F,YACdj1F,KAAKq2F,OACLvlB,GAAoB9wE,KAAKq2F,MAAOr2F,MAEhC47B,EAAKq7D,UACLrB,GAAYh6D,EAEpB,CACH,UAAA48D,GACO,MAAM3sD,EAAU7rC,KAAKq3F,aACf1zF,EAAOkoC,EAAQloC,OAASkoC,EAAQloC,KAAO,IACvC0yF,EAAQr2F,KAAKq2F,MACnB,GAAIhnF,GAAS1L,GAAO,CAChB,MAAMi4B,EAAO57B,KAAKi1F,YAClBj1F,KAAKq2F,MA5MjB,SAAkC1yF,EAAMi4B,GACpC,MAAM,OAAEo2C,EAAO,OAAEC,GAAYr2C,EACvB68D,EAA2B,MAAhBzmB,EAAOI,KAAe,IAAM,IACvCsmB,EAA2B,MAAhBzmB,EAAOG,KAAe,IAAM,IACvCp/D,EAAO/H,OAAO+H,KAAKrP,GACnBg1F,EAAQ,IAAIjsF,MAAMsG,EAAKvT,QAC7B,IAAID,EAAGgsE,EAAMvkE,EACb,IAAIzH,EAAI,EAAGgsE,EAAOx4D,EAAKvT,OAAQD,EAAIgsE,IAAQhsE,EACvCyH,EAAM+L,EAAKxT,GACXm5F,EAAMn5F,GAAK,CACP,CAACi5F,GAAWxxF,EACZ,CAACyxF,GAAW/0F,EAAKsD,IAGzB,OAAO0xF,CACX,CA6LyBC,CAAyBj1F,EAAMi4B,EAChD,MAAO,GAAIy6D,IAAU1yF,EAAM,CACvB,GAAI0yF,EAAO,CACPvlB,GAAoBulB,EAAOr2F,MAC3B,MAAM47B,EAAO57B,KAAKi1F,YAClBW,GAAYh6D,GACZA,EAAKs2C,QAAU,EACnB,CACIvuE,GAAQsH,OAAO4tF,aAAal1F,MD1KjBy/C,EC2KOz/C,GD1KpBqtE,SACN5tB,EAAM4tB,SAAS1kE,UAAUpM,KCyKOF,ODtKpCiL,OAAOoK,eAAe+tC,EAAO,WAAY,CACrCijC,cAAc,EACd/wE,YAAY,EACZpW,MAAO,CACHoN,UAAW,CCkKiBtM,SD7JpC6wE,GAAYztC,QAASn8B,IACjB,MAAMoZ,EAAS,UAAYusD,GAAY3lE,GACjC6xF,EAAO11C,EAAMn8C,GACnBgE,OAAOoK,eAAe+tC,EAAOn8C,EAAK,CAC9Bo/E,cAAc,EACd/wE,YAAY,EACZ,KAAApW,IAAU4J,GACN,MAAM2pF,EAAMqG,EAAKzrF,MAAMrN,KAAM8I,GAM7B,OALAs6C,EAAM4tB,SAAS1kE,UAAU82B,QAASr8B,IACA,mBAAnBA,EAAOsZ,IACdtZ,EAAOsZ,MAAWvX,KAGnB2pF,CACX,QCiJAzyF,KAAK62F,UAAY,GACjB72F,KAAKq2F,MAAQ1yF,CACjB,CD/KR,IAA2By/C,CCgLvB,CACA,WAAA8zC,GACI,MAAMt7D,EAAO57B,KAAKi1F,YAClBj1F,KAAKw4F,aACDx4F,KAAK82F,qBACLl7D,EAAKiQ,QAAU,IAAI7rC,KAAK82F,mBAEhC,CACA,qBAAAiC,CAAsBC,GAClB,MAAMp9D,EAAO57B,KAAKi1F,YACZppD,EAAU7rC,KAAKq3F,aACrB,IAAI4B,GAAe,EACnBj5F,KAAKw4F,aACL,MAAMU,EAAat9D,EAAKq7D,SACxBr7D,EAAKq7D,SAAW3C,GAAU14D,EAAKq2C,OAAQr2C,GACnCA,EAAKq4D,QAAUpoD,EAAQooD,QACvBgF,GAAe,EACfrD,GAAYh6D,GACZA,EAAKq4D,MAAQpoD,EAAQooD,OAEzBj0F,KAAKm5F,gBAAgBH,IACjBC,GAAgBC,IAAet9D,EAAKq7D,YACpCjC,GAAah1F,KAAM47B,EAAKs2C,SACxBt2C,EAAKq7D,SAAW3C,GAAU14D,EAAKq2C,OAAQr2C,GAE/C,CACH,SAAAm3D,GACO,MAAMp8B,EAAS32D,KAAK22E,MAAMhgB,OACpByiC,EAAYziC,EAAO0iC,iBAAiBr5F,KAAKo2F,OACzCtS,EAASntB,EAAO2iC,gBAAgBt5F,KAAKq3F,aAAc+B,GAAW,GACpEp5F,KAAK4P,QAAU+mD,EAAO4iC,eAAezV,EAAQ9jF,KAAKm+E,cAClDn+E,KAAKmnF,SAAWnnF,KAAK4P,QAAQspE,QAC7Bl5E,KAAKk2F,gBAAkB,CAAC,CAC5B,CACH,KAAApwF,CAAM/E,EAAO+wE,GACN,MAAQmjB,YAAar5D,EAAOy6D,MAAO1yF,GAAU3D,MACvC,OAAEgyE,EAAO,SAAEilB,GAAcr7D,EACzBu5D,EAAQnjB,EAAOI,KACrB,IAEI5yE,EAAG6xF,EAAKjK,EAFRoS,EAAmB,IAAVz4F,GAAe+wE,IAAUnuE,EAAKlE,QAAgBm8B,EAAKm2C,QAC5D2X,EAAO3oF,EAAQ,GAAK66B,EAAKs2C,QAAQnxE,EAAQ,GAE7C,IAAsB,IAAlBf,KAAKmnF,SACLvrD,EAAKs2C,QAAUvuE,EACfi4B,EAAKm2C,SAAU,EACfqV,EAASzjF,MACN,CAECyjF,EADA3yE,GAAQ9Q,EAAK5C,IACJf,KAAKy5F,eAAe79D,EAAMj4B,EAAM5C,EAAO+wE,GACzCziE,GAAS1L,EAAK5C,IACZf,KAAK05F,gBAAgB99D,EAAMj4B,EAAM5C,EAAO+wE,GAExC9xE,KAAK25F,mBAAmB/9D,EAAMj4B,EAAM5C,EAAO+wE,GAExD,MAAM8nB,EAA6B,IAAmB,OAAfvI,EAAI8D,IAAmBzL,GAAQ2H,EAAI8D,GAASzL,EAAKyL,GACxF,IAAI31F,EAAI,EAAGA,EAAIsyE,IAAStyE,EACpBo8B,EAAKs2C,QAAQ1yE,EAAIuB,GAASswF,EAAMjK,EAAO5nF,GACnCg6F,IACII,MACAJ,GAAS,GAEb9P,EAAO2H,GAGfz1D,EAAKm2C,QAAUynB,CACnB,CACIvC,GACAjC,GAAah1F,KAAMonF,EAE3B,CACH,kBAAAuS,CAAmB/9D,EAAMj4B,EAAM5C,EAAO+wE,GAC/B,MAAM,OAAEE,EAAO,OAAEC,GAAYr2C,EACvBu5D,EAAQnjB,EAAOI,KACfgjB,EAAQnjB,EAAOG,KACfynB,EAAS7nB,EAAO8nB,YAChBC,EAAc/nB,IAAWC,EACzBmV,EAAS,IAAI16E,MAAMolE,GACzB,IAAItyE,EAAGgsE,EAAMr8D,EACb,IAAI3P,EAAI,EAAGgsE,EAAOsG,EAAOtyE,EAAIgsE,IAAQhsE,EACjC2P,EAAQ3P,EAAIuB,EACZqmF,EAAO5nF,GAAK,CACR,CAAC21F,GAAQ4E,GAAe/nB,EAAOlsE,MAAM+zF,EAAO1qF,GAAQA,GACpD,CAACimF,GAAQnjB,EAAOnsE,MAAMnC,EAAKwL,GAAQA,IAG3C,OAAOi4E,CACX,CACH,cAAAqS,CAAe79D,EAAMj4B,EAAM5C,EAAO+wE,GAC3B,MAAM,OAAEe,EAAO,OAAEC,GAAYl3C,EACvBwrD,EAAS,IAAI16E,MAAMolE,GACzB,IAAItyE,EAAGgsE,EAAMr8D,EAAO69D,EACpB,IAAIxtE,EAAI,EAAGgsE,EAAOsG,EAAOtyE,EAAIgsE,IAAQhsE,EACjC2P,EAAQ3P,EAAIuB,EACZisE,EAAOrpE,EAAKwL,GACZi4E,EAAO5nF,GAAK,CACRwqB,EAAG6oD,EAAO/sE,MAAMknE,EAAK,GAAI79D,GACzB8a,EAAG6oD,EAAOhtE,MAAMknE,EAAK,GAAI79D,IAGjC,OAAOi4E,CACX,CACH,eAAAsS,CAAgB99D,EAAMj4B,EAAM5C,EAAO+wE,GAC5B,MAAM,OAAEe,EAAO,OAAEC,GAAYl3C,GACvB,SAAEo+D,EAAU,IAAI,SAAEC,EAAU,KAASj6F,KAAKmnF,SAC1CC,EAAS,IAAI16E,MAAMolE,GACzB,IAAItyE,EAAGgsE,EAAMr8D,EAAO69D,EACpB,IAAIxtE,EAAI,EAAGgsE,EAAOsG,EAAOtyE,EAAIgsE,IAAQhsE,EACjC2P,EAAQ3P,EAAIuB,EACZisE,EAAOrpE,EAAKwL,GACZi4E,EAAO5nF,GAAK,CACRwqB,EAAG6oD,EAAO/sE,MAAMymE,GAAiBS,EAAMgtB,GAAW7qF,GAClD8a,EAAG6oD,EAAOhtE,MAAMymE,GAAiBS,EAAMitB,GAAW9qF,IAG1D,OAAOi4E,CACX,CACH,SAAA8S,CAAU/qF,GACH,OAAOnP,KAAKi1F,YAAY/iB,QAAQ/iE,EACpC,CACH,cAAAgrF,CAAehrF,GACR,OAAOnP,KAAKi1F,YAAYtxF,KAAKwL,EACjC,CACH,UAAA6kF,CAAW3a,EAAO+N,EAAQviD,GACnB,MAAM8xC,EAAQ32E,KAAK22E,MACb/6C,EAAO57B,KAAKi1F,YACZ/1F,EAAQkoF,EAAO/N,EAAMjH,MAK3B,OAAO4hB,GAJO,CACVhhF,KAAM4gF,GAAwBjd,GAAO,GACrCt4D,OAAQ+oE,EAAO8N,QAAQ7b,EAAMjH,MAAMsjB,eAEdx2F,EAAO08B,EAAKzsB,MAAO,CACxC01B,QAER,CACH,qBAAAu1D,CAAsBrsB,EAAOsL,EAAO+N,EAAQ6M,GACrC,MAAMoG,EAAcjT,EAAO/N,EAAMjH,MACjC,IAAIlzE,EAAwB,OAAhBm7F,EAAuBC,IAAMD,EACzC,MAAMh8E,EAAS41E,GAAS7M,EAAO8N,QAAQ7b,EAAMjH,MACzC6hB,GAAS51E,IACT41E,EAAM51E,OAASA,EACfnf,EAAQ80F,GAAWC,EAAOoG,EAAar6F,KAAKi1F,YAAY9lF,QAE5D4+D,EAAMxrE,IAAMF,KAAKE,IAAIwrE,EAAMxrE,IAAKrD,GAChC6uE,EAAMv+D,IAAMnN,KAAKmN,IAAIu+D,EAAMv+D,IAAKtQ,EACpC,CACH,SAAAq7F,CAAUlhB,EAAOmhB,GACV,MAAM5+D,EAAO57B,KAAKi1F,YACZ/iB,EAAUt2C,EAAKs2C,QACfsnB,EAAS59D,EAAKm2C,SAAWsH,IAAUz9C,EAAKo2C,OACxCxG,EAAO0G,EAAQzyE,OACfg7F,EAAaz6F,KAAKq4F,eAAehf,GACjC4a,EAlQM,EAACuG,EAAU5+D,EAAM+6C,IAAQ6jB,IAAa5+D,EAAKllB,QAAUklB,EAAKq7D,UAAY,CAClFjkF,KAAM4gF,GAAwBjd,GAAO,GACrCt4D,OAAQ,MAgQMq8E,CAAYF,EAAU5+D,EAAM57B,KAAK22E,OACzC5I,EAAQ,CACVxrE,IAAK6H,OAAOijE,kBACZ79D,IAAKpF,OAAOuwF,oBAERp4F,IAAKq4F,EAAWprF,IAAKqrF,GA9VrC,SAAuBxhB,GACnB,MAAM,IAAE92E,EAAI,IAAEiN,EAAI,WAAE6iE,EAAW,WAAEC,GAAgB+G,EAAM9G,gBACvD,MAAO,CACHhwE,IAAK8vE,EAAa9vE,EAAM6H,OAAOuwF,kBAC/BnrF,IAAK8iE,EAAa9iE,EAAMpF,OAAOijE,kBAEvC,CAwVmDkF,CAAckoB,GACzD,IAAIj7F,EAAG4nF,EACP,SAAS0T,IACL1T,EAASlV,EAAQ1yE,GACjB,MAAM40F,EAAahN,EAAOqT,EAAWroB,MACrC,OAAQvH,GAAeuc,EAAO/N,EAAMjH,QAAUwoB,EAAWxG,GAAcyG,EAAWzG,CACtF,CACA,IAAI50F,EAAI,EAAGA,EAAIgsE,IACPsvB,MAGJ96F,KAAKo6F,sBAAsBrsB,EAAOsL,EAAO+N,EAAQ6M,IAC7CuF,MALeh6F,GASvB,GAAIg6F,EACA,IAAIh6F,EAAIgsE,EAAO,EAAGhsE,GAAK,IAAKA,EACxB,IAAIs7F,IAAJ,CAGA96F,KAAKo6F,sBAAsBrsB,EAAOsL,EAAO+N,EAAQ6M,GACjD,KAFA,CAKR,OAAOlmB,CACX,CACA,kBAAAgtB,CAAmB1hB,GACf,MAAM+N,EAASpnF,KAAKi1F,YAAY/iB,QAC1B7zD,EAAS,GACf,IAAI7e,EAAGgsE,EAAMtsE,EACb,IAAIM,EAAI,EAAGgsE,EAAO4b,EAAO3nF,OAAQD,EAAIgsE,IAAQhsE,EACzCN,EAAQkoF,EAAO5nF,GAAG65E,EAAMjH,MACpBvH,GAAe3rE,IACfmf,EAAOne,KAAKhB,GAGpB,OAAOmf,CACX,CACH,cAAA28E,GACO,OAAO,CACX,CACH,gBAAAC,CAAiB9rF,GACV,MAAMysB,EAAO57B,KAAKi1F,YACZjjB,EAASp2C,EAAKo2C,OACdC,EAASr2C,EAAKq2C,OACdmV,EAASpnF,KAAKk6F,UAAU/qF,GAC9B,MAAO,CACHm6C,MAAO0oB,EAAS,GAAKA,EAAOkpB,iBAAiB9T,EAAOpV,EAAOI,OAAS,GACpElzE,MAAO+yE,EAAS,GAAKA,EAAOipB,iBAAiB9T,EAAOnV,EAAOG,OAAS,GAE5E,CACH,OAAAqe,CAAQ5rD,GACD,MAAMjJ,EAAO57B,KAAKi1F,YAClBj1F,KAAKo3B,OAAOyN,GAAQ,WACpBjJ,EAAKi0D,MAleb,SAAgB3wF,GACZ,IAAI0qE,EAAGrN,EAAG5uD,EAAGnB,EASb,OARI6C,GAASnQ,IACT0qE,EAAI1qE,EAAM40D,IACVyI,EAAIr9D,EAAMkoC,MACVz5B,EAAIzO,EAAM67E,OACVvuE,EAAItN,EAAMguC,MAEV08B,EAAIrN,EAAI5uD,EAAInB,EAAItN,EAEb,CACH40D,IAAK8V,EACLxiC,MAAOm1B,EACPwe,OAAQptE,EACRu/B,KAAM1gC,EACNgN,UAAoB,IAAVta,EAElB,CAidqBi8F,CAAOnwB,GAAehrE,KAAK4P,QAAQurE,KA/exD,SAAqBtI,EAAQC,EAAQ6gB,GACjC,IAAwB,IAApBA,EACA,OAAO,EAEX,MAAM3pE,EAAI0pE,GAAU7gB,EAAQ8gB,GACtB1pE,EAAIypE,GAAU5gB,EAAQ6gB,GAC5B,MAAO,CACH7/B,IAAK7pC,EAAE84B,IACP3b,MAAOpd,EAAE+4B,IACTg4B,OAAQ9wD,EAAElpB,MACVmsC,KAAMljB,EAAEjpB,MAEhB,CAme8Dq6F,CAAYx/D,EAAKi3C,OAAQj3C,EAAKk3C,OAAQ9yE,KAAKg7F,mBACrG,CACH,MAAA5jE,CAAOyN,GAAO,CACX,IAAA+rD,GACI,MAAMnY,EAAMz4E,KAAK27E,KACXhF,EAAQ32E,KAAK22E,MACb/6C,EAAO57B,KAAKi1F,YACZj2E,EAAW4c,EAAKj4B,MAAQ,GACxBo8E,EAAOpJ,EAAM+Y,UACbhV,EAAS,GACT35E,EAAQf,KAAKw2F,YAAc,EAC3B1kB,EAAQ9xE,KAAKy2F,YAAcz3E,EAASvf,OAASsB,EAC7Cy4E,EAA0Bx5E,KAAK4P,QAAQ4pE,wBAC7C,IAAIh6E,EAIJ,IAHIo8B,EAAKiQ,SACLjQ,EAAKiQ,QAAQ+kD,KAAKnY,EAAKsH,EAAMh/E,EAAO+wE,GAEpCtyE,EAAIuB,EAAOvB,EAAIuB,EAAQ+wE,IAAStyE,EAAE,CAClC,MAAMmK,EAAUqV,EAASxf,GACrBmK,EAAQ+M,SAGR/M,EAAQ+wE,QAAUlB,EAClBkB,EAAOx6E,KAAKyJ,GAEZA,EAAQinF,KAAKnY,EAAKsH,GAE1B,CACA,IAAIvgF,EAAI,EAAGA,EAAIk7E,EAAOj7E,SAAUD,EAC5Bk7E,EAAOl7E,GAAGoxF,KAAKnY,EAAKsH,EAE5B,CACH,QAAA0M,CAASt9E,EAAOurE,GACT,MAAM71C,EAAO61C,EAAS,SAAW,UACjC,YAAiB96E,IAAVuP,GAAuBnP,KAAKi1F,YAAYppD,QAAU7rC,KAAKq7F,6BAA6Bx2D,GAAQ7kC,KAAKs7F,0BAA0BnsF,GAAS,EAAG01B,EAClJ,CACH,UAAAs5C,CAAWhvE,EAAOurE,EAAQ71C,GACnB,MAAMgH,EAAU7rC,KAAKq3F,aACrB,IAAI9rF,EACJ,GAAI4D,GAAS,GAAKA,EAAQnP,KAAKi1F,YAAYtxF,KAAKlE,OAAQ,CACpD,MAAMkK,EAAU3J,KAAKi1F,YAAYtxF,KAAKwL,GACtC5D,EAAU5B,EAAQitF,WAAajtF,EAAQitF,SAvYnD,SAA2Bx9B,EAAQjqD,EAAOxF,GACtC,OAAOg6E,GAAcvqB,EAAQ,CACzBshB,QAAQ,EACR6gB,UAAWpsF,EACXi4E,YAAQxnF,EACR47F,SAAK57F,EACL+J,UACAwF,QACA01B,KAAM,UACNh/B,KAAM,QAEd,CA4X8D41F,CAAkBz7F,KAAKm+E,aAAchvE,EAAOxF,IAC9F4B,EAAQ67E,OAASpnF,KAAKk6F,UAAU/qF,GAChC5D,EAAQiwF,IAAM3vD,EAAQloC,KAAKwL,GAC3B5D,EAAQ4D,MAAQ5D,EAAQgwF,UAAYpsF,CACxC,MACI5D,EAAUvL,KAAK42F,WAAa52F,KAAK42F,SAtZ7C,SAA8Bx9B,EAAQjqD,GAClC,OAAOw0E,GAAcvqB,EAAQ,CACzBshB,QAAQ,EACR7uC,aAASjsC,EACT+rE,aAAcx8D,EACdA,QACA01B,KAAM,UACNh/B,KAAM,WAEd,CA6YwD61F,CAAqB17F,KAAK22E,MAAMwH,aAAcn+E,KAAKmP,QAC/F5D,EAAQsgC,QAAUA,EAClBtgC,EAAQ4D,MAAQ5D,EAAQogE,aAAe3rE,KAAKmP,MAIhD,OAFA5D,EAAQmvE,SAAWA,EACnBnvE,EAAQs5B,KAAOA,EACRt5B,CACX,CACH,4BAAA8vF,CAA6Bx2D,GACtB,OAAO7kC,KAAK27F,uBAAuB37F,KAAK82F,mBAAmBxuE,GAAIuc,EACnE,CACH,yBAAAy2D,CAA0BnsF,EAAO01B,GAC1B,OAAO7kC,KAAK27F,uBAAuB37F,KAAK+2F,gBAAgBzuE,GAAIuc,EAAM11B,EACtE,CACH,sBAAAwsF,CAAuB3oE,EAAa6R,EAAO,UAAW11B,GAC/C,MAAMurE,EAAkB,WAAT71C,EACTyB,EAAQtmC,KAAKk2F,gBACbhoD,EAAWlb,EAAc,IAAM6R,EAC/BkxD,EAASzvD,EAAM4H,GACf0tD,EAAU57F,KAAK02F,qBAAuB7pB,GAAQ19D,GACpD,GAAI4mF,EACA,OAAOD,GAAiBC,EAAQ6F,GAEpC,MAAMjlC,EAAS32D,KAAK22E,MAAMhgB,OACpByiC,EAAYziC,EAAOklC,wBAAwB77F,KAAKo2F,MAAOpjE,GACvD+wD,EAAWrJ,EAAS,CACtB,GAAG1nD,SACH,QACAA,EACA,IACA,CACAA,EACA,IAEE8wD,EAASntB,EAAO2iC,gBAAgBt5F,KAAKq3F,aAAc+B,GACnDjtF,EAAQlB,OAAO+H,KAAKmnE,GAASn7D,SAASgU,IAEtC3U,EAASs4C,EAAOmlC,oBAAoBhY,EAAQ33E,EADlC,IAAInM,KAAKm+E,WAAWhvE,EAAOurE,EAAQ71C,GACek/C,GAKlE,OAJI1lE,EAAO+0E,UACP/0E,EAAO+0E,QAAUwI,EACjBt1D,EAAM4H,GAAYjjC,OAAO67B,OAAOgvD,GAAiBz3E,EAAQu9E,KAEtDv9E,CACX,CACH,kBAAA09E,CAAmB5sF,EAAO6sF,EAAYthB,GAC/B,MAAM/D,EAAQ32E,KAAK22E,MACbrwC,EAAQtmC,KAAKk2F,gBACbhoD,EAAW,aAAa8tD,IACxBjG,EAASzvD,EAAM4H,GACrB,GAAI6nD,EACA,OAAOA,EAEX,IAAInmF,EACJ,IAAgC,IAA5B+mE,EAAM/mE,QAAQioE,UAAqB,CACnC,MAAMlhB,EAAS32D,KAAK22E,MAAMhgB,OACpByiC,EAAYziC,EAAOslC,0BAA0Bj8F,KAAKo2F,MAAO4F,GACzDlY,EAASntB,EAAO2iC,gBAAgBt5F,KAAKq3F,aAAc+B,GACzDxpF,EAAU+mD,EAAO4iC,eAAezV,EAAQ9jF,KAAKm+E,WAAWhvE,EAAOurE,EAAQshB,GAC3E,CACA,MAAMphB,EAAa,IAAIgY,GAAWjc,EAAO/mE,GAAWA,EAAQgrE,YAI5D,OAHIhrE,GAAWA,EAAQw0E,aACnB99C,EAAM4H,GAAYjjC,OAAO67B,OAAO8zC,IAE7BA,CACX,CACH,gBAAAshB,CAAiBtsF,GACV,GAAKA,EAAQwjF,QAGb,OAAOpzF,KAAKu2F,iBAAmBv2F,KAAKu2F,eAAiBtrF,OAAOuc,OAAO,CAAC,EAAG5X,GAC3E,CACH,cAAAusF,CAAet3D,EAAMu3D,GACd,OAAQA,GAAiBvG,GAAmBhxD,IAAS7kC,KAAK22E,MAAM0lB,mBACpE,CACH,iBAAAC,CAAkBv7F,EAAO8jC,GAClB,MAAM03D,EAAYv8F,KAAKs7F,0BAA0Bv6F,EAAO8jC,GAClD23D,EAA0Bx8F,KAAKu2F,eAC/B6F,EAAgBp8F,KAAKk8F,iBAAiBK,GACtCJ,EAAiBn8F,KAAKm8F,eAAet3D,EAAMu3D,IAAkBA,IAAkBI,EAErF,OADAx8F,KAAKy8F,oBAAoBL,EAAev3D,EAAM03D,GACvC,CACHH,gBACAD,iBAER,CACH,aAAAO,CAAc/yF,EAASwF,EAAOnI,EAAY69B,GAC/BgxD,GAAmBhxD,GACnB55B,OAAOuc,OAAO7d,EAAS3C,GAEvBhH,KAAK+7F,mBAAmB5sF,EAAO01B,GAAMzN,OAAOztB,EAAS3C,EAE7D,CACH,mBAAAy1F,CAAoBL,EAAev3D,EAAMsuD,GAC9BiJ,IAAkBvG,GAAmBhxD,IACrC7kC,KAAK+7F,wBAAmBn8F,EAAWilC,GAAMzN,OAAOglE,EAAejJ,EAEvE,CACH,SAAAwJ,CAAUhzF,EAASwF,EAAO01B,EAAM61C,GACzB/wE,EAAQ+wE,OAASA,EACjB,MAAM9qE,EAAU5P,KAAKysF,SAASt9E,EAAOurE,GACrC16E,KAAK+7F,mBAAmB5sF,EAAO01B,EAAM61C,GAAQtjD,OAAOztB,EAAS,CACzDiG,SAAU8qE,GAAU16E,KAAKk8F,iBAAiBtsF,IAAYA,GAE9D,CACA,gBAAAgtF,CAAiBjzF,EAASgiE,EAAcx8D,GACpCnP,KAAK28F,UAAUhzF,EAASwF,EAAO,UAAU,EAC7C,CACA,aAAA0tF,CAAclzF,EAASgiE,EAAcx8D,GACjCnP,KAAK28F,UAAUhzF,EAASwF,EAAO,UAAU,EAC7C,CACH,wBAAA2tF,GACO,MAAMnzF,EAAU3J,KAAKi1F,YAAYppD,QAC7BliC,GACA3J,KAAK28F,UAAUhzF,OAAS/J,EAAW,UAAU,EAErD,CACH,qBAAAm9F,GACO,MAAMpzF,EAAU3J,KAAKi1F,YAAYppD,QAC7BliC,GACA3J,KAAK28F,UAAUhzF,OAAS/J,EAAW,UAAU,EAErD,CACH,eAAAu5F,CAAgBH,GACT,MAAMr1F,EAAO3D,KAAKq2F,MACZr3E,EAAWhf,KAAKi1F,YAAYtxF,KAClC,IAAK,MAAO0c,EAAQ/N,EAAMC,KAASvS,KAAK62F,UACpC72F,KAAKqgB,GAAQ/N,EAAMC,GAEvBvS,KAAK62F,UAAY,GACjB,MAAMmG,EAAUh+E,EAASvf,OACnBw9F,EAAUt5F,EAAKlE,OACfqyE,EAAQzvE,KAAKE,IAAI06F,EAASD,GAC5BlrB,GACA9xE,KAAK8F,MAAM,EAAGgsE,GAEdmrB,EAAUD,EACVh9F,KAAKk9F,gBAAgBF,EAASC,EAAUD,EAAShE,GAC1CiE,EAAUD,GACjBh9F,KAAKm9F,gBAAgBF,EAASD,EAAUC,EAEhD,CACH,eAAAC,CAAgBn8F,EAAO+wE,EAAOknB,GAAmB,GAC1C,MAAMp9D,EAAO57B,KAAKi1F,YACZtxF,EAAOi4B,EAAKj4B,KACZo/C,EAAMhiD,EAAQ+wE,EACpB,IAAItyE,EACJ,MAAM49F,EAAQnX,IAEV,IADAA,EAAIxmF,QAAUqyE,EACVtyE,EAAIymF,EAAIxmF,OAAS,EAAGD,GAAKujD,EAAKvjD,IAC9BymF,EAAIzmF,GAAKymF,EAAIzmF,EAAIsyE,IAIzB,IADAsrB,EAAKz5F,GACDnE,EAAIuB,EAAOvB,EAAIujD,IAAOvjD,EACtBmE,EAAKnE,GAAK,IAAIQ,KAAK+2F,gBAEnB/2F,KAAKmnF,UACLiW,EAAKxhE,EAAKs2C,SAEdlyE,KAAK8F,MAAM/E,EAAO+wE,GACdknB,GACAh5F,KAAKq9F,eAAe15F,EAAM5C,EAAO+wE,EAAO,QAEhD,CACA,cAAAurB,CAAe1zF,EAAS5I,EAAO+wE,EAAOjtC,GAAO,CAChD,eAAAs4D,CAAgBp8F,EAAO+wE,GAChB,MAAMl2C,EAAO57B,KAAKi1F,YAClB,GAAIj1F,KAAKmnF,SAAU,CACf,MAAMmW,EAAU1hE,EAAKs2C,QAAQj+D,OAAOlT,EAAO+wE,GACvCl2C,EAAKq7D,UACLrB,GAAYh6D,EAAM0hE,EAE1B,CACA1hE,EAAKj4B,KAAKsQ,OAAOlT,EAAO+wE,EAC5B,CACH,KAAAyrB,CAAMz0F,GACC,GAAI9I,KAAKmnF,SACLnnF,KAAK62F,UAAU32F,KAAK4I,OACjB,CACH,MAAOuX,EAAQ/N,EAAMC,GAAQzJ,EAC7B9I,KAAKqgB,GAAQ/N,EAAMC,EACvB,CACAvS,KAAK22E,MAAM6mB,aAAat9F,KAAK,CACzBF,KAAKmP,SACFrG,GAEX,CACA,WAAA20F,GACI,MAAM3rB,EAAQ3kE,UAAU1N,OACxBO,KAAKu9F,MAAM,CACP,kBACAv9F,KAAKq3F,aAAa1zF,KAAKlE,OAASqyE,EAChCA,GAER,CACA,UAAA4rB,GACI19F,KAAKu9F,MAAM,CACP,kBACAv9F,KAAKi1F,YAAYtxF,KAAKlE,OAAS,EAC/B,GAER,CACA,YAAAk+F,GACI39F,KAAKu9F,MAAM,CACP,kBACA,EACA,GAER,CACA,aAAAK,CAAc78F,EAAO+wE,GACbA,GACA9xE,KAAKu9F,MAAM,CACP,kBACAx8F,EACA+wE,IAGR,MAAM+rB,EAAW1wF,UAAU1N,OAAS,EAChCo+F,GACA79F,KAAKu9F,MAAM,CACP,kBACAx8F,EACA88F,GAGZ,CACA,cAAAC,GACI99F,KAAKu9F,MAAM,CACP,kBACA,EACApwF,UAAU1N,QAElB,EAcH,SAASs+F,GAAqBniE,GAC3B,MAAMy9C,EAAQz9C,EAAKo2C,OACb3zD,EAbV,SAA2Bg7D,EAAOxzE,GAC9B,IAAKwzE,EAAM2kB,OAAOC,KAAM,CACpB,MAAMC,EAAe7kB,EAAM0b,wBAAwBlvF,GACnD,IAAIwY,EAAS,GACb,IAAI,IAAI7e,EAAI,EAAGgsE,EAAO0yB,EAAaz+F,OAAQD,EAAIgsE,EAAMhsE,IACjD6e,EAASA,EAAOhS,OAAO6xF,EAAa1+F,GAAG2xC,WAAW4pD,mBAAmB1hB,IAEzEA,EAAM2kB,OAAOC,KAAOhtB,GAAa5yD,EAAO4uB,KAAK,CAAC/jC,EAAGyE,IAAIzE,EAAIyE,GAC7D,CACA,OAAO0rE,EAAM2kB,OAAOC,IACxB,CAGmBE,CAAkB9kB,EAAOz9C,EAAK/1B,MAC7C,IACIrG,EAAGgsE,EAAM4yB,EAAM1U,EADfnnF,EAAM82E,EAAMglB,QAEhB,MAAMC,EAAmB,KACR,QAATF,IAA4B,QAAVA,IAGlBvxB,GAAQ6c,KACRnnF,EAAMF,KAAKE,IAAIA,EAAKF,KAAKoI,IAAI2zF,EAAO1U,IAASnnF,IAEjDmnF,EAAO0U,IAEX,IAAI5+F,EAAI,EAAGgsE,EAAOntD,EAAO5e,OAAQD,EAAIgsE,IAAQhsE,EACzC4+F,EAAO/kB,EAAM7G,iBAAiBn0D,EAAO7e,IACrC8+F,IAGJ,IADA5U,OAAO9pF,EACHJ,EAAI,EAAGgsE,EAAO6N,EAAM3C,MAAMj3E,OAAQD,EAAIgsE,IAAQhsE,EAC9C4+F,EAAO/kB,EAAMklB,gBAAgB/+F,GAC7B8+F,IAEJ,OAAO/7F,CACX,CA0DA,SAASiS,GAAWgqF,EAAOxxB,EAAMiF,EAAQzyE,GAMrC,OALIiV,GAAQ+pF,GAtBhB,SAAuBA,EAAOxxB,EAAMiF,EAAQzyE,GACxC,MAAMi/F,EAAaxsB,EAAOnsE,MAAM04F,EAAM,GAAIh/F,GACpCk/F,EAAWzsB,EAAOnsE,MAAM04F,EAAM,GAAIh/F,GAClC+C,EAAMF,KAAKE,IAAIk8F,EAAYC,GAC3BlvF,EAAMnN,KAAKmN,IAAIivF,EAAYC,GACjC,IAAIC,EAAWp8F,EACXq8F,EAASpvF,EACTnN,KAAKoI,IAAIlI,GAAOF,KAAKoI,IAAI+E,KACzBmvF,EAAWnvF,EACXovF,EAASr8F,GAEbyqE,EAAKiF,EAAOG,MAAQwsB,EACpB5xB,EAAK6xB,QAAU,CACXF,WACAC,SACA79F,MAAO09F,EACP17C,IAAK27C,EACLn8F,MACAiN,MAER,CAGQsvF,CAAcN,EAAOxxB,EAAMiF,EAAQzyE,GAEnCwtE,EAAKiF,EAAOG,MAAQH,EAAOnsE,MAAM04F,EAAOh/F,GAErCwtE,CACX,CACA,SAAS+xB,GAAsBnjE,EAAMj4B,EAAM5C,EAAO+wE,GAC9C,MAAME,EAASp2C,EAAKo2C,OACdC,EAASr2C,EAAKq2C,OACd4nB,EAAS7nB,EAAO8nB,YAChBC,EAAc/nB,IAAWC,EACzBmV,EAAS,GACf,IAAI5nF,EAAGgsE,EAAMwB,EAAMwxB,EACnB,IAAIh/F,EAAIuB,EAAOyqE,EAAOzqE,EAAQ+wE,EAAOtyE,EAAIgsE,IAAQhsE,EAC7Cg/F,EAAQ76F,EAAKnE,GACbwtE,EAAO,CAAC,EACRA,EAAKgF,EAAOI,MAAQ2nB,GAAe/nB,EAAOlsE,MAAM+zF,EAAOr6F,GAAIA,GAC3D4nF,EAAOlnF,KAAKsU,GAAWgqF,EAAOxxB,EAAMiF,EAAQzyE,IAEhD,OAAO4nF,CACX,CACA,SAAS4X,GAAWC,GAChB,OAAOA,QAA8Br/F,IAApBq/F,EAAON,eAA4C/+F,IAAlBq/F,EAAOL,MAC7D,CAiCA,SAASM,GAAiBl4F,EAAY4I,EAASqkF,EAAO9kF,GAClD,IAAIgwF,EAAOvvF,EAAQwvF,cACnB,MAAM3M,EAAM,CAAC,EACb,IAAK0M,EAED,YADAn4F,EAAWo4F,cAAgB3M,GAG/B,IAAa,IAAT0M,EAOA,YANAn4F,EAAWo4F,cAAgB,CACvBtrC,KAAK,EACL1sB,OAAO,EACP2zC,QAAQ,EACR7tC,MAAM,IAId,MAAM,MAAEnsC,EAAM,IAAEgiD,EAAI,QAAEzI,EAAQ,IAAEwZ,EAAI,OAAEinB,GA1C1C,SAAqB/zE,GACjB,IAAIszC,EAASv5C,EAAOgiD,EAAK+Q,EAAKinB,EAiB9B,OAhBI/zE,EAAWq4F,YACX/kD,EAAUtzC,EAAW8xF,KAAO9xF,EAAWgjB,EACvCjpB,EAAQ,OACRgiD,EAAM,UAENzI,EAAUtzC,EAAW8xF,KAAO9xF,EAAWijB,EACvClpB,EAAQ,SACRgiD,EAAM,OAENzI,GACAwZ,EAAM,MACNinB,EAAS,UAETjnB,EAAM,QACNinB,EAAS,OAEN,CACHh6E,QACAgiD,MACAzI,UACAwZ,MACAinB,SAER,CAiBsDukB,CAAYt4F,GACjD,WAATm4F,GAAqBlL,IACrBjtF,EAAWu4F,oBAAqB,GAC3BtL,EAAMuB,MAAQ,KAAOrmF,EACtBgwF,EAAOrrC,GACCmgC,EAAMwB,SAAW,KAAOtmF,EAChCgwF,EAAOpkB,GAEP0X,EAAI+M,GAAUzkB,EAAQh6E,EAAOgiD,EAAKzI,KAAY,EAC9C6kD,EAAOrrC,IAGf2+B,EAAI+M,GAAUL,EAAMp+F,EAAOgiD,EAAKzI,KAAY,EAC5CtzC,EAAWo4F,cAAgB3M,CAC/B,CACA,SAAS+M,GAAUL,EAAMj2F,EAAGyE,EAAG2sC,GAS/B,IAAcmlD,EAAM/zB,EAAIg0B,EAFpB,OANIplD,GAQgBolD,EAPK/xF,EACrBwxF,EAAOQ,GADPR,GAOMM,EAPMN,MAOAzzB,EAPMxiE,GAQDw2F,EAAKD,IAASC,EAAKh0B,EAAK+zB,EAPnB9xF,EAAGzE,IAEzBi2F,EAAOQ,GAASR,EAAMj2F,EAAGyE,GAEtBwxF,CACX,CAIA,SAASQ,GAASp8C,EAAGxiD,EAAOgiD,GACxB,MAAa,UAANQ,EAAgBxiD,EAAc,QAANwiD,EAAcR,EAAMQ,CACvD,CACA,SAASq8C,GAAiB54F,GAAY,cAAE64F,GAAkBr4B,GACtDxgE,EAAW64F,cAAkC,SAAlBA,EAAqC,IAAVr4B,EAAc,IAAO,EAAIq4B,CACnF,CA4bA,MAAMC,WAA2B7J,GAC7B19B,UAAY,WACfA,gBAAkB,CACXu+B,oBAAoB,EACpBC,gBAAiB,MACjBlf,UAAW,CACPkoB,eAAe,EACfC,cAAc,GAElBplB,WAAY,CACR/E,QAAS,CACLhwE,KAAM,SACNmB,WAAY,CACR,gBACA,WACA,cACA,cACA,aACA,IACA,IACA,SACA,cACA,aAIZi5F,OAAQ,MACRnhB,SAAU,EACVohB,cAAe,IACfnhB,OAAQ,OACRohB,QAAS,EACTvnB,UAAW,KAEfrgB,mBAAqB,CACjB6hB,YAAcr7E,GAAgB,YAATA,EACrBs7E,WAAat7E,GAAgB,YAATA,IAAuBA,EAAKmc,WAAW,gBAAkBnc,EAAKmc,WAAW,oBAEpGq9C,iBAAmB,CACZ6nC,YAAa,EACbjnB,QAAS,CACLknB,OAAQ,CACJxG,OAAQ,CACJ,cAAAyG,CAAgB3pB,GACZ,MAAMhzE,EAAOgzE,EAAMhzE,MACXk2F,QAAQ,WAAEhb,EAAW,UAAEmD,EAAU,MAAE3Y,EAAM,gBAAEk3B,EAAgB,aAAEC,IAAqB7pB,EAAM0pB,OAAOzwF,QACvG,OAAIjM,EAAKk2F,OAAOp6F,QAAUkE,EAAKq0E,SAASv4E,OAC7BkE,EAAKk2F,OAAO3xF,IAAI,CAACohD,EAAO9pD,KAC3B,MACM0yB,EADOykD,EAAMwhB,eAAe,GACfhnD,WAAWs7C,SAASjtF,GACvC,MAAO,CACH+T,KAAM+1C,EACNi4B,UAAWrvD,EAAM4lD,gBACjB2oB,UAAWp3B,EACX3yD,QAASigE,EAAM+pB,kBAAkBlhG,GACjCmhG,SAAUzuE,EAAMi9D,WAChByR,eAAgB1uE,EAAMk9D,iBACtByR,SAAU3uE,EAAMm9D,gBAChB/T,UAAWppD,EAAM0tD,YACjB0B,YAAapvD,EAAM6lD,YACnBiK,UAAWA,EACXnD,WAAYA,EACZ2hB,aAAcD,IAAoBC,GAAgBtuE,EAAMsuE,cACxDrxF,MAAO3P,KAIZ,EACX,GAEJ,OAAAy5E,CAASrqE,EAAGkyF,EAAYT,GACpBA,EAAO1pB,MAAMoqB,qBAAqBD,EAAW3xF,OAC7CkxF,EAAO1pB,MAAMv/C,QACjB,KAIZ,WAAA12B,CAAYi2E,EAAOhL,GACfvzD,MAAMu+D,EAAOhL,GACb3rE,KAAK02F,qBAAsB,EAC3B12F,KAAKghG,iBAAcphG,EACnBI,KAAKihG,iBAAcrhG,EACnBI,KAAKqrF,aAAUzrF,EACfI,KAAKsrF,aAAU1rF,CACnB,CACA,UAAAo3F,GAAc,CACjB,KAAAlxF,CAAM/E,EAAO+wE,GACN,MAAMnuE,EAAO3D,KAAKq3F,aAAa1zF,KACzBi4B,EAAO57B,KAAKi1F,YAClB,IAAsB,IAAlBj1F,KAAKmnF,SACLvrD,EAAKs2C,QAAUvuE,MACZ,CACH,IAKInE,EAAGgsE,EALH01B,EAAU1hG,IAAKmE,EAAKnE,GACxB,GAAI6P,GAAS1L,EAAK5C,IAAS,CACvB,MAAM,IAAEkG,EAAK,SAAajH,KAAKmnF,SAC/B+Z,EAAU1hG,IAAK+sE,GAAiB5oE,EAAKnE,GAAIyH,EAC7C,CAEA,IAAIzH,EAAIuB,EAAOyqE,EAAOzqE,EAAQ+wE,EAAOtyE,EAAIgsE,IAAQhsE,EAC7Co8B,EAAKs2C,QAAQ1yE,GAAK0hG,EAAO1hG,EAEjC,CACJ,CACH,YAAA2hG,GACO,OAAO5yB,GAAUvuE,KAAK4P,QAAQkvE,SAAW,GAC7C,CACH,iBAAAsiB,GACO,OAAO7yB,GAAUvuE,KAAK4P,QAAQswF,cAClC,CACH,mBAAAmB,GACO,IAAI9+F,EAAM2qE,GACN19D,GAAO09D,GACX,IAAI,IAAI1tE,EAAI,EAAGA,EAAIQ,KAAK22E,MAAMhzE,KAAKq0E,SAASv4E,SAAUD,EAClD,GAAIQ,KAAK22E,MAAM2qB,iBAAiB9hG,IAAMQ,KAAK22E,MAAMwhB,eAAe34F,GAAGqG,OAAS7F,KAAKo2F,MAAO,CACpF,MAAMjlD,EAAanxC,KAAK22E,MAAMwhB,eAAe34F,GAAG2xC,WAC1C2tC,EAAW3tC,EAAWgwD,eACtBjB,EAAgB/uD,EAAWiwD,oBACjC7+F,EAAMF,KAAKE,IAAIA,EAAKu8E,GACpBtvE,EAAMnN,KAAKmN,IAAIA,EAAKsvE,EAAWohB,EACnC,CAEJ,MAAO,CACHphB,SAAUv8E,EACV29F,cAAe1wF,EAAMjN,EAE7B,CACH,MAAA60B,CAAOyN,GACA,MAAM8xC,EAAQ32E,KAAK22E,OACb,UAAE+Y,GAAe/Y,EACjB/6C,EAAO57B,KAAKi1F,YACZsM,EAAO3lE,EAAKj4B,KACZw8F,EAAUngG,KAAKwhG,oBAAsBxhG,KAAKyhG,aAAaF,GAAQvhG,KAAK4P,QAAQuwF,QAC5EuB,EAAUr/F,KAAKmN,KAAKnN,KAAKE,IAAImtF,EAAUv9D,MAAOu9D,EAAU37B,QAAUosC,GAAW,EAAG,GAChFF,EAAS59F,KAAKE,KDn1DC2oE,ECm1DqCw2B,EDn1DR,iBAApCxiG,ECm1DuBc,KAAK4P,QAAQqwF,SDn1DY/gG,EAAM8b,SAAS,KAAOmwD,WAAWjsE,GAAS,KAAOA,EAAQgsE,GCm1DnD,GDn1DvD,IAAChsE,EAAOgsE,ECo1DrB,MAAMy2B,EAAc3hG,KAAK4hG,eAAe5hG,KAAKmP,QACvC,cAAE+wF,EAAc,SAAEphB,GAAc9+E,KAAKqhG,uBACrC,OAAEQ,EAAO,OAAEC,EAAO,QAAEzW,EAAQ,QAAEC,GArK5C,SAA2BxM,EAAUohB,EAAeD,GAChD,IAAI4B,EAAS,EACTC,EAAS,EACTzW,EAAU,EACVC,EAAU,EACd,GAAI4U,EAAgBhzB,GAAK,CACrB,MAAM60B,EAAajjB,EACbkjB,EAAWD,EAAa7B,EACxB+B,EAAS5/F,KAAKoyE,IAAIstB,GAClBG,EAAS7/F,KAAKmxE,IAAIuuB,GAClBI,EAAO9/F,KAAKoyE,IAAIutB,GAChBI,EAAO//F,KAAKmxE,IAAIwuB,GAChBK,EAAU,CAAClzB,EAAOjmE,EAAGyE,IAAIgiE,GAAcR,EAAO4yB,EAAYC,GAAU,GAAQ,EAAI3/F,KAAKmN,IAAItG,EAAGA,EAAI+2F,EAAQtyF,EAAGA,EAAIsyF,GAC/GqC,EAAU,CAACnzB,EAAOjmE,EAAGyE,IAAIgiE,GAAcR,EAAO4yB,EAAYC,GAAU,IAAS,EAAI3/F,KAAKE,IAAI2G,EAAGA,EAAI+2F,EAAQtyF,EAAGA,EAAIsyF,GAChHsC,EAAOF,EAAQ,EAAGJ,EAAQE,GAC1BK,EAAOH,EAAQ90B,GAAS20B,EAAQE,GAChCK,EAAOH,EAAQr1B,GAAIg1B,EAAQE,GAC3BO,EAAOJ,EAAQr1B,GAAKM,GAAS20B,EAAQE,GAC3CP,GAAUU,EAAOE,GAAQ,EACzBX,GAAUU,EAAOE,GAAQ,EACzBrX,IAAYkX,EAAOE,GAAQ,EAC3BnX,IAAYkX,EAAOE,GAAQ,CAC/B,CACA,MAAO,CACHb,SACAC,SACAzW,UACAC,UAER,CAwIyDqX,CAAkB7jB,EAAUohB,EAAeD,GACtF5d,GAAYqN,EAAUv9D,MAAQguE,GAAW0B,EACzCe,GAAalT,EAAU37B,OAASosC,GAAW2B,EAC3Ce,EAAYxgG,KAAKmN,IAAInN,KAAKE,IAAI8/E,EAAUugB,GAAa,EAAG,GACxD3B,EAAch2B,GAAYjrE,KAAK4P,QAAQmvE,OAAQ8jB,GAE/CC,GAAgB7B,EADF5+F,KAAKmN,IAAIyxF,EAAchB,EAAQ,IACAjgG,KAAK+iG,gCACxD/iG,KAAKqrF,QAAUA,EAAU4V,EACzBjhG,KAAKsrF,QAAUA,EAAU2V,EACzBrlE,EAAKonE,MAAQhjG,KAAKijG,iBAClBjjG,KAAKihG,YAAcA,EAAc6B,EAAe9iG,KAAKkjG,qBAAqBljG,KAAKmP,OAC/EnP,KAAKghG,YAAc3+F,KAAKmN,IAAIxP,KAAKihG,YAAc6B,EAAenB,EAAa,GAC3E3hG,KAAKq9F,eAAekE,EAAM,EAAGA,EAAK9hG,OAAQolC,EAC9C,CACH,cAAAs+D,CAAe3jG,EAAG84F,GACX,MAAMzX,EAAO7gF,KAAK4P,QACZgsB,EAAO57B,KAAKi1F,YACZiL,EAAgBlgG,KAAKohG,oBAC3B,OAAI9I,GAASzX,EAAKhJ,UAAUkoB,gBAAkB//F,KAAK22E,MAAM+pB,kBAAkBlhG,IAA0B,OAApBo8B,EAAKs2C,QAAQ1yE,IAAeo8B,EAAKj4B,KAAKnE,GAAGkX,OAC/G,EAEJ1W,KAAKojG,uBAAuBxnE,EAAKs2C,QAAQ1yE,GAAK0gG,EAAgBhzB,GACzE,CACA,cAAAmwB,CAAekE,EAAMxgG,EAAO+wE,EAAOjtC,GAC/B,MAAMyzD,EAAiB,UAATzzD,EACR8xC,EAAQ32E,KAAK22E,MACb+Y,EAAY/Y,EAAM+Y,UAElB2T,EADO1sB,EAAM/mE,QACQioE,UACrByrB,GAAW5T,EAAUxiD,KAAOwiD,EAAUtoD,OAAS,EAC/Cm8D,GAAW7T,EAAU57B,IAAM47B,EAAU3U,QAAU,EAC/CilB,EAAe1H,GAAS+K,EAAcrD,aACtCgB,EAAchB,EAAe,EAAIhgG,KAAKghG,YACtCC,EAAcjB,EAAe,EAAIhgG,KAAKihG,aACtC,cAAE7E,EAAc,eAAED,GAAoBn8F,KAAKs8F,kBAAkBv7F,EAAO8jC,GAC1E,IACIrlC,EADAuiG,EAAa/hG,KAAKmhG,eAEtB,IAAI3hG,EAAI,EAAGA,EAAIuB,IAASvB,EACpBuiG,GAAc/hG,KAAKmjG,eAAe3jG,EAAG84F,GAEzC,IAAI94F,EAAIuB,EAAOvB,EAAIuB,EAAQ+wE,IAAStyE,EAAE,CAClC,MAAM0gG,EAAgBlgG,KAAKmjG,eAAe3jG,EAAG84F,GACvCjZ,EAAMkiB,EAAK/hG,GACXwH,EAAa,CACfgjB,EAAGs5E,EAAUtjG,KAAKqrF,QAClBphE,EAAGs5E,EAAUvjG,KAAKsrF,QAClByW,aACAC,SAAUD,EAAa7B,EACvBA,gBACAe,cACAD,eAEA7E,IACAn1F,EAAW4I,QAAUwsF,GAAiBp8F,KAAKs7F,0BAA0B97F,EAAG6/E,EAAI3E,OAAS,SAAW71C,IAEpGk9D,GAAc7B,EACdlgG,KAAK08F,cAAcrd,EAAK7/E,EAAGwH,EAAY69B,EAC3C,CACJ,CACA,cAAAo+D,GACI,MAAMrnE,EAAO57B,KAAKi1F,YACZuO,EAAW5nE,EAAKj4B,KACtB,IACInE,EADAwjG,EAAQ,EAEZ,IAAIxjG,EAAI,EAAGA,EAAIgkG,EAAS/jG,OAAQD,IAAI,CAChC,MAAMN,EAAQ08B,EAAKs2C,QAAQ1yE,GACb,OAAVN,GAAmBmL,MAAMnL,KAAUc,KAAK22E,MAAM+pB,kBAAkBlhG,IAAOgkG,EAAShkG,GAAGkX,SACnFssF,GAAS3gG,KAAKoI,IAAIvL,GAE1B,CACA,OAAO8jG,CACX,CACA,sBAAAI,CAAuBlkG,GACnB,MAAM8jG,EAAQhjG,KAAKi1F,YAAY+N,MAC/B,OAAIA,EAAQ,IAAM34F,MAAMnL,GACbguE,IAAO7qE,KAAKoI,IAAIvL,GAAS8jG,GAE7B,CACX,CACA,gBAAA/H,CAAiB9rF,GACb,MAAMysB,EAAO57B,KAAKi1F,YACZte,EAAQ32E,KAAK22E,MACbkjB,EAASljB,EAAMhzE,KAAKk2F,QAAU,GAC9B36F,EAAQ82E,GAAap6C,EAAKs2C,QAAQ/iE,GAAQwnE,EAAM/mE,QAAQqmE,QAC9D,MAAO,CACH3sB,MAAOuwC,EAAO1qF,IAAU,GACxBjQ,QAER,CACA,iBAAAsiG,CAAkBD,GACd,IAAI/xF,EAAM,EACV,MAAMmnE,EAAQ32E,KAAK22E,MACnB,IAAIn3E,EAAGgsE,EAAM5vC,EAAMuV,EAAYvhC,EAC/B,IAAK2xF,EACD,IAAI/hG,EAAI,EAAGgsE,EAAOmL,EAAMhzE,KAAKq0E,SAASv4E,OAAQD,EAAIgsE,IAAQhsE,EACtD,GAAIm3E,EAAM2qB,iBAAiB9hG,GAAI,CAC3Bo8B,EAAO+6C,EAAMwhB,eAAe34F,GAC5B+hG,EAAO3lE,EAAKj4B,KACZwtC,EAAavV,EAAKuV,WAClB,KACJ,CAGR,IAAKowD,EACD,OAAO,EAEX,IAAI/hG,EAAI,EAAGgsE,EAAO+1B,EAAK9hG,OAAQD,EAAIgsE,IAAQhsE,EACvCoQ,EAAUuhC,EAAWmqD,0BAA0B97F,GACnB,UAAxBoQ,EAAQ6zF,cACRj0F,EAAMnN,KAAKmN,IAAIA,EAAKI,EAAQgwE,aAAe,EAAGhwE,EAAQ8zF,kBAAoB,IAGlF,OAAOl0F,CACX,CACA,YAAAiyF,CAAaF,GACT,IAAI/xF,EAAM,EACV,IAAI,IAAIhQ,EAAI,EAAGgsE,EAAO+1B,EAAK9hG,OAAQD,EAAIgsE,IAAQhsE,EAAE,CAC7C,MAAMoQ,EAAU5P,KAAKs7F,0BAA0B97F,GAC/CgQ,EAAMnN,KAAKmN,IAAIA,EAAKI,EAAQorE,QAAU,EAAGprE,EAAQ+zF,aAAe,EACpE,CACA,OAAOn0F,CACX,CACH,oBAAA0zF,CAAqBv3B,GACd,IAAIi4B,EAAmB,EACvB,IAAI,IAAIpkG,EAAI,EAAGA,EAAImsE,IAAgBnsE,EAC3BQ,KAAK22E,MAAM2qB,iBAAiB9hG,KAC5BokG,GAAoB5jG,KAAK4hG,eAAepiG,IAGhD,OAAOokG,CACX,CACH,cAAAhC,CAAej2B,GACR,OAAOtpE,KAAKmN,IAAIw7D,GAAehrE,KAAK22E,MAAMhzE,KAAKq0E,SAASrM,GAAcrC,OAAQ,GAAI,EACtF,CACH,6BAAAy5B,GACO,OAAO/iG,KAAKkjG,qBAAqBljG,KAAK22E,MAAMhzE,KAAKq0E,SAASv4E,SAAW,CACzE,EA6GJ,MAAMokG,WAA4B5N,GAC9B19B,UAAY,YACfA,gBAAkB,CACXw+B,gBAAiB,MACjBlf,UAAW,CACPkoB,eAAe,EACfC,cAAc,GAElBplB,WAAY,CACR/E,QAAS,CACLhwE,KAAM,SACNmB,WAAY,CACR,IACA,IACA,aACA,WACA,cACA,iBAIZ4xE,UAAW,IACXmpB,WAAY,GAEnBxpC,iBAAmB,CACZ6nC,YAAa,EACbjnB,QAAS,CACLknB,OAAQ,CACJxG,OAAQ,CACJ,cAAAyG,CAAgB3pB,GACZ,MAAMhzE,EAAOgzE,EAAMhzE,KACnB,GAAIA,EAAKk2F,OAAOp6F,QAAUkE,EAAKq0E,SAASv4E,OAAQ,CAC5C,MAAQo6F,QAAQ,WAAEhb,EAAW,MAAExV,IAAcsN,EAAM0pB,OAAOzwF,QAC1D,OAAOjM,EAAKk2F,OAAO3xF,IAAI,CAACohD,EAAO9pD,KAC3B,MACM0yB,EADOykD,EAAMwhB,eAAe,GACfhnD,WAAWs7C,SAASjtF,GACvC,MAAO,CACH+T,KAAM+1C,EACNi4B,UAAWrvD,EAAM4lD,gBACjBwJ,YAAapvD,EAAM6lD,YACnB0oB,UAAWp3B,EACXiS,UAAWppD,EAAM0tD,YACjBf,WAAYA,EACZnoE,QAASigE,EAAM+pB,kBAAkBlhG,GACjC2P,MAAO3P,IAGnB,CACA,MAAO,EACX,GAEJ,OAAAy5E,CAASrqE,EAAGkyF,EAAYT,GACpBA,EAAO1pB,MAAMoqB,qBAAqBD,EAAW3xF,OAC7CkxF,EAAO1pB,MAAMv/C,QACjB,IAGRkiD,OAAQ,CACJ/c,EAAG,CACC12D,KAAM,eACNi+F,WAAY,CACRn6C,SAAS,GAEbsxB,aAAa,EACbI,KAAM,CACF0oB,UAAU,GAEdC,YAAa,CACTr6C,SAAS,GAEbo4C,WAAY,KAIxB,WAAArhG,CAAYi2E,EAAOhL,GACfvzD,MAAMu+D,EAAOhL,GACb3rE,KAAKghG,iBAAcphG,EACnBI,KAAKihG,iBAAcrhG,CACvB,CACA,gBAAAq7F,CAAiB9rF,GACb,MAAMysB,EAAO57B,KAAKi1F,YACZte,EAAQ32E,KAAK22E,MACbkjB,EAASljB,EAAMhzE,KAAKk2F,QAAU,GAC9B36F,EAAQ82E,GAAap6C,EAAKs2C,QAAQ/iE,GAAOotD,EAAGoa,EAAM/mE,QAAQqmE,QAChE,MAAO,CACH3sB,MAAOuwC,EAAO1qF,IAAU,GACxBjQ,QAER,CACA,eAAAw6F,CAAgB99D,EAAMj4B,EAAM5C,EAAO+wE,GAC/B,OAAOoV,GAA4BrmF,KAAKb,KAAjCknF,CAAuCtrD,EAAMj4B,EAAM5C,EAAO+wE,EACrE,CACA,MAAA16C,CAAOyN,GACH,MAAM08D,EAAOvhG,KAAKi1F,YAAYtxF,KAC9B3D,KAAKikG,gBACLjkG,KAAKq9F,eAAekE,EAAM,EAAGA,EAAK9hG,OAAQolC,EAC9C,CACH,SAAA01D,GACO,MAAM3+D,EAAO57B,KAAKi1F,YACZlnB,EAAQ,CACVxrE,IAAK6H,OAAOijE,kBACZ79D,IAAKpF,OAAOuwF,mBAahB,OAXA/+D,EAAKj4B,KAAKy/B,QAAQ,CAACz5B,EAASwF,KACxB,MAAMi4E,EAASpnF,KAAKk6F,UAAU/qF,GAAOotD,GAChClyD,MAAM+8E,IAAWpnF,KAAK22E,MAAM+pB,kBAAkBvxF,KAC3Ci4E,EAASrZ,EAAMxrE,MACfwrE,EAAMxrE,IAAM6kF,GAEZA,EAASrZ,EAAMv+D,MACfu+D,EAAMv+D,IAAM43E,MAIjBrZ,CACX,CACH,aAAAk2B,GACO,MAAMttB,EAAQ32E,KAAK22E,MACb+Y,EAAY/Y,EAAM+Y,UAClB7O,EAAOlK,EAAM/mE,QACbs0F,EAAU7hG,KAAKE,IAAImtF,EAAUtoD,MAAQsoD,EAAUxiD,KAAMwiD,EAAU3U,OAAS2U,EAAU57B,KAClFmtC,EAAc5+F,KAAKmN,IAAI00F,EAAU,EAAG,GAEpCpB,GAAgB7B,EADF5+F,KAAKmN,IAAIqxE,EAAKsjB,iBAAmBlD,EAAc,IAAMpgB,EAAKsjB,iBAAmB,EAAG,IACjDxtB,EAAMytB,yBACzDpkG,KAAKihG,YAAcA,EAAc6B,EAAe9iG,KAAKmP,MACrDnP,KAAKghG,YAAchhG,KAAKihG,YAAc6B,CAC1C,CACA,cAAAzF,CAAekE,EAAMxgG,EAAO+wE,EAAOjtC,GAC/B,MAAMyzD,EAAiB,UAATzzD,EACR8xC,EAAQ32E,KAAK22E,MAEb0sB,EADO1sB,EAAM/mE,QACQioE,UACrBwB,EAAQr5E,KAAKi1F,YAAYiD,OACzBoL,EAAUjqB,EAAMgrB,QAChBd,EAAUlqB,EAAMirB,QAChBC,EAAoBlrB,EAAMmrB,cAAc,GAAK,GAAMv3B,GACzD,IACIztE,EADA2vE,EAAQo1B,EAEZ,MAAME,EAAe,IAAMzkG,KAAK0kG,uBAChC,IAAIllG,EAAI,EAAGA,EAAIuB,IAASvB,EACpB2vE,GAASnvE,KAAK2kG,cAAcnlG,EAAGqlC,EAAM4/D,GAEzC,IAAIjlG,EAAIuB,EAAOvB,EAAIuB,EAAQ+wE,EAAOtyE,IAAI,CAClC,MAAM6/E,EAAMkiB,EAAK/hG,GACjB,IAAIuiG,EAAa5yB,EACb6yB,EAAW7yB,EAAQnvE,KAAK2kG,cAAcnlG,EAAGqlC,EAAM4/D,GAC/CxD,EAActqB,EAAM+pB,kBAAkBlhG,GAAK65E,EAAMurB,8BAA8B5kG,KAAKk6F,UAAU16F,GAAG+8D,GAAK,EAC1G4S,EAAQ6yB,EACJ1J,IACI+K,EAAcrD,eACdiB,EAAc,GAEdoC,EAActD,gBACdgC,EAAaC,EAAWuC,IAGhC,MAAMv9F,EAAa,CACfgjB,EAAGs5E,EACHr5E,EAAGs5E,EACHvC,YAAa,EACbC,cACAc,aACAC,WACApyF,QAAS5P,KAAKs7F,0BAA0B97F,EAAG6/E,EAAI3E,OAAS,SAAW71C,IAEvE7kC,KAAK08F,cAAcrd,EAAK7/E,EAAGwH,EAAY69B,EAC3C,CACJ,CACA,oBAAA6/D,GACI,MAAM9oE,EAAO57B,KAAKi1F,YAClB,IAAInjB,EAAQ,EAMZ,OALAl2C,EAAKj4B,KAAKy/B,QAAQ,CAACz5B,EAASwF,MACnB9E,MAAMrK,KAAKk6F,UAAU/qF,GAAOotD,IAAMv8D,KAAK22E,MAAM+pB,kBAAkBvxF,IAChE2iE,MAGDA,CACX,CACH,aAAA6yB,CAAcx1F,EAAO01B,EAAM4/D,GACpB,OAAOzkG,KAAK22E,MAAM+pB,kBAAkBvxF,GAASo/D,GAAUvuE,KAAKs7F,0BAA0BnsF,EAAO01B,GAAMsqC,OAASs1B,GAAgB,CAChI,EAsNJ,IAAIx9C,GAA2Bh8C,OAAO67B,OAAO,CAC7C76B,UAAW,KACX44F,cAnsCA,cAA4B5O,GACxB19B,UAAY,MACfA,gBAAkB,CACXu+B,oBAAoB,EACpBC,gBAAiB,MACjB+N,mBAAoB,GACpBC,cAAe,GACfC,SAAS,EACTpqB,WAAY,CACR/E,QAAS,CACLhwE,KAAM,SACNmB,WAAY,CACR,IACA,IACA,OACA,QACA,aAKnBuxD,iBAAmB,CACZ+gB,OAAQ,CACJ2rB,QAAS,CACLp/F,KAAM,WACNm1E,QAAQ,EACRK,KAAM,CACFL,QAAQ,IAGhBkqB,QAAS,CACLr/F,KAAM,SACNo1E,aAAa,KAI5B,kBAAA0e,CAAmB/9D,EAAMj4B,EAAM5C,EAAO+wE,GAC/B,OAAOitB,GAAsBnjE,EAAMj4B,EAAM5C,EAAO+wE,EACpD,CACH,cAAA2nB,CAAe79D,EAAMj4B,EAAM5C,EAAO+wE,GAC3B,OAAOitB,GAAsBnjE,EAAMj4B,EAAM5C,EAAO+wE,EACpD,CACH,eAAA4nB,CAAgB99D,EAAMj4B,EAAM5C,EAAO+wE,GAC5B,MAAM,OAAEE,EAAO,OAAEC,GAAYr2C,GACvB,SAAEo+D,EAAU,IAAI,SAAEC,EAAU,KAASj6F,KAAKmnF,SAC1CsR,EAA2B,MAAhBzmB,EAAOI,KAAe4nB,EAAWC,EAC5CvB,EAA2B,MAAhBzmB,EAAOG,KAAe4nB,EAAWC,EAC5C7S,EAAS,GACf,IAAI5nF,EAAGgsE,EAAMwB,EAAMv3D,EACnB,IAAIjW,EAAIuB,EAAOyqE,EAAOzqE,EAAQ+wE,EAAOtyE,EAAIgsE,IAAQhsE,EAC7CiW,EAAM9R,EAAKnE,GACXwtE,EAAO,CAAC,EACRA,EAAKgF,EAAOI,MAAQJ,EAAOlsE,MAAMymE,GAAiB92D,EAAKgjF,GAAWj5F,GAClE4nF,EAAOlnF,KAAKsU,GAAW+3D,GAAiB92D,EAAKijF,GAAW1rB,EAAMiF,EAAQzyE,IAE1E,OAAO4nF,CACX,CACH,qBAAAgT,CAAsBrsB,EAAOsL,EAAO+N,EAAQ6M,GACrC77E,MAAMgiF,sBAAsBrsB,EAAOsL,EAAO+N,EAAQ6M,GAClD,MAAMgL,EAAS7X,EAAOyX,QAClBI,GAAU5lB,IAAUr5E,KAAKi1F,YAAYhjB,SACrClE,EAAMxrE,IAAMF,KAAKE,IAAIwrE,EAAMxrE,IAAK08F,EAAO18F,KACvCwrE,EAAMv+D,IAAMnN,KAAKmN,IAAIu+D,EAAMv+D,IAAKyvF,EAAOzvF,KAE/C,CACH,cAAAwrF,GACO,OAAO,CACX,CACH,gBAAAC,CAAiB9rF,GACV,MAAMysB,EAAO57B,KAAKi1F,aACZ,OAAEjjB,EAAO,OAAEC,GAAYr2C,EACvBwrD,EAASpnF,KAAKk6F,UAAU/qF,GACxB8vF,EAAS7X,EAAOyX,QAChB3/F,EAAQ8/F,GAAWC,GAAU,IAAMA,EAAOl+F,MAAQ,KAAOk+F,EAAOl8C,IAAM,IAAM,GAAKkvB,EAAOipB,iBAAiB9T,EAAOnV,EAAOG,OAC7H,MAAO,CACH9oB,MAAO,GAAK0oB,EAAOkpB,iBAAiB9T,EAAOpV,EAAOI,OAClDlzE,QAER,CACA,UAAAo+C,GACIt9C,KAAK02F,qBAAsB,EAC3Bt+E,MAAMklC,aACOt9C,KAAKi1F,YACbhB,MAAQj0F,KAAKq3F,aAAapD,KACnC,CACA,MAAA78D,CAAOyN,GACH,MAAMjJ,EAAO57B,KAAKi1F,YAClBj1F,KAAKq9F,eAAezhE,EAAKj4B,KAAM,EAAGi4B,EAAKj4B,KAAKlE,OAAQolC,EACxD,CACA,cAAAw4D,CAAe8H,EAAMpkG,EAAO+wE,EAAOjtC,GAC/B,MAAMyzD,EAAiB,UAATzzD,GACR,MAAE11B,EAAQ8lF,aAAa,OAAEhjB,IAAejyE,KACxC84F,EAAO7mB,EAAOmzB,eACd/F,EAAaptB,EAAOozB,eACpBC,EAAQtlG,KAAKulG,aACb,cAAEnJ,EAAc,eAAED,GAAoBn8F,KAAKs8F,kBAAkBv7F,EAAO8jC,GAC1E,IAAI,IAAIrlC,EAAIuB,EAAOvB,EAAIuB,EAAQ+wE,EAAOtyE,IAAI,CACtC,MAAM4nF,EAASpnF,KAAKk6F,UAAU16F,GACxBgmG,EAAUlN,GAAS1tB,GAAcwc,EAAOnV,EAAOG,OAAS,CAC1D0mB,OACAlvF,KAAMkvF,GACN94F,KAAKylG,yBAAyBjmG,GAC5BkmG,EAAU1lG,KAAK2lG,yBAAyBnmG,EAAG8lG,GAC3CrR,GAAS7M,EAAO8N,SAAW,CAAC,GAAGjjB,EAAOG,MACtCprE,EAAa,CACfq4F,aACAvG,KAAM0M,EAAQ1M,KACdyG,oBAAqBtL,GAAS+K,GAAW5X,EAAOyX,UAAY1vF,IAAU8kF,EAAMuB,MAAQrmF,IAAU8kF,EAAMwB,QACpGzrE,EAAGq1E,EAAamG,EAAQ57F,KAAO87F,EAAQE,OACvC37E,EAAGo1E,EAAaqG,EAAQE,OAASJ,EAAQ57F,KACzCmqD,OAAQsrC,EAAaqG,EAAQ3jE,KAAO1/B,KAAKoI,IAAI+6F,EAAQzjE,MACrD5P,MAAOktE,EAAah9F,KAAKoI,IAAI+6F,EAAQzjE,MAAQ2jE,EAAQ3jE,MAErDo6D,IACAn1F,EAAW4I,QAAUwsF,GAAiBp8F,KAAKs7F,0BAA0B97F,EAAG2lG,EAAK3lG,GAAGk7E,OAAS,SAAW71C,IAExG,MAAMj1B,EAAU5I,EAAW4I,SAAWu1F,EAAK3lG,GAAGoQ,QAC9CsvF,GAAiBl4F,EAAY4I,EAASqkF,EAAO9kF,GAC7CywF,GAAiB54F,EAAY4I,EAAS01F,EAAM99B,OAC5CxnE,KAAK08F,cAAcyI,EAAK3lG,GAAIA,EAAGwH,EAAY69B,EAC/C,CACJ,CACH,UAAAghE,CAAWn1B,EAAM6qB,GACV,MAAM,OAAEvpB,GAAYhyE,KAAKi1F,YACnBnB,EAAW9hB,EAAO+iB,wBAAwB/0F,KAAKo2F,OAAOvuF,OAAQ+zB,GAAOA,EAAKuV,WAAWvhC,QAAQo1F,SAC7FzQ,EAAUviB,EAAOpiE,QAAQ2kF,QACzBE,EAAS,GACTqR,EAAgB9lG,KAAKi1F,YAAY9jD,WAAW+oD,UAAUqB,GACtDwK,EAAcD,GAAiBA,EAAc9zB,EAAOI,MACpD4zB,EAAYpqE,IACd,MAAMwrD,EAASxrD,EAAKs2C,QAAQ5rD,KAAM0mD,GAAOA,EAAKgF,EAAOI,QAAU2zB,GACzD97B,EAAMmd,GAAUA,EAAOxrD,EAAKq2C,OAAOG,MACzC,GAAIxH,GAAcX,IAAQ5/D,MAAM4/D,GAC5B,OAAO,GAGf,IAAK,MAAMruC,KAAQk4D,EACf,SAAkBl0F,IAAd27F,IAA2ByK,EAASpqE,QAGxB,IAAZ24D,IAAqD,IAAhCE,EAAOtxF,QAAQy4B,EAAKq4D,aAA6Br0F,IAAZ20F,QAAwC30F,IAAfg8B,EAAKq4D,QACxFQ,EAAOv0F,KAAK07B,EAAKq4D,OAEjBr4D,EAAKzsB,QAAUuhE,GACf,MAMR,OAHK+jB,EAAOh1F,QACRg1F,EAAOv0F,UAAKN,GAET60F,CACX,CACH,cAAAwR,CAAe92F,GACR,OAAOnP,KAAK6lG,gBAAWjmG,EAAWuP,GAAO1P,MAC7C,CACA,aAAAymG,GACI,OAAOlmG,KAAKmmG,WAAW1mG,MAC3B,CACA,2BAAA2mG,GACI,MAAM9sB,EAASt5E,KAAK22E,MAAM2C,OACpB+sB,EAAermG,KAAK22E,MAAM/mE,QAAQgpE,UACxC,OAAO3tE,OAAO+H,KAAKsmE,GAAQzxE,OAAQZ,GAAMqyE,EAAOryE,GAAKmrE,OAASi0B,GAAc91D,OAChF,CACA,QAAA41D,GACI,MAAM/zB,EAAO,CAAC,EACRk0B,EAAmBtmG,KAAKomG,8BAC9B,IAAK,MAAMv6D,KAAW7rC,KAAK22E,MAAMhzE,KAAKq0E,SAClC5F,EAAKpH,GAAgD,MAAjChrE,KAAK22E,MAAM/mE,QAAQgpE,UAAoB/sC,EAAQ2rD,QAAU3rD,EAAQ6rD,QAAS4O,KAAqB,EAEvH,OAAOr7F,OAAO+H,KAAKo/D,EACvB,CACH,cAAAm0B,CAAe56B,EAAc5sE,EAAMw8F,GAC5B,MAAM9G,EAASz0F,KAAK6lG,WAAWl6B,EAAc4vB,GACvCpsF,OAAiBvP,IAATb,EAAqB01F,EAAOtxF,QAAQpE,IAAS,EAC3D,OAAkB,IAAXoQ,EAAeslF,EAAOh1F,OAAS,EAAI0P,CAC9C,CACH,SAAAo2F,GACO,MAAM1kB,EAAO7gF,KAAK4P,QACZgsB,EAAO57B,KAAKi1F,YACZjjB,EAASp2C,EAAKo2C,OACdw0B,EAAS,GACf,IAAIhnG,EAAGgsE,EACP,IAAIhsE,EAAI,EAAGgsE,EAAO5vC,EAAKj4B,KAAKlE,OAAQD,EAAIgsE,IAAQhsE,EAC5CgnG,EAAOtmG,KAAK8xE,EAAOQ,iBAAiBxyE,KAAKk6F,UAAU16F,GAAGwyE,EAAOI,MAAO5yE,IAExE,MAAMinG,EAAe5lB,EAAK4lB,aAE1B,MAAO,CACHlkG,IAFQkkG,GAAgB1I,GAAqBniE,GAG7C4qE,SACAzlG,MAAOixE,EAAO00B,YACd3jD,IAAKivB,EAAO20B,UACZC,WAAY5mG,KAAKimG,iBACjB5sB,MAAOrH,EACPgzB,QAASnkB,EAAKmkB,QACdx9B,MAAOi/B,EAAe,EAAI5lB,EAAKikB,mBAAqBjkB,EAAKkkB,cAEjE,CACH,wBAAAU,CAAyBt2F,GAClB,MAAQ8lF,aAAa,OAAEhjB,EAAO,SAAEglB,EAAW9nF,MAAOw8D,GAAkB/7D,SAAWkpF,KAAM+N,EAAU,aAAEC,IAAqB9mG,KAChH+mG,EAAaF,GAAa,EAC1Bzf,EAASpnF,KAAKk6F,UAAU/qF,GACxB8vF,EAAS7X,EAAOyX,QAChBmI,EAAWhI,GAAWC,GAC5B,IAGIr1F,EAAMm4B,EAHN7iC,EAAQkoF,EAAOnV,EAAOG,MACtBrxE,EAAQ,EACRtB,EAASw3F,EAAWj3F,KAAKg0F,WAAW/hB,EAAQmV,EAAQ6P,GAAY/3F,EAEhEO,IAAWP,IACX6B,EAAQtB,EAASP,EACjBO,EAASP,GAET8nG,IACA9nG,EAAQ+/F,EAAON,SACfl/F,EAASw/F,EAAOL,OAASK,EAAON,SAClB,IAAVz/F,GAAeyuE,GAAKzuE,KAAWyuE,GAAKsxB,EAAOL,UAC3C79F,EAAQ,GAEZA,GAAS7B,GAEb,MAAMu/F,EAAc7zB,GAAci8B,IAAeG,EAAuBjmG,EAAZ8lG,EAC5D,IAAI/N,EAAO7mB,EAAOO,iBAAiBisB,GAOnC,GALI70F,EADA5J,KAAK22E,MAAM+pB,kBAAkBvxF,GACtB8iE,EAAOO,iBAAiBzxE,EAAQtB,GAEhCq5F,EAEX/2D,EAAOn4B,EAAOkvF,EACVz2F,KAAKoI,IAAIs3B,GAAQ+kE,EAAc,CAC/B/kE,EAtTZ,SAAiBA,EAAMkwC,EAAQ80B,GAC3B,OAAa,IAAThlE,EACO4rC,GAAK5rC,IAERkwC,EAAOozB,eAAiB,GAAK,IAAMpzB,EAAO1vE,KAAOwkG,EAAa,GAAK,EAC/E,CAiTmBE,CAAQllE,EAAMkwC,EAAQ80B,GAAcD,EACvC5nG,IAAU6nG,IACVjO,GAAQ/2D,EAAO,GAEnB,MAAMmlE,EAAaj1B,EAAOk1B,mBAAmB,GACvCC,EAAWn1B,EAAOk1B,mBAAmB,GACrC5kG,EAAMF,KAAKE,IAAI2kG,EAAYE,GAC3B53F,EAAMnN,KAAKmN,IAAI03F,EAAYE,GACjCtO,EAAOz2F,KAAKmN,IAAInN,KAAKE,IAAIu2F,EAAMtpF,GAAMjN,GACrCqH,EAAOkvF,EAAO/2D,EACVk1D,IAAa+P,IACb5f,EAAO8N,QAAQjjB,EAAOG,MAAMsjB,cAAc/pB,GAAgBsG,EAAOo1B,iBAAiBz9F,GAAQqoE,EAAOo1B,iBAAiBvO,GAE1H,CACA,GAAIA,IAAS7mB,EAAOO,iBAAiBu0B,GAAa,CAC9C,MAAMO,EAAW35B,GAAK5rC,GAAQkwC,EAAOs1B,qBAAqBR,GAAc,EACxEjO,GAAQwO,EACRvlE,GAAQulE,CACZ,CACA,MAAO,CACHvlE,OACA+2D,OACAlvF,OACAg8F,OAAQh8F,EAAOm4B,EAAO,EAE9B,CACH,wBAAA4jE,CAAyBx2F,EAAOm2F,GACzB,MAAMjsB,EAAQisB,EAAMjsB,MACdzpE,EAAU5P,KAAK4P,QACfo2F,EAAWp2F,EAAQo2F,SACnBwB,EAAkBx8B,GAAep7D,EAAQ43F,gBAAiBC,KAChE,IAAI7B,EAAQ7jE,EACZ,MAAM2lE,EAAY1nG,KAAKkmG,gBACvB,GAAIZ,EAAMN,QAAS,CACf,MAAM4B,EAAaZ,EAAWhmG,KAAKimG,eAAe92F,GAASm2F,EAAMsB,WAC3D74B,EAAiC,SAAzBn+D,EAAQ62F,aA5ZjC,SAAmCt3F,EAAOm2F,EAAO11F,EAASg3F,GACvD,MAAMJ,EAASlB,EAAMkB,OACfpI,EAAOoI,EAAOr3F,GACpB,IAAIu6E,EAAOv6E,EAAQ,EAAIq3F,EAAOr3F,EAAQ,GAAK,KACvC04E,EAAO14E,EAAQq3F,EAAO/mG,OAAS,EAAI+mG,EAAOr3F,EAAQ,GAAK,KAC3D,MAAMw4F,EAAU/3F,EAAQk1F,mBACX,OAATpb,IACAA,EAAO0U,GAAiB,OAATvW,EAAgByd,EAAMviD,IAAMuiD,EAAMvkG,MAAQ8mF,EAAOuW,IAEvD,OAATvW,IACAA,EAAOuW,EAAOA,EAAO1U,GAEzB,MAAM3oF,EAAQq9F,GAAQA,EAAO/7F,KAAKE,IAAImnF,EAAM7B,IAAS,EAAI8f,EAEzD,MAAO,CACHC,MAFSvlG,KAAKoI,IAAIo9E,EAAO6B,GAAQ,EAAIie,EAEvBf,EACdp/B,MAAO53D,EAAQm1F,cACfhkG,QAER,CAyY4D8mG,CAA0B14F,EAAOm2F,EAAO11F,EAASg3F,EAAac,GA5azH,SAAkCv4F,EAAOm2F,EAAO11F,EAASg3F,GACtD,MAAMkB,EAAYl4F,EAAQ62F,aAC1B,IAAI1kE,EAAMylC,EAQV,OAPIoD,GAAck9B,IACd/lE,EAAOujE,EAAM/iG,IAAMqN,EAAQk1F,mBAC3Bt9B,EAAQ53D,EAAQm1F,gBAEhBhjE,EAAO+lE,EAAYlB,EACnBp/B,EAAQ,GAEL,CACHogC,MAAO7lE,EAAO6kE,EACdp/B,QACAzmE,MAAOukG,EAAMkB,OAAOr3F,GAAS4yB,EAAO,EAE5C,CA6ZuIgmE,CAAyB54F,EAAOm2F,EAAO11F,EAASg3F,EAAac,GAClLM,EAA0C,MAAjChoG,KAAK22E,MAAM/mE,QAAQgpE,UAAoB54E,KAAKq3F,aAAaG,QAAUx3F,KAAKq3F,aAAaK,QAC9FuQ,EAAajoG,KAAKmmG,WAAWhjG,QAAQ6nE,GAAeg9B,EAAQhoG,KAAKomG,gCACjE8B,EAAaloG,KAAKumG,eAAevmG,KAAKmP,MAAOnP,KAAKi1F,YAAYhB,MAAO+R,EAAW72F,OAAQvP,GAAaqoG,EAC3GrC,EAAS73B,EAAMhtE,MAAQgtE,EAAM65B,MAAQM,EAAan6B,EAAM65B,MAAQ,EAChE7lE,EAAO1/B,KAAKE,IAAIilG,EAAiBz5B,EAAM65B,MAAQ75B,EAAMvG,MACzD,MACIo+B,EAASvsB,EAAM7G,iBAAiBxyE,KAAKk6F,UAAU/qF,GAAOkqE,EAAMjH,MAAOjjE,GACnE4yB,EAAO1/B,KAAKE,IAAIilG,EAAiBlC,EAAM/iG,IAAM+iG,EAAM99B,OAEvD,MAAO,CACHsxB,KAAM8M,EAAS7jE,EAAO,EACtBn4B,KAAMg8F,EAAS7jE,EAAO,EACtB6jE,SACA7jE,OAER,CACA,IAAA6uD,GACI,MAAMh1D,EAAO57B,KAAKi1F,YACZhjB,EAASr2C,EAAKq2C,OACdk2B,EAAQvsE,EAAKj4B,KACb6nE,EAAO28B,EAAM1oG,OACnB,IAAID,EAAI,EACR,KAAMA,EAAIgsE,IAAQhsE,EACyB,OAAnCQ,KAAKk6F,UAAU16F,GAAGyyE,EAAOG,OAAmB+1B,EAAM3oG,GAAGkX,QACrDyxF,EAAM3oG,GAAGoxF,KAAK5wF,KAAK27E,KAG/B,GAg6BJysB,iBA75BA,cAA+BnS,GAC3B19B,UAAY,SACfA,gBAAkB,CACXu+B,oBAAoB,EACpBC,gBAAiB,QACjBnc,WAAY,CACR/E,QAAS,CACLhwE,KAAM,SACNmB,WAAY,CACR,IACA,IACA,cACA,aAKnBuxD,iBAAmB,CACZ+gB,OAAQ,CACJtvD,EAAG,CACCnkB,KAAM,UAEVokB,EAAG,CACCpkB,KAAM,YAIlB,UAAAy3C,GACIt9C,KAAK02F,qBAAsB,EAC3Bt+E,MAAMklC,YACV,CACH,kBAAAq8C,CAAmB/9D,EAAMj4B,EAAM5C,EAAO+wE,GAC/B,MAAMsV,EAAShvE,MAAMuhF,mBAAmB/9D,EAAMj4B,EAAM5C,EAAO+wE,GAC3D,IAAI,IAAItyE,EAAI,EAAGA,EAAI4nF,EAAO3nF,OAAQD,IAC9B4nF,EAAO5nF,GAAGq/F,QAAU7+F,KAAKs7F,0BAA0B97F,EAAIuB,GAAOg+E,OAElE,OAAOqI,CACX,CACH,cAAAqS,CAAe79D,EAAMj4B,EAAM5C,EAAO+wE,GAC3B,MAAMsV,EAAShvE,MAAMqhF,eAAe79D,EAAMj4B,EAAM5C,EAAO+wE,GACvD,IAAI,IAAItyE,EAAI,EAAGA,EAAI4nF,EAAO3nF,OAAQD,IAAI,CAClC,MAAMwtE,EAAOrpE,EAAK5C,EAAQvB,GAC1B4nF,EAAO5nF,GAAGq/F,QAAU7zB,GAAegC,EAAK,GAAIhtE,KAAKs7F,0BAA0B97F,EAAIuB,GAAOg+E,OAC1F,CACA,OAAOqI,CACX,CACH,eAAAsS,CAAgB99D,EAAMj4B,EAAM5C,EAAO+wE,GAC5B,MAAMsV,EAAShvE,MAAMshF,gBAAgB99D,EAAMj4B,EAAM5C,EAAO+wE,GACxD,IAAI,IAAItyE,EAAI,EAAGA,EAAI4nF,EAAO3nF,OAAQD,IAAI,CAClC,MAAMwtE,EAAOrpE,EAAK5C,EAAQvB,GAC1B4nF,EAAO5nF,GAAGq/F,QAAU7zB,GAAegC,GAAQA,EAAKzQ,IAAMyQ,EAAKzQ,EAAGv8D,KAAKs7F,0BAA0B97F,EAAIuB,GAAOg+E,OAC5G,CACA,OAAOqI,CACX,CACH,cAAA4T,GACO,MAAMr3F,EAAO3D,KAAKi1F,YAAYtxF,KAC9B,IAAI6L,EAAM,EACV,IAAI,IAAIhQ,EAAImE,EAAKlE,OAAS,EAAGD,GAAK,IAAKA,EACnCgQ,EAAMnN,KAAKmN,IAAIA,EAAK7L,EAAKnE,GAAGuiC,KAAK/hC,KAAKs7F,0BAA0B97F,IAAM,GAE1E,OAAOgQ,EAAM,GAAKA,CACtB,CACH,gBAAAyrF,CAAiB9rF,GACV,MAAMysB,EAAO57B,KAAKi1F,YACZ4E,EAAS75F,KAAK22E,MAAMhzE,KAAKk2F,QAAU,IACnC,OAAEhnB,EAAO,OAAEC,GAAYl3C,EACvBwrD,EAASpnF,KAAKk6F,UAAU/qF,GACxB6a,EAAI6oD,EAAOqoB,iBAAiB9T,EAAOp9D,GACnCC,EAAI6oD,EAAOooB,iBAAiB9T,EAAOn9D,GACnCsyC,EAAI6qB,EAAOyX,QACjB,MAAO,CACHv1C,MAAOuwC,EAAO1qF,IAAU,GACxBjQ,MAAO,IAAM8qB,EAAI,KAAOC,GAAKsyC,EAAI,KAAOA,EAAI,IAAM,IAE1D,CACA,MAAAnlC,CAAOyN,GACH,MAAM8sC,EAAS3xE,KAAKi1F,YAAYtxF,KAChC3D,KAAKq9F,eAAe1rB,EAAQ,EAAGA,EAAOlyE,OAAQolC,EAClD,CACA,cAAAw4D,CAAe1rB,EAAQ5wE,EAAO+wE,EAAOjtC,GACjC,MAAMyzD,EAAiB,UAATzzD,GACR,OAAEmtC,EAAO,OAAEC,GAAYjyE,KAAKi1F,aAC5B,cAAEmH,EAAc,eAAED,GAAoBn8F,KAAKs8F,kBAAkBv7F,EAAO8jC,GACpEswD,EAAQnjB,EAAOI,KACfgjB,EAAQnjB,EAAOG,KACrB,IAAI,IAAI5yE,EAAIuB,EAAOvB,EAAIuB,EAAQ+wE,EAAOtyE,IAAI,CACtC,MAAMkzE,EAAQf,EAAOnyE,GACf4nF,GAAUkR,GAASt4F,KAAKk6F,UAAU16F,GAClCwH,EAAa,CAAC,EACdsiF,EAAStiF,EAAWmuF,GAASmD,EAAQtmB,EAAOm1B,mBAAmB,IAAOn1B,EAAOQ,iBAAiB4U,EAAO+N,IACrG5L,EAASviF,EAAWouF,GAASkD,EAAQrmB,EAAOmzB,eAAiBnzB,EAAOO,iBAAiB4U,EAAOgO,IAClGpuF,EAAWugF,KAAOl9E,MAAMi/E,IAAWj/E,MAAMk/E,GACrC4S,IACAn1F,EAAW4I,QAAUwsF,GAAiBp8F,KAAKs7F,0BAA0B97F,EAAGkzE,EAAMgI,OAAS,SAAW71C,GAC9FyzD,IACAtxF,EAAW4I,QAAQmvE,OAAS,IAGpC/+E,KAAK08F,cAAchqB,EAAOlzE,EAAGwH,EAAY69B,EAC7C,CACJ,CACH,yBAAAy2D,CAA0BnsF,EAAO01B,GAC1B,MAAMuiD,EAASpnF,KAAKk6F,UAAU/qF,GAC9B,IAAIkP,EAASjG,MAAMkjF,0BAA0BnsF,EAAO01B,GAChDxmB,EAAO+0E,UACP/0E,EAASpT,OAAOuc,OAAO,CAAC,EAAGnJ,EAAQ,CAC/B+0E,SAAS,KAGjB,MAAMrU,EAAS1gE,EAAO0gE,OAKtB,MAJa,WAATl6C,IACAxmB,EAAO0gE,OAAS,GAEpB1gE,EAAO0gE,QAAU/T,GAAeoc,GAAUA,EAAOyX,QAAS9f,GACnD1gE,CACX,GA2yBJyhF,mBAAoBA,GACpBuI,eAzfA,cAA6BpS,GACzB19B,UAAY,OACfA,gBAAkB,CACXu+B,mBAAoB,OACpBC,gBAAiB,QACjBxd,UAAU,EACVpH,UAAU,GAEjB5Z,iBAAmB,CACZ+gB,OAAQ,CACJ2rB,QAAS,CACLp/F,KAAM,YAEVq/F,QAAS,CACLr/F,KAAM,YAIlB,UAAAy3C,GACIt9C,KAAK02F,qBAAsB,EAC3B12F,KAAK22F,oBAAqB,EAC1Bv+E,MAAMklC,YACV,CACA,MAAAlmB,CAAOyN,GACH,MAAMjJ,EAAO57B,KAAKi1F,aACVppD,QAASntB,EAAO/a,KAAMguE,EAAS,GAAG,SAAE22B,GAAc1sE,EACpDg2C,EAAqB5xE,KAAK22E,MAAM0lB,oBACtC,IAAI,MAAEt7F,EAAM,MAAE+wE,GAAWJ,GAAiC91C,EAAM+1C,EAAQC,GACxE5xE,KAAKw2F,WAAaz1F,EAClBf,KAAKy2F,WAAa3kB,EACdc,GAAoBh3C,KACpB76B,EAAQ,EACR+wE,EAAQH,EAAOlyE,QAEnBif,EAAKm0E,OAAS7yF,KAAK22E,MACnBj4D,EAAK6pF,cAAgBvoG,KAAKmP,MAC1BuP,EAAK8pF,aAAeF,EAASE,WAC7B9pF,EAAKizD,OAASA,EACd,MAAM/hE,EAAU5P,KAAKq7F,6BAA6Bx2D,GAC7C7kC,KAAK4P,QAAQ2pE,WACd3pE,EAAQgwE,YAAc,GAE1BhwE,EAAQy+E,QAAUruF,KAAK4P,QAAQy+E,QAC/BruF,KAAK08F,cAAch+E,OAAM9e,EAAW,CAChC6oG,UAAW72B,EACXhiE,WACDi1B,GACH7kC,KAAKq9F,eAAe1rB,EAAQ5wE,EAAO+wE,EAAOjtC,EAC9C,CACA,cAAAw4D,CAAe1rB,EAAQ5wE,EAAO+wE,EAAOjtC,GACjC,MAAMyzD,EAAiB,UAATzzD,GACR,OAAEmtC,EAAO,OAAEC,EAAO,SAAEglB,EAAS,SAAEqR,GAActoG,KAAKi1F,aAClD,cAAEmH,EAAc,eAAED,GAAoBn8F,KAAKs8F,kBAAkBv7F,EAAO8jC,GACpEswD,EAAQnjB,EAAOI,KACfgjB,EAAQnjB,EAAOG,MACf,SAAED,EAAS,QAAEkc,GAAaruF,KAAK4P,QAC/B84F,EAAev6B,GAASgE,GAAYA,EAAW/nE,OAAOijE,kBACtDs7B,EAAe3oG,KAAK22E,MAAM0lB,qBAAuB/D,GAAkB,SAATzzD,EAC1Dke,EAAMhiD,EAAQ+wE,EACd82B,EAAcj3B,EAAOlyE,OAC3B,IAAIopG,EAAa9nG,EAAQ,GAAKf,KAAKk6F,UAAUn5F,EAAQ,GACrD,IAAI,IAAIvB,EAAI,EAAGA,EAAIopG,IAAeppG,EAAE,CAChC,MAAMkzE,EAAQf,EAAOnyE,GACfwH,EAAa2hG,EAAej2B,EAAQ,CAAC,EAC3C,GAAIlzE,EAAIuB,GAASvB,GAAKujD,EAAK,CACvB/7C,EAAWugF,MAAO,EAClB,QACJ,CACA,MAAMH,EAASpnF,KAAKk6F,UAAU16F,GACxBspG,EAAWl+B,GAAcwc,EAAOgO,IAChC9L,EAAStiF,EAAWmuF,GAASnjB,EAAOQ,iBAAiB4U,EAAO+N,GAAQ31F,GACpE+pF,EAASviF,EAAWouF,GAASkD,GAASwQ,EAAW72B,EAAOmzB,eAAiBnzB,EAAOO,iBAAiBykB,EAAWj3F,KAAKg0F,WAAW/hB,EAAQmV,EAAQ6P,GAAY7P,EAAOgO,GAAQ51F,GAC7KwH,EAAWugF,KAAOl9E,MAAMi/E,IAAWj/E,MAAMk/E,IAAWuf,EACpD9hG,EAAW1F,KAAO9B,EAAI,GAAK6C,KAAKoI,IAAI28E,EAAO+N,GAAS0T,EAAW1T,IAAUuT,EACrEra,IACArnF,EAAWogF,OAASA,EACpBpgF,EAAWw0F,IAAM8M,EAAS3kG,KAAKnE,IAE/B28F,IACAn1F,EAAW4I,QAAUwsF,GAAiBp8F,KAAKs7F,0BAA0B97F,EAAGkzE,EAAMgI,OAAS,SAAW71C,IAEjG8jE,GACD3oG,KAAK08F,cAAchqB,EAAOlzE,EAAGwH,EAAY69B,GAE7CgkE,EAAazhB,CACjB,CACJ,CACH,cAAA4T,GACO,MAAMp/D,EAAO57B,KAAKi1F,YACZppD,EAAUjQ,EAAKiQ,QACfgwC,EAAShwC,EAAQj8B,SAAWi8B,EAAQj8B,QAAQgwE,aAAe,EAC3Dj8E,EAAOi4B,EAAKj4B,MAAQ,GAC1B,IAAKA,EAAKlE,OACN,OAAOo8E,EAEX,MAAM6L,EAAa/jF,EAAK,GAAGo+B,KAAK/hC,KAAKs7F,0BAA0B,IACzDyN,EAAYplG,EAAKA,EAAKlE,OAAS,GAAGsiC,KAAK/hC,KAAKs7F,0BAA0B33F,EAAKlE,OAAS,IAC1F,OAAO4C,KAAKmN,IAAIqsE,EAAQ6L,EAAYqhB,GAAa,CACrD,CACA,IAAAnY,GACI,MAAMh1D,EAAO57B,KAAKi1F,YAClBr5D,EAAKiQ,QAAQm9D,oBAAoBhpG,KAAK22E,MAAM+Y,UAAW9zD,EAAKo2C,OAAOI,MACnEh6D,MAAMw4E,MACV,GAmZJqY,cAzNA,cAA4BnJ,GACxBvnC,UAAY,MACfA,gBAAkB,CACX0nC,OAAQ,EACRnhB,SAAU,EACVohB,cAAe,IACfnhB,OAAQ,SAoNhB8kB,oBAAqBA,GACrBqF,gBAjNA,cAA8BjT,GAC1B19B,UAAY,QACfA,gBAAkB,CACXu+B,mBAAoB,OACpBC,gBAAiB,QACjBne,UAAW,IACXW,UAAU,EACVv6D,SAAU,CACNN,KAAM,CACFihE,KAAM,WAIrBpnB,iBAAmB,CACZ6nC,YAAa,EACb9mB,OAAQ,CACJ/c,EAAG,CACC12D,KAAM,kBAIrB,gBAAAo1F,CAAiB9rF,GACV,MAAM8iE,EAASjyE,KAAKi1F,YAAYhjB,OAC1BmV,EAASpnF,KAAKk6F,UAAU/qF,GAC9B,MAAO,CACHm6C,MAAO2oB,EAAO6nB,YAAY3qF,GAC1BjQ,MAAO,GAAK+yE,EAAOipB,iBAAiB9T,EAAOnV,EAAOG,OAE1D,CACA,eAAAsnB,CAAgB99D,EAAMj4B,EAAM5C,EAAO+wE,GAC/B,OAAOoV,GAA4BrmF,KAAKb,KAAjCknF,CAAuCtrD,EAAMj4B,EAAM5C,EAAO+wE,EACrE,CACA,MAAA16C,CAAOyN,GACH,MAAMjJ,EAAO57B,KAAKi1F,YACZv2E,EAAOkd,EAAKiQ,QACZ8lC,EAAS/1C,EAAKj4B,MAAQ,GACtBk2F,EAASj+D,EAAKo2C,OAAO8nB,YAE3B,GADAp7E,EAAKizD,OAASA,EACD,WAAT9sC,EAAmB,CACnB,MAAMj1B,EAAU5P,KAAKq7F,6BAA6Bx2D,GAC7C7kC,KAAK4P,QAAQ2pE,WACd3pE,EAAQgwE,YAAc,GAE1B,MAAM54E,EAAa,CACfirF,OAAO,EACPkX,UAAWtP,EAAOp6F,SAAWkyE,EAAOlyE,OACpCmQ,WAEJ5P,KAAK08F,cAAch+E,OAAM9e,EAAWoH,EAAY69B,EACpD,CACA7kC,KAAKq9F,eAAe1rB,EAAQ,EAAGA,EAAOlyE,OAAQolC,EAClD,CACA,cAAAw4D,CAAe1rB,EAAQ5wE,EAAO+wE,EAAOjtC,GACjC,MAAMw0C,EAAQr5E,KAAKi1F,YAAYiD,OACzBI,EAAiB,UAATzzD,EACd,IAAI,IAAIrlC,EAAIuB,EAAOvB,EAAIuB,EAAQ+wE,EAAOtyE,IAAI,CACtC,MAAMkzE,EAAQf,EAAOnyE,GACfoQ,EAAU5P,KAAKs7F,0BAA0B97F,EAAGkzE,EAAMgI,OAAS,SAAW71C,GACtEukE,EAAgB/vB,EAAMgwB,yBAAyB7pG,EAAGQ,KAAKk6F,UAAU16F,GAAG+8D,GACpEvyC,EAAIsuE,EAAQjf,EAAMgrB,QAAU+E,EAAcp/E,EAC1CC,EAAIquE,EAAQjf,EAAMirB,QAAU8E,EAAcn/E,EAC1CjjB,EAAa,CACfgjB,IACAC,IACAklD,MAAOi6B,EAAcj6B,MACrBoY,KAAMl9E,MAAM2f,IAAM3f,MAAM4f,GACxBra,WAEJ5P,KAAK08F,cAAchqB,EAAOlzE,EAAGwH,EAAY69B,EAC7C,CACJ,GA4IJykE,kBAzIA,cAAgCrT,GAC5B19B,UAAY,UACfA,gBAAkB,CACXu+B,oBAAoB,EACpBC,gBAAiB,QACjBxd,UAAU,EACVoG,MAAM,GAEbpnB,iBAAmB,CACZsgB,YAAa,CACTh0C,KAAM,SAEVy0C,OAAQ,CACJtvD,EAAG,CACCnkB,KAAM,UAEVokB,EAAG,CACCpkB,KAAM,YAIrB,gBAAAo1F,CAAiB9rF,GACV,MAAMysB,EAAO57B,KAAKi1F,YACZ4E,EAAS75F,KAAK22E,MAAMhzE,KAAKk2F,QAAU,IACnC,OAAEhnB,EAAO,OAAEC,GAAYl3C,EACvBwrD,EAASpnF,KAAKk6F,UAAU/qF,GACxB6a,EAAI6oD,EAAOqoB,iBAAiB9T,EAAOp9D,GACnCC,EAAI6oD,EAAOooB,iBAAiB9T,EAAOn9D,GACzC,MAAO,CACHq/B,MAAOuwC,EAAO1qF,IAAU,GACxBjQ,MAAO,IAAM8qB,EAAI,KAAOC,EAAI,IAEpC,CACA,MAAAmN,CAAOyN,GACH,MAAMjJ,EAAO57B,KAAKi1F,aACVtxF,KAAMguE,EAAS,IAAQ/1C,EACzBg2C,EAAqB5xE,KAAK22E,MAAM0lB,oBACtC,IAAI,MAAEt7F,EAAM,MAAE+wE,GAAWJ,GAAiC91C,EAAM+1C,EAAQC,GAOxE,GANA5xE,KAAKw2F,WAAaz1F,EAClBf,KAAKy2F,WAAa3kB,EACdc,GAAoBh3C,KACpB76B,EAAQ,EACR+wE,EAAQH,EAAOlyE,QAEfO,KAAK4P,QAAQ2pE,SAAU,CAClBv5E,KAAK82F,oBACN92F,KAAKk3F,cAET,MAAQrrD,QAASntB,EAAK,SAAE4pF,GAAc1sE,EACtCld,EAAKm0E,OAAS7yF,KAAK22E,MACnBj4D,EAAK6pF,cAAgBvoG,KAAKmP,MAC1BuP,EAAK8pF,aAAeF,EAASE,WAC7B9pF,EAAKizD,OAASA,EACd,MAAM/hE,EAAU5P,KAAKq7F,6BAA6Bx2D,GAClDj1B,EAAQy+E,QAAUruF,KAAK4P,QAAQy+E,QAC/BruF,KAAK08F,cAAch+E,OAAM9e,EAAW,CAChC6oG,UAAW72B,EACXhiE,WACDi1B,EACP,MAAW7kC,KAAK82F,4BACLl7D,EAAKiQ,QACZ7rC,KAAK82F,oBAAqB,GAE9B92F,KAAKq9F,eAAe1rB,EAAQ5wE,EAAO+wE,EAAOjtC,EAC9C,CACA,WAAAqyD,GACI,MAAM,SAAE3d,GAAcv5E,KAAK4P,SACtB5P,KAAK82F,oBAAsBvd,IAC5Bv5E,KAAK82F,mBAAqB92F,KAAK22E,MAAM4yB,SAASC,WAAW,SAE7DpxF,MAAM8+E,aACV,CACA,cAAAmG,CAAe1rB,EAAQ5wE,EAAO+wE,EAAOjtC,GACjC,MAAMyzD,EAAiB,UAATzzD,GACR,OAAEmtC,EAAO,OAAEC,EAAO,SAAEglB,EAAS,SAAEqR,GAActoG,KAAKi1F,YAClDsH,EAAYv8F,KAAKs7F,0BAA0Bv6F,EAAO8jC,GAClDu3D,EAAgBp8F,KAAKk8F,iBAAiBK,GACtCJ,EAAiBn8F,KAAKm8F,eAAet3D,EAAMu3D,GAC3CjH,EAAQnjB,EAAOI,KACfgjB,EAAQnjB,EAAOG,MACf,SAAED,EAAS,QAAEkc,GAAaruF,KAAK4P,QAC/B84F,EAAev6B,GAASgE,GAAYA,EAAW/nE,OAAOijE,kBACtDs7B,EAAe3oG,KAAK22E,MAAM0lB,qBAAuB/D,GAAkB,SAATzzD,EAChE,IAAIgkE,EAAa9nG,EAAQ,GAAKf,KAAKk6F,UAAUn5F,EAAQ,GACrD,IAAI,IAAIvB,EAAIuB,EAAOvB,EAAIuB,EAAQ+wE,IAAStyE,EAAE,CACtC,MAAMkzE,EAAQf,EAAOnyE,GACf4nF,EAASpnF,KAAKk6F,UAAU16F,GACxBwH,EAAa2hG,EAAej2B,EAAQ,CAAC,EACrCo2B,EAAWl+B,GAAcwc,EAAOgO,IAChC9L,EAAStiF,EAAWmuF,GAASnjB,EAAOQ,iBAAiB4U,EAAO+N,GAAQ31F,GACpE+pF,EAASviF,EAAWouF,GAASkD,GAASwQ,EAAW72B,EAAOmzB,eAAiBnzB,EAAOO,iBAAiBykB,EAAWj3F,KAAKg0F,WAAW/hB,EAAQmV,EAAQ6P,GAAY7P,EAAOgO,GAAQ51F,GAC7KwH,EAAWugF,KAAOl9E,MAAMi/E,IAAWj/E,MAAMk/E,IAAWuf,EACpD9hG,EAAW1F,KAAO9B,EAAI,GAAK6C,KAAKoI,IAAI28E,EAAO+N,GAAS0T,EAAW1T,IAAUuT,EACrEra,IACArnF,EAAWogF,OAASA,EACpBpgF,EAAWw0F,IAAM8M,EAAS3kG,KAAKnE,IAE/B28F,IACAn1F,EAAW4I,QAAUwsF,GAAiBp8F,KAAKs7F,0BAA0B97F,EAAGkzE,EAAMgI,OAAS,SAAW71C,IAEjG8jE,GACD3oG,KAAK08F,cAAchqB,EAAOlzE,EAAGwH,EAAY69B,GAE7CgkE,EAAazhB,CACjB,CACApnF,KAAKy8F,oBAAoBL,EAAev3D,EAAM03D,EAClD,CACH,cAAAvB,GACO,MAAMp/D,EAAO57B,KAAKi1F,YACZtxF,EAAOi4B,EAAKj4B,MAAQ,GAC1B,IAAK3D,KAAK4P,QAAQ2pE,SAAU,CACxB,IAAI/pE,EAAM,EACV,IAAI,IAAIhQ,EAAImE,EAAKlE,OAAS,EAAGD,GAAK,IAAKA,EACnCgQ,EAAMnN,KAAKmN,IAAIA,EAAK7L,EAAKnE,GAAGuiC,KAAK/hC,KAAKs7F,0BAA0B97F,IAAM,GAE1E,OAAOgQ,EAAM,GAAKA,CACtB,CACA,MAAMq8B,EAAUjQ,EAAKiQ,QACfgwC,EAAShwC,EAAQj8B,SAAWi8B,EAAQj8B,QAAQgwE,aAAe,EACjE,IAAKj8E,EAAKlE,OACN,OAAOo8E,EAEX,MAAM6L,EAAa/jF,EAAK,GAAGo+B,KAAK/hC,KAAKs7F,0BAA0B,IACzDyN,EAAYplG,EAAKA,EAAKlE,OAAS,GAAGsiC,KAAK/hC,KAAKs7F,0BAA0B33F,EAAKlE,OAAS,IAC1F,OAAO4C,KAAKmN,IAAIqsE,EAAQ6L,EAAYqhB,GAAa,CACrD,KAmBA,SAAS,KACT,MAAM,IAAI5hF,MAAM,kFACpB,CAMI,MAAMsiF,GAUJ,eAAO/vB,CAASgwB,GACdz+F,OAAOuc,OAAOiiF,GAAgBlkG,UAAWmkG,EAC7C,CACA95F,QACA,WAAAlP,CAAYkP,GACR5P,KAAK4P,QAAUA,GAAW,CAAC,CAC/B,CAEA,IAAA+5F,GAAQ,CACR,OAAAC,GACI,OAAO,IACX,CACA,KAAA9jG,GACI,OAAO,IACX,CACA,MAAAwwE,GACI,OAAO,IACX,CACA,GAAA7tE,GACI,OAAO,IACX,CACA,IAAAohG,GACI,OAAO,IACX,CACA,OAAAC,GACI,OAAO,IACX,CACA,KAAAC,GACI,OAAO,IACX,EAEJ,IAAI1pG,GACOopG,GAGX,SAASO,GAAaC,EAAS73B,EAAMlzE,EAAO2jB,GACxC,MAAM,WAAEsuB,EAAW,KAAExtC,EAAK,QAAEouE,GAAak4B,EACnCj4B,EAAS7gC,EAAW8jD,YAAYjjB,OAChCG,EAAW83B,EAAQp+D,SAAUo+D,EAAQp+D,QAAQj8B,QAAUq6F,EAAQp+D,QAAQj8B,QAAQuiE,SAAkB,KACvG,GAAIH,GAAUI,IAASJ,EAAOI,MAAiB,MAATA,GAAgBL,GAAWpuE,EAAKlE,OAAQ,CAC1E,MAAMyqG,EAAel4B,EAAOm4B,eAAiBv5B,GAAgBH,GAC7D,IAAK5tD,EAAW,CACZ,MAAMhU,EAASq7F,EAAavmG,EAAMyuE,EAAMlzE,GACxC,GAAIizE,EAAU,CACV,MAAM,OAAEF,GAAY9gC,EAAW8jD,aACzB,QAAE/iB,GAAa+3B,EACfx3B,EAAsBP,EAAQhvE,MAAM,EAAG2L,EAAO2hE,GAAK,GAAGl2B,UAAUtD,UAAW07B,IAAS9H,GAAc8H,EAAMT,EAAOG,QACrHvjE,EAAO2hE,IAAMnuE,KAAKmN,IAAI,EAAGijE,GACzB,MAAME,EAAsBT,EAAQhvE,MAAM2L,EAAO0hE,IAAIv5B,UAAW07B,IAAS9H,GAAc8H,EAAMT,EAAOG,QACpGvjE,EAAO0hE,IAAMluE,KAAKmN,IAAI,EAAGmjE,EAC7B,CACA,OAAO9jE,CACX,CAAO,GAAIsiC,EAAWolD,eAAgB,CAClC,MAAMhK,EAAK5oF,EAAK,GACVoqE,EAA+B,mBAAhBwe,EAAG6d,UAA2B7d,EAAG6d,SAASh4B,GAC/D,GAAIrE,EAAO,CACP,MAAMhtE,EAAQmpG,EAAavmG,EAAMyuE,EAAMlzE,EAAQ6uE,GACzChrB,EAAMmnD,EAAavmG,EAAMyuE,EAAMlzE,EAAQ6uE,GAC7C,MAAO,CACHyC,GAAIzvE,EAAMyvE,GACVD,GAAIxtB,EAAIwtB,GAEhB,CACJ,CACJ,CACA,MAAO,CACHC,GAAI,EACJD,GAAI5sE,EAAKlE,OAAS,EAE1B,CACC,SAAS4qG,GAAyB1zB,EAAOvE,EAAM7zC,EAAUj5B,EAASud,GAC/D,MAAMixE,EAAWnd,EAAM2zB,+BACjBprG,EAAQq/B,EAAS6zC,GACvB,IAAI,IAAI5yE,EAAI,EAAGgsE,EAAOsoB,EAASr0F,OAAQD,EAAIgsE,IAAQhsE,EAAE,CACjD,MAAM,MAAE2P,EAAM,KAAExL,GAAUmwF,EAASt0F,IAC7B,GAAEgxE,EAAG,GAAED,GAAQy5B,GAAalW,EAASt0F,GAAI4yE,EAAMlzE,EAAO2jB,GAC5D,IAAI,IAAIvV,EAAIkjE,EAAIljE,GAAKijE,IAAMjjE,EAAE,CACzB,MAAM3D,EAAUhG,EAAK2J,GAChB3D,EAAQ49E,MACTjiF,EAAQqE,EAASwF,EAAO7B,EAEhC,CACJ,CACJ,CAUC,SAASi9F,GAAkB5zB,EAAOp4C,EAAU6zC,EAAMo4B,EAAkB1xB,GACjE,MAAM5H,EAAQ,GACd,OAAK4H,GAAqBnC,EAAM8zB,cAAclsE,IAe9C8rE,GAAyB1zB,EAAOvE,EAAM7zC,EAZf,SAAS50B,EAASgiE,EAAcx8D,IAC9C2pE,GAAqBgH,GAAen2E,EAASgtE,EAAM+Y,UAAW,KAG/D/lF,EAAQ+gG,QAAQnsE,EAASvU,EAAGuU,EAAStU,EAAGugF,IACxCt5B,EAAMhxE,KAAK,CACPyJ,UACAgiE,eACAx8D,SAGZ,GACgE,GACzD+hE,GAfIA,CAgBf,CA0DC,SAASy5B,GAAgBh0B,EAAOp4C,EAAU6zC,EAAMvvD,EAAW2nF,EAAkB1xB,GAC1E,OAAKA,GAAqBnC,EAAM8zB,cAAclsE,GAG9B,MAAT6zC,GAAiBvvD,EAvC3B,SAAkC8zD,EAAOp4C,EAAU6zC,EAAMvvD,EAAW2nF,EAAkB1xB,GACnF,IAAI5H,EAAQ,GACZ,MAAM05B,EArDT,SAAkCx4B,GAC/B,MAAMy4B,GAA8B,IAAvBz4B,EAAKjvE,QAAQ,KACpB2nG,GAA8B,IAAvB14B,EAAKjvE,QAAQ,KAC1B,OAAO,SAASosE,EAAKC,GACjB,MAAMu7B,EAASF,EAAOxoG,KAAKoI,IAAI8kE,EAAIvlD,EAAIwlD,EAAIxlD,GAAK,EAC1CghF,EAASF,EAAOzoG,KAAKoI,IAAI8kE,EAAItlD,EAAIulD,EAAIvlD,GAAK,EAChD,OAAO5nB,KAAK6sE,KAAK7sE,KAAKC,IAAIyoG,EAAQ,GAAK1oG,KAAKC,IAAI0oG,EAAQ,GAC5D,CACJ,CA6C2BC,CAAyB74B,GAChD,IAAI84B,EAAc9gG,OAAOijE,kBA8BzB,OADAg9B,GAAyB1zB,EAAOvE,EAAM7zC,EA5BtC,SAAwB50B,EAASgiE,EAAcx8D,GAC3C,MAAMu7F,EAAU/gG,EAAQ+gG,QAAQnsE,EAASvU,EAAGuU,EAAStU,EAAGugF,GACxD,GAAI3nF,IAAc6nF,EACd,OAEJ,MAAM9E,EAASj8F,EAAQwhG,eAAeX,GAEtC,IADsB1xB,IAAoBnC,EAAM8zB,cAAc7E,KACzC8E,EACjB,OAEJ,MAAMr7B,EAAWu7B,EAAersE,EAAUqnE,GACtCv2B,EAAW67B,GACXh6B,EAAQ,CACJ,CACIvnE,UACAgiE,eACAx8D,UAGR+7F,EAAc77B,GACPA,IAAa67B,GACpBh6B,EAAMhxE,KAAK,CACPyJ,UACAgiE,eACAx8D,SAGZ,GAEO+hE,CACX,CAKyGk6B,CAAyBz0B,EAAOp4C,EAAU6zC,EAAMvvD,EAAW2nF,EAAkB1xB,GA7DrL,SAA+BnC,EAAOp4C,EAAU6zC,EAAMo4B,GACnD,IAAIt5B,EAAQ,GAmBZ,OADAm5B,GAAyB1zB,EAAOvE,EAAM7zC,EAjBtC,SAAwB50B,EAASgiE,EAAcx8D,GAC3C,MAAM,WAAE4yF,EAAW,SAAEC,GAAcr4F,EAAQ0hG,SAAS,CAChD,aACA,YACDb,IACG,MAAEr7B,GAAWP,GAAkBjlE,EAAS,CAC1CqgB,EAAGuU,EAASvU,EACZC,EAAGsU,EAAStU,IAEZ0lD,GAAcR,EAAO4yB,EAAYC,IACjC9wB,EAAMhxE,KAAK,CACPyJ,UACAgiE,eACAx8D,SAGZ,GAEO+hE,CACX,CAwCwCo6B,CAAsB30B,EAAOp4C,EAAU6zC,EAAMo4B,GAFtE,EAGf,CACC,SAASe,GAAa50B,EAAOp4C,EAAU6zC,EAAMvvD,EAAW2nF,GACrD,MAAMt5B,EAAQ,GACRs6B,EAAuB,MAATp5B,EAAe,WAAa,WAChD,IAAIq5B,GAAiB,EAWrB,OAVApB,GAAyB1zB,EAAOvE,EAAM7zC,EAAU,CAAC50B,EAASgiE,EAAcx8D,KAChExF,EAAQ6hG,IAAgB7hG,EAAQ6hG,GAAajtE,EAAS6zC,GAAOo4B,KAC7Dt5B,EAAMhxE,KAAK,CACPyJ,UACAgiE,eACAx8D,UAEJs8F,EAAiBA,GAAkB9hG,EAAQ+gG,QAAQnsE,EAASvU,EAAGuU,EAAStU,EAAGugF,MAG/E3nF,IAAc4oF,EACP,GAEJv6B,CACX,CACC,IAAIw6B,GAAc,CACfrB,4BACAsB,MAAO,CACV,KAAAx8F,CAAOwnE,EAAO/nE,EAAGgB,EAAS46F,GACf,MAAMjsE,EAAWusD,GAAoBl8E,EAAG+nE,GAClCvE,EAAOxiE,EAAQwiE,MAAQ,IACvB0G,EAAmBlpE,EAAQkpE,mBAAoB,EAC/C5H,EAAQthE,EAAQiT,UAAY0nF,GAAkB5zB,EAAOp4C,EAAU6zC,EAAMo4B,EAAkB1xB,GAAoB6xB,GAAgBh0B,EAAOp4C,EAAU6zC,GAAM,EAAOo4B,EAAkB1xB,GAC3K95D,EAAW,GACjB,OAAKkyD,EAAMzxE,QAGXk3E,EAAM2zB,+BAA+BlnE,QAASxH,IAC1C,MAAMzsB,EAAQ+hE,EAAM,GAAG/hE,MACjBxF,EAAUiyB,EAAKj4B,KAAKwL,GACtBxF,IAAYA,EAAQ49E,MACpBvoE,EAAS9e,KAAK,CACVyJ,UACAgiE,aAAc/vC,EAAKzsB,MACnBA,YAIL6P,GAbI,EAcf,EACP,OAAA6sB,CAAS8qC,EAAO/nE,EAAGgB,EAAS46F,GACjB,MAAMjsE,EAAWusD,GAAoBl8E,EAAG+nE,GAClCvE,EAAOxiE,EAAQwiE,MAAQ,KACvB0G,EAAmBlpE,EAAQkpE,mBAAoB,EACrD,IAAI5H,EAAQthE,EAAQiT,UAAY0nF,GAAkB5zB,EAAOp4C,EAAU6zC,EAAMo4B,EAAkB1xB,GAAoB6xB,GAAgBh0B,EAAOp4C,EAAU6zC,GAAM,EAAOo4B,EAAkB1xB,GAC/K,GAAI5H,EAAMzxE,OAAS,EAAG,CAClB,MAAMksE,EAAeuF,EAAM,GAAGvF,aACxBhoE,EAAOgzE,EAAMwhB,eAAexsB,GAAchoE,KAChDutE,EAAQ,GACR,IAAI,IAAI1xE,EAAI,EAAGA,EAAImE,EAAKlE,SAAUD,EAC9B0xE,EAAMhxE,KAAK,CACPyJ,QAAShG,EAAKnE,GACdmsE,eACAx8D,MAAO3P,GAGnB,CACA,OAAO0xE,CACX,EACP,KAAAwB,CAAOiE,EAAO/nE,EAAGgB,EAAS46F,GAIf,OAAOD,GAAkB5zB,EAHRmU,GAAoBl8E,EAAG+nE,GAC3B/mE,EAAQwiE,MAAQ,KAEmBo4B,EADvB56F,EAAQkpE,mBAAoB,EAEzD,EACP,OAAA8yB,CAASj1B,EAAO/nE,EAAGgB,EAAS46F,GACjB,MAAMjsE,EAAWusD,GAAoBl8E,EAAG+nE,GAClCvE,EAAOxiE,EAAQwiE,MAAQ,KACvB0G,EAAmBlpE,EAAQkpE,mBAAoB,EACrD,OAAO6xB,GAAgBh0B,EAAOp4C,EAAU6zC,EAAMxiE,EAAQiT,UAAW2nF,EAAkB1xB,EACvF,EACP,CAAA9uD,CAAG2sD,EAAO/nE,EAAGgB,EAAS46F,GAEX,OAAOe,GAAa50B,EADHmU,GAAoBl8E,EAAG+nE,GACH,IAAK/mE,EAAQiT,UAAW2nF,EACjE,EACP,CAAAvgF,CAAG0sD,EAAO/nE,EAAGgB,EAAS46F,GAEX,OAAOe,GAAa50B,EADHmU,GAAoBl8E,EAAG+nE,GACH,IAAK/mE,EAAQiT,UAAW2nF,EACjE,IAIR,MAAMqB,GAAmB,CACrB,OACA,MACA,QACA,UAEJ,SAASC,GAAiB1oD,EAAO7kB,GAC7B,OAAO6kB,EAAMv7C,OAAQ07C,GAAIA,EAAEsnC,MAAQtsD,EACvC,CACA,SAASwtE,GAA4B3oD,EAAOgvB,GACxC,OAAOhvB,EAAMv7C,OAAQ07C,IAAyC,IAArCsoD,GAAiB1oG,QAAQogD,EAAEsnC,MAAetnC,EAAE4nC,IAAI/Y,OAASA,EACtF,CACA,SAAS45B,GAAa5oD,EAAO9I,GACzB,OAAO8I,EAAMnW,KAAK,CAAC/jC,EAAGyE,KAClB,MAAM89D,EAAKnxB,EAAU3sC,EAAIzE,EACnBwiE,EAAKpxB,EAAUpxC,EAAIyE,EACzB,OAAO89D,EAAGnC,SAAWoC,EAAGpC,OAASmC,EAAGt8D,MAAQu8D,EAAGv8D,MAAQs8D,EAAGnC,OAASoC,EAAGpC,QAE9E,CA0EA,SAAS2iC,GAAeC,EAAYxc,EAAWxmF,EAAGyE,GAC9C,OAAOtL,KAAKmN,IAAI08F,EAAWhjG,GAAIwmF,EAAUxmF,IAAM7G,KAAKmN,IAAI08F,EAAWv+F,GAAI+hF,EAAU/hF,GACrF,CACA,SAASw+F,GAAiBD,EAAYE,GAClCF,EAAWp4C,IAAMzxD,KAAKmN,IAAI08F,EAAWp4C,IAAKs4C,EAAWt4C,KACrDo4C,EAAWh/D,KAAO7qC,KAAKmN,IAAI08F,EAAWh/D,KAAMk/D,EAAWl/D,MACvDg/D,EAAWnxB,OAAS14E,KAAKmN,IAAI08F,EAAWnxB,OAAQqxB,EAAWrxB,QAC3DmxB,EAAW9kE,MAAQ/kC,KAAKmN,IAAI08F,EAAW9kE,MAAOglE,EAAWhlE,MAC7D,CACA,SAASilE,GAAW3c,EAAW7oF,EAAQylG,EAAQ7X,GAC3C,MAAM,IAAE5J,EAAI,IAAEM,GAASmhB,EACjBJ,EAAaxc,EAAUwc,WAC7B,IAAK78F,GAASw7E,GAAM,CACZyhB,EAAOvqE,OACP2tD,EAAU7E,IAAQyhB,EAAOvqE,MAE7B,MAAMkyD,EAAQQ,EAAO6X,EAAOrY,QAAU,CAClClyD,KAAM,EACN+vC,MAAO,GAEXmiB,EAAMlyD,KAAO1/B,KAAKmN,IAAIykF,EAAMlyD,KAAMuqE,EAAOjN,WAAalU,EAAIp3B,OAASo3B,EAAIh5D,OACvEm6E,EAAOvqE,KAAOkyD,EAAMlyD,KAAOkyD,EAAMniB,MACjC4d,EAAU7E,IAAQyhB,EAAOvqE,IAC7B,CACIopD,EAAIohB,YACJJ,GAAiBD,EAAY/gB,EAAIohB,cAErC,MAAMC,EAAWnqG,KAAKmN,IAAI,EAAG3I,EAAO4lG,WAAaR,GAAeC,EAAYxc,EAAW,OAAQ,UACzFgd,EAAYrqG,KAAKmN,IAAI,EAAG3I,EAAO8lG,YAAcV,GAAeC,EAAYxc,EAAW,MAAO,WAC1Fkd,EAAeJ,IAAa9c,EAAUtzB,EACtCywC,EAAgBH,IAAchd,EAAU30B,EAG9C,OAFA20B,EAAUtzB,EAAIowC,EACd9c,EAAU30B,EAAI2xC,EACPJ,EAAOjN,WAAa,CACvByN,KAAMF,EACN/6F,MAAOg7F,GACP,CACAC,KAAMD,EACNh7F,MAAO+6F,EAEf,CAaA,SAASG,GAAW1N,EAAY3P,GAC5B,MAAMwc,EAAaxc,EAAUwc,WAa7B,OAZA,SAA4BzhB,GACxB,MAAM52B,EAAS,CACX3mB,KAAM,EACN4mB,IAAK,EACL1sB,MAAO,EACP2zC,OAAQ,GAKZ,OAHA0P,EAAUrnD,QAASynD,IACfh3B,EAAOg3B,GAAOxoF,KAAKmN,IAAIkgF,EAAU7E,GAAMqhB,EAAWrhB,MAE/Ch3B,CACX,CACoBm5C,CAAb3N,EAAgC,CACnC,OACA,SACoB,CACpB,MACA,UAER,CACA,SAAS4N,GAASC,EAAOxd,EAAW7oF,EAAQ4tF,GACxC,MAAM0Y,EAAa,GACnB,IAAI3tG,EAAGgsE,EAAM8gC,EAAQnhB,EAAKiiB,EAAO/5B,EACjC,IAAI7zE,EAAI,EAAGgsE,EAAO0hC,EAAMztG,OAAQ2tG,EAAQ,EAAG5tG,EAAIgsE,IAAQhsE,EAAE,CACrD8sG,EAASY,EAAM1tG,GACf2rF,EAAMmhB,EAAOnhB,IACbA,EAAI/zD,OAAOk1E,EAAOn6E,OAASu9D,EAAUtzB,EAAGkwC,EAAOv4C,QAAU27B,EAAU30B,EAAGgyC,GAAWT,EAAOjN,WAAY3P,IACpG,MAAM,KAAEod,EAAK,MAAEj7F,GAAWw6F,GAAW3c,EAAW7oF,EAAQylG,EAAQ7X,GAChE2Y,GAASN,GAAQK,EAAW1tG,OAC5B4zE,EAAUA,GAAWxhE,EAChBs5E,EAAIkiB,UACLF,EAAWjtG,KAAKosG,EAExB,CACA,OAAOc,GAASH,GAASE,EAAYzd,EAAW7oF,EAAQ4tF,IAAWphB,CACvE,CACA,SAASi6B,GAAWniB,EAAKj+C,EAAM4mB,EAAK3hC,EAAO4hC,GACvCo3B,EAAIr3B,IAAMA,EACVq3B,EAAIj+C,KAAOA,EACXi+C,EAAI/jD,MAAQ8F,EAAO/a,EACnBg5D,EAAIpQ,OAASjnB,EAAMC,EACnBo3B,EAAIh5D,MAAQA,EACZg5D,EAAIp3B,OAASA,CACjB,CACA,SAASw5C,GAAWL,EAAOxd,EAAW7oF,EAAQ4tF,GAC1C,MAAM+Y,EAAc3mG,EAAOi0E,QAC3B,IAAI,EAAE9wD,EAAE,EAAEC,GAAOylE,EACjB,IAAK,MAAM4c,KAAUY,EAAM,CACvB,MAAM/hB,EAAMmhB,EAAOnhB,IACb8I,EAAQQ,EAAO6X,EAAOrY,QAAU,CAClCniB,MAAO,EACP27B,OAAQ,EACRnkC,OAAQ,GAENA,EAASgjC,EAAOoB,YAAczZ,EAAM3qB,QAAU,EACpD,GAAIgjC,EAAOjN,WAAY,CACnB,MAAMltE,EAAQu9D,EAAUtzB,EAAIkN,EACtBvV,EAASkgC,EAAMlyD,MAAQopD,EAAIp3B,OAC7B8Y,GAAQonB,EAAMlzF,SACdkpB,EAAIgqE,EAAMlzF,OAEVoqF,EAAIkiB,SACJC,GAAWniB,EAAKqiB,EAAYtgE,KAAMjjB,EAAGpjB,EAAO4lG,WAAae,EAAYpmE,MAAQomE,EAAYtgE,KAAM6mB,GAE/Fu5C,GAAWniB,EAAKuE,EAAUxiD,KAAO+mD,EAAMwZ,OAAQxjF,EAAGkI,EAAO4hC,GAE7DkgC,EAAMlzF,MAAQkpB,EACdgqE,EAAMwZ,QAAUt7E,EAChBlI,EAAIkhE,EAAIpQ,MACZ,KAAO,CACH,MAAMhnB,EAAS27B,EAAU30B,EAAIuO,EACvBn3C,EAAQ8hE,EAAMlyD,MAAQopD,EAAIh5D,MAC5B06C,GAAQonB,EAAMlzF,SACdipB,EAAIiqE,EAAMlzF,OAEVoqF,EAAIkiB,SACJC,GAAWniB,EAAKnhE,EAAGwjF,EAAY15C,IAAK3hC,EAAOtrB,EAAO8lG,YAAca,EAAYzyB,OAASyyB,EAAY15C,KAEjGw5C,GAAWniB,EAAKnhE,EAAG0lE,EAAU57B,IAAMmgC,EAAMwZ,OAAQt7E,EAAO4hC,GAE5DkgC,EAAMlzF,MAAQipB,EACdiqE,EAAMwZ,QAAU15C,EAChB/pC,EAAImhE,EAAI/jD,KACZ,CACJ,CACAsoD,EAAU1lE,EAAIA,EACd0lE,EAAUzlE,EAAIA,CAClB,CACA,IAAI0jF,GAAU,CACb,MAAAC,CAAQj3B,EAAO3J,GACH2J,EAAMu2B,QACPv2B,EAAMu2B,MAAQ,IAElBlgC,EAAKqgC,SAAWrgC,EAAKqgC,WAAY,EACjCrgC,EAAKzuC,SAAWyuC,EAAKzuC,UAAY,MACjCyuC,EAAK1D,OAAS0D,EAAK1D,QAAU,EAC7B0D,EAAK6gC,QAAU7gC,EAAK6gC,SAAW,WAC3B,MAAO,CACH,CACIC,EAAG,EACH,IAAAld,CAAMlB,GACF1iB,EAAK4jB,KAAKlB,EACd,GAGZ,EACA/Y,EAAMu2B,MAAMhtG,KAAK8sE,EACrB,EACH,SAAA+gC,CAAWp3B,EAAOq3B,GACX,MAAM7+F,EAAQwnE,EAAMu2B,MAAQv2B,EAAMu2B,MAAM/pG,QAAQ6qG,IAAe,GAChD,IAAX7+F,GACAwnE,EAAMu2B,MAAMj5F,OAAO9E,EAAO,EAElC,EACH,SAAA4jF,CAAWpc,EAAO3J,EAAMp9D,GACjBo9D,EAAKqgC,SAAWz9F,EAAQy9F,SACxBrgC,EAAKzuC,SAAW3uB,EAAQ2uB,SACxByuC,EAAK1D,OAAS15D,EAAQ05D,MAC1B,EACH,MAAAlyC,CAAQu/C,EAAOxkD,EAAO4hC,EAAQk6C,GACvB,IAAKt3B,EACD,OAEJ,MAAMmE,EAAUuI,GAAU1M,EAAM/mE,QAAQ08F,OAAOxxB,SACzCozB,EAAiB7rG,KAAKmN,IAAI2iB,EAAQ2oD,EAAQ3oD,MAAO,GACjDg8E,EAAkB9rG,KAAKmN,IAAIukD,EAAS+mB,EAAQ/mB,OAAQ,GACpDm5C,EAvMd,SAA0BA,GACtB,MAAMkB,EAxDV,SAAmBlB,GACf,MAAMkB,EAAc,GACpB,IAAI5uG,EAAGgsE,EAAM2f,EAAKN,EAAKoJ,EAAOyZ,EAC9B,IAAIluG,EAAI,EAAGgsE,GAAQ0hC,GAAS,IAAIztG,OAAQD,EAAIgsE,IAAQhsE,EAChD2rF,EAAM+hB,EAAM1tG,KACT++B,SAAUssD,EAAMj7E,SAAWqkF,QAAQyZ,cAAa,IAAUviB,GAC7DijB,EAAYluG,KAAK,CACbiP,MAAO3P,EACP2rF,MACAN,MACAwU,WAAYlU,EAAIka,eAChB/7B,OAAQ6hB,EAAI7hB,OACZ2qB,MAAOA,GAASpJ,EAAMoJ,EACtByZ,gBAGR,OAAOU,CACX,CAuCwBC,CAAUnB,GACxBG,EAAWrB,GAAaoC,EAAYvmG,OAAQyb,GAAOA,EAAK6nE,IAAIkiB,WAAW,GACvEngE,EAAO8+D,GAAaF,GAAiBsC,EAAa,SAAS,GAC3DhnE,EAAQ4kE,GAAaF,GAAiBsC,EAAa,UACnDt6C,EAAMk4C,GAAaF,GAAiBsC,EAAa,QAAQ,GACzDrzB,EAASixB,GAAaF,GAAiBsC,EAAa,WACpDE,EAAmBvC,GAA4BqC,EAAa,KAC5DG,EAAiBxC,GAA4BqC,EAAa,KAChE,MAAO,CACHf,WACAmB,WAAYthE,EAAK7gC,OAAOynD,GACxB26C,eAAgBrnE,EAAM/6B,OAAOkiG,GAAgBliG,OAAO0uE,GAAQ1uE,OAAOiiG,GACnE5e,UAAWoc,GAAiBsC,EAAa,aACzCM,SAAUxhE,EAAK7gC,OAAO+6B,GAAO/6B,OAAOkiG,GACpClP,WAAYvrC,EAAIznD,OAAO0uE,GAAQ1uE,OAAOiiG,GAE9C,CAsLsBK,CAAiBh4B,EAAMu2B,OAC/B0B,EAAgB1B,EAAMwB,SACtBG,EAAkB3B,EAAM7N,WAC9Bj0B,GAAKuL,EAAMu2B,MAAQ/hB,IACiB,mBAArBA,EAAI2jB,cACX3jB,EAAI2jB,iBAGZ,MAAMC,EAA0BH,EAAcrwF,OAAO,CAACykF,EAAO1/E,IAAOA,EAAK6nE,IAAIv7E,UAAwC,IAA7B0T,EAAK6nE,IAAIv7E,QAAQ+5C,QAAoBq5C,EAAQA,EAAQ,EAAG,IAAM,EAChJn8F,EAASoE,OAAO67B,OAAO,CACzB2lE,WAAYt6E,EACZw6E,YAAa54C,EACb+mB,UACAozB,iBACAC,kBACAa,aAAcd,EAAiB,EAAIa,EACnCE,cAAed,EAAkB,IAE/BjC,EAAajhG,OAAOuc,OAAO,CAAC,EAAGszD,GACrCqxB,GAAiBD,EAAY7oB,GAAU4qB,IACvC,MAAMve,EAAYzkF,OAAOuc,OAAO,CAC5B0kF,aACA9vC,EAAG8xC,EACHnzC,EAAGozC,EACHnkF,EAAG8wD,EAAQ5tC,KACXjjB,EAAG6wD,EAAQhnB,KACZgnB,GACG2Z,EArPb,SAAuBkZ,EAAS9mG,GAC7B,MAAM4tF,EAnBV,SAAqBkZ,GACjB,MAAMlZ,EAAS,CAAC,EAChB,IAAK,MAAMnxE,KAAQqqF,EAAQ,CACvB,MAAM,MAAE1Z,EAAM,IAAEpJ,EAAI,YAAE6iB,GAAiBpqF,EACvC,IAAK2wE,IAAU4X,GAAiBn3F,SAASm2E,GACrC,SAEJ,MAAMlF,EAAS8O,EAAOR,KAAWQ,EAAOR,GAAS,CAC7CniB,MAAO,EACP27B,OAAQ,EACRnkC,OAAQ,EACRvnC,KAAM,IAEV4jD,EAAO7T,QACP6T,EAAOrc,QAAUokC,CACrB,CACA,OAAOjZ,CACX,CAEmBya,CAAYvB,IACrB,aAAEqB,EAAa,cAAEC,GAAmBpoG,EAC1C,IAAIrH,EAAGgsE,EAAM8gC,EACb,IAAI9sG,EAAI,EAAGgsE,EAAOmiC,EAAQluG,OAAQD,EAAIgsE,IAAQhsE,EAAE,CAC5C8sG,EAASqB,EAAQnuG,GACjB,MAAM,SAAE6tG,GAAcf,EAAOnhB,IACvB8I,EAAQQ,EAAO6X,EAAOrY,OACtBxC,EAASwC,GAASqY,EAAOoB,YAAczZ,EAAM3qB,OAC/CgjC,EAAOjN,YACPiN,EAAOn6E,MAAQs/D,EAASA,EAASud,EAAe3B,GAAYxmG,EAAOqnG,eACnE5B,EAAOv4C,OAASk7C,IAEhB3C,EAAOn6E,MAAQ68E,EACf1C,EAAOv4C,OAAS09B,EAASA,EAASwd,EAAgB5B,GAAYxmG,EAAOsnG,gBAE7E,CACA,OAAO1Z,CACX,CAmOuB0a,CAAcP,EAAcviG,OAAOwiG,GAAkBhoG,GACpEomG,GAASC,EAAMG,SAAU3d,EAAW7oF,EAAQ4tF,GAC5CwY,GAAS2B,EAAelf,EAAW7oF,EAAQ4tF,GACvCwY,GAAS4B,EAAiBnf,EAAW7oF,EAAQ4tF,IAC7CwY,GAAS2B,EAAelf,EAAW7oF,EAAQ4tF,GA3KvD,SAA0B/E,GACtB,MAAMwc,EAAaxc,EAAUwc,WAC7B,SAASkD,EAAUvkB,GACf,MAAM1yB,EAAS91D,KAAKmN,IAAI08F,EAAWrhB,GAAO6E,EAAU7E,GAAM,GAE1D,OADA6E,EAAU7E,IAAQ1yB,EACXA,CACX,CACAu3B,EAAUzlE,GAAKmlF,EAAU,OACzB1f,EAAU1lE,GAAKolF,EAAU,QACzBA,EAAU,SACVA,EAAU,SACd,CAkKQC,CAAiB3f,GACjB6d,GAAWL,EAAMsB,WAAY9e,EAAW7oF,EAAQ4tF,GAChD/E,EAAU1lE,GAAK0lE,EAAUtzB,EACzBszB,EAAUzlE,GAAKylE,EAAU30B,EACzBwyC,GAAWL,EAAMuB,eAAgB/e,EAAW7oF,EAAQ4tF,GACpD9d,EAAM+Y,UAAY,CACdxiD,KAAMwiD,EAAUxiD,KAChB4mB,IAAK47B,EAAU57B,IACf1sB,MAAOsoD,EAAUxiD,KAAOwiD,EAAUtzB,EAClC2e,OAAQ2U,EAAU57B,IAAM47B,EAAU30B,EAClChH,OAAQ27B,EAAU30B,EAClB5oC,MAAOu9D,EAAUtzB,GAErBgP,GAAK8hC,EAAMxd,UAAY4c,IACnB,MAAMnhB,EAAMmhB,EAAOnhB,IACnBlgF,OAAOuc,OAAO2jE,EAAKxU,EAAM+Y,WACzBvE,EAAI/zD,OAAOs4D,EAAUtzB,EAAGszB,EAAU30B,EAAG,CACjC7tB,KAAM,EACN4mB,IAAK,EACL1sB,MAAO,EACP2zC,OAAQ,KAGpB,GAGJ,MAAMu0B,GACL,cAAAC,CAAerxB,EAAQkiB,GAAc,CACrC,cAAAoP,CAAejkG,GACR,OAAO,CACX,CACH,gBAAAnK,CAAiBu1E,EAAO9wE,EAAM8F,GAAW,CACzC,mBAAAnK,CAAoBm1E,EAAO9wE,EAAM8F,GAAW,CAC5C,mBAAAwsE,GACO,OAAO,CACX,CACH,cAAAs3B,CAAe9lG,EAASwoB,EAAO4hC,EAAQqsC,GAGhC,OAFAjuE,EAAQ9vB,KAAKmN,IAAI,EAAG2iB,GAASxoB,EAAQwoB,OACrC4hC,EAASA,GAAUpqD,EAAQoqD,OACpB,CACH5hC,QACA4hC,OAAQ1xD,KAAKmN,IAAI,EAAG4wF,EAAc/9F,KAAKuI,MAAMunB,EAAQiuE,GAAersC,GAE5E,CACH,UAAA27C,CAAWxxB,GACJ,OAAO,CACX,CACH,YAAAyxB,CAAah5C,GACV,EAGJ,MAAMi5C,WAAsBN,GACxB,cAAAC,CAAeviC,GACX,OAAOA,GAAQA,EAAKmR,YAAcnR,EAAKmR,WAAW,OAAS,IAC/D,CACA,YAAAwxB,CAAah5C,GACTA,EAAO/mD,QAAQioE,WAAY,CAC/B,EAGJ,MAAMg4B,GAAc,WACbC,GAAc,CACjBC,WAAY,YACZC,UAAW,YACXC,SAAU,UACVC,aAAc,aACdC,YAAa,YACbC,YAAa,YACbC,UAAW,UACXC,aAAc,WACdC,WAAY,YAEVC,GAAiBtxG,GAAkB,OAAVA,GAA4B,KAAVA,EAoC3CuxG,KAAuBrkB,IAA+B,CACxDn3B,SAAS,GAOb,SAAS7nD,GAAeupE,EAAO9wE,EAAM8F,GAC7BgrE,GAASA,EAAMuH,QACfvH,EAAMuH,OAAO18E,oBAAoBqE,EAAM8F,EAAU8kG,GAEzD,CAYA,SAASC,GAAiBC,EAAUzyB,GAChC,IAAK,MAAMt1D,KAAQ+nF,EACf,GAAI/nF,IAASs1D,GAAUt1D,EAAK2G,SAAS2uD,GACjC,OAAO,CAGnB,CACA,SAAS0yB,GAAqBj6B,EAAO9wE,EAAM8F,GACvC,MAAMuyE,EAASvH,EAAMuH,OACfjjC,EAAW,IAAIjJ,iBAAkBlxB,IACnC,IAAI+vF,GAAU,EACd,IAAK,MAAMrS,KAAS19E,EAChB+vF,EAAUA,GAAWH,GAAiBlS,EAAM1rD,WAAYorC,GACxD2yB,EAAUA,IAAYH,GAAiBlS,EAAM5rD,aAAcsrC,GAE3D2yB,GACAllG,MAOR,OAJAsvC,EAAS93B,QAAQnkB,SAAU,CACvB6yC,WAAW,EACXC,SAAS,IAENmJ,CACX,CACA,SAAS61D,GAAqBn6B,EAAO9wE,EAAM8F,GACvC,MAAMuyE,EAASvH,EAAMuH,OACfjjC,EAAW,IAAIjJ,iBAAkBlxB,IACnC,IAAI+vF,GAAU,EACd,IAAK,MAAMrS,KAAS19E,EAChB+vF,EAAUA,GAAWH,GAAiBlS,EAAM5rD,aAAcsrC,GAC1D2yB,EAAUA,IAAYH,GAAiBlS,EAAM1rD,WAAYorC,GAEzD2yB,GACAllG,MAOR,OAJAsvC,EAAS93B,QAAQnkB,SAAU,CACvB6yC,WAAW,EACXC,SAAS,IAENmJ,CACX,CACA,MAAM81D,GAAqB,IAAIvjE,IAC/B,IAAIwjE,GAAsB,EAC1B,SAASC,KACL,MAAMC,EAAMxyG,OAAOu5E,iBACfi5B,IAAQF,KAGZA,GAAsBE,EACtBH,GAAmB3tE,QAAQ,CAACu3C,EAAQhE,KAC5BA,EAAMoH,0BAA4BmzB,GAClCv2B,MAGZ,CAaA,SAASw2B,GAAqBx6B,EAAO9wE,EAAM8F,GACvC,MAAMuyE,EAASvH,EAAMuH,OACf93C,EAAY83C,GAAU+L,GAAe/L,GAC3C,IAAK93C,EACD,OAEJ,MAAMu0C,EAASvJ,GAAU,CAACj/C,EAAO4hC,KAC7B,MAAMqI,EAAIh2B,EAAUgrE,YACpBzlG,EAASwmB,EAAO4hC,GACZqI,EAAIh2B,EAAUgrE,aACdzlG,KAELjN,QACGu8C,EAAW,IAAIo2D,eAAgBvwF,IACjC,MAAM09E,EAAQ19E,EAAQ,GAChBqR,EAAQqsE,EAAM8S,YAAYn/E,MAC1B4hC,EAASyqC,EAAM8S,YAAYv9C,OACnB,IAAV5hC,GAA0B,IAAX4hC,GAGnB4mB,EAAOxoD,EAAO4hC,KAIlB,OAFA9Y,EAAS93B,QAAQijB,GAlCrB,SAAuCuwC,EAAOgE,GACrCo2B,GAAmBhvE,MACpBrjC,OAAO0C,iBAAiB,SAAU6vG,IAEtCF,GAAmBx5F,IAAIo/D,EAAOgE,EAClC,CA8BI42B,CAA8B56B,EAAOgE,GAC9B1/B,CACX,CACA,SAASu2D,GAAgB76B,EAAO9wE,EAAMo1C,GAC9BA,GACAA,EAAS/0C,aAEA,WAATL,GApCR,SAAyC8wE,GACrCo6B,GAAmB1rF,OAAOsxD,GACrBo6B,GAAmBhvE,MACpBrjC,OAAO8C,oBAAoB,SAAUyvG,GAE7C,CAgCQQ,CAAgC96B,EAExC,CACA,SAAS+6B,GAAqB/6B,EAAO9wE,EAAM8F,GACvC,MAAMuyE,EAASvH,EAAMuH,OACf0G,EAAQxT,GAAW3rE,IACH,OAAdkxE,EAAM8B,KACN9sE,EAtHZ,SAAyBlG,EAAOkxE,GAC5B,MAAM9wE,EAAOiqG,GAAYrqG,EAAMI,OAASJ,EAAMI,MACxC,EAAEmkB,EAAE,EAAEC,GAAO6gE,GAAoBrlF,EAAOkxE,GAC9C,MAAO,CACH9wE,OACA8wE,QACAg7B,OAAQlsG,EACRukB,OAASpqB,IAANoqB,EAAkBA,EAAI,KACzBC,OAASrqB,IAANqqB,EAAkBA,EAAI,KAEjC,CA4GqB2nF,CAAgBnsG,EAAOkxE,KAErCA,GAEH,OApIJ,SAAqB/tD,EAAM/iB,EAAM8F,GACzBid,GACAA,EAAKxnB,iBAAiByE,EAAM8F,EAAU8kG,GAE9C,CA+HIhlG,CAAYyyE,EAAQr4E,EAAM++E,GACnBA,CACX,CACC,MAAMitB,WAAoBvC,GAC1B,cAAAC,CAAerxB,EAAQkiB,GAChB,MAAM70F,EAAU2yE,GAAUA,EAAOC,YAAcD,EAAOC,WAAW,MACjE,OAAI5yE,GAAWA,EAAQ2yE,SAAWA,GA/KzC,SAAoBA,EAAQkiB,GACzB,MAAMluE,EAAQgsD,EAAOhsD,MACf4/E,EAAe5zB,EAAOp0E,aAAa,UACnCioG,EAAc7zB,EAAOp0E,aAAa,SAcxC,GAbAo0E,EAAO2xB,IAAe,CAClBlyE,QAAS,CACLo2B,OAAQ+9C,EACR3/E,MAAO4/E,EACP7/E,MAAO,CACHy3B,QAASz3B,EAAMy3B,QACfoK,OAAQ7hC,EAAM6hC,OACd5hC,MAAOD,EAAMC,SAIzBD,EAAMy3B,QAAUz3B,EAAMy3B,SAAW,QACjCz3B,EAAM84D,UAAY94D,EAAM84D,WAAa,aACjCwlB,GAAcuB,GAAc,CAC5B,MAAMC,EAAe1lB,GAAapO,EAAQ,cACrBt+E,IAAjBoyG,IACA9zB,EAAO/rD,MAAQ6/E,EAEvB,CACA,GAAIxB,GAAcsB,GACd,GAA4B,KAAxB5zB,EAAOhsD,MAAM6hC,OACbmqB,EAAOnqB,OAASmqB,EAAO/rD,OAASiuE,GAAe,OAC5C,CACH,MAAM6R,EAAgB3lB,GAAapO,EAAQ,eACrBt+E,IAAlBqyG,IACA/zB,EAAOnqB,OAASk+C,EAExB,CAGR,CA8IYC,CAAWh0B,EAAQkiB,GACZ70F,GAEJ,IACX,CACH,cAAAikG,CAAejkG,GACR,MAAM2yE,EAAS3yE,EAAQ2yE,OACvB,IAAKA,EAAO2xB,IACR,OAAO,EAEX,MAAMlyE,EAAUugD,EAAO2xB,IAAalyE,QACpC,CACI,SACA,SACFyF,QAAS1tB,IACP,MAAMxW,EAAQy+B,EAAQjoB,GAClBk1D,GAAc1rE,GACdg/E,EAAO9kE,gBAAgB1D,GAEvBwoE,EAAO/kE,aAAazD,EAAMxW,KAGlC,MAAMgzB,EAAQyL,EAAQzL,OAAS,CAAC,EAMhC,OALAjnB,OAAO+H,KAAKkf,GAAOkR,QAASn8B,IACxBi3E,EAAOhsD,MAAMjrB,GAAOirB,EAAMjrB,KAE9Bi3E,EAAO/rD,MAAQ+rD,EAAO/rD,aACf+rD,EAAO2xB,KACP,CACX,CACH,gBAAAzuG,CAAiBu1E,EAAO9wE,EAAM8F,GACvB3L,KAAKwB,oBAAoBm1E,EAAO9wE,GAChC,MAAMssG,EAAUx7B,EAAMy7B,WAAaz7B,EAAMy7B,SAAW,CAAC,GAM/C9sG,EALW,CACb+sG,OAAQzB,GACR0B,OAAQxB,GACRn2B,OAAQw2B,IAEatrG,IAAS6rG,GAClCS,EAAQtsG,GAAQP,EAAQqxE,EAAO9wE,EAAM8F,EACzC,CACH,mBAAAnK,CAAoBm1E,EAAO9wE,GACpB,MAAMssG,EAAUx7B,EAAMy7B,WAAaz7B,EAAMy7B,SAAW,CAAC,GAC/CxtB,EAAQutB,EAAQtsG,GACjB++E,KAGY,CACbytB,OAAQb,GACRc,OAAQd,GACR72B,OAAQ62B,IAEa3rG,IAASuH,IAC1BupE,EAAO9wE,EAAM++E,GACrButB,EAAQtsG,QAAQjG,EACpB,CACA,mBAAAu4E,GACI,OAAOz5E,OAAOu5E,gBAClB,CACH,cAAAw3B,CAAevxB,EAAQ/rD,EAAO4hC,EAAQqsC,GAC/B,ODrsCR,SAAwBliB,EAAQq0B,EAASC,EAAUpS,GAC/C,MAAMluE,EAAQq4D,GAAiBrM,GACzBu0B,EAAU/nB,GAAmBx4D,EAAO,UACpCmwD,EAAW8H,GAAcj4D,EAAMmwD,SAAUnE,EAAQ,gBAAkB9Q,GACnEw1B,EAAYzY,GAAcj4D,EAAM0wE,UAAW1kB,EAAQ,iBAAmB9Q,GACtEslC,EAhCV,SAA0Bx0B,EAAQ/rD,EAAO4hC,GACrC,IAAIsuB,EAAUugB,EACd,QAAchjG,IAAVuyB,QAAkCvyB,IAAXm0D,EAAsB,CAC7C,MAAM3tB,EAAY83C,GAAU+L,GAAe/L,GAC3C,GAAK93C,EAGE,CACH,MAAMs5C,EAAOt5C,EAAUwtB,wBACjB++C,EAAiBpoB,GAAiBnkD,GAClCwsE,EAAkBloB,GAAmBioB,EAAgB,SAAU,SAC/DE,EAAmBnoB,GAAmBioB,EAAgB,WAC5DxgF,EAAQutD,EAAKvtD,MAAQ0gF,EAAiB1gF,MAAQygF,EAAgBzgF,MAC9D4hC,EAAS2rB,EAAK3rB,OAAS8+C,EAAiB9+C,OAAS6+C,EAAgB7+C,OACjEsuB,EAAW8H,GAAcwoB,EAAetwB,SAAUj8C,EAAW,eAC7Dw8D,EAAYzY,GAAcwoB,EAAe/P,UAAWx8D,EAAW,eACnE,MAXIjU,EAAQ+rD,EAAOkzB,YACfr9C,EAASmqB,EAAO5pB,YAWxB,CACA,MAAO,CACHniC,QACA4hC,SACAsuB,SAAUA,GAAYjV,GACtBw1B,UAAWA,GAAax1B,GAEhC,CAQ0B0lC,CAAiB50B,EAAQq0B,EAASC,GACxD,IAAI,MAAErgF,EAAM,OAAE4hC,GAAY2+C,EAC1B,GAAwB,gBAApBxgF,EAAM84D,UAA6B,CACnC,MAAME,EAAUR,GAAmBx4D,EAAO,SAAU,SAC9C+4D,EAAWP,GAAmBx4D,EAAO,WAC3CC,GAAS84D,EAAS94D,MAAQ+4D,EAAQ/4D,MAClC4hC,GAAUk3B,EAASl3B,OAASm3B,EAAQn3B,MACxC,CAeA,OAdA5hC,EAAQ9vB,KAAKmN,IAAI,EAAG2iB,EAAQsgF,EAAQtgF,OACpC4hC,EAAS1xD,KAAKmN,IAAI,EAAG4wF,EAAcjuE,EAAQiuE,EAAcrsC,EAAS0+C,EAAQ1+C,QAC1E5hC,EAAQy5D,GAAOvpF,KAAKE,IAAI4vB,EAAOkwD,EAAUqwB,EAAcrwB,WACvDtuB,EAAS63B,GAAOvpF,KAAKE,IAAIwxD,EAAQ6uC,EAAW8P,EAAc9P,YACtDzwE,IAAU4hC,IAGVA,EAAS63B,GAAOz5D,EAAQ,UAEOvyB,IAAZ2yG,QAAsC3yG,IAAb4yG,IAC1BpS,GAAesS,EAAc3+C,QAAUA,EAAS2+C,EAAc3+C,SAChFA,EAAS2+C,EAAc3+C,OACvB5hC,EAAQy5D,GAAOvpF,KAAKuI,MAAMmpD,EAASqsC,KAEhC,CACHjuE,QACA4hC,SAER,CCsqCe07C,CAAevxB,EAAQ/rD,EAAO4hC,EAAQqsC,EACjD,CACH,UAAAsP,CAAWxxB,GACJ,MAAM93C,EAAY83C,GAAU+L,GAAe/L,GAC3C,SAAU93C,IAAaA,EAAUzoB,YACrC,EAUJ,MAAM,GACF46C,gBAAkB,CAAC,EACnBA,0BAAuB34D,EACvBoqB,EACAC,EACAywD,QAAS,EACT9qE,QACAyjF,YACA,eAAA0f,CAAgBvI,GACZ,MAAM,EAAExgF,EAAE,EAAEC,GAAOjqB,KAAKqrG,SAAS,CAC7B,IACA,KACDb,GACH,MAAO,CACHxgF,IACAC,IAER,CACA,QAAAoqB,GACI,OAAO85B,GAASnuE,KAAKgqB,IAAMmkD,GAASnuE,KAAKiqB,EAC7C,CACA,QAAAohF,CAASpoB,EAAO+vB,GACZ,MAAM5iB,EAAQpwF,KAAKqzF,YACnB,IAAK2f,IAAU5iB,EAEX,OAAOpwF,KAEX,MAAMqoE,EAAM,CAAC,EAIb,OAHA4a,EAAM7/C,QAAS1tB,IACX2yD,EAAI3yD,GAAQ06E,EAAM16E,IAAS06E,EAAM16E,GAAMglE,SAAW0V,EAAM16E,GAAM28E,IAAMryF,KAAK0V,KAEtE2yD,CACX,EA2EH,SAASkf,GAAK7Q,EAAOu8B,EAAU9S,EAAS+S,EAAYC,GACjD,MAAMpyG,EAAQiqE,GAAekoC,EAAY,GACnCnwD,EAAM1gD,KAAKE,IAAIyoE,GAAemoC,EAAUz8B,EAAMj3E,QAASi3E,EAAMj3E,QACnE,IACIA,EAAQD,EAAGqoF,EADX/V,EAAQ,EAQZ,IANAquB,EAAU99F,KAAK+wG,KAAKjT,GAChBgT,IACA1zG,EAAS0zG,EAAWD,EACpB/S,EAAU1gG,EAAS4C,KAAKuI,MAAMnL,EAAS0gG,IAE3CtY,EAAO9mF,EACD8mF,EAAO,GACT/V,IACA+V,EAAOxlF,KAAKyI,MAAM/J,EAAQ+wE,EAAQquB,GAEtC,IAAI3gG,EAAI6C,KAAKmN,IAAIzO,EAAO,GAAIvB,EAAIujD,EAAKvjD,IAC7BA,IAAMqoF,IACNorB,EAAS/yG,KAAKw2E,EAAMl3E,IACpBsyE,IACA+V,EAAOxlF,KAAKyI,MAAM/J,EAAQ+wE,EAAQquB,GAG9C,CAeA,MACMkT,GAAiB,CAACh6B,EAAO8lB,EAAMnkB,IAAkB,QAATmkB,GAA2B,SAATA,EAAkB9lB,EAAM8lB,GAAQnkB,EAAS3B,EAAM8lB,GAAQnkB,EACjHs4B,GAAgB,CAACC,EAAaC,IAAgBnxG,KAAKE,IAAIixG,GAAiBD,EAAaA,GAC1F,SAASE,GAAOxtB,EAAKytB,GAClB,MAAM7kG,EAAS,GACT8kG,EAAY1tB,EAAIxmF,OAASi0G,EACzBxmG,EAAM+4E,EAAIxmF,OAChB,IAAID,EAAI,EACR,KAAMA,EAAI0N,EAAK1N,GAAKm0G,EAChB9kG,EAAO3O,KAAK+lF,EAAI5jF,KAAKuI,MAAMpL,KAE/B,OAAOqP,CACX,CACC,SAAS+kG,GAAoBv6B,EAAOlqE,EAAO0kG,GACxC,MAAMp0G,EAAS45E,EAAM3C,MAAMj3E,OACrBq0G,EAAazxG,KAAKE,IAAI4M,EAAO1P,EAAS,GACtCsB,EAAQs4E,EAAMqtB,YACd3jD,EAAMs2B,EAAMstB,UACZ94B,EAAU,KAChB,IACImN,EADA+4B,EAAY16B,EAAMklB,gBAAgBuV,GAEtC,KAAID,IAEI74B,EADW,IAAXv7E,EACS4C,KAAKmN,IAAIukG,EAAYhzG,EAAOgiD,EAAMgxD,GAC1B,IAAV5kG,GACGkqE,EAAMklB,gBAAgB,GAAKwV,GAAa,GAExCA,EAAY16B,EAAMklB,gBAAgBuV,EAAa,IAAM,EAEnEC,GAAaD,EAAa3kG,EAAQ6rE,GAAUA,EACxC+4B,EAAYhzG,EAAQ8sE,GAAWkmC,EAAYhxD,EAAM8qB,IAIzD,OAAOkmC,CACX,CAcC,SAASC,GAAkBpkG,GACxB,OAAOA,EAAQ4rE,UAAY5rE,EAAQ6rE,WAAa,CACpD,CACC,SAASw4B,GAAerkG,EAAS2zE,GAC9B,IAAK3zE,EAAQ+5C,QACT,OAAO,EAEX,MAAMyuB,EAAOkL,GAAO1zE,EAAQwoE,KAAMmL,GAC5BzI,EAAUuI,GAAUzzE,EAAQkrE,SAElC,OADcrmE,GAAQ7E,EAAQ2D,MAAQ3D,EAAQ2D,KAAK9T,OAAS,GAC7C24E,EAAKE,WAAawC,EAAQ/mB,MAC7C,CAcA,SAASmgD,GAAW1iC,EAAOjzC,EAAU+b,GAChC,IAAI+tB,EAAMkJ,GAAmBC,GAI9B,OAHIl3B,GAAwB,UAAb/b,IAAyB+b,GAAwB,UAAb/b,KAC/C8pC,EA7Ea,CAACmJ,GAAkB,SAAVA,EAAmB,QAAoB,UAAVA,EAAoB,OAASA,EA6E1E2iC,CAAa9rC,IAEhBA,CACX,CAwCA,MAAM+rC,WAAc,GAChB,WAAA1zG,CAAYkxF,GACRx5E,QACCpY,KAAKsoB,GAAKspE,EAAItpE,GACdtoB,KAAK6F,KAAO+rF,EAAI/rF,KAChB7F,KAAK4P,aAAUhQ,EACfI,KAAKy4E,IAAMmZ,EAAInZ,IACfz4E,KAAK22E,MAAQib,EAAIjb,MACjB32E,KAAK8zD,SAAMl0D,EACXI,KAAK+6E,YAASn7E,EACdI,KAAKktC,UAAOttC,EACZI,KAAKonC,WAAQxnC,EACbI,KAAKmyB,WAAQvyB,EACbI,KAAK+zD,YAASn0D,EACfI,KAAKq0G,SAAW,CACZnnE,KAAM,EACN9F,MAAO,EACP0sB,IAAK,EACLinB,OAAQ,GAEX/6E,KAAKqiF,cAAWziF,EAChBI,KAAK4iG,eAAYhjG,EACjBI,KAAKs0G,gBAAa10G,EAClBI,KAAKu0G,mBAAgB30G,EACrBI,KAAKw0G,iBAAc50G,EACnBI,KAAKy0G,kBAAe70G,EACpBI,KAAKoyE,UAAOxyE,EACZI,KAAK00G,mBAAgB90G,EACtBI,KAAKuC,SAAM3C,EACXI,KAAKwP,SAAM5P,EACXI,KAAK20G,YAAS/0G,EACbI,KAAK02E,MAAQ,GACb12E,KAAK40G,eAAiB,KACtB50G,KAAK60G,YAAc,KACnB70G,KAAK80G,YAAc,KACpB90G,KAAKq+F,QAAU,EACfr+F,KAAK+0G,WAAa,EAClB/0G,KAAKg1G,kBAAoB,CAAC,EACzBh1G,KAAK0mG,iBAAc9mG,EACnBI,KAAK2mG,eAAY/mG,EAClBI,KAAKmqG,gBAAiB,EACtBnqG,KAAKi1G,cAAWr1G,EAChBI,KAAKk1G,cAAWt1G,EAChBI,KAAKm1G,mBAAgBv1G,EACrBI,KAAKo1G,mBAAgBx1G,EACrBI,KAAKq1G,aAAe,EACpBr1G,KAAKs1G,aAAe,EACpBt1G,KAAKg+F,OAAS,CAAC,EACfh+F,KAAKu1G,mBAAoB,EACzBv1G,KAAK42F,cAAWh3F,CACpB,CACH,IAAA+pG,CAAK/5F,GACE5P,KAAK4P,QAAUA,EAAQg2E,WAAW5lF,KAAKm+E,cACvCn+E,KAAKoyE,KAAOxiE,EAAQwiE,KACpBpyE,KAAKk1G,SAAWl1G,KAAK8F,MAAM8J,EAAQrN,KACnCvC,KAAKi1G,SAAWj1G,KAAK8F,MAAM8J,EAAQJ,KACnCxP,KAAKo1G,cAAgBp1G,KAAK8F,MAAM8J,EAAQ4lG,cACxCx1G,KAAKm1G,cAAgBn1G,KAAK8F,MAAM8J,EAAQ6lG,aAC5C,CACH,KAAA3vG,CAAM01F,EAAKrsF,GACJ,OAAOqsF,CACX,CACH,aAAAjpB,GACO,IAAI,SAAE2iC,EAAS,SAAED,EAAS,cAAEG,EAAc,cAAED,GAAmBn1G,KAK/D,OAJAk1G,EAAWnqC,GAAgBmqC,EAAU9qG,OAAOijE,mBAC5C4nC,EAAWlqC,GAAgBkqC,EAAU7qG,OAAOuwF,mBAC5Cya,EAAgBrqC,GAAgBqqC,EAAehrG,OAAOijE,mBACtD8nC,EAAgBpqC,GAAgBoqC,EAAe/qG,OAAOuwF,mBAC/C,CACHp4F,IAAKwoE,GAAgBmqC,EAAUE,GAC/B5lG,IAAKu7D,GAAgBkqC,EAAUE,GAC/B9iC,WAAYxH,GAAeqqC,GAC3B5iC,WAAYzH,GAAeoqC,GAEnC,CACH,SAAA1a,CAAUC,GACH,IACIzsB,GADA,IAAExrE,EAAI,IAAEiN,EAAI,WAAE6iE,EAAW,WAAEC,GAAgBtyE,KAAKuyE,gBAEpD,GAAIF,GAAcC,EACd,MAAO,CACH/vE,MACAiN,OAGR,MAAMkmG,EAAQ11G,KAAK+0F,0BACnB,IAAI,IAAIv1F,EAAI,EAAGgsE,EAAOkqC,EAAMj2G,OAAQD,EAAIgsE,IAAQhsE,EAC5CuuE,EAAQ2nC,EAAMl2G,GAAG2xC,WAAWopD,UAAUv6F,KAAMw6F,GACvCnoB,IACD9vE,EAAMF,KAAKE,IAAIA,EAAKwrE,EAAMxrE,MAEzB+vE,IACD9iE,EAAMnN,KAAKmN,IAAIA,EAAKu+D,EAAMv+D,MAKlC,OAFAjN,EAAM+vE,GAAc/vE,EAAMiN,EAAMA,EAAMjN,EACtCiN,EAAM6iE,GAAc9vE,EAAMiN,EAAMjN,EAAMiN,EAC/B,CACHjN,IAAKwoE,GAAgBxoE,EAAKwoE,GAAgBv7D,EAAKjN,IAC/CiN,IAAKu7D,GAAgBv7D,EAAKu7D,GAAgBxoE,EAAKiN,IAEvD,CACH,UAAA+8F,GACO,MAAO,CACHr/D,KAAMltC,KAAKw0G,aAAe,EAC1B1gD,IAAK9zD,KAAKs0G,YAAc,EACxBltE,MAAOpnC,KAAKy0G,cAAgB,EAC5B15B,OAAQ/6E,KAAKu0G,eAAiB,EAEtC,CACH,QAAAoB,GACO,OAAO31G,KAAK02E,KAChB,CACH,SAAAojB,GACO,MAAMn2F,EAAO3D,KAAK22E,MAAMhzE,KACxB,OAAO3D,KAAK4P,QAAQiqF,SAAW75F,KAAKqlG,eAAiB1hG,EAAKiyG,QAAUjyG,EAAKkyG,UAAYlyG,EAAKk2F,QAAU,EACxG,CACH,aAAAic,CAAcpmB,EAAY1vF,KAAK22E,MAAM+Y,WAE9B,OADc1vF,KAAK60G,cAAgB70G,KAAK60G,YAAc70G,KAAK+1G,mBAAmBrmB,GAElF,CACA,YAAAof,GACI9uG,KAAKg+F,OAAS,CAAC,EACfh+F,KAAKu1G,mBAAoB,CAC7B,CACA,YAAAS,GACIhoF,GAAShuB,KAAK4P,QAAQomG,aAAc,CAChCh2G,MAER,CACH,MAAAo3B,CAAOirD,EAAUugB,EAAW6P,GACrB,MAAM,YAAEx3B,EAAY,MAAEG,EAAQ1E,MAAOu/B,GAAcj2G,KAAK4P,QAClDsmG,EAAaD,EAASC,WAC5Bl2G,KAAKg2G,eACLh2G,KAAKqiF,SAAWA,EAChBriF,KAAK4iG,UAAYA,EACjB5iG,KAAKq0G,SAAW5B,EAAUxnG,OAAOuc,OAAO,CACpC0lB,KAAM,EACN9F,MAAO,EACP0sB,IAAK,EACLinB,OAAQ,GACT03B,GACHzyG,KAAK02E,MAAQ,KACb12E,KAAK80G,YAAc,KACnB90G,KAAK40G,eAAiB,KACtB50G,KAAK60G,YAAc,KACnB70G,KAAKm2G,sBACLn2G,KAAKo2G,gBACLp2G,KAAKq2G,qBACLr2G,KAAK+0G,WAAa/0G,KAAKqlG,eAAiBrlG,KAAKmyB,MAAQsgF,EAAQvlE,KAAOulE,EAAQrrE,MAAQpnC,KAAK+zD,OAAS0+C,EAAQ3+C,IAAM2+C,EAAQ13B,OACnH/6E,KAAKu1G,oBACNv1G,KAAKs2G,mBACLt2G,KAAKu2G,sBACLv2G,KAAKw2G,kBACLx2G,KAAK20G,OD7uEb,SAAmB8B,EAAQr7B,EAAOH,GAClC,MAAM,IAAE14E,EAAI,IAAEiN,GAASinG,EACjBt+C,EAAS8S,GAAYmQ,GAAQ5rE,EAAMjN,GAAO,GAC1Cm0G,EAAW,CAACx3G,EAAOuJ,IAAMwyE,GAAyB,IAAV/7E,EAAc,EAAIA,EAAQuJ,EACxE,MAAO,CACHlG,IAAKm0G,EAASn0G,GAAMF,KAAKoI,IAAI0tD,IAC7B3oD,IAAKknG,EAASlnG,EAAK2oD,GAE3B,CCquE0Bw+C,CAAU32G,KAAMo7E,EAAOH,GACrCj7E,KAAKu1G,mBAAoB,GAE7Bv1G,KAAK42G,mBACL52G,KAAK02E,MAAQ12E,KAAK62G,cAAgB,GAClC72G,KAAK82G,kBACL,MAAMC,EAAkBb,EAAal2G,KAAK02E,MAAMj3E,OAChDO,KAAKg3G,sBAAsBD,EAAkBtD,GAAOzzG,KAAK02E,MAAOw/B,GAAcl2G,KAAK02E,OACnF12E,KAAK+yF,YACL/yF,KAAKi3G,+BACLj3G,KAAKk3G,yBACLl3G,KAAKm3G,8BACDlB,EAAStsD,UAAYssD,EAAS35B,UAAgC,SAApB25B,EAAS1hF,UACnDv0B,KAAK02E,MA3YjB,SAAkB2C,EAAO3C,GACrB,MAAMu/B,EAAW58B,EAAMzpE,QAAQ8mE,MACzB0gC,EAyBV,SAA2B/9B,GACvB,MAAM2B,EAAS3B,EAAMzpE,QAAQorE,OACvBS,EAAapC,EAAMg+B,YACnBC,EAAWj+B,EAAMglB,QAAU5iB,GAAcT,EAAS,EAAI,GACtDu8B,EAAWl+B,EAAM07B,WAAat5B,EACpC,OAAOp5E,KAAKuI,MAAMvI,KAAKE,IAAI+0G,EAAUC,GACzC,CA/B+BC,CAAkBn+B,GACvCo+B,EAAap1G,KAAKE,IAAI0zG,EAASzC,eAAiB4D,EAAoBA,GACpEM,EAAezB,EAASv5B,MAAMz8E,QA6CvC,SAAyBy2E,GACtB,MAAM7nE,EAAS,GACf,IAAIrP,EAAGgsE,EACP,IAAIhsE,EAAI,EAAGgsE,EAAOkL,EAAMj3E,OAAQD,EAAIgsE,EAAMhsE,IAClCk3E,EAAMl3E,GAAGk9E,OACT7tE,EAAO3O,KAAKV,GAGpB,OAAOqP,CACX,CAtDkD8oG,CAAgBjhC,GAAS,GACjEkhC,EAAkBF,EAAaj4G,OAC/Bo4G,EAAQH,EAAa,GACrBhnC,EAAOgnC,EAAaE,EAAkB,GACtC3E,EAAW,GACjB,GAAI2E,EAAkBH,EAElB,OAgDP,SAAoB/gC,EAAOu8B,EAAUyE,EAAcvX,GAChD,IAEI3gG,EAFAsyE,EAAQ,EACR+V,EAAO6vB,EAAa,GAGxB,IADAvX,EAAU99F,KAAK+wG,KAAKjT,GAChB3gG,EAAI,EAAGA,EAAIk3E,EAAMj3E,OAAQD,IACrBA,IAAMqoF,IACNorB,EAAS/yG,KAAKw2E,EAAMl3E,IACpBsyE,IACA+V,EAAO6vB,EAAa5lC,EAAQquB,GAGxC,CA7DQ2X,CAAWphC,EAAOu8B,EAAUyE,EAAcE,EAAkBH,GACrDxE,EAEX,MAAM9S,EAqBT,SAA0BuX,EAAchhC,EAAO+gC,GAC5C,MAAMM,EA4DT,SAAwB9xB,GACrB,MAAM/4E,EAAM+4E,EAAIxmF,OAChB,IAAID,EAAGqqG,EACP,GAAI38F,EAAM,EACN,OAAO,EAEX,IAAI28F,EAAO5jB,EAAI,GAAIzmF,EAAI,EAAGA,EAAI0N,IAAO1N,EACjC,GAAIymF,EAAIzmF,GAAKymF,EAAIzmF,EAAI,KAAOqqG,EACxB,OAAO,EAGf,OAAOA,CACX,CAxE6BmO,CAAeN,GAClCvX,EAAUzpB,EAAMj3E,OAASg4G,EAC/B,IAAKM,EACD,OAAO11G,KAAKmN,IAAI2wF,EAAS,GAE7B,MAAM8X,ED3sGN,SAAoB/4G,GACpB,MAAM2P,EAAS,GACTqgE,EAAO7sE,KAAK6sE,KAAKhwE,GACvB,IAAIM,EACJ,IAAIA,EAAI,EAAGA,EAAI0vE,EAAM1vE,IACbN,EAAQM,IAAM,IACdqP,EAAO3O,KAAKV,GACZqP,EAAO3O,KAAKhB,EAAQM,IAO5B,OAJI0vE,KAAiB,EAAPA,IACVrgE,EAAO3O,KAAKgvE,GAEhBrgE,EAAOo+B,KAAK,CAAC/jC,EAAGyE,IAAIzE,EAAIyE,GAAGqjF,MACpBniF,CACX,CC4rGoBqpG,CAAWH,GAC3B,IAAI,IAAIv4G,EAAI,EAAGgsE,EAAOysC,EAAQx4G,OAAS,EAAGD,EAAIgsE,EAAMhsE,IAAI,CACpD,MAAMiyF,EAASwmB,EAAQz4G,GACvB,GAAIiyF,EAAS0O,EACT,OAAO1O,CAEf,CACA,OAAOpvF,KAAKmN,IAAI2wF,EAAS,EAC7B,CAnCoBgY,CAAiBT,EAAchhC,EAAO+gC,GACtD,GAAIG,EAAkB,EAAG,CACrB,IAAIp4G,EAAGgsE,EACP,MAAM4sC,EAAkBR,EAAkB,EAAIv1G,KAAKyI,OAAO4lE,EAAOmnC,IAAUD,EAAkB,IAAM,KAEnG,IADArwB,GAAK7Q,EAAOu8B,EAAU9S,EAASv1B,GAAcwtC,GAAmB,EAAIP,EAAQO,EAAiBP,GACzFr4G,EAAI,EAAGgsE,EAAOosC,EAAkB,EAAGp4G,EAAIgsE,EAAMhsE,IAC7C+nF,GAAK7Q,EAAOu8B,EAAU9S,EAASuX,EAAal4G,GAAIk4G,EAAal4G,EAAI,IAGrE,OADA+nF,GAAK7Q,EAAOu8B,EAAU9S,EAASzvB,EAAM9F,GAAcwtC,GAAmB1hC,EAAMj3E,OAASixE,EAAO0nC,GACrFnF,CACX,CAEA,OADA1rB,GAAK7Q,EAAOu8B,EAAU9S,GACf8S,CACX,CAiXyB32B,CAASt8E,KAAMA,KAAK02E,OACjC12E,KAAK80G,YAAc,KACnB90G,KAAKq4G,iBAELtB,GACA/2G,KAAKg3G,sBAAsBh3G,KAAK02E,OAEpC12E,KAAKs4G,YACLt4G,KAAKu4G,MACLv4G,KAAKw4G,WACLx4G,KAAKy4G,aACT,CACH,SAAA1lB,GACO,IACImU,EAAYE,EADZsR,EAAgB14G,KAAK4P,QAAQ0qC,QAE7Bt6C,KAAKqlG,gBACL6B,EAAalnG,KAAKktC,KAClBk6D,EAAWpnG,KAAKonC,QAEhB8/D,EAAalnG,KAAK8zD,IAClBszC,EAAWpnG,KAAK+6E,OAChB29B,GAAiBA,GAErB14G,KAAK0mG,YAAcQ,EACnBlnG,KAAK2mG,UAAYS,EACjBpnG,KAAKmqG,eAAiBuO,EACtB14G,KAAKq+F,QAAU+I,EAAWF,EAC1BlnG,KAAK24G,eAAiB34G,KAAK4P,QAAQgpG,aACvC,CACA,WAAAH,GACIzqF,GAAShuB,KAAK4P,QAAQ6oG,YAAa,CAC/Bz4G,MAER,CACA,mBAAAm2G,GACInoF,GAAShuB,KAAK4P,QAAQumG,oBAAqB,CACvCn2G,MAER,CACA,aAAAo2G,GACQp2G,KAAKqlG,gBACLrlG,KAAKmyB,MAAQnyB,KAAKqiF,SAClBriF,KAAKktC,KAAO,EACZltC,KAAKonC,MAAQpnC,KAAKmyB,QAElBnyB,KAAK+zD,OAAS/zD,KAAK4iG,UACnB5iG,KAAK8zD,IAAM,EACX9zD,KAAK+6E,OAAS/6E,KAAK+zD,QAEvB/zD,KAAKw0G,YAAc,EACnBx0G,KAAKs0G,WAAa,EAClBt0G,KAAKy0G,aAAe,EACpBz0G,KAAKu0G,cAAgB,CACzB,CACA,kBAAA8B,GACIroF,GAAShuB,KAAK4P,QAAQymG,mBAAoB,CACtCr2G,MAER,CACA,UAAA64G,CAAW95G,GACPiB,KAAK22E,MAAMmiC,cAAc/5G,EAAMiB,KAAKm+E,cACpCnwD,GAAShuB,KAAK4P,QAAQ7Q,GAAO,CACzBiB,MAER,CACA,gBAAAs2G,GACIt2G,KAAK64G,WAAW,mBACpB,CACA,mBAAAtC,GAAuB,CACvB,eAAAC,GACIx2G,KAAK64G,WAAW,kBACpB,CACA,gBAAAjC,GACI52G,KAAK64G,WAAW,mBACpB,CACH,UAAAhC,GACO,MAAO,EACX,CACA,eAAAC,GACI92G,KAAK64G,WAAW,kBACpB,CACA,2BAAAE,GACI/qF,GAAShuB,KAAK4P,QAAQmpG,4BAA6B,CAC/C/4G,MAER,CACH,kBAAAg5G,CAAmBtiC,GACZ,MAAMu/B,EAAWj2G,KAAK4P,QAAQ8mE,MAC9B,IAAIl3E,EAAGgsE,EAAMulB,EACb,IAAIvxF,EAAI,EAAGgsE,EAAOkL,EAAMj3E,OAAQD,EAAIgsE,EAAMhsE,IACtCuxF,EAAOra,EAAMl3E,GACbuxF,EAAKznC,MAAQt7B,GAASioF,EAASjoF,SAAU,CACrC+iE,EAAK7xF,MACLM,EACAk3E,GACD12E,KAEX,CACA,0BAAAi5G,GACIjrF,GAAShuB,KAAK4P,QAAQqpG,2BAA4B,CAC9Cj5G,MAER,CACA,4BAAAi3G,GACIjpF,GAAShuB,KAAK4P,QAAQqnG,6BAA8B,CAChDj3G,MAER,CACA,sBAAAk3G,GACI,MAAMtnG,EAAU5P,KAAK4P,QACfqmG,EAAWrmG,EAAQ8mE,MACnBwiC,EAAW5F,GAActzG,KAAK02E,MAAMj3E,OAAQmQ,EAAQ8mE,MAAM88B,eAC1Dv3B,EAAcg6B,EAASh6B,aAAe,EACtCC,EAAc+5B,EAAS/5B,YAC7B,IACIR,EAAWknB,EAAWuW,EADtBzE,EAAgBz4B,EAEpB,IAAKj8E,KAAKo5G,eAAiBnD,EAAStsD,SAAWsyB,GAAeC,GAAeg9B,GAAY,IAAMl5G,KAAKqlG,eAEhG,YADArlG,KAAK00G,cAAgBz4B,GAGzB,MAAMo9B,EAAar5G,KAAKs5G,iBAClBC,EAAgBF,EAAWG,OAAOrnF,MAClCsnF,EAAiBJ,EAAWK,QAAQ3lD,OACpCsuB,EAAWpS,GAAYjwE,KAAK22E,MAAMxkD,MAAQonF,EAAe,EAAGv5G,KAAKqiF,UACvE3G,EAAY9rE,EAAQorE,OAASh7E,KAAKqiF,SAAW62B,EAAW72B,GAAY62B,EAAW,GAC3EK,EAAgB,EAAI79B,IACpBA,EAAY2G,GAAY62B,GAAYtpG,EAAQorE,OAAS,GAAM,IAC3D4nB,EAAY5iG,KAAK4iG,UAAYoR,GAAkBpkG,EAAQyrE,MAAQ46B,EAASn7B,QAAUm5B,GAAerkG,EAAQosE,MAAOh8E,KAAK22E,MAAM/mE,QAAQwoE,MACnI+gC,EAAmB92G,KAAK6sE,KAAKqqC,EAAgBA,EAAgBE,EAAiBA,GAC9E/E,EAAgBjmC,GAAUpsE,KAAKE,IAAIF,KAAKs3G,KAAK1pC,IAAaopC,EAAWK,QAAQ3lD,OAAS,GAAK2nB,GAAY,EAAG,IAAKr5E,KAAKs3G,KAAK1pC,GAAY2yB,EAAYuW,GAAmB,EAAG,IAAM92G,KAAKs3G,KAAK1pC,GAAYwpC,EAAiBN,GAAmB,EAAG,MAC1OzE,EAAgBryG,KAAKmN,IAAIysE,EAAa55E,KAAKE,IAAI25E,EAAaw4B,KAEhE10G,KAAK00G,cAAgBA,CACzB,CACA,2BAAAyC,GACInpF,GAAShuB,KAAK4P,QAAQunG,4BAA6B,CAC/Cn3G,MAER,CACA,aAAAq4G,GAAiB,CACjB,SAAAC,GACItqF,GAAShuB,KAAK4P,QAAQ0oG,UAAW,CAC7Bt4G,MAER,CACA,GAAAu4G,GACI,MAAMrU,EAAU,CACZ/xE,MAAO,EACP4hC,OAAQ,IAEN,MAAE4iB,EAAQ/mE,SAAW8mE,MAAOu/B,EAAWj6B,MAAO49B,EAAYv+B,KAAMw+B,IAAiB75G,KACjF2pD,EAAU3pD,KAAKo5G,aACf/T,EAAerlG,KAAKqlG,eAC1B,GAAI17C,EAAS,CACT,MAAMmwD,EAAc7F,GAAe2F,EAAWjjC,EAAM/mE,QAAQwoE,MAQ5D,GAPIitB,GACAnB,EAAQ/xE,MAAQnyB,KAAKqiF,SACrB6hB,EAAQnwC,OAASigD,GAAkB6F,GAAYC,IAE/C5V,EAAQnwC,OAAS/zD,KAAK4iG,UACtBsB,EAAQ/xE,MAAQ6hF,GAAkB6F,GAAYC,GAE9C7D,EAAStsD,SAAW3pD,KAAK02E,MAAMj3E,OAAQ,CACvC,MAAM,MAAEo4G,EAAM,KAAEnnC,EAAK,OAAE8oC,EAAO,QAAEE,GAAa15G,KAAKs5G,iBAC5CS,EAAiC,EAAnB9D,EAASn7B,QACvBk/B,EAAezrC,GAAUvuE,KAAK00G,eAC9BjgC,EAAMpyE,KAAKoyE,IAAIulC,GACfxmC,EAAMnxE,KAAKmxE,IAAIwmC,GACrB,GAAI3U,EAAc,CACd,MAAM4U,EAAchE,EAAS95B,OAAS,EAAI3I,EAAMgmC,EAAOrnF,MAAQsiD,EAAMilC,EAAQ3lD,OAC7EmwC,EAAQnwC,OAAS1xD,KAAKE,IAAIvC,KAAK4iG,UAAWsB,EAAQnwC,OAASkmD,EAAcF,EAC7E,KAAO,CACH,MAAMG,EAAajE,EAAS95B,OAAS,EAAI1H,EAAM+kC,EAAOrnF,MAAQqhD,EAAMkmC,EAAQ3lD,OAC5EmwC,EAAQ/xE,MAAQ9vB,KAAKE,IAAIvC,KAAKqiF,SAAU6hB,EAAQ/xE,MAAQ+nF,EAAaH,EACzE,CACA/5G,KAAKm6G,kBAAkBtC,EAAOnnC,EAAM8C,EAAKiB,EAC7C,CACJ,CACAz0E,KAAKo6G,iBACD/U,GACArlG,KAAKmyB,MAAQnyB,KAAKq+F,QAAU1nB,EAAMxkD,MAAQnyB,KAAKq0G,SAASnnE,KAAOltC,KAAKq0G,SAASjtE,MAC7EpnC,KAAK+zD,OAASmwC,EAAQnwC,SAEtB/zD,KAAKmyB,MAAQ+xE,EAAQ/xE,MACrBnyB,KAAK+zD,OAAS/zD,KAAKq+F,QAAU1nB,EAAM5iB,OAAS/zD,KAAKq0G,SAASvgD,IAAM9zD,KAAKq0G,SAASt5B,OAEtF,CACA,iBAAAo/B,CAAkBtC,EAAOnnC,EAAM8C,EAAKiB,GAChC,MAAQiC,OAAO,MAAElF,EAAM,QAAEsJ,GAAW,SAAEv8C,GAAcv+B,KAAK4P,QACnDyqG,EAAmC,IAAvBr6G,KAAK00G,cACjB4F,EAAgC,QAAb/7E,GAAoC,MAAdv+B,KAAKoyE,KACpD,GAAIpyE,KAAKqlG,eAAgB,CACrB,MAAMkV,EAAav6G,KAAKu+F,gBAAgB,GAAKv+F,KAAKktC,KAC5CstE,EAAcx6G,KAAKonC,MAAQpnC,KAAKu+F,gBAAgBv+F,KAAK02E,MAAMj3E,OAAS,GAC1E,IAAI+0G,EAAc,EACdC,EAAe,EACf4F,EACIC,GACA9F,EAAc//B,EAAMojC,EAAM1lF,MAC1BsiF,EAAejhC,EAAM9C,EAAK3c,SAE1BygD,EAAchhC,EAAMqkC,EAAM9jD,OAC1B0gD,EAAehgC,EAAM/D,EAAKv+C,OAEb,UAAVq/C,EACPijC,EAAe/jC,EAAKv+C,MACH,QAAVq/C,EACPgjC,EAAcqD,EAAM1lF,MACH,UAAVq/C,IACPgjC,EAAcqD,EAAM1lF,MAAQ,EAC5BsiF,EAAe/jC,EAAKv+C,MAAQ,GAEhCnyB,KAAKw0G,YAAcnyG,KAAKmN,KAAKglG,EAAc+F,EAAaz/B,GAAW96E,KAAKmyB,OAASnyB,KAAKmyB,MAAQooF,GAAa,GAC3Gv6G,KAAKy0G,aAAepyG,KAAKmN,KAAKilG,EAAe+F,EAAc1/B,GAAW96E,KAAKmyB,OAASnyB,KAAKmyB,MAAQqoF,GAAc,EACnH,KAAO,CACH,IAAIlG,EAAa5jC,EAAK3c,OAAS,EAC3BwgD,EAAgBsD,EAAM9jD,OAAS,EACrB,UAAVyd,GACA8iC,EAAa,EACbC,EAAgBsD,EAAM9jD,QACL,QAAVyd,IACP8iC,EAAa5jC,EAAK3c,OAClBwgD,EAAgB,GAEpBv0G,KAAKs0G,WAAaA,EAAax5B,EAC/B96E,KAAKu0G,cAAgBA,EAAgBz5B,CACzC,CACJ,CACH,cAAAs/B,GACWp6G,KAAKq0G,WACLr0G,KAAKq0G,SAASnnE,KAAO7qC,KAAKmN,IAAIxP,KAAKw0G,YAAax0G,KAAKq0G,SAASnnE,MAC9DltC,KAAKq0G,SAASvgD,IAAMzxD,KAAKmN,IAAIxP,KAAKs0G,WAAYt0G,KAAKq0G,SAASvgD,KAC5D9zD,KAAKq0G,SAASjtE,MAAQ/kC,KAAKmN,IAAIxP,KAAKy0G,aAAcz0G,KAAKq0G,SAASjtE,OAChEpnC,KAAKq0G,SAASt5B,OAAS14E,KAAKmN,IAAIxP,KAAKu0G,cAAev0G,KAAKq0G,SAASt5B,QAE1E,CACA,QAAAy9B,GACIxqF,GAAShuB,KAAK4P,QAAQ4oG,SAAU,CAC5Bx4G,MAER,CACH,YAAAqlG,GACO,MAAM,KAAEjzB,EAAK,SAAE7zC,GAAcv+B,KAAK4P,QAClC,MAAoB,QAAb2uB,GAAmC,WAAbA,GAAkC,MAAT6zC,CAC1D,CACH,UAAAqoC,GACO,OAAOz6G,KAAK4P,QAAQy9F,QACxB,CACH,qBAAA2J,CAAsBtgC,GAGf,IAAIl3E,EAAGgsE,EACP,IAHAxrE,KAAK+4G,8BACL/4G,KAAKg5G,mBAAmBtiC,GAEpBl3E,EAAI,EAAGgsE,EAAOkL,EAAMj3E,OAAQD,EAAIgsE,EAAMhsE,IAClCorE,GAAc8L,EAAMl3E,GAAG8pD,SACvBotB,EAAMziE,OAAOzU,EAAG,GAChBgsE,IACAhsE,KAGRQ,KAAKi5G,4BACT,CACH,cAAAK,GACO,IAAID,EAAar5G,KAAK80G,YACtB,IAAKuE,EAAY,CACb,MAAMnD,EAAal2G,KAAK4P,QAAQ8mE,MAAMw/B,WACtC,IAAIx/B,EAAQ12E,KAAK02E,MACbw/B,EAAax/B,EAAMj3E,SACnBi3E,EAAQ+8B,GAAO/8B,EAAOw/B,IAE1Bl2G,KAAK80G,YAAcuE,EAAar5G,KAAK06G,mBAAmBhkC,EAAOA,EAAMj3E,OAAQO,KAAK4P,QAAQ8mE,MAAM88B,cACpG,CACA,OAAO6F,CACX,CACH,kBAAAqB,CAAmBhkC,EAAOj3E,EAAQ+zG,GAC3B,MAAM,IAAE/6B,EAAMu8B,kBAAmB2F,GAAY36G,KACvC46G,EAAS,GACTC,EAAU,GACVlH,EAAYtxG,KAAKuI,MAAMnL,EAAS6zG,GAAc7zG,EAAQ+zG,IAC5D,IAEIh0G,EAAG8N,EAAGkwE,EAAMl0B,EAAOwxD,EAAUC,EAAYz0E,EAAOgyC,EAAYnmD,EAAO4hC,EAAQinD,EAF3EC,EAAkB,EAClBC,EAAmB,EAEvB,IAAI17G,EAAI,EAAGA,EAAIC,EAAQD,GAAKm0G,EAAU,CAUlC,GATArqD,EAAQotB,EAAMl3E,GAAG8pD,MACjBwxD,EAAW96G,KAAKm7G,wBAAwB37G,GACxCi5E,EAAIL,KAAO2iC,EAAaD,EAAS3sG,OACjCm4B,EAAQq0E,EAAOI,GAAcJ,EAAOI,IAAe,CAC/Cp3G,KAAM,CAAC,EACPq5E,GAAI,IAER1E,EAAawiC,EAASxiC,WACtBnmD,EAAQ4hC,EAAS,EACZ6W,GAActhB,IAAW70C,GAAQ60C,IAG/B,GAAI70C,GAAQ60C,GACf,IAAIh8C,EAAI,EAAGkwE,EAAOl0B,EAAM7pD,OAAQ6N,EAAIkwE,IAAQlwE,EACxC0tG,EAAe1xD,EAAMh8C,GAChBs9D,GAAcowC,IAAiBvmG,GAAQumG,KACxC7oF,EAAQ4qD,GAAatE,EAAKnyC,EAAM3iC,KAAM2iC,EAAM02C,GAAI7qD,EAAO6oF,GACvDjnD,GAAUukB,QAPlBnmD,EAAQ4qD,GAAatE,EAAKnyC,EAAM3iC,KAAM2iC,EAAM02C,GAAI7qD,EAAOm3B,GACvDyK,EAASukB,EAUbsiC,EAAO16G,KAAKiyB,GACZ0oF,EAAQ36G,KAAK6zD,GACbknD,EAAkB54G,KAAKmN,IAAI2iB,EAAO8oF,GAClCC,EAAmB74G,KAAKmN,IAAIukD,EAAQmnD,EACxC,EA7iBP,SAAwBP,EAAQl7G,GAC7B2rE,GAAKuvC,EAASr0E,IACV,MAAM02C,EAAK12C,EAAM02C,GACXY,EAAQZ,EAAGv9E,OAAS,EAC1B,IAAID,EACJ,GAAIo+E,EAAQn+E,EAAQ,CAChB,IAAID,EAAI,EAAGA,EAAIo+E,IAASp+E,SACb8mC,EAAM3iC,KAAKq5E,EAAGx9E,IAEzBw9E,EAAG/oE,OAAO,EAAG2pE,EACjB,GAER,CAkiBQN,CAAeq9B,EAAQl7G,GACvB,MAAM+5G,EAASoB,EAAOz3G,QAAQ83G,GACxBvB,EAAUmB,EAAQ13G,QAAQ+3G,GAC1BE,EAAWtoG,IAAM,CACfqf,MAAOyoF,EAAO9nG,IAAQ,EACtBihD,OAAQ8mD,EAAQ/nG,IAAQ,IAEhC,MAAO,CACH+kG,MAAOuD,EAAQ,GACf1qC,KAAM0qC,EAAQ37G,EAAS,GACvB+5G,OAAQ4B,EAAQ5B,GAChBE,QAAS0B,EAAQ1B,GACjBkB,SACAC,UAER,CACH,gBAAA3f,CAAiBh8F,GACV,OAAOA,CACX,CACH,gBAAAszE,CAAiBtzE,EAAOiQ,GACjB,OAAOmrF,GACX,CACH,gBAAA+M,CAAiBvpB,GAAQ,CACzB,eAAAygB,CAAgBpvF,GACT,MAAMunE,EAAQ12E,KAAK02E,MACnB,OAAIvnE,EAAQ,GAAKA,EAAQunE,EAAMj3E,OAAS,EAC7B,KAEJO,KAAKwyE,iBAAiBkE,EAAMvnE,GAAOjQ,MAC9C,CACH,kBAAAioG,CAAmBkU,GACRr7G,KAAKmqG,iBACLkR,EAAU,EAAIA,GAElB,MAAMv9B,EAAQ99E,KAAK0mG,YAAc2U,EAAUr7G,KAAKq+F,QAChD,OD/wHGpuB,GC+wHgBjwE,KAAK24G,eAAiB96B,GAAY79E,KAAK22E,MAAOmH,EAAO,GAAKA,GD/wHtD,MAAO,MCgxHlC,CACH,kBAAAw9B,CAAmBx9B,GACZ,MAAMu9B,GAAWv9B,EAAQ99E,KAAK0mG,aAAe1mG,KAAKq+F,QAClD,OAAOr+F,KAAKmqG,eAAiB,EAAIkR,EAAUA,CAC/C,CACH,YAAAjW,GACO,OAAOplG,KAAKwyE,iBAAiBxyE,KAAKu7G,eACtC,CACH,YAAAA,GACO,MAAM,IAAEh5G,EAAI,IAAEiN,GAASxP,KACvB,OAAOuC,EAAM,GAAKiN,EAAM,EAAIA,EAAMjN,EAAM,GAAKiN,EAAM,EAAIjN,EAAM,CACjE,CACH,UAAA47E,CAAWhvE,GACJ,MAAMunE,EAAQ12E,KAAK02E,OAAS,GAC5B,GAAIvnE,GAAS,GAAKA,EAAQunE,EAAMj3E,OAAQ,CACpC,MAAMsxF,EAAOra,EAAMvnE,GACnB,OAAO4hF,EAAK6F,WAAa7F,EAAK6F,SAnkB1C,SAA2Bx9B,EAAQjqD,EAAO4hF,GACtC,OAAOpN,GAAcvqB,EAAQ,CACzB23B,OACA5hF,QACAtJ,KAAM,QAEd,CA6jBqD21G,CAAkBx7G,KAAKm+E,aAAchvE,EAAO4hF,GACzF,CACA,OAAO/wF,KAAK42F,WAAa52F,KAAK42F,SA1kB3BjT,GA0kByD3jF,KAAK22E,MAAMwH,aA1kB9C,CACzB9E,MAykBqFr5E,KAxkBrF6F,KAAM,UAykBV,CACH,SAAAwxG,GACO,MAAMoE,EAAcz7G,KAAK4P,QAAQ8mE,MAC3BglC,EAAMntC,GAAUvuE,KAAK00G,eACrBjgC,EAAMpyE,KAAKoI,IAAIpI,KAAKoyE,IAAIinC,IACxBloC,EAAMnxE,KAAKoI,IAAIpI,KAAKmxE,IAAIkoC,IACxBrC,EAAar5G,KAAKs5G,iBAClBx+B,EAAU2gC,EAAYl/B,iBAAmB,EACzCngB,EAAIi9C,EAAaA,EAAWG,OAAOrnF,MAAQ2oD,EAAU,EACrD/f,EAAIs+C,EAAaA,EAAWK,QAAQ3lD,OAAS+mB,EAAU,EAC7D,OAAO96E,KAAKqlG,eAAiBtqC,EAAI0Z,EAAMrY,EAAIoX,EAAMpX,EAAIqY,EAAM1Z,EAAIyY,EAAMzY,EAAIyY,EAAMpX,EAAIqY,EAAM1Z,EAAI0Z,EAAMrY,EAAIoX,CAC3G,CACH,UAAA4lC,GACO,MAAMzvD,EAAU3pD,KAAK4P,QAAQ+5C,QAC7B,MAAgB,SAAZA,IACSA,EAEN3pD,KAAK+0F,0BAA0Bt1F,OAAS,CACnD,CACH,qBAAAk8G,CAAsBjsB,GACf,MAAMtd,EAAOpyE,KAAKoyE,KACZuE,EAAQ32E,KAAK22E,MACb/mE,EAAU5P,KAAK4P,SACf,KAAEyrE,EAAK,SAAE98C,EAAS,OAAEs9C,GAAYjsE,EAChCorE,EAASK,EAAKL,OACdqqB,EAAerlG,KAAKqlG,eAEpBkO,EADQvzG,KAAK02E,MACOj3E,QAAUu7E,EAAS,EAAI,GAC3C4gC,EAAK5H,GAAkB34B,GACvBnK,EAAQ,GACR2qC,EAAahgC,EAAO+J,WAAW5lF,KAAKm+E,cACpC29B,EAAYD,EAAWlyD,QAAUkyD,EAAW1pF,MAAQ,EACpD4pF,EAAgBD,EAAY,EAC5BE,EAAmB,SAASl+B,GAC9B,OAAOD,GAAYlH,EAAOmH,EAAOg+B,EACrC,EACA,IAAIG,EAAaz8G,EAAGu0G,EAAWmI,EAC3BC,EAAKC,EAAKC,EAAKC,EAAKC,EAAIC,EAAIC,EAAIC,EACpC,GAAiB,QAAbn+E,EACA09E,EAAcD,EAAiBh8G,KAAK+6E,QACpCqhC,EAAMp8G,KAAK+6E,OAAS6gC,EACpBU,EAAML,EAAcF,EACpBS,EAAKR,EAAiBtsB,EAAU57B,KAAOioD,EACvCW,EAAKhtB,EAAU3U,YACZ,GAAiB,WAAbx8C,EACP09E,EAAcD,EAAiBh8G,KAAK8zD,KACpC0oD,EAAK9sB,EAAU57B,IACf4oD,EAAKV,EAAiBtsB,EAAU3U,QAAUghC,EAC1CK,EAAMH,EAAcF,EACpBO,EAAMt8G,KAAK8zD,IAAM8nD,OACd,GAAiB,SAAbr9E,EACP09E,EAAcD,EAAiBh8G,KAAKonC,OACpC+0E,EAAMn8G,KAAKonC,MAAQw0E,EACnBS,EAAMJ,EAAcF,EACpBQ,EAAKP,EAAiBtsB,EAAUxiD,MAAQ6uE,EACxCU,EAAK/sB,EAAUtoD,WACZ,GAAiB,UAAb7I,EACP09E,EAAcD,EAAiBh8G,KAAKktC,MACpCqvE,EAAK7sB,EAAUxiD,KACfuvE,EAAKT,EAAiBtsB,EAAUtoD,OAAS20E,EACzCI,EAAMF,EAAcF,EACpBM,EAAMr8G,KAAKktC,KAAO0uE,OACf,GAAa,MAATxpC,EAAc,CACrB,GAAiB,WAAb7zC,EACA09E,EAAcD,GAAkBtsB,EAAU57B,IAAM47B,EAAU3U,QAAU,EAAI,SACrE,GAAI1rE,GAASkvB,GAAW,CAC3B,MAAMo+E,EAAiB1xG,OAAO+H,KAAKurB,GAAU,GACvCr/B,EAAQq/B,EAASo+E,GACvBV,EAAcD,EAAiBh8G,KAAK22E,MAAM2C,OAAOqjC,GAAgBnqC,iBAAiBtzE,GACtF,CACAs9G,EAAK9sB,EAAU57B,IACf4oD,EAAKhtB,EAAU3U,OACfqhC,EAAMH,EAAcF,EACpBO,EAAMF,EAAMR,CAChB,MAAO,GAAa,MAATxpC,EAAc,CACrB,GAAiB,WAAb7zC,EACA09E,EAAcD,GAAkBtsB,EAAUxiD,KAAOwiD,EAAUtoD,OAAS,QACjE,GAAI/3B,GAASkvB,GAAW,CAC3B,MAAMo+E,EAAiB1xG,OAAO+H,KAAKurB,GAAU,GACvCr/B,EAAQq/B,EAASo+E,GACvBV,EAAcD,EAAiBh8G,KAAK22E,MAAM2C,OAAOqjC,GAAgBnqC,iBAAiBtzE,GACtF,CACAi9G,EAAMF,EAAcF,EACpBM,EAAMF,EAAMP,EACZW,EAAK7sB,EAAUxiD,KACfuvE,EAAK/sB,EAAUtoD,KACnB,CACA,MAAMw1E,EAAQ5xC,GAAep7D,EAAQ8mE,MAAM88B,cAAeD,GACpDsJ,EAAOx6G,KAAKmN,IAAI,EAAGnN,KAAK+wG,KAAKG,EAAcqJ,IACjD,IAAIp9G,EAAI,EAAGA,EAAI+zG,EAAa/zG,GAAKq9G,EAAK,CAClC,MAAMtxG,EAAUvL,KAAKm+E,WAAW3+E,GAC1Bs9G,EAAczhC,EAAKuK,WAAWr6E,GAC9BwxG,EAAoBlhC,EAAO+J,WAAWr6E,GACtC+vE,EAAYwhC,EAAYxhC,UACxB0hC,EAAYF,EAAYzzC,MACxB8lB,EAAa4tB,EAAkBjhC,MAAQ,GACvCsT,EAAmB2tB,EAAkBhhC,WACrCL,EAAYohC,EAAYphC,UACxBE,EAAYkhC,EAAYlhC,UACxBqhC,EAAiBH,EAAYG,gBAAkB,GAC/CC,EAAuBJ,EAAYI,qBACzCnJ,EAAYH,GAAoB5zG,KAAMR,EAAGw7E,QACvBp7E,IAAdm0G,IAGJmI,EAAmBr+B,GAAYlH,EAAOo9B,EAAWz4B,GAC7C+pB,EACA8W,EAAME,EAAME,EAAKE,EAAKP,EAEtBE,EAAME,EAAME,EAAKE,EAAKR,EAE1BhrC,EAAMhxE,KAAK,CACPi8G,MACAC,MACAC,MACAC,MACAC,KACAC,KACAC,KACAC,KACAvqF,MAAOmpD,EACPjS,MAAO2zC,EACP7tB,aACAC,mBACA1T,YACAE,YACAqhC,iBACAC,yBAER,CAGA,OAFAl9G,KAAKq1G,aAAe9B,EACpBvzG,KAAKs1G,aAAe2G,EACb/qC,CACX,CACH,kBAAA6kC,CAAmBrmB,GACZ,MAAMtd,EAAOpyE,KAAKoyE,KACZxiE,EAAU5P,KAAK4P,SACf,SAAE2uB,EAAWm4C,MAAO+kC,GAAiB7rG,EACrCy1F,EAAerlG,KAAKqlG,eACpB3uB,EAAQ12E,KAAK02E,OACb,MAAElF,EAAM,WAAEmL,EAAW,QAAE7B,EAAQ,OAAEqB,GAAYs/B,EAC7CG,EAAK5H,GAAkBpkG,EAAQyrE,MAC/B8hC,EAAiBvB,EAAK9gC,EACtBsiC,EAAkBjhC,GAAUrB,EAAUqiC,EACtCr+B,GAAYvQ,GAAUvuE,KAAK00G,eAC3BxjC,EAAQ,GACd,IAAI1xE,EAAGgsE,EAAMulB,EAAMznC,EAAOt/B,EAAGC,EAAG+3D,EAAWlE,EAAO1F,EAAME,EAAY+kC,EAAWC,EAC3Er7B,EAAe,SACnB,GAAiB,QAAb1jD,EACAtU,EAAIjqB,KAAK+6E,OAASqiC,EAClBp7B,EAAYhiF,KAAKu9G,+BACd,GAAiB,WAAbh/E,EACPtU,EAAIjqB,KAAK8zD,IAAMspD,EACfp7B,EAAYhiF,KAAKu9G,+BACd,GAAiB,SAAbh/E,EAAqB,CAC5B,MAAM8pC,EAAMroE,KAAKw9G,wBAAwB5B,GACzC55B,EAAY3Z,EAAI2Z,UAChBh4D,EAAIq+C,EAAIr+C,CACZ,MAAO,GAAiB,UAAbuU,EAAsB,CAC7B,MAAM8pC,EAAMroE,KAAKw9G,wBAAwB5B,GACzC55B,EAAY3Z,EAAI2Z,UAChBh4D,EAAIq+C,EAAIr+C,CACZ,MAAO,GAAa,MAATooD,EAAc,CACrB,GAAiB,WAAb7zC,EACAtU,GAAKylE,EAAU57B,IAAM47B,EAAU3U,QAAU,EAAIoiC,OAC1C,GAAI9tG,GAASkvB,GAAW,CAC3B,MAAMo+E,EAAiB1xG,OAAO+H,KAAKurB,GAAU,GACvCr/B,EAAQq/B,EAASo+E,GACvB1yF,EAAIjqB,KAAK22E,MAAM2C,OAAOqjC,GAAgBnqC,iBAAiBtzE,GAASi+G,CACpE,CACAn7B,EAAYhiF,KAAKu9G,yBACrB,MAAO,GAAa,MAATnrC,EAAc,CACrB,GAAiB,WAAb7zC,EACAvU,GAAK0lE,EAAUxiD,KAAOwiD,EAAUtoD,OAAS,EAAI+1E,OAC1C,GAAI9tG,GAASkvB,GAAW,CAC3B,MAAMo+E,EAAiB1xG,OAAO+H,KAAKurB,GAAU,GACvCr/B,EAAQq/B,EAASo+E,GACvB3yF,EAAIhqB,KAAK22E,MAAM2C,OAAOqjC,GAAgBnqC,iBAAiBtzE,EAC3D,CACA8iF,EAAYhiF,KAAKw9G,wBAAwB5B,GAAI55B,SACjD,CACa,MAAT5P,IACc,UAAVZ,EACAyQ,EAAe,MACE,QAAVzQ,IACPyQ,EAAe,WAGvB,MAAMo3B,EAAar5G,KAAKs5G,iBACxB,IAAI95G,EAAI,EAAGgsE,EAAOkL,EAAMj3E,OAAQD,EAAIgsE,IAAQhsE,EAAE,CAC1CuxF,EAAOra,EAAMl3E,GACb8pD,EAAQynC,EAAKznC,MACb,MAAMwzD,EAAcrB,EAAY71B,WAAW5lF,KAAKm+E,WAAW3+E,IAC3Ds+E,EAAQ99E,KAAKu+F,gBAAgB/+F,GAAKi8G,EAAYj/B,YAC9CpE,EAAOp4E,KAAKm7G,wBAAwB37G,GACpC84E,EAAaF,EAAKE,WAClB+kC,EAAY5oG,GAAQ60C,GAASA,EAAM7pD,OAAS,EAC5C,MAAMg+G,EAAYJ,EAAY,EACxBh0C,EAAQyzC,EAAYzzC,MACpByY,EAAcg7B,EAAYzgC,gBAC1BwF,EAAci7B,EAAY1gC,gBAChC,IAuCI+F,EAvCAu7B,EAAgB17B,EAwCpB,GAvCIqjB,GACAr7E,EAAI8zD,EACc,UAAdkE,IAEI07B,EADAl+G,IAAMgsE,EAAO,EACIxrE,KAAK4P,QAAQ0qC,QAAoB,OAAV,QAC3B,IAAN96C,EACUQ,KAAK4P,QAAQ0qC,QAAmB,QAAT,OAExB,UAKhBgjE,EAFS,QAAb/+E,EACmB,SAAfo+C,GAAsC,IAAbmC,GACXu+B,EAAY/kC,EAAaA,EAAa,EAC9B,WAAfqE,GACO08B,EAAWK,QAAQ3lD,OAAS,EAAI0pD,EAAYnlC,EAAaA,GAEzD+gC,EAAWK,QAAQ3lD,OAASukB,EAAa,EAGxC,SAAfqE,GAAsC,IAAbmC,EACZxG,EAAa,EACJ,WAAfqE,EACM08B,EAAWK,QAAQ3lD,OAAS,EAAI0pD,EAAYnlC,EAE5C+gC,EAAWK,QAAQ3lD,OAASspD,EAAY/kC,EAGzD6D,IACAmhC,IAAe,GAEF,IAAbx+B,GAAmBg+B,EAAYlgC,oBAC/B5yD,GAAKsuD,EAAa,EAAIj2E,KAAKmxE,IAAIsL,MAGnC70D,EAAI6zD,EACJw/B,GAAc,EAAID,GAAa/kC,EAAa,GAG5CwkC,EAAYlgC,kBAAmB,CAC/B,MAAM+gC,EAAet6B,GAAUy5B,EAAYhgC,iBACrC/oB,EAASslD,EAAWwB,QAAQr7G,GAC5B2yB,EAAQknF,EAAWuB,OAAOp7G,GAChC,IAAIs0D,EAAMwpD,EAAaK,EAAa7pD,IAChC5mB,EAAO,EAAIywE,EAAazwE,KAC5B,OAAO+0C,GACH,IAAK,SACDnuB,GAAOC,EAAS,EAChB,MACJ,IAAK,SACDD,GAAOC,EAGf,OAAOiuB,GACH,IAAK,SACD90C,GAAQ/a,EAAQ,EAChB,MACJ,IAAK,QACD+a,GAAQ/a,EACR,MACJ,IAAK,QACG3yB,IAAMgsE,EAAO,EACbt+B,GAAQ/a,EACD3yB,EAAI,IACX0tC,GAAQ/a,EAAQ,GAI5BgwD,EAAW,CACPj1C,OACA4mB,MACA3hC,MAAOA,EAAQwrF,EAAaxrF,MAC5B4hC,OAAQA,EAAS4pD,EAAa5pD,OAC9BsV,MAAOyzC,EAAYjgC,cAE3B,CACA3L,EAAMhxE,KAAK,CACPopD,QACA8uB,OACAklC,aACA1tG,QAAS,CACLkvE,WACAzV,QACAyY,cACAD,cACAG,UAAW07B,EACXz7B,eACAF,YAAa,CACT/3D,EACAC,GAEJk4D,aAGZ,CACA,OAAOjR,CACX,CACA,uBAAAqsC,GACI,MAAM,SAAEh/E,EAAS,MAAEm4C,GAAW12E,KAAK4P,QAEnC,IADkB2+D,GAAUvuE,KAAK00G,eAE7B,MAAoB,QAAbn2E,EAAqB,OAAS,QAEzC,IAAIizC,EAAQ,SAQZ,MAPoB,UAAhBkF,EAAMlF,MACNA,EAAQ,OACe,QAAhBkF,EAAMlF,MACbA,EAAQ,QACe,UAAhBkF,EAAMlF,QACbA,EAAQ,SAELA,CACX,CACA,uBAAAgsC,CAAwB5B,GACpB,MAAM,SAAEr9E,EAAWm4C,OAAO,WAAEiG,EAAW,OAAER,EAAO,QAAErB,IAAgB96E,KAAK4P,QAEjEutG,EAAiBvB,EAAK9gC,EACtB0+B,EAFax5G,KAAKs5G,iBAEEE,OAAOrnF,MACjC,IAAI6vD,EACAh4D,EAoDJ,MAnDiB,SAAbuU,EACI49C,GACAnyD,EAAIhqB,KAAKonC,MAAQ0zC,EACE,SAAf6B,EACAqF,EAAY,OACU,WAAfrF,GACPqF,EAAY,SACZh4D,GAAKwvF,EAAS,IAEdx3B,EAAY,QACZh4D,GAAKwvF,KAGTxvF,EAAIhqB,KAAKonC,MAAQ+1E,EACE,SAAfxgC,EACAqF,EAAY,QACU,WAAfrF,GACPqF,EAAY,SACZh4D,GAAKwvF,EAAS,IAEdx3B,EAAY,OACZh4D,EAAIhqB,KAAKktC,OAGG,UAAb3O,EACH49C,GACAnyD,EAAIhqB,KAAKktC,KAAO4tC,EACG,SAAf6B,EACAqF,EAAY,QACU,WAAfrF,GACPqF,EAAY,SACZh4D,GAAKwvF,EAAS,IAEdx3B,EAAY,OACZh4D,GAAKwvF,KAGTxvF,EAAIhqB,KAAKktC,KAAOiwE,EACG,SAAfxgC,EACAqF,EAAY,OACU,WAAfrF,GACPqF,EAAY,SACZh4D,GAAKwvF,EAAS,IAEdx3B,EAAY,QACZh4D,EAAIhqB,KAAKonC,QAIjB46C,EAAY,QAET,CACHA,YACAh4D,IAER,CACH,iBAAA4zF,GACO,GAAI59G,KAAK4P,QAAQ8mE,MAAMyF,OACnB,OAEJ,MAAMxF,EAAQ32E,KAAK22E,MACbp4C,EAAWv+B,KAAK4P,QAAQ2uB,SAC9B,MAAiB,SAAbA,GAAoC,UAAbA,EAChB,CACHu1B,IAAK,EACL5mB,KAAMltC,KAAKktC,KACX6tC,OAAQpE,EAAM5iB,OACd3sB,MAAOpnC,KAAKonC,OAGH,QAAb7I,GAAmC,WAAbA,EACf,CACHu1B,IAAK9zD,KAAK8zD,IACV5mB,KAAM,EACN6tC,OAAQ/6E,KAAK+6E,OACb3zC,MAAOuvC,EAAMxkD,YALrB,CAQJ,CACH,cAAA0rF,GACO,MAAM,IAAEplC,EAAM7oE,SAAS,gBAAEkoE,GAAmB,KAAE5qC,EAAK,IAAE4mB,EAAI,MAAE3hC,EAAM,OAAE4hC,GAAY/zD,KAC3E83E,IACAW,EAAI8E,OACJ9E,EAAI8I,UAAYzJ,EAChBW,EAAIkJ,SAASz0C,EAAM4mB,EAAK3hC,EAAO4hC,GAC/B0kB,EAAIkF,UAEZ,CACA,oBAAA4pB,CAAqBroG,GACjB,MAAMm8E,EAAOr7E,KAAK4P,QAAQyrE,KAC1B,IAAKr7E,KAAKo5G,eAAiB/9B,EAAK1xB,QAC5B,OAAO,EAEX,MACMx6C,EADQnP,KAAK02E,MACC1/B,UAAW4yB,GAAIA,EAAE1qE,QAAUA,GAC/C,OAAIiQ,GAAS,EACIksE,EAAKuK,WAAW5lF,KAAKm+E,WAAWhvE,IACjCmsE,UAET,CACX,CACH,QAAAwiC,CAASpuB,GACF,MAAMrU,EAAOr7E,KAAK4P,QAAQyrE,KACpB5C,EAAMz4E,KAAKy4E,IACXvH,EAAQlxE,KAAK40G,iBAAmB50G,KAAK40G,eAAiB50G,KAAK27G,sBAAsBjsB,IACvF,IAAIlwF,EAAGgsE,EACP,MAAMuyC,EAAW,CAACh2C,EAAIC,EAAI91C,KACjBA,EAAMC,OAAUD,EAAMm3C,QAG3BoP,EAAI8E,OACJ9E,EAAI6C,UAAYppD,EAAMC,MACtBsmD,EAAI6I,YAAcpvD,EAAMm3C,MACxBoP,EAAIulC,YAAY9rF,EAAMi9D,YAAc,IACpC1W,EAAImoB,eAAiB1uE,EAAMk9D,iBAC3B3W,EAAI0G,YACJ1G,EAAI8G,OAAOxX,EAAG/9C,EAAG+9C,EAAG99C,GACpBwuD,EAAI+G,OAAOxX,EAAGh+C,EAAGg+C,EAAG/9C,GACpBwuD,EAAIoH,SACJpH,EAAIkF,YAER,GAAItC,EAAK1xB,QACL,IAAInqD,EAAI,EAAGgsE,EAAO0F,EAAMzxE,OAAQD,EAAIgsE,IAAQhsE,EAAE,CAC1C,MAAMwtE,EAAOkE,EAAM1xE,GACf67E,EAAKE,iBACLwiC,EAAS,CACL/zF,EAAGgjD,EAAKuvC,GACRtyF,EAAG+iD,EAAKwvC,IACT,CACCxyF,EAAGgjD,EAAKyvC,GACRxyF,EAAG+iD,EAAK0vC,IACT1vC,GAEHqO,EAAKG,WACLuiC,EAAS,CACL/zF,EAAGgjD,EAAKmvC,IACRlyF,EAAG+iD,EAAKovC,KACT,CACCpyF,EAAGgjD,EAAKqvC,IACRpyF,EAAG+iD,EAAKsvC,KACT,CACCjzC,MAAO2D,EAAK4O,UACZzpD,MAAO66C,EAAK0O,UACZyT,WAAYniB,EAAKiwC,eACjB7tB,iBAAkBpiB,EAAKkwC,sBAGnC,CAER,CACH,UAAAe,GACO,MAAM,MAAEtnC,EAAM,IAAE8B,EAAM7oE,SAAS,OAAEisE,EAAO,KAAER,IAAar7E,KACjD67G,EAAahgC,EAAO+J,WAAW5lF,KAAKm+E,cACpC29B,EAAYjgC,EAAOlyB,QAAUkyD,EAAW1pF,MAAQ,EACtD,IAAK2pF,EACD,OAEJ,MAAMoC,EAAgB7iC,EAAKuK,WAAW5lF,KAAKm+E,WAAW,IAAI7C,UACpD2gC,EAAcj8G,KAAKs1G,aACzB,IAAIiH,EAAIE,EAAID,EAAIE,EACZ18G,KAAKqlG,gBACLkX,EAAK1+B,GAAYlH,EAAO32E,KAAKktC,KAAM4uE,GAAaA,EAAY,EAC5DW,EAAK5+B,GAAYlH,EAAO32E,KAAKonC,MAAO82E,GAAiBA,EAAgB,EACrE1B,EAAKE,EAAKT,IAEVO,EAAK3+B,GAAYlH,EAAO32E,KAAK8zD,IAAKgoD,GAAaA,EAAY,EAC3DY,EAAK7+B,GAAYlH,EAAO32E,KAAK+6E,OAAQmjC,GAAiBA,EAAgB,EACtE3B,EAAKE,EAAKR,GAEdxjC,EAAI8E,OACJ9E,EAAI6C,UAAYugC,EAAW1pF,MAC3BsmD,EAAI6I,YAAcu6B,EAAWxyC,MAC7BoP,EAAI0G,YACJ1G,EAAI8G,OAAOg9B,EAAIC,GACf/jC,EAAI+G,OAAOi9B,EAAIC,GACfjkC,EAAIoH,SACJpH,EAAIkF,SACR,CACH,UAAAwgC,CAAWzuB,GAEJ,IADoB1vF,KAAK4P,QAAQ8mE,MAChB/sB,QACb,OAEJ,MAAM8uB,EAAMz4E,KAAKy4E,IACXsH,EAAO//E,KAAK49G,oBACd79B,GACAC,GAASvH,EAAKsH,GAElB,MAAM7O,EAAQlxE,KAAK81G,cAAcpmB,GACjC,IAAK,MAAM1iB,KAAQkE,EAAM,CACrB,MAAMktC,EAAoBpxC,EAAKp9D,QACzBkrG,EAAW9tC,EAAKoL,KAGtBwJ,GAAWnJ,EAFGzL,EAAK1jB,MAEI,EADb0jB,EAAKswC,WACcxC,EAAUsD,EAC3C,CACIr+B,GACAE,GAAWxH,EAEnB,CACH,SAAA4lC,GACO,MAAM,IAAE5lC,EAAM7oE,SAAS,SAAE2uB,EAAS,MAAEy9C,EAAM,QAAE1hC,IAAgBt6C,KAC5D,IAAKg8E,EAAMryB,QACP,OAEJ,MAAMyuB,EAAOkL,GAAOtH,EAAM5D,MACpB0C,EAAUuI,GAAUrH,EAAMlB,SAC1BtJ,EAAQwK,EAAMxK,MACpB,IAAIwJ,EAAS5C,EAAKE,WAAa,EACd,WAAb/5C,GAAsC,WAAbA,GAAyBlvB,GAASkvB,IAC3Dy8C,GAAUF,EAAQC,OACdtmE,GAAQunE,EAAMzoE,QACdynE,GAAU5C,EAAKE,YAAc0D,EAAMzoE,KAAK9T,OAAS,KAGrDu7E,GAAUF,EAAQhnB,IAEtB,MAAM,OAAEwqD,EAAO,OAAEC,EAAO,SAAEl8B,EAAS,SAAEvD,GAnlC7C,SAAmBzF,EAAO2B,EAAQz8C,EAAUizC,GACxC,MAAM,IAAE1d,EAAI,KAAE5mB,EAAK,OAAE6tC,EAAO,MAAE3zC,EAAM,MAAEuvC,GAAW0C,GAC3C,UAAEqW,EAAU,OAAEpW,GAAY3C,EAChC,IACI0L,EAAUi8B,EAAQC,EADlBz/B,EAAW,EAEf,MAAM/qB,EAASgnB,EAASjnB,EAClB3hC,EAAQiV,EAAQ8F,EACtB,GAAImsC,EAAMgsB,eAAgB,CAEtB,GADAiZ,EAAS7sC,GAAeD,EAAOtkC,EAAM9F,GACjC/3B,GAASkvB,GAAW,CACpB,MAAMo+E,EAAiB1xG,OAAO+H,KAAKurB,GAAU,GACvCr/B,EAAQq/B,EAASo+E,GACvB4B,EAASjlC,EAAOqjC,GAAgBnqC,iBAAiBtzE,GAAS60D,EAASinB,CACvE,MACIujC,EADoB,WAAbhgF,GACGmxD,EAAU3U,OAAS2U,EAAU57B,KAAO,EAAIC,EAASinB,EAElDq4B,GAAeh6B,EAAO96C,EAAUy8C,GAE7CqH,EAAWj7C,EAAQ8F,CACvB,KAAO,CACH,GAAI79B,GAASkvB,GAAW,CACpB,MAAMo+E,EAAiB1xG,OAAO+H,KAAKurB,GAAU,GACvCr/B,EAAQq/B,EAASo+E,GACvB2B,EAAShlC,EAAOqjC,GAAgBnqC,iBAAiBtzE,GAASizB,EAAQ6oD,CACtE,MACIsjC,EADoB,WAAb//E,GACGmxD,EAAUxiD,KAAOwiD,EAAUtoD,OAAS,EAAIjV,EAAQ6oD,EAEjDq4B,GAAeh6B,EAAO96C,EAAUy8C,GAE7CujC,EAAS9sC,GAAeD,EAAOuJ,EAAQjnB,GACvCgrB,EAAwB,SAAbvgD,GAAuBgvC,GAAUA,EAChD,CACA,MAAO,CACH+wC,SACAC,SACAl8B,WACAvD,WAER,CA6iC2D0/B,CAAUx+G,KAAMg7E,EAAQz8C,EAAUizC,GACrFoQ,GAAWnJ,EAAKuD,EAAMzoE,KAAM,EAAG,EAAG6kE,EAAM,CACpC/O,MAAO2S,EAAM3S,MACbgZ,WACAvD,WACAkD,UAAWkyB,GAAW1iC,EAAOjzC,EAAU+b,GACvC2nC,aAAc,SACdF,YAAa,CACTu8B,EACAC,IAGZ,CACA,IAAA3tB,CAAKlB,GACI1vF,KAAKo5G,eAGVp5G,KAAK69G,iBACL79G,KAAK89G,SAASpuB,GACd1vF,KAAKi+G,aACLj+G,KAAKq+G,YACLr+G,KAAKm+G,WAAWzuB,GACpB,CACH,OAAAme,GACO,MAAMhtB,EAAO7gF,KAAK4P,QACZ6uG,EAAK59B,EAAKnK,OAASmK,EAAKnK,MAAMo3B,GAAK,EACnC4Q,EAAK1zC,GAAe6V,EAAKxF,MAAQwF,EAAKxF,KAAKyyB,GAAI,GAC/C6Q,EAAK3zC,GAAe6V,EAAKhF,QAAUgF,EAAKhF,OAAOiyB,EAAG,GACxD,OAAK9tG,KAAKo5G,cAAgBp5G,KAAK4wF,OAASwjB,GAAM7uG,UAAUqrF,KAUjD,CACH,CACIkd,EAAG4Q,EACH9tB,KAAOlB,IACH1vF,KAAK69G,iBACL79G,KAAK89G,SAASpuB,GACd1vF,KAAKq+G,cAGb,CACIvQ,EAAG6Q,EACH/tB,KAAM,KACF5wF,KAAKi+G,eAGb,CACInQ,EAAG2Q,EACH7tB,KAAOlB,IACH1vF,KAAKm+G,WAAWzuB,MA3BjB,CACH,CACIoe,EAAG2Q,EACH7tB,KAAOlB,IACH1vF,KAAK4wF,KAAKlB,KA2B9B,CACH,uBAAAqF,CAAwBlvF,GACjB,MAAM6vG,EAAQ11G,KAAK22E,MAAM2zB,+BACnBtC,EAAShoG,KAAKoyE,KAAO,SACrBvjE,EAAS,GACf,IAAIrP,EAAGgsE,EACP,IAAIhsE,EAAI,EAAGgsE,EAAOkqC,EAAMj2G,OAAQD,EAAIgsE,IAAQhsE,EAAE,CAC1C,MAAMo8B,EAAO85E,EAAMl2G,GACfo8B,EAAKosE,KAAYhoG,KAAKsoB,IAAQziB,GAAQ+1B,EAAK/1B,OAASA,GACpDgJ,EAAO3O,KAAK07B,EAEpB,CACA,OAAO/sB,CACX,CACH,uBAAAssG,CAAwBhsG,GAEjB,OAAOm0E,GADMtjF,KAAK4P,QAAQ8mE,MAAMkP,WAAW5lF,KAAKm+E,WAAWhvE,IACxCipE,KACvB,CACH,UAAAwmC,GACO,MAAMC,EAAW7+G,KAAKm7G,wBAAwB,GAAG7iC,WACjD,OAAQt4E,KAAKqlG,eAAiBrlG,KAAKmyB,MAAQnyB,KAAK+zD,QAAU8qD,CAC9D,EAGJ,MAAMC,GACF,WAAAp+G,CAAYmF,EAAM4rC,EAAOioC,GACrB15E,KAAK6F,KAAOA,EACZ7F,KAAKyxC,MAAQA,EACbzxC,KAAK05E,SAAWA,EAChB15E,KAAKkxE,MAAQjmE,OAAO3C,OAAO,KAC/B,CACA,SAAAy2G,CAAUl5G,GACN,OAAOoF,OAAO1F,UAAUy5G,cAAcj6G,KAAK/E,KAAK6F,KAAKN,UAAWM,EAAKN,UACzE,CACH,QAAAqhD,CAASomB,GACF,MAAMtF,EAAQz8D,OAAOovC,eAAe2yB,GACpC,IAAIiyC,GAiEZ,SAA2Bv3C,GACvB,MAAO,OAAQA,GAAS,aAAcA,CAC1C,EAlEYw3C,CAAkBx3C,KAClBu3C,EAAcj/G,KAAK4mD,SAAS8gB,IAEhC,MAAMwJ,EAAQlxE,KAAKkxE,MACb5oD,EAAK0kD,EAAK1kD,GACVmpB,EAAQzxC,KAAKyxC,MAAQ,IAAMnpB,EACjC,IAAKA,EACD,MAAM,IAAInB,MAAM,2BAA6B6lD,GAEjD,OAAI1kD,KAAM4oD,IAGVA,EAAM5oD,GAAM0kD,EAyBpB,SAA0BA,EAAMv7B,EAAOwtE,GACnC,MAAME,EAAelzC,GAAMhhE,OAAO3C,OAAO,MAAO,CAC5C22G,EAAc9kC,GAAS5kE,IAAI0pG,GAAe,CAAC,EAC3C9kC,GAAS5kE,IAAIk8B,GACbu7B,EAAKmN,WAETA,GAAS5iE,IAAIk6B,EAAO0tE,GAChBnyC,EAAKoyC,eAOb,SAAuB3tE,EAAO4tE,GAC1Bp0G,OAAO+H,KAAKqsG,GAAQj8E,QAAS4L,IACzB,MAAMswE,EAAgBtwE,EAAS58B,MAAM,KAC/BmtG,EAAaD,EAActuB,MAC3BwuB,EAAc,CAChB/tE,GACFplC,OAAOizG,GAAe3gG,KAAK,KACvBjL,EAAQ2rG,EAAOrwE,GAAU58B,MAAM,KAC/BqtC,EAAa/rC,EAAMs9E,MACnBpX,EAAclmE,EAAMiL,KAAK,KAC/Bw7D,GAASR,MAAM6lC,EAAaD,EAAY3lC,EAAan6B,IAE7D,CAlBQggE,CAAchuE,EAAOu7B,EAAKoyC,eAE1BpyC,EAAKzzB,aACL4gC,GAASV,SAAShoC,EAAOu7B,EAAKzzB,YAEtC,CArCQmmE,CAAiB1yC,EAAMv7B,EAAOwtE,GAC1Bj/G,KAAK05E,UACLS,GAAST,SAAS1M,EAAK1kD,GAAI0kD,EAAKwK,YALzB/lC,CAQf,CACH,GAAAl8B,CAAI+S,GACG,OAAOtoB,KAAKkxE,MAAM5oD,EACtB,CACH,UAAAq3F,CAAW3yC,GACJ,MAAMkE,EAAQlxE,KAAKkxE,MACb5oD,EAAK0kD,EAAK1kD,GACVmpB,EAAQzxC,KAAKyxC,MACfnpB,KAAM4oD,UACCA,EAAM5oD,GAEbmpB,GAASnpB,KAAM6xD,GAAS1oC,YACjB0oC,GAAS1oC,GAAOnpB,GACnBtoB,KAAK05E,iBACElC,GAAUlvD,GAG7B,EAiCJ,MAAMs3F,GACF,WAAAl/G,GACIV,KAAKinD,YAAc,IAAI63D,GAAc7oB,GAAmB,YAAY,GACpEj2F,KAAKgf,SAAW,IAAI8/F,GAAc,GAAS,YAC3C9+G,KAAKm5E,QAAU,IAAI2lC,GAAc7zG,OAAQ,WACzCjL,KAAKs5E,OAAS,IAAIwlC,GAAc1K,GAAO,UACvCp0G,KAAK6/G,iBAAmB,CACpB7/G,KAAKinD,YACLjnD,KAAKs5E,OACLt5E,KAAKgf,SAEb,CACH,GAAAvW,IAAOK,GACA9I,KAAK8/G,MAAM,WAAYh3G,EAC3B,CACA,MAAAvB,IAAUuB,GACN9I,KAAK8/G,MAAM,aAAch3G,EAC7B,CACH,cAAAi3G,IAAkBj3G,GACX9I,KAAK8/G,MAAM,WAAYh3G,EAAM9I,KAAKinD,YACtC,CACH,WAAAiwC,IAAepuF,GACR9I,KAAK8/G,MAAM,WAAYh3G,EAAM9I,KAAKgf,SACtC,CACH,UAAAghG,IAAcl3G,GACP9I,KAAK8/G,MAAM,WAAYh3G,EAAM9I,KAAKm5E,QACtC,CACH,SAAA8mC,IAAan3G,GACN9I,KAAK8/G,MAAM,WAAYh3G,EAAM9I,KAAKs5E,OACtC,CACH,aAAA4mC,CAAc53F,GACP,OAAOtoB,KAAKmgH,KAAK73F,EAAItoB,KAAKinD,YAAa,aAC3C,CACH,UAAAuiD,CAAWlhF,GACJ,OAAOtoB,KAAKmgH,KAAK73F,EAAItoB,KAAKgf,SAAU,UACxC,CACH,SAAAohG,CAAU93F,GACH,OAAOtoB,KAAKmgH,KAAK73F,EAAItoB,KAAKm5E,QAAS,SACvC,CACH,QAAAknC,CAAS/3F,GACF,OAAOtoB,KAAKmgH,KAAK73F,EAAItoB,KAAKs5E,OAAQ,QACtC,CACH,iBAAAgnC,IAAqBx3G,GACd9I,KAAK8/G,MAAM,aAAch3G,EAAM9I,KAAKinD,YACxC,CACH,cAAAs5D,IAAkBz3G,GACX9I,KAAK8/G,MAAM,aAAch3G,EAAM9I,KAAKgf,SACxC,CACH,aAAAwhG,IAAiB13G,GACV9I,KAAK8/G,MAAM,aAAch3G,EAAM9I,KAAKm5E,QACxC,CACH,YAAAsnC,IAAgB33G,GACT9I,KAAK8/G,MAAM,aAAch3G,EAAM9I,KAAKs5E,OACxC,CACH,KAAAwmC,CAAMz/F,EAAQvX,EAAM43G,GACb,IACO53G,GACLs6B,QAAS9uB,IACP,MAAMqsG,EAAMD,GAAiB1gH,KAAK4gH,oBAAoBtsG,GAClDosG,GAAiBC,EAAI5B,UAAUzqG,IAAQqsG,IAAQ3gH,KAAKm5E,SAAW7kE,EAAIgU,GACnEtoB,KAAK6gH,MAAMxgG,EAAQsgG,EAAKrsG,GAExB82D,GAAK92D,EAAM04D,IACP,MAAM8zC,EAAUJ,GAAiB1gH,KAAK4gH,oBAAoB5zC,GAC1DhtE,KAAK6gH,MAAMxgG,EAAQygG,EAAS9zC,MAI5C,CACH,KAAA6zC,CAAMxgG,EAAQkpF,EAAUwX,GACjB,MAAMC,EAAcp0C,GAAYvsD,GAChC2N,GAAS+yF,EAAU,SAAWC,GAAc,GAAID,GAChDxX,EAASlpF,GAAQ0gG,GACjB/yF,GAAS+yF,EAAU,QAAUC,GAAc,GAAID,EACnD,CACH,mBAAAH,CAAoB/6G,GACb,IAAI,IAAIrG,EAAI,EAAGA,EAAIQ,KAAK6/G,iBAAiBpgH,OAAQD,IAAI,CACjD,MAAMmhH,EAAM3gH,KAAK6/G,iBAAiBrgH,GAClC,GAAImhH,EAAI5B,UAAUl5G,GACd,OAAO86G,CAEf,CACA,OAAO3gH,KAAKm5E,OAChB,CACH,IAAAgnC,CAAK73F,EAAIo4F,EAAe76G,GACjB,MAAMmnE,EAAO0zC,EAAcnrG,IAAI+S,GAC/B,QAAa1oB,IAATotE,EACA,MAAM,IAAI7lD,MAAM,IAAMmB,EAAK,yBAA2BziB,EAAO,KAEjE,OAAOmnE,CACX,EAEJ,IAAIu8B,GAA2B,IAAIqW,GAEnC,MAAMqB,GACF,WAAAvgH,GACIV,KAAKkhH,WAAQthH,CACjB,CACH,MAAA0G,CAAOqwE,EAAOwqC,EAAMr4G,EAAMjB,GAKnB,GAJa,eAATs5G,IACAnhH,KAAKkhH,MAAQlhH,KAAKohH,mBAAmBzqC,GAAO,GAC5C32E,KAAKmwF,QAAQnwF,KAAKkhH,MAAOvqC,EAAO,iBAEjB/2E,IAAfI,KAAKkhH,MACL,OAEJ,MAAM3nE,EAAc1xC,EAAS7H,KAAK23E,aAAahB,GAAO9uE,OAAOA,GAAU7H,KAAK23E,aAAahB,GACnF9nE,EAAS7O,KAAKmwF,QAAQ52C,EAAao9B,EAAOwqC,EAAMr4G,GAMtD,MALa,iBAATq4G,IACAnhH,KAAKmwF,QAAQ52C,EAAao9B,EAAO,QACjC32E,KAAKmwF,QAAQnwF,KAAKkhH,MAAOvqC,EAAO,aAChC32E,KAAKkhH,WAAQthH,GAEViP,CACX,CACH,OAAAshF,CAAQ52C,EAAao9B,EAAOwqC,EAAMr4G,GAC3BA,EAAOA,GAAQ,CAAC,EAChB,IAAK,MAAMqmC,KAAcoK,EAAY,CACjC,MAAM8nE,EAASlyE,EAAWkyE,OAO1B,IAAyC,IAArCrzF,GANWqzF,EAAOF,GACP,CACXxqC,EACA7tE,EACAqmC,EAAWv/B,SAEcyxG,IAAqBv4G,EAAKwU,WACnD,OAAO,CAEf,CACA,OAAO,CACX,CACA,UAAA+N,GACSu/C,GAAc5qE,KAAKg+F,UACpBh+F,KAAKshH,UAAYthH,KAAKg+F,OACtBh+F,KAAKg+F,YAASp+F,EAEtB,CACH,YAAA+3E,CAAahB,GACN,GAAI32E,KAAKg+F,OACL,OAAOh+F,KAAKg+F,OAEhB,MAAMzkD,EAAcv5C,KAAKg+F,OAASh+F,KAAKohH,mBAAmBzqC,GAE1D,OADA32E,KAAKuhH,oBAAoB5qC,GAClBp9B,CACX,CACA,kBAAA6nE,CAAmBzqC,EAAO11C,GACtB,MAAM01B,EAASggB,GAASA,EAAMhgB,OACxB/mD,EAAUo7D,GAAerU,EAAO/mD,SAAW+mD,EAAO/mD,QAAQupE,QAAS,CAAC,GACpEA,EAWb,SAAoBxiB,GACjB,MAAM6qD,EAAW,CAAC,EACZroC,EAAU,GACVnmE,EAAO/H,OAAO+H,KAAKu2F,GAASpwB,QAAQjI,OAC1C,IAAI,IAAI1xE,EAAI,EAAGA,EAAIwT,EAAKvT,OAAQD,IAC5B25E,EAAQj5E,KAAKqpG,GAAS6W,UAAUptG,EAAKxT,KAEzC,MAAMy6E,EAAQtjB,EAAOwiB,SAAW,GAChC,IAAI,IAAI35E,EAAI,EAAGA,EAAIy6E,EAAMx6E,OAAQD,IAAI,CACjC,MAAM6hH,EAASpnC,EAAMz6E,IACY,IAA7B25E,EAAQh2E,QAAQk+G,KAChBloC,EAAQj5E,KAAKmhH,GACbG,EAASH,EAAO/4F,KAAM,EAE9B,CACA,MAAO,CACH6wD,UACAqoC,WAER,CA9BwBC,CAAW9qD,GAC3B,OAAmB,IAAZ/mD,GAAsBqxB,EAuCrC,SAA2B01C,GAAO,QAAEwC,EAAQ,SAAEqoC,GAAa5xG,EAASqxB,GAChE,MAAMpyB,EAAS,GACTtD,EAAUorE,EAAMwH,aACtB,IAAK,MAAMkjC,KAAUloC,EAAQ,CACzB,MAAM7wD,EAAK+4F,EAAO/4F,GACZu4D,EAAO6gC,GAAQ9xG,EAAQ0Y,GAAK2Y,GACrB,OAAT4/C,GAGJhyE,EAAO3O,KAAK,CACRmhH,SACAzxG,QAAS+xG,GAAWhrC,EAAMhgB,OAAQ,CAC9B0qD,SACApnC,MAAOunC,EAASl5F,IACjBu4D,EAAMt1E,IAEjB,CACA,OAAOsD,CACX,CAzDgD+yG,CAAkBjrC,EAAOwC,EAASvpE,EAASqxB,GAAhD,EACvC,CACH,mBAAAsgF,CAAoB5qC,GACb,MAAMkrC,EAAsB7hH,KAAKshH,WAAa,GACxC/nE,EAAcv5C,KAAKg+F,OACnB6L,EAAO,CAAC3gG,EAAGyE,IAAIzE,EAAErB,OAAQmiB,IAAKrc,EAAEia,KAAMqC,GAAID,EAAEq3F,OAAO/4F,KAAO2B,EAAEo3F,OAAO/4F,KACzEtoB,KAAKmwF,QAAQ0Z,EAAKgY,EAAqBtoE,GAAco9B,EAAO,QAC5D32E,KAAKmwF,QAAQ0Z,EAAKtwD,EAAasoE,GAAsBlrC,EAAO,QAChE,EAsBJ,SAAS+qC,GAAQ9xG,EAASqxB,GACtB,OAAKA,IAAmB,IAAZrxB,GAGI,IAAZA,EACO,CAAC,EAELA,EALI,IAMf,CAoBA,SAAS+xG,GAAWhrD,GAAQ,OAAE0qD,EAAO,MAAEpnC,GAAU4G,EAAMt1E,GACnD,MAAMyH,EAAO2jD,EAAOmrD,gBAAgBT,GAC9Bv9B,EAASntB,EAAO2iC,gBAAgBzY,EAAM7tE,GAI5C,OAHIinE,GAASonC,EAAOlnC,UAChB2J,EAAO5jF,KAAKmhH,EAAOlnC,UAEhBxjB,EAAO4iC,eAAezV,EAAQv4E,EAAS,CAC1C,IACD,CACC+6E,YAAY,EACZC,WAAW,EACXH,SAAS,GAEjB,CAEA,SAAS27B,GAAal8G,EAAM+J,GACxB,MAAMoyG,EAAkB7nC,GAASnC,SAASnyE,IAAS,CAAC,EAEpD,QADwB+J,EAAQooE,UAAY,CAAC,GAAGnyE,IAAS,CAAC,GACpC+yE,WAAahpE,EAAQgpE,WAAaopC,EAAgBppC,WAAa,GACzF,CAaA,SAASqpC,GAAc35F,GACnB,GAAW,MAAPA,GAAqB,MAAPA,GAAqB,MAAPA,EAC5B,OAAOA,CAEf,CACA,SAAS45F,GAAiB3jF,GACtB,MAAiB,QAAbA,GAAmC,WAAbA,EACf,IAEM,SAAbA,GAAoC,UAAbA,EAChB,SADX,CAGJ,CACA,SAAS4jF,GAAc75F,KAAO85F,GAC1B,GAAIH,GAAc35F,GACd,OAAOA,EAEX,IAAK,MAAMu4D,KAAQuhC,EAAa,CAC5B,MAAMhwC,EAAOyO,EAAKzO,MAAQ8vC,GAAiBrhC,EAAKtiD,WAAajW,EAAG7oB,OAAS,GAAKwiH,GAAc35F,EAAG,GAAGnjB,eAClG,GAAIitE,EACA,OAAOA,CAEf,CACA,MAAM,IAAIjrD,MAAM,6BAA6BmB,uDACjD,CACA,SAAS+5F,GAAmB/5F,EAAI8pD,EAAMvmC,GAClC,GAAIA,EAAQumC,EAAO,YAAc9pD,EAC7B,MAAO,CACH8pD,OAGZ,CAgEA,SAASkwC,GAAY3rD,GACjB,MAAM/mD,EAAU+mD,EAAO/mD,UAAY+mD,EAAO/mD,QAAU,CAAC,GACrDA,EAAQupE,QAAUnO,GAAep7D,EAAQupE,QAAS,CAAC,GACnDvpE,EAAQ0pE,OAzDZ,SAA0B3iB,EAAQ/mD,GAC9B,MAAM2yG,EAAgB/qC,GAAU7gB,EAAO9wD,OAAS,CAC5CyzE,OAAQ,CAAC,GAEPkpC,EAAe5yG,EAAQ0pE,QAAU,CAAC,EAClCmpC,EAAiBV,GAAaprD,EAAO9wD,KAAM+J,GAC3C0pE,EAASruE,OAAO3C,OAAO,MA8C7B,OA7CA2C,OAAO+H,KAAKwvG,GAAcp/E,QAAS9a,IAC/B,MAAMo6F,EAAYF,EAAal6F,GAC/B,IAAKjZ,GAASqzG,GACV,OAAO/iH,QAAQ6E,MAAM,0CAA0C8jB,KAEnE,GAAIo6F,EAAUl9B,OACV,OAAO7lF,QAAQ07B,KAAK,kDAAkD/S,KAE1E,MAAM8pD,EAAO+vC,GAAc75F,EAAIo6F,EAxBvC,SAAkCp6F,EAAIquC,GAClC,GAAIA,EAAOhzD,MAAQgzD,EAAOhzD,KAAKq0E,SAAU,CACrC,MAAM2qC,EAAUhsD,EAAOhzD,KAAKq0E,SAASnwE,OAAQqN,GAAIA,EAAEsiF,UAAYlvE,GAAMpT,EAAEwiF,UAAYpvE,GACnF,GAAIq6F,EAAQljH,OACR,OAAO4iH,GAAmB/5F,EAAI,IAAKq6F,EAAQ,KAAON,GAAmB/5F,EAAI,IAAKq6F,EAAQ,GAE9F,CACA,MAAO,CAAC,CACZ,CAgBkDC,CAAyBt6F,EAAIquC,GAASwjB,GAASb,OAAOopC,EAAU78G,OACpGg9G,EA5Dd,SAAmCzwC,EAAMwG,GACrC,OAAOxG,IAASwG,EAAY,UAAY,SAC5C,CA0D0BkqC,CAA0B1wC,EAAMqwC,GAC5CM,EAAsBR,EAAcjpC,QAAU,CAAC,EACrDA,EAAOhxD,GAAM8jD,GAAQnhE,OAAO3C,OAAO,MAAO,CACtC,CACI8pE,QAEJswC,EACAK,EAAoB3wC,GACpB2wC,EAAoBF,OAG5BlsD,EAAOhzD,KAAKq0E,SAAS50C,QAASyI,IAC1B,MAAMhmC,EAAOgmC,EAAQhmC,MAAQ8wD,EAAO9wD,KAC9B+yE,EAAY/sC,EAAQ+sC,WAAampC,GAAal8G,EAAM+J,GAEpDmzG,GADkBvrC,GAAU3xE,IAAS,CAAC,GACAyzE,QAAU,CAAC,EACvDruE,OAAO+H,KAAK+vG,GAAqB3/E,QAAS4/E,IACtC,MAAM5wC,EAtFlB,SAAmC9pD,EAAIswD,GACnC,IAAIxG,EAAO9pD,EAMX,MALW,YAAPA,EACA8pD,EAAOwG,EACO,YAAPtwD,IACP8pD,EAAqB,MAAdwG,EAAoB,IAAM,KAE9BxG,CACX,CA8EyB6wC,CAA0BD,EAAWpqC,GAC5CtwD,EAAKujB,EAAQumC,EAAO,WAAaA,EACvCkH,EAAOhxD,GAAMgxD,EAAOhxD,IAAOrd,OAAO3C,OAAO,MACzC8jE,GAAQkN,EAAOhxD,GAAK,CAChB,CACI8pD,QAEJowC,EAAal6F,GACby6F,EAAoBC,SAIhC/3G,OAAO+H,KAAKsmE,GAAQl2C,QAASn8B,IACzB,MAAMoyE,EAAQC,EAAOryE,GACrBmlE,GAAQiN,EAAO,CACXc,GAASb,OAAOD,EAAMxzE,MACtBs0E,GAASd,UAGVC,CACX,CAIqB4pC,CAAiBvsD,EAAQ/mD,EAC9C,CACA,SAASuzG,GAASx/G,GAId,OAHAA,EAAOA,GAAQ,CAAC,GACXq0E,SAAWr0E,EAAKq0E,UAAY,GACjCr0E,EAAKk2F,OAASl2F,EAAKk2F,QAAU,GACtBl2F,CACX,CAOA,MAAMy/G,GAAW,IAAI51E,IACf61E,GAAa,IAAIrkF,IACvB,SAASskF,GAAWp1E,EAAUq1E,GAC1B,IAAIvwG,EAAOowG,GAAS7tG,IAAI24B,GAMxB,OALKl7B,IACDA,EAAOuwG,IACPH,GAAS7rG,IAAI22B,EAAUl7B,GACvBqwG,GAAW56G,IAAIuK,IAEZA,CACX,CACA,MAAMwwG,GAAa,CAACjsG,EAAK9B,EAAKxO,KAC1B,MAAM45E,EAAOtU,GAAiB92D,EAAKxO,QACtBrH,IAATihF,GACAtpE,EAAI9O,IAAIo4E,IAGhB,MAAM4iC,GACF,WAAA/iH,CAAYi2D,GACR32D,KAAK0jH,QAzBb,SAAoB/sD,GAIhB,OAHAA,EAASA,GAAU,CAAC,GACbhzD,KAAOw/G,GAASxsD,EAAOhzD,MAC9B2+G,GAAY3rD,GACLA,CACX,CAoBuBgtD,CAAWhtD,GAC1B32D,KAAK4jH,YAAc,IAAIp2E,IACvBxtC,KAAK6jH,eAAiB,IAAIr2E,GAC9B,CACA,YAAI0qC,GACA,OAAOl4E,KAAK0jH,QAAQxrC,QACxB,CACA,QAAIryE,GACA,OAAO7F,KAAK0jH,QAAQ79G,IACxB,CACA,QAAIA,CAAKA,GACL7F,KAAK0jH,QAAQ79G,KAAOA,CACxB,CACA,QAAIlC,GACA,OAAO3D,KAAK0jH,QAAQ//G,IACxB,CACA,QAAIA,CAAKA,GACL3D,KAAK0jH,QAAQ//G,KAAOw/G,GAASx/G,EACjC,CACA,WAAIiM,GACA,OAAO5P,KAAK0jH,QAAQ9zG,OACxB,CACA,WAAIA,CAAQA,GACR5P,KAAK0jH,QAAQ9zG,QAAUA,CAC3B,CACA,WAAIupE,GACA,OAAOn5E,KAAK0jH,QAAQvqC,OACxB,CACA,MAAA/hD,GACI,MAAMu/B,EAAS32D,KAAK0jH,QACpB1jH,KAAKykC,aACL69E,GAAY3rD,EAChB,CACA,UAAAlyB,GACIzkC,KAAK4jH,YAAYxhF,QACjBpiC,KAAK6jH,eAAezhF,OACxB,CACH,gBAAAi3D,CAAiByqB,GACV,OAAOR,GAAWQ,EAAa,IAAI,CAC3B,CACI,YAAYA,IACZ,KAGhB,CACH,yBAAA7nB,CAA0B6nB,EAAa9nB,GAChC,OAAOsnB,GAAW,GAAGQ,gBAA0B9nB,IAAc,IAAI,CACzD,CACI,YAAY8nB,iBAA2B9nB,IACvC,eAAeA,KAEnB,CACI,YAAY8nB,IACZ,KAGhB,CACH,uBAAAjoB,CAAwBioB,EAAa9wF,GAC9B,OAAOswF,GAAW,GAAGQ,KAAe9wF,IAAe,IAAI,CAC/C,CACI,YAAY8wF,cAAwB9wF,IACpC,YAAY8wF,IACZ,YAAY9wF,IACZ,KAGhB,CACH,eAAA8uF,CAAgBT,GACT,MAAM/4F,EAAK+4F,EAAO/4F,GAElB,OAAOg7F,GAAW,GADLtjH,KAAK6F,eACkByiB,IAAM,IAAI,CACtC,CACI,WAAWA,OACR+4F,EAAO0C,wBAA0B,KAGpD,CACH,aAAAC,CAAcC,EAAWC,GAClB,MAAMN,EAAc5jH,KAAK4jH,YACzB,IAAIt9E,EAAQs9E,EAAYruG,IAAI0uG,GAK5B,OAJK39E,IAAS49E,IACV59E,EAAQ,IAAIkH,IACZo2E,EAAYrsG,IAAI0sG,EAAW39E,IAExBA,CACX,CACH,eAAAgzD,CAAgB2qB,EAAWE,EAAUD,GAC9B,MAAM,QAAEt0G,EAAQ,KAAE/J,GAAU7F,KACtBsmC,EAAQtmC,KAAKgkH,cAAcC,EAAWC,GACtCnuB,EAASzvD,EAAM/wB,IAAI4uG,GACzB,GAAIpuB,EACA,OAAOA,EAEX,MAAMjS,EAAS,IAAI9kD,IACnBmlF,EAAS/gF,QAASpwB,IACVixG,IACAngC,EAAOr7E,IAAIw7G,GACXjxG,EAAKowB,QAASn8B,GAAMu8G,GAAW1/B,EAAQmgC,EAAWh9G,KAEtD+L,EAAKowB,QAASn8B,GAAMu8G,GAAW1/B,EAAQl0E,EAAS3I,IAChD+L,EAAKowB,QAASn8B,GAAMu8G,GAAW1/B,EAAQtM,GAAU3xE,IAAS,CAAC,EAAGoB,IAC9D+L,EAAKowB,QAASn8B,GAAMu8G,GAAW1/B,EAAQ3J,GAAUlzE,IACjD+L,EAAKowB,QAASn8B,GAAMu8G,GAAW1/B,EAAQvqC,GAAatyC,MAExD,MAAMm8C,EAAQ12C,MAAMmS,KAAKilE,GAOzB,OANqB,IAAjB1gC,EAAM3jD,QACN2jD,EAAMljD,KAAK+K,OAAO3C,OAAO,OAEzB+6G,GAAWr4G,IAAIm5G,IACf79E,EAAM/uB,IAAI4sG,EAAU/gE,GAEjBA,CACX,CACH,iBAAAghE,GACO,MAAM,QAAEx0G,EAAQ,KAAE/J,GAAU7F,KAC5B,MAAO,CACH4P,EACA4nE,GAAU3xE,IAAS,CAAC,EACpBs0E,GAASnC,SAASnyE,IAAS,CAAC,EAC5B,CACIA,QAEJs0E,GACA5gC,GAER,CACH,mBAAAuiD,CAAoBhY,EAAQ33E,EAAOZ,EAASw4E,EAAW,CAChD,KAEA,MAAMl1E,EAAS,CACXukF,SAAS,IAEP,SAAE5mB,EAAS,YAAE63C,GAAiBC,GAAYtkH,KAAK6jH,eAAgB//B,EAAQC,GAC7E,IAAIn0E,EAAU48D,GAsCtB,SAAqBoY,EAAOz4E,GACxB,MAAM,aAAE05E,EAAa,YAAEG,GAAiBrO,GAAaiN,GACrD,IAAK,MAAMlvE,KAAQvJ,EAAM,CACrB,MAAMm6E,EAAaT,EAAanwE,GAC1B6wE,EAAYP,EAAYtwE,GACxBxW,GAASqnF,GAAaD,IAAe1B,EAAMlvE,GACjD,GAAI4wE,IAAexZ,GAAW5tE,IAAUqlH,GAAYrlH,KAAWqnF,GAAa9xE,GAAQvV,GAChF,OAAO,CAEf,CACA,OAAO,CACX,EAhDYslH,CAAYh4C,EAAUrgE,KACtB0C,EAAOukF,SAAU,EAGjBxjF,EAAUy1E,GAAe7Y,EAFzBjhE,EAAUuhE,GAAWvhE,GAAWA,IAAYA,EACxBvL,KAAKu5F,eAAezV,EAAQv4E,EAAS84G,KAG7D,IAAK,MAAM3uG,KAAQvJ,EACf0C,EAAO6G,GAAQ9F,EAAQ8F,GAE3B,OAAO7G,CACX,CACH,cAAA0qF,CAAezV,EAAQv4E,EAASw4E,EAAW,CACpC,IACDwB,GACC,MAAM,SAAE/Y,GAAc83C,GAAYtkH,KAAK6jH,eAAgB//B,EAAQC,GAC/D,OAAO10E,GAAS9D,GAAW85E,GAAe7Y,EAAUjhE,OAAS3L,EAAW2lF,GAAsB/Y,CAClG,EAEJ,SAAS83C,GAAYG,EAAe3gC,EAAQC,GACxC,IAAIz9C,EAAQm+E,EAAclvG,IAAIuuE,GACzBx9C,IACDA,EAAQ,IAAIkH,IACZi3E,EAAcltG,IAAIusE,EAAQx9C,IAE9B,MAAM4H,EAAW61C,EAASplE,OAC1B,IAAIo3E,EAASzvD,EAAM/wB,IAAI24B,GASvB,OARK6nD,IAEDA,EAAS,CACLvpB,SAFaqX,GAAgBC,EAAQC,GAGrCsgC,YAAatgC,EAASl8E,OAAQ6hE,IAAKA,EAAEvkE,cAAcuP,SAAS,WAEhE4xB,EAAM/uB,IAAI22B,EAAU6nD,IAEjBA,CACX,CACA,MAAMwuB,GAAerlH,GAAQmQ,GAASnQ,IAAU+L,OAAOwyC,oBAAoBv+C,GAAO0oB,KAAM3gB,GAAM6lE,GAAW5tE,EAAM+H,KAgBzGy9G,GAAkB,CACpB,MACA,SACA,OACA,QACA,aAEJ,SAASC,GAAqBpmF,EAAU6zC,GACpC,MAAoB,QAAb7zC,GAAmC,WAAbA,IAAgE,IAAvCmmF,GAAgBvhH,QAAQo7B,IAA6B,MAAT6zC,CACtG,CACA,SAASwyC,GAAcC,EAAIC,GACvB,OAAO,SAAS57G,EAAGyE,GACf,OAAOzE,EAAE27G,KAAQl3G,EAAEk3G,GAAM37G,EAAE47G,GAAMn3G,EAAEm3G,GAAM57G,EAAE27G,GAAMl3G,EAAEk3G,EACvD,CACJ,CACA,SAASE,GAAqBx5G,GAC1B,MAAMorE,EAAQprE,EAAQorE,MAChBqc,EAAmBrc,EAAM/mE,QAAQioE,UACvClB,EAAMmiC,cAAc,eACpB9qF,GAASglE,GAAoBA,EAAiB1zE,WAAY,CACtD/T,GACDorE,EACP,CACA,SAASquC,GAAoBz5G,GACzB,MAAMorE,EAAQprE,EAAQorE,MAChBqc,EAAmBrc,EAAM/mE,QAAQioE,UACvC7pD,GAASglE,GAAoBA,EAAiBiyB,WAAY,CACtD15G,GACDorE,EACP,CACC,SAASuuC,GAAUl4C,GAShB,OARIgd,MAAqC,iBAAThd,EAC5BA,EAAOhuE,SAASC,eAAe+tE,GACxBA,GAAQA,EAAKvtE,SACpButE,EAAOA,EAAK,IAEZA,GAAQA,EAAKkR,SACblR,EAAOA,EAAKkR,QAETlR,CACX,CACA,MAAMm4C,GAAY,CAAC,EACbC,GAAYn+G,IACd,MAAMi3E,EAASgnC,GAAUj+G,GACzB,OAAOgE,OAAOoT,OAAO8mG,IAAWt9G,OAAQ4/B,GAAIA,EAAEy2C,SAAWA,GAAQ8S,OAErE,SAASq0B,GAAgB5vG,EAAK1U,EAAOq8F,GACjC,MAAMpqF,EAAO/H,OAAO+H,KAAKyC,GACzB,IAAK,MAAMxO,KAAO+L,EAAK,CACnB,MAAMsyG,GAAUr+G,EAChB,GAAIq+G,GAAUvkH,EAAO,CACjB,MAAM7B,EAAQuW,EAAIxO,UACXwO,EAAIxO,IACPm2F,EAAO,GAAKkoB,EAASvkH,KACrB0U,EAAI6vG,EAASloB,GAAQl+F,EAE7B,CACJ,CACJ,CAUA,MAAMqmH,GACFhtD,gBAAkB4hB,GAClB5hB,iBAAmB4sD,GACnB5sD,iBAAmBif,GACnBjf,gBAAkBgxC,GAClBhxC,eA3EU,QA4EVA,gBAAkB6sD,GAClB,eAAOx+D,IAAYsqB,GACfq4B,GAAS9gG,OAAOyoE,GAChBs0C,IACJ,CACA,iBAAO7F,IAAczuC,GACjBq4B,GAAShiG,UAAU2pE,GACnBs0C,IACJ,CACA,WAAA9kH,CAAYssE,EAAMy4C,GACd,MAAM9uD,EAAS32D,KAAK22D,OAAS,IAAI8sD,GAAOgC,GAClCC,EAAgBR,GAAUl4C,GAC1B24C,EAAgBP,GAASM,GAC/B,GAAIC,EACA,MAAM,IAAIx+F,MAAM,4CAA+Cw+F,EAAcr9F,GAA7D,kDAA6Hq9F,EAAcznC,OAAO51D,GAAK,oBAE3K,MAAM1Y,EAAU+mD,EAAO4iC,eAAe5iC,EAAOytD,oBAAqBpkH,KAAKm+E,cACvEn+E,KAAKk4E,SAAW,IAAKvhB,EAAOuhB,UAvmEpC,SAAyBgG,GACrB,OAAK8L,MAAgD,oBAApB47B,iBAAmC1nC,aAAkB0nC,gBAC3EhW,GAEJiC,EACX,CAkmEgDgU,CAAgBH,IACxD1lH,KAAKk4E,SAASy3B,aAAah5C,GAC3B,MAAMprD,EAAUvL,KAAKk4E,SAASq3B,eAAemW,EAAe91G,EAAQwwF,aAC9DliB,EAAS3yE,GAAWA,EAAQ2yE,OAC5BnqB,EAASmqB,GAAUA,EAAOnqB,OAC1B5hC,EAAQ+rD,GAAUA,EAAO/rD,MAC/BnyB,KAAKsoB,GAAKqiD,KACV3qE,KAAKy4E,IAAMltE,EACXvL,KAAKk+E,OAASA,EACdl+E,KAAKmyB,MAAQA,EACbnyB,KAAK+zD,OAASA,EACd/zD,KAAK8lH,SAAWl2G,EAChB5P,KAAK+lH,aAAe/lH,KAAKogG,YACzBpgG,KAAK6tG,QAAU,GACf7tG,KAAKgmH,UAAY,GACjBhmH,KAAKk1F,aAAUt1F,EACfI,KAAKktG,MAAQ,GACbltG,KAAK+9E,6BAA0Bn+E,EAC/BI,KAAK0vF,eAAY9vF,EACjBI,KAAK6wF,QAAU,GACf7wF,KAAKimH,gBAAarmH,EAClBI,KAAKkmH,WAAa,CAAC,EAClBlmH,KAAKmmH,0BAAuBvmH,EAC7BI,KAAKomH,gBAAkB,GACvBpmH,KAAKs5E,OAAS,CAAC,EACft5E,KAAKqmH,SAAW,IAAIpF,GACpBjhH,KAAKoyG,SAAW,CAAC,EACjBpyG,KAAKsmH,eAAiB,CAAC,EACvBtmH,KAAKumH,UAAW,EAChBvmH,KAAKq8F,yBAAsBz8F,EAC3BI,KAAK42F,cAAWh3F,EAChBI,KAAKwmH,UDp+JT,SAAkBl7G,EAAIq5B,GACtB,IAAI4iB,EACJ,OAAO,YAAYz+C,GAOf,OANI67B,GACA5iC,aAAawlD,GACbA,EAAUtlD,WAAWqJ,EAAIq5B,EAAO77B,IAEhCwC,EAAG+B,MAAMrN,KAAM8I,GAEZ67B,CACX,CACJ,CCy9JyB,CAAUE,GAAO7kC,KAAKo3B,OAAOyN,GAAOj1B,EAAQ62G,aAAe,GAC5EzmH,KAAKw9F,aAAe,GACpB2nB,GAAUnlH,KAAKsoB,IAAMtoB,KAChBuL,GAAY2yE,GAIjBqT,GAASx8B,OAAO/0D,KAAM,WAAY+kH,IAClCxzB,GAASx8B,OAAO/0D,KAAM,WAAYglH,IAClChlH,KAAK0mH,cACD1mH,KAAKumH,UACLvmH,KAAKo3B,UAPLz3B,QAAQ6E,MAAM,oEAStB,CACA,eAAI47F,GACA,MAAQxwF,SAAS,YAAEwwF,EAAY,oBAAErnB,GAAuB,MAAE5mD,EAAM,OAAE4hC,EAAO,aAAEgyD,GAAkB/lH,KAC7F,OAAK4qE,GAAcw1B,GAGfrnB,GAAuBgtC,EAChBA,EAEJhyD,EAAS5hC,EAAQ4hC,EAAS,KALtBqsC,CAMf,CACA,QAAIz8F,GACA,OAAO3D,KAAK22D,OAAOhzD,IACvB,CACA,QAAIA,CAAKA,GACL3D,KAAK22D,OAAOhzD,KAAOA,CACvB,CACA,WAAIiM,GACA,OAAO5P,KAAK8lH,QAChB,CACA,WAAIl2G,CAAQA,GACR5P,KAAK22D,OAAO/mD,QAAUA,CAC1B,CACA,YAAI25F,GACA,OAAOA,EACX,CACH,WAAAmd,GASO,OARA1mH,KAAK84G,cAAc,cACf94G,KAAK4P,QAAQwpE,WACbp5E,KAAK26E,SAELkR,GAAY7rF,KAAMA,KAAK4P,QAAQqoE,kBAEnCj4E,KAAK2mH,aACL3mH,KAAK84G,cAAc,aACZ94G,IACX,CACA,KAAAoiC,GAEI,OADA67C,GAAYj+E,KAAKk+E,OAAQl+E,KAAKy4E,KACvBz4E,IACX,CACA,IAAAsB,GAEI,OADAiwF,GAASjwF,KAAKtB,MACPA,IACX,CACH,MAAA26E,CAAOxoD,EAAO4hC,GACFw9B,GAASZ,QAAQ3wF,MAGlBA,KAAK4mH,kBAAoB,CACrBz0F,QACA4hC,UAJJ/zD,KAAK6mH,QAAQ10F,EAAO4hC,EAO5B,CACA,OAAA8yD,CAAQ10F,EAAO4hC,GACX,MAAMnkD,EAAU5P,KAAK4P,QACfsuE,EAASl+E,KAAKk+E,OACdkiB,EAAcxwF,EAAQmpE,qBAAuB/4E,KAAKogG,YAClD0mB,EAAU9mH,KAAKk4E,SAASu3B,eAAevxB,EAAQ/rD,EAAO4hC,EAAQqsC,GAC9D2mB,EAAWn3G,EAAQqoE,kBAAoBj4E,KAAKk4E,SAASC,sBACrDtzC,EAAO7kC,KAAKmyB,MAAQ,SAAW,SACrCnyB,KAAKmyB,MAAQ20F,EAAQ30F,MACrBnyB,KAAK+zD,OAAS+yD,EAAQ/yD,OACtB/zD,KAAK+lH,aAAe/lH,KAAKogG,YACpBvU,GAAY7rF,KAAM+mH,GAAU,KAGjC/mH,KAAK84G,cAAc,SAAU,CACzB/2E,KAAM+kF,IAEV94F,GAASpe,EAAQo3G,SAAU,CACvBhnH,KACA8mH,GACD9mH,MACCA,KAAKumH,UACDvmH,KAAKwmH,UAAU3hF,IACf7kC,KAAKwqB,SAGjB,CACA,mBAAAy8F,GAGI77C,GAFgBprE,KAAK4P,QACS0pE,QAAU,CAAC,EACrB,CAAC4tC,EAAalf,KAC9Bkf,EAAY5+F,GAAK0/E,GAEzB,CACH,mBAAAmf,GACO,MAAMv3G,EAAU5P,KAAK4P,QACfw3G,EAAYx3G,EAAQ0pE,OACpBA,EAASt5E,KAAKs5E,OACd+tC,EAAUp8G,OAAO+H,KAAKsmE,GAAQ/6D,OAAO,CAAC9I,EAAK6S,KAC7C7S,EAAI6S,IAAM,EACH7S,GACR,CAAC,GACJ,IAAIy7D,EAAQ,GACRk2C,IACAl2C,EAAQA,EAAM7kE,OAAOpB,OAAO+H,KAAKo0G,GAAWl/G,IAAKogB,IAC7C,MAAM85F,EAAegF,EAAU9+F,GACzB8pD,EAAO+vC,GAAc75F,EAAI85F,GACzBkF,EAAoB,MAATl1C,EACXizB,EAAwB,MAATjzB,EACrB,MAAO,CACHxiE,QAASwyG,EACTmF,UAAWD,EAAW,YAAcjiB,EAAe,SAAW,OAC9DmiB,MAAOF,EAAW,eAAiBjiB,EAAe,WAAa,cAI3Ej6B,GAAK8F,EAAQlE,IACT,MAAMo1C,EAAep1C,EAAKp9D,QACpB0Y,EAAK85F,EAAa95F,GAClB8pD,EAAO+vC,GAAc75F,EAAI85F,GACzBqF,EAAYz8C,GAAeo3C,EAAav8G,KAAMmnE,EAAKw6C,YAC3B5nH,IAA1BwiH,EAAa7jF,UAA0BomF,GAAqBvC,EAAa7jF,SAAU6zC,KAAUuyC,GAAqB33C,EAAKu6C,aACvHnF,EAAa7jF,SAAWyuC,EAAKu6C,WAEjCF,EAAQ/+F,IAAM,EACd,IAAI+wD,EAAQ,KACR/wD,KAAMgxD,GAAUA,EAAOhxD,GAAIziB,OAAS4hH,EACpCpuC,EAAQC,EAAOhxD,IAGf+wD,EAAQ,IADWkwB,GAAS8W,SAASoH,GAC7B,CAAe,CACnBn/F,KACAziB,KAAM4hH,EACNhvC,IAAKz4E,KAAKy4E,IACV9B,MAAO32E,OAEXs5E,EAAOD,EAAM/wD,IAAM+wD,GAEvBA,EAAMswB,KAAKyY,EAAcxyG,KAE7Bw7D,GAAKi8C,EAAS,CAACK,EAAYp/F,KAClBo/F,UACMpuC,EAAOhxD,KAGtB8iD,GAAKkO,EAASD,IACVs0B,GAAQ5a,UAAU/yF,KAAMq5E,EAAOA,EAAMzpE,SACrC+9F,GAAQC,OAAO5tG,KAAMq5E,IAE7B,CACH,eAAAsuC,GACO,MAAM7zB,EAAW9zF,KAAKgmH,UAChB/oB,EAAUj9F,KAAK2D,KAAKq0E,SAASv4E,OAC7Bu9F,EAAUlJ,EAASr0F,OAEzB,GADAq0F,EAAS7mD,KAAK,CAAC/jC,EAAGyE,IAAIzE,EAAEiG,MAAQxB,EAAEwB,OAC9B6tF,EAAUC,EAAS,CACnB,IAAI,IAAIz9F,EAAIy9F,EAASz9F,EAAIw9F,IAAWx9F,EAChCQ,KAAK4nH,oBAAoBpoH,GAE7Bs0F,EAAS7/E,OAAOgpF,EAASD,EAAUC,EACvC,CACAj9F,KAAKomH,gBAAkBtyB,EAAS5wF,MAAM,GAAG+pC,KAAK23E,GAAc,QAAS,SACzE,CACH,2BAAAiD,GACO,MAAQ7B,UAAWlyB,EAAWnwF,MAAM,SAAEq0E,IAAiBh4E,KACnD8zF,EAASr0F,OAASu4E,EAASv4E,eACpBO,KAAKk1F,QAEhBpB,EAAS1wD,QAAQ,CAACxH,EAAMzsB,KACqC,IAArD6oE,EAASnwE,OAAQmiB,GAAIA,IAAM4R,EAAK0sE,UAAU7oG,QAC1CO,KAAK4nH,oBAAoBz4G,IAGrC,CACA,wBAAA24G,GACI,MAAMC,EAAiB,GACjB/vC,EAAWh4E,KAAK2D,KAAKq0E,SAC3B,IAAIx4E,EAAGgsE,EAEP,IADAxrE,KAAK6nH,8BACDroH,EAAI,EAAGgsE,EAAOwM,EAASv4E,OAAQD,EAAIgsE,EAAMhsE,IAAI,CAC7C,MAAMqsC,EAAUmsC,EAASx4E,GACzB,IAAIo8B,EAAO57B,KAAKm4F,eAAe34F,GAC/B,MAAMqG,EAAOgmC,EAAQhmC,MAAQ7F,KAAK22D,OAAO9wD,KAWzC,GAVI+1B,EAAK/1B,MAAQ+1B,EAAK/1B,OAASA,IAC3B7F,KAAK4nH,oBAAoBpoH,GACzBo8B,EAAO57B,KAAKm4F,eAAe34F,IAE/Bo8B,EAAK/1B,KAAOA,EACZ+1B,EAAKg9C,UAAY/sC,EAAQ+sC,WAAampC,GAAal8G,EAAM7F,KAAK4P,SAC9DgsB,EAAKosF,MAAQn8E,EAAQm8E,OAAS,EAC9BpsF,EAAKzsB,MAAQ3P,EACbo8B,EAAK0tB,MAAQ,GAAKzd,EAAQyd,MAC1B1tB,EAAK5K,QAAUhxB,KAAKshG,iBAAiB9hG,GACjCo8B,EAAKuV,WACLvV,EAAKuV,WAAWimD,YAAY53F,GAC5Bo8B,EAAKuV,WAAW6lD,iBACb,CACH,MAAMixB,EAAkB1e,GAAS2W,cAAcr6G,IACzC,mBAAEixF,EAAmB,gBAAEC,GAAqB5c,GAASnC,SAASnyE,GACpEoF,OAAOuc,OAAOygG,EAAiB,CAC3BlxB,gBAAiBwS,GAASC,WAAWzS,GACrCD,mBAAoBA,GAAsByS,GAASC,WAAW1S,KAElEl7D,EAAKuV,WAAa,IAAI82E,EAAgBjoH,KAAMR,GAC5CuoH,EAAe7nH,KAAK07B,EAAKuV,WAC7B,CACJ,CAEA,OADAnxC,KAAK2nH,kBACEI,CACX,CACH,cAAAG,GACO98C,GAAKprE,KAAK2D,KAAKq0E,SAAU,CAACnsC,EAAS8/B,KAC/B3rE,KAAKm4F,eAAexsB,GAAcx6B,WAAWmnD,SAC9Ct4F,KACP,CACH,KAAAs4F,GACOt4F,KAAKkoH,iBACLloH,KAAK84G,cAAc,QACvB,CACA,MAAA1hF,CAAOyN,GACH,MAAM8xB,EAAS32D,KAAK22D,OACpBA,EAAOv/B,SACP,MAAMxnB,EAAU5P,KAAK8lH,SAAWnvD,EAAO4iC,eAAe5iC,EAAOytD,oBAAqBpkH,KAAKm+E,cACjFgqC,EAAgBnoH,KAAKq8F,qBAAuBzsF,EAAQioE,UAK1D,GAJA73E,KAAKooH,gBACLpoH,KAAKqoH,sBACLroH,KAAKsoH,uBACLtoH,KAAKqmH,SAASh7F,cAIP,IAHHrrB,KAAK84G,cAAc,eAAgB,CACnCj0E,OACAvnB,YAAY,IAEZ,OAEJ,MAAMyqG,EAAiB/nH,KAAK8nH,2BAC5B9nH,KAAK84G,cAAc,wBACnB,IAAI7K,EAAa,EACjB,IAAI,IAAIzuG,EAAI,EAAGgsE,EAAOxrE,KAAK2D,KAAKq0E,SAASv4E,OAAQD,EAAIgsE,EAAMhsE,IAAI,CAC3D,MAAM,WAAE2xC,GAAgBnxC,KAAKm4F,eAAe34F,GACtC84F,GAAS6vB,IAAyD,IAAxCJ,EAAe5kH,QAAQguC,GACvDA,EAAW4nD,sBAAsBT,GACjC2V,EAAa5rG,KAAKmN,KAAK2hC,EAAW6pD,iBAAkBiT,EACxD,CACAA,EAAajuG,KAAKuoH,YAAc34G,EAAQ08F,OAAOzxB,YAAcozB,EAAa,EAC1EjuG,KAAKwoH,cAAcva,GACdka,GACD/8C,GAAK28C,EAAiB52E,IAClBA,EAAWmnD,UAGnBt4F,KAAKyoH,gBAAgB5jF,GACrB7kC,KAAK84G,cAAc,cAAe,CAC9Bj0E,SAEJ7kC,KAAK6tG,QAAQ5gE,KAAK23E,GAAc,IAAK,SACrC,MAAM,QAAE/zB,EAAQ,WAAEo1B,GAAgBjmH,KAC9BimH,EACAjmH,KAAK0oH,cAAczC,GAAY,GACxBp1B,EAAQpxF,QACfO,KAAK2oH,mBAAmB93B,EAASA,GAAS,GAE9C7wF,KAAKwqB,QACT,CACH,aAAA49F,GACOh9C,GAAKprE,KAAKs5E,OAASD,IACfs0B,GAAQI,UAAU/tG,KAAMq5E,KAE5Br5E,KAAKinH,sBACLjnH,KAAKmnH,qBACT,CACH,mBAAAkB,GACO,MAAMz4G,EAAU5P,KAAK4P,QACfg5G,EAAiB,IAAI5pF,IAAI/zB,OAAO+H,KAAKhT,KAAKkmH,aAC1C2C,EAAY,IAAI7pF,IAAIpvB,EAAQvK,QAC7B0nE,GAAU67C,EAAgBC,MAAgB7oH,KAAKmmH,uBAAyBv2G,EAAQwpE,aACjFp5E,KAAK8oH,eACL9oH,KAAK2mH,aAEb,CACH,oBAAA2B,GACO,MAAM,eAAEhC,GAAoBtmH,KACtB+oH,EAAU/oH,KAAKgpH,0BAA4B,GACjD,IAAK,MAAM,OAAE3oG,EAAO,MAAEtf,EAAM,MAAE+wE,KAAYi3C,EAEtC1D,GAAgBiB,EAAgBvlH,EADR,oBAAXsf,GAAgCyxD,EAAQA,EAG7D,CACH,sBAAAk3C,GACO,MAAMxrB,EAAex9F,KAAKw9F,aAC1B,IAAKA,IAAiBA,EAAa/9F,OAC/B,OAEJO,KAAKw9F,aAAe,GACpB,MAAMyrB,EAAejpH,KAAK2D,KAAKq0E,SAASv4E,OAClCypH,EAAWp2G,GAAM,IAAIksB,IAAIw+D,EAAa31F,OAAQ4/B,GAAIA,EAAE,KAAO30B,GAAK5K,IAAI,CAACu/B,EAAGjoC,IAAIA,EAAI,IAAMioC,EAAExzB,OAAO,GAAG0K,KAAK,OACvGwqG,EAAYD,EAAQ,GAC1B,IAAI,IAAI1pH,EAAI,EAAGA,EAAIypH,EAAczpH,IAC7B,IAAKutE,GAAUo8C,EAAWD,EAAQ1pH,IAC9B,OAGR,OAAOkN,MAAMmS,KAAKsqG,GAAWjhH,IAAKu/B,GAAIA,EAAEr1B,MAAM,MAAMlK,IAAKgB,IAAI,CACrDmX,OAAQnX,EAAE,GACVnI,OAAQmI,EAAE,GACV4oE,OAAQ5oE,EAAE,KAEtB,CACH,aAAAs/G,CAAcva,GACP,IAEO,IAFHjuG,KAAK84G,cAAc,eAAgB,CACnCx7F,YAAY,IAEZ,OAEJqwF,GAAQv2E,OAAOp3B,KAAMA,KAAKmyB,MAAOnyB,KAAK+zD,OAAQk6C,GAC9C,MAAMluB,EAAO//E,KAAK0vF,UACZ05B,EAASrpC,EAAK5tD,OAAS,GAAK4tD,EAAKhsB,QAAU,EACjD/zD,KAAK6tG,QAAU,GACfziC,GAAKprE,KAAKktG,MAAQ/hB,IACVi+B,GAA2B,cAAjBj+B,EAAI5sD,WAGd4sD,EAAI4H,WACJ5H,EAAI4H,YAER/yF,KAAK6tG,QAAQ3tG,QAAQirF,EAAI0iB,aAC1B7tG,MACHA,KAAK6tG,QAAQzqE,QAAQ,CAAC4pC,EAAM79D,KACxB69D,EAAKq8C,KAAOl6G,IAEhBnP,KAAK84G,cAAc,cACvB,CACH,eAAA2P,CAAgB5jF,GACT,IAGO,IAHH7kC,KAAK84G,cAAc,uBAAwB,CAC3Cj0E,OACAvnB,YAAY,IAFhB,CAMA,IAAI,IAAI9d,EAAI,EAAGgsE,EAAOxrE,KAAK2D,KAAKq0E,SAASv4E,OAAQD,EAAIgsE,IAAQhsE,EACzDQ,KAAKm4F,eAAe34F,GAAG2xC,WAAW4hD,YAEtC,IAAI,IAAIvzF,EAAI,EAAGgsE,EAAOxrE,KAAK2D,KAAKq0E,SAASv4E,OAAQD,EAAIgsE,IAAQhsE,EACzDQ,KAAKspH,eAAe9pH,EAAGstE,GAAWjoC,GAAQA,EAAK,CAC3C8mC,aAAcnsE,IACbqlC,GAET7kC,KAAK84G,cAAc,sBAAuB,CACtCj0E,QAVJ,CAYJ,CACH,cAAAykF,CAAen6G,EAAO01B,GACf,MAAMjJ,EAAO57B,KAAKm4F,eAAehpF,GAC3BrG,EAAO,CACT8yB,OACAzsB,QACA01B,OACAvnB,YAAY,IAEwC,IAApDtd,KAAK84G,cAAc,sBAAuBhwG,KAG9C8yB,EAAKuV,WAAWs/C,QAAQ5rD,GACxB/7B,EAAKwU,YAAa,EAClBtd,KAAK84G,cAAc,qBAAsBhwG,GAC7C,CACA,MAAA0hB,IAGW,IAFHxqB,KAAK84G,cAAc,eAAgB,CACnCx7F,YAAY,MAIZi0E,GAASvmF,IAAIhL,MACTA,KAAKumH,WAAah1B,GAASZ,QAAQ3wF,OACnCuxF,GAASxwF,MAAMf,OAGnBA,KAAK4wF,OACLm0B,GAAqB,CACjBpuC,MAAO32E,QAGnB,CACA,IAAA4wF,GACI,IAAIpxF,EACJ,GAAIQ,KAAK4mH,kBAAmB,CACxB,MAAM,MAAEz0F,EAAM,OAAE4hC,GAAY/zD,KAAK4mH,kBACjC5mH,KAAK4mH,kBAAoB,KACzB5mH,KAAK6mH,QAAQ10F,EAAO4hC,EACxB,CAEA,GADA/zD,KAAKoiC,QACDpiC,KAAKmyB,OAAS,GAAKnyB,KAAK+zD,QAAU,EAClC,OAEJ,IAEO,IAFH/zD,KAAK84G,cAAc,aAAc,CACjCx7F,YAAY,IAEZ,OAEJ,MAAMisG,EAASvpH,KAAK6tG,QACpB,IAAIruG,EAAI,EAAGA,EAAI+pH,EAAO9pH,QAAU8pH,EAAO/pH,GAAGsuG,GAAK,IAAKtuG,EAChD+pH,EAAO/pH,GAAGoxF,KAAK5wF,KAAK0vF,WAGxB,IADA1vF,KAAKwpH,gBACChqH,EAAI+pH,EAAO9pH,SAAUD,EACvB+pH,EAAO/pH,GAAGoxF,KAAK5wF,KAAK0vF,WAExB1vF,KAAK84G,cAAc,YACvB,CACH,sBAAA/kB,CAAuBF,GAChB,MAAMC,EAAW9zF,KAAKomH,gBAChBv3G,EAAS,GACf,IAAIrP,EAAGgsE,EACP,IAAIhsE,EAAI,EAAGgsE,EAAOsoB,EAASr0F,OAAQD,EAAIgsE,IAAQhsE,EAAE,CAC7C,MAAMo8B,EAAOk4D,EAASt0F,GACjBq0F,IAAiBj4D,EAAK5K,SACvBniB,EAAO3O,KAAK07B,EAEpB,CACA,OAAO/sB,CACX,CACH,4BAAAy7F,GACO,OAAOtqG,KAAK+zF,wBAAuB,EACvC,CACH,aAAAy1B,GACO,IAEO,IAFHxpH,KAAK84G,cAAc,qBAAsB,CACzCx7F,YAAY,IAEZ,OAEJ,MAAMw2E,EAAW9zF,KAAKsqG,+BACtB,IAAI,IAAI9qG,EAAIs0F,EAASr0F,OAAS,EAAGD,GAAK,IAAKA,EACvCQ,KAAKypH,aAAa31B,EAASt0F,IAE/BQ,KAAK84G,cAAc,oBACvB,CACH,YAAA2Q,CAAa7tF,GACN,MAAM68C,EAAMz4E,KAAKy4E,IACX3vE,EAAO,CACT8yB,OACAzsB,MAAOysB,EAAKzsB,MACZmO,YAAY,GAEV69D,EAAOyU,GAAmB5vF,KAAM47B,IACgB,IAAlD57B,KAAK84G,cAAc,oBAAqBhwG,KAGxCqyE,GACA6E,GAASvH,EAAK0C,GAElBv/C,EAAKuV,WAAWy/C,OACZzV,GACA8E,GAAWxH,GAEf3vE,EAAKwU,YAAa,EAClBtd,KAAK84G,cAAc,mBAAoBhwG,GAC3C,CACH,aAAA2hG,CAAc/3B,GACP,OAAOoN,GAAepN,EAAO1yE,KAAK0vF,UAAW1vF,KAAKuoH,YACtD,CACA,yBAAAmB,CAA0B96G,EAAGi2B,EAAMj1B,EAAS46F,GACxC,MAAMnqF,EAASqrF,GAAYC,MAAM9mE,GACjC,MAAsB,mBAAXxkB,EACAA,EAAOrgB,KAAM4O,EAAGgB,EAAS46F,GAE7B,EACX,CACA,cAAArS,CAAexsB,GACX,MAAM9/B,EAAU7rC,KAAK2D,KAAKq0E,SAASrM,GAC7BmoB,EAAW9zF,KAAKgmH,UACtB,IAAIpqF,EAAOk4D,EAASjsF,OAAQmiB,GAAIA,GAAKA,EAAEs+E,WAAaz8D,GAASmlD,MAkB7D,OAjBKp1D,IACDA,EAAO,CACH/1B,KAAM,KACNlC,KAAM,GACNkoC,QAAS,KACTsF,WAAY,KACZz6B,OAAQ,KACR8gF,QAAS,KACTE,QAAS,KACTswB,MAAOn8E,GAAWA,EAAQm8E,OAAS,EACnC74G,MAAOw8D,EACP28B,SAAUz8D,EACVqmC,QAAS,GACTH,SAAS,GAEb+hB,EAAS5zF,KAAK07B,IAEXA,CACX,CACA,UAAAuiD,GACI,OAAOn+E,KAAK42F,WAAa52F,KAAK42F,SAAWjT,GAAc,KAAM,CACzDhN,MAAO32E,KACP6F,KAAM,UAEd,CACA,sBAAAu+F,GACI,OAAOpkG,KAAKsqG,+BAA+B7qG,MAC/C,CACA,gBAAA6hG,CAAiB31B,GACb,MAAM9/B,EAAU7rC,KAAK2D,KAAKq0E,SAASrM,GACnC,IAAK9/B,EACD,OAAO,EAEX,MAAMjQ,EAAO57B,KAAKm4F,eAAexsB,GACjC,MAA8B,kBAAhB/vC,EAAKllB,QAAwBklB,EAAKllB,QAAUm1B,EAAQn1B,MACtE,CACA,oBAAAizG,CAAqBh+C,EAAc36C,GAClBhxB,KAAKm4F,eAAexsB,GAC5Bj1D,QAAUsa,CACnB,CACA,oBAAA+vE,CAAqB5xF,GACjBnP,KAAKsmH,eAAen3G,IAAUnP,KAAKsmH,eAAen3G,EACtD,CACA,iBAAAuxF,CAAkBvxF,GACd,OAAQnP,KAAKsmH,eAAen3G,EAChC,CACH,iBAAAy6G,CAAkBj+C,EAAc4vB,EAAWvqE,GACpC,MAAM6T,EAAO7T,EAAU,OAAS,OAC1B4K,EAAO57B,KAAKm4F,eAAexsB,GAC3BykB,EAAQx0D,EAAKuV,WAAW4qD,wBAAmBn8F,EAAWilC,GACxDgoC,GAAQ0uB,IACR3/D,EAAKj4B,KAAK43F,GAAW7kF,QAAUsa,EAC/BhxB,KAAKo3B,WAELp3B,KAAK2pH,qBAAqBh+C,EAAc36C,GACxCo/D,EAAMh5D,OAAOwE,EAAM,CACf5K,YAEJhxB,KAAKo3B,OAAQqhD,GAAMA,EAAI9M,eAAiBA,EAAe9mC,OAAOjlC,GAEtE,CACA,IAAA+xB,CAAKg6C,EAAc4vB,GACfv7F,KAAK4pH,kBAAkBj+C,EAAc4vB,GAAW,EACpD,CACA,IAAA/pE,CAAKm6C,EAAc4vB,GACfv7F,KAAK4pH,kBAAkBj+C,EAAc4vB,GAAW,EACpD,CACH,mBAAAqsB,CAAoBj8C,GACb,MAAM/vC,EAAO57B,KAAKgmH,UAAUr6C,GACxB/vC,GAAQA,EAAKuV,YACbvV,EAAKuV,WAAWonD,kBAEbv4F,KAAKgmH,UAAUr6C,EAC1B,CACA,KAAAk+C,GACI,IAAIrqH,EAAGgsE,EAGP,IAFAxrE,KAAKsB,OACLiwF,GAAShqF,OAAOvH,MACZR,EAAI,EAAGgsE,EAAOxrE,KAAK2D,KAAKq0E,SAASv4E,OAAQD,EAAIgsE,IAAQhsE,EACrDQ,KAAK4nH,oBAAoBpoH,EAEjC,CACA,OAAAyzD,GACIjzD,KAAK84G,cAAc,iBACnB,MAAM,OAAE56B,EAAO,IAAEzF,GAASz4E,KAC1BA,KAAK6pH,QACL7pH,KAAK22D,OAAOlyB,aACRy5C,IACAl+E,KAAK8oH,eACL7qC,GAAYC,EAAQzF,GACpBz4E,KAAKk4E,SAASs3B,eAAe/2B,GAC7Bz4E,KAAKk+E,OAAS,KACdl+E,KAAKy4E,IAAM,aAER0sC,GAAUnlH,KAAKsoB,IACtBtoB,KAAK84G,cAAc,eACvB,CACA,aAAAgR,IAAiBhhH,GACb,OAAO9I,KAAKk+E,OAAO6rC,aAAajhH,EACpC,CACH,UAAA69G,GACO3mH,KAAKgqH,iBACDhqH,KAAK4P,QAAQwpE,WACbp5E,KAAKiqH,uBAELjqH,KAAKumH,UAAW,CAExB,CACH,cAAAyD,GACO,MAAM19G,EAAYtM,KAAKkmH,WACjBhuC,EAAWl4E,KAAKk4E,SAChBgyC,EAAO,CAACrkH,EAAM8F,KAChBusE,EAAS92E,iBAAiBpB,KAAM6F,EAAM8F,GACtCW,EAAUzG,GAAQ8F,GAEhBA,EAAW,CAACiD,EAAGob,EAAGC,KACpBrb,EAAEy8E,QAAUrhE,EACZpb,EAAE08E,QAAUrhE,EACZjqB,KAAK0oH,cAAc95G,IAEvBw8D,GAAKprE,KAAK4P,QAAQvK,OAASQ,GAAOqkH,EAAKrkH,EAAM8F,GACjD,CACH,oBAAAs+G,GACYjqH,KAAKmmH,uBACNnmH,KAAKmmH,qBAAuB,CAAC,GAEjC,MAAM75G,EAAYtM,KAAKmmH,qBACjBjuC,EAAWl4E,KAAKk4E,SAChBgyC,EAAO,CAACrkH,EAAM8F,KAChBusE,EAAS92E,iBAAiBpB,KAAM6F,EAAM8F,GACtCW,EAAUzG,GAAQ8F,GAEhBw+G,EAAU,CAACtkH,EAAM8F,KACfW,EAAUzG,KACVqyE,EAAS12E,oBAAoBxB,KAAM6F,EAAM8F,UAClCW,EAAUzG,KAGnB8F,EAAW,CAACwmB,EAAO4hC,KACjB/zD,KAAKk+E,QACLl+E,KAAK26E,OAAOxoD,EAAO4hC,IAG3B,IAAIq2D,EACJ,MAAM7D,EAAW,KACb4D,EAAQ,SAAU5D,GAClBvmH,KAAKumH,UAAW,EAChBvmH,KAAK26E,SACLuvC,EAAK,SAAUv+G,GACfu+G,EAAK,SAAUE,IAEnBA,EAAW,KACPpqH,KAAKumH,UAAW,EAChB4D,EAAQ,SAAUx+G,GAClB3L,KAAK6pH,QACL7pH,KAAK6mH,QAAQ,EAAG,GAChBqD,EAAK,SAAU3D,IAEfruC,EAASw3B,WAAW1vG,KAAKk+E,QACzBqoC,IAEA6D,GAER,CACH,YAAAtB,GACO19C,GAAKprE,KAAKkmH,WAAY,CAACv6G,EAAU9F,KAC7B7F,KAAKk4E,SAAS12E,oBAAoBxB,KAAM6F,EAAM8F,KAElD3L,KAAKkmH,WAAa,CAAC,EACnB96C,GAAKprE,KAAKmmH,qBAAsB,CAACx6G,EAAU9F,KACvC7F,KAAKk4E,SAAS12E,oBAAoBxB,KAAM6F,EAAM8F,KAElD3L,KAAKmmH,0BAAuBvmH,CAChC,CACA,gBAAAyqH,CAAiBn5C,EAAOrsC,EAAM5kC,GAC1B,MAAMkL,EAASlL,EAAU,MAAQ,SACjC,IAAI27B,EAAMoxC,EAAMxtE,EAAGgsE,EAKnB,IAJa,YAAT3mC,IACAjJ,EAAO57B,KAAKm4F,eAAejnB,EAAM,GAAGvF,cACpC/vC,EAAKuV,WAAW,IAAMhmC,EAAS,wBAE/B3L,EAAI,EAAGgsE,EAAO0F,EAAMzxE,OAAQD,EAAIgsE,IAAQhsE,EAAE,CAC1CwtE,EAAOkE,EAAM1xE,GACb,MAAM2xC,EAAa67B,GAAQhtE,KAAKm4F,eAAenrB,EAAKrB,cAAcx6B,WAC9DA,GACAA,EAAWhmC,EAAS,cAAc6hE,EAAKrjE,QAASqjE,EAAKrB,aAAcqB,EAAK79D,MAEhF,CACJ,CACH,iBAAAm7G,GACO,OAAOtqH,KAAK6wF,SAAW,EAC3B,CACH,iBAAA05B,CAAkBC,GACX,MAAMC,EAAazqH,KAAK6wF,SAAW,GAC7BnW,EAAS8vC,EAAetiH,IAAI,EAAGyjE,eAAex8D,YAChD,MAAMysB,EAAO57B,KAAKm4F,eAAexsB,GACjC,IAAK/vC,EACD,MAAM,IAAIzU,MAAM,6BAA+BwkD,GAEnD,MAAO,CACHA,eACAhiE,QAASiyB,EAAKj4B,KAAKwL,GACnBA,YAGSm8D,GAAeoP,EAAQ+vC,KAEpCzqH,KAAK6wF,QAAUnW,EACf16E,KAAKimH,WAAa,KAClBjmH,KAAK2oH,mBAAmBjuC,EAAQ+vC,GAExC,CACH,aAAA3R,CAAcqI,EAAMr4G,EAAMjB,GACnB,OAAO7H,KAAKqmH,SAAS//G,OAAOtG,KAAMmhH,EAAMr4G,EAAMjB,EAClD,CACH,eAAAsvF,CAAgBuzB,GACT,OAA6E,IAAtE1qH,KAAKqmH,SAASroB,OAAOn2F,OAAQ6hE,GAAIA,EAAE23C,OAAO/4F,KAAOoiG,GAAUjrH,MACtE,CACH,kBAAAkpH,CAAmBjuC,EAAQ+vC,EAAYE,GAChC,MAAMC,EAAe5qH,KAAK4P,QAAQ2oE,MAC5BsxB,EAAO,CAAC3gG,EAAGyE,IAAIzE,EAAErB,OAAQmiB,IAAKrc,EAAEia,KAAMqC,GAAID,EAAE2hD,eAAiB1hD,EAAE0hD,cAAgB3hD,EAAE7a,QAAU8a,EAAE9a,QAC7F07G,EAAchhB,EAAK4gB,EAAY/vC,GAC/BowC,EAAYH,EAASjwC,EAASmvB,EAAKnvB,EAAQ+vC,GAC7CI,EAAYprH,QACZO,KAAKqqH,iBAAiBQ,EAAaD,EAAa/lF,MAAM,GAEtDimF,EAAUrrH,QAAUmrH,EAAa/lF,MACjC7kC,KAAKqqH,iBAAiBS,EAAWF,EAAa/lF,MAAM,EAE5D,CACH,aAAA6jF,CAAc95G,EAAG+7G,GACV,MAAM7hH,EAAO,CACTrD,MAAOmJ,EACP+7G,SACArtG,YAAY,EACZytG,YAAa/qH,KAAKyqG,cAAc77F,IAE9BihC,EAAewxE,IAAUA,EAAOzxG,QAAQvK,QAAUrF,KAAK4P,QAAQvK,QAAQqP,SAAS9F,EAAE+iG,OAAO9rG,MAC/F,IAA6D,IAAzD7F,KAAK84G,cAAc,cAAehwG,EAAM+mC,GACxC,OAEJ,MAAMwjC,EAAUrzE,KAAKgrH,aAAap8G,EAAG+7G,EAAQ7hH,EAAKiiH,aAMlD,OALAjiH,EAAKwU,YAAa,EAClBtd,KAAK84G,cAAc,aAAchwG,EAAM+mC,IACnCwjC,GAAWvqE,EAAKuqE,UAChBrzE,KAAKwqB,SAEFxqB,IACX,CACH,YAAAgrH,CAAap8G,EAAG+7G,EAAQI,GACjB,MAAQl6B,QAAS45B,EAAa,GAAG,QAAE76G,GAAa5P,KAC1CwqG,EAAmBmgB,EACnBjwC,EAAS16E,KAAKirH,mBAAmBr8G,EAAG67G,EAAYM,EAAavgB,GAC7D0gB,ED1/LV,SAAuBt8G,GACvB,MAAkB,YAAXA,EAAE/I,MAAiC,UAAX+I,EAAE/I,MAA+B,gBAAX+I,EAAE/I,IAC3D,CCw/LwBslH,CAAcv8G,GACxBw8G,EA1xBb,SAA4Bx8G,EAAGw8G,EAAWL,EAAaG,GACpD,OAAKH,GAA0B,aAAXn8G,EAAE/I,KAGlBqlH,EACOE,EAEJx8G,EALI,IAMf,CAkxB0By8G,CAAmBz8G,EAAG5O,KAAKimH,WAAY8E,EAAaG,GAClEH,IACA/qH,KAAKimH,WAAa,KAClBj4F,GAASpe,EAAQopE,QAAS,CACtBpqE,EACA8rE,EACA16E,MACDA,MACCkrH,GACAl9F,GAASpe,EAAQqpE,QAAS,CACtBrqE,EACA8rE,EACA16E,MACDA,OAGX,MAAMqzE,GAAW/H,GAAeoP,EAAQ+vC,GAMxC,OALIp3C,GAAWs3C,KACX3qH,KAAK6wF,QAAUnW,EACf16E,KAAK2oH,mBAAmBjuC,EAAQ+vC,EAAYE,IAEhD3qH,KAAKimH,WAAamF,EACX/3C,CACX,CACH,kBAAA43C,CAAmBr8G,EAAG67G,EAAYM,EAAavgB,GACxC,GAAe,aAAX57F,EAAE/I,KACF,MAAO,GAEX,IAAKklH,EACD,OAAON,EAEX,MAAMG,EAAe5qH,KAAK4P,QAAQ2oE,MAClC,OAAOv4E,KAAK0pH,0BAA0B96G,EAAGg8G,EAAa/lF,KAAM+lF,EAAcpgB,EAC9E,EAEJ,SAASgb,KACL,OAAOp6C,GAAKm6C,GAAMJ,UAAYxuC,GAAQA,EAAM0vC,SAASh7F,aACzD,CAgFI,SAASigG,GAAW/uD,EAAGgvD,EAAOvhG,EAAGC,GACjC,MAAO,CACHD,EAAGA,EAAIuyC,EAAIl6D,KAAKoyE,IAAI82C,GACpBthG,EAAGA,EAAIsyC,EAAIl6D,KAAKmxE,IAAI+3C,GAE5B,CAcI,SAASC,GAAQ/yC,EAAK9uE,EAASqxE,EAAQmlB,EAASp9C,EAAKghD,GACrD,MAAM,EAAE/5E,EAAE,EAAEC,EAAI83E,WAAYhhG,EAAM,YAAE0qH,EAAczqB,YAAa0qB,GAAY/hH,EACrEs3F,EAAc5+F,KAAKmN,IAAI7F,EAAQs3F,YAAcd,EAAUnlB,EAASywC,EAAa,GAC7EzqB,EAAc0qB,EAAS,EAAIA,EAASvrB,EAAUnlB,EAASywC,EAAc,EAC3E,IAAIE,EAAgB,EACpB,MAAMziD,EAAQnmB,EAAMhiD,EACpB,GAAIo/F,EAAS,CAIT,MAEMyrB,IAFuBF,EAAS,EAAIA,EAASvrB,EAAU,IAChCc,EAAc,EAAIA,EAAcd,EAAU,IACI,EAE3EwrB,GAAiBziD,GAD4B,IAAvB0iD,EAA2B1iD,EAAQ0iD,GAAsBA,EAAqBzrB,GAAWj3B,IACrE,CAC9C,CACA,MACM2iD,GAAe3iD,EADR7mE,KAAKmN,IAAI,KAAO05D,EAAQ+3B,EAAcjmB,EAAS/N,IAAMg0B,GAC7B,EAC/Bc,EAAahhG,EAAQ8qH,EAAcF,EACnC3pB,EAAWj/C,EAAM8oE,EAAcF,GAC/B,WAAEG,EAAW,SAAEC,EAAS,WAAEC,EAAW,SAAEC,GA/D7C,SAA6B5sC,EAAK2hB,EAAaC,EAAairB,GAC5D,MAAM92G,EAVC4tE,GAUmB3D,EAAIzvE,QAAQ4wF,aAVN,CAC5B,aACA,WACA,aACA,aAOE2rB,GAAiBlrB,EAAcD,GAAe,EAC9CorB,EAAa/pH,KAAKE,IAAI4pH,EAAeD,EAAalrB,EAAc,GAQhEqrB,EAAqBpiD,IACvB,MAAMqiD,GAAiBrrB,EAAc5+F,KAAKE,IAAI4pH,EAAeliD,IAAQiiD,EAAa,EAClF,OAAOj8C,GAAYhG,EAAK,EAAG5nE,KAAKE,IAAI4pH,EAAeG,KAEvD,MAAO,CACHR,WAAYO,EAAkBj3G,EAAE02G,YAChCC,SAAUM,EAAkBj3G,EAAE22G,UAC9BC,WAAY/7C,GAAY76D,EAAE42G,WAAY,EAAGI,GACzCH,SAAUh8C,GAAY76D,EAAE62G,SAAU,EAAGG,GAE7C,CA0C+DG,CAAoB5iH,EAASq3F,EAAaC,EAAae,EAAWD,GACvHyqB,EAA2BvrB,EAAc6qB,EACzCW,EAAyBxrB,EAAc8qB,EACvCW,EAA0B3qB,EAAa+pB,EAAaU,EACpDG,EAAwB3qB,EAAW+pB,EAAWU,EAC9CG,EAA2B5rB,EAAcgrB,EACzCa,EAAyB7rB,EAAcirB,EACvCa,EAA0B/qB,EAAaiqB,EAAaY,EACpDG,EAAwB/qB,EAAWiqB,EAAWY,EAEpD,GADAp0C,EAAI0G,YACA4kB,EAAU,CAEV,MAAMipB,GAAyBN,EAA0BC,GAAyB,EAIlF,GAHAl0C,EAAI4G,IAAIr1D,EAAGC,EAAGg3E,EAAayrB,EAAyBM,GACpDv0C,EAAI4G,IAAIr1D,EAAGC,EAAGg3E,EAAa+rB,EAAuBL,GAE9CZ,EAAW,EAAG,CACd,MAAMkB,EAAU3B,GAAWmB,EAAwBE,EAAuB3iG,EAAGC,GAC7EwuD,EAAI4G,IAAI4tC,EAAQjjG,EAAGijG,EAAQhjG,EAAG8hG,EAAUY,EAAuB3qB,EAAWz0B,GAC9E,CAEA,MAAM2/C,EAAK5B,GAAWuB,EAAwB7qB,EAAUh4E,EAAGC,GAG3D,GAFAwuD,EAAI+G,OAAO0tC,EAAGljG,EAAGkjG,EAAGjjG,GAEhBgiG,EAAW,EAAG,CACd,MAAMgB,EAAU3B,GAAWuB,EAAwBE,EAAuB/iG,EAAGC,GAC7EwuD,EAAI4G,IAAI4tC,EAAQjjG,EAAGijG,EAAQhjG,EAAGgiG,EAAUjqB,EAAWz0B,GAASw/C,EAAwB1qH,KAAK4qE,GAC7F,CAEA,MAAMkgD,GAAyBnrB,EAAWiqB,EAAWjrB,GAAee,EAAaiqB,EAAahrB,IAAgB,EAI9G,GAHAvoB,EAAI4G,IAAIr1D,EAAGC,EAAG+2E,EAAagB,EAAWiqB,EAAWjrB,EAAamsB,GAAuB,GACrF10C,EAAI4G,IAAIr1D,EAAGC,EAAG+2E,EAAamsB,EAAuBprB,EAAaiqB,EAAahrB,GAAa,GAErFgrB,EAAa,EAAG,CAChB,MAAMiB,EAAU3B,GAAWsB,EAA0BE,EAAyB9iG,EAAGC,GACjFwuD,EAAI4G,IAAI4tC,EAAQjjG,EAAGijG,EAAQhjG,EAAG+hG,EAAYc,EAA0BzqH,KAAK4qE,GAAI80B,EAAax0B,GAC9F,CAEA,MAAM6/C,EAAK9B,GAAWkB,EAA0BzqB,EAAY/3E,EAAGC,GAG/D,GAFAwuD,EAAI+G,OAAO4tC,EAAGpjG,EAAGojG,EAAGnjG,GAEhB6hG,EAAa,EAAG,CAChB,MAAMmB,EAAU3B,GAAWkB,EAA0BE,EAAyB1iG,EAAGC,GACjFwuD,EAAI4G,IAAI4tC,EAAQjjG,EAAGijG,EAAQhjG,EAAG6hG,EAAY/pB,EAAax0B,GAASm/C,EACpE,CACJ,KAAO,CACHj0C,EAAI8G,OAAOv1D,EAAGC,GACd,MAAMojG,EAAchrH,KAAKoyE,IAAIi4C,GAA2BzrB,EAAcj3E,EAChEsjG,EAAcjrH,KAAKmxE,IAAIk5C,GAA2BzrB,EAAch3E,EACtEwuD,EAAI+G,OAAO6tC,EAAaC,GACxB,MAAMC,EAAYlrH,KAAKoyE,IAAIk4C,GAAyB1rB,EAAcj3E,EAC5DwjG,EAAYnrH,KAAKmxE,IAAIm5C,GAAyB1rB,EAAch3E,EAClEwuD,EAAI+G,OAAO+tC,EAAWC,EAC1B,CACA/0C,EAAI6G,WACR,CAoKA,SAASmuC,GAASh1C,EAAK7oE,EAASsiB,EAAQtiB,GACpC6oE,EAAIi1C,QAAU1iD,GAAe94C,EAAMg9D,eAAgBt/E,EAAQs/E,gBAC3DzW,EAAIulC,YAAYhzC,GAAe94C,EAAMi9D,WAAYv/E,EAAQu/E,aACzD1W,EAAImoB,eAAiB51B,GAAe94C,EAAMk9D,iBAAkBx/E,EAAQw/E,kBACpE3W,EAAIooB,SAAW71B,GAAe94C,EAAMm9D,gBAAiBz/E,EAAQy/E,iBAC7D5W,EAAI6C,UAAYtQ,GAAe94C,EAAM0tD,YAAahwE,EAAQgwE,aAC1DnH,EAAI6I,YAActW,GAAe94C,EAAM6lD,YAAanoE,EAAQmoE,YAChE,CACA,SAASyH,GAAO/G,EAAK0H,EAAUjuE,GAC3BumE,EAAI+G,OAAOttE,EAAO8X,EAAG9X,EAAO+X,EAChC,CAUA,SAAS0jG,GAASh8C,EAAQ0c,EAASxnF,EAAS,CAAC,GACzC,MAAMirE,EAAQH,EAAOlyE,QACbsB,MAAO6sH,EAAc,EAAI7qE,IAAK8qE,EAAY/7C,EAAQ,GAAOjrE,GACzD9F,MAAO+sH,EAAe/qE,IAAKgrE,GAAgB1/B,EAC7CttF,EAAQsB,KAAKmN,IAAIo+G,EAAaE,GAC9B/qE,EAAM1gD,KAAKE,IAAIsrH,EAAWE,GAC1BC,EAAUJ,EAAcE,GAAgBD,EAAYC,GAAgBF,EAAcG,GAAcF,EAAYE,EAClH,MAAO,CACHj8C,QACA/wE,QACA05E,KAAM4T,EAAQ5T,KACdjP,KAAMzoB,EAAMhiD,IAAUitH,EAAUl8C,EAAQ/uB,EAAMhiD,EAAQgiD,EAAMhiD,EAEpE,CACC,SAASktH,GAAYx1C,EAAK/5D,EAAM2vE,EAASxnF,GACtC,MAAM,OAAE8qE,EAAO,QAAE/hE,GAAa8O,GACxB,MAAEozD,EAAM,MAAE/wE,EAAM,KAAE05E,EAAK,KAAEjP,GAAUmiD,GAASh8C,EAAQ0c,EAASxnF,GAC7DqnH,EA1BT,SAAuBt+G,GACpB,OAAIA,EAAQu+G,QACDjuC,GAEPtwE,EAAQ+5E,SAA8C,aAAnC/5E,EAAQ44E,uBACpBlI,GAEJd,EACX,CAkBuB4uC,CAAcx+G,GACjC,IACIpQ,EAAGkzE,EAAOgX,GADV,KAAE0T,GAAM,EAAK,QAAE9iD,GAAazzC,GAAU,CAAC,EAE3C,IAAIrH,EAAI,EAAGA,GAAKgsE,IAAQhsE,EACpBkzE,EAAQf,GAAQ5wE,GAASu5C,EAAUkxB,EAAOhsE,EAAIA,IAAMsyE,GAChDY,EAAM6U,OAEC6V,GACP3kB,EAAI8G,OAAO7M,EAAM1oD,EAAG0oD,EAAMzoD,GAC1BmzE,GAAO,GAEP8wB,EAAWz1C,EAAKiR,EAAMhX,EAAOp4B,EAAS1qC,EAAQu+G,SAElDzkC,EAAOhX,GAMX,OAJI+H,IACA/H,EAAQf,GAAQ5wE,GAASu5C,EAAUkxB,EAAO,IAAMsG,GAChDo8C,EAAWz1C,EAAKiR,EAAMhX,EAAOp4B,EAAS1qC,EAAQu+G,YAEzC1zC,CACb,CACC,SAAS4zC,GAAgB51C,EAAK/5D,EAAM2vE,EAASxnF,GAC1C,MAAM8qE,EAASjzD,EAAKizD,QACd,MAAEG,EAAM,MAAE/wE,EAAM,KAAEyqE,GAAUmiD,GAASh8C,EAAQ0c,EAASxnF,IACtD,KAAEu2F,GAAM,EAAK,QAAE9iD,GAAazzC,GAAU,CAAC,EAC7C,IAEIrH,EAAGkzE,EAAO47C,EAAO5rB,EAAMF,EAAM+rB,EAF7BC,EAAO,EACPC,EAAS,EAEb,MAAMC,EAAcv/G,IAASpO,GAASu5C,EAAUkxB,EAAOr8D,EAAQA,IAAU2iE,EACnE68C,EAAQ,KACNjsB,IAASF,IACT/pB,EAAI+G,OAAOgvC,EAAMhsB,GACjB/pB,EAAI+G,OAAOgvC,EAAM9rB,GACjBjqB,EAAI+G,OAAOgvC,EAAMD,KAOzB,IAJInxB,IACA1qB,EAAQf,EAAO+8C,EAAW,IAC1Bj2C,EAAI8G,OAAO7M,EAAM1oD,EAAG0oD,EAAMzoD,IAE1BzqB,EAAI,EAAGA,GAAKgsE,IAAQhsE,EAAE,CAEtB,GADAkzE,EAAQf,EAAO+8C,EAAWlvH,IACtBkzE,EAAM6U,KACN,SAEJ,MAAMv9D,EAAI0oD,EAAM1oD,EACVC,EAAIyoD,EAAMzoD,EACV2kG,EAAa,EAAJ5kG,EACX4kG,IAAWN,GACPrkG,EAAIy4E,EACJA,EAAOz4E,EACAA,EAAIu4E,IACXA,EAAOv4E,GAEXukG,GAAQC,EAASD,EAAOxkG,KAAOykG,IAE/BE,IACAl2C,EAAI+G,OAAOx1D,EAAGC,GACdqkG,EAAQM,EACRH,EAAS,EACT/rB,EAAOF,EAAOv4E,GAElBskG,EAAQtkG,CACZ,CACA0kG,GACJ,CACC,SAASE,GAAkBnwG,GACxB,MAAMmiE,EAAOniE,EAAK9O,QACZu/E,EAAatO,EAAKsO,YAActO,EAAKsO,WAAW1vF,OAEtD,OADqBif,EAAK8pF,YAAe9pF,EAAKuzE,OAAUpR,EAAK8I,SAA2C,aAAhC9I,EAAK2H,wBAA0C3H,EAAKstC,SAAYh/B,EACjG8+B,GAAlBI,EACzB,CAoCA,MAAMS,GAA8B,mBAAXC,OAQzB,MAAMC,WAAoB,GACtBz2D,UAAY,OACfA,gBAAkB,CACX22B,eAAgB,OAChBC,WAAY,GACZC,iBAAkB,EAClBC,gBAAiB,QACjBzP,YAAa,EACbgK,iBAAiB,EACjBpB,uBAAwB,UACxB7I,MAAM,EACNxN,UAAU,EACVg8C,SAAS,EACTxkC,QAAS,GAEhBpxB,qBAAuB,CAChBuf,gBAAiB,kBACjBC,YAAa,eAEjBxf,mBAAqB,CACjB6hB,aAAa,EACbC,WAAat7E,GAAgB,eAATA,GAAkC,SAATA,GAEjD,WAAA2B,CAAYkxF,GACRx5E,QACApY,KAAKyoG,UAAW,EAChBzoG,KAAK4P,aAAUhQ,EACfI,KAAK6yF,YAASjzF,EACdI,KAAKiyF,WAAQryF,EACbI,KAAKmpG,eAAYvpG,EACjBI,KAAKivH,WAAQrvH,EACbI,KAAKkvH,aAAUtvH,EACfI,KAAKmvH,eAAYvvH,EACjBI,KAAKwoG,YAAa,EAClBxoG,KAAKovH,gBAAiB,EACtBpvH,KAAKuoG,mBAAgB3oG,EACjBgyF,GACA3mF,OAAOuc,OAAOxnB,KAAM4xF,EAE5B,CACA,mBAAAoX,CAAoBtZ,EAAW9W,GAC3B,MAAMhpE,EAAU5P,KAAK4P,QACrB,IAAKA,EAAQ+5E,SAA8C,aAAnC/5E,EAAQ44E,0BAA2C54E,EAAQu+G,UAAYnuH,KAAKovH,eAAgB,CAChH,MAAM30C,EAAO7qE,EAAQuiE,SAAWnyE,KAAKiyF,MAAQjyF,KAAKmpG,UAClD7gB,GAA2BtoF,KAAKkvH,QAASt/G,EAAS8/E,EAAWjV,EAAM7B,GACnE54E,KAAKovH,gBAAiB,CAC1B,CACJ,CACA,UAAIz9C,CAAOA,GACP3xE,KAAKkvH,QAAUv9C,SACR3xE,KAAKmvH,iBACLnvH,KAAKivH,MACZjvH,KAAKovH,gBAAiB,CAC1B,CACA,UAAIz9C,GACA,OAAO3xE,KAAKkvH,OAChB,CACA,YAAIngC,GACA,OAAO/uF,KAAKmvH,YAAcnvH,KAAKmvH,UDvwItC,SAA0BzwG,EAAM2wG,GAC7B,MAAM19C,EAASjzD,EAAKizD,OACdQ,EAAWzzD,EAAK9O,QAAQuiE,SACxBL,EAAQH,EAAOlyE,OACrB,IAAKqyE,EACD,MAAO,GAEX,MAAM2I,IAAS/7D,EAAKuzE,OACd,MAAElxF,EAAM,IAAEgiD,GAnEnB,SAAyB4uB,EAAQG,EAAO2I,EAAMtI,GAC3C,IAAIpxE,EAAQ,EACRgiD,EAAM+uB,EAAQ,EAClB,GAAI2I,IAAStI,EACT,KAAMpxE,EAAQ+wE,IAAUH,EAAO5wE,GAAOwmF,MAClCxmF,IAGR,KAAMA,EAAQ+wE,GAASH,EAAO5wE,GAAOwmF,MACjCxmF,IAMJ,IAJAA,GAAS+wE,EACL2I,IACA13B,GAAOhiD,GAELgiD,EAAMhiD,GAAS4wE,EAAO5uB,EAAM+uB,GAAOyV,MACrCxkC,IAGJ,OADAA,GAAO+uB,EACA,CACH/wE,QACAgiD,MAER,CA4C6BusE,CAAgB39C,EAAQG,EAAO2I,EAAMtI,GAC9D,OAaH,SAAuBzzD,EAAMqwE,EAAUpd,EAAQ09C,GAC5C,OAAKA,GAAmBA,EAAezpC,YAAejU,EAKzD,SAAyBjzD,EAAMqwE,EAAUpd,EAAQ09C,GAC9C,MAAME,EAAe7wG,EAAKm0E,OAAO1U,aAC3BqxC,EAAYvgC,GAAUvwE,EAAK9O,UACzB24F,cAAe58B,EAAe/7D,SAAS,SAAEuiE,IAAiBzzD,EAC5DozD,EAAQH,EAAOlyE,OACfoP,EAAS,GACf,IAAI0gF,EAAYigC,EACZzuH,EAAQguF,EAAS,GAAGhuF,MACpBvB,EAAIuB,EACR,SAAS0uH,EAAS3nH,EAAG8G,EAAGpC,EAAGkjH,GACvB,MAAMj+D,EAAM0gB,GAAY,EAAI,EAC5B,GAAIrqE,IAAM8G,EAAV,CAIA,IADA9G,GAAKgqE,EACCH,EAAO7pE,EAAIgqE,GAAOyV,MACpBz/E,GAAK2pD,EAET,KAAMkgB,EAAO/iE,EAAIkjE,GAAOyV,MACpB34E,GAAK6iD,EAEL3pD,EAAIgqE,IAAUljE,EAAIkjE,IAClBjjE,EAAO3O,KAAK,CACRa,MAAO+G,EAAIgqE,EACX/uB,IAAKn0C,EAAIkjE,EACT2I,KAAMjuE,EACN0lB,MAAOw9F,IAEXngC,EAAYmgC,EACZ3uH,EAAQ6N,EAAIkjE,EAhBhB,CAkBJ,CACA,IAAK,MAAMuc,KAAWU,EAAS,CAC3BhuF,EAAQoxE,EAAWpxE,EAAQstF,EAAQttF,MACnC,IACImxB,EADAw3D,EAAO/X,EAAO5wE,EAAQ+wE,GAE1B,IAAItyE,EAAIuB,EAAQ,EAAGvB,GAAK6uF,EAAQtrC,IAAKvjD,IAAI,CACrC,MAAM6oF,EAAK1W,EAAOnyE,EAAIsyE,GACtB5/C,EAAQ+8D,GAAUogC,EAAezpC,WAAWjC,GAAc4rC,EAAc,CACpE1pH,KAAM,UACN8pH,GAAIjmC,EACJ3hB,GAAIsgB,EACJunC,aAAcpwH,EAAI,GAAKsyE,EACvB+9C,YAAarwH,EAAIsyE,EACjBnG,mBAEA2jB,GAAap9D,EAAOq9D,IACpBkgC,EAAS1uH,EAAOvB,EAAI,EAAG6uF,EAAQ5T,KAAM8U,GAEzC7F,EAAOrB,EACPkH,EAAYr9D,CAChB,CACInxB,EAAQvB,EAAI,GACZiwH,EAAS1uH,EAAOvB,EAAI,EAAG6uF,EAAQ5T,KAAM8U,EAE7C,CACA,OAAO1gF,CACX,CA3DWihH,CAAgBpxG,EAAMqwE,EAAUpd,EAAQ09C,GAFpCtgC,CAGf,CAjBeghC,CAAcrxG,GADR,IAAbyzD,EAC2B,CACvB,CACIpxE,QACAgiD,MACA03B,SAjDf,SAAuB9I,EAAQ5wE,EAAOyO,EAAKirE,GACxC,MAAM3I,EAAQH,EAAOlyE,OACfoP,EAAS,GACf,IAEIk0C,EAFA2tB,EAAO3vE,EACP2oF,EAAO/X,EAAO5wE,GAElB,IAAIgiD,EAAMhiD,EAAQ,EAAGgiD,GAAOvzC,IAAOuzC,EAAI,CACnC,MAAMsuC,EAAM1f,EAAO5uB,EAAM+uB,GACrBuf,EAAI9J,MAAQ8J,EAAI/vF,KACXooF,EAAKnC,OACN9M,GAAO,EACP5rE,EAAO3O,KAAK,CACRa,MAAOA,EAAQ+wE,EACf/uB,KAAMA,EAAM,GAAK+uB,EACjB2I,SAEJ15E,EAAQ2vE,EAAO2gB,EAAI/vF,KAAOyhD,EAAM,OAGpC2tB,EAAO3tB,EACH2mC,EAAKnC,OACLxmF,EAAQgiD,IAGhB2mC,EAAO2H,CACX,CAQA,OAPa,OAAT3gB,GACA7hE,EAAO3O,KAAK,CACRa,MAAOA,EAAQ+wE,EACf/uB,IAAK2tB,EAAOoB,EACZ2I,SAGD5rE,CACX,CAqB+BmhH,CAAcr+C,EAAQ5wE,EAFrCgiD,EAAMhiD,EAAQgiD,EAAM+uB,EAAQ/uB,IACjBrkC,EAAKyqF,WAAuB,IAAVpoG,GAAegiD,IAAQ+uB,EAAQ,GAHjEH,EAAQ09C,EAKnB,CCkvImDY,CAAiBjwH,KAAMA,KAAK4P,QAAQy+E,SACnF,CACH,KAAAwpB,GACO,MAAM9oB,EAAW/uF,KAAK+uF,SAChBpd,EAAS3xE,KAAK2xE,OACpB,OAAOod,EAAStvF,QAAUkyE,EAAOod,EAAS,GAAGhuF,MACjD,CACH,IAAA2vE,GACO,MAAMqe,EAAW/uF,KAAK+uF,SAChBpd,EAAS3xE,KAAK2xE,OACdG,EAAQid,EAAStvF,OACvB,OAAOqyE,GAASH,EAAOod,EAASjd,EAAQ,GAAG/uB,IAC/C,CACH,WAAAvkC,CAAYk0D,EAAO1jC,GACZ,MAAMp/B,EAAU5P,KAAK4P,QACf1Q,EAAQwzE,EAAM1jC,GACd2iC,EAAS3xE,KAAK2xE,OACdod,EAAWD,GAAe9uF,KAAM,CAClCgvC,WACAjuC,MAAO7B,EACP6jD,IAAK7jD,IAET,IAAK6vF,EAAStvF,OACV,OAEJ,MAAMoP,EAAS,GACTqhH,EA/Hb,SAAiCtgH,GAC9B,OAAIA,EAAQu+G,QACDxhC,GAEP/8E,EAAQ+5E,SAA8C,aAAnC/5E,EAAQ44E,uBACpBoE,GAEJF,EACX,CAuH6ByjC,CAAwBvgH,GAC7C,IAAIpQ,EAAGgsE,EACP,IAAIhsE,EAAI,EAAGgsE,EAAOujB,EAAStvF,OAAQD,EAAIgsE,IAAQhsE,EAAE,CAC7C,MAAM,MAAEuB,EAAM,IAAEgiD,GAASgsC,EAASvvF,GAC5BuoE,EAAK4J,EAAO5wE,GACZinE,EAAK2J,EAAO5uB,GAClB,GAAIglB,IAAOC,EAAI,CACXn5D,EAAO3O,KAAK6nE,GACZ,QACJ,CACA,MACMqoD,EAAeF,EAAanoD,EAAIC,EAD5B3lE,KAAKoI,KAAKvL,EAAQ6oE,EAAG/4B,KAAcg5B,EAAGh5B,GAAY+4B,EAAG/4B,KAClBp/B,EAAQu+G,SACrDiC,EAAaphF,GAAY0jC,EAAM1jC,GAC/BngC,EAAO3O,KAAKkwH,EAChB,CACA,OAAyB,IAAlBvhH,EAAOpP,OAAeoP,EAAO,GAAKA,CAC7C,CACH,WAAAo/G,CAAYx1C,EAAK4V,EAASxnF,GAEnB,OADsBgoH,GAAkB7uH,KACjCqwH,CAAc53C,EAAKz4E,KAAMquF,EAASxnF,EAC7C,CACH,IAAA+mD,CAAK6qB,EAAK13E,EAAO+wE,GACV,MAAMid,EAAW/uF,KAAK+uF,SAChBshC,EAAgBxB,GAAkB7uH,MACxC,IAAIy6E,EAAOz6E,KAAKiyF,MAChBlxF,EAAQA,GAAS,EACjB+wE,EAAQA,GAAS9xE,KAAK2xE,OAAOlyE,OAASsB,EACtC,IAAK,MAAMstF,KAAWU,EAClBtU,GAAQ41C,EAAc53C,EAAKz4E,KAAMquF,EAAS,CACtCttF,QACAgiD,IAAKhiD,EAAQ+wE,EAAQ,IAG7B,QAAS2I,CACb,CACH,IAAAmW,CAAKnY,EAAKiX,EAAW3uF,EAAO+wE,GACrB,MAAMliE,EAAU5P,KAAK4P,SAAW,CAAC,GAClB5P,KAAK2xE,QAAU,IACnBlyE,QAAUmQ,EAAQgwE,cACzBnH,EAAI8E,OAlIhB,SAAc9E,EAAK/5D,EAAM3d,EAAO+wE,GACxBg9C,KAAcpwG,EAAK9O,QAAQy+E,QA5BnC,SAA6B5V,EAAK/5D,EAAM3d,EAAO+wE,GAC3C,IAAIlkB,EAAOlvC,EAAKuwG,MACXrhE,IACDA,EAAOlvC,EAAKuwG,MAAQ,IAAIF,OACpBrwG,EAAKkvC,KAAKA,EAAM7sD,EAAO+wE,IACvBlkB,EAAK0xB,aAGbmuC,GAASh1C,EAAK/5D,EAAK9O,SACnB6oE,EAAIoH,OAAOjyB,EACf,CAmBQ0iE,CAAoB73C,EAAK/5D,EAAM3d,EAAO+wE,GAlB9C,SAA0B2G,EAAK/5D,EAAM3d,EAAO+wE,GACxC,MAAM,SAAEid,EAAS,QAAEn/E,GAAa8O,EAC1B2xG,EAAgBxB,GAAkBnwG,GACxC,IAAK,MAAM2vE,KAAWU,EAClB0+B,GAASh1C,EAAK7oE,EAASy+E,EAAQn8D,OAC/BumD,EAAI0G,YACAkxC,EAAc53C,EAAK/5D,EAAM2vE,EAAS,CAClCttF,QACAgiD,IAAKhiD,EAAQ+wE,EAAQ,KAErB2G,EAAI6G,YAER7G,EAAIoH,QAEZ,CAMQ0wC,CAAiB93C,EAAK/5D,EAAM3d,EAAO+wE,EAE3C,CA6HY8e,CAAKnY,EAAKz4E,KAAMe,EAAO+wE,GACvB2G,EAAIkF,WAEJ39E,KAAKyoG,WACLzoG,KAAKovH,gBAAiB,EACtBpvH,KAAKivH,WAAQrvH,EAErB,EAGJ,SAAS4wH,GAAUjkC,EAAI1B,EAAKzY,EAAMo4B,GAC9B,MAAM56F,EAAU28E,EAAG38E,SACX,CAACwiE,GAAOlzE,GAAWqtF,EAAG8e,SAAS,CACnCj5B,GACDo4B,GACH,OAAOnoG,KAAKoI,IAAIogF,EAAM3rF,GAAS0Q,EAAQmvE,OAASnvE,EAAQ6gH,SAC5D,CAiFA,SAASC,GAAaC,EAAKnmB,GACvB,MAAM,EAAExgF,EAAE,EAAEC,EAAE,KAAE6uE,EAAK,MAAE3mE,EAAM,OAAE4hC,GAAa48D,EAAItlB,SAAS,CACrD,IACA,IACA,OACA,QACA,UACDb,GACH,IAAIt9D,EAAM9F,EAAO0sB,EAAKinB,EAAQ61C,EAc9B,OAbID,EAAItxB,YACJuxB,EAAO78D,EAAS,EAChB7mB,EAAO7qC,KAAKE,IAAIynB,EAAG8uE,GACnB1xD,EAAQ/kC,KAAKmN,IAAIwa,EAAG8uE,GACpBhlC,EAAM7pC,EAAI2mG,EACV71C,EAAS9wD,EAAI2mG,IAEbA,EAAOz+F,EAAQ,EACf+a,EAAOljB,EAAI4mG,EACXxpF,EAAQpd,EAAI4mG,EACZ98D,EAAMzxD,KAAKE,IAAI0nB,EAAG6uE,GAClB/d,EAAS14E,KAAKmN,IAAIya,EAAG6uE,IAElB,CACH5rD,OACA4mB,MACA1sB,QACA2zC,SAER,CACA,SAAS81C,GAAYtpC,EAAMroF,EAAOqD,EAAKiN,GACnC,OAAO+3E,EAAO,EAAItX,GAAY/wE,EAAOqD,EAAKiN,EAC9C,CAwDA,SAASk7F,GAAQimB,EAAK3mG,EAAGC,EAAGugF,GACxB,MAAMsmB,EAAc,OAAN9mG,EACR+mG,EAAc,OAAN9mG,EAERixD,EAASy1C,KADEG,GAASC,IACSL,GAAaC,EAAKnmB,GACrD,OAAOtvB,IAAW41C,GAAS5gD,GAAWlmD,EAAGkxD,EAAOhuC,KAAMguC,EAAO9zC,UAAY2pF,GAAS7gD,GAAWjmD,EAAGixD,EAAOpnB,IAAKonB,EAAOH,QACvH,CAIC,SAASi2C,GAAkBv4C,EAAKiH,GAC7BjH,EAAIiH,KAAKA,EAAK11D,EAAG01D,EAAKz1D,EAAGy1D,EAAKtjB,EAAGsjB,EAAK3kB,EAC1C,CACA,SAASk2D,GAAYvxC,EAAMwxC,EAAQC,EAAU,CAAC,GAC1C,MAAMnnG,EAAI01D,EAAK11D,IAAMmnG,EAAQnnG,GAAKknG,EAAS,EACrCjnG,EAAIy1D,EAAKz1D,IAAMknG,EAAQlnG,GAAKinG,EAAS,EACrC90D,GAAKsjB,EAAK11D,EAAI01D,EAAKtjB,IAAM+0D,EAAQnnG,EAAImnG,EAAQ/0D,EAAI80D,EAAS,GAAKlnG,EAC/D+wC,GAAK2kB,EAAKz1D,EAAIy1D,EAAK3kB,IAAMo2D,EAAQlnG,EAAIknG,EAAQp2D,EAAIm2D,EAAS,GAAKjnG,EACrE,MAAO,CACHD,EAAG01D,EAAK11D,EAAIA,EACZC,EAAGy1D,EAAKz1D,EAAIA,EACZmyC,EAAGsjB,EAAKtjB,EAAIA,EACZrB,EAAG2kB,EAAK3kB,EAAIA,EACZgkB,OAAQW,EAAKX,OAErB,CAuEA,IAAI,GAAwB9zE,OAAO67B,OAAO,CAC1C76B,UAAW,KACXmlH,WA5pBA,cAAyB,GACrB74D,UAAY,MACZA,gBAAkB,CACdkrC,YAAa,SACb1rB,YAAa,OACboX,WAAY,GACZC,iBAAkB,EAClBC,qBAAiBzvF,EACjB4gG,aAAc,EACd5gB,YAAa,EACb5E,OAAQ,EACRmlB,QAAS,EACThxB,WAAOvvE,EACPmkG,UAAU,EACVstB,UAAU,GAEd94D,qBAAuB,CACnBuf,gBAAiB,mBAErBvf,mBAAqB,CACjB6hB,aAAa,EACbC,WAAat7E,GAAgB,eAATA,GAExBmhG,cACA8B,SACAsvB,YACAtwB,YACAC,YACAwqB,YACA1pB,WACA,WAAArhG,CAAYkxF,GACRx5E,QACApY,KAAK4P,aAAUhQ,EACfI,KAAKkgG,mBAAgBtgG,EACrBI,KAAK+hG,gBAAaniG,EAClBI,KAAKgiG,cAAWpiG,EAChBI,KAAKghG,iBAAcphG,EACnBI,KAAKihG,iBAAcrhG,EACnBI,KAAKyrH,YAAc,EACnBzrH,KAAKsxH,YAAc,EACf1/B,GACA3mF,OAAOuc,OAAOxnB,KAAM4xF,EAE5B,CACA,OAAA8Y,CAAQ6mB,EAAQC,EAAQhnB,GACpB,MAAM93B,EAAQ1yE,KAAKqrG,SAAS,CACxB,IACA,KACDb,IACG,MAAEr7B,EAAM,SAAEE,GAAcT,GAAkB8D,EAAO,CACnD1oD,EAAGunG,EACHtnG,EAAGunG,KAED,WAAEzvB,EAAW,SAAEC,EAAS,YAAEhB,EAAY,YAAEC,EAAY,cAAEf,GAAmBlgG,KAAKqrG,SAAS,CACzF,aACA,WACA,cACA,cACA,iBACDb,GACGinB,GAAWzxH,KAAK4P,QAAQuwF,QAAUngG,KAAK4P,QAAQgwE,aAAe,EAC9DujB,EAAiBn4B,GAAek1B,EAAe8B,EAAWD,GAC1D2vB,EAAiB/hD,GAAcR,EAAO4yB,EAAYC,IAAaD,IAAeC,EAC9E2vB,EAAgBxuB,GAAkBj2B,IAAOwkD,EACzCE,EAAe1hD,GAAWb,EAAU2xB,EAAcywB,EAASxwB,EAAcwwB,GAC/E,OAAOE,GAAiBC,CAC5B,CACA,cAAAzmB,CAAeX,GACX,MAAM,EAAExgF,EAAE,EAAEC,EAAE,WAAE83E,EAAW,SAAEC,EAAS,YAAEhB,EAAY,YAAEC,GAAiBjhG,KAAKqrG,SAAS,CACjF,IACA,IACA,aACA,WACA,cACA,eACDb,IACG,OAAExvB,EAAO,QAAEmlB,GAAangG,KAAK4P,QAC7BiiH,GAAa9vB,EAAaC,GAAY,EACtC8vB,GAAc9wB,EAAcC,EAAcd,EAAUnlB,GAAU,EACpE,MAAO,CACHhxD,EAAGA,EAAI3nB,KAAKoyE,IAAIo9C,GAAaC,EAC7B7nG,EAAGA,EAAI5nB,KAAKmxE,IAAIq+C,GAAaC,EAErC,CACA,eAAA/e,CAAgBvI,GACZ,OAAOxqG,KAAKmrG,eAAeX,EAC/B,CACA,IAAA5Z,CAAKnY,GACD,MAAM,QAAE7oE,EAAQ,cAAEswF,GAAmBlgG,KAC/Bg7E,GAAUprE,EAAQorE,QAAU,GAAK,EACjCmlB,GAAWvwF,EAAQuwF,SAAW,GAAK,EACnC4D,EAAWn0F,EAAQm0F,SAGzB,GAFA/jG,KAAKyrH,YAAsC,UAAxB77G,EAAQ6zF,YAA0B,IAAO,EAC5DzjG,KAAKsxH,YAAcpxB,EAAgBhzB,GAAM7qE,KAAKuI,MAAMs1F,EAAgBhzB,IAAO,EACrD,IAAlBgzB,GAAuBlgG,KAAKghG,YAAc,GAAKhhG,KAAKihG,YAAc,EAClE,OAEJxoB,EAAI8E,OACJ,MAAMs0C,GAAa7xH,KAAK+hG,WAAa/hG,KAAKgiG,UAAY,EACtDvpB,EAAIwG,UAAU58E,KAAKoyE,IAAIo9C,GAAa72C,EAAQ34E,KAAKmxE,IAAIq+C,GAAa72C,GAClE,MACM+2C,EAAe/2C,GADT,EAAI34E,KAAKmxE,IAAInxE,KAAKE,IAAI0qE,GAAIizB,GAAiB,KAEvDznB,EAAI8I,UAAY3xE,EAAQkoE,gBACxBW,EAAI6I,YAAc1xE,EAAQmoE,YA5JlC,SAAiBU,EAAK9uE,EAASqxE,EAAQmlB,EAAS4D,GAC5C,MAAM,YAAEutB,EAAY,WAAEvvB,EAAW,cAAE7B,GAAmBv2F,EACtD,IAAIq4F,EAAWr4F,EAAQq4F,SACvB,GAAIsvB,EAAa,CACb9F,GAAQ/yC,EAAK9uE,EAASqxE,EAAQmlB,EAAS6B,EAAU+B,GACjD,IAAI,IAAIvkG,EAAI,EAAGA,EAAI8xH,IAAe9xH,EAC9Bi5E,EAAIkH,OAEHt1E,MAAM61F,KACP8B,EAAWD,GAAc7B,EAAgBhzB,IAAOA,IAExD,CACAs+C,GAAQ/yC,EAAK9uE,EAASqxE,EAAQmlB,EAAS6B,EAAU+B,GACjDtrB,EAAIkH,MAER,CA8IQqyC,CAAQv5C,EAAKz4E,KAAM+xH,EAAc5xB,EAAS4D,GA7IlD,SAAoBtrB,EAAK9uE,EAASqxE,EAAQmlB,EAAS4D,GAC/C,MAAM,YAAEutB,EAAY,WAAEvvB,EAAW,cAAE7B,EAAc,QAAEtwF,GAAajG,GAC1D,YAAEi2E,EAAY,gBAAEyP,EAAgB,WAAEF,EAAW,iBAAEC,EAAiB,aAAEoR,GAAkB5wF,EACpFqiH,EAAgC,UAAxBriH,EAAQ6zF,YACtB,IAAK7jB,EACD,OAEJnH,EAAIulC,YAAY7uB,GAAc,IAC9B1W,EAAImoB,eAAiBxR,EACjB6iC,GACAx5C,EAAI6C,UAA0B,EAAdsE,EAChBnH,EAAIooB,SAAWxR,GAAmB,UAElC5W,EAAI6C,UAAYsE,EAChBnH,EAAIooB,SAAWxR,GAAmB,SAEtC,IAAI2S,EAAWr4F,EAAQq4F,SACvB,GAAIsvB,EAAa,CACb9F,GAAQ/yC,EAAK9uE,EAASqxE,EAAQmlB,EAAS6B,EAAU+B,GACjD,IAAI,IAAIvkG,EAAI,EAAGA,EAAI8xH,IAAe9xH,EAC9Bi5E,EAAIoH,SAEHx1E,MAAM61F,KACP8B,EAAWD,GAAc7B,EAAgBhzB,IAAOA,IAExD,CACI+kD,GA3LR,SAAiBx5C,EAAK9uE,EAASq4F,GAC3B,MAAM,WAAED,EAAW,YAAE0pB,EAAY,EAAEzhG,EAAE,EAAEC,EAAE,YAAEg3E,EAAY,YAAED,GAAiBr3F,EAC1E,IAAIuoH,EAAczG,EAAcxqB,EAGhCxoB,EAAI0G,YACJ1G,EAAI4G,IAAIr1D,EAAGC,EAAGg3E,EAAac,EAAamwB,EAAalwB,EAAWkwB,GAC5DlxB,EAAcyqB,GACdyG,EAAczG,EAAczqB,EAC5BvoB,EAAI4G,IAAIr1D,EAAGC,EAAG+2E,EAAagB,EAAWkwB,EAAanwB,EAAamwB,GAAa,IAE7Ez5C,EAAI4G,IAAIr1D,EAAGC,EAAGwhG,EAAazpB,EAAWz0B,GAASw0B,EAAax0B,IAEhEkL,EAAI6G,YACJ7G,EAAI0C,MACR,CA6KQg3C,CAAQ15C,EAAK9uE,EAASq4F,GAEtBpyF,EAAQyhH,UAAYrvB,EAAWD,GAAc90B,IAAuB,IAAjBuzB,GAA0C,UAApBnR,GA1NjF,SAAkB5W,EAAK9uE,EAASq4F,GAC5B,MAAM,WAAED,EAAW,EAAE/3E,EAAE,EAAEC,EAAE,YAAEg3E,EAAY,YAAED,EAAY,QAAEpxF,GAAajG,GAChE,YAAEi2E,EAAY,gBAAEyP,GAAqBz/E,EACrCwiH,EAAiB/vH,KAAKE,IAAIq9E,EAAcqhB,EAAavxB,GAAgBqyB,EAAaC,IAGxF,GAFAvpB,EAAI0G,YACJ1G,EAAI4G,IAAIr1D,EAAGC,EAAGg3E,EAAcrhB,EAAc,EAAGmiB,EAAaqwB,EAAiB,EAAGpwB,EAAWowB,EAAiB,GACtGpxB,EAAc,EAAG,CACjB,MAAMqxB,EAAiBhwH,KAAKE,IAAIq9E,EAAcohB,EAAatxB,GAAgBqyB,EAAaC,IACxFvpB,EAAI4G,IAAIr1D,EAAGC,EAAG+2E,EAAcphB,EAAc,EAAGoiB,EAAWqwB,EAAiB,EAAGtwB,EAAaswB,EAAiB,GAAG,EACjH,KAAO,CACH,MAAMC,EAAYjwH,KAAKE,IAAIq9E,EAAc,EAAGqhB,EAAcvxB,GAAgBqyB,EAAaC,IACvF,GAAwB,UAApB3S,EACA5W,EAAI4G,IAAIr1D,EAAGC,EAAGqoG,EAAWtwB,EAAW/0B,GAAK,EAAG80B,EAAa90B,GAAK,GAAG,QAC9D,GAAwB,UAApBoiB,EAA6B,CACpC,MAAM9yB,EAAI,EAAI+1D,EAAYA,EACpBnwB,GAAQ5lC,EAAIl6D,KAAKoyE,IAAIutB,EAAW/0B,GAAK,GAAKjjD,EAC1Co4E,GAAQ7lC,EAAIl6D,KAAKmxE,IAAIwuB,EAAW/0B,GAAK,GAAKhjD,EAC1Cg4E,EAAS1lC,EAAIl6D,KAAKoyE,IAAIstB,EAAa90B,GAAK,GAAKjjD,EAC7Ck4E,EAAS3lC,EAAIl6D,KAAKmxE,IAAIuuB,EAAa90B,GAAK,GAAKhjD,EACnDwuD,EAAI+G,OAAO2iB,EAAMC,GACjB3pB,EAAI+G,OAAOyiB,EAAQC,EACvB,CACJ,CACAzpB,EAAI6G,YACJ7G,EAAI8G,OAAO,EAAG,GACd9G,EAAIiH,KAAK,EAAG,EAAGjH,EAAIyF,OAAO/rD,MAAOsmD,EAAIyF,OAAOnqB,QAC5C0kB,EAAI0C,KAAK,UACb,CAgMQo3C,CAAS95C,EAAK9uE,EAASq4F,GAEtBsvB,IACD9F,GAAQ/yC,EAAK9uE,EAASqxE,EAAQmlB,EAAS6B,EAAU+B,GACjDtrB,EAAIoH,SAEZ,CA0GQo+B,CAAWxlC,EAAKz4E,KAAM+xH,EAAc5xB,EAAS4D,GAC7CtrB,EAAIkF,SACR,GAkjBJ60C,WAzEA,cAAyB,GACrBj6D,UAAY,MACfA,gBAAkB,CACX6mC,cAAe,QACfxf,YAAa,EACb4gB,aAAc,EACdX,cAAe,OACfhhB,gBAAYj/E,GAEnB24D,qBAAuB,CAChBuf,gBAAiB,kBACjBC,YAAa,eAEjB,WAAAr3E,CAAYkxF,GACRx5E,QACApY,KAAK4P,aAAUhQ,EACfI,KAAKq/F,gBAAaz/F,EAClBI,KAAK84F,UAAOl5F,EACZI,KAAKmyB,WAAQvyB,EACbI,KAAK+zD,YAASn0D,EACdI,KAAK6/F,mBAAgBjgG,EACjBgyF,GACA3mF,OAAOuc,OAAOxnB,KAAM4xF,EAE5B,CACA,IAAAhB,CAAKnY,GACD,MAAM,cAAEonB,EAAgBjwF,SAAS,YAAEmoE,EAAY,gBAAED,IAAwB93E,MACnE,MAAEiyH,EAAM,MAAEQ,GAjFxB,SAAuB9B,GACnB,MAAMz1C,EAASw1C,GAAaC,GACtBx+F,EAAQ+oD,EAAO9zC,MAAQ8zC,EAAOhuC,KAC9B6mB,EAASmnB,EAAOH,OAASG,EAAOpnB,IAChC+nB,EA/BV,SAA0B80C,EAAK+B,EAAMC,GACjC,MAAMzzH,EAAQyxH,EAAI/gH,QAAQgwE,YACpB2H,EAAOopC,EAAIvxB,cACXhqF,EAAI+tE,GAAOjkF,GACjB,MAAO,CACH0qE,EAAGinD,GAAYtpC,EAAKzzB,IAAK1+C,EAAE0+C,IAAK,EAAG6+D,GACnCp2D,EAAGs0D,GAAYtpC,EAAKngD,MAAOhyB,EAAEgyB,MAAO,EAAGsrF,GACvC/kH,EAAGkjH,GAAYtpC,EAAKxM,OAAQ3lE,EAAE2lE,OAAQ,EAAG43C,GACzCnmH,EAAGqkH,GAAYtpC,EAAKr6C,KAAM93B,EAAE83B,KAAM,EAAGwlF,GAE7C,CAqBmBE,CAAiBjC,EAAKx+F,EAAQ,EAAG4hC,EAAS,GACnDgrB,EArBV,SAA2B4xC,EAAK+B,EAAMC,GAClC,MAAM,mBAAEpzB,GAAwBoxB,EAAItlB,SAAS,CACzC,uBAEEnsG,EAAQyxH,EAAI/gH,QAAQ4wF,aACpBprF,EAAIguE,GAAclkF,GAClB2zH,EAAOxwH,KAAKE,IAAImwH,EAAMC,GACtBprC,EAAOopC,EAAIvxB,cACX0zB,EAAevzB,GAAsBlwF,GAASnQ,GACpD,MAAO,CACHsjF,QAASquC,IAAaiC,GAAgBvrC,EAAKzzB,KAAOyzB,EAAKr6C,KAAM93B,EAAEotE,QAAS,EAAGqwC,GAC3ElwC,SAAUkuC,IAAaiC,GAAgBvrC,EAAKzzB,KAAOyzB,EAAKngD,MAAOhyB,EAAEutE,SAAU,EAAGkwC,GAC9EpwC,WAAYouC,IAAaiC,GAAgBvrC,EAAKxM,QAAUwM,EAAKr6C,KAAM93B,EAAEqtE,WAAY,EAAGowC,GACpFnwC,YAAamuC,IAAaiC,GAAgBvrC,EAAKxM,QAAUwM,EAAKngD,MAAOhyB,EAAEstE,YAAa,EAAGmwC,GAE/F,CAMmBE,CAAkBpC,EAAKx+F,EAAQ,EAAG4hC,EAAS,GAC1D,MAAO,CACH0+D,MAAO,CACHzoG,EAAGkxD,EAAOhuC,KACVjjB,EAAGixD,EAAOpnB,IACVsI,EAAGjqC,EACH4oC,EAAGhH,EACHgrB,UAEJkzC,MAAO,CACHjoG,EAAGkxD,EAAOhuC,KAAO2uC,EAAOrvE,EACxByd,EAAGixD,EAAOpnB,IAAM+nB,EAAOjS,EACvBxN,EAAGjqC,EAAQ0pD,EAAOrvE,EAAIqvE,EAAOtf,EAC7BxB,EAAGhH,EAAS8nB,EAAOjS,EAAIiS,EAAOluE,EAC9BoxE,OAAQ,CACJyD,QAASngF,KAAKmN,IAAI,EAAGuvE,EAAOyD,QAAUngF,KAAKmN,IAAIqsE,EAAOjS,EAAGiS,EAAOrvE,IAChEm2E,SAAUtgF,KAAKmN,IAAI,EAAGuvE,EAAO4D,SAAWtgF,KAAKmN,IAAIqsE,EAAOjS,EAAGiS,EAAOtf,IAClEkmB,WAAYpgF,KAAKmN,IAAI,EAAGuvE,EAAO0D,WAAapgF,KAAKmN,IAAIqsE,EAAOluE,EAAGkuE,EAAOrvE,IACtEk2E,YAAargF,KAAKmN,IAAI,EAAGuvE,EAAO2D,YAAcrgF,KAAKmN,IAAIqsE,EAAOluE,EAAGkuE,EAAOtf,MAIxF,CAsDmCy2D,CAAchzH,MACnCizH,GA/CKl0C,EA+CmB0zC,EAAM1zC,QA9C1ByD,SAAWzD,EAAO4D,UAAY5D,EAAO0D,YAAc1D,EAAO2D,YA8CtBH,GAAqByuC,GA/C3E,IAAmBjyC,EAgDXtG,EAAI8E,OACAk1C,EAAMr2D,IAAM61D,EAAM71D,GAAKq2D,EAAM13D,IAAMk3D,EAAMl3D,IACzC0d,EAAI0G,YACJ8zC,EAAYx6C,EAAKw4C,GAAYwB,EAAO5yB,EAAeoyB,IACnDx5C,EAAI0C,OACJ83C,EAAYx6C,EAAKw4C,GAAYgB,GAAQpyB,EAAe4yB,IACpDh6C,EAAI8I,UAAYxJ,EAChBU,EAAIkH,KAAK,YAEblH,EAAI0G,YACJ8zC,EAAYx6C,EAAKw4C,GAAYgB,EAAOpyB,IACpCpnB,EAAI8I,UAAYzJ,EAChBW,EAAIkH,OACJlH,EAAIkF,SACR,CACA,OAAA+sB,CAAQwoB,EAAQC,EAAQ3oB,GACpB,OAAOE,GAAQ1qG,KAAMkzH,EAAQC,EAAQ3oB,EACzC,CACA,QAAA4oB,CAASF,EAAQ1oB,GACb,OAAOE,GAAQ1qG,KAAMkzH,EAAQ,KAAM1oB,EACvC,CACA,QAAA6oB,CAASF,EAAQ3oB,GACb,OAAOE,GAAQ1qG,KAAM,KAAMmzH,EAAQ3oB,EACvC,CACA,cAAAW,CAAeX,GACX,MAAM,EAAExgF,EAAE,EAAEC,EAAE,KAAE6uE,EAAK,WAAEuG,GAAiBr/F,KAAKqrG,SAAS,CAClD,IACA,IACA,OACA,cACDb,GACH,MAAO,CACHxgF,EAAGq1E,GAAcr1E,EAAI8uE,GAAQ,EAAI9uE,EACjCC,EAAGo1E,EAAap1E,GAAKA,EAAI6uE,GAAQ,EAEzC,CACA,QAAAsR,CAASh4B,GACL,MAAgB,MAATA,EAAepyE,KAAKmyB,MAAQ,EAAInyB,KAAK+zD,OAAS,CACzD,GAOJi7D,YAAaA,GACbsE,aA5QA,cAA2B,GACvB/6D,UAAY,QACZ6uB,OACAG,KACAjmF,KAGEi3D,gBAAkB,CAChBqnB,YAAa,EACb6wC,UAAW,EACX/sB,iBAAkB,EAClB6vB,YAAa,EACb10C,WAAY,SACZE,OAAQ,EACRD,SAAU,GAIZvmB,qBAAuB,CACrBuf,gBAAiB,kBACjBC,YAAa,eAEjB,WAAAr3E,CAAYkxF,GACRx5E,QACApY,KAAK4P,aAAUhQ,EACfI,KAAKonF,YAASxnF,EACdI,KAAKunF,UAAO3nF,EACZI,KAAKsB,UAAO1B,EACRgyF,GACA3mF,OAAOuc,OAAOxnB,KAAM4xF,EAE5B,CACA,OAAA8Y,CAAQwoB,EAAQC,EAAQ3oB,GACpB,MAAM56F,EAAU5P,KAAK4P,SACf,EAAEoa,EAAE,EAAEC,GAAOjqB,KAAKqrG,SAAS,CAC7B,IACA,KACDb,GACH,OAAOnoG,KAAKC,IAAI4wH,EAASlpG,EAAG,GAAK3nB,KAAKC,IAAI6wH,EAASlpG,EAAG,GAAK5nB,KAAKC,IAAIsN,EAAQ6gH,UAAY7gH,EAAQmvE,OAAQ,EAC5G,CACA,QAAAq0C,CAASF,EAAQ1oB,GACb,OAAOgmB,GAAUxwH,KAAMkzH,EAAQ,IAAK1oB,EACxC,CACA,QAAA6oB,CAASF,EAAQ3oB,GACb,OAAOgmB,GAAUxwH,KAAMmzH,EAAQ,IAAK3oB,EACxC,CACA,cAAAW,CAAeX,GACX,MAAM,EAAExgF,EAAE,EAAEC,GAAOjqB,KAAKqrG,SAAS,CAC7B,IACA,KACDb,GACH,MAAO,CACHxgF,IACAC,IAER,CACA,IAAA8X,CAAKnyB,GAED,IAAImvE,GADJnvE,EAAUA,GAAW5P,KAAK4P,SAAW,CAAC,GACjBmvE,QAAU,EAG/B,OAFAA,EAAS18E,KAAKmN,IAAIuvE,EAAQA,GAAUnvE,EAAQ2jH,aAAe,GAE3B,GAAxBx0C,GADYA,GAAUnvE,EAAQgwE,aAAe,GAEzD,CACA,IAAAgR,CAAKnY,EAAKsH,GACN,MAAMnwE,EAAU5P,KAAK4P,QACjB5P,KAAKunF,MAAQ33E,EAAQmvE,OAAS,KAAQe,GAAe9/E,KAAM+/E,EAAM//E,KAAK+hC,KAAKnyB,GAAW,KAG1F6oE,EAAI6I,YAAc1xE,EAAQmoE,YAC1BU,EAAI6C,UAAY1rE,EAAQgwE,YACxBnH,EAAI8I,UAAY3xE,EAAQkoE,gBACxBwG,GAAU7F,EAAK7oE,EAAS5P,KAAKgqB,EAAGhqB,KAAKiqB,GACzC,CACA,QAAAmgF,GACI,MAAMx6F,EAAU5P,KAAK4P,SAAW,CAAC,EAEjC,OAAOA,EAAQmvE,OAASnvE,EAAQ6gH,SACpC,KAkMJ,MAAM+C,GAAgB,CAClB,oBACA,oBACA,oBACA,oBACA,oBACA,qBACA,sBAGEC,GAAoCD,GAActrH,IAAKmhE,GAAQA,EAAMhgE,QAAQ,OAAQ,SAASA,QAAQ,IAAK,WACjH,SAASqqH,GAAel0H,GACpB,OAAOg0H,GAAch0H,EAAIg0H,GAAc/zH,OAC3C,CACA,SAASk0H,GAAmBn0H,GACxB,OAAOi0H,GAAkBj0H,EAAIi0H,GAAkBh0H,OACnD,CA2BA,SAASm0H,GAA0Br6E,GAC/B,IAAI+J,EACJ,IAAIA,KAAK/J,EACL,GAAIA,EAAY+J,GAAGy0B,aAAex+B,EAAY+J,GAAGw0B,gBAC7C,OAAO,EAGf,OAAO,CACX,CAOA,IAAI+7C,GAAgB,CAChBvrG,GAAI,SACJ6xD,SAAU,CACNl6E,SAAS,EACT6zH,eAAe,GAEnB,YAAAhlB,CAAcn4B,EAAOo9C,EAAOnkH,GACxB,IAAKA,EAAQ3P,QACT,OAEJ,MAAQ0D,MAAM,SAAEq0E,GAAcpoE,QAASokH,GAAkBr9C,EAAMhgB,QACzD,SAAE33C,GAAcg1G,EAChBC,EAA0BL,GAA0B57C,KAlBhC7oC,EAkBsE6kF,KAjB9E7kF,EAAW4oC,aAAe5oC,EAAW2oC,kBAiB0D94D,GAAY40G,GAA0B50G,IAd3H,oBAAzBm7D,GAASpC,aAAkE,oBAA7BoC,GAASrC,gBAJlE,IAAkC3oC,EAmB1B,IAAKv/B,EAAQkkH,eAAiBG,EAC1B,OAEJ,MAAMC,EA5Cd,SAAsBv9C,GAClB,IAAIn3E,EAAI,EACR,MAAO,CAACqsC,EAAS8/B,KACb,MAAMx6B,EAAawlC,EAAMwhB,eAAexsB,GAAcx6B,WAClDA,aAAsB2uD,GACtBtgG,EAbZ,SAAiCqsC,EAASrsC,GAEtC,OADAqsC,EAAQisC,gBAAkBjsC,EAAQloC,KAAKuE,IAAI,IAAIwrH,GAAel0H,MACvDA,CACX,CAUgB20H,CAAwBtoF,EAASrsC,GAC9B2xC,aAAsB0yD,GAC7BrkG,EAXZ,SAAkCqsC,EAASrsC,GAEvC,OADAqsC,EAAQisC,gBAAkBjsC,EAAQloC,KAAKuE,IAAI,IAAIyrH,GAAmBn0H,MAC3DA,CACX,CAQgB40H,CAAyBvoF,EAASrsC,GAC/B2xC,IACP3xC,EAtBZ,SAAgCqsC,EAASrsC,GAGrC,OAFAqsC,EAAQksC,YAAc27C,GAAel0H,GACrCqsC,EAAQisC,gBAAkB67C,GAAmBn0H,KACpCA,CACb,CAkBgB60H,CAAuBxoF,EAASrsC,IAGhD,CAgC0B80H,CAAa39C,GAC/BqB,EAAS50C,QAAQ8wF,EACrB,GAmGJ,SAASK,GAAsB1oF,GAC3B,GAAIA,EAAQ28D,WAAY,CACpB,MAAM7kG,EAAOkoC,EAAQwqD,aACdxqD,EAAQ28D,kBACR38D,EAAQwqD,MACfprF,OAAOoK,eAAew2B,EAAS,OAAQ,CACnCw6C,cAAc,EACd/wE,YAAY,EACZ0kE,UAAU,EACV96E,MAAOyE,GAEf,CACJ,CACA,SAAS6wH,GAAmB79C,GACxBA,EAAMhzE,KAAKq0E,SAAS50C,QAASyI,IACzB0oF,GAAsB1oF,IAE9B,CAoBA,IAAI4oF,GAAoB,CACpBnsG,GAAI,aACJ6xD,SAAU,CACNu6C,UAAW,UACXz0H,SAAS,GAEb00H,qBAAsB,CAACh+C,EAAO7tE,EAAM8G,KAChC,IAAKA,EAAQ3P,QAET,YADAu0H,GAAmB79C,GAGvB,MAAMu3B,EAAiBv3B,EAAMxkD,MAC7BwkD,EAAMhzE,KAAKq0E,SAAS50C,QAAQ,CAACyI,EAAS8/B,KAClC,MAAM,MAAE0qB,EAAM,UAAEzd,GAAe/sC,EACzBjQ,EAAO+6C,EAAMwhB,eAAexsB,GAC5BhoE,EAAO0yF,GAASxqD,EAAQloC,KAC9B,GAGO,MAHH4U,GAAQ,CACRqgE,EACAjC,EAAM/mE,QAAQgpE,YAEd,OAEJ,IAAKh9C,EAAKuV,WAAWwlD,mBACjB,OAEJ,MAAMi+B,EAAQj+C,EAAM2C,OAAO19C,EAAK47D,SAChC,GAAmB,WAAfo9B,EAAM/uH,MAAoC,SAAf+uH,EAAM/uH,KACjC,OAEJ,GAAI8wE,EAAM/mE,QAAQspE,QACd,OAEJ,IAoBI27C,GApBA,MAAE9zH,EAAM,MAAE+wE,GAnD1B,SAAmDl2C,EAAM+1C,GACrD,MAAME,EAAaF,EAAOlyE,OAC1B,IACIqyE,EADA/wE,EAAQ,EAEZ,MAAM,OAAEixE,GAAYp2C,GACd,IAAEr5B,EAAI,IAAEiN,EAAI,WAAE6iE,EAAW,WAAEC,GAAgBN,EAAOO,gBASxD,OARIF,IACAtxE,EAAQkvE,GAAYQ,GAAakB,EAAQK,EAAOI,KAAM7vE,GAAKiuE,GAAI,EAAGqB,EAAa,IAG/EC,EADAQ,EACQrC,GAAYQ,GAAakB,EAAQK,EAAOI,KAAM5iE,GAAK+gE,GAAK,EAAGxvE,EAAO8wE,GAAc9wE,EAEhF8wE,EAAa9wE,EAElB,CACHA,QACA+wE,QAER,CAiCqCgjD,CAA0Cl5F,EAAMj4B,GAEzE,GAAImuE,IADcliE,EAAQmlH,WAAa,EAAI7mB,GAEvCqmB,GAAsB1oF,OAD1B,CAmBA,OAfI++B,GAAcyrB,KACdxqD,EAAQwqD,MAAQ1yF,SACTkoC,EAAQloC,KACfsH,OAAOoK,eAAew2B,EAAS,OAAQ,CACnCw6C,cAAc,EACd/wE,YAAY,EACZC,IAAK,WACD,OAAOvV,KAAKwoG,UAChB,EACAjxF,IAAK,SAASrC,GACVlV,KAAKq2F,MAAQnhF,CACjB,KAIDtF,EAAQ8kH,WACX,IAAK,OACDG,EA5LpB,SAAwBlxH,EAAM5C,EAAO+wE,EAAOo8B,EAAgBt+F,GAC3D,MAAMolH,EAAUplH,EAAQolH,SAAW9mB,EAChC,GAAI8mB,GAAWljD,EACX,OAAOnuE,EAAKT,MAAMnC,EAAOA,EAAQ+wE,GAErC,MAAM+iD,EAAY,GACZI,GAAenjD,EAAQ,IAAMkjD,EAAU,GAC7C,IAAIE,EAAe,EACnB,MAAMC,EAAWp0H,EAAQ+wE,EAAQ,EACjC,IACItyE,EAAG41H,EAAcC,EAASt1C,EAAMu1C,EADhCpsH,EAAInI,EAGR,IADA8zH,EAAUK,KAAkBvxH,EAAKuF,GAC7B1J,EAAI,EAAGA,EAAIw1H,EAAU,EAAGx1H,IAAI,CAC5B,IAEI8N,EAFAkhH,EAAO,EACP+G,EAAO,EAEX,MAAMC,EAAgBnzH,KAAKuI,OAAOpL,EAAI,GAAKy1H,GAAe,EAAIl0H,EACxD00H,EAAcpzH,KAAKE,IAAIF,KAAKuI,OAAOpL,EAAI,GAAKy1H,GAAe,EAAGnjD,GAAS/wE,EACvE20H,EAAiBD,EAAcD,EACrC,IAAIloH,EAAIkoH,EAAeloH,EAAImoH,EAAanoH,IACpCkhH,GAAQ7qH,EAAK2J,GAAG0c,EAChBurG,GAAQ5xH,EAAK2J,GAAG2c,EAEpBukG,GAAQkH,EACRH,GAAQG,EACR,MAAMC,EAAYtzH,KAAKuI,MAAMpL,EAAIy1H,GAAe,EAAIl0H,EAC9C60H,EAAUvzH,KAAKE,IAAIF,KAAKuI,OAAOpL,EAAI,GAAKy1H,GAAe,EAAGnjD,GAAS/wE,GACjEipB,EAAG6rG,EAAU5rG,EAAG6rG,GAAanyH,EAAKuF,GAE1C,IADAmsH,EAAUt1C,GAAQ,EACdzyE,EAAIqoH,EAAWroH,EAAIsoH,EAAStoH,IAC5ByyE,EAAO,GAAM19E,KAAKoI,KAAKorH,EAAUrH,IAAS7qH,EAAK2J,GAAG2c,EAAI6rG,IAAYD,EAAUlyH,EAAK2J,GAAG0c,IAAMurG,EAAOO,IAC7F/1C,EAAOs1C,IACPA,EAAUt1C,EACVq1C,EAAezxH,EAAK2J,GACpBgoH,EAAQhoH,GAGhBunH,EAAUK,KAAkBE,EAC5BlsH,EAAIosH,CACR,CAEA,OADAT,EAAUK,KAAkBvxH,EAAKwxH,GAC1BN,CACX,CAkJgCkB,CAAepyH,EAAM5C,EAAO+wE,EAAOo8B,EAAgBt+F,GAC/D,MACJ,IAAK,UACDilH,EApJpB,SAA0BlxH,EAAM5C,EAAO+wE,EAAOo8B,GAC1C,IAEI1uG,EAAGkzE,EAAO1oD,EAAGC,EAAGqkG,EAAO0H,EAAUC,EAAUC,EAAYxzB,EAAMF,EAF7DgsB,EAAO,EACPC,EAAS,EAEb,MAAMoG,EAAY,GACZM,EAAWp0H,EAAQ+wE,EAAQ,EAC3BqkD,EAAOxyH,EAAK5C,GAAOipB,EAEnBosG,EADOzyH,EAAKwxH,GAAUnrG,EACVmsG,EAClB,IAAI32H,EAAIuB,EAAOvB,EAAIuB,EAAQ+wE,IAAStyE,EAAE,CAClCkzE,EAAQ/uE,EAAKnE,GACbwqB,GAAK0oD,EAAM1oD,EAAImsG,GAAQC,EAAKloB,EAC5BjkF,EAAIyoD,EAAMzoD,EACV,MAAM2kG,EAAa,EAAJ5kG,EACf,GAAI4kG,IAAWN,EACPrkG,EAAIy4E,GACJA,EAAOz4E,EACP+rG,EAAWx2H,GACJyqB,EAAIu4E,IACXA,EAAOv4E,EACPgsG,EAAWz2H,GAEfgvH,GAAQC,EAASD,EAAO97C,EAAM1oD,KAAOykG,MAClC,CACH,MAAM4H,EAAY72H,EAAI,EACtB,IAAKorE,GAAcorD,KAAcprD,GAAcqrD,GAAW,CACtD,MAAMK,EAAqBj0H,KAAKE,IAAIyzH,EAAUC,GACxCM,EAAqBl0H,KAAKmN,IAAIwmH,EAAUC,GAC1CK,IAAuBJ,GAAcI,IAAuBD,GAC5DxB,EAAU30H,KAAK,IACRyD,EAAK2yH,GACRtsG,EAAGwkG,IAGP+H,IAAuBL,GAAcK,IAAuBF,GAC5DxB,EAAU30H,KAAK,IACRyD,EAAK4yH,GACRvsG,EAAGwkG,GAGf,CACIhvH,EAAI,GAAK62H,IAAcH,GACvBrB,EAAU30H,KAAKyD,EAAK0yH,IAExBxB,EAAU30H,KAAKwyE,GACf47C,EAAQM,EACRH,EAAS,EACT/rB,EAAOF,EAAOv4E,EACd+rG,EAAWC,EAAWC,EAAa12H,CACvC,CACJ,CACA,OAAOq1H,CACX,CAgGgC2B,CAAiB7yH,EAAM5C,EAAO+wE,EAAOo8B,GACjD,MACJ,QACI,MAAM,IAAI/mF,MAAM,qCAAqCvX,EAAQ8kH,cAErE7oF,EAAQ28D,WAAaqsB,CA1BrB,KA6BR,OAAA5hE,CAAS0jB,GACL69C,GAAmB79C,EACvB,GAyCJ,SAAS8/C,GAAWznF,EAAU6oE,EAAOnnC,EAAM+J,GACvC,GAAIA,EACA,OAEJ,IAAI15E,EAAQ82G,EAAM7oE,GACd+T,EAAM2tB,EAAK1hC,GAKf,MAJiB,UAAbA,IACAjuC,EAAQ2uE,GAAgB3uE,GACxBgiD,EAAM2sB,GAAgB3sB,IAEnB,CACH/T,WACAjuC,QACAgiD,MAER,CA+BA,SAAS2zE,GAAgB31H,EAAOgiD,EAAK4uB,GACjC,KAAM5uB,EAAMhiD,EAAOgiD,IAAM,CACrB,MAAM2vB,EAAQf,EAAO5uB,GACrB,IAAK14C,MAAMqoE,EAAM1oD,KAAO3f,MAAMqoE,EAAMzoD,GAChC,KAER,CACA,OAAO84B,CACX,CACA,SAAS4zE,GAASztH,EAAGyE,EAAG+H,EAAMpK,GAC1B,OAAIpC,GAAKyE,EACErC,EAAGpC,EAAEwM,GAAO/H,EAAE+H,IAElBxM,EAAIA,EAAEwM,GAAQ/H,EAAIA,EAAE+H,GAAQ,CACvC,CAEA,SAASkhH,GAAoBC,EAAUn4G,GACnC,IAAIizD,EAAS,GACTsgB,GAAQ,EAOZ,OANIx9E,GAAQoiH,IACR5kC,GAAQ,EACRtgB,EAASklD,GAETllD,EArDR,SAA6BklD,EAAUn4G,GACnC,MAAM,EAAEsL,EAAG,KAAK,EAAEC,EAAG,MAAU4sG,GAAY,CAAC,EACtCC,EAAap4G,EAAKizD,OAClBA,EAAS,GAyBf,OAxBAjzD,EAAKqwE,SAAS3rD,QAAQ,EAAGriC,QAAQgiD,UAC7BA,EAAM2zE,GAAgB31H,EAAOgiD,EAAK+zE,GAClC,MAAMjf,EAAQif,EAAW/1H,GACnB2vE,EAAOomD,EAAW/zE,GACd,OAAN94B,GACA0nD,EAAOzxE,KAAK,CACR8pB,EAAG6tF,EAAM7tF,EACTC,MAEJ0nD,EAAOzxE,KAAK,CACR8pB,EAAG0mD,EAAK1mD,EACRC,OAES,OAAND,IACP2nD,EAAOzxE,KAAK,CACR8pB,IACAC,EAAG4tF,EAAM5tF,IAEb0nD,EAAOzxE,KAAK,CACR8pB,IACAC,EAAGymD,EAAKzmD,OAIb0nD,CACX,CAwBiBolD,CAAoBF,EAAUn4G,GAEpCizD,EAAOlyE,OAAS,IAAIuvH,GAAY,CACnCr9C,SACA/hE,QAAS,CACL+5E,QAAS,GAEbsI,QACAkX,UAAWlX,IACV,IACT,CACA,SAAS+kC,GAAiBziG,GACtB,OAAOA,IAA0B,IAAhBA,EAAOorD,IAC5B,CAEA,SAASs3C,GAAel4F,EAAS5vB,EAAO+nH,GAEpC,IAAIv3C,EADW5gD,EAAQ5vB,GACLwwE,KAClB,MAAMw3C,EAAU,CACZhoH,GAEJ,IAAI+C,EACJ,IAAKglH,EACD,OAAOv3C,EAEX,MAAe,IAATA,IAA6C,IAA3Bw3C,EAAQh0H,QAAQw8E,IAAa,CACjD,IAAK9U,GAAe8U,GAChB,OAAOA,EAGX,GADAztE,EAAS6sB,EAAQ4gD,IACZztE,EACD,OAAO,EAEX,GAAIA,EAAO8e,QACP,OAAO2uD,EAEXw3C,EAAQj3H,KAAKy/E,GACbA,EAAOztE,EAAOytE,IAClB,CACA,OAAO,CACX,CACC,SAASy3C,GAAY14G,EAAMvP,EAAO2iE,GAC9B,MAAM6N,EAmDV,SAAyBjhE,GACtB,MAAM9O,EAAU8O,EAAK9O,QACfynH,EAAaznH,EAAQ+vE,KAC3B,IAAIA,EAAO3U,GAAeqsD,GAAcA,EAAWnlH,OAAQmlH,GAI3D,YAHaz3H,IAAT+/E,IACAA,IAAS/vE,EAAQkoE,kBAER,IAAT6H,GAA2B,OAATA,KAGT,IAATA,EACO,SAEJA,EACX,CAjEkB23C,CAAgB54G,GAC9B,GAAIrP,GAASswE,GACT,OAAOt1E,MAAMs1E,EAAKzgF,QAAiBygF,EAEvC,IAAIztE,EAASi5D,WAAWwU,GACxB,OAAI9U,GAAe34D,IAAW7P,KAAKuI,MAAMsH,KAAYA,EAWzD,SAA2BqlH,EAASpoH,EAAO+C,EAAQ4/D,GAI/C,MAHgB,MAAZylD,GAA+B,MAAZA,IACnBrlH,EAAS/C,EAAQ+C,KAEjBA,IAAW/C,GAAS+C,EAAS,GAAKA,GAAU4/D,IAGzC5/D,CACX,CAlBeslH,CAAkB73C,EAAK,GAAIxwE,EAAO+C,EAAQ4/D,GAE9C,CACH,SACA,QACA,MACA,QACA,SACF3uE,QAAQw8E,IAAS,GAAKA,CAC5B,CAuFC,SAAS83C,GAAe9lD,EAAQ+lD,EAAaC,GAC1C,MAAMC,EAAY,GAClB,IAAI,IAAItqH,EAAI,EAAGA,EAAIqqH,EAAWl4H,OAAQ6N,IAAI,CACtC,MAAMoR,EAAOi5G,EAAWrqH,IAClB,MAAEuqG,EAAM,KAAEnnC,EAAK,MAAEgC,GAAWmlD,GAAUn5G,EAAMg5G,EAAa,KAC/D,MAAKhlD,GAASmlC,GAASnnC,GAGvB,GAAImnC,EACA+f,EAAUv1F,QAAQqwC,QAGlB,GADAf,EAAOzxE,KAAKwyE,IACPhC,EACD,KAGZ,CACAiB,EAAOzxE,QAAQ03H,EACnB,CACC,SAASC,GAAUn5G,EAAMg5G,EAAa1oF,GACnC,MAAM0jC,EAAQh0D,EAAKF,YAAYk5G,EAAa1oF,GAC5C,IAAK0jC,EACD,MAAO,CAAC,EAEZ,MAAMolD,EAAaplD,EAAM1jC,GACnB+/C,EAAWrwE,EAAKqwE,SAChB+nC,EAAap4G,EAAKizD,OACxB,IAAIkmC,GAAQ,EACRnnC,GAAO,EACX,IAAI,IAAIlxE,EAAI,EAAGA,EAAIuvF,EAAStvF,OAAQD,IAAI,CACpC,MAAM6uF,EAAUU,EAASvvF,GACnBu4H,EAAajB,EAAWzoC,EAAQttF,OAAOiuC,GACvCgpF,EAAYlB,EAAWzoC,EAAQtrC,KAAK/T,GAC1C,GAAIkhC,GAAW4nD,EAAYC,EAAYC,GAAY,CAC/CngB,EAAQigB,IAAeC,EACvBrnD,EAAOonD,IAAeE,EACtB,KACJ,CACJ,CACA,MAAO,CACHngB,QACAnnC,OACAgC,QAER,CAEA,MAAMulD,GACF,WAAAv3H,CAAYmgF,GACR7gF,KAAKgqB,EAAI62D,EAAK72D,EACdhqB,KAAKiqB,EAAI42D,EAAK52D,EACdjqB,KAAK++E,OAAS8B,EAAK9B,MACvB,CACA,WAAAkvC,CAAYx1C,EAAKyC,EAAQ2F,GACrB,MAAM,EAAE72D,EAAE,EAAEC,EAAE,OAAE80D,GAAY/+E,KAM5B,OALAk7E,EAASA,GAAU,CACfn6E,MAAO,EACPgiD,IAAKmqB,IAETuL,EAAI4G,IAAIr1D,EAAGC,EAAG80D,EAAQ7D,EAAOn4B,IAAKm4B,EAAOn6E,OAAO,IACxC8/E,EAAK3F,MACjB,CACA,WAAA18D,CAAYk0D,GACR,MAAM,EAAE1oD,EAAE,EAAEC,EAAE,OAAE80D,GAAY/+E,KACtBmvE,EAAQuD,EAAMvD,MACpB,MAAO,CACHnlD,EAAGA,EAAI3nB,KAAKoyE,IAAItF,GAAS4P,EACzB90D,EAAGA,EAAI5nB,KAAKmxE,IAAIrE,GAAS4P,EACzB5P,QAER,EAiEJ,SAAS+oD,GAAUz/C,EAAKlkD,EAAQwrD,GAC5B,MAAM7tE,EA/DV,SAAoBqiB,GAChB,MAAM,MAAEoiD,EAAM,KAAEgJ,EAAK,KAAEjhE,GAAU6V,EACjC,GAAIs2C,GAAe8U,GACf,OAcP,SAAwBhJ,EAAOxnE,GAC5B,MAAMysB,EAAO+6C,EAAMwhB,eAAehpF,GAElC,OADgBysB,GAAQ+6C,EAAM2qB,iBAAiBnyF,GAC9BysB,EAAKiQ,QAAU,IACpC,CAlBessF,CAAexhD,EAAOgJ,GAEjC,GAAa,UAATA,EACA,OAjHR,SAAyBprD,GACrB,MAAM,MAAE8kD,EAAM,MAAElqE,EAAM,KAAEuP,GAAU6V,EAC5Bo9C,EAAS,GACTod,EAAWrwE,EAAKqwE,SAChBqpC,EAAe15G,EAAKizD,OACpBgmD,EAgBT,SAAuBt+C,EAAOlqE,GAC3B,MAAMkpH,EAAQ,GACR3iB,EAAQr8B,EAAM0b,wBAAwB,QAC5C,IAAI,IAAIv1F,EAAI,EAAGA,EAAIk2G,EAAMj2G,OAAQD,IAAI,CACjC,MAAMo8B,EAAO85E,EAAMl2G,GACnB,GAAIo8B,EAAKzsB,QAAUA,EACf,MAECysB,EAAKllB,QACN2hH,EAAMh2F,QAAQzG,EAAKiQ,QAE3B,CACA,OAAOwsF,CACX,CA7BuBC,CAAcj/C,EAAOlqE,GACxCwoH,EAAWz3H,KAAK02H,GAAoB,CAChC5sG,EAAG,KACHC,EAAGovD,EAAM0B,QACVr8D,IACH,IAAI,IAAIlf,EAAI,EAAGA,EAAIuvF,EAAStvF,OAAQD,IAAI,CACpC,MAAM6uF,EAAUU,EAASvvF,GACzB,IAAI,IAAI8N,EAAI+gF,EAAQttF,MAAOuM,GAAK+gF,EAAQtrC,IAAKz1C,IACzCmqH,GAAe9lD,EAAQymD,EAAa9qH,GAAIqqH,EAEhD,CACA,OAAO,IAAI3I,GAAY,CACnBr9C,SACA/hE,QAAS,CAAC,GAElB,CA6Fe2oH,CAAgBhkG,GAE3B,GAAa,UAATorD,EACA,OAAO,EAEX,MAAMk3C,EAWV,SAAyBtiG,GAErB,OADcA,EAAO8kD,OAAS,CAAC,GACrBgwB,yBAiBd,SAAiC90E,GAC7B,MAAM,MAAE8kD,EAAM,KAAEsG,GAAUprD,EACpB3kB,EAAUypE,EAAMzpE,QAChBnQ,EAAS45E,EAAMygB,YAAYr6F,OAC3BsB,EAAQ6O,EAAQ0qC,QAAU++B,EAAM7pE,IAAM6pE,EAAM92E,IAC5CrD,EAtLT,SAAyBygF,EAAMtG,EAAOolB,GACnC,IAAIv/F,EAUJ,OARIA,EADS,UAATygF,EACQ8e,EACQ,QAAT9e,EACCtG,EAAMzpE,QAAQ0qC,QAAU++B,EAAM92E,IAAM82E,EAAM7pE,IAC3CH,GAASswE,GACRA,EAAKzgF,MAELm6E,EAAMkiC,eAEXr8G,CACX,CA0KkBs5H,CAAgB74C,EAAMtG,EAAOt4E,GACrCmR,EAAS,GACf,GAAItC,EAAQyrE,KAAK0oB,SAAU,CACvB,MAAM6B,EAASvsB,EAAMgwB,yBAAyB,EAAGtoG,GACjD,OAAO,IAAIk3H,GAAU,CACjBjuG,EAAG47E,EAAO57E,EACVC,EAAG27E,EAAO37E,EACV80D,OAAQ1F,EAAMurB,8BAA8B1lG,IAEpD,CACA,IAAI,IAAIM,EAAI,EAAGA,EAAIC,IAAUD,EACzB0S,EAAOhS,KAAKm5E,EAAMgwB,yBAAyB7pG,EAAGN,IAElD,OAAOgT,CACX,CAnCeumH,CAAwBlkG,GAIvC,SAA+BA,GAC3B,MAAM,MAAE8kD,EAAO,CAAC,EAAE,KAAEsG,GAAUprD,EACxBupD,EApLT,SAAyB6B,EAAMtG,GAC5B,IAAIyE,EAAQ,KAUZ,MATa,UAAT6B,EACA7B,EAAQzE,EAAM0B,OACE,QAAT4E,EACP7B,EAAQzE,EAAMvlB,IACPzkD,GAASswE,GAChB7B,EAAQzE,EAAM7G,iBAAiBmN,EAAKzgF,OAC7Bm6E,EAAM+rB,eACbtnB,EAAQzE,EAAM+rB,gBAEXtnB,CACX,CAwKkB46C,CAAgB/4C,EAAMtG,GACpC,GAAIxO,GAAeiT,GAAQ,CACvB,MAAMuhB,EAAahmB,EAAMgsB,eACzB,MAAO,CACHr7E,EAAGq1E,EAAavhB,EAAQ,KACxB7zD,EAAGo1E,EAAa,KAAOvhB,EAE/B,CACA,OAAO,IACX,CAbW66C,CAAsBpkG,EACjC,CAjBqBqkG,CAAgBrkG,GACjC,OAAIsiG,aAAoBoB,GACbpB,EAEJD,GAAoBC,EAAUn4G,EACzC,CA+CmB6lE,CAAWhwD,IACpB,MAAEoiD,EAAM,MAAExnE,EAAM,KAAEuP,EAAK,MAAE26D,EAAM,KAAEjH,GAAU79C,EAC3CskG,EAAWn6G,EAAK9O,QAChBynH,EAAawB,EAASl5C,KACtBtW,EAAQwvD,EAAS/gD,iBACjB,MAAEghD,EAAOzvD,EAAM,MAAEgvD,EAAOhvD,GAAWguD,GAAc,CAAC,EAClDz7F,EAAO+6C,EAAMwhB,eAAehpF,GAC5BgsE,EAAOyU,GAAmBjZ,EAAO/6C,GACnC1pB,GAAUwM,EAAKizD,OAAOlyE,SACtBugF,GAASvH,EAAKsH,GActB,SAAgBtH,EAAKmZ,GACjB,MAAM,KAAElzE,EAAK,OAAExM,EAAO,MAAE4mH,EAAM,MAAET,EAAM,KAAEt4C,EAAK,MAAE1G,EAAM,KAAE8B,GAAUyW,EAC3D5iD,EAAWtwB,EAAKuzE,MAAQ,QAAUL,EAAIxf,KAC5CqG,EAAI8E,OACJ,IAAIw7C,EAAYV,EACZA,IAAUS,IACO,MAAb9pF,GACAgqF,GAAavgD,EAAKvmE,EAAQ6tE,EAAKjsB,KAC/B6rB,GAAKlH,EAAK,CACN/5D,OACAxM,SACAm3D,MAAOyvD,EACPz/C,QACArqC,WACAmsC,SAEJ1C,EAAIkF,UACJlF,EAAI8E,OACJy7C,GAAavgD,EAAKvmE,EAAQ6tE,EAAKhF,SACX,MAAb/rC,IACPiqF,GAAexgD,EAAKvmE,EAAQ6tE,EAAK7yC,MACjCyyC,GAAKlH,EAAK,CACN/5D,OACAxM,SACAm3D,MAAOgvD,EACPh/C,QACArqC,WACAmsC,SAEJ1C,EAAIkF,UACJlF,EAAI8E,OACJ07C,GAAexgD,EAAKvmE,EAAQ6tE,EAAK34C,OACjC2xF,EAAYD,IAGpBn5C,GAAKlH,EAAK,CACN/5D,OACAxM,SACAm3D,MAAO0vD,EACP1/C,QACArqC,WACAmsC,SAEJ1C,EAAIkF,SACR,CAzDQu7C,CAAOzgD,EAAK,CACR/5D,OACAxM,SACA4mH,QACAT,QACAt4C,OACA1G,QACAjH,OACA+I,SAEJ8E,GAAWxH,GAEnB,CA8CA,SAASugD,GAAavgD,EAAKvmE,EAAQinH,GAC/B,MAAM,SAAEpqC,EAAS,OAAEpd,GAAYz/D,EAC/B,IAAI2lG,GAAQ,EACRuhB,GAAW,EACf3gD,EAAI0G,YACJ,IAAK,MAAMkP,KAAWU,EAAS,CAC3B,MAAM,MAAEhuF,EAAM,IAAEgiD,GAASsrC,EACnB3G,EAAa/V,EAAO5wE,GACpBgoG,EAAYp3B,EAAO+kD,GAAgB31H,EAAOgiD,EAAK4uB,IACjDkmC,GACAp/B,EAAI8G,OAAOmI,EAAW19D,EAAG09D,EAAWz9D,GACpC4tF,GAAQ,IAERp/B,EAAI+G,OAAOkI,EAAW19D,EAAGmvG,GACzB1gD,EAAI+G,OAAOkI,EAAW19D,EAAG09D,EAAWz9D,IAExCmvG,IAAalnH,EAAO+7G,YAAYx1C,EAAK4V,EAAS,CAC1C+O,KAAMg8B,IAENA,EACA3gD,EAAI6G,YAEJ7G,EAAI+G,OAAOupB,EAAU/+E,EAAGmvG,EAEhC,CACA1gD,EAAI+G,OAAOttE,EAAO2lG,QAAQ7tF,EAAGmvG,GAC7B1gD,EAAI6G,YACJ7G,EAAI0C,MACR,CACA,SAAS89C,GAAexgD,EAAKvmE,EAAQmnH,GACjC,MAAM,SAAEtqC,EAAS,OAAEpd,GAAYz/D,EAC/B,IAAI2lG,GAAQ,EACRuhB,GAAW,EACf3gD,EAAI0G,YACJ,IAAK,MAAMkP,KAAWU,EAAS,CAC3B,MAAM,MAAEhuF,EAAM,IAAEgiD,GAASsrC,EACnB3G,EAAa/V,EAAO5wE,GACpBgoG,EAAYp3B,EAAO+kD,GAAgB31H,EAAOgiD,EAAK4uB,IACjDkmC,GACAp/B,EAAI8G,OAAOmI,EAAW19D,EAAG09D,EAAWz9D,GACpC4tF,GAAQ,IAERp/B,EAAI+G,OAAO65C,EAAO3xC,EAAWz9D,GAC7BwuD,EAAI+G,OAAOkI,EAAW19D,EAAG09D,EAAWz9D,IAExCmvG,IAAalnH,EAAO+7G,YAAYx1C,EAAK4V,EAAS,CAC1C+O,KAAMg8B,IAENA,EACA3gD,EAAI6G,YAEJ7G,EAAI+G,OAAO65C,EAAOtwB,EAAU9+E,EAEpC,CACAwuD,EAAI+G,OAAO65C,EAAOnnH,EAAO2lG,QAAQ5tF,GACjCwuD,EAAI6G,YACJ7G,EAAI0C,MACR,CACA,SAASwE,GAAKlH,EAAKmZ,GACf,MAAM,KAAElzE,EAAK,OAAExM,EAAO,SAAE88B,EAAS,MAAEq6B,EAAM,MAAEgQ,EAAM,KAAE8B,GAAUyW,EACvD7C,EAlgBV,SAAmBrwE,EAAMxM,EAAQ88B,GAC7B,MAAM+/C,EAAWrwE,EAAKqwE,SAChBpd,EAASjzD,EAAKizD,OACd2nD,EAAUpnH,EAAOy/D,OACjBj+D,EAAQ,GACd,IAAK,MAAM26E,KAAWU,EAAS,CAC3B,IAAI,MAAEhuF,EAAM,IAAEgiD,GAASsrC,EACvBtrC,EAAM2zE,GAAgB31H,EAAOgiD,EAAK4uB,GAClC,MAAMuJ,EAASu7C,GAAWznF,EAAU2iC,EAAO5wE,GAAQ4wE,EAAO5uB,GAAMsrC,EAAQ5T,MACxE,IAAKvoE,EAAO68E,SAAU,CAClBr7E,EAAMxT,KAAK,CACPq0B,OAAQ85D,EACRn8E,OAAQgpE,EACRn6E,MAAO4wE,EAAO5wE,GACdgiD,IAAK4uB,EAAO5uB,KAEhB,QACJ,CACA,MAAMw2E,EAAiBzqC,GAAe58E,EAAQgpE,GAC9C,IAAK,MAAMs+C,KAAOD,EAAe,CAC7B,MAAME,EAAYhD,GAAWznF,EAAUsqF,EAAQE,EAAIz4H,OAAQu4H,EAAQE,EAAIz2E,KAAMy2E,EAAI/+C,MAC3Ei/C,EAActrC,GAAcC,EAAS1c,EAAQ8nD,GACnD,IAAK,MAAME,KAAcD,EACrBhmH,EAAMxT,KAAK,CACPq0B,OAAQolG,EACRznH,OAAQsnH,EACRz4H,MAAO,CACH,CAACiuC,GAAW2nF,GAASz7C,EAAQu+C,EAAW,QAASp3H,KAAKmN,MAE1DuzC,IAAK,CACD,CAAC/T,GAAW2nF,GAASz7C,EAAQu+C,EAAW,MAAOp3H,KAAKE,OAIpE,CACJ,CACA,OAAOmR,CACX,CA6dqBy7G,CAAUzwG,EAAMxM,EAAQ88B,GACzC,IAAK,MAAQza,OAAQrb,EAAMhH,OAAQsnH,EAAI,MAAEz4H,EAAM,IAAEgiD,KAAUgsC,EAAS,CAChE,MAAQ78D,OAAO,gBAAE4lD,EAAiBzO,GAAW,CAAC,GAAOnwD,EAC/C0gH,GAAsB,IAAX1nH,EACjBumE,EAAI8E,OACJ9E,EAAI8I,UAAYzJ,EAChB+hD,GAAWphD,EAAKY,EAAO8B,EAAMy+C,GAAYnD,GAAWznF,EAAUjuC,EAAOgiD,IACrE01B,EAAI0G,YACJ,MAAMi6C,IAAa16G,EAAKuvG,YAAYx1C,EAAKv/D,GACzC,IAAIuhE,EACJ,GAAIm/C,EAAU,CACNR,EACA3gD,EAAI6G,YAEJw6C,GAAmBrhD,EAAKvmE,EAAQ6wC,EAAK/T,GAEzC,MAAM+qF,IAAe7nH,EAAO+7G,YAAYx1C,EAAK+gD,EAAK,CAC9Cp8B,KAAMg8B,EACN9+E,SAAS,IAEbmgC,EAAO2+C,GAAYW,EACdt/C,GACDq/C,GAAmBrhD,EAAKvmE,EAAQnR,EAAOiuC,EAE/C,CACAypC,EAAI6G,YACJ7G,EAAIkH,KAAKlF,EAAO,UAAY,WAC5BhC,EAAIkF,SACR,CACJ,CACA,SAASk8C,GAAWphD,EAAKY,EAAO8B,EAAMD,GAClC,MAAMwU,EAAYrW,EAAM1C,MAAM+Y,WACxB,SAAE1gD,EAAS,MAAEjuC,EAAM,IAAEgiD,GAASm4B,GAAU,CAAC,EAC/C,GAAiB,MAAblsC,GAAiC,MAAbA,EAAkB,CACtC,IAAI9B,EAAM4mB,EAAK1sB,EAAO2zC,EACL,MAAb/rC,GACA9B,EAAOnsC,EACP+yD,EAAM47B,EAAU57B,IAChB1sB,EAAQ2b,EACRg4B,EAAS2U,EAAU3U,SAEnB7tC,EAAOwiD,EAAUxiD,KACjB4mB,EAAM/yD,EACNqmC,EAAQsoD,EAAUtoD,MAClB2zC,EAASh4B,GAEb01B,EAAI0G,YACAhE,IACAjuC,EAAO7qC,KAAKmN,IAAI09B,EAAMiuC,EAAKjuC,MAC3B9F,EAAQ/kC,KAAKE,IAAI6kC,EAAO+zC,EAAK/zC,OAC7B0sB,EAAMzxD,KAAKmN,IAAIskD,EAAKqnB,EAAKrnB,KACzBinB,EAAS14E,KAAKE,IAAIw4E,EAAQI,EAAKJ,SAEnCtC,EAAIiH,KAAKxyC,EAAM4mB,EAAK1sB,EAAQ8F,EAAM6tC,EAASjnB,GAC3C2kB,EAAI0C,MACR,CACJ,CACA,SAAS2+C,GAAmBrhD,EAAKvmE,EAAQwgE,EAAO1jC,GAC5C,MAAMgrF,EAAoB9nH,EAAOsM,YAAYk0D,EAAO1jC,GAChDgrF,GACAvhD,EAAI+G,OAAOw6C,EAAkBhwG,EAAGgwG,EAAkB/vG,EAE1D,CAEA,IAAI9a,GAAQ,CACRmZ,GAAI,SACJ,mBAAA2xG,CAAqBtjD,EAAOo9C,EAAOnkH,GAC/B,MAAMkiE,GAAS6E,EAAMhzE,KAAKq0E,UAAY,IAAIv4E,OACpCs/B,EAAU,GAChB,IAAInD,EAAMp8B,EAAGkf,EAAM6V,EACnB,IAAI/0B,EAAI,EAAGA,EAAIsyE,IAAStyE,EACpBo8B,EAAO+6C,EAAMwhB,eAAe34F,GAC5Bkf,EAAOkd,EAAKiQ,QACZtX,EAAS,KACL7V,GAAQA,EAAK9O,SAAW8O,aAAgBswG,KACxCz6F,EAAS,CACLvD,QAAS2lD,EAAM2qB,iBAAiB9hG,GAChC2P,MAAO3P,EACPmgF,KAAMy3C,GAAY14G,EAAMlf,EAAGsyE,GAC3B6E,QACAvE,KAAMx2C,EAAKuV,WAAWvhC,QAAQgpE,UAC9BS,MAAOz9C,EAAKq2C,OACZvzD,SAGRkd,EAAKs+F,QAAU3lG,EACfwK,EAAQ7+B,KAAKq0B,GAEjB,IAAI/0B,EAAI,EAAGA,EAAIsyE,IAAStyE,EACpB+0B,EAASwK,EAAQv/B,GACZ+0B,IAA0B,IAAhBA,EAAOorD,OAGtBprD,EAAOorD,KAAOs3C,GAAel4F,EAASv/B,EAAGoQ,EAAQsnH,WAEzD,EACA,UAAAiD,CAAYxjD,EAAOo9C,EAAOnkH,GACtB,MAAMghF,EAA4B,eAArBhhF,EAAQwqH,SACftmC,EAAWnd,EAAM2zB,+BACjBvqB,EAAOpJ,EAAM+Y,UACnB,IAAI,IAAIlwF,EAAIs0F,EAASr0F,OAAS,EAAGD,GAAK,IAAKA,EAAE,CACzC,MAAM+0B,EAASu/D,EAASt0F,GAAG06H,QACtB3lG,IAGLA,EAAO7V,KAAKsqF,oBAAoBjpB,EAAMxrD,EAAO69C,MACzCwe,GAAQr8D,EAAOorD,MACfu4C,GAAUvhD,EAAM8B,IAAKlkD,EAAQwrD,GAErC,CACJ,EACA,kBAAAs6C,CAAoB1jD,EAAOo9C,EAAOnkH,GAC9B,GAAyB,uBAArBA,EAAQwqH,SACR,OAEJ,MAAMtmC,EAAWnd,EAAM2zB,+BACvB,IAAI,IAAI9qG,EAAIs0F,EAASr0F,OAAS,EAAGD,GAAK,IAAKA,EAAE,CACzC,MAAM+0B,EAASu/D,EAASt0F,GAAG06H,QACvBlD,GAAiBziG,IACjB2jG,GAAUvhD,EAAM8B,IAAKlkD,EAAQoiD,EAAM+Y,UAE3C,CACJ,EACA,iBAAA4qC,CAAmB3jD,EAAO7tE,EAAM8G,GAC5B,MAAM2kB,EAASzrB,EAAK8yB,KAAKs+F,QACpBlD,GAAiBziG,IAAgC,sBAArB3kB,EAAQwqH,UAGzClC,GAAUvhD,EAAM8B,IAAKlkD,EAAQoiD,EAAM+Y,UACvC,EACAvV,SAAU,CACN+8C,WAAW,EACXkD,SAAU,sBAIlB,MAAMG,GAAa,CAACC,EAAW3b,KAC3B,IAAI,UAAE4b,EAAW5b,EAAS,SAAE6b,EAAU7b,GAAc2b,EAKpD,OAJIA,EAAUG,gBACVF,EAAYp4H,KAAKE,IAAIk4H,EAAW5b,GAChC6b,EAAWF,EAAUI,iBAAmBv4H,KAAKE,IAAIm4H,EAAU7b,IAExD,CACH6b,WACAD,YACAI,WAAYx4H,KAAKmN,IAAIqvG,EAAU4b,KAIvC,MAAMK,WAAe,GACpB,WAAAp6H,CAAYi2D,GACLv+C,QACApY,KAAK+6H,QAAS,EACd/6H,KAAKg7H,eAAiB,GAC7Bh7H,KAAKi7H,aAAe,KACbj7H,KAAKk7H,cAAe,EACpBl7H,KAAK22E,MAAQhgB,EAAOggB,MACpB32E,KAAK4P,QAAU+mD,EAAO/mD,QACtB5P,KAAKy4E,IAAM9hB,EAAO8hB,IAClBz4E,KAAKm7H,iBAAcv7H,EACnBI,KAAKo7H,iBAAcx7H,EACnBI,KAAKq7H,gBAAaz7H,EAClBI,KAAK4iG,eAAYhjG,EACjBI,KAAKqiF,cAAWziF,EAChBI,KAAK8zD,SAAMl0D,EACXI,KAAK+6E,YAASn7E,EACdI,KAAKktC,UAAOttC,EACZI,KAAKonC,WAAQxnC,EACbI,KAAK+zD,YAASn0D,EACdI,KAAKmyB,WAAQvyB,EACbI,KAAKq0G,cAAWz0G,EAChBI,KAAKu+B,cAAW3+B,EAChBI,KAAKspE,YAAS1pE,EACdI,KAAKqtG,cAAWztG,CACpB,CACA,MAAAw3B,CAAOirD,EAAUugB,EAAW6P,GACxBzyG,KAAKqiF,SAAWA,EAChBriF,KAAK4iG,UAAYA,EACjB5iG,KAAKq0G,SAAW5B,EAChBzyG,KAAKo2G,gBACLp2G,KAAKs7H,cACLt7H,KAAKu4G,KACT,CACA,aAAAnC,GACQp2G,KAAKqlG,gBACLrlG,KAAKmyB,MAAQnyB,KAAKqiF,SAClBriF,KAAKktC,KAAOltC,KAAKq0G,SAASnnE,KAC1BltC,KAAKonC,MAAQpnC,KAAKmyB,QAElBnyB,KAAK+zD,OAAS/zD,KAAK4iG,UACnB5iG,KAAK8zD,IAAM9zD,KAAKq0G,SAASvgD,IACzB9zD,KAAK+6E,OAAS/6E,KAAK+zD,OAE3B,CACA,WAAAunE,GACI,MAAMd,EAAYx6H,KAAK4P,QAAQiqF,QAAU,CAAC,EAC1C,IAAIshC,EAAcntG,GAASwsG,EAAUl6B,eAAgB,CACjDtgG,KAAK22E,OACN32E,OAAS,GACRw6H,EAAU3yH,SACVszH,EAAcA,EAAYtzH,OAAQmlE,GAAOwtD,EAAU3yH,OAAOmlE,EAAMhtE,KAAK22E,MAAMhzE,QAE3E62H,EAAUvtF,OACVkuF,EAAcA,EAAYluF,KAAK,CAAC/jC,EAAGyE,IAAI6sH,EAAUvtF,KAAK/jC,EAAGyE,EAAG3N,KAAK22E,MAAMhzE,QAEvE3D,KAAK4P,QAAQ0qC,SACb6gF,EAAY7gF,UAEhBt6C,KAAKm7H,YAAcA,CACvB,CACA,GAAA5iB,GACI,MAAM,QAAE3oG,EAAQ,IAAE6oE,GAASz4E,KAC3B,IAAK4P,EAAQ+5C,QAET,YADA3pD,KAAKmyB,MAAQnyB,KAAK+zD,OAAS,GAG/B,MAAMymE,EAAY5qH,EAAQiqF,OACpB0hC,EAAYj4C,GAAOk3C,EAAUpiD,MAC7BymC,EAAW0c,EAAUx5F,KACrB+3E,EAAc95G,KAAKw7H,uBACnB,SAAEd,EAAS,WAAEG,GAAgBN,GAAWC,EAAW3b,GACzD,IAAI1sF,EAAO4hC,EACX0kB,EAAIL,KAAOmjD,EAAUptH,OACjBnO,KAAKqlG,gBACLlzE,EAAQnyB,KAAKqiF,SACbtuB,EAAS/zD,KAAKy7H,SAAS3hB,EAAa+E,EAAU6b,EAAUG,GAAc,KAEtE9mE,EAAS/zD,KAAK4iG,UACdzwE,EAAQnyB,KAAK07H,SAAS5hB,EAAayhB,EAAWb,EAAUG,GAAc,IAE1E76H,KAAKmyB,MAAQ9vB,KAAKE,IAAI4vB,EAAOviB,EAAQyyE,UAAYriF,KAAKqiF,UACtDriF,KAAK+zD,OAAS1xD,KAAKE,IAAIwxD,EAAQnkD,EAAQgzF,WAAa5iG,KAAK4iG,UAC7D,CACH,QAAA64B,CAAS3hB,EAAa+E,EAAU6b,EAAUG,GACnC,MAAM,IAAEpiD,EAAI,SAAE4J,EAAWzyE,SAAWiqF,QAAQ,QAAE/e,KAAmB96E,KAC3D27H,EAAW37H,KAAKg7H,eAAiB,GACjCK,EAAar7H,KAAKq7H,WAAa,CACjC,GAEE/iD,EAAauiD,EAAa//C,EAChC,IAAI8gD,EAAc9hB,EAClBrhC,EAAIuJ,UAAY,OAChBvJ,EAAIwJ,aAAe,SACnB,IAAI45C,GAAO,EACP/nE,GAAOwkB,EAkBX,OAjBAt4E,KAAKm7H,YAAY/3F,QAAQ,CAAC09D,EAAYthG,KAClC,MAAM6tF,EAAYqtC,EAAW7b,EAAW,EAAIpmC,EAAI0E,YAAY2jB,EAAWvtF,MAAM4e,OACnE,IAAN3yB,GAAW67H,EAAWA,EAAW57H,OAAS,GAAK4tF,EAAY,EAAIvS,EAAUuH,KACzEu5C,GAAetjD,EACf+iD,EAAWA,EAAW57H,QAAUD,EAAI,EAAI,EAAI,IAAM,EAClDs0D,GAAOwkB,EACPujD,KAEJF,EAASn8H,GAAK,CACV0tC,KAAM,EACN4mB,MACA+nE,MACA1pG,MAAOk7D,EACPt5B,OAAQ8mE,GAEZQ,EAAWA,EAAW57H,OAAS,IAAM4tF,EAAYvS,IAE9C8gD,CACX,CACA,QAAAF,CAAS5hB,EAAayhB,EAAWb,EAAUoB,GACvC,MAAM,IAAErjD,EAAI,UAAEmqB,EAAYhzF,SAAWiqF,QAAQ,QAAE/e,KAAmB96E,KAC5D27H,EAAW37H,KAAKg7H,eAAiB,GACjCI,EAAcp7H,KAAKo7H,YAAc,GACjCW,EAAcn5B,EAAYkX,EAChC,IAAIkiB,EAAalhD,EACbmhD,EAAkB,EAClBC,EAAmB,EACnBhvF,EAAO,EACPivF,EAAM,EA4BV,OA3BAn8H,KAAKm7H,YAAY/3F,QAAQ,CAAC09D,EAAYthG,KAClC,MAAM,UAAE6tF,EAAU,WAAEwtC,GAqRhC,SAA2BH,EAAUa,EAAW9iD,EAAKqoB,EAAYg7B,GAC7D,MAAMzuC,EAOV,SAA4ByT,EAAY45B,EAAUa,EAAW9iD,GACzD,IAAI2jD,EAAiBt7B,EAAWvtF,KAIhC,OAHI6oH,GAA4C,iBAAnBA,IACzBA,EAAiBA,EAAe79G,OAAO,CAACrV,EAAGyE,IAAIzE,EAAEzJ,OAASkO,EAAElO,OAASyJ,EAAIyE,IAEtE+sH,EAAWa,EAAUx5F,KAAO,EAAI02C,EAAI0E,YAAYi/C,GAAgBjqG,KAC3E,CAbsBkqG,CAAmBv7B,EAAY45B,EAAUa,EAAW9iD,GAChEoiD,EAaV,SAA6BiB,EAAah7B,EAAYw7B,GAClD,IAAIzB,EAAaiB,EAIjB,MAH+B,iBAApBh7B,EAAWvtF,OAClBsnH,EAAa0B,GAA0Bz7B,EAAYw7B,IAEhDzB,CACX,CAnBuB2B,CAAoBV,EAAah7B,EAAYy6B,EAAUjjD,YAC1E,MAAO,CACH+U,YACAwtC,aAER,CA5RgD4B,CAAkB/B,EAAUa,EAAW9iD,EAAKqoB,EAAYg7B,GACxFt8H,EAAI,GAAK08H,EAAmBrB,EAAa,EAAI//C,EAAUihD,IACvDC,GAAcC,EAAkBnhD,EAChCsgD,EAAYl7H,KAAK,CACbiyB,MAAO8pG,EACPloE,OAAQmoE,IAEZhvF,GAAQ+uF,EAAkBnhD,EAC1BqhD,IACAF,EAAkBC,EAAmB,GAEzCP,EAASn8H,GAAK,CACV0tC,OACA4mB,IAAKooE,EACLC,MACAhqG,MAAOk7D,EACPt5B,OAAQ8mE,GAEZoB,EAAkB55H,KAAKmN,IAAIysH,EAAiB5uC,GAC5C6uC,GAAoBrB,EAAa//C,IAErCkhD,GAAcC,EACdb,EAAYl7H,KAAK,CACbiyB,MAAO8pG,EACPloE,OAAQmoE,IAELF,CACX,CACA,cAAAU,GACI,IAAK18H,KAAK4P,QAAQ+5C,QACd,OAEJ,MAAMmwD,EAAc95G,KAAKw7H,uBACjBR,eAAgBW,EAAW/rH,SAAS,MAAE4hE,EAAQqoB,QAAQ,QAAE/e,GAAW,IAAEkS,IAAYhtF,KACnF28H,EAAY5vC,GAAcC,EAAKhtF,KAAKktC,KAAMltC,KAAKmyB,OACrD,GAAInyB,KAAKqlG,eAAgB,CACrB,IAAIw2B,EAAM,EACN3uF,EAAOukC,GAAeD,EAAOxxE,KAAKktC,KAAO4tC,EAAS96E,KAAKonC,MAAQpnC,KAAKq7H,WAAWQ,IACnF,IAAK,MAAMe,KAAUjB,EACbE,IAAQe,EAAOf,MACfA,EAAMe,EAAOf,IACb3uF,EAAOukC,GAAeD,EAAOxxE,KAAKktC,KAAO4tC,EAAS96E,KAAKonC,MAAQpnC,KAAKq7H,WAAWQ,KAEnFe,EAAO9oE,KAAO9zD,KAAK8zD,IAAMgmD,EAAch/B,EACvC8hD,EAAO1vF,KAAOyvF,EAAUvvC,WAAWuvC,EAAU3yG,EAAEkjB,GAAO0vF,EAAOzqG,OAC7D+a,GAAQ0vF,EAAOzqG,MAAQ2oD,CAE/B,KAAO,CACH,IAAIqhD,EAAM,EACNroE,EAAM2d,GAAeD,EAAOxxE,KAAK8zD,IAAMgmD,EAAch/B,EAAS96E,KAAK+6E,OAAS/6E,KAAKo7H,YAAYe,GAAKpoE,QACtG,IAAK,MAAM6oE,KAAUjB,EACbiB,EAAOT,MAAQA,IACfA,EAAMS,EAAOT,IACbroE,EAAM2d,GAAeD,EAAOxxE,KAAK8zD,IAAMgmD,EAAch/B,EAAS96E,KAAK+6E,OAAS/6E,KAAKo7H,YAAYe,GAAKpoE,SAEtG6oE,EAAO9oE,IAAMA,EACb8oE,EAAO1vF,MAAQltC,KAAKktC,KAAO4tC,EAC3B8hD,EAAO1vF,KAAOyvF,EAAUvvC,WAAWuvC,EAAU3yG,EAAE4yG,EAAO1vF,MAAO0vF,EAAOzqG,OACpE2hC,GAAO8oE,EAAO7oE,OAAS+mB,CAE/B,CACJ,CACA,YAAAuqB,GACI,MAAiC,QAA1BrlG,KAAK4P,QAAQ2uB,UAAgD,WAA1Bv+B,KAAK4P,QAAQ2uB,QAC3D,CACA,IAAAqyD,GACI,GAAI5wF,KAAK4P,QAAQ+5C,QAAS,CACtB,MAAM8uB,EAAMz4E,KAAKy4E,IACjBuH,GAASvH,EAAKz4E,MACdA,KAAK68H,QACL58C,GAAWxH,EACf,CACJ,CACH,KAAAokD,GACO,MAAQjtH,QAASixE,EAAK,YAAEu6C,EAAY,WAAEC,EAAW,IAAE5iD,GAASz4E,MACtD,MAAEwxE,EAAQqoB,OAAQ2gC,GAAe35C,EACjCi8C,EAAe3iD,GAAS9Q,MACxBszD,EAAY5vC,GAAclM,EAAKmM,IAAKhtF,KAAKktC,KAAMltC,KAAKmyB,OACpDopG,EAAYj4C,GAAOk3C,EAAUpiD,OAC7B,QAAE0C,GAAa0/C,EACf3b,EAAW0c,EAAUx5F,KACrBg7F,EAAele,EAAW,EAChC,IAAIme,EACJh9H,KAAKq+G,YACL5lC,EAAIuJ,UAAY26C,EAAU36C,UAAU,QACpCvJ,EAAIwJ,aAAe,SACnBxJ,EAAI6C,UAAY,GAChB7C,EAAIL,KAAOmjD,EAAUptH,OACrB,MAAM,SAAEusH,EAAS,UAAED,EAAU,WAAEI,GAAgBN,GAAWC,EAAW3b,GAqD/DxZ,EAAerlG,KAAKqlG,eACpByU,EAAc95G,KAAKw7H,sBAErBwB,EADA33B,EACS,CACLr7E,EAAGynD,GAAeD,EAAOxxE,KAAKktC,KAAO4tC,EAAS96E,KAAKonC,MAAQi0F,EAAW,IACtEpxG,EAAGjqB,KAAK8zD,IAAMgnB,EAAUg/B,EACxBp7F,KAAM,GAGD,CACLsL,EAAGhqB,KAAKktC,KAAO4tC,EACf7wD,EAAGwnD,GAAeD,EAAOxxE,KAAK8zD,IAAMgmD,EAAch/B,EAAS96E,KAAK+6E,OAASqgD,EAAY,GAAGrnE,QACxFr1C,KAAM,GAGd8uE,GAAsBxtF,KAAKy4E,IAAKoI,EAAKo8C,eACrC,MAAM3kD,EAAauiD,EAAa//C,EAChC96E,KAAKm7H,YAAY/3F,QAAQ,CAAC09D,EAAYthG,KAClCi5E,EAAI6I,YAAcwf,EAAWL,UAC7BhoB,EAAI8I,UAAYuf,EAAWL,UAC3B,MAAMvjB,EAAYzE,EAAI0E,YAAY2jB,EAAWvtF,MAAM4e,MAC7C6vD,EAAY26C,EAAU36C,UAAU8e,EAAW9e,YAAc8e,EAAW9e,UAAYw4C,EAAUx4C,YAC1F7vD,EAAQuoG,EAAWqC,EAAe7/C,EACxC,IAAIlzD,EAAIgzG,EAAOhzG,EACXC,EAAI+yG,EAAO/yG,EAiBf,GAhBA0yG,EAAUzvC,SAASltF,KAAKmyB,OACpBkzE,EACI7lG,EAAI,GAAKwqB,EAAImI,EAAQ2oD,EAAU96E,KAAKonC,QACpCnd,EAAI+yG,EAAO/yG,GAAKquD,EAChB0kD,EAAOt+G,OACPsL,EAAIgzG,EAAOhzG,EAAIynD,GAAeD,EAAOxxE,KAAKktC,KAAO4tC,EAAS96E,KAAKonC,MAAQi0F,EAAW2B,EAAOt+G,QAEtFlf,EAAI,GAAKyqB,EAAIquD,EAAat4E,KAAK+6E,SACtC/wD,EAAIgzG,EAAOhzG,EAAIA,EAAIoxG,EAAY4B,EAAOt+G,MAAMyT,MAAQ2oD,EACpDkiD,EAAOt+G,OACPuL,EAAI+yG,EAAO/yG,EAAIwnD,GAAeD,EAAOxxE,KAAK8zD,IAAMgmD,EAAch/B,EAAS96E,KAAK+6E,OAASqgD,EAAY4B,EAAOt+G,MAAMq1C,SAvFhG,SAAS/pC,EAAGC,EAAG62E,GACjC,GAAIz2F,MAAMqwH,IAAaA,GAAY,GAAKrwH,MAAMowH,IAAcA,EAAY,EACpE,OAEJhiD,EAAI8E,OACJ,MAAMjC,EAAYtQ,GAAe81B,EAAWxlB,UAAW,GAQvD,GAPA7C,EAAI8I,UAAYvW,GAAe81B,EAAWvf,UAAWu7C,GACrDrkD,EAAIi1C,QAAU1iD,GAAe81B,EAAW4sB,QAAS,QACjDj1C,EAAImoB,eAAiB51B,GAAe81B,EAAWF,eAAgB,GAC/DnoB,EAAIooB,SAAW71B,GAAe81B,EAAWD,SAAU,SACnDpoB,EAAI6C,UAAYA,EAChB7C,EAAI6I,YAActW,GAAe81B,EAAWxf,YAAaw7C,GACzDrkD,EAAIulC,YAAYhzC,GAAe81B,EAAWH,SAAU,KAChD65B,EAAUG,cAAe,CACzB,MAAMuC,EAAc,CAChBn+C,OAAQ07C,EAAYp4H,KAAK86H,MAAQ,EACjCt+C,WAAYiiB,EAAWjiB,WACvBC,SAAUgiB,EAAWhiB,SACrBc,YAAatE,GAEXgoB,EAAUq5B,EAAUxvC,MAAMnjE,EAAG0wG,EAAW,GAE9Cn8C,GAAgB9F,EAAKykD,EAAa55B,EADlBr5E,EAAI8yG,EACgCvC,EAAUI,iBAAmBF,EACrF,KAAO,CACH,MAAM0C,EAAUnzG,EAAI5nB,KAAKmN,KAAKqvG,EAAW4b,GAAa,EAAG,GACnD4C,EAAWV,EAAUvvC,WAAWpjE,EAAG0wG,GACnCl6B,EAAepd,GAAc0d,EAAWN,cAC9C/nB,EAAI0G,YACAl0E,OAAOoT,OAAOmiF,GAAc54E,KAAM27B,GAAU,IAANA,GACtCg/B,GAAmB9J,EAAK,CACpBzuD,EAAGqzG,EACHpzG,EAAGmzG,EACHhhE,EAAGs+D,EACH3/D,EAAG0/D,EACH17C,OAAQyhB,IAGZ/nB,EAAIiH,KAAK29C,EAAUD,EAAS1C,EAAUD,GAE1ChiD,EAAIkH,OACc,IAAdrE,GACA7C,EAAIoH,QAEZ,CACApH,EAAIkF,SACR,CA6CI2/C,CADcX,EAAU3yG,EAAEA,GACLC,EAAG62E,GACxB92E,EDvzPO,EAACwnD,EAAOtkC,EAAM9F,EAAO4lD,IAE7Bxb,KADOwb,EAAM,OAAS,SACJ5lD,EAAkB,WAAVoqC,GAAsBtkC,EAAO9F,GAAS,EAAI8F,ECqzP/DqwF,CAAOv7C,EAAWh4D,EAAI0wG,EAAWqC,EAAc13B,EAAer7E,EAAImI,EAAQnyB,KAAKonC,MAAOy5C,EAAKmM,KA7ClF,SAAShjE,EAAGC,EAAG62E,GAC5Blf,GAAWnJ,EAAKqoB,EAAWvtF,KAAMyW,EAAGC,EAAI4wG,EAAa,EAAGU,EAAW,CAC/Dz6C,cAAeggB,EAAWpqF,OAC1BsrE,UAAW26C,EAAU36C,UAAU8e,EAAW9e,YAElD,CAyCIM,CAASq6C,EAAU3yG,EAAEA,GAAIC,EAAG62E,GACxBuE,EACA23B,EAAOhzG,GAAKmI,EAAQ2oD,OACjB,GAA+B,iBAApBgmB,EAAWvtF,KAAmB,CAC5C,MAAM+oH,EAAiBf,EAAUjjD,WACjC0kD,EAAO/yG,GAAKsyG,GAA0Bz7B,EAAYw7B,GAAkBxhD,CACxE,MACIkiD,EAAO/yG,GAAKquD,IAGpBwV,GAAqB9tF,KAAKy4E,IAAKoI,EAAKo8C,cACxC,CACH,SAAA5e,GACO,MAAMx9B,EAAO7gF,KAAK4P,QACZgqG,EAAY/4B,EAAK7E,MACjBwhD,EAAYl6C,GAAOs2B,EAAUxhC,MAC7BqlD,EAAep6C,GAAUu2B,EAAU9+B,SACzC,IAAK8+B,EAAUjwD,QACX,OAEJ,MAAMgzE,EAAY5vC,GAAclM,EAAKmM,IAAKhtF,KAAKktC,KAAMltC,KAAKmyB,OACpDsmD,EAAMz4E,KAAKy4E,IACXl6C,EAAWq7E,EAAUr7E,SACrBw+F,EAAeS,EAAUz7F,KAAO,EAChC27F,EAA6BD,EAAa3pE,IAAMipE,EACtD,IAAI9yG,EACAijB,EAAOltC,KAAKktC,KACZm1C,EAAWriF,KAAKmyB,MACpB,GAAInyB,KAAKqlG,eACLhjB,EAAWhgF,KAAKmN,OAAOxP,KAAKq7H,YAC5BpxG,EAAIjqB,KAAK8zD,IAAM4pE,EACfxwF,EAAOukC,GAAeoP,EAAKrP,MAAOtkC,EAAMltC,KAAKonC,MAAQi7C,OAClD,CACH,MAAMugB,EAAY5iG,KAAKo7H,YAAY78G,OAAO,CAACoqB,EAAK5G,IAAO1/B,KAAKmN,IAAIm5B,EAAK5G,EAAKgyB,QAAS,GACnF9pC,EAAIyzG,EAA6BjsD,GAAeoP,EAAKrP,MAAOxxE,KAAK8zD,IAAK9zD,KAAK+6E,OAAS6nB,EAAY/hB,EAAKgZ,OAAO/e,QAAU96E,KAAKw7H,sBAC/H,CACA,MAAMxxG,EAAIynD,GAAelzC,EAAU2O,EAAMA,EAAOm1C,GAChD5J,EAAIuJ,UAAY26C,EAAU36C,UAAUzQ,GAAmBhzC,IACvDk6C,EAAIwJ,aAAe,SACnBxJ,EAAI6I,YAAcs4B,EAAUvwC,MAC5BoP,EAAI8I,UAAYq4B,EAAUvwC,MAC1BoP,EAAIL,KAAOolD,EAAUrvH,OACrByzE,GAAWnJ,EAAKmhC,EAAUrmG,KAAMyW,EAAGC,EAAGuzG,EAC1C,CACH,mBAAAhC,GACO,MAAM5hB,EAAY55G,KAAK4P,QAAQosE,MACzBwhD,EAAYl6C,GAAOs2B,EAAUxhC,MAC7BqlD,EAAep6C,GAAUu2B,EAAU9+B,SACzC,OAAO8+B,EAAUjwD,QAAU6zE,EAAUllD,WAAamlD,EAAa1pE,OAAS,CAC5E,CACH,gBAAA4pE,CAAiB3zG,EAAGC,GACb,IAAIzqB,EAAGo+H,EAAQC,EACf,GAAI3tD,GAAWlmD,EAAGhqB,KAAKktC,KAAMltC,KAAKonC,QAAU8oC,GAAWjmD,EAAGjqB,KAAK8zD,IAAK9zD,KAAK+6E,QAErE,IADA8iD,EAAK79H,KAAKg7H,eACNx7H,EAAI,EAAGA,EAAIq+H,EAAGp+H,SAAUD,EAExB,GADAo+H,EAASC,EAAGr+H,GACR0wE,GAAWlmD,EAAG4zG,EAAO1wF,KAAM0wF,EAAO1wF,KAAO0wF,EAAOzrG,QAAU+9C,GAAWjmD,EAAG2zG,EAAO9pE,IAAK8pE,EAAO9pE,IAAM8pE,EAAO7pE,QACxG,OAAO/zD,KAAKm7H,YAAY37H,GAIpC,OAAO,IACX,CACH,WAAAmtC,CAAY/9B,GACL,MAAMiyE,EAAO7gF,KAAK4P,QAClB,IAyDR,SAAoB/J,EAAMg7E,GACtB,QAAc,cAATh7E,GAAiC,aAATA,IAAyBg7E,EAAK7H,UAAW6H,EAAKi9C,aAGvEj9C,EAAK5H,SAAqB,UAATpzE,GAA6B,YAATA,EAI7C,CAjEak4H,CAAWnvH,EAAE/I,KAAMg7E,GACpB,OAEJ,MAAMm9C,EAAch+H,KAAK29H,iBAAiB/uH,EAAEob,EAAGpb,EAAEqb,GACjD,GAAe,cAAXrb,EAAE/I,MAAmC,aAAX+I,EAAE/I,KAAqB,CACjD,MAAMs6E,EAAWngF,KAAKi7H,aAChBgD,EA3XC,EAAC/0H,EAAGyE,IAAU,OAANzE,GAAoB,OAANyE,GAAczE,EAAEyiE,eAAiBh+D,EAAEg+D,cAAgBziE,EAAEiG,QAAUxB,EAAEwB,MA2X7E+uH,CAAW/9C,EAAU69C,GAClC79C,IAAa89C,GACbjwG,GAAS6yD,EAAKi9C,QAAS,CACnBlvH,EACAuxE,EACAngF,MACDA,MAEPA,KAAKi7H,aAAe+C,EAChBA,IAAgBC,GAChBjwG,GAAS6yD,EAAK7H,QAAS,CACnBpqE,EACAovH,EACAh+H,MACDA,KAEX,MAAWg+H,GACPhwG,GAAS6yD,EAAK5H,QAAS,CACnBrqE,EACAovH,EACAh+H,MACDA,KAEX,EAwBJ,SAASu8H,GAA0Bz7B,EAAYw7B,GAE3C,OAAOA,GADax7B,EAAWvtF,KAAOutF,EAAWvtF,KAAK9T,OAAS,EAEnE,CAUA,IAAI0+H,GAAgB,CAChB71G,GAAI,SACPlE,SAAU02G,GACP,KAAA/5H,CAAO41E,EAAOo9C,EAAOnkH,GACjB,MAAMywF,EAAS1pB,EAAM0pB,OAAS,IAAIy6B,GAAO,CACrCriD,IAAK9B,EAAM8B,IACX7oE,UACA+mE,UAEJg3B,GAAQ5a,UAAUpc,EAAO0pB,EAAQzwF,GACjC+9F,GAAQC,OAAOj3B,EAAO0pB,EAC1B,EACA,IAAA/+F,CAAMq1E,GACFg3B,GAAQI,UAAUp3B,EAAOA,EAAM0pB,eACxB1pB,EAAM0pB,MACjB,EACA,YAAA2V,CAAcr/B,EAAOo9C,EAAOnkH,GACxB,MAAMywF,EAAS1pB,EAAM0pB,OACrBsN,GAAQ5a,UAAUpc,EAAO0pB,EAAQzwF,GACjCywF,EAAOzwF,QAAUA,CACrB,EACA,WAAA6oG,CAAa9hC,GACT,MAAM0pB,EAAS1pB,EAAM0pB,OACrBA,EAAOi7B,cACPj7B,EAAOq8B,gBACX,EACA,UAAA0B,CAAYznD,EAAO7tE,GACVA,EAAK6hH,QACNh0C,EAAM0pB,OAAO1zD,YAAY7jC,EAAKrD,MAEtC,EACA00E,SAAU,CACNxwB,SAAS,EACTprB,SAAU,MACVizC,MAAO,SACP67B,UAAU,EACV/yD,SAAS,EACTgvB,OAAQ,IACR,OAAA2P,CAASrqE,EAAGkyF,EAAYT,GACpB,MAAMlxF,EAAQ2xF,EAAWn1B,aACnB0yD,EAAKh+B,EAAO1pB,MACd0nD,EAAG/8B,iBAAiBnyF,IACpBkvH,EAAG1sG,KAAKxiB,GACR2xF,EAAWpqF,QAAS,IAEpB2nH,EAAG7sG,KAAKriB,GACR2xF,EAAWpqF,QAAS,EAE5B,EACAsiE,QAAS,KACT8kD,QAAS,KACTjkC,OAAQ,CACJxwB,MAAQoP,GAAMA,EAAI9B,MAAM/mE,QAAQy5D,MAChCqxD,SAAU,GACV5/C,QAAS,GACT,cAAAwlB,CAAgB3pB,GACZ,MAAMqB,EAAWrB,EAAMhzE,KAAKq0E,UACpB6hB,QAAQ,cAAE8gC,EAAc,WAAE97C,EAAW,UAAEmD,EAAU,MAAE3Y,EAAM,gBAAEk3B,EAAgB,aAAEC,IAAqB7pB,EAAM0pB,OAAOzwF,QACvH,OAAO+mE,EAAMod,yBAAyB7rF,IAAK0zB,IACvC,MAAM1J,EAAQ0J,EAAKuV,WAAWs7C,SAASkuC,EAAgB,OAAI/6H,GACrDggF,EAAcyD,GAAUnxD,EAAM0tD,aACpC,MAAO,CACHrsE,KAAMykE,EAASp8C,EAAKzsB,OAAOm6C,MAC3Bi4B,UAAWrvD,EAAM4lD,gBACjB2oB,UAAWp3B,EACX3yD,QAASklB,EAAK5K,QACd08F,QAASx7F,EAAMg9D,eACfyR,SAAUzuE,EAAMi9D,WAChByR,eAAgB1uE,EAAMk9D,iBACtByR,SAAU3uE,EAAMm9D,gBAChB/T,WAAYsE,EAAYztD,MAAQytD,EAAY7rB,QAAU,EACtDutB,YAAapvD,EAAM6lD,YACnB8G,WAAYA,GAAc3sD,EAAM2sD,WAChCC,SAAU5sD,EAAM4sD,SAChBkD,UAAWA,GAAa9vD,EAAM8vD,UAC9Bwe,aAAcD,IAAoBC,GAAgBtuE,EAAMsuE,cACxD70B,aAAc/vC,EAAKzsB,QAExBnP,KACP,GAEJg8E,MAAO,CACH3S,MAAQoP,GAAMA,EAAI9B,MAAM/mE,QAAQy5D,MAChC1f,SAAS,EACTprB,SAAU,SACVhrB,KAAM,KAGdgmC,YAAa,CACT6gC,YAAcr7E,IAAQA,EAAKmc,WAAW,MACtC2+E,OAAQ,CACJzf,YAAcr7E,IAAQ,CACd,iBACA,SACA,QACF2V,SAAS3V,MAK3B,MAAMu/H,WAAc,GACnB,WAAA59H,CAAYi2D,GACLv+C,QACApY,KAAK22E,MAAQhgB,EAAOggB,MACpB32E,KAAK4P,QAAU+mD,EAAO/mD,QACtB5P,KAAKy4E,IAAM9hB,EAAO8hB,IAClBz4E,KAAKu+H,cAAW3+H,EAChBI,KAAK8zD,SAAMl0D,EACXI,KAAK+6E,YAASn7E,EACdI,KAAKktC,UAAOttC,EACZI,KAAKonC,WAAQxnC,EACbI,KAAKmyB,WAAQvyB,EACbI,KAAK+zD,YAASn0D,EACdI,KAAKu+B,cAAW3+B,EAChBI,KAAKspE,YAAS1pE,EACdI,KAAKqtG,cAAWztG,CACpB,CACA,MAAAw3B,CAAOirD,EAAUugB,GACb,MAAM/hB,EAAO7gF,KAAK4P,QAGlB,GAFA5P,KAAKktC,KAAO,EACZltC,KAAK8zD,IAAM,GACN+sB,EAAKl3B,QAEN,YADA3pD,KAAKmyB,MAAQnyB,KAAK+zD,OAAS/zD,KAAKonC,MAAQpnC,KAAK+6E,OAAS,GAG1D/6E,KAAKmyB,MAAQnyB,KAAKonC,MAAQi7C,EAC1BriF,KAAK+zD,OAAS/zD,KAAK+6E,OAAS6nB,EAC5B,MAAMya,EAAY5oG,GAAQosE,EAAKttE,MAAQstE,EAAKttE,KAAK9T,OAAS,EAC1DO,KAAKu+H,SAAWl7C,GAAUxC,EAAK/F,SAC/B,MAAM0jD,EAAWnhB,EAAY/5B,GAAOzC,EAAKzI,MAAME,WAAat4E,KAAKu+H,SAASxqE,OACtE/zD,KAAKqlG,eACLrlG,KAAK+zD,OAASyqE,EAEdx+H,KAAKmyB,MAAQqsG,CAErB,CACA,YAAAn5B,GACI,MAAMxa,EAAM7qF,KAAK4P,QAAQ2uB,SACzB,MAAe,QAARssD,GAAyB,WAARA,CAC5B,CACA,SAAA4zC,CAAUzjD,GACN,MAAM,IAAElnB,EAAI,KAAE5mB,EAAK,OAAE6tC,EAAO,MAAE3zC,EAAM,QAAEx3B,GAAa5P,KAC7CwxE,EAAQ5hE,EAAQ4hE,MACtB,IACI6Q,EAAUi8B,EAAQC,EADlBz/B,EAAW,EAkBf,OAhBI9+E,KAAKqlG,gBACLiZ,EAAS7sC,GAAeD,EAAOtkC,EAAM9F,GACrCm3E,EAASzqD,EAAMknB,EACfqH,EAAWj7C,EAAQ8F,IAEM,SAArBt9B,EAAQ2uB,UACR+/E,EAASpxE,EAAO8tC,EAChBujC,EAAS9sC,GAAeD,EAAOuJ,EAAQjnB,GACvCgrB,GAAiB,GAAN7R,KAEXqxC,EAASl3E,EAAQ4zC,EACjBujC,EAAS9sC,GAAeD,EAAO1d,EAAKinB,GACpC+D,EAAgB,GAAL7R,IAEfoV,EAAWtH,EAASjnB,GAEjB,CACHwqD,SACAC,SACAl8B,WACAvD,WAER,CACA,IAAA8R,GACI,MAAMnY,EAAMz4E,KAAKy4E,IACXoI,EAAO7gF,KAAK4P,QAClB,IAAKixE,EAAKl3B,QACN,OAEJ,MAAM+0E,EAAWp7C,GAAOzC,EAAKzI,MAEvB4C,EADa0jD,EAASpmD,WACA,EAAIt4E,KAAKu+H,SAASzqE,KACxC,OAAEwqD,EAAO,OAAEC,EAAO,SAAEl8B,EAAS,SAAEvD,GAAc9+E,KAAKy+H,UAAUzjD,GAClE4G,GAAWnJ,EAAKoI,EAAKttE,KAAM,EAAG,EAAGmrH,EAAU,CACvCr1D,MAAOwX,EAAKxX,MACZgZ,WACAvD,WACAkD,UAAWzQ,GAAmBsP,EAAKrP,OACnCyQ,aAAc,SACdF,YAAa,CACTu8B,EACAC,IAGZ,EAYJ,IAAIogB,GAAe,CACfr2G,GAAI,QACPlE,SAAUk6G,GACP,KAAAv9H,CAAO41E,EAAOo9C,EAAOnkH,IAbzB,SAAqB+mE,EAAOijC,GACxB,MAAM59B,EAAQ,IAAIsiD,GAAM,CACpB7lD,IAAK9B,EAAM8B,IACX7oE,QAASgqG,EACTjjC,UAEJg3B,GAAQ5a,UAAUpc,EAAOqF,EAAO49B,GAChCjM,GAAQC,OAAOj3B,EAAOqF,GACtBrF,EAAMioD,WAAa5iD,CACvB,CAKQ6iD,CAAYloD,EAAO/mE,EACvB,EACA,IAAAtO,CAAMq1E,GACF,MAAMioD,EAAajoD,EAAMioD,WACzBjxB,GAAQI,UAAUp3B,EAAOioD,UAClBjoD,EAAMioD,UACjB,EACA,YAAA5oB,CAAcr/B,EAAOo9C,EAAOnkH,GACxB,MAAMosE,EAAQrF,EAAMioD,WACpBjxB,GAAQ5a,UAAUpc,EAAOqF,EAAOpsE,GAChCosE,EAAMpsE,QAAUA,CACpB,EACAuqE,SAAU,CACN3I,MAAO,SACP7nB,SAAS,EACTyuB,KAAM,CACF9O,OAAQ,QAEZ+jC,UAAU,EACVvyB,QAAS,GACTv8C,SAAU,MACVhrB,KAAM,GACN+1D,OAAQ,KAEZ81C,cAAe,CACX/1C,MAAO,SAEX9vB,YAAa,CACT6gC,aAAa,EACbC,YAAY,IAIpB,MAAM,GAAM,IAAItjE,QAChB,IAAI+nH,GAAkB,CAClBx2G,GAAI,WACJ,KAAAvnB,CAAO41E,EAAOo9C,EAAOnkH,GACjB,MAAMosE,EAAQ,IAAIsiD,GAAM,CACpB7lD,IAAK9B,EAAM8B,IACX7oE,UACA+mE,UAEJg3B,GAAQ5a,UAAUpc,EAAOqF,EAAOpsE,GAChC+9F,GAAQC,OAAOj3B,EAAOqF,GACtB,GAAIzkE,IAAIo/D,EAAOqF,EACnB,EACA,IAAA16E,CAAMq1E,GACFg3B,GAAQI,UAAUp3B,EAAO,GAAIphE,IAAIohE,IACjC,GAAItxD,OAAOsxD,EACf,EACA,YAAAq/B,CAAcr/B,EAAOo9C,EAAOnkH,GACxB,MAAMosE,EAAQ,GAAIzmE,IAAIohE,GACtBg3B,GAAQ5a,UAAUpc,EAAOqF,EAAOpsE,GAChCosE,EAAMpsE,QAAUA,CACpB,EACAuqE,SAAU,CACN3I,MAAO,SACP7nB,SAAS,EACTyuB,KAAM,CACF9O,OAAQ,UAEZ+jC,UAAU,EACVvyB,QAAS,EACTv8C,SAAU,MACVhrB,KAAM,GACN+1D,OAAQ,MAEZ81C,cAAe,CACX/1C,MAAO,SAEX9vB,YAAa,CACT6gC,aAAa,EACbC,YAAY,IAIpB,MAAM0kD,GAAc,CACnB,OAAAC,CAAS9tD,GACF,IAAKA,EAAMzxE,OACP,OAAO,EAEX,IAAID,EAAG0N,EACH+xH,EAAO,IAAIjgG,IACX/U,EAAI,EACJ6nD,EAAQ,EACZ,IAAItyE,EAAI,EAAG0N,EAAMgkE,EAAMzxE,OAAQD,EAAI0N,IAAO1N,EAAE,CACxC,MAAM+sF,EAAKrb,EAAM1xE,GAAGmK,QACpB,GAAI4iF,GAAMA,EAAGl4C,WAAY,CACrB,MAAMw2C,EAAM0B,EAAGwmB,kBACfksB,EAAKx2H,IAAIoiF,EAAI7gE,GACbC,GAAK4gE,EAAI5gE,IACP6nD,CACN,CACJ,CACA,GAAc,IAAVA,GAA6B,IAAdmtD,EAAKl9F,KACpB,OAAO,EAEX,MAAMm9F,EAAW,IACVD,GACL1gH,OAAO,CAACrV,EAAGyE,IAAIzE,EAAIyE,GAAKsxH,EAAKl9F,KAC/B,MAAO,CACH/X,EAAGk1G,EACHj1G,EAAGA,EAAI6nD,EAEf,EACH,OAAA85B,CAAS16B,EAAOiuD,GACT,IAAKjuD,EAAMzxE,OACP,OAAO,EAEX,IAGID,EAAG0N,EAAKkyH,EAHRp1G,EAAIm1G,EAAcn1G,EAClBC,EAAIk1G,EAAcl1G,EAClBihF,EAAc9gG,OAAOijE,kBAEzB,IAAI7tE,EAAI,EAAG0N,EAAMgkE,EAAMzxE,OAAQD,EAAI0N,IAAO1N,EAAE,CACxC,MAAM+sF,EAAKrb,EAAM1xE,GAAGmK,QACpB,GAAI4iF,GAAMA,EAAGl4C,WAAY,CACrB,MACMn/B,EAAIo6D,GAAsB6vD,EADjB5yC,EAAG4e,kBAEdj2F,EAAIg2F,IACJA,EAAch2F,EACdkqH,EAAiB7yC,EAEzB,CACJ,CACA,GAAI6yC,EAAgB,CAChB,MAAMC,EAAKD,EAAersB,kBAC1B/oF,EAAIq1G,EAAGr1G,EACPC,EAAIo1G,EAAGp1G,CACX,CACA,MAAO,CACHD,IACAC,IAER,GAEJ,SAASq1G,GAAaxmC,EAAMymC,GAQxB,OAPIA,IACI9qH,GAAQ8qH,GACR7yH,MAAMnH,UAAUrF,KAAKmN,MAAMyrF,EAAMymC,GAEjCzmC,EAAK54F,KAAKq/H,IAGXzmC,CACX,CACC,SAAS0mC,GAActsE,GACpB,OAAoB,iBAARA,GAAoBA,aAAel/C,SAAWk/C,EAAI/vD,QAAQ,OAAS,EACpE+vD,EAAI9gD,MAAM,MAEd8gD,CACX,CACC,SAASusE,GAAkB9oD,EAAO3J,GAC/B,MAAM,QAAErjE,EAAQ,aAAEgiE,EAAa,MAAEx8D,GAAW69D,EACtC77B,EAAawlC,EAAMwhB,eAAexsB,GAAcx6B,YAChD,MAAEmY,EAAM,MAAEpqD,GAAWiyC,EAAW8pD,iBAAiB9rF,GACvD,MAAO,CACHwnE,QACArtB,QACA89B,OAAQj2C,EAAW+oD,UAAU/qF,GAC7BqsF,IAAK7kB,EAAMhzE,KAAKq0E,SAASrM,GAAchoE,KAAKwL,GAC5CuwH,eAAgBxgI,EAChB2sC,QAASsF,EAAWkmD,aACpBkE,UAAWpsF,EACXw8D,eACAhiE,UAER,CACC,SAASg2H,GAAeC,EAAShwH,GAC9B,MAAM6oE,EAAMmnD,EAAQjpD,MAAM8B,KACpB,KAAEn4D,EAAK,OAAEu/G,EAAO,MAAE7jD,GAAW4jD,GAC7B,SAAElF,EAAS,UAAED,GAAe7qH,EAC5BkwH,EAAWx8C,GAAO1zE,EAAQkwH,UAC1BtC,EAAYl6C,GAAO1zE,EAAQ4tH,WAC3BuC,EAAaz8C,GAAO1zE,EAAQmwH,YAC5BC,EAAiBhkD,EAAMv8E,OACvBwgI,EAAkBJ,EAAOpgI,OACzBygI,EAAoB5/G,EAAK7gB,OACzBq7E,EAAUuI,GAAUzzE,EAAQkrE,SAClC,IAAI/mB,EAAS+mB,EAAQ/mB,OACjB5hC,EAAQ,EACRguG,EAAqB7/G,EAAK/B,OAAO,CAACuzD,EAAOsuD,IAAWtuD,EAAQsuD,EAAS58F,OAAO/jC,OAAS2gI,EAAS9hH,MAAM7e,OAAS2gI,EAASl9F,MAAMzjC,OAAQ,GACxI0gI,GAAsBP,EAAQS,WAAW5gI,OAASmgI,EAAQU,UAAU7gI,OAChEugI,IACAjsE,GAAUisE,EAAiBxC,EAAUllD,YAAc0nD,EAAiB,GAAKpwH,EAAQ2wH,aAAe3wH,EAAQ4wH,mBAExGL,IAEApsE,GAAUmsE,GADatwH,EAAQ6wH,cAAgBp+H,KAAKmN,IAAIirH,EAAWqF,EAASxnD,YAAcwnD,EAASxnD,aACnD6nD,EAAqBD,GAAqBJ,EAASxnD,YAAc6nD,EAAqB,GAAKvwH,EAAQ8wH,aAEnJT,IACAlsE,GAAUnkD,EAAQ+wH,gBAAkBV,EAAkBF,EAAWznD,YAAc2nD,EAAkB,GAAKrwH,EAAQgxH,eAElH,IAAIC,EAAe,EACnB,MAAMC,EAAe,SAASpiH,GAC1ByT,EAAQ9vB,KAAKmN,IAAI2iB,EAAOsmD,EAAI0E,YAAYz+D,GAAMyT,MAAQ0uG,EAC1D,EAiBA,OAhBApoD,EAAI8E,OACJ9E,EAAIL,KAAOolD,EAAUrvH,OACrBi9D,GAAKw0D,EAAQ5jD,MAAO8kD,GACpBroD,EAAIL,KAAO0nD,EAAS3xH,OACpBi9D,GAAKw0D,EAAQS,WAAWh0H,OAAOuzH,EAAQU,WAAYQ,GACnDD,EAAejxH,EAAQ6wH,cAAgB/F,EAAW,EAAI9qH,EAAQw8F,WAAa,EAC3EhhC,GAAK9qD,EAAO8/G,IACRh1D,GAAKg1D,EAAS58F,OAAQs9F,GACtB11D,GAAKg1D,EAAS9hH,MAAOwiH,GACrB11D,GAAKg1D,EAASl9F,MAAO49F,KAEzBD,EAAe,EACfpoD,EAAIL,KAAO2nD,EAAW5xH,OACtBi9D,GAAKw0D,EAAQC,OAAQiB,GACrBroD,EAAIkF,UACJxrD,GAAS2oD,EAAQ3oD,MACV,CACHA,QACA4hC,SAER,CAoBA,SAASgtE,GAAgBpqD,EAAO/mE,EAASmyB,EAAMi/F,GAC3C,MAAM,EAAEh3G,EAAE,MAAEmI,GAAW4P,GACf5P,MAAO8uG,EAAavxC,WAAW,KAAExiD,EAAK,MAAE9F,IAAcuvC,EAC9D,IAAIuqD,EAAS,SAWb,MAVe,WAAXF,EACAE,EAASl3G,IAAMkjB,EAAO9F,GAAS,EAAI,OAAS,QACrCpd,GAAKmI,EAAQ,EACpB+uG,EAAS,OACFl3G,GAAKi3G,EAAa9uG,EAAQ,IACjC+uG,EAAS,SAnBjB,SAA6BA,EAAQvqD,EAAO/mE,EAASmyB,GACjD,MAAM,EAAE/X,EAAE,MAAEmI,GAAW4P,EACjBo/F,EAAQvxH,EAAQwxH,UAAYxxH,EAAQyxH,aAC1C,MAAe,SAAXH,GAAqBl3G,EAAImI,EAAQgvG,EAAQxqD,EAAMxkD,OAGpC,UAAX+uG,GAAsBl3G,EAAImI,EAAQgvG,EAAQ,QAA9C,CAGJ,CAYQG,CAAoBJ,EAAQvqD,EAAO/mE,EAASmyB,KAC5Cm/F,EAAS,UAENA,CACX,CACC,SAASK,GAAmB5qD,EAAO/mE,EAASmyB,GACzC,MAAMi/F,EAASj/F,EAAKi/F,QAAUpxH,EAAQoxH,QApC1C,SAAyBrqD,EAAO50C,GAC5B,MAAM,EAAE9X,EAAE,OAAE8pC,GAAYhyB,EACxB,OAAI9X,EAAI8pC,EAAS,EACN,MACA9pC,EAAI0sD,EAAM5iB,OAASA,EAAS,EAC5B,SAEJ,QACX,CA4BoDytE,CAAgB7qD,EAAO50C,GACvE,MAAO,CACHm/F,OAAQn/F,EAAKm/F,QAAUtxH,EAAQsxH,QAAUH,GAAgBpqD,EAAO/mE,EAASmyB,EAAMi/F,GAC/EA,SAER,CAqBC,SAASS,GAAmB7xH,EAASmyB,EAAM2/F,EAAW/qD,GACnD,MAAM,UAAEyqD,EAAU,aAAEC,EAAa,aAAE3iD,GAAkB9uE,GAC/C,OAAEsxH,EAAO,OAAEF,GAAYU,EACvBC,EAAiBP,EAAYC,GAC7B,QAAE7+C,EAAQ,SAAEG,EAAS,WAAEF,EAAW,YAAEC,GAAiBU,GAAc1E,GACzE,IAAI10D,EAzBR,SAAgB+X,EAAMm/F,GAClB,IAAI,EAAEl3G,EAAE,MAAEmI,GAAW4P,EAMrB,MALe,UAAXm/F,EACAl3G,GAAKmI,EACa,WAAX+uG,IACPl3G,GAAKmI,EAAQ,GAEVnI,CACX,CAiBY43G,CAAO7/F,EAAMm/F,GACrB,MAAMj3G,EAjBV,SAAgB8X,EAAMi/F,EAAQW,GAC1B,IAAI,EAAE13G,EAAE,OAAE8pC,GAAYhyB,EAQtB,MAPe,QAAXi/F,EACA/2G,GAAK03G,EAEL13G,GADkB,WAAX+2G,EACFjtE,EAAS4tE,EAET5tE,EAAS,EAEX9pC,CACX,CAOc43G,CAAO9/F,EAAMi/F,EAAQW,GAY/B,MAXe,WAAXX,EACe,SAAXE,EACAl3G,GAAK23G,EACa,UAAXT,IACPl3G,GAAK23G,GAES,SAAXT,EACPl3G,GAAK3nB,KAAKmN,IAAIgzE,EAASC,GAAc2+C,EACnB,UAAXF,IACPl3G,GAAK3nB,KAAKmN,IAAImzE,EAAUD,GAAe0+C,GAEpC,CACHp3G,EAAGimD,GAAYjmD,EAAG,EAAG2sD,EAAMxkD,MAAQ4P,EAAK5P,OACxClI,EAAGgmD,GAAYhmD,EAAG,EAAG0sD,EAAM5iB,OAAShyB,EAAKgyB,QAEjD,CACA,SAAS+tE,GAAYlC,EAASpuD,EAAO5hE,GACjC,MAAMkrE,EAAUuI,GAAUzzE,EAAQkrE,SAClC,MAAiB,WAAVtJ,EAAqBouD,EAAQ51G,EAAI41G,EAAQztG,MAAQ,EAAc,UAAVq/C,EAAoBouD,EAAQ51G,EAAI41G,EAAQztG,MAAQ2oD,EAAQ1zC,MAAQw4F,EAAQ51G,EAAI8wD,EAAQ5tC,IACpJ,CACC,SAAS60F,GAAwB/zG,GAC9B,OAAOsxG,GAAa,GAAIE,GAAcxxG,GAC1C,CAQA,SAASg0G,GAAkBp2E,EAAWrgD,GAClC,MAAMmuE,EAAWnuE,GAAWA,EAAQsgC,SAAWtgC,EAAQsgC,QAAQ+zF,SAAWr0H,EAAQsgC,QAAQ+zF,QAAQh0E,UAClG,OAAO8tB,EAAW9tB,EAAU8tB,SAASA,GAAY9tB,CACrD,CACA,MAAMq2E,GAAmB,CACrBC,YAAax3D,GACb,KAAAsR,CAAOmmD,GACH,GAAIA,EAAa1iI,OAAS,EAAG,CACzB,MAAMutE,EAAOm1D,EAAa,GACpBtoC,EAAS7sB,EAAK2J,MAAMhzE,KAAKk2F,OACzBuoC,EAAavoC,EAASA,EAAOp6F,OAAS,EAC5C,GAAIO,MAAQA,KAAK4P,SAAiC,YAAtB5P,KAAK4P,QAAQi1B,KACrC,OAAOmoC,EAAKnhC,QAAQyd,OAAS,GAC1B,GAAI0jB,EAAK1jB,MACZ,OAAO0jB,EAAK1jB,MACT,GAAI84E,EAAa,GAAKp1D,EAAKuuB,UAAY6mC,EAC1C,OAAOvoC,EAAO7sB,EAAKuuB,UAE3B,CACA,MAAO,EACX,EACA8mC,WAAY33D,GACZ21D,WAAY31D,GACZ43D,YAAa53D,GACb,KAAAphB,CAAOi5E,GACH,GAAIviI,MAAQA,KAAK4P,SAAiC,YAAtB5P,KAAK4P,QAAQi1B,KACrC,OAAO09F,EAAYj5E,MAAQ,KAAOi5E,EAAY7C,gBAAkB6C,EAAY7C,eAEhF,IAAIp2E,EAAQi5E,EAAY12F,QAAQyd,OAAS,GACrCA,IACAA,GAAS,MAEb,MAAMpqD,EAAQqjI,EAAY7C,eAI1B,OAHK90D,GAAc1rE,KACfoqD,GAASpqD,GAENoqD,CACX,EACA,UAAAk5E,CAAYD,GACR,MACM3yH,EADO2yH,EAAY5rD,MAAMwhB,eAAeoqC,EAAY52D,cACrCx6B,WAAWs7C,SAAS81C,EAAYhnC,WACrD,MAAO,CACHxjB,YAAanoE,EAAQmoE,YACrBD,gBAAiBloE,EAAQkoE,gBACzB8H,YAAahwE,EAAQgwE,YACrBuP,WAAYv/E,EAAQu/E,WACpBC,iBAAkBx/E,EAAQw/E,iBAC1BoR,aAAc,EAEtB,EACA,cAAAiiC,GACI,OAAOziI,KAAK4P,QAAQ8yH,SACxB,EACA,eAAAC,CAAiBJ,GACb,MACM3yH,EADO2yH,EAAY5rD,MAAMwhB,eAAeoqC,EAAY52D,cACrCx6B,WAAWs7C,SAAS81C,EAAYhnC,WACrD,MAAO,CACH1c,WAAYjvE,EAAQivE,WACpBC,SAAUlvE,EAAQkvE,SAE1B,EACA8jD,WAAYl4D,GACZ41D,UAAW51D,GACXm4D,aAAcn4D,GACdm1D,OAAQn1D,GACRo4D,YAAap4D,IAEhB,SAASq4D,GAA2Bn3E,EAAW7sD,EAAM05E,EAAKnkE,GACvD,MAAMzF,EAAS+8C,EAAU7sD,GAAMgG,KAAK0zE,EAAKnkE,GACzC,YAAsB,IAAXzF,EACAozH,GAAiBljI,GAAMgG,KAAK0zE,EAAKnkE,GAErCzF,CACX,CACA,MAAMm0H,WAAgB,GACrBzqE,mBAAqBwmE,GAClB,WAAAr+H,CAAYi2D,GACRv+C,QACApY,KAAKoyB,QAAU,EACfpyB,KAAK6wF,QAAU,GACf7wF,KAAKijI,oBAAiBrjI,EACtBI,KAAKkjI,WAAQtjI,EACbI,KAAKmjI,uBAAoBvjI,EACzBI,KAAKojI,cAAgB,GACrBpjI,KAAKqzF,iBAAczzF,EACnBI,KAAK42F,cAAWh3F,EAChBI,KAAK22E,MAAQhgB,EAAOggB,MACpB32E,KAAK4P,QAAU+mD,EAAO/mD,QACtB5P,KAAKqjI,gBAAazjI,EAClBI,KAAKg8E,WAAQp8E,EACbI,KAAKqgI,gBAAazgI,EAClBI,KAAKsgB,UAAO1gB,EACZI,KAAKsgI,eAAY1gI,EACjBI,KAAK6/H,YAASjgI,EACdI,KAAKkhI,YAASthI,EACdI,KAAKghI,YAASphI,EACdI,KAAKgqB,OAAIpqB,EACTI,KAAKiqB,OAAIrqB,EACTI,KAAK+zD,YAASn0D,EACdI,KAAKmyB,WAAQvyB,EACbI,KAAKsjI,YAAS1jI,EACdI,KAAKujI,YAAS3jI,EACdI,KAAKwjI,iBAAc5jI,EACnBI,KAAKyjI,sBAAmB7jI,EACxBI,KAAK0jI,qBAAkB9jI,CAC3B,CACA,UAAA09C,CAAW1tC,GACP5P,KAAK4P,QAAUA,EACf5P,KAAKmjI,uBAAoBvjI,EACzBI,KAAK42F,cAAWh3F,CACpB,CACH,kBAAAm8F,GACO,MAAMhG,EAAS/1F,KAAKmjI,kBACpB,GAAIptC,EACA,OAAOA,EAEX,MAAMpf,EAAQ32E,KAAK22E,MACb/mE,EAAU5P,KAAK4P,QAAQg2E,WAAW5lF,KAAKm+E,cACvC0C,EAAOjxE,EAAQ3P,SAAW02E,EAAM/mE,QAAQioE,WAAajoE,EAAQgrE,WAC7DA,EAAa,IAAIgY,GAAW5yF,KAAK22E,MAAOkK,GAI9C,OAHIA,EAAKuD,aACLpkF,KAAKmjI,kBAAoBl4H,OAAO67B,OAAO8zC,IAEpCA,CACX,CACH,UAAAuD,GACO,OAAOn+E,KAAK42F,WAAa52F,KAAK42F,SApI3BjT,GAoI2D3jF,KAAK22E,MAAMwH,aApIhD,CACzByhD,QAmIuF5/H,KAlIvFmiI,aAkI6FniI,KAAKojI,cAjIlGv9H,KAAM,YAkIV,CACA,QAAA89H,CAASp4H,EAASqE,GACd,MAAM,UAAEg8C,GAAeh8C,EACjBsyH,EAAca,GAA2Bn3E,EAAW,cAAe5rD,KAAMuL,GACzEywE,EAAQ+mD,GAA2Bn3E,EAAW,QAAS5rD,KAAMuL,GAC7D82H,EAAaU,GAA2Bn3E,EAAW,aAAc5rD,KAAMuL,GAC7E,IAAI+S,EAAQ,GAIZ,OAHAA,EAAQghH,GAAahhH,EAAOkhH,GAAc0C,IAC1C5jH,EAAQghH,GAAahhH,EAAOkhH,GAAcxjD,IAC1C19D,EAAQghH,GAAahhH,EAAOkhH,GAAc6C,IACnC/jH,CACX,CACA,aAAAslH,CAAczB,EAAcvyH,GACxB,OAAOmyH,GAAwBgB,GAA2BnzH,EAAQg8C,UAAW,aAAc5rD,KAAMmiI,GACrG,CACA,OAAA0B,CAAQ1B,EAAcvyH,GAClB,MAAM,UAAEg8C,GAAeh8C,EACjBk0H,EAAY,GAalB,OAZA14D,GAAK+2D,EAAe52H,IAChB,MAAM60H,EAAW,CACb58F,OAAQ,GACRllB,MAAO,GACP4kB,MAAO,IAEL6gG,EAAS/B,GAAkBp2E,EAAWrgD,GAC5C+zH,GAAac,EAAS58F,OAAQg8F,GAAcuD,GAA2BgB,EAAQ,cAAe/jI,KAAMuL,KACpG+zH,GAAac,EAAS9hH,MAAOykH,GAA2BgB,EAAQ,QAAS/jI,KAAMuL,IAC/E+zH,GAAac,EAASl9F,MAAOs8F,GAAcuD,GAA2BgB,EAAQ,aAAc/jI,KAAMuL,KAClGu4H,EAAU5jI,KAAKkgI,KAEZ0D,CACX,CACA,YAAAE,CAAa7B,EAAcvyH,GACvB,OAAOmyH,GAAwBgB,GAA2BnzH,EAAQg8C,UAAW,YAAa5rD,KAAMmiI,GACpG,CACA,SAAA8B,CAAU9B,EAAcvyH,GACpB,MAAM,UAAEg8C,GAAeh8C,EACjBizH,EAAeE,GAA2Bn3E,EAAW,eAAgB5rD,KAAMmiI,GAC3EtC,EAASkD,GAA2Bn3E,EAAW,SAAU5rD,KAAMmiI,GAC/DW,EAAcC,GAA2Bn3E,EAAW,cAAe5rD,KAAMmiI,GAC/E,IAAI7jH,EAAQ,GAIZ,OAHAA,EAAQghH,GAAahhH,EAAOkhH,GAAcqD,IAC1CvkH,EAAQghH,GAAahhH,EAAOkhH,GAAcK,IAC1CvhH,EAAQghH,GAAahhH,EAAOkhH,GAAcsD,IACnCxkH,CACX,CACH,YAAA4lH,CAAat0H,GACN,MAAM8qE,EAAS16E,KAAK6wF,QACdltF,EAAO3D,KAAK22E,MAAMhzE,KAClB6/H,EAAc,GACdC,EAAmB,GACnBC,EAAkB,GACxB,IACIlkI,EAAG0N,EADHi1H,EAAe,GAEnB,IAAI3iI,EAAI,EAAG0N,EAAMwtE,EAAOj7E,OAAQD,EAAI0N,IAAO1N,EACvC2iI,EAAajiI,KAAKu/H,GAAkBz/H,KAAK22E,MAAO+D,EAAOl7E,KAkB3D,OAhBIoQ,EAAQ/H,SACRs6H,EAAeA,EAAat6H,OAAO,CAAC8B,EAASwF,EAAOi0C,IAAQxzC,EAAQ/H,OAAO8B,EAASwF,EAAOi0C,EAAOz/C,KAElGiM,EAAQu0H,WACRhC,EAAeA,EAAal1F,KAAK,CAAC/jC,EAAGyE,IAAIiC,EAAQu0H,SAASj7H,EAAGyE,EAAGhK,KAEpEynE,GAAK+2D,EAAe52H,IAChB,MAAMw4H,EAAS/B,GAAkBpyH,EAAQg8C,UAAWrgD,GACpDi4H,EAAYtjI,KAAK6iI,GAA2BgB,EAAQ,aAAc/jI,KAAMuL,IACxEk4H,EAAiBvjI,KAAK6iI,GAA2BgB,EAAQ,kBAAmB/jI,KAAMuL,IAClFm4H,EAAgBxjI,KAAK6iI,GAA2BgB,EAAQ,iBAAkB/jI,KAAMuL,MAEpFvL,KAAKwjI,YAAcA,EACnBxjI,KAAKyjI,iBAAmBA,EACxBzjI,KAAK0jI,gBAAkBA,EACvB1jI,KAAKqjI,WAAalB,EACXA,CACX,CACA,MAAA/qG,CAAOi8C,EAASs3C,GACZ,MAAM/6G,EAAU5P,KAAK4P,QAAQg2E,WAAW5lF,KAAKm+E,cACvCzD,EAAS16E,KAAK6wF,QACpB,IAAI7pF,EACAm7H,EAAe,GACnB,GAAKznD,EAAOj7E,OAML,CACH,MAAM8+B,EAAWwgG,GAAYnvH,EAAQ2uB,UAAUx5B,KAAK/E,KAAM06E,EAAQ16E,KAAKijI,gBACvEd,EAAeniI,KAAKkkI,aAAat0H,GACjC5P,KAAKg8E,MAAQh8E,KAAK2jI,SAASxB,EAAcvyH,GACzC5P,KAAKqgI,WAAargI,KAAK4jI,cAAczB,EAAcvyH,GACnD5P,KAAKsgB,KAAOtgB,KAAK6jI,QAAQ1B,EAAcvyH,GACvC5P,KAAKsgI,UAAYtgI,KAAKgkI,aAAa7B,EAAcvyH,GACjD5P,KAAK6/H,OAAS7/H,KAAKikI,UAAU9B,EAAcvyH,GAC3C,MAAMmyB,EAAO/hC,KAAKkjI,MAAQvD,GAAe3/H,KAAM4P,GACzCw0H,EAAkBn5H,OAAOuc,OAAO,CAAC,EAAG+W,EAAUwD,GAC9C2/F,EAAYH,GAAmBvhI,KAAK22E,MAAO/mE,EAASw0H,GACpDC,EAAkB5C,GAAmB7xH,EAASw0H,EAAiB1C,EAAW1hI,KAAK22E,OACrF32E,KAAKkhI,OAASQ,EAAUR,OACxBlhI,KAAKghI,OAASU,EAAUV,OACxBh6H,EAAa,CACTorB,QAAS,EACTpI,EAAGq6G,EAAgBr6G,EACnBC,EAAGo6G,EAAgBp6G,EACnBkI,MAAO4P,EAAK5P,MACZ4hC,OAAQhyB,EAAKgyB,OACbuvE,OAAQ/kG,EAASvU,EACjBu5G,OAAQhlG,EAAStU,EAEzB,MA5ByB,IAAjBjqB,KAAKoyB,UACLprB,EAAa,CACTorB,QAAS,IA2BrBpyB,KAAKojI,cAAgBjB,EACrBniI,KAAK42F,cAAWh3F,EACZoH,GACAhH,KAAK+7F,qBAAqB3kE,OAAOp3B,KAAMgH,GAEvCqsE,GAAWzjE,EAAQ00H,UACnB10H,EAAQ00H,SAASv/H,KAAK/E,KAAM,CACxB22E,MAAO32E,KAAK22E,MACZipD,QAAS5/H,KACT2qH,UAGZ,CACA,SAAA4Z,CAAUC,EAAc/rD,EAAK12C,EAAMnyB,GAC/B,MAAM60H,EAAgBzkI,KAAK0kI,iBAAiBF,EAAcziG,EAAMnyB,GAChE6oE,EAAI+G,OAAOilD,EAAcloB,GAAIkoB,EAAcjoB,IAC3C/jC,EAAI+G,OAAOilD,EAAchoB,GAAIgoB,EAAc/nB,IAC3CjkC,EAAI+G,OAAOilD,EAAcE,GAAIF,EAAcG,GAC/C,CACA,gBAAAF,CAAiBF,EAAcziG,EAAMnyB,GACjC,MAAM,OAAEsxH,EAAO,OAAEF,GAAYhhI,MACvB,UAAEohI,EAAU,aAAE1iD,GAAkB9uE,GAChC,QAAE4yE,EAAQ,SAAEG,EAAS,WAAEF,EAAW,YAAEC,GAAiBU,GAAc1E,IACjE10D,EAAG66G,EAAM56G,EAAG66G,GAASN,GACvB,MAAEryG,EAAM,OAAE4hC,GAAYhyB,EAC5B,IAAIw6E,EAAIE,EAAIkoB,EAAInoB,EAAIE,EAAIkoB,EAoCxB,MAnCe,WAAX5D,GACAtkB,EAAKooB,EAAM/wE,EAAS,EACL,SAAXmtE,GACA3kB,EAAKsoB,EACLpoB,EAAKF,EAAK6kB,EACV5kB,EAAKE,EAAK0kB,EACVwD,EAAKloB,EAAK0kB,IAEV7kB,EAAKsoB,EAAM1yG,EACXsqF,EAAKF,EAAK6kB,EACV5kB,EAAKE,EAAK0kB,EACVwD,EAAKloB,EAAK0kB,GAEduD,EAAKpoB,IAGDE,EADW,SAAXykB,EACK2D,EAAMxiI,KAAKmN,IAAIgzE,EAASC,GAAc2+C,EACzB,UAAXF,EACF2D,EAAM1yG,EAAQ9vB,KAAKmN,IAAImzE,EAAUD,GAAe0+C,EAEhDphI,KAAKsjI,OAEC,QAAXtC,GACAxkB,EAAKsoB,EACLpoB,EAAKF,EAAK4kB,EACV7kB,EAAKE,EAAK2kB,EACVuD,EAAKloB,EAAK2kB,IAEV5kB,EAAKsoB,EAAM/wE,EACX2oD,EAAKF,EAAK4kB,EACV7kB,EAAKE,EAAK2kB,EACVuD,EAAKloB,EAAK2kB,GAEdwD,EAAKpoB,GAEF,CACHD,KACAE,KACAkoB,KACAnoB,KACAE,KACAkoB,KAER,CACA,SAAAvmB,CAAUh2B,EAAI5P,EAAK7oE,GACf,MAAMosE,EAAQh8E,KAAKg8E,MACbv8E,EAASu8E,EAAMv8E,OACrB,IAAI+9H,EAAW+C,EAAc/gI,EAC7B,GAAIC,EAAQ,CACR,MAAMk9H,EAAY5vC,GAAcn9E,EAAQo9E,IAAKhtF,KAAKgqB,EAAGhqB,KAAKmyB,OAQ1D,IAPAk2D,EAAGr+D,EAAI83G,GAAY9hI,KAAM4P,EAAQskG,WAAYtkG,GAC7C6oE,EAAIuJ,UAAY26C,EAAU36C,UAAUpyE,EAAQskG,YAC5Cz7B,EAAIwJ,aAAe,SACnBu7C,EAAYl6C,GAAO1zE,EAAQ4tH,WAC3B+C,EAAe3wH,EAAQ2wH,aACvB9nD,EAAI8I,UAAY3xE,EAAQm1H,WACxBtsD,EAAIL,KAAOolD,EAAUrvH,OACjB3O,EAAI,EAAGA,EAAIC,IAAUD,EACrBi5E,EAAI6J,SAAStG,EAAMx8E,GAAIm9H,EAAU3yG,EAAEq+D,EAAGr+D,GAAIq+D,EAAGp+D,EAAIuzG,EAAUllD,WAAa,GACxE+P,EAAGp+D,GAAKuzG,EAAUllD,WAAaioD,EAC3B/gI,EAAI,IAAMC,IACV4oF,EAAGp+D,GAAKra,EAAQ4wH,kBAAoBD,EAGhD,CACJ,CACH,aAAAyE,CAAcvsD,EAAK4P,EAAI7oF,EAAGm9H,EAAW/sH,GAC9B,MAAM4yH,EAAaxiI,KAAKwjI,YAAYhkI,GAC9BmjI,EAAkB3iI,KAAKyjI,iBAAiBjkI,IACxC,UAAEi7H,EAAU,SAAEC,GAAc9qH,EAC5BkwH,EAAWx8C,GAAO1zE,EAAQkwH,UAC1BmF,EAASnD,GAAY9hI,KAAM,OAAQ4P,GACnCs1H,EAAYvI,EAAU3yG,EAAEi7G,GACxBE,EAAU1K,EAAYqF,EAASxnD,YAAcwnD,EAASxnD,WAAamiD,GAAa,EAAI,EACpF2K,EAAS/8C,EAAGp+D,EAAIk7G,EACtB,GAAIv1H,EAAQ+qH,cAAe,CACvB,MAAMuC,EAAc,CAChBn+C,OAAQ18E,KAAKE,IAAIm4H,EAAUD,GAAa,EACxC57C,WAAY8jD,EAAgB9jD,WAC5BC,SAAU6jD,EAAgB7jD,SAC1Bc,YAAa,GAEX0jB,EAAUq5B,EAAUvvC,WAAW83C,EAAWxK,GAAYA,EAAW,EACjEn3B,EAAU6hC,EAAS3K,EAAY,EACrChiD,EAAI6I,YAAc1xE,EAAQy1H,mBAC1B5sD,EAAI8I,UAAY3xE,EAAQy1H,mBACxB/mD,GAAU7F,EAAKykD,EAAa55B,EAASC,GACrC9qB,EAAI6I,YAAckhD,EAAWzqD,YAC7BU,EAAI8I,UAAYihD,EAAW1qD,gBAC3BwG,GAAU7F,EAAKykD,EAAa55B,EAASC,EACzC,KAAO,CACH9qB,EAAI6C,UAAYjsE,GAASmzH,EAAW5iD,aAAev9E,KAAKmN,OAAOvE,OAAOoT,OAAOmkH,EAAW5iD,cAAgB4iD,EAAW5iD,aAAe,EAClInH,EAAI6I,YAAckhD,EAAWzqD,YAC7BU,EAAIulC,YAAYwkB,EAAWrzC,YAAc,IACzC1W,EAAImoB,eAAiB4hC,EAAWpzC,kBAAoB,EACpD,MAAMk2C,EAAS3I,EAAUvvC,WAAW83C,EAAWxK,GACzC6K,EAAS5I,EAAUvvC,WAAWuvC,EAAUxvC,MAAM+3C,EAAW,GAAIxK,EAAW,GACxEl6B,EAAepd,GAAco/C,EAAWhiC,cAC1Cv1F,OAAOoT,OAAOmiF,GAAc54E,KAAM27B,GAAU,IAANA,IACtCk1B,EAAI0G,YACJ1G,EAAI8I,UAAY3xE,EAAQy1H,mBACxB9iD,GAAmB9J,EAAK,CACpBzuD,EAAGs7G,EACHr7G,EAAGm7G,EACHhpE,EAAGs+D,EACH3/D,EAAG0/D,EACH17C,OAAQyhB,IAEZ/nB,EAAIkH,OACJlH,EAAIoH,SACJpH,EAAI8I,UAAYihD,EAAW1qD,gBAC3BW,EAAI0G,YACJoD,GAAmB9J,EAAK,CACpBzuD,EAAGu7G,EACHt7G,EAAGm7G,EAAS,EACZhpE,EAAGs+D,EAAW,EACd3/D,EAAG0/D,EAAY,EACf17C,OAAQyhB,IAEZ/nB,EAAIkH,SAEJlH,EAAI8I,UAAY3xE,EAAQy1H,mBACxB5sD,EAAIkJ,SAAS2jD,EAAQF,EAAQ1K,EAAUD,GACvChiD,EAAI+sD,WAAWF,EAAQF,EAAQ1K,EAAUD,GACzChiD,EAAI8I,UAAYihD,EAAW1qD,gBAC3BW,EAAIkJ,SAAS4jD,EAAQH,EAAS,EAAG1K,EAAW,EAAGD,EAAY,GAEnE,CACAhiD,EAAI8I,UAAYvhF,KAAK0jI,gBAAgBlkI,EACzC,CACA,QAAAimI,CAASp9C,EAAI5P,EAAK7oE,GACd,MAAM,KAAE0Q,GAAUtgB,MACZ,YAAE0gI,EAAY,UAAEgF,EAAU,cAAEjF,EAAc,UAAEhG,EAAU,SAAEC,EAAS,WAAEtuB,GAAgBx8F,EACnFkwH,EAAWx8C,GAAO1zE,EAAQkwH,UAChC,IAAI6F,EAAiB7F,EAASxnD,WAC1BstD,EAAe,EACnB,MAAMjJ,EAAY5vC,GAAcn9E,EAAQo9E,IAAKhtF,KAAKgqB,EAAGhqB,KAAKmyB,OACpD0zG,EAAiB,SAASnnH,GAC5B+5D,EAAI6J,SAAS5jE,EAAMi+G,EAAU3yG,EAAEq+D,EAAGr+D,EAAI47G,GAAev9C,EAAGp+D,EAAI07G,EAAiB,GAC7Et9C,EAAGp+D,GAAK07G,EAAiBjF,CAC7B,EACMoF,EAA0BnJ,EAAU36C,UAAU0jD,GACpD,IAAItF,EAAU2F,EAAWznH,EAAO9e,EAAG8N,EAAGk+D,EAAMgS,EAQ5C,IAPA/E,EAAIuJ,UAAY0jD,EAChBjtD,EAAIwJ,aAAe,SACnBxJ,EAAIL,KAAO0nD,EAAS3xH,OACpBk6E,EAAGr+D,EAAI83G,GAAY9hI,KAAM8lI,EAAyBl2H,GAClD6oE,EAAI8I,UAAY3xE,EAAQ8yH,UACxBt3D,GAAKprE,KAAKqgI,WAAYwF,GACtBD,EAAenF,GAA6C,UAA5BqF,EAAoD,WAAdJ,EAAyBhL,EAAW,EAAItuB,EAAasuB,EAAW,EAAItuB,EAAa,EACnJ5sG,EAAI,EAAGgsE,EAAOlrD,EAAK7gB,OAAQD,EAAIgsE,IAAQhsE,EAAE,CAUzC,IATA4gI,EAAW9/G,EAAK9gB,GAChBumI,EAAY/lI,KAAK0jI,gBAAgBlkI,GACjCi5E,EAAI8I,UAAYwkD,EAChB36D,GAAKg1D,EAAS58F,OAAQqiG,GACtBvnH,EAAQ8hH,EAAS9hH,MACbmiH,GAAiBniH,EAAM7e,SACvBO,KAAKglI,cAAcvsD,EAAK4P,EAAI7oF,EAAGm9H,EAAW/sH,GAC1C+1H,EAAiBtjI,KAAKmN,IAAIswH,EAASxnD,WAAYmiD,IAE/CntH,EAAI,EAAGkwE,EAAOl/D,EAAM7e,OAAQ6N,EAAIkwE,IAAQlwE,EACxCu4H,EAAevnH,EAAMhR,IACrBq4H,EAAiB7F,EAASxnD,WAE9BlN,GAAKg1D,EAASl9F,MAAO2iG,EACzB,CACAD,EAAe,EACfD,EAAiB7F,EAASxnD,WAC1BlN,GAAKprE,KAAKsgI,UAAWuF,GACrBx9C,EAAGp+D,GAAKy2G,CACZ,CACA,UAAAsF,CAAW39C,EAAI5P,EAAK7oE,GAChB,MAAMiwH,EAAS7/H,KAAK6/H,OACdpgI,EAASogI,EAAOpgI,OACtB,IAAIsgI,EAAYvgI,EAChB,GAAIC,EAAQ,CACR,MAAMk9H,EAAY5vC,GAAcn9E,EAAQo9E,IAAKhtF,KAAKgqB,EAAGhqB,KAAKmyB,OAQ1D,IAPAk2D,EAAGr+D,EAAI83G,GAAY9hI,KAAM4P,EAAQq2H,YAAar2H,GAC9Cy4E,EAAGp+D,GAAKra,EAAQ+wH,gBAChBloD,EAAIuJ,UAAY26C,EAAU36C,UAAUpyE,EAAQq2H,aAC5CxtD,EAAIwJ,aAAe,SACnB89C,EAAaz8C,GAAO1zE,EAAQmwH,YAC5BtnD,EAAI8I,UAAY3xE,EAAQs2H,YACxBztD,EAAIL,KAAO2nD,EAAW5xH,OAClB3O,EAAI,EAAGA,EAAIC,IAAUD,EACrBi5E,EAAI6J,SAASu9C,EAAOrgI,GAAIm9H,EAAU3yG,EAAEq+D,EAAGr+D,GAAIq+D,EAAGp+D,EAAI81G,EAAWznD,WAAa,GAC1E+P,EAAGp+D,GAAK81G,EAAWznD,WAAa1oE,EAAQgxH,aAEhD,CACJ,CACA,cAAA/iB,CAAex1B,EAAI5P,EAAK0tD,EAAav2H,GACjC,MAAM,OAAEsxH,EAAO,OAAEF,GAAYhhI,MACvB,EAAEgqB,EAAE,EAAEC,GAAOo+D,GACb,MAAEl2D,EAAM,OAAE4hC,GAAYoyE,GACtB,QAAE3jD,EAAQ,SAAEG,EAAS,WAAEF,EAAW,YAAEC,GAAiBU,GAAcxzE,EAAQ8uE,cACjFjG,EAAI8I,UAAY3xE,EAAQkoE,gBACxBW,EAAI6I,YAAc1xE,EAAQmoE,YAC1BU,EAAI6C,UAAY1rE,EAAQgwE,YACxBnH,EAAI0G,YACJ1G,EAAI8G,OAAOv1D,EAAIw4D,EAASv4D,GACT,QAAX+2G,GACAhhI,KAAKukI,UAAUl8C,EAAI5P,EAAK0tD,EAAav2H,GAEzC6oE,EAAI+G,OAAOx1D,EAAImI,EAAQwwD,EAAU14D,GACjCwuD,EAAI2tD,iBAAiBp8G,EAAImI,EAAOlI,EAAGD,EAAImI,EAAOlI,EAAI04D,GACnC,WAAXq+C,GAAkC,UAAXE,GACvBlhI,KAAKukI,UAAUl8C,EAAI5P,EAAK0tD,EAAav2H,GAEzC6oE,EAAI+G,OAAOx1D,EAAImI,EAAOlI,EAAI8pC,EAAS2uB,GACnCjK,EAAI2tD,iBAAiBp8G,EAAImI,EAAOlI,EAAI8pC,EAAQ/pC,EAAImI,EAAQuwD,EAAaz4D,EAAI8pC,GAC1D,WAAXitE,GACAhhI,KAAKukI,UAAUl8C,EAAI5P,EAAK0tD,EAAav2H,GAEzC6oE,EAAI+G,OAAOx1D,EAAIy4D,EAAYx4D,EAAI8pC,GAC/B0kB,EAAI2tD,iBAAiBp8G,EAAGC,EAAI8pC,EAAQ/pC,EAAGC,EAAI8pC,EAAS0uB,GACrC,WAAXu+C,GAAkC,SAAXE,GACvBlhI,KAAKukI,UAAUl8C,EAAI5P,EAAK0tD,EAAav2H,GAEzC6oE,EAAI+G,OAAOx1D,EAAGC,EAAIu4D,GAClB/J,EAAI2tD,iBAAiBp8G,EAAGC,EAAGD,EAAIw4D,EAASv4D,GACxCwuD,EAAI6G,YACJ7G,EAAIkH,OACA/vE,EAAQgwE,YAAc,GACtBnH,EAAIoH,QAEZ,CACH,sBAAAwmD,CAAuBz2H,GAChB,MAAM+mE,EAAQ32E,KAAK22E,MACbyZ,EAAQpwF,KAAKqzF,YACbizC,EAAQl2C,GAASA,EAAMpmE,EACvBu8G,EAAQn2C,GAASA,EAAMnmE,EAC7B,GAAIq8G,GAASC,EAAO,CAChB,MAAMhoG,EAAWwgG,GAAYnvH,EAAQ2uB,UAAUx5B,KAAK/E,KAAMA,KAAK6wF,QAAS7wF,KAAKijI,gBAC7E,IAAK1kG,EACD,OAEJ,MAAMwD,EAAO/hC,KAAKkjI,MAAQvD,GAAe3/H,KAAM4P,GACzCw0H,EAAkBn5H,OAAOuc,OAAO,CAAC,EAAG+W,EAAUv+B,KAAKkjI,OACnDxB,EAAYH,GAAmB5qD,EAAO/mE,EAASw0H,GAC/C1xD,EAAQ+uD,GAAmB7xH,EAASw0H,EAAiB1C,EAAW/qD,GAClE2vD,EAAMj0C,MAAQ3f,EAAM1oD,GAAKu8G,EAAMl0C,MAAQ3f,EAAMzoD,IAC7CjqB,KAAKkhI,OAASQ,EAAUR,OACxBlhI,KAAKghI,OAASU,EAAUV,OACxBhhI,KAAKmyB,MAAQ4P,EAAK5P,MAClBnyB,KAAK+zD,OAAShyB,EAAKgyB,OACnB/zD,KAAKsjI,OAAS/kG,EAASvU,EACvBhqB,KAAKujI,OAAShlG,EAAStU,EACvBjqB,KAAK+7F,qBAAqB3kE,OAAOp3B,KAAM0yE,GAE/C,CACJ,CACH,WAAA8zD,GACO,QAASxmI,KAAKoyB,OAClB,CACA,IAAAw+D,CAAKnY,GACD,MAAM7oE,EAAU5P,KAAK4P,QAAQg2E,WAAW5lF,KAAKm+E,cAC7C,IAAI/rD,EAAUpyB,KAAKoyB,QACnB,IAAKA,EACD,OAEJpyB,KAAKqmI,uBAAuBz2H,GAC5B,MAAMu2H,EAAc,CAChBh0G,MAAOnyB,KAAKmyB,MACZ4hC,OAAQ/zD,KAAK+zD,QAEXs0B,EAAK,CACPr+D,EAAGhqB,KAAKgqB,EACRC,EAAGjqB,KAAKiqB,GAEZmI,EAAU/vB,KAAKoI,IAAI2nB,GAAW,KAAO,EAAIA,EACzC,MAAM0oD,EAAUuI,GAAUzzE,EAAQkrE,SAC5B2rD,EAAoBzmI,KAAKg8E,MAAMv8E,QAAUO,KAAKqgI,WAAW5gI,QAAUO,KAAKsgB,KAAK7gB,QAAUO,KAAKsgI,UAAU7gI,QAAUO,KAAK6/H,OAAOpgI,OAC9HmQ,EAAQ3P,SAAWwmI,IACnBhuD,EAAI8E,OACJ9E,EAAIiuD,YAAct0G,EAClBpyB,KAAK69G,eAAex1B,EAAI5P,EAAK0tD,EAAav2H,GAC1C49E,GAAsB/U,EAAK7oE,EAAQqtH,eACnC50C,EAAGp+D,GAAK6wD,EAAQhnB,IAChB9zD,KAAKq+G,UAAUh2B,EAAI5P,EAAK7oE,GACxB5P,KAAKylI,SAASp9C,EAAI5P,EAAK7oE,GACvB5P,KAAKgmI,WAAW39C,EAAI5P,EAAK7oE,GACzBk+E,GAAqBrV,EAAK7oE,EAAQqtH,eAClCxkD,EAAIkF,UAEZ,CACH,iBAAA2sC,GACO,OAAOtqH,KAAK6wF,SAAW,EAC3B,CACH,iBAAA05B,CAAkBC,EAAgB2U,GAC3B,MAAM1U,EAAazqH,KAAK6wF,QAClBnW,EAAS8vC,EAAetiH,IAAI,EAAGyjE,eAAex8D,YAChD,MAAMysB,EAAO57B,KAAK22E,MAAMwhB,eAAexsB,GACvC,IAAK/vC,EACD,MAAM,IAAIzU,MAAM,kCAAoCwkD,GAExD,MAAO,CACHA,eACAhiE,QAASiyB,EAAKj4B,KAAKwL,GACnBA,WAGFkkE,GAAW/H,GAAem/C,EAAY/vC,GACtCisD,EAAkB3mI,KAAK4mI,iBAAiBlsD,EAAQykD,IAClD9rD,GAAWszD,KACX3mI,KAAK6wF,QAAUnW,EACf16E,KAAKijI,eAAiB9D,EACtBn/H,KAAK6mI,qBAAsB,EAC3B7mI,KAAKo3B,QAAO,GAEpB,CACH,WAAAuV,CAAY/9B,EAAG+7G,EAAQI,GAAc,GAC9B,GAAIJ,GAAU3qH,KAAK6mI,oBACf,OAAO,EAEX7mI,KAAK6mI,qBAAsB,EAC3B,MAAMj3H,EAAU5P,KAAK4P,QACf66G,EAAazqH,KAAK6wF,SAAW,GAC7BnW,EAAS16E,KAAKirH,mBAAmBr8G,EAAG67G,EAAYE,EAAQI,GACxD4b,EAAkB3mI,KAAK4mI,iBAAiBlsD,EAAQ9rE,GAChDykE,EAAUs3C,IAAWr/C,GAAeoP,EAAQ+vC,IAAekc,EAWjE,OAVItzD,IACArzE,KAAK6wF,QAAUnW,GACX9qE,EAAQ3P,SAAW2P,EAAQ00H,YAC3BtkI,KAAKijI,eAAiB,CAClBj5G,EAAGpb,EAAEob,EACLC,EAAGrb,EAAEqb,GAETjqB,KAAKo3B,QAAO,EAAMuzF,KAGnBt3C,CACX,CACH,kBAAA43C,CAAmBr8G,EAAG67G,EAAYE,EAAQI,GACnC,MAAMn7G,EAAU5P,KAAK4P,QACrB,GAAe,aAAXhB,EAAE/I,KACF,MAAO,GAEX,IAAKklH,EACD,OAAON,EAAW5iH,OAAQrI,GAAIQ,KAAK22E,MAAMhzE,KAAKq0E,SAASx4E,EAAEmsE,oBAA6F/rE,IAA5EI,KAAK22E,MAAMwhB,eAAe34F,EAAEmsE,cAAcx6B,WAAW+oD,UAAU16F,EAAE2P,QAE/I,MAAMurE,EAAS16E,KAAK22E,MAAM+yC,0BAA0B96G,EAAGgB,EAAQi1B,KAAMj1B,EAAS+6G,GAI9E,OAHI/6G,EAAQ0qC,SACRogC,EAAOpgC,UAEJogC,CACX,CACH,gBAAAksD,CAAiBlsD,EAAQ9rE,GAClB,MAAM,OAAE00H,EAAO,OAAEC,EAAO,QAAE3zH,GAAa5P,KACjCu+B,EAAWwgG,GAAYnvH,EAAQ2uB,UAAUx5B,KAAK/E,KAAM06E,EAAQ9rE,GAClE,OAAoB,IAAb2vB,IAAuB+kG,IAAW/kG,EAASvU,GAAKu5G,IAAWhlG,EAAStU,EAC/E,EAEJ,IAAI68G,GAAiB,CACjBx+G,GAAI,UACJlE,SAAU4+G,GACVjE,eACA,SAAAgI,CAAWpwD,EAAOo9C,EAAOnkH,GACjBA,IACA+mE,EAAMipD,QAAU,IAAIoD,GAAQ,CACxBrsD,QACA/mE,YAGZ,EACA,YAAAomG,CAAcr/B,EAAOo9C,EAAOnkH,GACpB+mE,EAAMipD,SACNjpD,EAAMipD,QAAQtiF,WAAW1tC,EAEjC,EACA,KAAA0oF,CAAO3hB,EAAOo9C,EAAOnkH,GACb+mE,EAAMipD,SACNjpD,EAAMipD,QAAQtiF,WAAW1tC,EAEjC,EACA,SAAAo3H,CAAWrwD,GACP,MAAMipD,EAAUjpD,EAAMipD,QACtB,GAAIA,GAAWA,EAAQ4G,cAAe,CAClC,MAAM19H,EAAO,CACT82H,WAEJ,IAGO,IAHHjpD,EAAMmiC,cAAc,oBAAqB,IACtChwG,EACHwU,YAAY,IAEZ,OAEJsiH,EAAQhvC,KAAKja,EAAM8B,KACnB9B,EAAMmiC,cAAc,mBAAoBhwG,EAC5C,CACJ,EACA,UAAAs1H,CAAYznD,EAAO7tE,GACf,GAAI6tE,EAAMipD,QAAS,CACf,MAAMp1B,EAAmB1hG,EAAK6hH,OAC1Bh0C,EAAMipD,QAAQjzF,YAAY7jC,EAAKrD,MAAO+kG,EAAkB1hG,EAAKiiH,eAC7DjiH,EAAKuqE,SAAU,EAEvB,CACJ,EACA8G,SAAU,CACNl6E,SAAS,EACTqkI,SAAU,KACV/lG,SAAU,UACVu5C,gBAAiB,kBACjBitD,WAAY,OACZvH,UAAW,CACPl0D,OAAQ,QAEZi3D,aAAc,EACdC,kBAAmB,EACnBtsB,WAAY,OACZwuB,UAAW,OACXhC,YAAa,EACbZ,SAAU,CAAC,EACX4F,UAAW,OACXQ,YAAa,OACbtF,cAAe,EACfD,gBAAiB,EACjBZ,WAAY,CACRz2D,OAAQ,QAEZ28D,YAAa,OACbnrD,QAAS,EACTumD,aAAc,EACdD,UAAW,EACX1iD,aAAc,EACd+7C,UAAW,CAAChiD,EAAKoI,IAAOA,EAAKi/C,SAAS/9F,KACtC24F,SAAU,CAACjiD,EAAKoI,IAAOA,EAAKi/C,SAAS/9F,KACrCsjG,mBAAoB,OACpB5E,eAAe,EACfr0B,WAAY,EACZr0B,YAAa,gBACb6H,YAAa,EACb/H,UAAW,CACP0C,SAAU,IACVC,OAAQ,gBAEZI,WAAY,CACR/E,QAAS,CACLhwE,KAAM,SACNmB,WAAY,CACR,IACA,IACA,QACA,SACA,SACA,WAGRorB,QAAS,CACLooD,OAAQ,SACRD,SAAU,MAGlB3uB,UAAWq2E,IAEf7iB,cAAe,CACX0gB,SAAU,OACVC,WAAY,OACZvC,UAAW,QAEfjkF,YAAa,CACT6gC,YAAcr7E,GAAgB,WAATA,GAA8B,aAATA,GAAgC,aAATA,EACjEs7E,YAAY,EACZzuB,UAAW,CACPwuB,aAAa,EACbC,YAAY,GAEhBxC,UAAW,CACPyC,WAAW,GAEfM,WAAY,CACRN,UAAW,cAGnBypC,uBAAwB,CACpB,gBAIJ5qC,GAAuBluE,OAAO67B,OAAO,CACzC76B,UAAW,KACXg7H,OAAQpT,GACRqT,WAAYzS,GACZ0S,OAAQh4H,GACR2rH,OAAQqD,GACRiJ,SAAUtI,GACVR,MAAOK,GACPqE,QAAS8D,KAwBT,SAASO,GAAkBnoI,GACvB,MAAM26F,EAAS75F,KAAK85F,YACpB,OAAI56F,GAAS,GAAKA,EAAQ26F,EAAOp6F,OACtBo6F,EAAO36F,GAEXA,CACX,CAmMA,SAASooI,GAAkBpoI,EAAOqoI,GAAY,WAAEloC,EAAW,YAAEpjB,IACzD,MAAM+C,EAAMzQ,GAAU0N,GAChBzU,GAAS63B,EAAah9F,KAAKmxE,IAAIwL,GAAO38E,KAAKoyE,IAAIuK,KAAS,KACxDv/E,EAAS,IAAO8nI,GAAc,GAAKroI,GAAOO,OAChD,OAAO4C,KAAKE,IAAIglI,EAAa//D,EAAO/nE,EACxC,CACA,MAAM+nI,WAAwBpzB,GAC1B,WAAA1zG,CAAYkxF,GACRx5E,MAAMw5E,GACL5xF,KAAKe,WAAQnB,EACbI,KAAK+iD,SAAMnjD,EACXI,KAAKynI,iBAAc7nI,EACnBI,KAAK0nI,eAAY9nI,EAClBI,KAAK2nI,YAAc,CACvB,CACA,KAAA7hI,CAAM01F,EAAKrsF,GACP,OAAIy7D,GAAc4wB,KAGE,iBAARA,GAAoBA,aAAepxF,UAAY0gE,UAAU0wB,GAF1D,MAKHA,CACZ,CACA,sBAAAosC,GACI,MAAM,YAAE3sD,GAAiBj7E,KAAK4P,SACxB,WAAEyiE,EAAW,WAAEC,GAAgBtyE,KAAKuyE,gBAC1C,IAAI,IAAEhwE,EAAI,IAAEiN,GAASxP,KACrB,MAAM6nI,EAAUtkF,GAAIhhD,EAAM8vE,EAAa9vE,EAAMghD,EACvCukF,EAAUvkF,GAAI/zC,EAAM8iE,EAAa9iE,EAAM+zC,EAC7C,GAAI03B,EAAa,CACb,MAAM8sD,EAAUp6D,GAAKprE,GACfylI,EAAUr6D,GAAKn+D,GACjBu4H,EAAU,GAAKC,EAAU,EACzBF,EAAO,GACAC,EAAU,GAAKC,EAAU,GAChCH,EAAO,EAEf,CACA,GAAItlI,IAAQiN,EAAK,CACb,IAAIwrE,EAAiB,IAARxrE,EAAY,EAAInN,KAAKoI,IAAU,IAAN+E,GACtCs4H,EAAOt4H,EAAMwrE,GACRC,GACD4sD,EAAOtlI,EAAMy4E,EAErB,CACAh7E,KAAKuC,IAAMA,EACXvC,KAAKwP,IAAMA,CACf,CACA,YAAAy4H,GACI,MAAMhyB,EAAWj2G,KAAK4P,QAAQ8mE,MAC9B,IACIwxD,GADA,cAAE10B,EAAc,SAAE20B,GAAclyB,EAepC,OAbIkyB,GACAD,EAAW7lI,KAAK+wG,KAAKpzG,KAAKwP,IAAM24H,GAAY9lI,KAAKuI,MAAM5K,KAAKuC,IAAM4lI,GAAY,EAC1ED,EAAW,MACXvoI,QAAQ07B,KAAK,UAAUr7B,KAAKsoB,sBAAsB6/G,mCAA0CD,8BAC5FA,EAAW,OAGfA,EAAWloI,KAAKooI,mBAChB50B,EAAgBA,GAAiB,IAEjCA,IACA00B,EAAW7lI,KAAKE,IAAIixG,EAAe00B,IAEhCA,CACX,CACH,gBAAAE,GACO,OAAOh+H,OAAOijE,iBAClB,CACA,UAAAwpC,GACI,MAAMh2B,EAAO7gF,KAAK4P,QACZqmG,EAAWp1B,EAAKnK,MACtB,IAAIwxD,EAAWloI,KAAKioI,eACpBC,EAAW7lI,KAAKmN,IAAI,EAAG04H,GACvB,MAcMxxD,EA9Ld,SAAyB2xD,EAAmBC,GACxC,MAAM5xD,EAAQ,IAER,OAAEwE,EAAO,KAAE2hC,EAAK,IAAEt6G,EAAI,IAAEiN,EAAI,UAAE+4H,EAAU,MAAEz2D,EAAM,SAAEo2D,EAAS,UAAEM,EAAU,cAAEC,GAAmBJ,EAC5Fx9H,EAAOgyG,GAAQ,EACf6rB,EAAYR,EAAW,GACrB3lI,IAAKomI,EAAOn5H,IAAKo5H,GAAUN,EAC7Bj2D,GAAczH,GAAcroE,GAC5B+vE,GAAc1H,GAAcp7D,GAC5Bq5H,GAAgBj+D,GAAckH,GAC9By1D,GAAcqB,EAAOD,IAASH,EAAY,GAChD,IACI/2C,EAAQq3C,EAASC,EAASC,EAD1B7oC,EAAUryB,IAAS86D,EAAOD,GAAQD,EAAY79H,GAAQA,EAE1D,GAAIs1F,EAXgB,QAWU9tB,IAAeC,EACzC,MAAO,CACH,CACIpzE,MAAOypI,GAEX,CACIzpI,MAAO0pI,IAInBI,EAAY3mI,KAAK+wG,KAAKw1B,EAAOzoC,GAAW99F,KAAKuI,MAAM+9H,EAAOxoC,GACtD6oC,EAAYN,IACZvoC,EAAUryB,GAAQk7D,EAAY7oC,EAAUuoC,EAAY79H,GAAQA,GAE3D+/D,GAAc29D,KACf92C,EAASpvF,KAAKC,IAAI,GAAIimI,GACtBpoC,EAAU99F,KAAK+wG,KAAKjT,EAAU1O,GAAUA,GAE7B,UAAXvW,GACA4tD,EAAUzmI,KAAKuI,MAAM+9H,EAAOxoC,GAAWA,EACvC4oC,EAAU1mI,KAAK+wG,KAAKw1B,EAAOzoC,GAAWA,IAEtC2oC,EAAUH,EACVI,EAAUH,GAEVv2D,GAAcC,GAAcuqC,GD/mTpC,SAAqB7yF,EAAG6jD,GACpB,MAAMo7D,EAAU5mI,KAAKyI,MAAMkf,GAC3B,OAAOi/G,EAAUp7D,GAAW7jD,GAAKi/G,EAAUp7D,GAAW7jD,CAC1D,CC4mT4Ck/G,EAAa15H,EAAMjN,GAAOs6G,EAAM1c,EAAU,MAC9E6oC,EAAY3mI,KAAKyI,MAAMzI,KAAKE,KAAKiN,EAAMjN,GAAO49F,EAAS+nC,IACvD/nC,GAAW3wF,EAAMjN,GAAOymI,EACxBF,EAAUvmI,EACVwmI,EAAUv5H,GACHq5H,GACPC,EAAUz2D,EAAa9vE,EAAMumI,EAC7BC,EAAUz2D,EAAa9iE,EAAMu5H,EAC7BC,EAAYl3D,EAAQ,EACpBquB,GAAW4oC,EAAUD,GAAWE,IAEhCA,GAAaD,EAAUD,GAAW3oC,EAE9B6oC,EADAp7D,GAAao7D,EAAW3mI,KAAKyI,MAAMk+H,GAAY7oC,EAAU,KAC7C99F,KAAKyI,MAAMk+H,GAEX3mI,KAAK+wG,KAAK41B,IAG9B,MAAMG,EAAgB9mI,KAAKmN,IAAIm/D,GAAewxB,GAAUxxB,GAAem6D,IACvEr3C,EAASpvF,KAAKC,IAAI,GAAIsoE,GAAc29D,GAAaY,EAAgBZ,GACjEO,EAAUzmI,KAAKyI,MAAMg+H,EAAUr3C,GAAUA,EACzCs3C,EAAU1mI,KAAKyI,MAAMi+H,EAAUt3C,GAAUA,EACzC,IAAInkF,EAAI,EAgBR,IAfI+kE,IACIo2D,GAAiBK,IAAYvmI,GAC7Bm0E,EAAMx2E,KAAK,CACPhB,MAAOqD,IAEPumI,EAAUvmI,GACV+K,IAEAsgE,GAAavrE,KAAKyI,OAAOg+H,EAAUx7H,EAAI6yF,GAAW1O,GAAUA,EAAQlvF,EAAK+kI,GAAkB/kI,EAAKglI,EAAYc,KAC5G/6H,KAEGw7H,EAAUvmI,GACjB+K,KAGFA,EAAI07H,IAAa17H,EAAE,CACrB,MAAMmpE,EAAYp0E,KAAKyI,OAAOg+H,EAAUx7H,EAAI6yF,GAAW1O,GAAUA,EACjE,GAAInf,GAAcmE,EAAYjnE,EAC1B,MAEJknE,EAAMx2E,KAAK,CACPhB,MAAOu3E,GAEf,CAcA,OAbInE,GAAcm2D,GAAiBM,IAAYv5H,EACvCknE,EAAMj3E,QAAUmuE,GAAa8I,EAAMA,EAAMj3E,OAAS,GAAGP,MAAOsQ,EAAK83H,GAAkB93H,EAAK+3H,EAAYc,IACpG3xD,EAAMA,EAAMj3E,OAAS,GAAGP,MAAQsQ,EAEhCknE,EAAMx2E,KAAK,CACPhB,MAAOsQ,IAGP8iE,GAAcy2D,IAAYv5H,GAClCknE,EAAMx2E,KAAK,CACPhB,MAAO6pI,IAGRryD,CACX,CA2FsB0yD,CAdkB,CAC5BlB,WACAhtD,OAAQ2F,EAAK3F,OACb34E,IAAKs+E,EAAKt+E,IACViN,IAAKqxE,EAAKrxE,IACV+4H,UAAWtyB,EAASsyB,UACpB1rB,KAAM5G,EAASkyB,SACfr2D,MAAOmkC,EAASnkC,MAChB02D,UAAWxoI,KAAK4+G,aAChBvf,WAAYr/F,KAAKqlG,eACjBppB,YAAag6B,EAASh6B,aAAe,EACrCwsD,eAA0C,IAA3BxyB,EAASwyB,eAEVzoI,KAAK20G,QAAU30G,MAajC,MAXoB,UAAhB6gF,EAAK3F,QACL5M,GAAmBoI,EAAO12E,KAAM,SAEhC6gF,EAAKvmC,SACLo8B,EAAMp8B,UACNt6C,KAAKe,MAAQf,KAAKwP,IAClBxP,KAAK+iD,IAAM/iD,KAAKuC,MAEhBvC,KAAKe,MAAQf,KAAKuC,IAClBvC,KAAK+iD,IAAM/iD,KAAKwP,KAEbknE,CACX,CACH,SAAAqc,GACO,MAAMrc,EAAQ12E,KAAK02E,MACnB,IAAI31E,EAAQf,KAAKuC,IACbwgD,EAAM/iD,KAAKwP,IAEf,GADA4I,MAAM26E,YACF/yF,KAAK4P,QAAQorE,QAAUtE,EAAMj3E,OAAQ,CACrC,MAAMu7E,GAAUj4B,EAAMhiD,GAASsB,KAAKmN,IAAIknE,EAAMj3E,OAAS,EAAG,GAAK,EAC/DsB,GAASi6E,EACTj4B,GAAOi4B,CACX,CACAh7E,KAAKynI,YAAc1mI,EACnBf,KAAK0nI,UAAY3kF,EACjB/iD,KAAK2nI,YAAc5kF,EAAMhiD,CAC7B,CACA,gBAAAm6F,CAAiBh8F,GACb,OAAO82E,GAAa92E,EAAOc,KAAK22E,MAAM/mE,QAAQqmE,OAAQj2E,KAAK4P,QAAQ8mE,MAAMJ,OAC7E,EAGJ,MAAM+yD,WAAoB7B,GACtBjvE,UAAY,SACfA,gBAAkB,CACXme,MAAO,CACH1oD,SAAUupD,GAAMhB,WAAWC,UAGnC,mBAAA+/B,GACI,MAAM,IAAEh0G,EAAI,IAAEiN,GAASxP,KAAKu6F,WAAU,GACtCv6F,KAAKuC,IAAMsoE,GAAetoE,GAAOA,EAAM,EACvCvC,KAAKwP,IAAMq7D,GAAer7D,GAAOA,EAAM,EACvCxP,KAAK4nI,wBACT,CACH,gBAAAQ,GACO,MAAM/oC,EAAar/F,KAAKqlG,eAClB5lG,EAAS4/F,EAAar/F,KAAKmyB,MAAQnyB,KAAK+zD,OACxCkoB,EAAc1N,GAAUvuE,KAAK4P,QAAQ8mE,MAAMuF,aAC3CzU,GAAS63B,EAAah9F,KAAKmxE,IAAIyI,GAAe55E,KAAKoyE,IAAIwH,KAAiB,KACxE6+B,EAAW96G,KAAKm7G,wBAAwB,GAC9C,OAAO94G,KAAK+wG,KAAK3zG,EAAS4C,KAAKE,IAAI,GAAIu4G,EAASxiC,WAAa9Q,GACjE,CACA,gBAAAgL,CAAiBtzE,GACb,OAAiB,OAAVA,EAAiBo7F,IAAMt6F,KAAKmnG,oBAAoBjoG,EAAQc,KAAKynI,aAAeznI,KAAK2nI,YAC5F,CACA,gBAAAtgC,CAAiBvpB,GACb,OAAO99E,KAAKynI,YAAcznI,KAAKs7G,mBAAmBx9B,GAAS99E,KAAK2nI,WACpE,EAGJ,MAAM2B,GAAc/lF,GAAIlhD,KAAKuI,MAAM8iE,GAAMnqB,IACnCgmF,GAAiB,CAAChmF,EAAG1a,IAAIxmC,KAAKC,IAAI,GAAIgnI,GAAW/lF,GAAK1a,GAC5D,SAAS2gG,GAAQC,GAEb,OAAkB,IADHA,EAAUpnI,KAAKC,IAAI,GAAIgnI,GAAWG,GAErD,CACA,SAASC,GAAMnnI,EAAKiN,EAAKm6H,GACrB,MAAMC,EAAYvnI,KAAKC,IAAI,GAAIqnI,GACzB5oI,EAAQsB,KAAKuI,MAAMrI,EAAMqnI,GAE/B,OADYvnI,KAAK+wG,KAAK5jG,EAAMo6H,GACf7oI,CACjB,CAkDA,MAAM8oI,WAAyBz1B,GAC3B77C,UAAY,cACfA,gBAAkB,CACXme,MAAO,CACH1oD,SAAUupD,GAAMhB,WAAWa,YAC3BsF,MAAO,CACHz8E,SAAS,KAIrB,WAAAS,CAAYkxF,GACRx5E,MAAMw5E,GACL5xF,KAAKe,WAAQnB,EACbI,KAAK+iD,SAAMnjD,EACXI,KAAKynI,iBAAc7nI,EACpBI,KAAK2nI,YAAc,CACvB,CACA,KAAA7hI,CAAM01F,EAAKrsF,GACP,MAAMjQ,EAAQsoI,GAAgBjiI,UAAUO,MAAMuH,MAAMrN,KAAM,CACtDw7F,EACArsF,IAEJ,GAAc,IAAVjQ,EAIJ,OAAO2rE,GAAe3rE,IAAUA,EAAQ,EAAIA,EAAQ,KAHhDc,KAAK8pI,OAAQ,CAIrB,CACA,mBAAAvzB,GACI,MAAM,IAAEh0G,EAAI,IAAEiN,GAASxP,KAAKu6F,WAAU,GACtCv6F,KAAKuC,IAAMsoE,GAAetoE,GAAOF,KAAKmN,IAAI,EAAGjN,GAAO,KACpDvC,KAAKwP,IAAMq7D,GAAer7D,GAAOnN,KAAKmN,IAAI,EAAGA,GAAO,KAChDxP,KAAK4P,QAAQqrE,cACbj7E,KAAK8pI,OAAQ,GAEb9pI,KAAK8pI,OAAS9pI,KAAKuC,MAAQvC,KAAKo1G,gBAAkBvqC,GAAe7qE,KAAKk1G,YACtEl1G,KAAKuC,IAAMA,IAAQgnI,GAAevpI,KAAKuC,IAAK,GAAKgnI,GAAevpI,KAAKuC,KAAM,GAAKgnI,GAAevpI,KAAKuC,IAAK,IAE7GvC,KAAK4nI,wBACT,CACA,sBAAAA,GACI,MAAM,WAAEv1D,EAAW,WAAEC,GAAgBtyE,KAAKuyE,gBAC1C,IAAIhwE,EAAMvC,KAAKuC,IACXiN,EAAMxP,KAAKwP,IACf,MAAMq4H,EAAUtkF,GAAIhhD,EAAM8vE,EAAa9vE,EAAMghD,EACvCukF,EAAUvkF,GAAI/zC,EAAM8iE,EAAa9iE,EAAM+zC,EACzChhD,IAAQiN,IACJjN,GAAO,GACPslI,EAAO,GACPC,EAAO,MAEPD,EAAO0B,GAAehnI,GAAM,IAC5BulI,EAAOyB,GAAe/5H,EAAK,MAG/BjN,GAAO,GACPslI,EAAO0B,GAAe/5H,GAAM,IAE5BA,GAAO,GACPs4H,EAAOyB,GAAehnI,EAAK,IAE/BvC,KAAKuC,IAAMA,EACXvC,KAAKwP,IAAMA,CACf,CACA,UAAAqnG,GACI,MAAMh2B,EAAO7gF,KAAK4P,QAKZ8mE,EA5Gb,SAAuB2xD,GAAmB,IAAE9lI,EAAI,IAAEiN,IAC/CjN,EAAMwoE,GAAgBs9D,EAAkB9lI,IAAKA,GAC7C,MAAMm0E,EAAQ,GACRqzD,EAAST,GAAW/mI,GAC1B,IAAIynI,EAfR,SAAkBznI,EAAKiN,GAEnB,IAAIm6H,EAAWL,GADD95H,EAAMjN,GAEpB,KAAMmnI,GAAMnnI,EAAKiN,EAAKm6H,GAAY,IAC9BA,IAEJ,KAAMD,GAAMnnI,EAAKiN,EAAKm6H,GAAY,IAC9BA,IAEJ,OAAOtnI,KAAKE,IAAIonI,EAAUL,GAAW/mI,GACzC,CAKc0nI,CAAS1nI,EAAKiN,GACpB+4H,EAAYyB,EAAM,EAAI3nI,KAAKC,IAAI,GAAID,KAAKoI,IAAIu/H,IAAQ,EACxD,MAAM7B,EAAW9lI,KAAKC,IAAI,GAAI0nI,GACxBlxC,EAAOixC,EAASC,EAAM3nI,KAAKC,IAAI,GAAIynI,GAAU,EAC7ChpI,EAAQsB,KAAKyI,OAAOvI,EAAMu2F,GAAQyvC,GAAaA,EAC/CvtD,EAAS34E,KAAKuI,OAAOrI,EAAMu2F,GAAQqvC,EAAW,IAAMA,EAAW,GACrE,IAAI7wD,EAAcj1E,KAAKuI,OAAO7J,EAAQi6E,GAAU34E,KAAKC,IAAI,GAAI0nI,IACzD9qI,EAAQ6rE,GAAgBs9D,EAAkB9lI,IAAKF,KAAKyI,OAAOguF,EAAO9d,EAAS1D,EAAcj1E,KAAKC,IAAI,GAAI0nI,IAAQzB,GAAaA,GAC/H,KAAMrpI,EAAQsQ,GACVknE,EAAMx2E,KAAK,CACPhB,QACAw9E,MAAO8sD,GAAQtqI,GACfo4E,gBAEAA,GAAe,GACfA,EAAcA,EAAc,GAAK,GAAK,GAEtCA,IAEAA,GAAe,KACf0yD,IACA1yD,EAAc,EACdixD,EAAYyB,GAAO,EAAI,EAAIzB,GAE/BrpI,EAAQmD,KAAKyI,OAAOguF,EAAO9d,EAAS1D,EAAcj1E,KAAKC,IAAI,GAAI0nI,IAAQzB,GAAaA,EAExF,MAAM2B,EAAWn/D,GAAgBs9D,EAAkB74H,IAAKtQ,GAMxD,OALAw3E,EAAMx2E,KAAK,CACPhB,MAAOgrI,EACPxtD,MAAO8sD,GAAQU,GACf5yD,gBAEGZ,CACX,CAuEsByzD,CAJY,CACtB5nI,IAAKvC,KAAKk1G,SACV1lG,IAAKxP,KAAKi1G,UAEiCj1G,MAY/C,MAXoB,UAAhB6gF,EAAK3F,QACL5M,GAAmBoI,EAAO12E,KAAM,SAEhC6gF,EAAKvmC,SACLo8B,EAAMp8B,UACNt6C,KAAKe,MAAQf,KAAKwP,IAClBxP,KAAK+iD,IAAM/iD,KAAKuC,MAEhBvC,KAAKe,MAAQf,KAAKuC,IAClBvC,KAAK+iD,IAAM/iD,KAAKwP,KAEbknE,CACX,CACH,gBAAAwkB,CAAiBh8F,GACV,YAAiBU,IAAVV,EAAsB,IAAM82E,GAAa92E,EAAOc,KAAK22E,MAAM/mE,QAAQqmE,OAAQj2E,KAAK4P,QAAQ8mE,MAAMJ,OACzG,CACH,SAAAyc,GACO,MAAMhyF,EAAQf,KAAKuC,IACnB6V,MAAM26E,YACN/yF,KAAKynI,YAAc/5D,GAAM3sE,GACzBf,KAAK2nI,YAAcj6D,GAAM1tE,KAAKwP,KAAOk+D,GAAM3sE,EAC/C,CACA,gBAAAyxE,CAAiBtzE,GAIb,YAHcU,IAAVV,GAAiC,IAAVA,IACvBA,EAAQc,KAAKuC,KAEH,OAAVrD,GAAkBmL,MAAMnL,GACjBo7F,IAEJt6F,KAAKmnG,mBAAmBjoG,IAAUc,KAAKuC,IAAM,GAAKmrE,GAAMxuE,GAASc,KAAKynI,aAAeznI,KAAK2nI,YACrG,CACA,gBAAAtgC,CAAiBvpB,GACb,MAAMu9B,EAAUr7G,KAAKs7G,mBAAmBx9B,GACxC,OAAOz7E,KAAKC,IAAI,GAAItC,KAAKynI,YAAcpsB,EAAUr7G,KAAK2nI,YAC1D,EAGJ,SAASyC,GAAsBvpD,GAC3B,MAAMo1B,EAAWp1B,EAAKnK,MACtB,GAAIu/B,EAAStsD,SAAWk3B,EAAKl3B,QAAS,CAClC,MAAMmxB,EAAUuI,GAAU4yB,EAASn5B,iBACnC,OAAO9R,GAAeirC,EAAS79B,MAAQ69B,EAAS79B,KAAKr2C,KAAMo4C,GAAS/B,KAAKr2C,MAAQ+4C,EAAQ/mB,MAC7F,CACA,OAAO,CACX,CACA,SAASs2E,GAAiB5xD,EAAKL,EAAM9uB,GAIjC,OAHAA,EAAQ70C,GAAQ60C,GAASA,EAAQ,CAC7BA,GAEG,CACH8S,EAAGghB,GAAa3E,EAAKL,EAAKjqE,OAAQm7C,GAClCyR,EAAGzR,EAAM7pD,OAAS24E,EAAKE,WAE/B,CACA,SAASgyD,GAAgBn7D,EAAO0b,EAAK9oD,EAAMx/B,EAAKiN,GAC5C,OAAI2/D,IAAU5sE,GAAO4sE,IAAU3/D,EACpB,CACHzO,MAAO8pF,EAAM9oD,EAAO,EACpBghB,IAAK8nC,EAAM9oD,EAAO,GAEfotC,EAAQ5sE,GAAO4sE,EAAQ3/D,EACvB,CACHzO,MAAO8pF,EAAM9oD,EACbghB,IAAK8nC,GAGN,CACH9pF,MAAO8pF,EACP9nC,IAAK8nC,EAAM9oD,EAEnB,CA8BA,SAASwoG,GAAaC,EAAQ/qC,EAAMtwB,EAAOs7D,EAASC,GAChD,MAAMl3D,EAAMnxE,KAAKoI,IAAIpI,KAAKmxE,IAAIrE,IACxBsF,EAAMpyE,KAAKoI,IAAIpI,KAAKoyE,IAAItF,IAC9B,IAAInlD,EAAI,EACJC,EAAI,EACJwgH,EAAQ1pI,MAAQ0+F,EAAKjzF,GACrBwd,GAAKy1E,EAAKjzF,EAAIi+H,EAAQ1pI,OAASyyE,EAC/Bg3D,EAAOh+H,EAAInK,KAAKE,IAAIioI,EAAOh+H,EAAGizF,EAAKjzF,EAAIwd,IAChCygH,EAAQ1nF,IAAM08C,EAAKljC,IAC1BvyC,GAAKygH,EAAQ1nF,IAAM08C,EAAKljC,GAAKiX,EAC7Bg3D,EAAOjuE,EAAIl6D,KAAKmN,IAAIg7H,EAAOjuE,EAAGkjC,EAAKljC,EAAIvyC,IAEvC0gH,EAAQ3pI,MAAQ0+F,EAAK71B,GACrB3/C,GAAKw1E,EAAK71B,EAAI8gE,EAAQ3pI,OAAS0zE,EAC/B+1D,EAAO5gE,EAAIvnE,KAAKE,IAAIioI,EAAO5gE,EAAG61B,EAAK71B,EAAI3/C,IAChCygH,EAAQ3nF,IAAM08C,EAAK9xF,IAC1Bsc,GAAKygH,EAAQ3nF,IAAM08C,EAAK9xF,GAAK8mE,EAC7B+1D,EAAO78H,EAAItL,KAAKmN,IAAIg7H,EAAO78H,EAAG8xF,EAAK9xF,EAAIsc,GAE/C,CACA,SAAS0gH,GAAqBtxD,EAAOlqE,EAAOy7H,GACxC,MAAMC,EAAgBxxD,EAAMyxD,aACtB,MAAEC,EAAM,gBAAEC,EAAgB,QAAElwD,EAAQ,KAAE/4C,GAAU6oG,EAChDK,EAAqB5xD,EAAM6xD,iBAAiB/7H,EAAO07H,EAAgBE,EAAQjwD,EAASkwD,GACpF77D,EAAQ9sE,KAAKyI,MAAM2jE,GAAUiB,GAAgBu7D,EAAmB97D,MAAQ5B,MACxEtjD,EA0EV,SAAmBA,EAAG8wC,EAAGoU,GAMrB,OALc,KAAVA,GAA0B,MAAVA,EAChBllD,GAAK8wC,EAAI,GACFoU,EAAQ,KAAOA,EAAQ,MAC9BllD,GAAK8wC,GAEF9wC,CACX,CAjFckhH,CAAUF,EAAmBhhH,EAAG8X,EAAKg5B,EAAGoU,GAC5C6S,EAyDV,SAA8B7S,GAC1B,OAAc,IAAVA,GAAyB,MAAVA,EACR,SACAA,EAAQ,IACR,OAEJ,OACX,CAhEsBi8D,CAAqBj8D,GACjCjiC,EAgEV,SAA0BljB,EAAGoyC,EAAGoV,GAM5B,MALc,UAAVA,EACAxnD,GAAKoyC,EACY,WAAVoV,IACPxnD,GAAKoyC,EAAI,GAENpyC,CACX,CAvEiBqhH,CAAiBJ,EAAmBjhH,EAAG+X,EAAKq6B,EAAG4lB,GAC5D,MAAO,CACHhxD,SAAS,EACThH,EAAGihH,EAAmBjhH,EACtBC,IACA+3D,YACA90C,OACA4mB,IAAK7pC,EACLmd,MAAO8F,EAAOnL,EAAKq6B,EACnB2e,OAAQ9wD,EAAI8X,EAAKg5B,EAEzB,CACA,SAASuwE,GAAgBt+D,EAAM+S,GAC3B,IAAKA,EACD,OAAO,EAEX,MAAM,KAAE7yC,EAAK,IAAE4mB,EAAI,MAAE1sB,EAAM,OAAE2zC,GAAY/N,EAczC,QAbqB8S,GAAe,CAChC91D,EAAGkjB,EACHjjB,EAAG6pC,GACJisB,IAASD,GAAe,CACvB91D,EAAGkjB,EACHjjB,EAAG8wD,GACJgF,IAASD,GAAe,CACvB91D,EAAGod,EACHnd,EAAG6pC,GACJisB,IAASD,GAAe,CACvB91D,EAAGod,EACHnd,EAAG8wD,GACJgF,GAEP,CAiDA,SAASwrD,GAAkB9yD,EAAKoI,EAAM7T,GAClC,MAAM,KAAE9/B,EAAK,IAAE4mB,EAAI,MAAE1sB,EAAM,OAAE2zC,GAAY/N,GACnC,cAAE6P,GAAmBgE,EAC3B,IAAKjW,GAAciS,GAAgB,CAC/B,MAAM2jB,EAAepd,GAAcvC,EAAK2f,cAClC1lB,EAAUuI,GAAUxC,EAAK/D,iBAC/BrE,EAAI8I,UAAY1E,EAChB,MAAM2uD,EAAet+F,EAAO4tC,EAAQ5tC,KAC9Bu+F,EAAc33E,EAAMgnB,EAAQhnB,IAC5B43E,EAAgBtkG,EAAQ8F,EAAO4tC,EAAQ3oD,MACvCw5G,EAAiB5wD,EAASjnB,EAAMgnB,EAAQ/mB,OAC1C9oD,OAAOoT,OAAOmiF,GAAc54E,KAAM27B,GAAU,IAANA,IACtCk1B,EAAI0G,YACJoD,GAAmB9J,EAAK,CACpBzuD,EAAGwhH,EACHvhH,EAAGwhH,EACHrvE,EAAGsvE,EACH3wE,EAAG4wE,EACH5sD,OAAQyhB,IAEZ/nB,EAAIkH,QAEJlH,EAAIkJ,SAAS6pD,EAAcC,EAAaC,EAAeC,EAE/D,CACJ,CAmBA,SAASC,GAAevyD,EAAO0F,EAAQglB,EAAUq+B,GAC7C,MAAM,IAAE3pD,GAASY,EACjB,GAAI0qB,EACAtrB,EAAI4G,IAAIhG,EAAMgrB,QAAShrB,EAAMirB,QAASvlB,EAAQ,EAAG7R,QAC9C,CACH,IAAIk8B,EAAgB/vB,EAAM6xD,iBAAiB,EAAGnsD,GAC9CtG,EAAI8G,OAAO6pB,EAAcp/E,EAAGo/E,EAAcn/E,GAC1C,IAAI,IAAIzqB,EAAI,EAAGA,EAAI4iI,EAAY5iI,IAC3B4pG,EAAgB/vB,EAAM6xD,iBAAiB1rI,EAAGu/E,GAC1CtG,EAAI+G,OAAO4pB,EAAcp/E,EAAGo/E,EAAcn/E,EAElD,CACJ,CA0BA,MAAM4hH,WAA0BrE,GAC5BjvE,UAAY,eACfA,gBAAkB,CACX5O,SAAS,EACTmiF,SAAS,EACTvtG,SAAU,YACVulE,WAAY,CACRn6C,SAAS,EACT2xB,UAAW,EACX6T,WAAY,GACZC,iBAAkB,GAEtB/T,KAAM,CACF0oB,UAAU,GAEdhC,WAAY,EACZrrB,MAAO,CACHkG,mBAAmB,EACnB5uD,SAAUupD,GAAMhB,WAAWC,SAE/BwtB,YAAa,CACTnnB,mBAAej9E,EACfk9E,gBAAiB,EACjBnzB,SAAS,EACTyuB,KAAM,CACFr2C,KAAM,IAEV,QAAA/T,CAAUs7B,GACN,OAAOA,CACX,EACAwxB,QAAS,EACTixD,mBAAmB,IAG3BxzE,qBAAuB,CACnB,mBAAoB,cACpB,oBAAqB,QACrB,cAAe,SAEnBA,mBAAqB,CACjBurC,WAAY,CACRxpB,UAAW,SAGnB,WAAA55E,CAAYkxF,GACRx5E,MAAMw5E,GACL5xF,KAAKqkG,aAAUzkG,EACfI,KAAKskG,aAAU1kG,EACfI,KAAK8qI,iBAAclrI,EACnBI,KAAKgsI,aAAe,GACrBhsI,KAAKisI,iBAAmB,EAC5B,CACA,aAAA71B,GACI,MAAMt7B,EAAU96E,KAAKu+H,SAAWl7C,GAAU+mD,GAAsBpqI,KAAK4P,SAAW,GAC1EwsD,EAAIp8D,KAAKmyB,MAAQnyB,KAAKqiF,SAAWvH,EAAQ3oD,MACzC4oC,EAAI/6D,KAAK+zD,OAAS/zD,KAAK4iG,UAAY9nB,EAAQ/mB,OACjD/zD,KAAKqkG,QAAUhiG,KAAKuI,MAAM5K,KAAKktC,KAAOkvB,EAAI,EAAI0e,EAAQ5tC,MACtDltC,KAAKskG,QAAUjiG,KAAKuI,MAAM5K,KAAK8zD,IAAMiH,EAAI,EAAI+f,EAAQhnB,KACrD9zD,KAAK8qI,YAAczoI,KAAKuI,MAAMvI,KAAKE,IAAI65D,EAAGrB,GAAK,EACnD,CACA,mBAAAw7C,GACI,MAAM,IAAEh0G,EAAI,IAAEiN,GAASxP,KAAKu6F,WAAU,GACtCv6F,KAAKuC,IAAMsoE,GAAetoE,KAAS8H,MAAM9H,GAAOA,EAAM,EACtDvC,KAAKwP,IAAMq7D,GAAer7D,KAASnF,MAAMmF,GAAOA,EAAM,EACtDxP,KAAK4nI,wBACT,CACH,gBAAAQ,GACO,OAAO/lI,KAAK+wG,KAAKpzG,KAAK8qI,YAAcV,GAAsBpqI,KAAK4P,SACnE,CACA,kBAAAopG,CAAmBtiC,GACf8wD,GAAgBjiI,UAAUyzG,mBAAmBj0G,KAAK/E,KAAM02E,GACxD12E,KAAKgsI,aAAehsI,KAAK85F,YAAY5xF,IAAI,CAAChJ,EAAOiQ,KAC7C,MAAMm6C,EAAQt7B,GAAShuB,KAAK4P,QAAQo0F,YAAYh2E,SAAU,CACtD9uB,EACAiQ,GACDnP,MACH,OAAOspD,GAAmB,IAAVA,EAAcA,EAAQ,KACvCzhD,OAAO,CAAC07C,EAAG/jD,IAAIQ,KAAK22E,MAAM+pB,kBAAkBlhG,GACnD,CACA,GAAA+4G,GACI,MAAM13B,EAAO7gF,KAAK4P,QACdixE,EAAKl3B,SAAWk3B,EAAKmjB,YAAYr6C,QA3S5C,SAA4B0vB,GACzB,MAAMomB,EAAO,CACTjzF,EAAG6sE,EAAMnsC,KAAOmsC,EAAMklD,SAASrxF,KAC/BqvB,EAAG8c,EAAMjyC,MAAQiyC,EAAMklD,SAASn3F,MAChCwiC,EAAGyP,EAAMvlB,IAAMulB,EAAMklD,SAASzqE,IAC9BnmD,EAAG0rE,EAAM0B,OAAS1B,EAAMklD,SAASxjD,QAE/ByvD,EAASv/H,OAAOuc,OAAO,CAAC,EAAGi4E,GAC3B4Z,EAAa,GACbv+B,EAAU,GACVoxD,EAAa7yD,EAAM2yD,aAAavsI,OAChC0sI,EAAiB9yD,EAAMzpE,QAAQo0F,YAC/BgnC,EAAkBmB,EAAeJ,kBAAoB9+D,GAAKi/D,EAAa,EAC7E,IAAI,IAAI1sI,EAAI,EAAGA,EAAI0sI,EAAY1sI,IAAI,CAC/B,MAAMqhF,EAAOsrD,EAAevmD,WAAWvM,EAAM+yD,qBAAqB5sI,IAClEs7E,EAAQt7E,GAAKqhF,EAAK/F,QAClB,MAAMsuB,EAAgB/vB,EAAM6xD,iBAAiB1rI,EAAG65E,EAAMyxD,YAAchwD,EAAQt7E,GAAIwrI,GAC1EqB,EAAS/oD,GAAOzC,EAAKzI,MACrBomD,EAAW6L,GAAiBhxD,EAAMZ,IAAK4zD,EAAQhzD,EAAM2yD,aAAaxsI,IACxE65G,EAAW75G,GAAKg/H,EAChB,MAAMxkB,EAAetqC,GAAgB2J,EAAMmrB,cAAchlG,GAAKwrI,GACxD77D,EAAQ9sE,KAAKyI,MAAM2jE,GAAUurC,IAGnCuwB,GAAaC,EAAQ/qC,EAAMua,EAFXswB,GAAgBn7D,EAAOi6B,EAAcp/E,EAAGw0G,EAASpiE,EAAG,EAAG,KACvDkuE,GAAgBn7D,EAAOi6B,EAAcn/E,EAAGu0G,EAASzjE,EAAG,GAAI,KAE5E,CACAse,EAAMizD,eAAe7sC,EAAKjzF,EAAIg+H,EAAOh+H,EAAGg+H,EAAOjuE,EAAIkjC,EAAKljC,EAAGkjC,EAAK71B,EAAI4gE,EAAO5gE,EAAG4gE,EAAO78H,EAAI8xF,EAAK9xF,GAC9F0rE,EAAM4yD,iBA6DV,SAA8B5yD,EAAOggC,EAAYv+B,GAC7C,MAAM5J,EAAQ,GACRg7D,EAAa7yD,EAAM2yD,aAAavsI,OAChCohF,EAAOxH,EAAMzpE,SACb,kBAAEm8H,EAAkB,QAAEpiF,GAAak3B,EAAKmjB,YACxC4mC,EAAW,CACbG,MAAOX,GAAsBvpD,GAAQ,EACrCmqD,gBAAiBe,EAAoB9+D,GAAKi/D,EAAa,GAE3D,IAAInsD,EACJ,IAAI,IAAIvgF,EAAI,EAAGA,EAAI0sI,EAAY1sI,IAAI,CAC/BorI,EAAS9vD,QAAUA,EAAQt7E,GAC3BorI,EAAS7oG,KAAOs3E,EAAW75G,GAC3B,MAAMwtE,EAAO29D,GAAqBtxD,EAAO75E,EAAGorI,GAC5C15D,EAAMhxE,KAAK8sE,GACK,SAAZrjB,IACAqjB,EAAKh8C,QAAUs6G,GAAgBt+D,EAAM+S,GACjC/S,EAAKh8C,UACL+uD,EAAO/S,GAGnB,CACA,OAAOkE,CACX,CApF6Bq7D,CAAqBlzD,EAAOggC,EAAYv+B,EACrE,CAgRY0xD,CAAmBxsI,MAEnBA,KAAKssI,eAAe,EAAG,EAAG,EAAG,EAErC,CACA,cAAAA,CAAeG,EAAcC,EAAeC,EAAaC,GACrD5sI,KAAKqkG,SAAWhiG,KAAKuI,OAAO6hI,EAAeC,GAAiB,GAC5D1sI,KAAKskG,SAAWjiG,KAAKuI,OAAO+hI,EAAcC,GAAkB,GAC5D5sI,KAAK8qI,aAAezoI,KAAKE,IAAIvC,KAAK8qI,YAAc,EAAGzoI,KAAKmN,IAAIi9H,EAAcC,EAAeC,EAAaC,GAC1G,CACA,aAAApoC,CAAcr1F,GAGV,OAAOugE,GAAgBvgE,GAFC+9D,IAAOltE,KAAKgsI,aAAavsI,QAAU,IAEV8uE,GAD9BvuE,KAAK4P,QAAQmyF,YAAc,GAElD,CACA,6BAAA6C,CAA8B1lG,GAC1B,GAAI0rE,GAAc1rE,GACd,OAAOo7F,IAEX,MAAMuyC,EAAgB7sI,KAAK8qI,aAAe9qI,KAAKwP,IAAMxP,KAAKuC,KAC1D,OAAIvC,KAAK4P,QAAQ0qC,SACLt6C,KAAKwP,IAAMtQ,GAAS2tI,GAExB3tI,EAAQc,KAAKuC,KAAOsqI,CAChC,CACA,6BAAAC,CAA8Bz9D,GAC1B,GAAIzE,GAAcyE,GACd,OAAOirB,IAEX,MAAMyyC,EAAiB19D,GAAYrvE,KAAK8qI,aAAe9qI,KAAKwP,IAAMxP,KAAKuC,MACvE,OAAOvC,KAAK4P,QAAQ0qC,QAAUt6C,KAAKwP,IAAMu9H,EAAiB/sI,KAAKuC,IAAMwqI,CACzE,CACA,oBAAAX,CAAqBj9H,GACjB,MAAM60F,EAAchkG,KAAKgsI,cAAgB,GACzC,GAAI78H,GAAS,GAAKA,EAAQ60F,EAAYvkG,OAAQ,CAC1C,MAAMutI,EAAahpC,EAAY70F,GAC/B,OA7HZ,SAAiCiqD,EAAQjqD,EAAOm6C,GAC5C,OAAOq6B,GAAcvqB,EAAQ,CACzB9P,QACAn6C,QACAtJ,KAAM,cAEd,CAuHmBonI,CAAwBjtI,KAAKm+E,aAAchvE,EAAO69H,EAC7D,CACJ,CACA,gBAAA9B,CAAiB/7H,EAAO+9H,EAAoBlC,EAAkB,GAC1D,MAAM77D,EAAQnvE,KAAKwkG,cAAcr1F,GAASo+D,GAAUy9D,EACpD,MAAO,CACHhhH,EAAG3nB,KAAKoyE,IAAItF,GAAS+9D,EAAqBltI,KAAKqkG,QAC/Cp6E,EAAG5nB,KAAKmxE,IAAIrE,GAAS+9D,EAAqBltI,KAAKskG,QAC/Cn1B,QAER,CACA,wBAAAk6B,CAAyBl6F,EAAOjQ,GAC5B,OAAOc,KAAKkrI,iBAAiB/7H,EAAOnP,KAAK4kG,8BAA8B1lG,GAC3E,CACA,eAAAiuI,CAAgBh+H,GACZ,OAAOnP,KAAKqpG,yBAAyBl6F,GAAS,EAAGnP,KAAKu7G,eAC1D,CACA,qBAAA6xB,CAAsBj+H,GAClB,MAAM,KAAE+9B,EAAK,IAAE4mB,EAAI,MAAE1sB,EAAM,OAAE2zC,GAAY/6E,KAAKisI,iBAAiB98H,GAC/D,MAAO,CACH+9B,OACA4mB,MACA1sB,QACA2zC,SAER,CACH,cAAA8iC,GACO,MAAM,gBAAE/lC,EAAkBuD,MAAM,SAAE0oB,IAAiB/jG,KAAK4P,QACxD,GAAIkoE,EAAiB,CACjB,MAAMW,EAAMz4E,KAAKy4E,IACjBA,EAAI8E,OACJ9E,EAAI0G,YACJysD,GAAe5rI,KAAMA,KAAK4kG,8BAA8B5kG,KAAK0nI,WAAY3jC,EAAU/jG,KAAKgsI,aAAavsI,QACrGg5E,EAAI6G,YACJ7G,EAAI8I,UAAYzJ,EAChBW,EAAIkH,OACJlH,EAAIkF,SACR,CACJ,CACH,QAAAmgC,GACO,MAAMrlC,EAAMz4E,KAAKy4E,IACXoI,EAAO7gF,KAAK4P,SACZ,WAAEk0F,EAAW,KAAEzoB,EAAK,OAAEQ,GAAYgF,EAClCuhD,EAAapiI,KAAKgsI,aAAavsI,OACrC,IAAID,EAAGw7E,EAAQz8C,EAef,GAdIsiD,EAAKmjB,YAAYr6C,SA3N7B,SAAyB0vB,EAAO+oD,GAC5B,MAAM,IAAE3pD,EAAM7oE,SAAS,YAAEo0F,IAAoB3qB,EAC7C,IAAI,IAAI75E,EAAI4iI,EAAa,EAAG5iI,GAAK,EAAGA,IAAI,CACpC,MAAMwtE,EAAOqM,EAAM4yD,iBAAiBzsI,GACpC,IAAKwtE,EAAKh8C,QACN,SAEJ,MAAM8rF,EAAc9Y,EAAYpe,WAAWvM,EAAM+yD,qBAAqB5sI,IACtE+rI,GAAkB9yD,EAAKqkC,EAAa9vC,GACpC,MAAMq/D,EAAS/oD,GAAOw5B,EAAY1kC,OAC5B,EAAEpuD,EAAE,EAAEC,EAAE,UAAE+3D,GAAehV,EAC/B4U,GAAWnJ,EAAKY,EAAM2yD,aAAaxsI,GAAIwqB,EAAGC,EAAIoiH,EAAO/zD,WAAa,EAAG+zD,EAAQ,CACzEhjE,MAAOyzC,EAAYzzC,MACnB2Y,UAAWA,EACXC,aAAc,UAEtB,CACJ,CA2MYorD,CAAgBrtI,KAAMoiI,GAEtB/mD,EAAK1xB,SACL3pD,KAAK02E,MAAMtzC,QAAQ,CAAC2tD,EAAM5hF,KACtB,GAAc,IAAVA,GAAyB,IAAVA,GAAenP,KAAKuC,IAAM,EAAG,CAC5Cy4E,EAASh7E,KAAK4kG,8BAA8B7T,EAAK7xF,OACjD,MAAMqM,EAAUvL,KAAKm+E,WAAWhvE,GAC1B2tG,EAAczhC,EAAKuK,WAAWr6E,GAC9BwxG,EAAoBlhC,EAAO+J,WAAWr6E,IArMhE,SAAwB8tE,EAAOi0D,EAAcvuD,EAAQqjD,EAAYvmB,GAC7D,MAAMpjC,EAAMY,EAAMZ,IACZsrB,EAAWupC,EAAavpC,UACxB,MAAE16B,EAAM,UAAEiS,GAAegyD,GAC1BvpC,IAAaq+B,IAAe/4D,IAAUiS,GAAayD,EAAS,IAGjEtG,EAAI8E,OACJ9E,EAAI6I,YAAcjY,EAClBoP,EAAI6C,UAAYA,EAChB7C,EAAIulC,YAAYnC,EAAW//B,MAAQ,IACnCrD,EAAImoB,eAAiBib,EAAW9/B,WAChCtD,EAAI0G,YACJysD,GAAevyD,EAAO0F,EAAQglB,EAAUq+B,GACxC3pD,EAAI6G,YACJ7G,EAAIoH,SACJpH,EAAIkF,UACR,CAqLoB4vD,CAAevtI,KAAM88G,EAAa9hC,EAAQonD,EAAYrlB,EAC1D,IAGJjZ,EAAWn6C,QAAS,CAEpB,IADA8uB,EAAI8E,OACA/9E,EAAI4iI,EAAa,EAAG5iI,GAAK,EAAGA,IAAI,CAChC,MAAMs9G,EAAchZ,EAAWle,WAAW5lF,KAAKosI,qBAAqB5sI,KAC9D,MAAE6pE,EAAM,UAAEiS,GAAewhC,EAC1BxhC,GAAcjS,IAGnBoP,EAAI6C,UAAYA,EAChB7C,EAAI6I,YAAcjY,EAClBoP,EAAIulC,YAAYlB,EAAY3tB,YAC5B1W,EAAImoB,eAAiBkc,EAAY1tB,iBACjCpU,EAASh7E,KAAK4kG,8BAA8B/jB,EAAKvmC,QAAUt6C,KAAKuC,IAAMvC,KAAKwP,KAC3E+uB,EAAWv+B,KAAKkrI,iBAAiB1rI,EAAGw7E,GACpCvC,EAAI0G,YACJ1G,EAAI8G,OAAOv/E,KAAKqkG,QAASrkG,KAAKskG,SAC9B7rB,EAAI+G,OAAOjhD,EAASvU,EAAGuU,EAAStU,GAChCwuD,EAAIoH,SACR,CACApH,EAAIkF,SACR,CACJ,CACH,UAAAsgC,GAAc,CACd,UAAAE,GACO,MAAM1lC,EAAMz4E,KAAKy4E,IACXoI,EAAO7gF,KAAK4P,QACZqmG,EAAWp1B,EAAKnK,MACtB,IAAKu/B,EAAStsD,QACV,OAEJ,MAAMo4C,EAAa/hG,KAAKwkG,cAAc,GACtC,IAAIxpB,EAAQ7oD,EACZsmD,EAAI8E,OACJ9E,EAAIwG,UAAUj/E,KAAKqkG,QAASrkG,KAAKskG,SACjC7rB,EAAIjO,OAAOu3B,GACXtpB,EAAIuJ,UAAY,SAChBvJ,EAAIwJ,aAAe,SACnBjiF,KAAK02E,MAAMtzC,QAAQ,CAAC2tD,EAAM5hF,KACtB,GAAc,IAAVA,GAAenP,KAAKuC,KAAO,IAAMs+E,EAAKvmC,QACtC,OAEJ,MAAMwiE,EAAc7G,EAASrwB,WAAW5lF,KAAKm+E,WAAWhvE,IAClD2rG,EAAWx3B,GAAOw5B,EAAY1kC,MAEpC,GADA4C,EAASh7E,KAAK4kG,8BAA8B5kG,KAAK02E,MAAMvnE,GAAOjQ,OAC1D49G,EAAYlgC,kBAAmB,CAC/BnE,EAAIL,KAAO0iC,EAAS3sG,OACpBgkB,EAAQsmD,EAAI0E,YAAY4T,EAAKznC,OAAOn3B,MACpCsmD,EAAI8I,UAAYu7B,EAAYjgC,cAC5B,MAAM/B,EAAUuI,GAAUy5B,EAAYhgC,iBACtCrE,EAAIkJ,UAAUxvD,EAAQ,EAAI2oD,EAAQ5tC,MAAO8tC,EAAS8/B,EAAS/4E,KAAO,EAAI+4C,EAAQhnB,IAAK3hC,EAAQ2oD,EAAQ3oD,MAAO2oF,EAAS/4E,KAAO+4C,EAAQ/mB,OACtI,CACA6tB,GAAWnJ,EAAKsY,EAAKznC,MAAO,GAAI0xB,EAAQ8/B,EAAU,CAC9CzxC,MAAOyzC,EAAYzzC,MACnByY,YAAag7B,EAAYzgC,gBACzBwF,YAAai7B,EAAY1gC,oBAGjC3D,EAAIkF,SACR,CACH,SAAA0gC,GAAa,EAGd,MAAMmvB,GAAY,CACdC,YAAa,CACTC,QAAQ,EACR3rG,KAAM,EACN2nG,MAAO,KAEXiE,OAAQ,CACJD,QAAQ,EACR3rG,KAAM,IACN2nG,MAAO,IAEXkE,OAAQ,CACJF,QAAQ,EACR3rG,KAAM,IACN2nG,MAAO,IAEXmE,KAAM,CACFH,QAAQ,EACR3rG,KAAM,KACN2nG,MAAO,IAEXoE,IAAK,CACDJ,QAAQ,EACR3rG,KAAM,MACN2nG,MAAO,IAEXqE,KAAM,CACFL,QAAQ,EACR3rG,KAAM,OACN2nG,MAAO,GAEXsE,MAAO,CACHN,QAAQ,EACR3rG,KAAM,OACN2nG,MAAO,IAEXuE,QAAS,CACLP,QAAQ,EACR3rG,KAAM,OACN2nG,MAAO,GAEXwE,KAAM,CACFR,QAAQ,EACR3rG,KAAM,SAGPosG,GAAyBljI,OAAO+H,KAAKw6H,IAC3C,SAASY,GAAOllI,EAAGyE,GAChB,OAAOzE,EAAIyE,CACf,CACC,SAAS7H,GAAMuzE,EAAOlvE,GACnB,GAAIygE,GAAczgE,GACd,OAAO,KAEX,MAAMgsB,EAAUkjD,EAAMg1D,UAChB,OAAEC,EAAO,MAAExjI,EAAM,WAAEyjI,GAAgBl1D,EAAMm1D,WAC/C,IAAItvI,EAAQiL,EAOZ,MANsB,mBAAXmkI,IACPpvI,EAAQovI,EAAOpvI,IAEd2rE,GAAe3rE,KAChBA,EAA0B,iBAAXovI,EAAsBn4G,EAAQrwB,MAAM5G,EAAOovI,GAAUn4G,EAAQrwB,MAAM5G,IAExE,OAAVA,EACO,MAEP4L,IACA5L,EAAkB,SAAV4L,IAAqBqjE,GAASogE,KAA8B,IAAfA,EAAuEp4G,EAAQ2zE,QAAQ5qG,EAAO4L,GAAvEqrB,EAAQ2zE,QAAQ5qG,EAAO,UAAWqvI,KAE1GrvI,EACZ,CACC,SAASuvI,GAA0BC,EAASnsI,EAAKiN,EAAKm/H,GACnD,MAAMnjE,EAAO2iE,GAAM1uI,OACnB,IAAI,IAAID,EAAI2uI,GAAMhrI,QAAQurI,GAAUlvI,EAAIgsE,EAAO,IAAKhsE,EAAE,CAClD,MAAMovI,EAAWpB,GAAUW,GAAM3uI,IAC3BiyF,EAASm9C,EAASlF,MAAQkF,EAASlF,MAAQt/H,OAAOykI,iBACxD,GAAID,EAASlB,QAAUrrI,KAAK+wG,MAAM5jG,EAAMjN,IAAQkvF,EAASm9C,EAAS7sG,QAAU4sG,EACxE,OAAOR,GAAM3uI,EAErB,CACA,OAAO2uI,GAAM3iE,EAAO,EACxB,CAiBC,SAASsjE,GAAQp4D,EAAOl2E,EAAMuuI,GAC3B,GAAKA,GAEE,GAAIA,EAAWtvI,OAAQ,CAC1B,MAAM,GAAE+wE,EAAG,GAAED,GAAQJ,GAAQ4+D,EAAYvuI,GAEzCk2E,EADkBq4D,EAAWv+D,IAAOhwE,EAAOuuI,EAAWv+D,GAAMu+D,EAAWx+D,KACpD,CACvB,OALImG,EAAMl2E,IAAQ,CAMtB,CAcC,SAASwuI,GAAoB31D,EAAOh7D,EAAQ4wH,GACzC,MAAMv4D,EAAQ,GACPxuE,EAAM,CAAC,EACRsjE,EAAOntD,EAAO5e,OACpB,IAAID,EAAGN,EACP,IAAIM,EAAI,EAAGA,EAAIgsE,IAAQhsE,EACnBN,EAAQmf,EAAO7e,GACf0I,EAAIhJ,GAASM,EACbk3E,EAAMx2E,KAAK,CACPhB,QACAw9E,OAAO,IAGf,OAAgB,IAATlR,GAAeyjE,EA1BzB,SAAuB51D,EAAO3C,EAAOxuE,EAAK+mI,GACvC,MAAM94G,EAAUkjD,EAAMg1D,SAChBx2B,GAAS1hF,EAAQ2zE,QAAQpzB,EAAM,GAAGx3E,MAAO+vI,GACzCv+D,EAAOgG,EAAMA,EAAMj3E,OAAS,GAAGP,MACrC,IAAIw9E,EAAOvtE,EACX,IAAIutE,EAAQm7B,EAAOn7B,GAAShM,EAAMgM,GAASvmD,EAAQ1tB,IAAIi0E,EAAO,EAAGuyD,GAC7D9/H,EAAQjH,EAAIw0E,GACRvtE,GAAS,IACTunE,EAAMvnE,GAAOutE,OAAQ,GAG7B,OAAOhG,CACX,CAc8Cw4D,CAAc71D,EAAO3C,EAAOxuE,EAAK+mI,GAAzCv4D,CACtC,CACA,MAAMy4D,WAAkB/6B,GACpB77C,UAAY,OACfA,gBAAkB,CAClB2iB,OAAQ,OACD76E,SAAU,CAAC,EACXG,KAAM,CACF8tI,QAAQ,EACRzjI,MAAM,EACNC,OAAO,EACPyjI,YAAY,EACZG,QAAS,cACTU,eAAgB,CAAC,GAErB14D,MAAO,CACdniD,OAAQ,OACGvG,UAAU,EACV0uD,MAAO,CACHz8E,SAAS,KAIxB,WAAAS,CAAYuiF,GACL7qE,MAAM6qE,GACLjjF,KAAKg+F,OAAS,CACXr6F,KAAM,GACNk2F,OAAQ,GACR54D,IAAK,IAERjhC,KAAKqvI,MAAQ,MACbrvI,KAAKsvI,gBAAa1vI,EACnBI,KAAKuvI,SAAW,CAAC,EACjBvvI,KAAKwvI,aAAc,EACnBxvI,KAAKwuI,gBAAa5uI,CACtB,CACA,IAAA+pG,CAAKyd,EAAWvmC,EAAO,CAAC,GACpB,MAAMrgF,EAAO4mH,EAAU5mH,OAAS4mH,EAAU5mH,KAAO,CAAC,GAC3C21B,EAAUn2B,KAAKquI,SAAW,IAAIhuI,GAAe+mH,EAAU/mH,SAASgwF,MACvEl6D,EAAQwzE,KAAK9oB,GACbzU,GAAQ5rE,EAAK4uI,eAAgBj5G,EAAQyzE,WACrC5pG,KAAKwuI,WAAa,CACdF,OAAQ9tI,EAAK8tI,OACbxjI,MAAOtK,EAAKsK,MACZyjI,WAAY/tI,EAAK+tI,YAErBn2H,MAAMuxF,KAAKyd,GACXpnH,KAAKwvI,YAAc3uD,EAAK4uD,UAC5B,CACH,KAAA3pI,CAAM01F,EAAKrsF,GACJ,YAAYvP,IAAR47F,EACO,KAEJ11F,GAAM9F,KAAMw7F,EACvB,CACA,YAAAsT,GACI12F,MAAM02F,eACN9uG,KAAKg+F,OAAS,CACVr6F,KAAM,GACNk2F,OAAQ,GACR54D,IAAK,GAEb,CACA,mBAAAs1E,GACI,MAAM3mG,EAAU5P,KAAK4P,QACfumB,EAAUn2B,KAAKquI,SACfxjI,EAAO+E,EAAQpP,KAAKqK,MAAQ,MAClC,IAAI,IAAEtI,EAAI,IAAEiN,EAAI,WAAE6iE,EAAW,WAAEC,GAAgBtyE,KAAKuyE,gBAC3D,SAASm9D,EAAax0D,GACN7I,GAAehoE,MAAM6wE,EAAO34E,OAC7BA,EAAMF,KAAKE,IAAIA,EAAK24E,EAAO34E,MAE1B+vE,GAAejoE,MAAM6wE,EAAO1rE,OAC7BA,EAAMnN,KAAKmN,IAAIA,EAAK0rE,EAAO1rE,KAEnC,CACK6iE,GAAeC,IAChBo9D,EAAa1vI,KAAK2vI,mBACK,UAAnB//H,EAAQsrE,QAA+C,WAAzBtrE,EAAQ8mE,MAAMniD,QAC5Cm7G,EAAa1vI,KAAKu6F,WAAU,KAGpCh4F,EAAMsoE,GAAetoE,KAAS8H,MAAM9H,GAAOA,GAAO4zB,EAAQ2zE,QAAQ3pG,KAAKC,MAAOyK,GAC9E2E,EAAMq7D,GAAer7D,KAASnF,MAAMmF,GAAOA,GAAO2mB,EAAQ4zE,MAAM5pG,KAAKC,MAAOyK,GAAQ,EACpF7K,KAAKuC,IAAMF,KAAKE,IAAIA,EAAKiN,EAAM,GAC/BxP,KAAKwP,IAAMnN,KAAKmN,IAAIjN,EAAM,EAAGiN,EACjC,CACH,eAAAmgI,GACO,MAAM1pD,EAAMjmF,KAAK4vI,qBACjB,IAAIrtI,EAAM6H,OAAOijE,kBACb79D,EAAMpF,OAAOuwF,kBAKjB,OAJI1U,EAAIxmF,SACJ8C,EAAM0jF,EAAI,GACVz2E,EAAMy2E,EAAIA,EAAIxmF,OAAS,IAEpB,CACH8C,MACAiN,MAER,CACH,UAAAqnG,GACO,MAAMjnG,EAAU5P,KAAK4P,QACfigI,EAAWjgI,EAAQpP,KACnBy1G,EAAWrmG,EAAQ8mE,MACnBq4D,EAAiC,WAApB94B,EAAS1hF,OAAsBv0B,KAAK4vI,qBAAuB5vI,KAAK8vI,YAC5D,UAAnBlgI,EAAQsrE,QAAsB6zD,EAAWtvI,SACzCO,KAAKuC,IAAMvC,KAAKk1G,UAAY65B,EAAW,GACvC/uI,KAAKwP,IAAMxP,KAAKi1G,UAAY85B,EAAWA,EAAWtvI,OAAS,IAE/D,MAAM8C,EAAMvC,KAAKuC,IAEXm0E,EDzjVV,SAAwBr4D,EAAQ9b,EAAKiN,GACrC,IAAIzO,EAAQ,EACRgiD,EAAM1kC,EAAO5e,OACjB,KAAMsB,EAAQgiD,GAAO1kC,EAAOtd,GAASwB,GACjCxB,IAEJ,KAAMgiD,EAAMhiD,GAASsd,EAAO0kC,EAAM,GAAKvzC,GACnCuzC,IAEJ,OAAOhiD,EAAQ,GAAKgiD,EAAM1kC,EAAO5e,OAAS4e,EAAOnb,MAAMnC,EAAOgiD,GAAO1kC,CACzE,CC+iVsB0xH,CAAehB,EAAYxsI,EAD7BvC,KAAKwP,KAQjB,OANAxP,KAAKqvI,MAAQQ,EAAShlI,OAASorG,EAAS35B,SAAWmyD,GAA0BoB,EAASnB,QAAS1uI,KAAKuC,IAAKvC,KAAKwP,IAAKxP,KAAKgwI,kBAAkBztI,IAnKjJ,SAAoC82E,EAAO6/B,EAAUw1B,EAASnsI,EAAKiN,GAChE,IAAI,IAAIhQ,EAAI2uI,GAAM1uI,OAAS,EAAGD,GAAK2uI,GAAMhrI,QAAQurI,GAAUlvI,IAAI,CAC3D,MAAMqL,EAAOsjI,GAAM3uI,GACnB,GAAIguI,GAAU3iI,GAAM6iI,QAAUr0D,EAAMg1D,SAASxkC,KAAKr6F,EAAKjN,EAAKsI,IAASquG,EAAW,EAC5E,OAAOruG,CAEf,CACA,OAAOsjI,GAAMO,EAAUP,GAAMhrI,QAAQurI,GAAW,EACpD,CA2J0JuB,CAA2BjwI,KAAM02E,EAAMj3E,OAAQowI,EAASnB,QAAS1uI,KAAKuC,IAAKvC,KAAKwP,MAClOxP,KAAKsvI,WAAcr5B,EAASv5B,MAAMz8E,SAA0B,SAAfD,KAAKqvI,MA3JzD,SAA4BxkI,GACzB,IAAI,IAAIrL,EAAI2uI,GAAMhrI,QAAQ0H,GAAQ,EAAG2gE,EAAO2iE,GAAM1uI,OAAQD,EAAIgsE,IAAQhsE,EAClE,GAAIguI,GAAUW,GAAM3uI,IAAIkuI,OACpB,OAAOS,GAAM3uI,EAGzB,CAqJyF0wI,CAAmBlwI,KAAKqvI,YAApCzvI,EACrEI,KAAKmwI,YAAYpB,GACbn/H,EAAQ0qC,SACRo8B,EAAMp8B,UAEH00F,GAAoBhvI,KAAM02E,EAAO12E,KAAKsvI,WACjD,CACA,aAAAj3B,GACQr4G,KAAK4P,QAAQwgI,qBACbpwI,KAAKmwI,YAAYnwI,KAAK02E,MAAMxuE,IAAK6oF,IAAQA,EAAK7xF,OAEtD,CACH,WAAAixI,CAAYpB,EAAa,IAClB,IAEIl3B,EAAOnnC,EAFP3vE,EAAQ,EACRgiD,EAAM,EAEN/iD,KAAK4P,QAAQorE,QAAU+zD,EAAWtvI,SAClCo4G,EAAQ73G,KAAKqwI,mBAAmBtB,EAAW,IAEvChuI,EADsB,IAAtBguI,EAAWtvI,OACH,EAAIo4G,GAEH73G,KAAKqwI,mBAAmBtB,EAAW,IAAMl3B,GAAS,EAE/DnnC,EAAO1wE,KAAKqwI,mBAAmBtB,EAAWA,EAAWtvI,OAAS,IAE1DsjD,EADsB,IAAtBgsF,EAAWtvI,OACLixE,GAECA,EAAO1wE,KAAKqwI,mBAAmBtB,EAAWA,EAAWtvI,OAAS,KAAO,GAGpF,MAAMm9G,EAAQmyB,EAAWtvI,OAAS,EAAI,GAAM,IAC5CsB,EAAQkvE,GAAYlvE,EAAO,EAAG67G,GAC9B75D,EAAMktB,GAAYltB,EAAK,EAAG65D,GAC1B58G,KAAKuvI,SAAW,CACZxuI,QACAgiD,MACA0uC,OAAQ,GAAK1wF,EAAQ,EAAIgiD,GAEjC,CACH,SAAA+sF,GACO,MAAM35G,EAAUn2B,KAAKquI,SACf9rI,EAAMvC,KAAKuC,IACXiN,EAAMxP,KAAKwP,IACXI,EAAU5P,KAAK4P,QACfigI,EAAWjgI,EAAQpP,KACnBi8E,EAAQozD,EAAShlI,MAAQ4jI,GAA0BoB,EAASnB,QAASnsI,EAAKiN,EAAKxP,KAAKgwI,kBAAkBztI,IACtG4lI,EAAWn9D,GAAep7D,EAAQ8mE,MAAMyxD,SAAU,GAClDmI,EAAoB,SAAV7zD,GAAmBozD,EAAStB,WACtCgC,EAAapiE,GAASmiE,KAAwB,IAAZA,EAClC55D,EAAQ,CAAC,EACf,IACIl2E,EAAMsxE,EADN+lC,EAAQt1G,EAMZ,GAJIguI,IACA14B,GAAS1hF,EAAQ2zE,QAAQ+N,EAAO,UAAWy4B,IAE/Cz4B,GAAS1hF,EAAQ2zE,QAAQ+N,EAAO04B,EAAa,MAAQ9zD,GACjDtmD,EAAQ0zE,KAAKr6F,EAAKjN,EAAKk6E,GAAS,IAAS0rD,EACzC,MAAM,IAAIhhH,MAAM5kB,EAAM,QAAUiN,EAAM,uCAAyC24H,EAAW,IAAM1rD,GAEpG,MAAMsyD,EAAsC,SAAzBn/H,EAAQ8mE,MAAMniD,QAAqBv0B,KAAKwwI,oBAC3D,IAAIhwI,EAAOq3G,EAAO/lC,EAAQ,EAAGtxE,EAAOgP,EAAKhP,GAAQ21B,EAAQ1tB,IAAIjI,EAAM2nI,EAAU1rD,GAAQ3K,IACjFg9D,GAAQp4D,EAAOl2E,EAAMuuI,GAKzB,OAHIvuI,IAASgP,GAA0B,UAAnBI,EAAQsrE,QAAgC,IAAVpJ,GAC9Cg9D,GAAQp4D,EAAOl2E,EAAMuuI,GAElB9jI,OAAO+H,KAAK0jE,GAAOzpC,KAAKmhG,IAAQlmI,IAAK8hB,IAAKA,EACrD,CACH,gBAAAkxE,CAAiBh8F,GACV,MAAMi3B,EAAUn2B,KAAKquI,SACfwB,EAAW7vI,KAAK4P,QAAQpP,KAC9B,OAAIqvI,EAASY,cACFt6G,EAAQmgD,OAAOp3E,EAAO2wI,EAASY,eAEnCt6G,EAAQmgD,OAAOp3E,EAAO2wI,EAAST,eAAesB,SACzD,CACH,MAAAp6D,CAAOp3E,EAAOo3E,GACP,MACMszB,EADU5pG,KAAK4P,QACGpP,KAAK4uI,eACvBvkI,EAAO7K,KAAKqvI,MACZsB,EAAMr6D,GAAUszB,EAAQ/+F,GAC9B,OAAO7K,KAAKquI,SAAS/3D,OAAOp3E,EAAOyxI,EACvC,CACH,mBAAAC,CAAoBpwI,EAAM2O,EAAOunE,EAAOJ,GACjC,MAAM1mE,EAAU5P,KAAK4P,QACfsmE,EAAYtmE,EAAQ8mE,MAAM1oD,SAChC,GAAIkoD,EACA,OAAOloD,GAASkoD,EAAW,CACvB11E,EACA2O,EACAunE,GACD12E,MAEP,MAAM4pG,EAAUh6F,EAAQpP,KAAK4uI,eACvBvkI,EAAO7K,KAAKqvI,MACZJ,EAAYjvI,KAAKsvI,WACjBuB,EAAchmI,GAAQ++F,EAAQ/+F,GAC9BimI,EAAc7B,GAAarlC,EAAQqlC,GACnCl+C,EAAOra,EAAMvnE,GACbutE,EAAQuyD,GAAa6B,GAAe//C,GAAQA,EAAKrU,MACvD,OAAO18E,KAAKquI,SAAS/3D,OAAO91E,EAAM81E,IAAWoG,EAAQo0D,EAAcD,GACvE,CACH,kBAAA73B,CAAmBtiC,GACZ,IAAIl3E,EAAGgsE,EAAMulB,EACb,IAAIvxF,EAAI,EAAGgsE,EAAOkL,EAAMj3E,OAAQD,EAAIgsE,IAAQhsE,EACxCuxF,EAAOra,EAAMl3E,GACbuxF,EAAKznC,MAAQtpD,KAAK4wI,oBAAoB7/C,EAAK7xF,MAAOM,EAAGk3E,EAE7D,CACH,kBAAA25D,CAAmBnxI,GACZ,OAAiB,OAAVA,EAAiBo7F,KAAOp7F,EAAQc,KAAKuC,MAAQvC,KAAKwP,IAAMxP,KAAKuC,IACxE,CACH,gBAAAiwE,CAAiBtzE,GACV,MAAM6xI,EAAU/wI,KAAKuvI,SACf1kD,EAAM7qF,KAAKqwI,mBAAmBnxI,GACpC,OAAOc,KAAKmnG,oBAAoB4pC,EAAQhwI,MAAQ8pF,GAAOkmD,EAAQt/C,OACnE,CACH,gBAAA4V,CAAiBvpB,GACV,MAAMizD,EAAU/wI,KAAKuvI,SACf1kD,EAAM7qF,KAAKs7G,mBAAmBx9B,GAASizD,EAAQt/C,OAASs/C,EAAQhuF,IACtE,OAAO/iD,KAAKuC,IAAMsoF,GAAO7qF,KAAKwP,IAAMxP,KAAKuC,IAC7C,CACH,aAAAyuI,CAAc1nF,GACP,MAAM2nF,EAAYjxI,KAAK4P,QAAQ8mE,MACzBw6D,EAAiBlxI,KAAKy4E,IAAI0E,YAAY7zB,GAAOn3B,MAC7Cg9C,EAAQZ,GAAUvuE,KAAKqlG,eAAiB4rC,EAAU/0D,YAAc+0D,EAAUh1D,aAC1Ek1D,EAAc9uI,KAAKoyE,IAAItF,GACvBiiE,EAAc/uI,KAAKmxE,IAAIrE,GACvBkiE,EAAerxI,KAAKm7G,wBAAwB,GAAGp5E,KACrD,MAAO,CACHq6B,EAAG80E,EAAiBC,EAAcE,EAAeD,EACjDr2E,EAAGm2E,EAAiBE,EAAcC,EAAeF,EAEzD,CACH,iBAAAnB,CAAkBsB,GACX,MAAMzB,EAAW7vI,KAAK4P,QAAQpP,KACxB4uI,EAAiBS,EAAST,eAC1B94D,EAAS84D,EAAeS,EAAShlI,OAASukI,EAAe3B,YACzD8D,EAAevxI,KAAK4wI,oBAAoBU,EAAa,EAAGtC,GAAoBhvI,KAAM,CACpFsxI,GACDtxI,KAAKsvI,YAAah5D,GACfv0C,EAAO/hC,KAAKgxI,cAAcO,GAC1B5C,EAAWtsI,KAAKuI,MAAM5K,KAAKqlG,eAAiBrlG,KAAKmyB,MAAQ4P,EAAKq6B,EAAIp8D,KAAK+zD,OAAShyB,EAAKg5B,GAAK,EAChG,OAAO4zE,EAAW,EAAIA,EAAW,CACrC,CACH,iBAAA6B,GACO,IACIhxI,EAAGgsE,EADHujE,EAAa/uI,KAAKg+F,OAAOr6F,MAAQ,GAErC,GAAIorI,EAAWtvI,OACX,OAAOsvI,EAEX,MAAMr5B,EAAQ11G,KAAK+0F,0BACnB,GAAI/0F,KAAKwvI,aAAe95B,EAAMj2G,OAC1B,OAAOO,KAAKg+F,OAAOr6F,KAAO+xG,EAAM,GAAGvkE,WAAW4pD,mBAAmB/6F,MAErE,IAAIR,EAAI,EAAGgsE,EAAOkqC,EAAMj2G,OAAQD,EAAIgsE,IAAQhsE,EACxCuvI,EAAaA,EAAW1iI,OAAOqpG,EAAMl2G,GAAG2xC,WAAW4pD,mBAAmB/6F,OAE1E,OAAOA,KAAKg+F,OAAOr6F,KAAO3D,KAAKkuF,UAAU6gD,EAC7C,CACH,kBAAAa,GACO,MAAMb,EAAa/uI,KAAKg+F,OAAOnE,QAAU,GACzC,IAAIr6F,EAAGgsE,EACP,GAAIujE,EAAWtvI,OACX,OAAOsvI,EAEX,MAAMl1C,EAAS75F,KAAK85F,YACpB,IAAIt6F,EAAI,EAAGgsE,EAAOquB,EAAOp6F,OAAQD,EAAIgsE,IAAQhsE,EACzCuvI,EAAW7uI,KAAK4F,GAAM9F,KAAM65F,EAAOr6F,KAEvC,OAAOQ,KAAKg+F,OAAOnE,OAAS75F,KAAKwvI,YAAcT,EAAa/uI,KAAKkuF,UAAU6gD,EAC/E,CACH,SAAA7gD,CAAU7vE,GACH,OAAO4yD,GAAa5yD,EAAO4uB,KAAKmhG,IACpC,EAGJ,SAAS,GAAYh+D,EAAOnG,EAAK3vB,GAC7B,IAEIk3F,EAAYC,EAAYC,EAAYC,EAFpCnhE,EAAK,EACLD,EAAKH,EAAM3wE,OAAS,EAEpB66C,GACI2vB,GAAOmG,EAAMI,GAAIqa,KAAO5gB,GAAOmG,EAAMG,GAAIsa,OACtCra,KAAKD,MAAQE,GAAaL,EAAO,MAAOnG,MAE5C4gB,IAAK2mD,EAAahxI,KAAMkxI,GAAgBthE,EAAMI,MAC9Cqa,IAAK4mD,EAAajxI,KAAMmxI,GAAgBvhE,EAAMG,MAE7CtG,GAAOmG,EAAMI,GAAIhwE,MAAQypE,GAAOmG,EAAMG,GAAI/vE,QACvCgwE,KAAKD,MAAQE,GAAaL,EAAO,OAAQnG,MAE7CzpE,KAAMgxI,EAAa3mD,IAAK6mD,GAAgBthE,EAAMI,MAC9ChwE,KAAMixI,EAAa5mD,IAAK8mD,GAAgBvhE,EAAMG,KAErD,MAAMqhE,EAAOH,EAAaD,EAC1B,OAAOI,EAAOF,GAAcC,EAAaD,IAAeznE,EAAMunE,GAAcI,EAAOF,CACvF,CA0FA,IAAIp4D,GAAsBruE,OAAO67B,OAAO,CACxC76B,UAAW,KACX4lI,cApgDA,cAA4Bz9B,GACxB77C,UAAY,WACfA,gBAAkB,CACXme,MAAO,CACH1oD,SAAUq5G,KAGlB,WAAA3mI,CAAYkxF,GACRx5E,MAAMw5E,GACL5xF,KAAKynI,iBAAc7nI,EACpBI,KAAK2nI,YAAc,EACnB3nI,KAAK8xI,aAAe,EACxB,CACA,IAAAnoC,CAAKyY,GACD,MAAM2vB,EAAQ/xI,KAAK8xI,aACnB,GAAIC,EAAMtyI,OAAQ,CACd,MAAMo6F,EAAS75F,KAAK85F,YACpB,IAAK,MAAM,MAAE3qF,EAAM,MAAEm6C,KAAYyoF,EACzBl4C,EAAO1qF,KAAWm6C,GAClBuwC,EAAO5lF,OAAO9E,EAAO,GAG7BnP,KAAK8xI,aAAe,EACxB,CACA15H,MAAMuxF,KAAKyY,EACf,CACA,KAAAt8G,CAAM01F,EAAKrsF,GACP,GAAIy7D,GAAc4wB,GACd,OAAO,KAEX,MAAM3B,EAAS75F,KAAK85F,YAEpB,MAxCW,EAAC3qF,EAAOK,IAAgB,OAAVL,EAAiB,KAAO8gE,GAAY5tE,KAAKyI,MAAMqE,GAAQ,EAAGK,GAwC5EskG,CADP3kG,EAAQ27D,SAAS37D,IAAU0qF,EAAO1qF,KAAWqsF,EAAMrsF,EA/C3D,SAAwB0qF,EAAQ2B,EAAKrsF,EAAO6iI,GACxC,MAAMn6B,EAAQhe,EAAO12F,QAAQq4F,GAC7B,OAAe,IAAXqc,EAdY,EAAChe,EAAQ2B,EAAKrsF,EAAO6iI,KAClB,iBAARx2C,GACPrsF,EAAQ0qF,EAAO35F,KAAKs7F,GAAO,EAC3Bw2C,EAAY3vG,QAAQ,CAChBlzB,QACAm6C,MAAOkyC,KAEJnxF,MAAMmxF,KACbrsF,EAAQ,MAELA,GAKI8iI,CAAYp4C,EAAQ2B,EAAKrsF,EAAO6iI,GAGpCn6B,IADMhe,EAAOq4C,YAAY12C,GACRrsF,EAAQ0oG,CACpC,CAwCmEs6B,CAAet4C,EAAQ2B,EAAKxwB,GAAe77D,EAAOqsF,GAAMx7F,KAAK8xI,cAC/Fj4C,EAAOp6F,OAAS,EAC7C,CACA,mBAAA82G,GACI,MAAM,WAAElkC,EAAW,WAAEC,GAAgBtyE,KAAKuyE,gBAC1C,IAAI,IAAEhwE,EAAI,IAAEiN,GAASxP,KAAKu6F,WAAU,GACR,UAAxBv6F,KAAK4P,QAAQsrE,SACR7I,IACD9vE,EAAM,GAEL+vE,IACD9iE,EAAMxP,KAAK85F,YAAYr6F,OAAS,IAGxCO,KAAKuC,IAAMA,EACXvC,KAAKwP,IAAMA,CACf,CACA,UAAAqnG,GACI,MAAMt0G,EAAMvC,KAAKuC,IACXiN,EAAMxP,KAAKwP,IACXwrE,EAASh7E,KAAK4P,QAAQorE,OACtBtE,EAAQ,GACd,IAAImjB,EAAS75F,KAAK85F,YAClBD,EAAiB,IAARt3F,GAAaiN,IAAQqqF,EAAOp6F,OAAS,EAAIo6F,EAASA,EAAO32F,MAAMX,EAAKiN,EAAM,GACnFxP,KAAK2nI,YAActlI,KAAKmN,IAAIqqF,EAAOp6F,QAAUu7E,EAAS,EAAI,GAAI,GAC9Dh7E,KAAKynI,YAAcznI,KAAKuC,KAAOy4E,EAAS,GAAM,GAC9C,IAAI,IAAI97E,EAAQqD,EAAKrD,GAASsQ,EAAKtQ,IAC/Bw3E,EAAMx2E,KAAK,CACPhB,UAGR,OAAOw3E,CACX,CACA,gBAAAwkB,CAAiBh8F,GACb,OAAOmoI,GAAkBtiI,KAAK/E,KAAMd,EACxC,CACH,SAAA6zF,GACO36E,MAAM26E,YACD/yF,KAAKqlG,iBACNrlG,KAAKmqG,gBAAkBnqG,KAAKmqG,eAEpC,CACA,gBAAA33B,CAAiBtzE,GAIb,MAHqB,iBAAVA,IACPA,EAAQc,KAAK8F,MAAM5G,IAEN,OAAVA,EAAiBo7F,IAAMt6F,KAAKmnG,oBAAoBjoG,EAAQc,KAAKynI,aAAeznI,KAAK2nI,YAC5F,CACA,eAAAppC,CAAgBpvF,GACZ,MAAMunE,EAAQ12E,KAAK02E,MACnB,OAAIvnE,EAAQ,GAAKA,EAAQunE,EAAMj3E,OAAS,EAC7B,KAEJO,KAAKwyE,iBAAiBkE,EAAMvnE,GAAOjQ,MAC9C,CACA,gBAAAmoG,CAAiBvpB,GACb,OAAOz7E,KAAKyI,MAAM9K,KAAKynI,YAAcznI,KAAKs7G,mBAAmBx9B,GAAS99E,KAAK2nI,YAC/E,CACA,YAAAviC,GACI,OAAOplG,KAAK+6E,MAChB,GA06CJsuD,YAAaA,GACbQ,iBAAkBA,GAClBgC,kBAAmBA,GACnBsD,UAAWA,GACXiD,gBAhGA,cAA8BjD,GAC1B52E,UAAY,aACfA,gBAAkB42E,GAAUh1D,SAC5B,WAAAz5E,CAAYuiF,GACL7qE,MAAM6qE,GACLjjF,KAAKqyI,OAAS,GACdryI,KAAKsyI,aAAU1yI,EACfI,KAAKuyI,iBAAc3yI,CACxB,CACH,WAAAuwI,GACO,MAAMpB,EAAa/uI,KAAKwyI,yBAClBpiE,EAAQpwE,KAAKqyI,OAASryI,KAAKyyI,iBAAiB1D,GAClD/uI,KAAKsyI,QAAU,GAAYliE,EAAOpwE,KAAKuC,KACvCvC,KAAKuyI,YAAc,GAAYniE,EAAOpwE,KAAKwP,KAAOxP,KAAKsyI,QACvDl6H,MAAM+3H,YAAYpB,EACtB,CACH,gBAAA0D,CAAiB1D,GACV,MAAM,IAAExsI,EAAI,IAAEiN,GAASxP,KACjBkxE,EAAQ,GACRd,EAAQ,GACd,IAAI5wE,EAAGgsE,EAAMke,EAAM0U,EAAMvW,EACzB,IAAIroF,EAAI,EAAGgsE,EAAOujE,EAAWtvI,OAAQD,EAAIgsE,IAAQhsE,EAC7C4+F,EAAO2wC,EAAWvvI,GACd4+F,GAAQ77F,GAAO67F,GAAQ5uF,GACvB0hE,EAAMhxE,KAAKk+F,GAGnB,GAAIltB,EAAMzxE,OAAS,EACf,MAAO,CACH,CACIe,KAAM+B,EACNsoF,IAAK,GAET,CACIrqF,KAAMgP,EACNq7E,IAAK,IAIjB,IAAIrrF,EAAI,EAAGgsE,EAAO0F,EAAMzxE,OAAQD,EAAIgsE,IAAQhsE,EACxCqoF,EAAO3W,EAAM1xE,EAAI,GACjBkqF,EAAOxY,EAAM1xE,EAAI,GACjB4+F,EAAOltB,EAAM1xE,GACT6C,KAAKyI,OAAO+8E,EAAO6B,GAAQ,KAAO0U,GAClChuB,EAAMlwE,KAAK,CACPM,KAAM49F,EACNvT,IAAKrrF,GAAKgsE,EAAO,KAI7B,OAAO4E,CACX,CACH,SAAA0/D,GACO,MAAMvtI,EAAMvC,KAAKuC,IACXiN,EAAMxP,KAAKwP,IACjB,IAAIu/H,EAAa32H,MAAMo4H,oBAOvB,OANKzB,EAAWr6H,SAASnS,IAASwsI,EAAWtvI,QACzCsvI,EAAW96H,OAAO,EAAG,EAAG1R,GAEvBwsI,EAAWr6H,SAASlF,IAA8B,IAAtBu/H,EAAWtvI,QACxCsvI,EAAW7uI,KAAKsP,GAEbu/H,EAAW9hG,KAAK,CAAC/jC,EAAGyE,IAAIzE,EAAIyE,EACvC,CACH,sBAAA6kI,GACO,IAAIzD,EAAa/uI,KAAKg+F,OAAO/8D,KAAO,GACpC,GAAI8tG,EAAWtvI,OACX,OAAOsvI,EAEX,MAAMprI,EAAO3D,KAAKwwI,oBACZlnF,EAAQtpD,KAAK4vI,qBAOnB,OALIb,EADAprI,EAAKlE,QAAU6pD,EAAM7pD,OACRO,KAAKkuF,UAAUvqF,EAAK0I,OAAOi9C,IAE3B3lD,EAAKlE,OAASkE,EAAO2lD,EAEtCylF,EAAa/uI,KAAKg+F,OAAO/8D,IAAM8tG,EACxBA,CACX,CACH,kBAAAsB,CAAmBnxI,GACZ,OAAQ,GAAYc,KAAKqyI,OAAQnzI,GAASc,KAAKsyI,SAAWtyI,KAAKuyI,WACnE,CACH,gBAAAlrC,CAAiBvpB,GACV,MAAMizD,EAAU/wI,KAAKuvI,SACfl0B,EAAUr7G,KAAKs7G,mBAAmBx9B,GAASizD,EAAQt/C,OAASs/C,EAAQhuF,IAC1E,OAAO,GAAY/iD,KAAKqyI,OAAQh3B,EAAUr7G,KAAKuyI,YAAcvyI,KAAKsyI,SAAS,EAC/E,KAaJ,MAAMI,GAAgB,CAClBzrF,GACA,GACAkyB,GACAG,ICx0WJisC,GAAM3+D,YAAY8rF,IAGlB,UCLA,SAASC,GAA4Bl6F,EAAUm6F,GAAc,IAAK3nI,OAAO1F,UAAU2F,eAAenG,KAAK0zC,EAAUm6F,GAAe,MAAM,IAAItoI,UAAU,kDAAqD,OAAOmuC,CAAU,CCE1Nz5C,SAASoC,iBAAiB,aAAc,KACtC,IAAKpC,SAASC,eAAe,iBAAkB,OAE/C,MAAM4zI,EAAWnmI,MAAM,GAAGizE,KAAK,CAC7B,0BACA,0BACA,0BACA,0BACA,2BACA,4BACCmzD,OACGC,EAAermI,MAAM,GAAGizE,KAAK,CACjC,wBACA,wBACA,wBACA,wBACA,yBACA,0BACCmzD,OAEH,CAAC,UAAW,cAAe,QAAS,SAAS1vG,QAASv9B,IACpD,MAAM4yE,EAAMz5E,SAASC,eAAe,SAAS4G,KAAQs4E,WAAW,MAC1Dx6E,EAAOE,KAAKiC,MAAM9G,SAASC,eAAe,QAAQ4G,KAAQ3G,OAEhE,IAAI8zI,EAASH,EACbG,EAAO/+H,OAAOtQ,EAAK,GAAGqzC,UAAUrtC,GAAWA,EAAQuR,WAAW,OAAQ,EAAG,4BACzE,IAAI+3H,EAASF,EACbE,EAAOh/H,OAAOtQ,EAAK,GAAGqzC,UAAUrtC,GAAWA,EAAQuR,WAAW,OAAQ,EAAG,0BACzE,IAAI,GAAMu9D,EAAK,CACb5yE,KAAM,MACNlC,KAAM,CACJk2F,OAAQl2F,EAAK,GACbq0E,SAAU,CAAC,CACTr0E,KAAMA,EAAK,GACXm0E,gBAAiBk7D,EACjBj7D,YAAak7D,EACbrzD,YAAa,KAGjBhwE,QAAS,CACPwpE,YAAY,EACZL,qBAAqB,EACrBI,QAAS,CACPknB,OAAQ,CACN12C,SAAS,GAEXqyB,MAAO,CACLryB,SAAS,EACTp2C,KAAM5P,EAAK,YDjDvB,IAAI2kB,GAAK,EACT,SAAS4qH,GAA2Bn0I,GAAQ,MAAO,aAAeupB,KAAO,IAAMvpB,CAAM,CAKrF,SAASo0I,GAAkB5+G,EAAQ6+G,EAAIC,GACrC,MAAMC,EAAW,GAoBjB,OAnBA/+G,EAAO6O,QAAQwkE,GAKQ,iBAAVA,EACF0rC,EAASpzI,KAAK0nG,GAEhBwrC,EAAGxlI,OAAOwE,OAAOw1F,GAAOxkE,QAAQ,CAACo4D,EAAKh8F,EAAGqtD,KAClC,KAAR2uC,GACF83C,EAASpzI,KAAKs7F,GAIZh8F,EAAIqtD,EAAKptD,OAAS,GACpB6zI,EAASpzI,KAAKmzI,MAIbC,CACT,CAYA,SAAS,GAAYC,EAAQ3jI,GAC3B,MAAM4jI,EAAc,MAEpB,IAAIpjB,EAAe,CAACmjB,GACpB,GAAe,MAAX3jI,EAAiB,OAAOwgH,EAC5B,IAAK,MAAM97G,KAAOrJ,OAAO+H,KAAKpD,GAC5B,GAAY,MAAR0E,EAAa,CAIf,IAAI++H,EAAczjI,EAAQ0E,GACC,iBAAhB++H,IACTA,EAAcG,EAAY5lI,OAAOvE,SAASgqI,EAVxB,SAepBjjB,EAAe+iB,GAAkB/iB,EAAc,IAAI1nF,OAAO,OAAOp0B,OAAU,KAAM++H,EACnF,CAEF,OAAOjjB,CACT,CACA,MAAMqjB,GAAsBxsI,IAC1B,MAAM,IAAIkgB,MAAM,mBAAmBlgB,MAcrC,IAAIysI,GAA6BR,GAA2B,gBACxDS,GAAsBT,GAA2B,SACtC,MAAMU,GACnB,WAAAlzI,CAAYmzI,EAASC,GACnB,IAAI,aACFC,EAAeN,SACE,IAAfK,EAAmB,CAAC,EAAIA,EAC5B7oI,OAAOoK,eAAerV,KAAM2zI,GAAQ,CAClCz0I,MAAO80I,KAET/oI,OAAOoK,eAAerV,KAAM0zI,GAAe,CACzC15D,UAAU,EACV96E,WAAY,IAEdc,KAAKi2E,OAAS,CACZ73D,QAAS,CAAC,EACV,SAAA61H,CAAU9wF,GACR,OAAU,IAANA,EACK,EAEF,CACT,GAEEz2C,MAAM+H,QAAQo/H,GAChBA,EAAQzwG,QAAQuvG,GAA4B3yI,KAAM2zI,IAAQA,IAAS3zI,MAEnE2yI,GAA4B3yI,KAAM2zI,IAAQA,IAAQE,GAEpDlB,GAA4B3yI,KAAM0zI,IAAeA,IAAiBK,CACpE,CAQA,SAAA90D,CAAUh4E,EAAK2I,GACb,OAAO5P,KAAKk0I,eAAejtI,EAAK2I,GAAS+O,KAAK,GAChD,CAOA,cAAAu1H,CAAejtI,EAAK2I,GAClB,IAAIzB,EAASnO,KAAKi2E,OAAO73D,QAAQnX,GAMjC,GALc,MAAVkH,IACFwkI,GAA4B3yI,KAAM0zI,IAAeA,IAAezsI,GAChEkH,EAASlH,GAE8B,iBAAXkH,EACV,CAClB,GAAIyB,QAA0C,IAAxBA,EAAQukI,YAE5B,OAAO,GAAYhmI,EADJnO,KAAKi2E,OAAOg+D,UAAUrkI,EAAQukI,cACVvkI,GAErC,MAAM,IAAIuX,MAAM,yFAClB,CACA,GAAsB,iBAAXhZ,EACT,MAAM,IAAIgZ,MAAM,2BAElB,OAAO,GAAYhZ,EAAQyB,EAC7B,EAEF,SAASokI,GAAQ/9D,GACf,GAAgB,MAAVA,IAAkBA,EAAO73D,QAC7B,OAEF,MAAMg2H,EAAap0I,KAAKi2E,OACxBhrE,OAAOuc,OAAOxnB,KAAKi2E,OAAQ,CACzB73D,QAAS,IACJg2H,EAAWh2H,WACX63D,EAAO73D,SAEZ61H,UAAWh+D,EAAOg+D,WAAaG,EAAWH,WAE9C,C,cE5JA,IAYWI,GAAS,CAACtyG,EAAO,MAC1B,IAAIzZ,EAAK,GACL9oB,EAAIuiC,EACR,KAAOviC,KACL8oB,GAfF,mEAeqC,GAAhBjmB,KAAKG,SAAiB,GAE3C,OAAO8lB,G,cClBT,SAAS,GAA4BmwB,EAAUm6F,GAAc,IAAK3nI,OAAO1F,UAAU2F,eAAenG,KAAK0zC,EAAUm6F,GAAe,MAAM,IAAItoI,UAAU,kDAAqD,OAAOmuC,CAAU,CAC1N,IAAI,GAAK,EACT,SAAS,GAA2B15C,GAAQ,MAAO,aAAe,KAAO,IAAMA,CAAM,CAMrF,IAAIu1I,GAA0B,GAA2B,aACrDC,GAAwB,GAA2B,WAIvD,MAAMC,GACJ,WAAA9zI,GACEuK,OAAOoK,eAAerV,KAAMu0I,GAAU,CACpCr1I,MAAOu1I,KAETz0I,KAAKiF,MAAQ,CAAC,EACdgG,OAAOoK,eAAerV,KAAMs0I,GAAY,CACtCt6D,UAAU,EACV96E,MAAO,IAAI8/B,KAEf,CACA,QAAAh7B,GACE,OAAOhE,KAAKiF,KACd,CACA,QAAAyvI,CAAStvH,GACP,MAAMuvH,EAAY,IACb30I,KAAKiF,OAEJ2vI,EAAY,IACb50I,KAAKiF,SACLmgB,GAELplB,KAAKiF,MAAQ2vI,EACb,GAA4B50I,KAAMu0I,IAAUA,IAAUI,EAAWC,EAAWxvH,EAC9E,CACA,SAAAjd,CAAUwD,GAER,OADA,GAA4B3L,KAAMs0I,IAAYA,IAAY7rI,IAAIkD,GACvD,KACL,GAA4B3L,KAAMs0I,IAAYA,IAAYjvH,OAAO1Z,GAErE,EAEF,SAAS8oI,KACP,IAAK,IAAII,EAAO1nI,UAAU1N,OAAQqJ,EAAO,IAAI4D,MAAMmoI,GAAOrgG,EAAO,EAAGA,EAAOqgG,EAAMrgG,IAC/E1rC,EAAK0rC,GAAQrnC,UAAUqnC,GAEzB,GAA4Bx0C,KAAMs0I,IAAYA,IAAYlxG,QAAQz3B,IAChEA,KAAY7C,IAEhB,CACA0rI,GAAaM,QA/CA,QAgDb,UCnDe,SAASC,GAAwBC,GAC9C,MAAMC,EAAUD,EAAa9C,YAAY,KAEzC,OAAiB,IAAb+C,GAAkBA,IAAYD,EAAav1I,OAAS,EAC/C,CACLV,KAAMi2I,EACNE,eAAWt1I,GAGR,CACLb,KAAMi2I,EAAa9xI,MAAM,EAAG+xI,GAC5BC,UAAWF,EAAa9xI,MAAM+xI,EAAU,GAE5C,CCXA,QACEhpI,UAAW,KACXkpI,GAAI,gBACJC,SAAU,gBACVC,IAAK,YACLC,IAAK,YACLvmF,IAAK,gBACLwmF,IAAK,aACLC,IAAK,YACLC,KAAM,aACNC,IAAK,YACLC,KAAM,aACNC,KAAM,aACNC,KAAM,YACNC,IAAK,YACLC,IAAK,WACLC,IAAK,4BACLvzF,IAAK,4BACLwzF,IAAK,kBACLC,IAAK,mBACLC,IAAK,mBACLC,IAAK,kBACLC,MAAO,oBACPC,IAAK,qBACLC,KAAM,mDACNC,KAAM,0EACNC,IAAK,qBACLC,KAAM,mDACNC,KAAM,0EACNC,IAAK,2BACLC,KAAM,iDACNC,IAAK,2BACLC,IAAK,0BACLC,IAAK,2BACLC,IAAK,2BACLC,KAAM,wDACNC,KAAM,iDACNC,KAAM,oEACNC,IAAK,2BACLC,KAAM,oDACNC,KAAM,uEACNC,IAAK,2BACLC,IAAK,aACLlkI,KAAM,aACNmkI,KAAM,aACN53I,IAAK,aACL63I,IAAK,kBACL5gG,IAAK,kBACL,KAAM,8BACN6gG,IAAK,+BACLC,IAAK,oBACLn5B,GAAI,mBACJo5B,IAAK,iCCvDQ,SAASC,GAAYC,GAClC,IAAIC,EACJ,GAAID,EAAKnyI,KAAM,OAAOmyI,EAAKnyI,KAC3B,MAAMqyI,EAAgBF,EAAKj5I,KAAiF,OAAzEk5I,EAAwBlD,GAAwBiD,EAAKj5I,MAAMm2I,gBAA0B,EAAI+C,EAAsB9yI,cAAgB,KAClK,OAAI+yI,GAAiBA,KAAiB,GAE7B,GAAUA,GAGZ,0BACT,CCRA,SAASC,GAAep5I,GACtB,IAAI6rF,EAAS,GACb,OAAO7rF,EAAKsK,QAAQ,cAAe+uI,IACjCxtD,GAAU,IANd,SAAyBwtD,GACvB,OAAOA,EAAUC,WAAW,GAAG7pI,SAAS,GAC1C,CAIkB8pI,CAAgBF,KACvB,MACJxtD,CACP,CAqCO,SAAS2tD,GAAcP,EAAMQ,GAClC,GAPF,SAAyBR,GACvB,SAAKA,EAAKS,WAAaT,EAAKU,SAEF,IAAI15G,IAAI,CAAC,MAAO,UAAW,QAAS,WAAY,aACjDh0B,IAAIgtI,EAAKU,OAAOC,SAC3C,CAEMC,CAAgBZ,GAAO,OAAOA,EAAK1vH,GACvC,MAAMuwH,EAAWd,GAAYC,GAC7B,OAlCa,SAAwBA,EAAMQ,GAI3C,IAAIlwH,EAAKkwH,GAAc,OAgBvB,MAfyB,iBAAdR,EAAKj5I,OACdupB,GAAM,IAAI6vH,GAAeH,EAAKj5I,KAAKoG,uBAEnBvF,IAAdo4I,EAAKnyI,OACPyiB,GAAM,IAAI0vH,EAAKnyI,QAEbmyI,EAAKp8G,MAA0C,iBAA3Bo8G,EAAKp8G,KAAKk9G,eAChCxwH,GAAM,IAAI6vH,GAAeH,EAAKp8G,KAAKk9G,aAAa3zI,uBAE3BvF,IAAnBo4I,EAAKr0I,KAAKo+B,OACZzZ,GAAM,IAAI0vH,EAAKr0I,KAAKo+B,aAESniC,IAA3Bo4I,EAAKr0I,KAAKo1I,eACZzwH,GAAM,IAAI0vH,EAAKr0I,KAAKo1I,gBAEfzwH,CACT,CAaS0wH,CAAe,IACjBhB,EACHnyI,KAAMgzI,GACLL,EACL,CCnDe,SAASS,GAAuBC,GAO7C,GALiB,MAAbA,GAA0C,oBAAdnhI,YAE9BmhI,EAAYnhI,UAAUmhI,YAGnBA,EAAW,OAAO,EACvB,MAAMrwG,EAAI,mBAAmBg/B,KAAKqxE,GAClC,IAAKrwG,EAAG,OAAO,EACf,MACMswG,EADctwG,EAAE,GACMz2B,MAAM,IAAK,GACjCsqE,EAAQ9qE,SAASunI,EAAQ,GAAI,IAC7B18D,EAAQ7qE,SAASunI,EAAQ,GAAI,IAKnC,OAAIz8D,EAAQ,IAAgB,KAAVA,GAAgBD,EAAQ,OAMtCC,EAAQ,IAAgB,KAAVA,GAAgBD,GAAS,KAM7C,CC9BA,SAAS28D,GAAI/zF,GACX,OAAOA,EAAS,GAAK,IAAIA,IAAWA,EAAO72C,UAC7C,CAKe,SAAS6qI,KACtB,MAAMhpD,EAAO,IAAIlwF,KAIjB,MAAO,GAHOi5I,GAAI/oD,EAAKipD,eACPF,GAAI/oD,EAAKkpD,iBACTH,GAAI/oD,EAAKmpD,eAE3B,CCXA,MAAMC,GAAmB,CACvB/yF,MAAO,OACPrrB,KAAM,OACN72B,MAAO,WACL,IAAK,IAAIqwI,EAAO1nI,UAAU1N,OAAQqJ,EAAO,IAAI4D,MAAMmoI,GAAOrgG,EAAO,EAAGA,EAAOqgG,EAAMrgG,IAC/E1rC,EAAK0rC,GAAQrnC,UAAUqnC,GAEzB,OAAO70C,QAAQ6E,MAAM,WAAW60I,WAAsBvwI,EACxD,GAKI4wI,GAAc,CAClBhzF,MAAO,WACL,IAAK,IAAIizF,EAAQxsI,UAAU1N,OAAQqJ,EAAO,IAAI4D,MAAMitI,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF9wI,EAAK8wI,GAASzsI,UAAUysI,GAE1B,OAAOj6I,QAAQ+mD,MAAM,WAAW2yF,WAAsBvwI,EACxD,EACAuyB,KAAM,WACJ,IAAK,IAAIw+G,EAAQ1sI,UAAU1N,OAAQqJ,EAAO,IAAI4D,MAAMmtI,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFhxI,EAAKgxI,GAAS3sI,UAAU2sI,GAE1B,OAAOn6I,QAAQ07B,KAAK,WAAWg+G,WAAsBvwI,EACvD,EACAtE,MAAO,WACL,IAAK,IAAIu1I,EAAQ5sI,UAAU1N,OAAQqJ,EAAO,IAAI4D,MAAMqtI,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpFlxI,EAAKkxI,GAAS7sI,UAAU6sI,GAE1B,OAAOr6I,QAAQ6E,MAAM,WAAW60I,WAAsBvwI,EACxD,G,uBC1BF,MAAM,GAAiB,CACrBmxI,YAAa,KACbC,YAAa,KACbC,iBAAkB,KAClBC,iBAAkB,KAClBC,iBAAkB,KAClBC,iBAAkB,KAClBC,mBAAoB,IAEtB,MAAMC,WAAyBrzH,MAC7B,WAAAzmB,CAAY8E,EAASq7E,GACnB,IAAI45D,EACJriI,MAAM5S,GACNxF,KAAK06I,eAAgB,EACrB16I,KAAK26I,aAAmF,OAAnEF,EAA6B,MAAR55D,OAAoB,EAAIA,EAAK85D,eAAwBF,EACnF,MAAR55D,GAAgBA,EAAKm3D,OACvBh4I,KAAKg4I,KAAOn3D,EAAKm3D,KAErB,EAEF,MAAM4C,GACJ,WAAAl6I,CAAYghH,EAASm5B,GACnB76I,KAAK66I,QAAUA,EACf76I,KAAK0hH,QAAU,KACb,IAAIo5B,EACJ,MAAMj6D,EAAO6gC,IACb,GAAyG,OAAxD,OAA3Co5B,EAAqBj6D,EAAKk6D,mBAA6B,EAAID,EAAmBR,oBAA8B5tI,MAAM+H,QAAQosE,EAAKk6D,aAAaT,kBAChJ,MAAM,IAAIhwI,UAAU,oDAEtB,OAAOu2E,EAEX,CAGA,6BAAAm6D,CAA8BC,EAAeC,GAC3C,MAAM,iBACJf,EAAgB,iBAChBC,GACEp6I,KAAK0hH,UAAUq5B,aACnB,GAAIX,EAAkB,CACpB,MAAMe,EAAgBF,EAAcpzI,OAAO8zD,IAAMA,EAAEy/E,SACnD,GAAID,EAAc17I,OAASy7I,EAAYz7I,OAAS26I,EAC9C,MAAM,IAAII,GAAiB,GAAGx6I,KAAK66I,SAAL76I,CAAe,oBAAqB,CAChEm0I,YAAaiG,MAGnB,CACA,GAAID,EAAkB,CACpB,MAAMkB,EAAiB,IAAIJ,KAAkBC,GAAa38H,OAAO,CAACykF,EAAOrnC,KACvE,IAAI2/E,EACJ,OAAOt4C,GAA+B,OAArBs4C,EAAU3/E,EAAE55B,MAAgBu5G,EAAU,IACtD,GACH,GAAID,EAAiBlB,EACnB,MAAM,IAAIK,GAAiBx6I,KAAK66I,SAAL76I,CAAe,uBAAwB,CAChEu7I,YAAaC,GAAcrB,GAC3Bp4G,KAAMy5G,GAAcH,KAG1B,CACF,CACA,kBAAAI,CAAmBzD,GACjB,MAAM,YACJiC,EAAW,YACXC,EAAW,iBACXI,GACEt6I,KAAK0hH,UAAUq5B,aACnB,GAAIT,IACwBA,EAAiB1yH,KAAK/hB,GAE1CA,EAAK6O,SAAS,OACXsjI,EAAKnyI,MACH,GAAMmyI,EAAKnyI,KAAKwD,QAAQ,QAAS,IAAKxD,KAI/B,MAAZA,EAAK,KAAcmyI,EAAK9C,YACnB8C,EAAK9C,UAAU/vI,gBAAkBU,EAAK3C,MAAM,GAAGiC,eAIlC,CACtB,MAAMu2I,EAAyBpB,EAAiB37H,KAAK,MACrD,MAAM,IAAI67H,GAAiBx6I,KAAK66I,SAAL76I,CAAe,4BAA6B,CACrE27I,MAAOD,IACL,CACF1D,QAEJ,CAIF,GAAIiC,GAA4B,MAAbjC,EAAKj2G,MAAgBi2G,EAAKj2G,KAAOk4G,EAClD,MAAM,IAAIO,GAAiBx6I,KAAK66I,SAAL76I,CAAe,cAAe,CACvD+hC,KAAMy5G,GAAcvB,GACpBjC,KAAMA,EAAKj5I,OACT,CACFi5I,SAKJ,GAAIkC,GAA4B,MAAblC,EAAKj2G,MAAgBi2G,EAAKj2G,KAAOm4G,EAClD,MAAM,IAAIM,GAAiBx6I,KAAK66I,SAAL76I,CAAe,eAAgB,CACxD+hC,KAAMy5G,GAActB,KAClB,CACFlC,QAGN,CACA,QAAA4D,CAASX,EAAeC,GACtBA,EAAY93G,QAAQy4G,IAClB77I,KAAKy7I,mBAAmBI,KAE1B77I,KAAKg7I,8BAA8BC,EAAeC,EACpD,CACA,wBAAAY,CAAyBh9I,GACvB,MAAM,iBACJu7I,GACEr6I,KAAK0hH,UAAUq5B,aACnB,GAAIV,GAAoBpvI,OAAO+H,KAAKlU,GAAOW,OAAS46I,EAClD,MAAM,IAAIG,GAAiBx6I,KAAK66I,SAAL76I,CAAe,0BAA2B,CACnEm0I,YAAakG,IAGnB,CACA,4BAAA0B,CAA6B/D,GAC3B,MAAMxzI,EAAQ,IAAIg2I,GAAiBx6I,KAAK66I,SAAL76I,CAAe,iCAAkC,CAClFg8I,SAAUhE,EAAKj5I,SAEX,mBACJw7I,GACEv6I,KAAK0hH,UAAUq5B,aACbkB,EAAgB,GACtB,IAAK,MAAMtsD,KAAS4qD,EACbtvI,OAAOkJ,OAAO6jI,EAAKp8G,KAAM+zD,IAA+B,KAArBqoD,EAAKp8G,KAAK+zD,IAChDssD,EAAc/7I,KAAKyvF,GAGvB,MAAO,CACLssD,gBACAz3I,QAEJ,ECxJF,QACE4Z,QAAS,CACP89H,mBAAoB,CAClB,EAAG,6DACH,EAAG,6DAELC,kBAAmB,CACjB,EAAG,0CACH,EAAG,4CAELC,wBAAyB,CACvB,EAAG,kDACH,EAAG,oDAELC,qBAAsB,4EACtBC,YAAa,kDACbC,yBAA0B,+BAC1BC,+BAAgC,8CAChCC,aAAc,wDACdC,0BAA2B,gCAC3BC,mBAAoB,wBACpBC,aAAc,iEACdC,eAAgB,mCAChBC,YAAa,yBACbC,yBAA0B,kEAC1BC,eAAgB,2BAChBC,qBAAsB,yBACtBC,oBAAqB,4BAErBC,aAAc,oCACdC,gBAAiB,sDACjBC,QAAS,CACP,EAAG,wBACH,EAAG,yBAELC,wBAAyB,gCACzBC,gBAAiB,sBACjBtsI,OAAQ,SACRusI,OAAQ,UACR31I,OAAQ,SACR41I,YAAa,eACbpkI,QAAS,aACTqkI,aAAc,2BACdC,sBAAuB,yDACvBC,iBAAkB,2BAClBC,iBAAkB,sBAClBC,aAAc,oBACdC,kBAAmB,kCACnBh5H,OAAQ,SACRi5H,YAAa,eACbC,iBAAkB,wCAClBC,cAAe,4BACfC,mBAAoB,2CACpBC,YAAa,CACX,EAAG,2CACH,EAAG,6CAELC,6BAA8B,sDAC9BC,QAAS,YC1Db,IAAIC,GAAaC,GACjB,SAAS,GAA4B/lG,EAAUm6F,GAAc,IAAK3nI,OAAO1F,UAAU2F,eAAenG,KAAK0zC,EAAUm6F,GAAe,MAAM,IAAItoI,UAAU,kDAAqD,OAAOmuC,CAAU,CAC1N,IAAI,GAAK,EACT,SAAS,GAA2B15C,GAAQ,MAAO,aAAe,KAAO,IAAMA,CAAM,CAsBrF,MAgCM0/I,GAAqB,CACzBC,cAAe,EACfC,gBAAgB,EAChBn6I,MAAO,KACPo6I,eAAgB,MAQlB,IAAIv4B,GAAwB,GAA2B,WACnDw4B,GAA2B,GAA2B,cACtDC,GAAiC,GAA2B,oBAC5DC,GAAwB,GAA2B,WACnDC,GAA8B,GAA2B,iBACzDC,GAA0B,GAA2B,aACrDC,GAA+B,GAA2B,kBAC1DC,GAA8B,GAA2B,iBACzDC,GAA8C,GAA2B,iCACzEC,GAAwC,GAA2B,2BACnEC,GAAuC,GAA2B,0BAClEC,GAA8B,GAA2B,iBACzDC,GAAmC,GAA2B,sBAC9DC,GAAwC,GAA2B,2BACnEC,GAA6B,GAA2B,gBACxDC,GAAmC,GAA2B,sBAC9DC,GAAkC,GAA2B,qBAC7DC,GAA6B,GAA2B,gBACxDC,GAA0B,GAA2B,aACrDC,GAA6B,GAA2B,gBACxDC,GAA0B,GAA2B,aACzDzB,GAAc3wI,OAAOqyI,IAAI,yBACzBzB,GAAe5wI,OAAOqyI,IAAI,2BACnB,MAAMC,GAIX,WAAAx/I,CAAYy/I,GAIVl1I,OAAOoK,eAAerV,KAAMggJ,GAAY,CACtC9gJ,MAAOkhJ,KAMTn1I,OAAOoK,eAAerV,KAAM+/I,GAAe,CACzC7gJ,MAAOmhJ,KAETp1I,OAAOoK,eAAerV,KAAM8/I,GAAY,CACtC5gJ,MAAOohJ,KAMTr1I,OAAOoK,eAAerV,KAAM6/I,GAAe,CACzC3gJ,MAAOqhJ,KAMTt1I,OAAOoK,eAAerV,KAAM0/I,GAAe,CACzCxgJ,MAAOshJ,KAETv1I,OAAOoK,eAAerV,KAAMy/I,GAA0B,CACpDvgJ,MAAOuhJ,KAGTx1I,OAAOoK,eAAerV,KAAMw/I,GAAqB,CAC/CtgJ,MAAOwhJ,KAKTz1I,OAAOoK,eAAerV,KAAMu/I,GAAgB,CAC1CrgJ,MAAOyhJ,KAET11I,OAAOoK,eAAerV,KAAMs/I,GAAyB,CACnDpgJ,MAAO0hJ,KAET31I,OAAOoK,eAAerV,KAAMq/I,GAA0B,CACpDngJ,MAAO2hJ,KAET51I,OAAOoK,eAAerV,KAAMo/I,GAAgC,CAC1DlgJ,MAAO4hJ,KAET71I,OAAOoK,eAAerV,KAAMm/I,GAAgB,CAC1CjgJ,MAAO6hJ,KAET91I,OAAOoK,eAAerV,KAAMqmH,GAAU,CACpCrsC,UAAU,EACV96E,MAAO+L,OAAO3C,OAAO,QAEvB2C,OAAOoK,eAAerV,KAAM6+I,GAAa,CACvC7kE,UAAU,EACV96E,WAAY,IAEd+L,OAAOoK,eAAerV,KAAM8+I,GAAmB,CAC7C9kE,UAAU,EACV96E,WAAY,IAEd+L,OAAOoK,eAAerV,KAAM++I,GAAU,CACpC/kE,UAAU,EACV96E,MAAO,OAET+L,OAAOoK,eAAerV,KAAMg/I,GAAgB,CAC1ChlE,UAAU,EACV96E,MAAO,IAAI8/B,MAEb/zB,OAAOoK,eAAerV,KAAMi/I,GAAY,CACtCjlE,UAAU,EACV96E,MAAO,IAAI8/B,MAEb/zB,OAAOoK,eAAerV,KAAMk/I,GAAiB,CAC3CllE,UAAU,EACV96E,MAAO,IAAI8/B,MAEbh/B,KAAKghJ,qBAAuB,KAC5BhhJ,KAAKihJ,YAAa,EAUlBjhJ,KAAKkhJ,kBAAoBC,GAAS,CAACnJ,EAAMr0I,KACvC,MAAMy9I,EAAcphJ,KAAKqhJ,QAAgB,MAARrJ,OAAoB,EAAIA,EAAK1vH,IAC9D,GAAY,MAAR0vH,IAAiBoJ,EAEnB,YADAphJ,KAAKF,IAAI,0DAAkE,MAARk4I,OAAoB,EAAIA,EAAK1vH,MAGlG,GAAwC,MAApC84H,EAAYjwD,SAASmwD,WAEvB,YADAthJ,KAAKF,IAAI,mEAAmEk4I,EAAK1vH,MAKnF,MAAMi5H,EAAoBn3I,OAAO0gE,SAASnnE,EAAK69I,aAAe79I,EAAK69I,WAAa,EAChFxhJ,KAAKyhJ,aAAazJ,EAAK1vH,GAAI,CACzB6oE,SAAU,IACLiwD,EAAYjwD,SACfuwD,cAAe/9I,EAAK+9I,cACpBF,WAAY79I,EAAK69I,WACjBF,WAAYC,EAAoBl/I,KAAKyI,MAAMnH,EAAK+9I,cAAgB/9I,EAAK69I,WAAa,KAAO,KAG7FxhJ,KAAK2hJ,0BACJ,IAAK,CACNxxI,SAAS,EACTE,UAAU,IAEZpF,OAAOoK,eAAerV,KAAM2/I,GAAqB,CAC/C3lE,UAAU,EACV96E,MAAOc,KAAK4hJ,mBAAmB/gJ,KAAKb,QAYtCiL,OAAOoK,eAAerV,KAAM4/I,GAAoB,CAC9C5lE,UAAU,EACV96E,MAAO,IAAIsuC,MAEbxtC,KAAK6hJ,cAAgB5rE,GACrB,MAAM/gD,EAAiB,CACrB5M,GAAI,OACJw5H,aAAa,EACbC,4BAA4B,EAC5Br7F,OAAO,EACPq0F,aAAc,GACdn/G,KAAM,CAAC,EACPomH,kBAAmB,CAAChK,EAAMl5I,KAAWmM,OAAOkJ,OAAOrV,EAAOk5I,EAAK1vH,IAC/D25H,eAAgBnjJ,GAASA,EACzB6sD,MAAO,IAAI,GACXjsD,OAAQ+5I,GACRyI,YAAa,KAETC,EAAS,IACVjtH,KACAirH,GAILngJ,KAAK6gF,KAAO,IACPshE,EACHpH,aAAc,IACT7lH,EAAe6lH,gBACdoF,GAASA,EAAMpF,eAMnBoF,GAASA,EAAMzgJ,QAAUygJ,EAAMz5F,MACjC1mD,KAAKF,IAAI,4KAA6K,WAC7KqgJ,GAASA,EAAMz5F,QACxB1mD,KAAK6gF,KAAKnhF,OAASg6I,IAErB15I,KAAKF,IAAI,eAAeogJ,GAAKpL,WAC7B90I,KAAKoiJ,WACLpiJ,KAAK2rD,MAAQ3rD,KAAK6gF,KAAKl1B,MACvB3rD,KAAK00I,SAAS,IACT+J,GACHtlE,QAAS,CAAC,EACVr6E,MAAO,CAAC,EACRujJ,eAAgB,CAAC,EACjBC,aAAc,CACZC,eAAgBtJ,KAChBuJ,wBAAwB,EACxBC,kBAAkB,GAEpB7mH,KAAM,IACD57B,KAAK6gF,KAAKjlD,MAEf26B,KAAM,KAER,GAA4Bv2D,KAAM6+I,IAAaA,IAAe,IAAIjE,GAAW,IAAM56I,KAAK6gF,KAAM,IAAM7gF,KAAK0iJ,MACzG,GAA4B1iJ,KAAM8+I,IAAmBA,IAAqB9+I,KAAK2rD,MAAMxjD,UAGrF,CAACwsI,EAAWC,EAAWxvH,KAGrBplB,KAAK4M,KAAK,eAAgB+nI,EAAWC,EAAWxvH,GAChDplB,KAAK2iJ,UAAU/N,KAIb50I,KAAK6gF,KAAKn6B,OAA2B,oBAAXhoD,SAG5BA,OAAOsB,KAAK6gF,KAAKv4D,IAAMtoB,MAEzB,GAA4BA,KAAM0/I,IAAeA,KACnD,CACA,IAAA9yI,CAAKnH,GACH,IAAK,IAAIovI,EAAO1nI,UAAU1N,OAAQqJ,EAAO,IAAI4D,MAAMmoI,EAAO,EAAIA,EAAO,EAAI,GAAIrgG,EAAO,EAAGA,EAAOqgG,EAAMrgG,IAClG1rC,EAAK0rC,EAAO,GAAKrnC,UAAUqnC,GAE7B,GAA4Bx0C,KAAM++I,IAAUA,IAAUnyI,KAAKnH,KAAUqD,EACvE,CACA,EAAAyE,CAAG9H,EAAOuoB,GAER,OADA,GAA4BhuB,KAAM++I,IAAUA,IAAUxxI,GAAG9H,EAAOuoB,GACzDhuB,IACT,CACA,IAAAwL,CAAK/F,EAAOuoB,GAEV,OADA,GAA4BhuB,KAAM++I,IAAUA,IAAUvzI,KAAK/F,EAAOuoB,GAC3DhuB,IACT,CACA,GAAAyN,CAAIhI,EAAOuoB,GAET,OADA,GAA4BhuB,KAAM++I,IAAUA,IAAUtxI,IAAIhI,EAAOuoB,GAC1DhuB,IACT,CAOA,SAAA2iJ,CAAU19I,GACRjF,KAAK4iJ,eAAevhC,IAClBA,EAAOjqF,OAAOnyB,IAElB,CAKA,QAAAyvI,CAAStvH,GAGPplB,KAAK2rD,MAAM+oF,SAAStvH,EACtB,CAKA,QAAAphB,GAGE,OAAOhE,KAAK2rD,MAAM3nD,UACpB,CACA,eAAA6+I,CAAgBC,GACd,MAAMC,EAAqB/iJ,KAAKgE,WAAWlF,MAC3CkB,KAAK00I,SAAS,CACZ51I,MAAO,IACFikJ,KACA93I,OAAO+3I,YAAY/3I,OAAO6V,QAAQgiI,GAAmB56I,IAAI+6I,IAC1D,IAAKC,EAAQC,GAAgBF,EAC7B,MAAO,CAACC,EAAQ,IACXH,EAAmBG,MACnBC,SAKb,CAKA,YAAA1B,CAAayB,EAAQj+I,GACnB,IAAKjF,KAAKgE,WAAWlF,MAAMokJ,GACzB,MAAM,IAAI/7H,MAAM,uBAAuB+7H,wCAEzCljJ,KAAK6iJ,gBAAgB,CACnB,CAACK,GAASj+I,GAEd,CACA,QAAAm9I,GACE,MACMgB,EAAa,IAAIxP,GAAW,CAAC5zI,KAAK6hJ,cAAe7hJ,KAAK6gF,KAAK5K,QAAS,CACxE89D,aAFmB9sI,GAAOjH,KAAKF,IAAI,wBAAwBmH,IAAO,WAIpEjH,KAAK0iJ,KAAOU,EAAWnkE,UAAUp+E,KAAKuiJ,GACtCpjJ,KAAKqjJ,UAAYD,EAAWlP,eAAerzI,KAAKuiJ,GAChDpjJ,KAAKi2E,OAASmtE,EAAWntE,MAC3B,CACA,UAAAqtE,CAAWC,GACTvjJ,KAAK6gF,KAAO,IACP7gF,KAAK6gF,QACL0iE,EACHxI,aAAc,IACT/6I,KAAK6gF,KAAKk6D,gBACE,MAAXwI,OAAuB,EAAIA,EAAQxI,eAGvCwI,EAAQ3nH,MACV57B,KAAKwjJ,QAAQD,EAAQ3nH,MAEvB57B,KAAKoiJ,WACDmB,EAAQttE,QACVj2E,KAAK4iJ,eAAevhC,IAClBA,EAAOiiC,WAAWC,KAKtBvjJ,KAAK00I,cAAS90I,EAChB,CAGA,aAAA6jJ,GACE,MAAMC,EAAkB,CACtBpC,WAAY,EACZI,cAAe,EACfiC,gBAAgB,EAChBC,cAAe,MAEX9kJ,EAAQ,IACTkB,KAAKgE,WAAWlF,OAEf+kJ,EAAe,CAAC,EACtB54I,OAAO+H,KAAKlU,GAAOskC,QAAQ8/G,IACzBW,EAAaX,GAAU,IAClBpkJ,EAAMokJ,GACT/xD,SAAU,IACLryF,EAAMokJ,GAAQ/xD,YACduyD,MAIT1jJ,KAAK00I,SAAS,CACZ51I,MAAO+kJ,KACJpF,KAELz+I,KAAK4M,KAAK,iBACZ,CAIA,kBAAAk3I,GACE,MAAM,aACJxB,EAAY,eACZD,GACEriJ,KAAKgE,WACT,GAAIiH,OAAO+H,KAAKqvI,GAAgB5iJ,OAAS,IAAM6iJ,EAAaE,uBAC1D,MAAM,IAAIr7H,MAAM,iFAElBnnB,KAAK00I,SAAS,IACT+J,GACH3/I,MAAO,CAAC,GAEZ,CACA,eAAAilJ,CAAgBz4I,GACd,GAA4BtL,KAAMg/I,IAAgBA,IAAgBv2I,IAAI6C,EACxE,CACA,kBAAA04I,CAAmB14I,GACjB,OAAO,GAA4BtL,KAAMg/I,IAAgBA,IAAgB35H,OAAO/Z,EAClF,CACA,gBAAA24I,CAAiB34I,GACf,GAA4BtL,KAAMk/I,IAAiBA,IAAiBz2I,IAAI6C,EAC1E,CACA,mBAAA44I,CAAoB54I,GAClB,OAAO,GAA4BtL,KAAMk/I,IAAiBA,IAAiB75H,OAAO/Z,EACpF,CACA,WAAA64I,CAAY74I,GACV,GAA4BtL,KAAMi/I,IAAYA,IAAYx2I,IAAI6C,EAChE,CACA,cAAA84I,CAAe94I,GACb,OAAO,GAA4BtL,KAAMi/I,IAAYA,IAAY55H,OAAO/Z,EAC1E,CACA,OAAAk4I,CAAQ7/I,GACN,MAAM0gJ,EAAc,IACfrkJ,KAAKgE,WAAW43B,QAChBj4B,GAECkgJ,EAAe,IAChB7jJ,KAAKgE,WAAWlF,OAErBmM,OAAO+H,KAAK6wI,GAAczgH,QAAQ8/G,IAChCW,EAAaX,GAAU,IAClBW,EAAaX,GAChBtnH,KAAM,IACDioH,EAAaX,GAAQtnH,QACrBj4B,MAIT3D,KAAKF,IAAI,oBACTE,KAAKF,IAAI6D,GACT3D,KAAK00I,SAAS,CACZ94G,KAAMyoH,EACNvlJ,MAAO+kJ,GAEX,CACA,WAAAS,CAAYpB,EAAQv/I,GAClB,MAAMkgJ,EAAe,IAChB7jJ,KAAKgE,WAAWlF,OAErB,IAAK+kJ,EAAaX,GAEhB,YADAljJ,KAAKF,IAAI,gEAAiEojJ,GAG5E,MAAMqB,EAAU,IACXV,EAAaX,GAAQtnH,QACrBj4B,GAELkgJ,EAAaX,GAAU,IAClBW,EAAaX,GAChBtnH,KAAM2oH,GAERvkJ,KAAK00I,SAAS,CACZ51I,MAAO+kJ,GAEX,CAKA,OAAAxC,CAAQ6B,GACN,OAAOljJ,KAAKgE,WAAWlF,MAAMokJ,EAC/B,CAKA,QAAAsB,GACE,MAAM,MACJ1lJ,GACEkB,KAAKgE,WACT,OAAOiH,OAAOoT,OAAOvf,EACvB,CACA,aAAA2lJ,CAAcC,GACZ,OAAOA,EAAIx8I,IAAIogB,GAAMtoB,KAAKqhJ,QAAQ/4H,GACpC,CACA,wBAAAq8H,GACE,MACE7lJ,MAAO8lJ,EAAW,cAClBlG,EAAa,MACbl6I,GACExE,KAAKgE,WACHlF,EAAQmM,OAAOoT,OAAOumI,GACtBC,EAAkB,GAClBC,EAAW,GACXC,EAAe,GACfC,EAAqB,GACrBC,EAAc,GACdC,EAAgB,GAChBC,EAAe,GACfC,EAA2B,GAC3BC,EAAkB,GACxB,IAAK,MAAMrN,KAAQl5I,EAAO,CACxB,MAAM,SACJqyF,GACE6mD,GACC7mD,EAASwyD,gBAAkBxyD,EAASyyD,gBACvCiB,EAAgB3kJ,KAAK83I,GAChBA,EAAKsN,UACRF,EAAyBllJ,KAAK83I,IAG7B7mD,EAASyyD,eACZkB,EAAS5kJ,KAAK83I,IAEZ7mD,EAASyyD,eAAiBzyD,EAASo0D,YAAcp0D,EAASq0D,cAC5DT,EAAa7kJ,KAAK83I,GAEhB7mD,EAASyyD,eACXoB,EAAmB9kJ,KAAK83I,GAEtBA,EAAKsN,UACPL,EAAY/kJ,KAAK83I,GAEf7mD,EAASwyD,gBACXuB,EAAchlJ,KAAK83I,GAEjBA,EAAKxzI,OACP2gJ,EAAajlJ,KAAK83I,IAEhB7mD,EAASo0D,YAAcp0D,EAASq0D,cAClCH,EAAgBnlJ,KAAK83I,EAEzB,CACA,MAAO,CACL8M,WACAC,eACAC,qBACAC,cACAC,gBACAC,eACAN,kBACAO,2BACAC,kBACAI,gBAAiBT,EAAmBvlJ,OAAS,EAC7CimJ,cAAiC,MAAlBhH,GAAyBwG,EAAczlJ,SAAWX,EAAMW,QAAqC,IAA3B4lJ,EAAgB5lJ,OACjGkmJ,eAAgBnhJ,GAAS2gJ,EAAa1lJ,SAAWX,EAAMW,OACvDmmJ,YAAwC,IAA3Bf,EAAgBplJ,QAAgBwlJ,EAAYxlJ,SAAWolJ,EAAgBplJ,OACpFomJ,mBAAoBhB,EAAgBplJ,OAAS,EAC7CqmJ,YAAahnJ,EAAM8oB,KAAKowH,GAAQA,EAAKoD,SAEzC,CACA,oBAAA2K,CAAqB/N,EAAMl5I,QACN,IAAfA,IACFA,EAAQkB,KAAKwkJ,YAEf,IACE,GAA4BxkJ,KAAM6+I,IAAaA,IAAajD,SAAS98I,EAAO,CAACk5I,GAC/E,CAAE,MAAOlgF,GACP,OAAOA,CACT,CACA,OAAO,IACT,CACA,wBAAAkuF,CAAyB9C,GACvB,MAAM,MACJpkJ,GACEkB,KAAKgE,WACT,SAAIlF,EAAMokJ,IAAYpkJ,EAAMokJ,GAAQ9H,QAItC,CAMA,OAAA6K,CAAQjO,GACN,GAA4Bh4I,KAAMs/I,IAAyBA,IAAyBtH,GACpF,MAAM,eACJkO,EAAc,gBACdC,EAAe,OACfC,GACE,GAA4BpmJ,KAAMy/I,IAA0BA,IAA0B,CAACzH,IACrFqO,EAAoBD,EAAOv+I,OAAOrD,GAASA,EAAMk2I,eAEvD,GADA,GAA4B16I,KAAMm/I,IAAgBA,IAAgBkH,GAC9DD,EAAO3mJ,OAAS,EAAG,MAAM2mJ,EAAO,GACpCpmJ,KAAK00I,SAAS,CACZ51I,MAAOonJ,IAET,MAAOI,GAAuBH,EAK9B,OAJAnmJ,KAAK4M,KAAK,aAAc05I,GACxBtmJ,KAAK4M,KAAK,cAAeu5I,GACzBnmJ,KAAKF,IAAI,eAAewmJ,EAAoBvnJ,SAASunJ,EAAoBh+H,kBAAkBg+H,EAAoBzgJ,QAC/G,GAA4B7F,KAAMw/I,IAAqBA,MAChD8G,EAAoBh+H,EAC7B,CASA,QAAAi+H,CAASC,GACP,GAA4BxmJ,KAAMs/I,IAAyBA,MAC3D,MAAM,eACJ4G,EAAc,gBACdC,EAAe,OACfC,GACE,GAA4BpmJ,KAAMy/I,IAA0BA,IAA0B+G,GACpFH,EAAoBD,EAAOv+I,OAAOrD,GAASA,EAAMk2I,eACvD,GAA4B16I,KAAMm/I,IAAgBA,IAAgBkH,GAClE,MAAMI,EAAuBL,EAAOv+I,OAAOrD,IAAUA,EAAMk2I,eAC3D,GAAI+L,EAAqBhnJ,OAAS,EAAG,CACnC,IAAI+F,EAAU,iDAUd,GATAihJ,EAAqBrjH,QAAQsjH,IAC3BlhJ,GAAW,QAAQkhJ,EAASlhJ,YAE9BxF,KAAKu2D,KAAK,CACR/wD,QAASxF,KAAK0iJ,KAAK,qBAAsB,CACvCvO,YAAasS,EAAqBhnJ,SAEpCszB,QAASvtB,GACR,QAASxF,KAAK6gF,KAAKqhE,aACQ,mBAAnByE,eACT,MAAM,IAAIA,eAAeF,EAAsBjhJ,GAC1C,CACL,MAAMsyD,EAAM,IAAI3wC,MAAM3hB,GAGtB,MADAsyD,EAAIsuF,OAASK,EACP3uF,CACR,CACF,CAIA93D,KAAK00I,SAAS,CACZ51I,MAAOonJ,IAETC,EAAgB/iH,QAAQ40G,IACtBh4I,KAAK4M,KAAK,aAAcorI,KAE1Bh4I,KAAK4M,KAAK,cAAeu5I,GACrBA,EAAgB1mJ,OAAS,EAC3BO,KAAKF,IAAI,kBAAkBqmJ,EAAgB1mJ,gBAE3CwL,OAAOoT,OAAO8nI,GAAiB/iH,QAAQ40G,IACrCh4I,KAAKF,IAAI,eAAek4I,EAAKj5I,cAAci5I,EAAK1vH,cAAc0vH,EAAKnyI,UAGnEsgJ,EAAgB1mJ,OAAS,GAC3B,GAA4BO,KAAMw/I,IAAqBA,KAE3D,CACA,WAAAoH,CAAYC,EAASlhJ,GACnB,MAAM,MACJ7G,EAAK,eACLujJ,GACEriJ,KAAKgE,WACH6/I,EAAe,IAChB/kJ,GAECgoJ,EAAiB,IAClBzE,GAEC0E,EAAe97I,OAAO3C,OAAO,MASnC,SAAS0+I,EAAiBC,GACxB,YAAsCrnJ,IAA/BmnJ,EAAaE,EACtB,CAVAJ,EAAQzjH,QAAQ8/G,IACVpkJ,EAAMokJ,KACR6D,EAAa7D,GAAUpkJ,EAAMokJ,UACtBW,EAAaX,MAQxBj4I,OAAO+H,KAAK8zI,GAAgB1jH,QAAQ8jH,IAClC,MAAMC,EAAa9E,EAAe6E,GAAUL,QAAQh/I,OAAOm/I,GAG3D,GAA0B,IAAtBG,EAAW1nJ,OAEb,mBADOqnJ,EAAeI,GAGxB,MAAM,aACJ5E,GACEtiJ,KAAKgE,WACT,GAAImjJ,EAAW1nJ,SAAW4iJ,EAAe6E,GAAUL,QAAQpnJ,SAAW6iJ,EAAaE,uBACjF,MAAM,IAAIr7H,MAAM,iFAElB2/H,EAAeI,GAAY,IACtB7E,EAAe6E,GAClBL,QAASM,KAGb,MAAMC,EAAc,CAClB/E,eAAgByE,EAChBhoJ,MAAO+kJ,GAKgC,IAArC54I,OAAO+H,KAAK6wI,GAAcpkJ,SAC5B2nJ,EAAYzI,gBAAiB,EAC7ByI,EAAY5iJ,MAAQ,KACpB4iJ,EAAYxI,eAAiB,MAE/B5+I,KAAK00I,SAAS0S,GACdpnJ,KAAK2hJ,yBACL,MAAM0F,EAAiBp8I,OAAO+H,KAAK+zI,GACnCM,EAAejkH,QAAQ8/G,IACrBljJ,KAAK4M,KAAK,eAAgBm6I,EAAa7D,GAASv9I,KAE9C0hJ,EAAe5nJ,OAAS,EAC1BO,KAAKF,IAAI,WAAWunJ,EAAe5nJ,gBAEnCO,KAAKF,IAAI,kBAAkBunJ,EAAe1oI,KAAK,QAEnD,CACA,UAAA2oI,CAAWpE,EAAQv9I,GACjB3F,KAAK4mJ,YAAY,CAAC1D,GAASv9I,EAC7B,CACA,WAAA4hJ,CAAYrE,GACV,IAAKljJ,KAAKgE,WAAWs+I,aAAaG,kBAAoBziJ,KAAKqhJ,QAAQ6B,GAAQ/xD,SAASwyD,eAClF,OAEF,MACM2B,GADYtlJ,KAAKqhJ,QAAQ6B,GAAQoC,SAMvC,OAJAtlJ,KAAKyhJ,aAAayB,EAAQ,CACxBoC,aAEFtlJ,KAAK4M,KAAK,eAAgBs2I,EAAQoC,GAC3BA,CACT,CACA,QAAAkC,GACE,MAAM3D,EAAe,IAChB7jJ,KAAKgE,WAAWlF,OAEUmM,OAAO+H,KAAK6wI,GAAch8I,OAAOmwI,IACtD6L,EAAa7L,GAAM7mD,SAASwyD,gBAAkBE,EAAa7L,GAAM7mD,SAASyyD,eAE7DxgH,QAAQ40G,IAC7B,MAAMyP,EAAc,IACf5D,EAAa7L,GAChBsN,UAAU,GAEZzB,EAAa7L,GAAQyP,IAEvBznJ,KAAK00I,SAAS,CACZ51I,MAAO+kJ,IAET7jJ,KAAK4M,KAAK,YACZ,CACA,SAAA86I,GACE,MAAM7D,EAAe,IAChB7jJ,KAAKgE,WAAWlF,OAEUmM,OAAO+H,KAAK6wI,GAAch8I,OAAOmwI,IACtD6L,EAAa7L,GAAM7mD,SAASwyD,gBAAkBE,EAAa7L,GAAM7mD,SAASyyD,eAE7DxgH,QAAQ40G,IAC7B,MAAMyP,EAAc,IACf5D,EAAa7L,GAChBsN,UAAU,EACV9gJ,MAAO,MAETq/I,EAAa7L,GAAQyP,IAEvBznJ,KAAK00I,SAAS,CACZ51I,MAAO+kJ,IAET7jJ,KAAK4M,KAAK,aACZ,CACA,QAAA+6I,GACE,MAAM9D,EAAe,IAChB7jJ,KAAKgE,WAAWlF,OAEf8oJ,EAAe38I,OAAO+H,KAAK6wI,GAAch8I,OAAOmwI,GAC7C6L,EAAa7L,GAAMxzI,OAe5B,GAbAojJ,EAAaxkH,QAAQ40G,IACnB,MAAMyP,EAAc,IACf5D,EAAa7L,GAChBsN,UAAU,EACV9gJ,MAAO,MAETq/I,EAAa7L,GAAQyP,IAEvBznJ,KAAK00I,SAAS,CACZ51I,MAAO+kJ,EACPr/I,MAAO,OAETxE,KAAK4M,KAAK,YAAag7I,GACK,IAAxBA,EAAanoJ,OACf,OAAO6Y,QAAQC,QAAQ,CACrBsvI,WAAY,GACZhsI,OAAQ,KAGZ,MAAMqrI,EAAW,GAA4BlnJ,KAAM6/I,IAAeA,IAAe+H,EAAc,CAC7FE,qBAAqB,IAEvB,OAAO,GAA4B9nJ,KAAMggJ,IAAYA,IAAYkH,EACnE,CACA,SAAAa,CAAUjU,GACR,IAAI,OACFnuI,EAAS,aACQ,IAAfmuI,EAAmB,CAAC,EAAIA,EAM5B,GALA9zI,KAAK4M,KAAK,aAAc,CACtBjH,WAIa,SAAXA,EAAmB,CACrB,MAAM,MACJ7G,GACEkB,KAAKgE,WACH6iJ,EAAU57I,OAAO+H,KAAKlU,GACxB+nJ,EAAQpnJ,QACVO,KAAK4mJ,YAAYC,EAAS,cAE5B7mJ,KAAK00I,SAAS+J,GAEhB,CACF,CACA,WAAAuJ,CAAY9E,GACVljJ,KAAKyhJ,aAAayB,EAAQ,CACxB1+I,MAAO,KACP8gJ,UAAU,IAEZtlJ,KAAK4M,KAAK,eAAgBs2I,GAC1B,MAAMgE,EAAW,GAA4BlnJ,KAAM6/I,IAAeA,IAAe,CAACqD,GAAS,CACzF4E,qBAAqB,IAEvB,OAAO,GAA4B9nJ,KAAMggJ,IAAYA,IAAYkH,EACnE,CACA,MAAAe,GACEjoJ,KAAK4iJ,eAAevhC,IAClB,IAAI6mC,EAE6B,OAAhCA,EAAY7mC,EAAOs3B,WAAyC,MAApBuP,EAAUD,QAAkBC,EAAUD,UAEnF,CACA,sBAAAtG,GAGE,MACMwG,EADQnoJ,KAAKwkJ,WACM38I,OAAOmwI,GACvBA,EAAK7mD,SAASyyD,eAAiB5L,EAAK7mD,SAASo0D,YAAcvN,EAAK7mD,SAASq0D,aAElF,GAA0B,IAAtB2C,EAAW1oJ,OAKb,OAJAO,KAAK4M,KAAK,WAAY,QACtB5M,KAAK00I,SAAS,CACZgK,cAAe,IAInB,MAAM0J,EAAaD,EAAWtgJ,OAAOmwI,GAAoC,MAA5BA,EAAK7mD,SAASqwD,YACrD6G,EAAeF,EAAWtgJ,OAAOmwI,GAAoC,MAA5BA,EAAK7mD,SAASqwD,YAC7D,GAA0B,IAAtB4G,EAAW3oJ,OAAc,CAC3B,MAAM6oJ,EAAkC,IAApBH,EAAW1oJ,OACzB8oJ,EAAkBF,EAAa9pI,OAAO,CAACoqB,EAAKqvG,IACzCrvG,EAAMqvG,EAAK7mD,SAASmwD,WAC1B,GACG5C,EAAgBr8I,KAAKyI,MAAMy9I,EAAkBD,EAAc,KAIjE,YAHAtoJ,KAAK00I,SAAS,CACZgK,iBAGJ,CACA,IAAI8J,EAAYJ,EAAW7pI,OAAO,CAACoqB,EAAKqvG,KACtC,IAAIyQ,EACJ,OAAO9/G,GAA6D,OAArD8/G,EAAwBzQ,EAAK7mD,SAASqwD,YAAsBiH,EAAwB,IAClG,GACH,MAAMC,EAAcF,EAAYJ,EAAW3oJ,OAC3C+oJ,GAAaE,EAAcL,EAAa5oJ,OACxC,IAAIkpJ,EAAe,EACnBP,EAAWhlH,QAAQ40G,IACjB2Q,GAAgB3Q,EAAK7mD,SAASuwD,gBAEhC2G,EAAajlH,QAAQ40G,IACnB2Q,GAAgBD,GAAe1Q,EAAK7mD,SAASmwD,YAAc,GAAK,MAElE,IAAI5C,EAA8B,IAAd8J,EAAkB,EAAInmJ,KAAKyI,MAAM69I,EAAeH,EAAY,KAI5E9J,EAAgB,MAClBA,EAAgB,KAElB1+I,KAAK00I,SAAS,CACZgK,kBAEF1+I,KAAK4M,KAAK,WAAY8xI,EACxB,CACA,kBAAAkD,GACE,IAAIgH,EACgE,OAApDA,EAAwBlqJ,OAAOqZ,UAAU8wI,SAAkBD,GAMzE5oJ,KAAK4M,KAAK,aACN5M,KAAKihJ,aACPjhJ,KAAK4M,KAAK,eACV5M,KAAKu2D,KAAKv2D,KAAK0iJ,KAAK,uBAAwB,UAAW,KACvD1iJ,KAAKihJ,YAAa,KARpBjhJ,KAAK4M,KAAK,cACV5M,KAAKu2D,KAAKv2D,KAAK0iJ,KAAK,wBAAyB,QAAS,GACtD1iJ,KAAKihJ,YAAa,EAStB,CACA,KAAA6H,GACE,OAAO9oJ,KAAK6gF,KAAKv4D,EACnB,CAKA,GAAAygI,CAAIC,EAAQnoE,GACV,GAAsB,mBAAXmoE,EAET,MAAM,IAAI1+I,UADE,oCAA+C,OAAX0+I,EAAkB,cAAgBA,wEAKpF,MAAM3nC,EAAS,IAAI2nC,EAAOhpJ,KAAM6gF,GAC1B6pC,EAAWrJ,EAAO/4F,GACxB,IAAKoiG,EACH,MAAM,IAAIvjG,MAAM,+BAElB,IAAKk6F,EAAOx7G,KACV,MAAM,IAAIshB,MAAM,gCAElB,MAAM8hI,EAAsBjpJ,KAAKogH,UAAUsK,GAC3C,GAAIu+B,EAAqB,CACvB,MAAMC,EAAM,iCAAiCD,EAAoB3gI,uBAA4BoiG,2FAC7F,MAAM,IAAIvjG,MAAM+hI,EAClB,CAcA,OAXIF,EAAOlU,SAET90I,KAAKF,IAAI,SAAS4qH,MAAas+B,EAAOlU,WAEpCzzB,EAAOx7G,QAAQ,GAA4B7F,KAAMqmH,IAAUA,IAC7D,GAA4BrmH,KAAMqmH,IAAUA,IAAUhF,EAAOx7G,MAAM3F,KAAKmhH,GAExE,GAA4BrhH,KAAMqmH,IAAUA,IAAUhF,EAAOx7G,MAAQ,CAACw7G,GAExEA,EAAO8nC,UACPnpJ,KAAK4M,KAAK,eAAgBy0G,GACnBrhH,IACT,CAKA,SAAAogH,CAAU93F,GACR,IAAK,MAAM6wD,KAAWluE,OAAOoT,OAAO,GAA4Bre,KAAMqmH,IAAUA,KAAY,CAC1F,MAAM+iC,EAAcjwE,EAAQ7yD,KAAK+6F,GAAUA,EAAO/4F,KAAOA,GACzD,GAAmB,MAAf8gI,EAAqB,OAAOA,CAClC,CAEF,CACA,CAAC7K,IAAa14I,GACZ,OAAO,GAA4B7F,KAAMqmH,IAAUA,IAAUxgH,EAC/D,CAMA,cAAA+8I,CAAeviI,GACbpV,OAAOoT,OAAO,GAA4Bre,KAAMqmH,IAAUA,KAAWysB,KAAK,GAAG1vG,QAAQ/iB,EACvF,CAOA,YAAAgpI,CAAaC,GACXtpJ,KAAKF,IAAI,mBAAmBwpJ,EAAShhI,MACrCtoB,KAAK4M,KAAK,gBAAiB08I,GACvBA,EAASC,WACXD,EAASC,YAEX,MAAM18F,EAAO,GAA4B7sD,KAAMqmH,IAAUA,IAAUijC,EAASzjJ,MAItEsJ,EAAQ09C,EAAK7V,UAAUg2B,GAAQA,EAAK1kD,KAAOghI,EAAShhI,KAC3C,IAAXnZ,GACF09C,EAAK54C,OAAO9E,EAAO,GAErB,MACMq6I,EAAe,CACnBrwE,QAAS,IAFGn5E,KAAKgE,WAGNm1E,QACT,CAACmwE,EAAShhI,SAAK1oB,IAGnBI,KAAK00I,SAAS8U,EAChB,CASA,KAAAllJ,CAAMmlJ,GACJ,IAAI,OACF9jJ,QACkB,IAAhB8jJ,EAAoB,CAAC,EAAIA,EAC7BzpJ,KAAKF,IAAI,yBAAyBE,KAAK6gF,KAAKv4D,mDAC5CtoB,KAAK+nJ,UAAU,CACbpiJ,WAEF,GAA4B3F,KAAM8+I,IAAmBA,MACrD9+I,KAAK4iJ,eAAevhC,IAClBrhH,KAAKqpJ,aAAahoC,KAEE,oBAAX3iH,QAA0BA,OAAO8C,sBAC1C9C,OAAO8C,oBAAoB,SAAU,GAA4BxB,KAAM2/I,IAAqBA,KAC5FjhJ,OAAO8C,oBAAoB,UAAW,GAA4BxB,KAAM2/I,IAAqBA,KAEjG,CACA,QAAA+J,GACE,MAAM,KACJnzF,GACEv2D,KAAKgE,WACThE,KAAK00I,SAAS,CACZn+E,KAAMA,EAAKrzD,MAAM,KAEnBlD,KAAK4M,KAAK,cACZ,CAMA,IAAA2pD,CAAK/wD,EAASK,EAAM00E,QACA,IAAd10E,IACFA,EAAO,aAEa,IAAlB00E,IACFA,EAAW,KAEb,MAAMovE,EAAsC,iBAAZnkJ,EAChCxF,KAAK00I,SAAS,CACZn+E,KAAM,IAAIv2D,KAAKgE,WAAWuyD,KAAM,CAC9B1wD,OACAL,QAASmkJ,EAAmBnkJ,EAAQA,QAAUA,EAC9CutB,QAAS42H,EAAmBnkJ,EAAQutB,QAAU,SAGlD9wB,WAAW,IAAMjC,KAAK0pJ,WAAYnvE,GAClCv6E,KAAK4M,KAAK,eACZ,CAMA,GAAA9M,CAAI0F,EAASK,GACX,MAAM,OACJnG,GACEM,KAAK6gF,KACT,OAAQh7E,GACN,IAAK,QACHnG,EAAO8E,MAAMgB,GACb,MACF,IAAK,UACH9F,EAAO27B,KAAK71B,GACZ,MACF,QACE9F,EAAOgnD,MAAMlhD,GAGnB,CACA,qBAAAokJ,CAAsBthI,EAAIuhI,GACxB,GAA4B7pJ,KAAM4/I,IAAoBA,IAAoBroI,IAAI+Q,EAAIuhI,EACpF,CAGA,uBAAAC,CAAwB9R,GACtB,IAAKA,EAAKU,OAAQ,MAAM,IAAIvxH,MAAM,oDAAoD6wH,EAAK1vH,MAC3F,MAAMyhI,EAAgB,GAA4B/pJ,KAAM4/I,IAAoBA,IAAoBrqI,IAAIyiI,EAAKU,OAAOsR,iBAChH,GAAqB,MAAjBD,EAAuB,MAAM,IAAI5iI,MAAM,oBAAoB6wH,EAAKU,OAAOsR,6CAA6ChS,EAAK1vH,OAC7H,OAAOyhI,CACT,CAKA,OAAApsE,CAAQupE,GAEN,OADAlnJ,KAAKF,IAAI,uCAAuConJ,MAC3ClnJ,KAAKgE,WAAWq+I,eAAe6E,GAI7B,GAA4BlnJ,KAAMggJ,IAAYA,IAAYkH,IAH/D,GAA4BlnJ,KAAM+/I,IAAeA,IAAemH,GACzD5uI,QAAQ7R,OAAO,IAAI0gB,MAAM,uBAGpC,CACA,CAACq3H,MAEC,OAAO,GAA4Bx+I,KAAM6/I,IAAeA,OAAkB1yI,UAC5E,CAIA,aAAA88I,CAAc/C,EAAUvjJ,GACtB,IAAK,GAA4B3D,KAAM8/I,IAAYA,IAAYoH,GAE7D,YADAlnJ,KAAKF,IAAI,2DAA2DonJ,KAGtE,MAAM,eACJ7E,GACEriJ,KAAKgE,WACHkmJ,EAAgB,IACjB7H,EAAe6E,GAClBr4I,OAAQ,IACHwzI,EAAe6E,GAAUr4I,UACzBlL,IAGP3D,KAAK00I,SAAS,CACZ2N,eAAgB,IACXA,EACH,CAAC6E,GAAWgD,IAGlB,CAIA,MAAAC,GACE,IAAIC,EACiG,OAA9FA,EAAwB,GAA4BpqJ,KAAMqmH,IAAUA,IAAoB,WAAc+jC,EAAsB3qJ,QACjIO,KAAKF,IAAI,oCAAqC,WAEhD,IAAI,MACFhB,GACEkB,KAAKgE,WACT,MAAMqmJ,EAAuBrqJ,KAAK6gF,KAAKohE,eAAenjJ,GACtD,OAA6B,IAAzBurJ,EACK/xI,QAAQ7R,OAAO,IAAI0gB,MAAM,mEAE9BkjI,GAAwD,iBAAzBA,IACjCvrJ,EAAQurJ,EAGRrqJ,KAAK00I,SAAS,CACZ51I,WAGGwZ,QAAQC,UAAUqhB,KAAK,IAAM,GAA4B55B,KAAM6+I,IAAaA,IAAa/C,yBAAyBh9I,IAAQo5D,MAAMJ,IAErI,MADA,GAA4B93D,KAAMm/I,IAAgBA,IAAgB,CAACrnF,IAC7DA,IACLl+B,KAAK,KACN,IAAK,GAA4B55B,KAAMq/I,IAA0BA,IAA0BvgJ,GACzF,MAAM,IAAI07I,GAAiBx6I,KAAK0iJ,KAAK,+BAEtCxqF,MAAMJ,IAIP,MAAMA,IACLl+B,KAAK,KACN,MAAM,eACJyoH,GACEriJ,KAAKgE,WAEHsmJ,EAA0Br/I,OAAOoT,OAAOgkI,GAAgB16G,QAAQy2D,GAAQA,EAAKyoD,SAC7E0D,EAAiB,GACvBt/I,OAAO+H,KAAKlU,GAAOskC,QAAQ8/G,IACzB,MAAMlL,EAAOh4I,KAAKqhJ,QAAQ6B,GAErBlL,EAAK7mD,SAASyyD,gBAA8D,IAA7C0G,EAAwBnnJ,QAAQ+/I,IAClEqH,EAAerqJ,KAAK83I,EAAK1vH,MAG7B,MAAM4+H,EAAW,GAA4BlnJ,KAAM6/I,IAAeA,IAAe0K,GACjF,OAAO,GAA4BvqJ,KAAMggJ,IAAYA,IAAYkH,KAChEhvF,MAAMJ,IAGP,MAFA93D,KAAK4M,KAAK,QAASkrD,GACnB93D,KAAKF,IAAIg4D,EAAK,SACRA,IAEV,EAEF,SAASipF,GAAgBqF,GACvB,IAAK,MAAM5hJ,KAAS4hJ,EACd5hJ,EAAMk2I,cACR16I,KAAK4M,KAAK,qBAAsBpI,EAAMwzI,KAAMxzI,GAE5CxE,KAAK4M,KAAK,QAASpI,EAAOA,EAAMwzI,MAElCh4I,KAAKF,IAAI0E,EAAO,WAElB,MAAMgmJ,EAAmBpE,EAAOv+I,OAAOrD,GAASA,EAAMm2I,cAIhD8P,EAAcD,EAAiBtnJ,MAAM,EADtB,GAEfwnJ,EAAmBF,EAAiBtnJ,MAFrB,GAGrBunJ,EAAYrnH,QAAQunH,IAClB,IAAI,QACFnlJ,EAAO,QACPutB,EAAU,IACR43H,EACJ3qJ,KAAKu2D,KAAK,CACR/wD,UACAutB,WACC,QAAS/yB,KAAK6gF,KAAKqhE,eAEpBwI,EAAiBjrJ,OAAS,GAC5BO,KAAKu2D,KAAK,CACR/wD,QAASxF,KAAK0iJ,KAAK,+BAAgC,CACjD5wE,MAAO44E,EAAiBjrJ,UAIhC,CACA,SAASqhJ,GAAgC9I,GACvC,MAAM,cACJiE,EAAa,MACbz3I,GACE,GAA4BxE,KAAM6+I,IAAaA,IAAa9C,6BAA6B/D,GAC7F,QAAIiE,EAAcx8I,OAAS,IACzBO,KAAKyhJ,aAAazJ,EAAK1vH,GAAI,CACzBsiI,0BAA2B3O,IAE7Bj8I,KAAKF,IAAI0E,EAAMgB,SACfxF,KAAK4M,KAAK,qBAAsBorI,EAAMxzI,GAC/B,GAGX,CACA,SAASq8I,GAA0B/hJ,GACjC,IAAIioB,GAAU,EACd,IAAK,MAAMixH,KAAQ/sI,OAAOoT,OAAOvf,GAC1B,GAA4BkB,KAAMo/I,IAAgCA,IAAgCpH,KACrGjxH,GAAU,GAGd,OAAOA,CACT,CACA,SAAS65H,GAAyB5I,GAChC,MAAM,eACJ2G,GACE3+I,KAAKgE,WACT,IAAuB,IAAnB26I,EAA0B,CAC5B,MAAMn6I,EAAQ,IAAIg2I,GAAiBx6I,KAAK0iJ,KAAK,sBAAuB,CAClE1K,SAGF,MADA,GAA4Bh4I,KAAMm/I,IAAgBA,IAAgB,CAAC36I,IAC7DA,CACR,CACF,CACA,SAASm8I,GAAgBkK,GAIvB,MAAM7S,EAAO6S,aAAgC/lI,KAAO,CAClD/lB,KAAM8rJ,EAAqB9rJ,KAC3B8G,KAAMglJ,EAAqBhlJ,KAC3Bk8B,KAAM8oH,EAAqB9oH,KAC3Bp+B,KAAMknJ,GACJA,EACEhS,EAAWd,GAAYC,GACvBgE,EC/yCO,SAAqBnD,EAAUiS,GAC5C,OAAIA,EAAe/rJ,KACV+rJ,EAAe/rJ,KAEO,UAA3B85I,EAASzmI,MAAM,KAAK,GACf,GAAGymI,EAASzmI,MAAM,KAAK,MAAMymI,EAASzmI,MAAM,KAAK,KAEnD,QACT,CDuyCmB24I,CAAYlS,EAAUb,GACjCE,EAAgBnD,GAAwBiH,GAAU9G,UAClD5sH,EAAKiwH,GAAcP,EAAMh4I,KAAK8oJ,SAC9BltH,EAAOo8G,EAAKp8G,MAAQ,CAAC,EAC3BA,EAAK78B,KAAOi9I,EACZpgH,EAAK/1B,KAAOgzI,EAGZ,MAAM92G,EAAO33B,OAAO0gE,SAASktE,EAAKr0I,KAAKo+B,MAAQi2G,EAAKr0I,KAAKo+B,KAAO,KAChE,MAAO,CACLxN,OAAQyjH,EAAKzjH,QAAU,GACvBjM,KACAvpB,KAAMi9I,EACN9G,UAAWgD,GAAiB,GAC5Bt8G,KAAM,IACD57B,KAAKgE,WAAW43B,QAChBA,GAEL/1B,KAAMgzI,EACNl1I,KAAMq0I,EAAKr0I,KACXwtF,SAAU,CACRmwD,WAAY,EACZI,cAAe,EACfF,WAAYz/G,EACZ4hH,gBAAgB,EAChBC,cAAe,MAEjB7hH,OACAq5G,SAAS,EACT3C,SAAUT,EAAKS,WAAY,EAG3BC,OAAQV,EAAKU,QAAU,GACvBsS,QAAShT,EAAKgT,QAElB,CACA,SAAStK,KACH1gJ,KAAK6gF,KAAKihE,cAAgB9hJ,KAAKghJ,uBACjChhJ,KAAKghJ,qBAAuB/+I,WAAW,KACrCjC,KAAKghJ,qBAAuB,KAC5BhhJ,KAAKmqJ,SAASjyF,MAAMJ,IACbA,EAAI4iF,eACP16I,KAAKF,IAAIg4D,EAAIm8B,OAASn8B,EAAItyD,SAAWsyD,MAGxC,GAEP,CACA,SAAS2oF,GAA0BwK,GACjC,MACEnsJ,MAAOm8I,GACLj7I,KAAKgE,WAGHkiJ,EAAiB,IAClBjL,GAECkL,EAAkB,GAClBC,EAAS,GACf,IAAK,MAAM8E,KAAaD,EACtB,IACE,IAAIE,EACJ,IAAIC,EAAU,GAA4BprJ,KAAMu/I,IAAgBA,IAAgB2L,GAMhF,MAAM9P,EAAiE,OAAtD+P,EAAwBlQ,EAAcmQ,EAAQ9iI,UAAoB,EAAI6iI,EAAsB/P,QACzGA,IAEFgQ,EAAU,IADgBnQ,EAAcmQ,EAAQ9iI,IAG9C8yH,SAAS,EACTz3I,KAAMunJ,EAAUvnJ,MAElB3D,KAAKF,IAAI,iDAAiDsrJ,EAAQrsJ,SAASqsJ,EAAQ9iI,OAErF,MAAM+iI,EAA0BrrJ,KAAK6gF,KAAKmhE,kBAAkBoJ,EAASlF,GACrE,IAAKmF,GAA2BrrJ,KAAKgmJ,yBAAyBoF,EAAQ9iI,IACpE,MAAM,IAAIkyH,GAAiBx6I,KAAK0iJ,KAAK,eAAgB,CACnD1G,SAAUoP,EAAQrsJ,OAChB,CACFi5I,KAAMkT,IAKV,IAAgC,IAA5BG,IAAsCjQ,EAExC,MAAM,IAAIZ,GAAiB,gEAAiE,CAC1FG,cAAc,EACd3C,KAAMkT,IAEoC,iBAA5BG,GAAoE,OAA5BA,IACxDD,EAAUC,GAEZ,GAA4BrrJ,KAAM6+I,IAAaA,IAAapD,mBAAmB2P,GAG/ElF,EAAekF,EAAQ9iI,IAAM8iI,EAC7BjF,EAAgBjmJ,KAAKkrJ,EACvB,CAAE,MAAOtzF,GACPsuF,EAAOlmJ,KAAK43D,EACd,CAEF,IAGE,GAA4B93D,KAAM6+I,IAAaA,IAAa7D,8BAA8B/vI,OAAOoT,OAAO48H,GAAgBkL,EAC1H,CAAE,MAAOruF,GAIP,OAHAsuF,EAAOlmJ,KAAK43D,GAGL,CACLouF,eAAgBjL,EAChBkL,gBAAiB,GACjBC,SAEJ,CACA,MAAO,CACLF,iBACAC,kBACAC,SAEJ,CACA,SAAS5F,KAEP,MAAM8K,EAAe,CAAC9mJ,EAAOwzI,EAAMt8H,KACjC,IAAI6vI,EAAW/mJ,EAAMgB,SAAW,gBAC5BhB,EAAMuuB,UACRw4H,GAAY,IAAI/mJ,EAAMuuB,WAExB/yB,KAAK00I,SAAS,CACZlwI,MAAO+mJ,IAEG,MAARvT,GAAgBA,EAAK1vH,MAAMtoB,KAAKgE,WAAWlF,OAC7CkB,KAAKyhJ,aAAazJ,EAAK1vH,GAAI,CACzB9jB,MAAO+mJ,EACP7vI,cAIN1b,KAAKuN,GAAG,QAAS+9I,GACjBtrJ,KAAKuN,GAAG,eAAgB,CAACyqI,EAAMxzI,EAAOkX,KAEpC,GADA4vI,EAAa9mJ,EAAOwzI,EAAMt8H,GACL,iBAAVlX,GAAsBA,EAAMgB,QAAS,CAC9C,IAAIgmJ,EACJxrJ,KAAKF,IAAI0E,EAAMgB,QAAS,SACxB,MAAMimJ,EAAW,IAAItkI,MAAMnnB,KAAK0iJ,KAAK,iBAAkB,CACrD1K,KAA0D,OAAnDwT,EAAqB,MAARxT,OAAoB,EAAIA,EAAKj5I,MAAgBysJ,EAAa,MAEhFC,EAAS9Q,cAAe,EACxB8Q,EAAS14H,QAAUvuB,EAAMgB,QACrBhB,EAAMuuB,UACR04H,EAAS14H,SAAW,IAAIvuB,EAAMuuB,WAEhC,GAA4B/yB,KAAMm/I,IAAgBA,IAAgB,CAACsM,GACrE,MACE,GAA4BzrJ,KAAMm/I,IAAgBA,IAAgB,CAAC36I,MAGvE,IAAIknJ,EAAsC,KAC1C1rJ,KAAKuN,GAAG,iBAAkB,CAAC/I,EAAO1F,KAChC,MAAM,QACJ0G,GACEhB,EACEuuB,EAAUj0B,EAAMoJ,IAAI8vI,GAAQA,EAAKp8G,KAAK78B,MAAM4f,KAAK,MAClD+sI,IACH1rJ,KAAKu2D,KAAK,CACR/wD,UACAutB,WACC,UAAW/yB,KAAK6gF,KAAKqhE,aACxBwJ,EAAsCzpJ,WAAW,KAC/CypJ,EAAsC,MACrC1rJ,KAAK6gF,KAAKqhE,cAEfliJ,KAAKF,IAAI,GAAG0F,KAAWutB,IAAUuP,OAAQ,aAE3CtiC,KAAKuN,GAAG,SAAU,KAChBvN,KAAK00I,SAAS,CACZlwI,MAAO,SAGX,MAAMmnJ,EAAkB7sJ,IACtB,MAAM8sJ,EAAgB9sJ,EAAM+I,OAAOmwI,IACjC,MAAM6T,EAAiB,MAAR7T,GAAgBh4I,KAAKqhJ,QAAQrJ,EAAK1vH,IAEjD,OADKujI,GAAQ7rJ,KAAKF,IAAI,0DAAkE,MAARk4I,OAAoB,EAAIA,EAAK1vH,MACtGujI,IAEHC,EAAa7gJ,OAAO+3I,YAAY4I,EAAc1jJ,IAAI8vI,GAAQ,CAACA,EAAK1vH,GAAI,CACxE6oE,SAAU,CACRyyD,cAAezjJ,KAAKC,MACpBujJ,gBAAgB,EAChBrC,WAAY,EACZI,cAAe,EACfF,WAAYxJ,EAAKj2G,UAGrB/hC,KAAK6iJ,gBAAgBiJ,IAEvB9rJ,KAAKuN,GAAG,eAAgBzO,IACtBA,EAAMskC,QAAQ40G,IAEZh4I,KAAK4M,KAAK,iBAAkBorI,KAE9B2T,EAAgB7sJ,KAElBkB,KAAKuN,GAAG,kBAAmBvN,KAAKkhJ,mBAChClhJ,KAAKuN,GAAG,iBAAkB,CAACyqI,EAAM+T,KAC/B,GAAY,MAAR/T,IAAiBh4I,KAAKqhJ,QAAQrJ,EAAK1vH,IAErC,YADAtoB,KAAKF,IAAI,0DAAkE,MAARk4I,OAAoB,EAAIA,EAAK1vH,MAGlG,MAAMigI,EAAkBvoJ,KAAKqhJ,QAAQrJ,EAAK1vH,IAAI6oE,SAC9CnxF,KAAKyhJ,aAAazJ,EAAK1vH,GAAI,CACzB6oE,SAAU,IACLo3D,EACH/C,YAAa,GAA4BxlJ,KAAMk/I,IAAiBA,IAAiBn9G,KAAO,EAAI,CAC1F8C,KAAM,sBACJjlC,EACJ+jJ,gBAAgB,EAChBrC,WAAY,IACZI,cAAe6G,EAAgB/G,YAEjC9lI,SAAUqwI,EACVC,UAAWD,EAAWC,UACtB1G,UAAU,IAKK,MAAbtN,EAAKj2G,MACP/hC,KAAKyhJ,aAAazJ,EAAK1vH,GAAI,CACzByZ,KAAMgqH,EAAWrK,eAAiB6G,EAAgB/G,aAGtDxhJ,KAAK2hJ,2BAEP3hJ,KAAKuN,GAAG,sBAAuB,CAACyqI,EAAM7mD,KACxB,MAAR6mD,GAAiBh4I,KAAKqhJ,QAAQrJ,EAAK1vH,IAIvCtoB,KAAKyhJ,aAAazJ,EAAK1vH,GAAI,CACzB6oE,SAAU,IACLnxF,KAAKqhJ,QAAQrJ,EAAK1vH,IAAI6oE,SACzBo0D,WAAYp0D,KANdnxF,KAAKF,IAAI,0DAAkE,MAARk4I,OAAoB,EAAIA,EAAK1vH,QAUpGtoB,KAAKuN,GAAG,sBAAuByqI,IAC7B,GAAY,MAARA,IAAiBh4I,KAAKqhJ,QAAQrJ,EAAK1vH,IAErC,YADAtoB,KAAKF,IAAI,0DAAkE,MAARk4I,OAAoB,EAAIA,EAAK1vH,MAGlG,MAAMxpB,EAAQ,IACTkB,KAAKgE,WAAWlF,OAErBA,EAAMk5I,EAAK1vH,IAAM,IACZxpB,EAAMk5I,EAAK1vH,IACd6oE,SAAU,IACLryF,EAAMk5I,EAAK1vH,IAAI6oE,kBAGfryF,EAAMk5I,EAAK1vH,IAAI6oE,SAASo0D,WAC/BvlJ,KAAK00I,SAAS,CACZ51I,YAGJkB,KAAKuN,GAAG,uBAAwB,CAACyqI,EAAM7mD,KACzB,MAAR6mD,GAAiBh4I,KAAKqhJ,QAAQrJ,EAAK1vH,IAIvCtoB,KAAKyhJ,aAAazJ,EAAK1vH,GAAI,CACzB6oE,SAAU,IACLnxF,KAAKgE,WAAWlF,MAAMk5I,EAAK1vH,IAAI6oE,SAClCq0D,YAAar0D,KANfnxF,KAAKF,IAAI,0DAAkE,MAARk4I,OAAoB,EAAIA,EAAK1vH,QAUpGtoB,KAAKuN,GAAG,uBAAwByqI,IAC9B,GAAY,MAARA,IAAiBh4I,KAAKqhJ,QAAQrJ,EAAK1vH,IAErC,YADAtoB,KAAKF,IAAI,0DAAkE,MAARk4I,OAAoB,EAAIA,EAAK1vH,MAGlG,MAAMxpB,EAAQ,IACTkB,KAAKgE,WAAWlF,OAErBA,EAAMk5I,EAAK1vH,IAAM,IACZxpB,EAAMk5I,EAAK1vH,IACd6oE,SAAU,IACLryF,EAAMk5I,EAAK1vH,IAAI6oE,kBAGfryF,EAAMk5I,EAAK1vH,IAAI6oE,SAASq0D,YAC/BxlJ,KAAK00I,SAAS,CACZ51I,YAGJkB,KAAKuN,GAAG,WAAY,KAElBvN,KAAK2hJ,2BAIP3hJ,KAAKuN,GAAG,+BAAgCyqI,IAClCA,GACF,GAA4Bh4I,KAAMo/I,IAAgCA,IAAgCpH,KAKhF,oBAAXt5I,QAA0BA,OAAO0C,mBAC1C1C,OAAO0C,iBAAiB,SAAU,GAA4BpB,KAAM2/I,IAAqBA,KACzFjhJ,OAAO0C,iBAAiB,UAAW,GAA4BpB,KAAM2/I,IAAqBA,KAC1F19I,WAAW,GAA4BjC,KAAM2/I,IAAqBA,IAAsB,KAE5F,CACA,SAASY,GAAesG,EAAShmE,QACb,IAAdA,IACFA,EAAO,CAAC,GAGV,MAAM,oBACJinE,GAAsB,GACpBjnE,GACE,eACJ89D,EAAc,eACd0D,GACEriJ,KAAKgE,WACT,IAAK26I,IAAmBmJ,EACtB,MAAM,IAAI3gI,MAAM,kDAElB,MAAM+/H,EAAW7S,KAgBjB,OAfAr0I,KAAK4M,KAAK,SAAU,CAClB0b,GAAI4+H,EACJL,YAEF7mJ,KAAK00I,SAAS,CACZiK,gBAAyD,IAAzC3+I,KAAK6gF,KAAKkhE,6BAA2E,IAAnC/hJ,KAAK6gF,KAAKorE,qBAC5E5J,eAAgB,IACXA,EACH,CAAC6E,GAAW,CACVL,UACAhqC,KAAM,EACNhuG,OAAQ,CAAC,MAIRq4I,CACT,CACA,SAAS5G,GAAY4G,GACnB,MAAM,eACJ7E,GACEriJ,KAAKgE,WACT,OAAOq+I,EAAe6E,EACxB,CACA,SAAS7G,GAAe6G,GACtB,MAAM7E,EAAiB,IAClBriJ,KAAKgE,WAAWq+I,uBAEdA,EAAe6E,GACtBlnJ,KAAK00I,SAAS,CACZ2N,kBAEJ,CACArlI,eAAeojI,GAAY8G,GACzB,MAAMgF,EAAmB,KACvB,MAAM,eACJ7J,GACEriJ,KAAKgE,WACT,OAAOq+I,EAAe6E,IAExB,IAAIgD,EAAgBgC,IACpB,MAAMxiB,EAAQ,IAAI,GAA4B1pI,KAAMg/I,IAAgBA,OAAoB,GAA4Bh/I,KAAMi/I,IAAYA,OAAgB,GAA4Bj/I,KAAMk/I,IAAiBA,KACzM,IACE,IAAK,IAAIriC,EAAOqtC,EAAcrtC,MAAQ,EAAGA,EAAO6sB,EAAMjqI,QAC/CyqJ,EADuDrtC,IAAQ,CAIpE,MAAMvxG,EAAKo+H,EAAM7sB,GACjB78G,KAAK00I,SAAS,CACZ2N,eAAgB,IACXriJ,KAAKgE,WAAWq+I,eACnB,CAAC6E,GAAW,IACPgD,EACHrtC,WAIN,MAAM,QACJgqC,GACEqD,QAIE5+I,EAAGu7I,EAASK,GAGlBgD,EAAgBgC,GAClB,CACF,CAAE,MAAOp0F,GAEP,MADA,GAA4B93D,KAAM+/I,IAAeA,IAAemH,GAC1DpvF,CACR,CAGA,GAAIoyF,EAAe,CAWjBA,EAAcrD,QAAQzjH,QAAQ8/G,IAC5B,MAAMlL,EAAOh4I,KAAKqhJ,QAAQ6B,GACtBlL,GAAQA,EAAK7mD,SAASq0D,aACxBxlJ,KAAK4M,KAAK,uBAAwBorI,KAGtC,MAAMl5I,EAAQorJ,EAAcrD,QAAQ3+I,IAAIg7I,GAAUljJ,KAAKqhJ,QAAQ6B,IACzD2E,EAAa/oJ,EAAM+I,OAAOmwI,IAASA,EAAKxzI,OACxCqX,EAAS/c,EAAM+I,OAAOmwI,GAAQA,EAAKxzI,OACzCxE,KAAKiqJ,cAAc/C,EAAU,CAC3BW,aACAhsI,SACAqrI,aAIFgD,EAAgBgC,GAClB,CAKA,IAAIr9I,EASJ,OARIq7I,IACFr7I,EAASq7I,EAAcr7I,OACvB7O,KAAK4M,KAAK,WAAYiC,GACtB,GAA4B7O,KAAM+/I,IAAeA,IAAemH,IAEpD,MAAVr4I,GACF7O,KAAKF,IAAI,2DAA2DonJ,KAE/Dr4I,CACT,CACAqxI,GAAKpL,QA1tDQ,SA2tDb,IErvDI3xF,GAAE32C,GAAE2/I,GAAI3sJ,GAAE+8D,GAAEnnD,GAAExG,GAAE+sD,GAAEl0B,GAAE3/B,GAAEoB,GFqvD1B,MErvD8BwgE,GAAE,CAAC,EAAEnmB,GAAE,GAAGt5B,GAAE,oEAAoE/U,GAAExI,MAAM+H,QAAQ,SAAS2nD,GAAEjZ,EAAE32C,GAAG,IAAI,IAAI2/I,KAAK3/I,EAAE22C,EAAEgpG,GAAG3/I,EAAE2/I,GAAG,OAAOhpG,CAAC,CAAC,SAAS90C,GAAE80C,GAAGA,GAAGA,EAAE9wB,YAAY8wB,EAAE9wB,WAAWzb,YAAYusC,EAAE,CAAC,SAASrkC,GAAEtS,EAAE2/I,EAAEviF,GAAG,IAAIpqE,EAAE+8D,EAAEnnD,EAAExG,EAAE,CAAC,EAAE,IAAIwG,KAAK+2I,EAAE,OAAO/2I,EAAE5V,EAAE2sJ,EAAE/2I,GAAG,OAAOA,EAAEmnD,EAAE4vF,EAAE/2I,GAAGxG,EAAEwG,GAAG+2I,EAAE/2I,GAAG,GAAGjI,UAAU1N,OAAO,IAAImP,EAAEmZ,SAAS5a,UAAU1N,OAAO,EAAE0jD,GAAEp+C,KAAKoI,UAAU,GAAGy8D,GAAG,mBAAmBp9D,GAAG,MAAMA,EAAE4/I,aAAa,IAAIh3I,KAAK5I,EAAE4/I,kBAAkB,IAAIx9I,EAAEwG,KAAKxG,EAAEwG,GAAG5I,EAAE4/I,aAAah3I,IAAI,OAAOyzB,GAAEr8B,EAAEoC,EAAEpP,EAAE+8D,EAAE,KAAK,CAAC,SAAS1zB,GAAEsa,EAAEymB,EAAEpqE,EAAE+8D,EAAEnnD,GAAG,IAAIxG,EAAE,CAAC/I,KAAKs9C,EAAE8/B,MAAMrZ,EAAE3iE,IAAIzH,EAAE6sJ,IAAI9vF,EAAE+vF,IAAI,KAAKC,GAAG,KAAKC,IAAI,EAAEC,IAAI,KAAKC,IAAI,KAAKhsJ,iBAAiB,EAAEisJ,IAAI,MAAMv3I,IAAI+2I,GAAE/2I,EAAEw3I,KAAK,EAAEC,IAAI,GAAG,OAAO,MAAMz3I,GAAG,MAAM5I,GAAEsgJ,OAAOtgJ,GAAEsgJ,MAAMl+I,GAAGA,CAAC,CAAmC,SAAS00C,GAAEH,GAAG,OAAOA,EAAEp7B,QAAQ,CAAC,SAASiC,GAAEm5B,EAAE32C,GAAGxM,KAAKijF,MAAM9/B,EAAEnjD,KAAKuL,QAAQiB,CAAC,CAAC,SAAS2wD,GAAEha,EAAE32C,GAAG,GAAG,MAAMA,EAAE,OAAO22C,EAAEopG,GAAGpvF,GAAEha,EAAEopG,GAAGppG,EAAEypG,IAAI,GAAG,KAAK,IAAI,IAAIT,EAAE3/I,EAAE22C,EAAEmpG,IAAI7sJ,OAAO+M,IAAI,GAAG,OAAO2/I,EAAEhpG,EAAEmpG,IAAI9/I,KAAK,MAAM2/I,EAAEM,IAAI,OAAON,EAAEM,IAAI,MAAM,mBAAmBtpG,EAAEt9C,KAAKs3D,GAAEha,GAAG,IAAI,CAAC,SAASoY,GAAEpY,GAAG,GAAGA,EAAE4pG,KAAK5pG,EAAE6pG,IAAI,CAAC,IAAIb,EAAEhpG,EAAEwpG,IAAI/iF,EAAEuiF,EAAEM,IAAIjtJ,EAAE,GAAG+8D,EAAE,GAAGnnD,EAAEgnD,GAAE,CAAC,EAAE+vF,GAAG/2I,EAAEu3I,IAAIR,EAAEQ,IAAI,EAAEngJ,GAAEsgJ,OAAOtgJ,GAAEsgJ,MAAM13I,GAAG04F,GAAE3qD,EAAE4pG,IAAI33I,EAAE+2I,EAAEhpG,EAAE8pG,IAAI9pG,EAAE4pG,IAAIG,aAAa,GAAGf,EAAEU,IAAI,CAACjjF,GAAG,KAAKpqE,EAAE,MAAMoqE,EAAEzM,GAAEgvF,GAAGviF,KAAK,GAAGuiF,EAAEU,KAAKtwF,GAAGnnD,EAAEu3I,IAAIR,EAAEQ,IAAIv3I,EAAEm3I,GAAGD,IAAIl3I,EAAEw3I,KAAKx3I,EAAE4nD,GAAEx9D,EAAE4V,EAAEmnD,GAAG4vF,EAAEM,IAAIN,EAAEI,GAAG,KAAKn3I,EAAEq3I,KAAK7iF,GAAGnM,GAAEroD,EAAE,CAAC,CAAC,SAASqoD,GAAEta,GAAG,GAAG,OAAOA,EAAEA,EAAEopG,KAAK,MAAMppG,EAAEupG,IAAI,OAAOvpG,EAAEspG,IAAItpG,EAAEupG,IAAI5zD,KAAK,KAAK31C,EAAEmpG,IAAI1kI,KAAK,SAASpb,GAAG,GAAG,MAAMA,GAAG,MAAMA,EAAEigJ,IAAI,OAAOtpG,EAAEspG,IAAItpG,EAAEupG,IAAI5zD,KAAKtsF,EAAEigJ,GAAG,GAAGhvF,GAAEta,EAAE,CAAC,SAASgqG,GAAEhqG,KAAKA,EAAE6pG,MAAM7pG,EAAE6pG,KAAI,IAAKxtJ,GAAEU,KAAKijD,KAAK2a,GAAEsvF,OAAO7wF,IAAG/vD,GAAE6gJ,sBAAsB9wF,GAAE/vD,GAAE6gJ,oBAAoBj4I,IAAG0oD,GAAE,CAAC,SAASA,KAAI,IAAI,IAAI,IAAI3a,EAAE32C,EAAE,EAAEhN,GAAEC,QAAQD,GAAEC,OAAO+M,GAAGhN,GAAEytC,KAAKr+B,IAAGu0C,EAAE3jD,GAAE+wC,QAAQ/jC,EAAEhN,GAAEC,OAAO87D,GAAEpY,EAAE,CAAC,QAAQ3jD,GAAEC,OAAOq+D,GAAEsvF,IAAI,CAAC,CAAC,CAAC,SAAS9vF,GAAEna,EAAE32C,EAAE2/I,EAAEviF,EAAEpqE,EAAE+8D,EAAEnnD,EAAExG,EAAE+sD,EAAEl0B,EAAE3/B,GAAG,IAAIoB,EAAE6xD,EAAE9wC,EAAE/U,EAAEknD,EAAE/tD,EAAEyQ,EAAE+pB,EAAE+gC,GAAGA,EAAE0iF,KAAK/oG,GAAE51C,EAAEnB,EAAE/M,OAAO,IAAIk8D,EAAEN,GAAE8wF,EAAE3/I,EAAEq8B,EAAE8yB,EAAEhuD,GAAGzE,EAAE,EAAEA,EAAEyE,EAAEzE,IAAI,OAAO+gB,EAAEkiI,EAAEG,IAAIpjJ,MAAM6xD,GAAG,GAAG9wC,EAAE2iI,KAAK/jH,EAAE5e,EAAE2iI,MAAMljF,GAAEz/C,EAAE2iI,IAAI1jJ,EAAEmF,EAAEy/F,GAAE3qD,EAAEl5B,EAAE8wC,EAAEv7D,EAAE+8D,EAAEnnD,EAAExG,EAAE+sD,EAAEl0B,EAAE3/B,GAAGoN,EAAE+U,EAAEwiI,IAAIxiI,EAAEoiI,KAAKtxF,EAAEsxF,KAAKpiI,EAAEoiI,MAAMtxF,EAAEsxF,KAAK7wF,GAAET,EAAEsxF,IAAI,KAAKpiI,GAAGniB,EAAE5H,KAAK+pB,EAAEoiI,IAAIpiI,EAAEyiI,KAAKx3I,EAAE+U,IAAI,MAAMmyC,GAAG,MAAMlnD,IAAIknD,EAAElnD,IAAI4J,KAAK,EAAEmL,EAAE4iI,OAAO9xF,EAAEuxF,MAAMriI,EAAEqiI,IAAI3wF,EAAEkC,GAAE5zC,EAAE0xC,EAAExY,EAAErkC,GAAG,mBAAmBmL,EAAEpkB,WAAW,IAAIwI,EAAEstD,EAAEttD,EAAE6G,IAAIymD,EAAEzmD,EAAEouB,aAAarZ,EAAE4iI,MAAM,GAAG,OAAOV,EAAEM,IAAIrwF,EAAET,CAAC,CAAC,SAASN,GAAElY,EAAE32C,EAAE2/I,EAAEviF,EAAEpqE,GAAG,IAAI+8D,EAAEnnD,EAAExG,EAAE+sD,EAAEl0B,EAAE3/B,EAAEqkJ,EAAE1sJ,OAAOyJ,EAAEpB,EAAEizD,EAAE,EAAE,IAAI5X,EAAEmpG,IAAI,IAAI5/I,MAAMlN,GAAG+8D,EAAE,EAAEA,EAAE/8D,EAAE+8D,IAAI,OAAOnnD,EAAE5I,EAAE+vD,KAAK,kBAAkBnnD,GAAG,mBAAmBA,GAAG,iBAAiBA,GAAG,iBAAiBA,GAAG,iBAAiBA,GAAGA,EAAE1U,aAAasT,OAAOoB,EAAE+tC,EAAEmpG,IAAI/vF,GAAG1zB,GAAE,KAAKzzB,EAAE,KAAK,KAAK,MAAMF,GAAEE,GAAGA,EAAE+tC,EAAEmpG,IAAI/vF,GAAG1zB,GAAEya,GAAE,CAACv7B,SAAS3S,GAAG,KAAK,KAAK,WAAW,IAAIA,EAAE1U,aAAa0U,EAAEo3I,IAAI,EAAEp3I,EAAE+tC,EAAEmpG,IAAI/vF,GAAG1zB,GAAEzzB,EAAEvP,KAAKuP,EAAE6tE,MAAM7tE,EAAEnO,IAAImO,EAAEi3I,IAAIj3I,EAAEi3I,IAAI,KAAKj3I,EAAEu3I,KAAKxpG,EAAEmpG,IAAI/vF,GAAGnnD,EAAEumD,EAAEY,EAAExB,EAAE3lD,EAAEm3I,GAAGppG,EAAE/tC,EAAEo3I,IAAIrpG,EAAEqpG,IAAI,EAAE59I,EAAE,MAAM,IAAI64B,EAAEryB,EAAEw3I,IAAI1vF,GAAE9nD,EAAE+2I,EAAExwF,EAAEzyD,MAAMA,KAAK0F,EAAEu9I,EAAE1kH,MAAM74B,EAAEi+I,KAAK,IAAI,MAAMj+I,GAAG,MAAMA,EAAE+9I,MAAM,GAAGllH,IAAIjoC,EAAEsI,EAAEizD,IAAIv7D,EAAEsI,GAAGizD,KAAK,mBAAmB3lD,EAAEvP,OAAOuP,EAAEy3I,KAAK,IAAIplH,GAAGk0B,IAAIl0B,GAAGk0B,EAAE,EAAEZ,IAAItzB,GAAGk0B,EAAE,EAAEZ,KAAKtzB,EAAEk0B,EAAEZ,IAAIA,IAAI3lD,EAAEy3I,KAAK,KAAK1pG,EAAEmpG,IAAI/vF,GAAG,KAAK,GAAGrzD,EAAE,IAAIqzD,EAAE,EAAEA,EAAEz0D,EAAEy0D,IAAI,OAAO3tD,EAAEu9I,EAAE5vF,OAAS,EAAE3tD,EAAEi+I,OAAOj+I,EAAE69I,KAAK7iF,IAAIA,EAAEzM,GAAEvuD,IAAI6sD,GAAE7sD,EAAEA,IAAI,OAAOg7D,CAAC,CAAC,SAAS/L,GAAE1a,EAAE32C,EAAE2/I,EAAEviF,GAAG,IAAIpqE,EAAE+8D,EAAE,GAAG,mBAAmBpZ,EAAEt9C,KAAK,CAAC,IAAIrG,EAAE2jD,EAAEmpG,IAAI/vF,EAAE,EAAE/8D,GAAG+8D,EAAE/8D,EAAEC,OAAO88D,IAAI/8D,EAAE+8D,KAAK/8D,EAAE+8D,GAAGgwF,GAAGppG,EAAE32C,EAAEqxD,GAAEr+D,EAAE+8D,GAAG/vD,EAAE2/I,EAAEviF,IAAI,OAAOp9D,CAAC,CAAC22C,EAAEspG,KAAKjgJ,IAAIo9D,IAAIp9D,GAAG22C,EAAEt9C,OAAO2G,EAAE6lB,aAAa7lB,EAAE2wD,GAAEha,IAAIgpG,EAAEn6H,aAAamxB,EAAEspG,IAAIjgJ,GAAG,OAAOA,EAAE22C,EAAEspG,KAAK,GAAGjgJ,EAAEA,GAAGA,EAAE82B,kBAAkB,MAAM92B,GAAG,GAAGA,EAAE+mC,UAAU,OAAO/mC,CAAC,CAAC,SAASkxD,GAAEva,EAAE32C,GAAG,OAAOA,EAAEA,GAAG,GAAG,MAAM22C,GAAG,kBAAkBA,IAAIjuC,GAAEiuC,GAAGA,EAAEv7B,KAAK,SAASu7B,GAAGua,GAAEva,EAAE32C,EAAE,GAAGA,EAAEtM,KAAKijD,IAAI32C,CAAC,CAAC,SAAS0wD,GAAE/Z,EAAE32C,EAAE2/I,EAAEviF,GAAG,IAAIpqE,EAAE+8D,EAAEnnD,EAAExG,EAAEu0C,EAAEl8C,IAAI00D,EAAExY,EAAEt9C,KAAK4hC,EAAEj7B,EAAE2/I,GAAGrkJ,EAAE,MAAM2/B,KAAO,EAAEA,EAAEolH,KAAK,GAAG,OAAOplH,GAAG,MAAM74B,GAAG9G,GAAG8G,GAAG64B,EAAExgC,KAAK00D,GAAGl0B,EAAE5hC,KAAK,OAAOsmJ,EAAE,GAAGviF,GAAG9hE,EAAE,EAAE,GAAG,IAAItI,EAAE2sJ,EAAE,EAAE5vF,EAAE4vF,EAAE,EAAE3sJ,GAAG,GAAG+8D,EAAE/vD,EAAE/M,QAAQ,GAAG,OAAOgoC,EAAEj7B,EAAE4I,EAAE5V,GAAG,EAAEA,IAAI+8D,SAAW,EAAE90B,EAAEolH,MAAMj+I,GAAG64B,EAAExgC,KAAK00D,GAAGl0B,EAAE5hC,KAAK,OAAOuP,EAAE,OAAO,CAAC,CAAC,SAAS9H,GAAE61C,EAAE32C,EAAE2/I,GAAG,KAAK3/I,EAAE,GAAG22C,EAAEyqC,YAAYphF,EAAE,MAAM2/I,EAAE,GAAGA,GAAGhpG,EAAE32C,GAAG,MAAM2/I,EAAE,GAAG,iBAAiBA,GAAGliI,GAAEhhB,KAAKuD,GAAG2/I,EAAEA,EAAE,IAAI,CAAC,SAASzwF,GAAEvY,EAAE32C,EAAE2/I,EAAEviF,EAAEpqE,GAAG,IAAI+8D,EAAEnnD,EAAE+tC,EAAE,GAAG,SAAS32C,EAAE,GAAG,iBAAiB2/I,EAAEhpG,EAAEjxB,MAAM+7B,QAAQk+F,MAAM,CAAC,GAAG,iBAAiBviF,IAAIzmB,EAAEjxB,MAAM+7B,QAAQ2b,EAAE,IAAIA,EAAE,IAAIp9D,KAAKo9D,EAAEuiF,GAAG3/I,KAAK2/I,GAAG7+I,GAAE61C,EAAEjxB,MAAM1lB,EAAE,IAAI,GAAG2/I,EAAE,IAAI3/I,KAAK2/I,EAAEviF,GAAGuiF,EAAE3/I,IAAIo9D,EAAEp9D,IAAIc,GAAE61C,EAAEjxB,MAAM1lB,EAAE2/I,EAAE3/I,GAAG,MAAM,GAAG,KAAKA,EAAE,IAAI,KAAKA,EAAE,GAAG+vD,EAAE/vD,IAAIA,EAAEA,EAAEnD,QAAQsyD,GAAE,OAAOvmD,EAAE5I,EAAErH,cAAcqH,EAAE4I,KAAK+tC,GAAG,cAAc32C,GAAG,aAAaA,EAAE4I,EAAElS,MAAM,GAAGsJ,EAAEtJ,MAAM,GAAGigD,EAAE32C,IAAI22C,EAAE32C,EAAE,CAAC,GAAG22C,EAAE32C,EAAEA,EAAE+vD,GAAG4vF,EAAEA,EAAEviF,EAAEuiF,EAAEA,EAAEviF,EAAEuiF,GAAGA,EAAEA,EAAE1kH,GAAE0b,EAAE/hD,iBAAiBoL,EAAE+vD,EAAErzD,GAAEpB,GAAEy0D,IAAIpZ,EAAE3hD,oBAAoBgL,EAAE+vD,EAAErzD,GAAEpB,GAAEy0D,OAAO,CAAC,GAAG,8BAA8B/8D,EAAEgN,EAAEA,EAAEnD,QAAQ,cAAc,KAAKA,QAAQ,SAAS,UAAU,GAAG,SAASmD,GAAG,UAAUA,GAAG,QAAQA,GAAG,QAAQA,GAAG,QAAQA,GAAG,YAAYA,GAAG,YAAYA,GAAG,WAAWA,GAAG,WAAWA,GAAG,QAAQA,GAAG,WAAWA,GAAGA,KAAK22C,EAAE,IAAIA,EAAE32C,GAAG,MAAM2/I,EAAE,GAAGA,EAAE,MAAMhpG,CAAC,CAAC,MAAMA,GAAG,CAAC,mBAAmBgpG,IAAI,MAAMA,IAAG,IAAKA,GAAG,KAAK3/I,EAAE,GAAG22C,EAAE/pC,gBAAgB5M,GAAG22C,EAAEhqC,aAAa3M,EAAE,WAAWA,GAAG,GAAG2/I,EAAE,GAAGA,GAAG,CAAC,CAAC,SAAS5uF,GAAEpa,GAAG,OAAO,SAASgpG,GAAG,GAAGnsJ,KAAKwM,EAAE,CAAC,IAAIo9D,EAAE5pE,KAAKwM,EAAE2/I,EAAEtmJ,KAAKs9C,GAAG,GAAG,MAAMgpG,EAAEviF,EAAEuiF,EAAEviF,EAAEniC,UAAS,GAAG0kH,EAAEviF,EAAEA,EAAEuiF,EAAE,OAAO,OAAOviF,EAAEp9D,GAAE/G,MAAM+G,GAAE/G,MAAM0mJ,GAAGA,EAAE,CAAC,CAAC,CAAC,SAASr+C,GAAE3qD,EAAEgpG,EAAEviF,EAAEpqE,EAAE+8D,EAAEnnD,EAAExG,EAAE+sD,EAAEl0B,EAAE3/B,GAAG,IAAIoB,EAAE6xD,EAAE2O,EAAEz/C,EAAEnL,EAAE+pB,EAAEl7B,EAAEwvD,EAAE5B,EAAEkC,EAAE0vF,EAAErvF,EAAEzC,EAAEwC,EAAEH,EAAER,EAAEivF,EAAEtmJ,KAAK,QAAQ,IAAIsmJ,EAAEzrJ,YAAY,OAAO,KAAK,IAAIkpE,EAAEijF,MAAMplH,KAAK,GAAGmiC,EAAEijF,KAAKz3I,EAAE,CAACumD,EAAEwwF,EAAEM,IAAI7iF,EAAE6iF,OAAOvjJ,EAAEsD,GAAEggJ,MAAMtjJ,EAAEijJ,GAAGhpG,EAAE,GAAG,mBAAmB+Z,EAAE,IAAI,GAAGC,EAAEgvF,EAAElpE,MAAM1nB,EAAE2B,EAAE33D,WAAW23D,EAAE33D,UAAUilB,OAAOizC,GAAGv0D,EAAEg0D,EAAEowF,cAAc9tJ,EAAE0J,EAAEwjJ,KAAKS,EAAEjkJ,EAAEu0D,EAAEA,EAAEwlB,MAAM/jF,MAAMgK,EAAEqjJ,GAAG/sJ,EAAEoqE,EAAE8iF,IAAI/+I,GAAGotD,EAAEoxF,EAAEO,IAAI9iF,EAAE8iF,KAAKH,GAAGxxF,EAAEwyF,KAAKhyF,EAAE4wF,EAAEO,IAAI3xF,EAAE,IAAImC,EAAEC,EAAEgwF,IAAIhB,EAAEO,IAAI3xF,EAAE,IAAI/wC,GAAEmzC,EAAEgwF,GAAGpyF,EAAEr6D,YAAYw8D,EAAEnC,EAAEvwC,OAAOozC,IAAGH,GAAGA,EAAEuxB,IAAIj0B,GAAGA,EAAE91D,QAAQ81D,EAAE91D,MAAM,CAAC,GAAG81D,EAAEkyF,IAAIztJ,EAAEkqE,EAAE3O,EAAEiyF,KAAI,EAAGjyF,EAAEyyF,IAAI,GAAGzyF,EAAE0yF,IAAI,IAAIlyF,GAAG,MAAMR,EAAE2yF,MAAM3yF,EAAE2yF,IAAI3yF,EAAE91D,OAAOs2D,GAAG,MAAM2B,EAAEywF,2BAA2B5yF,EAAE2yF,KAAK3yF,EAAE91D,QAAQ81D,EAAE2yF,IAAItxF,GAAE,CAAC,EAAErB,EAAE2yF,MAAMtxF,GAAErB,EAAE2yF,IAAIxwF,EAAEywF,yBAAyBxwF,EAAEpC,EAAE2yF,OAAOzjI,EAAE8wC,EAAEkoB,MAAMnkE,EAAEi8C,EAAE91D,MAAM81D,EAAE4xF,IAAIR,EAAEziF,EAAEnO,GAAG,MAAM2B,EAAEywF,0BAA0B,MAAM5yF,EAAE6yF,oBAAoB7yF,EAAE6yF,qBAAqBryF,GAAG,MAAMR,EAAE8yF,mBAAmB9yF,EAAEyyF,IAAIttJ,KAAK66D,EAAE8yF,uBAAuB,CAAC,GAAGtyF,GAAG,MAAM2B,EAAEywF,0BAA0BxwF,IAAIlzC,GAAG,MAAM8wC,EAAE+yF,2BAA2B/yF,EAAE+yF,0BAA0B3wF,EAAEgwF,GAAGhB,EAAEQ,KAAK/iF,EAAE+iF,MAAM5xF,EAAE0xF,KAAK,MAAM1xF,EAAEgzF,wBAAuB,IAAKhzF,EAAEgzF,sBAAsB5wF,EAAEpC,EAAE2yF,IAAIP,GAAG,CAAChB,EAAEQ,KAAK/iF,EAAE+iF,MAAM5xF,EAAEkoB,MAAM9lB,EAAEpC,EAAE91D,MAAM81D,EAAE2yF,IAAI3yF,EAAEiyF,KAAI,GAAIb,EAAEM,IAAI7iF,EAAE6iF,IAAIN,EAAEG,IAAI1iF,EAAE0iF,IAAIH,EAAEG,IAAI1kI,KAAK,SAASu7B,GAAGA,IAAIA,EAAEopG,GAAGJ,EAAE,GAAG5oG,GAAErjD,KAAKmN,MAAM0tD,EAAEyyF,IAAIzyF,EAAE0yF,KAAK1yF,EAAE0yF,IAAI,GAAG1yF,EAAEyyF,IAAI/tJ,QAAQmP,EAAE1O,KAAK66D,GAAG,MAAM5X,CAAC,CAAC,MAAM4X,EAAEizF,qBAAqBjzF,EAAEizF,oBAAoB7wF,EAAEpC,EAAE2yF,IAAIP,GAAG5xF,GAAG,MAAMR,EAAEkzF,oBAAoBlzF,EAAEyyF,IAAIttJ,KAAK,WAAW66D,EAAEkzF,mBAAmBhkI,EAAEnL,EAAE+pB,EAAE,EAAE,CAAC,GAAGkyB,EAAExvD,QAAQ4hJ,EAAEpyF,EAAEkoB,MAAM9lB,EAAEpC,EAAEgyF,IAAI5pG,EAAE4X,EAAE0xF,KAAI,EAAG3uF,EAAEtxD,GAAE4gJ,IAAI/xF,EAAE,EAAEE,EAAER,EAAE91D,MAAM81D,EAAE2yF,IAAI3yF,EAAEiyF,KAAI,EAAGlvF,GAAGA,EAAEquF,GAAGjjJ,EAAE6xD,EAAEvwC,OAAOuwC,EAAEkoB,MAAMloB,EAAE91D,MAAM81D,EAAExvD,SAASg4C,GAAErjD,KAAKmN,MAAM0tD,EAAEyyF,IAAIzyF,EAAE0yF,KAAK1yF,EAAE0yF,IAAI,QAAQ,GAAG1yF,EAAEiyF,KAAI,EAAGlvF,GAAGA,EAAEquF,GAAGjjJ,EAAE6xD,EAAEvwC,OAAOuwC,EAAEkoB,MAAMloB,EAAE91D,MAAM81D,EAAExvD,SAASwvD,EAAE91D,MAAM81D,EAAE2yF,UAAU3yF,EAAEiyF,OAAO3xF,EAAE,IAAIN,EAAE91D,MAAM81D,EAAE2yF,IAAI,MAAM3yF,EAAEmzF,kBAAkB1uJ,EAAE48D,GAAEA,GAAE,CAAC,EAAE58D,GAAGu7D,EAAEmzF,oBAAoB3yF,IAAImO,GAAG,MAAM3O,EAAEozF,0BAA0BtlH,EAAEkyB,EAAEozF,wBAAwBlkI,EAAEnL,IAAI++C,EAAE,MAAM30D,GAAGA,EAAErD,OAAOy9C,IAAG,MAAMp6C,EAAEjC,IAAImnJ,GAAEllJ,EAAE+5E,MAAMl7D,UAAU7e,EAAEyyD,EAAE2B,GAAEna,EAAEjuC,GAAE2oD,GAAGA,EAAE,CAACA,GAAGsuF,EAAEviF,EAAEpqE,EAAE+8D,EAAEnnD,EAAExG,EAAE+sD,EAAEl0B,EAAE3/B,GAAGizD,EAAE+9B,KAAKqzD,EAAEM,IAAIN,EAAEU,MAAM,IAAI9xF,EAAEyyF,IAAI/tJ,QAAQmP,EAAE1O,KAAK66D,GAAGptD,IAAIotD,EAAEwyF,IAAIxyF,EAAEwxF,GAAG,KAAK,CAAC,MAAMppG,GAAG,GAAGgpG,EAAEQ,IAAI,KAAKllH,GAAG,MAAMryB,EAAE,GAAG+tC,EAAEvpB,KAAK,CAAC,IAAIuyH,EAAEU,KAAKplH,EAAE,IAAI,IAAIk0B,GAAG,GAAGA,EAAEpoB,UAAUooB,EAAEr4B,aAAaq4B,EAAEA,EAAEr4B,YAAYluB,EAAEA,EAAEjS,QAAQw4D,IAAI,KAAKwwF,EAAEM,IAAI9wF,CAAC,KAAK,CAAC,IAAI+B,EAAEtoD,EAAE3V,OAAOi+D,KAAKrvD,GAAE+G,EAAEsoD,IAAIF,GAAE2uF,EAAE,MAAMA,EAAEM,IAAI7iF,EAAE6iF,IAAIN,EAAEG,IAAI1iF,EAAE0iF,IAAInpG,EAAEvpB,MAAM4jC,GAAE2uF,GAAG3/I,GAAEigJ,IAAItpG,EAAEgpG,EAAEviF,EAAE,MAAM,MAAMx0D,GAAG+2I,EAAEQ,KAAK/iF,EAAE+iF,KAAKR,EAAEG,IAAI1iF,EAAE0iF,IAAIH,EAAEM,IAAI7iF,EAAE6iF,KAAK9wF,EAAEwwF,EAAEM,IAAInxF,GAAEsO,EAAE6iF,IAAIN,EAAEviF,EAAEpqE,EAAE+8D,EAAEnnD,EAAExG,EAAE64B,EAAE3/B,GAAG,OAAOoB,EAAEsD,GAAE6hJ,SAASnlJ,EAAEijJ,GAAG,IAAIA,EAAEU,SAAS,EAAElxF,CAAC,CAAC,SAAS6B,GAAEra,GAAGA,IAAIA,EAAEupG,MAAMvpG,EAAEupG,IAAID,KAAI,GAAItpG,EAAEmpG,KAAKnpG,EAAEmpG,IAAI1kI,KAAK41C,IAAG,CAAC,SAASR,GAAE7Z,EAAEgpG,EAAEviF,GAAG,IAAI,IAAIpqE,EAAE,EAAEA,EAAEoqE,EAAEnqE,OAAOD,IAAIg8D,GAAEoO,EAAEpqE,GAAGoqE,IAAIpqE,GAAGoqE,IAAIpqE,IAAIgN,GAAEkgJ,KAAKlgJ,GAAEkgJ,IAAIP,EAAEhpG,GAAGA,EAAEv7B,KAAK,SAASukI,GAAG,IAAIhpG,EAAEgpG,EAAEqB,IAAIrB,EAAEqB,IAAI,GAAGrqG,EAAEv7B,KAAK,SAASu7B,GAAGA,EAAEp+C,KAAKonJ,EAAE,EAAE,CAAC,MAAMhpG,GAAG32C,GAAEigJ,IAAItpG,EAAEgpG,EAAEQ,IAAI,CAAC,EAAE,CAAC,SAASyB,GAAEjrG,GAAG,MAAM,iBAAiBA,GAAG,MAAMA,GAAGA,EAAEqpG,IAAI,EAAErpG,EAAEjuC,GAAEiuC,GAAGA,EAAEj7C,IAAIkmJ,IAAGhyF,GAAE,CAAC,EAAEjZ,EAAE,CAAC,SAASmY,GAAE6wF,EAAEviF,EAAEpqE,EAAE+8D,EAAEnnD,EAAExG,EAAE+sD,EAAEl0B,EAAE3/B,GAAG,IAAIoB,EAAE6xD,EAAExX,EAAEt5B,EAAEmyC,EAAEt9C,EAAE+pB,EAAEl7B,EAAEnO,EAAEyjF,OAAOvZ,GAAEpmB,EAAEsmB,EAAEqZ,MAAMj5D,EAAE4/C,EAAE/jE,KAAK,GAAG,OAAOmkB,EAAE5U,EAAE,6BAA6B,QAAQ4U,EAAE5U,EAAE,qCAAqCA,IAAIA,EAAE,gCAAgC,MAAMxG,EAAE,IAAI1F,EAAE,EAAEA,EAAE0F,EAAEnP,OAAOyJ,IAAI,IAAIkzD,EAAExtD,EAAE1F,KAAK,iBAAiBkzD,KAAKpyC,IAAIA,EAAEoyC,EAAEl9C,WAAW8K,EAAE,GAAGoyC,EAAE7oB,UAAU,CAAC44G,EAAE/vF,EAAExtD,EAAE1F,GAAG,KAAK,KAAK,CAAC,GAAG,MAAMijJ,EAAE,CAAC,GAAG,MAAMniI,EAAE,OAAOhrB,SAASsvJ,eAAehrG,GAAG6oG,EAAEntJ,SAAS6vD,gBAAgBz5C,EAAE4U,EAAEs5B,EAAEirG,IAAIjrG,GAAG7b,IAAIj7B,GAAEgiJ,KAAKhiJ,GAAEgiJ,IAAI5kF,EAAEh7D,GAAG64B,GAAE,GAAI74B,EAAE,IAAI,CAAC,GAAG,MAAMob,EAAErc,IAAI21C,GAAG7b,GAAG0kH,EAAExoJ,MAAM2/C,IAAI6oG,EAAExoJ,KAAK2/C,OAAO,CAAC,GAAG10C,EAAEA,GAAGu0C,GAAEp+C,KAAKonJ,EAAEx8F,aAAaloB,GAAG,MAAM74B,EAAE,IAAIjB,EAAE,CAAC,EAAEzE,EAAE,EAAEA,EAAEijJ,EAAEhvI,WAAW1d,OAAOyJ,IAAIyE,GAAGyuD,EAAE+vF,EAAEhvI,WAAWjU,IAAInK,MAAMq9D,EAAEl9D,MAAM,IAAIgK,KAAKyE,EAAEyuD,EAAEzuD,EAAEzE,GAAG,2BAA2BA,EAAEq6C,EAAE6Y,EAAE,YAAYlzD,GAAGA,KAAKo6C,GAAG,SAASp6C,GAAG,iBAAiBo6C,GAAG,WAAWp6C,GAAG,mBAAmBo6C,GAAGoY,GAAEywF,EAAEjjJ,EAAE,KAAKkzD,EAAEhnD,GAAG,IAAIlM,KAAKo6C,EAAE8Y,EAAE9Y,EAAEp6C,GAAG,YAAYA,EAAE+gB,EAAEmyC,EAAE,2BAA2BlzD,EAAE6xD,EAAEqB,EAAE,SAASlzD,EAAE4V,EAAEs9C,EAAE,WAAWlzD,EAAE2/B,EAAEuzB,EAAE30B,GAAG,mBAAmB20B,GAAGzuD,EAAEzE,KAAKkzD,GAAGV,GAAEywF,EAAEjjJ,EAAEkzD,EAAEzuD,EAAEzE,GAAGkM,GAAG,GAAG2lD,EAAEtzB,GAAG8b,IAAIwX,EAAE0zF,QAAQlrG,EAAEkrG,QAAQ1zF,EAAE0zF,QAAQtC,EAAE3oI,aAAa2oI,EAAE3oI,UAAUu3C,EAAE0zF,QAAQ7kF,EAAE0iF,IAAI,QAAQ,GAAG/oG,IAAI4oG,EAAE3oI,UAAU,IAAI85C,GAAE,YAAYsM,EAAE/jE,KAAKsmJ,EAAErsI,QAAQqsI,EAAEj3I,GAAE+U,GAAGA,EAAE,CAACA,GAAG2/C,EAAEpqE,EAAE+8D,EAAE,iBAAiBvyC,EAAE,+BAA+B5U,EAAExG,EAAE+sD,EAAE/sD,EAAEA,EAAE,GAAGpP,EAAE8sJ,KAAKnvF,GAAE39D,EAAE,GAAGioC,EAAE3/B,GAAG,MAAM8G,EAAE,IAAI1F,EAAE0F,EAAEnP,OAAOyJ,KAAKmF,GAAEO,EAAE1F,IAAIu+B,IAAIv+B,EAAE,QAAQ,YAAY8gB,GAAG,MAAMlL,EAAEqtI,EAAE/yI,gBAAgB,SAAS,MAAM0F,IAAIA,IAAIqtI,EAAEjjJ,IAAI,YAAY8gB,IAAIlL,GAAG,UAAUkL,GAAGlL,GAAGnR,EAAEzE,KAAKwyD,GAAEywF,EAAEjjJ,EAAE4V,EAAEnR,EAAEzE,GAAGkM,GAAGlM,EAAE,UAAU,MAAM2/B,GAAGA,GAAGsjH,EAAEjjJ,IAAIwyD,GAAEywF,EAAEjjJ,EAAE2/B,EAAEl7B,EAAEzE,GAAGkM,GAAG,CAAC,OAAO+2I,CAAC,CAAC,SAAS3wF,GAAErY,EAAEgpG,EAAEviF,GAAG,IAAI,GAAG,mBAAmBzmB,EAAE,CAAC,IAAI3jD,EAAE,mBAAmB2jD,EAAE0pG,IAAIrtJ,GAAG2jD,EAAE0pG,MAAMrtJ,GAAG,MAAM2sJ,IAAIhpG,EAAE0pG,IAAI1pG,EAAEgpG,GAAG,MAAMhpG,EAAEgpB,QAAQggF,CAAC,CAAC,MAAMhpG,GAAG32C,GAAEigJ,IAAItpG,EAAEymB,EAAE,CAAC,CAAC,SAASnO,GAAEtY,EAAEgpG,EAAEviF,GAAG,IAAIpqE,EAAE+8D,EAAE,GAAG/vD,GAAEkiJ,SAASliJ,GAAEkiJ,QAAQvrG,IAAI3jD,EAAE2jD,EAAEkpG,OAAO7sJ,EAAE2sE,SAAS3sE,EAAE2sE,SAAShpB,EAAEspG,KAAKjxF,GAAEh8D,EAAE,KAAK2sJ,IAAI,OAAO3sJ,EAAE2jD,EAAEupG,KAAK,CAAC,GAAGltJ,EAAEmvJ,qBAAqB,IAAInvJ,EAAEmvJ,sBAAsB,CAAC,MAAMxrG,GAAG32C,GAAEigJ,IAAItpG,EAAEgpG,EAAE,CAAC3sJ,EAAEs5F,KAAKt5F,EAAEutJ,IAAI,IAAI,CAAC,GAAGvtJ,EAAE2jD,EAAEmpG,IAAI,IAAI/vF,EAAE,EAAEA,EAAE/8D,EAAEC,OAAO88D,IAAI/8D,EAAE+8D,IAAId,GAAEj8D,EAAE+8D,GAAG4vF,EAAEviF,GAAG,mBAAmBzmB,EAAEt9C,MAAM+jE,GAAGv7D,GAAE80C,EAAEspG,KAAKtpG,EAAEupG,IAAIvpG,EAAEopG,GAAGppG,EAAEspG,SAAS,CAAC,CAAC,SAAS7uF,GAAEza,EAAE32C,EAAE2/I,GAAG,OAAOnsJ,KAAKU,YAAYyiD,EAAEgpG,EAAE,CAAC,SAASpuF,GAAEouF,EAAEviF,EAAEpqE,GAAG,IAAI+8D,EAAEnnD,EAAExG,EAAE+sD,EAAEiO,GAAG5qE,WAAW4qE,EAAE5qE,SAASib,iBAAiBzN,GAAE+/I,IAAI//I,GAAE+/I,GAAGJ,EAAEviF,GAAGx0D,GAAGmnD,EAAE,mBAAmB/8D,GAAG,KAAKA,GAAGA,EAAE8sJ,KAAK1iF,EAAE0iF,IAAI19I,EAAE,GAAG+sD,EAAE,GAAGmyC,GAAElkC,EAAEuiF,IAAI5vF,GAAG/8D,GAAGoqE,GAAG0iF,IAAIxtI,GAAEwkC,GAAE,KAAK,CAAC6oG,IAAI/2I,GAAGs0D,GAAEA,GAAEE,EAAEsjF,cAAc3wF,GAAG/8D,EAAE,CAACA,GAAG4V,EAAE,KAAKw0D,EAAE33C,WAAWkxB,GAAEp+C,KAAK6kE,EAAEja,YAAY,KAAK/gD,GAAG2tD,GAAG/8D,EAAEA,EAAE4V,EAAEA,EAAEq3I,IAAI7iF,EAAE33C,WAAWsqC,EAAEZ,GAAGqB,GAAEpuD,EAAEu9I,EAAExwF,EAAE,CAA0B,SAAS0B,GAAE7wD,EAAE2/I,EAAEviF,GAAG,IAAIpqE,EAAE+8D,EAAEnnD,EAAExG,EAAE+sD,EAAES,GAAE,CAAC,EAAE5vD,EAAEy2E,OAAO,IAAI7tE,KAAK5I,EAAE3G,MAAM2G,EAAE3G,KAAKumJ,eAAex9I,EAAEpC,EAAE3G,KAAKumJ,cAAcD,EAAE,OAAO/2I,EAAE5V,EAAE2sJ,EAAE/2I,GAAG,OAAOA,EAAEmnD,EAAE4vF,EAAE/2I,GAAGumD,EAAEvmD,QAAQ,IAAI+2I,EAAE/2I,IAAI,MAAMxG,EAAEA,EAAEwG,GAAG+2I,EAAE/2I,GAAG,OAAOjI,UAAU1N,OAAO,IAAIk8D,EAAE5zC,SAAS5a,UAAU1N,OAAO,EAAE0jD,GAAEp+C,KAAKoI,UAAU,GAAGy8D,GAAG/gC,GAAEr8B,EAAE3G,KAAK81D,EAAEn8D,GAAGgN,EAAEvF,IAAIs1D,GAAG/vD,EAAE6/I,IAAI,KAAK,CCGvkT,SAASuC,GAAan5I,GACnC,MAAmB,iBAARA,GAA4B,OAARA,GACzB,aAAcA,GACbA,EAAI89B,WAAar8B,KAAKs8B,YAC/B,CDP8mU2P,GAAEI,GAAErgD,MAAMsJ,GAAE,CAACigJ,IAAI,SAAStpG,EAAE32C,EAAE2/I,EAAEviF,GAAG,IAAI,IAAIpqE,EAAE+8D,EAAEnnD,EAAE5I,EAAEA,EAAE+/I,IAAI,IAAI/sJ,EAAEgN,EAAEkgJ,OAAOltJ,EAAE+sJ,GAAG,IAAI,IAAIhwF,EAAE/8D,EAAEkB,cAAc,MAAM67D,EAAEsyF,2BAA2BrvJ,EAAEk1I,SAASn4E,EAAEsyF,yBAAyB1rG,IAAI/tC,EAAE5V,EAAEwtJ,KAAK,MAAMxtJ,EAAEsvJ,oBAAoBtvJ,EAAEsvJ,kBAAkB3rG,EAAEymB,GAAG,CAAC,GAAGx0D,EAAE5V,EAAEwtJ,KAAK53I,EAAE,OAAO5V,EAAE+tJ,IAAI/tJ,CAAC,CAAC,MAAMgN,GAAG22C,EAAE32C,CAAC,CAAC,MAAM22C,CAAC,GAAGgpG,GAAE,EAAwDniI,GAAEzkB,UAAUmvI,SAAS,SAASvxF,EAAE32C,GAAG,IAAI2/I,EAAEA,EAAE,MAAMnsJ,KAAK0tJ,KAAK1tJ,KAAK0tJ,KAAK1tJ,KAAKiF,MAAMjF,KAAK0tJ,IAAI1tJ,KAAK0tJ,IAAItxF,GAAE,CAAC,EAAEp8D,KAAKiF,OAAO,mBAAmBk+C,IAAIA,EAAEA,EAAEiZ,GAAE,CAAC,EAAE+vF,GAAGnsJ,KAAKijF,QAAQ9/B,GAAGiZ,GAAE+vF,EAAEhpG,GAAG,MAAMA,GAAGnjD,KAAK2sJ,MAAMngJ,GAAGxM,KAAKytJ,IAAIvtJ,KAAKsM,GAAG2gJ,GAAEntJ,MAAM,EAAEgqB,GAAEzkB,UAAUwpJ,YAAY,SAAS5rG,GAAGnjD,KAAK2sJ,MAAM3sJ,KAAKysJ,KAAI,EAAGtpG,GAAGnjD,KAAKwtJ,IAAIttJ,KAAKijD,GAAGgqG,GAAEntJ,MAAM,EAAEgqB,GAAEzkB,UAAUilB,OAAO84B,GAAE9jD,GAAE,GAAG4V,GAAE,mBAAmBkD,QAAQA,QAAQ/S,UAAUq0B,KAAK/4B,KAAKyX,QAAQC,WAAWtW,WAAW2M,GAAE,SAASu0C,EAAE32C,GAAG,OAAO22C,EAAEwpG,IAAIH,IAAIhgJ,EAAEmgJ,IAAIH,GAAG,EAAE1uF,GAAEsvF,IAAI,EAAEzxF,GAAE,8BAA8Bl0B,GAAE,EAAE3/B,GAAEy1D,IAAE,GAAIr0D,GAAEq0D,IAAE,GEa59V,ICKA,GAdA,SAA0B5zD,GAQxB,IAPA,IAAIya,EAOGza,IAAYA,EAAQ8nD,KAEzB9nD,EAAUA,EAAQ0oB,WAEpB,OAA+B,OAAvBjO,EAAWza,QAAwB,EAAIya,EAASqtC,GAC1D,ECAe,MAAMu9F,GACnB,WAAAtuJ,CAAYuuJ,EAAMpuE,GAChB7gF,KAAKivJ,KAAOA,EACZjvJ,KAAK6gF,KAAe,MAARA,EAAeA,EAAO,CAAC,CACrC,CACA,cAAAquE,GACE,MAAM,QACJ/1E,GACEn5E,KAAKivJ,KAAKjrJ,WACd,OAAmB,MAAXm1E,OAAuB,EAAIA,EAAQn5E,KAAKsoB,MAAQ,CAAC,CAC3D,CACA,cAAA6mI,CAAe/3H,GACb,MAAM,QACJ+hD,GACEn5E,KAAKivJ,KAAKjrJ,WACdhE,KAAKivJ,KAAKva,SAAS,CACjBv7D,QAAS,IACJA,EACH,CAACn5E,KAAKsoB,IAAK,IACN6wD,EAAQn5E,KAAKsoB,OACb8O,KAIX,CACA,UAAAksH,CAAWC,GACTvjJ,KAAK6gF,KAAO,IACP7gF,KAAK6gF,QACL0iE,GAELvjJ,KAAKmvJ,oBAAevvJ,GACpBI,KAAKoiJ,UACP,CACA,QAAAA,GACE,MAAMgB,EAAa,IAAIxP,GAAW,CAAC5zI,KAAK6hJ,cAAe7hJ,KAAKivJ,KAAKh5E,OAAQj2E,KAAK6gF,KAAK5K,SACnFj2E,KAAK0iJ,KAAOU,EAAWnkE,UAAUp+E,KAAKuiJ,GACtCpjJ,KAAKqjJ,UAAYD,EAAWlP,eAAerzI,KAAKuiJ,GAChDpjJ,KAAKmvJ,oBAAevvJ,EACtB,CAUA,SAAAwvJ,CAAU/tC,GACR,MAAM,IAAIl6F,MAAM,4EAClB,CACA,OAAAgiI,GAAW,CACX,SAAAI,GAAa,CAGb,MAAAnyH,CAAOnyB,GAAQ,CAGf,WAAAwzG,GAAe,EC3EjB,SAAS,GAA4BhgE,EAAUm6F,GAAc,IAAK3nI,OAAO1F,UAAU2F,eAAenG,KAAK0zC,EAAUm6F,GAAe,MAAM,IAAItoI,UAAU,kDAAqD,OAAOmuC,CAAU,CAC1N,IAAI,GAAK,EACT,SAAS,GAA2B15C,GAAQ,MAAO,aAAe,KAAO,IAAMA,CAAM,CAqCrF,IAAIswJ,GAAyB,GAA2B,YACxD,MAAMC,WAAiBN,GACrB,WAAAtuJ,GACE0X,SAASjL,WACTlC,OAAOoK,eAAerV,KAAMqvJ,GAAW,CACrCr1E,UAAU,EACV96E,WAAY,GAEhB,CACA,eAAAqwJ,CAAgBr9I,GAEd,IAAIs9I,EACJ,GAA4D,mBAAtC,MAAVt9I,OAAsB,EAAIA,EAAOk9I,WAE3CI,EAAet9I,EACTs9I,aAAwBF,IAE5B3vJ,QAAQ07B,KAAK,IAAIlU,MAAM,mHAAoH,CACzIsoI,MAAO,CACLD,eACAF,qBAID,GAAsB,mBAAXp9I,EAAuB,CAEvC,MAAMw9I,EAASx9I,EAEflS,KAAKivJ,KAAKrM,eAAel5E,IACnBA,aAAagmF,IACfF,EAAe9lF,IAGrB,CACA,OAAO8lF,CACT,CAOA,KAAAG,CAAMz9I,EAENmvG,GACE,MAAMuuC,EAAmBvuC,EAAO/4F,GAC1Bob,GHpFc/5B,EGoFiBuI,OHnFlB,IAAjB3G,IACFA,EAAUvM,UAEW,iBAAZ2K,EACF4B,EAAQ1B,cAAcF,GAE3BilJ,GAAajlJ,GACRA,EAEF,MAVT,IAAwBA,EAAS4B,EGqF7B,GAAIm4B,EAAe,CACjB1jC,KAAK6vJ,eAAgB,EAIrB,MAAMC,EAAkB9wJ,SAASmK,cAAc,OA0B/C,OAzBA2mJ,EAAgB1wJ,UAAUqJ,IAAI,aAG9B,GAA4BzI,KAAMqvJ,IAAWA,IApFnD,SAAkB/jJ,GAChB,IACIykJ,EADAC,EAAU,KAEd,OAAO,WACL,IAAK,IAAInb,EAAO1nI,UAAU1N,OAAQqJ,EAAO,IAAI4D,MAAMmoI,GAAOrgG,EAAO,EAAGA,EAAOqgG,EAAMrgG,IAC/E1rC,EAAK0rC,GAAQrnC,UAAUqnC,GAazB,OAXAu7G,EAAajnJ,EACRknJ,IACHA,EAAU13I,QAAQC,UAAUqhB,KAAK,KAC/Bo2H,EAAU,KAKH1kJ,KAAMykJ,MAGVC,CACT,CACF,CAgEgE,CAAS/qJ,IAI5DjF,KAAKivJ,KAAK7uC,UAAUpgH,KAAKsoB,MAC9B,GAAOtoB,KAAKwqB,OAAOvlB,GAAQ6qJ,GAC3B9vJ,KAAKy4G,iBAEPz4G,KAAKivJ,KAAKnvJ,IAAI,cAAc8vJ,uBAAsC19I,MAC9DlS,KAAK6gF,KAAKovE,uBAIZvsH,EAAclgB,UAAY,IAE5B,GAAOxjB,KAAKwqB,OAAOxqB,KAAKivJ,KAAKjrJ,YAAa8rJ,GAC1C9vJ,KAAKusF,GAAKujE,EACVpsH,EAAc/sB,YAAYm5I,GAG1BA,EAAgBr+F,IAAMzxD,KAAK6gF,KAAK4M,WAAa,GAAiBqiE,IAAoB,MAClF9vJ,KAAKkwJ,UACElwJ,KAAKusF,EACd,CACA,MAAMijE,EAAexvJ,KAAKuvJ,gBAAgBr9I,GAC1C,GAAIs9I,EAKF,OAJAxvJ,KAAKivJ,KAAKnvJ,IAAI,cAAc8vJ,QAAuBJ,EAAalnI,MAChEtoB,KAAKo5D,OAASo2F,EACdxvJ,KAAKusF,GAAKijE,EAAaJ,UAAU/tC,GACjCrhH,KAAKkwJ,UACElwJ,KAAKusF,GAEdvsF,KAAKivJ,KAAKnvJ,IAAI,kBAAkB8vJ,KAChC,IAAIpqJ,EAAU,kCAAkCoqJ,KAMhD,MAJEpqJ,GADoB,mBAAX0M,EACE,+UAEA,yWAEP,IAAIiV,MAAM3hB,EAClB,CASA,MAAAglB,CAAOvlB,GACL,MAAM,IAAIkiB,MAAM,+DAClB,CACA,MAAAiQ,CAAOnyB,GAEH,IAAImlJ,EAAuB+F,EADd,MAAXnwJ,KAAKusF,KAEyG,OAA/G69D,GAAyB+F,EAAyB,GAA4BnwJ,KAAMqvJ,KAAYA,MAAuBjF,EAAsBrlJ,KAAKorJ,EAAwBlrJ,GAE/K,CACA,OAAAypJ,GAEI,IAAI0B,EADFpwJ,KAAK6vJ,gBAEiB,OAAvBO,EAAWpwJ,KAAKusF,KAAe6jE,EAAS7oJ,UAE3CvH,KAAKqwJ,WACP,CACA,OAAAH,GAAW,CACX,SAAAG,GAAa,EAEf,UCxJe,SAASC,GAAUC,EAAUC,EAAuBC,EAAUC,GAC3E,OAAiB,IAAbD,GAAkBF,IAAaC,EAA8BD,EACtD,IAAPG,EAAiBF,EACdD,GAAYC,EAAwBD,GAAY,KAAOG,EAAKD,EACrE,CCfA,QACEE,YAAa,QACbC,cAAe,UACfC,oBAAqB,gBACrBC,gBAAiB,YACjBC,qBAAsB,iBACtBC,eAAgB,Y,UCNH,SAASC,GAA4BnyJ,GAClD,MAAMuf,EAAS,GACf,IACI7Y,EADAq/B,EAAO,gBAEX,IAAK,MAAM,SACTssD,KACGlmF,OAAOoT,OAAOvf,GAAQ,CACzB,MAAM,WACJymJ,EAAU,YACVC,GACEr0D,EAGW,MAAX3rF,IAAoB+/I,GAAcC,MAGlC3gH,OACAr/B,WACE+/I,GAAcC,GAEoC,iBAArC,MAAdD,OAA0B,EAAIA,EAAW1gH,OAAyBxmB,EAAOne,KAAKqlJ,EAAWrmJ,OACpC,iBAAtC,MAAfsmJ,OAA2B,EAAIA,EAAY3gH,OAAyBxmB,EAAOne,KAAKslJ,EAAYtmJ,MACnG,CAIA,MAAO,CACL2lC,OACAr/B,UACAtG,MANYmf,EAAOE,OAAO,CAACykF,EAAOkuD,IAC3BluD,EAAQkuD,EAAgB7yI,EAAO5e,OACrC,GAML,CC9Be,SAAS0xJ,GAAUC,GAChC,MAAM5wJ,GCF8B6wJ,EDETD,ECEpB,CACLE,MAJYjvJ,KAAKuI,MAAMymJ,EAAa,MAAQ,GAK5CE,QAJclvJ,KAAKuI,MAAMymJ,EAAa,IAAM,GAK5CD,QAJc/uJ,KAAKuI,MAAMymJ,EAAa,MAH3B,IAAuBA,EDUpC,MAAO,GAHyB,IAAf7wJ,EAAK8wJ,MAAc,GAAK,GAAG9wJ,EAAK8wJ,WACb,IAAjB9wJ,EAAK+wJ,QAAgB,GAAK,GAAkB,IAAf/wJ,EAAK8wJ,MAAc9wJ,EAAK+wJ,QAAU,IAAI/wJ,EAAK+wJ,QAAQ/iJ,SAAS,IAAIgjJ,SAAS,EAAG,YAC1F,IAAfhxJ,EAAK8wJ,MAAc,GAAK,GAAoB,IAAjB9wJ,EAAK+wJ,QAAgB/wJ,EAAK4wJ,QAAU,IAAI5wJ,EAAK4wJ,QAAQ5iJ,SAAS,IAAIgjJ,SAAS,EAAG,WAE9H,CEJA,SAASC,GAAUxuE,GACjB,MAAM,SACJ6hE,EAAQ,gBACRW,EAAe,eACf7G,EAAc,KACd8D,EAAI,YACJgP,EAAW,YACX5L,EAAW,YACX6L,GACE1uE,EACE2uE,EAAsB,GAAW,eAAgB,aAAc,2BAA4B,mCAAoC,CACnI,qBAAsBF,IAAgB,GAAgBd,eACrD,CACD,qCAAsC9K,IAElC+L,EAAiEnP,EAAjDoC,GAAYW,IAAoB7G,EAAsB,kBAElE,eAFqF,CAC7FzK,YAAa2Q,IAIf,OAAO,GAAE,SAAU,CACjBj/I,KAAM,SACN4sB,UAAWm/H,EACX,aAAclP,EAAK,eAAgB,CACjCvO,YAAa2Q,IAEf7rE,QAAS04E,EACTn4I,SAAUssI,EACV,6BAA6B,GAC5B+L,EACL,CACA,SAASC,GAAS7uE,GAChB,MAAM,KACJy/D,EAAI,KACJuM,GACEhsE,EACJ,OAAO,GAAE,SAAU,CACjBp9E,KAAM,SACN4sB,UAAW,mFACX,aAAciwH,EAAK,eACnBzpE,QAAS,IAAMg2E,EAAKtH,WAAWzvF,MAAM,QAGrC,6BAA6B,EAC7B,UAAW,SACV,GAAE,MAAO,CACV,cAAe,OACf65F,UAAW,QACXt/H,UAAW,cACXN,MAAO,IACP4hC,OAAQ,KACRi+F,QAAS,YACR,GAAE,OAAQ,CACX98I,EAAG,wLACAwtI,EAAK,SACZ,CACA,SAASuP,GAAUhvE,GACjB,MAAM,KACJy/D,EAAI,KACJuM,GACEhsE,EACJ,OAAO,GAAE,SAAU,CACjBp9E,KAAM,SACN4sB,UAAW,8CACXupD,MAAO0mE,EAAK,UACZ,aAAcA,EAAK,UACnBzpE,QAAS,IAAMg2E,EAAKlH,YACpB,UAAW,SACX,6BAA6B,GAC5B,GAAE,MAAO,CACV,cAAe,OACfgK,UAAW,QACXt/H,UAAW,cACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,IAAK,CACRryE,KAAM,OACNuyE,SAAU,WACT,GAAE,SAAU,CACbvyE,KAAM,OACNwyE,GAAI,IACJC,GAAI,IACJ71F,EAAG,MACD,GAAE,OAAQ,CACZojB,KAAM,OACNzqE,EAAG,sIAEP,CACA,SAASm9I,GAAkBpvE,GACzB,MAAM,YACJ2iE,EAAW,KACXlD,EAAI,cACJgD,EAAa,iBACbjD,EAAgB,KAChBwM,GACEhsE,EACEjH,EAAsB0mE,EAAdkD,EAAmB,SAAiB,SAalD,OAAO,GAAE,SAAU,CACjB5pE,MAAOA,EACP,aAAcA,EACdvpD,UAAW,8CACX5sB,KAAM,SACNozE,QAjBF,WACMysE,IACCjD,EAIDmD,EACFqJ,EAAKvH,YAGPuH,EAAKzH,WAPHyH,EAAKlH,YAQT,EAOE,UAAW,oBACX,6BAA6B,GAC5B,GAAE,MAAO,CACV,cAAe,OACfgK,UAAW,QACXt/H,UAAW,cACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,IAAK,CACRryE,KAAM,OACNuyE,SAAU,WACT,GAAE,SAAU,CACbvyE,KAAM,OACNwyE,GAAI,IACJC,GAAI,IACJ71F,EAAG,MACD,GAAE,OAAQ,CACZojB,KAAM,OACNzqE,EAAG0wI,EAAc,0BAA4B,qCAEjD,CACA,SAAS0M,GAAQrvE,GACf,MAAM,KACJy/D,EAAI,kBACJ6P,GACEtvE,EACJ,OAAO,GAAE,SAAU,CACjBp9E,KAAM,SACN4sB,UAAW,kFACXwmD,QAASs5E,EACT,6BAA6B,GAC5B7P,EAAK,QACV,CACA,SAAS8P,KACP,OAAO,GAAE,MAAO,CACd//H,UAAW,yBACX,cAAe,OACfs/H,UAAW,QACX5/H,MAAO,KACP4hC,OAAQ,MACP,GAAE,OAAQ,CACX7+C,EAAG,ubACHg9I,SAAU,YAEd,CACA,SAASO,GAAsBxvE,GAC7B,MAAM,SACJkO,GACElO,GACE,MACJ/jF,EAAK,KACL2lC,EAAI,QACJr/B,GACE2rF,EAEJ,OAAO,GAAE,MAAO,CACd1+D,UAAW,0BACV,GAAE+/H,GAAgB,MAAgB,gBAAT3tH,EAAyB,GAAGxiC,KAAKyI,MAAc,IAAR5L,SAA0B,GAAIsG,EACnG,CACA,SAASktJ,GAAgBzvE,GACvB,MAAM,WACJ0vE,EAAU,SACVh5I,EAAQ,kBACRi5I,EAAiB,UACjBpK,EAAS,SACTqK,EAAQ,KACRnQ,GACEz/D,EACE6vE,EAA6BH,EAAa,EAChD,OAAO,GAAE,MAAO,CACdlgI,UAAW,kCACVqgI,GAA8BpQ,EAAK,uBAAwB,CAC5D/oI,WACAw6H,YAAawe,IACX,GAAE,OAAQ,CACZlgI,UAAW,iCACVqgI,GAlMmB,MAkMwBpQ,EAAK,sBAAuB,CACxE/oI,SAAU6hI,GAAcoX,GACxB5vD,MAAOw4C,GAAcgN,KApMD,MAqML9F,EAAK,YAAa,CACjCliJ,KAAM2wJ,GAAU0B,MAEpB,CACA,SAASE,GAAgB9vE,GACvB,MAAM,KACJy/D,EAAI,SACJ/oI,EAAQ,WACRg5I,GACE1vE,EACJ,OAAO,GAAE,MAAO,CACdxwD,UAAW,kCACViwH,EAAK,uBAAwB,CAC9B/oI,WACAw6H,YAAawe,IAEjB,CACA,SAASK,GAAsB/vE,GAC7B,MAAM,KACJy/D,EAAI,SACJoC,EAAQ,YACR6M,GACE1uE,EACE2uE,EAAsB,GAAW,eAAgB,aAAc,2BAA4B,8CACjG,OAAO,GAAE,MAAO,CACdn/H,UAAW,kCACV,GAAE,MAAO,CACVA,UAAW,sCACViwH,EAAK,kBAAmB,CACzBvO,YAAa2Q,KACV,GAAE,SAAU,CACfj/I,KAAM,SACN4sB,UAAWm/H,EACX,aAAclP,EAAK,eAAgB,CACjCvO,YAAa2Q,IAEf7rE,QAAS04E,GACRjP,EAAK,WACV,CACA,SAASuQ,GAAqBhwE,GAC5B,MAAM,KACJy/D,EAAI,uBACJzJ,EAAsB,cACtByF,EAAa,oBACbwU,EAAmB,gBACnBzN,EAAe,cACfC,EAAa,YACbE,EAAW,SACXd,EAAQ,WACR6N,EAAU,SACVh5I,EAAQ,kBACRi5I,EAAiB,UACjBpK,EAAS,SACTqK,EAAQ,YACRlB,GACE1uE,EACEkwE,EAA4BrO,GAAYW,EAC9C,IAAKA,GAAmBC,EACtB,OAAO,KAET,MAAM1pE,EAAsB0mE,EAAdkD,EAAmB,SAAiB,aAqBlD,OAAO,GAAE,MAAO,CACdnzH,UAAW,yBACX,aAAcupD,EACdA,MAAOA,GACL4pE,EAAwC,KAA1B,GAAE4M,GAAgB,MAAc,GAAE,MAAO,CACzD//H,UAAW,yBACV,GAAE,MAAO,CACVA,UAAW,gCACVwmH,EAAyB,GAAGj9D,MAAU0iE,KAAmB1iE,GA3BrD4pE,GAAgBuN,IAA6BD,EAiB3C,KAhBDja,EACK,GAAEyZ,GAAiB,CACxBC,WAAYA,EACZh5I,SAAUA,EACVi5I,kBAAmBA,EACnBpK,UAAWA,EACXqK,SAAUA,EACVnQ,KAAMA,IAGH,GAAEqQ,GAAiB,CACxBrQ,KAAMA,EACN/oI,SAAUA,EACVg5I,WAAYA,IAa2EQ,EAA4B,GAAEH,GAAuB,CAChJtQ,KAAMA,EACNoC,SAAUA,EACV6M,YAAaA,IACV,MACP,CACA,SAASyB,GAAoBnwE,GAC3B,MAAM,KACJy/D,GACEz/D,EACJ,OAAO,GAAE,MAAO,CACdxwD,UAAW,yBACXy7B,KAAM,SACN8tB,MAAO0mE,EAAK,aACX,GAAE,MAAO,CACVjwH,UAAW,yBACV,GAAE,MAAO,CACVA,UAAW,gCACV,GAAE,MAAO,CACV,cAAe,OACfs/H,UAAW,QACXt/H,UAAW,6CACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,yEACAwtI,EAAK,cACZ,CACA,SAAS2Q,GAAiBpwE,GACxB,MAAM,MACJz+E,EAAK,KACLk+I,EAAI,SACJ/oI,EAAQ,WACRg5I,GACE1vE,EAMJ,OAAO,GAAE,MAAO,CACdxwD,UAAW,yBACXupD,MAAO0mE,EAAK,iBACX,GAAE,MAAO,CACV,cAAe,OACfqP,UAAW,QACXt/H,UAAW,6CACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,mHACA,GAAE,MAAO,CACZud,UAAW,yBACV,GAAE,MAAO,CACVA,UAAW,gCACViwH,EAAK,gBAAiB,GAAE,SAAU,CACnCjwH,UAAW,sCACX,aAAciwH,EAAK,oBACnB,yBAA0B,YAC1B,qBAAsB,SACtBzpE,QA1BF,WACE,MAAMq6E,EAAe,GAAG5Q,EAAK,wBAAwBl+I,IAErD+uJ,MAAMD,EACR,EAuBEztJ,KAAM,UACL,MAAO,GAAEktJ,GAAiB,CAC3BrQ,KAAMA,EACN/oI,SAAUA,EACVg5I,WAAYA,KAEhB,CCpWA,MAAM,YACJhC,GAAW,cACXC,GAAa,oBACbC,GAAmB,gBACnBC,GAAe,qBACfC,GAAoB,eACpBC,IACE,GAEW,SAAS,GAAU/tE,GAChC,MAAM,SACJ6hE,EAAQ,eACRnG,EAAc,mBACdkH,EAAkB,YAClBD,EAAW,iBACXnD,EAAgB,MAChBj+I,EAAK,iBACLgvJ,EAAgB,sBAChBC,EAAqB,iBACrBC,EAAgB,gBAChBC,EAAe,eACf/U,EAAc,YACd8S,EAAW,cACXhT,EAAa,MACb5/I,EAAK,uBACLm6I,EAAsB,gBACtB2a,EAAe,YACf9N,EAAW,kBACXyM,EAAiB,gBACjB9M,EAAe,KACf/C,EAAI,YACJiP,EAAW,KACX1C,EAAI,cACJvJ,EAAa,oBACbwN,EAAmB,WACnBP,EAAU,SACVh5I,EAAQ,UACR6uI,EAAS,SACTqK,EAAQ,kBACRD,GACE3vE,EA6DEiuE,EA5DN,WACE,OAAQQ,GACN,KAAKX,GACL,KAAKF,GACH,CACE,MAAM1/D,EAAW8/D,GAA4BnyJ,GAC7C,MAAsB,gBAAlBqyF,EAAStsD,KACa,IAAjBssD,EAASjyF,MAEXw/I,CACT,CACF,KAAKiS,GAED,OAAO,KAEX,KAAKG,GAED,OAAK7X,EAGEyF,EAFE,KAIb,QACE,OAAOA,EAEb,CAmCsBmV,GAChBC,EAdN,WACE,GAAIlV,EACF,OAAO,EAET,OAAQ8S,GACN,KAAKd,GACH,OAAO4C,GAAiC,IAAb1O,EAC7B,KAAKkM,GACH,OAAO4C,EACT,QACE,OAAO,EAEb,CAEiBG,GACX5hI,EAAyB,MAAjB++H,EAAwBA,EAAgB,IAChD8C,GAAiBxvJ,GAASsgJ,IAAae,IAAuBD,GAAejH,IAAmB6U,EAChGS,GAAiBP,GAAoBhC,IAAgBd,IAAiBc,IAAgBV,GACtFkD,EAAqBzR,IAAqBgR,GAAyB/B,IAAgBZ,GACnFqD,EAAe3vJ,IAAUkhJ,IAAkBiO,EAC3CS,EAAc7B,GAAqBb,IAAgBV,GACnDqD,EAAqB,GAAW,0BAA2B,CAC/D,mBA3CF,WACE,OAAQ3C,GACN,KAAKX,GACL,KAAKF,GACH,CACE,MAAM,KACJhsH,GACEosH,GAA4BnyJ,GAChC,MAAgB,kBAAT+lC,CACT,CACF,KAAKisH,GAED,OAAK7X,EAKT,QACE,OAAO,EAEb,CAuBsBqb,KAKtB,OAAO,GAAE,MAAO,CACd7hI,UAJ0B,GAAW,iBAAkB,MAAMi/H,IAAe,CAC5E,aAAc5L,IAId,cAAegO,GACd,GAAE,MAAO,CACVrhI,UAAW4hI,EACXniI,MAAO,CACLC,MAAO,GAAGA,MAEZ+7B,KAAM,cACN,aAAc,GAAG/7B,KACjB,iBAAkB,GAAGA,KACrB,gBAAiB,EACjB,gBAAiB,IACjB,gBAAiB++H,IACf,MACF,OAAQQ,GACN,KAAKb,GACL,KAAKE,GACH,OAAO,GAAE0B,GAAuB,CAC9BthE,SAAU8/D,GAA4BnyJ,KAE1C,KAAKkyJ,GACH,OAAO,GAAEoC,GAAqB,CAC5B1Q,KAAMA,IAEV,KAAKiO,GACH,OAAO,GAAE0C,GAAkB,CACzB7uJ,MAAOA,EACPk+I,KAAMA,EACNiQ,WAAYA,EACZh5I,SAAUA,IAEd,KAAKm3I,GACH,OAAO,GAAEmC,GAAsB,CAC7BvQ,KAAMA,EACNzJ,uBAAwBA,EACxByF,cAAeA,EACfwU,oBAAqBA,EACrBzN,gBAAiBA,EACjBC,cAAeA,EACfE,YAAaA,EACbd,SAAUA,EACV6N,WAAYA,EACZh5I,SAAUA,EACVi5I,kBAAmBA,EACnBpK,UAAWA,EACXqK,SAAUA,EACVlB,YAAaA,IAEjB,QACE,OAAO,KAEZ,EAtCG,GAsCE,GAAE,MAAO,CACbl/H,UAAW,0BACVmsH,GAAkBoV,EAAgB,GAAEvC,GAAW,CAChD3M,SAAUA,EACVW,gBAAiBA,EACjB7G,eAAgBA,EAChB8D,KAAMA,EACNoD,YAAaA,EACb6L,YAAaA,EACbD,YAAaA,IACV,KAAMyC,EAAe,GAAErC,GAAU,CACpCpP,KAAMA,EACNuM,KAAMA,IACH,KAAMiF,EAAqB,GAAE7B,GAAmB,CACnDzM,YAAaA,EACblD,KAAMA,EACNgD,cAAeA,EACfjD,iBAAkBA,EAClBwM,KAAMA,IACH,KAAMgF,EAAgB,GAAEhC,GAAW,CACtCvP,KAAMA,EACNuM,KAAMA,IACH,KAAMmF,EAAc,GAAE9B,GAAS,CAClC5P,KAAMA,EACN6P,kBAAmBA,IAChB,MACP,CACA,GAAUnG,aAAe,CACvBmG,uBAAmB3yJ,EACnBg0J,iBAAiB,EACjBF,kBAAkB,EAClBD,uBAAuB,EACvBE,iBAAiB,EACjBH,sBAAkB5zJ,EAClBszJ,yBAAqBtzJ,GC9MvB,QACEwe,QAAS,CAEPm2I,UAAW,YAEX56I,SAAU,WAEV66I,aAAc,gBAEdC,OAAQ,SAERC,MAAO,QAEPzjJ,OAAQ,SAERkhC,MAAO,QAEP1vB,OAAQ,SAERkyI,KAAM,OAENC,qBAAsB,CACpB,EAAG,8CACH,EAAG,gDAGLC,oBAAqB,0BAErBC,UAAW,eAEXC,aAAc,CACZ,EAAG,6BACH,EAAG,+BAILC,gBAAiB,CACf,EAAG,8BACH,EAAG,gCAEL7K,OAAQ,SACRnC,YAAa,eACbiN,gBAAiB,CACf,EAAG,iCACH,EAAG,mCAELC,iBAAkB,uBC9CtB,SAAS,GAA4Bz8G,EAAUm6F,GAAc,IAAK3nI,OAAO1F,UAAU2F,eAAenG,KAAK0zC,EAAUm6F,GAAe,MAAM,IAAItoI,UAAU,kDAAqD,OAAOmuC,CAAU,CAC1N,IAAI,GAAK,EACT,SAAS,GAA2B15C,GAAQ,MAAO,aAAe,KAAO,IAAMA,CAAM,CAcrF,SAASo2J,GAAkB3wJ,EAAOkhJ,EAAe9G,EAAgB9/I,GAC/D,GAAI0F,EACF,OAAO,GAAgBmsJ,YAEzB,GAAIjL,EACF,OAAO,GAAgBsL,eAEzB,GAAIpS,EACF,OAAO,GAAgBgS,cAEzB,IAAI3rJ,EAAQ,GAAgB2rJ,cAC5B,MAAM/J,EAAU57I,OAAO+H,KAAKlU,GAC5B,IAAK,IAAIU,EAAI,EAAGA,EAAIqnJ,EAAQpnJ,OAAQD,IAAK,CACvC,MAAM,SACJ2xF,GACEryF,EAAM+nJ,EAAQrnJ,IAElB,GAAI2xF,EAASyyD,gBAAkBzyD,EAASwyD,eACtC,OAAO,GAAgBmN,gBAIrB3/D,EAASo0D,aACXtgJ,EAAQ,GAAgB4rJ,qBAItB1/D,EAASq0D,aAAevgJ,IAAU,GAAgB4rJ,sBACpD5rJ,EAAQ,GAAgB8rJ,qBAE5B,CACA,OAAO9rJ,CACT,CAGA,MAAM,GAAiB,CACrBiN,OAAQ,OACRshJ,kBAAkB,EAClBG,iBAAiB,EACjBF,uBAAuB,EACvBC,kBAAkB,EAClBR,qBAAqB,EACrBU,iBAAiB,EACjBrB,kBAAmB,MAOrB,IAAI6C,GAA+B,GAA2B,kBAC1DC,GAAsC,GAA2B,yBACjEC,GAA8B,GAA2B,iBACzDC,GAA4B,GAA2B,eACvDC,GAAiC,GAA2B,oBAC5DC,GAA8B,GAA2B,iBAC9C,MAAMC,WAAkB,GACrC,WAAAh1J,CAAYuuJ,EAAMpuE,GAChBzoE,MAAM62I,EAAM,IACP,MACApuE,IAEL51E,OAAOoK,eAAerV,KAAMw1J,GAAmB,CAC7Ct2J,MAAOy2J,KAET1qJ,OAAOoK,eAAerV,KAAMo1J,GAAiB,CAC3Cp7E,UAAU,EACV96E,WAAY,IAEd+L,OAAOoK,eAAerV,KAAMq1J,GAAwB,CAClDr7E,UAAU,EACV96E,WAAY,IAEd+L,OAAOoK,eAAerV,KAAMs1J,GAAgB,CAC1Ct7E,UAAU,EACV96E,WAAY,IAEd+L,OAAOoK,eAAerV,KAAMu1J,GAAc,CACxCv7E,UAAU,EACV96E,WAAY,IAEdc,KAAK2xJ,YAAc,IACV3xJ,KAAKivJ,KAAK9E,SAASjyF,MAAM,QAIlCjtD,OAAOoK,eAAerV,KAAMy1J,GAAgB,CAC1Cz7E,UAAU,EACV96E,MAAO,KACL,MAAM,eACJ0/I,GACE5+I,KAAKivJ,KAAKjrJ,WAGd,GAFA,GAA4BhE,KAAMs1J,IAAgBA,IAAkB,KACpE,GAA4Bt1J,KAAMu1J,IAAcA,IAAgB,KAC5D3W,EAYF,OAXA,GAA4B5+I,KAAMq1J,IAAwBA,IAA0BpqJ,OAAOoT,OAAOugI,EAAe9/I,OAAOyf,OAAO,CAACq3I,EAAI3S,KAClI,IAAI,SACF9xD,GACE8xD,EACJ,OAAO2S,EAAKzkE,EAASuwD,eACpB,QAKH1hJ,KAAKivJ,KAAKriJ,KAAK,qBAGjB,GAA4B5M,KAAMo1J,IAAiBA,IAAmBS,YAAYz1J,MAClF,GAA4BJ,KAAMq1J,IAAwBA,IAA0B,KAGxFr1J,KAAKsoB,GAAKtoB,KAAK6gF,KAAKv4D,IAAM,YAC1BtoB,KAAKg8E,MAAQ,YACbh8E,KAAK6F,KAAO,oBACZ7F,KAAK6hJ,cAAgB,GACrB7hJ,KAAKoiJ,WACLpiJ,KAAKwqB,OAASxqB,KAAKwqB,OAAO3pB,KAAKb,MAC/BA,KAAKmpJ,QAAUnpJ,KAAKmpJ,QAAQtoJ,KAAKb,KACnC,CACA,MAAAwqB,CAAOvlB,GACL,MAAM,aACJq9I,EAAY,MACZxjJ,EAAK,eACL6/I,EAAc,cACdD,EAAa,MACbl6I,EAAK,eACLo6I,GACE35I,GACE,SACJ6/I,EAAQ,aACRC,EAAY,cACZG,EAAa,gBACbO,EAAe,cACfC,EAAa,aACbC,EAAY,YACZC,EAAW,mBACXC,EAAkB,YAClBC,GACE9lJ,KAAKivJ,KAAKtK,2BAKRmR,EAAsBlX,EAAiB3zI,OAAOoT,OAAOvf,GAASgmJ,EAC9DrC,IAAqBH,EAAaG,iBAClCxJ,GAAyD,IAAhCqJ,EAAaC,eAC5C,IAAIiG,EAAY,EACZoK,EAAoB,EACxB7N,EAAa3hH,QAAQ40G,IACnBwQ,GAAaxQ,EAAK7mD,SAASqwD,YAAc,EACzCoR,GAAqB5a,EAAK7mD,SAASuwD,eAAiB,IAEtD,MAAMmR,EAAW,GAA4B7yJ,KAAMw1J,IAAmBA,IAAmB,CACvFO,SAAUnD,EACV5vD,MAAOwlD,EACP93D,UAAW83D,EAAYoK,IAEzB,OAAO,GAAY,CACjBpuJ,QACAktJ,YAAayD,GAAkB3wJ,EAAOkhJ,EAAe9G,EAAgB35I,EAAMnG,OAAS,CAAC,GACrF6/I,iBACAD,gBACA8J,YACAoK,oBACAlN,eAAe,EACfE,cAEAD,eACAF,kBACAI,qBACAC,cACAlH,iBACAjlI,SAAUurI,EAAczlJ,OACxBqlJ,SAAUgR,EAAoBr2J,OAC9BkzJ,WAAY5N,EAAatlJ,OACzBozJ,WACA/zJ,QACA4jJ,KAAM1iJ,KAAK0iJ,KACXuM,KAAMjvJ,KAAKivJ,KACX0C,YAAa3xJ,KAAK2xJ,YAClBY,kBAAmBvyJ,KAAK6gF,KAAK0xE,kBAC7B9P,mBACAxJ,yBACAia,oBAAqBlzJ,KAAK6gF,KAAKqyE,oBAC/BM,iBAAkBxzJ,KAAK6gF,KAAK2yE,iBAC5BG,gBAAiB3zJ,KAAK6gF,KAAK8yE,gBAC3BF,sBAAuBzzJ,KAAK6gF,KAAK4yE,sBACjCC,iBAAkB1zJ,KAAK6gF,KAAK6yE,iBAC5BE,gBAAiB5zJ,KAAK6gF,KAAK+yE,gBAE3B/D,cAAe7vJ,KAAK6vJ,eAExB,CACA,OAAAK,GAEE,MAAMvmJ,EAAU3J,KAAKusF,GACH,GAAiB5iF,KAEjCA,EAAQ8nD,IAAM,MAElB,CACA,OAAA03F,GACE,MAAM,OACJj3I,GACElS,KAAK6gF,KACL3uE,GACFlS,KAAK2vJ,MAAMz9I,EAAQlS,MAErBA,KAAKivJ,KAAK1hJ,GAAG,SAAU,GAA4BvN,KAAMy1J,IAAgBA,KAIzE,GAA4Bz1J,KAAMo1J,IAAiBA,IAAmBS,YAAYz1J,MAClF,GAA4BJ,KAAMq1J,IAAwBA,IAA0Br1J,KAAKivJ,KAAKzK,WAAWjmI,OAAO,CAACq3I,EAAI5d,IAAS4d,EAAK5d,EAAK7mD,SAASuwD,cAAe,EAClK,CACA,SAAA6H,GACEvpJ,KAAK0uJ,UACL1uJ,KAAKivJ,KAAKxhJ,IAAI,SAAU,GAA4BzN,KAAMy1J,IAAgBA,IAC5E,EAEF,SAASE,GAAmBK,GAC1B,IAAI5L,EACJ,GAAyB,IAArB4L,EAAWhzD,OAAwC,IAAzBgzD,EAAWtlE,UACvC,OAAO,EAImH,OAAjG05D,EAAwB,GAA4BpqJ,KAAMo1J,KAAkBA,MAAqDhL,EAAsBgL,IAAmBS,YAAYz1J,OACjN,MAAMswJ,EAAKmF,YAAYz1J,MAAQ,GAA4BJ,KAAMo1J,IAAiBA,IAEhF,IAAIa,EADN,GAAW,IAAPvF,EAEF,OAAOruJ,KAAKyI,OAAmG,OAA3FmrJ,EAAyB,GAA4Bj2J,KAAMu1J,IAAcA,KAAyBU,EAAyB,GAAK,KAAO,GAE7J,MAAMC,EAA6BF,EAAWD,SAAW,GAA4B/1J,KAAMq1J,IAAwBA,IAMjH,IAAIc,EADN,GAJA,GAA4Bn2J,KAAMq1J,IAAwBA,IAA0BW,EAAWD,SAI3FG,GAA8B,EAEhC,OAAO7zJ,KAAKyI,OAAmG,OAA3FqrJ,EAAyB,GAA4Bn2J,KAAMu1J,IAAcA,KAAyBY,EAAyB,GAAK,KAAO,GAE7J,MAAMC,EAAeF,EAA6BxF,EAC5C2F,EAAqF,MAArE,GAA4Br2J,KAAMs1J,IAAgBA,IAA0Bc,EAAe9F,GAAU8F,EAAc,GAA4Bp2J,KAAMs1J,IAAgBA,IAtPjK,IAsPuM5E,GACjO,GAA4B1wJ,KAAMs1J,IAAgBA,IAAkBe,EACpE,MAAMC,EAAaN,EAAWtlE,UAAY2lE,EACpCE,EAAqBl0J,KAAKmN,IAAI,GAA4BxP,KAAMu1J,IAAcA,IAAgB7E,EAAI,GAClG8F,EAA+E,MAAjE,GAA4Bx2J,KAAMu1J,IAAcA,IAAwBe,EAAahG,GAAUgG,EAAYC,EAzPvG,IAyP8I7F,GAGtK,OAFA,GAA4B1wJ,KAAMu1J,IAAcA,IAAgBiB,EAChE,GAA4Bx2J,KAAMo1J,IAAiBA,IAAmBS,YAAYz1J,MAC3EiC,KAAKyI,MAAM0rJ,EAAc,KAAO,EACzC,CACAd,GAAU5gB,QAlQG,QCTE,MAAM2hB,WAAe,GAClC,WAAA/1J,GACE0X,SAASjL,WACTnN,KAAKqsJ,IfL0tB,CAAClgF,QAAQ,KeM1uB,CACA,kBAAAuqF,CAAmB1oI,GACjBhuB,KAAKqsJ,IAAIlgF,QAAQj6C,MAAME,QAAU,IACjCpyB,KAAKqsJ,IAAIlgF,QAAQj6C,MAAMykI,UAAY,OACnC10J,WAAW+rB,EATO,IAUpB,CACA,kBAAA4oI,CAAmB5oI,GACjBhuB,KAAKqsJ,IAAIlgF,QAAQj6C,MAAME,QAAU,IACjCpyB,KAAKqsJ,IAAIlgF,QAAQj6C,MAAMykI,UAAY,mBACnC10J,WAAW+rB,EAdO,IAepB,CACA,MAAAxD,GACE,MAAM,SACJzC,GACE/nB,KAAKijF,MACT,OAAO,GAAE,MAAO,CACdxwD,UAAW,yBACX45H,IAAKrsJ,KAAKqsJ,KACTtkI,EACL,ECbF,SAAS8uI,GAAO/J,EAAOvpE,GACrB,IAAIuzE,EACJ,OAA4D,OAApDA,EAAsB,MAAThK,OAAqB,EAAIA,EAAM7lJ,KAAe6vJ,EAAavzE,CAClF,CAOA,SAASwzE,GAAgBhvI,GACvB,MAAMlV,EAAM,CAAC,EACb,IAAK,IAAIrT,EAAI,EAAGA,EAAIuoB,EAAStoB,OAAQD,IAChB,MAAfuoB,EAASvoB,KAEXqT,EADYgkJ,GAAO9uI,EAASvoB,GAAIA,EAAEgP,SAAS,MAChCuZ,EAASvoB,IAGxB,OAAOqT,CACT,CACA,SAASmkJ,GAAmBttE,EAAM7B,GAChC6B,EAAOA,GAAQ,CAAC,EAChB7B,EAAOA,GAAQ,CAAC,EAChB,MAAMovE,EAAiBhwJ,GAAO4gF,EAAK38E,eAAejE,GAAO4gF,EAAK5gF,GAAOyiF,EAAKziF,GAIpEiwJ,EAAkB,CAAC,EACzB,IAAIC,EAAc,GAClB,IAAK,MAAMC,KAAW1tE,EAChB7B,EAAK38E,eAAeksJ,GAClBD,EAAY13J,SACdy3J,EAAgBE,GAAWD,EAC3BA,EAAc,IAGhBA,EAAYj3J,KAAKk3J,GAGrB,MAAMC,EAAe,CAAC,EACtB,IAAK,MAAMC,KAAWzvE,EAAM,CAC1B,GAAIqvE,EAAgBhsJ,eAAeosJ,GACjC,IAAK,IAAI93J,EAAI,EAAGA,EAAI03J,EAAgBI,GAAS73J,OAAQD,IAAK,CACxD,MAAM+3J,EAAiBL,EAAgBI,GAAS93J,GAChD63J,EAAaH,EAAgBI,GAAS93J,IAAMy3J,EAAeM,EAC7D,CAEFF,EAAaC,GAAWL,EAAeK,EACzC,CAGA,IAAK,IAAI93J,EAAI,EAAGA,EAAI23J,EAAY13J,OAAQD,IACtC63J,EAAaF,EAAY33J,IAAMy3J,EAAeE,EAAY33J,IAE5D,OAAO63J,CACT,CAEA,MAAMG,WAAwB,GAC5B,WAAA92J,CAAYuiF,EAAO13E,GACjB6M,MAAM6qE,EAAO13E,GACbvL,KAAKy3J,KAAO,CAAC,EACbz3J,KAAKiF,MAAQ,CACX8iB,SAAUgvI,GAAgB,GAAa,GAAa/2J,KAAKijF,MAAMl7D,YAAc,KAE/E/nB,KAAK03J,cAAgB13J,KAAK03J,cAAc72J,KAAKb,MAC7CA,KAAK23J,aAAe33J,KAAK23J,aAAa92J,KAAKb,MAC3CA,KAAK43J,aAAe53J,KAAK43J,aAAa/2J,KAAKb,KAC7C,CACA,kBAAA4tJ,GACE5tJ,KAAK63J,2BAA6B,CAAC,EACnC73J,KAAK83J,iBAAmB,GACxB93J,KAAK+3J,YAAc,GACnB/3J,KAAKg4J,YAAc,EACrB,CACA,iBAAAnK,GACE,MAAMoK,EAAsBj4J,KAAKiF,MAAM8iB,SACvC,IAAK,MAAM9gB,KAAOgxJ,EACZA,EAAoBhxJ,IAEtBjH,KAAK03J,cAAczwJ,EAGzB,CACA,yBAAA6mJ,CAA0BoK,GACxB,MAAMC,EAAmBpB,GAAgB,GAAamB,EAAUnwI,WAAa,IACvEqwI,EAAmBp4J,KAAKiF,MAAM8iB,SAIpC,IAAI9gB,EACJ,IAAKA,KAJLjH,KAAK00I,SAASC,IAAa,CACzB5sH,SAAUivI,GAAmBriB,EAAU5sH,SAAUowI,MAGvCA,EACV,GAAIA,EAAiBjtJ,eAAejE,GAAM,CACxC,MAAMoxJ,EAAUD,GAAoBA,EAAiBltJ,eAAejE,GAEhEkxJ,EAAiBlxJ,IAAQoxJ,GAAWr4J,KAAK63J,2BAA2B5wJ,IACtEjH,KAAK+3J,YAAY73J,KAAK+G,GACtBjH,KAAK83J,iBAAiB53J,KAAK+G,KAClBkxJ,EAAiBlxJ,IAASoxJ,GAAYr4J,KAAK63J,2BAA2B5wJ,IAC/EjH,KAAK+3J,YAAY73J,KAAK+G,EAE1B,CAEF,IAAKA,KAAOmxJ,EACV,GAAIA,EAAiBltJ,eAAejE,GAAM,CACxC,MAAMqxJ,EAAUH,GAAoBA,EAAiBjtJ,eAAejE,IAChEmxJ,EAAiBnxJ,IAASqxJ,GAAYt4J,KAAK63J,2BAA2B5wJ,IACxEjH,KAAKg4J,YAAY93J,KAAK+G,EAE1B,CAEJ,CACA,kBAAAgnJ,GACE,MAAM,YACJ8J,GACE/3J,KACJA,KAAK+3J,YAAc,GACnBA,EAAY30H,QAAQpjC,KAAK23J,cACzB,MAAM,YACJK,GACEh4J,KACJA,KAAKg4J,YAAc,GACnBA,EAAY50H,QAAQpjC,KAAK43J,aAC3B,CACA,YAAAW,CAAatxJ,GACX,MAAM6L,EAAM9S,KAAK83J,iBAAiB30J,QAAQ8D,IAC7B,IAAT6L,GACF9S,KAAK83J,iBAAiB7jJ,OAAOnB,EAAK,EAEtC,CACA,aAAA4kJ,CAAczwJ,GACZjH,KAAK63J,2BAA2B5wJ,IAAO,EACvC,MAAM85G,EAAY/gH,KAAKy3J,KAAKxwJ,GACX,MAAb85G,GAAqBA,EAAUy3C,oBACjCz3C,EAAUy3C,oBAAoBx4J,KAAKy4J,qBAAqB53J,KAAKb,KAAMiH,IAEnEjH,KAAKy4J,qBAAqBxxJ,EAE9B,CACA,oBAAAwxJ,CAAqBxxJ,GACnB,MAAM85G,EAAY/gH,KAAKy3J,KAAKxwJ,GACX,MAAb85G,GAAqBA,EAAU23C,oBACjC33C,EAAU23C,4BAEL14J,KAAK63J,2BAA2B5wJ,GACvCjH,KAAKu4J,aAAatxJ,GAClB,MAAM0xJ,EAAsB5B,GAAgB,GAAa/2J,KAAKijF,MAAMl7D,WAAa,IAC5E4wI,GAAwBA,EAAoBztJ,eAAejE,IAE9DjH,KAAK43J,aAAa3wJ,EAEtB,CACA,YAAA0wJ,CAAa1wJ,GACXjH,KAAK63J,2BAA2B5wJ,IAAO,EACvC,MAAM85G,EAAY/gH,KAAKy3J,KAAKxwJ,GACX,MAAb85G,GAAqBA,EAAU21C,mBACjC31C,EAAU21C,mBAAmB12J,KAAK44J,oBAAoB/3J,KAAKb,KAAMiH,IAEjEjH,KAAK44J,oBAAoB3xJ,EAE7B,CACA,mBAAA2xJ,CAAoB3xJ,GAClB,MAAM85G,EAAY/gH,KAAKy3J,KAAKxwJ,GACX,MAAb85G,GAAqBA,EAAU83C,mBACjC93C,EAAU83C,2BAEL74J,KAAK63J,2BAA2B5wJ,GACvCjH,KAAKu4J,aAAatxJ,GAClB,MAAM0xJ,EAAsB5B,GAAgB,GAAa/2J,KAAKijF,MAAMl7D,WAAa,IAC5E4wI,GAAwBA,EAAoBztJ,eAAejE,IAE9DjH,KAAK43J,aAAa3wJ,EAEtB,CACA,YAAA2wJ,CAAa3wJ,GAIX,IAAa,IADDjH,KAAK83J,iBAAiB30J,QAAQ8D,GAExC,OAEFjH,KAAK63J,2BAA2B5wJ,IAAO,EACvC,MAAM85G,EAAY/gH,KAAKy3J,KAAKxwJ,GACX,MAAb85G,GAAqBA,EAAU61C,mBACjC71C,EAAU61C,mBAAmB52J,KAAK84J,mBAAmBj4J,KAAKb,KAAMiH,IAKhEjH,KAAK84J,mBAAmB7xJ,EAE5B,CACA,kBAAA6xJ,CAAmB7xJ,GAIjB,IAAa,IADDjH,KAAK83J,iBAAiB30J,QAAQ8D,GAExC,OAEF,MAAM85G,EAAY/gH,KAAKy3J,KAAKxwJ,GACX,MAAb85G,GAAqBA,EAAUg4C,mBACjCh4C,EAAUg4C,2BAEL/4J,KAAK63J,2BAA2B5wJ,GACvC,MAAM0xJ,EAAsB5B,GAAgB,GAAa/2J,KAAKijF,MAAMl7D,WAAa,IACjF,GAAI4wI,GAAuBA,EAAoBztJ,eAAejE,GAE5DjH,KAAK23J,aAAa1wJ,OACb,CACL,MAAM8gB,GAnNItS,EAmNc,CAAC,EAnNVwtE,EAmNajjF,KAAKiF,MAAM8iB,SAlNpC9c,OAAOuc,OAAO/R,EAAKwtE,WAmNfl7D,EAAS9gB,GAChBjH,KAAK00I,SAAS,CACZ3sH,YAEJ,CAxNJ,IAAgBtS,EAAKwtE,CAyNnB,CACA,MAAAz4D,CAAOy4H,EAAM0H,GACX,IAAI,aACFqO,EAAY,gBACZC,EAAe,eACfC,EAAc,iBACdC,EAAgB,gBAChBC,EAAe,uBACfC,EAAsB,uBACtBC,EAAsB,wBACtBC,EAAuB,UACvBx4C,KACG99B,GACDggE,GACA,SACFl7H,GACE4iI,EAGJ,MAAM6O,EAAmBvuJ,OAAO6V,QAAQiH,GAAU7f,IAAIuxJ,IACpD,IAAKxyJ,EAAKyyJ,GAASD,EACnB,IAAKC,EAAO,OACZ,MAAMrN,EAxOZ,SAAiBtrC,EAAWhiH,GAC1B,MAAMunC,EAAQy6E,EAAU44C,iBAAmB54C,EAAU44C,eAAiB,CAAC,GACvE,OAAOrzH,EAAMvnC,KAAUunC,EAAMvnC,GAAQ0oC,IACnCs5E,EAAU02C,KAAK14J,GAAQ0oC,GAE3B,CAmOkBmyH,CAAQ55J,KAAMiH,GAC1B,OAAO,GAAa+xJ,EAAaU,GAAQ,CACvCrN,MACAplJ,UAEDY,OAAOs9C,SACV,OAAO,GAAE47D,EAAW99B,EAAOu2E,EAC7B,EAEFhC,GAAgBpL,aAAe,CAC7BrrC,UAAW,OACXi4C,aA/Lex5J,GAAKA,GAiMtB,UClPe,MAAMq6J,WAAiB,GACpC,WAAAn5J,CAAYuuJ,EAAMpuE,GAChBzoE,MAAM62I,EAAMpuE,GACZ7gF,KAAKwqB,OAASvlB,GACL,GAAE,MAAO,CACdwtB,UAAW,sBACV,GAAE,GAAiB,KAAMxtB,EAAMsxD,KAAKruD,IAAIquD,GAAQ,GAAEkgG,GAAQ,CAC3DxvJ,IAAKsvD,EAAK/wD,SACT,GAAE,IAAK,CACR0oD,KAAM,SACLqI,EAAK/wD,QAAS,IAAK+wD,EAAKxjC,SAAW,GAAE,OAAQ,CAC9C,aAAcwjC,EAAKxjC,QACnB,yBAA0B,WAC1B,qBAAsB,SACtBm7B,KAAM,UACN+qB,QAAS,IAETs6E,MAAM,GAAGh9F,EAAK/wD,gBAAgB+wD,EAAKxjC,YAClC,UAEL/yB,KAAK6F,KAAO,oBACZ7F,KAAKsoB,GAAKtoB,KAAK6gF,KAAKv4D,IAAM,WAC1BtoB,KAAKg8E,MAAQ,UACf,CACA,OAAAmtE,GACE,MAAM,OACJj3I,GACElS,KAAK6gF,KACL3uE,GACFlS,KAAK2vJ,MAAMz9I,EAAQlS,KAEvB,EAEF65J,GAAS/kB,QA1CI,QCVb,MAAMglB,GAAmB,uDCGV,SAASC,GAAY31J,GAClC,OAAOA,EAAI8W,WAAW,QACxB,CCLe,SAAS8+I,GAAmBnhB,GACzC,QAAKA,GAEE,sDAAsD5vI,KAAK4vI,EACpE,CCJA,SAAS,GAAEjqI,EAAEg7D,EAAE9hE,GAAG,OAAO8hE,KAAKh7D,EAAE3D,OAAOoK,eAAezG,EAAEg7D,EAAE,CAAC1qE,MAAM4I,EAAEwN,YAAW,EAAG+wE,cAAa,EAAGrM,UAAS,IAAKprE,EAAEg7D,GAAG9hE,EAAE8G,CAAC,CAAC,IAAI,GAAE,oBAAoBG,KAAKA,KAAK,EAAAV,EAAO,MAAM,GAAE,oBAAoB0J,UAAU,GAAE,IAAG,oBAAoBkiJ,iBAAiB,UAAI,IAAoB,EAAA5rJ,GAAQ,oBAAoB6rJ,UAAUA,QAAQC,WAAWD,QAAQC,SAASvxI,MAAM,GAAE,GAAEwxI,OAAO,KAAI,GAAE,GAAExrJ,QAAQ,IAAIA,EAAE,SAAS,GAAEA,GAAG,YAAY,IAAIA,IAAIA,aAAa4+B,IAAI,IAAI5+B,EAAEmzB,KAAK,IAAI92B,OAAOoT,OAAOzP,GAAG/G,OAAO,IAAGpI,OAAO,CAAC,SAAS,GAAEmP,GAAG,IAAIg7D,EAAE,IAAIziD,MAAMvY,GAAG,aAAag7D,EAAEqqB,MAAMrqB,CAAC,CAAC,SAAS,GAAEh7D,GAAG,IAAIg7D,EAAE,SAASh7D,GAAG,IAAIg7D,EAAE,EAAE,OAAOh7D,EAAEyrJ,KAAKp6J,UAAU2pE,GAAG,MAAMh7D,EAAE0rJ,KAAKr6J,UAAU2pE,GAAG,MAAMh7D,EAAE2rJ,YAAY3wF,GAAG,MAAMh7D,EAAE4rJ,cAAc5wF,GAAG,MAAMh7D,EAAE6rJ,IAAIx6J,UAAU2pE,GAAG,KAAKh7D,EAAE8rJ,QAAQz6J,UAAU2pE,GAAG,KAAKh7D,EAAE+rJ,KAAK16J,UAAU2pE,GAAG,MAAMA,EAAE,IAAI,CAAnN,CAAqNh7D,GAAG,OAAOA,EAAEgsJ,KAAK36J,UAAU2pE,GAAG,IAAIh7D,EAAEisJ,IAAI56J,UAAU2pE,GAAG,KAAKh7D,EAAEksJ,KAAK76J,UAAU2pE,GAAG,MAAMh7D,EAAEmsJ,IAAI96J,UAAU2pE,GAAG,KAAKA,CAAC,CAAC,MAAM,GAAEh7D,GAAGoF,OAAOgnJ,aAAa3tJ,MAAM,KAAKuB,GAAG,GAAE,oBAAoBqsJ,YAAY,IAAIA,YAAY,cAAc,EAAE,MAAM,GAAE,WAAOp8I,CAAKjQ,EAAEg7D,GAAG,OAAOh7D,aAAa5O,MAAM4O,EAAEssJ,KAAKtxF,EAAEh7D,EAAE,IAAI,GAAEA,OAAO,OAAO,EAAEg7D,EAAE,CAAC,WAAAlpE,CAAYkO,EAAEg7D,EAAE,EAAE9hE,EAAEtI,GAAG,GAAG,kBAAkBA,IAAIQ,KAAKk7J,GAAG17J,GAAGkN,MAAM+H,QAAQ7F,KAAKA,EAAE,IAAIusJ,WAAWvsJ,IAAI,IAAIA,EAAE5O,KAAKo7J,WAAW,EAAEp7J,KAAKq7J,WAAW,OAAO,GAAGzsJ,aAAa0sJ,YAAY,MAAM,IAAIxzJ,IAAIA,EAAE8G,EAAEysJ,WAAWzxF,GAAG,IAAIpqE,EAAE,IAAI+7J,SAAS3sJ,EAAEg7D,EAAE9hE,GAAG9H,KAAKw7J,cAAch8J,EAAE,MAAM,GAAGoP,aAAausJ,YAAYvsJ,aAAa2sJ,UAAU3sJ,aAAa,GAAE,MAAM,IAAI9G,IAAIA,EAAE8G,EAAEysJ,WAAWzxF,IAAIA,GAAGh7D,EAAEwsJ,YAAYtzJ,EAAE8G,EAAEwsJ,WAAWxsJ,EAAEysJ,YAAY,GAAE,4DAA4D,IAAI77J,EAAE,IAAI+7J,SAAS3sJ,EAAE6sJ,OAAO7xF,EAAE9hE,GAAG9H,KAAKw7J,cAAch8J,EAAE,MAAM,GAAG,iBAAiBoP,EAAE,CAAC,IAAIg7D,EAAE,IAAI2xF,SAAS,IAAID,YAAY1sJ,IAAI5O,KAAKw7J,cAAc5xF,EAAE,MAAM,GAAE,0CAA0Ch7D,EAAE,CAAC,gBAAA8sJ,CAAiB9sJ,GAAG5O,KAAKw7J,cAAc,IAAID,SAAS3sJ,GAAG,CAAC,WAAA+sJ,CAAY/sJ,GAAG5O,KAAKw7J,cAAc,IAAID,SAAS3sJ,EAAE6sJ,OAAO7sJ,EAAEwsJ,WAAWxsJ,EAAEysJ,YAAY,CAAC,aAAAG,CAAc5sJ,GAAG5O,KAAK47J,SAAShtJ,EAAE5O,KAAKy7J,OAAO7sJ,EAAE6sJ,OAAOz7J,KAAKo7J,WAAWxsJ,EAAEwsJ,WAAWp7J,KAAKq7J,WAAWzsJ,EAAEysJ,UAAU,CAAC,YAAAQ,CAAajtJ,GAAG,OAAO5O,KAAKq7J,WAAWzsJ,CAAC,CAAC,GAAA2I,CAAI3I,EAAEg7D,EAAE9hE,EAAE,IAAG,OAAO8G,aAAa2sJ,UAAU3sJ,aAAa,GAAEA,EAAE,IAAIusJ,WAAWvsJ,EAAE6sJ,OAAO7sJ,EAAEwsJ,WAAWxsJ,EAAEysJ,YAAYzsJ,aAAa0sJ,cAAc1sJ,EAAE,IAAIusJ,WAAWvsJ,IAAIA,aAAausJ,YAAY,GAAE,4CAA4Cn7J,KAAK87J,UAAUvkJ,IAAI3I,EAAEg7D,GAAG,IAAI9hE,EAAE9H,KAAK4pE,EAAEh7D,EAAEysJ,WAAW,CAAC,QAAAU,CAASntJ,EAAEg7D,GAAG,OAAOA,EAAEA,GAAG5pE,KAAK67J,aAAajtJ,GAAG,IAAI,GAAE5O,KAAK4O,EAAEg7D,EAAE,CAAC,OAAAkyF,GAAU,OAAO,IAAIX,WAAWn7J,KAAKy7J,OAAOz7J,KAAKo7J,WAAWp7J,KAAKq7J,WAAW,CAAC,aAAAW,CAAcptJ,EAAEg7D,GAAG,OAAO,IAAIuxF,WAAWn7J,KAAKy7J,OAAOz7J,KAAKo7J,WAAWxsJ,EAAEg7D,EAAE,CAAC,SAAAqyF,CAAUrtJ,EAAE,EAAEg7D,EAAE5pE,KAAKq7J,YAA0C,OAAO77J,EAA/BQ,KAAKg8J,cAAcptJ,EAAEg7D,GAAc,GAAE,GAAEsyF,OAAO18J,GAAG,GAAE46J,OAAOv7I,KAAKrf,GAAGgP,SAAS,QAAQ+X,mBAAmBykB,OAAO,GAAExrC,KAAK,KAAK,CAAC,eAAA28J,CAAgBvtJ,EAAE,EAAEg7D,EAAE5pE,KAAKq7J,YAAY,IAAIvzJ,EAAE9H,KAAKg8J,cAAcptJ,EAAEg7D,GAAG,OAAO,GAAE9hE,EAAE,CAAC,gBAAAs0J,CAAiBxtJ,EAAE,EAAEg7D,EAAE5pE,KAAKq7J,YAAY,MAAMvzJ,EAAE,GAAG,IAAI,IAAItI,EAAE,EAAEA,EAAEoqE,GAAGh7D,EAAEpP,EAAEQ,KAAKq7J,WAAW77J,GAAG,EAAEsI,EAAE5H,KAAKF,KAAKq8J,UAAUztJ,EAAEpP,IAAI,OAAO,GAAEsI,EAAE,CAAC,OAAAw0J,CAAQ1tJ,GAAG,OAAO5O,KAAK47J,SAASU,QAAQ1tJ,EAAE,CAAC,QAAA2tJ,CAAS3tJ,GAAG,OAAO5O,KAAK47J,SAASW,SAAS3tJ,EAAE,CAAC,QAAA4tJ,CAAS5tJ,EAAEg7D,EAAE5pE,KAAKk7J,IAAI,OAAOl7J,KAAK47J,SAASY,SAAS5tJ,EAAEg7D,EAAE,CAAC,QAAA6yF,CAAS7tJ,EAAEg7D,EAAE5pE,KAAKk7J,IAAI,OAAOl7J,KAAK47J,SAASa,SAAS7tJ,EAAEg7D,EAAE,CAAC,SAAAyyF,CAAUztJ,EAAEg7D,EAAE5pE,KAAKk7J,IAAI,OAAOl7J,KAAK47J,SAASS,UAAUztJ,EAAEg7D,EAAE,CAAC,SAAA8yF,CAAU9tJ,EAAEg7D,EAAE5pE,KAAKk7J,IAAI,OAAOl7J,KAAK47J,SAASc,UAAU9tJ,EAAEg7D,EAAE,CAAC,UAAA+yF,CAAW/tJ,EAAEg7D,EAAE5pE,KAAKk7J,IAAI,OAAOl7J,KAAK47J,SAASe,WAAW/tJ,EAAEg7D,EAAE,CAAC,UAAAgzF,CAAWhuJ,EAAEg7D,EAAE5pE,KAAKk7J,IAAI,OAAOl7J,KAAK47J,SAASgB,WAAWhuJ,EAAEg7D,EAAE,CAAC,QAAAizF,CAASjuJ,EAAEg7D,EAAE5pE,KAAKk7J,IAAI,OAAOl7J,KAAK47J,SAASe,WAAW/tJ,EAAEg7D,EAAE,CAAC,SAAAkzF,CAAUluJ,EAAEg7D,EAAE5pE,KAAKk7J,IAAI,OAAOl7J,KAAK47J,SAASgB,WAAWhuJ,EAAEg7D,EAAE,CAAC,YAAAmzF,CAAanuJ,EAAEg7D,EAAE9hE,GAAG,OAAO8hE,GAAG,KAAK,EAAE,OAAO5pE,KAAKu8J,SAAS3tJ,EAAE9G,GAAG,KAAK,EAAE,OAAO9H,KAAKq8J,UAAUztJ,EAAE9G,GAAG,KAAK,EAAE,OAAO9H,KAAK08J,UAAU9tJ,EAAE9G,GAAG,KAAK,EAAE,OAAO9H,KAAKg9J,WAAWh9J,KAAKg9J,UAAUpuJ,EAAE9G,GAAG,CAAC,OAAAm1J,CAAQruJ,EAAEg7D,EAAE9hE,GAAG,OAAO8hE,GAAG,KAAK,EAAE,OAAO5pE,KAAKu8J,SAAS3tJ,EAAE9G,GAAG,KAAK,GAAG,OAAO9H,KAAKq8J,UAAUztJ,EAAE9G,GAAG,KAAK,GAAG,OAAO9H,KAAK08J,UAAU9tJ,EAAE9G,GAAG,KAAK,GAAG,OAAO9H,KAAKg9J,WAAWh9J,KAAKg9J,UAAUpuJ,EAAE9G,GAAG,CAAC,QAAA0G,CAASI,GAAG,OAAO5O,KAAK47J,SAASptJ,SAASI,EAAE5O,KAAKU,YAAY3B,KAAK,CAAC,WAAAm+J,GAAc,EAAE,SAAS,GAAEtuJ,EAAEg7D,GAAG,GAAE,GAAGh7D,MAAMg7D,oDAAoD,CAAC,MAAM,WAAUp8B,IAAI,WAAA9sC,CAAYkO,GAAGwJ,QAAQpY,KAAKm9J,KAAKvuJ,CAAC,CAAC,GAAA2G,CAAI3G,EAAEg7D,GAAG,OAAO5pE,KAAKgL,IAAI4D,IAAI,GAAE5O,KAAKm9J,KAAKvuJ,GAAGg7D,IAAIh7D,KAAKg7D,GAAG,SAASh7D,EAAEg7D,GAAG,GAAE,WAAWh7D,MAAMg7D,MAAM,CAAvC,CAAyC5pE,KAAKm9J,KAAKvuJ,GAAGg7D,EAAEh7D,GAAG3O,SAAS,GAAED,KAAKm9J,KAAKvuJ,IAAIwJ,MAAM7C,IAAI3G,EAAE,CAAC,OAAAwuJ,GAAU,OAAO1wJ,MAAMmS,KAAK7e,KAAKgT,OAAO,EAAE,IAAI,GAAE,IAAI,GAAE,eAAe,GAAE,IAAI,GAAE,kBAAkB,GAAE,IAAI,GAAE,eAAe,IAAI,GAAE,GAAEoO,MAAM,SAAS,GAAExS,EAAEg7D,GAAG,OAAOpqE,EAAEoP,GAAGsM,WAAW,UAAU1b,EAAEC,OAAO,IAAI,GAAEmP,EAAEg7D,EAAE,UAAU,IAAGh7D,EAAE8F,SAAS,OAAO,GAAE9F,EAAEg7D,EAAE,MAAM,IAAG,GAAE,GAAEh7D,EAAEg7D,EAAE,MAAM,GAAE,GAAEh7D,EAAEg7D,EAAE,MAAM,SAAQ,GAAE,0BAA0B,KAAK,CAAC5sD,eAAe,GAAEpO,EAAEg7D,EAAE9hE,EAAEtI,GAAG,OAAO,GAAEwL,IAAIlD,GAAG,GAAE8G,EAAEg7D,EAAE9hE,GAAGtI,EAAEwd,eAAepO,EAAEg7D,GAAG,IAAI9hE,QAAQ8hE,EAAEh7D,GAAG,OAAO,IAAI,GAAE9G,EAAE,CAApDkV,CAAsDpO,EAAEpP,QAAQ,GAAE,UAAUsI,kBAAkB,CAACkV,eAAe,GAAEpO,EAAEg7D,EAAE9hE,GAAG,IAAItI,EAAE,IAAI,GAAE+V,IAAIzN,GAAV,CAAc8G,EAAEg7D,GAAG,aAAapqE,EAAEyiC,OAAOziC,CAAC,CAAC,MAAM,GAAEoP,GAAG,GAAEA,GAAGgrB,KAAMhrB,GAAGA,EAAEyuJ,eAAgB,GAAEzuJ,GAAG,IAAI0J,QAAQ,CAAEsxD,EAAE9hE,KAAK,IAAItI,EAAE,IAAI89J,WAAW99J,EAAE+9J,UAAU,IAAI3zF,EAAEpqE,EAAEqP,QAAQ,IAAIysJ,aAAa97J,EAAE0nD,QAAQp/C,EAAEtI,EAAEg+J,kBAAkB5uJ,EAAG,GAAG,MAAMquD,WAAUzvB,IAAI,WAAIiwH,GAAU,OAAOz9J,KAAKomF,UAAUpmF,KAAKomF,QAAQ15E,MAAMmS,KAAK7e,KAAKgT,SAAShT,KAAKomF,OAAO,CAAC,aAAIs3E,GAAY,OAAO19J,KAAK29J,YAAY39J,KAAK29J,UAAUjxJ,MAAMmS,KAAK7e,KAAKqe,WAAWre,KAAK29J,SAAS,EAAE,SAAS,GAAE/uJ,EAAEg7D,EAAE9hE,GAAG,IAAItI,EAAE,IAAIy9D,GAAE,IAAI,IAAIruD,EAAEg7D,KAAK9hE,EAAEtI,EAAE+X,IAAI3I,EAAEg7D,GAAG,GAAGl9D,MAAM+H,QAAQm1D,GAAG,IAAI,IAAI9hE,KAAK8hE,EAAEh7D,EAAE2I,IAAIzP,EAAEtI,QAAQoP,EAAE2I,IAAIqyD,EAAEpqE,GAAG,OAAOA,CAAC,CAAC,SAAS,GAAEoP,EAAEg7D,EAAE9hE,GAAG,IAAItI,EAAE2jD,EAAEv0C,EAAE2G,IAAIq0D,GAAG,IAAIpqE,KAAKsI,EAAEq7C,EAAE5rC,IAAI/X,EAAE,GAAGA,EAAE,GAAG,CAAC,MAAM,GAAE,IAAIguC,IAAI,GAAE,IAAIA,IAAI,GAAE,IAAIA,IAAI,GAAE,CAAC,UAAU,iBAAiB,qBAAqB,wBAAwB,YAAY,cAAc,GAAE,CAAC,OAAO,MAAM,MAAM,OAAO,QAAQ,GAAE,CAAC,UAAU,IAAG,GAAE,CAAC,OAAO,OAAO,OAAO,MAAM,WAAW,GAAE,IAAI,MAAK,IAAG,GAAE,CAAC,YAAY,eAAe,GAAE,CAAC,gBAAgB,kBAAkB,eAAe,gBAAgB,GAAE,IAAI,GAAE,WAAW,cAAc,gBAAgB,MAAM,GAAE,aAAIyxC,GAAY,OAAOj/E,KAAK49J,eAAe59J,KAAK69J,iBAAiB79J,KAAK89J,YAAY,EAAE,MAAM,WAAU,GAAE,UAAIC,GAAS,OAAO/9J,KAAKC,SAASD,KAAKg+J,KAAKj8H,KAAK,CAAC,CAAC,WAAArhC,CAAYkpE,EAAE9hE,EAAEtI,EAAE2jD,GAAG,GAAG/qC,QAAQ,GAAEpY,KAAK,WAAU,GAAI,GAAEA,KAAK,OAAO,IAAIg/B,KAAK,GAAEh/B,KAAK,OAAO,IAAIg/B,KAAK,GAAEh/B,KAAK,OAAO,IAAIg/B,KAAK,GAAEh/B,KAAK,iBAAgB,GAAI,GAAEA,KAAK,mBAAkB,GAAI,GAAEA,KAAK,gBAAe,GAAIA,KAAKiH,IAAI2iE,EAAE5pE,KAAKC,QAAQ6H,EAAE9H,KAAK8F,MAAM9F,KAAKC,QAAQD,KAAKi+J,kBAAkB96G,GAAGnjD,KAAKk+J,cAAc,GAAExpJ,SAASk1D,GAAG5pE,KAAKk+J,gBAAgBl+J,KAAKm+J,KAAK,GAAE5oJ,IAAIq0D,SAAS,IAAIpqE,EAAE,GAAGkN,MAAM+H,QAAQjV,GAAGQ,KAAK8F,MAAM9F,KAAKC,SAAQ,EAAGD,KAAKk+J,eAAe1+J,EAAEC,OAAO,GAAGO,KAAKo+J,gBAAgB5+J,EAAEQ,KAAKq+J,WAAW,GAAG,iBAAiB7+J,EAAE,CAAC,GAAGQ,KAAKC,SAAQ,EAAGD,KAAK8F,OAAM,IAAKtG,EAAEsG,MAAM9F,KAAKk+J,cAAc,CAAC,IAAIG,KAAKzvJ,EAAE24E,KAAK3d,GAAGpqE,EAAEoP,GAAGA,EAAEnP,OAAO,GAAGO,KAAKo+J,gBAAgBxvJ,EAAE5O,KAAKq+J,MAAMz0F,GAAGA,EAAEnqE,OAAO,GAAGO,KAAKo+J,gBAAgBx0F,EAAE5pE,KAAKunF,KAAK,CAACvnF,KAAKi+J,kBAAkBz+J,EAAE,MAAK,IAAKA,IAAG,IAAKA,EAAEQ,KAAK8F,MAAM9F,KAAKC,QAAQT,EAAE,GAAE,6BAA6BA,IAAI,CAAC,iBAAAy+J,CAAkBrvJ,GAAG,IAAIg7D,EAAE9hE,EAAE,IAAI8hE,KAAK,GAAE9hE,EAAE8G,EAAEg7D,QAAQ,IAAI9hE,IAAI9H,KAAK4pE,GAAG9hE,EAAE,CAAC,eAAAs2J,CAAgBxvJ,EAAEg7D,GAAG,GAAG5pE,KAAKm+J,KAAK,CAAC,IAAIr2J,EAAEtI,GAAGi+J,QAAQt6G,EAAEu6G,UAAUnhG,GAAGv8D,KAAKm+J,KAAK,IAAIr2J,KAAK8G,EAAE,iBAAiB9G,GAAGtI,EAAE+8D,EAAEp5D,QAAQ2E,IAAI,IAAItI,IAAIA,EAAE2jD,EAAEhgD,QAAQiH,OAAOtC,MAAM,IAAItI,GAAGoqE,EAAEnhE,IAAI2B,OAAO+4C,EAAE3jD,MAAMoqE,EAAEnhE,IAAIX,EAAE,MAAM,IAAI,IAAIA,KAAK8G,EAAEg7D,EAAEnhE,IAAIX,EAAE,CAAC,eAAAw2J,IAAmBt+J,KAAKC,SAASD,KAAKg+J,KAAKj8H,KAAK,GAAG/hC,KAAKC,SAAQ,EAAG68D,GAAE98D,KAAKq+J,KAAKr+J,KAAKg+J,OAAOh+J,KAAKC,SAASD,KAAKq+J,KAAKt8H,KAAK,GAAG+6B,GAAE98D,KAAKq+J,KAAKr+J,KAAKg+J,KAAK,EAAE,IAAI,GAAE,CAACpD,MAAK,EAAG2D,MAAK,EAAG1D,KAAI,EAAGE,KAAI,EAAGD,MAAK,EAAGT,MAAK,EAAGM,MAAK,EAAGL,MAAK,EAAGG,KAAI,EAAGC,SAAQ,EAAG8D,UAAU,EAAEjE,WAAU,EAAGC,aAAY,EAAGiE,cAAa,EAAGl3E,KAAK,GAAG82E,KAAK,GAAGT,eAAc,EAAGC,iBAAgB,EAAGC,cAAa,EAAGY,UAAS,EAAGC,aAAY,EAAGC,cAAa,EAAGC,SAAQ,EAAGC,oBAAoB,EAAEC,mBAAmB,IAAIC,sBAAsB,MAAMC,UAAU,MAAMC,WAAW,GAAG,GAAE,IAAI1xH,IAAI,MAAM,WAAU,GAAE,gBAAO2xH,CAAUvwJ,GAAG,IAAIg7D,EAAE,GAAEr0D,IAAI3G,GAAG,YAAY,IAAIg7D,IAAIA,EAAE,IAAI5pE,KAAK4O,GAAG,GAAE2I,IAAI3I,EAAEg7D,IAAIA,CAAC,CAAC,WAAAlpE,CAAYkO,GAAGwJ,SAAQ,IAAKxJ,EAAE5O,KAAKo/J,qBAAqB,IAAIxwJ,EAAE5O,KAAKq/J,qBAAqB3yJ,MAAM+H,QAAQ7F,GAAG5O,KAAKs/J,eAAe1wJ,GAAG,iBAAiBA,EAAE5O,KAAKu/J,gBAAgB3wJ,GAAG,GAAE,4BAA4BA,UAAU,IAAI5O,KAAK8+J,iBAAiB9+J,KAAK8+J,eAAe,GAAE9+J,KAAKg/J,sBAAsBh/J,KAAK++J,oBAAoB/+J,KAAK2+J,cAAc3+J,KAAK26J,KAAK16J,SAAQ,GAAID,KAAKw/J,0BAA0Bx/J,KAAKy/J,6BAA6Bz/J,KAAK0/J,oBAAoB,CAAC,kBAAAL,GAAqB,IAAIzwJ,EAAE,IAAIA,KAAK,GAAE5O,KAAK4O,GAAG,GAAEA,GAAG,IAAIA,KAAK,GAAE5O,KAAK4O,GAAG,GAAEA,GAAG,IAAIA,KAAK,GAAE5O,KAAK4O,GAAG,GAAEA,GAAG,IAAIA,KAAK,GAAE5O,KAAK4O,GAAG,IAAI,GAAEA,EAAE,GAAEA,QAAQ,EAAE5O,KAAK,CAAC,aAAAo/J,GAAgB,IAAIxwJ,EAAE,IAAIA,KAAK,GAAE5O,KAAK4O,GAAG,GAAEA,GAAG,IAAIA,KAAK,GAAE5O,KAAK4O,GAAG,GAAEA,GAAG,IAAIA,KAAK,GAAE5O,KAAK4O,IAAG,EAAG,IAAIA,KAAK,GAAE5O,KAAK4O,GAAG,IAAI,GAAEA,GAAE,OAAQ,EAAE5O,KAAK,CAAC,cAAAs/J,CAAe1wJ,GAAG,IAAIg7D,EAAE,IAAIA,KAAK,GAAE5pE,KAAK4pE,GAAG,GAAEA,GAAG,IAAIA,KAAK,GAAE5pE,KAAK4pE,GAAG,GAAEA,GAAG,IAAIA,KAAK,GAAE5pE,KAAK4pE,GAAG,GAAEA,GAAG,IAAIA,KAAK,GAAE5pE,KAAK4pE,GAAG,IAAI,GAAEA,GAAE,OAAQ,EAAE5pE,MAAMA,KAAK2/J,mBAAmB/wJ,OAAO,EAAE,GAAE,CAAC,eAAA2wJ,CAAgB3wJ,GAAG,IAAIg7D,EAAE,IAAIA,KAAK,GAAEywF,KAAK,GAAEA,MAAM,GAAEuF,MAAM,GAAEjF,KAAK,GAAEA,MAAM,GAAEkF,UAAU50J,OAAOuc,OAAOxnB,KAAK4O,GAAG,IAAG5O,KAAK4pE,GAAG7M,GAAEnuD,EAAEg7D,GAAG,GAAEA,IAAI,IAAIA,KAAK,GAAE5pE,KAAK4pE,GAAG7M,GAAEnuD,EAAEg7D,GAAG,GAAEA,IAAI,IAAIA,KAAK,GAAE5pE,KAAK4pE,GAAG7M,GAAEnuD,EAAEg7D,GAAG,GAAEA,IAAI,IAAIA,KAAK,GAAE5pE,KAAK4pE,GAAG,IAAI,GAAEA,EAAE,GAAEA,GAAGh7D,EAAEg7D,GAAG5pE,MAAM,IAAI4pE,KAAK,GAAE5pE,KAAK4pE,GAAG,IAAI,GAAEA,EAAE,GAAEA,GAAGh7D,EAAEg7D,GAAG5pE,KAAKu+J,MAAMv+J,KAAK2/J,mBAAmB/wJ,EAAEyvJ,KAAKzvJ,EAAE24E,KAAK,GAAE,KAAG,IAAK34E,EAAE2vJ,KAAKv+J,KAAK8/J,oBAAoB,IAAE,IAAI,IAAKlxJ,EAAE2vJ,KAAKv+J,KAAK+/J,yBAAyB,GAAEnxJ,GAAGlC,MAAM+H,QAAQ7F,EAAE2vJ,MAAMv+J,KAAK2/J,mBAAmB/wJ,EAAE2vJ,UAAU,EAAE,IAAG,iBAAiB3vJ,EAAE2vJ,MAAMv+J,KAAK2/J,mBAAmB/wJ,EAAE2vJ,KAAKF,KAAKzvJ,EAAE2vJ,KAAKh3E,KAAK,GAAE,CAAC,mBAAAu4E,CAAoBlxJ,EAAEg7D,GAAG,IAAI,IAAI9hE,KAAK8G,EAAE5O,KAAK8H,GAAG7H,QAAQ2pE,CAAC,CAAC,wBAAAm2F,CAAyBnxJ,EAAEg7D,GAAG,IAAI,IAAI9hE,KAAK8G,EAAE,CAAC,IAAIA,EAAEg7D,EAAE9hE,GAAG9H,KAAK8H,GAAG7H,SAAQ,IAAK2O,QAAQ,IAAIA,CAAC,CAAC,CAAC,kBAAA+wJ,CAAmB/wJ,EAAEg7D,EAAE9hE,EAAEtI,EAAEsI,GAAG,GAAG8G,GAAGA,EAAEnP,OAAO,CAAC,IAAI,IAAImP,KAAKpP,EAAEQ,KAAK4O,GAAG3O,SAAQ,EAAG,IAAI2pE,EAAE,GAAEh7D,EAAE9G,GAAG,IAAI,IAAI8G,EAAE9G,KAAK8hE,EAAE9M,GAAE98D,KAAK4O,GAAGyvJ,KAAKv2J,GAAG9H,KAAK4O,GAAG3O,SAAQ,CAAE,MAAM,GAAG2pE,GAAGA,EAAEnqE,OAAO,CAAC,IAAImP,EAAE,GAAEg7D,EAAE9hE,GAAG,IAAI,IAAI8hE,EAAE9hE,KAAK8G,EAAEkuD,GAAE98D,KAAK4pE,GAAG2d,KAAKz/E,EAAE,CAAC,CAAC,uBAAA03J,GAA0B,IAAInF,KAAKzrJ,EAAE0rJ,KAAK1wF,EAAEixF,IAAI/yJ,EAAEgzJ,KAAKt7J,EAAEu7J,IAAI53G,GAAGnjD,KAAKA,KAAKu6J,UAAU3wF,EAAEo0F,KAAKv1J,IAAI,OAAOmhE,EAAE2d,KAAK9+E,IAAI,OAAOzI,KAAKw6J,YAAY5wF,EAAEo0F,KAAKv1J,IAAI,OAAOmhE,EAAE2d,KAAK9+E,IAAI,OAAOX,EAAE7H,SAAS2O,EAAE24E,KAAK9+E,IAAI,KAAKjJ,EAAES,SAAS2O,EAAE24E,KAAK9+E,IAAI,OAAO06C,EAAEljD,SAAS2O,EAAE24E,KAAK9+E,IAAI,MAAM,CAAC,0BAAAg3J,GAA6B,IAAIpF,KAAKzrJ,EAAE0rJ,KAAK1wF,EAAE6wF,IAAI3yJ,EAAE4yJ,QAAQl7J,GAAGQ,KAAKR,EAAEu+J,SAASn0F,EAAEo0F,KAAKv1J,IAAI,OAAOmG,EAAEovJ,KAAKv1J,IAAI,QAAQmhE,EAAEm0F,QAAQnvJ,EAAEovJ,KAAKv1J,IAAI,OAAOX,EAAEi2J,QAAQnvJ,EAAEovJ,KAAKv1J,IAAI,OAAOzI,KAAKu+J,KAAKt+J,QAAQ,GAAE2nB,KAAMhZ,IAAG,IAAK5O,KAAK4O,GAAG3O,UAAWD,KAAKu6J,WAAWv6J,KAAKw6J,YAAY,IAAI,IAAI5rJ,KAAK,GAAE5O,KAAK4O,GAAG0vJ,iBAAiB,CAAC,YAAI0B,GAAW,OAAO,GAAE93J,IAAK0G,GAAG5O,KAAK4O,GAAG3O,SAAU2nB,KAAMhZ,IAAG,IAAKA,IAAK5O,KAAKu+J,KAAKt+J,OAAO,CAAC,kBAAAy/J,GAAqB,IAAI,IAAI9wJ,KAAK,GAAE5O,KAAK4O,GAAG3O,UAAU,GAAE+K,IAAI4D,IAAI,GAAE,iBAAiBA,EAAE,EAAE,SAAS,GAAEA,EAAEg7D,GAAG,IAAI9hE,EAAEtI,EAAE2jD,EAAEoZ,EAAErzD,EAAE,GAAG,IAAIi6C,KAAKymB,EAAE,CAAC,IAAIrN,KAAKz0D,EAAE,GAAEyN,IAAI4tC,GAAG3jD,EAAE,GAAGsI,IAAI8G,EAAE8F,SAAS6nD,EAAE,KAAK3tD,EAAE8F,SAAS6nD,EAAE,MAAM/8D,EAAEU,KAAKq8D,EAAE,IAAI/8D,EAAEC,QAAQyJ,EAAEhJ,KAAK,CAACijD,EAAE3jD,GAAG,CAAC,OAAO0J,CAAC,CAAC,SAAS6zD,GAAEnuD,EAAEg7D,GAAG,YAAY,IAAIh7D,EAAEA,OAAO,IAAIg7D,EAAEA,OAAO,CAAC,CAAC,SAAS9M,GAAEluD,EAAEg7D,GAAG,IAAI,IAAI9hE,KAAK8hE,EAAEh7D,EAAEnG,IAAIX,EAAE,CAAC,GAAE,GAAE,UAAU,IAAG,MAAM,GAAE,WAAApH,CAAYkpE,GAAG,GAAE5pE,KAAK,UAAU,CAAC,GAAG,GAAEA,KAAK,SAAS,CAAC,GAAG,GAAEA,KAAK,SAAS,IAAI,GAAEA,KAAK,eAAgB4O,GAAG5O,KAAKomJ,OAAOlmJ,KAAK0O,IAAK5O,KAAK4P,QAAQ,GAAEuvJ,UAAUv1F,EAAE,CAAC,UAAM3nC,CAAKrzB,GAAG5O,KAAKg4I,WAAW,SAASppI,EAAEg7D,GAAG,MAAM,iBAAiBh7D,EAAE,GAAEA,EAAEg7D,GAAG,KAAI,IAAGh7D,aAAaqrJ,iBAAiB,GAAErrJ,EAAEsK,IAAI0wD,GAAGh7D,aAAausJ,YAAYvsJ,aAAa0sJ,aAAa1sJ,aAAa2sJ,SAAS,IAAI,GAAE3sJ,GAAG,IAAGA,aAAaqxJ,KAAK,GAAErxJ,EAAEg7D,EAAE,OAAO,SAAQ,GAAE,yBAAyB,CAArP,CAAuPh7D,EAAE5O,KAAK4P,QAAQ,CAAC,KAAAswJ,GAAQ,GAAGlgK,KAAKmgK,WAAW,OAAO,IAAInoB,KAAKppI,GAAG5O,KAAK4pE,EAAEh7D,EAAEytJ,UAAU,GAAG,IAAI,IAAIv0J,EAAEtI,KAAK,GAAE,GAAGA,EAAE4gK,UAAUxxJ,EAAEg7D,GAAG,OAAO5pE,KAAKmgK,WAAW,IAAI3gK,EAAEQ,KAAK4P,QAAQ5P,KAAKg4I,KAAKh4I,KAAKqgK,SAASzxJ,EAAE9G,IAAG,EAAG9H,KAAKg4I,KAAK1zI,OAAOtE,KAAKg4I,KAAK1zI,QAAQ,GAAE,sBAAsB,CAAC,WAAMwB,GAAQ,IAAIw6J,OAAO1xJ,EAAEw3I,OAAOx8E,GAAG5pE,KAAK,OAAOA,KAAKkgK,QAAQlgK,KAAK4P,QAAQgvJ,oBAAoB5+J,KAAKugK,iBAAiBroG,MAAMl4D,KAAKwgK,cAAc52F,EAAE1pE,QAAQF,KAAKmgK,WAAW/Z,eAAepmJ,KAAKugK,iBAAiBvgK,KAAKg4I,KAAK1zI,OAAOtE,KAAKg4I,KAAK1zI,QAAQtE,KAAK4P,QAAQgvJ,cAAch1F,EAAEnqE,OAAO,IAAImP,EAAEw3I,OAAOx8E,GAAG,GAAE9hE,EAAE8G,QAAQ,EAAE9G,EAAE,KAAK,CAAC,oBAAMy4J,GAAiB,IAAID,OAAO1xJ,GAAG5O,WAAWA,KAAKmgK,WAAWr6J,QAAQ,IAAI8jE,EAAE3+D,OAAOoT,OAAOre,KAAKqgK,SAASn4J,IAAI,MAAC8U,IAAU,IAAIlV,QAAQ8hE,EAAE9jE,QAAQ8jE,EAAE62F,eAAe7xJ,EAAE9G,EAAG,GAAG9H,KAAK4P,QAAQgvJ,eAAeh1F,EAAEA,EAAE1hE,IAAK0G,GAAGA,EAAEspD,MAAMl4D,KAAKwgK,sBAAuBloJ,QAAQ2oB,IAAI2oC,EAAE,CAAC,sBAAM82F,GAAmB1gK,KAAKkgK,QAAQ,IAAItwJ,QAAQhB,EAAEopI,KAAKpuE,GAAG5pE,KAAK8H,EAAE,GAAEyN,IAAI,OAAO3G,GAAG,IAAIpP,EAAE,GAAGoqE,EAAE20F,KAAK/+J,EAAE,CAACuB,MAAM,EAAE8E,KAAK,QAAQ+jE,EAAE+2F,OAAOnhK,QAAQQ,KAAKmgK,WAAWS,iBAAiB,cAAc,IAAIphK,EAAE,OAAO,IAAI2jD,QAAQnjD,KAAKmgK,WAAWU,mBAAmBrhK,GAAG+8D,EAAEv8D,KAAKqgK,QAAQ9B,KAAK,IAAIz2J,EAAEq7C,EAAEv0C,EAAEg7D,GAAG1gE,QAAQqzD,EAAEmkG,mBAAmB,OAAO92F,EAAEtlE,OAAOslE,EAAEtlE,QAAQ4E,CAAC,EAAE8T,eAAe6/C,GAAEjuD,EAAEg7D,GAAG,IAAI9hE,EAAE,IAAI,GAAE8hE,GAAG,aAAa9hE,EAAEm6B,KAAKrzB,GAAG9G,EAAEhC,OAAO,CAAC,IAAI,GAAEmF,OAAO67B,OAAO,CAAC76B,UAAU,KAAKnG,MAAM+2D,GAAEikG,MAAM,GAAEC,YAAY,GAAEC,eAAe,GAAEC,YAAY,GAAExD,QAAQ,GAAEC,UAAU,GAAEwD,YAAY,GAAEC,iBAAiB,GAAEC,iBAAiB,GAAEC,sBAAsB,GAAEC,sBAAsB,GAAEC,aAAa,GAAEC,cAAc,GAAEzyE,SAAS,GAAE0yE,WAAW,GAAEC,kBAAkB,GAAEC,iBAAiB,GAAEC,aAAa,GAAEC,cAAc,GAAEC,QAAQ,KAAI,MAAM,GAAE,mBAAOC,CAAanzJ,EAAEg7D,GAAG,IAAI9hE,EAAE8G,EAAEytJ,UAAUzyF,EAAE,GAAG,EAAEpqE,EAAE,mBAAmBQ,KAAKgiK,aAAahiK,KAAKgiK,aAAapzJ,EAAEg7D,EAAE9hE,GAAG9H,KAAKgiK,aAAa7+G,EAAEymB,EAAEpqE,EAAE+8D,EAAEz0D,EAAEtI,EAAE,MAAM,CAACw7E,OAAOpR,EAAEnqE,OAAOqI,EAAEk6J,aAAaxiK,EAAEuB,MAAMoiD,EAAEphB,KAAKw6B,EAAExZ,IAAII,EAAEoZ,EAAE,CAAC,YAAOz2D,CAAM8I,EAAEg7D,EAAE,CAAC,GAAG,OAAO,IAAI5pE,KAAK4O,EAAE,IAAI,GAAE,CAAC,CAAC5O,KAAK6F,MAAM+jE,IAAIh7D,GAAG9I,OAAO,CAAC,cAAAm8J,CAAerzJ,GAAG,OAAOA,aAAa,GAAEA,EAAE,IAAI,GAAEA,EAAE,CAAC,WAAAlO,CAAYkpE,EAAE9hE,EAAE,CAAC,EAAEtI,GAAG,GAAEQ,KAAK,SAAS,IAAI,GAAEA,KAAK,MAAM,IAAIwtC,KAAK,GAAExtC,KAAK,cAAe4O,IAAI,IAAI5O,KAAK4P,QAAQgvJ,aAAa,MAAMhwJ,EAAE5O,KAAKomJ,OAAOlmJ,KAAK0O,EAAEpJ,QAAS,GAAGxF,KAAK4nG,MAAM5nG,KAAKiiK,eAAer4F,GAAG5pE,KAAKg4I,KAAKx4I,EAAEQ,KAAK6F,KAAK7F,KAAKU,YAAYmF,KAAK7F,KAAKkiK,cAAcliK,KAAK4P,QAAQ9H,EAAE9H,KAAKmiK,aAAar6J,EAAE9H,KAAK6F,MAAM7F,KAAKoiK,aAAapiK,KAAKmiK,cAAcniK,KAAKmiK,aAAaljF,SAAS,CAAC,SAAAA,GAAYj/E,KAAKoiK,eAAepiK,KAAKqiK,WAAWriK,KAAKsiK,eAAetiK,KAAKw7F,IAAIx7F,KAAK6F,MAAM,CAAC,UAAIy6J,GAAS,OAAOtgK,KAAKqiK,WAAWriK,KAAKqiK,WAAWriK,KAAKw7F,IAAIvwF,OAAO+3I,YAAYhjJ,KAAKw7F,UAAU,CAAC,CAAC,cAAA8mE,CAAe1zJ,EAAEg7D,GAAG,IAAI9hE,EAAE,GAAEyN,IAAIq0D,GAAGpqE,EAAE,GAAE+V,IAAIq0D,GAAGzmB,EAAE,GAAE5tC,IAAIq0D,GAAGrN,EAAEv8D,KAAK4P,QAAQg6D,GAAG1gE,EAAEqzD,EAAEuhG,gBAAgBh2J,EAAEizD,EAAEwB,EAAEshG,mBAAmBr+J,EAAEm8D,EAAEY,EAAEqhG,iBAAiBz6G,EAAE32C,EAAE,CAAC,EAAE,IAAI,IAAIo9D,EAAErN,KAAK3tD,EAAE1F,GAAGpB,EAAEkD,IAAI4+D,GAAGrN,EAAEz0D,EAAEyN,IAAIq0D,EAAN9hE,CAASy0D,GAAGxB,GAAGv7D,EAAEwL,IAAI4+D,KAAKrN,EAAEv8D,KAAKuiK,eAAehmG,EAAE/8D,EAAE+V,IAAIq0D,KAAKjO,GAAGxY,EAAEn4C,IAAI4+D,KAAKA,EAAEzmB,EAAE5tC,IAAIq0D,IAAIA,GAAGp9D,EAAEo9D,GAAGrN,EAAE,OAAO/vD,CAAC,CAAC,cAAA+1J,CAAe3zJ,EAAEg7D,GAAG,OAAOA,EAAEh7D,IAAIg7D,EAAE44F,SAAS5zJ,CAAC,CAAC,cAAA6xJ,CAAe7xJ,EAAEg7D,GAAG5pE,KAAKyiK,qBAAqB7zJ,EAAE5O,KAAKU,YAAYmF,KAAK+jE,EAAE,CAAC,oBAAA64F,CAAqB7zJ,EAAEg7D,EAAE9hE,GAAG,GAAG9H,KAAKkiK,cAAcvD,YAAY,OAAO1zJ,OAAOuc,OAAO5Y,EAAE9G,GAAG8G,EAAEg7D,GAAG3+D,OAAOuc,OAAO5Y,EAAEg7D,GAAG9hE,GAAG8G,EAAEg7D,GAAG9hE,CAAC,EAA4F,SAAS,GAAE8G,GAAG,OAAO,MAAMA,GAAG,MAAMA,GAAG,MAAMA,GAAG,MAAMA,GAAG,MAAMA,GAAG,MAAMA,GAAG,MAAMA,CAAC,CAAC,SAAS,GAAEA,GAAG,OAAOA,GAAG,KAAKA,GAAG,GAAG,CAAC,SAASguD,GAAEhuD,EAAEg7D,EAAE9hE,GAAG,IAAI,IAAItI,EAAE2jD,KAAK,GAAE,GAAGA,EAAEi9G,UAAUxxJ,EAAEg7D,EAAE9hE,GAAG,OAAOtI,CAAC,CAAlR,GAAE,GAAE,eAAe,GAAG,GAAE,GAAE,YAAY,GAAG,GAAE,GAAE,gBAAe,GAAI,GAAE,GAAE,YAAY,KAAK,GAA8L,MAAMiN,WAAW,MAAM,WAAA/L,CAAYkpE,EAAE9hE,EAAEtI,GAAG,GAAEQ,KAAK,SAAS,IAAI,GAAEA,KAAK,qBAAqB,MAACgd,IAAU,IAAI4sD,EAAEh7D,EAAE7N,MAAM+G,EAAE8G,EAAEmzB,MAAM,MAAM,GAAG/hC,KAAKg4I,KAAK6mB,QAAQ,GAAG7+J,KAAKg4I,KAAK0qB,UAAU94F,EAAE9hE,GAAG8G,EAAEg5F,MAAM5nG,KAAKg4I,KAAK+jB,SAASnyF,EAAE9hE,QAAQ,IAAI8G,EAAEg5F,YAAY5nG,KAAKg4I,KAAK2qB,UAAU/4F,EAAE9hE,EAAE,CAAC,MAAM8hE,GAAG,GAAE,0BAA0B/lE,KAAKC,UAAU8K,OAAOg7D,EAAEpkE,UAAU,MAAMxF,KAAKg4I,KAAKqjB,WAAWzxF,EAAE9hE,EAAE8G,EAAEg5F,MAAM5nG,KAAKg4I,KAAK+jB,SAASnyF,EAAE9hE,QAAQ,IAAI8G,EAAEmzB,KAAKnzB,EAAEg5F,MAAM5nG,KAAKg4I,KAAK+jB,SAASnyF,GAAG,GAAE,wBAAwB/lE,KAAKC,UAAU8K,IAAI,OAAOA,EAAEg5F,KAAM,GAAG5nG,KAAK4iK,eAAe5iK,KAAK4iK,cAAch5F,GAAG5pE,KAAK4P,QAAQg6D,EAAE5pE,KAAKg4I,KAAKlwI,EAAE9H,KAAKqgK,QAAQ7gK,CAAC,CAAC,aAAAqjK,CAAcj0J,EAAEg7D,GAAG5pE,KAAK4P,QAAQhB,GAAG3O,SAASD,KAAK8iK,aAAal0J,EAAEg7D,EAAE,CAAC,YAAAk5F,CAAal0J,EAAEg7D,GAAG,IAAI9hE,EAAE,IAAI,GAAEyN,IAAI3G,GAAV,CAAcg7D,EAAE5pE,KAAK4P,QAAQ5P,KAAKg4I,MAAM,OAAOh4I,KAAKqgK,QAAQzxJ,GAAG9G,CAAC,CAAC,aAAAi7J,CAAcn0J,GAAG,IAAI,IAAIg7D,KAAKh7D,EAAE,CAAC,IAAI/I,KAAK+I,EAAEg5F,MAAM9/F,GAAG8hE,EAAEpqE,EAAEQ,KAAK4P,QAAQhB,GAAG,GAAGpP,GAAGA,EAAES,QAAQ,CAAC,IAAI2pE,EAAE5pE,KAAKqgK,QAAQzxJ,GAAGg7D,GAAGA,EAAEhlD,QAAQglD,GAAG5pE,KAAK8iK,aAAal0J,EAAE9G,EAAE,CAAC,CAAC,CAAC,kBAAMk7J,CAAap0J,GAAG,IAAIg7D,EAAEh7D,EAAE1G,IAAIlI,KAAK6gK,0BAA0BvoJ,QAAQ2oB,IAAI2oC,EAAE,GAAG,WAAAlpE,IAAekpE,GAAGxxD,SAASwxD,GAAG,GAAE5pE,KAAK,cAAc,IAAI,GAAEA,KAAK,eAAe,IAAI,GAAEA,KAAK,kBAAkB,GAAG,CAAC,gBAAOogK,CAAUxxJ,EAAEg7D,GAAG,OAAO,QAAQA,CAAC,CAAC,WAAM9jE,SAAc9F,KAAKijK,wBAAwBjjK,KAAKgjK,aAAahjK,KAAKkjK,aAAaljK,KAAKmjK,qBAAqBnjK,KAAK+iK,cAAc/iK,KAAKojK,mBAAmBpjK,KAAKkjK,YAAY,CAAC,sBAAAG,CAAuBz0J,IAAG,IAAKA,GAAG5O,KAAK2I,SAAQ,EAAG3I,KAAKsjK,OAAO,IAAItkI,IAAI,GAAEo+H,aAAaxuJ,OAAO,IAAIA,EAAE,GAAEwuJ,UAAUv1J,OAAQ+G,GAAG5O,KAAK4P,QAAQhB,GAAG3O,SAAU2O,EAAE/G,OAAQ+G,GAAG5O,KAAK4P,QAAQhB,GAAG3O,SAAS,GAAE+K,IAAI4D,IAAK5O,KAAK2I,SAAQ,EAAG3I,KAAK0wF,UAAU,IAAI1xD,IAAIpwB,GAAG5O,KAAKsjK,OAAO,IAAItkI,IAAIpwB,IAAI5O,KAAKujK,wBAAuB,CAAE,CAAC,qBAAMN,CAAgBr0J,EAAE,EAAEg7D,GAAG5pE,KAAKqjK,uBAAuBz5F,GAAG,IAAIouE,KAAKlwI,EAAEa,QAAQnJ,EAAE8jK,OAAOngH,EAAEutC,UAAUn0B,GAAGv8D,KAAK,IAAIR,GAAGQ,KAAKg4I,KAAK6mB,UAAUr/J,EAAEkN,MAAMmS,KAAKskC,GAAGv7B,KAAMhZ,IAAI,IAAIg7D,EAAE,GAAEr0D,IAAI3G,GAAG9G,EAAE9H,KAAK4P,QAAQhB,GAAG,OAAOg7D,EAAE60F,cAAc32J,EAAE22J,YAAa,GAAGj/J,SAASQ,KAAKg4I,KAAKwrB,aAAa50J,EAAE5O,KAAKyjK,uBAAuB70J,EAAE9G,EAAEuzJ,aAAar7J,KAAK4P,QAAQowJ,UAAUl4J,EAAE+2J,QAAQ,CAAC,IAAIj1F,GAAE,EAAG,KAAKrN,EAAEx6B,KAAK,IAAI6nC,IAAI9hE,EAAE47J,kBAAkB1jK,KAAKujK,yBAAyB,CAAC,IAAII,gBAAgBnkK,GAAGsI,EAAEq7C,EAAEnjD,KAAKkjK,YAAYt7I,KAAMhZ,IAAI5O,KAAKg4I,KAAK0qB,UAAU9zJ,EAAEosE,QAAQpsE,EAAE7N,MAAM6N,EAAEnP,QAAQmP,EAAEmzB,OAAQ,GAAG6nC,EAAEh7D,EAAEpP,IAAI2jD,SAASr7C,EAAE87J,cAAch1J,UAAU9G,EAAE87J,cAAcpkK,QAAQ,KAAKoP,EAAE5O,KAAKyjK,uBAAuB70J,EAAE9G,EAAEuzJ,aAAa,MAAM,CAAC,CAAC,CAAC,sBAAAoI,CAAuB70J,EAAEg7D,GAAGA,GAAG,EAAE,IAAI9hE,EAAEtI,EAAE2jD,EAAEoZ,EAAErzD,EAAE6xD,GAAGi9E,KAAKr8E,EAAEhzD,QAAQ6D,EAAE82J,OAAOluJ,EAAEs7E,UAAUy7D,EAAEv8I,QAAQsF,GAAGlV,KAAK,KAAK4O,EAAEg7D,EAAEh7D,IAAI,GAAG,MAAM+sD,EAAE4gG,SAAS3tJ,GAAG,GAAG9G,EAAE6zD,EAAE4gG,SAAS3tJ,EAAE,GAAG,GAAE9G,GAAG,CAAC,GAAGtI,EAAEm8D,EAAE0gG,UAAUztJ,EAAE,GAAGu0C,EAAEyZ,GAAEjB,EAAE/sD,EAAEpP,GAAG2jD,GAAG/tC,EAAEpK,IAAIm4C,KAAKoZ,EAAE,GAAEhnD,IAAI4tC,GAAGj6C,EAAEqzD,EAAEwlG,aAAapmG,EAAE/sD,GAAGmsD,EAAE7lD,EAAEiuC,GAAGj6C,EAAErD,KAAKs9C,EAAEnjD,KAAKkjK,YAAYhjK,KAAKgJ,IAAIsD,IAAI+vD,EAAEkiG,cAAc1jG,EAAE0jG,cAAcz+J,KAAKujK,uBAAuBr6J,EAAE26J,YAAY36J,EAAE46J,WAAW9jK,KAAKujK,wBAAwBpX,EAAE9mI,OAAO89B,IAAIgpG,EAAE9mI,OAAO89B,GAAG,IAAIgpG,EAAEpqH,OAAO,MAAM7sB,EAAE6uJ,wBAAwB76J,EAAE,GAAE64J,aAAapmG,EAAE/sD,GAAG1F,EAAE86J,OAAOl8J,EAAE9H,KAAKikK,gBAAgB/jK,KAAKgJ,IAAI0F,GAAGpP,EAAE,CAAC,MAAM,GAAG,GAAEsI,GAAG,CAAC,GAAGtI,EAAEm8D,EAAE0gG,UAAUztJ,EAAE,GAAG,MAAM9G,IAAG,IAAKoN,EAAEgvJ,aAAa,OAAOhvJ,EAAEivJ,oBAAoBnkK,KAAKokK,aAAalkK,KAAK,CAAC86E,OAAOpsE,EAAEnP,OAAOD,EAAEwkK,OAAOl8J,IAAI8G,GAAGpP,EAAE,CAAC,CAAC,OAAOoP,CAAC,CAAC,kBAAAu0J,GAAqB,IAAInjK,KAAKkjK,YAAYt7I,KAAMhZ,GAAGA,EAAE6vJ,cAAe,OAAO,IAAI7vJ,EAAE,SAASA,GAAK,IAAI9G,EAAEtI,EAAE2jD,EAAEoZ,EAAE,IAAI/uB,IAAI,IAAI,IAAItkC,EAAE,EAAEA,EAAE0F,EAAEnP,OAAOyJ,IAAIpB,EAAE8G,EAAE1F,GAAG1J,EAAEsI,EAAG,KAAEy0D,EAAEvxD,IAAIxL,GAAG2jD,EAAEoZ,EAAEhnD,IAAI/V,GAAG+8D,EAAEhlD,IAAI/X,EAAE2jD,EAAE,IAAIA,EAAEjjD,KAAK4H,GAAG,OAAO4E,MAAMmS,KAAK09C,EAAE,CAA3I,CAA6Iv8D,KAAKkjK,aAAoBljK,KAAKojK,kBAAkBx0J,EAAE1G,IAAI,EAAG0G,EAAEg7D,MAAM,IAAI9hE,EAAE,GAAEyN,IAAI3G,EAAE5O,KAAK4P,SAAS,OAAG9H,EAAEu8J,oBAA2B,CAACx+J,KAAK+I,EAAEg5F,MAAM9/F,EAAEu8J,oBAAoBz6F,IAAWA,EAAE,EAAG,EAAE,CAAC,UAAA4kB,CAAW5/E,GAAG,OAAO5O,KAAKkjK,YAAY58I,KAAMsjD,GAAGA,EAAE/jE,OAAO+I,EAAG,CAAC,sBAAMgyJ,CAAiBhyJ,GAAG,IAAIg7D,EAAE5pE,KAAKwuF,WAAW5/E,GAAG,YAAY,IAAIg7D,UAAU5pE,KAAKijK,gBAAgB,EAAE,CAACr0J,IAAIg7D,EAAE5pE,KAAKwuF,WAAW5/E,IAAIg7D,CAAC,EAAE,GAAEn9D,GAAG,OAAO,QAAQ,GAAE8K,IAAI,OAAO9K,IAAI,MAAM63J,GAAG,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,MAAMC,WAAW,GAAE,WAAAC,GAAc,IAAI51J,EAAE5O,KAAK4nG,MAAMy0D,YAAY,QAAQztJ,EAAE5O,KAAKk7J,IAAG,EAAG,QAAQtsJ,IAAI5O,KAAKk7J,IAAG,GAAIl7J,KAAK4nG,MAAMszD,GAAGl7J,KAAKk7J,GAAGl7J,KAAKykK,cAAa,CAAE,CAAC,SAAAC,CAAU91J,EAAEg7D,EAAE9hE,EAAE,IAAI0lC,KAAK,IAAI6wH,KAAK7+J,EAAE+nF,KAAKpkC,GAAGnjD,KAAK4P,QAAQg6D,GAAGpqE,EAAE,IAAIw/B,IAAIx/B,GAAG,IAAI+8D,EAAE/8D,EAAEuiC,KAAK,EAAE74B,EAAE,IAAIi6C,EAAEphB,KAAKg5B,EAAE/6D,KAAK4nG,MAAMy0D,UAAUztJ,GAAGA,GAAG,EAAE,IAAI,IAAI+sD,EAAE,EAAEA,EAAEZ,EAAEY,IAAI,CAAC,IAAIZ,EAAE/6D,KAAK4nG,MAAMy0D,UAAUztJ,GAAG,GAAG2tD,GAAG,GAAG/8D,EAAEwL,IAAI+vD,KAAKjzD,EAAEyP,IAAIwjD,EAAE/6D,KAAK2kK,SAAS/1J,EAAEmsD,EAAE6O,IAAIpqE,EAAE6lB,OAAO01C,GAAG,IAAIv7D,EAAEuiC,MAAM,WAAW74B,GAAGi6C,EAAEn4C,IAAI+vD,IAAIjzD,EAAEyP,IAAIwjD,EAAE/6D,KAAK2kK,SAAS/1J,EAAEmsD,EAAE6O,IAAIh7D,GAAG,EAAE,CAAC,OAAO9G,CAAC,CAAC,QAAA68J,CAAS/1J,EAAEg7D,EAAE9hE,GAAG,IAAI8/F,MAAMpoG,GAAGQ,KAAKmjD,EAAE3jD,EAAE68J,UAAUztJ,EAAE,GAAG2tD,EAAE/8D,EAAEk9J,UAAU9tJ,EAAE,GAAG1F,EAAEo7J,GAAGnhH,GAAG,GAAGj6C,EAAEqzD,GAAG,EAAE3tD,GAAG,EAAEA,EAAEpP,EAAEk9J,UAAU9tJ,EAAE,IAAIu0C,EAAE,GAAGA,EAAE,KAAK,GAAE,mCAAmCr7C,EAAEga,uBAAuB8nD,EAAEp7D,SAAS,cAAc20C,aAAav0C,KAAKA,EAAEpP,EAAE67J,YAAY,GAAE,qCAAqCvzJ,EAAEga,uBAAuB8nD,EAAEp7D,SAAS,cAAc20C,aAAav0C,8BAA8BpP,EAAE67J,cAAc,IAAIl4G,EAAE,OAAO3jD,EAAEw8J,cAAcptJ,EAAE2tD,GAAG,GAAG,IAAIpZ,EAAE,MAAM,MAAM4X,EAAE,SAASnsD,GAAG,KAAKA,EAAEoM,SAAS,OAAOpM,EAAEA,EAAE1L,MAAM,GAAG,GAAG,OAAO0L,CAAC,CAA3D,CAA6DmsD,EAAEv7D,EAAEy8J,UAAUrtJ,EAAE2tD,IAAIj6B,aAAa,EAAEy4B,EAAE,IAAIA,EAAE,GAAG,IAAI5X,EAAE,OAAO3jD,EAAEw8J,cAAcptJ,EAAE2tD,GAAG,GAAG,IAAIA,EAAE,OAAOv8D,KAAK4kK,cAAczhH,EAAEv0C,GAAG,CAAC,IAAIg7D,EAAE,IAAI,SAASh7D,GAAG,OAAOA,GAAG,KAAK,EAAE,OAAOusJ,WAAW,KAAK,EAAE,OAAO0J,YAAY,KAAK,EAAE,OAAOC,YAAY,KAAK,EAAyF,KAAK,GAAwE,QAAQ,OAAOp4J,MAAtK,KAAK,EAAE,OAAOq4J,UAAU,KAAK,EAAE,OAAOC,WAAW,KAAK,EAAE,OAAOC,WAAgC,KAAK,GAAG,OAAOC,aAAa,KAAK,GAAG,OAAOC,aAAkC,CAApS,CAAsShiH,GAAzS,CAA6SoZ,GAAGz0D,EAAEoB,EAAE,IAAI,IAAI1J,EAAE,EAAEA,EAAE+8D,EAAE/8D,IAAIoqE,EAAEpqE,GAAGQ,KAAK4kK,cAAczhH,EAAEv0C,GAAGA,GAAG9G,EAAE,OAAO8hE,CAAC,CAAC,CAAC,aAAAg7F,CAAch2J,EAAEg7D,GAAG,IAAIg+B,MAAM9/F,GAAG9H,KAAK,OAAO4O,GAAG,KAAK,EAAE,OAAO9G,EAAEy0J,SAAS3yF,GAAG,KAAK,EAAE,OAAO9hE,EAAEu0J,UAAUzyF,GAAG,KAAK,EAAiQ,KAAK,GAAG,OAAO9hE,EAAE40J,UAAU9yF,GAApQ,KAAK,EAAE,OAAO9hE,EAAE40J,UAAU9yF,GAAG9hE,EAAE40J,UAAU9yF,EAAE,GAAG,KAAK,EAAE,OAAO9hE,EAAEw0J,QAAQ1yF,GAAG,KAAK,EAAE,OAAO9hE,EAAE00J,SAAS5yF,GAAG,KAAK,EAAE,OAAO9hE,EAAE20J,SAAS7yF,GAAG,KAAK,GAAG,OAAO9hE,EAAE20J,SAAS7yF,GAAG9hE,EAAE20J,SAAS7yF,EAAE,GAAG,KAAK,GAAG,OAAO9hE,EAAE+0J,SAASjzF,GAAG,KAAK,GAAG,OAAO9hE,EAAEg1J,UAAUlzF,GAAiC,QAAQ,GAAE,qBAAqBh7D,KAAK,EAAE,MAAMw2J,WAAWb,GAAG,gBAAOnE,CAAUxxJ,EAAEg7D,GAAG,OAAO,MAAMh7D,EAAE2tJ,SAAS3yF,EAAE,IAAI,aAAah7D,EAAE8tJ,UAAU9yF,EAAE,IAAI,IAAIh7D,EAAEytJ,UAAUzyF,EAAE,EAAE,CAAC,WAAM9jE,GAAQ9F,KAAKwkK,cAAc,IAAI50J,QAAQhB,GAAG5O,KAAK,OAAO4O,EAAEyrJ,KAAKp6J,eAAeD,KAAKqlK,iBAAiBz2J,EAAE0rJ,KAAKr6J,eAAeD,KAAKslK,UAAU,kBAAkB12J,EAAE6rJ,IAAIx6J,eAAeD,KAAKslK,UAAU,iBAAiB12J,EAAE8rJ,QAAQz6J,eAAeD,KAAKslK,UAAU,qBAAqB12J,EAAE+rJ,KAAK16J,eAAeD,KAAKslK,UAAU,uBAAuBtlK,KAAKulK,cAAc,CAAC,SAAAD,CAAU12J,GAAG,IAAIg7D,EAAE5pE,KAAK4O,KAAK,YAAY,IAAIg7D,EAAE1R,QAAQ0R,EAAEA,EAAE1R,MAAMl4D,KAAK8tC,cAAc87B,CAAC,CAAC,cAAA47F,QAAsB,IAAIxlK,KAAKylK,aAAazlK,KAAKylK,WAAWzlK,KAAK4nG,MAAM80D,UAAU,GAAG,CAAC,cAAAgJ,GAAiB,QAAQ,IAAI1lK,KAAK2lK,WAAW,CAAC3lK,KAAKwlK,iBAAiB,IAAI52J,EAAE5O,KAAK4nG,MAAMy0D,UAAUr8J,KAAKylK,YAAY77F,EAAE5pE,KAAKylK,WAAW,EAAE,GAAG72J,EAAE5O,KAAK2lK,WAAW3lK,KAAK4nG,MAAM80D,UAAU9yF,EAAE,CAAC,CAAC,UAAAg8F,CAAWh3J,EAAEg7D,GAAG,IAAI9hE,EAAE,IAAI0lC,IAAI,OAAOxtC,KAAK4pE,GAAG9hE,EAAE9H,KAAK0kK,UAAU91J,EAAEg7D,EAAE9hE,GAAGA,CAAC,CAAC,oBAAMu9J,GAAiB,GAAGrlK,KAAKq6J,KAAK,OAAO,IAAIriB,KAAKppI,GAAG5O,KAAKA,KAAKwlK,iBAAiBxlK,KAAKylK,WAAW,GAAG,GAAE,wBAAwB72J,EAAEiwJ,SAAS7+J,KAAKylK,WAAW72J,EAAEysJ,YAAY,GAAE,4DAA4Dr7J,KAAKylK,gCAAgC72J,EAAEysJ,cAAczsJ,EAAE2vJ,YAAY3vJ,EAAEsuJ,YAAYl9J,KAAKylK,WAAW,GAAEzlK,KAAK4P,UAAU,IAAIg6D,EAAE5pE,KAAK4lK,WAAW5lK,KAAKylK,WAAW,QAAQ,OAAO,IAAI77F,EAAE7nC,MAAM/hC,KAAK6lK,WAAWj8F,EAAEr0D,IAAI,OAAOvV,KAAK8lK,cAAcl8F,EAAEr0D,IAAI,OAAOvV,KAAK+lK,UAAUn8F,EAAEr0D,IAAI,OAAOvV,KAAK66J,IAAIjxF,EAAEr0D,IAAI,KAAKvV,KAAK86J,KAAKlxF,EAAEr0D,IAAI,OAAOvV,KAAK+6J,IAAInxF,EAAEr0D,IAAI,OAAOvV,KAAK4P,QAAQ8uJ,WAAW90F,EAAEvkD,OAAO,OAAOukD,EAAEvkD,OAAO,OAAOukD,EAAEvkD,OAAO,OAAOukD,EAAEvkD,OAAO,KAAKukD,EAAEvkD,OAAO,OAAOukD,EAAEvkD,OAAO,QAAQukD,QAAQ,CAAC,CAAC,oBAAMo8F,GAAiB,GAAGhmK,KAAKs6J,KAAK,OAAO,GAAGt6J,KAAKq6J,YAAYr6J,KAAKqlK,sBAAsB,IAAIrlK,KAAK6lK,WAAW,OAAO7lK,KAAKg4I,KAAKumB,YAAYv+J,KAAKg4I,KAAKklB,YAAYl9J,KAAK6lK,WAAW,GAAE7lK,KAAK4P,UAAU,IAAIhB,EAAE5O,KAAK4lK,WAAW5lK,KAAK6lK,WAAW,QAAQ,OAAO7lK,KAAK8lK,gBAAgB9lK,KAAK8lK,cAAcl3J,EAAE2G,IAAI,QAAQvV,KAAKu6J,UAAU3rJ,EAAE2G,IAAI,OAAOvV,KAAKw6J,YAAY5rJ,EAAE2G,IAAI,OAAOvV,KAAK4P,QAAQ8uJ,WAAW9vJ,EAAEyW,OAAO,OAAOzW,EAAEyW,OAAO,OAAOzW,EAAEyW,OAAO,QAAQrlB,KAAKyoE,OAAO75D,EAAE,OAAO5O,KAAKyoE,OAAO75D,EAAE,OAAOA,CAAC,CAAC,MAAA65D,CAAO75D,EAAEg7D,GAAG,IAAI9hE,EAAE8G,EAAE2G,IAAIq0D,GAAG9hE,GAAG,IAAIA,EAAErI,QAAQmP,EAAE2I,IAAIqyD,EAAE9hE,EAAE,GAAG,CAAC,mBAAMm+J,GAAgB,GAAGjmK,KAAKy6J,IAAI,OAAO,GAAGz6J,KAAKq6J,YAAYr6J,KAAKqlK,sBAAsB,IAAIrlK,KAAK+lK,UAAU,OAAO,IAAIn3J,EAAE5O,KAAK4lK,WAAW5lK,KAAK+lK,UAAU,OAAO,OAAOn3J,GAAGA,EAAE5D,IAAI,IAAI4D,EAAE5D,IAAI,KAAK4D,EAAE2I,IAAI,WAAW2uJ,MAAMt3J,EAAE2G,IAAI,GAAG3G,EAAE2G,IAAI,KAAK3G,EAAE2I,IAAI,YAAY2uJ,MAAMt3J,EAAE2G,IAAI,GAAG3G,EAAE2G,IAAI,MAAM3G,CAAC,CAAC,uBAAMu3J,GAAoB,IAAInmK,KAAK06J,UAAU16J,KAAKq6J,YAAYr6J,KAAKqlK,sBAAsB,IAAIrlK,KAAK8lK,eAAe9lK,KAAKs6J,YAAYt6J,KAAKgmK,sBAAsB,IAAIhmK,KAAK8lK,eAAe,OAAO9lK,KAAK4lK,WAAW5lK,KAAK8lK,cAAc,UAAU,CAAC,yBAAMM,CAAoBx3J,GAAE,GAAI,IAAI5O,KAAK26J,OAAO36J,KAAKqmK,cAAcrmK,KAAK4P,QAAQ+uJ,aAAa/vJ,GAAG,OAAO5O,KAAK0lK,iBAAiB1lK,KAAK2lK,WAAW,IAAI3lK,KAAK4lK,WAAW5lK,KAAK2lK,WAAW,QAAQ3lK,KAAKqmK,YAAW,GAAIrmK,KAAK26J,IAAI,CAAC,sBAAM+F,GAAmB,GAAG1gK,KAAKykK,cAAczkK,KAAKwkK,cAAcxkK,KAAKqmK,kBAAkBrmK,KAAKomK,qBAAoB,QAAS,IAAIpmK,KAAK26J,KAAK,OAAO,IAAI/rJ,EAAE5O,KAAK26J,KAAKplJ,IAAI,KAAKq0D,EAAE5pE,KAAK26J,KAAKplJ,IAAI,KAAK,OAAOvV,KAAK4nG,MAAMo0D,cAAcptJ,EAAEg7D,EAAE,CAAC,SAAIg2F,GAAQ,OAAO5/J,KAAKq6J,IAAI,CAAC,aAAIwF,GAAY,OAAO7/J,KAAK26J,IAAI,CAAC,YAAA4K,GAAe,IAAI32J,EAAEg7D,EAAE9hE,EAAEtI,EAAE,CAAC,EAAE,IAAIoqE,KAAK,GAAE,GAAGh7D,EAAE5O,KAAK4pE,IAAI,GAAEh7D,GAAG,GAAG9G,EAAE9H,KAAKoiK,aAAapiK,KAAKsiK,eAAe1zJ,EAAEg7D,GAAG3+D,OAAO+3I,YAAYp0I,GAAG5O,KAAK4P,QAAQ+uJ,YAAY,CAAC,GAAG,SAAS/0F,EAAE,SAAS3+D,OAAOuc,OAAOhoB,EAAEsI,EAAE,MAAMtI,EAAEoqE,GAAG9hE,EAAE,OAAO9H,KAAKu6J,YAAY/6J,EAAE+6J,UAAUv6J,KAAKu6J,WAAWv6J,KAAKw6J,cAAch7J,EAAEg7J,YAAYx6J,KAAKw6J,aAAah7J,CAAC,CAAC,cAAAihK,CAAe7xJ,EAAEg7D,GAAG,GAAG5pE,KAAKkiK,cAAcvD,YAAY1zJ,OAAOuc,OAAO5Y,EAAEg7D,QAAQ,IAAI,IAAI9hE,EAAEtI,KAAKyL,OAAO6V,QAAQ8oD,GAAG5pE,KAAKyiK,qBAAqB7zJ,EAAE9G,EAAEtI,EAAE,EAAE,SAAS0mK,GAAGt3J,EAAEg7D,EAAE9hE,EAAEtI,GAAG,IAAI2jD,EAAEv0C,EAAEg7D,EAAE,GAAG9hE,EAAE,KAAK,MAAM,MAAMtI,GAAG,MAAMA,IAAI2jD,IAAI,GAAGA,CAAC,CAAC,GAAEiiH,GAAG,OAAO,QAAQ,GAAEA,GAAG,eAAe,IAAI,GAAE7tJ,IAAI,OAAO6tJ,IAAWn6J,OAAO67B,OAAO,CAAC76B,UAAU,KAAK2I,QAAQ,GAAEksJ,MAAM,GAAEC,YAAY,GAAEC,eAAe,GAAEC,YAAY,GAAExD,QAAQ,GAAEC,UAAU,GAAEwD,YAAY,GAAEC,iBAAiB,GAAEC,iBAAiB,GAAEC,sBAAsB,GAAEC,sBAAsB,GAAEC,aAAa,GAAEC,cAAc,GAAEzyE,SAAS,GAAE0yE,WAAW,GAAEC,kBAAkB,GAAEC,iBAAiB,GAAEC,aAAa,GAAEC,cAAc,GAAEC,QAAQ,GAAEh8J,MAAM+2D,KAAI,MAAMypG,GAAG,CAACjM,MAAK,EAAGM,MAAK,EAAGL,MAAK,EAAGG,KAAI,EAAGC,SAAQ,EAAGgE,UAAS,EAAGZ,cAAa,EAAGF,eAAc,EAAGC,iBAAgB,EAAGc,aAAY,GAAO1zJ,OAAOuc,OAAO,CAAC,EAAE8+I,GAAG,CAACxH,eAAe,IAAIrE,IAAI,CAAC,EAAE,EAAE,EAAE,KAAwKxvJ,OAAOuc,OAAO,CAAC,EAAE8+I,GAAG,CAAC/H,MAAK,EAAG5D,MAAK,EAAGgE,aAAY,IAAwO,MAAM4H,GAAGt7J,OAAOuc,OAAO,CAAC,EAAE8+I,GAAG,CAACxH,eAAe,IAAIzE,KAAK,CAAC,OAAwHmM,GAAGv7J,OAAO67B,OAAO,CAAC,EAAE,CAAC2/H,kBAAiB,EAAGC,OAAO,EAAEC,OAAO,EAAEl8F,IAAI,EAAEuU,IAAI,GAAG,EAAE,CAACynF,kBAAiB,EAAGC,QAAQ,EAAEC,OAAO,EAAEl8F,IAAI,EAAEuU,IAAI,GAAG,EAAE,CAACynF,kBAAiB,EAAGC,OAAO,EAAEC,OAAO,EAAEl8F,IAAI,IAAIuU,IAAI,IAAI38E,KAAK4qE,GAAG,KAAK,EAAE,CAACw5F,kBAAiB,EAAGC,QAAQ,EAAEC,OAAO,EAAEl8F,IAAI,IAAIuU,IAAI,IAAI38E,KAAK4qE,GAAG,KAAK,EAAE,CAACw5F,kBAAiB,EAAGC,OAAO,EAAEC,QAAQ,EAAEl8F,IAAI,GAAGuU,IAAI,GAAG38E,KAAK4qE,GAAG,KAAK,EAAE,CAACw5F,kBAAiB,EAAGC,OAAO,EAAEC,OAAO,EAAEl8F,IAAI,GAAGuU,IAAI,GAAG38E,KAAK4qE,GAAG,KAAK,EAAE,CAACw5F,kBAAiB,EAAGC,OAAO,EAAEC,QAAQ,EAAEl8F,IAAI,IAAIuU,IAAI,IAAI38E,KAAK4qE,GAAG,KAAK,EAAE,CAACw5F,kBAAiB,EAAGC,OAAO,EAAEC,OAAO,EAAEl8F,IAAI,IAAIuU,IAAI,IAAI38E,KAAK4qE,GAAG,OAAO,IAAI25F,IAAG,EAAGC,IAAG,EAAG,GAAG,iBAAiB9uJ,UAAU,CAAC,IAAInJ,EAAEmJ,UAAUmhI,UAAU,GAAGtqI,EAAE8F,SAAS,SAAS9F,EAAE8F,SAAS,UAAU,CAAC,IAAIk1D,EAAEh7D,EAAE+E,MAAM,kBAAkB,GAAGi2D,EAAE,CAAC,IAAI,CAACh7D,EAAE9G,GAAG8hE,EAAEpqE,EAAE4K,OAAOwE,GAAG,GAAGxE,OAAOtC,GAAG8+J,GAAGpnK,EAAE,KAAKqnK,IAAG,CAAE,CAAC,MAAM,GAAGj4J,EAAE8F,SAAS,WAAW,CAAC,IAAI,CAACk1D,GAAGh7D,EAAE+E,MAAM,oBAAoBizJ,GAAGC,GAAGz8J,OAAOw/D,GAAG,EAAE,CAAC,GAAGh7D,EAAE8F,SAAS,WAAW,CAAC,IAAI,CAACk1D,GAAGh7D,EAAE+E,MAAM,iBAAiBizJ,GAAGC,GAAGz8J,OAAOw/D,GAAG,EAAE,MAAM,GAAGh7D,EAAE8F,SAAS,YAAY,CAAC,IAAI,CAACk1D,GAAGh7D,EAAE+E,MAAM,kBAAkBizJ,GAAGC,GAAGz8J,OAAOw/D,GAAG,EAAE,CAAC,CAAuF,MAAMk9F,WAAW,GAAE,WAAApmK,IAAekpE,GAAGxxD,SAASwxD,GAAG,GAAE5pE,KAAK,SAAS,IAAI+mK,IAAI,IAAI/mK,KAAKq7J,YAAYr7J,KAAKgnK,OAAOv+J,IAAI,EAAEzI,KAAKq7J,WAAW,CAAC,UAAA4L,CAAWr4J,EAAEg7D,EAAE9hE,GAAG,GAAG,IAAI8G,GAAG,IAAI5O,KAAKq7J,YAAYvzJ,EAAE,CAAC,IAAI8G,EAAE,IAAI2sJ,SAASzzJ,EAAE2zJ,QAAQ3zJ,EAAEA,EAAEszJ,WAAWtzJ,EAAEuzJ,YAAYr7J,KAAKw7J,cAAc5sJ,EAAE,KAAK,CAAC,IAAI9G,EAAE8G,EAAEg7D,EAAE,GAAG9hE,EAAE9H,KAAKq7J,WAAW,CAAC,IAAIO,SAAShtJ,GAAG5O,KAAKknK,QAAQp/J,GAAG9H,KAAKw7J,cAAc5sJ,EAAE,CAAC,CAAC,CAAC,OAAAs4J,CAAQt4J,GAAG,IAAIg7D,EAAEA,EAAE,GAAE,GAAEu9F,YAAYv4J,GAAG,IAAIusJ,WAAWvsJ,GAAG,IAAI9G,EAAE,IAAIyzJ,SAAS3xF,EAAE6xF,OAAO7xF,EAAEwxF,WAAWxxF,EAAEyxF,YAAY,OAAOzxF,EAAEryD,IAAI,IAAI4jJ,WAAWn7J,KAAKy7J,OAAOz7J,KAAKo7J,WAAWp7J,KAAKq7J,YAAY,GAAG,CAAC+L,SAASx9F,EAAEgyF,SAAS9zJ,EAAE,CAAC,QAAAi0J,CAASntJ,EAAEg7D,EAAE9hE,GAAE,GAAI,OAAO8hE,EAAEA,GAAG5pE,KAAK67J,aAAajtJ,GAAG9G,GAAG9H,KAAKinK,WAAWr4J,EAAEg7D,GAAG5pE,KAAKgnK,OAAOv+J,IAAImG,EAAEg7D,GAAGxxD,MAAM2jJ,SAASntJ,EAAEg7D,EAAE,CAAC,GAAAryD,CAAI3I,EAAEg7D,EAAE9hE,GAAE,GAAIA,GAAG9H,KAAKinK,WAAWr9F,EAAEh7D,EAAEysJ,WAAWzsJ,GAAG,IAAIpP,EAAE4Y,MAAMb,IAAI3I,EAAEg7D,GAAG,OAAO5pE,KAAKgnK,OAAOv+J,IAAImhE,EAAEpqE,EAAE67J,YAAY77J,CAAC,CAAC,iBAAM09J,CAAYtuJ,EAAEg7D,GAAG5pE,KAAK6+J,UAAU7+J,KAAKgnK,OAAOtE,UAAU9zJ,EAAEg7D,UAAU5pE,KAAK2iK,UAAU/zJ,EAAEg7D,GAAG,CAAC,SAAA84F,CAAU9zJ,EAAEg7D,GAAG,OAAO5pE,KAAKgnK,OAAOtE,UAAU9zJ,EAAEg7D,EAAE,EAAE,MAAMm9F,GAAG,WAAArmK,GAAc,GAAEV,KAAK,OAAO,GAAG,CAAC,UAAIP,GAAS,OAAOO,KAAK6sD,KAAKptD,MAAM,CAAC,GAAAgJ,CAAImG,EAAEg7D,EAAE9hE,EAAE,GAAG,IAAItI,EAAEoP,EAAEg7D,EAAEzmB,EAAEnjD,KAAK6sD,KAAKhlD,OAAQ+hE,GAAGy9F,GAAGz4J,EAAEg7D,EAAEoR,OAAOx7E,IAAI6nK,GAAGz4J,EAAEg7D,EAAE7mB,IAAIvjD,IAAK,GAAG2jD,EAAE1jD,OAAO,EAAE,CAACmP,EAAEvM,KAAKE,IAAIqM,KAAKu0C,EAAEj7C,IAAK0G,GAAGA,EAAEosE,SAAUx7E,EAAE6C,KAAKmN,IAAIhQ,KAAK2jD,EAAEj7C,IAAK0G,GAAGA,EAAEm0C,MAAO6mB,EAAEpqE,EAAEoP,EAAE,IAAI9G,EAAEq7C,EAAE5S,QAAQzoC,EAAEkzE,OAAOpsE,EAAE9G,EAAErI,OAAOmqE,EAAE9hE,EAAEi7C,IAAIvjD,EAAEQ,KAAK6sD,KAAK7sD,KAAK6sD,KAAKhlD,OAAQ+G,IAAIu0C,EAAEzuC,SAAS9F,GAAI,MAAM5O,KAAK6sD,KAAK3sD,KAAK,CAAC86E,OAAOpsE,EAAEnP,OAAOmqE,EAAE7mB,IAAIvjD,GAAG,CAAC,SAAAkjK,CAAU9zJ,EAAEg7D,GAAG,IAAI9hE,EAAE8G,EAAEg7D,EAAE,OAAO5pE,KAAK6sD,KAAKjlC,KAAMgiD,GAAGA,EAAEoR,QAAQpsE,GAAG9G,GAAG8hE,EAAE7mB,IAAK,EAAE,SAASskH,GAAGz4J,EAAEg7D,EAAE9hE,GAAG,OAAO8G,GAAGg7D,GAAGA,GAAG9hE,CAAC,CAAC,MAAMw/J,WAAWR,GAAG,WAAApmK,CAAYkpE,EAAE9hE,GAAGsQ,MAAM,GAAG,GAAEpY,KAAK,aAAa,GAAGA,KAAKmK,MAAMy/D,EAAE5pE,KAAK4P,QAAQ9H,CAAC,CAAC,eAAM07J,GAAYxjK,KAAK6+J,SAAQ,QAAS7+J,KAAK2iK,UAAU3iK,KAAK2jK,gBAAgB,CAAC,iBAAM4D,GAAcvnK,KAAK6+J,SAAQ,QAAS7+J,KAAK2iK,UAAU,EAAE3iK,KAAK4P,QAAQkvJ,eAAe,CAAC,mBAAM8E,CAAch1J,EAAE5O,KAAK2jK,iBAAiB,GAAG3jK,KAAKwnK,UAAU,OAAOxnK,KAAKynK,cAAa,EAAG,IAAI79F,EAAE5pE,KAAK4P,QAAQqvJ,UAAUn3J,QAAQ9H,KAAK2iK,UAAU/zJ,EAAEg7D,GAAG,QAAQ9hE,GAAGA,EAAEuzJ,aAAazxF,CAAC,CAAC,eAAM+4F,CAAU/zJ,EAAEg7D,GAAG,GAAG5pE,KAAKynK,aAAa,KAAK79F,EAAE5pE,KAAK0nK,gBAAgB94J,EAAEg7D,IAAI,OAAO5pE,KAAK2nK,WAAW/4J,EAAEg7D,EAAE,CAAC,eAAA89F,CAAgB94J,EAAEg7D,GAAG,YAAY,IAAI5pE,KAAK+hC,MAAMnzB,EAAEg7D,EAAE5pE,KAAK+hC,KAAK1/B,KAAKmN,IAAI,EAAExP,KAAK+hC,KAAKnzB,GAAGg7D,CAAC,CAAC,mBAAI+5F,GAAkB,GAAG,IAAI3jK,KAAKgnK,OAAOn6G,KAAKptD,OAAO,OAAOO,KAAKgnK,OAAOn6G,KAAK,GAAGptD,MAAM,CAAC,oBAAIikK,GAAmB,OAAO1jK,KAAKynK,WAAWznK,KAAK4P,QAAQsvJ,UAAU,CAAC,aAAIsI,GAAY,YAAY,IAAIxnK,KAAK+hC,MAAM/hC,KAAK2jK,kBAAkB3jK,KAAK+hC,IAAI,CAAC,IAAAE,GAAO,OAAOjiC,KAAK4P,QAAQivJ,QAAQ7+J,KAAKunK,cAAcvnK,KAAKwjK,WAAW,CAAC,KAAAl/J,GAAQ,EAAE,GAAEiT,IAAI,OAAO,cAAc+vJ,GAAG,eAAM9D,GAAYxjK,KAAK6+J,SAAQ,EAAG,IAAIjwJ,QAAQ,GAAE5O,KAAKmK,OAAOnK,KAAK07J,iBAAiB9sJ,EAAE,CAAC,WAAA24J,GAAc,OAAOvnK,KAAK6+J,SAAQ,EAAG7+J,KAAK+hC,KAAK/hC,KAAKmK,MAAM43B,KAAK3pB,MAAMmvJ,aAAa,CAAC,gBAAMI,CAAW/4J,EAAEg7D,GAAG,IAAI9hE,EAAE8hE,EAAEh7D,EAAEg7D,OAAO,EAAEpqE,EAAEQ,KAAKmK,MAAMjH,MAAM0L,EAAE9G,GAAGq7C,QAAQ,GAAE3jD,GAAG,OAAOQ,KAAKuX,IAAI4rC,EAAEv0C,GAAE,EAAG,IAAI,ICAzu3B,IACEwP,QAAS,CACPwpJ,qBAAsB,6BC4F1B,MAAM,GAAiB,CACrBC,eAAgB,KAChBC,gBAAiB,KACjBC,cAAe,aACfC,+BAA+B,EAC/B1uJ,MAAM,GAMO,MAAM2uJ,WAA2B,GAC9C,WAAAvnK,CAAYuuJ,EAAMpuE,GAgFhB,GA/EAzoE,MAAM62I,EAAM,IACP,MACApuE,IAEL7gF,KAAKkoK,YAAclwB,KACZA,EAAKgT,SAAWhT,EAAKr0I,MAAQq2J,GAAmBhiB,EAAKnyI,QAAUmyI,EAAKS,UACvEz4I,KAAKmoK,WAAWnwB,EAAK1vH,KAMzBtoB,KAAKooK,gBAAkBpwB,IACrB,MAAM7oI,EAAQnP,KAAKqoK,MAAMllK,QAAQ60I,EAAK1vH,KACvB,IAAXnZ,GACFnP,KAAKqoK,MAAMp0J,OAAO9E,EAAO,IAM7BnP,KAAKsoK,cAAgBtwB,IACnB,MAAM7oI,EAAQnP,KAAKqoK,MAAMllK,QAAQ60I,EAAK1vH,KACvB,IAAXnZ,GACFnP,KAAKqoK,MAAMp0J,OAAO9E,EAAO,GAIvB6oI,EAAKgT,SAAW+O,GAAY/hB,EAAKgT,UACnC5wI,IAAImuJ,gBAAgBvwB,EAAKgT,UAG7BhrJ,KAAKwoK,WAAa,KACMxoK,KAAKivJ,KAAKzK,WAAW38I,OAAOmwI,GAAQA,EAAKywB,YACjDrlI,QAAQ40G,IAEfA,EAAKgT,UAAW+O,GAAY/hB,EAAKgT,UACpChrJ,KAAKmoK,WAAWnwB,EAAK1vH,OAI3BtoB,KAAK0oK,kBAAoB,KACvB1oK,KAAKqoK,MAAQ,IAEfroK,KAAK2oK,sBAAwB9hB,IAC3BA,EAAQzjH,QAAQ8/G,IACd,MAAMlL,EAAOh4I,KAAKivJ,KAAK5N,QAAQ6B,GAC/BljJ,KAAKivJ,KAAKriJ,KAAK,sBAAuBorI,EAAM,CAC1CnzG,KAAM,gBACNr/B,QAASxF,KAAK0iJ,KAAK,4BAGvB,MAAMkmB,EAA+B,KACnC/hB,EAAQzjH,QAAQ8/G,IACd,MAAMlL,EAAOh4I,KAAKivJ,KAAK5N,QAAQ6B,GAC/BljJ,KAAKivJ,KAAKriJ,KAAK,sBAAuBorI,MAG1C,OAAO,IAAI1/H,QAAQC,IACbvY,KAAK6oK,gBACP7oK,KAAKivJ,KAAKzjJ,KAAK,0BAA2B,KACxCo9J,IACArwJ,OAGFqwJ,IACArwJ,QAINvY,KAAK6F,KAAO,WACZ7F,KAAKsoB,GAAKtoB,KAAK6gF,KAAKv4D,IAAM,qBAC1BtoB,KAAKg8E,MAAQ,sBACbh8E,KAAKqoK,MAAQ,GACbroK,KAAK6oK,iBAAkB,EACvB7oK,KAAK8oK,0BAA4B,IACjC9oK,KAAK+nK,cAAgB/nK,KAAK6gF,KAAKknF,cAC/B/nK,KAAK6hJ,cAAgB,GACrB7hJ,KAAKoiJ,WACDpiJ,KAAK6gF,KAAKvnE,MAAQtZ,KAAK6gF,KAAKmnF,8BAC9B,MAAM,IAAI7gJ,MAAM,yJAEpB,CACA,eAAA4hJ,CAAgB/wB,EAAMgxB,EAAaC,GACjC,MAAMC,EAAc9uJ,IAAI+uJ,gBAAgBnxB,EAAKr0I,MACvCylK,EAAS,IAAI9wJ,QAAQ,CAACC,EAAS9R,KACnC,MAAMm5J,EAAQ,IAAIyJ,MAClBzJ,EAAM1mJ,IAAMgwJ,EACZtJ,EAAMx+J,iBAAiB,OAAQ,KAC7BgZ,IAAImuJ,gBAAgBW,GACpB3wJ,EAAQqnJ,KAEVA,EAAMx+J,iBAAiB,QAASqE,IAC9B2U,IAAImuJ,gBAAgBW,GACpBziK,EAAOhB,EAAMjB,OAAS,IAAI2iB,MAAM,mCAG9BmiJ,EF5MugyBtsJ,eAAkBpO,GAAG,IAAIg7D,QAA1nC5sD,eAAkBpO,GAAG,IAAIg7D,EAAE,IAAI,GAAE28F,UAAU38F,EAAE3nC,KAAKrzB,GAAG,IAAI9G,QAAQ8hE,EAAE9jE,QAAQ,GAAGgC,GAAGA,EAAEuyJ,KAAK,OAAOvyJ,EAAEuyJ,KAAK,IAAI,CAAwhCkP,CAAG36J,GAAG,OAAO3D,OAAOuc,OAAO,CAAC02D,OAAO0oF,GAAG4C,IAAI3C,IAAIL,GAAG58F,GAAG,CE4MvkyB,CAASouE,EAAKr0I,MAAMu0D,MAAM,IAAM,GAC3D,OAAO5/C,QAAQ2oB,IAAI,CAACmoI,EAAQE,IAAqB1vI,KAAKqpH,IACpD,IAAK2c,EAAO6J,GAAexmB,EAC3B,MAAMymB,EAAa1pK,KAAK2pK,0BAA0B/J,EAAOoJ,EAAaC,EAAcQ,EAAYh/F,KAC1Fm/F,EApKZ,SAAqBhK,EAAO3gF,GAC1B,IAAI7iB,EAAIwjG,EAAMztI,MACV4oC,EAAI6kG,EAAM7rG,OACQ,KAAlBkrB,EAAUxU,KAAgC,MAAlBwU,EAAUxU,MACpCrO,EAAIwjG,EAAM7rG,OACVgH,EAAI6kG,EAAMztI,OAEZ,MAAM+rD,EAASl/E,SAASmK,cAAc,UACtC+0E,EAAO/rD,MAAQiqC,EACf8hB,EAAOnqB,OAASgH,EAChB,MAAMxvD,EAAU2yE,EAAOC,WAAW,MAOlC,OANA5yE,EAAQ0zE,UAAU7iB,EAAI,EAAGrB,EAAI,GACzBkkB,EAAUf,SACZ3yE,EAAQi/D,OAAOyU,EAAUD,KACzBzzE,EAAQ8tE,MAAM4F,EAAUynF,OAAQznF,EAAU0nF,SAE5Cp7J,EAAQ2zE,UAAU0gF,GAAQA,EAAMztI,MAAQ,GAAIytI,EAAM7rG,OAAS,EAAG6rG,EAAMztI,MAAOytI,EAAM7rG,QAC1EmqB,CACT,CAkJ2B2rF,CAAYjK,EAAO6J,GAExC,OAjMN,SAAsBvrF,EAAQr4E,GAC5B,IACEq4E,EAAOC,WAAW,MAAM2rF,aAAa,EAAG,EAAG,EAAG,EAChD,CAAE,MAAOhyG,GACP,GAAiB,KAAbA,EAAIQ,KACN,OAAOhgD,QAAQ7R,OAAO,IAAI0gB,MAAM,8DAEpC,CACA,OAAI+2D,EAAO6rF,OACF,IAAIzxJ,QAAQC,IACjB2lE,EAAO6rF,OAAOxxJ,EAAS1S,EAuL+B,MAtLrD+zB,KAAKowI,IACN,GAAa,OAATA,EACF,MAAM,IAAI7iJ,MAAM,8DAElB,OAAO6iJ,IAGJ1xJ,QAAQC,UAAUqhB,KAAK,ILlChC,SAAuBqwI,EAASppF,EAAMqpF,GACpC,IAAIjnB,EAAMknB,EAEV,MAAMC,EAActQ,GAAiBjyF,KAAKoiG,GAGpC1nJ,EAAiI,OAArH0gI,EAA2C,OAAnCknB,EAAiBtpF,EAAKt+D,UAAoB4nJ,EAAgC,MAAfC,OAA2B,EAAIA,EAAY,IAAcnnB,EAAO,aACrJ,IAAIt/I,EACJ,GAAuD,OAAnC,MAAfymK,OAA2B,EAAIA,EAAY,IAAa,CAC3D,MAAMC,EAASC,KAAK/jJ,mBAAmB6jJ,EAAY,KAC7CG,EAAQ,IAAIpP,WAAWkP,EAAO5qK,QACpC,IAAK,IAAID,EAAI,EAAGA,EAAI6qK,EAAO5qK,OAAQD,IACjC+qK,EAAM/qK,GAAK6qK,EAAOhyB,WAAW74I,GAE/BmE,EAAO,CAAC4mK,EACV,MAA8D,OAAnC,MAAfH,OAA2B,EAAIA,EAAY,MACrDzmK,EAAO,CAAC4iB,mBAAmB6jJ,EAAY,MAIzC,OAAIF,EACK,IAAIplJ,KAAKnhB,EAAMk9E,EAAK9hF,MAAQ,GAAI,CACrC8G,KAAM0c,IAGH,IAAI09I,KAAKt8J,EAAM,CACpBkC,KAAM0c,GAEV,CKOW,CAAc27D,EAAO6rC,UAAUlkH,EA8KkB,IA9KF,CAAC,IACtD+zB,KAAKowI,IACN,GAAa,OAATA,EACF,MAAM,IAAI7iJ,MAAM,mDAElB,OAAO6iJ,GAEX,CAuKaQ,CADcxqK,KAAKyqK,YAAYb,EAAcF,EAAWv3I,MAAOu3I,EAAW31G,QAC/C/zD,KAAK+nK,iBACtCnuI,KAAKowI,GACC5vJ,IAAI+uJ,gBAAgBa,GAE/B,CAQA,yBAAAL,CAA0Be,EAAKv4I,EAAO4hC,EAAQ0W,GAE5C,IAAIkgG,EAASD,EAAIv4I,MAAQu4I,EAAI32G,OAI7B,OAHY,KAAR0W,GAAsB,MAARA,IAChBkgG,EAASD,EAAI32G,OAAS22G,EAAIv4I,OAEf,MAATA,EACK,CACLA,QACA4hC,OAAQ1xD,KAAKyI,MAAMqnB,EAAQw4I,IAGjB,MAAV52G,EACK,CACL5hC,MAAO9vB,KAAKyI,MAAMipD,EAAS42G,GAC3B52G,UAGG,CACL5hC,MAAOnyB,KAAK8oK,0BACZ/0G,OAAQ1xD,KAAKyI,MAAM9K,KAAK8oK,0BAA4B6B,GAExD,CAQA,WAAAF,CAAY7K,EAAOoJ,EAAaC,GAI9B,IAAIyB,EA5LR,SAAiB9K,GAGf,MAAMp4F,EAAQo4F,EAAMztI,MAAQytI,EAAM7rG,OAC5B62G,EAAY,IACZlpE,EAAU,KAEhB,IAAIgxB,EAAOrwH,KAAKuI,MAAMvI,KAAK6sE,KAAK07F,EAAYpjG,IACxCmrD,EAAOtwH,KAAKuI,MAAMggK,EAAYvoK,KAAK6sE,KAAK07F,EAAYpjG,IASxD,GARIkrD,EAAOhxB,IACTgxB,EAAOhxB,EACPixB,EAAOtwH,KAAKyI,MAAM4nH,EAAOlrD,IAEvBmrD,EAAOjxB,IACTixB,EAAOjxB,EACPgxB,EAAOrwH,KAAKyI,MAAM08D,EAAQmrD,IAExBitC,EAAMztI,MAAQugG,EAAM,CACtB,MAAMx0C,EAASl/E,SAASmK,cAAc,UAItC,OAHA+0E,EAAO/rD,MAAQugG,EACfx0C,EAAOnqB,OAAS4+D,EAChBz0C,EAAOC,WAAW,MAAMe,UAAU0gF,EAAO,EAAG,EAAGltC,EAAMC,GAC9Cz0C,CACT,CACA,OAAO0hF,CACT,CAmKciL,CAAQjL,GACdl2B,EAAQrnI,KAAK+wG,KAAK/wG,KAAKyoK,KAAKJ,EAAIv4I,MAAQ62I,IACxCt/B,EAAQ,IACVA,EAAQ,GAEV,IAAIqhC,EAAK/B,EAAc,IAAMt/B,EAAQ,GACjCshC,EAAK/B,EAAe,IAAMv/B,EAAQ,GAEtC,KAAOA,KAAS,CACd,MAAMxrD,EAASl/E,SAASmK,cAAc,UACtC+0E,EAAO/rD,MAAQ44I,EACf7sF,EAAOnqB,OAASi3G,EAChB9sF,EAAOC,WAAW,MAAMe,UAAUwrF,EAAK,EAAG,EAAGK,EAAIC,GACjDN,EAAMxsF,EACN6sF,EAAK1oK,KAAKyI,MAAMigK,EAPR,GAQRC,EAAK3oK,KAAKyI,MAAMkgK,EARR,EASV,CACA,OAAON,CACT,CAKA,aAAAO,CAAc/nB,EAAQ8H,GACpBhrJ,KAAKivJ,KAAKxN,aAAayB,EAAQ,CAC7B8H,WAEJ,CACA,UAAAmd,CAAWjlB,GACTljJ,KAAKqoK,MAAMnoK,KAAKgjJ,IACa,IAAzBljJ,KAAK6oK,iBACP7oK,KAAKkrK,cAET,CACA,YAAAA,GAEE,GADAlrK,KAAK6oK,iBAAkB,EACnB7oK,KAAKqoK,MAAM5oK,OAAS,EAAG,CACzB,MAAM0sE,EAAUnsE,KAAKivJ,KAAK5N,QAAQrhJ,KAAKqoK,MAAM93H,SAC7C,OAAK47B,EAIEnsE,KAAKmrK,iBAAiBh/F,GAASjU,MAAM,QAC3Ct+B,KAAK,IAAM55B,KAAKkrK,iBAJflrK,KAAKivJ,KAAKnvJ,IAAI,sIAAuI,SAC9IwY,QAAQC,UAInB,CAIA,OAHAvY,KAAK6oK,iBAAkB,EACvB7oK,KAAKivJ,KAAKnvJ,IAAI,gDACdE,KAAKivJ,KAAKriJ,KAAK,2BACR0L,QAAQC,SACjB,CACA,gBAAA4yJ,CAAiBnzB,GACf,OAAIgiB,GAAmBhiB,EAAKnyI,QAAUmyI,EAAKS,SAClCz4I,KAAK+oK,gBAAgB/wB,EAAMh4I,KAAK6gF,KAAKgnF,eAAgB7nK,KAAK6gF,KAAKinF,iBAAiBluI,KAAKoxH,IAC1FhrJ,KAAKirK,cAAcjzB,EAAK1vH,GAAI0iI,GAC5BhrJ,KAAKivJ,KAAKnvJ,IAAI,gDAAgDk4I,EAAK1vH,MACnEtoB,KAAKivJ,KAAKriJ,KAAK,sBAAuB5M,KAAKivJ,KAAK5N,QAAQrJ,EAAK1vH,IAAK0iI,KACjE9yF,MAAMJ,IACP93D,KAAKivJ,KAAKnvJ,IAAI,6CAA6Ck4I,EAAK1vH,MAAO,WACvEtoB,KAAKivJ,KAAKnvJ,IAAIg4D,EAAK,WACnB93D,KAAKivJ,KAAKriJ,KAAK,kBAAmB5M,KAAKivJ,KAAK5N,QAAQrJ,EAAK1vH,IAAKwvC,KAG3Dx/C,QAAQC,SACjB,CACA,OAAA4wI,GACEnpJ,KAAKivJ,KAAK1hJ,GAAG,eAAgBvN,KAAKsoK,eAClCtoK,KAAKivJ,KAAK1hJ,GAAG,aAAcvN,KAAK0oK,mBAC5B1oK,KAAK6gF,KAAKvnE,MACZtZ,KAAKivJ,KAAK1hJ,GAAG,oBAAqBvN,KAAKkoK,aACvCloK,KAAKivJ,KAAK1hJ,GAAG,mBAAoBvN,KAAKooK,mBAEtCpoK,KAAKivJ,KAAK1hJ,GAAG,oBAAqBvN,KAAKkoK,aACvCloK,KAAKivJ,KAAK1hJ,GAAG,aAAcvN,KAAKkoK,aAChCloK,KAAKivJ,KAAK1hJ,GAAG,WAAYvN,KAAKwoK,aAE5BxoK,KAAK6gF,KAAKmnF,+BACZhoK,KAAKivJ,KAAKlL,gBAAgB/jJ,KAAK2oK,sBAEnC,CACA,SAAApf,GACEvpJ,KAAKivJ,KAAKxhJ,IAAI,eAAgBzN,KAAKsoK,eACnCtoK,KAAKivJ,KAAKxhJ,IAAI,aAAczN,KAAK0oK,mBAC7B1oK,KAAK6gF,KAAKvnE,MACZtZ,KAAKivJ,KAAKxhJ,IAAI,oBAAqBzN,KAAKkoK,aACxCloK,KAAKivJ,KAAKxhJ,IAAI,mBAAoBzN,KAAKooK,mBAEvCpoK,KAAKivJ,KAAKxhJ,IAAI,oBAAqBzN,KAAKkoK,aACxCloK,KAAKivJ,KAAKxhJ,IAAI,aAAczN,KAAKkoK,aACjCloK,KAAKivJ,KAAKxhJ,IAAI,WAAYzN,KAAKwoK,aAE7BxoK,KAAK6gF,KAAKmnF,+BACZhoK,KAAKivJ,KAAKjL,mBAAmBhkJ,KAAK2oK,sBAEtC,EAEFV,GAAmBnzB,QApVN,QCGb,OAVA,SAA4BnrI,GAC1B,GAAuB,iBAAZA,EAAsB,CAC/B,MAAMqV,EAAWhgB,SAAS2kB,iBAAiBha,GAC3C,OAA2B,IAApBqV,EAASvf,OAAe,KAAOiN,MAAMmS,KAAKG,EACnD,CACA,MAAuB,iBAAZrV,GAAwBilJ,GAAajlJ,GACvC,CAACA,GAEH,IACT,ECVA,GAAe+C,MAAU,KCAV,SAAS0+J,GAAoCC,EAAiBC,EAAYC,EAActoB,GACrG,IAAI,UACFuoB,GACEvoB,EACJooB,EAAgBI,YAAY3qJ,IAC1B,MAAM4qJ,EAAa,IAAIJ,KAAexqJ,GAGlCA,EAAQrhB,OACVksK,eAAe,KACbP,GAAoCC,EAAiBK,EAAYH,EAAc,CAC7EC,gBAKJA,EAAUE,IAIdlnK,IACE+mK,EAAa/mK,GACbgnK,EAAUF,IAEd,CCtBA,SAASM,GAA+BptE,EAAO+sE,GAC7C,OAAa,MAAT/sE,EAAsBA,EACnB,CACL2+D,KAEA3+D,EAAMqtE,OAAS,OAASrtE,EAAMstE,YAAc,iBAAclsK,EAC1Db,KAAMy/F,EAAMz/F,KACZ,OAAAsiJ,GACE,OAAO,IAAI/oI,QAAQ,CAACC,EAAS9R,IAAW+3F,EAAMw5C,KAAKz/H,EAAS9R,GAC9D,EACA,YAAO4X,GAEL,MAAMgtJ,EAAkB7sE,EAAMutE,eACxBjrJ,QAAgB,IAAIxI,QAAQC,IAChC6yJ,GAAoCC,EAAiB,GAAIE,EAAc,CACrEC,UAAWQ,GAAczzJ,EAAQyzJ,EAAW9jK,IAAI8vI,GAAQ4zB,GAA+B5zB,EAAMuzB,eAG1FzqJ,CACT,EACAmrJ,iBAAarsK,EAEjB,CACA,SAASssK,GAAuC1tE,EAAOs6C,EAAcqzB,GACnE,IAIE,YAH4B,IAAxBA,IACFA,OAAiBvsK,GAEZod,kBACL,MAAMovJ,EAAsB,IAAM,GAAGtzB,KAAgBt6C,EAAMz/F,OAG3D,GAAmB,SAAfy/F,EAAM2+D,KAAiB,CACzB,MAAMnlB,QAAax5C,EAAM6iD,UACb,MAARrJ,GAEFA,EAAKc,aAAeA,EAAeszB,IAAwB,WACrDp0B,GACqB,MAAlBm0B,UAA8BA,EAC3C,MAAO,GAAmB,cAAf3tE,EAAM2+D,KACf,UAAW,MAAMkP,KAAU7tE,EAAMngF,eAExB6tJ,GAAuCG,EAAQvzB,EAAeszB,IAAwB5tE,EAAMz/F,WAE1E,MAAlBotK,UAA8BA,EAC3C,CAjBOnvJ,EAkBT,CAAE,MAAOpO,GACP,OAAO0J,QAAQ7R,OAAOmI,EACxB,CACF,C,cCtDO,MAAM09J,WAAqBnlJ,MACjC,WAAAzmB,CAAY8E,GACX4S,MAAM5S,GACNxF,KAAKjB,KAAO,cACb,EAOM,MAAMwtK,WAAmBplJ,MAC/B,WAAAzmB,CAAY8E,GACX4S,QACApY,KAAKjB,KAAO,aACZiB,KAAKwF,QAAUA,CAChB,EAMD,MAAMgnK,GAAkBlZ,QAA4C1zJ,IAA5B4V,WAAWe,aAClD,IAAIg2J,GAAWjZ,GACf,IAAI/8I,aAAa+8I,GAKZmZ,GAAmBvqJ,IACxB,MAAMvc,OAA2B/F,IAAlBsiB,EAAOvc,OACrB6mK,GAAgB,+BAChBtqJ,EAAOvc,OAER,OAAOA,aAAkBwhB,MAAQxhB,EAAS6mK,GAAgB7mK,IClC3D,IAKI+mK,GALAC,GAAkE,SAAUl0H,EAAUxzC,EAAOk4J,EAAMxhG,GACnG,GAAa,MAATwhG,IAAiBxhG,EAAG,MAAM,IAAIrxD,UAAU,iDAC5C,GAAqB,mBAAVrF,EAAuBwzC,IAAaxzC,IAAU02D,GAAK12D,EAAM+F,IAAIytC,GAAW,MAAM,IAAInuC,UAAU,4EACvG,MAAgB,MAAT6yJ,EAAexhG,EAAa,MAATwhG,EAAexhG,EAAE52D,KAAK0zC,GAAYkjB,EAAIA,EAAEz8D,MAAQ+F,EAAMsQ,IAAIkjC,EACxF,EAkCAi0H,GAAuB,IAAI31J,QAC3B,IC5BI61J,GAAmBC,GAAmCC,GAA2BC,GAAuBC,GAAqBC,GAAkBC,GAAqBC,GAAoBC,GAAmBC,GAAeC,GAAoBC,GAAiBC,GAAqBC,GAAkBC,GAAwBC,GAAsCC,GAAwCC,GAAcC,GAA0BC,GAA8BC,GAA2BC,GAAoCC,GAAoBC,GAAsBC,GAAsBC,GD4BrlB,GAhCA,MACI,WAAA3tK,GACIgsK,GAAqBn1J,IAAIvX,KAAM,GACnC,CACA,OAAAsuK,CAAQC,EAAK3+J,GAKT,MAAMjG,EAAU,CACZ6kK,UALJ5+J,EAAU,CACN4+J,SAAU,KACP5+J,IAGe4+J,SAClBD,OAEJ,GAAIvuK,KAAK+hC,MAAQ4qI,GAAuB3sK,KAAM0sK,GAAsB,KAAK1sK,KAAK+hC,KAAO,GAAGysI,UAAY5+J,EAAQ4+J,SAExG,YADA7B,GAAuB3sK,KAAM0sK,GAAsB,KAAKxsK,KAAKyJ,GAGjE,MAAMwF,EEtBC,SAAoBi0C,EAAOlkD,EAAOuvK,GAC7C,IAAI52D,EAAQ,EACR/lC,EAAQ1uB,EAAM3jD,OAClB,KAAOqyE,EAAQ,GAAG,CACd,MAAM+qC,EAAOx6G,KAAKqsK,MAAM58F,EAAQ,GAChC,IAAI68F,EAAK92D,EAAQgF,EACb4xD,EAAWrrH,EAAMurH,GAAKzvK,IAAU,GAChC24G,IAAU82D,EACV78F,GAAS+qC,EAAO,GAGhB/qC,EAAQ+qC,CAEhB,CACA,OAAOhF,CACX,CFOsB+2D,CAAWjC,GAAuB3sK,KAAM0sK,GAAsB,KAAM/iK,EAAS,CAACT,EAAGyE,IAAMA,EAAE6gK,SAAWtlK,EAAEslK,UACpH7B,GAAuB3sK,KAAM0sK,GAAsB,KAAKz4J,OAAO9E,EAAO,EAAGxF,EAC7E,CACA,OAAAklK,GACI,MAAM7hG,EAAO2/F,GAAuB3sK,KAAM0sK,GAAsB,KAAKn8H,QACrE,OAAOy8B,aAAwC,EAAIA,EAAKuhG,GAC5D,CACA,MAAA1mK,CAAO+H,GACH,OAAO+8J,GAAuB3sK,KAAM0sK,GAAsB,KAAK7kK,OAAQ8B,GAAYA,EAAQ6kK,WAAa5+J,EAAQ4+J,UAAUtmK,IAAKyB,GAAYA,EAAQ4kK,IACvJ,CACA,QAAIxsI,GACA,OAAO4qI,GAAuB3sK,KAAM0sK,GAAsB,KAAKjtK,MACnE,GCpCAqvK,GAAkE,SAAUr2H,EAAUxzC,EAAO/F,EAAOi+J,EAAMxhG,GAC1G,GAAa,MAATwhG,EAAc,MAAM,IAAI7yJ,UAAU,kCACtC,GAAa,MAAT6yJ,IAAiBxhG,EAAG,MAAM,IAAIrxD,UAAU,iDAC5C,GAAqB,mBAAVrF,EAAuBwzC,IAAaxzC,IAAU02D,GAAK12D,EAAM+F,IAAIytC,GAAW,MAAM,IAAInuC,UAAU,2EACvG,MAAiB,MAAT6yJ,EAAexhG,EAAE52D,KAAK0zC,EAAUv5C,GAASy8D,EAAIA,EAAEz8D,MAAQA,EAAQ+F,EAAMsS,IAAIkhC,EAAUv5C,GAASA,CACxG,EACI,GAAkE,SAAUu5C,EAAUxzC,EAAOk4J,EAAMxhG,GACnG,GAAa,MAATwhG,IAAiBxhG,EAAG,MAAM,IAAIrxD,UAAU,iDAC5C,GAAqB,mBAAVrF,EAAuBwzC,IAAaxzC,IAAU02D,GAAK12D,EAAM+F,IAAIytC,GAAW,MAAM,IAAInuC,UAAU,4EACvG,MAAgB,MAAT6yJ,EAAexhG,EAAa,MAATwhG,EAAexhG,EAAE52D,KAAK0zC,GAAYkjB,EAAIA,EAAEz8D,MAAQ+F,EAAMsQ,IAAIkjC,EACxF,EAQO,MAAM,WAAmBtxB,OAmNhC0lJ,GAAoC,IAAI91J,QAAW+1J,GAA4B,IAAI/1J,QAAWg2J,GAAwB,IAAIh2J,QAAWi2J,GAAsB,IAAIj2J,QAAWk2J,GAAmB,IAAIl2J,QAAWm2J,GAAsB,IAAIn2J,QAAWo2J,GAAqB,IAAIp2J,QAAWq2J,GAAoB,IAAIr2J,QAAWs2J,GAAgB,IAAIt2J,QAAWu2J,GAAqB,IAAIv2J,QAAWw2J,GAAkB,IAAIx2J,QAAWy2J,GAAsB,IAAIz2J,QAAW02J,GAAmB,IAAI12J,QAAW22J,GAAyB,IAAI32J,QAAW61J,GAAoB,IAAImC,QAAWpB,GAAuC,WACjlB,OAAO,GAAuB3tK,KAAM8sK,GAA2B,MAAQ,GAAuB9sK,KAAM+sK,GAAuB,KAAO,GAAuB/sK,KAAMgtK,GAAqB,IACxL,EAAGY,GAAyC,WACxC,OAAO,GAAuB5tK,KAAMutK,GAAiB,KAAO,GAAuBvtK,KAAMwtK,GAAqB,IAClH,EAAGK,GAAe,WACd,IAAI9zJ,EACJ+0J,GAAuB9uK,KAAMutK,IAAkBxzJ,EAAK,GAAuB/Z,KAAMutK,GAAiB,OAAMxzJ,GAAW,KACnH,GAAuB/Z,KAAM4sK,GAAmB,IAAKoB,IAA2BjpK,KAAK/E,MACrFA,KAAK4M,KAAK,OACd,EAAGkhK,GAA2B,WAC1B,GAAuB9tK,KAAM4sK,GAAmB,IAAKsB,IAAoBnpK,KAAK/E,MAC9E,GAAuBA,KAAM4sK,GAAmB,IAAKqB,IAAoClpK,KAAK/E,MAC9F8uK,GAAuB9uK,KAAMotK,QAAmBxtK,EAAW,IAC/D,EAAGmuK,GAA+B,WAC9B,MAAM3tK,EAAMD,KAAKC,MACjB,QAA8DR,IAA1D,GAAuBI,KAAMmtK,GAAoB,KAAoB,CACrE,MAAMxoI,EAAQ,GAAuB3kC,KAAMktK,GAAqB,KAAO9sK,EACvE,KAAIukC,EAAQ,GAYR,YAL6D/kC,IAAzD,GAAuBI,KAAMotK,GAAmB,MAChD0B,GAAuB9uK,KAAMotK,GAAmBnrK,WAAW,KACvD,GAAuBjC,KAAM4sK,GAAmB,IAAKkB,IAA0B/oK,KAAK/E,OACrF2kC,GAAQ,MAER,EATPmqI,GAAuB9uK,KAAM+sK,GAAwB,GAAuB/sK,KAAM6sK,GAAmC,KAAQ,GAAuB7sK,KAAMutK,GAAiB,KAAO,EAAG,IAW7L,CACA,OAAO,CACX,EAAGS,GAA4B,WAC3B,GAA8D,IAA1D,GAAuBhuK,KAAMqtK,GAAe,KAAKtrI,KAWjD,OARI,GAAuB/hC,KAAMmtK,GAAoB,MACjD36I,cAAc,GAAuBxyB,KAAMmtK,GAAoB,MAEnE2B,GAAuB9uK,KAAMmtK,QAAoBvtK,EAAW,KAC5DI,KAAK4M,KAAK,SACiD,IAAvD,GAAuB5M,KAAMutK,GAAiB,MAC9CvtK,KAAK4M,KAAK,SAEP,EAEX,IAAK,GAAuB5M,KAAMytK,GAAkB,KAAM,CACtD,MAAMuB,GAAyB,GAAuBhvK,KAAM4sK,GAAmB,IAAKmB,IACpF,GAAI,GAAuB/tK,KAAM4sK,GAAmB,IAAKe,KAAyC,GAAuB3tK,KAAM4sK,GAAmB,IAAKgB,IAAyC,CAC5L,MAAMqB,EAAM,GAAuBjvK,KAAMqtK,GAAe,KAAKwB,UAC7D,QAAKI,IAGLjvK,KAAK4M,KAAK,UACVqiK,IACID,GACA,GAAuBhvK,KAAM4sK,GAAmB,IAAKqB,IAAoClpK,KAAK/E,OAE3F,EACX,CACJ,CACA,OAAO,CACX,EAAGiuK,GAAqC,WAChC,GAAuBjuK,KAAM8sK,GAA2B,WAAkEltK,IAA1D,GAAuBI,KAAMmtK,GAAoB,OAGrH2B,GAAuB9uK,KAAMmtK,GAAoB56I,YAAY,KACzD,GAAuBvyB,KAAM4sK,GAAmB,IAAKsB,IAAoBnpK,KAAK/E,OAC/E,GAAuBA,KAAMitK,GAAkB,MAAO,KACzD6B,GAAuB9uK,KAAMktK,GAAqB/sK,KAAKC,MAAQ,GAAuBJ,KAAMitK,GAAkB,KAAM,KACxH,EAAGiB,GAAqB,WAC6C,IAA7D,GAAuBluK,KAAM+sK,GAAuB,MAAqE,IAAvD,GAAuB/sK,KAAMutK,GAAiB,MAAc,GAAuBvtK,KAAMmtK,GAAoB,OAC/K36I,cAAc,GAAuBxyB,KAAMmtK,GAAoB,MAC/D2B,GAAuB9uK,KAAMmtK,QAAoBvtK,EAAW,MAEhEkvK,GAAuB9uK,KAAM+sK,GAAuB,GAAuB/sK,KAAM6sK,GAAmC,KAAO,GAAuB7sK,KAAMutK,GAAiB,KAAO,EAAG,KACnL,GAAuBvtK,KAAM4sK,GAAmB,IAAKuB,IAAsBppK,KAAK/E,KACpF,EAAGmuK,GAAuB,WAEtB,KAAO,GAAuBnuK,KAAM4sK,GAAmB,IAAKoB,IAA2BjpK,KAAK/E,QAChG,EAAGouK,GAAuBpxJ,eAAoCkF,GAC1D,OAAO,IAAI5J,QAAQ,CAAC6rE,EAAU19E,KAC1Byb,EAAO9gB,iBAAiB,QAAS,KAG7BqF,EAAO,IAAI,GAAW,2BACvB,CAAE+E,MAAM,KAEnB,EAAG6iK,GAAkBrxJ,eAA+BvX,EAAOoC,GACvD,OAAO,IAAIyQ,QAAQC,IACf,MAAM5M,EAAW,KACT9D,IAAWA,MAGf7H,KAAKyN,IAAIhI,EAAOkG,GAChB4M,MAEJvY,KAAKuN,GAAG9H,EAAOkG,IAEvB,EACA,IE1UqC,GAAE,GAAE,GAAE,GF0U3C,GAnTA,cAAqB,GAEjB,WAAAjL,CAAYkP,GACR,IAAImK,EAAIC,EAAIk1J,EAAIC,EAuChB,GAtCA/2J,QACAw0J,GAAkBnkK,IAAIzI,MACtB6sK,GAAkCt1J,IAAIvX,UAAW,GACjD8sK,GAA0Bv1J,IAAIvX,UAAW,GACzC+sK,GAAsBx1J,IAAIvX,KAAM,GAChCgtK,GAAoBz1J,IAAIvX,UAAW,GACnCitK,GAAiB11J,IAAIvX,UAAW,GAChCktK,GAAoB31J,IAAIvX,KAAM,GAC9BmtK,GAAmB51J,IAAIvX,UAAW,GAClCotK,GAAkB71J,IAAIvX,UAAW,GACjCqtK,GAAc91J,IAAIvX,UAAW,GAC7BstK,GAAmB/1J,IAAIvX,UAAW,GAClCutK,GAAgBh2J,IAAIvX,KAAM,GAE1BwtK,GAAoBj2J,IAAIvX,UAAW,GACnCytK,GAAiBl2J,IAAIvX,UAAW,GAChC0tK,GAAuBn2J,IAAIvX,UAAW,GAMtCiL,OAAOoK,eAAerV,KAAM,UAAW,CACnCsV,YAAY,EACZ+wE,cAAc,EACdrM,UAAU,EACV96E,WAAY,MAYqB,iBATrC0Q,EAAU,CACNw/J,2BAA2B,EAC3BC,YAAajlK,OAAOijE,kBACpBuhE,SAAU,EACV0gC,YAAallK,OAAOijE,kBACpBkiG,WAAW,EACXC,WAAY,MACT5/J,IAEcy/J,aAA4Bz/J,EAAQy/J,aAAe,GACpE,MAAM,IAAI/kK,UAAU,gEAAyJ,QAAxF0P,EAAoC,QAA9BD,EAAKnK,EAAQy/J,mBAAqC,IAAZt1J,OAAqB,EAAIA,EAAGvL,kBAAoC,IAAZwL,EAAgBA,EAAK,gBAAgBpK,EAAQy/J,gBAEtO,QAAyBzvK,IAArBgQ,EAAQg/H,YAA4BxkI,OAAO0gE,SAASl7D,EAAQg/H,WAAah/H,EAAQg/H,UAAY,GAC7F,MAAM,IAAItkI,UAAU,2DAAiJ,QAArF6kK,EAAiC,QAA3BD,EAAKt/J,EAAQg/H,gBAAkC,IAAZsgC,OAAqB,EAAIA,EAAG1gK,kBAAoC,IAAZ2gK,EAAgBA,EAAK,gBAAgBv/J,EAAQg/H,aAE9NkgC,GAAuB9uK,KAAM6sK,GAAmCj9J,EAAQw/J,0BAA2B,KACnGN,GAAuB9uK,KAAM8sK,GAA2Bl9J,EAAQy/J,cAAgBjlK,OAAOijE,mBAA0C,IAArBz9D,EAAQg/H,SAAgB,KACpIkgC,GAAuB9uK,KAAMgtK,GAAqBp9J,EAAQy/J,YAAa,KACvEP,GAAuB9uK,KAAMitK,GAAkBr9J,EAAQg/H,SAAU,KACjEkgC,GAAuB9uK,KAAMqtK,GAAe,IAAIz9J,EAAQ4/J,WAAc,KACtEV,GAAuB9uK,KAAMstK,GAAoB19J,EAAQ4/J,WAAY,KACrExvK,KAAKsvK,YAAc1/J,EAAQ0/J,YAC3BtvK,KAAKunD,QAAU33C,EAAQ23C,QACvBunH,GAAuB9uK,KAAM0tK,IAAmD,IAA3B99J,EAAQ6/J,eAAyB,KACtFX,GAAuB9uK,KAAMytK,IAAwC,IAAtB79J,EAAQ2/J,UAAqB,IAChF,CACA,eAAID,GACA,OAAO,GAAuBtvK,KAAMwtK,GAAqB,IAC7D,CACA,eAAI8B,CAAYI,GACZ,KAAgC,iBAAnBA,GAA+BA,GAAkB,GAC1D,MAAM,IAAIplK,UAAU,gEAAgEolK,eAA4BA,MAEpHZ,GAAuB9uK,KAAMwtK,GAAqBkC,EAAgB,KAClE,GAAuB1vK,KAAM4sK,GAAmB,IAAKuB,IAAsBppK,KAAK/E,KACpF,CACA,SAAMyI,CAAIknK,EAAW//J,EAAU,CAAC,GAM5B,OALAA,EAAU,CACN23C,QAASvnD,KAAKunD,QACdkoH,eAAgB,GAAuBzvK,KAAM0tK,GAAwB,QAClE99J,GAEA,IAAI0I,QAAQ,CAACC,EAAS9R,KACzB,GAAuBzG,KAAMqtK,GAAe,KAAKiB,QAAQtxJ,UACrD,IAAIjD,EACAC,EAAIk1J,EACRJ,GAAuB9uK,KAAMutK,IAAkBvzJ,EAAK,GAAuBha,KAAMutK,GAAiB,OAAMvzJ,GAAW,KACnH80J,GAAuB9uK,KAAM+sK,IAAwBmC,EAAK,GAAuBlvK,KAAM+sK,GAAuB,OAAMmC,GAAW,KAC/H,IAEI,GAA8B,QAAzBn1J,EAAKnK,EAAQsS,cAAgC,IAAZnI,OAAqB,EAAIA,EAAG61J,QAE9D,MAAM,IAAI,GAAW,yBAEzB,IAAIC,EAAYF,EAAU,CAAEztJ,OAAQtS,EAAQsS,SACxCtS,EAAQ23C,UACRsoH,EF3ET,SAAkB3gJ,EAAS4gJ,EAAcvsF,EAAU3zE,GACjE,IAAImgK,EAEJ,MAAMC,EAAoB,IAAI13J,QAAQ,CAACC,EAAS9R,KAC/C,GAA4B,iBAAjBqpK,GAAyD,IAA5BztK,KAAKsrE,KAAKmiG,GACjD,MAAM,IAAIxlK,UAAU,4DAA4DwlK,OAGjF,GAAIA,IAAiB1lK,OAAOijE,kBAA5B,CAUA,IALAz9D,EAAU,CACTqgK,aAAc,CAAChuK,sBAAYF,8BACxB6N,IAGQsS,OAAQ,CACnB,MAAM,OAACA,GAAUtS,EACbsS,EAAO0tJ,SACVnpK,EAAOgmK,GAAiBvqJ,IAGzBA,EAAO9gB,iBAAiB,QAAS,KAChCqF,EAAOgmK,GAAiBvqJ,KAE1B,CAEA6tJ,EAAQngK,EAAQqgK,aAAahuK,WAAW8C,UAAKnF,EAAW,KAWvD,MACMswK,EAAe3sF,aAAoBp8D,MAAQo8D,EAAW,IAAI+oF,GADN,2BAA2BwD,kBAGvD,mBAAnB5gJ,EAAQje,QAClBie,EAAQje,SAGTxK,EAAOypK,IACLJ,GAEH,WACC,IACCv3J,QAAc2W,EACf,CAAE,MAAO1qB,GACRiC,EAAOjC,EACR,CAAE,QACDoL,EAAQqgK,aAAaluK,aAAagD,UAAKnF,EAAWmwK,EACnD,CACA,EARD,EAvCA,MAFCx3J,EAAQ2W,KAyDV,OALA8gJ,EAAkB5tI,MAAQ,KACzBrgC,aAAaguK,GACbA,OAAQnwK,GAGFowK,CACR,CEQoCG,CAAS73J,QAAQC,QAAQs3J,GAAYjgK,EAAQ23C,UAEzD33C,EAAQsS,SACR2tJ,EAAYv3J,QAAQ83J,KAAK,CAACP,EAAW,GAAuB7vK,KAAM4sK,GAAmB,IAAKwB,IAAsBrpK,KAAK/E,KAAM4P,EAAQsS,WAEvI,MAAMrT,QAAeghK,EACrBt3J,EAAQ1J,GACR7O,KAAK4M,KAAK,YAAaiC,EAC3B,CACA,MAAOrK,GACH,GAAIA,aAAiB8nK,KAAiB18J,EAAQ6/J,eAE1C,YADAl3J,IAGJ9R,EAAOjC,GACPxE,KAAK4M,KAAK,QAASpI,EACvB,CACA,QACI,GAAuBxE,KAAM4sK,GAAmB,IAAKiB,IAAc9oK,KAAK/E,KAC5E,GACD4P,GACH5P,KAAK4M,KAAK,OACV,GAAuB5M,KAAM4sK,GAAmB,IAAKoB,IAA2BjpK,KAAK/E,OAE7F,CACA,YAAMqwK,CAAOC,EAAW1gK,GACpB,OAAO0I,QAAQ2oB,IAAIqvI,EAAUpoK,IAAI8U,MAAO2yJ,GAAc3vK,KAAKyI,IAAIknK,EAAW//J,IAC9E,CAIA,KAAA7O,GACI,OAAK,GAAuBf,KAAMytK,GAAkB,MAGpDqB,GAAuB9uK,KAAMytK,IAAkB,EAAO,KACtD,GAAuBztK,KAAM4sK,GAAmB,IAAKuB,IAAsBppK,KAAK/E,MACzEA,MAJIA,IAKf,CAIA,KAAAmyC,GACI28H,GAAuB9uK,KAAMytK,IAAkB,EAAM,IACzD,CAIA,KAAArrI,GACI0sI,GAAuB9uK,KAAMqtK,GAAe,IAAK,GAAuBrtK,KAAMstK,GAAoB,MAAS,IAC/G,CAMA,aAAMiD,GAE4D,IAA1D,GAAuBvwK,KAAMqtK,GAAe,KAAKtrI,YAG/C,GAAuB/hC,KAAM4sK,GAAmB,IAAKyB,IAAiBtpK,KAAK/E,KAAM,QAC3F,CAQA,oBAAMwwK,CAAe5zD,GAEb,GAAuB58G,KAAMqtK,GAAe,KAAKtrI,KAAO66E,SAGtD,GAAuB58G,KAAM4sK,GAAmB,IAAKyB,IAAiBtpK,KAAK/E,KAAM,OAAQ,IAAM,GAAuBA,KAAMqtK,GAAe,KAAKtrI,KAAO66E,EACjK,CAMA,YAAM6zD,GAEyD,IAAvD,GAAuBzwK,KAAMutK,GAAiB,MAAwE,IAA1D,GAAuBvtK,KAAMqtK,GAAe,KAAKtrI,YAG3G,GAAuB/hC,KAAM4sK,GAAmB,IAAKyB,IAAiBtpK,KAAK/E,KAAM,OAC3F,CAIA,QAAI+hC,GACA,OAAO,GAAuB/hC,KAAMqtK,GAAe,KAAKtrI,IAC5D,CAMA,MAAA2uI,CAAO9gK,GAEH,OAAO,GAAuB5P,KAAMqtK,GAAe,KAAKxlK,OAAO+H,GAASnQ,MAC5E,CAIA,WAAIkxK,GACA,OAAO,GAAuB3wK,KAAMutK,GAAiB,IACzD,CAIA,YAAIjoB,GACA,OAAO,GAAuBtlJ,KAAMytK,GAAkB,IAC1D,GEnOyC,GAAE,EAAE,GAAE,GAAG,GAAE,GAAE,GAAE,GAAEjhB,IAAI,GAAE,GAAEY,IAAI,GAAE,GAAEiB,OAAO,GAAE,GAAE3B,IAAI,GAAE,GAAEgC,QAAQ,GAAE,GAAEnC,GAAG,SAAS,GAAEppG,EAAEymB,GAAG,GAAE4jF,KAAK,GAAEA,IAAI,GAAErqG,EAAE,IAAGymB,GAAG,GAAE,EAAE,IAAIuiF,EAAE,GAAEykB,MAAM,GAAEA,IAAI,CAACrkB,GAAG,GAAGiB,IAAI,KAAK,OAAOrqG,GAAGgpG,EAAEI,GAAG9sJ,QAAQ0sJ,EAAEI,GAAGrsJ,KAAK,CAAC,GAAGisJ,EAAEI,GAAGppG,EAAE,CAAC,SAAS,GAAEA,GAAG,OAAO,GAAE,EAAS,SAAWA,EAAEgpG,GAAK,IAAI/2I,EAAE,GAAE,KAAI,GAAG,GAAGA,EAAEw0D,EAAEzmB,GAAG/tC,EAAEs3I,MAAMt3I,EAAEm3I,GAAG,CAAQ,QAAO,EAAEJ,GAAG,SAAShpG,GAAG,IAAIymB,EAAEx0D,EAAEy7J,IAAIz7J,EAAEy7J,IAAI,GAAGz7J,EAAEm3I,GAAG,GAAGhwF,EAAEnnD,EAAEw0D,EAAEA,EAAEzmB,GAAGymB,IAAIrN,IAAInnD,EAAEy7J,IAAI,CAACt0G,EAAEnnD,EAAEm3I,GAAG,IAAIn3I,EAAEs3I,IAAIhY,SAAS,CAAC,GAAG,GAAGt/H,EAAEs3I,IAAI,IAAG,GAAEokB,KAAK,CAAC,IAAIn1G,EAAE,SAASxY,EAAEymB,EAAErN,GAAG,IAAInnD,EAAEs3I,IAAIkkB,IAAI,OAAM,EAAG,IAAIzkB,EAAE/2I,EAAEs3I,IAAIkkB,IAAIrkB,GAAG1kJ,OAAO,SAASs7C,GAAG,OAAOA,EAAEupG,GAAG,GAAG,GAAGP,EAAE4kB,MAAM,SAAS5tH,GAAG,OAAOA,EAAE0tH,GAAG,GAAG,OAAOppI,GAAGA,EAAE1iC,KAAK/E,KAAKmjD,EAAEymB,EAAErN,GAAG,IAAI/8D,EAAE4V,EAAEs3I,IAAIzpE,QAAQ9/B,EAAE,OAAOgpG,EAAEvkI,KAAK,SAASu7B,GAAG,GAAGA,EAAE0tH,IAAI,CAAC,IAAIjnG,EAAEzmB,EAAEopG,GAAG,GAAGppG,EAAEopG,GAAGppG,EAAE0tH,IAAI1tH,EAAE0tH,SAAS,EAAEjnG,IAAIzmB,EAAEopG,GAAG,KAAK/sJ,GAAE,EAAG,CAAC,GAAGioC,GAAGA,EAAE1iC,KAAK/E,KAAKmjD,EAAEymB,EAAErN,IAAI/8D,CAAC,EAAE,GAAEsxK,KAAI,EAAG,IAAIrpI,EAAE,GAAEsmH,sBAAsBn/I,EAAE,GAAEo/I,oBAAoB,GAAEA,oBAAoB,SAAS7qG,EAAEymB,EAAErN,GAAG,GAAGv8D,KAAKysJ,IAAI,CAAC,IAAIN,EAAE1kH,EAAEA,OAAO,EAAEk0B,EAAExY,EAAEymB,EAAErN,GAAG90B,EAAE0kH,CAAC,CAACv9I,GAAGA,EAAE7J,KAAK/E,KAAKmjD,EAAEymB,EAAErN,EAAE,EAAE,GAAEwxF,sBAAsBpyF,CAAC,CAAC,OAAOvmD,EAAEy7J,KAAKz7J,EAAEm3I,EAAE,CAAjtB,CAAE,GAAEppG,EAAE,CAA4sB,SAAS,GAAEA,EAAEgpG,GAAG,IAAI3sJ,EAAE,GAAE,KAAI,IAAI,GAAEkuJ,KAAK,GAAEluJ,EAAEoxK,IAAIzkB,KAAK3sJ,EAAE+sJ,GAAGppG,EAAE3jD,EAAE2sJ,EAAEA,EAAE,GAAEykB,IAAIpjB,IAAIttJ,KAAKV,GAAG,CAAiF,SAAS,GAAE2jD,GAAG,OAAO,GAAE,EAAE,GAAE,WAAW,MAAM,CAACgpB,QAAQhpB,EAAE,EAAE,GAAG,CAAsN,SAAS,GAAEA,EAAEoZ,GAAG,IAAI4vF,EAAE,GAAE,KAAI,GAAG,OAAO,GAAEA,EAAEykB,IAAIr0G,KAAK4vF,EAAEI,GAAGppG,IAAIgpG,EAAEykB,IAAIr0G,EAAE4vF,EAAEqB,IAAIrqG,GAAGgpG,EAAEI,EAAE,CAAC,SAAS,GAAEppG,EAAEymB,GAAG,OAAO,GAAE,EAAE,GAAE,WAAW,OAAOzmB,CAAC,EAAEymB,EAAE,CAAgf,SAAS,KAAI,IAAI,IAAIzmB,EAAEA,EAAE,GAAE5S,SAAS,CAAC,IAAIq5B,EAAEzmB,EAAEytH,IAAI,GAAGztH,EAAE4pG,KAAKnjF,EAAE,IAAIA,EAAE4jF,IAAI5lI,KAAK,IAAGgiD,EAAE4jF,IAAI5lI,KAAK,IAAGgiD,EAAE4jF,IAAI,EAAE,CAAC,MAAMjxF,GAAGqN,EAAE4jF,IAAI,GAAG,GAAEf,IAAIlwF,EAAEpZ,EAAEwpG,IAAI,CAAC,CAAC,CAAC,GAAEH,IAAI,SAASrpG,GAAG,GAAE,KAAK,IAAG,GAAEA,EAAE,EAAE,GAAEopG,GAAG,SAASppG,EAAEymB,GAAGzmB,GAAGymB,EAAE0iF,KAAK1iF,EAAE0iF,IAAIkC,MAAMrrG,EAAEqrG,IAAI5kF,EAAE0iF,IAAIkC,KAAK,IAAG,GAAErrG,EAAEymB,EAAE,EAAE,GAAEwjF,IAAI,SAASjqG,GAAG,IAAG,GAAEA,GAAG,GAAE,EAAE,IAAI3jD,GAAG,GAAE2jD,EAAEupG,KAAKkkB,IAAIpxK,IAAI,KAAI,IAAGA,EAAEguJ,IAAI,GAAG,GAAEA,IAAI,GAAGhuJ,EAAE+sJ,GAAG3kI,KAAK,SAASu7B,GAAGA,EAAE0tH,MAAM1tH,EAAEopG,GAAGppG,EAAE0tH,KAAK1tH,EAAEgpG,EAAEhpG,EAAE0tH,SAAS,CAAC,KAAKrxK,EAAEguJ,IAAI5lI,KAAK,IAAGpoB,EAAEguJ,IAAI5lI,KAAK,IAAGpoB,EAAEguJ,IAAI,GAAG,GAAE,IAAI,GAAE,EAAC,EAAE,GAAEa,OAAO,SAASlrG,GAAG,IAAG,GAAEA,GAAG,IAAIymB,EAAEzmB,EAAEupG,IAAI9iF,GAAGA,EAAEgnG,MAAMhnG,EAAEgnG,IAAIpjB,IAAI/tJ,SAAS,IAAI,GAAES,KAAK0pE,IAAI,KAAI,GAAE9rD,yBAAyB,GAAE,GAAEA,wBAAwB,IAAG,KAAI8rD,EAAEgnG,IAAIrkB,GAAG3kI,KAAK,SAASu7B,GAAGA,EAAEgpG,IAAIhpG,EAAEytH,IAAIztH,EAAEgpG,GAAGhpG,EAAEgpG,OAAO,CAAC,IAAI,GAAE,GAAE,IAAI,EAAE,GAAEO,IAAI,SAASvpG,EAAEymB,GAAGA,EAAEhiD,KAAK,SAASu7B,GAAG,IAAIA,EAAEqqG,IAAI5lI,KAAK,IAAGu7B,EAAEqqG,IAAIrqG,EAAEqqG,IAAI3lJ,OAAO,SAASs7C,GAAG,OAAOA,EAAEopG,IAAI,GAAEppG,EAAE,EAAE,CAAC,MAAMoZ,GAAGqN,EAAEhiD,KAAK,SAASu7B,GAAGA,EAAEqqG,MAAMrqG,EAAEqqG,IAAI,GAAG,GAAG5jF,EAAE,GAAG,GAAE6iF,IAAIlwF,EAAEpZ,EAAEwpG,IAAI,CAAC,GAAG,IAAG,GAAExpG,EAAEymB,EAAE,EAAE,GAAE8kF,QAAQ,SAASvrG,GAAG,IAAG,GAAEA,GAAG,IAAIymB,EAAErN,EAAEpZ,EAAEupG,IAAInwF,GAAGA,EAAEq0G,MAAMr0G,EAAEq0G,IAAIrkB,GAAG3kI,KAAK,SAASu7B,GAAG,IAAI,GAAEA,EAAE,CAAC,MAAMA,GAAGymB,EAAEzmB,CAAC,CAAC,GAAGoZ,EAAEq0G,SAAS,EAAEhnG,GAAG,GAAE6iF,IAAI7iF,EAAErN,EAAEowF,KAAK,EAAE,IAAI,GAAE,mBAAmB7uI,sBAAsB,SAAS,GAAEqlC,GAAG,IAAIymB,EAAErN,EAAE,WAAWx6D,aAAaoqJ,GAAG,IAAGryH,qBAAqB8vC,GAAG3nE,WAAWkhD,EAAE,EAAEgpG,EAAElqJ,WAAWs6D,EAAE,IAAI,KAAIqN,EAAE9rD,sBAAsBy+C,GAAG,CAAC,SAAS,GAAEpZ,GAAG,IAAIymB,EAAE,GAAEuiF,EAAEhpG,EAAEupG,IAAI,mBAAmBP,IAAIhpG,EAAEupG,SAAS,EAAEP,KAAK,GAAEviF,CAAC,CAAC,SAAS,GAAEzmB,GAAG,IAAIymB,EAAE,GAAEzmB,EAAEupG,IAAIvpG,EAAEopG,KAAK,GAAE3iF,CAAC,CAAC,SAAS,GAAEzmB,EAAEymB,GAAG,OAAOzmB,GAAGA,EAAE1jD,SAASmqE,EAAEnqE,QAAQmqE,EAAEhiD,KAAK,SAASgiD,EAAErN,GAAG,OAAOqN,IAAIzmB,EAAEoZ,EAAE,EAAE,CAAC,SAAS,GAAEpZ,EAAEymB,GAAG,MAAM,mBAAmBA,EAAEA,EAAEzmB,GAAGymB,CAAC,CCG34G,SAASonG,KACP,OAAO,GAAE,MAAO,CACd7+I,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,YACTif,MAAO,8BACN,GAAE,IAAK,CACRtxF,KAAM,OACN,YAAa,WACZ,GAAE,SAAU,CACbA,KAAM,OACNwyE,GAAI,KACJC,GAAI,KACJ71F,EAAG,OACD,GAAE,OAAQ,CACZrnD,EAAG,wIACHyqE,KAAM,UACN,YAAa,YACX,GAAE,OAAQ,CACZzqE,EAAG,iJACHyqE,KAAM,UACN,YAAa,YACX,GAAE,OAAQ,CACZzqE,EAAG,yIACHyqE,KAAM,UACN,YAAa,YACX,GAAE,OAAQ,CACZzqE,EAAG,wJACHyqE,KAAM,UACN,YAAa,YACX,GAAE,OAAQ,CACZzqE,EAAG,mBAEP,CACA,SAASg8J,GAAYjuB,GACnB,IAAI,WACFkuB,EAAU,KACVzuB,EAAI,OACJ0uB,GACEnuB,EAGJ,MAAMouB,EAA+B,iBAAfF,EAChBG,EAAW,GAAY1iK,IAC3BA,EAAE0a,iBACF8nJ,KACC,CAACA,IACJ,OAAO,GAAE,OAAQ,CACfE,SAAUA,GACTD,EAAgB,GAAE,SAAU,CAC7BxrK,KAAM,SACN4sB,UAAW,4FACX,6BAA6B,GAC5B,GAAEu+I,GAAY,MAAOtuB,EAAK,qBAAuB,GAAE,SAAU,CAC9D78I,KAAM,SACN4sB,UAAW,mEACX,6BAA6B,GAC5BiwH,EAAK,mBAAoB,CAC1ByuB,gBAEJ,CACA,MAAMI,GAAoB5mB,IACxB,IAAI,WACFwmB,EAAU,KACVzuB,EAAI,OACJ0uB,GACEzmB,EACJ,OAAO,GAAEumB,GAAa,CACpBC,WAAYA,EACZzuB,KAAMA,EACN0uB,OAAQA,KAGG,SAASI,GAASvuF,GAC/B,MAAM,QACJ5pE,EAAO,WACP83J,EAAU,WACVM,EAAU,KACV/uB,EAAI,WACJgvB,EAAU,WACVC,EAAaJ,IACXtuF,EACJ,OAAO,GAAE,MAAO,CACdxwD,UAAW,sBACV,GAAE,MAAO,CACVA,UAAW,0BACVg/I,KAAe,GAAE,MAAO,CACzBh/I,UAAW,2BACViwH,EAAK,wBAAyB,CAC/ByuB,gBACG,GAAE,MAAO,CACZ1+I,UAAW,0BACVk/I,EAAW,CACZR,aACAzuB,OACArpI,UACA+3J,OAAQM,KAEZ,CCpGe,SAASE,GAAK3uB,GAC3B,IAAI,KACFP,EAAI,OACJuF,EAAM,SACN4pB,GACE5uB,EACJ,OAAO,GAAE,GAAU,KAAM,GAAE,OAAQ,CACjCxwH,UAAW,4BACXxrB,IAAK,YACJ4qK,GAAW,GAAE,SAAU,CACxBhsK,KAAM,SACNozE,QAASgvE,EACTx1H,UAAW,0DACXxrB,IAAK,UACJy7I,EAAK,WACV,CCfA,MAAMovB,GAAa7uF,IACjB,MAAM,UACJ8uF,EAAS,MACT/1F,EAAK,OACLg2F,GACE/uF,EACJ,OAAO,GAAE,GAAU,KAAM,GAAE,SAAU,CACnCp9E,KAAM,SACN4sB,UAAW,0BACXwmD,QAAS84F,GACR/1F,GAASg2F,EAAiB,GAAR,QAER,SAASC,GAAYhvF,GAClC,MAAM,UACJ8uF,EAAS,MACT/1F,EAAK,gBACLk2F,EAAe,YACfC,GACElvF,EACJ,OAAO,GAAE,MAAO,CACdxwD,UAAW,6BACV,GAAE,MAAO,CACVA,UAAW,iCACVy/I,GAAkBC,EAAYjqK,IAAI,CAACkqK,EAAW5yK,IAAM,GAAEsyK,GAAY,CACnE7qK,IAAKmrK,EAAU9pJ,GACfypJ,UAAW,IAAMA,EAAUK,EAAUC,YAAaD,EAAUrzK,MAC5Di9E,MAAa,IAANx8E,EAAUw8E,EAAQo2F,EAAUrzK,KACnCizK,OAAQxyK,EAAI,IAAM2yK,EAAY1yK,UAElC,CC1Be,SAAS6yK,GAAOrvF,GAC7B,OAAO,GAAE,GAAU,KAAMA,EAAMsvF,iBAAmB,GAAEN,GAAa,CAC/DF,UAAW9uF,EAAM8uF,UACjBI,YAAalvF,EAAMkvF,YACnBD,gBAAiBjvF,EAAMwuF,YAAcxuF,EAAMwuF,aAC3Cz1F,MAAOiH,EAAMjH,QACX,GAAE41F,GAAM,CACV3pB,OAAQhlE,EAAMglE,OACd4pB,SAAU5uF,EAAM4uF,SAChBnvB,KAAMz/D,EAAMy/D,OAEhB,CCde,SAAS8vB,GAAqBx6B,GAC3C,MAAO,IACFA,EACHnyI,KAAMmyI,EAAKz1H,SACX2yH,UAAW8C,EAAKj5I,KAAOg2I,GAAwBiD,EAAKj5I,MAAMm2I,UAAY,KAE1E,CCPA,SAASu9B,KAAiS,OAApRA,GAAWxnK,OAAOuc,OAASvc,OAAOuc,OAAO3mB,OAAS,SAAUqR,GAAU,IAAK,IAAI1S,EAAI,EAAGA,EAAI2N,UAAU1N,OAAQD,IAAK,CAAE,IAAI+0B,EAASpnB,UAAU3N,GAAI,IAAK,IAAIyH,KAAOstB,EAActpB,OAAO1F,UAAU2F,eAAenG,KAAKwvB,EAAQttB,KAAQiL,EAAOjL,GAAOstB,EAAOttB,GAAU,CAAE,OAAOiL,CAAQ,EAAUugK,GAASplK,MAAMrN,KAAMmN,UAAY,CA8BlV,MAAMulK,GAAc,CAClBn0I,SAAU,WAKVpM,MAAO,OACPwgJ,UAAW,QAEPC,GAAgB,CACpBr0I,SAAU,WACVu1B,IAAK,EACL5mB,KAAM,EAMN/a,MAAO,OACP0gJ,SAAU,WA8GZ,OA5GA,cAA0B,GACxB,WAAAnyK,CAAYuiF,GACV7qE,MAAM6qE,GAINjjF,KAAK8yK,aAAe,KAClB9yK,KAAK00I,SAAS,CACZ15D,OAAQh7E,KAAK84F,KAAK3kC,aAGtBn0D,KAAK+yK,aAAe,KAClB/yK,KAAK26E,UAEP36E,KAAK8pB,aAAe,KACpB9pB,KAAKiF,MAAQ,CACX+1E,OAAQ,EACRjnB,OAAQ,EAEZ,CACA,iBAAA85F,GACE7tJ,KAAK26E,SACLj8E,OAAO0C,iBAAiB,SAAUpB,KAAK+yK,aACzC,CAIA,mBAAA/kB,GACMhuJ,KAAK84F,KAAKvpE,SAASvwB,SAAS8oB,iBAC9B9nB,KAAK8pB,aAAe9qB,SAAS8oB,cAEjC,CACA,kBAAAmmI,GAEMjuJ,KAAK8pB,cAAgB9pB,KAAK8pB,aAAauI,YAAcrzB,SAAS8oB,gBAAkB9nB,KAAK8pB,cACvF9pB,KAAK8pB,aAAaM,QAEpBpqB,KAAK8pB,aAAe,KACpB9pB,KAAK26E,QACP,CACA,oBAAAg0E,GACEjwJ,OAAO8C,oBAAoB,SAAUxB,KAAK+yK,aAC5C,CACA,MAAAp4F,GACE,MAAM,OACJ5mB,GACE/zD,KAAKiF,MACL8uD,IAAW/zD,KAAK84F,KAAKrlC,cACvBzzD,KAAK00I,SAAS,CACZ3gF,OAAQ/zD,KAAK84F,KAAKrlC,cAGxB,CACA,MAAAjpC,CAAOy4H,GACL,IAAI,KACFt/I,EAAI,UACJqvK,EAAS,UACTC,EAAS,cACTC,EAAgB,MACbjwF,GACDggE,EACJ,MAAM,OACJjoE,EAAM,OACNjnB,GACE/zD,KAAKiF,MAET,IAAIlE,EAAQsB,KAAKuI,MAAMowE,EAASg4F,GAG5BG,EAAkB9wK,KAAKuI,MAAMmpD,EAASi/G,GAItCE,IACFnyK,EAAQsB,KAAKmN,IAAI,EAAGzO,EAAQA,EAAQmyK,GACpCC,GAAmBD,GAIrB,MAAMnwH,EAAMhiD,EAAQoyK,EAAkB,EAGhCC,EAAYzvK,EAAKT,MAAMnC,EAAOgiD,GAC9BswH,EAAa,IACdX,GACH3+G,OAAQpwD,EAAKlE,OAASuzK,GAElBM,EAAe,IAChBV,GACH9+G,IAAK/yD,EAAQiyK,GAKf,OAEE,GAAE,MAAOP,GAAS,CAChBt0I,SAAUn+B,KAAK8yK,cACd7vF,GAAQ,GAAE,MAAO,CAClB/0B,KAAM,eACNh8B,MAAOmhJ,GACN,GAAE,MAAO,CACVnlH,KAAM,eACNh8B,MAAOohJ,GACNF,EAAUlrK,IAAI+qK,KAErB,GCzJa,SAASM,GAAkBtwF,GACxC,MAAM,OACJl+D,EAAM,cACNyuJ,EAAa,WACbC,EAAU,WACVC,EAAU,WACVC,EAAU,iBACVC,EAAgB,YAChBC,EAAW,YACXC,EAAW,eACXC,EAAc,mBACdC,GACE/wF,GACG76B,EAAY6rH,GAAiB,GAAuB,MAAdR,EAAqBA,EAAa,IAGzES,EAAoB,GAAYruI,IACpCA,EAAGvc,iBACHvE,EAAOqjC,IACN,CAACrjC,EAAQqjC,IACN+rH,EAAc,GAAYtuI,IAC9B,MAAMirB,EAAajrB,EAAG3zB,OAAOhT,MAC7B+0K,EAAcnjH,GACV0iH,GAAezuJ,EAAO+rC,IACzB,CAACmjH,EAAeT,EAAezuJ,KAK3BzO,GAAQ,GAAS,KACtB,MAAM89J,EAASp1K,SAASmK,cAAc,QAGtC,OAFAirK,EAAOj7J,aAAa,WAAY,MAChCi7J,EAAO9rJ,GAAK+rH,KACL+/B,IAUT,OARA,GAAU,KACRp1K,SAASshB,KAAK3J,YAAYL,GAC1BA,EAAKlV,iBAAiB,SAAU8yK,GACzB,KACL59J,EAAK9U,oBAAoB,SAAU0yK,GACnCl1K,SAASshB,KAAK1J,YAAYN,KAE3B,CAACA,EAAM49J,IACH,GAAE,GAAU,KAAM,GAAE,QAAS,CAClCzhJ,UAAW,gBAAgBshJ,IAC3BluK,KAAM,SACN,aAAc8tK,EACdjlJ,YAAailJ,EACbz0K,MAAOkpD,EACPisH,QAASF,EACT79J,KAAMA,EAAKgS,GACX,6BAA6B,KAC1BorJ,GAAc,GAAE,MAAO,CAC1B,cAAe,OACf3hB,UAAW,QACXt/H,UAAW,oDACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,+UACCw+J,GAActrH,GAAc,GAAE,SAAU,CAC5C31B,UAAW,sDACX5sB,KAAM,SACN,aAAc+tK,EACd53F,MAAO43F,EACP36F,QAzCkB,KAClBg7F,EAAc,IACVH,GAAaA,MAwChB,GAAE,MAAO,CACV,cAAe,OACf/hB,UAAW,QACXt/H,UAAW,cACXu/H,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,gfACCw+J,GAAc,GAAE,SAAU,CAC9BjhJ,UAAW,8CAA8CuhJ,IACzDnuK,KAAM,SACNyQ,KAAMA,EAAKgS,IACVurJ,GACL,CClFe,SAASS,GAAcrxB,GACpC,IAAI,OACFhyI,EAAM,KACN0jJ,EAAI,KACJjS,EAAI,SACJhuH,GACEuuH,EACJ,OAAO,GAAE,MAAO,CACdxwH,UAAW,+BACV,GAAE,SAAU,CACbA,UAAW,6CACXwmD,QAAS07E,EACT9uJ,KAAM,UACL68I,EAAK,UAAW,CACjBvO,YAAaz/G,KACV,GAAE,SAAU,CACfjC,UAAW,0CACXwmD,QAAShoE,EACTpL,KAAM,UACL68I,EAAK,WACV,CCnBA,SAAS6xB,KACP,OAAO,GAAE,MAAO,CACd,cAAe,OACfxiB,UAAW,QACXt/H,UAAW,cACXN,MAAO,GACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,srBAEP,CACA,SAASs/J,KACP,OAAO,GAAE,MAAO,CACd,cAAe,OACfziB,UAAW,QACXt/H,UAAW,cACXP,MAAO,CACLuiJ,SAAU,GACVC,YAAa,GAEf1iB,QAAS,uBACR,GAAE,OAAQ,CACX98I,EAAG,0hCAEP,CACA,SAASy/J,KACP,OAAO,GAAE,MAAO,CACd,cAAe,OACf5iB,UAAW,QACX7/H,MAAO,CACLC,MAAO,GACPuiJ,YAAa,GAEf1iB,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,yKACD,GAAE,OAAQ,CACZA,EAAG,6NAEP,CACe,SAAS0/J,GAAS3xF,GAC/B,MAAM,eACJ4xF,GACE5xF,EACJ,GAAuB,OAAnB4xF,EAAyB,OAAO,KACpC,OAAQA,GACN,IAAK,OACH,OAAO,GAAEN,GAAU,MACrB,IAAK,SACH,OAAO,GAAEC,GAAY,MACvB,IAAK,QACH,OAAO,GAAEG,GAAW,MACtB,QACE,CACE,MAAM,IACJrkI,GACE2yC,EACJ,OAAO,GAAE,MAAO,CACd/pE,IAAK27J,EACLvkI,IAAKA,EAGLwkI,eAAgB,cAChBz7J,QAAS,OACT8Y,MAAO,GACP4hC,OAAQ,IAEZ,EAEN,CC9BA,OAvCA,SAAsBkvB,GACpB,MAAM,UACJxwD,EAAS,WACTsiJ,EAAU,iBACVC,EAAgB,UAChBC,EAAS,MACTj5F,EAAK,WACLk5F,EAAU,WACVC,EAAU,eACVC,EAAc,oBACdC,EAAmB,GACnB/sJ,EAAE,SACFP,GACEk7D,EACEqyF,EAAoB,GAAW,eAAgB,oCAAqC,0CAA2C,CACnI,gDAAiDL,IAEnD,OAAO,GAAE,KAAM,CACbxiJ,UAAWA,EACXupD,MAAO+4F,EAAiC,MAApBC,OAAgC,EAAIA,EAAiBxvK,aAAU5F,GAClF,GAAE,QAAS,CACZiG,KAAM,WACN4sB,UAAW6iJ,EACXC,SAAUH,EACVI,UAAWH,EAGXI,YAAaJ,EACbt2K,KAAM,WACNupB,GAAIA,EACJwxC,QAASm7G,EACTz7J,SAAUu7J,EACV,6BAA6B,IAC3B,GAAE,QAAS,CACbW,QAASptJ,EACT,aAAc0zD,EACdvpD,UAAW,+CACVyiJ,EAAYC,GAAcn5F,EAAOj0D,GACtC,EC9Be,SAAS4tJ,GAAS1yF,GAC/B,MAAM,UACJxwD,EAAS,WACTsiJ,EAAU,iBACVC,EAAgB,mBAChBY,EAAkB,UAClBX,EAAS,eACTG,EAAc,oBACdC,EAAmB,KACnBxvK,EAAI,GACJyiB,EAAE,WACF4sJ,EAAU,MACVl5F,EAAK,kBACL65F,EAAiB,WACjBV,EAAU,KACVzyB,GACEz/D,EACJ,OAAO,GAAE,KAAM,CACbxwD,UAAWA,EACXupD,MAAO+4F,EAAiC,MAApBC,OAAgC,EAAIA,EAAiBxvK,aAAU5F,GACjFg2K,EAgBC,KAhBoB,GAAE,QAAS,CAClC/vK,KAAM,WACN4sB,UAAW,mDAAkDwiJ,EAAY,gDAAkD,IAC3HM,SAAUH,EACVI,UAAWH,EACXI,YAAaJ,EAGbt2K,KAAM,WACNupB,GAAIA,EACJwxC,QAASm7G,EACT,aAAuB,SAATpvK,EAAkB,KAAO68I,EAAK,0BAA2B,CACrE3jJ,KAAMi9E,IAERxiE,SAAUu7J,EACV,6BAA6B,IACX,SAATlvK,EAEX,GAAE,QAAS,CACT6vK,QAASptJ,EACTmK,UAAW,+CACV,GAAE,MAAO,CACVA,UAAW,qCACVyiJ,GAAaC,GAAcn5F,GAE5B,GAAE,SAAU,CACZn2E,KAAM,SACN4sB,UAAW,yDACXwmD,QAAS48F,EACT,aAAcnzB,EAAK,kBAAmB,CACpC3jJ,KAAMi9E,KAEP,GAAE,MAAO,CACVvpD,UAAW,qCACVyiJ,GAAaC,GAAcn5F,EAAQ,GAAE,OAAQ,KAAMA,GAAS0mE,EAAK,YACtE,CClEA,SAAS,KAAiS,OAApR,GAAWz3I,OAAOuc,OAASvc,OAAOuc,OAAO3mB,OAAS,SAAUqR,GAAU,IAAK,IAAI1S,EAAI,EAAGA,EAAI2N,UAAU1N,OAAQD,IAAK,CAAE,IAAI+0B,EAASpnB,UAAU3N,GAAI,IAAK,IAAIyH,KAAOstB,EAActpB,OAAO1F,UAAU2F,eAAenG,KAAKwvB,EAAQttB,KAAQiL,EAAOjL,GAAOstB,EAAOttB,GAAU,CAAE,OAAOiL,CAAQ,EAAU,GAAS7E,MAAMrN,KAAMmN,UAAY,CAOnU,SAAS2oK,GAAK7yF,GAC3B,MAAM,OACJ8yF,EAAM,YACNC,EAAW,UACXf,EAAS,WACTF,EAAU,SACVkB,GACEhzF,EACE4xF,EAAiBmB,IACjBvjJ,EAAY,GAAW,2BAA4B,CACvD,qCAAsCwiJ,GACrC,CACD,qCAAsCF,GACrC,CACD,sCAA0D,UAAnBF,IAEnCK,EAAa,GAAEN,GAAU,CAC7BC,eAAgBA,IAElB,OAAQoB,GACN,IAAK,OACH,OAAO,GAAEC,GAAc,GAAS,CAAC,EAAGjzF,EAAO,CACzCxwD,UAAWA,EACXyiJ,WAAYA,KAEhB,IAAK,OACH,OAAO,GAAES,GAAU,GAAS,CAAC,EAAG1yF,EAAO,CACrCxwD,UAAWA,EACXyiJ,WAAYA,KAEhB,IAAK,WACH,OAAO,GAAEgB,GAAc,GAAS,CAAC,EAAGjzF,EAAO,CACzCxwD,UAAWA,EACXyiJ,WAAYA,IACV,GAAE,IAAK,CACT9rK,KAAM,GAAG2sK,EAAO3xK,+CAChB8N,OAAQ,SACRikK,IAAK,sBACL1jJ,UAAW,kCACX07B,UAAW,GACV4nH,EAAOh3K,OACZ,QACE,MAAM,IAAIooB,MAAM,yBAAyB8uJ,KAE/C,CCvCA,SAAS,GAAShzF,GAChB,MAAM,iBACJmzF,EAAgB,UAChBC,EAAS,SACTJ,EAAQ,UACRhB,EAAS,eACTG,EAAc,oBACdC,EAAmB,WACnBF,EAAU,KACVzyB,EAAI,qBACJqD,EAAoB,cACpBuwB,EAAa,EACb36G,GACEsnB,EACJ,GAAItnB,EAAE46G,SACJ,OAAOT,GAAK,CACVX,aACAc,WACAvzB,OACAp6H,GAAIqzC,EAAErzC,GACN0zD,MAAOrgB,EAAE58D,KACTi3K,YAAa,IAAMr6G,EAAE66G,KACrBvB,UAAWA,EAAUt5G,GACrBy5G,eAAgB3vK,GAAS2vK,EAAe3vK,EAAOk2D,GAC/C05G,sBACAxvK,KAAM,SAENkvK,YAAY,EACZa,mBA7BqB,mBA6BDj6G,EAAErzC,GAEtButJ,kBAAmB,IAAMS,EAAc36G,KAG3C,MAAMq5G,EAAmBjvB,EAAqBysB,GAAqB72G,GAAI,IAAI06G,KAAcD,IACzF,OAAON,GAAK,CACVxtJ,GAAIqzC,EAAErzC,GACN0zD,MAAOrgB,EAAE58D,KACTg3K,OAAQp6G,EAAEo6G,OACVC,YAAa,IAAmB,SAAbC,GAAuBt6G,EAAEkkG,UAAYlkG,EAAEkkG,UAAYlkG,EAAE66G,KACxEvB,UAAWA,EAAUt5G,GACrBy5G,eAAgB3vK,GAAS2vK,EAAe3vK,EAAOk2D,GAC/Ci6G,oBAAoB,EACpBP,sBACAF,aACAc,WACAvzB,OACA78I,KAAM,OACNkvK,WAAY5vH,QAAQ6vH,KAAsBC,EAAUt5G,GACpDq5G,oBAEJ,CAgHA,OA/GA,SAAiB/xF,GACf,MAAM,iBACJmzF,EAAgB,QAChBK,EAAO,MACP33K,EAAK,UACLu3K,EAAS,SACTJ,EAAQ,gBACRS,EAAe,gBACfnE,EAAe,UACf0C,EAAS,eACTG,EAAc,oBACdC,EAAmB,aACnBvC,EAAY,WACZqC,EAAU,KACVzyB,EAAI,qBACJqD,EAAoB,UACpBnsI,EAAS,iBACT+8J,EAAgB,OAChB5xJ,EAAM,WACN0uJ,EAAU,YACVK,EAAW,cACXN,EAAa,iBACboD,EAAgB,iBAChBhD,EAAgB,cAChB0C,EAAa,OACbrlK,EAAM,KACN0jJ,EAAI,eACJkiB,EAAc,YACdC,GACE7zF,EACEvuD,EAAW0hJ,EAAiB32K,OAC5Bs3K,EAAO,GAAQ,IAAM,IAAIN,KAAY33K,GAAQ,CAAC23K,EAAS33K,IAC7D,OAAO,GAAE,MAAO,CACd2zB,UAAW,GAAW,uBAAwB,kCAAkCwjJ,MAC/ES,GAAmB,GAAE,MAAO,CAC7BjkJ,UAAW,+BACV,GAAE,MAAO,CACVA,UAAW,GAAW,kCAAmC8/I,GAAmB,2CAC3EmE,IAAmBC,GAAoB,GAAE,MAAO,CACjD9uH,MAAO,qCACN,GAAE0rH,GAAmB,CACtBxuJ,OAAQA,EACR0uJ,WAAYA,EACZK,YAAaA,EACbH,WAAYiD,EACZhD,iBAAkBA,EAClBG,eAAgB,yCAChBP,cAAeA,KAEX55J,EACK,GAAE,MAAO,CACd6Y,UAAW,yBACV,GAAE,OAAQ,KAA2B,iBAAd7Y,EAAyBA,EAAY8oI,EAAK,aAEjE+zB,EAAQh3K,QAAWX,EAAMW,OAMrB,GAAE,MAAO,CACdgzB,UAAW,6BAFXqkJ,EAGC,GAAE,KAAM,CACTrkJ,UAAW,6BACV,GAAE,GAAa,CAChB9uB,KAAMozK,EACN9D,UAAWt3G,GAAK,GAAE,GAAU,CAC1By6G,iBAAkBA,EAClBC,UAAWA,EACXJ,SAAUA,EACVhB,UAAWA,EACXG,eAAgBA,EAChBC,oBAAqBA,EACrBF,WAAYA,EACZzyB,KAAMA,EACNqD,qBAAsBA,EACtBuwB,cAAeA,EACf36G,EAAGA,IAELq3G,UAAW,MAKZ,GAAE,KAAM,CACTvgJ,UAAW,4BACX0L,SAAU20I,EACV5kH,KAAM,UAGNC,UAAW,GACV4oH,EAAK7uK,IAAIyzD,GAAK,GAAE,GAAU,CAC3By6G,iBAAkBA,EAClBC,UAAWA,EACXJ,SAAUA,EACVhB,UAAWA,EACXG,eAAgBA,EAChBC,oBAAqBA,EACrBF,WAAYA,EACZzyB,KAAMA,EACNqD,qBAAsBA,EACtBuwB,cAAeA,EACf36G,EAAGA,OA/CI,GAAE,MAAO,CACdlpC,UAAW,uBACVokJ,GA+CDniJ,EAAW,GAAK,GAAE4/I,GAAe,CACrC5/I,SAAUA,EACVigI,KAAMA,EACN1jJ,OAAQA,EACRyxI,KAAMA,IAEV,EC5Ke,MAAMs0B,WAAqB,GACxC,oBAAAroB,GACE,MAAM,UACJ0B,GACErwJ,KAAKijF,MACTotE,GACF,CACA,MAAA7lI,GACE,MAAM,SACJzC,GACE/nB,KAAKijF,MACT,OAAO,GAAal7D,GAAU,EAChC,ECPa,MAAM,GACnB,WAAArnB,CAAY2gH,EAAQxgC,GAClB7gF,KAAKi3K,YAAc/lG,IACjB,MAAMjsE,EAAQjF,KAAKqhH,OAAO6tC,iBAC1B,OAAKjqJ,EAAMiyK,aAAqC,KAAtBjyK,EAAMiyK,YAGzBhmG,EAAMrpE,OAAOsvK,IAC6D,IAAxEA,EAAOp4K,KAAKoG,cAAchC,QAAQ8B,EAAMiyK,YAAY/xK,gBAHpD+rE,GAMXlxE,KAAKq1K,oBAAsBzmK,IACzB5O,KAAKo3K,kBAAoBxoK,EAAE0e,UAE7BttB,KAAKi1K,UAAYj9B,IACf,MAAM,iBACJo+B,GACEp2K,KAAKqhH,OAAO6tC,iBAGhB,OAAOknB,EAAiBxuJ,KAAKolD,GAAQA,EAAK1kD,KAAO0vH,EAAK1vH,KAExDtoB,KAAKqhH,OAASA,EACdrhH,KAAK24I,SAAW93D,EAAK83D,SACrB34I,KAAK6gF,KAAOA,EACZ7gF,KAAKq3K,kBAAmB,EACxBr3K,KAAKs3K,eAAiBt3K,KAAKs3K,eAAez2K,KAAKb,MAC/CA,KAAK8tC,YAAc9tC,KAAK8tC,YAAYjtC,KAAKb,MACzCA,KAAKu3K,eAAiBv3K,KAAKu3K,eAAe12K,KAAKb,MAC/CA,KAAKw3K,cAAgBx3K,KAAKw3K,cAAc32K,KAAKb,KAC/C,CACA,cAAAs3K,GACEt3K,KAAKqhH,OAAO8tC,eAAe,CACzBsoB,gBAAgB,IAElBz3K,KAAKqhH,OAAOq2D,eACd,CACA,kBAAAC,CAAmBlyK,GACjB,MAAM,aACJmyK,EAAY,UACZzjH,EAAS,aACTV,GACEhuD,EAAMyM,OAEV,OADuB0lK,GAAgBzjH,EAAYV,GAC3B,KAAOzzD,KAAKq3K,gBACtC,CACA,cAAAE,GACEv3K,KAAKqhH,OAAO8tC,eAAe,CACzBinB,iBAAkB,GAClBc,YAAa,IAEjB,CACA,aAAAM,GACEx3K,KAAKu3K,iBACL,MAAMM,EAAY73K,KAAKqhH,OAAO4tC,KAAK7uC,UAAU,aACzCy3D,GAGFA,EAAUC,eAEd,CACA,WAAAhqI,CAAYtpC,GACV,IAAIuzK,EACJ,MAAM,KACJ9oB,GACEjvJ,KAAKqhH,OACH77G,EAAUypJ,EAAKvM,KAAK,kBAC1BuM,EAAKnvJ,IAAI0E,EAAMgK,YACXhK,EAAMwzK,aAAuF,gBAAvC,OAA/BD,EAAevzK,EAAMirJ,YAAsB,EAAIsoB,EAAah5K,OAKvFkwJ,EAAK14F,KAAK,CACR/wD,UACAutB,QAASvuB,EAAMgK,YACd,QAAS,IACd,CACA,qBAAAo7I,GACE5pJ,KAAKgqJ,gBAAkBhqJ,KAAK24I,SAASA,SACrC34I,KAAKqhH,OAAO4tC,KAAKrF,sBAAsB5pJ,KAAKgqJ,gBAAiBhqJ,KAAK24I,SACpE,CAGA,UAAAs/B,CAAWjgC,GACT,MAAMkgC,EAAU,CACd5vJ,GAAI0vH,EAAK1vH,GACTiM,OAAQv0B,KAAKqhH,OAAO/4F,GACpBvpB,KAAMi5I,EAAKj5I,MAAQi5I,EAAK1vH,GACxBziB,KAAMmyI,EAAKz1H,SACXk2H,UAAU,EACV90I,KAAMq0I,EAENp8G,KAAM,CAAC,EACPtb,KAAM,CACJ63J,OAAQngC,EAAK1vH,IAEfowH,OAAQ,CACN0/B,aAAcp4K,KAAKqhH,OAAOxgC,KAAKu3F,aAE/Bh0K,IAAK,GAAGpE,KAAK24I,SAAS0/B,QAAQrgC,EAAKq6B,eACnC/xJ,KAAM,CACJ63J,OAAQngC,EAAK1vH,IAEfgwJ,aAAct4K,KAAK24I,SAAS55I,KAC5B45I,SAAU34I,KAAK24I,SAASA,SACxBqR,gBAAiBhqJ,KAAKgqJ,kBAe1B,OAZIhS,EAAK6nB,YACPqY,EAAQltB,QAAUhT,EAAK6nB,WAErB7nB,EAAK+9B,SACiB,MAApB/9B,EAAK+9B,OAAOh3K,OAAcm5K,EAAQt8I,KAAK28I,WAAavkK,OAAOgkI,EAAK+9B,OAAOh3K,OACvEi5I,EAAK+9B,OAAO3xK,MAAK8zK,EAAQt8I,KAAK48I,UAAYxgC,EAAK+9B,OAAO3xK,MAIrC,MAAnB4zI,EAAKygC,aAAoBP,EAAQt8I,KAAKk9G,aAAed,EAAKygC,WAAa,GAAGzgC,EAAKygC,cAAcP,EAAQn5K,OAAS,MAE3F,MAAnBi5I,EAAK0gC,aAAoBR,EAAQt8I,KAAK+8I,aAAe3gC,EAAK0gC,WAAa,IAAI1gC,EAAK0gC,cAAcR,EAAQn5K,OAAS,IAAIm5K,EAAQn5K,QACxHm5K,CACT,CAQA,cAAA9C,CAAexmK,EAAGopI,GAChBppI,EAAE0/B,kBACF1/B,EAAE0a,iBACF1a,EAAE0iC,cAAclnB,QAChB,MAAM,QACJqsJ,EAAO,MACP33K,GACEkB,KAAKqhH,OAAO6tC,iBACVh+E,EAAQlxE,KAAKi3K,YAAYR,EAAQpqK,OAAOvN,IAG9C,GAAIkB,KAAK44K,cAAgB54K,KAAKo3K,kBAAmB,CAC/C,MAAM,iBACJhB,GACEp2K,KAAKqhH,OAAO6tC,iBACV2pB,EAAY3nG,EAAM/tE,QAAQnD,KAAK44K,cAC/BE,EAAe5nG,EAAM/tE,QAAQ60I,GAC7B+gC,EAAeF,EAAYC,EAAe5nG,EAAMhuE,MAAM21K,EAAWC,EAAe,GAAK5nG,EAAMhuE,MAAM41K,EAAcD,EAAY,GAC3HG,EAAsB,GAI5B,IAAK,MAAMhsG,KAAQ+rG,EAAc,CAC/B,MAAM,KACJ9pB,GACEjvJ,KAAKqhH,OACH2zD,EAAmB/lB,EAAKlJ,qBAAqBysB,GAAqBxlG,GAAO,IAAIiiF,EAAKzK,cAAew0B,IAClGhE,EAGH/lB,EAAK14F,KAAK,CACR/wD,QAASwvK,EAAiBxvK,SACzB,QAASypJ,EAAKpuE,KAAKqhE,aAJtB82B,EAAoB94K,KAAK8sE,EAM7B,CAIA,YAHAhtE,KAAKqhH,OAAO8tC,eAAe,CACzBinB,iBAAkB,IAAI,IAAIp3I,IAAI,IAAIo3I,KAAqB4C,MAG3D,CACAh5K,KAAK44K,aAAe5gC,EACpB,MAAM,iBACJo+B,GACEp2K,KAAKqhH,OAAO6tC,iBACZlvJ,KAAKi1K,UAAUj9B,GACjBh4I,KAAKqhH,OAAO8tC,eAAe,CACzBinB,iBAAkBA,EAAiBvuK,OAAOmlE,GAAQA,EAAK1kD,KAAO0vH,EAAK1vH,MAGrEtoB,KAAKqhH,OAAO8tC,eAAe,CACzBinB,iBAAkBA,EAAiB/pK,OAAO,CAAC2rI,KAGjD,CACA,UAAAihC,CAAW5/J,GACTrZ,KAAKqhH,OAAO8tC,eAAe,CACzB91I,WAEJ,EClMF,SAAS,GAA4Bo/B,EAAUm6F,GAAc,IAAK3nI,OAAO1F,UAAU2F,eAAenG,KAAK0zC,EAAUm6F,GAAe,MAAM,IAAItoI,UAAU,kDAAqD,OAAOmuC,CAAU,CAC1N,IAAI,GAAK,EACT,SAAS,GAA2B15C,GAAQ,MAAO,aAAe,KAAO,IAAMA,CAAM,CAkBrF,SAASm6K,GAAYtrH,EAAMmzD,GACzB,OAAKnzD,EACE,GAAGA,KAAQmzD,IADAA,CAEpB,CACO,SAASo4D,KACd,OAAO,GAAE,MAAO,CACd,cAAe,OACfpnB,UAAW,QACX5/H,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,4KAEP,CACA,MAAM,GAAiB,CACrB+gK,SAAU,OACVd,YAAY,EACZiE,YAAY,EACZ7G,iBAAiB,EACjB8G,cAAc,EACdvC,aAAa,GAEf,IAAIwC,GAAgC,GAA2B,mBAC3DC,GAA0B,GAA2B,aACrDC,GAAqB,GAA2B,QAChDC,GAAoC,GAA2B,uBAC/DC,GAAwC,GAA2B,2BAsavE18J,eAAe28J,GAAYxuH,GACzB,IAAIi/F,EAE+F,OAAlGA,EAAwB,GAA4BpqJ,KAAMs5K,IAAkBA,MAA8BlvB,EAAsBrpI,QACjI,MAAMP,EAAkB,IAAIC,gBAC5B,GAA4BzgB,KAAMs5K,IAAkBA,IAAoB94J,EACxE,MAAMo5J,EAAgB,KACpBp5J,EAAgBO,QAChB/gB,KAAKu3K,kBAEP,IAIEv3K,KAAKqhH,OAAO4tC,KAAK1hJ,GAAG,wBAAyBqsK,GAC7C55K,KAAKqhH,OAAO4tC,KAAK1hJ,GAAG,aAAcqsK,SAC5BzuH,EAAG3qC,EAAgB0B,OAC3B,CAAE,QAIAliB,KAAKqhH,OAAO4tC,KAAKxhJ,IAAI,wBAAyBmsK,GAC9C55K,KAAKqhH,OAAO4tC,KAAKxhJ,IAAI,aAAcmsK,GACnC,GAA4B55K,KAAMs5K,IAAkBA,SAAoB15K,CAC1E,CACF,CACAod,eAAe68J,GAAO52B,GACpB,IAAI,YACFovB,EAAW,WACXqG,EAAU,OACVx2J,GACE+gI,EACJ,MAAM,SACJ4uB,EAAQ,aACRiI,EAAY,MACZ5oG,SACQlxE,KAAK24I,SAAS9rF,KAAKwlH,EAAa,CACxCnwJ,WAGF,OADAliB,KAAK6xK,SAAWA,GAAY7xK,KAAK6xK,SAC1B,CACL3gG,MAAOA,EAAMhpE,IAAI8kE,IAAQ,IACpBA,EACH0rG,gBAEFoB,eAEJ,CACA98J,eAAe+8J,GAAsBpvB,GACnC,IAAI,YACFwnB,EAAW,OACXjwJ,GACEyoI,EACJ,MAAM+tB,EAzfR,SAA2BvG,GACzB,OAAOA,EAAYjvK,MAAM,GAAGgF,IAAIkqK,GAAaA,EAAUrzK,MAAM4f,KAAK,IACpE,CAufqBq7J,CAAkB7H,IAC/B,MACJjhG,EAAK,aACL4oG,SACQ,GAA4B95K,KAAMw5K,IAAOA,IAAO,CACxDnH,YAAaryK,KAAK85K,aAClBpB,aACAx2J,WAEFliB,KAAK85K,aAAeA,EACpB,MAAMh7K,EAAQ,GACR23K,EAAU,GAQhB,OAPAvlG,EAAM9tC,QAAQ4pC,IACRA,EAAKupG,SACPE,EAAQv2K,KAAK8sE,GAEbluE,EAAMoB,KAAK8sE,KAGR,CACLluE,QACA23K,UAEJ,CACAz5J,eAAei9J,GAA0BxgB,GACvC,IAAI,YACF4Y,EAAW,WACXqG,EAAU,WACVD,EAAU,MACVpQ,EAAK,QACL6R,EAAO,OACPh4J,GACEu3I,EACA0gB,EAAU9H,EACd,KAAO8H,GAAS,CACd,MAAM1nF,QAAY,GAA4BzyF,KAAMw5K,IAAOA,IAAO,CAChEnH,YAAa8H,EACbzB,aACAx2J,WAEFi4J,EAAU1nF,EAAIqnF,aACd,MAAMh7K,EAAQ2zF,EAAIvhB,MAAMrpE,OAAOmlE,IAASA,EAAKupG,UACvCE,EAAUhkF,EAAIvhB,MAAMrpE,OAAOmlE,GAAQA,EAAKupG,UAC9C2D,EAAQp7K,GAGR,MAAM0zF,EAAWikF,EAAQvuK,IAAI8U,SAAgBqrJ,EAAM5/J,IAAIuU,SAAY,GAA4Bhd,KAAM05K,IAA0BA,IAA0B,CACvJrH,YAAa8E,EAAO9E,YACpBqG,WAAYQ,GAAYR,EAAYvB,EAAOp4K,MAC3C05K,WAAYS,GAAYT,EAAYtB,EAAOp4K,MAC3CspK,QACA6R,UACAh4J,mBAEI5J,QAAQ2oB,IAAIuxD,EACpB,CACF,CClkBA,SAAS,GAA4B/5C,EAAUm6F,GAAc,IAAK3nI,OAAO1F,UAAU2F,eAAenG,KAAK0zC,EAAUm6F,GAAe,MAAM,IAAItoI,UAAU,kDAAqD,OAAOmuC,CAAU,EDmD3M,cAA2B,GACxC,WAAA/3C,CAAY2gH,EAAQxgC,GAClBzoE,MAAMipG,EAAQ,IACT,MACAxgC,IAIL51E,OAAOoK,eAAerV,KAAM05K,GAA0B,CACpDx6K,MAAO+6K,KAEThvK,OAAOoK,eAAerV,KAAMy5K,GAAsB,CAChDv6K,MAAO66K,KAET9uK,OAAOoK,eAAerV,KAAMw5K,GAAO,CACjCt6K,MAAO26K,KAET5uK,OAAOoK,eAAerV,KAAMu5K,GAAY,CACtCr6K,MAAOy6K,KAET1uK,OAAOoK,eAAerV,KAAMs5K,GAAkB,CAC5Ct/F,UAAU,EACV96E,WAAY,IAEdc,KAAKo6K,YAAcp6K,KAAKo6K,YAAYv5K,KAAKb,MACzCA,KAAKq6K,YAAcr6K,KAAKq6K,YAAYx5K,KAAKb,MACzCA,KAAK+xK,UAAY/xK,KAAK+xK,UAAUlxK,KAAKb,MACrCA,KAAKs2K,cAAgBt2K,KAAKs2K,cAAcz1K,KAAKb,MAC7CA,KAAKioJ,OAASjoJ,KAAKioJ,OAAOpnJ,KAAKb,MAC/BA,KAAK0xK,WAAa1xK,KAAK0xK,WAAW7wK,KAAKb,MACvCA,KAAK8yK,aAAe9yK,KAAK8yK,aAAajyK,KAAKb,MAC3CA,KAAKs6K,YAAct6K,KAAKs6K,YAAYz5K,KAAKb,MAGzCA,KAAKwqB,OAASxqB,KAAKwqB,OAAO3pB,KAAKb,MAG/BA,KAAKqhH,OAAO8tC,eAAe,CACzBorB,mBAAe36K,EAEfd,MAAO,GACP23K,QAAS,GACTtE,YAAa,GACb+E,YAAa,GACbsD,iBAAiB,EACjBpE,iBAAkB,KAEpBp2K,KAAK4pJ,uBACP,CAGA,QAAA6wB,GAEA,CAMA,eAAM1I,CAAUM,EAAatzK,GAC3BiB,KAAKi5K,YAAW,GAChB,UACQ,GAA4Bj5K,KAAMu5K,IAAYA,IAAYv8J,UAC9Dhd,KAAK44K,kBAAeh5K,EACpB,IAAI,YACFuyK,GACEnyK,KAAKqhH,OAAO6tC,iBAChB,MAAM//I,EAAQgjK,EAAYn7H,UAAUya,GAAO4gH,IAAgB5gH,EAAI4gH,aAG7DF,GAFa,IAAXhjK,EAEYgjK,EAAYjvK,MAAM,EAAGiM,EAAQ,GAG7B,IAAIgjK,EAAa,CAC7BE,cACAtzK,SAGJiB,KAAK85K,aAAezH,EACpB,IAAIvzK,EAAQ,GACR23K,EAAU,GACd,EAAG,CACD,MACE33K,MAAOgmJ,EACP2xB,QAASiE,SACD,GAA4B16K,KAAMy5K,IAAsBA,IAAsB,CACtFtH,cACAjwJ,WAEFpjB,EAAQA,EAAMuN,OAAOy4I,GACrB2xB,EAAUA,EAAQpqK,OAAOquK,GACzB16K,KAAKi5K,WAAWj5K,KAAKqhH,OAAO4tC,KAAKvM,KAAK,eAAgB,CACpDi4B,SAAU77K,EAAMW,OAASg3K,EAAQh3K,SAErC,OAASO,KAAK6gF,KAAKw4F,cAAgBr5K,KAAK85K,cACxC95K,KAAKqhH,OAAO8tC,eAAe,CACzBsnB,UACA33K,QACAqzK,cACA+E,YAAa,MAGnB,CAAE,MAAOp/G,GAGP,GAA0C,wBAA9B,MAAPA,OAAmB,EAAIA,EAAI/4D,MAI9B,YAHAiB,KAAKqhH,OAAO4tC,KAAK14F,KAAK,CACpB/wD,QAASxF,KAAKqhH,OAAO4tC,KAAKvM,KAAK5qF,EAAItyD,UAClC,UAAW,KAGhBxF,KAAK8tC,YAAYgqB,EACnB,CAAE,QACA93D,KAAKi5K,YAAW,EAClB,CACF,CAKA,aAAA3C,CAAca,GACZn3K,KAAK+xK,UAAUoF,EAAO9E,YAAa8E,EAAOp4K,MAC1CiB,KAAK44K,kBAAeh5K,CACtB,CAKA,YAAMqoJ,GACJ,UACQ,GAA4BjoJ,KAAMu5K,IAAYA,IAAYv8J,UAC9D,MAAMy1E,QAAYzyF,KAAK24I,SAASsP,OAAO,CACrC/lI,WAGF,GAAIuwE,EAAI72E,GAAI,CACV,IAAK62E,EAAImoF,QAAS,CAChB,MAAMp1K,EAAUxF,KAAKqhH,OAAO4tC,KAAKvM,KAAK,2BAA4B,CAChE/J,SAAU34I,KAAKqhH,OAAOrlC,MACtB53E,IAAKquF,EAAIooF,oBAEX76K,KAAKqhH,OAAO4tC,KAAK14F,KAAK/wD,EAAS,OAAQ,IACzC,CACA,MAAMs1K,EAAW,CACfP,eAAe,EACfz7K,MAAO,GACP23K,QAAS,GACTtE,YAAa,GACb+E,YAAa,IAEfl3K,KAAKqhH,OAAO8tC,eAAe2rB,EAC7B,GAEJ,CAAE,MAAOhjH,GACP93D,KAAK8tC,YAAYgqB,EACnB,CACF,CACA,WAAAsiH,CAAYjwK,GACVnK,KAAKqhH,OAAO8tC,eAAe,CACzB+nB,YAAa/sK,GAEjB,CACA,WAAAkwK,GACEr6K,KAAKqhH,OAAO8tC,eAAe,CACzB+nB,YAAa,IAEjB,CACA,gBAAMxF,CAAWqJ,GACf,UACQ,GAA4B/6K,KAAMu5K,IAAYA,IAAYv8J,UAC9Dhd,KAAKi5K,YAAW,SACVj5K,KAAK24I,SAASqiC,MAAM,CACxBD,eACA74J,WAEFliB,KAAKqhH,OAAO8tC,eAAe,CACzBorB,eAAe,IAEjBv6K,KAAKs3K,kBAET,CAAE,MAAOx/G,GACP,GAAiB,uBAAbA,EAAI/4D,KAIN,YAHAiB,KAAKqhH,OAAO4tC,KAAK14F,KAAK,CACpB/wD,QAASxF,KAAKqhH,OAAO4tC,KAAKvM,KAAK5qF,EAAItyD,UAClC,UAAW,KAGhBxF,KAAKqhH,OAAO4tC,KAAKnvJ,IAAI,iBAAiBg4D,EAAItyD,UAC5C,CAAE,QACAxF,KAAKi5K,YAAW,EAClB,CACF,CACA,kBAAMnG,CAAartK,GACjB,GAAIzF,KAAK23K,mBAAmBlyK,IAAUzF,KAAK85K,aAAc,CACvD95K,KAAKq3K,kBAAmB,EACxB,UACQ,GAA4Br3K,KAAMu5K,IAAYA,IAAYv8J,UAC9D,MAAM,MACJle,EAAK,QACL23K,EAAO,YACPtE,GACEnyK,KAAKqhH,OAAO6tC,kBAEdpwJ,MAAOgmJ,EACP2xB,QAASiE,SACD,GAA4B16K,KAAMy5K,IAAsBA,IAAsB,CACtFtH,cACAjwJ,WAEI+4J,EAAgBn8K,EAAMuN,OAAOy4I,GAC7Bo2B,EAAkBzE,EAAQpqK,OAAOquK,GACvC16K,KAAKqhH,OAAO8tC,eAAe,CACzBsnB,QAASyE,EACTp8K,MAAOm8K,KAGb,CAAE,MAAOz2K,GACPxE,KAAK8tC,YAAYtpC,EACnB,CAAE,QACAxE,KAAKq3K,kBAAmB,CAC1B,CACF,CACF,CACA,iBAAMiD,GACJt6K,KAAKi5K,YAAW,GAChB,UACQ,GAA4Bj5K,KAAMu5K,IAAYA,IAAYv8J,UAC9D,MAAM,iBACJo5J,GACEp2K,KAAKqhH,OAAO6tC,iBACVnvJ,EAAW,GACX+kJ,EAAW,GACjB,IAAK,MAAMq2B,KAAgB/E,EAAkB,CAC3C,MAAM,YACJ/D,GACE8I,EACEC,EAAiBC,IAAW,IAC7BA,EAGH5C,WAAY4C,EAAQ3C,WAAWrvK,QAAQ8xK,EAAazC,WAAY,IAAIrvK,QAAQ,MAAO,MAErF,GAAI8xK,EAAa5E,SAAU,CACzB,IAAI+E,GAAU,EACVC,EAAc,EAClB,MAAMlT,EAAQ,IAAI,GAAO,CACvBiH,YAAa,IAET4K,EAAUp7K,IACd,IAAK,MAAMssJ,KAAWtsJ,EAAO,CAC3B,MACMwpB,EAAKiwH,GADKv4I,KAAKi4K,WAAW7sB,GACEprJ,KAAKqhH,OAAO4tC,KAAKnG,SAK9C9oJ,KAAKqhH,OAAO4tC,KAAKjJ,yBAAyB19H,KAC7Cw8H,EAAS5kJ,KAAKk7K,EAAehwB,IAC7BmwB,IACAv7K,KAAKi5K,WAAWj5K,KAAKqhH,OAAO4tC,KAAKvM,KAAK,gBAAiB,CACrDi4B,SAAUY,MAGdD,GAAU,CACZ,GAWF,IAAI91K,QATE,GAA4BxF,KAAM05K,IAA0BA,IAA0B,CAC1FrH,cACAqG,WAAYQ,GAAYiC,EAAazC,WAAYyC,EAAap8K,MAC9D05K,WAAY0C,EAAap8K,KACzBspK,QACA6R,UACAh4J,iBAEImmJ,EAAMoI,SAGVjrK,EADE81K,EACQt7K,KAAKqhH,OAAO4tC,KAAKvM,KAAK,oBACP,IAAhB64B,EACCv7K,KAAKqhH,OAAO4tC,KAAKvM,KAAK,qBAAsB,CACpDy0B,OAAQgE,EAAap8K,OAMbiB,KAAKqhH,OAAO4tC,KAAKvM,KAAK,cAAe,CAC7CvO,YAAaonC,EACbpE,OAAQgE,EAAap8K,OAGzBgB,EAASG,KAAKsF,EAChB,MACEs/I,EAAS5kJ,KAAKk7K,EAAeD,GAEjC,CAOAn7K,KAAKqhH,OAAO4tC,KAAKnvJ,IAAI,uCACrBE,KAAKqhH,OAAO4tC,KAAK1I,SAIjBzB,EAAS58I,IAAI8vI,GAAQh4I,KAAKi4K,WAAWjgC,EAAMh4I,KAAKgqJ,mBAChDhqJ,KAAKqhH,OAAO8tC,eAAe,CACzB+nB,YAAa,KAEfn3K,EAASqjC,QAAQ59B,GAAWxF,KAAKqhH,OAAO4tC,KAAK14F,KAAK/wD,IAClDxF,KAAKu3K,kBAET,CAAE,MAAOz/G,GACP93D,KAAK8tC,YAAYgqB,EACnB,CAAE,QACA93D,KAAKi5K,YAAW,EAClB,CACF,CACA,MAAAzuJ,CAAOvlB,EAAOu2K,GACZ,IAAIC,EAAQz7K,UACa,IAArBw7K,IACFA,EAAc,CAAC,GAEjB,MAAM,cACJjB,EAAa,eACb9C,GACEz3K,KAAKqhH,OAAO6tC,kBACV,KACJxM,GACE1iJ,KAAKqhH,OAAO4tC,KACXwoB,GACHz3K,KAAKs3K,iBAEP,MAAMoE,EAAoB,IACrB17K,KAAK6gF,QACL26F,IAEC,MACJ18K,EAAK,QACL23K,EAAO,YACPS,EAAW,QACX79J,EAAO,iBACP+8J,GACEp2K,KAAKqhH,OAAO6tC,kBACV,UACJ+lB,EAAS,oBACTI,EAAmB,YACnB4B,GACEj3K,KACE27K,EAA2B,KAAhBzE,EACXzF,EAAazxK,KAAKqhH,OAAOm1D,MAAQ2C,GACjCyC,EAAc,CAClBrJ,gBAAiBmJ,EAAkBnJ,gBACnCR,UAAW/xK,KAAK+xK,UAChBI,YAAanyK,KAAKqhH,OAAO6tC,iBAAiBijB,YAC1CV,aACAz1F,MAAOh8E,KAAKqhH,OAAOrlC,MACnBisE,OAAQjoJ,KAAKioJ,OACb4pB,SAAU7xK,KAAK6xK,SACfnvB,QAEIm5B,EAAe,CACnB5G,YACAG,eAAgBp1K,KAAKo1K,eAAev0K,KAAKb,MACzCq1K,sBACAe,mBACAt3K,MAAO68K,EAAW1E,EAAYn4K,GAASA,EACvC23K,QAASkF,EAAW1E,EAAYR,GAAWA,EAC3CH,cAAet2K,KAAKs2K,cACpBvE,UAAW/xK,KAAK+xK,UAChBsH,aAAcr5K,KAAK6gF,KAAKw4F,aACxBvC,YAAa92K,KAAK6gF,KAAKi2F,YAEvBH,iBAAkB+E,EAAkBtC,WACpCr0J,OAAQ/kB,KAAKo6K,YACbtG,YAAa9zK,KAAKq6K,YAClB5G,WAAYyD,EACZ1D,eAAe,EACfoD,iBAAkBl0B,EAAK,UACvBkxB,iBAAkBlxB,EAAK,eACvBm0B,eAAgBn0B,EAAK,gBACrBuF,OAAQjoJ,KAAKioJ,OACb6qB,aAAc9yK,KAAK8yK,aACnBne,KAAM30J,KAAKs6K,YACXrpK,OAAQjR,KAAKw3K,cAEbd,gBAAiB,GAAEpE,GAAQsJ,GAC3B5/F,MAAOh8E,KAAKqhH,OAAOrlC,MACnBi6F,SAAUyF,EAAkBzF,SAC5Bd,WAAYuG,EAAkBvG,WAC9B5C,gBAAiBmJ,EAAkBnJ,gBACnCd,aACA/uB,KAAM1iJ,KAAKqhH,OAAO4tC,KAAKvM,KACvB2zB,UAAWr2K,KAAKqhH,OAAO4tC,KAAKzK,WAC5BuB,qBAAsB,WACpB,OAAO01B,EAAMp6D,OAAO4tC,KAAKlJ,wBAAwB54I,UACnD,EACAyM,UAAWP,GAEb,OACS,GAAE29J,GAAc,CACrB3mB,UAAWrwJ,KAAKu3K,iBAFE,IAAlBgD,EAGC,GAAE/I,GAAU,CACbL,WAAYnxK,KAAKqhH,OAAOrlC,MACxBy1F,WAAYA,EACZC,WAAY1xK,KAAK0xK,WACjBhvB,KAAM1iJ,KAAKqhH,OAAO4tC,KAAK5L,UACvBsuB,WAAY3xK,KAAK6gF,KAAKi7F,eACtBziK,QAASA,IAKV,GAAE,GAASwiK,GAChB,IAgHW/mC,QApjBA,SCdb,IAAI,GAAK,EACT,SAAS,GAA2B/1I,GAAQ,MAAO,aAAe,KAAO,IAAMA,CAAM,CASrF,MAGMg9K,GAAe,CACnBC,aAAa,EACbl9K,MAAO,GACP23K,QAAS,GACTtE,YAAa,GACb+E,YAAa,GACbd,iBAAkB,GAClB3C,WAAY,MAER,GAAiB,CACrBwC,SAAU,OACVd,YAAY,EACZiE,YAAY,EACZ7G,iBAAiB,GAEnB,IAAI0J,GAAwC,GAA2B,2BAuKvE,SAASC,GAA0BzpF,EAAK3zF,GACtCkB,KAAKm8K,cAAgB1pF,EAAI0pF,cACzB1pF,EAAIvhB,MAAM9tC,QAAQ4pC,IAChBluE,EAAMoB,KAAK8sE,KAEbhtE,KAAKqhH,OAAO8tC,eAAe,CACzBinB,iBAAkB,GAClB4F,aAAa,EACbl9K,QACA20K,WAAYhhF,EAAI2pF,aAEpB,EA7Ke,cAAiC,GAC9C,WAAA17K,CAAY2gH,EAAQxgC,GAClBzoE,MAAMipG,EAAQ,IACT,MACAxgC,IAEL51E,OAAOoK,eAAerV,KAAMi8K,GAA0B,CACpD/8K,MAAOg9K,KAETl8K,KAAKm8K,cAAgB,KACrBn8K,KAAK+kB,OAAS/kB,KAAK+kB,OAAOlkB,KAAKb,MAC/BA,KAAK8zK,YAAc9zK,KAAK8zK,YAAYjzK,KAAKb,MACzCA,KAAKq8K,iBAAmBr8K,KAAKq8K,iBAAiBx7K,KAAKb,MACnDA,KAAK8yK,aAAe9yK,KAAK8yK,aAAajyK,KAAKb,MAC3CA,KAAKs6K,YAAct6K,KAAKs6K,YAAYz5K,KAAKb,MACzCA,KAAKwqB,OAASxqB,KAAKwqB,OAAO3pB,KAAKb,MAC/BA,KAAKqhH,OAAO8tC,eAAe4sB,IAC3B/7K,KAAK4pJ,uBACP,CAGA,QAAA6wB,GAEA,CACA,gBAAA4B,GACEr8K,KAAKqhH,OAAO8tC,eAAe4sB,GAC7B,CACA,YAAMh3J,CAAOysC,GACX,MAAM,WACJiiH,GACEzzK,KAAKqhH,OAAO6tC,iBAChB,IAAI19F,GAASA,IAAUiiH,EAAvB,CAIAzzK,KAAKi5K,YAAW,GAChB,IACE,MAAMxmF,QAAYzyF,KAAK24I,SAAS5zH,OAAOysC,GACvC,GAA4BxxD,KAAMi8K,IAA0BA,IAA0BxpF,EAAK,GAC7F,CAAE,MAAO36B,GACP93D,KAAK8tC,YAAYgqB,EACnB,CAAE,QACA93D,KAAKi5K,YAAW,EAClB,CATA,CAUF,CACA,WAAAnF,GACE9zK,KAAKqhH,OAAO8tC,eAAe,CACzBinB,iBAAkB,GAClBt3K,MAAO,GACP20K,WAAY,MAEhB,CACA,kBAAMX,CAAartK,GACjB,MAAM+rD,EAAQxxD,KAAKm8K,eAAiB,KACpC,GAAIn8K,KAAK23K,mBAAmBlyK,IAAU+rD,EAAO,CAC3CxxD,KAAKq3K,kBAAmB,EACxB,IACE,MAAM,MACJv4K,EAAK,WACL20K,GACEzzK,KAAKqhH,OAAO6tC,iBACVxzI,QAAiB1b,KAAK24I,SAAS5zH,OAAO0uJ,EAAYjiH,GACxD,GAA4BxxD,KAAMi8K,IAA0BA,IAA0BvgK,EAAU5c,EAClG,CAAE,MAAO0F,GACPxE,KAAK8tC,YAAYtpC,EACnB,CAAE,QACAxE,KAAKq3K,kBAAmB,CAC1B,CACF,CACF,CACA,WAAAiD,GACE,MAAM,iBACJlE,GACEp2K,KAAKqhH,OAAO6tC,iBAChBlvJ,KAAKqhH,OAAO4tC,KAAKnvJ,IAAI,uCACrBE,KAAKqhH,OAAO4tC,KAAK1I,SAAS6vB,EAAiBluK,IAAI8vI,GAAQh4I,KAAKi4K,WAAWjgC,KACvEh4I,KAAKq8K,kBACP,CACA,MAAA7xJ,CAAOvlB,EAAOu2K,GACZ,IAAIC,EAAQz7K,UACa,IAArBw7K,IACFA,EAAc,CAAC,GAEjB,MAAM,eACJ/D,EAAc,YACduE,EAAW,WACXvI,GACEzzK,KAAKqhH,OAAO6tC,kBACV,KACJxM,GACE1iJ,KAAKqhH,OAAO4tC,KACXwoB,GACHz3K,KAAKs3K,iBAEP,MAAMoE,EAAoB,IACrB17K,KAAK6gF,QACL26F,IAEC,MACJ18K,EAAK,QACL23K,EAAO,YACPS,EAAW,QACX79J,EAAO,iBACP+8J,GACEp2K,KAAKqhH,OAAO6tC,kBACV,UACJ+lB,EAAS,YACTgC,EAAW,oBACX5B,GACEr1K,KACE27K,EAA2B,KAAhBzE,EACX2E,EAAe,CACnB5G,YACAG,eAAgBp1K,KAAKo1K,eAAev0K,KAAKb,MACzCq1K,sBACAe,mBACAt3K,MAAO68K,EAAW1E,EAAYn4K,GAASA,EACvC23K,QAASkF,EAAW1E,EAAYR,GAAWA,EAC3C3D,aAAc9yK,KAAK8yK,aACnBne,KAAM30J,KAAKs6K,YACXrpK,OAAQjR,KAAKw3K,cAEbb,iBAAkB+E,EAAkBtC,WACpCr0J,OAAQ/kB,KAAK+kB,OACb+uJ,YAAa9zK,KAAK8zK,YAClBL,aACAD,eAAe,EACfoD,iBAAkBl0B,EAAK,UACvBkxB,iBAAkBlxB,EAAK,eACvBm0B,eAAgBn0B,EAAK,mBACrB1mE,MAAOh8E,KAAKqhH,OAAOrlC,MACnBi6F,SAAUyF,EAAkBzF,SAC5Bd,WAAYuG,EAAkBvG,WAC9BiE,WAAYsC,EAAkBtC,WAC9Bx/J,UAAWP,EACXk5J,gBAAiBmJ,EAAkBnJ,gBACnCd,WAAYzxK,KAAKqhH,OAAOm1D,KACxB9zB,OACA2zB,UAAWr2K,KAAKqhH,OAAO4tC,KAAKzK,WAC5BuB,qBAAsB,WACpB,OAAO01B,EAAMp6D,OAAO4tC,KAAKlJ,wBAAwB54I,UACnD,GAEF,OACS,GAAE6pK,GAAc,CACrB3mB,UAAWrwJ,KAAKq8K,kBAFhBL,EAGC,GAAE,MAAO,CACVvpJ,UAAW,uBACV,GAAE8gJ,GAAmB,CACtBxuJ,OAAQ/kB,KAAK+kB,OACb4uJ,WAAYjxB,EAAK,qBACjBmxB,YAAanxB,EAAK,gBAClBqxB,eAAgB,6CAChBC,mBAAoB,mCACpBN,YAAY,KAKb,GAAE,GAASmI,GAChB,IAciB/mC,QApMN,SCZb,IAAIwnC,GAAYlyK,OAAOC,OACnB,SAAkBnL,GACd,MAAwB,iBAAVA,GAAsBA,GAAUA,CAClD,EACJ,SAAS,GAAQ24G,EAAO81B,GACpB,OAAI91B,IAAU81B,MAGV2uC,GAAUzkE,KAAUykE,GAAU3uC,GAItC,CACA,SAAS4uC,GAAeC,EAAWC,GAC/B,GAAID,EAAU/8K,SAAWg9K,EAAWh9K,OAChC,OAAO,EAEX,IAAK,IAAID,EAAI,EAAGA,EAAIg9K,EAAU/8K,OAAQD,IAClC,IAAK,GAAQg9K,EAAUh9K,GAAIi9K,EAAWj9K,IAClC,OAAO,EAGf,OAAO,CACX,CAEA,SAASk9K,GAAWC,EAAUl1H,QACL,IAAjBA,IAAsBA,EAAU80H,IACpC,IAAIj2I,EAAQ,KACZ,SAASs2I,IAEL,IADA,IAAIC,EAAU,GACLC,EAAK,EAAGA,EAAK3vK,UAAU1N,OAAQq9K,IACpCD,EAAQC,GAAM3vK,UAAU2vK,GAE5B,GAAIx2I,GAASA,EAAMx2B,WAAa9P,MAAQynD,EAAQo1H,EAASv2I,EAAMz2B,UAC3D,OAAOy2B,EAAMy2I,WAEjB,IAAIA,EAAaJ,EAAStvK,MAAMrN,KAAM68K,GAMtC,OALAv2I,EAAQ,CACJy2I,WAAYA,EACZltK,SAAUgtK,EACV/sK,SAAU9P,MAEP+8K,CACX,CAIA,OAHAH,EAASx6I,MAAQ,WACbkE,EAAQ,IACZ,EACOs2I,CACX,CChDA,QAAgB,+DAAgE,kEAAmE,wDAAyD,yDAA0D,2DAA4D,yDAA0D,8DAA+D,8DAA+D,6DAA8D,yEAA0E,mECGnnB,SAASI,GAAmBC,EAAaC,GACtD,GAAIA,EAAmB,CACrB,MAAMC,EAAYF,EAAYpzK,cAAc,yBAAyBqzK,OAErE,GAAIC,EAAW,OAAOA,CACxB,CACA,OAAOF,CACT,CCLA,SAASG,GAAiB33K,EAAOwtC,GAC/B,MAAMrqB,EAAOqqB,EAAM,GACfrqB,IACFA,EAAKwB,QACL3kB,EAAM6jB,iBAEV,CAkBA,SAAS+zJ,GAAU53K,EAAOy3K,EAAmBD,GAC3C,MAAMK,EAAkBN,GAAmBC,EAAaC,GAClDK,EAAiBC,GAAQF,EAAgB35J,iBAAiB85J,KAC1DC,EAAmBH,EAAep6K,QAAQnE,SAAS8oB,gBAN3D,SAA0Bw1J,GACxB,OAAOA,EAAgB/tJ,SAASvwB,SAAS8oB,cAC3C,CAUO61J,CAAiBL,GACpBF,GAAiB33K,EAAO83K,GAEf93K,EAAM6nB,UAAiC,IAArBowJ,EA7B/B,SAAyBj4K,EAAOwtC,GAC9B,MAAMrqB,EAAOqqB,EAAMA,EAAMxzC,OAAS,GAC9BmpB,IACFA,EAAKwB,QACL3kB,EAAM6jB,iBAEV,CAwBIs0J,CAAgBn4K,EAAO83K,GAEb93K,EAAM6nB,UAAYowJ,IAAqBH,EAAe99K,OAAS,GACzE29K,GAAiB33K,EAAO83K,EAE5B,C,cC5Ce,SAASM,KACtB,MAAMC,EAAM9+K,SAASshB,KACrB,MAAM,cAAew9J,GAAU,gBAAiBA,GAAO,WAAYA,GAG7D,aAAcp/K,QAGd,eAAgBA,MAIxB,C,cC8Fe,SAASq/K,GAAcllC,GACpC,MAAMmlC,EAAgB,CACpB30G,MAAO,UACPmtG,KAjCK,GAAE,MAAO,CACd,cAAe,OACfzkB,UAAW,QACXt/H,UAAW,cACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,IAAK,CACRryE,KAAM,UACNuyE,SAAU,WACT,GAAE,OAAQ,CACXh9I,EAAG,8JACD,GAAE,OAAQ,CACZA,EAAG,0CAsBL,IAAK2jI,EAAU,OAAOmlC,EACtB,MAAMC,EAAkBplC,EAASzmI,MAAM,KAAK,GACtC8rK,EAAmBrlC,EAASzmI,MAAM,KAAK,GAG7C,MAAwB,SAApB6rK,EACK,CACL50G,MAAO,UACPmtG,KA1BG,GAAE,MAAO,CACd,cAAe,OACfzkB,UAAW,QACXt/H,UAAW,cACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,6KACHyqE,KAAM,UACNuyE,SAAU,cAqBY,UAApB+rB,EACK,CACL50G,MAAO,UACPmtG,KAhIG,GAAE,MAAO,CACd,cAAe,OACfzkB,UAAW,QACX5/H,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,IAAK,CACRryE,KAAM,UACNuyE,SAAU,WACT,GAAE,OAAQ,CACXh9I,EAAG,yFACHg9I,SAAU,YACR,GAAE,OAAQ,CACZh9I,EAAG,oLACHg9I,SAAU,YACR,GAAE,SAAU,CACdC,GAAI,MACJC,GAAI,MACJ71F,EAAG,WAmHmB,UAApB0hH,EACK,CACL50G,MAAO,UACPmtG,KAlHG,GAAE,MAAO,CACd,cAAe,OACfzkB,UAAW,QACXt/H,UAAW,cACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,0ZACHyqE,KAAM,UACNuyE,SAAU,cA6GY,UAApB+rB,EACK,CACL50G,MAAO,UACPmtG,KA5GG,GAAE,MAAO,CACd,cAAe,OACfzkB,UAAW,QACXt/H,UAAW,cACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,kLACHyqE,KAAM,UACNuyE,SAAU,cAuGY,gBAApB+rB,GAA0D,QAArBC,EAChC,CACL70G,MAAO,UACPmtG,KAtGG,GAAE,MAAO,CACd,cAAe,OACfzkB,UAAW,QACXt/H,UAAW,cACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,miCACHyqE,KAAM,UACNuyE,SAAU,cAkGY,gBAApB+rB,IAAiF,IADhE,CAAC,MAAO,kBAAmB,mBAAoB,mBAAoB,QAAS,SAAU,qBACrD96K,QAAQ+6K,GACrD,CACL70G,MAAO,UACPmtG,KAjGG,GAAE,MAAO,CACd,cAAe,OACfzkB,UAAW,QACX5/H,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,g6CACHyqE,KAAM,UACNuyE,SAAU,cA2FL8rB,CACT,CCrKe,SAASG,GAAYl7F,GAClC,MAAM,KACJ+0D,GACE/0D,EACJ,GAAI+0D,EAAKgT,QACP,OAAO,GAAE,MAAO,CACdv4H,UAAW,iCACX6d,IAAK0nG,EAAKj5I,KACVma,IAAK8+H,EAAKgT,UAGd,MAAM,MACJ3hF,EAAK,KACLmtG,GACE,GAAgBx+B,EAAKnyI,MACzB,OAAO,GAAE,MAAO,CACd4sB,UAAW,uCACV,GAAE,OAAQ,CACXA,UAAW,kCACXP,MAAO,CACLm3C,UAEDmtG,GAAO,GAAE,MAAO,CACjB,cAAe,OACfzkB,UAAW,QACXt/H,UAAW,oCACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACXryE,KAAM,OACNxtD,MAAO,KACP4hC,OAAQ,KACRq/E,GAAI,IACJ8e,SAAU,aAEd,CChCe,SAASksB,GAAiBn7F,GACvC,MAAM,KACJ+0D,EAAI,eACJqmC,EAAc,KACd37B,EAAI,WACJ47B,GACEr7F,GACE,0BACJ2nE,GACE5S,EACJ,GAAmC,MAA7B4S,IAAqCA,EAA0BnrJ,OACnE,OAAO,KAET,MAAM8+K,EAAmB3zB,EAA0B1iJ,IAAIs2K,GAlB/B,EAACC,EAAaH,KACtC,MACM3uF,GAD+B,mBAAf2uF,EAA4BA,IAAeA,GAC5Cz2K,OAAO8zD,GAAKA,EAAErzC,KAAOm2J,GAC1C,OAAO9uF,EAAM,GAAG5wF,MAe2D2/K,CAAkBF,EAAkBF,IAAa3/J,KAAK,MACjI,OAAO,GAAE,MAAO,CACd8T,UAAW,oCACViwH,EAAK,4BAA6B,CACnCvO,YAAayW,EAA0BnrJ,OACvCk/K,OAAQJ,IACN,IAAK,GAAE,SAAU,CACnB14K,KAAM,SACNgiD,MAAO,mDACPoxB,QAAS,IAAMolG,GAAe,EAAMrmC,EAAK1vH,KACxCo6H,EAAK,aACV,CC1Be,SAASk8B,GAAmB37F,GACzC,MAAM,KACJ+0D,EAAI,KACJ0K,EAAI,eACJ27B,EAAc,WACdC,EAAU,2BACVO,GACE57F,EAGJ,OAAO,GAAE,MAAO,CACdxwD,UAAW,uCACXP,MAAO,CACL4lD,gBAJ2BkgE,EAAKgT,QADtB,2BACwC,GAAgBhT,EAAKnyI,MAAMwjE,QAM9Ew1G,GAA8B7mC,EAAKgU,WAAa,GAAE,IAAK,CACxDv5H,UAAW,kCACXrpB,KAAM4uI,EAAKgU,UACXmqB,IAAK,sBACLjkK,OAAQ,SACR,aAAc8lI,EAAKp8G,KAAK78B,MACvB,GAAE,OAAQ,CACX2X,QAAQ,GACPshI,EAAKp8G,KAAK78B,OAAQ,GAAEo/K,GAAa,CAClCnmC,KAAMA,IACJ,GAAEomC,GAAkB,CACtBpmC,KAAMA,EACN0K,KAAMA,EACN27B,eAAgBA,EAChBC,WAAYA,IAEhB,CCrBA,SAASQ,GAAuB77F,GAC9B,OAAIA,EAAM87F,WACD97F,EAAMy/D,KAAK,kBAEhBz/D,EAAMz+E,MACDy+E,EAAMy/D,KAAK,eAEhBz/D,EAAMw/D,iBACJx/D,EAAM+0D,KAAKsN,SACNriE,EAAMy/D,KAAK,gBAEbz/D,EAAMy/D,KAAK,eAEhBz/D,EAAMu/D,uBACDv/D,EAAMy/D,KAAK,gBAEb,EACT,CACA,SAASs8B,GAAwB/7F,GAC/B,OAAO,GAAE,MAAO,CACdxwD,UAAW,gCACV,GAAE,SAAU,CACbA,UAAW,gEACX5sB,KAAM,SACN,aAAci5K,GAAuB77F,GACrCjH,MAAO8iG,GAAuB77F,GAC9BhK,QAAS,IAtCb,SAAkCgK,GAC5BA,EAAM87F,cACN97F,EAAMz+E,OAAUy+E,EAAM0wE,gBAItB1wE,EAAMw/D,mBAAqBx/D,EAAMwwE,sBACnCxwE,EAAMgsE,KAAK1H,YAAYtkE,EAAM+0D,KAAK1vH,IACzB26D,EAAMu/D,yBAA2Bv/D,EAAMywE,kBAChDzwE,EAAMgsE,KAAK3H,WAAWrkE,EAAM+0D,KAAK1vH,IANjC26D,EAAMgsE,KAAKjH,YAAY/kE,EAAM+0D,KAAK1vH,IAQtC,CA2BmB22J,CAAyBh8F,IACvCA,EAAMl7D,UACX,CACA,SAASm3J,GAAwBj8B,GAC/B,IAAI,SACFl7H,GACEk7H,EACJ,OAAO,GAAE,MAAO,CACd,cAAe,OACf8O,UAAW,QACX5/H,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,YACTv/H,UAAW,wDACV1K,EACL,CACA,SAASo3J,GAAex0B,GACtB,IAAI,SACFx5D,GACEw5D,EAEJ,MAAMy0B,EAAe,EAAI/8K,KAAK4qE,GAAK,GACnC,OAAO,GAAE,IAAK,KAAM,GAAE,SAAU,CAC9Bx6C,UAAW,uCACX8pC,EAAG,KACH41F,GAAI,KACJC,GAAI,KACJ,eAAgB,IAChBzyE,KAAM,SACJ,GAAE,SAAU,CACdltD,UAAW,6CACX8pC,EAAG,KACH41F,GAAI,KACJC,GAAI,KACJuE,UAAW,sBACXh3E,KAAM,OACN,eAAgB,IAChB,mBAAoBy/F,EACpB,oBAAqBA,EAAeA,EAAe,IAAMjuF,IAE7D,CACe,SAASkuF,GAAap8F,GAEnC,OAAKA,EAAM+0D,KAAK7mD,SAASyyD,cAKrB3gE,EAAM87F,WACD,GAAE,MAAO,CACdtsJ,UAAW,gCACV,GAAE,MAAO,CACVA,UAAW,yCACV,GAAEysJ,GAAyB,KAAM,GAAE,SAAU,CAC9C3iH,EAAG,KACH41F,GAAI,KACJC,GAAI,KACJzyE,KAAM,YACJ,GAAE,UAAW,CACfltD,UAAW,0CACXkkI,UAAW,kBACXhlF,OAAQ,2FAGRsR,EAAM27D,oBAAV,EAKI37D,EAAMz+E,QAAUy+E,EAAM0wE,gBAGtB,GAAEqrB,GAAyB/7F,EAAO,GAAE,MAAO,CACzC,cAAe,OACf8uE,UAAW,QACXt/H,UAAW,sDACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,4CACD,GAAE,OAAQ,CACZA,EAAG,qBACD,GAAE,OAAQ,CACZA,EAAG,iDACD,GAAE,OAAQ,CACZA,EAAG,uDAML+tE,EAAMw/D,mBAAqBx/D,EAAMwwE,sBAGjC,GAAEurB,GAAyB/7F,EAAO,GAAEi8F,GAAyB,KAAM,GAAEC,GAAgB,CACnFhuF,SAAUlO,EAAM+0D,KAAK7mD,SAASmwD,aAC5Br+D,EAAM+0D,KAAKsN,SAAW,GAAE,UAAW,CACrC7yH,UAAW,yCACXkkI,UAAW,kBACXhlF,OAAQ,sBACL,GAAE,IAAK,CACVl/C,UAAW,0CACXkkI,UAAW,uBACV,GAAE,OAAQ,CACX3sI,EAAG,IACHC,EAAG,IACHkI,MAAO,IACP4hC,OAAQ,KACRq/E,GAAI,MACF,GAAE,OAAQ,CACZppH,EAAG,IACHC,EAAG,IACHkI,MAAO,IACP4hC,OAAQ,KACRq/E,GAAI,SAMLnwD,EAAMw/D,mBAAoBx/D,EAAMu/D,wBAA2Bv/D,EAAMywE,iBAc/D,GAAE,MAAO,CACdjhI,UAAW,gCACV,GAAE,MAAO,CACVA,UAAW,yCACV,GAAEysJ,GAAyB,KAAM,GAAEC,GAAgB,CACpDhuF,SAAUlO,EAAM+0D,KAAK7mD,SAASmwD,gBAhB5B,GAAE09B,GAAyB/7F,EAAO,GAAEi8F,GAAyB,KAAM,GAAEC,GAAgB,CACnFhuF,SAAUlO,EAAM+0D,KAAK7mD,SAASmwD,aAC5B,GAAE,UAAW,CACf7uH,UAAW,SACXkkI,UAAW,kBACXhlF,OAAQ,8MArFL,IAkGX,CCjLe,SAAS2tG,GAAenxK,EAAQoxK,GAE7C,GAAkB,IAAdA,EAAiB,MAAO,GAE5B,GAAIpxK,EAAO1O,QAAU8/K,EAAW,OAAOpxK,EAEvC,GAAIoxK,GAAa/rK,EAAsB,MAAO,GAAGrF,EAAOjL,MAAM,EAAGq8K,EAAY,MAC7E,MAAMC,EAAcD,EAAY/rK,EAC1BisK,EAAap9K,KAAK+wG,KAAKosE,EAAc,GACrCE,EAAYr9K,KAAKuI,MAAM40K,EAAc,GAC3C,OAAOrxK,EAAOjL,MAAM,EAAGu8K,GAXP,MAWiCtxK,EAAOjL,OAAOw8K,EACjE,CCXA,MAmDMC,GAAc18B,IAClB,IAAI,KACFjL,EAAI,QACJ/+D,GACEgqE,EACJ,OAAIjL,EAAKxzI,MACA,GAAE,SAAU,CACjBiuB,UAAW,2DACX,aAAculH,EAAKxzI,MACnB,yBAA0B,SAC1B,qBAAsB,SACtBy0E,QAASA,EACTpzE,KAAM,UACL,KAEE,MAEM,SAAS+5K,GAAS38F,GAC/B,MAAM,KACJ+0D,GACE/0D,EACJ,OAAO,GAAE,MAAO,CACdxwD,UAAW,+BACX,wBAAyBulH,EAAKzjH,QAC7B,GAAE,MAAO,CACV9B,UAAW,gCA5EQwwD,KACrB,MAAM,OACJ8yF,EAAM,KACNh3K,GACEkkF,EAAM+0D,KAAKp8G,KAgBf,OAAO,GAAE,MAAO,CACdnJ,UAAW,2BACXupD,MAAOj9E,GACNugL,GAAevgL,EAjBZkkF,EAAM48F,cAAgB58F,EAAM68F,iBAAmB,IAC1C,GAEL78F,EAAM88F,gBAAkB,IACnB,GAEL98F,EAAM88F,gBAAkB,IACnB,GAKFhK,EAAS,GAAK,MA2DpBiK,CAAe/8F,GAAQ,GAAE08F,GAAa,CACvC3nC,KAAM/0D,EAAM+0D,KAGZ/+D,QAAS,IAAMs6E,MAAMtwE,EAAM+0D,KAAKxzI,UAC7B,GAAE,MAAO,CACZiuB,UAAW,8BA1DMwwD,KACnB,IAAIg9F,EACJ,MAAM,OACJlK,GACE9yF,EAAM+0D,KAAKp8G,KACT08I,EAA2D,OAA3C2H,EAAqBh9F,EAAM+0D,KAAKU,aAAuB,EAAIunC,EAAmB3H,aAEpG,OAAKvC,EAGE,GAAE,MAAO,CACdtjJ,UAAW,8BACV,GAAE,IAAK,CACRrpB,KAAM,GAAG2sK,EAAO3xK,+CAChB8N,OAAQ,SACRikK,IAAK,uBACJmJ,GAAevJ,EAAOh3K,KAAM,KAAMu5K,EAAe,GAAE,GAAU,KAAM,MAAYA,EAAc,OAAc,MARrG,MAmDN4H,CAAaj9F,GAzCKA,IAASA,EAAM+0D,KAAKj2G,MAAQ,GAAE,MAAO,CAC1DtP,UAAW,kCACV+oH,GAAcv4D,EAAM+0D,KAAKj2G,OAuCFo+I,CAAel9F,GAtClBA,IAASA,EAAM+0D,KAAKoD,SAAW,GAAE,OAAQ,KAAM,MAAY,GAAE,SAAU,CAC5F3oH,UAAW,uDACX5sB,KAAM,SACNozE,QAASgK,EAAMm9F,qBACdn9F,EAAMy/D,KAAK,cAkCmC29B,CAAep9F,IAAS,GAAEm7F,GAAkB,CACzFpmC,KAAM/0D,EAAM+0D,KACZ0K,KAAMz/D,EAAMy/D,KACZ27B,eAAgBp7F,EAAMo7F,eACtBC,WAAYr7F,EAAMq7F,aAEtB,CC7FA,SAASgC,GAAWr9B,GAClB,IAAI,KACFjL,EAAI,2BACJuoC,EAA0B,WAC1BjC,EAAU,YACVkC,EAAW,KACX99B,EAAI,QACJzpE,GACEgqE,EACJ,OAAKs9B,GAA8BjC,GAAcA,EAAW7+K,OAAS,IAAM8gL,GAA8BC,EAAYxoC,GAC5G,GAAE,SAAU,CACjBvlH,UAAW,sFACX5sB,KAAM,SACN,aAAc68I,EAAK,uBAAwB,CACzC1K,KAAMA,EAAKp8G,KAAK78B,OAElBi9E,MAAO0mE,EAAK,uBAAwB,CAClC1K,KAAMA,EAAKp8G,KAAK78B,OAElBk6E,QAAS,IAAMA,KACd,GAAE,MAAO,CACV,cAAe,OACf84E,UAAW,QACXt/H,UAAW,cACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,IAAK,CACRE,SAAU,WACT,GAAE,OAAQ,CACXh9I,EAAG,+JACHg9I,SAAU,YACR,GAAE,OAAQ,CACZloI,EAAG,IACHC,EAAG,SACHkI,MAAO,KACP4hC,OAAQ,IACRq/E,GAAI,OACF,GAAE,OAAQ,CACZ8e,SAAU,UACVh9I,EAAG,iDAGA,IACT,CACA,SAASurK,GAAa91B,GACpB,IAAI,KACFjI,EAAI,QACJzpE,EAAO,KACP++D,GACE2S,EACJ,OAAO,GAAE,SAAU,CACjBl4H,UAAW,6EACX5sB,KAAM,SACN,aAAc68I,EAAK,aAAc,CAC/B1K,KAAMA,EAAKp8G,KAAK78B,OAElBi9E,MAAO0mE,EAAK,aAAc,CACxB1K,KAAMA,EAAKp8G,KAAK78B,OAElBk6E,QAAS,IAAMA,KACd,GAAE,MAAO,CACV,cAAe,OACf84E,UAAW,QACXt/H,UAAW,cACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,kEACD,GAAE,OAAQ,CACZyqE,KAAM,OACNzqE,EAAG,+GAEP,CAWA,SAASwrK,GAAez9F,GACtB,MAAM,KACJy/D,GACEz/D,EACJ,OAAO,GAAE,SAAU,CACjBxwD,UAAW,+EACX5sB,KAAM,SACN,aAAc68I,EAAK,YACnB1mE,MAAO0mE,EAAK,YACZzpE,QAASxzE,GAnBe,EAACA,EAAOw9E,KClErB,IAAyB09F,EAAYC,GAAZD,EDmEtB19F,EAAM+0D,KAAKgU,UCnEuB40B,EDmEZ39F,EAAMy/D,KAAK,oCClErB,IAAxBk+B,IACFA,EAAiB,sBAEZ,IAAItoK,QAAQC,IACjB,MAAMsoK,EAAW7hL,SAASmK,cAAc,YACxC03K,EAAS1nK,aAAa,QAAS,CAC7BolB,SAAU,QACVu1B,IAAK,EACL5mB,KAAM,EACN/a,MAAO,MACP4hC,OAAQ,MACR+mB,QAAS,EACTe,OAAQ,OACRilG,QAAS,OACTC,UAAW,OACXC,WAAY,gBAEdH,EAAS3hL,MAAQyhL,EACjB3hL,SAASshB,KAAK3J,YAAYkqK,GAC1BA,EAASnwI,SACT,MAAMuwI,EAAkB,KACtBjiL,SAASshB,KAAK1J,YAAYiqK,GAE1BniL,OAAOwiL,OAAON,EAAgBD,GAC9BpoK,KAEF,IAEE,OADmBvZ,SAASmiL,YAAY,SAIxCniL,SAASshB,KAAK1J,YAAYiqK,GACnBtoK,KAHE0oK,GAIX,CAAE,MAAOnpH,GAEP,OADA94D,SAASshB,KAAK1J,YAAYiqK,GACnBI,GACT,KD8B+ErnJ,KAAK,KACpFqpD,EAAMgsE,KAAKnvJ,IAAI,6BACfmjF,EAAMgsE,KAAK14F,KAAK0sB,EAAMy/D,KAAK,8BAA+B,OAAQ,OACjExqF,MAAM+qB,EAAMgsE,KAAKnvJ,KAEnB85B,KAAK,IAAMn0B,EAAMyM,OAAOkY,MAAM,CAC7B8kC,eAAe,MAYGkyH,CAAoB37K,EAAOw9E,IAC5C,GAAE,MAAO,CACV,cAAe,OACf8uE,UAAW,QACXt/H,UAAW,cACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,0tBAEP,CACe,SAASmsK,GAAQp+F,GAC9B,MAAM,KACJgsE,EAAI,KACJjX,EAAI,2BACJuoC,EAA0B,YAC1BC,EAAW,WACXlC,EAAU,2BACVO,EAA0B,iBAC1ByC,EAAgB,KAChB5+B,EAAI,eACJ27B,EAAc,eACdkD,GACEt+F,EAQJ,OAAO,GAAE,MAAO,CACdxwD,UAAW,qCACV,GAAE6tJ,GAAY,CACf59B,KAAMA,EACN1K,KAAMA,EACNuoC,2BAA4BA,EAC5BC,YAAaA,EACblC,WAAYA,EACZrlG,QAfiB,KACbqlG,GAAcA,EAAW7+K,OAAS,EACpC4+K,GAAe,EAAMrmC,EAAK1vH,IAE1Bi5J,EAAevpC,MAYf6mC,GAA8B7mC,EAAKgU,UAAY,GAAE00B,GAAgB,CACnE1oC,KAAMA,EACNiX,KAAMA,EACNvM,KAAMA,IACH,KAAM4+B,EAAmB,GAAEb,GAAc,CAC5C/9B,KAAMA,EACN1K,KAAMA,EACNiX,KAAMA,EACNh2E,QAAS,IAAMg2E,EAAK3H,WAAWtP,EAAK1vH,GAAI,qBACrC,KACP,CExIe,MAAMk5J,WAAiB,GACpC,iBAAA3zB,GACE,MAAM,KACJ7V,GACEh4I,KAAKijF,MACJ+0D,EAAKgT,SACRhrJ,KAAKijF,MAAMw+F,uBAAuBzpC,EAEtC,CACA,qBAAA+V,CAAsBmK,GACpB,OAAQ,GAAal4J,KAAKijF,MAAOi1E,EACnC,CAIA,kBAAAjK,GACE,MAAM,KACJjW,GACEh4I,KAAKijF,MACJ+0D,EAAKgT,SACRhrJ,KAAKijF,MAAMw+F,uBAAuBzpC,EAEtC,CACA,oBAAA2W,GACE,MAAM,KACJ3W,GACEh4I,KAAKijF,MACJ+0D,EAAKgT,SACRhrJ,KAAKijF,MAAMy+F,sBAAsB1pC,EAErC,CACA,MAAAxtH,GACE,MAAM,KACJwtH,GACEh4I,KAAKijF,MACH0+F,EAAe3pC,EAAK7mD,SAASo0D,YAAcvN,EAAK7mD,SAASq0D,YACzDu5B,EAAa/mC,EAAK7mD,SAASwyD,iBAAmBg+B,IAAiB3pC,EAAKxzI,MACpE+7K,EAA6BvoC,EAAK7mD,SAASyyD,eAAiB+9B,EAC5DC,EAAmB5pC,EAAK7mD,SAASyyD,gBAAkB5L,EAAK7mD,SAASwyD,gBAAkBg+B,EACnFn9K,EAAQwzI,EAAKxzI,QAAS,GAItB,QACJ42I,GACEpD,EACJ,IAAIspC,GAAmBthL,KAAKijF,MAAMu/D,yBAAwCo/B,KAAd7C,EAc5D,OAbIA,GAAc/+K,KAAKijF,MAAM4+F,gCAC3BP,GAAmB,GAYd,GAAE,MAAO,CACd7uJ,UAXyB,GAAW,CACpC,uBAAuB,EACvB,gBAAiBmvJ,IAAqB5hL,KAAKijF,MAAM27D,eACjD,gBAAiB+iC,EACjB,cAAe5C,EACf,aAAcv6K,EACd,eAAgBxE,KAAKijF,MAAMw/D,iBAC3B,+BAAgCziJ,KAAKijF,MAAMu/D,uBAC3C,WAAYpH,IAIZ9yH,GAAI,QAAQ0vH,EAAK1vH,KACjB4lC,KAAMluD,KAAKijF,MAAM/0B,MAChB,GAAE,MAAO,CACVz7B,UAAW,+BACV,GAAEmsJ,GAAoB,CACvB5mC,KAAMA,EACN6mC,2BAA4B7+K,KAAKijF,MAAM47F,2BACvCn8B,KAAM1iJ,KAAKijF,MAAMy/D,KACjB27B,eAAgBr+K,KAAKijF,MAAMo7F,eAC3BC,WAAYt+K,KAAKijF,MAAMq7F,aACrB,GAAEe,GAAc,CAClBpwB,KAAMjvJ,KAAKijF,MAAMgsE,KACjBjX,KAAMA,EACNxzI,MAAOA,EACPu6K,WAAYA,EACZprB,gBAAiB3zJ,KAAKijF,MAAM0wE,gBAC5BD,iBAAkB1zJ,KAAKijF,MAAMywE,iBAC7BD,sBAAuBzzJ,KAAKijF,MAAMwwE,sBAClC7U,eAAgB5+I,KAAKijF,MAAM27D,eAC3BijC,8BAA+B7hL,KAAKijF,MAAM4+F,8BAC1Cp/B,iBAAkBziJ,KAAKijF,MAAMw/D,iBAC7BD,uBAAwBxiJ,KAAKijF,MAAMu/D,uBACnCE,KAAM1iJ,KAAKijF,MAAMy/D,QACd,GAAE,MAAO,CACZjwH,UAAW,0CACV,GAAEmtJ,GAAU,CACb5nC,KAAMA,EACN1vH,GAAItoB,KAAKijF,MAAM36D,GACfw5J,UAAW9hL,KAAKijF,MAAM6+F,UACtB/B,eAAgB//K,KAAKijF,MAAM88F,eAC3BD,gBAAiB9/K,KAAKijF,MAAM68F,gBAC5Bp9B,KAAM1iJ,KAAKijF,MAAMy/D,KACjB09B,oBAAqBpgL,KAAKijF,MAAMm9F,oBAChC/B,eAAgBr+K,KAAKijF,MAAMo7F,eAC3BC,WAAYt+K,KAAKijF,MAAMq7F,WACvBuB,aAAc7/K,KAAKijF,MAAM48F,eACvB,GAAEwB,GAAS,CACbrpC,KAAMA,EACNsmC,WAAYt+K,KAAKijF,MAAMq7F,WACvBO,2BAA4B7+K,KAAKijF,MAAM47F,2BACvCyC,iBAAkBA,EAClBd,YAAaxgL,KAAKijF,MAAMu9F,YACxBD,2BAA4BA,EAC5BlC,eAAgBr+K,KAAKijF,MAAMo7F,eAC3BkD,eAAgBvhL,KAAKijF,MAAMs+F,eAC3BtyB,KAAMjvJ,KAAKijF,MAAMgsE,KACjBvM,KAAM1iJ,KAAKijF,MAAMy/D,QAErB,ECrGa,SAASq/B,GAAS9+B,GAC/B,IAAI,GACF36H,EAAE,MACF9jB,EAAK,KACLk+I,EAAI,KACJuM,EAAI,MACJnwJ,EAAK,UACLgjL,EAAS,iBACTr/B,EAAgB,gBAChBkR,EAAe,sBACfF,EAAqB,iBACrBC,EAAgB,2BAChBmrB,EAA0B,8BAC1BgD,EAA6B,OAC7BG,EAAM,WACN1D,EAAU,aACVuB,EAAY,eACZxB,EAAc,uBACdoD,EAAsB,sBACtBC,EAAqB,eACrB9iC,EAAc,uBACd4D,EAAsB,YACtBy/B,EAAW,eACXV,EAAc,YACdf,EAAW,oBACXJ,EAAmB,eACnBL,EAAc,gBACdD,GACE78B,EAGJ,MAAM+vB,EAA4B,IAAhBiP,EAElB,GAEE,IAGIlL,EAAO,GAAQ,KACnB,MACMmL,EAAUj3K,OAAO+H,KAAKlU,GAE5B,OADI8/I,GAAgBsjC,EAAQj1I,KAFE,CAACk1I,EAAOC,IAAUtjL,EAAMsjL,GAAOhnC,QAAUt8I,EAAMqjL,GAAO/mC,SArDxF,SAAgBvuF,EAAM9qB,GACpB,MAAM88H,EAAU,GAChB,IAAIwjB,EAAe,GAUnB,OATAx1H,EAAKzpB,QAAQ4pC,IACPq1G,EAAa5iL,OAASsiC,EACxBsgJ,EAAaniL,KAAK8sE,IAElB6xF,EAAQ3+J,KAAKmiL,GACbA,EAAe,CAACr1G,MAGhBq1G,EAAa5iL,QAAQo/J,EAAQ3+J,KAAKmiL,GAC/BxjB,CACT,CA2CWyjB,CAAOJ,EAASD,IACtB,CAACnjL,EAAOmjL,EAAarjC,IAClBq0B,EAAap3C,GAInB,GAAE,MAAO,CACPh0E,MAAO,4BACPqG,KAAM,eACNjnD,IAAK40H,EAAI,IACRA,EAAI3zH,IAAIg7I,GAAU,GAAEs+B,GAAU,CAC/Bv6K,IAAKi8I,EAGL+L,KAAMA,EAGN3mI,GAAIA,EACJ9jB,MAAOA,EAGPk+I,KAAMA,EAGNo/B,UAAWA,EACXr/B,iBAAkBA,EAClBD,uBAAwBA,EAGxBmR,gBAAiBA,EACjBF,sBAAuBA,EACvBC,iBAAkBA,EAClBmrB,2BAA4BA,EAC5BgD,8BAA+BA,EAC/BG,OAAQA,EACR1D,WAAYA,EACZ1/B,eAAgBA,EAChBihC,aAAcA,EACdE,eAAgBA,EAChBD,gBAAiBA,EAGjBzB,eAAgBA,EAChBoD,uBAAwBA,EACxBC,sBAAuBA,EACvBxzH,KAAM,WACNqzH,eAAgBA,EAChBf,YAAaA,EACbJ,oBAAqBA,EACrBpoC,KAAMl5I,EAAMokJ,OAEd,OAAI28B,EACK,GAAE,MAAO,CACdh4H,MAAO,wBACNorH,EAAU8D,EAAK,KAEb,GAAE,GAAa,CACpBlvH,MAAO,uBACPqG,KAAM,OACNvqD,KAAMozK,EACN9D,UAAWA,EACXD,UAAWA,GAEf,CC7HA,IAAI,GAMJ,GAAcplK,OAAOqyI,IAAI,gDAkUzB,OAjUA,cAAuB,GACrB,WAAAv/I,GACE0X,SAASjL,WACTnN,KAAKuiL,sBAAwB,KAC3BviL,KAAKwiL,UAAU/rK,SAEjBzW,KAAKyiL,wBAA0B,KAC7BziL,KAAK0iL,YAAYjsK,SAEnBzW,KAAK2iL,6BAA+B,KAClC3iL,KAAK4iL,qBAAqBnsK,SAE5BzW,KAAK6iL,6BAA+B,KAClC7iL,KAAK8iL,qBAAqBrsK,SAE5BzW,KAAK+iL,kBAAoBt9K,IACvBzF,KAAKijF,MAAM+/F,kBAAkBv9K,GAQ7BA,EAAMyM,OAAOhT,MAAQ,MAEvBc,KAAKijL,kBAAoB,CAAC1M,EAAU2M,IAC3B,GAAE,QAAS,CAChBzwJ,UAAW,uBACX/b,QAAQ,EACR,cAAe,OACfy3C,UAAW,EACXg1H,gBAAiB5M,EACjB1wK,KAAM,OACN9G,KAAM,UACN24D,SAA0C,IAAhC13D,KAAKijF,MAAMm3D,iBACrBm7B,SAAUv1K,KAAK+iL,kBACfK,OAAQpjL,KAAKijF,MAAMq3D,iBACnB+R,IAAK62B,IAGTljL,KAAKqjL,wBAA0B,CAACx9K,EAAMy9K,EAAwBJ,KAC5D,MAIME,EAJe,CACnBG,MAAO,UACPC,MAAO,WAEmB39K,GAC5B,OAAO,GAAE,QAAS,CAChB4sB,UAAW,uBACX/b,QAAQ,EACR,cAAe,OACfy3C,UAAW,EACXtoD,KAAM,OACN9G,KAAM,UAAU8G,IAChB0vK,SAAUv1K,KAAK+iL,kBACfU,QAASH,EACTF,OAAQA,EACR/2B,IAAK62B,KAGTljL,KAAK0jL,uBAAyB,IACrB,GAAE,MAAO,CACdjxJ,UAAW,oBACXy7B,KAAM,eACN,wBAAyB,YACxB,GAAE,SAAU,CACbroD,KAAM,SACN4sB,UAAW,gDACXy7B,KAAM,MACNC,SAAU,EACV,6BAA6B,EAC7B8qB,QAASj5E,KAAKuiL,uBACb,GAAE,MAAO,CACV9vJ,UAAW,2BACV,GAAE,MAAO,CACVA,UAAW,iCACX,cAAe,OACfs/H,UAAW,QACX5/H,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,4aACHyqE,KAAM,eACN,YAAa,cACT,GAAE,MAAO,CACbltD,UAAW,0BACVzyB,KAAKijF,MAAMy/D,KAAK,eAErB1iJ,KAAK2jL,kBAAoB,IAChB,GAAE,MAAO,CACdlxJ,UAAW,oBACXy7B,KAAM,eACN,wBAAyB,qBACxB,GAAE,SAAU,CACbroD,KAAM,SACN4sB,UAAW,gDACXy7B,KAAM,MACNC,SAAU,EACV,6BAA6B,EAC7B8qB,QAASj5E,KAAK6iL,8BACb,GAAE,MAAO,CACVpwJ,UAAW,2BACV,GAAE,MAAO,CACV,cAAe,OACfs/H,UAAW,QACX5/H,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,4cACHyqE,KAAM,UACN,YAAa,cACT,GAAE,MAAO,CACbltD,UAAW,0BACVzyB,KAAKijF,MAAMy/D,KAAK,qBAErB1iJ,KAAK4jL,kBAAoB,IAChB,GAAE,MAAO,CACdnxJ,UAAW,oBACXy7B,KAAM,eACN,wBAAyB,qBACxB,GAAE,SAAU,CACbroD,KAAM,SACN4sB,UAAW,gDACXy7B,KAAM,MACNC,SAAU,EACV,6BAA6B,EAC7B8qB,QAASj5E,KAAK2iL,8BACb,GAAE,MAAO,CACVlwJ,UAAW,2BACV,GAAE,MAAO,CACV,cAAe,OACfN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACXryE,KAAM,UACNuyE,SAAU,UACVh9I,EAAG,sgBACC,GAAE,MAAO,CACbud,UAAW,0BACVzyB,KAAKijF,MAAMy/D,KAAK,qBAErB1iJ,KAAK6jL,mBAAqB,CAACtwK,EAAMuwK,IAExB,GAAE,SAAU,CACjBj+K,KAAM,SACN4sB,UAAW,gDACXwmD,QAAS6qG,EACT,4BAAmD,IAL3B9jL,KAAKijF,MAAM6+F,UAAUriL,QAM5C8T,GAELvT,KAAK+jL,6BAA+BC,IAClC,MAAMC,EAAcjkL,KAAK6jL,mBAAmB7jL,KAAKijF,MAAMy/D,KAAK,eAAgB1iJ,KAAKuiL,uBAC3E2B,EAAgBlkL,KAAK6jL,mBAAmB7jL,KAAKijF,MAAMy/D,KAAK,iBAAkB1iJ,KAAKyiL,yBAI/E0B,EAAuBnkL,KAAKijF,MAAMmhG,yBAClCC,EAAuBF,EAAqB/0K,OAAO,GAAG0S,cAAgBqiK,EAAqBjhL,MAAM,GACvG,OAAO,GAAE,MAAO,CACd2kD,MAAO,iCAGT7nD,KAAKijF,MAAMqhG,kBAAoBtkL,KAAKijF,MAAMy/D,KAAK,eAAiBshC,EAAoB,EAAIhkL,KAAKijF,MAAMogE,UAAU,kBAAkBghC,IAAwB,CACrJJ,cACAC,gBACAK,OAAQN,IACLjkL,KAAKijF,MAAMogE,UAAU,YAAYghC,IAAwB,CAC5DJ,cACAC,gBACAK,OAAQN,MAGZjkL,KAAKwkL,eAAiBC,IACpB,IAAIC,EACJ,OAAO,GAAE,MAAO,CACdjyJ,UAAW,oBACXy7B,KAAM,eACN,wBAAyBu2H,EAASn8J,IACjC,GAAE,SAAU,CACbziB,KAAM,SACN4sB,UAAW,gDACXy7B,KAAM,MACNC,SAAU,EACV,UAAWs2H,EAASn8J,GACpB,gBAAiB,gCAAgCm8J,EAASn8J,KAC1D,iBAA4E,OAAzDo8J,EAAwB1kL,KAAKijF,MAAM0hG,wBAAkC,EAAID,EAAsBp8J,MAAQm8J,EAASn8J,GACnI,6BAA6B,EAC7B2wD,QAAS,IAAMj5E,KAAKijF,MAAM2hG,UAAUH,EAASn8J,KAC5C,GAAE,MAAO,CACVmK,UAAW,2BACVgyJ,EAASjO,QAAS,GAAE,MAAO,CAC5B/jJ,UAAW,0BACVgyJ,EAAS1lL,SAEdiB,KAAK6kL,gBAAkB/C,IAGrB,MAAMgD,EAA0B,IAAIhD,GAC9BiD,EAAmBD,EAAwB7wK,OAAO6tK,EAAUriL,OAAS,EAAGqiL,EAAUriL,QACxF,OAAO,GAAE,GAAU,KAAMqlL,EAAwB58K,IAAIu8K,GAAYzkL,KAAKwkL,eAAeC,IAAY,GAAE,OAAQ,CACzGv2H,KAAM,eACNh8B,MAAO,CACL,cAAe,WAEhB6yJ,EAAiB78K,IAAIu8K,GAAYzkL,KAAKwkL,eAAeC,OAE1DzkL,KAAKglL,kBAAoB,CAAClD,EAAWwC,KACnC,MAAM,4BACJW,EAA2B,4BAC3BC,GACEllL,KAAKijF,MACT,IAAIp2B,EAAO,GACX,MAAMs4H,EAAc,WACfb,GAAmBz3H,EAAK3sD,KAAK,CAChC+G,IAAKk+K,EACLnmK,SAAUhf,KAAK0jL,2BAEbuB,GAA6Bp4H,EAAK3sD,KAAK,CACzC+G,IAAK,0BACL+X,SAAUhf,KAAK2jL,sBAEbuB,GAA6Br4H,EAAK3sD,KAAK,CACzC+G,IAAK,0BACL+X,SAAUhf,KAAK4jL,sBAEjB/2H,EAAK3sD,QAAQ4hL,EAAU55K,IAAIu8K,IAAY,CACrCx9K,IAAKw9K,EAASn8J,GACdtJ,SAAUhf,KAAKwkL,eAAeC,OAIQ,IAAhB53H,EAAKptD,QAAgBotD,EAAK,GAAG5lD,MAAQk+K,IACxCt4H,EAAO,IAI5B,MAAMu4H,EAAqB,IAAIv4H,GACzBw4H,EAAUD,EAAmBnxK,OAAO44C,EAAKptD,OAAS,EAAGotD,EAAKptD,QAC1D6lL,EAAa94K,GAAKA,EAAEtE,IAAI+6I,IAC5B,IAAI,IACFh8I,EAAG,SACH+X,GACEikI,EACJ,OAAO,GAAE,GAAU,CACjBh8I,IAAKA,GACJ+X,KAEL,OAAO,GAAE,GAAU,KAAMhf,KAAK+jL,6BAA6Bl3H,EAAKptD,QAAS,GAAE,MAAO,CAChFgzB,UAAW,+BACXy7B,KAAM,WACLo3H,EAAWF,GAAqB,GAAE,OAAQ,CAC3Cl3H,KAAM,eACNh8B,MAAO,CACL,cAAe,WAEhBozJ,EAAWD,MAElB,CACA,CAAC,MAECrlL,KAAKijF,MAAMogE,UAAU,iBACrBrjJ,KAAKijF,MAAMogE,UAAU,kBACrBrjJ,KAAKijF,MAAMogE,UAAU,oBACrBrjJ,KAAKijF,MAAMogE,UAAU,uBACrBrjJ,KAAKijF,MAAMogE,UAAU,wBACrBrjJ,KAAKijF,MAAMogE,UAAU,yBACvB,CACA,mBAAAkiC,GACE,MAAM,UACJliC,GACErjJ,KAAKijF,MACHuiG,EAAe,GAAE,OAAQ,KAAM,GAAE,MAAO,CAC5C,cAAe,OACfzzB,UAAW,QACXt/H,UAAW,2CACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,0EACHg9I,SAAU,aACP,GAAE,OAAQ,CACbz/H,UAAW,gCACV,SAIH,OAAO,GAAE,IAAK,CACZ07B,UAAW,EACX/kD,KAAM,kBACN+sK,IAAK,sBACLjkK,OAAQ,SACRugB,UAAW,4BARI4wH,EAAU,YAAa,CACtC4L,KAAMu2B,IASV,CACA,MAAAh7J,GACE,MAAM,4BACJy6J,EAA2B,4BAC3BC,EAA2B,uBAC3B5B,GACEtjL,KAAKijF,MACT,OAAO,GAAE,MAAO,CACdxwD,UAAW,2BACVzyB,KAAKijL,mBAAkB,EAAO52B,IAC/BrsJ,KAAKwiL,UAAYn2B,IACfrsJ,KAAKijL,mBAAkB,EAAM52B,IAC/BrsJ,KAAK0iL,YAAcr2B,IACjB44B,GAA+BjlL,KAAKqjL,wBAAwB,QAASC,EAAwBj3B,IAC/FrsJ,KAAK8iL,qBAAuBz2B,IAC1B64B,GAA+BllL,KAAKqjL,wBAAwB,QAASC,EAAwBj3B,IAC/FrsJ,KAAK4iL,qBAAuBv2B,IAC1BrsJ,KAAKglL,kBAAkBhlL,KAAKijF,MAAM6+F,UAAW9hL,KAAKijF,MAAMqhG,mBAAoB,GAAE,MAAO,CACvF7xJ,UAAW,gCACVzyB,KAAKijF,MAAMwiG,MAAQ,GAAE,MAAO,CAC7BhzJ,UAAW,uBACVzyB,KAAKijF,MAAMwiG,MAAOzlL,KAAKijF,MAAMyiG,6BAA+B1lL,KAAKulL,oBAAoBvlL,KAAKijF,QAC/F,GCjTF,GAjBsBA,GACb,GAAE,MAAO,CACdxwD,UAAW,GAAW,+BAAgCwwD,EAAMxwD,WAC5D,sBAAuB,WACvB,eAAgBwwD,EAAM0iG,mBACrB,GAAE,MAAO,CACVlzJ,UAAW,6BACV,GAAE,MAAO,CACVA,UAAW,8BACXy7B,KAAM,UACN,aAAc,KACb+0B,EAAMy/D,KAAK,oBAAqB,GAAE,SAAU,CAC7CjwH,UAAW,6BACX5sB,KAAM,SACNozE,QAAS,IAAMgK,EAAMm9F,qBAAoB,IACxCn9F,EAAMy/D,KAAK,UAAW,GAAE,GAAUz/D,ICHvC,GAXA,SAAqBp9C,GACnB,MAAM,QACJhS,GACEgS,EAAG3zB,OACS,UAAZ2hB,GAAmC,aAAZA,GAI3BgS,EAAGvc,iBACHuc,EAAGyI,mBAJDzI,EAAGyI,iBAKP,ECsBA,GAlCA,SAA4B20G,GAC1B,IAAI,kBACF0hC,EAAiB,UACjBlyJ,EAAS,cACTqlJ,EAAa,KACbp1B,EAAI,MACJz9I,EAAK,KACLgqJ,GACEhM,EACJ,OAAO,GAAE,MAAO,CACdxwH,UAAW,GAAW,8BAA+BA,GACrDy7B,KAAM,WACN,sBAAuB,cACvB5lC,GAAI,gCAAgCq8J,EAAkBr8J,KACtDs9J,WAAY,GACZC,YAAa,GACbC,OAAQ,GACRC,QAAS,IACR,GAAE,MAAO,CACVtzJ,UAAW,6BACV,GAAE,MAAO,CACVA,UAAW,8BACXy7B,KAAM,UACN,aAAc,KACbw0F,EAAK,aAAc,CACpB3jJ,KAAM4lL,EAAkB5lL,QACrB,GAAE,SAAU,CACf0zB,UAAW,6BACX5sB,KAAM,SACNozE,QAAS6+F,GACRp1B,EAAK,YAAa,GAAE,MAAO,CAC5BjwH,UAAW,mCACVw8H,EAAK7uC,UAAUukE,EAAkBr8J,IAAIkC,OAAOvlB,IACjD,ECEA,GAnCA,SAAqBg+E,GACnB,MAAM+0D,EAAO/0D,EAAMnkF,MAAMmkF,EAAM+iG,aAK/B,OAAO,GAAE,MAAO,CACdvzJ,UAAW,GAAW,8BAA+BwwD,EAAMxwD,WAC3Dy7B,KAAM,WACN,sBAAuB,aACvB5lC,GAAI,uCACH,GAAE,MAAO,CACVmK,UAAW,6BACV,GAAE,MAAO,CACVA,UAAW,8BACXy7B,KAAM,UACN,aAAc,KACb+0B,EAAMogE,UAAU,UAAW,CAC5BrL,KAAM,GAAE,OAAQ,CACdvlH,UAAW,mCACVulH,EAAKp8G,KAAOo8G,EAAKp8G,KAAK78B,KAAOi5I,EAAKj5I,SAClC,GAAE,SAAU,CACf0zB,UAAW,6BACX5sB,KAAM,SACNozE,QAtBmB,KACnBgK,EAAMgsE,KAAKriJ,KAAK,qBAAsBorI,GACtC/0D,EAAMgjG,oBAqBLhjG,EAAMy/D,KAAK,WAAY,GAAE,SAAU,CACpCjwH,UAAW,6BACX5sB,KAAM,SACNozE,QAASgK,EAAMijG,gBACdjjG,EAAMy/D,KAAK,UAAW,GAAE,MAAO,CAChCjwH,UAAW,mCACVwwD,EAAMkjG,QAAQj+K,IAAIgK,GACZ+wE,EAAMgsE,KAAK7uC,UAAUluG,EAAOoW,IAAIkC,OAAOy4D,EAAMh+E,SAExD,ECpCA,MAAMmhL,GAGiB,gBAHjBA,GAIa,YAyCnB,SAASC,GAAapjC,GACpB,IAAI,MACFnkJ,EAAK,KACL4jJ,EAAI,cACJgD,EAAa,aACbC,EAAY,YACZC,EAAW,yBACXR,EAAwB,SACxBN,EAAQ,gBACRO,GACEpC,EACJ,MAAMqjC,EA/CR,SAA2B3gC,EAAcD,EAAeE,EAAa9mJ,GAInE,QAHmB,IAAfA,IACFA,EAAQ,CAAC,GAEP6mJ,EACF,MAbW,QAeb,GAAID,EACF,MAXc,WAahB,GAAIE,EACF,MAbY,SAed,IAAI3gJ,EApBW,UAqBf,MAAM4hJ,EAAU57I,OAAO+H,KAAKlU,GAC5B,IAAK,IAAIU,EAAI,EAAGA,EAAIqnJ,EAAQpnJ,OAAQD,IAAK,CACvC,MAAM,SACJ2xF,GACEryF,EAAM+nJ,EAAQrnJ,IAElB,GAAI2xF,EAASyyD,gBAAkBzyD,EAASwyD,eACtC,OAAOyiC,GAILj1F,EAASo0D,YAActgJ,IAAUmhL,KACnCnhL,EAAQmhL,IAINj1F,EAASq0D,aAAevgJ,IAAUmhL,IAAgCnhL,IAAUmhL,KAC9EnhL,EAnCkB,iBAqCtB,CACA,OAAOA,CACT,CAYyB,CAAkB0gJ,EAAcD,EAAeE,EAAa9mJ,GACnF,OAAQwnL,GACN,IAAK,YACH,OAAO5jC,EAAK,kBAAmB,CAC7BvO,YAAaiR,EAAyB3lJ,SAE1C,IAAK,gBACL,IAAK,iBACH,OAAOijJ,EAAK,mBAAoB,CAC9BvO,YAAakR,EAAgB5lJ,SAEjC,IAAK,SACH,OAAOijJ,EAAK,gBACd,IAAK,UACH,OAAOA,EAAK,iBAAkB,CAC5BvO,YAAa2Q,EAASrlJ,SAE1B,IAAK,WACH,OAAOijJ,EAAK,kBACd,IAAK,QACH,OAAOA,EAAK,SAGlB,CA+CA,OA9CA,SAAqBz/D,GACnB,MAAM,KACJy/D,EAAI,cACJgD,EAAa,iBACbgO,EAAgB,iBAChBtZ,EAAgB,oBAChBgmC,EAAmB,KACnBnxB,GACEhsE,EACJ,IAAI,eACF07D,GACE17D,EAMJ,OAJI07D,GAAkBvE,IAEpBuE,EAAiB17D,EAAMsjG,eAAiBtjG,EAAMm3D,kBAEzC,GAAE,MAAO,CACd3nH,UAAW,6BACTizH,GAAkBgO,EAID,GAAE,MAAO,MAJW,GAAE,SAAU,CACnDjhI,UAAW,6BACX5sB,KAAM,SACNozE,QAAS,IAAMg2E,EAAKlH,aACnBrF,EAAK,WAA6B,GAAE,MAAO,CAC5CjwH,UAAW,8BACXy7B,KAAM,UACN,aAAc,KACb,GAAEm4H,GAAcpjG,IAAS07D,EAAiB,GAAE,SAAU,CACvDlsH,UAAW,gCACX5sB,KAAM,SACN,aAAc68I,EAAK,gBACnB1mE,MAAO0mE,EAAK,gBACZzpE,QAAS,IAAMmnG,GAAoB,IAClC,GAAE,MAAO,CACV,cAAe,OACfruB,UAAW,QACXt/H,UAAW,cACXN,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,OAAQ,CACX98I,EAAG,2KACA,GAAE,OAAQ,CACbud,UAAW,wCACViwH,EAAK,aAAe,GAAE,MAAO,MAClC,EC7He,SAAS8jC,GAAiBvjG,GACvC,MAAM,mBACJwjG,EAAkB,mBAClBlsC,EAAkB,WAClBmsC,EAAU,KACVpwK,EAAI,UACJqwK,GACE1jG,EACE2jG,EAAkB,CACtBrzK,KAAM,+DAER,OAAOkzK,EAAmBv+K,IAAIynF,IAC5B,MAAMrnE,EAAK,iCAAiCqnE,EAAMrnE,KAC5Cu+J,EAAWtsC,EAAmB7lI,SAASi7E,EAAMrnE,IACnD,OAAO,GAAE,WAAY,CACnBrhB,IAAK0oF,EAAMrnE,GACXmK,UAAW,oCACV,GAAE,QAAS,CACZA,UAAW,gCACXijJ,QAASptJ,GACRqnE,EAAM5wF,WAAwBa,IAAjB+vF,EAAMnlE,OAAuBmlE,EAAMnlE,OAAO,CACxDtrB,MAAOynL,EAAUh3F,EAAMrnE,IACvBitJ,SAAUuR,GAAUJ,EAAWI,EAAQn3F,EAAMrnE,IAC7Cs+J,kBACAC,WACAvwK,KAAMA,EAAKgS,IACV,IAAK,GAAE,QAAS,CACjBmK,UAAWm0J,EAAgBrzK,KAC3B+U,GAAIA,EACJhS,KAAMA,EAAKgS,GACXziB,KAAM8pF,EAAM9pF,MAAQ,OACpBghL,SAAUA,EACV3nL,MAAOynL,EAAUh3F,EAAMrnE,IACvBoG,YAAaihE,EAAMjhE,YACnB2lJ,QAASxuI,GAAM6gJ,EAAW7gJ,EAAG3zB,OAAOhT,MAAOywF,EAAMrnE,IACjD,6BAA6B,MAGnC,CC/Be,SAASy+J,GAAS9jG,GAC/B,IAAI+jG,EACJ,MAAM,MACJloL,EAAK,YACLknL,EAAW,eACX3H,EAAc,aACd4I,EAAY,WACZ3I,EAAU,mBACV/jC,EAAkB,eAClBgnC,EAAc,KACd7+B,EAAI,UACJW,EAAS,UACT5wH,EAAS,YACT+tJ,GACEv9F,EAIE+0D,EAAOl5I,EAAMknL,GACbS,EAA2D,OAArCO,EAHG,mBAAf1I,EAA4BA,EAAWx/K,EAAMknL,IAAgB1H,GAGL0I,EAAiB,GACnFE,EAAiB1G,EAAYxoC,GAC7BmvC,EAAiB,CAAC,EACxBV,EAAmBrjJ,QAAQusD,IACzB,IAAIy3F,EACJD,EAAex3F,EAAMrnE,IAAqD,OAA9C8+J,EAAsBpvC,EAAKp8G,KAAK+zD,EAAMrnE,KAAe8+J,EAAsB,KAEzG,MAAOT,EAAWU,GAAgB,GAASF,GACrCG,EAAa,GAAYzhJ,IAC7BA,EAAGvc,iBACH29J,EAAaN,EAAWX,IACvB,CAACiB,EAAcN,EAAWX,IAOvBuB,EAAe,KACnBlJ,GAAe,KAEV/nK,GAAQ,GAAS,KACtB,MAAM89J,EAASp1K,SAASmK,cAAc,QAGtC,OAFAirK,EAAOj7J,aAAa,WAAY,MAChCi7J,EAAO9rJ,GAAK+rH,KACL+/B,IAUT,OARA,GAAU,KACRp1K,SAASshB,KAAK3J,YAAYL,GAC1BA,EAAKlV,iBAAiB,SAAUkmL,GACzB,KACLhxK,EAAK9U,oBAAoB,SAAU8lL,GACnCtoL,SAASshB,KAAK1J,YAAYN,KAE3B,CAACA,EAAMgxK,IACH,GAAE,MAAO,CACd70J,UAAW,GAAW,0BAA2BA,GACjD,sBAAuB,WACvBmzJ,WAAY,GACZC,YAAa,GACbC,OAAQ,GACRC,QAAS,IACR,GAAE,MAAO,CACVtzJ,UAAW,6BACV,GAAE,MAAO,CACVA,UAAW,8BACXy7B,KAAM,UACN,aAAc,KACbm1F,EAAU,UAAW,CACtBrL,KAAM,GAAE,OAAQ,CACdvlH,UAAW,mCACVulH,EAAKp8G,KAAOo8G,EAAKp8G,KAAK78B,KAAOi5I,EAAKj5I,SAClC,GAAE,SAAU,CACf0zB,UAAW,6BACX5sB,KAAM,SACNyQ,KAAMA,EAAKgS,GACX0zD,MAAO0mE,EAAK,qBACZzpE,QAASsuG,GACR7kC,EAAK,YAAa,GAAE,MAAO,CAC5BjwH,UAAW,iCACV,GAAE,MAAO,CACVA,UAAW,kCACXP,MAAO,CACL4lD,gBAAiB,GAAgBkgE,EAAKnyI,MAAMwjE,QAE7C,GAAE80G,GAAa,CAChBnmC,KAAMA,IACJkvC,GAAkB,GAAE,SAAU,CAChCrhL,KAAM,SACN4sB,UAAW,uDACXwmD,QAASxzE,IAKP6hL,EAAW7hL,GACX87K,EAAevpC,KAEhB0K,EAAK,eAAgB,GAAE,MAAO,CAC/BjwH,UAAW,gCACV,GAAE+zJ,GAAkB,CACrBC,mBAAoBA,EACpBlsC,mBAAoBA,EACpBmsC,WAvEiB,CAACI,EAAQ/nL,KAC1BsoL,EAAa,IACRV,EACH,CAAC5nL,GAAO+nL,KAqEVxwK,KAAMA,EACNqwK,UAAWA,KACR,GAAE,MAAO,CACZl0J,UAAW,mCACV,GAAE,SAAU,CACbA,UAAW,gFAIX5sB,KAAM,SACNyQ,KAAMA,EAAKgS,IACVo6H,EAAK,gBAAiB,GAAE,SAAU,CACnCjwH,UAAW,6EACX5sB,KAAM,SACNozE,QAASsuG,EACTjxK,KAAMA,EAAKgS,IACVo6H,EAAK,aACV,CC7HA,MAAMwW,GAAiB,8BAsEvB,OA1DA,SAAejW,GACb,IAAI,SACFl7H,GACEk7H,EACJ,MAAOukC,EAAgBC,GAAqB,GAAS,OAC9Ch1J,EAAWi1J,GAAgB,GAAS,IACrCC,EAAkB,KAClBC,EAAkB,KAClBC,EAAoB,KA6C1B,OAnBA,GAAU,KACR,MAAMnuB,EAAQ,GAAa3xI,GAAU,GACjCy/J,IAAmB9tB,IACnBA,IAAU8tB,GA3BdE,EAAa,GAAGxuB,YAChBp/H,qBAAqB+tJ,EAAkB17G,SACvCpqE,aAAa6lL,EAAgBz7G,SAC7By7G,EAAgBz7G,aAAUvsE,EAC1BioL,EAAkB17G,QAAUruD,sBAAsB,KAChD4pK,EAAa,GAAGxuB,YAAwBA,mBACxCyuB,EAAgBx7G,QAAUlqE,WAAW,KACnCylL,EAAa,KA5BJ,SAkDFF,GAAmB9tB,GAAUkuB,EAAgBz7G,UAjBxDu7G,EAAa,GAAGxuB,YAChBp/H,qBAAqB+tJ,EAAkB17G,SACvCpqE,aAAa4lL,EAAgBx7G,SAC7Bw7G,EAAgBx7G,aAAUvsE,EAC1BioL,EAAkB17G,QAAUruD,sBAAsB,KAChD4pK,EAAa,GAAGxuB,YAAwBA,mBACxC0uB,EAAgBz7G,QAAUlqE,WAAW,KACnCwlL,EAAkB,MAClBC,EAAa,KAzCJ,QAqDbD,EAAkB/tB,KACjB,CAAC3xI,EAAUy/J,IAEd,GAAU,IACD,KACLzlL,aAAa4lL,EAAgBx7G,SAC7BpqE,aAAa6lL,EAAgBz7G,SAC7BryC,qBAAqB+tJ,EAAkB17G,UAExC,IAEEq7G,EACE,GAAaA,EAAgB,CAClC/0J,UAAW,GAAWA,EAAW+0J,EAAevkG,MAAMxwD,aAF5B,IAI9B,ECxEA,SAAS,KAAiS,OAApR,GAAWxnB,OAAOuc,OAASvc,OAAOuc,OAAO3mB,OAAS,SAAUqR,GAAU,IAAK,IAAI1S,EAAI,EAAGA,EAAI2N,UAAU1N,OAAQD,IAAK,CAAE,IAAI+0B,EAASpnB,UAAU3N,GAAI,IAAK,IAAIyH,KAAOstB,EAActpB,OAAO1F,UAAU2F,eAAenG,KAAKwvB,EAAQttB,KAAQiL,EAAOjL,GAAOstB,EAAOttB,GAAU,CAAE,OAAOiL,CAAQ,EAAU,GAAS7E,MAAMrN,KAAMmN,UAAY,CCAlV,QACEiR,QAAS,CAEP47C,WAAY,cAEZ8tH,aAAc,iBACdC,gBAAiB,oBAEjBC,WAAY,sBAEZC,qBAAsB,gDAEtBC,eAAgB,iBAEhBC,2BAA4B,4BAG5BC,4BAA6B,qBAE7BC,SAAU,YACVC,KAAM,OAENhhC,WAAY,cAEZihC,SAAU,YACVC,UAAW,aAEXC,QAAS,kBAETjkL,MAAO,QAGPkkL,kBAAmB,sBACnBC,YAAa,eAEbC,SAAU,YACVC,SAAU,uBAGVllC,eAAgB,kBAChBmlC,aAAc,gBAEdC,aAAc,gBAEdC,YAAa,eAEbhhC,YAAa,eAEbihC,aAAc,gBAEdC,eAAgB,CACd,EAAG,+BACH,EAAG,iCAELC,gBAAiB,CACf,EAAG,gCACH,EAAG,kCAELC,iBAAkB,CAChB,EAAG,iCACH,EAAG,mCAGLC,UAAW,qBACXC,QAAS,WACTC,qBAAsB,oBACtBhsG,KAAM,OACNtsE,OAAQ,SACRu4K,eAAgB,oCAChBC,iBAAkB,sCAClBC,cAAe,sDACfC,qBAAsB,kDACtBC,uBAAwB,oDACxBC,oBAAqB,oEACrBC,YAAa,qBACb7F,YAAa,eACbC,cAAe,iBACf6F,gBAAiB,CACf,EAAG,gFACH,EAAG,iGAELC,kBAAmB,wDACnBC,gBAAiB,mBACjBC,SAAU,YACVt/B,0BAA2B,CACzB,EAAG,0CACH,EAAG,4CAGLu/B,eAAgB,eAChBC,eAAgB,iBC1FpB,SAAS,GAA4B3xI,EAAUm6F,GAAc,IAAK3nI,OAAO1F,UAAU2F,eAAenG,KAAK0zC,EAAUm6F,GAAe,MAAM,IAAItoI,UAAU,kDAAqD,OAAOmuC,CAAU,CAC1N,IAAI,GAAK,EACT,SAAS,GAA2B15C,GAAQ,MAAO,aAAe,KAAO,IAAMA,CAAM,CAiBrF,MAIMsrL,GAAU3N,GAAA,SAAsBA,GAGtC,SAAS4N,KACP,MAAMl1K,EAAI,CAAC,EAKX,OAJAA,EAAE8Z,QAAU,IAAI5W,QAAQ,CAACC,EAAS9R,KAChC2O,EAAEmD,QAAUA,EACZnD,EAAE3O,OAASA,IAEN2O,CACT,CAEA,MAAM,GAAiB,CACrBlD,OAAQ,OACRosK,WAAY,GACZiM,QAAQ,EACRp4J,MAAO,IACP4hC,OAAQ,IACR8zG,eAAgB,IAChBE,cAAe,aACfC,+BAA+B,EAC/BmR,kBAAiB,GACjB0F,4BAA4B,EAC5B3rB,qBAAqB,EACrBM,kBAAkB,EAClBE,kBAAkB,EAClBC,iBAAiB,EACjBF,uBAAuB,EACvB+2B,yBAAyB,EACzB/E,KAAM,KACNgF,0BAA0B,EAC1BC,kBAAkB,EAClBC,sBAAsB,EACtBC,kBAAkB,EAClBC,iBAAiB,EACjBC,2BAA2B,EAC3BC,gCAAgC,EAChCC,kBAAkB,EAClB5G,yBAA0B,QAC1BsB,6BAA6B,EAC7BuF,mBAAmB,EACnBpJ,+BAA+B,EAC/BqJ,wBAAwB,EACxBjG,6BAA6B,EAC7BC,6BAA6B,EAC7BiG,MAAO,QACPC,SAAU,KACVC,oBAAoB,EACpB7xK,UAAU,EACV8qK,mBAAmB,EAInB/xB,uBAAmB3yJ,EACnB0rL,oBAAqB,MAMvB,IAAIC,GAA8B,GAA2B,iBACzDC,GAAmD,GAA2B,sCAC9EC,GAA6C,GAA2B,gCACxEC,GAA6C,GAA2B,gCACxEC,GAAkC,GAA2B,qBAC7DC,GAA6B,GAA2B,gBACxDC,GAAsC,GAA2B,yBACjEC,GAA2B,GAA2B,cACtDC,GAA+C,GAA2B,kCAC1EC,GAAoC,GAA2B,uBAC/DC,GAA6C,GAA2B,gCAC7D,MAAMC,WAAkB,GAGrC,WAAAxrL,CAAYuuJ,EAAM9O,GAChB,IAAIgsC,EAGJ,IAAIf,EAIFA,EAHGjrC,OAEyBvgJ,IAAnBugJ,EAAMirC,SACJjrC,EAAMkrC,mBAAqB,cAAgB,KAE3ClrC,EAAMirC,SAJN,KAMbhzK,MAAM62I,EAAM,IACP,MACA9O,EACHirC,aAEFngL,OAAOoK,eAAerV,KAAMurL,GAAgB,CAC1CvxG,UAAU,EACV96E,WAAY,IAEdc,KAAKosL,UAAY,kBAAkB/3C,OACnCr0I,KAAKqsL,WCxGM,WACb,IAAIC,GAAiC,EAiCrC,OAAO,GAhCY,CAACrP,EAAaC,KAC/B,MAAMC,EAAYH,GAAmBC,EAAaC,GAC5CS,EAAmBR,EAAU5tJ,SAASvwB,SAAS8oB,eAIrD,GAAI61J,GAAoB2O,EAAgC,OACxD,MAAMC,EAAmBpP,EAAUtzK,cAAc,+BAIjD,IAAI8zK,GAAqB4O,EACzB,GAAIA,EACFA,EAAiBniK,MAAM,CACrB8kC,eAAe,IAEjBo9H,GAAiC,MAC5B,CACL,MAAME,EAAUrP,EAAUtzK,cAAc4zK,IAC7B,MAAX+O,GAAmBA,EAAQpiK,MAAM,CAC/B8kC,eAAe,IAEjBo9H,GAAiC,CACnC,GAS0B,IAC9B,CDqEsBG,GAClBzsL,KAAK0sL,yBAA0B,EAC/B1sL,KAAK2sL,aAAetrE,IAClB,MAEMurE,EAFc5sL,KAAKkvJ,iBAEMnnH,QAAQlgC,OAAOqK,GAAUA,EAAOoW,KAAO+4F,EAAO/4F,IAC7EtoB,KAAKmvJ,eAAe,CAClBpnH,QAAS6kJ,KAGb5sL,KAAKovJ,UAAY/tC,IACf,MAAMwrE,EAAiBxrE,EAAO/4F,IAAM+4F,EAAO3gH,YAAY3B,KACjD6wJ,EAAmBvuC,EAAOrlC,OAAS6wG,EACnCC,EAAmBzrE,EAAOx7G,KAChC,GAAyB,aAArBinL,GAAwD,sBAArBA,GAAiE,WAArBA,EAA+B,CAChH,MAAM5jC,EAAM,2FAEZ,OADAlpJ,KAAKivJ,KAAKnvJ,IAAIopJ,EAAK,SACZ,IACT,CACA,MAAMh3I,EAAS,CACboW,GAAIukK,EACJ9tL,KAAM6wJ,EACN/pJ,KAAMinL,GAGFF,EADQ5sL,KAAKkvJ,iBACMnnH,QAAQ7kC,QAKjC,OAJA0pL,EAAW1sL,KAAKgS,GAChBlS,KAAKmvJ,eAAe,CAClBpnH,QAAS6kJ,IAEJ5sL,KAAKusF,IAEdvsF,KAAK83K,cAAgB,KACnB,IAAIiV,EACJ,MAAM9nL,EAAQjF,KAAKkvJ,iBACb93H,EAAS,CACbutJ,uBAAmB/kL,EACnB+lL,mBAAmB,EACnBzI,kBAAmB,KACnB8I,YAAa,KACbgH,gBAAgB,GAEd/nL,EAAM0/K,oBAAsBvtJ,EAAOutJ,mBAAqB1/K,EAAM0gL,oBAAsBvuJ,EAAOuuJ,mBAAqB1gL,EAAM+nL,iBAAmB51J,EAAO41J,gBAAkB/nL,EAAMi4K,oBAAsB9lJ,EAAO8lJ,oBAIzMl9K,KAAKmvJ,eAAe/3H,GACpBp3B,KAAKivJ,KAAKriJ,KAAK,wBAA8E,OAApDmgL,EAAwB9nL,EAAM0/K,wBAAkC,EAAIoI,EAAsBzkK,MAErItoB,KAAK4kL,UAAYt8J,IACf,MAAM,QACJyf,GACE/nC,KAAKkvJ,iBACHy1B,EAAoB58I,EAAQzhB,KAAKpU,GACd,aAAhBA,EAAOrM,MAAuBqM,EAAOoW,KAAOA,GAErDtoB,KAAKmvJ,eAAe,CAClBw1B,oBACAzH,kBAAmB,gBAErBl9K,KAAKivJ,KAAKriJ,KAAK,uBAAwB0b,IAEzCtoB,KAAKwgL,YAAcxoC,IACjB,MAAM,QACJjwG,GACE/nC,KAAKkvJ,iBAET,OADgB,GAA4BlvJ,KAAM8rL,IAAaA,IAAa/jJ,GAC7DngB,KAAK1V,GAAUlS,KAAKivJ,KAAK7uC,UAAUluG,EAAOoW,IAAIk4J,YAAYxoC,KAE3Eh4I,KAAKuhL,eAAiBvpC,IACpB,MAAM,QACJjwG,GACE/nC,KAAKkvJ,iBACHi3B,EAAU,GAA4BnmL,KAAM8rL,IAAaA,IAAa/jJ,GAC5E/nC,KAAKmvJ,eAAe,CAClB69B,gBAAgB,EAChBhH,YAAahuC,EAAK1vH,IAAM,KACxB40J,kBAAmB,eAErBiJ,EAAQ/iJ,QAAQ6pJ,IAEdjtL,KAAKivJ,KAAK7uC,UAAU6sE,EAAO3kK,IAAI4kK,WAAWl1C,MAG9Ch4I,KAAKimL,gBAAkB,KACrB,MAAM,WACJ3H,GACEt+K,KAAKkvJ,iBACmBovB,GAAcA,EAAW7+K,OAAS,EAE5DO,KAAKmvJ,eAAe,CAClB69B,gBAAgB,EAChB9P,kBAAmB,aAGrBl9K,KAAKmvJ,eAAe,CAClB69B,gBAAgB,EAChBhH,YAAa,KACb9I,kBAAmB,cAIzBl9K,KAAKkmL,eAAiB,KACpB,MAAM,QACJn+I,GACE/nC,KAAKkvJ,iBACO,GAA4BlvJ,KAAM8rL,IAAaA,IAAa/jJ,GACpE3E,QAAQ6pJ,IAEdjtL,KAAKivJ,KAAK7uC,UAAU6sE,EAAO3kK,IAAIi1D,SAEjCv9E,KAAKimL,mBAEPjmL,KAAK+5D,UAAY,KACf,MAAM,QACJ7qC,EAAO,QACP3W,GACE+xK,KAQJ,GANAtqL,KAAKmtL,oBAAsBzuL,OAAO4/B,YAElCt+B,KAAKotL,mBAAqBpuL,SAAS8oB,cAC/B9nB,KAAK6gF,KAAKkqG,gCACZ/rL,SAASshB,KAAKlhB,UAAUqJ,IAAI,0BAE1BzI,KAAK6gF,KAAKmqG,kBAAoBhrL,KAAKkvJ,iBAAiBm+B,UAAW,CACjE,MAAM/nL,EAAU,KACdtF,KAAKmvJ,eAAe,CAClB2E,UAAU,IAEZ9zJ,KAAKusF,GAAG/qF,oBAAoB,eAAgB8D,GAAS,GACrDiT,KAEFvY,KAAKusF,GAAGnrF,iBAAiB,eAAgBkE,GAAS,EACpD,MACEtF,KAAKmvJ,eAAe,CAClB2E,UAAU,IAEZv7I,IASF,OAPIvY,KAAK6gF,KAAKqqG,wBACZlrL,KAAKstL,uBAIPtuL,SAASoC,iBAAiB,UAAWpB,KAAKutL,sBAC1CvtL,KAAKivJ,KAAKriJ,KAAK,wBACRsiB,GAETlvB,KAAKg6D,WAAa6mB,IAChB,IAAI2sG,EAEJ,MAAMC,EAAgF,OAAjED,EAA4B,MAAR3sG,OAAoB,EAAIA,EAAK4sG,cAAuBD,GACvF,SACJ15B,EAAQ,UACRu5B,GACErtL,KAAKkvJ,iBACT,GAAI4E,GAAYu5B,EAEd,OAEF,MAAM,QACJn+J,EAAO,QACP3W,GACE+xK,KAIJ,GAHItqL,KAAK6gF,KAAKkqG,gCACZ/rL,SAASshB,KAAKlhB,UAAUmI,OAAO,0BAE7BvH,KAAK6gF,KAAKmqG,iBAAkB,CAC9BhrL,KAAKmvJ,eAAe,CAClBk+B,WAAW,IAEb,MAAM/nL,EAAU,KACdtF,KAAKmvJ,eAAe,CAClB2E,UAAU,EACVu5B,WAAW,IAEbrtL,KAAKqsL,WAAWp7K,SAChBjR,KAAKotL,mBAAmBhjK,QACxBpqB,KAAKusF,GAAG/qF,oBAAoB,eAAgB8D,GAAS,GACrDiT,KAEFvY,KAAKusF,GAAGnrF,iBAAiB,eAAgBkE,GAAS,EACpD,MACEtF,KAAKmvJ,eAAe,CAClB2E,UAAU,IAEZ9zJ,KAAKqsL,WAAWp7K,SAChBjR,KAAKotL,mBAAmBhjK,QACxB7R,IAOE,IAAIm1K,EAWR,OAdA1uL,SAASwC,oBAAoB,UAAWxB,KAAKutL,sBACzCE,GACEztL,KAAK6gF,KAAKqqG,wBAI4B,OAAnCwC,EAAiBluK,QAAQva,QAAkByoL,EAAe1tL,KAAKosL,YAGlE5sK,QAAQ8oK,OAIdtoL,KAAKivJ,KAAKriJ,KAAK,0BACRsiB,GAETlvB,KAAK2tL,YAAc,KACT3tL,KAAKkvJ,iBAAiB4E,WAAY,EAE5C9zJ,KAAK4tL,kBAAoB,IACnB5tL,KAAK6gF,KAAKyqG,oBACLtrL,KAAK6gF,KAAKyqG,sBAEZtrL,KAAKg6D,aAEdh6D,KAAK6tL,sBAAwBC,IAC3B,MAAM,aACJxrC,GACEtiJ,KAAKivJ,KAAKjrJ,WACdhE,KAAKivJ,KAAKva,SAAS,CACjB4N,aAAc,IACTA,EACHyrC,SAAUD,MAIhB9tL,KAAKguL,2BAA6BvoL,IAChC,MAAMwoL,EAAkBxoL,EAAMqO,QAC9B9T,KAAKivJ,KAAKnvJ,IAAI,6BAA4BmuL,EAAkB,KAAO,QACnEjuL,KAAK6tL,sBAAsBI,IAE7BjuL,KAAKq+K,eAAiB,CAAC7sJ,EAAM0xH,KAC3B,MAAMlL,EAAOh4I,KAAKivJ,KAAK5N,QAAQ6B,GAC3B1xH,EACFxxB,KAAKivJ,KAAKriJ,KAAK,4BAA6BorI,GAE5Ch4I,KAAKivJ,KAAKriJ,KAAK,+BAAgCorI,GAEjDh4I,KAAKmvJ,eAAe,CAClB62B,YAAax0J,EAAO0xH,EAAS,KAC7Bg6B,kBAAmB1rJ,EAAO,WAAa,QAG3CxxB,KAAKogL,oBAAsB5uJ,IACzBxxB,KAAKmvJ,eAAe,CAClBw2B,kBAAmBn0J,EACnB0rJ,kBAAmB1rJ,EAAO,WAAa,QAG3CxxB,KAAKumJ,SAAWznJ,IACd,MAAMy6C,EAAcz6C,EAAMoJ,IAAI8vI,IAAQ,CACpCzjH,OAAQv0B,KAAKsoB,GACbvpB,KAAMi5I,EAAKj5I,KACX8G,KAAMmyI,EAAKnyI,KACXlC,KAAMq0I,EACNp8G,KAAM,CAGJk9G,aAAcd,EAAKc,cAAgBd,EAAKk2C,oBAAsB,SAGlE,IACEluL,KAAKivJ,KAAK1I,SAAShtG,EACrB,CAAE,MAAOue,GACP93D,KAAKivJ,KAAKnvJ,IAAIg4D,EAChB,GAQF93D,KAAKmuL,uBAAyB,KAI5BnuL,KAAKouL,eAAiB,IAAI/8E,eAAevwF,IACvC,MAAMutK,EAAuBvtK,EAAQ,IAC/B,MACJqR,EAAK,OACL4hC,GACEs6H,EAAqB/8E,YACzBtxG,KAAKmvJ,eAAe,CAClB4wB,eAAgB5tJ,EAChB2tJ,gBAAiB/rH,EACjBu6H,4BAA4B,MAGhCtuL,KAAKouL,eAAejrK,QAAQnjB,KAAKusF,GAAG1iF,cAAc,0BAGlD7J,KAAKuuL,yCAA2CtsL,WAAW,KACzD,MAAMusL,EAAcxuL,KAAKkvJ,iBACnBu/B,GAAoBzuL,KAAK6gF,KAAK0pG,QAAUiE,EAAY16B,SAKzD06B,EAAYF,4BAEZG,IACCzuL,KAAKivJ,KAAKnvJ,IAAI,2EAA4E,WAC1FE,KAAKmvJ,eAAe,CAClBm/B,4BAA4B,MAG/B,MAELtuL,KAAK0uL,sBAAwB,KAC3B1uL,KAAKouL,eAAeloL,aACpBnE,aAAa/B,KAAKuuL,2CAIpBvuL,KAAK2uL,8BAAgClpL,IAC/BzF,KAAKusF,GAAGh9D,SAAS9pB,EAAMyM,QACzBlS,KAAK0sL,yBAA0B,GAE/B1sL,KAAK0sL,yBAA0B,EAI/B1sL,KAAKqsL,WAAWp7K,WAGpBjR,KAAK4uL,2BAA6BtqJ,IAChC,IAAI8lH,EACJ,MACMykC,EAAgH,OAA9FzkC,EAAwB,GAA4BpqJ,KAAMurL,IAAgBA,KAA2BnhC,EAAwBozB,GAAQx9K,KAAKusF,GAAG5oE,iBAD5I,CAAC,UAAW,wBAAyB,yBAA0B,2BAA4B,yBAA0B,qCAC2D9b,OAAO+gB,IAASA,EAAKxpB,UAAUmwB,SAAS,yBACjP,IAAK,MAAM3G,KAAQimK,EAEI,MAAjBjmK,EAAKiL,QACPjL,EAAKzP,aAAa,gBAAiBmrB,GAEnC1b,EAAKpP,SAAW8qB,EAIlB,GAA4BtkC,KAAMurL,IAAgBA,IADhDjnJ,EACkEuqJ,EAEA,KAEtE7uL,KAAK8uL,oBAAsBxqJ,GAE7BtkC,KAAKstL,qBAAuB,KAC1B,IAAIyB,EAGuC,OAApCA,EAAkBvvK,QAAQva,QAAkB8pL,EAAgB/uL,KAAKosL,YAGtE5sK,QAAQE,UAAU,IAEbF,QAAQva,MACX,CAACjF,KAAKosL,YAAY,GACjB,IAIL1tL,OAAO0C,iBAAiB,WAAYpB,KAAKgvL,gBAAgB,IAE3DhvL,KAAKgvL,eAAiBvpL,IACpB,IAAIwpL,GAEAjvL,KAAK2tL,eAAmBloL,EAAMR,OAAUQ,EAAMR,MAAMjF,KAAKosL,YAC3DpsL,KAAKg6D,WAAW,CACdyzH,aAAa,KAUZztL,KAAK2tL,eAAiD,OAA/BsB,EAAexpL,EAAMR,QAAkBgqL,EAAajvL,KAAKosL,YAEnF5sK,QAAQ8oK,QAGZtoL,KAAKutL,qBAAuB9nL,IA/dhB,KAieNA,EAAMypL,SAAqBlvL,KAAK4tL,oBAle1B,IAoeNnoL,EAAMypL,SAAqB7R,GAAmB53K,EAAOzF,KAAKkvJ,iBAAiBguB,kBAAmBl9K,KAAKusF,KAEzGvsF,KAAKmvL,mBAAqB,KACpBnvL,KAAK6gF,KAAK4pG,0BAA0BzqL,KAAK4tL,qBAE/C5tL,KAAKovL,YAAc3pL,IAEjBzF,KAAKivJ,KAAKrM,eAAevhC,IACH,aAAhBA,EAAOx7G,OAGiB,MAA1Bw7G,EAAOguE,iBAA2BhuE,EAAOguE,gBAAgB5pL,MAK7D,MAAM3G,EAAQ0+K,GAAQ/3K,EAAM6pL,cAAcxwL,OACtCA,EAAMW,OAAS,IACjBO,KAAKivJ,KAAKnvJ,IAAI,4BACdE,KAAKumJ,SAASznJ,KAGlBkB,KAAKgjL,kBAAoBv9K,IACvBA,EAAM6jB,iBACN,MAAMxqB,EAAQ0+K,GAAQ/3K,EAAMyM,OAAOpT,OAC/BA,EAAMW,OAAS,IACjBO,KAAKivJ,KAAKnvJ,IAAI,4CACdE,KAAKumJ,SAASznJ,KAGlBkB,KAAKuvL,eAAiB9pL,IACpB,IAAI+pL,EAAuBC,EAC3BhqL,EAAM6jB,iBACN7jB,EAAM6oC,kBAIN,MAoBMohJ,EApB8B,MAClC,IAAIA,GAA8B,EAMlC,OALA1vL,KAAKivJ,KAAKrM,eAAevhC,IACS,MAA5BA,EAAOsuE,mBAA6BtuE,EAAOsuE,kBAAkBlqL,KAC/DiqL,GAA8B,KAG3BA,GAa2BE,GAC9BC,EAVqB,MACzB,MAAM,MACJl0C,GACEl2I,EAAMqqL,aACV,OAAOn0C,EAAM/zH,KAAK/hB,GAAiB,UAATA,IAMXkqL,GACjB,IAAKL,IAAgCG,GAAY7vL,KAAK6gF,KAAKrnE,UAG3DxZ,KAAK6gF,KAAKyjG,oBAAsBuL,IAAaH,KAAiC1vL,KAAKivJ,KAAKjrJ,WAAW26I,eAGjG,OAFAl5I,EAAMqqL,aAAaE,WAAa,YAChCjuL,aAAa/B,KAAKiwL,4BAOpBxqL,EAAMqqL,aAAaE,WAAa,OAEhCjuL,aAAa/B,KAAKiwL,4BAClBjwL,KAAKmvJ,eAAe,CAClB+gC,gBAAgB,IAE+C,OAAhEV,GAAyBC,EAAazvL,KAAK6gF,MAAM+kG,aAAuB4J,EAAsBzqL,KAAK0qL,EAAYhqL,IAElHzF,KAAKmwL,gBAAkB1qL,IACrB,IAAI2qL,EAAuBC,EAC3B5qL,EAAM6jB,iBACN7jB,EAAM6oC,kBACNvsC,aAAa/B,KAAKiwL,4BAGlBjwL,KAAKiwL,2BAA6BhuL,WAAW,KAC3CjC,KAAKmvJ,eAAe,CAClB+gC,gBAAgB,KAEjB,IACgE,OAAlEE,GAAyBC,EAAcrwL,KAAK6gF,MAAMglG,cAAwBuK,EAAsBrrL,KAAKsrL,EAAa5qL,IAErHzF,KAAKswL,WAAatzK,UAChB,IAAIuzK,EAAmBC,EACvB/qL,EAAM6jB,iBACN7jB,EAAM6oC,kBACNvsC,aAAa/B,KAAKiwL,4BAClBjwL,KAAKmvJ,eAAe,CAClB+gC,gBAAgB,IAIlBlwL,KAAKivJ,KAAKrM,eAAevhC,IACH,aAAhBA,EAAOx7G,OAGgB,MAAzBw7G,EAAOovE,gBAA0BpvE,EAAOovE,eAAehrL,MAK3D,IAAIirL,GAAwB,EAW5B1wL,KAAKivJ,KAAKnvJ,IAAI,wCAGd,MAAMhB,QExmBGke,eAA+B8yK,EAAclgL,GAC1D,IAAI+gL,EAEJ,MAAMplB,EAA4F,OAA5EolB,EAAmC,MAAX/gL,OAAuB,EAAIA,EAAQ27J,cAAwBolB,EAAwB1hL,SAAS1J,UAC1I,IACE,MAAMqrL,EAAc,GACpB,UAAW,MAAM54C,KpDuCNh7H,gBAAyC8yK,EAAcvkB,GAIpE,MAAMslB,QAA0Bv4K,QAAQ2oB,IAAIv0B,MAAMmS,KAAKixK,EAAa5+G,MAAOl0D,UAEzE,IAAI8zK,EAcJ,OAD0C,MAArBA,IAAgDA,EAAmBllB,GAFpC,mBAApB5+F,EAAK+jH,WAA4B/jH,EAAK+jH,aAAe/jH,EAAKgkH,mBAE2CzlB,IAC9H,CACLulB,mBACA3kB,eAAgBn/F,EAAKikH,gBAGzB,IAAK,MAAM,eACT9kB,EAAc,iBACd2kB,KACGD,EAEH,GAAwB,MAApBC,EACF,UACS5kB,GAAuC4kB,EAAkB,GAAI3kB,EACtE,CAAE,MAAOr0G,GAIe,MAAlBq0G,QACIA,EAENZ,EAAazzG,EAEjB,MAC2B,MAAlBq0G,UAA8BA,EAE7C,CoDpF6B,CAAoB2jB,EAAcvkB,GACzDqlB,EAAY1wL,KAAK83I,GAEnB,OAAO44C,CAET,CAAE,MACA,OC3BW,SAAqBd,GAClC,MAAMhxL,EAAQ0+K,GAAQsS,EAAahxL,OACnC,OAAOwZ,QAAQC,QAAQzZ,EACzB,CDwBWoyL,CAAYpB,EACrB,CACF,CF0lB0BqB,CAAgB1rL,EAAMqqL,aAAc,CACtDvkB,aAdmB/mK,IACnBxE,KAAKivJ,KAAKnvJ,IAAI0E,EAAO,SAIhBksL,IACH1wL,KAAKivJ,KAAK14F,KAAK/xD,EAAMgB,QAAS,SAC9BkrL,GAAwB,MASxB5xL,EAAMW,OAAS,IACjBO,KAAKivJ,KAAKnvJ,IAAI,6BACdE,KAAKumJ,SAASznJ,IAE0C,OAAzDyxL,GAAqBC,EAAcxwL,KAAK6gF,MAAMilG,SAAmByK,EAAkBxrL,KAAKyrL,EAAa/qL,IAExGzF,KAAKyhL,uBAAyBzpC,IACvBh4I,KAAK6gF,KAAKmnF,+BACbhoK,KAAKivJ,KAAKriJ,KAAK,oBAAqBorI,IAOxCh4I,KAAK0hL,sBAAwB1pC,IACtBh4I,KAAK6gF,KAAKmnF,+BACbhoK,KAAKivJ,KAAKriJ,KAAK,mBAAoBorI,IAGvCh4I,KAAKoxL,sBAAwB3rL,IAznBjB,IA2nBNA,EAAMypL,SxB7lBT,SAAmBzpL,EAAOy3K,EAAmBD,GAExB,OAAtBC,GAMFG,GAAU53K,EAAOy3K,EAAmBD,EAExC,CwBmlBqC,CAAoBx3K,EAAOzF,KAAKkvJ,iBAAiBguB,kBAAmBl9K,KAAKusF,KAW1GvsF,KAAKqxL,kBAAoB5rL,IACEzF,KAAKusF,GAAGh9D,SAASvwB,SAAS8oB,gBAEjD9nB,KAAKovL,YAAY3pL,IAGrBzF,KAAKsxL,eAAiBruC,IACpB,IAAI,OACFpnI,GACEonI,GACAjjJ,KAAK6gF,KAAK6pG,kBAAgC,MAAV7uK,GAAkBA,EAAOpc,QAE3DO,KAAK4tL,qBAGT5tL,KAAKuxL,oBAAsB,KACzBvxL,KAAKivJ,KAAKriJ,KAAK,qBAEjB3B,OAAOoK,eAAerV,KAAMwrL,GAAqC,CAC/DxxG,UAAU,EACV96E,MAAO,KACL,GAAIc,KAAK6gF,KAAKiqG,0BACZ,OAEF,MACMhsL,EAAQkB,KAAKivJ,KAAKzK,WACxB,GAAqB,IAAjB1lJ,EAAMW,OAAc,CACtB,MAAM+xL,EAAqBxxL,KAAKivJ,KAAK7uC,UAAU,GAAGpgH,KAAKsoB,yBACjC,MAAtBkpK,GAA8BA,EAAmBluC,WAAW,CAC1DukB,eALoB,MAOtB,MAAM4pB,EAAmB,IACpB3yL,EAAM,GACTksJ,aAASprJ,GAEW,MAAtB4xL,GAA8BA,EAAmBrmB,iBAAiBsmB,GAAkB73J,KAAK,KACjE,MAAtB43J,GAA8BA,EAAmBluC,WAAW,CAC1DukB,eAAgB7nK,KAAK6gF,KAAKgnF,kBAGhC,KAGJ58J,OAAOoK,eAAerV,KAAMyrL,GAA+B,CACzDzxG,UAAU,EACV96E,MAAOJ,IACL,MAAM4yL,EAAY5yL,EAAM,IAClB,WACJw/K,GACEt+K,KAAKkvJ,iBACHyiC,EAAsBrT,GAAcA,EAAW7+K,OAAS,EACxDmyL,EAAuB5xL,KAAKwgL,YAAYkR,GAC1CC,GAA8C,eAAvB3xL,KAAK6gF,KAAKuqG,SACnCprL,KAAKq+K,gBAAe,EAAMqT,EAAUppK,IAC3BspK,GAA+C,gBAAvB5xL,KAAK6gF,KAAKuqG,UAC3CprL,KAAKuhL,eAAemQ,MAI1B1xL,KAAK6xL,WAAa,KAEhB,GAAI7xL,KAAK6gF,KAAKgwB,UAAY7wG,KAAK6gF,KAAK0pG,OAAQ,CAC1C,MAAMuH,EAAmB,GAAmB9xL,KAAK6gF,KAAKgwB,SAClDihF,EACFA,EAAiB1uJ,QAAQytE,GAAWA,EAAQzvG,iBAAiB,QAASpB,KAAK+5D,YAE3E/5D,KAAKivJ,KAAKnvJ,IAAI,8JAA+J,UAEjL,CACAE,KAAKmuL,yBACLnvL,SAASoC,iBAAiB,QAASpB,KAAKqxL,mBACxCrxL,KAAKivJ,KAAK1hJ,GAAG,eAAgB,GAA4BvN,KAAMisL,IAA+BA,KAC9FjsL,KAAKivJ,KAAK1hJ,GAAG,gBAAiBvN,KAAK2sL,cACnC3sL,KAAKivJ,KAAK1hJ,GAAG,aAAcvN,KAAK83K,eAChC93K,KAAKivJ,KAAK1hJ,GAAG,yBAA0BvN,KAAK83K,eAC5C93K,KAAKivJ,KAAK1hJ,GAAG,WAAYvN,KAAKsxL,gBAC9BtxL,KAAKivJ,KAAK1hJ,GAAG,cAAe,GAA4BvN,KAAMwrL,IAAqCA,KACnGxrL,KAAKivJ,KAAK1hJ,GAAG,eAAgB,GAA4BvN,KAAMwrL,IAAqCA,KAIpGxsL,SAASoC,iBAAiB,QAASpB,KAAK2uL,+BAA+B,GACvE3vL,SAASoC,iBAAiB,QAASpB,KAAK2uL,+BAA+B,GACnE3uL,KAAK6gF,KAAK0pG,QACZvqL,KAAKusF,GAAGnrF,iBAAiB,UAAWpB,KAAKoxL,uBAEvCpxL,KAAK6gF,KAAKuqG,UACZprL,KAAKivJ,KAAK1hJ,GAAG,cAAe,GAA4BvN,KAAMyrL,IAA+BA,MAGjGzrL,KAAK+xL,aAAe,KAClB,MAAMD,EAAmB,GAAmB9xL,KAAK6gF,KAAKgwB,UACjD7wG,KAAK6gF,KAAK0pG,QAAUuH,GACvBA,EAAiB1uJ,QAAQytE,GAAWA,EAAQrvG,oBAAoB,QAASxB,KAAK+5D,YAEhF/5D,KAAK0uL,wBACL1vL,SAASwC,oBAAoB,QAASxB,KAAKqxL,mBAC3C3yL,OAAO8C,oBAAoB,WAAYxB,KAAKgvL,gBAAgB,GAC5DhvL,KAAKivJ,KAAKxhJ,IAAI,eAAgB,GAA4BzN,KAAMisL,IAA+BA,KAC/FjsL,KAAKivJ,KAAKxhJ,IAAI,gBAAiBzN,KAAK2sL,cACpC3sL,KAAKivJ,KAAKxhJ,IAAI,aAAczN,KAAK83K,eACjC93K,KAAKivJ,KAAKxhJ,IAAI,yBAA0BzN,KAAK83K,eAC7C93K,KAAKivJ,KAAKxhJ,IAAI,WAAYzN,KAAKsxL,gBAC/BtxL,KAAKivJ,KAAKxhJ,IAAI,cAAe,GAA4BzN,KAAMwrL,IAAqCA,KACpGxrL,KAAKivJ,KAAKxhJ,IAAI,eAAgB,GAA4BzN,KAAMwrL,IAAqCA,KACrGxsL,SAASwC,oBAAoB,QAASxB,KAAK2uL,+BAC3C3vL,SAASwC,oBAAoB,QAASxB,KAAK2uL,+BACvC3uL,KAAK6gF,KAAK0pG,QACZvqL,KAAKusF,GAAG/qF,oBAAoB,UAAWxB,KAAKoxL,uBAE1CpxL,KAAK6gF,KAAKuqG,UACZprL,KAAKivJ,KAAKxhJ,IAAI,cAAe,GAA4BzN,KAAMyrL,IAA+BA,MAGlGzrL,KAAKgyL,uBAAyB,KAC5B,MAAMC,EAAgBjyL,KAAKusF,GAAGh9D,SAASvwB,SAAS8oB,eAE1CoqK,EAAiBlzL,SAAS8oB,gBAAkB9oB,SAASshB,MAAmC,OAA3BthB,SAAS8oB,cACtEqqK,EAAwD,IAArCnyL,KAAKivJ,KAAKjrJ,WAAWuyD,KAAK92D,OAC7C2yL,GAAWpyL,KAAK6gF,KAAK0pG,OAG3B4H,IAGAC,GAEAH,GAUAC,GAAkBlyL,KAAK0sL,yBACrB1sL,KAAKqsL,WAAWrsL,KAAKusF,GAAIvsF,KAAKkvJ,iBAAiBguB,mBAE/Cl9K,KAAKqsL,WAAWp7K,UAGpBjR,KAAKy4G,YAAc,MACbz4G,KAAK6gF,KAAKrnE,UAAaxZ,KAAK8uL,sBAI3B9uL,KAAK6gF,KAAKrnE,UAAYxZ,KAAK8uL,qBAC9B9uL,KAAK4uL,4BAA2B,GAElC5uL,KAAKgyL,0BANHhyL,KAAK4uL,4BAA2B,IAQpC5uL,KAAKinL,aAAe,CAACrrJ,EAAMsnH,KACzBljJ,KAAKivJ,KAAK3K,YAAYpB,EAAQtnH,GAC9B57B,KAAKq+K,gBAAe,EAAOn7B,IAE7Bj4I,OAAOoK,eAAerV,KAAM0rL,GAA+B,CACzD1xG,UAAU,EACV96E,MAAOgT,IACL,MAAMmvG,EAASrhH,KAAKivJ,KAAK7uC,UAAUluG,EAAOoW,IAC1C,MAAO,IACFpW,EACHskK,KAAMn1D,EAAOm1D,MAAQx2K,KAAK6gF,KAAKs4F,kBAC/B3uJ,OAAQ62F,EAAO72F,WAIrBvf,OAAOoK,eAAerV,KAAM2rL,GAAoB,CAC9C3xG,UAAU,EACV96E,MAAOgT,IACL,MAAMmvG,EAASrhH,KAAKivJ,KAAK7uC,UAAUluG,EAAOoW,IAE1C,MAAkC,mBAAvB+4F,EAAOgxE,aAGXhxE,EAAOgxE,iBAGlBpnL,OAAOoK,eAAerV,KAAM4rL,GAAe,CACzC5xG,UAAU,EACV96E,MAAOmrL,GAAQtiJ,GACNA,EAAQlgC,OAAOqK,GAA0B,aAAhBA,EAAOrM,MAAuB,GAA4B7F,KAAM2rL,IAAoBA,IAAoBz5K,IAAShK,IAAI,GAA4BlI,KAAM0rL,IAA+BA,QAG1NzgL,OAAOoK,eAAerV,KAAM6rL,GAAwB,CAClD7xG,UAAU,EACV96E,MAAOmrL,GAAQtiJ,GACNA,EAAQlgC,OAAOqK,GAA0B,sBAAhBA,EAAOrM,MAA8BqC,IAAI,GAA4BlI,KAAM0rL,IAA+BA,QAG9IzgL,OAAOoK,eAAerV,KAAM8rL,GAAa,CACvC9xG,UAAU,EACV96E,MAAOmrL,GAAQtiJ,GACNA,EAAQlgC,OAAOqK,GAA0B,WAAhBA,EAAOrM,MAAmBqC,IAAI,GAA4BlI,KAAM0rL,IAA+BA,QAGnI1rL,KAAKwqB,OAASvlB,IACZ,MAAMupL,EAAcxuL,KAAKkvJ,kBACnB,MACJpwJ,EAAK,aACLwjJ,EAAY,eACZ3D,GACE15I,GACE,SACJ6/I,EAAQ,mBACRE,EAAkB,cAClBE,EAAa,aACbC,EAAY,gBACZN,EAAe,yBACfO,EAAwB,gBACxBC,EAAe,gBACfI,EAAe,cACfC,EAAa,aACbC,EAAY,YACZC,GACE5lJ,KAAKivJ,KAAKtK,2BACRm9B,EAAY,GAA4B9hL,KAAM4rL,IAAeA,IAAe4C,EAAYzmJ,SACxFuqJ,EAAqB,GAA4BtyL,KAAM6rL,IAAwBA,IAAwB2C,EAAYzmJ,SACnHo+I,EAAU,GAA4BnmL,KAAM8rL,IAAaA,IAAa0C,EAAYzmJ,SACxF,IAAIojJ,EAWJ,OATEA,EADsB,SAApBnrL,KAAK6gF,KAAKsqG,MACJ7oC,EAAayrC,SAAW,OAAS,QAEjC/tL,KAAK6gF,KAAKsqG,MAEhB,CAAC,QAAS,UAAW,QAAQhoL,QAAQnD,KAAK6gF,KAAKujG,0BAA4B,IAC7EpkL,KAAK6gF,KAAKujG,yBAA2B,QAErCzkL,QAAQ07B,KAAK,wEAAwEr7B,KAAK6gF,KAAKujG,+BF12BxF,SAAmBnhG,GAChC,MAAMsvG,EAAqC,IAAzBtvG,EAAMsjG,eAClB1G,EAAwC,IAAzB58F,EAAMsjG,eACrBiM,EAAWvvG,EAAM88F,eATR,IAUT0S,EAAiBxvG,EAAM68F,gBATb,IAUV4S,EAAqB,GAAW,CACpC,kBAAkB,EAClB,6BAA8BzvG,EAAMzpE,SACpC,mCAAoCypE,EAAM+nG,iBAC1C,4BAA6B/nG,EAAMoqG,UACnC,iCAAkCpqG,EAAMitG,eACxC,yBAA0BjtG,EAAMsnG,OAChC,gBAAiBtnG,EAAM88F,eAlBV,IAmBb,gBAAiB98F,EAAM88F,eApBV,IAqBb,gBAAiB98F,EAAM88F,eAtBV,IAuBb,uBAAwB98F,EAAM68F,gBApBhB,IAwBd,yCAA0C78F,EAAM0iG,kBAChD,qCAAsC1iG,EAAMqrG,2BAE5C,6BAA8BrrG,EAAM0nG,sBAAwB9K,GAAgB4S,IAI9E,IAAIxQ,EAAc,EACdh/F,EAAM88F,eAnCK,IAoCbkC,EAAc,EACLh/F,EAAM88F,eApCF,IAqCbkC,EAAc,EACLh/F,EAAM88F,eArCF,MAsCbkC,EAAc,GAEhB,MAAM0Q,EAAe1vG,EAAMgoG,oBAAsBsH,EAC3CK,EAA2B3vG,EAAM27D,eAAiB3zI,OAAO+H,KAAKiwE,EAAM27D,eAAe9/I,OAAOW,OAAS,KACnGozL,EAAiB5vG,EAAMnkF,MAAQmM,OAAO+H,KAAKiwE,EAAMnkF,OAAO+I,OAAOq7I,GAAUjgE,EAAMnkF,MAAMokJ,GAAQ9H,SAAS37I,OAAS,KAsHrH,OA7GkB,GAAE,MAAO,CACzBgzB,UAAWigK,EACX,kBAAmBzvG,EAAMkoG,MACzB,0BAA2BloG,EAAM6+F,UAAUriL,OAC3C,iCAAkCwjF,EAAMqhG,mBAAqBzG,KAC7D,cAAe56F,EAAMsnG,OAAS,QAAUtnG,EAAM6wE,SAC9C,gBAAiB7wE,EAAMzpE,SACvB,aAAeypE,EAAMsnG,OAA8CtnG,EAAMy/D,KAAK,kBAAhDz/D,EAAMy/D,KAAK,wBACzCqjC,QAAS9iG,EAAMmsG,YACfxJ,WAAY3iG,EAAMssG,eAClB1J,YAAa5iG,EAAMktG,gBACnBrK,OAAQ7iG,EAAMqtG,YACb,GAAE,MAAO,CACV,cAAe,OACf79J,UAAW,yBACX07B,UAAW,EACX8qB,QAASgK,EAAMksG,qBACb,GAAE,MAAO,CACX18J,UAAW,uBACX,cAAewwD,EAAMsnG,QAAU,OAC/Br8H,KAAM+0B,EAAMsnG,YAAS3qL,EAAY,SACjCsyB,MAAO,CACLC,MAAO8wD,EAAMsnG,QAAUtnG,EAAM9wD,MAAQ8wD,EAAM9wD,MAAQ,GACnD4hC,OAAQkvB,EAAMsnG,QAAUtnG,EAAMlvB,OAASkvB,EAAMlvB,OAAS,KAEtDkvB,EAAMsnG,OAQI,KARK,GAAE,SAAU,CAC7B93J,UAAW,oCACX5sB,KAAM,SACN,aAAco9E,EAAMy/D,KAAK,cACzB1mE,MAAOiH,EAAMy/D,KAAK,cAClBzpE,QAASgK,EAAMjpB,YACd,GAAE,OAAQ,CACX,cAAe,QACd,MAAiB,GAAE,MAAO,CAC3BvnC,UAAW,4BACV,GAAE,MAAO,CACVA,UAAW,oCACVwwD,EAAMy/D,KAAK,aAAciwC,GAAgB,GAAE,GAAa1vG,GAAQ2vG,GAA4B,GAAE,MAAO,CACtGngK,UAAW,6BACV,GAAE,MAAO,CACVA,UAAW,iCACX,cAAe,OACfs/H,UAAW,QACX5/H,MAAO,KACP4hC,OAAQ,KACRi+F,QAAS,aACR,GAAE,IAAK,CACR2E,UAAW,kBACXh3E,KAAM,OACNuyE,SAAU,WACT,GAAE,OAAQ,CACXh9I,EAAG,uGACHyqE,KAAM,YACJ,GAAE,OAAQ,CACZA,KAAM,OACNzqE,EAAG,wBACD,GAAE,SAAU,CACdyqE,KAAM,OACNwyE,GAAI,KACJC,GAAI,KACJ71F,EAAG,QACC,GAAE,SAAU,CAChB9pC,UAAW,mCACVwwD,EAAMy/D,KAAK,oBAAqB,GAAE,MAAO,CAC1CjwH,UAAW,kCAvEPogK,EAAiB,EACZ5vG,EAAMy/D,KAAK,kBAAmB,CACnCvO,YAAa0+C,IAGV5vG,EAAMy/D,KAAK,uBAmEOiwC,EAAe,GAAE5Q,GAAU,CACpDz5J,GAAI26D,EAAM36D,GACV9jB,MAAOy+E,EAAMz+E,MACbk+I,KAAMz/D,EAAMy/D,KACZuM,KAAMhsE,EAAMgsE,KACZnwJ,MAAOmkF,EAAMnkF,MACbgjL,UAAW7+F,EAAM6+F,UACjBr/B,iBAAkBx/D,EAAMw/D,iBACxBkR,gBAAiB1wE,EAAM0wE,gBACvBF,sBAAuBxwE,EAAMwwE,sBAC7BC,iBAAkBzwE,EAAMywE,iBACxBmrB,2BAA4B57F,EAAM47F,2BAClCgD,8BAA+B5+F,EAAM4+F,8BACrCG,OAAQ/+F,EAAM++F,OACd1D,WAAYr7F,EAAMq7F,WAClBD,eAAgBp7F,EAAMo7F,eACtBoD,uBAAwBx+F,EAAMw+F,uBAC9BC,sBAAuBz+F,EAAMy+F,sBAC7B9iC,eAAgB37D,EAAM27D,eACtB4D,uBAAwBv/D,EAAMu/D,uBAC9B++B,eAAgBt+F,EAAMs+F,eACtBf,YAAav9F,EAAMu9F,YACnBJ,oBAAqBn9F,EAAMm9F,oBAC3BP,aAAcA,EACdoC,YAAaA,IAGb,GAAE,GAAU,GAAS,CAAC,EAAGh/F,EAAO,CAChCuvG,SAAUA,KACP,GAAE,GAAO,KAAMvvG,EAAM0iG,kBAAoB,GAAE,GAAe,GAAS,CACtE1+K,IAAK,YACJg8E,EAAO,CACRuvG,SAAUA,KACN,MAAO,GAAE,GAAO,KAAMvvG,EAAM+iG,YAAc,GAAEe,GAAU,GAAS,CACnE9/K,IAAK,YACJg8E,IAAU,MAAO,GAAE,GAAO,KAAMA,EAAM0hG,kBAAoB,GAAE,GAAoB,GAAS,CAC1F19K,IAAK,UACJg8E,IAAU,MAAO,GAAE,GAAO,KAAMA,EAAM+pG,eAAiB,GAAE,GAAa,GAAS,CAChF/lL,IAAK,UACJg8E,IAAU,MAAO,GAAE,MAAO,CAC3BxwD,UAAW,qCACVwwD,EAAMqvG,mBAAmBpqL,IAAIgK,GACvB+wE,EAAMgsE,KAAK7uC,UAAUluG,EAAOoW,IAAIkC,OAAOy4D,EAAMh+E,WAGxD,CEitBa,CAAY,CACjBA,QACA6uJ,SAAU06B,EAAY16B,SACtBh1J,QACAgmJ,WACAE,qBACAE,gBACAC,eACAN,kBACAO,2BACAC,kBACAI,kBACAC,gBACAC,eACAC,cACA2gC,eAAgBt7K,OAAO+H,KAAKlU,GAAOW,OACnCi/I,cAAez5I,EAAMy5I,cACrBC,iBACAmjC,YACAqJ,QACA3xK,SAAUxZ,KAAK6gF,KAAKrnE,SACpB8qK,kBAAmBtkL,KAAK6gF,KAAKyjG,kBAC7B72F,UAAWztF,KAAK6gF,KAAK4M,UACrBk3F,kBAAmB6J,EAAY7J,kBAC/BqI,eAAgBwB,EAAYxB,eAC5B9G,eAAgBlmL,KAAKkmL,eACrBD,gBAAiBjmL,KAAKimL,gBACtB2I,2BAA4B5uL,KAAK4uL,2BACjC5D,iBAAkBhrL,KAAK6gF,KAAKmqG,iBAC5BqC,UAAWmB,EAAYnB,UACvBiF,qBACAnM,UACArkC,YAAa9hJ,KAAKivJ,KAAKpuE,KAAKihE,YAC5Bx5H,GAAItoB,KAAKsoB,GACT0xC,WAAYh6D,KAAK4tL,kBACjBuB,mBAAoBnvL,KAAKmvL,mBACzBnM,kBAAmBhjL,KAAKgjL,kBACxBoM,YAAapvL,KAAKovL,YAClB7E,OAAQvqL,KAAK6gF,KAAK0pG,OAClB3F,UAAW5kL,KAAK4kL,UAChB9M,cAAe93K,KAAK83K,cACpBp1B,KAAM1iJ,KAAK0iJ,KACXW,UAAWrjJ,KAAKqjJ,UAChB4L,KAAMjvJ,KAAKivJ,KACXw2B,KAAMzlL,KAAK6gF,KAAK4kG,KAChB7mC,eAAgB35I,EAAM25I,eACtB0/B,WAAYkQ,EAAYlQ,WACxB77B,iBAAkBH,EAAaG,mBAAoB,EACnDD,uBAAwBF,EAAaE,uBACrCswC,eAAgBxwC,EAAawwC,eAC7B9M,YAAawI,EAAYxI,YACzB3H,eAAgBr+K,KAAKq+K,eACrB+B,oBAAqBpgL,KAAKogL,oBAC1BuF,kBAAmB6I,EAAY7I,kBAC/BsB,aAAcjnL,KAAKinL,aACnB1F,eAAgBvhL,KAAKuhL,eACrBf,YAAaxgL,KAAKwgL,YAClBruJ,MAAOnyB,KAAK6gF,KAAK1uD,MACjB4hC,OAAQ/zD,KAAK6gF,KAAK9sB,OAClB8qH,2BAA4B7+K,KAAK6gF,KAAKg+F,2BACtCuF,yBAA0BpkL,KAAK6gF,KAAKujG,yBACpCsB,4BAA6B1lL,KAAK6gF,KAAK6kG,4BACvChyB,iBAAkB1zJ,KAAK6gF,KAAK6yE,iBAC5BC,gBAAiB3zJ,KAAK6gF,KAAK8yE,gBAC3BF,sBAAuBzzJ,KAAK6gF,KAAK4yE,sBACjCouB,8BAA+B7hL,KAAK6gF,KAAKghG,8BACzC9B,eAAgByO,EAAYzO,eAC5BD,gBAAiB0O,EAAY1O,gBAC7BwO,2BAA4BE,EAAYF,2BACxCz+B,cAAe7vJ,KAAK6vJ,cACpB14I,cAAenX,KAAKusF,GACpB+tD,iBAAkBt6I,KAAKivJ,KAAKpuE,KAAKk6D,aAAaT,iBAC9CF,iBAAkBp6I,KAAKivJ,KAAKpuE,KAAKk6D,aAAaX,iBAC9CG,mBAAoBv6I,KAAKivJ,KAAKpuE,KAAKk6D,aAAaR,mBAChD0wC,kBAAmBjrL,KAAK6gF,KAAKoqG,kBAC7BhG,4BAA6BjlL,KAAK6gF,KAAKokG,4BACvCC,4BAA6BllL,KAAK6gF,KAAKqkG,4BACvC5B,uBAAwBtjL,KAAK6gF,KAAKyiG,uBAClCqH,qBAAsB3qL,KAAK6gF,KAAK8pG,qBAChC4G,oBAAqBvxL,KAAKuxL,oBAC1B9P,uBAAwBzhL,KAAKyhL,uBAC7BC,sBAAuB1hL,KAAK0hL,sBAE5BwO,eAAgB1B,EAAY0B,eAC5BX,eAAgBvvL,KAAKuvL,eACrBY,gBAAiBnwL,KAAKmwL,gBACtBG,WAAYtwL,KAAKswL,cAGrBrlL,OAAOoK,eAAerV,KAAM+rL,GAAiC,CAC3D/xG,UAAU,EACV96E,MAAO,MACWc,KAAK6gF,KAAK1H,SAAW,IAC7B/1C,QAAQ2vJ,IACd,MAAM1xE,EAASrhH,KAAKivJ,KAAK7uC,UAAU2yE,GAC/B1xE,EAEFA,EAAOsuC,MAAM3vJ,KAAMqhH,GAEnBrhH,KAAKivJ,KAAKnvJ,IAAI,2CAA2CizL,6DAAqE,gBAKtI9nL,OAAOoK,eAAerV,KAAMgsL,GAAsB,CAChDhyG,UAAU,EACV96E,MAAO,KACLc,KAAKivJ,KAAKrM,eAAe,GAA4B5iJ,KAAMisL,IAA+BA,QAG9FhhL,OAAOoK,eAAerV,KAAMisL,GAA+B,CACzDjyG,UAAU,EACV96E,MAAOmiH,IACL,IAAI2xE,GAIA3xE,GAA4C,OAA/B2xE,EAAe3xE,EAAOxgC,OAAiBmyG,EAAa9gL,SADhD,CAAC,WAAY,UAC2DwC,SAAS2sG,EAAOx7G,OAChF7F,KAAKkvJ,iBAAiBnnH,QAAQngB,KAAKqrK,GAAmB5xE,EAAO/4F,KAAO2qK,EAAgB3qK,KAG7G+4F,EAAOsuC,MAAM3vJ,KAAMqhH,MAK3BrhH,KAAKmpJ,QAAU,KAEbnpJ,KAAKmvJ,eAAe,CAClB2E,UAAU,EACVkyB,YAAa,KACb9I,kBAAmB,KACnByI,mBAAmB,EACnBhB,uBAAmB/kL,EACnBotL,gBAAgB,EAChB1O,WAAYt+K,KAAK6gF,KAAKy9F,WACtBv2I,QAAS,GAETumJ,4BAA4B,EAC5B4B,gBAAgB,IAElB,MAAM,OACJ3F,EAAM,iBACNG,GACE1qL,KAAK6gF,KACT,GAAI0pG,GAAUG,EACZ,MAAM,IAAIvjK,MAAM,0MAElB,MAAM,qBACJ8kI,EAAoB,2BACpBlK,GACE/hJ,KAAKivJ,KAAKpuE,MACTorE,GAAwBlK,IAA+B2oC,GAC1D1qL,KAAKivJ,KAAKnvJ,IAAI,yMAA0M,WAE1N,MAAM,OACJoS,GACElS,KAAK6gF,KACL3uE,GACFlS,KAAK2vJ,MAAMz9I,EAAQlS,MAEhBA,KAAK6gF,KAAK+pG,kBACb5qL,KAAKivJ,KAAKlG,IAAI2M,GAAW,CACvBptI,GAAI,GAAGtoB,KAAKsoB,eACZpW,OAAQlS,KACRwzJ,iBAAkBxzJ,KAAK6gF,KAAK2yE,iBAC5BG,gBAAiB3zJ,KAAK6gF,KAAK8yE,gBAC3BF,sBAAuBzzJ,KAAK6gF,KAAK4yE,sBACjCC,iBAAkB1zJ,KAAK6gF,KAAK6yE,iBAC5BR,oBAAqBlzJ,KAAK6gF,KAAKqyE,oBAC/BU,gBAAiB5zJ,KAAK6gF,KAAK2pG,wBAC3Bv0G,OAAQj2E,KAAK6gF,KAAK5K,OAClBs8E,kBAAmBvyJ,KAAK6gF,KAAK0xE,oBAG5BvyJ,KAAK6gF,KAAKgqG,iBACb7qL,KAAKivJ,KAAKlG,IAAI8Q,GAAU,CACtBvxI,GAAI,GAAGtoB,KAAKsoB,cACZpW,OAAQlS,OAGPA,KAAK6gF,KAAKiqG,2BACb9qL,KAAKivJ,KAAKlG,IAAIkf,GAAoB,CAChC3/I,GAAI,GAAGtoB,KAAKsoB,wBACZu/I,eAAgB7nK,KAAK6gF,KAAKgnF,eAC1BC,gBAAiB9nK,KAAK6gF,KAAKinF,gBAC3BC,cAAe/nK,KAAK6gF,KAAKknF,cACzBC,8BAA+BhoK,KAAK6gF,KAAKmnF,8BAEzC1uJ,MAAOtZ,KAAK6gF,KAAKmnF,gCAKrBhoK,KAAKkzL,mBAAuC,oBAAXx0L,QAA0BA,OAAOy0L,WAAaz0L,OAAOy0L,WAAW,gCAAkC,KACnI,MAAMC,IAA2BpzL,KAAKkzL,oBAAqBlzL,KAAKkzL,mBAAmBp/K,QAIjF,IAAIu/K,EAHNrzL,KAAKivJ,KAAKnvJ,IAAI,6BAA4BszL,EAA2B,KAAO,QAC5EpzL,KAAK6tL,sBAAsBuF,GACH,SAApBpzL,KAAK6gF,KAAKsqG,QAEyC,OAApDkI,EAAwBrzL,KAAKkzL,qBAA+BG,EAAsB5nL,YAAYzL,KAAKguL,6BAEtG,GAA4BhuL,KAAM+rL,IAAiCA,MACnE,GAA4B/rL,KAAMgsL,IAAsBA,MACxDhsL,KAAK6xL,cAEP7xL,KAAKupJ,UAAY,KACf,IAAKvpJ,KAAK6gF,KAAKgqG,gBAAiB,CAC9B,MAAMyI,EAAWtzL,KAAKivJ,KAAK7uC,UAAU,GAAGpgH,KAAKsoB,eAGzCgrK,GAAUtzL,KAAKivJ,KAAK5F,aAAaiqC,EACvC,CACA,IAAKtzL,KAAK6gF,KAAK+pG,iBAAkB,CAC/B,MAAM2I,EAAYvzL,KAAKivJ,KAAK7uC,UAAU,GAAGpgH,KAAKsoB,gBAC1CirK,GAAWvzL,KAAKivJ,KAAK5F,aAAakqC,EACxC,CACA,IAAKvzL,KAAK6gF,KAAKiqG,0BAA2B,CACxC,MAAMjrB,EAAY7/J,KAAKivJ,KAAK7uC,UAAU,GAAGpgH,KAAKsoB,yBAC1Cu3I,GAAW7/J,KAAKivJ,KAAK5F,aAAawW,EACxC,CAOE,IAAI2zB,GANUxzL,KAAK6gF,KAAK1H,SAAW,IAC7B/1C,QAAQ2vJ,IACd,MAAM1xE,EAASrhH,KAAKivJ,KAAK7uC,UAAU2yE,GAC/B1xE,GAAQA,EAAOqtC,YAEG,SAApB1uJ,KAAK6gF,KAAKsqG,QAE0C,OAArDqI,EAAyBxzL,KAAKkzL,qBAA+BM,EAAuBpmL,eAAepN,KAAKguL,6BAEvGhuL,KAAK6gF,KAAKkqG,gCACZ/rL,SAASshB,KAAKlhB,UAAUmI,OAAO,0BAEjCvH,KAAK0uJ,UACL1uJ,KAAK+xL,gBAEP/xL,KAAKsoB,GAAKtoB,KAAK6gF,KAAKv4D,IAAM,YAC1BtoB,KAAKg8E,MAAQ,YACbh8E,KAAK6F,KAAO,eACZ7F,KAAK6hJ,cAAgB,QAGejiJ,IAAhCI,KAAK6gF,KAAK0xE,oBAGZvyJ,KAAK6gF,KAAK0xE,kBAAoB,KAC5BvyJ,KAAKivJ,KAAKnL,qBACV9jJ,KAAK4tL,sBAGkE,OAAjDzB,EAAcnsL,KAAK6gF,MAAMyqG,sBAAuDa,EAAYb,oBAAsB,IAAMtrL,KAAKg6D,cACvJh6D,KAAKoiJ,UACP,EIjoCF,SAAS,GAA4B3pG,EAAUm6F,GAAc,IAAK3nI,OAAO1F,UAAU2F,eAAenG,KAAK0zC,EAAUm6F,GAAe,MAAM,IAAItoI,UAAU,kDAAqD,OAAOmuC,CAAU,CJmoC1NyzI,GAAUp3C,QA/mCG,QInBb,IAAI,GAAK,EACT,SAAS,GAA2B/1I,GAAQ,MAAO,aAAe,KAAO,IAAMA,CAAM,CACrF,IAAI00L,GAAqB,GAA2B,QAChD5nL,GAAuB,GAA2B,UAKvC,MAAM6nL,GACnB,WAAAhzL,CAAYuuJ,GACVhkJ,OAAOoK,eAAerV,KAAMyzL,GAAO,CACjCz5G,UAAU,EACV96E,WAAY,IAEd+L,OAAOoK,eAAerV,KAAM6L,GAAS,CACnCmuE,UAAU,EACV96E,MAAO,KAET,GAA4Bc,KAAMyzL,IAAOA,IAASxkC,CACpD,CAIA,EAAA1hJ,CAAG9H,EAAO6F,GAER,OADA,GAA4BtL,KAAM6L,IAASA,IAAS3L,KAAK,CAACuF,EAAO6F,IAC1D,GAA4BtL,KAAMyzL,IAAOA,IAAOlmL,GAAG9H,EAAO6F,EACnE,CACA,MAAA/D,GACE,IAAK,MAAO9B,EAAO6F,KAAO,GAA4BtL,KAAM6L,IAASA,IAASoI,OAAO,GACnF,GAA4BjU,KAAMyzL,IAAOA,IAAOhmL,IAAIhI,EAAO6F,EAE/D,CACA,WAAAqoL,CAAYzwC,EAAQ9xD,GAClBpxF,KAAKuN,GAAG,eAAgB,CAACqmL,EAActuC,KACjCpC,IAAW0wC,GACbxiG,EAAGk0D,IAGT,CACA,YAAAuuC,CAAa3wC,EAAQ9xD,GACnBpxF,KAAKuN,GAAG,eAAgByqI,IAClBkL,IAAWlL,EAAK1vH,IAAI8oE,EAAG4mD,EAAK1vH,KAEpC,CACA,OAAAwrK,CAAQ5wC,EAAQ9xD,GACdpxF,KAAKuN,GAAG,eAAgB,CAACqmL,EAActuC,KACjCpC,IAAW0wC,GAEbxiG,EAAGk0D,IAGT,CACA,OAAAyuC,CAAQ7wC,EAAQ9xD,GACdpxF,KAAKuN,GAAG,eAAgBqmL,IAClB1wC,IAAW0wC,GACbxiG,KAGN,CACA,UAAA4iG,CAAW9wC,EAAQ9xD,GACjBpxF,KAAKuN,GAAG,YAAa,KACd,GAA4BvN,KAAMyzL,IAAOA,IAAOpyC,QAAQ6B,IAC7D9xD,KAEJ,CACA,UAAA6iG,CAAW/wC,EAAQ9xD,GACjBpxF,KAAKuN,GAAG,YAAa,KACd,GAA4BvN,KAAMyzL,IAAOA,IAAOpyC,QAAQ6B,IAC7D9xD,KAEJ,CACA,WAAA8iG,CAAYhxC,EAAQixC,GAClB,IAAI1Y,EAAQz7K,KACZA,KAAKuN,GAAG,aAAc,WACf,GAA4BkuK,EAAOgY,IAAOA,IAAOpyC,QAAQ6B,IAC9DixC,KAAgBhnL,UAClB,EACF,CACA,WAAAinL,CAAYlxC,EAAQ9xD,GAClBpxF,KAAKuN,GAAG,aAAc,KACf,GAA4BvN,KAAMyzL,IAAOA,IAAOpyC,QAAQ6B,IAC7D9xD,KAEJ,ECpFF,SAAS,GAA4B34C,EAAUm6F,GAAc,IAAK3nI,OAAO1F,UAAU2F,eAAenG,KAAK0zC,EAAUm6F,GAAe,MAAM,IAAItoI,UAAU,kDAAqD,OAAOmuC,CAAU,CAC1N,IAAI,GAAK,EACT,SAAS,GAA2B15C,GAAQ,MAAO,aAAe,KAAO,IAAMA,CAAM,CAMrF,SAASs1L,GAAQnyK,GACf,GAAc,MAAVA,EAAgB,CAClB,IAAIoyK,EACJ,MAAMC,EAAe,IAAMv0L,KAAK+gB,MAAMmB,EAAOvc,QAC7Cuc,EAAO9gB,iBAAiB,QAASmzL,EAAc,CAC7C/oL,MAAM,IAER,MAAMgpL,EAAsB,KAC1BtyK,EAAO1gB,oBAAoB,QAAS+yL,IAEV,OAA3BD,EAAat0L,KAAK45B,OAAiB06J,EAAWvvL,KAAK/E,KAAMw0L,EAAqBA,EACjF,CACA,OAAOx0L,IACT,CACA,IAAIy0L,GAA+B,GAA2B,kBAC1DC,GAA+B,GAA2B,kBAC1DC,GAAuB,GAA2B,UAClDC,GAA2B,GAA2B,cACtDC,GAA0B,GAA2B,aACrDC,GAA2B,GAA2B,cACtDC,GAAkC,GAA2B,qBAC7DC,GAAqB,GAA2B,QAChDC,GAA0B,GAA2B,aACrDC,GAAqB,GAA2B,QAChDC,GAAsB,GAA2B,SACjDC,GAAwB,GAA2B,WACnDC,GAAuB,GAA2B,UAClDC,GAA8B,GAA2B,iBACtD,MAAMC,GACX,WAAA70L,CAAYk8G,GACV3xG,OAAOoK,eAAerV,KAAMo1L,GAAU,CACpCl2L,MAAOs2L,KAETvqL,OAAOoK,eAAerV,KAAMm1L,GAAQ,CAClCj2L,MAAOu2L,KAETxqL,OAAOoK,eAAerV,KAAMk1L,GAAO,CACjCh2L,MAAOw2L,KAETzqL,OAAOoK,eAAerV,KAAMi1L,GAAY,CACtC/1L,MAAOy2L,KAET1qL,OAAOoK,eAAerV,KAAMg1L,GAAO,CACjC91L,MAAO02L,KAET3qL,OAAOoK,eAAerV,KAAMy0L,GAAiB,CAC3Cz6G,UAAU,EACV96E,MAAO,IAET+L,OAAOoK,eAAerV,KAAM00L,GAAiB,CAC3C16G,UAAU,EACV96E,MAAO,KAET+L,OAAOoK,eAAerV,KAAM20L,GAAS,CACnC36G,UAAU,EACV96E,OAAO,IAET+L,OAAOoK,eAAerV,KAAM40L,GAAa,CACvC56G,UAAU,EACV96E,WAAY,IAEd+L,OAAOoK,eAAerV,KAAM60L,GAAY,CACtC76G,UAAU,EACV96E,MAAO,IAET+L,OAAOoK,eAAerV,KAAM80L,GAAa,CACvC96G,UAAU,EACV96E,WAAY,IAEd+L,OAAOoK,eAAerV,KAAM+0L,GAAoB,CAC9C/6G,UAAU,EACV96E,WAAY,IAEd+L,OAAOoK,eAAerV,KAAMq1L,GAAS,CACnCr7G,UAAU,EACV96E,MAAO,IAAMc,KAAKyiB,WAEpBxX,OAAOoK,eAAerV,KAAMs1L,GAAgB,CAC1Ct7G,UAAU,EACV96E,MAAO,KACL,GAAI,GAA4Bc,KAAM20L,IAASA,IAC7C,GAA4B30L,KAAM+0L,IAAoBA,IAAsB9yL,WAAW,GAA4BjC,KAAMs1L,IAAgBA,IAAiB,OAD5J,CAIA,GAA4Bt1L,KAAM60L,IAAYA,IAAc70L,KAAK48G,MACjE58G,KAAK48G,MAAQv6G,KAAK+wG,MAAM,GAA4BpzG,KAAM80L,IAAaA,IAAe,GAA4B90L,KAAM60L,IAAYA,KAAe,GACnJ,IAAK,IAAIr1L,EAAI,GAA4BQ,KAAM60L,IAAYA,IAAar1L,GAAKQ,KAAK48G,MAAOp9G,IACvF,GAA4BQ,KAAMi1L,IAAYA,MAE5C,GAA4Bj1L,KAAM80L,IAAaA,IAAe,GAA4B90L,KAAM60L,IAAYA,IAAc,EAC5H,GAA4B70L,KAAM+0L,IAAoBA,IAAsB9yL,WAAW,GAA4BjC,KAAMs1L,IAAgBA,IAAiB,KAE1J,GAA4Bt1L,KAAM60L,IAAYA,IAAcxyL,KAAKuI,MAAM,GAA4B5K,KAAM60L,IAAYA,IAAc,EATrI,KAcF70L,KAAK48G,MADc,iBAAVA,GAAgC,IAAVA,EAClBnV,IAEAmV,CAEjB,CACA,GAAA2xD,CAAIjjK,EAAIuqL,GACN,OAAK,GAA4B71L,KAAM20L,IAASA,KAAY,GAA4B30L,KAAMy0L,IAAiBA,IAAmBz0L,KAAK48G,MAC9H,GAA4B58G,KAAMg1L,IAAOA,IAAO1pL,GAElD,GAA4BtL,KAAMm1L,IAAQA,IAAQ7pL,EAAIuqL,EAC/D,CACA,gBAAAC,CAAiBxqL,EAAIuqL,GACnB,IAAIpa,EAAQz7K,KACZ,OAAO,WACL,IAAK,IAAI60I,EAAO1nI,UAAU1N,OAAQqJ,EAAO,IAAI4D,MAAMmoI,GAAOrgG,EAAO,EAAGA,EAAOqgG,EAAMrgG,IAC/E1rC,EAAK0rC,GAAQrnC,UAAUqnC,GAEzB,MAAMuhJ,EAAgBta,EAAMlN,IAAI,KAC9BjjK,KAAMxC,GACN6iK,eAAe,IAAMoqB,EAAcphC,QAC5B,QACNkhC,GACH,MAAO,CACLxB,WACA,KAAAtzK,GACEg1K,EAAch1K,OAChB,EAEJ,CACF,CACA,mBAAAi1K,CAAoB1qL,EAAIuqL,GACtB,IAAII,EAASj2L,KACb,OAAO,WACL,IAAK,IAAI25I,EAAQxsI,UAAU1N,OAAQqJ,EAAO,IAAI4D,MAAMitI,GAAQC,EAAQ,EAAGA,EAAQD,EAAOC,IACpF9wI,EAAK8wI,GAASzsI,UAAUysI,GAE1B,IAAIm8C,EACJ,MAAMG,EAAe,IAAI59K,QAAQ,CAACC,EAAS9R,KACzCsvL,EAAgBE,EAAO1nB,IAAI,KACzB,IAAI4nB,EACAC,EACJ,IACEA,EAAe99K,QAAQC,QAAQjN,KAAMxC,GACvC,CAAE,MAAOgvD,GACPs+H,EAAe99K,QAAQ7R,OAAOqxD,EAChC,CAgBA,OAfAs+H,EAAax8J,KAAK/qB,IACZsnL,EACF1vL,EAAO0vL,IAEPJ,EAAcphC,OACdp8I,EAAQ1J,KAETipD,IACGq+H,EACF1vL,EAAO0vL,IAEPJ,EAAcphC,OACdluJ,EAAOqxD,MAGJ23F,IACL0mC,EApKZ,SAA2B1mC,GACzB,OAAO,IAAItoI,MAAM,YAAa,CAC5BsoI,SAEJ,CAgK0B4mC,CAAkB5mC,KAEjComC,KAML,OAJAK,EAAan1K,MAAQ0uI,IACnBsmC,EAAch1K,MAAM0uI,IAEtBymC,EAAa7B,QAAUA,GAChB6B,CACT,CACF,CACA,MAAAzzK,GACE,GAA4BziB,KAAM20L,IAASA,KAAW,EACtD5yL,aAAa,GAA4B/B,KAAM40L,IAAaA,KAC5D,IAAK,IAAIp1L,EAAI,EAAGA,EAAIQ,KAAK48G,MAAOp9G,IAC9B,GAA4BQ,KAAMi1L,IAAYA,KAElD,CAOA,KAAA9iJ,CAAMooC,QACkB,IAAlBA,IACFA,EAAW,MAEb,GAA4Bv6E,KAAM20L,IAASA,KAAW,EACtD5yL,aAAa,GAA4B/B,KAAM40L,IAAaA,KAC5C,MAAZr6G,IACF,GAA4Bv6E,KAAM40L,IAAaA,IAAe3yL,WAAW,GAA4BjC,KAAMq1L,IAASA,IAAU96G,GAElI,CAYA,SAAA+7G,CAAU/7G,GACRx4E,aAAa,GAA4B/B,KAAM+0L,IAAoBA,KACnE/0L,KAAKmyC,MAAMooC,GACPv6E,KAAK48G,MAAQ,GAAKxyG,OAAO0gE,SAAS9qE,KAAK48G,SACzC,GAA4B58G,KAAM80L,IAAaA,IAAe90L,KAAK48G,MAAQ,EAC3E58G,KAAK48G,MAAQ,GAA4B58G,KAAM60L,IAAYA,IAC3D,GAA4B70L,KAAM+0L,IAAoBA,IAAsB9yL,WAAW,GAA4BjC,KAAMs1L,IAAgBA,IAAiB/6G,GAE9J,CACA,YAAI+qE,GACF,OAAO,GAA4BtlJ,KAAM20L,IAASA,GACpD,EAEF,SAASiB,GAAOtqL,GACd,GAA4BtL,KAAMy0L,IAAiBA,KAAoB,EACvE,IACI8B,EADA5hC,GAAO,EAEX,IACE4hC,EAAejrL,GACjB,CAAE,MAAOwsD,GAEP,MADA,GAA4B93D,KAAMy0L,IAAiBA,KAAoB,EACjE38H,CACR,CACA,MAAO,CACL/2C,MAAO0uI,IACDkF,IACJA,GAAO,EACP,GAA4B30J,KAAMy0L,IAAiBA,KAAoB,EACvD,MAAhB8B,GAAwBA,EAAa9mC,GACrC,GAA4BzvJ,KAAMi1L,IAAYA,QAEhDtgC,KAAM,KACAA,IACJA,GAAO,EACP,GAA4B30J,KAAMy0L,IAAiBA,KAAoB,EACvE,GAA4Bz0L,KAAMi1L,IAAYA,QAGpD,CACA,SAASU,KAIPhqB,eAAe,IAAM,GAA4B3rK,KAAMk1L,IAAOA,MAChE,CACA,SAASQ,KACP,GAAI,GAA4B11L,KAAM20L,IAASA,KAAY,GAA4B30L,KAAMy0L,IAAiBA,KAAoBz0L,KAAK48G,MACrI,OAEF,GAAmF,IAA/E,GAA4B58G,KAAM00L,IAAiBA,IAAiBj1L,OACtE,OAMF,MAAMooF,EAAO,GAA4B7nF,KAAM00L,IAAiBA,IAAiBnkJ,QACjF,GAAY,MAARs3C,EACF,MAAM,IAAI1gE,MAAM,qCAElB,MAAM7hB,EAAU,GAA4BtF,KAAMg1L,IAAOA,IAAOntG,EAAKv8E,IACrEu8E,EAAK9mE,MAAQzb,EAAQyb,MACrB8mE,EAAK8sE,KAAOrvJ,EAAQqvJ,IACtB,CACA,SAAS8gC,GAAQnqL,EAAIsE,GACnB,MAAMtK,EAAU,CACdgG,KACAkjK,UAAsB,MAAX5+J,OAAuB,EAAIA,EAAQ4+J,WAAa,EAC3DztJ,MAAO,KACL,GAA4B/gB,KAAMo1L,IAAUA,IAAU9vL,IAExDqvJ,KAAM,KACJ,MAAM,IAAIxtI,MAAM,gEAGdhY,EAAQ,GAA4BnP,KAAM00L,IAAiBA,IAAiB19I,UAAUnlC,GACnFvM,EAAQkpK,SAAW38J,EAAM28J,UAOlC,OALe,IAAXr/J,EACF,GAA4BnP,KAAM00L,IAAiBA,IAAiBx0L,KAAKoF,GAEzE,GAA4BtF,KAAM00L,IAAiBA,IAAiBzgL,OAAO9E,EAAO,EAAG7J,GAEhFA,CACT,CACA,SAASkwL,GAAUlwL,GACjB,MAAM6J,EAAQ,GAA4BnP,KAAM00L,IAAiBA,IAAiBvxL,QAAQmC,IAC3E,IAAX6J,GACF,GAA4BnP,KAAM00L,IAAiBA,IAAiBzgL,OAAO9E,EAAO,EAEtF,CACO,MAAMqnL,GAA2B5oL,OAAO,WC/S/C,MAAM6oL,WAAqBtvK,MACzB,WAAAzmB,CAAY8D,EAAOkyL,QACA,IAAbA,IACFA,EAAM,MAERt+K,MAAM,yGACNpY,KAAKyvJ,MAAQjrJ,EACbxE,KAAK22L,gBAAiB,EACtB32L,KAAK0iB,QAAUg0K,CACjB,EAEF,UCLA,GANA,SAAwBA,GACtB,QAAKA,IAGqB,IAAnBA,EAAIxxL,YAAuC,IAAnBwxL,EAAIxxL,YAAmC,IAAfwxL,EAAIt6K,OAC7D,ECLA,SAAS,GAA4Bq8B,EAAUm6F,GAAc,IAAK3nI,OAAO1F,UAAU2F,eAAenG,KAAK0zC,EAAUm6F,GAAe,MAAM,IAAItoI,UAAU,kDAAqD,OAAOmuC,CAAU,CAC1N,IAAI,GAAK,EACT,SAAS,GAA2B15C,GAAQ,MAAO,aAAe,KAAO,IAAMA,CAAM,CACrF,IAAI63L,GAA2B,GAA2B,cACtDC,GAAuB,GAA2B,UAClDC,GAA2B,GAA2B,cACtDC,GAAwB,GAA2B,WAgDvD,GAzCA,MACE,WAAAr2L,CAAY6mD,EAEZyvI,GACE/rL,OAAOoK,eAAerV,KAAM42L,GAAa,CACvC58G,UAAU,EACV96E,WAAY,IAEd+L,OAAOoK,eAAerV,KAAM62L,GAAS,CACnC78G,UAAU,EACV96E,OAAO,IAET+L,OAAOoK,eAAerV,KAAM82L,GAAa,CACvC98G,UAAU,EACV96E,WAAY,IAEd+L,OAAOoK,eAAerV,KAAM+2L,GAAU,CACpC/8G,UAAU,EACV96E,WAAY,IAEd,GAA4Bc,KAAM+2L,IAAUA,IAAYxvI,EACxD,GAA4BvnD,KAAM82L,IAAaA,IAAe,IAAME,EAAezvI,EACrF,CACA,QAAA4pC,GAIM,GAA4BnxF,KAAM62L,IAASA,KAC3C,GAA4B72L,KAAM+2L,IAAUA,IAAY,IAC1Dh1L,aAAa,GAA4B/B,KAAM42L,IAAaA,KAC5D,GAA4B52L,KAAM42L,IAAaA,IAAe30L,WAAW,GAA4BjC,KAAM82L,IAAaA,IAAc,GAA4B92L,KAAM+2L,IAAUA,KAEtL,CACA,IAAApiC,GACO,GAA4B30J,KAAM62L,IAASA,MAC9C90L,aAAa,GAA4B/B,KAAM42L,IAAaA,KAC5D,GAA4B52L,KAAM42L,IAAaA,SAAeh3L,EAC9D,GAA4BI,KAAM62L,IAASA,KAAW,EAE1D,GClDF,MAAM,GAAO,OCFb,QACEz4K,QAAS,CAEP64K,cAAe,uFCHnB,SAAS,GAA4Bx+I,EAAUm6F,GAAc,IAAK3nI,OAAO1F,UAAU2F,eAAenG,KAAK0zC,EAAUm6F,GAAe,MAAM,IAAItoI,UAAU,kDAAqD,OAAOmuC,CAAU,CAC1N,IAAI,GAAK,EACT,SAAS,GAA2B15C,GAAQ,MAAO,aAAe,KAAO,IAAMA,CAAM,CA+CrF,SAASm4L,GAAcl/C,GAErB,OAD4BA,EAAKr0I,KAAKT,MAAM,EAAG80I,EAAKr0I,KAAKo+B,KAAMi2G,EAAKp8G,KAAK/1B,KAE3E,CACA,MAAM,GAAiB,CACrB6e,UAAU,EACVyyK,UAAW,OACX92K,OAAQ,OACR+2K,kBAAmB,KACnBC,qBAAsB,MACtBC,QAAQ,EACR76K,QAAS,CAAC,EACV8qC,QAAS,IACTq1D,MAAO,EACP26E,iBAAiB,EACjBC,aAAc,GACd,eAAAC,CAAgBn7K,GACd,IAAIo7K,EAAiB,CAAC,EACtB,IACEA,EAAiB7zL,KAAKiC,MAAMwW,EAC9B,CAAE,MAEF,CAIA,OAAOo7K,CACT,EACA,gBAAAC,CAAiB74K,EAAGpD,GAClB,IAAIlX,EAAQ,IAAI2iB,MAAM,gBAItB,OAHI,GAAezL,KACjBlX,EAAQ,IAAI,GAAaA,EAAOkX,IAE3BlX,CACT,EACA,cAAAozL,CAAex7K,GACb,OAAOA,GAAU,KAAOA,EAAS,GACnC,GAEF,IAAIy7K,GAA2B,GAA2B,cACtDC,GAAgC,GAA2B,mBAC3DC,GAA6B,GAA2B,gBACxDC,GAAuC,GAA2B,0BAClEC,GAA4B,GAA2B,eACvDC,GAA6B,GAA2B,gBAC7C,MAAMC,WAAkBnpC,GACrC,WAAAtuJ,CAAYuuJ,EAAM9O,GAsEhB,GArEA/nI,MAAM62I,EAAM,IACP,GACHkoC,UAAWh3C,EAAMm3C,OAAS,UAAY,UACnCn3C,IAELl1I,OAAOoK,eAAerV,KAAMi4L,GAAc,CACxC/4L,MAAOk5L,KAETntL,OAAOoK,eAAerV,KAAMg4L,GAAyB,CACnD94L,MAAOm5L,KAETptL,OAAOoK,eAAerV,KAAM+3L,GAAe,CACzC74L,MAAOo5L,KAETrtL,OAAOoK,eAAerV,KAAM83L,GAAkB,CAC5C54L,MAAOq5L,KAETttL,OAAOoK,eAAerV,KAAM63L,GAAa,CACvC79G,UAAU,EACV96E,WAAY,IAEd+L,OAAOoK,eAAerV,KAAMk4L,GAAe,CACzCl+G,UAAU,EACV96E,MAAO8d,UACL,GAAuB,IAAnB6pI,EAAQpnJ,OAEV,YADAO,KAAKivJ,KAAKnvJ,IAAI,mCAQQ,IAApBE,KAAK6gF,KAAK+7B,OAAgB58G,KAAK6gF,KAAK21G,KACtCx2L,KAAKivJ,KAAKnvJ,IAAI,mPAAoP,WAEpQE,KAAKivJ,KAAKnvJ,IAAI,4BACd,MACM8rJ,EADQ5rJ,KAAKivJ,KAAKxK,cAAcoC,GCnI/Bh/I,OAAOmwI,IADHA,IAAQ,UAAWA,KAAUA,EAAKxzI,MACtBg0L,CAASxgD,IDqI1BygD,ECjIP,SAAwC35L,GAC7C,OAAOA,EAAM+I,OAAOmwI,IAClB,IAAI0gD,EACJ,QAA6C,OAAnCA,EAAiB1gD,EAAK7mD,WAAqBunG,EAAe90C,eAAmB5L,EAAKywB,aAEhG,CD4H4BkwB,CAA+B/sC,GAEnD,GADA5rJ,KAAKivJ,KAAKriJ,KAAK,eAAgB6rL,GAC3Bz4L,KAAK6gF,KAAKy2G,OAAQ,CAGpB,GADyB1rC,EAAchkI,KAAKowH,GAAQA,EAAKS,UAEvD,MAAM,IAAItxH,MAAM,mEAElB,GAAiC,mBAAtBnnB,KAAK6gF,KAAKpkE,QACnB,MAAM,IAAInS,UAAU,+EAEhB,GAA4BtK,KAAM+3L,IAAeA,IAAensC,EACxE,YACQ,GAA4B5rJ,KAAMi4L,IAAcA,IAAcrsC,MAI1E5rJ,KAAK6F,KAAO,WACZ7F,KAAKsoB,GAAKtoB,KAAK6gF,KAAKv4D,IAAM,YAC1BtoB,KAAK6hJ,cAAgB,GACrB7hJ,KAAKoiJ,WAGDo0C,MAA4Bx2L,KAAK6gF,KAGnC7gF,KAAK44L,SAAW54L,KAAK6gF,KAAK21G,IAE1Bx2L,KAAK44L,SAAW,IAAIrD,GAAiBv1L,KAAK6gF,KAAK+7B,OAE7C58G,KAAK6gF,KAAKy2G,SAAWt3L,KAAK6gF,KAAKn8D,SACjC,MAAM,IAAIyC,MAAM,+DAElB,GAAInnB,KAAK6gF,KAAKy2G,QAAuC,mBAAtBt3L,KAAK6gF,KAAKpkE,QACvC,MAAM,IAAI0K,MAAM,+EAElB,QAA2DvnB,KAA7C,MAATugJ,OAAqB,EAAIA,EAAMi3C,oBAAoC,eAAgBp3L,KAAK6gF,KAC3F,MAAM,IAAI15D,MAAM,oEAElBnnB,KAAK64L,eAAiB5tL,OAAO3C,OAAO,MAMpC,GAA4BtI,KAAM63L,IAAaA,IAAe/4L,GACrDke,MAAO5Y,EAAKwL,KACjB,IACE,IAAIkpL,EACJ,MAAMrmG,QF/KT,SAAiBruF,EAAKwL,QACN,IAAjBA,IACFA,EAAU,CAAC,GAEb,MAAM,KACJ0Q,EAAO,KAAI,QACX7D,EAAU,CAAC,EAAC,OACZ4D,EAAS,MAAK,gBACd04K,EAAkB,GAAI,iBACtBC,EAAmB,GAAI,YACvBC,EAAc,KAAM,EAAI,eACxBC,EAAiB,GAAI,UACrBC,EAAY,GAAI,aAChB3B,EAAY,QACZ4B,EAAU,EAAC,OACXl3K,EAAS,KAAI,QACbqlC,EAAU,IAAK,gBACfgwI,GAAkB,GAChB3nL,EAGE+0B,EAAQ00J,GAAW,GAAM,IAAMA,EAAU,GAAK,IAC9CtpB,EAAQ,IAAI,GAAgBxoH,EAAS4xI,GAwD3C,OAvDA,SAASG,EAAiBC,GAKxB,YAJwB,IAApBA,IACFA,EAAa,GAGR,IAAIjhL,QAAQ0E,MAAOzE,EAAS9R,KACjC,MAAMiwL,EAAM,IAAI8C,eAChB9C,EAAIpzL,KAAK+c,EAAQjc,GAAK,GACtBsyL,EAAIa,gBAAkBA,EAClBC,IACFd,EAAIc,aAAeA,GAEX,MAAVt1K,GAAkBA,EAAO9gB,iBAAiB,QAAS,KACjDs1L,EAAI31K,QAGJta,EAAO,IAAI8P,aAAa,UAAW,iBAErCmgL,EAAIttB,OAASpsJ,gBACLk8K,EAAexC,EAAK6C,GACtB7C,EAAIt6K,QAAU,KAAOs6K,EAAIt6K,OAAS,KACpC2zJ,EAAMpb,OACNp8I,EAAQm+K,IACCuC,EAAYvC,IAAQ6C,EAAaH,EAC1Cn3L,WAAW,KACTq3L,EAAiBC,EAAa,GAAG3/J,KAAKrhB,EAAS9R,IAC9Ck+B,EAAM40J,KAETxpB,EAAMpb,OACNluJ,EAAO,IAAI,GAAaiwL,EAAI+C,WAAY/C,MAG5CA,EAAIxvI,QAAU,KACR+xI,EAAYvC,IAAQ6C,EAAaH,EACnCn3L,WAAW,KACTq3L,EAAiBC,EAAa,GAAG3/J,KAAKrhB,EAAS9R,IAC9Ck+B,EAAM40J,KAETxpB,EAAMpb,OACNluJ,EAAO,IAAI,GAAaiwL,EAAI+C,WAAY/C,MAG5CA,EAAIvsC,OAAOuvC,WAAaj0L,IACtBsqK,EAAM5+E,WACN6nG,EAAiBvzL,IAEfgX,GACFxR,OAAO+H,KAAKyJ,GAAS2mB,QAAQn8B,IAC3ByvL,EAAIiD,iBAAiB1yL,EAAKwV,EAAQxV,YAGhC8xL,EAAgBrC,EAAK6C,GAC3B7C,EAAIhzL,KAAK4c,IAEb,CACOg5K,EACT,CEgG4BM,CAAQx1L,EAAK,IAC1BwL,EACHyQ,OAAmB,MAAXzQ,GAAyD,OAArCkpL,EAAkBlpL,EAAQyQ,aAAuB,EAAIy4K,EAAgBh3K,cACjGq3K,UAAW5xI,IACT,MAAM6pG,EAAU/uJ,KAAK+wG,KAAK7rD,EAAU,KAC9B/iD,EAAQ,IAAI2iB,MAAMnnB,KAAK0iJ,KAAK,gBAAiB,CACjD0O,aAEFpxJ,KAAKivJ,KAAKriJ,KAAK,iBAAkBpI,EAAO1F,IAE1Ck6L,iBAAkBvzL,IAChB,GAAIA,EAAMo0L,iBACR,IAAK,MAAM7hD,KAAQl5I,EACjBkB,KAAKivJ,KAAKriJ,KAAK,kBAAmBorI,EAAM,CAGtC8hD,SAAU95L,KACV0hJ,cAAej8I,EAAM4S,OAAS5S,EAAMu9F,MAAQg1C,EAAKj2G,KACjDy/G,WAAYxJ,EAAKj2G,UAM3B,IAAK/hC,KAAK6gF,KAAK+2G,eAAenlG,EAAIr2E,OAAQq2E,EAAIn2E,aAAcm2E,GAC1D,MAAM,IAAI,GAAaA,EAAIgnG,WAAYhnG,GAEzC,MAAMnyE,EAAOtgB,KAAK6gF,KAAK42G,gBAAgBhlG,EAAIn2E,aAAcm2E,GACnDu5D,EAAoB,MAAR1rI,OAAoB,EAAIA,EAAKtgB,KAAK6gF,KAAKw2G,sBACzD,IAAK,MAAMr/C,KAAQl5I,EACjBkB,KAAKivJ,KAAKriJ,KAAK,iBAAkBorI,EAAM,CACrC57H,OAAQq2E,EAAIr2E,OACZkE,OACA0rI,cAGJ,OAAOv5D,CACT,CAAE,MAAOjuF,GACP,GAAmB,eAAfA,EAAMzF,KACR,OAEF,GAAIyF,aAAiB,GAAc,CACjC,MAAMke,EAAUle,EAAMke,QAChBq3K,EA9MlB,SAA4BrD,EAAK5+H,GAC/B,IAAItzD,EAAQszD,EAWZ,OATKtzD,IAAOA,EAAQ,IAAI2iB,MAAM,iBAET,iBAAV3iB,IAAoBA,EAAQ,IAAI2iB,MAAM3iB,IAE3CA,aAAiB2iB,QACrB3iB,EAAQyG,OAAOuc,OAAO,IAAIL,MAAM,gBAAiB,CAC/CxjB,KAAMa,KAGN,GAAekyL,IACjBlyL,EAAQ,IAAI,GAAaA,EAAOkyL,GACzBlyL,IAKTA,EAAMke,QAAUg0K,EACTlyL,EACT,CAyLgCw1L,CAAmBt3K,EAAS1iB,KAAK6gF,KAAK82G,iBAAiBj1K,EAAQpG,aAAcoG,IACjG,IAAK,MAAMs1H,KAAQl5I,EACjBkB,KAAKivJ,KAAKriJ,KAAK,eAAgBorI,EAAM+hD,EAEzC,CACA,MAAMv1L,CACR,EAGN,CACA,UAAA4sD,CAAW4mF,GACT,MAAMxgE,EAAYx3E,KAAKivJ,KAAKjrJ,WAAWi2L,WACjC,QACJx9K,GACEzc,KAAK6gF,KACHA,EAAO,IACR7gF,KAAK6gF,QACJrJ,GAAa,CAAC,KACdwgE,EAAKiiD,WAAa,CAAC,EACvBx9K,QAAS,CAAC,GAmBZ,MAXuB,mBAAZA,EACTokE,EAAKpkE,QAAUA,EAAQu7H,GAEvB/sI,OAAOuc,OAAOq5D,EAAKpkE,QAASzc,KAAK6gF,KAAKpkE,SAEpC+6D,GACFvsE,OAAOuc,OAAOq5D,EAAKpkE,QAAS+6D,EAAU/6D,SAEpCu7H,EAAKiiD,WACPhvL,OAAOuc,OAAOq5D,EAAKpkE,QAASu7H,EAAKiiD,UAAUx9K,SAEtCokE,CACT,CAGA,WAAAq5G,CAAYx1K,EAAUkX,EAAMilD,IACAn0E,MAAM+H,QAAQosE,EAAKu2G,mBAAqBv2G,EAAKu2G,kBAAoBnsL,OAAO+H,KAAK4oB,IAErFwH,QAAQ4pC,IACxB,MAAM9tE,EAAQ08B,EAAKoxC,GACftgE,MAAM+H,QAAQvV,GAGhBA,EAAMkkC,QAAQ+2J,GAAWz1K,EAASE,OAAOooD,EAAMmtH,IAE/Cz1K,EAASE,OAAOooD,EAAM9tE,IAG5B,CACA,oBAAAk7L,CAAqBpiD,EAAMn3D,GACzB,MAAMw5G,EAAW,IAAI11K,SACrB3kB,KAAKk6L,YAAYG,EAAUriD,EAAKp8G,KAAMilD,GACtC,MAAMy5G,EAAsBpD,GAAcl/C,GAM1C,OALIA,EAAKj5I,KACPs7L,EAASz1K,OAAOi8D,EAAKs2G,UAAWmD,EAAqBtiD,EAAKp8G,KAAK78B,MAE/Ds7L,EAASz1K,OAAOi8D,EAAKs2G,UAAWmD,GAE3BD,CACT,CACA,mBAAAE,CAAoBz7L,EAAO+hF,GACzB,MAAMw5G,EAAW,IAAI11K,UACf,KACJiX,GACE57B,KAAKivJ,KAAKjrJ,WAWd,OAVAhE,KAAKk6L,YAAYG,EAAUz+J,EAAMilD,GACjC/hF,EAAMskC,QAAQ40G,IACZ,MAAMpoI,EAAU5P,KAAKoxD,WAAW4mF,GAC1BsiD,EAAsBpD,GAAcl/C,GACtCA,EAAKj5I,KACPs7L,EAASz1K,OAAOhV,EAAQunL,UAAWmD,EAAqBtiD,EAAKj5I,MAE7Ds7L,EAASz1K,OAAOhV,EAAQunL,UAAWmD,KAGhCD,CACT,CACA,OAAAlxC,GACE,GAAInpJ,KAAK6gF,KAAKy2G,OAAQ,CACpB,MAAM,aACJh1C,GACEtiJ,KAAKivJ,KAAKjrJ,WACdhE,KAAKivJ,KAAKva,SAAS,CACjB4N,aAAc,IACTA,EACHE,wBAAwB,IAG9B,CACAxiJ,KAAKivJ,KAAK9K,YAAY,GAA4BnkJ,KAAMk4L,IAAeA,IACzE,CACA,SAAA3uC,GACE,GAAIvpJ,KAAK6gF,KAAKy2G,OAAQ,CACpB,MAAM,aACJh1C,GACEtiJ,KAAKivJ,KAAKjrJ,WACdhE,KAAKivJ,KAAKva,SAAS,CACjB4N,aAAc,IACTA,EACHE,wBAAwB,IAG9B,CACAxiJ,KAAKivJ,KAAK7K,eAAe,GAA4BpkJ,KAAMk4L,IAAeA,IAC5E,EAEFl7K,eAAeu7K,GAAkBvgD,GAC/B,MAAM3yI,EAAS,IAAIquL,GAAa1zL,KAAKivJ,MAC/B99G,EAAa,IAAI1wB,gBACjB+5K,EAAYx6L,KAAK44L,SAAS5C,oBAAoBh5K,UAClD,MAAM6jE,EAAO7gF,KAAKoxD,WAAW4mF,GACvB52H,EAAQ,GAA4BphB,KAAM63L,IAAaA,IAAa,CAAC7/C,IACrE13H,EAAOugE,EAAKn8D,SAAW1kB,KAAKo6L,qBAAqBpiD,EAAMn3D,GAAQm3D,EAAKr0I,KAC1E,OAAOyd,EAAMy/D,EAAK45G,SAAU,IACvB55G,EACHvgE,OACA4B,OAAQivB,EAAWjvB,WAGvB7c,EAAOwuL,aAAa77C,EAAK1vH,GAAI,IAAM6oB,EAAWpwB,SAC9C1b,EAAO6uL,YAAYl8C,EAAK1vH,GAAI26H,IAC1B,IAAI,OACFt9I,GACEs9I,EACW,SAAXt9I,GACFwrC,EAAWpwB,UAGf,UACQy5K,IAAYnG,QAAQljJ,EAAWjvB,OACvC,CAAE,MAAO1d,GAEP,GAAsB,cAAlBA,EAAMgB,QACR,MAAMhB,CAEV,CAAE,QACAa,EAAOkC,QACT,CACF,CACAyV,eAAes7K,GAAex5L,GAC5B,MAAMqyC,EAAa,IAAI1wB,gBACjB+5K,EAAYx6L,KAAK44L,SAAS5C,oBAAoBh5K,UAClD,IAAI09K,EACJ,MAAMC,EAA4E,OAA3DD,EAAwB16L,KAAKivJ,KAAKjrJ,WAAWi2L,WAAqBS,EAAwB,CAAC,EAC5Gt5K,EAAQ,GAA4BphB,KAAM63L,IAAaA,IAAa/4L,GACpEwhB,EAAOtgB,KAAKu6L,oBAAoBz7L,EAAO,IACxCkB,KAAK6gF,QACL85G,IAEL,OAAOv5K,EAAMphB,KAAK6gF,KAAK45G,SAAU,IAE5Bz6L,KAAK6gF,KACRvgE,OACA4B,OAAQivB,EAAWjvB,WAGvB,SAASnB,IACPowB,EAAWpwB,OACb,CAIA/gB,KAAKivJ,KAAKzjJ,KAAK,aAAcuV,GAC7B,UACQy5K,IAAYnG,QAAQljJ,EAAWjvB,OACvC,CAAE,MAAO1d,GAEP,GAAsB,cAAlBA,EAAMgB,QACR,MAAMhB,CAEV,CAAE,QACAxE,KAAKivJ,KAAKxhJ,IAAI,aAAcsT,EAC9B,CACF,CACA,SAASs3K,GAAyBrgD,GAChC,IAAI4iD,EACJ,MAAM/5G,EAAO7gF,KAAKoxD,WAAW4mF,GACvBo/C,EAAoB1qL,MAAM+H,QAAQosE,EAAKu2G,mBAAqBv2G,EAAKu2G,kBAErEnsL,OAAO+H,KAAKglI,EAAKp8G,MACnB,MAAO,IAC+B,OAA/Bg/J,EAAe5iD,EAAKU,aAAuB,EAAIkiD,EAAat6K,KACjE3b,SAAU,YACV81L,SAAU55G,EAAK45G,SACf14J,KAAMi2G,EAAKr0I,KAAKo+B,KAChB84J,UAAWh6G,EAAKs2G,UAChB2D,SAAU7vL,OAAO+3I,YAAYo0C,EAAkBlvL,IAAInJ,GAAQ,CAACA,EAAMi5I,EAAKp8G,KAAK78B,MAC5Eg8L,WAAYl6G,EAAKxgE,OACjB26K,YAAan6G,EAAKn8D,SAClBjI,QAASokE,EAAKpkE,QAElB,CACAO,eAAeo7K,GAAct5L,SACrBwZ,QAAQ2iL,WAAWn8L,EAAMoJ,IAAI8vI,IACjC,GAAIA,EAAKS,SAAU,CACjB,MAAMyiD,EAAW,IAAMl7L,KAAK44L,SACtBznJ,EAAa,IAAI1wB,gBACjB06K,EAAiBC,IACjBA,EAAY9yK,KAAO0vH,EAAK1vH,IAAI6oB,EAAWpwB,SAE7C/gB,KAAKivJ,KAAK1hJ,GAAG,eAAgB4tL,GAC7B,MAAME,EAAgBr7L,KAAKivJ,KAAKnF,wBAAwB9R,GAAMsjD,iBAAiBtjD,EAAM,GAA4Bh4I,KAAMg4L,IAAyBA,IAAyBhgD,GAAO,CAC9K91H,OAAQivB,EAAWjvB,OACnBg5K,aAOF,OALAl7L,KAAK44L,SAAS9C,iBAAiB,KAC7B91L,KAAKivJ,KAAKxhJ,IAAI,eAAgB0tL,IAC7B,CACD3sB,UAAW,GAHbxuK,GAKOq7L,CACT,CACA,OAAO,GAA4Br7L,KAAM83L,IAAkBA,IAAkB9/C,KAEjF,CAEAmgD,GAAUrjD,QAhbG,QETT91I,SAASC,eAAe,oBAC1B,IAAI,IAAO8pJ,IAAImjC,GAAW,CAAE3B,QAAQ,EAAMr4K,OAAQ,oBACvC62I,IAAI,GAAK,CAAE0xC,SAAU,U","sources":["webpack://app/./app/javascript/partsset.js","webpack://app/./node_modules/@rails/actioncable/src/adapters.js","webpack://app/./node_modules/@rails/actioncable/src/logger.js","webpack://app/./node_modules/@rails/actioncable/src/connection_monitor.js","webpack://app/./node_modules/@rails/actioncable/src/internal.js","webpack://app/./node_modules/@rails/actioncable/src/connection.js","webpack://app/./node_modules/@rails/actioncable/src/subscription.js","webpack://app/./node_modules/@rails/actioncable/src/subscription_guarantor.js","webpack://app/./node_modules/@rails/actioncable/src/subscriptions.js","webpack://app/./node_modules/@rails/actioncable/src/consumer.js","webpack://app/./node_modules/@rails/actioncable/src/index.js","webpack://app/./node_modules/@transloadit/prettier-bytes/dist/prettierBytes.js","webpack://app/./node_modules/eventemitter3/index.js","webpack://app/./node_modules/is-shallow-equal/index.js","webpack://app/./node_modules/lodash/_Symbol.js","webpack://app/./node_modules/lodash/_baseGetTag.js","webpack://app/./node_modules/lodash/_baseTrim.js","webpack://app/./node_modules/lodash/_freeGlobal.js","webpack://app/./node_modules/lodash/_getRawTag.js","webpack://app/./node_modules/lodash/_objectToString.js","webpack://app/./node_modules/lodash/_root.js","webpack://app/./node_modules/lodash/_trimmedEndIndex.js","webpack://app/./node_modules/lodash/debounce.js","webpack://app/./node_modules/lodash/isObject.js","webpack://app/./node_modules/lodash/isObjectLike.js","webpack://app/./node_modules/lodash/isSymbol.js","webpack://app/./node_modules/lodash/now.js","webpack://app/./node_modules/lodash/throttle.js","webpack://app/./node_modules/lodash/toNumber.js","webpack://app/./node_modules/mime-match/index.js","webpack://app/./node_modules/namespace-emitter/index.js","webpack://app/./node_modules/wildcard/index.js","webpack://app/./node_modules/classnames/index.js","webpack://app/webpack/bootstrap","webpack://app/webpack/runtime/define property getters","webpack://app/webpack/runtime/global","webpack://app/webpack/runtime/hasOwnProperty shorthand","webpack://app/./node_modules/@hotwired/turbo/dist/turbo.es2017-esm.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/snakeize.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/cable_stream_source_element.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/index.js","webpack://app/./node_modules/@hotwired/turbo-rails/app/javascript/turbo/fetch_requests.js","webpack://app/./node_modules/@hotwired/stimulus/dist/stimulus.js","webpack://app/./app/javascript/controllers/application.js","webpack://app/./node_modules/slim-select/dist/slimselect.es.js","webpack://app/./node_modules/@kurkle/color/dist/color.esm.js","webpack://app/./app/javascript/controllers/index.js","webpack://app/./app/javascript/controllers/hello_controller.js","webpack://app/./app/javascript/controllers/slim_select_controller.js","webpack://app/./app/javascript/controllers/modal_controller.js","webpack://app/./app/javascript/controllers/work_modal_controller.js","webpack://app/./app/javascript/controllers/notification_controller.js","webpack://app/./app/javascript/controllers/vehicle_controller.js","webpack://app/./node_modules/chart.js/dist/chunks/helpers.dataset.js","webpack://app/./node_modules/chart.js/dist/chart.js","webpack://app/./node_modules/chart.js/auto/auto.js","webpack://app/./node_modules/@uppy/utils/lib/Translator.js","webpack://app/./app/javascript/work_chart.js","webpack://app/./node_modules/nanoid/non-secure/index.js","webpack://app/./node_modules/@uppy/store-default/lib/index.js","webpack://app/./node_modules/@uppy/utils/lib/getFileNameAndExtension.js","webpack://app/./node_modules/@uppy/utils/lib/mimeTypes.js","webpack://app/./node_modules/@uppy/utils/lib/getFileType.js","webpack://app/./node_modules/@uppy/utils/lib/generateFileID.js","webpack://app/./node_modules/@uppy/core/lib/supportsUploadProgress.js","webpack://app/./node_modules/@uppy/utils/lib/getTimeStamp.js","webpack://app/./node_modules/@uppy/core/lib/loggers.js","webpack://app/./node_modules/@uppy/core/lib/Restricter.js","webpack://app/./node_modules/@uppy/core/lib/locale.js","webpack://app/./node_modules/@uppy/core/lib/Uppy.js","webpack://app/./node_modules/@uppy/core/lib/getFileName.js","webpack://app/./node_modules/preact/dist/preact.module.js","webpack://app/./node_modules/@uppy/utils/lib/isDOMElement.js","webpack://app/./node_modules/@uppy/utils/lib/findDOMElement.js","webpack://app/./node_modules/@uppy/utils/lib/getTextDirection.js","webpack://app/./node_modules/@uppy/core/lib/BasePlugin.js","webpack://app/./node_modules/@uppy/core/lib/UIPlugin.js","webpack://app/./node_modules/@uppy/utils/lib/emaFilter.js","webpack://app/./node_modules/@uppy/status-bar/lib/StatusBarStates.js","webpack://app/./node_modules/@uppy/status-bar/lib/calculateProcessingProgress.js","webpack://app/./node_modules/@uppy/utils/lib/prettyETA.js","webpack://app/./node_modules/@uppy/utils/lib/secondsToTime.js","webpack://app/./node_modules/@uppy/status-bar/lib/Components.js","webpack://app/./node_modules/@uppy/status-bar/lib/StatusBarUI.js","webpack://app/./node_modules/@uppy/status-bar/lib/locale.js","webpack://app/./node_modules/@uppy/status-bar/lib/StatusBar.js","webpack://app/./node_modules/@uppy/informer/lib/FadeIn.js","webpack://app/./node_modules/@uppy/informer/lib/TransitionGroup.js","webpack://app/./node_modules/@uppy/informer/lib/Informer.js","webpack://app/./node_modules/@uppy/utils/lib/dataURItoBlob.js","webpack://app/./node_modules/@uppy/utils/lib/isObjectURL.js","webpack://app/./node_modules/@uppy/utils/lib/isPreviewSupported.js","webpack://app/./node_modules/exifr/dist/mini.esm.mjs","webpack://app/./node_modules/@uppy/thumbnail-generator/lib/locale.js","webpack://app/./node_modules/@uppy/thumbnail-generator/lib/index.js","webpack://app/./node_modules/@uppy/utils/lib/findAllDOMElements.js","webpack://app/./node_modules/@uppy/utils/lib/toArray.js","webpack://app/./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/getFilesAndDirectoriesFromDirectory.js","webpack://app/./node_modules/@uppy/utils/lib/getDroppedFiles/utils/webkitGetAsEntryApi/index.js","webpack://app/./node_modules/p-timeout/index.js","webpack://app/./node_modules/p-queue/dist/priority-queue.js","webpack://app/./node_modules/p-queue/dist/index.js","webpack://app/./node_modules/p-queue/dist/lower-bound.js","webpack://app/./node_modules/preact/hooks/dist/hooks.module.js","webpack://app/./node_modules/@uppy/provider-views/lib/ProviderView/AuthView.js","webpack://app/./node_modules/@uppy/provider-views/lib/ProviderView/User.js","webpack://app/./node_modules/@uppy/provider-views/lib/Breadcrumbs.js","webpack://app/./node_modules/@uppy/provider-views/lib/ProviderView/Header.js","webpack://app/./node_modules/@uppy/utils/lib/remoteFileObjToLocal.js","webpack://app/./node_modules/@uppy/utils/lib/VirtualList.js","webpack://app/./node_modules/@uppy/provider-views/lib/SearchFilterInput.js","webpack://app/./node_modules/@uppy/provider-views/lib/FooterActions.js","webpack://app/./node_modules/@uppy/provider-views/lib/Item/components/ItemIcon.js","webpack://app/./node_modules/@uppy/provider-views/lib/Item/components/GridLi.js","webpack://app/./node_modules/@uppy/provider-views/lib/Item/components/ListLi.js","webpack://app/./node_modules/@uppy/provider-views/lib/Item/index.js","webpack://app/./node_modules/@uppy/provider-views/lib/Browser.js","webpack://app/./node_modules/@uppy/provider-views/lib/CloseWrapper.js","webpack://app/./node_modules/@uppy/provider-views/lib/View.js","webpack://app/./node_modules/@uppy/provider-views/lib/ProviderView/ProviderView.js","webpack://app/./node_modules/@uppy/provider-views/lib/SearchProviderView/SearchProviderView.js","webpack://app/./node_modules/memoize-one/dist/memoize-one.esm.js","webpack://app/./node_modules/@uppy/utils/lib/FOCUSABLE_ELEMENTS.js","webpack://app/./node_modules/@uppy/dashboard/lib/utils/getActiveOverlayEl.js","webpack://app/./node_modules/@uppy/dashboard/lib/utils/trapFocus.js","webpack://app/./node_modules/@uppy/utils/lib/isDragDropSupported.js","webpack://app/./node_modules/@uppy/dashboard/lib/utils/getFileTypeIcon.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/FilePreview.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/FileItem/MetaErrorMessage.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/FileItem/FilePreviewAndLink/index.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/FileItem/FileProgress/index.js","webpack://app/./node_modules/@uppy/utils/lib/truncateString.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/FileItem/FileInfo/index.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/FileItem/Buttons/index.js","webpack://app/./node_modules/@uppy/dashboard/lib/utils/copyToClipboard.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/FileItem/index.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/FileList.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/AddFiles.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/AddFilesPanel.js","webpack://app/./node_modules/@uppy/dashboard/lib/utils/ignoreEvent.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/PickerPanelContent.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/EditorPanel.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/PickerPanelTopBar.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/FileCard/RenderMetaFields.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/FileCard/index.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/Slide.js","webpack://app/./node_modules/@uppy/dashboard/lib/components/Dashboard.js","webpack://app/./node_modules/@uppy/dashboard/lib/locale.js","webpack://app/./node_modules/@uppy/dashboard/lib/Dashboard.js","webpack://app/./node_modules/@uppy/dashboard/lib/utils/createSuperFocus.js","webpack://app/./node_modules/@uppy/utils/lib/getDroppedFiles/index.js","webpack://app/./node_modules/@uppy/utils/lib/getDroppedFiles/utils/fallbackApi.js","webpack://app/./node_modules/@uppy/core/lib/EventManager.js","webpack://app/./node_modules/@uppy/utils/lib/RateLimitedQueue.js","webpack://app/./node_modules/@uppy/utils/lib/NetworkError.js","webpack://app/./node_modules/@uppy/utils/lib/isNetworkError.js","webpack://app/./node_modules/@uppy/utils/lib/ProgressTimeout.js","webpack://app/./node_modules/@uppy/utils/lib/fetcher.js","webpack://app/./node_modules/@uppy/xhr-upload/lib/locale.js","webpack://app/./node_modules/@uppy/xhr-upload/lib/index.js","webpack://app/./node_modules/@uppy/utils/lib/fileFilters.js","webpack://app/./app/javascript/application.js"],"sourcesContent":["window.showChooseFileName = (file_input) => {\n  let file_name = file_input.files[0].name;\n  let input_name = document.getElementById(\"file_name\");\n  input_name.value = file_name;\n};\n\n\nwindow.changeState = () => {\n  document.getElementById('edit-mode').classList.toggle('hidden');\n  document.getElementById('view-mode').classList.toggle('hidden');\n  const actions_links = document.getElementsByClassName('row-action');\n\n  for (var i = 0; i < actions_links.length; i++) {\n    actions_links[i].classList.toggle('hidden');\n  }\n};","export default {\n  logger: typeof console !== \"undefined\" ? console : undefined,\n  WebSocket: typeof WebSocket !== \"undefined\" ? WebSocket : undefined,\n}\n","import adapters from \"./adapters\"\n\n// The logger is disabled by default. You can enable it with:\n//\n//   ActionCable.logger.enabled = true\n//\n//   Example:\n//\n//   import * as ActionCable from '@rails/actioncable'\n//\n//   ActionCable.logger.enabled = true\n//   ActionCable.logger.log('Connection Established.')\n//\n\nexport default {\n  log(...messages) {\n    if (this.enabled) {\n      messages.push(Date.now())\n      adapters.logger.log(\"[ActionCable]\", ...messages)\n    }\n  },\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring the cable connection is in good health by validating the heartbeat pings sent from the server, and attempting\n// revival reconnections if things go astray. Internal class, not intended for direct user manipulation.\n\nconst now = () => new Date().getTime()\n\nconst secondsSince = time => (now() - time) / 1000\n\nclass ConnectionMonitor {\n  constructor(connection) {\n    this.visibilityDidChange = this.visibilityDidChange.bind(this)\n    this.connection = connection\n    this.reconnectAttempts = 0\n  }\n\n  start() {\n    if (!this.isRunning()) {\n      this.startedAt = now()\n      delete this.stoppedAt\n      this.startPolling()\n      addEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(`ConnectionMonitor started. stale threshold = ${this.constructor.staleThreshold} s`)\n    }\n  }\n\n  stop() {\n    if (this.isRunning()) {\n      this.stoppedAt = now()\n      this.stopPolling()\n      removeEventListener(\"visibilitychange\", this.visibilityDidChange)\n      logger.log(\"ConnectionMonitor stopped\")\n    }\n  }\n\n  isRunning() {\n    return this.startedAt && !this.stoppedAt\n  }\n\n  recordMessage() {\n    this.pingedAt = now()\n  }\n\n  recordConnect() {\n    this.reconnectAttempts = 0\n    delete this.disconnectedAt\n    logger.log(\"ConnectionMonitor recorded connect\")\n  }\n\n  recordDisconnect() {\n    this.disconnectedAt = now()\n    logger.log(\"ConnectionMonitor recorded disconnect\")\n  }\n\n  // Private\n\n  startPolling() {\n    this.stopPolling()\n    this.poll()\n  }\n\n  stopPolling() {\n    clearTimeout(this.pollTimeout)\n  }\n\n  poll() {\n    this.pollTimeout = setTimeout(() => {\n      this.reconnectIfStale()\n      this.poll()\n    }\n    , this.getPollInterval())\n  }\n\n  getPollInterval() {\n    const { staleThreshold, reconnectionBackoffRate } = this.constructor\n    const backoff = Math.pow(1 + reconnectionBackoffRate, Math.min(this.reconnectAttempts, 10))\n    const jitterMax = this.reconnectAttempts === 0 ? 1.0 : reconnectionBackoffRate\n    const jitter = jitterMax * Math.random()\n    return staleThreshold * 1000 * backoff * (1 + jitter)\n  }\n\n  reconnectIfStale() {\n    if (this.connectionIsStale()) {\n      logger.log(`ConnectionMonitor detected stale connection. reconnectAttempts = ${this.reconnectAttempts}, time stale = ${secondsSince(this.refreshedAt)} s, stale threshold = ${this.constructor.staleThreshold} s`)\n      this.reconnectAttempts++\n      if (this.disconnectedRecently()) {\n        logger.log(`ConnectionMonitor skipping reopening recent disconnect. time disconnected = ${secondsSince(this.disconnectedAt)} s`)\n      } else {\n        logger.log(\"ConnectionMonitor reopening\")\n        this.connection.reopen()\n      }\n    }\n  }\n\n  get refreshedAt() {\n    return this.pingedAt ? this.pingedAt : this.startedAt\n  }\n\n  connectionIsStale() {\n    return secondsSince(this.refreshedAt) > this.constructor.staleThreshold\n  }\n\n  disconnectedRecently() {\n    return this.disconnectedAt && (secondsSince(this.disconnectedAt) < this.constructor.staleThreshold)\n  }\n\n  visibilityDidChange() {\n    if (document.visibilityState === \"visible\") {\n      setTimeout(() => {\n        if (this.connectionIsStale() || !this.connection.isOpen()) {\n          logger.log(`ConnectionMonitor reopening stale connection on visibilitychange. visibilityState = ${document.visibilityState}`)\n          this.connection.reopen()\n        }\n      }\n      , 200)\n    }\n  }\n\n}\n\nConnectionMonitor.staleThreshold = 6 // Server::Connections::BEAT_INTERVAL * 2 (missed two pings)\nConnectionMonitor.reconnectionBackoffRate = 0.15\n\nexport default ConnectionMonitor\n","export default {\n  \"message_types\": {\n    \"welcome\": \"welcome\",\n    \"disconnect\": \"disconnect\",\n    \"ping\": \"ping\",\n    \"confirmation\": \"confirm_subscription\",\n    \"rejection\": \"reject_subscription\"\n  },\n  \"disconnect_reasons\": {\n    \"unauthorized\": \"unauthorized\",\n    \"invalid_request\": \"invalid_request\",\n    \"server_restart\": \"server_restart\",\n    \"remote\": \"remote\"\n  },\n  \"default_mount_path\": \"/cable\",\n  \"protocols\": [\n    \"actioncable-v1-json\",\n    \"actioncable-unsupported\"\n  ]\n}\n","import adapters from \"./adapters\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport INTERNAL from \"./internal\"\nimport logger from \"./logger\"\n\n// Encapsulate the cable connection held by the consumer. This is an internal class not intended for direct user manipulation.\n\nconst {message_types, protocols} = INTERNAL\nconst supportedProtocols = protocols.slice(0, protocols.length - 1)\n\nconst indexOf = [].indexOf\n\nclass Connection {\n  constructor(consumer) {\n    this.open = this.open.bind(this)\n    this.consumer = consumer\n    this.subscriptions = this.consumer.subscriptions\n    this.monitor = new ConnectionMonitor(this)\n    this.disconnected = true\n  }\n\n  send(data) {\n    if (this.isOpen()) {\n      this.webSocket.send(JSON.stringify(data))\n      return true\n    } else {\n      return false\n    }\n  }\n\n  open() {\n    if (this.isActive()) {\n      logger.log(`Attempted to open WebSocket, but existing socket is ${this.getState()}`)\n      return false\n    } else {\n      const socketProtocols = [...protocols, ...this.consumer.subprotocols || []]\n      logger.log(`Opening WebSocket, current state is ${this.getState()}, subprotocols: ${socketProtocols}`)\n      if (this.webSocket) { this.uninstallEventHandlers() }\n      this.webSocket = new adapters.WebSocket(this.consumer.url, socketProtocols)\n      this.installEventHandlers()\n      this.monitor.start()\n      return true\n    }\n  }\n\n  close({allowReconnect} = {allowReconnect: true}) {\n    if (!allowReconnect) { this.monitor.stop() }\n    // Avoid closing websockets in a \"connecting\" state due to Safari 15.1+ bug. See: https://github.com/rails/rails/issues/43835#issuecomment-1002288478\n    if (this.isOpen()) {\n      return this.webSocket.close()\n    }\n  }\n\n  reopen() {\n    logger.log(`Reopening WebSocket, current state is ${this.getState()}`)\n    if (this.isActive()) {\n      try {\n        return this.close()\n      } catch (error) {\n        logger.log(\"Failed to reopen WebSocket\", error)\n      }\n      finally {\n        logger.log(`Reopening WebSocket in ${this.constructor.reopenDelay}ms`)\n        setTimeout(this.open, this.constructor.reopenDelay)\n      }\n    } else {\n      return this.open()\n    }\n  }\n\n  getProtocol() {\n    if (this.webSocket) {\n      return this.webSocket.protocol\n    }\n  }\n\n  isOpen() {\n    return this.isState(\"open\")\n  }\n\n  isActive() {\n    return this.isState(\"open\", \"connecting\")\n  }\n\n  triedToReconnect() {\n    return this.monitor.reconnectAttempts > 0\n  }\n\n  // Private\n\n  isProtocolSupported() {\n    return indexOf.call(supportedProtocols, this.getProtocol()) >= 0\n  }\n\n  isState(...states) {\n    return indexOf.call(states, this.getState()) >= 0\n  }\n\n  getState() {\n    if (this.webSocket) {\n      for (let state in adapters.WebSocket) {\n        if (adapters.WebSocket[state] === this.webSocket.readyState) {\n          return state.toLowerCase()\n        }\n      }\n    }\n    return null\n  }\n\n  installEventHandlers() {\n    for (let eventName in this.events) {\n      const handler = this.events[eventName].bind(this)\n      this.webSocket[`on${eventName}`] = handler\n    }\n  }\n\n  uninstallEventHandlers() {\n    for (let eventName in this.events) {\n      this.webSocket[`on${eventName}`] = function() {}\n    }\n  }\n\n}\n\nConnection.reopenDelay = 500\n\nConnection.prototype.events = {\n  message(event) {\n    if (!this.isProtocolSupported()) { return }\n    const {identifier, message, reason, reconnect, type} = JSON.parse(event.data)\n    this.monitor.recordMessage()\n    switch (type) {\n      case message_types.welcome:\n        if (this.triedToReconnect()) {\n          this.reconnectAttempted = true\n        }\n        this.monitor.recordConnect()\n        return this.subscriptions.reload()\n      case message_types.disconnect:\n        logger.log(`Disconnecting. Reason: ${reason}`)\n        return this.close({allowReconnect: reconnect})\n      case message_types.ping:\n        return null\n      case message_types.confirmation:\n        this.subscriptions.confirmSubscription(identifier)\n        if (this.reconnectAttempted) {\n          this.reconnectAttempted = false\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: true})\n        } else {\n          return this.subscriptions.notify(identifier, \"connected\", {reconnected: false})\n        }\n      case message_types.rejection:\n        return this.subscriptions.reject(identifier)\n      default:\n        return this.subscriptions.notify(identifier, \"received\", message)\n    }\n  },\n\n  open() {\n    logger.log(`WebSocket onopen event, using '${this.getProtocol()}' subprotocol`)\n    this.disconnected = false\n    if (!this.isProtocolSupported()) {\n      logger.log(\"Protocol is unsupported. Stopping monitor and disconnecting.\")\n      return this.close({allowReconnect: false})\n    }\n  },\n\n  close(event) {\n    logger.log(\"WebSocket onclose event\")\n    if (this.disconnected) { return }\n    this.disconnected = true\n    this.monitor.recordDisconnect()\n    return this.subscriptions.notifyAll(\"disconnected\", {willAttemptReconnect: this.monitor.isRunning()})\n  },\n\n  error() {\n    logger.log(\"WebSocket onerror event\")\n  }\n}\n\nexport default Connection\n","// A new subscription is created through the ActionCable.Subscriptions instance available on the consumer.\n// It provides a number of callbacks and a method for calling remote procedure calls on the corresponding\n// Channel instance on the server side.\n//\n// An example demonstrates the basic functionality:\n//\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\", {\n//     connected() {\n//       // Called once the subscription has been successfully completed\n//     },\n//\n//     disconnected({ willAttemptReconnect: boolean }) {\n//       // Called when the client has disconnected with the server.\n//       // The object will have an `willAttemptReconnect` property which\n//       // says whether the client has the intention of attempting\n//       // to reconnect.\n//     },\n//\n//     appear() {\n//       this.perform('appear', {appearing_on: this.appearingOn()})\n//     },\n//\n//     away() {\n//       this.perform('away')\n//     },\n//\n//     appearingOn() {\n//       $('main').data('appearing-on')\n//     }\n//   })\n//\n// The methods #appear and #away forward their intent to the remote AppearanceChannel instance on the server\n// by calling the `perform` method with the first parameter being the action (which maps to AppearanceChannel#appear/away).\n// The second parameter is a hash that'll get JSON encoded and made available on the server in the data parameter.\n//\n// This is how the server component would look:\n//\n//   class AppearanceChannel < ApplicationActionCable::Channel\n//     def subscribed\n//       current_user.appear\n//     end\n//\n//     def unsubscribed\n//       current_user.disappear\n//     end\n//\n//     def appear(data)\n//       current_user.appear on: data['appearing_on']\n//     end\n//\n//     def away\n//       current_user.away\n//     end\n//   end\n//\n// The \"AppearanceChannel\" name is automatically mapped between the client-side subscription creation and the server-side Ruby class name.\n// The AppearanceChannel#appear/away public methods are exposed automatically to client-side invocation through the perform method.\n\nconst extend = function(object, properties) {\n  if (properties != null) {\n    for (let key in properties) {\n      const value = properties[key]\n      object[key] = value\n    }\n  }\n  return object\n}\n\nexport default class Subscription {\n  constructor(consumer, params = {}, mixin) {\n    this.consumer = consumer\n    this.identifier = JSON.stringify(params)\n    extend(this, mixin)\n  }\n\n  // Perform a channel action with the optional data passed as an attribute\n  perform(action, data = {}) {\n    data.action = action\n    return this.send(data)\n  }\n\n  send(data) {\n    return this.consumer.send({command: \"message\", identifier: this.identifier, data: JSON.stringify(data)})\n  }\n\n  unsubscribe() {\n    return this.consumer.subscriptions.remove(this)\n  }\n}\n","import logger from \"./logger\"\n\n// Responsible for ensuring channel subscribe command is confirmed, retrying until confirmation is received.\n// Internal class, not intended for direct user manipulation.\n\nclass SubscriptionGuarantor {\n  constructor(subscriptions) {\n    this.subscriptions = subscriptions\n    this.pendingSubscriptions = []\n  }\n\n  guarantee(subscription) {\n    if(this.pendingSubscriptions.indexOf(subscription) == -1){ \n      logger.log(`SubscriptionGuarantor guaranteeing ${subscription.identifier}`)\n      this.pendingSubscriptions.push(subscription) \n    }\n    else {\n      logger.log(`SubscriptionGuarantor already guaranteeing ${subscription.identifier}`)\n    }\n    this.startGuaranteeing()\n  }\n\n  forget(subscription) {\n    logger.log(`SubscriptionGuarantor forgetting ${subscription.identifier}`)\n    this.pendingSubscriptions = (this.pendingSubscriptions.filter((s) => s !== subscription))\n  }\n\n  startGuaranteeing() {\n    this.stopGuaranteeing()\n    this.retrySubscribing()\n  }\n  \n  stopGuaranteeing() {\n    clearTimeout(this.retryTimeout)\n  }\n\n  retrySubscribing() {\n    this.retryTimeout = setTimeout(() => {\n      if (this.subscriptions && typeof(this.subscriptions.subscribe) === \"function\") {\n        this.pendingSubscriptions.map((subscription) => {\n          logger.log(`SubscriptionGuarantor resubscribing ${subscription.identifier}`)\n          this.subscriptions.subscribe(subscription)\n        })\n      }\n    }\n    , 500)\n  }\n}\n\nexport default SubscriptionGuarantor","import Subscription from \"./subscription\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport logger from \"./logger\"\n\n// Collection class for creating (and internally managing) channel subscriptions.\n// The only method intended to be triggered by the user is ActionCable.Subscriptions#create,\n// and it should be called through the consumer like so:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n\nexport default class Subscriptions {\n  constructor(consumer) {\n    this.consumer = consumer\n    this.guarantor = new SubscriptionGuarantor(this)\n    this.subscriptions = []\n  }\n\n  create(channelName, mixin) {\n    const channel = channelName\n    const params = typeof channel === \"object\" ? channel : {channel}\n    const subscription = new Subscription(this.consumer, params, mixin)\n    return this.add(subscription)\n  }\n\n  // Private\n\n  add(subscription) {\n    this.subscriptions.push(subscription)\n    this.consumer.ensureActiveConnection()\n    this.notify(subscription, \"initialized\")\n    this.subscribe(subscription)\n    return subscription\n  }\n\n  remove(subscription) {\n    this.forget(subscription)\n    if (!this.findAll(subscription.identifier).length) {\n      this.sendCommand(subscription, \"unsubscribe\")\n    }\n    return subscription\n  }\n\n  reject(identifier) {\n    return this.findAll(identifier).map((subscription) => {\n      this.forget(subscription)\n      this.notify(subscription, \"rejected\")\n      return subscription\n    })\n  }\n\n  forget(subscription) {\n    this.guarantor.forget(subscription)\n    this.subscriptions = (this.subscriptions.filter((s) => s !== subscription))\n    return subscription\n  }\n\n  findAll(identifier) {\n    return this.subscriptions.filter((s) => s.identifier === identifier)\n  }\n\n  reload() {\n    return this.subscriptions.map((subscription) =>\n      this.subscribe(subscription))\n  }\n\n  notifyAll(callbackName, ...args) {\n    return this.subscriptions.map((subscription) =>\n      this.notify(subscription, callbackName, ...args))\n  }\n\n  notify(subscription, callbackName, ...args) {\n    let subscriptions\n    if (typeof subscription === \"string\") {\n      subscriptions = this.findAll(subscription)\n    } else {\n      subscriptions = [subscription]\n    }\n\n    return subscriptions.map((subscription) =>\n      (typeof subscription[callbackName] === \"function\" ? subscription[callbackName](...args) : undefined))\n  }\n\n  subscribe(subscription) {\n    if (this.sendCommand(subscription, \"subscribe\")) {\n      this.guarantor.guarantee(subscription)\n    }\n  }\n\n  confirmSubscription(identifier) {\n    logger.log(`Subscription confirmed ${identifier}`)\n    this.findAll(identifier).map((subscription) =>\n      this.guarantor.forget(subscription))\n  }\n\n  sendCommand(subscription, command) {\n    const {identifier} = subscription\n    return this.consumer.send({command, identifier})\n  }\n}\n","import Connection from \"./connection\"\nimport Subscriptions from \"./subscriptions\"\n\n// The ActionCable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,\n// the ActionCable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.\n// The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription\n// method.\n//\n// The following example shows how this can be set up:\n//\n//   App = {}\n//   App.cable = ActionCable.createConsumer(\"ws://example.com/accounts/1\")\n//   App.appearance = App.cable.subscriptions.create(\"AppearanceChannel\")\n//\n// For more details on how you'd configure an actual channel subscription, see ActionCable.Subscription.\n//\n// When a consumer is created, it automatically connects with the server.\n//\n// To disconnect from the server, call\n//\n//   App.cable.disconnect()\n//\n// and to restart the connection:\n//\n//   App.cable.connect()\n//\n// Any channel subscriptions which existed prior to disconnecting will\n// automatically resubscribe.\n\nexport default class Consumer {\n  constructor(url) {\n    this._url = url\n    this.subscriptions = new Subscriptions(this)\n    this.connection = new Connection(this)\n    this.subprotocols = []\n  }\n\n  get url() {\n    return createWebSocketURL(this._url)\n  }\n\n  send(data) {\n    return this.connection.send(data)\n  }\n\n  connect() {\n    return this.connection.open()\n  }\n\n  disconnect() {\n    return this.connection.close({allowReconnect: false})\n  }\n\n  ensureActiveConnection() {\n    if (!this.connection.isActive()) {\n      return this.connection.open()\n    }\n  }\n\n  addSubProtocol(subprotocol) {\n    this.subprotocols = [...this.subprotocols, subprotocol]\n  }\n}\n\nexport function createWebSocketURL(url) {\n  if (typeof url === \"function\") {\n    url = url()\n  }\n\n  if (url && !/^wss?:/i.test(url)) {\n    const a = document.createElement(\"a\")\n    a.href = url\n    // Fix populating Location properties in IE. Otherwise, protocol will be blank.\n    a.href = a.href\n    a.protocol = a.protocol.replace(\"http\", \"ws\")\n    return a.href\n  } else {\n    return url\n  }\n}\n","import Connection from \"./connection\"\nimport ConnectionMonitor from \"./connection_monitor\"\nimport Consumer, { createWebSocketURL } from \"./consumer\"\nimport INTERNAL from \"./internal\"\nimport Subscription from \"./subscription\"\nimport Subscriptions from \"./subscriptions\"\nimport SubscriptionGuarantor from \"./subscription_guarantor\"\nimport adapters from \"./adapters\"\nimport logger from \"./logger\"\n\nexport {\n  Connection,\n  ConnectionMonitor,\n  Consumer,\n  INTERNAL,\n  Subscription,\n  Subscriptions,\n  SubscriptionGuarantor,\n  adapters,\n  createWebSocketURL,\n  logger,\n}\n\nexport function createConsumer(url = getConfig(\"url\") || INTERNAL.default_mount_path) {\n  return new Consumer(url)\n}\n\nexport function getConfig(name) {\n  const element = document.head.querySelector(`meta[name='action-cable-${name}']`)\n  if (element) {\n    return element.getAttribute(\"content\")\n  }\n}\n","\"use strict\";\nmodule.exports = function prettierBytes(input) {\n    if (typeof input !== 'number' || Number.isNaN(input)) {\n        throw new TypeError(`Expected a number, got ${typeof input}`);\n    }\n    const neg = input < 0;\n    let num = Math.abs(input);\n    if (neg) {\n        num = -num;\n    }\n    if (num === 0) {\n        return '0 B';\n    }\n    const units = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n    const exponent = Math.min(Math.floor(Math.log(num) / Math.log(1024)), units.length - 1);\n    const value = Number(num / 1024 ** exponent);\n    const unit = units[exponent];\n    return `${value >= 10 || value % 1 === 0 ? Math.round(value) : value.toFixed(1)} ${unit}`;\n};\n//# sourceMappingURL=prettierBytes.js.map","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n","module.exports = function isShallowEqual (a, b) {\n  if (a === b) return true\n  for (var i in a) if (!(i in b)) return false\n  for (var i in b) if (a[i] !== b[i]) return false\n  return true\n}\n","var root = require('./_root');\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nmodule.exports = Symbol;\n","var Symbol = require('./_Symbol'),\n    getRawTag = require('./_getRawTag'),\n    objectToString = require('./_objectToString');\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n    undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\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 */\nfunction 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\nmodule.exports = baseGetTag;\n","var trimmedEndIndex = require('./_trimmedEndIndex');\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\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 */\nfunction baseTrim(string) {\n  return string\n    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n    : string;\n}\n\nmodule.exports = baseTrim;\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nmodule.exports = freeGlobal;\n","var Symbol = require('./_Symbol');\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\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 */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\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 */\nfunction 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\nmodule.exports = getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\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 */\nvar nativeObjectToString = objectProto.toString;\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 */\nfunction objectToString(value) {\n  return nativeObjectToString.call(value);\n}\n\nmodule.exports = objectToString;\n","var freeGlobal = require('./_freeGlobal');\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nmodule.exports = root;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\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 */\nfunction trimmedEndIndex(string) {\n  var index = string.length;\n\n  while (index-- && reWhitespace.test(string.charAt(index))) {}\n  return index;\n}\n\nmodule.exports = trimmedEndIndex;\n","var isObject = require('./isObject'),\n    now = require('./now'),\n    toNumber = require('./toNumber');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/* Built-in method references for those with the same name as other `lodash` methods. */\nvar nativeMax = Math.max,\n    nativeMin = Math.min;\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 */\nfunction 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\nmodule.exports = debounce;\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 */\nfunction isObject(value) {\n  var type = typeof value;\n  return value != null && (type == 'object' || type == 'function');\n}\n\nmodule.exports = isObject;\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 */\nfunction isObjectLike(value) {\n  return value != null && typeof value == 'object';\n}\n\nmodule.exports = isObjectLike;\n","var baseGetTag = require('./_baseGetTag'),\n    isObjectLike = require('./isObjectLike');\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\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 */\nfunction isSymbol(value) {\n  return typeof value == 'symbol' ||\n    (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nmodule.exports = isSymbol;\n","var root = require('./_root');\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 */\nvar now = function() {\n  return root.Date.now();\n};\n\nmodule.exports = now;\n","var debounce = require('./debounce'),\n    isObject = require('./isObject');\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\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 */\nfunction 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\nmodule.exports = throttle;\n","var baseTrim = require('./_baseTrim'),\n    isObject = require('./isObject'),\n    isSymbol = require('./isSymbol');\n\n/** Used as references for various `Number` constants. */\nvar NAN = 0 / 0;\n\n/** Used to detect bad signed hexadecimal string values. */\nvar reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n\n/** Used to detect binary string values. */\nvar reIsBinary = /^0b[01]+$/i;\n\n/** Used to detect octal string values. */\nvar reIsOctal = /^0o[0-7]+$/i;\n\n/** Built-in method references without a dependency on `root`. */\nvar freeParseInt = parseInt;\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 */\nfunction 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\nmodule.exports = toNumber;\n","var wildcard = require('wildcard');\nvar reMimePartSplit = /[\\/\\+\\.]/;\n\n/**\n  # mime-match\n\n  A simple function to checker whether a target mime type matches a mime-type\n  pattern (e.g. image/jpeg matches image/jpeg OR image/*).\n\n  ## Example Usage\n\n  <<< example.js\n\n**/\nmodule.exports = function(target, pattern) {\n  function test(pattern) {\n    var result = wildcard(pattern, target, reMimePartSplit);\n\n    // ensure that we have a valid mime type (should have two parts)\n    return result && result.length >= 2;\n  }\n\n  return pattern ? test(pattern.split(';')[0]) : test;\n};\n","/**\n* Create an event emitter with namespaces\n* @name createNamespaceEmitter\n* @example\n* var emitter = require('./index')()\n*\n* emitter.on('*', function () {\n*   console.log('all events emitted', this.event)\n* })\n*\n* emitter.on('example', function () {\n*   console.log('example event emitted')\n* })\n*/\nmodule.exports = function createNamespaceEmitter () {\n  var emitter = {}\n  var _fns = emitter._fns = {}\n\n  /**\n  * Emit an event. Optionally namespace the event. Handlers are fired in the order in which they were added with exact matches taking precedence. Separate the namespace and event with a `:`\n  * @name emit\n  * @param {String} event – the name of the event, with optional namespace\n  * @param {...*} data – up to 6 arguments that are passed to the event listener\n  * @example\n  * emitter.emit('example')\n  * emitter.emit('demo:test')\n  * emitter.emit('data', { example: true}, 'a string', 1)\n  */\n  emitter.emit = function emit (event, arg1, arg2, arg3, arg4, arg5, arg6) {\n    var toEmit = getListeners(event)\n\n    if (toEmit.length) {\n      emitAll(event, toEmit, [arg1, arg2, arg3, arg4, arg5, arg6])\n    }\n  }\n\n  /**\n  * Create en event listener.\n  * @name on\n  * @param {String} event\n  * @param {Function} fn\n  * @example\n  * emitter.on('example', function () {})\n  * emitter.on('demo', function () {})\n  */\n  emitter.on = function on (event, fn) {\n    if (!_fns[event]) {\n      _fns[event] = []\n    }\n\n    _fns[event].push(fn)\n  }\n\n  /**\n  * Create en event listener that fires once.\n  * @name once\n  * @param {String} event\n  * @param {Function} fn\n  * @example\n  * emitter.once('example', function () {})\n  * emitter.once('demo', function () {})\n  */\n  emitter.once = function once (event, fn) {\n    function one () {\n      fn.apply(this, arguments)\n      emitter.off(event, one)\n    }\n    this.on(event, one)\n  }\n\n  /**\n  * Stop listening to an event. Stop all listeners on an event by only passing the event name. Stop a single listener by passing that event handler as a callback.\n  * You must be explicit about what will be unsubscribed: `emitter.off('demo')` will unsubscribe an `emitter.on('demo')` listener,\n  * `emitter.off('demo:example')` will unsubscribe an `emitter.on('demo:example')` listener\n  * @name off\n  * @param {String} event\n  * @param {Function} [fn] – the specific handler\n  * @example\n  * emitter.off('example')\n  * emitter.off('demo', function () {})\n  */\n  emitter.off = function off (event, fn) {\n    var keep = []\n\n    if (event && fn) {\n      var fns = this._fns[event]\n      var i = 0\n      var l = fns ? fns.length : 0\n\n      for (i; i < l; i++) {\n        if (fns[i] !== fn) {\n          keep.push(fns[i])\n        }\n      }\n    }\n\n    keep.length ? this._fns[event] = keep : delete this._fns[event]\n  }\n\n  function getListeners (e) {\n    var out = _fns[e] ? _fns[e] : []\n    var idx = e.indexOf(':')\n    var args = (idx === -1) ? [e] : [e.substring(0, idx), e.substring(idx + 1)]\n\n    var keys = Object.keys(_fns)\n    var i = 0\n    var l = keys.length\n\n    for (i; i < l; i++) {\n      var key = keys[i]\n      if (key === '*') {\n        out = out.concat(_fns[key])\n      }\n\n      if (args.length === 2 && args[0] === key) {\n        out = out.concat(_fns[key])\n        break\n      }\n    }\n\n    return out\n  }\n\n  function emitAll (e, fns, args) {\n    var i = 0\n    var l = fns.length\n\n    for (i; i < l; i++) {\n      if (!fns[i]) break\n      fns[i].event = e\n      fns[i].apply(fns[i], args)\n    }\n  }\n\n  return emitter\n}\n","/* jshint node: true */\n'use strict';\n\n/**\n  # wildcard\n\n  Very simple wildcard matching, which is designed to provide the same\n  functionality that is found in the\n  [eve](https://github.com/adobe-webplatform/eve) eventing library.\n\n  ## Usage\n\n  It works with strings:\n\n  <<< examples/strings.js\n\n  Arrays:\n\n  <<< examples/arrays.js\n\n  Objects (matching against keys):\n\n  <<< examples/objects.js\n\n  While the library works in Node, if you are are looking for file-based\n  wildcard matching then you should have a look at:\n\n  <https://github.com/isaacs/node-glob>\n**/\n\nfunction WildcardMatcher(text, separator) {\n  this.text = text = text || '';\n  this.hasWild = ~text.indexOf('*');\n  this.separator = separator;\n  this.parts = text.split(separator);\n}\n\nWildcardMatcher.prototype.match = function(input) {\n  var matches = true;\n  var parts = this.parts;\n  var ii;\n  var partsCount = parts.length;\n  var testParts;\n\n  if (typeof input == 'string' || input instanceof String) {\n    if (!this.hasWild && this.text != input) {\n      matches = false;\n    } else {\n      testParts = (input || '').split(this.separator);\n      for (ii = 0; matches && ii < partsCount; ii++) {\n        if (parts[ii] === '*')  {\n          continue;\n        } else if (ii < testParts.length) {\n          matches = parts[ii] === testParts[ii];\n        } else {\n          matches = false;\n        }\n      }\n\n      // If matches, then return the component parts\n      matches = matches && testParts;\n    }\n  }\n  else if (typeof input.splice == 'function') {\n    matches = [];\n\n    for (ii = input.length; ii--; ) {\n      if (this.match(input[ii])) {\n        matches[matches.length] = input[ii];\n      }\n    }\n  }\n  else if (typeof input == 'object') {\n    matches = {};\n\n    for (var key in input) {\n      if (this.match(key)) {\n        matches[key] = input[key];\n      }\n    }\n  }\n\n  return matches;\n};\n\nmodule.exports = function(text, test, separator) {\n  var matcher = new WildcardMatcher(text, separator || /[\\/\\.]/);\n  if (typeof test != 'undefined') {\n    return matcher.match(test);\n  }\n\n  return matcher;\n};\n","/*!\n\tCopyright (c) 2018 Jed Watson.\n\tLicensed under the MIT License (MIT), see\n\thttp://jedwatson.github.io/classnames\n*/\n/* global define */\n\n(function () {\n\t'use strict';\n\n\tvar hasOwn = {}.hasOwnProperty;\n\n\tfunction classNames () {\n\t\tvar classes = '';\n\n\t\tfor (var i = 0; i < arguments.length; i++) {\n\t\t\tvar arg = arguments[i];\n\t\t\tif (arg) {\n\t\t\t\tclasses = appendClass(classes, parseValue(arg));\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction parseValue (arg) {\n\t\tif (typeof arg === 'string' || typeof arg === 'number') {\n\t\t\treturn arg;\n\t\t}\n\n\t\tif (typeof arg !== 'object') {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (Array.isArray(arg)) {\n\t\t\treturn classNames.apply(null, arg);\n\t\t}\n\n\t\tif (arg.toString !== Object.prototype.toString && !arg.toString.toString().includes('[native code]')) {\n\t\t\treturn arg.toString();\n\t\t}\n\n\t\tvar classes = '';\n\n\t\tfor (var key in arg) {\n\t\t\tif (hasOwn.call(arg, key) && arg[key]) {\n\t\t\t\tclasses = appendClass(classes, key);\n\t\t\t}\n\t\t}\n\n\t\treturn classes;\n\t}\n\n\tfunction appendClass (value, newClass) {\n\t\tif (!newClass) {\n\t\t\treturn value;\n\t\t}\n\t\n\t\tif (value) {\n\t\t\treturn value + ' ' + newClass;\n\t\t}\n\t\n\t\treturn value + newClass;\n\t}\n\n\tif (typeof module !== 'undefined' && module.exports) {\n\t\tclassNames.default = classNames;\n\t\tmodule.exports = classNames;\n\t} else if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {\n\t\t// register as 'classnames', consistent with npm package name\n\t\tdefine('classnames', [], function () {\n\t\t\treturn classNames;\n\t\t});\n\t} else {\n\t\twindow.classNames = classNames;\n\t}\n}());\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }","/*\nTurbo 7.3.0\nCopyright © 2023 37signals LLC\n */\n(function () {\n    if (window.Reflect === undefined ||\n        window.customElements === undefined ||\n        window.customElements.polyfillWrapFlushCallback) {\n        return;\n    }\n    const BuiltInHTMLElement = HTMLElement;\n    const wrapperForTheName = {\n        HTMLElement: function HTMLElement() {\n            return Reflect.construct(BuiltInHTMLElement, [], this.constructor);\n        },\n    };\n    window.HTMLElement = wrapperForTheName[\"HTMLElement\"];\n    HTMLElement.prototype = BuiltInHTMLElement.prototype;\n    HTMLElement.prototype.constructor = HTMLElement;\n    Object.setPrototypeOf(HTMLElement, BuiltInHTMLElement);\n})();\n\n/**\n * The MIT License (MIT)\n * \n * Copyright (c) 2019 Javan Makhmali\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(function(prototype) {\n  if (typeof prototype.requestSubmit == \"function\") return\n\n  prototype.requestSubmit = function(submitter) {\n    if (submitter) {\n      validateSubmitter(submitter, this);\n      submitter.click();\n    } else {\n      submitter = document.createElement(\"input\");\n      submitter.type = \"submit\";\n      submitter.hidden = true;\n      this.appendChild(submitter);\n      submitter.click();\n      this.removeChild(submitter);\n    }\n  };\n\n  function validateSubmitter(submitter, form) {\n    submitter instanceof HTMLElement || raise(TypeError, \"parameter 1 is not of type 'HTMLElement'\");\n    submitter.type == \"submit\" || raise(TypeError, \"The specified element is not a submit button\");\n    submitter.form == form || raise(DOMException, \"The specified element is not owned by this form element\", \"NotFoundError\");\n  }\n\n  function raise(errorConstructor, message, name) {\n    throw new errorConstructor(\"Failed to execute 'requestSubmit' on 'HTMLFormElement': \" + message + \".\", name)\n  }\n})(HTMLFormElement.prototype);\n\nconst submittersByForm = new WeakMap();\nfunction findSubmitterFromClickTarget(target) {\n    const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n    const candidate = element ? element.closest(\"input, button\") : null;\n    return (candidate === null || candidate === void 0 ? void 0 : candidate.type) == \"submit\" ? candidate : null;\n}\nfunction clickCaptured(event) {\n    const submitter = findSubmitterFromClickTarget(event.target);\n    if (submitter && submitter.form) {\n        submittersByForm.set(submitter.form, submitter);\n    }\n}\n(function () {\n    if (\"submitter\" in Event.prototype)\n        return;\n    let prototype = window.Event.prototype;\n    if (\"SubmitEvent\" in window && /Apple Computer/.test(navigator.vendor)) {\n        prototype = window.SubmitEvent.prototype;\n    }\n    else if (\"SubmitEvent\" in window) {\n        return;\n    }\n    addEventListener(\"click\", clickCaptured, true);\n    Object.defineProperty(prototype, \"submitter\", {\n        get() {\n            if (this.type == \"submit\" && this.target instanceof HTMLFormElement) {\n                return submittersByForm.get(this.target);\n            }\n        },\n    });\n})();\n\nvar FrameLoadingStyle;\n(function (FrameLoadingStyle) {\n    FrameLoadingStyle[\"eager\"] = \"eager\";\n    FrameLoadingStyle[\"lazy\"] = \"lazy\";\n})(FrameLoadingStyle || (FrameLoadingStyle = {}));\nclass FrameElement extends HTMLElement {\n    static get observedAttributes() {\n        return [\"disabled\", \"complete\", \"loading\", \"src\"];\n    }\n    constructor() {\n        super();\n        this.loaded = Promise.resolve();\n        this.delegate = new FrameElement.delegateConstructor(this);\n    }\n    connectedCallback() {\n        this.delegate.connect();\n    }\n    disconnectedCallback() {\n        this.delegate.disconnect();\n    }\n    reload() {\n        return this.delegate.sourceURLReloaded();\n    }\n    attributeChangedCallback(name) {\n        if (name == \"loading\") {\n            this.delegate.loadingStyleChanged();\n        }\n        else if (name == \"complete\") {\n            this.delegate.completeChanged();\n        }\n        else if (name == \"src\") {\n            this.delegate.sourceURLChanged();\n        }\n        else {\n            this.delegate.disabledChanged();\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\");\n    }\n    set src(value) {\n        if (value) {\n            this.setAttribute(\"src\", value);\n        }\n        else {\n            this.removeAttribute(\"src\");\n        }\n    }\n    get loading() {\n        return frameLoadingStyleFromString(this.getAttribute(\"loading\") || \"\");\n    }\n    set loading(value) {\n        if (value) {\n            this.setAttribute(\"loading\", value);\n        }\n        else {\n            this.removeAttribute(\"loading\");\n        }\n    }\n    get disabled() {\n        return this.hasAttribute(\"disabled\");\n    }\n    set disabled(value) {\n        if (value) {\n            this.setAttribute(\"disabled\", \"\");\n        }\n        else {\n            this.removeAttribute(\"disabled\");\n        }\n    }\n    get autoscroll() {\n        return this.hasAttribute(\"autoscroll\");\n    }\n    set autoscroll(value) {\n        if (value) {\n            this.setAttribute(\"autoscroll\", \"\");\n        }\n        else {\n            this.removeAttribute(\"autoscroll\");\n        }\n    }\n    get complete() {\n        return !this.delegate.isLoading;\n    }\n    get isActive() {\n        return this.ownerDocument === document && !this.isPreview;\n    }\n    get isPreview() {\n        var _a, _b;\n        return (_b = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.documentElement) === null || _b === void 0 ? void 0 : _b.hasAttribute(\"data-turbo-preview\");\n    }\n}\nfunction frameLoadingStyleFromString(style) {\n    switch (style.toLowerCase()) {\n        case \"lazy\":\n            return FrameLoadingStyle.lazy;\n        default:\n            return FrameLoadingStyle.eager;\n    }\n}\n\nfunction expandURL(locatable) {\n    return new URL(locatable.toString(), document.baseURI);\n}\nfunction getAnchor(url) {\n    let anchorMatch;\n    if (url.hash) {\n        return url.hash.slice(1);\n    }\n    else if ((anchorMatch = url.href.match(/#(.*)$/))) {\n        return anchorMatch[1];\n    }\n}\nfunction getAction(form, submitter) {\n    const action = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formaction\")) || form.getAttribute(\"action\") || form.action;\n    return expandURL(action);\n}\nfunction getExtension(url) {\n    return (getLastPathComponent(url).match(/\\.[^.]*$/) || [])[0] || \"\";\n}\nfunction isHTML(url) {\n    return !!getExtension(url).match(/^(?:|\\.(?:htm|html|xhtml|php))$/);\n}\nfunction isPrefixedBy(baseURL, url) {\n    const prefix = getPrefix(url);\n    return baseURL.href === expandURL(prefix).href || baseURL.href.startsWith(prefix);\n}\nfunction locationIsVisitable(location, rootLocation) {\n    return isPrefixedBy(location, rootLocation) && isHTML(location);\n}\nfunction getRequestURL(url) {\n    const anchor = getAnchor(url);\n    return anchor != null ? url.href.slice(0, -(anchor.length + 1)) : url.href;\n}\nfunction toCacheKey(url) {\n    return getRequestURL(url);\n}\nfunction urlsAreEqual(left, right) {\n    return expandURL(left).href == expandURL(right).href;\n}\nfunction getPathComponents(url) {\n    return url.pathname.split(\"/\").slice(1);\n}\nfunction getLastPathComponent(url) {\n    return getPathComponents(url).slice(-1)[0];\n}\nfunction getPrefix(url) {\n    return addTrailingSlash(url.origin + url.pathname);\n}\nfunction addTrailingSlash(value) {\n    return value.endsWith(\"/\") ? value : value + \"/\";\n}\n\nclass FetchResponse {\n    constructor(response) {\n        this.response = response;\n    }\n    get succeeded() {\n        return this.response.ok;\n    }\n    get failed() {\n        return !this.succeeded;\n    }\n    get clientError() {\n        return this.statusCode >= 400 && this.statusCode <= 499;\n    }\n    get serverError() {\n        return this.statusCode >= 500 && this.statusCode <= 599;\n    }\n    get redirected() {\n        return this.response.redirected;\n    }\n    get location() {\n        return expandURL(this.response.url);\n    }\n    get isHTML() {\n        return this.contentType && this.contentType.match(/^(?:text\\/([^\\s;,]+\\b)?html|application\\/xhtml\\+xml)\\b/);\n    }\n    get statusCode() {\n        return this.response.status;\n    }\n    get contentType() {\n        return this.header(\"Content-Type\");\n    }\n    get responseText() {\n        return this.response.clone().text();\n    }\n    get responseHTML() {\n        if (this.isHTML) {\n            return this.response.clone().text();\n        }\n        else {\n            return Promise.resolve(undefined);\n        }\n    }\n    header(name) {\n        return this.response.headers.get(name);\n    }\n}\n\nfunction activateScriptElement(element) {\n    if (element.getAttribute(\"data-turbo-eval\") == \"false\") {\n        return element;\n    }\n    else {\n        const createdScriptElement = document.createElement(\"script\");\n        const cspNonce = getMetaContent(\"csp-nonce\");\n        if (cspNonce) {\n            createdScriptElement.nonce = cspNonce;\n        }\n        createdScriptElement.textContent = element.textContent;\n        createdScriptElement.async = false;\n        copyElementAttributes(createdScriptElement, element);\n        return createdScriptElement;\n    }\n}\nfunction copyElementAttributes(destinationElement, sourceElement) {\n    for (const { name, value } of sourceElement.attributes) {\n        destinationElement.setAttribute(name, value);\n    }\n}\nfunction createDocumentFragment(html) {\n    const template = document.createElement(\"template\");\n    template.innerHTML = html;\n    return template.content;\n}\nfunction dispatch(eventName, { target, cancelable, detail } = {}) {\n    const event = new CustomEvent(eventName, {\n        cancelable,\n        bubbles: true,\n        composed: true,\n        detail,\n    });\n    if (target && target.isConnected) {\n        target.dispatchEvent(event);\n    }\n    else {\n        document.documentElement.dispatchEvent(event);\n    }\n    return event;\n}\nfunction nextAnimationFrame() {\n    return new Promise((resolve) => requestAnimationFrame(() => resolve()));\n}\nfunction nextEventLoopTick() {\n    return new Promise((resolve) => setTimeout(() => resolve(), 0));\n}\nfunction nextMicrotask() {\n    return Promise.resolve();\n}\nfunction parseHTMLDocument(html = \"\") {\n    return new DOMParser().parseFromString(html, \"text/html\");\n}\nfunction unindent(strings, ...values) {\n    const lines = interpolate(strings, values).replace(/^\\n/, \"\").split(\"\\n\");\n    const match = lines[0].match(/^\\s+/);\n    const indent = match ? match[0].length : 0;\n    return lines.map((line) => line.slice(indent)).join(\"\\n\");\n}\nfunction interpolate(strings, values) {\n    return strings.reduce((result, string, i) => {\n        const value = values[i] == undefined ? \"\" : values[i];\n        return result + string + value;\n    }, \"\");\n}\nfunction uuid() {\n    return Array.from({ length: 36 })\n        .map((_, i) => {\n        if (i == 8 || i == 13 || i == 18 || i == 23) {\n            return \"-\";\n        }\n        else if (i == 14) {\n            return \"4\";\n        }\n        else if (i == 19) {\n            return (Math.floor(Math.random() * 4) + 8).toString(16);\n        }\n        else {\n            return Math.floor(Math.random() * 15).toString(16);\n        }\n    })\n        .join(\"\");\n}\nfunction getAttribute(attributeName, ...elements) {\n    for (const value of elements.map((element) => element === null || element === void 0 ? void 0 : element.getAttribute(attributeName))) {\n        if (typeof value == \"string\")\n            return value;\n    }\n    return null;\n}\nfunction hasAttribute(attributeName, ...elements) {\n    return elements.some((element) => element && element.hasAttribute(attributeName));\n}\nfunction markAsBusy(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.setAttribute(\"busy\", \"\");\n        }\n        element.setAttribute(\"aria-busy\", \"true\");\n    }\n}\nfunction clearBusyState(...elements) {\n    for (const element of elements) {\n        if (element.localName == \"turbo-frame\") {\n            element.removeAttribute(\"busy\");\n        }\n        element.removeAttribute(\"aria-busy\");\n    }\n}\nfunction waitForLoad(element, timeoutInMilliseconds = 2000) {\n    return new Promise((resolve) => {\n        const onComplete = () => {\n            element.removeEventListener(\"error\", onComplete);\n            element.removeEventListener(\"load\", onComplete);\n            resolve();\n        };\n        element.addEventListener(\"load\", onComplete, { once: true });\n        element.addEventListener(\"error\", onComplete, { once: true });\n        setTimeout(resolve, timeoutInMilliseconds);\n    });\n}\nfunction getHistoryMethodForAction(action) {\n    switch (action) {\n        case \"replace\":\n            return history.replaceState;\n        case \"advance\":\n        case \"restore\":\n            return history.pushState;\n    }\n}\nfunction isAction(action) {\n    return action == \"advance\" || action == \"replace\" || action == \"restore\";\n}\nfunction getVisitAction(...elements) {\n    const action = getAttribute(\"data-turbo-action\", ...elements);\n    return isAction(action) ? action : null;\n}\nfunction getMetaElement(name) {\n    return document.querySelector(`meta[name=\"${name}\"]`);\n}\nfunction getMetaContent(name) {\n    const element = getMetaElement(name);\n    return element && element.content;\n}\nfunction setMetaContent(name, content) {\n    let element = getMetaElement(name);\n    if (!element) {\n        element = document.createElement(\"meta\");\n        element.setAttribute(\"name\", name);\n        document.head.appendChild(element);\n    }\n    element.setAttribute(\"content\", content);\n    return element;\n}\nfunction findClosestRecursively(element, selector) {\n    var _a;\n    if (element instanceof Element) {\n        return (element.closest(selector) ||\n            findClosestRecursively(element.assignedSlot || ((_a = element.getRootNode()) === null || _a === void 0 ? void 0 : _a.host), selector));\n    }\n}\n\nvar FetchMethod;\n(function (FetchMethod) {\n    FetchMethod[FetchMethod[\"get\"] = 0] = \"get\";\n    FetchMethod[FetchMethod[\"post\"] = 1] = \"post\";\n    FetchMethod[FetchMethod[\"put\"] = 2] = \"put\";\n    FetchMethod[FetchMethod[\"patch\"] = 3] = \"patch\";\n    FetchMethod[FetchMethod[\"delete\"] = 4] = \"delete\";\n})(FetchMethod || (FetchMethod = {}));\nfunction fetchMethodFromString(method) {\n    switch (method.toLowerCase()) {\n        case \"get\":\n            return FetchMethod.get;\n        case \"post\":\n            return FetchMethod.post;\n        case \"put\":\n            return FetchMethod.put;\n        case \"patch\":\n            return FetchMethod.patch;\n        case \"delete\":\n            return FetchMethod.delete;\n    }\n}\nclass FetchRequest {\n    constructor(delegate, method, location, body = new URLSearchParams(), target = null) {\n        this.abortController = new AbortController();\n        this.resolveRequestPromise = (_value) => { };\n        this.delegate = delegate;\n        this.method = method;\n        this.headers = this.defaultHeaders;\n        this.body = body;\n        this.url = location;\n        this.target = target;\n    }\n    get location() {\n        return this.url;\n    }\n    get params() {\n        return this.url.searchParams;\n    }\n    get entries() {\n        return this.body ? Array.from(this.body.entries()) : [];\n    }\n    cancel() {\n        this.abortController.abort();\n    }\n    async perform() {\n        const { fetchOptions } = this;\n        this.delegate.prepareRequest(this);\n        await this.allowRequestToBeIntercepted(fetchOptions);\n        try {\n            this.delegate.requestStarted(this);\n            const response = await fetch(this.url.href, fetchOptions);\n            return await this.receive(response);\n        }\n        catch (error) {\n            if (error.name !== \"AbortError\") {\n                if (this.willDelegateErrorHandling(error)) {\n                    this.delegate.requestErrored(this, error);\n                }\n                throw error;\n            }\n        }\n        finally {\n            this.delegate.requestFinished(this);\n        }\n    }\n    async receive(response) {\n        const fetchResponse = new FetchResponse(response);\n        const event = dispatch(\"turbo:before-fetch-response\", {\n            cancelable: true,\n            detail: { fetchResponse },\n            target: this.target,\n        });\n        if (event.defaultPrevented) {\n            this.delegate.requestPreventedHandlingResponse(this, fetchResponse);\n        }\n        else if (fetchResponse.succeeded) {\n            this.delegate.requestSucceededWithResponse(this, fetchResponse);\n        }\n        else {\n            this.delegate.requestFailedWithResponse(this, fetchResponse);\n        }\n        return fetchResponse;\n    }\n    get fetchOptions() {\n        var _a;\n        return {\n            method: FetchMethod[this.method].toUpperCase(),\n            credentials: \"same-origin\",\n            headers: this.headers,\n            redirect: \"follow\",\n            body: this.isSafe ? null : this.body,\n            signal: this.abortSignal,\n            referrer: (_a = this.delegate.referrer) === null || _a === void 0 ? void 0 : _a.href,\n        };\n    }\n    get defaultHeaders() {\n        return {\n            Accept: \"text/html, application/xhtml+xml\",\n        };\n    }\n    get isSafe() {\n        return this.method === FetchMethod.get;\n    }\n    get abortSignal() {\n        return this.abortController.signal;\n    }\n    acceptResponseType(mimeType) {\n        this.headers[\"Accept\"] = [mimeType, this.headers[\"Accept\"]].join(\", \");\n    }\n    async allowRequestToBeIntercepted(fetchOptions) {\n        const requestInterception = new Promise((resolve) => (this.resolveRequestPromise = resolve));\n        const event = dispatch(\"turbo:before-fetch-request\", {\n            cancelable: true,\n            detail: {\n                fetchOptions,\n                url: this.url,\n                resume: this.resolveRequestPromise,\n            },\n            target: this.target,\n        });\n        if (event.defaultPrevented)\n            await requestInterception;\n    }\n    willDelegateErrorHandling(error) {\n        const event = dispatch(\"turbo:fetch-request-error\", {\n            target: this.target,\n            cancelable: true,\n            detail: { request: this, error: error },\n        });\n        return !event.defaultPrevented;\n    }\n}\n\nclass AppearanceObserver {\n    constructor(delegate, element) {\n        this.started = false;\n        this.intersect = (entries) => {\n            const lastEntry = entries.slice(-1)[0];\n            if (lastEntry === null || lastEntry === void 0 ? void 0 : lastEntry.isIntersecting) {\n                this.delegate.elementAppearedInViewport(this.element);\n            }\n        };\n        this.delegate = delegate;\n        this.element = element;\n        this.intersectionObserver = new IntersectionObserver(this.intersect);\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.intersectionObserver.observe(this.element);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.intersectionObserver.unobserve(this.element);\n        }\n    }\n}\n\nclass StreamMessage {\n    static wrap(message) {\n        if (typeof message == \"string\") {\n            return new this(createDocumentFragment(message));\n        }\n        else {\n            return message;\n        }\n    }\n    constructor(fragment) {\n        this.fragment = importStreamElements(fragment);\n    }\n}\nStreamMessage.contentType = \"text/vnd.turbo-stream.html\";\nfunction importStreamElements(fragment) {\n    for (const element of fragment.querySelectorAll(\"turbo-stream\")) {\n        const streamElement = document.importNode(element, true);\n        for (const inertScriptElement of streamElement.templateElement.content.querySelectorAll(\"script\")) {\n            inertScriptElement.replaceWith(activateScriptElement(inertScriptElement));\n        }\n        element.replaceWith(streamElement);\n    }\n    return fragment;\n}\n\nvar FormSubmissionState;\n(function (FormSubmissionState) {\n    FormSubmissionState[FormSubmissionState[\"initialized\"] = 0] = \"initialized\";\n    FormSubmissionState[FormSubmissionState[\"requesting\"] = 1] = \"requesting\";\n    FormSubmissionState[FormSubmissionState[\"waiting\"] = 2] = \"waiting\";\n    FormSubmissionState[FormSubmissionState[\"receiving\"] = 3] = \"receiving\";\n    FormSubmissionState[FormSubmissionState[\"stopping\"] = 4] = \"stopping\";\n    FormSubmissionState[FormSubmissionState[\"stopped\"] = 5] = \"stopped\";\n})(FormSubmissionState || (FormSubmissionState = {}));\nvar FormEnctype;\n(function (FormEnctype) {\n    FormEnctype[\"urlEncoded\"] = \"application/x-www-form-urlencoded\";\n    FormEnctype[\"multipart\"] = \"multipart/form-data\";\n    FormEnctype[\"plain\"] = \"text/plain\";\n})(FormEnctype || (FormEnctype = {}));\nfunction formEnctypeFromString(encoding) {\n    switch (encoding.toLowerCase()) {\n        case FormEnctype.multipart:\n            return FormEnctype.multipart;\n        case FormEnctype.plain:\n            return FormEnctype.plain;\n        default:\n            return FormEnctype.urlEncoded;\n    }\n}\nclass FormSubmission {\n    static confirmMethod(message, _element, _submitter) {\n        return Promise.resolve(confirm(message));\n    }\n    constructor(delegate, formElement, submitter, mustRedirect = false) {\n        this.state = FormSubmissionState.initialized;\n        this.delegate = delegate;\n        this.formElement = formElement;\n        this.submitter = submitter;\n        this.formData = buildFormData(formElement, submitter);\n        this.location = expandURL(this.action);\n        if (this.method == FetchMethod.get) {\n            mergeFormDataEntries(this.location, [...this.body.entries()]);\n        }\n        this.fetchRequest = new FetchRequest(this, this.method, this.location, this.body, this.formElement);\n        this.mustRedirect = mustRedirect;\n    }\n    get method() {\n        var _a;\n        const method = ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formmethod\")) || this.formElement.getAttribute(\"method\") || \"\";\n        return fetchMethodFromString(method.toLowerCase()) || FetchMethod.get;\n    }\n    get action() {\n        var _a;\n        const formElementAction = typeof this.formElement.action === \"string\" ? this.formElement.action : null;\n        if ((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"formaction\")) {\n            return this.submitter.getAttribute(\"formaction\") || \"\";\n        }\n        else {\n            return this.formElement.getAttribute(\"action\") || formElementAction || \"\";\n        }\n    }\n    get body() {\n        if (this.enctype == FormEnctype.urlEncoded || this.method == FetchMethod.get) {\n            return new URLSearchParams(this.stringFormData);\n        }\n        else {\n            return this.formData;\n        }\n    }\n    get enctype() {\n        var _a;\n        return formEnctypeFromString(((_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"formenctype\")) || this.formElement.enctype);\n    }\n    get isSafe() {\n        return this.fetchRequest.isSafe;\n    }\n    get stringFormData() {\n        return [...this.formData].reduce((entries, [name, value]) => {\n            return entries.concat(typeof value == \"string\" ? [[name, value]] : []);\n        }, []);\n    }\n    async start() {\n        const { initialized, requesting } = FormSubmissionState;\n        const confirmationMessage = getAttribute(\"data-turbo-confirm\", this.submitter, this.formElement);\n        if (typeof confirmationMessage === \"string\") {\n            const answer = await FormSubmission.confirmMethod(confirmationMessage, this.formElement, this.submitter);\n            if (!answer) {\n                return;\n            }\n        }\n        if (this.state == initialized) {\n            this.state = requesting;\n            return this.fetchRequest.perform();\n        }\n    }\n    stop() {\n        const { stopping, stopped } = FormSubmissionState;\n        if (this.state != stopping && this.state != stopped) {\n            this.state = stopping;\n            this.fetchRequest.cancel();\n            return true;\n        }\n    }\n    prepareRequest(request) {\n        if (!request.isSafe) {\n            const token = getCookieValue(getMetaContent(\"csrf-param\")) || getMetaContent(\"csrf-token\");\n            if (token) {\n                request.headers[\"X-CSRF-Token\"] = token;\n            }\n        }\n        if (this.requestAcceptsTurboStreamResponse(request)) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted(_request) {\n        var _a;\n        this.state = FormSubmissionState.waiting;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.setAttribute(\"disabled\", \"\");\n        this.setSubmitsWith();\n        dispatch(\"turbo:submit-start\", {\n            target: this.formElement,\n            detail: { formSubmission: this },\n        });\n        this.delegate.formSubmissionStarted(this);\n    }\n    requestPreventedHandlingResponse(request, response) {\n        this.result = { success: response.succeeded, fetchResponse: response };\n    }\n    requestSucceededWithResponse(request, response) {\n        if (response.clientError || response.serverError) {\n            this.delegate.formSubmissionFailedWithResponse(this, response);\n        }\n        else if (this.requestMustRedirect(request) && responseSucceededWithoutRedirect(response)) {\n            const error = new Error(\"Form responses must redirect to another location\");\n            this.delegate.formSubmissionErrored(this, error);\n        }\n        else {\n            this.state = FormSubmissionState.receiving;\n            this.result = { success: true, fetchResponse: response };\n            this.delegate.formSubmissionSucceededWithResponse(this, response);\n        }\n    }\n    requestFailedWithResponse(request, response) {\n        this.result = { success: false, fetchResponse: response };\n        this.delegate.formSubmissionFailedWithResponse(this, response);\n    }\n    requestErrored(request, error) {\n        this.result = { success: false, error };\n        this.delegate.formSubmissionErrored(this, error);\n    }\n    requestFinished(_request) {\n        var _a;\n        this.state = FormSubmissionState.stopped;\n        (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.removeAttribute(\"disabled\");\n        this.resetSubmitterText();\n        dispatch(\"turbo:submit-end\", {\n            target: this.formElement,\n            detail: Object.assign({ formSubmission: this }, this.result),\n        });\n        this.delegate.formSubmissionFinished(this);\n    }\n    setSubmitsWith() {\n        if (!this.submitter || !this.submitsWith)\n            return;\n        if (this.submitter.matches(\"button\")) {\n            this.originalSubmitText = this.submitter.innerHTML;\n            this.submitter.innerHTML = this.submitsWith;\n        }\n        else if (this.submitter.matches(\"input\")) {\n            const input = this.submitter;\n            this.originalSubmitText = input.value;\n            input.value = this.submitsWith;\n        }\n    }\n    resetSubmitterText() {\n        if (!this.submitter || !this.originalSubmitText)\n            return;\n        if (this.submitter.matches(\"button\")) {\n            this.submitter.innerHTML = this.originalSubmitText;\n        }\n        else if (this.submitter.matches(\"input\")) {\n            const input = this.submitter;\n            input.value = this.originalSubmitText;\n        }\n    }\n    requestMustRedirect(request) {\n        return !request.isSafe && this.mustRedirect;\n    }\n    requestAcceptsTurboStreamResponse(request) {\n        return !request.isSafe || hasAttribute(\"data-turbo-stream\", this.submitter, this.formElement);\n    }\n    get submitsWith() {\n        var _a;\n        return (_a = this.submitter) === null || _a === void 0 ? void 0 : _a.getAttribute(\"data-turbo-submits-with\");\n    }\n}\nfunction buildFormData(formElement, submitter) {\n    const formData = new FormData(formElement);\n    const name = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"name\");\n    const value = submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"value\");\n    if (name) {\n        formData.append(name, value || \"\");\n    }\n    return formData;\n}\nfunction getCookieValue(cookieName) {\n    if (cookieName != null) {\n        const cookies = document.cookie ? document.cookie.split(\"; \") : [];\n        const cookie = cookies.find((cookie) => cookie.startsWith(cookieName));\n        if (cookie) {\n            const value = cookie.split(\"=\").slice(1).join(\"=\");\n            return value ? decodeURIComponent(value) : undefined;\n        }\n    }\n}\nfunction responseSucceededWithoutRedirect(response) {\n    return response.statusCode == 200 && !response.redirected;\n}\nfunction mergeFormDataEntries(url, entries) {\n    const searchParams = new URLSearchParams();\n    for (const [name, value] of entries) {\n        if (value instanceof File)\n            continue;\n        searchParams.append(name, value);\n    }\n    url.search = searchParams.toString();\n    return url;\n}\n\nclass Snapshot {\n    constructor(element) {\n        this.element = element;\n    }\n    get activeElement() {\n        return this.element.ownerDocument.activeElement;\n    }\n    get children() {\n        return [...this.element.children];\n    }\n    hasAnchor(anchor) {\n        return this.getElementForAnchor(anchor) != null;\n    }\n    getElementForAnchor(anchor) {\n        return anchor ? this.element.querySelector(`[id='${anchor}'], a[name='${anchor}']`) : null;\n    }\n    get isConnected() {\n        return this.element.isConnected;\n    }\n    get firstAutofocusableElement() {\n        const inertDisabledOrHidden = \"[inert], :disabled, [hidden], details:not([open]), dialog:not([open])\";\n        for (const element of this.element.querySelectorAll(\"[autofocus]\")) {\n            if (element.closest(inertDisabledOrHidden) == null)\n                return element;\n            else\n                continue;\n        }\n        return null;\n    }\n    get permanentElements() {\n        return queryPermanentElementsAll(this.element);\n    }\n    getPermanentElementById(id) {\n        return getPermanentElementById(this.element, id);\n    }\n    getPermanentElementMapForSnapshot(snapshot) {\n        const permanentElementMap = {};\n        for (const currentPermanentElement of this.permanentElements) {\n            const { id } = currentPermanentElement;\n            const newPermanentElement = snapshot.getPermanentElementById(id);\n            if (newPermanentElement) {\n                permanentElementMap[id] = [currentPermanentElement, newPermanentElement];\n            }\n        }\n        return permanentElementMap;\n    }\n}\nfunction getPermanentElementById(node, id) {\n    return node.querySelector(`#${id}[data-turbo-permanent]`);\n}\nfunction queryPermanentElementsAll(node) {\n    return node.querySelectorAll(\"[id][data-turbo-permanent]\");\n}\n\nclass FormSubmitObserver {\n    constructor(delegate, eventTarget) {\n        this.started = false;\n        this.submitCaptured = () => {\n            this.eventTarget.removeEventListener(\"submit\", this.submitBubbled, false);\n            this.eventTarget.addEventListener(\"submit\", this.submitBubbled, false);\n        };\n        this.submitBubbled = ((event) => {\n            if (!event.defaultPrevented) {\n                const form = event.target instanceof HTMLFormElement ? event.target : undefined;\n                const submitter = event.submitter || undefined;\n                if (form &&\n                    submissionDoesNotDismissDialog(form, submitter) &&\n                    submissionDoesNotTargetIFrame(form, submitter) &&\n                    this.delegate.willSubmitForm(form, submitter)) {\n                    event.preventDefault();\n                    event.stopImmediatePropagation();\n                    this.delegate.formSubmitted(form, submitter);\n                }\n            }\n        });\n        this.delegate = delegate;\n        this.eventTarget = eventTarget;\n    }\n    start() {\n        if (!this.started) {\n            this.eventTarget.addEventListener(\"submit\", this.submitCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.eventTarget.removeEventListener(\"submit\", this.submitCaptured, true);\n            this.started = false;\n        }\n    }\n}\nfunction submissionDoesNotDismissDialog(form, submitter) {\n    const method = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formmethod\")) || form.getAttribute(\"method\");\n    return method != \"dialog\";\n}\nfunction submissionDoesNotTargetIFrame(form, submitter) {\n    if ((submitter === null || submitter === void 0 ? void 0 : submitter.hasAttribute(\"formtarget\")) || form.hasAttribute(\"target\")) {\n        const target = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"formtarget\")) || form.target;\n        for (const element of document.getElementsByName(target)) {\n            if (element instanceof HTMLIFrameElement)\n                return false;\n        }\n        return true;\n    }\n    else {\n        return true;\n    }\n}\n\nclass View {\n    constructor(delegate, element) {\n        this.resolveRenderPromise = (_value) => { };\n        this.resolveInterceptionPromise = (_value) => { };\n        this.delegate = delegate;\n        this.element = element;\n    }\n    scrollToAnchor(anchor) {\n        const element = this.snapshot.getElementForAnchor(anchor);\n        if (element) {\n            this.scrollToElement(element);\n            this.focusElement(element);\n        }\n        else {\n            this.scrollToPosition({ x: 0, y: 0 });\n        }\n    }\n    scrollToAnchorFromLocation(location) {\n        this.scrollToAnchor(getAnchor(location));\n    }\n    scrollToElement(element) {\n        element.scrollIntoView();\n    }\n    focusElement(element) {\n        if (element instanceof HTMLElement) {\n            if (element.hasAttribute(\"tabindex\")) {\n                element.focus();\n            }\n            else {\n                element.setAttribute(\"tabindex\", \"-1\");\n                element.focus();\n                element.removeAttribute(\"tabindex\");\n            }\n        }\n    }\n    scrollToPosition({ x, y }) {\n        this.scrollRoot.scrollTo(x, y);\n    }\n    scrollToTop() {\n        this.scrollToPosition({ x: 0, y: 0 });\n    }\n    get scrollRoot() {\n        return window;\n    }\n    async render(renderer) {\n        const { isPreview, shouldRender, newSnapshot: snapshot } = renderer;\n        if (shouldRender) {\n            try {\n                this.renderPromise = new Promise((resolve) => (this.resolveRenderPromise = resolve));\n                this.renderer = renderer;\n                await this.prepareToRenderSnapshot(renderer);\n                const renderInterception = new Promise((resolve) => (this.resolveInterceptionPromise = resolve));\n                const options = { resume: this.resolveInterceptionPromise, render: this.renderer.renderElement };\n                const immediateRender = this.delegate.allowsImmediateRender(snapshot, options);\n                if (!immediateRender)\n                    await renderInterception;\n                await this.renderSnapshot(renderer);\n                this.delegate.viewRenderedSnapshot(snapshot, isPreview);\n                this.delegate.preloadOnLoadLinksForView(this.element);\n                this.finishRenderingSnapshot(renderer);\n            }\n            finally {\n                delete this.renderer;\n                this.resolveRenderPromise(undefined);\n                delete this.renderPromise;\n            }\n        }\n        else {\n            this.invalidate(renderer.reloadReason);\n        }\n    }\n    invalidate(reason) {\n        this.delegate.viewInvalidated(reason);\n    }\n    async prepareToRenderSnapshot(renderer) {\n        this.markAsPreview(renderer.isPreview);\n        await renderer.prepareToRender();\n    }\n    markAsPreview(isPreview) {\n        if (isPreview) {\n            this.element.setAttribute(\"data-turbo-preview\", \"\");\n        }\n        else {\n            this.element.removeAttribute(\"data-turbo-preview\");\n        }\n    }\n    async renderSnapshot(renderer) {\n        await renderer.render();\n    }\n    finishRenderingSnapshot(renderer) {\n        renderer.finishRendering();\n    }\n}\n\nclass FrameView extends View {\n    missing() {\n        this.element.innerHTML = `<strong class=\"turbo-frame-error\">Content missing</strong>`;\n    }\n    get snapshot() {\n        return new Snapshot(this.element);\n    }\n}\n\nclass LinkInterceptor {\n    constructor(delegate, element) {\n        this.clickBubbled = (event) => {\n            if (this.respondsToEventTarget(event.target)) {\n                this.clickEvent = event;\n            }\n            else {\n                delete this.clickEvent;\n            }\n        };\n        this.linkClicked = ((event) => {\n            if (this.clickEvent && this.respondsToEventTarget(event.target) && event.target instanceof Element) {\n                if (this.delegate.shouldInterceptLinkClick(event.target, event.detail.url, event.detail.originalEvent)) {\n                    this.clickEvent.preventDefault();\n                    event.preventDefault();\n                    this.delegate.linkClickIntercepted(event.target, event.detail.url, event.detail.originalEvent);\n                }\n            }\n            delete this.clickEvent;\n        });\n        this.willVisit = ((_event) => {\n            delete this.clickEvent;\n        });\n        this.delegate = delegate;\n        this.element = element;\n    }\n    start() {\n        this.element.addEventListener(\"click\", this.clickBubbled);\n        document.addEventListener(\"turbo:click\", this.linkClicked);\n        document.addEventListener(\"turbo:before-visit\", this.willVisit);\n    }\n    stop() {\n        this.element.removeEventListener(\"click\", this.clickBubbled);\n        document.removeEventListener(\"turbo:click\", this.linkClicked);\n        document.removeEventListener(\"turbo:before-visit\", this.willVisit);\n    }\n    respondsToEventTarget(target) {\n        const element = target instanceof Element ? target : target instanceof Node ? target.parentElement : null;\n        return element && element.closest(\"turbo-frame, html\") == this.element;\n    }\n}\n\nclass LinkClickObserver {\n    constructor(delegate, eventTarget) {\n        this.started = false;\n        this.clickCaptured = () => {\n            this.eventTarget.removeEventListener(\"click\", this.clickBubbled, false);\n            this.eventTarget.addEventListener(\"click\", this.clickBubbled, false);\n        };\n        this.clickBubbled = (event) => {\n            if (event instanceof MouseEvent && this.clickEventIsSignificant(event)) {\n                const target = (event.composedPath && event.composedPath()[0]) || event.target;\n                const link = this.findLinkFromClickTarget(target);\n                if (link && doesNotTargetIFrame(link)) {\n                    const location = this.getLocationForLink(link);\n                    if (this.delegate.willFollowLinkToLocation(link, location, event)) {\n                        event.preventDefault();\n                        this.delegate.followedLinkToLocation(link, location);\n                    }\n                }\n            }\n        };\n        this.delegate = delegate;\n        this.eventTarget = eventTarget;\n    }\n    start() {\n        if (!this.started) {\n            this.eventTarget.addEventListener(\"click\", this.clickCaptured, true);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.eventTarget.removeEventListener(\"click\", this.clickCaptured, true);\n            this.started = false;\n        }\n    }\n    clickEventIsSignificant(event) {\n        return !((event.target && event.target.isContentEditable) ||\n            event.defaultPrevented ||\n            event.which > 1 ||\n            event.altKey ||\n            event.ctrlKey ||\n            event.metaKey ||\n            event.shiftKey);\n    }\n    findLinkFromClickTarget(target) {\n        return findClosestRecursively(target, \"a[href]:not([target^=_]):not([download])\");\n    }\n    getLocationForLink(link) {\n        return expandURL(link.getAttribute(\"href\") || \"\");\n    }\n}\nfunction doesNotTargetIFrame(anchor) {\n    if (anchor.hasAttribute(\"target\")) {\n        for (const element of document.getElementsByName(anchor.target)) {\n            if (element instanceof HTMLIFrameElement)\n                return false;\n        }\n        return true;\n    }\n    else {\n        return true;\n    }\n}\n\nclass FormLinkClickObserver {\n    constructor(delegate, element) {\n        this.delegate = delegate;\n        this.linkInterceptor = new LinkClickObserver(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n    }\n    willFollowLinkToLocation(link, location, originalEvent) {\n        return (this.delegate.willSubmitFormLinkToLocation(link, location, originalEvent) &&\n            link.hasAttribute(\"data-turbo-method\"));\n    }\n    followedLinkToLocation(link, location) {\n        const form = document.createElement(\"form\");\n        const type = \"hidden\";\n        for (const [name, value] of location.searchParams) {\n            form.append(Object.assign(document.createElement(\"input\"), { type, name, value }));\n        }\n        const action = Object.assign(location, { search: \"\" });\n        form.setAttribute(\"data-turbo\", \"true\");\n        form.setAttribute(\"action\", action.href);\n        form.setAttribute(\"hidden\", \"\");\n        const method = link.getAttribute(\"data-turbo-method\");\n        if (method)\n            form.setAttribute(\"method\", method);\n        const turboFrame = link.getAttribute(\"data-turbo-frame\");\n        if (turboFrame)\n            form.setAttribute(\"data-turbo-frame\", turboFrame);\n        const turboAction = getVisitAction(link);\n        if (turboAction)\n            form.setAttribute(\"data-turbo-action\", turboAction);\n        const turboConfirm = link.getAttribute(\"data-turbo-confirm\");\n        if (turboConfirm)\n            form.setAttribute(\"data-turbo-confirm\", turboConfirm);\n        const turboStream = link.hasAttribute(\"data-turbo-stream\");\n        if (turboStream)\n            form.setAttribute(\"data-turbo-stream\", \"\");\n        this.delegate.submittedFormLinkToLocation(link, location, form);\n        document.body.appendChild(form);\n        form.addEventListener(\"turbo:submit-end\", () => form.remove(), { once: true });\n        requestAnimationFrame(() => form.requestSubmit());\n    }\n}\n\nclass Bardo {\n    static async preservingPermanentElements(delegate, permanentElementMap, callback) {\n        const bardo = new this(delegate, permanentElementMap);\n        bardo.enter();\n        await callback();\n        bardo.leave();\n    }\n    constructor(delegate, permanentElementMap) {\n        this.delegate = delegate;\n        this.permanentElementMap = permanentElementMap;\n    }\n    enter() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement, newPermanentElement] = this.permanentElementMap[id];\n            this.delegate.enteringBardo(currentPermanentElement, newPermanentElement);\n            this.replaceNewPermanentElementWithPlaceholder(newPermanentElement);\n        }\n    }\n    leave() {\n        for (const id in this.permanentElementMap) {\n            const [currentPermanentElement] = this.permanentElementMap[id];\n            this.replaceCurrentPermanentElementWithClone(currentPermanentElement);\n            this.replacePlaceholderWithPermanentElement(currentPermanentElement);\n            this.delegate.leavingBardo(currentPermanentElement);\n        }\n    }\n    replaceNewPermanentElementWithPlaceholder(permanentElement) {\n        const placeholder = createPlaceholderForPermanentElement(permanentElement);\n        permanentElement.replaceWith(placeholder);\n    }\n    replaceCurrentPermanentElementWithClone(permanentElement) {\n        const clone = permanentElement.cloneNode(true);\n        permanentElement.replaceWith(clone);\n    }\n    replacePlaceholderWithPermanentElement(permanentElement) {\n        const placeholder = this.getPlaceholderById(permanentElement.id);\n        placeholder === null || placeholder === void 0 ? void 0 : placeholder.replaceWith(permanentElement);\n    }\n    getPlaceholderById(id) {\n        return this.placeholders.find((element) => element.content == id);\n    }\n    get placeholders() {\n        return [...document.querySelectorAll(\"meta[name=turbo-permanent-placeholder][content]\")];\n    }\n}\nfunction createPlaceholderForPermanentElement(permanentElement) {\n    const element = document.createElement(\"meta\");\n    element.setAttribute(\"name\", \"turbo-permanent-placeholder\");\n    element.setAttribute(\"content\", permanentElement.id);\n    return element;\n}\n\nclass Renderer {\n    constructor(currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n        this.activeElement = null;\n        this.currentSnapshot = currentSnapshot;\n        this.newSnapshot = newSnapshot;\n        this.isPreview = isPreview;\n        this.willRender = willRender;\n        this.renderElement = renderElement;\n        this.promise = new Promise((resolve, reject) => (this.resolvingFunctions = { resolve, reject }));\n    }\n    get shouldRender() {\n        return true;\n    }\n    get reloadReason() {\n        return;\n    }\n    prepareToRender() {\n        return;\n    }\n    finishRendering() {\n        if (this.resolvingFunctions) {\n            this.resolvingFunctions.resolve();\n            delete this.resolvingFunctions;\n        }\n    }\n    async preservingPermanentElements(callback) {\n        await Bardo.preservingPermanentElements(this, this.permanentElementMap, callback);\n    }\n    focusFirstAutofocusableElement() {\n        const element = this.connectedSnapshot.firstAutofocusableElement;\n        if (elementIsFocusable(element)) {\n            element.focus();\n        }\n    }\n    enteringBardo(currentPermanentElement) {\n        if (this.activeElement)\n            return;\n        if (currentPermanentElement.contains(this.currentSnapshot.activeElement)) {\n            this.activeElement = this.currentSnapshot.activeElement;\n        }\n    }\n    leavingBardo(currentPermanentElement) {\n        if (currentPermanentElement.contains(this.activeElement) && this.activeElement instanceof HTMLElement) {\n            this.activeElement.focus();\n            this.activeElement = null;\n        }\n    }\n    get connectedSnapshot() {\n        return this.newSnapshot.isConnected ? this.newSnapshot : this.currentSnapshot;\n    }\n    get currentElement() {\n        return this.currentSnapshot.element;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    get permanentElementMap() {\n        return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot);\n    }\n}\nfunction elementIsFocusable(element) {\n    return element && typeof element.focus == \"function\";\n}\n\nclass FrameRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        var _a;\n        const destinationRange = document.createRange();\n        destinationRange.selectNodeContents(currentElement);\n        destinationRange.deleteContents();\n        const frameElement = newElement;\n        const sourceRange = (_a = frameElement.ownerDocument) === null || _a === void 0 ? void 0 : _a.createRange();\n        if (sourceRange) {\n            sourceRange.selectNodeContents(frameElement);\n            currentElement.appendChild(sourceRange.extractContents());\n        }\n    }\n    constructor(delegate, currentSnapshot, newSnapshot, renderElement, isPreview, willRender = true) {\n        super(currentSnapshot, newSnapshot, renderElement, isPreview, willRender);\n        this.delegate = delegate;\n    }\n    get shouldRender() {\n        return true;\n    }\n    async render() {\n        await nextAnimationFrame();\n        this.preservingPermanentElements(() => {\n            this.loadFrameElement();\n        });\n        this.scrollFrameIntoView();\n        await nextAnimationFrame();\n        this.focusFirstAutofocusableElement();\n        await nextAnimationFrame();\n        this.activateScriptElements();\n    }\n    loadFrameElement() {\n        this.delegate.willRenderFrame(this.currentElement, this.newElement);\n        this.renderElement(this.currentElement, this.newElement);\n    }\n    scrollFrameIntoView() {\n        if (this.currentElement.autoscroll || this.newElement.autoscroll) {\n            const element = this.currentElement.firstElementChild;\n            const block = readScrollLogicalPosition(this.currentElement.getAttribute(\"data-autoscroll-block\"), \"end\");\n            const behavior = readScrollBehavior(this.currentElement.getAttribute(\"data-autoscroll-behavior\"), \"auto\");\n            if (element) {\n                element.scrollIntoView({ block, behavior });\n                return true;\n            }\n        }\n        return false;\n    }\n    activateScriptElements() {\n        for (const inertScriptElement of this.newScriptElements) {\n            const activatedScriptElement = activateScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    get newScriptElements() {\n        return this.currentElement.querySelectorAll(\"script\");\n    }\n}\nfunction readScrollLogicalPosition(value, defaultValue) {\n    if (value == \"end\" || value == \"start\" || value == \"center\" || value == \"nearest\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\nfunction readScrollBehavior(value, defaultValue) {\n    if (value == \"auto\" || value == \"smooth\") {\n        return value;\n    }\n    else {\n        return defaultValue;\n    }\n}\n\nclass ProgressBar {\n    static get defaultCSS() {\n        return unindent `\n      .turbo-progress-bar {\n        position: fixed;\n        display: block;\n        top: 0;\n        left: 0;\n        height: 3px;\n        background: #0076ff;\n        z-index: 2147483647;\n        transition:\n          width ${ProgressBar.animationDuration}ms ease-out,\n          opacity ${ProgressBar.animationDuration / 2}ms ${ProgressBar.animationDuration / 2}ms ease-in;\n        transform: translate3d(0, 0, 0);\n      }\n    `;\n    }\n    constructor() {\n        this.hiding = false;\n        this.value = 0;\n        this.visible = false;\n        this.trickle = () => {\n            this.setValue(this.value + Math.random() / 100);\n        };\n        this.stylesheetElement = this.createStylesheetElement();\n        this.progressElement = this.createProgressElement();\n        this.installStylesheetElement();\n        this.setValue(0);\n    }\n    show() {\n        if (!this.visible) {\n            this.visible = true;\n            this.installProgressElement();\n            this.startTrickling();\n        }\n    }\n    hide() {\n        if (this.visible && !this.hiding) {\n            this.hiding = true;\n            this.fadeProgressElement(() => {\n                this.uninstallProgressElement();\n                this.stopTrickling();\n                this.visible = false;\n                this.hiding = false;\n            });\n        }\n    }\n    setValue(value) {\n        this.value = value;\n        this.refresh();\n    }\n    installStylesheetElement() {\n        document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n    }\n    installProgressElement() {\n        this.progressElement.style.width = \"0\";\n        this.progressElement.style.opacity = \"1\";\n        document.documentElement.insertBefore(this.progressElement, document.body);\n        this.refresh();\n    }\n    fadeProgressElement(callback) {\n        this.progressElement.style.opacity = \"0\";\n        setTimeout(callback, ProgressBar.animationDuration * 1.5);\n    }\n    uninstallProgressElement() {\n        if (this.progressElement.parentNode) {\n            document.documentElement.removeChild(this.progressElement);\n        }\n    }\n    startTrickling() {\n        if (!this.trickleInterval) {\n            this.trickleInterval = window.setInterval(this.trickle, ProgressBar.animationDuration);\n        }\n    }\n    stopTrickling() {\n        window.clearInterval(this.trickleInterval);\n        delete this.trickleInterval;\n    }\n    refresh() {\n        requestAnimationFrame(() => {\n            this.progressElement.style.width = `${10 + this.value * 90}%`;\n        });\n    }\n    createStylesheetElement() {\n        const element = document.createElement(\"style\");\n        element.type = \"text/css\";\n        element.textContent = ProgressBar.defaultCSS;\n        if (this.cspNonce) {\n            element.nonce = this.cspNonce;\n        }\n        return element;\n    }\n    createProgressElement() {\n        const element = document.createElement(\"div\");\n        element.className = \"turbo-progress-bar\";\n        return element;\n    }\n    get cspNonce() {\n        return getMetaContent(\"csp-nonce\");\n    }\n}\nProgressBar.animationDuration = 300;\n\nclass HeadSnapshot extends Snapshot {\n    constructor() {\n        super(...arguments);\n        this.detailsByOuterHTML = this.children\n            .filter((element) => !elementIsNoscript(element))\n            .map((element) => elementWithoutNonce(element))\n            .reduce((result, element) => {\n            const { outerHTML } = element;\n            const details = outerHTML in result\n                ? result[outerHTML]\n                : {\n                    type: elementType(element),\n                    tracked: elementIsTracked(element),\n                    elements: [],\n                };\n            return Object.assign(Object.assign({}, result), { [outerHTML]: Object.assign(Object.assign({}, details), { elements: [...details.elements, element] }) });\n        }, {});\n    }\n    get trackedElementSignature() {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter((outerHTML) => this.detailsByOuterHTML[outerHTML].tracked)\n            .join(\"\");\n    }\n    getScriptElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"script\", snapshot);\n    }\n    getStylesheetElementsNotInSnapshot(snapshot) {\n        return this.getElementsMatchingTypeNotInSnapshot(\"stylesheet\", snapshot);\n    }\n    getElementsMatchingTypeNotInSnapshot(matchedType, snapshot) {\n        return Object.keys(this.detailsByOuterHTML)\n            .filter((outerHTML) => !(outerHTML in snapshot.detailsByOuterHTML))\n            .map((outerHTML) => this.detailsByOuterHTML[outerHTML])\n            .filter(({ type }) => type == matchedType)\n            .map(({ elements: [element] }) => element);\n    }\n    get provisionalElements() {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { type, tracked, elements } = this.detailsByOuterHTML[outerHTML];\n            if (type == null && !tracked) {\n                return [...result, ...elements];\n            }\n            else if (elements.length > 1) {\n                return [...result, ...elements.slice(1)];\n            }\n            else {\n                return result;\n            }\n        }, []);\n    }\n    getMetaValue(name) {\n        const element = this.findMetaElementByName(name);\n        return element ? element.getAttribute(\"content\") : null;\n    }\n    findMetaElementByName(name) {\n        return Object.keys(this.detailsByOuterHTML).reduce((result, outerHTML) => {\n            const { elements: [element], } = this.detailsByOuterHTML[outerHTML];\n            return elementIsMetaElementWithName(element, name) ? element : result;\n        }, undefined);\n    }\n}\nfunction elementType(element) {\n    if (elementIsScript(element)) {\n        return \"script\";\n    }\n    else if (elementIsStylesheet(element)) {\n        return \"stylesheet\";\n    }\n}\nfunction elementIsTracked(element) {\n    return element.getAttribute(\"data-turbo-track\") == \"reload\";\n}\nfunction elementIsScript(element) {\n    const tagName = element.localName;\n    return tagName == \"script\";\n}\nfunction elementIsNoscript(element) {\n    const tagName = element.localName;\n    return tagName == \"noscript\";\n}\nfunction elementIsStylesheet(element) {\n    const tagName = element.localName;\n    return tagName == \"style\" || (tagName == \"link\" && element.getAttribute(\"rel\") == \"stylesheet\");\n}\nfunction elementIsMetaElementWithName(element, name) {\n    const tagName = element.localName;\n    return tagName == \"meta\" && element.getAttribute(\"name\") == name;\n}\nfunction elementWithoutNonce(element) {\n    if (element.hasAttribute(\"nonce\")) {\n        element.setAttribute(\"nonce\", \"\");\n    }\n    return element;\n}\n\nclass PageSnapshot extends Snapshot {\n    static fromHTMLString(html = \"\") {\n        return this.fromDocument(parseHTMLDocument(html));\n    }\n    static fromElement(element) {\n        return this.fromDocument(element.ownerDocument);\n    }\n    static fromDocument({ head, body }) {\n        return new this(body, new HeadSnapshot(head));\n    }\n    constructor(element, headSnapshot) {\n        super(element);\n        this.headSnapshot = headSnapshot;\n    }\n    clone() {\n        const clonedElement = this.element.cloneNode(true);\n        const selectElements = this.element.querySelectorAll(\"select\");\n        const clonedSelectElements = clonedElement.querySelectorAll(\"select\");\n        for (const [index, source] of selectElements.entries()) {\n            const clone = clonedSelectElements[index];\n            for (const option of clone.selectedOptions)\n                option.selected = false;\n            for (const option of source.selectedOptions)\n                clone.options[option.index].selected = true;\n        }\n        for (const clonedPasswordInput of clonedElement.querySelectorAll('input[type=\"password\"]')) {\n            clonedPasswordInput.value = \"\";\n        }\n        return new PageSnapshot(clonedElement, this.headSnapshot);\n    }\n    get headElement() {\n        return this.headSnapshot.element;\n    }\n    get rootLocation() {\n        var _a;\n        const root = (_a = this.getSetting(\"root\")) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n    get cacheControlValue() {\n        return this.getSetting(\"cache-control\");\n    }\n    get isPreviewable() {\n        return this.cacheControlValue != \"no-preview\";\n    }\n    get isCacheable() {\n        return this.cacheControlValue != \"no-cache\";\n    }\n    get isVisitable() {\n        return this.getSetting(\"visit-control\") != \"reload\";\n    }\n    getSetting(name) {\n        return this.headSnapshot.getMetaValue(`turbo-${name}`);\n    }\n}\n\nvar TimingMetric;\n(function (TimingMetric) {\n    TimingMetric[\"visitStart\"] = \"visitStart\";\n    TimingMetric[\"requestStart\"] = \"requestStart\";\n    TimingMetric[\"requestEnd\"] = \"requestEnd\";\n    TimingMetric[\"visitEnd\"] = \"visitEnd\";\n})(TimingMetric || (TimingMetric = {}));\nvar VisitState;\n(function (VisitState) {\n    VisitState[\"initialized\"] = \"initialized\";\n    VisitState[\"started\"] = \"started\";\n    VisitState[\"canceled\"] = \"canceled\";\n    VisitState[\"failed\"] = \"failed\";\n    VisitState[\"completed\"] = \"completed\";\n})(VisitState || (VisitState = {}));\nconst defaultOptions = {\n    action: \"advance\",\n    historyChanged: false,\n    visitCachedSnapshot: () => { },\n    willRender: true,\n    updateHistory: true,\n    shouldCacheSnapshot: true,\n    acceptsStreamResponse: false,\n};\nvar SystemStatusCode;\n(function (SystemStatusCode) {\n    SystemStatusCode[SystemStatusCode[\"networkFailure\"] = 0] = \"networkFailure\";\n    SystemStatusCode[SystemStatusCode[\"timeoutFailure\"] = -1] = \"timeoutFailure\";\n    SystemStatusCode[SystemStatusCode[\"contentTypeMismatch\"] = -2] = \"contentTypeMismatch\";\n})(SystemStatusCode || (SystemStatusCode = {}));\nclass Visit {\n    constructor(delegate, location, restorationIdentifier, options = {}) {\n        this.identifier = uuid();\n        this.timingMetrics = {};\n        this.followedRedirect = false;\n        this.historyChanged = false;\n        this.scrolled = false;\n        this.shouldCacheSnapshot = true;\n        this.acceptsStreamResponse = false;\n        this.snapshotCached = false;\n        this.state = VisitState.initialized;\n        this.delegate = delegate;\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier || uuid();\n        const { action, historyChanged, referrer, snapshot, snapshotHTML, response, visitCachedSnapshot, willRender, updateHistory, shouldCacheSnapshot, acceptsStreamResponse, } = Object.assign(Object.assign({}, defaultOptions), options);\n        this.action = action;\n        this.historyChanged = historyChanged;\n        this.referrer = referrer;\n        this.snapshot = snapshot;\n        this.snapshotHTML = snapshotHTML;\n        this.response = response;\n        this.isSamePage = this.delegate.locationWithActionIsSamePage(this.location, this.action);\n        this.visitCachedSnapshot = visitCachedSnapshot;\n        this.willRender = willRender;\n        this.updateHistory = updateHistory;\n        this.scrolled = !willRender;\n        this.shouldCacheSnapshot = shouldCacheSnapshot;\n        this.acceptsStreamResponse = acceptsStreamResponse;\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    get restorationData() {\n        return this.history.getRestorationDataForIdentifier(this.restorationIdentifier);\n    }\n    get silent() {\n        return this.isSamePage;\n    }\n    start() {\n        if (this.state == VisitState.initialized) {\n            this.recordTimingMetric(TimingMetric.visitStart);\n            this.state = VisitState.started;\n            this.adapter.visitStarted(this);\n            this.delegate.visitStarted(this);\n        }\n    }\n    cancel() {\n        if (this.state == VisitState.started) {\n            if (this.request) {\n                this.request.cancel();\n            }\n            this.cancelRender();\n            this.state = VisitState.canceled;\n        }\n    }\n    complete() {\n        if (this.state == VisitState.started) {\n            this.recordTimingMetric(TimingMetric.visitEnd);\n            this.state = VisitState.completed;\n            this.followRedirect();\n            if (!this.followedRedirect) {\n                this.adapter.visitCompleted(this);\n                this.delegate.visitCompleted(this);\n            }\n        }\n    }\n    fail() {\n        if (this.state == VisitState.started) {\n            this.state = VisitState.failed;\n            this.adapter.visitFailed(this);\n        }\n    }\n    changeHistory() {\n        var _a;\n        if (!this.historyChanged && this.updateHistory) {\n            const actionForHistory = this.location.href === ((_a = this.referrer) === null || _a === void 0 ? void 0 : _a.href) ? \"replace\" : this.action;\n            const method = getHistoryMethodForAction(actionForHistory);\n            this.history.update(method, this.location, this.restorationIdentifier);\n            this.historyChanged = true;\n        }\n    }\n    issueRequest() {\n        if (this.hasPreloadedResponse()) {\n            this.simulateRequest();\n        }\n        else if (this.shouldIssueRequest() && !this.request) {\n            this.request = new FetchRequest(this, FetchMethod.get, this.location);\n            this.request.perform();\n        }\n    }\n    simulateRequest() {\n        if (this.response) {\n            this.startRequest();\n            this.recordResponse();\n            this.finishRequest();\n        }\n    }\n    startRequest() {\n        this.recordTimingMetric(TimingMetric.requestStart);\n        this.adapter.visitRequestStarted(this);\n    }\n    recordResponse(response = this.response) {\n        this.response = response;\n        if (response) {\n            const { statusCode } = response;\n            if (isSuccessful(statusCode)) {\n                this.adapter.visitRequestCompleted(this);\n            }\n            else {\n                this.adapter.visitRequestFailedWithStatusCode(this, statusCode);\n            }\n        }\n    }\n    finishRequest() {\n        this.recordTimingMetric(TimingMetric.requestEnd);\n        this.adapter.visitRequestFinished(this);\n    }\n    loadResponse() {\n        if (this.response) {\n            const { statusCode, responseHTML } = this.response;\n            this.render(async () => {\n                if (this.shouldCacheSnapshot)\n                    this.cacheSnapshot();\n                if (this.view.renderPromise)\n                    await this.view.renderPromise;\n                if (isSuccessful(statusCode) && responseHTML != null) {\n                    await this.view.renderPage(PageSnapshot.fromHTMLString(responseHTML), false, this.willRender, this);\n                    this.performScroll();\n                    this.adapter.visitRendered(this);\n                    this.complete();\n                }\n                else {\n                    await this.view.renderError(PageSnapshot.fromHTMLString(responseHTML), this);\n                    this.adapter.visitRendered(this);\n                    this.fail();\n                }\n            });\n        }\n    }\n    getCachedSnapshot() {\n        const snapshot = this.view.getCachedSnapshotForLocation(this.location) || this.getPreloadedSnapshot();\n        if (snapshot && (!getAnchor(this.location) || snapshot.hasAnchor(getAnchor(this.location)))) {\n            if (this.action == \"restore\" || snapshot.isPreviewable) {\n                return snapshot;\n            }\n        }\n    }\n    getPreloadedSnapshot() {\n        if (this.snapshotHTML) {\n            return PageSnapshot.fromHTMLString(this.snapshotHTML);\n        }\n    }\n    hasCachedSnapshot() {\n        return this.getCachedSnapshot() != null;\n    }\n    loadCachedSnapshot() {\n        const snapshot = this.getCachedSnapshot();\n        if (snapshot) {\n            const isPreview = this.shouldIssueRequest();\n            this.render(async () => {\n                this.cacheSnapshot();\n                if (this.isSamePage) {\n                    this.adapter.visitRendered(this);\n                }\n                else {\n                    if (this.view.renderPromise)\n                        await this.view.renderPromise;\n                    await this.view.renderPage(snapshot, isPreview, this.willRender, this);\n                    this.performScroll();\n                    this.adapter.visitRendered(this);\n                    if (!isPreview) {\n                        this.complete();\n                    }\n                }\n            });\n        }\n    }\n    followRedirect() {\n        var _a;\n        if (this.redirectedToLocation && !this.followedRedirect && ((_a = this.response) === null || _a === void 0 ? void 0 : _a.redirected)) {\n            this.adapter.visitProposedToLocation(this.redirectedToLocation, {\n                action: \"replace\",\n                response: this.response,\n                shouldCacheSnapshot: false,\n                willRender: false,\n            });\n            this.followedRedirect = true;\n        }\n    }\n    goToSamePageAnchor() {\n        if (this.isSamePage) {\n            this.render(async () => {\n                this.cacheSnapshot();\n                this.performScroll();\n                this.changeHistory();\n                this.adapter.visitRendered(this);\n            });\n        }\n    }\n    prepareRequest(request) {\n        if (this.acceptsStreamResponse) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted() {\n        this.startRequest();\n    }\n    requestPreventedHandlingResponse(_request, _response) { }\n    async requestSucceededWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({\n                statusCode: SystemStatusCode.contentTypeMismatch,\n                redirected,\n            });\n        }\n        else {\n            this.redirectedToLocation = response.redirected ? response.location : undefined;\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    async requestFailedWithResponse(request, response) {\n        const responseHTML = await response.responseHTML;\n        const { redirected, statusCode } = response;\n        if (responseHTML == undefined) {\n            this.recordResponse({\n                statusCode: SystemStatusCode.contentTypeMismatch,\n                redirected,\n            });\n        }\n        else {\n            this.recordResponse({ statusCode: statusCode, responseHTML, redirected });\n        }\n    }\n    requestErrored(_request, _error) {\n        this.recordResponse({\n            statusCode: SystemStatusCode.networkFailure,\n            redirected: false,\n        });\n    }\n    requestFinished() {\n        this.finishRequest();\n    }\n    performScroll() {\n        if (!this.scrolled && !this.view.forceReloaded) {\n            if (this.action == \"restore\") {\n                this.scrollToRestoredPosition() || this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            else {\n                this.scrollToAnchor() || this.view.scrollToTop();\n            }\n            if (this.isSamePage) {\n                this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation, this.location);\n            }\n            this.scrolled = true;\n        }\n    }\n    scrollToRestoredPosition() {\n        const { scrollPosition } = this.restorationData;\n        if (scrollPosition) {\n            this.view.scrollToPosition(scrollPosition);\n            return true;\n        }\n    }\n    scrollToAnchor() {\n        const anchor = getAnchor(this.location);\n        if (anchor != null) {\n            this.view.scrollToAnchor(anchor);\n            return true;\n        }\n    }\n    recordTimingMetric(metric) {\n        this.timingMetrics[metric] = new Date().getTime();\n    }\n    getTimingMetrics() {\n        return Object.assign({}, this.timingMetrics);\n    }\n    getHistoryMethodForAction(action) {\n        switch (action) {\n            case \"replace\":\n                return history.replaceState;\n            case \"advance\":\n            case \"restore\":\n                return history.pushState;\n        }\n    }\n    hasPreloadedResponse() {\n        return typeof this.response == \"object\";\n    }\n    shouldIssueRequest() {\n        if (this.isSamePage) {\n            return false;\n        }\n        else if (this.action == \"restore\") {\n            return !this.hasCachedSnapshot();\n        }\n        else {\n            return this.willRender;\n        }\n    }\n    cacheSnapshot() {\n        if (!this.snapshotCached) {\n            this.view.cacheSnapshot(this.snapshot).then((snapshot) => snapshot && this.visitCachedSnapshot(snapshot));\n            this.snapshotCached = true;\n        }\n    }\n    async render(callback) {\n        this.cancelRender();\n        await new Promise((resolve) => {\n            this.frame = requestAnimationFrame(() => resolve());\n        });\n        await callback();\n        delete this.frame;\n    }\n    cancelRender() {\n        if (this.frame) {\n            cancelAnimationFrame(this.frame);\n            delete this.frame;\n        }\n    }\n}\nfunction isSuccessful(statusCode) {\n    return statusCode >= 200 && statusCode < 300;\n}\n\nclass BrowserAdapter {\n    constructor(session) {\n        this.progressBar = new ProgressBar();\n        this.showProgressBar = () => {\n            this.progressBar.show();\n        };\n        this.session = session;\n    }\n    visitProposedToLocation(location, options) {\n        this.navigator.startVisit(location, (options === null || options === void 0 ? void 0 : options.restorationIdentifier) || uuid(), options);\n    }\n    visitStarted(visit) {\n        this.location = visit.location;\n        visit.loadCachedSnapshot();\n        visit.issueRequest();\n        visit.goToSamePageAnchor();\n    }\n    visitRequestStarted(visit) {\n        this.progressBar.setValue(0);\n        if (visit.hasCachedSnapshot() || visit.action != \"restore\") {\n            this.showVisitProgressBarAfterDelay();\n        }\n        else {\n            this.showProgressBar();\n        }\n    }\n    visitRequestCompleted(visit) {\n        visit.loadResponse();\n    }\n    visitRequestFailedWithStatusCode(visit, statusCode) {\n        switch (statusCode) {\n            case SystemStatusCode.networkFailure:\n            case SystemStatusCode.timeoutFailure:\n            case SystemStatusCode.contentTypeMismatch:\n                return this.reload({\n                    reason: \"request_failed\",\n                    context: {\n                        statusCode,\n                    },\n                });\n            default:\n                return visit.loadResponse();\n        }\n    }\n    visitRequestFinished(_visit) {\n        this.progressBar.setValue(1);\n        this.hideVisitProgressBar();\n    }\n    visitCompleted(_visit) { }\n    pageInvalidated(reason) {\n        this.reload(reason);\n    }\n    visitFailed(_visit) { }\n    visitRendered(_visit) { }\n    formSubmissionStarted(_formSubmission) {\n        this.progressBar.setValue(0);\n        this.showFormProgressBarAfterDelay();\n    }\n    formSubmissionFinished(_formSubmission) {\n        this.progressBar.setValue(1);\n        this.hideFormProgressBar();\n    }\n    showVisitProgressBarAfterDelay() {\n        this.visitProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n    }\n    hideVisitProgressBar() {\n        this.progressBar.hide();\n        if (this.visitProgressBarTimeout != null) {\n            window.clearTimeout(this.visitProgressBarTimeout);\n            delete this.visitProgressBarTimeout;\n        }\n    }\n    showFormProgressBarAfterDelay() {\n        if (this.formProgressBarTimeout == null) {\n            this.formProgressBarTimeout = window.setTimeout(this.showProgressBar, this.session.progressBarDelay);\n        }\n    }\n    hideFormProgressBar() {\n        this.progressBar.hide();\n        if (this.formProgressBarTimeout != null) {\n            window.clearTimeout(this.formProgressBarTimeout);\n            delete this.formProgressBarTimeout;\n        }\n    }\n    reload(reason) {\n        var _a;\n        dispatch(\"turbo:reload\", { detail: reason });\n        window.location.href = ((_a = this.location) === null || _a === void 0 ? void 0 : _a.toString()) || window.location.href;\n    }\n    get navigator() {\n        return this.session.navigator;\n    }\n}\n\nclass CacheObserver {\n    constructor() {\n        this.selector = \"[data-turbo-temporary]\";\n        this.deprecatedSelector = \"[data-turbo-cache=false]\";\n        this.started = false;\n        this.removeTemporaryElements = ((_event) => {\n            for (const element of this.temporaryElements) {\n                element.remove();\n            }\n        });\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-cache\", this.removeTemporaryElements, false);\n        }\n    }\n    get temporaryElements() {\n        return [...document.querySelectorAll(this.selector), ...this.temporaryElementsWithDeprecation];\n    }\n    get temporaryElementsWithDeprecation() {\n        const elements = document.querySelectorAll(this.deprecatedSelector);\n        if (elements.length) {\n            console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`);\n        }\n        return [...elements];\n    }\n}\n\nclass FrameRedirector {\n    constructor(session, element) {\n        this.session = session;\n        this.element = element;\n        this.linkInterceptor = new LinkInterceptor(this, element);\n        this.formSubmitObserver = new FormSubmitObserver(this, element);\n    }\n    start() {\n        this.linkInterceptor.start();\n        this.formSubmitObserver.start();\n    }\n    stop() {\n        this.linkInterceptor.stop();\n        this.formSubmitObserver.stop();\n    }\n    shouldInterceptLinkClick(element, _location, _event) {\n        return this.shouldRedirect(element);\n    }\n    linkClickIntercepted(element, url, event) {\n        const frame = this.findFrameElement(element);\n        if (frame) {\n            frame.delegate.linkClickIntercepted(element, url, event);\n        }\n    }\n    willSubmitForm(element, submitter) {\n        return (element.closest(\"turbo-frame\") == null &&\n            this.shouldSubmit(element, submitter) &&\n            this.shouldRedirect(element, submitter));\n    }\n    formSubmitted(element, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        if (frame) {\n            frame.delegate.formSubmitted(element, submitter);\n        }\n    }\n    shouldSubmit(form, submitter) {\n        var _a;\n        const action = getAction(form, submitter);\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const rootLocation = expandURL((_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\");\n        return this.shouldRedirect(form, submitter) && locationIsVisitable(action, rootLocation);\n    }\n    shouldRedirect(element, submitter) {\n        const isNavigatable = element instanceof HTMLFormElement\n            ? this.session.submissionIsNavigatable(element, submitter)\n            : this.session.elementIsNavigatable(element);\n        if (isNavigatable) {\n            const frame = this.findFrameElement(element, submitter);\n            return frame ? frame != element.closest(\"turbo-frame\") : false;\n        }\n        else {\n            return false;\n        }\n    }\n    findFrameElement(element, submitter) {\n        const id = (submitter === null || submitter === void 0 ? void 0 : submitter.getAttribute(\"data-turbo-frame\")) || element.getAttribute(\"data-turbo-frame\");\n        if (id && id != \"_top\") {\n            const frame = this.element.querySelector(`#${id}:not([disabled])`);\n            if (frame instanceof FrameElement) {\n                return frame;\n            }\n        }\n    }\n}\n\nclass History {\n    constructor(delegate) {\n        this.restorationIdentifier = uuid();\n        this.restorationData = {};\n        this.started = false;\n        this.pageLoaded = false;\n        this.onPopState = (event) => {\n            if (this.shouldHandlePopState()) {\n                const { turbo } = event.state || {};\n                if (turbo) {\n                    this.location = new URL(window.location.href);\n                    const { restorationIdentifier } = turbo;\n                    this.restorationIdentifier = restorationIdentifier;\n                    this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location, restorationIdentifier);\n                }\n            }\n        };\n        this.onPageLoad = async (_event) => {\n            await nextMicrotask();\n            this.pageLoaded = true;\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"popstate\", this.onPopState, false);\n            addEventListener(\"load\", this.onPageLoad, false);\n            this.started = true;\n            this.replace(new URL(window.location.href));\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"popstate\", this.onPopState, false);\n            removeEventListener(\"load\", this.onPageLoad, false);\n            this.started = false;\n        }\n    }\n    push(location, restorationIdentifier) {\n        this.update(history.pushState, location, restorationIdentifier);\n    }\n    replace(location, restorationIdentifier) {\n        this.update(history.replaceState, location, restorationIdentifier);\n    }\n    update(method, location, restorationIdentifier = uuid()) {\n        const state = { turbo: { restorationIdentifier } };\n        method.call(history, state, \"\", location.href);\n        this.location = location;\n        this.restorationIdentifier = restorationIdentifier;\n    }\n    getRestorationDataForIdentifier(restorationIdentifier) {\n        return this.restorationData[restorationIdentifier] || {};\n    }\n    updateRestorationData(additionalData) {\n        const { restorationIdentifier } = this;\n        const restorationData = this.restorationData[restorationIdentifier];\n        this.restorationData[restorationIdentifier] = Object.assign(Object.assign({}, restorationData), additionalData);\n    }\n    assumeControlOfScrollRestoration() {\n        var _a;\n        if (!this.previousScrollRestoration) {\n            this.previousScrollRestoration = (_a = history.scrollRestoration) !== null && _a !== void 0 ? _a : \"auto\";\n            history.scrollRestoration = \"manual\";\n        }\n    }\n    relinquishControlOfScrollRestoration() {\n        if (this.previousScrollRestoration) {\n            history.scrollRestoration = this.previousScrollRestoration;\n            delete this.previousScrollRestoration;\n        }\n    }\n    shouldHandlePopState() {\n        return this.pageIsLoaded();\n    }\n    pageIsLoaded() {\n        return this.pageLoaded || document.readyState == \"complete\";\n    }\n}\n\nclass Navigator {\n    constructor(delegate) {\n        this.delegate = delegate;\n    }\n    proposeVisit(location, options = {}) {\n        if (this.delegate.allowsVisitingLocationWithAction(location, options.action)) {\n            if (locationIsVisitable(location, this.view.snapshot.rootLocation)) {\n                this.delegate.visitProposedToLocation(location, options);\n            }\n            else {\n                window.location.href = location.toString();\n            }\n        }\n    }\n    startVisit(locatable, restorationIdentifier, options = {}) {\n        this.stop();\n        this.currentVisit = new Visit(this, expandURL(locatable), restorationIdentifier, Object.assign({ referrer: this.location }, options));\n        this.currentVisit.start();\n    }\n    submitForm(form, submitter) {\n        this.stop();\n        this.formSubmission = new FormSubmission(this, form, submitter, true);\n        this.formSubmission.start();\n    }\n    stop() {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n            delete this.formSubmission;\n        }\n        if (this.currentVisit) {\n            this.currentVisit.cancel();\n            delete this.currentVisit;\n        }\n    }\n    get adapter() {\n        return this.delegate.adapter;\n    }\n    get view() {\n        return this.delegate.view;\n    }\n    get history() {\n        return this.delegate.history;\n    }\n    formSubmissionStarted(formSubmission) {\n        if (typeof this.adapter.formSubmissionStarted === \"function\") {\n            this.adapter.formSubmissionStarted(formSubmission);\n        }\n    }\n    async formSubmissionSucceededWithResponse(formSubmission, fetchResponse) {\n        if (formSubmission == this.formSubmission) {\n            const responseHTML = await fetchResponse.responseHTML;\n            if (responseHTML) {\n                const shouldCacheSnapshot = formSubmission.isSafe;\n                if (!shouldCacheSnapshot) {\n                    this.view.clearSnapshotCache();\n                }\n                const { statusCode, redirected } = fetchResponse;\n                const action = this.getActionForFormSubmission(formSubmission);\n                const visitOptions = {\n                    action,\n                    shouldCacheSnapshot,\n                    response: { statusCode, responseHTML, redirected },\n                };\n                this.proposeVisit(fetchResponse.location, visitOptions);\n            }\n        }\n    }\n    async formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        const responseHTML = await fetchResponse.responseHTML;\n        if (responseHTML) {\n            const snapshot = PageSnapshot.fromHTMLString(responseHTML);\n            if (fetchResponse.serverError) {\n                await this.view.renderError(snapshot, this.currentVisit);\n            }\n            else {\n                await this.view.renderPage(snapshot, false, true, this.currentVisit);\n            }\n            this.view.scrollToTop();\n            this.view.clearSnapshotCache();\n        }\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished(formSubmission) {\n        if (typeof this.adapter.formSubmissionFinished === \"function\") {\n            this.adapter.formSubmissionFinished(formSubmission);\n        }\n    }\n    visitStarted(visit) {\n        this.delegate.visitStarted(visit);\n    }\n    visitCompleted(visit) {\n        this.delegate.visitCompleted(visit);\n    }\n    locationWithActionIsSamePage(location, action) {\n        const anchor = getAnchor(location);\n        const currentAnchor = getAnchor(this.view.lastRenderedLocation);\n        const isRestorationToTop = action === \"restore\" && typeof anchor === \"undefined\";\n        return (action !== \"replace\" &&\n            getRequestURL(location) === getRequestURL(this.view.lastRenderedLocation) &&\n            (isRestorationToTop || (anchor != null && anchor !== currentAnchor)));\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.delegate.visitScrolledToSamePageLocation(oldURL, newURL);\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    getActionForFormSubmission({ submitter, formElement }) {\n        return getVisitAction(submitter, formElement) || \"advance\";\n    }\n}\n\nvar PageStage;\n(function (PageStage) {\n    PageStage[PageStage[\"initial\"] = 0] = \"initial\";\n    PageStage[PageStage[\"loading\"] = 1] = \"loading\";\n    PageStage[PageStage[\"interactive\"] = 2] = \"interactive\";\n    PageStage[PageStage[\"complete\"] = 3] = \"complete\";\n})(PageStage || (PageStage = {}));\nclass PageObserver {\n    constructor(delegate) {\n        this.stage = PageStage.initial;\n        this.started = false;\n        this.interpretReadyState = () => {\n            const { readyState } = this;\n            if (readyState == \"interactive\") {\n                this.pageIsInteractive();\n            }\n            else if (readyState == \"complete\") {\n                this.pageIsComplete();\n            }\n        };\n        this.pageWillUnload = () => {\n            this.delegate.pageWillUnload();\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            if (this.stage == PageStage.initial) {\n                this.stage = PageStage.loading;\n            }\n            document.addEventListener(\"readystatechange\", this.interpretReadyState, false);\n            addEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            document.removeEventListener(\"readystatechange\", this.interpretReadyState, false);\n            removeEventListener(\"pagehide\", this.pageWillUnload, false);\n            this.started = false;\n        }\n    }\n    pageIsInteractive() {\n        if (this.stage == PageStage.loading) {\n            this.stage = PageStage.interactive;\n            this.delegate.pageBecameInteractive();\n        }\n    }\n    pageIsComplete() {\n        this.pageIsInteractive();\n        if (this.stage == PageStage.interactive) {\n            this.stage = PageStage.complete;\n            this.delegate.pageLoaded();\n        }\n    }\n    get readyState() {\n        return document.readyState;\n    }\n}\n\nclass ScrollObserver {\n    constructor(delegate) {\n        this.started = false;\n        this.onScroll = () => {\n            this.updatePosition({ x: window.pageXOffset, y: window.pageYOffset });\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            addEventListener(\"scroll\", this.onScroll, false);\n            this.onScroll();\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            removeEventListener(\"scroll\", this.onScroll, false);\n            this.started = false;\n        }\n    }\n    updatePosition(position) {\n        this.delegate.scrollPositionChanged(position);\n    }\n}\n\nclass StreamMessageRenderer {\n    render({ fragment }) {\n        Bardo.preservingPermanentElements(this, getPermanentElementMapForFragment(fragment), () => document.documentElement.appendChild(fragment));\n    }\n    enteringBardo(currentPermanentElement, newPermanentElement) {\n        newPermanentElement.replaceWith(currentPermanentElement.cloneNode(true));\n    }\n    leavingBardo() { }\n}\nfunction getPermanentElementMapForFragment(fragment) {\n    const permanentElementsInDocument = queryPermanentElementsAll(document.documentElement);\n    const permanentElementMap = {};\n    for (const permanentElementInDocument of permanentElementsInDocument) {\n        const { id } = permanentElementInDocument;\n        for (const streamElement of fragment.querySelectorAll(\"turbo-stream\")) {\n            const elementInStream = getPermanentElementById(streamElement.templateElement.content, id);\n            if (elementInStream) {\n                permanentElementMap[id] = [permanentElementInDocument, elementInStream];\n            }\n        }\n    }\n    return permanentElementMap;\n}\n\nclass StreamObserver {\n    constructor(delegate) {\n        this.sources = new Set();\n        this.started = false;\n        this.inspectFetchResponse = ((event) => {\n            const response = fetchResponseFromEvent(event);\n            if (response && fetchResponseIsStream(response)) {\n                event.preventDefault();\n                this.receiveMessageResponse(response);\n            }\n        });\n        this.receiveMessageEvent = (event) => {\n            if (this.started && typeof event.data == \"string\") {\n                this.receiveMessageHTML(event.data);\n            }\n        };\n        this.delegate = delegate;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            addEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            removeEventListener(\"turbo:before-fetch-response\", this.inspectFetchResponse, false);\n        }\n    }\n    connectStreamSource(source) {\n        if (!this.streamSourceIsConnected(source)) {\n            this.sources.add(source);\n            source.addEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    disconnectStreamSource(source) {\n        if (this.streamSourceIsConnected(source)) {\n            this.sources.delete(source);\n            source.removeEventListener(\"message\", this.receiveMessageEvent, false);\n        }\n    }\n    streamSourceIsConnected(source) {\n        return this.sources.has(source);\n    }\n    async receiveMessageResponse(response) {\n        const html = await response.responseHTML;\n        if (html) {\n            this.receiveMessageHTML(html);\n        }\n    }\n    receiveMessageHTML(html) {\n        this.delegate.receivedMessageFromStream(StreamMessage.wrap(html));\n    }\n}\nfunction fetchResponseFromEvent(event) {\n    var _a;\n    const fetchResponse = (_a = event.detail) === null || _a === void 0 ? void 0 : _a.fetchResponse;\n    if (fetchResponse instanceof FetchResponse) {\n        return fetchResponse;\n    }\n}\nfunction fetchResponseIsStream(response) {\n    var _a;\n    const contentType = (_a = response.contentType) !== null && _a !== void 0 ? _a : \"\";\n    return contentType.startsWith(StreamMessage.contentType);\n}\n\nclass ErrorRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        const { documentElement, body } = document;\n        documentElement.replaceChild(newElement, body);\n    }\n    async render() {\n        this.replaceHeadAndBody();\n        this.activateScriptElements();\n    }\n    replaceHeadAndBody() {\n        const { documentElement, head } = document;\n        documentElement.replaceChild(this.newHead, head);\n        this.renderElement(this.currentElement, this.newElement);\n    }\n    activateScriptElements() {\n        for (const replaceableElement of this.scriptElements) {\n            const parentNode = replaceableElement.parentNode;\n            if (parentNode) {\n                const element = activateScriptElement(replaceableElement);\n                parentNode.replaceChild(element, replaceableElement);\n            }\n        }\n    }\n    get newHead() {\n        return this.newSnapshot.headSnapshot.element;\n    }\n    get scriptElements() {\n        return document.documentElement.querySelectorAll(\"script\");\n    }\n}\n\nclass PageRenderer extends Renderer {\n    static renderElement(currentElement, newElement) {\n        if (document.body && newElement instanceof HTMLBodyElement) {\n            document.body.replaceWith(newElement);\n        }\n        else {\n            document.documentElement.appendChild(newElement);\n        }\n    }\n    get shouldRender() {\n        return this.newSnapshot.isVisitable && this.trackedElementsAreIdentical;\n    }\n    get reloadReason() {\n        if (!this.newSnapshot.isVisitable) {\n            return {\n                reason: \"turbo_visit_control_is_reload\",\n            };\n        }\n        if (!this.trackedElementsAreIdentical) {\n            return {\n                reason: \"tracked_element_mismatch\",\n            };\n        }\n    }\n    async prepareToRender() {\n        await this.mergeHead();\n    }\n    async render() {\n        if (this.willRender) {\n            await this.replaceBody();\n        }\n    }\n    finishRendering() {\n        super.finishRendering();\n        if (!this.isPreview) {\n            this.focusFirstAutofocusableElement();\n        }\n    }\n    get currentHeadSnapshot() {\n        return this.currentSnapshot.headSnapshot;\n    }\n    get newHeadSnapshot() {\n        return this.newSnapshot.headSnapshot;\n    }\n    get newElement() {\n        return this.newSnapshot.element;\n    }\n    async mergeHead() {\n        const mergedHeadElements = this.mergeProvisionalElements();\n        const newStylesheetElements = this.copyNewHeadStylesheetElements();\n        this.copyNewHeadScriptElements();\n        await mergedHeadElements;\n        await newStylesheetElements;\n    }\n    async replaceBody() {\n        await this.preservingPermanentElements(async () => {\n            this.activateNewBody();\n            await this.assignNewBody();\n        });\n    }\n    get trackedElementsAreIdentical() {\n        return this.currentHeadSnapshot.trackedElementSignature == this.newHeadSnapshot.trackedElementSignature;\n    }\n    async copyNewHeadStylesheetElements() {\n        const loadingElements = [];\n        for (const element of this.newHeadStylesheetElements) {\n            loadingElements.push(waitForLoad(element));\n            document.head.appendChild(element);\n        }\n        await Promise.all(loadingElements);\n    }\n    copyNewHeadScriptElements() {\n        for (const element of this.newHeadScriptElements) {\n            document.head.appendChild(activateScriptElement(element));\n        }\n    }\n    async mergeProvisionalElements() {\n        const newHeadElements = [...this.newHeadProvisionalElements];\n        for (const element of this.currentHeadProvisionalElements) {\n            if (!this.isCurrentElementInElementList(element, newHeadElements)) {\n                document.head.removeChild(element);\n            }\n        }\n        for (const element of newHeadElements) {\n            document.head.appendChild(element);\n        }\n    }\n    isCurrentElementInElementList(element, elementList) {\n        for (const [index, newElement] of elementList.entries()) {\n            if (element.tagName == \"TITLE\") {\n                if (newElement.tagName != \"TITLE\") {\n                    continue;\n                }\n                if (element.innerHTML == newElement.innerHTML) {\n                    elementList.splice(index, 1);\n                    return true;\n                }\n            }\n            if (newElement.isEqualNode(element)) {\n                elementList.splice(index, 1);\n                return true;\n            }\n        }\n        return false;\n    }\n    removeCurrentHeadProvisionalElements() {\n        for (const element of this.currentHeadProvisionalElements) {\n            document.head.removeChild(element);\n        }\n    }\n    copyNewHeadProvisionalElements() {\n        for (const element of this.newHeadProvisionalElements) {\n            document.head.appendChild(element);\n        }\n    }\n    activateNewBody() {\n        document.adoptNode(this.newElement);\n        this.activateNewBodyScriptElements();\n    }\n    activateNewBodyScriptElements() {\n        for (const inertScriptElement of this.newBodyScriptElements) {\n            const activatedScriptElement = activateScriptElement(inertScriptElement);\n            inertScriptElement.replaceWith(activatedScriptElement);\n        }\n    }\n    async assignNewBody() {\n        await this.renderElement(this.currentElement, this.newElement);\n    }\n    get newHeadStylesheetElements() {\n        return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get newHeadScriptElements() {\n        return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot);\n    }\n    get currentHeadProvisionalElements() {\n        return this.currentHeadSnapshot.provisionalElements;\n    }\n    get newHeadProvisionalElements() {\n        return this.newHeadSnapshot.provisionalElements;\n    }\n    get newBodyScriptElements() {\n        return this.newElement.querySelectorAll(\"script\");\n    }\n}\n\nclass SnapshotCache {\n    constructor(size) {\n        this.keys = [];\n        this.snapshots = {};\n        this.size = size;\n    }\n    has(location) {\n        return toCacheKey(location) in this.snapshots;\n    }\n    get(location) {\n        if (this.has(location)) {\n            const snapshot = this.read(location);\n            this.touch(location);\n            return snapshot;\n        }\n    }\n    put(location, snapshot) {\n        this.write(location, snapshot);\n        this.touch(location);\n        return snapshot;\n    }\n    clear() {\n        this.snapshots = {};\n    }\n    read(location) {\n        return this.snapshots[toCacheKey(location)];\n    }\n    write(location, snapshot) {\n        this.snapshots[toCacheKey(location)] = snapshot;\n    }\n    touch(location) {\n        const key = toCacheKey(location);\n        const index = this.keys.indexOf(key);\n        if (index > -1)\n            this.keys.splice(index, 1);\n        this.keys.unshift(key);\n        this.trim();\n    }\n    trim() {\n        for (const key of this.keys.splice(this.size)) {\n            delete this.snapshots[key];\n        }\n    }\n}\n\nclass PageView extends View {\n    constructor() {\n        super(...arguments);\n        this.snapshotCache = new SnapshotCache(10);\n        this.lastRenderedLocation = new URL(location.href);\n        this.forceReloaded = false;\n    }\n    renderPage(snapshot, isPreview = false, willRender = true, visit) {\n        const renderer = new PageRenderer(this.snapshot, snapshot, PageRenderer.renderElement, isPreview, willRender);\n        if (!renderer.shouldRender) {\n            this.forceReloaded = true;\n        }\n        else {\n            visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n        }\n        return this.render(renderer);\n    }\n    renderError(snapshot, visit) {\n        visit === null || visit === void 0 ? void 0 : visit.changeHistory();\n        const renderer = new ErrorRenderer(this.snapshot, snapshot, ErrorRenderer.renderElement, false);\n        return this.render(renderer);\n    }\n    clearSnapshotCache() {\n        this.snapshotCache.clear();\n    }\n    async cacheSnapshot(snapshot = this.snapshot) {\n        if (snapshot.isCacheable) {\n            this.delegate.viewWillCacheSnapshot();\n            const { lastRenderedLocation: location } = this;\n            await nextEventLoopTick();\n            const cachedSnapshot = snapshot.clone();\n            this.snapshotCache.put(location, cachedSnapshot);\n            return cachedSnapshot;\n        }\n    }\n    getCachedSnapshotForLocation(location) {\n        return this.snapshotCache.get(location);\n    }\n    get snapshot() {\n        return PageSnapshot.fromElement(this.element);\n    }\n}\n\nclass Preloader {\n    constructor(delegate) {\n        this.selector = \"a[data-turbo-preload]\";\n        this.delegate = delegate;\n    }\n    get snapshotCache() {\n        return this.delegate.navigator.view.snapshotCache;\n    }\n    start() {\n        if (document.readyState === \"loading\") {\n            return document.addEventListener(\"DOMContentLoaded\", () => {\n                this.preloadOnLoadLinksForView(document.body);\n            });\n        }\n        else {\n            this.preloadOnLoadLinksForView(document.body);\n        }\n    }\n    preloadOnLoadLinksForView(element) {\n        for (const link of element.querySelectorAll(this.selector)) {\n            this.preloadURL(link);\n        }\n    }\n    async preloadURL(link) {\n        const location = new URL(link.href);\n        if (this.snapshotCache.has(location)) {\n            return;\n        }\n        try {\n            const response = await fetch(location.toString(), { headers: { \"VND.PREFETCH\": \"true\", Accept: \"text/html\" } });\n            const responseText = await response.text();\n            const snapshot = PageSnapshot.fromHTMLString(responseText);\n            this.snapshotCache.put(location, snapshot);\n        }\n        catch (_) {\n        }\n    }\n}\n\nclass Session {\n    constructor() {\n        this.navigator = new Navigator(this);\n        this.history = new History(this);\n        this.preloader = new Preloader(this);\n        this.view = new PageView(this, document.documentElement);\n        this.adapter = new BrowserAdapter(this);\n        this.pageObserver = new PageObserver(this);\n        this.cacheObserver = new CacheObserver();\n        this.linkClickObserver = new LinkClickObserver(this, window);\n        this.formSubmitObserver = new FormSubmitObserver(this, document);\n        this.scrollObserver = new ScrollObserver(this);\n        this.streamObserver = new StreamObserver(this);\n        this.formLinkClickObserver = new FormLinkClickObserver(this, document.documentElement);\n        this.frameRedirector = new FrameRedirector(this, document.documentElement);\n        this.streamMessageRenderer = new StreamMessageRenderer();\n        this.drive = true;\n        this.enabled = true;\n        this.progressBarDelay = 500;\n        this.started = false;\n        this.formMode = \"on\";\n    }\n    start() {\n        if (!this.started) {\n            this.pageObserver.start();\n            this.cacheObserver.start();\n            this.formLinkClickObserver.start();\n            this.linkClickObserver.start();\n            this.formSubmitObserver.start();\n            this.scrollObserver.start();\n            this.streamObserver.start();\n            this.frameRedirector.start();\n            this.history.start();\n            this.preloader.start();\n            this.started = true;\n            this.enabled = true;\n        }\n    }\n    disable() {\n        this.enabled = false;\n    }\n    stop() {\n        if (this.started) {\n            this.pageObserver.stop();\n            this.cacheObserver.stop();\n            this.formLinkClickObserver.stop();\n            this.linkClickObserver.stop();\n            this.formSubmitObserver.stop();\n            this.scrollObserver.stop();\n            this.streamObserver.stop();\n            this.frameRedirector.stop();\n            this.history.stop();\n            this.started = false;\n        }\n    }\n    registerAdapter(adapter) {\n        this.adapter = adapter;\n    }\n    visit(location, options = {}) {\n        const frameElement = options.frame ? document.getElementById(options.frame) : null;\n        if (frameElement instanceof FrameElement) {\n            frameElement.src = location.toString();\n            frameElement.loaded;\n        }\n        else {\n            this.navigator.proposeVisit(expandURL(location), options);\n        }\n    }\n    connectStreamSource(source) {\n        this.streamObserver.connectStreamSource(source);\n    }\n    disconnectStreamSource(source) {\n        this.streamObserver.disconnectStreamSource(source);\n    }\n    renderStreamMessage(message) {\n        this.streamMessageRenderer.render(StreamMessage.wrap(message));\n    }\n    clearCache() {\n        this.view.clearSnapshotCache();\n    }\n    setProgressBarDelay(delay) {\n        this.progressBarDelay = delay;\n    }\n    setFormMode(mode) {\n        this.formMode = mode;\n    }\n    get location() {\n        return this.history.location;\n    }\n    get restorationIdentifier() {\n        return this.history.restorationIdentifier;\n    }\n    historyPoppedToLocationWithRestorationIdentifier(location, restorationIdentifier) {\n        if (this.enabled) {\n            this.navigator.startVisit(location, restorationIdentifier, {\n                action: \"restore\",\n                historyChanged: true,\n            });\n        }\n        else {\n            this.adapter.pageInvalidated({\n                reason: \"turbo_disabled\",\n            });\n        }\n    }\n    scrollPositionChanged(position) {\n        this.history.updateRestorationData({ scrollPosition: position });\n    }\n    willSubmitFormLinkToLocation(link, location) {\n        return this.elementIsNavigatable(link) && locationIsVisitable(location, this.snapshot.rootLocation);\n    }\n    submittedFormLinkToLocation() { }\n    willFollowLinkToLocation(link, location, event) {\n        return (this.elementIsNavigatable(link) &&\n            locationIsVisitable(location, this.snapshot.rootLocation) &&\n            this.applicationAllowsFollowingLinkToLocation(link, location, event));\n    }\n    followedLinkToLocation(link, location) {\n        const action = this.getActionForLink(link);\n        const acceptsStreamResponse = link.hasAttribute(\"data-turbo-stream\");\n        this.visit(location.href, { action, acceptsStreamResponse });\n    }\n    allowsVisitingLocationWithAction(location, action) {\n        return this.locationWithActionIsSamePage(location, action) || this.applicationAllowsVisitingLocation(location);\n    }\n    visitProposedToLocation(location, options) {\n        extendURLWithDeprecatedProperties(location);\n        this.adapter.visitProposedToLocation(location, options);\n    }\n    visitStarted(visit) {\n        if (!visit.acceptsStreamResponse) {\n            markAsBusy(document.documentElement);\n        }\n        extendURLWithDeprecatedProperties(visit.location);\n        if (!visit.silent) {\n            this.notifyApplicationAfterVisitingLocation(visit.location, visit.action);\n        }\n    }\n    visitCompleted(visit) {\n        clearBusyState(document.documentElement);\n        this.notifyApplicationAfterPageLoad(visit.getTimingMetrics());\n    }\n    locationWithActionIsSamePage(location, action) {\n        return this.navigator.locationWithActionIsSamePage(location, action);\n    }\n    visitScrolledToSamePageLocation(oldURL, newURL) {\n        this.notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL);\n    }\n    willSubmitForm(form, submitter) {\n        const action = getAction(form, submitter);\n        return (this.submissionIsNavigatable(form, submitter) &&\n            locationIsVisitable(expandURL(action), this.snapshot.rootLocation));\n    }\n    formSubmitted(form, submitter) {\n        this.navigator.submitForm(form, submitter);\n    }\n    pageBecameInteractive() {\n        this.view.lastRenderedLocation = this.location;\n        this.notifyApplicationAfterPageLoad();\n    }\n    pageLoaded() {\n        this.history.assumeControlOfScrollRestoration();\n    }\n    pageWillUnload() {\n        this.history.relinquishControlOfScrollRestoration();\n    }\n    receivedMessageFromStream(message) {\n        this.renderStreamMessage(message);\n    }\n    viewWillCacheSnapshot() {\n        var _a;\n        if (!((_a = this.navigator.currentVisit) === null || _a === void 0 ? void 0 : _a.silent)) {\n            this.notifyApplicationBeforeCachingSnapshot();\n        }\n    }\n    allowsImmediateRender({ element }, options) {\n        const event = this.notifyApplicationBeforeRender(element, options);\n        const { defaultPrevented, detail: { render }, } = event;\n        if (this.view.renderer && render) {\n            this.view.renderer.renderElement = render;\n        }\n        return !defaultPrevented;\n    }\n    viewRenderedSnapshot(_snapshot, _isPreview) {\n        this.view.lastRenderedLocation = this.history.location;\n        this.notifyApplicationAfterRender();\n    }\n    preloadOnLoadLinksForView(element) {\n        this.preloader.preloadOnLoadLinksForView(element);\n    }\n    viewInvalidated(reason) {\n        this.adapter.pageInvalidated(reason);\n    }\n    frameLoaded(frame) {\n        this.notifyApplicationAfterFrameLoad(frame);\n    }\n    frameRendered(fetchResponse, frame) {\n        this.notifyApplicationAfterFrameRender(fetchResponse, frame);\n    }\n    applicationAllowsFollowingLinkToLocation(link, location, ev) {\n        const event = this.notifyApplicationAfterClickingLinkToLocation(link, location, ev);\n        return !event.defaultPrevented;\n    }\n    applicationAllowsVisitingLocation(location) {\n        const event = this.notifyApplicationBeforeVisitingLocation(location);\n        return !event.defaultPrevented;\n    }\n    notifyApplicationAfterClickingLinkToLocation(link, location, event) {\n        return dispatch(\"turbo:click\", {\n            target: link,\n            detail: { url: location.href, originalEvent: event },\n            cancelable: true,\n        });\n    }\n    notifyApplicationBeforeVisitingLocation(location) {\n        return dispatch(\"turbo:before-visit\", {\n            detail: { url: location.href },\n            cancelable: true,\n        });\n    }\n    notifyApplicationAfterVisitingLocation(location, action) {\n        return dispatch(\"turbo:visit\", { detail: { url: location.href, action } });\n    }\n    notifyApplicationBeforeCachingSnapshot() {\n        return dispatch(\"turbo:before-cache\");\n    }\n    notifyApplicationBeforeRender(newBody, options) {\n        return dispatch(\"turbo:before-render\", {\n            detail: Object.assign({ newBody }, options),\n            cancelable: true,\n        });\n    }\n    notifyApplicationAfterRender() {\n        return dispatch(\"turbo:render\");\n    }\n    notifyApplicationAfterPageLoad(timing = {}) {\n        return dispatch(\"turbo:load\", {\n            detail: { url: this.location.href, timing },\n        });\n    }\n    notifyApplicationAfterVisitingSamePageLocation(oldURL, newURL) {\n        dispatchEvent(new HashChangeEvent(\"hashchange\", {\n            oldURL: oldURL.toString(),\n            newURL: newURL.toString(),\n        }));\n    }\n    notifyApplicationAfterFrameLoad(frame) {\n        return dispatch(\"turbo:frame-load\", { target: frame });\n    }\n    notifyApplicationAfterFrameRender(fetchResponse, frame) {\n        return dispatch(\"turbo:frame-render\", {\n            detail: { fetchResponse },\n            target: frame,\n            cancelable: true,\n        });\n    }\n    submissionIsNavigatable(form, submitter) {\n        if (this.formMode == \"off\") {\n            return false;\n        }\n        else {\n            const submitterIsNavigatable = submitter ? this.elementIsNavigatable(submitter) : true;\n            if (this.formMode == \"optin\") {\n                return submitterIsNavigatable && form.closest('[data-turbo=\"true\"]') != null;\n            }\n            else {\n                return submitterIsNavigatable && this.elementIsNavigatable(form);\n            }\n        }\n    }\n    elementIsNavigatable(element) {\n        const container = findClosestRecursively(element, \"[data-turbo]\");\n        const withinFrame = findClosestRecursively(element, \"turbo-frame\");\n        if (this.drive || withinFrame) {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") != \"false\";\n            }\n            else {\n                return true;\n            }\n        }\n        else {\n            if (container) {\n                return container.getAttribute(\"data-turbo\") == \"true\";\n            }\n            else {\n                return false;\n            }\n        }\n    }\n    getActionForLink(link) {\n        return getVisitAction(link) || \"advance\";\n    }\n    get snapshot() {\n        return this.view.snapshot;\n    }\n}\nfunction extendURLWithDeprecatedProperties(url) {\n    Object.defineProperties(url, deprecatedLocationPropertyDescriptors);\n}\nconst deprecatedLocationPropertyDescriptors = {\n    absoluteURL: {\n        get() {\n            return this.toString();\n        },\n    },\n};\n\nclass Cache {\n    constructor(session) {\n        this.session = session;\n    }\n    clear() {\n        this.session.clearCache();\n    }\n    resetCacheControl() {\n        this.setCacheControl(\"\");\n    }\n    exemptPageFromCache() {\n        this.setCacheControl(\"no-cache\");\n    }\n    exemptPageFromPreview() {\n        this.setCacheControl(\"no-preview\");\n    }\n    setCacheControl(value) {\n        setMetaContent(\"turbo-cache-control\", value);\n    }\n}\n\nconst StreamActions = {\n    after() {\n        this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e.nextSibling); });\n    },\n    append() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach((e) => e.append(this.templateContent));\n    },\n    before() {\n        this.targetElements.forEach((e) => { var _a; return (_a = e.parentElement) === null || _a === void 0 ? void 0 : _a.insertBefore(this.templateContent, e); });\n    },\n    prepend() {\n        this.removeDuplicateTargetChildren();\n        this.targetElements.forEach((e) => e.prepend(this.templateContent));\n    },\n    remove() {\n        this.targetElements.forEach((e) => e.remove());\n    },\n    replace() {\n        this.targetElements.forEach((e) => e.replaceWith(this.templateContent));\n    },\n    update() {\n        this.targetElements.forEach((targetElement) => {\n            targetElement.innerHTML = \"\";\n            targetElement.append(this.templateContent);\n        });\n    },\n};\n\nconst session = new Session();\nconst cache = new Cache(session);\nconst { navigator: navigator$1 } = session;\nfunction start() {\n    session.start();\n}\nfunction registerAdapter(adapter) {\n    session.registerAdapter(adapter);\n}\nfunction visit(location, options) {\n    session.visit(location, options);\n}\nfunction connectStreamSource(source) {\n    session.connectStreamSource(source);\n}\nfunction disconnectStreamSource(source) {\n    session.disconnectStreamSource(source);\n}\nfunction renderStreamMessage(message) {\n    session.renderStreamMessage(message);\n}\nfunction clearCache() {\n    console.warn(\"Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`\");\n    session.clearCache();\n}\nfunction setProgressBarDelay(delay) {\n    session.setProgressBarDelay(delay);\n}\nfunction setConfirmMethod(confirmMethod) {\n    FormSubmission.confirmMethod = confirmMethod;\n}\nfunction setFormMode(mode) {\n    session.setFormMode(mode);\n}\n\nvar Turbo = /*#__PURE__*/Object.freeze({\n    __proto__: null,\n    navigator: navigator$1,\n    session: session,\n    cache: cache,\n    PageRenderer: PageRenderer,\n    PageSnapshot: PageSnapshot,\n    FrameRenderer: FrameRenderer,\n    start: start,\n    registerAdapter: registerAdapter,\n    visit: visit,\n    connectStreamSource: connectStreamSource,\n    disconnectStreamSource: disconnectStreamSource,\n    renderStreamMessage: renderStreamMessage,\n    clearCache: clearCache,\n    setProgressBarDelay: setProgressBarDelay,\n    setConfirmMethod: setConfirmMethod,\n    setFormMode: setFormMode,\n    StreamActions: StreamActions\n});\n\nclass TurboFrameMissingError extends Error {\n}\n\nclass FrameController {\n    constructor(element) {\n        this.fetchResponseLoaded = (_fetchResponse) => { };\n        this.currentFetchRequest = null;\n        this.resolveVisitPromise = () => { };\n        this.connected = false;\n        this.hasBeenLoaded = false;\n        this.ignoredAttributes = new Set();\n        this.action = null;\n        this.visitCachedSnapshot = ({ element }) => {\n            const frame = element.querySelector(\"#\" + this.element.id);\n            if (frame && this.previousFrameElement) {\n                frame.replaceChildren(...this.previousFrameElement.children);\n            }\n            delete this.previousFrameElement;\n        };\n        this.element = element;\n        this.view = new FrameView(this, this.element);\n        this.appearanceObserver = new AppearanceObserver(this, this.element);\n        this.formLinkClickObserver = new FormLinkClickObserver(this, this.element);\n        this.linkInterceptor = new LinkInterceptor(this, this.element);\n        this.restorationIdentifier = uuid();\n        this.formSubmitObserver = new FormSubmitObserver(this, this.element);\n    }\n    connect() {\n        if (!this.connected) {\n            this.connected = true;\n            if (this.loadingStyle == FrameLoadingStyle.lazy) {\n                this.appearanceObserver.start();\n            }\n            else {\n                this.loadSourceURL();\n            }\n            this.formLinkClickObserver.start();\n            this.linkInterceptor.start();\n            this.formSubmitObserver.start();\n        }\n    }\n    disconnect() {\n        if (this.connected) {\n            this.connected = false;\n            this.appearanceObserver.stop();\n            this.formLinkClickObserver.stop();\n            this.linkInterceptor.stop();\n            this.formSubmitObserver.stop();\n        }\n    }\n    disabledChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.eager) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLChanged() {\n        if (this.isIgnoringChangesTo(\"src\"))\n            return;\n        if (this.element.isConnected) {\n            this.complete = false;\n        }\n        if (this.loadingStyle == FrameLoadingStyle.eager || this.hasBeenLoaded) {\n            this.loadSourceURL();\n        }\n    }\n    sourceURLReloaded() {\n        const { src } = this.element;\n        this.ignoringChangesToAttribute(\"complete\", () => {\n            this.element.removeAttribute(\"complete\");\n        });\n        this.element.src = null;\n        this.element.src = src;\n        return this.element.loaded;\n    }\n    completeChanged() {\n        if (this.isIgnoringChangesTo(\"complete\"))\n            return;\n        this.loadSourceURL();\n    }\n    loadingStyleChanged() {\n        if (this.loadingStyle == FrameLoadingStyle.lazy) {\n            this.appearanceObserver.start();\n        }\n        else {\n            this.appearanceObserver.stop();\n            this.loadSourceURL();\n        }\n    }\n    async loadSourceURL() {\n        if (this.enabled && this.isActive && !this.complete && this.sourceURL) {\n            this.element.loaded = this.visit(expandURL(this.sourceURL));\n            this.appearanceObserver.stop();\n            await this.element.loaded;\n            this.hasBeenLoaded = true;\n        }\n    }\n    async loadResponse(fetchResponse) {\n        if (fetchResponse.redirected || (fetchResponse.succeeded && fetchResponse.isHTML)) {\n            this.sourceURL = fetchResponse.response.url;\n        }\n        try {\n            const html = await fetchResponse.responseHTML;\n            if (html) {\n                const document = parseHTMLDocument(html);\n                const pageSnapshot = PageSnapshot.fromDocument(document);\n                if (pageSnapshot.isVisitable) {\n                    await this.loadFrameResponse(fetchResponse, document);\n                }\n                else {\n                    await this.handleUnvisitableFrameResponse(fetchResponse);\n                }\n            }\n        }\n        finally {\n            this.fetchResponseLoaded = () => { };\n        }\n    }\n    elementAppearedInViewport(element) {\n        this.proposeVisitIfNavigatedWithAction(element, element);\n        this.loadSourceURL();\n    }\n    willSubmitFormLinkToLocation(link) {\n        return this.shouldInterceptNavigation(link);\n    }\n    submittedFormLinkToLocation(link, _location, form) {\n        const frame = this.findFrameElement(link);\n        if (frame)\n            form.setAttribute(\"data-turbo-frame\", frame.id);\n    }\n    shouldInterceptLinkClick(element, _location, _event) {\n        return this.shouldInterceptNavigation(element);\n    }\n    linkClickIntercepted(element, location) {\n        this.navigateFrame(element, location);\n    }\n    willSubmitForm(element, submitter) {\n        return element.closest(\"turbo-frame\") == this.element && this.shouldInterceptNavigation(element, submitter);\n    }\n    formSubmitted(element, submitter) {\n        if (this.formSubmission) {\n            this.formSubmission.stop();\n        }\n        this.formSubmission = new FormSubmission(this, element, submitter);\n        const { fetchRequest } = this.formSubmission;\n        this.prepareRequest(fetchRequest);\n        this.formSubmission.start();\n    }\n    prepareRequest(request) {\n        var _a;\n        request.headers[\"Turbo-Frame\"] = this.id;\n        if ((_a = this.currentNavigationElement) === null || _a === void 0 ? void 0 : _a.hasAttribute(\"data-turbo-stream\")) {\n            request.acceptResponseType(StreamMessage.contentType);\n        }\n    }\n    requestStarted(_request) {\n        markAsBusy(this.element);\n    }\n    requestPreventedHandlingResponse(_request, _response) {\n        this.resolveVisitPromise();\n    }\n    async requestSucceededWithResponse(request, response) {\n        await this.loadResponse(response);\n        this.resolveVisitPromise();\n    }\n    async requestFailedWithResponse(request, response) {\n        await this.loadResponse(response);\n        this.resolveVisitPromise();\n    }\n    requestErrored(request, error) {\n        console.error(error);\n        this.resolveVisitPromise();\n    }\n    requestFinished(_request) {\n        clearBusyState(this.element);\n    }\n    formSubmissionStarted({ formElement }) {\n        markAsBusy(formElement, this.findFrameElement(formElement));\n    }\n    formSubmissionSucceededWithResponse(formSubmission, response) {\n        const frame = this.findFrameElement(formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.proposeVisitIfNavigatedWithAction(frame, formSubmission.formElement, formSubmission.submitter);\n        frame.delegate.loadResponse(response);\n        if (!formSubmission.isSafe) {\n            session.clearCache();\n        }\n    }\n    formSubmissionFailedWithResponse(formSubmission, fetchResponse) {\n        this.element.delegate.loadResponse(fetchResponse);\n        session.clearCache();\n    }\n    formSubmissionErrored(formSubmission, error) {\n        console.error(error);\n    }\n    formSubmissionFinished({ formElement }) {\n        clearBusyState(formElement, this.findFrameElement(formElement));\n    }\n    allowsImmediateRender({ element: newFrame }, options) {\n        const event = dispatch(\"turbo:before-frame-render\", {\n            target: this.element,\n            detail: Object.assign({ newFrame }, options),\n            cancelable: true,\n        });\n        const { defaultPrevented, detail: { render }, } = event;\n        if (this.view.renderer && render) {\n            this.view.renderer.renderElement = render;\n        }\n        return !defaultPrevented;\n    }\n    viewRenderedSnapshot(_snapshot, _isPreview) { }\n    preloadOnLoadLinksForView(element) {\n        session.preloadOnLoadLinksForView(element);\n    }\n    viewInvalidated() { }\n    willRenderFrame(currentElement, _newElement) {\n        this.previousFrameElement = currentElement.cloneNode(true);\n    }\n    async loadFrameResponse(fetchResponse, document) {\n        const newFrameElement = await this.extractForeignFrameElement(document.body);\n        if (newFrameElement) {\n            const snapshot = new Snapshot(newFrameElement);\n            const renderer = new FrameRenderer(this, this.view.snapshot, snapshot, FrameRenderer.renderElement, false, false);\n            if (this.view.renderPromise)\n                await this.view.renderPromise;\n            this.changeHistory();\n            await this.view.render(renderer);\n            this.complete = true;\n            session.frameRendered(fetchResponse, this.element);\n            session.frameLoaded(this.element);\n            this.fetchResponseLoaded(fetchResponse);\n        }\n        else if (this.willHandleFrameMissingFromResponse(fetchResponse)) {\n            this.handleFrameMissingFromResponse(fetchResponse);\n        }\n    }\n    async visit(url) {\n        var _a;\n        const request = new FetchRequest(this, FetchMethod.get, url, new URLSearchParams(), this.element);\n        (_a = this.currentFetchRequest) === null || _a === void 0 ? void 0 : _a.cancel();\n        this.currentFetchRequest = request;\n        return new Promise((resolve) => {\n            this.resolveVisitPromise = () => {\n                this.resolveVisitPromise = () => { };\n                this.currentFetchRequest = null;\n                resolve();\n            };\n            request.perform();\n        });\n    }\n    navigateFrame(element, url, submitter) {\n        const frame = this.findFrameElement(element, submitter);\n        frame.delegate.proposeVisitIfNavigatedWithAction(frame, element, submitter);\n        this.withCurrentNavigationElement(element, () => {\n            frame.src = url;\n        });\n    }\n    proposeVisitIfNavigatedWithAction(frame, element, submitter) {\n        this.action = getVisitAction(submitter, element, frame);\n        if (this.action) {\n            const pageSnapshot = PageSnapshot.fromElement(frame).clone();\n            const { visitCachedSnapshot } = frame.delegate;\n            frame.delegate.fetchResponseLoaded = (fetchResponse) => {\n                if (frame.src) {\n                    const { statusCode, redirected } = fetchResponse;\n                    const responseHTML = frame.ownerDocument.documentElement.outerHTML;\n                    const response = { statusCode, redirected, responseHTML };\n                    const options = {\n                        response,\n                        visitCachedSnapshot,\n                        willRender: false,\n                        updateHistory: false,\n                        restorationIdentifier: this.restorationIdentifier,\n                        snapshot: pageSnapshot,\n                    };\n                    if (this.action)\n                        options.action = this.action;\n                    session.visit(frame.src, options);\n                }\n            };\n        }\n    }\n    changeHistory() {\n        if (this.action) {\n            const method = getHistoryMethodForAction(this.action);\n            session.history.update(method, expandURL(this.element.src || \"\"), this.restorationIdentifier);\n        }\n    }\n    async handleUnvisitableFrameResponse(fetchResponse) {\n        console.warn(`The response (${fetchResponse.statusCode}) from <turbo-frame id=\"${this.element.id}\"> is performing a full page visit due to turbo-visit-control.`);\n        await this.visitResponse(fetchResponse.response);\n    }\n    willHandleFrameMissingFromResponse(fetchResponse) {\n        this.element.setAttribute(\"complete\", \"\");\n        const response = fetchResponse.response;\n        const visit = async (url, options = {}) => {\n            if (url instanceof Response) {\n                this.visitResponse(url);\n            }\n            else {\n                session.visit(url, options);\n            }\n        };\n        const event = dispatch(\"turbo:frame-missing\", {\n            target: this.element,\n            detail: { response, visit },\n            cancelable: true,\n        });\n        return !event.defaultPrevented;\n    }\n    handleFrameMissingFromResponse(fetchResponse) {\n        this.view.missing();\n        this.throwFrameMissingError(fetchResponse);\n    }\n    throwFrameMissingError(fetchResponse) {\n        const message = `The response (${fetchResponse.statusCode}) did not contain the expected <turbo-frame id=\"${this.element.id}\"> and will be ignored. To perform a full page visit instead, set turbo-visit-control to reload.`;\n        throw new TurboFrameMissingError(message);\n    }\n    async visitResponse(response) {\n        const wrapped = new FetchResponse(response);\n        const responseHTML = await wrapped.responseHTML;\n        const { location, redirected, statusCode } = wrapped;\n        return session.visit(location, { response: { redirected, statusCode, responseHTML } });\n    }\n    findFrameElement(element, submitter) {\n        var _a;\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        return (_a = getFrameElementById(id)) !== null && _a !== void 0 ? _a : this.element;\n    }\n    async extractForeignFrameElement(container) {\n        let element;\n        const id = CSS.escape(this.id);\n        try {\n            element = activateElement(container.querySelector(`turbo-frame#${id}`), this.sourceURL);\n            if (element) {\n                return element;\n            }\n            element = activateElement(container.querySelector(`turbo-frame[src][recurse~=${id}]`), this.sourceURL);\n            if (element) {\n                await element.loaded;\n                return await this.extractForeignFrameElement(element);\n            }\n        }\n        catch (error) {\n            console.error(error);\n            return new FrameElement();\n        }\n        return null;\n    }\n    formActionIsVisitable(form, submitter) {\n        const action = getAction(form, submitter);\n        return locationIsVisitable(expandURL(action), this.rootLocation);\n    }\n    shouldInterceptNavigation(element, submitter) {\n        const id = getAttribute(\"data-turbo-frame\", submitter, element) || this.element.getAttribute(\"target\");\n        if (element instanceof HTMLFormElement && !this.formActionIsVisitable(element, submitter)) {\n            return false;\n        }\n        if (!this.enabled || id == \"_top\") {\n            return false;\n        }\n        if (id) {\n            const frameElement = getFrameElementById(id);\n            if (frameElement) {\n                return !frameElement.disabled;\n            }\n        }\n        if (!session.elementIsNavigatable(element)) {\n            return false;\n        }\n        if (submitter && !session.elementIsNavigatable(submitter)) {\n            return false;\n        }\n        return true;\n    }\n    get id() {\n        return this.element.id;\n    }\n    get enabled() {\n        return !this.element.disabled;\n    }\n    get sourceURL() {\n        if (this.element.src) {\n            return this.element.src;\n        }\n    }\n    set sourceURL(sourceURL) {\n        this.ignoringChangesToAttribute(\"src\", () => {\n            this.element.src = sourceURL !== null && sourceURL !== void 0 ? sourceURL : null;\n        });\n    }\n    get loadingStyle() {\n        return this.element.loading;\n    }\n    get isLoading() {\n        return this.formSubmission !== undefined || this.resolveVisitPromise() !== undefined;\n    }\n    get complete() {\n        return this.element.hasAttribute(\"complete\");\n    }\n    set complete(value) {\n        this.ignoringChangesToAttribute(\"complete\", () => {\n            if (value) {\n                this.element.setAttribute(\"complete\", \"\");\n            }\n            else {\n                this.element.removeAttribute(\"complete\");\n            }\n        });\n    }\n    get isActive() {\n        return this.element.isActive && this.connected;\n    }\n    get rootLocation() {\n        var _a;\n        const meta = this.element.ownerDocument.querySelector(`meta[name=\"turbo-root\"]`);\n        const root = (_a = meta === null || meta === void 0 ? void 0 : meta.content) !== null && _a !== void 0 ? _a : \"/\";\n        return expandURL(root);\n    }\n    isIgnoringChangesTo(attributeName) {\n        return this.ignoredAttributes.has(attributeName);\n    }\n    ignoringChangesToAttribute(attributeName, callback) {\n        this.ignoredAttributes.add(attributeName);\n        callback();\n        this.ignoredAttributes.delete(attributeName);\n    }\n    withCurrentNavigationElement(element, callback) {\n        this.currentNavigationElement = element;\n        callback();\n        delete this.currentNavigationElement;\n    }\n}\nfunction getFrameElementById(id) {\n    if (id != null) {\n        const element = document.getElementById(id);\n        if (element instanceof FrameElement) {\n            return element;\n        }\n    }\n}\nfunction activateElement(element, currentURL) {\n    if (element) {\n        const src = element.getAttribute(\"src\");\n        if (src != null && currentURL != null && urlsAreEqual(src, currentURL)) {\n            throw new Error(`Matching <turbo-frame id=\"${element.id}\"> element has a source URL which references itself`);\n        }\n        if (element.ownerDocument !== document) {\n            element = document.importNode(element, true);\n        }\n        if (element instanceof FrameElement) {\n            element.connectedCallback();\n            element.disconnectedCallback();\n            return element;\n        }\n    }\n}\n\nclass StreamElement extends HTMLElement {\n    static async renderElement(newElement) {\n        await newElement.performAction();\n    }\n    async connectedCallback() {\n        try {\n            await this.render();\n        }\n        catch (error) {\n            console.error(error);\n        }\n        finally {\n            this.disconnect();\n        }\n    }\n    async render() {\n        var _a;\n        return ((_a = this.renderPromise) !== null && _a !== void 0 ? _a : (this.renderPromise = (async () => {\n            const event = this.beforeRenderEvent;\n            if (this.dispatchEvent(event)) {\n                await nextAnimationFrame();\n                await event.detail.render(this);\n            }\n        })()));\n    }\n    disconnect() {\n        try {\n            this.remove();\n        }\n        catch (_a) { }\n    }\n    removeDuplicateTargetChildren() {\n        this.duplicateChildren.forEach((c) => c.remove());\n    }\n    get duplicateChildren() {\n        var _a;\n        const existingChildren = this.targetElements.flatMap((e) => [...e.children]).filter((c) => !!c.id);\n        const newChildrenIds = [...(((_a = this.templateContent) === null || _a === void 0 ? void 0 : _a.children) || [])].filter((c) => !!c.id).map((c) => c.id);\n        return existingChildren.filter((c) => newChildrenIds.includes(c.id));\n    }\n    get performAction() {\n        if (this.action) {\n            const actionFunction = StreamActions[this.action];\n            if (actionFunction) {\n                return actionFunction;\n            }\n            this.raise(\"unknown action\");\n        }\n        this.raise(\"action attribute is missing\");\n    }\n    get targetElements() {\n        if (this.target) {\n            return this.targetElementsById;\n        }\n        else if (this.targets) {\n            return this.targetElementsByQuery;\n        }\n        else {\n            this.raise(\"target or targets attribute is missing\");\n        }\n    }\n    get templateContent() {\n        return this.templateElement.content.cloneNode(true);\n    }\n    get templateElement() {\n        if (this.firstElementChild === null) {\n            const template = this.ownerDocument.createElement(\"template\");\n            this.appendChild(template);\n            return template;\n        }\n        else if (this.firstElementChild instanceof HTMLTemplateElement) {\n            return this.firstElementChild;\n        }\n        this.raise(\"first child element must be a <template> element\");\n    }\n    get action() {\n        return this.getAttribute(\"action\");\n    }\n    get target() {\n        return this.getAttribute(\"target\");\n    }\n    get targets() {\n        return this.getAttribute(\"targets\");\n    }\n    raise(message) {\n        throw new Error(`${this.description}: ${message}`);\n    }\n    get description() {\n        var _a, _b;\n        return (_b = ((_a = this.outerHTML.match(/<[^>]+>/)) !== null && _a !== void 0 ? _a : [])[0]) !== null && _b !== void 0 ? _b : \"<turbo-stream>\";\n    }\n    get beforeRenderEvent() {\n        return new CustomEvent(\"turbo:before-stream-render\", {\n            bubbles: true,\n            cancelable: true,\n            detail: { newStream: this, render: StreamElement.renderElement },\n        });\n    }\n    get targetElementsById() {\n        var _a;\n        const element = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.getElementById(this.target);\n        if (element !== null) {\n            return [element];\n        }\n        else {\n            return [];\n        }\n    }\n    get targetElementsByQuery() {\n        var _a;\n        const elements = (_a = this.ownerDocument) === null || _a === void 0 ? void 0 : _a.querySelectorAll(this.targets);\n        if (elements.length !== 0) {\n            return Array.prototype.slice.call(elements);\n        }\n        else {\n            return [];\n        }\n    }\n}\n\nclass StreamSourceElement extends HTMLElement {\n    constructor() {\n        super(...arguments);\n        this.streamSource = null;\n    }\n    connectedCallback() {\n        this.streamSource = this.src.match(/^ws{1,2}:/) ? new WebSocket(this.src) : new EventSource(this.src);\n        connectStreamSource(this.streamSource);\n    }\n    disconnectedCallback() {\n        if (this.streamSource) {\n            disconnectStreamSource(this.streamSource);\n        }\n    }\n    get src() {\n        return this.getAttribute(\"src\") || \"\";\n    }\n}\n\nFrameElement.delegateConstructor = FrameController;\nif (customElements.get(\"turbo-frame\") === undefined) {\n    customElements.define(\"turbo-frame\", FrameElement);\n}\nif (customElements.get(\"turbo-stream\") === undefined) {\n    customElements.define(\"turbo-stream\", StreamElement);\n}\nif (customElements.get(\"turbo-stream-source\") === undefined) {\n    customElements.define(\"turbo-stream-source\", StreamSourceElement);\n}\n\n(() => {\n    let element = document.currentScript;\n    if (!element)\n        return;\n    if (element.hasAttribute(\"data-turbo-suppress-warning\"))\n        return;\n    element = element.parentElement;\n    while (element) {\n        if (element == document.body) {\n            return console.warn(unindent `\n        You are loading Turbo from a <script> element inside the <body> element. This is probably not what you meant to do!\n\n        Load your application’s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\n\n        For more information, see: https://turbo.hotwired.dev/handbook/building#working-with-script-elements\n\n        ——\n        Suppress this warning by adding a \"data-turbo-suppress-warning\" attribute to: %s\n      `, element.outerHTML);\n        }\n        element = element.parentElement;\n    }\n})();\n\nwindow.Turbo = Turbo;\nstart();\n\nexport { FrameElement, FrameLoadingStyle, FrameRenderer, PageRenderer, PageSnapshot, StreamActions, StreamElement, StreamSourceElement, cache, clearCache, connectStreamSource, disconnectStreamSource, navigator$1 as navigator, registerAdapter, renderStreamMessage, session, setConfirmMethod, setFormMode, setProgressBarDelay, start, visit };\n","let consumer\n\nexport async function getConsumer() {\n  return consumer || setConsumer(createConsumer().then(setConsumer))\n}\n\nexport function setConsumer(newConsumer) {\n  return consumer = newConsumer\n}\n\nexport async function createConsumer() {\n  const { createConsumer } = await import(/* webpackChunkName: \"actioncable\" */ \"@rails/actioncable/src\")\n  return createConsumer()\n}\n\nexport async function subscribeTo(channel, mixin) {\n  const { subscriptions } = await getConsumer()\n  return subscriptions.create(channel, mixin)\n}\n","// Based on https://github.com/nathan7/snakeize\n//\n// This software is released under the MIT license:\n// Permission is hereby granted, free of charge, to any person obtaining a copy of\n// this software and associated documentation files (the \"Software\"), to deal in\n// the Software without restriction, including without limitation the rights to\n// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of\n// the Software, and to permit persons to whom the Software is furnished to do so,\n// subject to the following conditions:\n\n// The above copyright notice and this permission notice shall be included in all\n// 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, FITNESS\n// FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR\n// COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\n// IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\nexport default function walk (obj) {\n    if (!obj || typeof obj !== 'object') return obj;\n    if (obj instanceof Date || obj instanceof RegExp) return obj;\n    if (Array.isArray(obj)) return obj.map(walk);\n    return Object.keys(obj).reduce(function (acc, key) {\n        var camel = key[0].toLowerCase() + key.slice(1).replace(/([A-Z]+)/g, function (m, x) {\n            return '_' + x.toLowerCase();\n        });\n        acc[camel] = walk(obj[key]);\n        return acc;\n    }, {});\n};","import { connectStreamSource, disconnectStreamSource } from \"@hotwired/turbo\"\nimport { subscribeTo } from \"./cable\"\nimport snakeize from \"./snakeize\"\n\nclass TurboCableStreamSourceElement extends HTMLElement {\n  async connectedCallback() {\n    connectStreamSource(this)\n    this.subscription = await subscribeTo(this.channel, {\n      received: this.dispatchMessageEvent.bind(this),\n      connected: this.subscriptionConnected.bind(this),\n      disconnected: this.subscriptionDisconnected.bind(this)\n    })\n  }\n\n  disconnectedCallback() {\n    disconnectStreamSource(this)\n    if (this.subscription) this.subscription.unsubscribe()\n  }\n\n  dispatchMessageEvent(data) {\n    const event = new MessageEvent(\"message\", { data })\n    return this.dispatchEvent(event)\n  }\n\n  subscriptionConnected() {\n    this.setAttribute(\"connected\", \"\")\n  }\n\n  subscriptionDisconnected() {\n    this.removeAttribute(\"connected\")\n  }\n\n  get channel() {\n    const channel = this.getAttribute(\"channel\")\n    const signed_stream_name = this.getAttribute(\"signed-stream-name\")\n    return { channel, signed_stream_name, ...snakeize({ ...this.dataset }) }\n  }\n}\n\n\nif (customElements.get(\"turbo-cable-stream-source\") === undefined) {\n  customElements.define(\"turbo-cable-stream-source\", TurboCableStreamSourceElement)\n}\n","import \"./cable_stream_source_element\"\n\nimport * as Turbo from \"@hotwired/turbo\"\nexport { Turbo }\n\nimport * as cable from \"./cable\"\nexport { cable }\n\nimport { encodeMethodIntoRequestBody } from \"./fetch_requests\"\n\naddEventListener(\"turbo:before-fetch-request\", encodeMethodIntoRequestBody)\n","export function encodeMethodIntoRequestBody(event) {\n  if (event.target instanceof HTMLFormElement) {\n    const { target: form, detail: { fetchOptions } } = event\n\n    form.addEventListener(\"turbo:submit-start\", ({ detail: { formSubmission: { submitter } } }) => {\n      const body = isBodyInit(fetchOptions.body) ? fetchOptions.body : new URLSearchParams()\n      const method = determineFetchMethod(submitter, body, form)\n\n      if (!/get/i.test(method)) {\n        if (/post/i.test(method)) {\n          body.delete(\"_method\")\n        } else {\n          body.set(\"_method\", method)\n        }\n\n        fetchOptions.method = \"post\"\n      }\n    }, { once: true })\n  }\n}\n\nfunction determineFetchMethod(submitter, body, form) {\n  const formMethod = determineFormMethod(submitter)\n  const overrideMethod = body.get(\"_method\")\n  const method = form.getAttribute(\"method\") || \"get\"\n\n  if (typeof formMethod == \"string\") {\n    return formMethod\n  } else if (typeof overrideMethod == \"string\") {\n    return overrideMethod\n  } else {\n    return method\n  }\n}\n\nfunction determineFormMethod(submitter) {\n  if (submitter instanceof HTMLButtonElement || submitter instanceof HTMLInputElement) {\n    if (submitter.hasAttribute(\"formmethod\")) {\n      return submitter.formMethod\n    } else {\n      return null\n    }\n  } else {\n    return null\n  }\n}\n\nfunction isBodyInit(body) {\n  return body instanceof FormData || body instanceof URLSearchParams\n}\n","/*\nStimulus 3.2.1\nCopyright © 2023 Basecamp, LLC\n */\nclass EventListener {\n    constructor(eventTarget, eventName, eventOptions) {\n        this.eventTarget = eventTarget;\n        this.eventName = eventName;\n        this.eventOptions = eventOptions;\n        this.unorderedBindings = new Set();\n    }\n    connect() {\n        this.eventTarget.addEventListener(this.eventName, this, this.eventOptions);\n    }\n    disconnect() {\n        this.eventTarget.removeEventListener(this.eventName, this, this.eventOptions);\n    }\n    bindingConnected(binding) {\n        this.unorderedBindings.add(binding);\n    }\n    bindingDisconnected(binding) {\n        this.unorderedBindings.delete(binding);\n    }\n    handleEvent(event) {\n        const extendedEvent = extendEvent(event);\n        for (const binding of this.bindings) {\n            if (extendedEvent.immediatePropagationStopped) {\n                break;\n            }\n            else {\n                binding.handleEvent(extendedEvent);\n            }\n        }\n    }\n    hasBindings() {\n        return this.unorderedBindings.size > 0;\n    }\n    get bindings() {\n        return Array.from(this.unorderedBindings).sort((left, right) => {\n            const leftIndex = left.index, rightIndex = right.index;\n            return leftIndex < rightIndex ? -1 : leftIndex > rightIndex ? 1 : 0;\n        });\n    }\n}\nfunction extendEvent(event) {\n    if (\"immediatePropagationStopped\" in event) {\n        return event;\n    }\n    else {\n        const { stopImmediatePropagation } = event;\n        return Object.assign(event, {\n            immediatePropagationStopped: false,\n            stopImmediatePropagation() {\n                this.immediatePropagationStopped = true;\n                stopImmediatePropagation.call(this);\n            },\n        });\n    }\n}\n\nclass Dispatcher {\n    constructor(application) {\n        this.application = application;\n        this.eventListenerMaps = new Map();\n        this.started = false;\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.eventListeners.forEach((eventListener) => eventListener.connect());\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.eventListeners.forEach((eventListener) => eventListener.disconnect());\n        }\n    }\n    get eventListeners() {\n        return Array.from(this.eventListenerMaps.values()).reduce((listeners, map) => listeners.concat(Array.from(map.values())), []);\n    }\n    bindingConnected(binding) {\n        this.fetchEventListenerForBinding(binding).bindingConnected(binding);\n    }\n    bindingDisconnected(binding, clearEventListeners = false) {\n        this.fetchEventListenerForBinding(binding).bindingDisconnected(binding);\n        if (clearEventListeners)\n            this.clearEventListenersForBinding(binding);\n    }\n    handleError(error, message, detail = {}) {\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    clearEventListenersForBinding(binding) {\n        const eventListener = this.fetchEventListenerForBinding(binding);\n        if (!eventListener.hasBindings()) {\n            eventListener.disconnect();\n            this.removeMappedEventListenerFor(binding);\n        }\n    }\n    removeMappedEventListenerFor(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        eventListenerMap.delete(cacheKey);\n        if (eventListenerMap.size == 0)\n            this.eventListenerMaps.delete(eventTarget);\n    }\n    fetchEventListenerForBinding(binding) {\n        const { eventTarget, eventName, eventOptions } = binding;\n        return this.fetchEventListener(eventTarget, eventName, eventOptions);\n    }\n    fetchEventListener(eventTarget, eventName, eventOptions) {\n        const eventListenerMap = this.fetchEventListenerMapForEventTarget(eventTarget);\n        const cacheKey = this.cacheKey(eventName, eventOptions);\n        let eventListener = eventListenerMap.get(cacheKey);\n        if (!eventListener) {\n            eventListener = this.createEventListener(eventTarget, eventName, eventOptions);\n            eventListenerMap.set(cacheKey, eventListener);\n        }\n        return eventListener;\n    }\n    createEventListener(eventTarget, eventName, eventOptions) {\n        const eventListener = new EventListener(eventTarget, eventName, eventOptions);\n        if (this.started) {\n            eventListener.connect();\n        }\n        return eventListener;\n    }\n    fetchEventListenerMapForEventTarget(eventTarget) {\n        let eventListenerMap = this.eventListenerMaps.get(eventTarget);\n        if (!eventListenerMap) {\n            eventListenerMap = new Map();\n            this.eventListenerMaps.set(eventTarget, eventListenerMap);\n        }\n        return eventListenerMap;\n    }\n    cacheKey(eventName, eventOptions) {\n        const parts = [eventName];\n        Object.keys(eventOptions)\n            .sort()\n            .forEach((key) => {\n            parts.push(`${eventOptions[key] ? \"\" : \"!\"}${key}`);\n        });\n        return parts.join(\":\");\n    }\n}\n\nconst defaultActionDescriptorFilters = {\n    stop({ event, value }) {\n        if (value)\n            event.stopPropagation();\n        return true;\n    },\n    prevent({ event, value }) {\n        if (value)\n            event.preventDefault();\n        return true;\n    },\n    self({ event, value, element }) {\n        if (value) {\n            return element === event.target;\n        }\n        else {\n            return true;\n        }\n    },\n};\nconst descriptorPattern = /^(?:(?:([^.]+?)\\+)?(.+?)(?:\\.(.+?))?(?:@(window|document))?->)?(.+?)(?:#([^:]+?))(?::(.+))?$/;\nfunction parseActionDescriptorString(descriptorString) {\n    const source = descriptorString.trim();\n    const matches = source.match(descriptorPattern) || [];\n    let eventName = matches[2];\n    let keyFilter = matches[3];\n    if (keyFilter && ![\"keydown\", \"keyup\", \"keypress\"].includes(eventName)) {\n        eventName += `.${keyFilter}`;\n        keyFilter = \"\";\n    }\n    return {\n        eventTarget: parseEventTarget(matches[4]),\n        eventName,\n        eventOptions: matches[7] ? parseEventOptions(matches[7]) : {},\n        identifier: matches[5],\n        methodName: matches[6],\n        keyFilter: matches[1] || keyFilter,\n    };\n}\nfunction parseEventTarget(eventTargetName) {\n    if (eventTargetName == \"window\") {\n        return window;\n    }\n    else if (eventTargetName == \"document\") {\n        return document;\n    }\n}\nfunction parseEventOptions(eventOptions) {\n    return eventOptions\n        .split(\":\")\n        .reduce((options, token) => Object.assign(options, { [token.replace(/^!/, \"\")]: !/^!/.test(token) }), {});\n}\nfunction stringifyEventTarget(eventTarget) {\n    if (eventTarget == window) {\n        return \"window\";\n    }\n    else if (eventTarget == document) {\n        return \"document\";\n    }\n}\n\nfunction camelize(value) {\n    return value.replace(/(?:[_-])([a-z0-9])/g, (_, char) => char.toUpperCase());\n}\nfunction namespaceCamelize(value) {\n    return camelize(value.replace(/--/g, \"-\").replace(/__/g, \"_\"));\n}\nfunction capitalize(value) {\n    return value.charAt(0).toUpperCase() + value.slice(1);\n}\nfunction dasherize(value) {\n    return value.replace(/([A-Z])/g, (_, char) => `-${char.toLowerCase()}`);\n}\nfunction tokenize(value) {\n    return value.match(/[^\\s]+/g) || [];\n}\n\nfunction isSomething(object) {\n    return object !== null && object !== undefined;\n}\nfunction hasProperty(object, property) {\n    return Object.prototype.hasOwnProperty.call(object, property);\n}\n\nconst allModifiers = [\"meta\", \"ctrl\", \"alt\", \"shift\"];\nclass Action {\n    constructor(element, index, descriptor, schema) {\n        this.element = element;\n        this.index = index;\n        this.eventTarget = descriptor.eventTarget || element;\n        this.eventName = descriptor.eventName || getDefaultEventNameForElement(element) || error(\"missing event name\");\n        this.eventOptions = descriptor.eventOptions || {};\n        this.identifier = descriptor.identifier || error(\"missing identifier\");\n        this.methodName = descriptor.methodName || error(\"missing method name\");\n        this.keyFilter = descriptor.keyFilter || \"\";\n        this.schema = schema;\n    }\n    static forToken(token, schema) {\n        return new this(token.element, token.index, parseActionDescriptorString(token.content), schema);\n    }\n    toString() {\n        const eventFilter = this.keyFilter ? `.${this.keyFilter}` : \"\";\n        const eventTarget = this.eventTargetName ? `@${this.eventTargetName}` : \"\";\n        return `${this.eventName}${eventFilter}${eventTarget}->${this.identifier}#${this.methodName}`;\n    }\n    shouldIgnoreKeyboardEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = this.keyFilter.split(\"+\");\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        const standardFilter = filters.filter((key) => !allModifiers.includes(key))[0];\n        if (!standardFilter) {\n            return false;\n        }\n        if (!hasProperty(this.keyMappings, standardFilter)) {\n            error(`contains unknown key filter: ${this.keyFilter}`);\n        }\n        return this.keyMappings[standardFilter].toLowerCase() !== event.key.toLowerCase();\n    }\n    shouldIgnoreMouseEvent(event) {\n        if (!this.keyFilter) {\n            return false;\n        }\n        const filters = [this.keyFilter];\n        if (this.keyFilterDissatisfied(event, filters)) {\n            return true;\n        }\n        return false;\n    }\n    get params() {\n        const params = {};\n        const pattern = new RegExp(`^data-${this.identifier}-(.+)-param$`, \"i\");\n        for (const { name, value } of Array.from(this.element.attributes)) {\n            const match = name.match(pattern);\n            const key = match && match[1];\n            if (key) {\n                params[camelize(key)] = typecast(value);\n            }\n        }\n        return params;\n    }\n    get eventTargetName() {\n        return stringifyEventTarget(this.eventTarget);\n    }\n    get keyMappings() {\n        return this.schema.keyMappings;\n    }\n    keyFilterDissatisfied(event, filters) {\n        const [meta, ctrl, alt, shift] = allModifiers.map((modifier) => filters.includes(modifier));\n        return event.metaKey !== meta || event.ctrlKey !== ctrl || event.altKey !== alt || event.shiftKey !== shift;\n    }\n}\nconst defaultEventNames = {\n    a: () => \"click\",\n    button: () => \"click\",\n    form: () => \"submit\",\n    details: () => \"toggle\",\n    input: (e) => (e.getAttribute(\"type\") == \"submit\" ? \"click\" : \"input\"),\n    select: () => \"change\",\n    textarea: () => \"input\",\n};\nfunction getDefaultEventNameForElement(element) {\n    const tagName = element.tagName.toLowerCase();\n    if (tagName in defaultEventNames) {\n        return defaultEventNames[tagName](element);\n    }\n}\nfunction error(message) {\n    throw new Error(message);\n}\nfunction typecast(value) {\n    try {\n        return JSON.parse(value);\n    }\n    catch (o_O) {\n        return value;\n    }\n}\n\nclass Binding {\n    constructor(context, action) {\n        this.context = context;\n        this.action = action;\n    }\n    get index() {\n        return this.action.index;\n    }\n    get eventTarget() {\n        return this.action.eventTarget;\n    }\n    get eventOptions() {\n        return this.action.eventOptions;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    handleEvent(event) {\n        const actionEvent = this.prepareActionEvent(event);\n        if (this.willBeInvokedByEvent(event) && this.applyEventModifiers(actionEvent)) {\n            this.invokeWithEvent(actionEvent);\n        }\n    }\n    get eventName() {\n        return this.action.eventName;\n    }\n    get method() {\n        const method = this.controller[this.methodName];\n        if (typeof method == \"function\") {\n            return method;\n        }\n        throw new Error(`Action \"${this.action}\" references undefined method \"${this.methodName}\"`);\n    }\n    applyEventModifiers(event) {\n        const { element } = this.action;\n        const { actionDescriptorFilters } = this.context.application;\n        const { controller } = this.context;\n        let passes = true;\n        for (const [name, value] of Object.entries(this.eventOptions)) {\n            if (name in actionDescriptorFilters) {\n                const filter = actionDescriptorFilters[name];\n                passes = passes && filter({ name, value, event, element, controller });\n            }\n            else {\n                continue;\n            }\n        }\n        return passes;\n    }\n    prepareActionEvent(event) {\n        return Object.assign(event, { params: this.action.params });\n    }\n    invokeWithEvent(event) {\n        const { target, currentTarget } = event;\n        try {\n            this.method.call(this.controller, event);\n            this.context.logDebugActivity(this.methodName, { event, target, currentTarget, action: this.methodName });\n        }\n        catch (error) {\n            const { identifier, controller, element, index } = this;\n            const detail = { identifier, controller, element, index, event };\n            this.context.handleError(error, `invoking action \"${this.action}\"`, detail);\n        }\n    }\n    willBeInvokedByEvent(event) {\n        const eventTarget = event.target;\n        if (event instanceof KeyboardEvent && this.action.shouldIgnoreKeyboardEvent(event)) {\n            return false;\n        }\n        if (event instanceof MouseEvent && this.action.shouldIgnoreMouseEvent(event)) {\n            return false;\n        }\n        if (this.element === eventTarget) {\n            return true;\n        }\n        else if (eventTarget instanceof Element && this.element.contains(eventTarget)) {\n            return this.scope.containsElement(eventTarget);\n        }\n        else {\n            return this.scope.containsElement(this.action.element);\n        }\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    get methodName() {\n        return this.action.methodName;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nclass ElementObserver {\n    constructor(element, delegate) {\n        this.mutationObserverInit = { attributes: true, childList: true, subtree: true };\n        this.element = element;\n        this.started = false;\n        this.delegate = delegate;\n        this.elements = new Set();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.refresh();\n        }\n    }\n    pause(callback) {\n        if (this.started) {\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n        callback();\n        if (!this.started) {\n            this.mutationObserver.observe(this.element, this.mutationObserverInit);\n            this.started = true;\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            const matches = new Set(this.matchElementsInTree());\n            for (const element of Array.from(this.elements)) {\n                if (!matches.has(element)) {\n                    this.removeElement(element);\n                }\n            }\n            for (const element of Array.from(matches)) {\n                this.addElement(element);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        if (mutation.type == \"attributes\") {\n            this.processAttributeChange(mutation.target, mutation.attributeName);\n        }\n        else if (mutation.type == \"childList\") {\n            this.processRemovedNodes(mutation.removedNodes);\n            this.processAddedNodes(mutation.addedNodes);\n        }\n    }\n    processAttributeChange(element, attributeName) {\n        if (this.elements.has(element)) {\n            if (this.delegate.elementAttributeChanged && this.matchElement(element)) {\n                this.delegate.elementAttributeChanged(element, attributeName);\n            }\n            else {\n                this.removeElement(element);\n            }\n        }\n        else if (this.matchElement(element)) {\n            this.addElement(element);\n        }\n    }\n    processRemovedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element) {\n                this.processTree(element, this.removeElement);\n            }\n        }\n    }\n    processAddedNodes(nodes) {\n        for (const node of Array.from(nodes)) {\n            const element = this.elementFromNode(node);\n            if (element && this.elementIsActive(element)) {\n                this.processTree(element, this.addElement);\n            }\n        }\n    }\n    matchElement(element) {\n        return this.delegate.matchElement(element);\n    }\n    matchElementsInTree(tree = this.element) {\n        return this.delegate.matchElementsInTree(tree);\n    }\n    processTree(tree, processor) {\n        for (const element of this.matchElementsInTree(tree)) {\n            processor.call(this, element);\n        }\n    }\n    elementFromNode(node) {\n        if (node.nodeType == Node.ELEMENT_NODE) {\n            return node;\n        }\n    }\n    elementIsActive(element) {\n        if (element.isConnected != this.element.isConnected) {\n            return false;\n        }\n        else {\n            return this.element.contains(element);\n        }\n    }\n    addElement(element) {\n        if (!this.elements.has(element)) {\n            if (this.elementIsActive(element)) {\n                this.elements.add(element);\n                if (this.delegate.elementMatched) {\n                    this.delegate.elementMatched(element);\n                }\n            }\n        }\n    }\n    removeElement(element) {\n        if (this.elements.has(element)) {\n            this.elements.delete(element);\n            if (this.delegate.elementUnmatched) {\n                this.delegate.elementUnmatched(element);\n            }\n        }\n    }\n}\n\nclass AttributeObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeName = attributeName;\n        this.delegate = delegate;\n        this.elementObserver = new ElementObserver(element, this);\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    get selector() {\n        return `[${this.attributeName}]`;\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    matchElement(element) {\n        return element.hasAttribute(this.attributeName);\n    }\n    matchElementsInTree(tree) {\n        const match = this.matchElement(tree) ? [tree] : [];\n        const matches = Array.from(tree.querySelectorAll(this.selector));\n        return match.concat(matches);\n    }\n    elementMatched(element) {\n        if (this.delegate.elementMatchedAttribute) {\n            this.delegate.elementMatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementUnmatched(element) {\n        if (this.delegate.elementUnmatchedAttribute) {\n            this.delegate.elementUnmatchedAttribute(element, this.attributeName);\n        }\n    }\n    elementAttributeChanged(element, attributeName) {\n        if (this.delegate.elementAttributeValueChanged && this.attributeName == attributeName) {\n            this.delegate.elementAttributeValueChanged(element, attributeName);\n        }\n    }\n}\n\nfunction add(map, key, value) {\n    fetch(map, key).add(value);\n}\nfunction del(map, key, value) {\n    fetch(map, key).delete(value);\n    prune(map, key);\n}\nfunction fetch(map, key) {\n    let values = map.get(key);\n    if (!values) {\n        values = new Set();\n        map.set(key, values);\n    }\n    return values;\n}\nfunction prune(map, key) {\n    const values = map.get(key);\n    if (values != null && values.size == 0) {\n        map.delete(key);\n    }\n}\n\nclass Multimap {\n    constructor() {\n        this.valuesByKey = new Map();\n    }\n    get keys() {\n        return Array.from(this.valuesByKey.keys());\n    }\n    get values() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((values, set) => values.concat(Array.from(set)), []);\n    }\n    get size() {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.reduce((size, set) => size + set.size, 0);\n    }\n    add(key, value) {\n        add(this.valuesByKey, key, value);\n    }\n    delete(key, value) {\n        del(this.valuesByKey, key, value);\n    }\n    has(key, value) {\n        const values = this.valuesByKey.get(key);\n        return values != null && values.has(value);\n    }\n    hasKey(key) {\n        return this.valuesByKey.has(key);\n    }\n    hasValue(value) {\n        const sets = Array.from(this.valuesByKey.values());\n        return sets.some((set) => set.has(value));\n    }\n    getValuesForKey(key) {\n        const values = this.valuesByKey.get(key);\n        return values ? Array.from(values) : [];\n    }\n    getKeysForValue(value) {\n        return Array.from(this.valuesByKey)\n            .filter(([_key, values]) => values.has(value))\n            .map(([key, _values]) => key);\n    }\n}\n\nclass IndexedMultimap extends Multimap {\n    constructor() {\n        super();\n        this.keysByValue = new Map();\n    }\n    get values() {\n        return Array.from(this.keysByValue.keys());\n    }\n    add(key, value) {\n        super.add(key, value);\n        add(this.keysByValue, value, key);\n    }\n    delete(key, value) {\n        super.delete(key, value);\n        del(this.keysByValue, value, key);\n    }\n    hasValue(value) {\n        return this.keysByValue.has(value);\n    }\n    getKeysForValue(value) {\n        const set = this.keysByValue.get(value);\n        return set ? Array.from(set) : [];\n    }\n}\n\nclass SelectorObserver {\n    constructor(element, selector, delegate, details) {\n        this._selector = selector;\n        this.details = details;\n        this.elementObserver = new ElementObserver(element, this);\n        this.delegate = delegate;\n        this.matchesByElement = new Multimap();\n    }\n    get started() {\n        return this.elementObserver.started;\n    }\n    get selector() {\n        return this._selector;\n    }\n    set selector(selector) {\n        this._selector = selector;\n        this.refresh();\n    }\n    start() {\n        this.elementObserver.start();\n    }\n    pause(callback) {\n        this.elementObserver.pause(callback);\n    }\n    stop() {\n        this.elementObserver.stop();\n    }\n    refresh() {\n        this.elementObserver.refresh();\n    }\n    get element() {\n        return this.elementObserver.element;\n    }\n    matchElement(element) {\n        const { selector } = this;\n        if (selector) {\n            const matches = element.matches(selector);\n            if (this.delegate.selectorMatchElement) {\n                return matches && this.delegate.selectorMatchElement(element, this.details);\n            }\n            return matches;\n        }\n        else {\n            return false;\n        }\n    }\n    matchElementsInTree(tree) {\n        const { selector } = this;\n        if (selector) {\n            const match = this.matchElement(tree) ? [tree] : [];\n            const matches = Array.from(tree.querySelectorAll(selector)).filter((match) => this.matchElement(match));\n            return match.concat(matches);\n        }\n        else {\n            return [];\n        }\n    }\n    elementMatched(element) {\n        const { selector } = this;\n        if (selector) {\n            this.selectorMatched(element, selector);\n        }\n    }\n    elementUnmatched(element) {\n        const selectors = this.matchesByElement.getKeysForValue(element);\n        for (const selector of selectors) {\n            this.selectorUnmatched(element, selector);\n        }\n    }\n    elementAttributeChanged(element, _attributeName) {\n        const { selector } = this;\n        if (selector) {\n            const matches = this.matchElement(element);\n            const matchedBefore = this.matchesByElement.has(selector, element);\n            if (matches && !matchedBefore) {\n                this.selectorMatched(element, selector);\n            }\n            else if (!matches && matchedBefore) {\n                this.selectorUnmatched(element, selector);\n            }\n        }\n    }\n    selectorMatched(element, selector) {\n        this.delegate.selectorMatched(element, selector, this.details);\n        this.matchesByElement.add(selector, element);\n    }\n    selectorUnmatched(element, selector) {\n        this.delegate.selectorUnmatched(element, selector, this.details);\n        this.matchesByElement.delete(selector, element);\n    }\n}\n\nclass StringMapObserver {\n    constructor(element, delegate) {\n        this.element = element;\n        this.delegate = delegate;\n        this.started = false;\n        this.stringMap = new Map();\n        this.mutationObserver = new MutationObserver((mutations) => this.processMutations(mutations));\n    }\n    start() {\n        if (!this.started) {\n            this.started = true;\n            this.mutationObserver.observe(this.element, { attributes: true, attributeOldValue: true });\n            this.refresh();\n        }\n    }\n    stop() {\n        if (this.started) {\n            this.mutationObserver.takeRecords();\n            this.mutationObserver.disconnect();\n            this.started = false;\n        }\n    }\n    refresh() {\n        if (this.started) {\n            for (const attributeName of this.knownAttributeNames) {\n                this.refreshAttribute(attributeName, null);\n            }\n        }\n    }\n    processMutations(mutations) {\n        if (this.started) {\n            for (const mutation of mutations) {\n                this.processMutation(mutation);\n            }\n        }\n    }\n    processMutation(mutation) {\n        const attributeName = mutation.attributeName;\n        if (attributeName) {\n            this.refreshAttribute(attributeName, mutation.oldValue);\n        }\n    }\n    refreshAttribute(attributeName, oldValue) {\n        const key = this.delegate.getStringMapKeyForAttribute(attributeName);\n        if (key != null) {\n            if (!this.stringMap.has(attributeName)) {\n                this.stringMapKeyAdded(key, attributeName);\n            }\n            const value = this.element.getAttribute(attributeName);\n            if (this.stringMap.get(attributeName) != value) {\n                this.stringMapValueChanged(value, key, oldValue);\n            }\n            if (value == null) {\n                const oldValue = this.stringMap.get(attributeName);\n                this.stringMap.delete(attributeName);\n                if (oldValue)\n                    this.stringMapKeyRemoved(key, attributeName, oldValue);\n            }\n            else {\n                this.stringMap.set(attributeName, value);\n            }\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        if (this.delegate.stringMapKeyAdded) {\n            this.delegate.stringMapKeyAdded(key, attributeName);\n        }\n    }\n    stringMapValueChanged(value, key, oldValue) {\n        if (this.delegate.stringMapValueChanged) {\n            this.delegate.stringMapValueChanged(value, key, oldValue);\n        }\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        if (this.delegate.stringMapKeyRemoved) {\n            this.delegate.stringMapKeyRemoved(key, attributeName, oldValue);\n        }\n    }\n    get knownAttributeNames() {\n        return Array.from(new Set(this.currentAttributeNames.concat(this.recordedAttributeNames)));\n    }\n    get currentAttributeNames() {\n        return Array.from(this.element.attributes).map((attribute) => attribute.name);\n    }\n    get recordedAttributeNames() {\n        return Array.from(this.stringMap.keys());\n    }\n}\n\nclass TokenListObserver {\n    constructor(element, attributeName, delegate) {\n        this.attributeObserver = new AttributeObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.tokensByElement = new Multimap();\n    }\n    get started() {\n        return this.attributeObserver.started;\n    }\n    start() {\n        this.attributeObserver.start();\n    }\n    pause(callback) {\n        this.attributeObserver.pause(callback);\n    }\n    stop() {\n        this.attributeObserver.stop();\n    }\n    refresh() {\n        this.attributeObserver.refresh();\n    }\n    get element() {\n        return this.attributeObserver.element;\n    }\n    get attributeName() {\n        return this.attributeObserver.attributeName;\n    }\n    elementMatchedAttribute(element) {\n        this.tokensMatched(this.readTokensForElement(element));\n    }\n    elementAttributeValueChanged(element) {\n        const [unmatchedTokens, matchedTokens] = this.refreshTokensForElement(element);\n        this.tokensUnmatched(unmatchedTokens);\n        this.tokensMatched(matchedTokens);\n    }\n    elementUnmatchedAttribute(element) {\n        this.tokensUnmatched(this.tokensByElement.getValuesForKey(element));\n    }\n    tokensMatched(tokens) {\n        tokens.forEach((token) => this.tokenMatched(token));\n    }\n    tokensUnmatched(tokens) {\n        tokens.forEach((token) => this.tokenUnmatched(token));\n    }\n    tokenMatched(token) {\n        this.delegate.tokenMatched(token);\n        this.tokensByElement.add(token.element, token);\n    }\n    tokenUnmatched(token) {\n        this.delegate.tokenUnmatched(token);\n        this.tokensByElement.delete(token.element, token);\n    }\n    refreshTokensForElement(element) {\n        const previousTokens = this.tokensByElement.getValuesForKey(element);\n        const currentTokens = this.readTokensForElement(element);\n        const firstDifferingIndex = zip(previousTokens, currentTokens).findIndex(([previousToken, currentToken]) => !tokensAreEqual(previousToken, currentToken));\n        if (firstDifferingIndex == -1) {\n            return [[], []];\n        }\n        else {\n            return [previousTokens.slice(firstDifferingIndex), currentTokens.slice(firstDifferingIndex)];\n        }\n    }\n    readTokensForElement(element) {\n        const attributeName = this.attributeName;\n        const tokenString = element.getAttribute(attributeName) || \"\";\n        return parseTokenString(tokenString, element, attributeName);\n    }\n}\nfunction parseTokenString(tokenString, element, attributeName) {\n    return tokenString\n        .trim()\n        .split(/\\s+/)\n        .filter((content) => content.length)\n        .map((content, index) => ({ element, attributeName, content, index }));\n}\nfunction zip(left, right) {\n    const length = Math.max(left.length, right.length);\n    return Array.from({ length }, (_, index) => [left[index], right[index]]);\n}\nfunction tokensAreEqual(left, right) {\n    return left && right && left.index == right.index && left.content == right.content;\n}\n\nclass ValueListObserver {\n    constructor(element, attributeName, delegate) {\n        this.tokenListObserver = new TokenListObserver(element, attributeName, this);\n        this.delegate = delegate;\n        this.parseResultsByToken = new WeakMap();\n        this.valuesByTokenByElement = new WeakMap();\n    }\n    get started() {\n        return this.tokenListObserver.started;\n    }\n    start() {\n        this.tokenListObserver.start();\n    }\n    stop() {\n        this.tokenListObserver.stop();\n    }\n    refresh() {\n        this.tokenListObserver.refresh();\n    }\n    get element() {\n        return this.tokenListObserver.element;\n    }\n    get attributeName() {\n        return this.tokenListObserver.attributeName;\n    }\n    tokenMatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).set(token, value);\n            this.delegate.elementMatchedValue(element, value);\n        }\n    }\n    tokenUnmatched(token) {\n        const { element } = token;\n        const { value } = this.fetchParseResultForToken(token);\n        if (value) {\n            this.fetchValuesByTokenForElement(element).delete(token);\n            this.delegate.elementUnmatchedValue(element, value);\n        }\n    }\n    fetchParseResultForToken(token) {\n        let parseResult = this.parseResultsByToken.get(token);\n        if (!parseResult) {\n            parseResult = this.parseToken(token);\n            this.parseResultsByToken.set(token, parseResult);\n        }\n        return parseResult;\n    }\n    fetchValuesByTokenForElement(element) {\n        let valuesByToken = this.valuesByTokenByElement.get(element);\n        if (!valuesByToken) {\n            valuesByToken = new Map();\n            this.valuesByTokenByElement.set(element, valuesByToken);\n        }\n        return valuesByToken;\n    }\n    parseToken(token) {\n        try {\n            const value = this.delegate.parseValueForToken(token);\n            return { value };\n        }\n        catch (error) {\n            return { error };\n        }\n    }\n}\n\nclass BindingObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.bindingsByAction = new Map();\n    }\n    start() {\n        if (!this.valueListObserver) {\n            this.valueListObserver = new ValueListObserver(this.element, this.actionAttribute, this);\n            this.valueListObserver.start();\n        }\n    }\n    stop() {\n        if (this.valueListObserver) {\n            this.valueListObserver.stop();\n            delete this.valueListObserver;\n            this.disconnectAllActions();\n        }\n    }\n    get element() {\n        return this.context.element;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get actionAttribute() {\n        return this.schema.actionAttribute;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get bindings() {\n        return Array.from(this.bindingsByAction.values());\n    }\n    connectAction(action) {\n        const binding = new Binding(this.context, action);\n        this.bindingsByAction.set(action, binding);\n        this.delegate.bindingConnected(binding);\n    }\n    disconnectAction(action) {\n        const binding = this.bindingsByAction.get(action);\n        if (binding) {\n            this.bindingsByAction.delete(action);\n            this.delegate.bindingDisconnected(binding);\n        }\n    }\n    disconnectAllActions() {\n        this.bindings.forEach((binding) => this.delegate.bindingDisconnected(binding, true));\n        this.bindingsByAction.clear();\n    }\n    parseValueForToken(token) {\n        const action = Action.forToken(token, this.schema);\n        if (action.identifier == this.identifier) {\n            return action;\n        }\n    }\n    elementMatchedValue(element, action) {\n        this.connectAction(action);\n    }\n    elementUnmatchedValue(element, action) {\n        this.disconnectAction(action);\n    }\n}\n\nclass ValueObserver {\n    constructor(context, receiver) {\n        this.context = context;\n        this.receiver = receiver;\n        this.stringMapObserver = new StringMapObserver(this.element, this);\n        this.valueDescriptorMap = this.controller.valueDescriptorMap;\n    }\n    start() {\n        this.stringMapObserver.start();\n        this.invokeChangedCallbacksForDefaultValues();\n    }\n    stop() {\n        this.stringMapObserver.stop();\n    }\n    get element() {\n        return this.context.element;\n    }\n    get controller() {\n        return this.context.controller;\n    }\n    getStringMapKeyForAttribute(attributeName) {\n        if (attributeName in this.valueDescriptorMap) {\n            return this.valueDescriptorMap[attributeName].name;\n        }\n    }\n    stringMapKeyAdded(key, attributeName) {\n        const descriptor = this.valueDescriptorMap[attributeName];\n        if (!this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), descriptor.writer(descriptor.defaultValue));\n        }\n    }\n    stringMapValueChanged(value, name, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[name];\n        if (value === null)\n            return;\n        if (oldValue === null) {\n            oldValue = descriptor.writer(descriptor.defaultValue);\n        }\n        this.invokeChangedCallback(name, value, oldValue);\n    }\n    stringMapKeyRemoved(key, attributeName, oldValue) {\n        const descriptor = this.valueDescriptorNameMap[key];\n        if (this.hasValue(key)) {\n            this.invokeChangedCallback(key, descriptor.writer(this.receiver[key]), oldValue);\n        }\n        else {\n            this.invokeChangedCallback(key, descriptor.writer(descriptor.defaultValue), oldValue);\n        }\n    }\n    invokeChangedCallbacksForDefaultValues() {\n        for (const { key, name, defaultValue, writer } of this.valueDescriptors) {\n            if (defaultValue != undefined && !this.controller.data.has(key)) {\n                this.invokeChangedCallback(name, writer(defaultValue), undefined);\n            }\n        }\n    }\n    invokeChangedCallback(name, rawValue, rawOldValue) {\n        const changedMethodName = `${name}Changed`;\n        const changedMethod = this.receiver[changedMethodName];\n        if (typeof changedMethod == \"function\") {\n            const descriptor = this.valueDescriptorNameMap[name];\n            try {\n                const value = descriptor.reader(rawValue);\n                let oldValue = rawOldValue;\n                if (rawOldValue) {\n                    oldValue = descriptor.reader(rawOldValue);\n                }\n                changedMethod.call(this.receiver, value, oldValue);\n            }\n            catch (error) {\n                if (error instanceof TypeError) {\n                    error.message = `Stimulus Value \"${this.context.identifier}.${descriptor.name}\" - ${error.message}`;\n                }\n                throw error;\n            }\n        }\n    }\n    get valueDescriptors() {\n        const { valueDescriptorMap } = this;\n        return Object.keys(valueDescriptorMap).map((key) => valueDescriptorMap[key]);\n    }\n    get valueDescriptorNameMap() {\n        const descriptors = {};\n        Object.keys(this.valueDescriptorMap).forEach((key) => {\n            const descriptor = this.valueDescriptorMap[key];\n            descriptors[descriptor.name] = descriptor;\n        });\n        return descriptors;\n    }\n    hasValue(attributeName) {\n        const descriptor = this.valueDescriptorNameMap[attributeName];\n        const hasMethodName = `has${capitalize(descriptor.name)}`;\n        return this.receiver[hasMethodName];\n    }\n}\n\nclass TargetObserver {\n    constructor(context, delegate) {\n        this.context = context;\n        this.delegate = delegate;\n        this.targetsByName = new Multimap();\n    }\n    start() {\n        if (!this.tokenListObserver) {\n            this.tokenListObserver = new TokenListObserver(this.element, this.attributeName, this);\n            this.tokenListObserver.start();\n        }\n    }\n    stop() {\n        if (this.tokenListObserver) {\n            this.disconnectAllTargets();\n            this.tokenListObserver.stop();\n            delete this.tokenListObserver;\n        }\n    }\n    tokenMatched({ element, content: name }) {\n        if (this.scope.containsElement(element)) {\n            this.connectTarget(element, name);\n        }\n    }\n    tokenUnmatched({ element, content: name }) {\n        this.disconnectTarget(element, name);\n    }\n    connectTarget(element, name) {\n        var _a;\n        if (!this.targetsByName.has(name, element)) {\n            this.targetsByName.add(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetConnected(element, name));\n        }\n    }\n    disconnectTarget(element, name) {\n        var _a;\n        if (this.targetsByName.has(name, element)) {\n            this.targetsByName.delete(name, element);\n            (_a = this.tokenListObserver) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.targetDisconnected(element, name));\n        }\n    }\n    disconnectAllTargets() {\n        for (const name of this.targetsByName.keys) {\n            for (const element of this.targetsByName.getValuesForKey(name)) {\n                this.disconnectTarget(element, name);\n            }\n        }\n    }\n    get attributeName() {\n        return `data-${this.context.identifier}-target`;\n    }\n    get element() {\n        return this.context.element;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n}\n\nfunction readInheritableStaticArrayValues(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return Array.from(ancestors.reduce((values, constructor) => {\n        getOwnStaticArrayValues(constructor, propertyName).forEach((name) => values.add(name));\n        return values;\n    }, new Set()));\n}\nfunction readInheritableStaticObjectPairs(constructor, propertyName) {\n    const ancestors = getAncestorsForConstructor(constructor);\n    return ancestors.reduce((pairs, constructor) => {\n        pairs.push(...getOwnStaticObjectPairs(constructor, propertyName));\n        return pairs;\n    }, []);\n}\nfunction getAncestorsForConstructor(constructor) {\n    const ancestors = [];\n    while (constructor) {\n        ancestors.push(constructor);\n        constructor = Object.getPrototypeOf(constructor);\n    }\n    return ancestors.reverse();\n}\nfunction getOwnStaticArrayValues(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return Array.isArray(definition) ? definition : [];\n}\nfunction getOwnStaticObjectPairs(constructor, propertyName) {\n    const definition = constructor[propertyName];\n    return definition ? Object.keys(definition).map((key) => [key, definition[key]]) : [];\n}\n\nclass OutletObserver {\n    constructor(context, delegate) {\n        this.started = false;\n        this.context = context;\n        this.delegate = delegate;\n        this.outletsByName = new Multimap();\n        this.outletElementsByName = new Multimap();\n        this.selectorObserverMap = new Map();\n        this.attributeObserverMap = new Map();\n    }\n    start() {\n        if (!this.started) {\n            this.outletDefinitions.forEach((outletName) => {\n                this.setupSelectorObserverForOutlet(outletName);\n                this.setupAttributeObserverForOutlet(outletName);\n            });\n            this.started = true;\n            this.dependentContexts.forEach((context) => context.refresh());\n        }\n    }\n    refresh() {\n        this.selectorObserverMap.forEach((observer) => observer.refresh());\n        this.attributeObserverMap.forEach((observer) => observer.refresh());\n    }\n    stop() {\n        if (this.started) {\n            this.started = false;\n            this.disconnectAllOutlets();\n            this.stopSelectorObservers();\n            this.stopAttributeObservers();\n        }\n    }\n    stopSelectorObservers() {\n        if (this.selectorObserverMap.size > 0) {\n            this.selectorObserverMap.forEach((observer) => observer.stop());\n            this.selectorObserverMap.clear();\n        }\n    }\n    stopAttributeObservers() {\n        if (this.attributeObserverMap.size > 0) {\n            this.attributeObserverMap.forEach((observer) => observer.stop());\n            this.attributeObserverMap.clear();\n        }\n    }\n    selectorMatched(element, _selector, { outletName }) {\n        const outlet = this.getOutlet(element, outletName);\n        if (outlet) {\n            this.connectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorUnmatched(element, _selector, { outletName }) {\n        const outlet = this.getOutletFromMap(element, outletName);\n        if (outlet) {\n            this.disconnectOutlet(outlet, element, outletName);\n        }\n    }\n    selectorMatchElement(element, { outletName }) {\n        const selector = this.selector(outletName);\n        const hasOutlet = this.hasOutlet(element, outletName);\n        const hasOutletController = element.matches(`[${this.schema.controllerAttribute}~=${outletName}]`);\n        if (selector) {\n            return hasOutlet && hasOutletController && element.matches(selector);\n        }\n        else {\n            return false;\n        }\n    }\n    elementMatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementAttributeValueChanged(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    elementUnmatchedAttribute(_element, attributeName) {\n        const outletName = this.getOutletNameFromOutletAttributeName(attributeName);\n        if (outletName) {\n            this.updateSelectorObserverForOutlet(outletName);\n        }\n    }\n    connectOutlet(outlet, element, outletName) {\n        var _a;\n        if (!this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.add(outletName, outlet);\n            this.outletElementsByName.add(outletName, element);\n            (_a = this.selectorObserverMap.get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletConnected(outlet, element, outletName));\n        }\n    }\n    disconnectOutlet(outlet, element, outletName) {\n        var _a;\n        if (this.outletElementsByName.has(outletName, element)) {\n            this.outletsByName.delete(outletName, outlet);\n            this.outletElementsByName.delete(outletName, element);\n            (_a = this.selectorObserverMap\n                .get(outletName)) === null || _a === void 0 ? void 0 : _a.pause(() => this.delegate.outletDisconnected(outlet, element, outletName));\n        }\n    }\n    disconnectAllOutlets() {\n        for (const outletName of this.outletElementsByName.keys) {\n            for (const element of this.outletElementsByName.getValuesForKey(outletName)) {\n                for (const outlet of this.outletsByName.getValuesForKey(outletName)) {\n                    this.disconnectOutlet(outlet, element, outletName);\n                }\n            }\n        }\n    }\n    updateSelectorObserverForOutlet(outletName) {\n        const observer = this.selectorObserverMap.get(outletName);\n        if (observer) {\n            observer.selector = this.selector(outletName);\n        }\n    }\n    setupSelectorObserverForOutlet(outletName) {\n        const selector = this.selector(outletName);\n        const selectorObserver = new SelectorObserver(document.body, selector, this, { outletName });\n        this.selectorObserverMap.set(outletName, selectorObserver);\n        selectorObserver.start();\n    }\n    setupAttributeObserverForOutlet(outletName) {\n        const attributeName = this.attributeNameForOutletName(outletName);\n        const attributeObserver = new AttributeObserver(this.scope.element, attributeName, this);\n        this.attributeObserverMap.set(outletName, attributeObserver);\n        attributeObserver.start();\n    }\n    selector(outletName) {\n        return this.scope.outlets.getSelectorForOutletName(outletName);\n    }\n    attributeNameForOutletName(outletName) {\n        return this.scope.schema.outletAttributeForScope(this.identifier, outletName);\n    }\n    getOutletNameFromOutletAttributeName(attributeName) {\n        return this.outletDefinitions.find((outletName) => this.attributeNameForOutletName(outletName) === attributeName);\n    }\n    get outletDependencies() {\n        const dependencies = new Multimap();\n        this.router.modules.forEach((module) => {\n            const constructor = module.definition.controllerConstructor;\n            const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n            outlets.forEach((outlet) => dependencies.add(outlet, module.identifier));\n        });\n        return dependencies;\n    }\n    get outletDefinitions() {\n        return this.outletDependencies.getKeysForValue(this.identifier);\n    }\n    get dependentControllerIdentifiers() {\n        return this.outletDependencies.getValuesForKey(this.identifier);\n    }\n    get dependentContexts() {\n        const identifiers = this.dependentControllerIdentifiers;\n        return this.router.contexts.filter((context) => identifiers.includes(context.identifier));\n    }\n    hasOutlet(element, outletName) {\n        return !!this.getOutlet(element, outletName) || !!this.getOutletFromMap(element, outletName);\n    }\n    getOutlet(element, outletName) {\n        return this.application.getControllerForElementAndIdentifier(element, outletName);\n    }\n    getOutletFromMap(element, outletName) {\n        return this.outletsByName.getValuesForKey(outletName).find((outlet) => outlet.element === element);\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get schema() {\n        return this.context.schema;\n    }\n    get identifier() {\n        return this.context.identifier;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get router() {\n        return this.application.router;\n    }\n}\n\nclass Context {\n    constructor(module, scope) {\n        this.logDebugActivity = (functionName, detail = {}) => {\n            const { identifier, controller, element } = this;\n            detail = Object.assign({ identifier, controller, element }, detail);\n            this.application.logDebugActivity(this.identifier, functionName, detail);\n        };\n        this.module = module;\n        this.scope = scope;\n        this.controller = new module.controllerConstructor(this);\n        this.bindingObserver = new BindingObserver(this, this.dispatcher);\n        this.valueObserver = new ValueObserver(this, this.controller);\n        this.targetObserver = new TargetObserver(this, this);\n        this.outletObserver = new OutletObserver(this, this);\n        try {\n            this.controller.initialize();\n            this.logDebugActivity(\"initialize\");\n        }\n        catch (error) {\n            this.handleError(error, \"initializing controller\");\n        }\n    }\n    connect() {\n        this.bindingObserver.start();\n        this.valueObserver.start();\n        this.targetObserver.start();\n        this.outletObserver.start();\n        try {\n            this.controller.connect();\n            this.logDebugActivity(\"connect\");\n        }\n        catch (error) {\n            this.handleError(error, \"connecting controller\");\n        }\n    }\n    refresh() {\n        this.outletObserver.refresh();\n    }\n    disconnect() {\n        try {\n            this.controller.disconnect();\n            this.logDebugActivity(\"disconnect\");\n        }\n        catch (error) {\n            this.handleError(error, \"disconnecting controller\");\n        }\n        this.outletObserver.stop();\n        this.targetObserver.stop();\n        this.valueObserver.stop();\n        this.bindingObserver.stop();\n    }\n    get application() {\n        return this.module.application;\n    }\n    get identifier() {\n        return this.module.identifier;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get dispatcher() {\n        return this.application.dispatcher;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get parentElement() {\n        return this.element.parentElement;\n    }\n    handleError(error, message, detail = {}) {\n        const { identifier, controller, element } = this;\n        detail = Object.assign({ identifier, controller, element }, detail);\n        this.application.handleError(error, `Error ${message}`, detail);\n    }\n    targetConnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetConnected`, element);\n    }\n    targetDisconnected(element, name) {\n        this.invokeControllerMethod(`${name}TargetDisconnected`, element);\n    }\n    outletConnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletConnected`, outlet, element);\n    }\n    outletDisconnected(outlet, element, name) {\n        this.invokeControllerMethod(`${namespaceCamelize(name)}OutletDisconnected`, outlet, element);\n    }\n    invokeControllerMethod(methodName, ...args) {\n        const controller = this.controller;\n        if (typeof controller[methodName] == \"function\") {\n            controller[methodName](...args);\n        }\n    }\n}\n\nfunction bless(constructor) {\n    return shadow(constructor, getBlessedProperties(constructor));\n}\nfunction shadow(constructor, properties) {\n    const shadowConstructor = extend(constructor);\n    const shadowProperties = getShadowProperties(constructor.prototype, properties);\n    Object.defineProperties(shadowConstructor.prototype, shadowProperties);\n    return shadowConstructor;\n}\nfunction getBlessedProperties(constructor) {\n    const blessings = readInheritableStaticArrayValues(constructor, \"blessings\");\n    return blessings.reduce((blessedProperties, blessing) => {\n        const properties = blessing(constructor);\n        for (const key in properties) {\n            const descriptor = blessedProperties[key] || {};\n            blessedProperties[key] = Object.assign(descriptor, properties[key]);\n        }\n        return blessedProperties;\n    }, {});\n}\nfunction getShadowProperties(prototype, properties) {\n    return getOwnKeys(properties).reduce((shadowProperties, key) => {\n        const descriptor = getShadowedDescriptor(prototype, properties, key);\n        if (descriptor) {\n            Object.assign(shadowProperties, { [key]: descriptor });\n        }\n        return shadowProperties;\n    }, {});\n}\nfunction getShadowedDescriptor(prototype, properties, key) {\n    const shadowingDescriptor = Object.getOwnPropertyDescriptor(prototype, key);\n    const shadowedByValue = shadowingDescriptor && \"value\" in shadowingDescriptor;\n    if (!shadowedByValue) {\n        const descriptor = Object.getOwnPropertyDescriptor(properties, key).value;\n        if (shadowingDescriptor) {\n            descriptor.get = shadowingDescriptor.get || descriptor.get;\n            descriptor.set = shadowingDescriptor.set || descriptor.set;\n        }\n        return descriptor;\n    }\n}\nconst getOwnKeys = (() => {\n    if (typeof Object.getOwnPropertySymbols == \"function\") {\n        return (object) => [...Object.getOwnPropertyNames(object), ...Object.getOwnPropertySymbols(object)];\n    }\n    else {\n        return Object.getOwnPropertyNames;\n    }\n})();\nconst extend = (() => {\n    function extendWithReflect(constructor) {\n        function extended() {\n            return Reflect.construct(constructor, arguments, new.target);\n        }\n        extended.prototype = Object.create(constructor.prototype, {\n            constructor: { value: extended },\n        });\n        Reflect.setPrototypeOf(extended, constructor);\n        return extended;\n    }\n    function testReflectExtension() {\n        const a = function () {\n            this.a.call(this);\n        };\n        const b = extendWithReflect(a);\n        b.prototype.a = function () { };\n        return new b();\n    }\n    try {\n        testReflectExtension();\n        return extendWithReflect;\n    }\n    catch (error) {\n        return (constructor) => class extended extends constructor {\n        };\n    }\n})();\n\nfunction blessDefinition(definition) {\n    return {\n        identifier: definition.identifier,\n        controllerConstructor: bless(definition.controllerConstructor),\n    };\n}\n\nclass Module {\n    constructor(application, definition) {\n        this.application = application;\n        this.definition = blessDefinition(definition);\n        this.contextsByScope = new WeakMap();\n        this.connectedContexts = new Set();\n    }\n    get identifier() {\n        return this.definition.identifier;\n    }\n    get controllerConstructor() {\n        return this.definition.controllerConstructor;\n    }\n    get contexts() {\n        return Array.from(this.connectedContexts);\n    }\n    connectContextForScope(scope) {\n        const context = this.fetchContextForScope(scope);\n        this.connectedContexts.add(context);\n        context.connect();\n    }\n    disconnectContextForScope(scope) {\n        const context = this.contextsByScope.get(scope);\n        if (context) {\n            this.connectedContexts.delete(context);\n            context.disconnect();\n        }\n    }\n    fetchContextForScope(scope) {\n        let context = this.contextsByScope.get(scope);\n        if (!context) {\n            context = new Context(this, scope);\n            this.contextsByScope.set(scope, context);\n        }\n        return context;\n    }\n}\n\nclass ClassMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    has(name) {\n        return this.data.has(this.getDataKey(name));\n    }\n    get(name) {\n        return this.getAll(name)[0];\n    }\n    getAll(name) {\n        const tokenString = this.data.get(this.getDataKey(name)) || \"\";\n        return tokenize(tokenString);\n    }\n    getAttributeName(name) {\n        return this.data.getAttributeNameForKey(this.getDataKey(name));\n    }\n    getDataKey(name) {\n        return `${name}-class`;\n    }\n    get data() {\n        return this.scope.data;\n    }\n}\n\nclass DataMap {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.getAttribute(name);\n    }\n    set(key, value) {\n        const name = this.getAttributeNameForKey(key);\n        this.element.setAttribute(name, value);\n        return this.get(key);\n    }\n    has(key) {\n        const name = this.getAttributeNameForKey(key);\n        return this.element.hasAttribute(name);\n    }\n    delete(key) {\n        if (this.has(key)) {\n            const name = this.getAttributeNameForKey(key);\n            this.element.removeAttribute(name);\n            return true;\n        }\n        else {\n            return false;\n        }\n    }\n    getAttributeNameForKey(key) {\n        return `data-${this.identifier}-${dasherize(key)}`;\n    }\n}\n\nclass Guide {\n    constructor(logger) {\n        this.warnedKeysByObject = new WeakMap();\n        this.logger = logger;\n    }\n    warn(object, key, message) {\n        let warnedKeys = this.warnedKeysByObject.get(object);\n        if (!warnedKeys) {\n            warnedKeys = new Set();\n            this.warnedKeysByObject.set(object, warnedKeys);\n        }\n        if (!warnedKeys.has(key)) {\n            warnedKeys.add(key);\n            this.logger.warn(message, object);\n        }\n    }\n}\n\nfunction attributeValueContainsToken(attributeName, token) {\n    return `[${attributeName}~=\"${token}\"]`;\n}\n\nclass TargetSet {\n    constructor(scope) {\n        this.scope = scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(targetName) {\n        return this.find(targetName) != null;\n    }\n    find(...targetNames) {\n        return targetNames.reduce((target, targetName) => target || this.findTarget(targetName) || this.findLegacyTarget(targetName), undefined);\n    }\n    findAll(...targetNames) {\n        return targetNames.reduce((targets, targetName) => [\n            ...targets,\n            ...this.findAllTargets(targetName),\n            ...this.findAllLegacyTargets(targetName),\n        ], []);\n    }\n    findTarget(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findElement(selector);\n    }\n    findAllTargets(targetName) {\n        const selector = this.getSelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector);\n    }\n    getSelectorForTargetName(targetName) {\n        const attributeName = this.schema.targetAttributeForScope(this.identifier);\n        return attributeValueContainsToken(attributeName, targetName);\n    }\n    findLegacyTarget(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.deprecate(this.scope.findElement(selector), targetName);\n    }\n    findAllLegacyTargets(targetName) {\n        const selector = this.getLegacySelectorForTargetName(targetName);\n        return this.scope.findAllElements(selector).map((element) => this.deprecate(element, targetName));\n    }\n    getLegacySelectorForTargetName(targetName) {\n        const targetDescriptor = `${this.identifier}.${targetName}`;\n        return attributeValueContainsToken(this.schema.targetAttribute, targetDescriptor);\n    }\n    deprecate(element, targetName) {\n        if (element) {\n            const { identifier } = this;\n            const attributeName = this.schema.targetAttribute;\n            const revisedAttributeName = this.schema.targetAttributeForScope(identifier);\n            this.guide.warn(element, `target:${targetName}`, `Please replace ${attributeName}=\"${identifier}.${targetName}\" with ${revisedAttributeName}=\"${targetName}\". ` +\n                `The ${attributeName} attribute is deprecated and will be removed in a future version of Stimulus.`);\n        }\n        return element;\n    }\n    get guide() {\n        return this.scope.guide;\n    }\n}\n\nclass OutletSet {\n    constructor(scope, controllerElement) {\n        this.scope = scope;\n        this.controllerElement = controllerElement;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get schema() {\n        return this.scope.schema;\n    }\n    has(outletName) {\n        return this.find(outletName) != null;\n    }\n    find(...outletNames) {\n        return outletNames.reduce((outlet, outletName) => outlet || this.findOutlet(outletName), undefined);\n    }\n    findAll(...outletNames) {\n        return outletNames.reduce((outlets, outletName) => [...outlets, ...this.findAllOutlets(outletName)], []);\n    }\n    getSelectorForOutletName(outletName) {\n        const attributeName = this.schema.outletAttributeForScope(this.identifier, outletName);\n        return this.controllerElement.getAttribute(attributeName);\n    }\n    findOutlet(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        if (selector)\n            return this.findElement(selector, outletName);\n    }\n    findAllOutlets(outletName) {\n        const selector = this.getSelectorForOutletName(outletName);\n        return selector ? this.findAllElements(selector, outletName) : [];\n    }\n    findElement(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName))[0];\n    }\n    findAllElements(selector, outletName) {\n        const elements = this.scope.queryElements(selector);\n        return elements.filter((element) => this.matchesElement(element, selector, outletName));\n    }\n    matchesElement(element, selector, outletName) {\n        const controllerAttribute = element.getAttribute(this.scope.schema.controllerAttribute) || \"\";\n        return element.matches(selector) && controllerAttribute.split(\" \").includes(outletName);\n    }\n}\n\nclass Scope {\n    constructor(schema, element, identifier, logger) {\n        this.targets = new TargetSet(this);\n        this.classes = new ClassMap(this);\n        this.data = new DataMap(this);\n        this.containsElement = (element) => {\n            return element.closest(this.controllerSelector) === this.element;\n        };\n        this.schema = schema;\n        this.element = element;\n        this.identifier = identifier;\n        this.guide = new Guide(logger);\n        this.outlets = new OutletSet(this.documentScope, element);\n    }\n    findElement(selector) {\n        return this.element.matches(selector) ? this.element : this.queryElements(selector).find(this.containsElement);\n    }\n    findAllElements(selector) {\n        return [\n            ...(this.element.matches(selector) ? [this.element] : []),\n            ...this.queryElements(selector).filter(this.containsElement),\n        ];\n    }\n    queryElements(selector) {\n        return Array.from(this.element.querySelectorAll(selector));\n    }\n    get controllerSelector() {\n        return attributeValueContainsToken(this.schema.controllerAttribute, this.identifier);\n    }\n    get isDocumentScope() {\n        return this.element === document.documentElement;\n    }\n    get documentScope() {\n        return this.isDocumentScope\n            ? this\n            : new Scope(this.schema, document.documentElement, this.identifier, this.guide.logger);\n    }\n}\n\nclass ScopeObserver {\n    constructor(element, schema, delegate) {\n        this.element = element;\n        this.schema = schema;\n        this.delegate = delegate;\n        this.valueListObserver = new ValueListObserver(this.element, this.controllerAttribute, this);\n        this.scopesByIdentifierByElement = new WeakMap();\n        this.scopeReferenceCounts = new WeakMap();\n    }\n    start() {\n        this.valueListObserver.start();\n    }\n    stop() {\n        this.valueListObserver.stop();\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    parseValueForToken(token) {\n        const { element, content: identifier } = token;\n        return this.parseValueForElementAndIdentifier(element, identifier);\n    }\n    parseValueForElementAndIdentifier(element, identifier) {\n        const scopesByIdentifier = this.fetchScopesByIdentifierForElement(element);\n        let scope = scopesByIdentifier.get(identifier);\n        if (!scope) {\n            scope = this.delegate.createScopeForElementAndIdentifier(element, identifier);\n            scopesByIdentifier.set(identifier, scope);\n        }\n        return scope;\n    }\n    elementMatchedValue(element, value) {\n        const referenceCount = (this.scopeReferenceCounts.get(value) || 0) + 1;\n        this.scopeReferenceCounts.set(value, referenceCount);\n        if (referenceCount == 1) {\n            this.delegate.scopeConnected(value);\n        }\n    }\n    elementUnmatchedValue(element, value) {\n        const referenceCount = this.scopeReferenceCounts.get(value);\n        if (referenceCount) {\n            this.scopeReferenceCounts.set(value, referenceCount - 1);\n            if (referenceCount == 1) {\n                this.delegate.scopeDisconnected(value);\n            }\n        }\n    }\n    fetchScopesByIdentifierForElement(element) {\n        let scopesByIdentifier = this.scopesByIdentifierByElement.get(element);\n        if (!scopesByIdentifier) {\n            scopesByIdentifier = new Map();\n            this.scopesByIdentifierByElement.set(element, scopesByIdentifier);\n        }\n        return scopesByIdentifier;\n    }\n}\n\nclass Router {\n    constructor(application) {\n        this.application = application;\n        this.scopeObserver = new ScopeObserver(this.element, this.schema, this);\n        this.scopesByIdentifier = new Multimap();\n        this.modulesByIdentifier = new Map();\n    }\n    get element() {\n        return this.application.element;\n    }\n    get schema() {\n        return this.application.schema;\n    }\n    get logger() {\n        return this.application.logger;\n    }\n    get controllerAttribute() {\n        return this.schema.controllerAttribute;\n    }\n    get modules() {\n        return Array.from(this.modulesByIdentifier.values());\n    }\n    get contexts() {\n        return this.modules.reduce((contexts, module) => contexts.concat(module.contexts), []);\n    }\n    start() {\n        this.scopeObserver.start();\n    }\n    stop() {\n        this.scopeObserver.stop();\n    }\n    loadDefinition(definition) {\n        this.unloadIdentifier(definition.identifier);\n        const module = new Module(this.application, definition);\n        this.connectModule(module);\n        const afterLoad = definition.controllerConstructor.afterLoad;\n        if (afterLoad) {\n            afterLoad.call(definition.controllerConstructor, definition.identifier, this.application);\n        }\n    }\n    unloadIdentifier(identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            this.disconnectModule(module);\n        }\n    }\n    getContextForElementAndIdentifier(element, identifier) {\n        const module = this.modulesByIdentifier.get(identifier);\n        if (module) {\n            return module.contexts.find((context) => context.element == element);\n        }\n    }\n    proposeToConnectScopeForElementAndIdentifier(element, identifier) {\n        const scope = this.scopeObserver.parseValueForElementAndIdentifier(element, identifier);\n        if (scope) {\n            this.scopeObserver.elementMatchedValue(scope.element, scope);\n        }\n        else {\n            console.error(`Couldn't find or create scope for identifier: \"${identifier}\" and element:`, element);\n        }\n    }\n    handleError(error, message, detail) {\n        this.application.handleError(error, message, detail);\n    }\n    createScopeForElementAndIdentifier(element, identifier) {\n        return new Scope(this.schema, element, identifier, this.logger);\n    }\n    scopeConnected(scope) {\n        this.scopesByIdentifier.add(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.connectContextForScope(scope);\n        }\n    }\n    scopeDisconnected(scope) {\n        this.scopesByIdentifier.delete(scope.identifier, scope);\n        const module = this.modulesByIdentifier.get(scope.identifier);\n        if (module) {\n            module.disconnectContextForScope(scope);\n        }\n    }\n    connectModule(module) {\n        this.modulesByIdentifier.set(module.identifier, module);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.connectContextForScope(scope));\n    }\n    disconnectModule(module) {\n        this.modulesByIdentifier.delete(module.identifier);\n        const scopes = this.scopesByIdentifier.getValuesForKey(module.identifier);\n        scopes.forEach((scope) => module.disconnectContextForScope(scope));\n    }\n}\n\nconst defaultSchema = {\n    controllerAttribute: \"data-controller\",\n    actionAttribute: \"data-action\",\n    targetAttribute: \"data-target\",\n    targetAttributeForScope: (identifier) => `data-${identifier}-target`,\n    outletAttributeForScope: (identifier, outlet) => `data-${identifier}-${outlet}-outlet`,\n    keyMappings: Object.assign(Object.assign({ enter: \"Enter\", tab: \"Tab\", esc: \"Escape\", space: \" \", up: \"ArrowUp\", down: \"ArrowDown\", left: \"ArrowLeft\", right: \"ArrowRight\", home: \"Home\", end: \"End\", page_up: \"PageUp\", page_down: \"PageDown\" }, objectFromEntries(\"abcdefghijklmnopqrstuvwxyz\".split(\"\").map((c) => [c, c]))), objectFromEntries(\"0123456789\".split(\"\").map((n) => [n, n]))),\n};\nfunction objectFromEntries(array) {\n    return array.reduce((memo, [k, v]) => (Object.assign(Object.assign({}, memo), { [k]: v })), {});\n}\n\nclass Application {\n    constructor(element = document.documentElement, schema = defaultSchema) {\n        this.logger = console;\n        this.debug = false;\n        this.logDebugActivity = (identifier, functionName, detail = {}) => {\n            if (this.debug) {\n                this.logFormattedMessage(identifier, functionName, detail);\n            }\n        };\n        this.element = element;\n        this.schema = schema;\n        this.dispatcher = new Dispatcher(this);\n        this.router = new Router(this);\n        this.actionDescriptorFilters = Object.assign({}, defaultActionDescriptorFilters);\n    }\n    static start(element, schema) {\n        const application = new this(element, schema);\n        application.start();\n        return application;\n    }\n    async start() {\n        await domReady();\n        this.logDebugActivity(\"application\", \"starting\");\n        this.dispatcher.start();\n        this.router.start();\n        this.logDebugActivity(\"application\", \"start\");\n    }\n    stop() {\n        this.logDebugActivity(\"application\", \"stopping\");\n        this.dispatcher.stop();\n        this.router.stop();\n        this.logDebugActivity(\"application\", \"stop\");\n    }\n    register(identifier, controllerConstructor) {\n        this.load({ identifier, controllerConstructor });\n    }\n    registerActionOption(name, filter) {\n        this.actionDescriptorFilters[name] = filter;\n    }\n    load(head, ...rest) {\n        const definitions = Array.isArray(head) ? head : [head, ...rest];\n        definitions.forEach((definition) => {\n            if (definition.controllerConstructor.shouldLoad) {\n                this.router.loadDefinition(definition);\n            }\n        });\n    }\n    unload(head, ...rest) {\n        const identifiers = Array.isArray(head) ? head : [head, ...rest];\n        identifiers.forEach((identifier) => this.router.unloadIdentifier(identifier));\n    }\n    get controllers() {\n        return this.router.contexts.map((context) => context.controller);\n    }\n    getControllerForElementAndIdentifier(element, identifier) {\n        const context = this.router.getContextForElementAndIdentifier(element, identifier);\n        return context ? context.controller : null;\n    }\n    handleError(error, message, detail) {\n        var _a;\n        this.logger.error(`%s\\n\\n%o\\n\\n%o`, message, error, detail);\n        (_a = window.onerror) === null || _a === void 0 ? void 0 : _a.call(window, message, \"\", 0, 0, error);\n    }\n    logFormattedMessage(identifier, functionName, detail = {}) {\n        detail = Object.assign({ application: this }, detail);\n        this.logger.groupCollapsed(`${identifier} #${functionName}`);\n        this.logger.log(\"details:\", Object.assign({}, detail));\n        this.logger.groupEnd();\n    }\n}\nfunction domReady() {\n    return new Promise((resolve) => {\n        if (document.readyState == \"loading\") {\n            document.addEventListener(\"DOMContentLoaded\", () => resolve());\n        }\n        else {\n            resolve();\n        }\n    });\n}\n\nfunction ClassPropertiesBlessing(constructor) {\n    const classes = readInheritableStaticArrayValues(constructor, \"classes\");\n    return classes.reduce((properties, classDefinition) => {\n        return Object.assign(properties, propertiesForClassDefinition(classDefinition));\n    }, {});\n}\nfunction propertiesForClassDefinition(key) {\n    return {\n        [`${key}Class`]: {\n            get() {\n                const { classes } = this;\n                if (classes.has(key)) {\n                    return classes.get(key);\n                }\n                else {\n                    const attribute = classes.getAttributeName(key);\n                    throw new Error(`Missing attribute \"${attribute}\"`);\n                }\n            },\n        },\n        [`${key}Classes`]: {\n            get() {\n                return this.classes.getAll(key);\n            },\n        },\n        [`has${capitalize(key)}Class`]: {\n            get() {\n                return this.classes.has(key);\n            },\n        },\n    };\n}\n\nfunction OutletPropertiesBlessing(constructor) {\n    const outlets = readInheritableStaticArrayValues(constructor, \"outlets\");\n    return outlets.reduce((properties, outletDefinition) => {\n        return Object.assign(properties, propertiesForOutletDefinition(outletDefinition));\n    }, {});\n}\nfunction getOutletController(controller, element, identifier) {\n    return controller.application.getControllerForElementAndIdentifier(element, identifier);\n}\nfunction getControllerAndEnsureConnectedScope(controller, element, outletName) {\n    let outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n    controller.application.router.proposeToConnectScopeForElementAndIdentifier(element, outletName);\n    outletController = getOutletController(controller, element, outletName);\n    if (outletController)\n        return outletController;\n}\nfunction propertiesForOutletDefinition(name) {\n    const camelizedName = namespaceCamelize(name);\n    return {\n        [`${camelizedName}Outlet`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                    if (outletController)\n                        return outletController;\n                    throw new Error(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`);\n                }\n                throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n            },\n        },\n        [`${camelizedName}Outlets`]: {\n            get() {\n                const outlets = this.outlets.findAll(name);\n                if (outlets.length > 0) {\n                    return outlets\n                        .map((outletElement) => {\n                        const outletController = getControllerAndEnsureConnectedScope(this, outletElement, name);\n                        if (outletController)\n                            return outletController;\n                        console.warn(`The provided outlet element is missing an outlet controller \"${name}\" instance for host controller \"${this.identifier}\"`, outletElement);\n                    })\n                        .filter((controller) => controller);\n                }\n                return [];\n            },\n        },\n        [`${camelizedName}OutletElement`]: {\n            get() {\n                const outletElement = this.outlets.find(name);\n                const selector = this.outlets.getSelectorForOutletName(name);\n                if (outletElement) {\n                    return outletElement;\n                }\n                else {\n                    throw new Error(`Missing outlet element \"${name}\" for host controller \"${this.identifier}\". Stimulus couldn't find a matching outlet element using selector \"${selector}\".`);\n                }\n            },\n        },\n        [`${camelizedName}OutletElements`]: {\n            get() {\n                return this.outlets.findAll(name);\n            },\n        },\n        [`has${capitalize(camelizedName)}Outlet`]: {\n            get() {\n                return this.outlets.has(name);\n            },\n        },\n    };\n}\n\nfunction TargetPropertiesBlessing(constructor) {\n    const targets = readInheritableStaticArrayValues(constructor, \"targets\");\n    return targets.reduce((properties, targetDefinition) => {\n        return Object.assign(properties, propertiesForTargetDefinition(targetDefinition));\n    }, {});\n}\nfunction propertiesForTargetDefinition(name) {\n    return {\n        [`${name}Target`]: {\n            get() {\n                const target = this.targets.find(name);\n                if (target) {\n                    return target;\n                }\n                else {\n                    throw new Error(`Missing target element \"${name}\" for \"${this.identifier}\" controller`);\n                }\n            },\n        },\n        [`${name}Targets`]: {\n            get() {\n                return this.targets.findAll(name);\n            },\n        },\n        [`has${capitalize(name)}Target`]: {\n            get() {\n                return this.targets.has(name);\n            },\n        },\n    };\n}\n\nfunction ValuePropertiesBlessing(constructor) {\n    const valueDefinitionPairs = readInheritableStaticObjectPairs(constructor, \"values\");\n    const propertyDescriptorMap = {\n        valueDescriptorMap: {\n            get() {\n                return valueDefinitionPairs.reduce((result, valueDefinitionPair) => {\n                    const valueDescriptor = parseValueDefinitionPair(valueDefinitionPair, this.identifier);\n                    const attributeName = this.data.getAttributeNameForKey(valueDescriptor.key);\n                    return Object.assign(result, { [attributeName]: valueDescriptor });\n                }, {});\n            },\n        },\n    };\n    return valueDefinitionPairs.reduce((properties, valueDefinitionPair) => {\n        return Object.assign(properties, propertiesForValueDefinitionPair(valueDefinitionPair));\n    }, propertyDescriptorMap);\n}\nfunction propertiesForValueDefinitionPair(valueDefinitionPair, controller) {\n    const definition = parseValueDefinitionPair(valueDefinitionPair, controller);\n    const { key, name, reader: read, writer: write } = definition;\n    return {\n        [name]: {\n            get() {\n                const value = this.data.get(key);\n                if (value !== null) {\n                    return read(value);\n                }\n                else {\n                    return definition.defaultValue;\n                }\n            },\n            set(value) {\n                if (value === undefined) {\n                    this.data.delete(key);\n                }\n                else {\n                    this.data.set(key, write(value));\n                }\n            },\n        },\n        [`has${capitalize(name)}`]: {\n            get() {\n                return this.data.has(key) || definition.hasCustomDefaultValue;\n            },\n        },\n    };\n}\nfunction parseValueDefinitionPair([token, typeDefinition], controller) {\n    return valueDescriptorForTokenAndTypeDefinition({\n        controller,\n        token,\n        typeDefinition,\n    });\n}\nfunction parseValueTypeConstant(constant) {\n    switch (constant) {\n        case Array:\n            return \"array\";\n        case Boolean:\n            return \"boolean\";\n        case Number:\n            return \"number\";\n        case Object:\n            return \"object\";\n        case String:\n            return \"string\";\n    }\n}\nfunction parseValueTypeDefault(defaultValue) {\n    switch (typeof defaultValue) {\n        case \"boolean\":\n            return \"boolean\";\n        case \"number\":\n            return \"number\";\n        case \"string\":\n            return \"string\";\n    }\n    if (Array.isArray(defaultValue))\n        return \"array\";\n    if (Object.prototype.toString.call(defaultValue) === \"[object Object]\")\n        return \"object\";\n}\nfunction parseValueTypeObject(payload) {\n    const { controller, token, typeObject } = payload;\n    const hasType = isSomething(typeObject.type);\n    const hasDefault = isSomething(typeObject.default);\n    const fullObject = hasType && hasDefault;\n    const onlyType = hasType && !hasDefault;\n    const onlyDefault = !hasType && hasDefault;\n    const typeFromObject = parseValueTypeConstant(typeObject.type);\n    const typeFromDefaultValue = parseValueTypeDefault(payload.typeObject.default);\n    if (onlyType)\n        return typeFromObject;\n    if (onlyDefault)\n        return typeFromDefaultValue;\n    if (typeFromObject !== typeFromDefaultValue) {\n        const propertyPath = controller ? `${controller}.${token}` : token;\n        throw new Error(`The specified default value for the Stimulus Value \"${propertyPath}\" must match the defined type \"${typeFromObject}\". The provided default value of \"${typeObject.default}\" is of type \"${typeFromDefaultValue}\".`);\n    }\n    if (fullObject)\n        return typeFromObject;\n}\nfunction parseValueTypeDefinition(payload) {\n    const { controller, token, typeDefinition } = payload;\n    const typeObject = { controller, token, typeObject: typeDefinition };\n    const typeFromObject = parseValueTypeObject(typeObject);\n    const typeFromDefaultValue = parseValueTypeDefault(typeDefinition);\n    const typeFromConstant = parseValueTypeConstant(typeDefinition);\n    const type = typeFromObject || typeFromDefaultValue || typeFromConstant;\n    if (type)\n        return type;\n    const propertyPath = controller ? `${controller}.${typeDefinition}` : token;\n    throw new Error(`Unknown value type \"${propertyPath}\" for \"${token}\" value`);\n}\nfunction defaultValueForDefinition(typeDefinition) {\n    const constant = parseValueTypeConstant(typeDefinition);\n    if (constant)\n        return defaultValuesByType[constant];\n    const hasDefault = hasProperty(typeDefinition, \"default\");\n    const hasType = hasProperty(typeDefinition, \"type\");\n    const typeObject = typeDefinition;\n    if (hasDefault)\n        return typeObject.default;\n    if (hasType) {\n        const { type } = typeObject;\n        const constantFromType = parseValueTypeConstant(type);\n        if (constantFromType)\n            return defaultValuesByType[constantFromType];\n    }\n    return typeDefinition;\n}\nfunction valueDescriptorForTokenAndTypeDefinition(payload) {\n    const { token, typeDefinition } = payload;\n    const key = `${dasherize(token)}-value`;\n    const type = parseValueTypeDefinition(payload);\n    return {\n        type,\n        key,\n        name: camelize(key),\n        get defaultValue() {\n            return defaultValueForDefinition(typeDefinition);\n        },\n        get hasCustomDefaultValue() {\n            return parseValueTypeDefault(typeDefinition) !== undefined;\n        },\n        reader: readers[type],\n        writer: writers[type] || writers.default,\n    };\n}\nconst defaultValuesByType = {\n    get array() {\n        return [];\n    },\n    boolean: false,\n    number: 0,\n    get object() {\n        return {};\n    },\n    string: \"\",\n};\nconst readers = {\n    array(value) {\n        const array = JSON.parse(value);\n        if (!Array.isArray(array)) {\n            throw new TypeError(`expected value of type \"array\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(array)}\"`);\n        }\n        return array;\n    },\n    boolean(value) {\n        return !(value == \"0\" || String(value).toLowerCase() == \"false\");\n    },\n    number(value) {\n        return Number(value.replace(/_/g, \"\"));\n    },\n    object(value) {\n        const object = JSON.parse(value);\n        if (object === null || typeof object != \"object\" || Array.isArray(object)) {\n            throw new TypeError(`expected value of type \"object\" but instead got value \"${value}\" of type \"${parseValueTypeDefault(object)}\"`);\n        }\n        return object;\n    },\n    string(value) {\n        return value;\n    },\n};\nconst writers = {\n    default: writeString,\n    array: writeJSON,\n    object: writeJSON,\n};\nfunction writeJSON(value) {\n    return JSON.stringify(value);\n}\nfunction writeString(value) {\n    return `${value}`;\n}\n\nclass Controller {\n    constructor(context) {\n        this.context = context;\n    }\n    static get shouldLoad() {\n        return true;\n    }\n    static afterLoad(_identifier, _application) {\n        return;\n    }\n    get application() {\n        return this.context.application;\n    }\n    get scope() {\n        return this.context.scope;\n    }\n    get element() {\n        return this.scope.element;\n    }\n    get identifier() {\n        return this.scope.identifier;\n    }\n    get targets() {\n        return this.scope.targets;\n    }\n    get outlets() {\n        return this.scope.outlets;\n    }\n    get classes() {\n        return this.scope.classes;\n    }\n    get data() {\n        return this.scope.data;\n    }\n    initialize() {\n    }\n    connect() {\n    }\n    disconnect() {\n    }\n    dispatch(eventName, { target = this.element, detail = {}, prefix = this.identifier, bubbles = true, cancelable = true, } = {}) {\n        const type = prefix ? `${prefix}:${eventName}` : eventName;\n        const event = new CustomEvent(type, { detail, bubbles, cancelable });\n        target.dispatchEvent(event);\n        return event;\n    }\n}\nController.blessings = [\n    ClassPropertiesBlessing,\n    TargetPropertiesBlessing,\n    ValuePropertiesBlessing,\n    OutletPropertiesBlessing,\n];\nController.targets = [];\nController.outlets = [];\nController.values = {};\n\nexport { Application, AttributeObserver, Context, Controller, ElementObserver, IndexedMultimap, Multimap, SelectorObserver, StringMapObserver, TokenListObserver, ValueListObserver, add, defaultSchema, del, fetch, prune };\n","import { Application } from \"@hotwired/stimulus\";\n\nconst application = Application.start();\n\n// Configure Stimulus development experience\napplication.debug = false;\nwindow.Stimulus   = application;\n\nexport { application };\n","function generateID() {\n    return Math.random().toString(36).substring(2, 10);\n}\nfunction hasClassInTree(element, className) {\n    function hasClass(e, c) {\n        if (c && e && e.classList && e.classList.contains(c)) {\n            return e;\n        }\n        if (c && e && e.dataset && e.dataset.id && e.dataset.id === className) {\n            return e;\n        }\n        return null;\n    }\n    function parentByClass(e, c) {\n        if (!e || e === document) {\n            return null;\n        }\n        else if (hasClass(e, c)) {\n            return e;\n        }\n        else {\n            return parentByClass(e.parentNode, c);\n        }\n    }\n    return hasClass(element, className) || parentByClass(element, className);\n}\nfunction debounce(func, wait = 50, immediate = false) {\n    let timeout;\n    return function (...args) {\n        const context = self;\n        const later = () => {\n            timeout = null;\n            if (!immediate) {\n                func.apply(context, args);\n            }\n        };\n        const callNow = immediate && !timeout;\n        clearTimeout(timeout);\n        timeout = setTimeout(later, wait);\n        if (callNow) {\n            func.apply(context, args);\n        }\n    };\n}\nfunction isEqual(a, b) {\n    return JSON.stringify(a) === JSON.stringify(b);\n}\nfunction kebabCase(str) {\n    const result = str.replace(/[A-Z\\u00C0-\\u00D6\\u00D8-\\u00DE]/g, (match) => '-' + match.toLowerCase());\n    return str[0] === str[0].toUpperCase() ? result.substring(1) : result;\n}\n\nclass Settings {\n    constructor(settings) {\n        this.id = '';\n        this.style = '';\n        this.class = [];\n        this.isMultiple = false;\n        this.isOpen = false;\n        this.isFullOpen = false;\n        this.intervalMove = null;\n        if (!settings) {\n            settings = {};\n        }\n        this.id = 'ss-' + generateID();\n        this.style = settings.style || '';\n        this.class = settings.class || [];\n        this.disabled = settings.disabled !== undefined ? settings.disabled : false;\n        this.alwaysOpen = settings.alwaysOpen !== undefined ? settings.alwaysOpen : false;\n        this.showSearch = settings.showSearch !== undefined ? settings.showSearch : true;\n        this.searchPlaceholder = settings.searchPlaceholder || 'Search';\n        this.searchText = settings.searchText || 'No Results';\n        this.searchingText = settings.searchingText || 'Searching...';\n        this.searchHighlight = settings.searchHighlight !== undefined ? settings.searchHighlight : false;\n        this.closeOnSelect = settings.closeOnSelect !== undefined ? settings.closeOnSelect : true;\n        this.contentLocation = settings.contentLocation || document.body;\n        this.contentPosition = settings.contentPosition || 'absolute';\n        this.openPosition = settings.openPosition || 'auto';\n        this.placeholderText = settings.placeholderText !== undefined ? settings.placeholderText : 'Select Value';\n        this.allowDeselect = settings.allowDeselect !== undefined ? settings.allowDeselect : false;\n        this.hideSelected = settings.hideSelected !== undefined ? settings.hideSelected : false;\n        this.showOptionTooltips = settings.showOptionTooltips !== undefined ? settings.showOptionTooltips : false;\n        this.minSelected = settings.minSelected || 0;\n        this.maxSelected = settings.maxSelected || 1000;\n        this.timeoutDelay = settings.timeoutDelay || 200;\n        this.maxValuesShown = settings.maxValuesShown || 20;\n        this.maxValuesMessage = settings.maxValuesMessage || '{number} selected';\n    }\n}\n\nclass Optgroup {\n    constructor(optgroup) {\n        this.id = !optgroup.id || optgroup.id === '' ? generateID() : optgroup.id;\n        this.label = optgroup.label || '';\n        this.selectAll = optgroup.selectAll === undefined ? false : optgroup.selectAll;\n        this.selectAllText = optgroup.selectAllText || 'Select All';\n        this.closable = optgroup.closable || 'off';\n        this.options = [];\n        if (optgroup.options) {\n            for (const o of optgroup.options) {\n                this.options.push(new Option(o));\n            }\n        }\n    }\n}\nclass Option {\n    constructor(option) {\n        this.id = !option.id || option.id === '' ? generateID() : option.id;\n        this.value = option.value === undefined ? option.text : option.value;\n        this.text = option.text || '';\n        this.html = option.html || '';\n        this.selected = option.selected !== undefined ? option.selected : false;\n        this.display = option.display !== undefined ? option.display : true;\n        this.disabled = option.disabled !== undefined ? option.disabled : false;\n        this.mandatory = option.mandatory !== undefined ? option.mandatory : false;\n        this.placeholder = option.placeholder !== undefined ? option.placeholder : false;\n        this.class = option.class || '';\n        this.style = option.style || '';\n        this.data = option.data || {};\n    }\n}\nclass Store {\n    constructor(type, data) {\n        this.selectType = 'single';\n        this.data = [];\n        this.selectType = type;\n        this.setData(data);\n    }\n    validateDataArray(data) {\n        if (!Array.isArray(data)) {\n            return new Error('Data must be an array');\n        }\n        for (let dataObj of data) {\n            if (dataObj instanceof Optgroup || 'label' in dataObj) {\n                if (!('label' in dataObj)) {\n                    return new Error('Optgroup must have a label');\n                }\n                if ('options' in dataObj && dataObj.options) {\n                    for (let option of dataObj.options) {\n                        return this.validateOption(option);\n                    }\n                }\n            }\n            else if (dataObj instanceof Option || 'text' in dataObj) {\n                return this.validateOption(dataObj);\n            }\n            else {\n                return new Error('Data object must be a valid optgroup or option');\n            }\n        }\n        return null;\n    }\n    validateOption(option) {\n        if (!('text' in option)) {\n            return new Error('Option must have a text');\n        }\n        return null;\n    }\n    partialToFullData(data) {\n        let dataFinal = [];\n        data.forEach((dataObj) => {\n            if (dataObj instanceof Optgroup || 'label' in dataObj) {\n                let optOptions = [];\n                if ('options' in dataObj && dataObj.options) {\n                    dataObj.options.forEach((option) => {\n                        optOptions.push(new Option(option));\n                    });\n                }\n                if (optOptions.length > 0) {\n                    dataFinal.push(new Optgroup(dataObj));\n                }\n            }\n            if (dataObj instanceof Option || 'text' in dataObj) {\n                dataFinal.push(new Option(dataObj));\n            }\n        });\n        return dataFinal;\n    }\n    setData(data) {\n        this.data = this.partialToFullData(data);\n        if (this.selectType === 'single') {\n            this.setSelectedBy('value', this.getSelected());\n        }\n    }\n    getData() {\n        return this.filter(null, true);\n    }\n    getDataOptions() {\n        return this.filter(null, false);\n    }\n    addOption(option) {\n        this.setData(this.getData().concat(new Option(option)));\n    }\n    setSelectedBy(selectedType, selectedValues) {\n        let firstOption = null;\n        let hasSelected = false;\n        for (let dataObj of this.data) {\n            if (dataObj instanceof Optgroup) {\n                for (let option of dataObj.options) {\n                    if (!firstOption) {\n                        firstOption = option;\n                    }\n                    option.selected = hasSelected ? false : selectedValues.includes(option[selectedType]);\n                    if (option.selected && this.selectType === 'single') {\n                        hasSelected = true;\n                    }\n                }\n            }\n            if (dataObj instanceof Option) {\n                if (!firstOption) {\n                    firstOption = dataObj;\n                }\n                dataObj.selected = hasSelected ? false : selectedValues.includes(dataObj[selectedType]);\n                if (dataObj.selected && this.selectType === 'single') {\n                    hasSelected = true;\n                }\n            }\n        }\n        if (this.selectType === 'single' && firstOption && !hasSelected) {\n            firstOption.selected = true;\n        }\n    }\n    getSelected() {\n        let selectedOptions = this.getSelectedOptions();\n        let selectedValues = [];\n        selectedOptions.forEach((option) => {\n            selectedValues.push(option.value);\n        });\n        return selectedValues;\n    }\n    getSelectedOptions() {\n        return this.filter((opt) => {\n            return opt.selected;\n        }, false);\n    }\n    getSelectedIDs() {\n        let selectedOptions = this.getSelectedOptions();\n        let selectedIDs = [];\n        selectedOptions.forEach((op) => {\n            selectedIDs.push(op.id);\n        });\n        return selectedIDs;\n    }\n    getOptgroupByID(id) {\n        for (let dataObj of this.data) {\n            if (dataObj instanceof Optgroup && dataObj.id === id) {\n                return dataObj;\n            }\n        }\n        return null;\n    }\n    getOptionByID(id) {\n        let options = this.filter((opt) => {\n            return opt.id === id;\n        }, false);\n        return options.length ? options[0] : null;\n    }\n    search(search, searchFilter) {\n        search = search.trim();\n        if (search === '') {\n            return this.getData();\n        }\n        return this.filter((opt) => {\n            return searchFilter(opt, search);\n        }, true);\n    }\n    filter(filter, includeOptgroup) {\n        const dataSearch = [];\n        this.data.forEach((dataObj) => {\n            if (dataObj instanceof Optgroup) {\n                let optOptions = [];\n                dataObj.options.forEach((option) => {\n                    if (!filter || filter(option)) {\n                        if (!includeOptgroup) {\n                            dataSearch.push(new Option(option));\n                        }\n                        else {\n                            optOptions.push(new Option(option));\n                        }\n                    }\n                });\n                if (optOptions.length > 0) {\n                    let optgroup = new Optgroup(dataObj);\n                    optgroup.options = optOptions;\n                    dataSearch.push(optgroup);\n                }\n            }\n            if (dataObj instanceof Option) {\n                if (!filter || filter(dataObj)) {\n                    dataSearch.push(new Option(dataObj));\n                }\n            }\n        });\n        return dataSearch;\n    }\n    getSelectType() {\n        return this.selectType;\n    }\n}\n\nclass Render {\n    constructor(settings, store, callbacks) {\n        this.classes = {\n            main: 'ss-main',\n            placeholder: 'ss-placeholder',\n            values: 'ss-values',\n            single: 'ss-single',\n            max: 'ss-max',\n            value: 'ss-value',\n            valueText: 'ss-value-text',\n            valueDelete: 'ss-value-delete',\n            valueOut: 'ss-value-out',\n            deselect: 'ss-deselect',\n            deselectPath: 'M10,10 L90,90 M10,90 L90,10',\n            arrow: 'ss-arrow',\n            arrowClose: 'M10,30 L50,70 L90,30',\n            arrowOpen: 'M10,70 L50,30 L90,70',\n            content: 'ss-content',\n            openAbove: 'ss-open-above',\n            openBelow: 'ss-open-below',\n            search: 'ss-search',\n            searchHighlighter: 'ss-search-highlight',\n            searching: 'ss-searching',\n            addable: 'ss-addable',\n            addablePath: 'M50,10 L50,90 M10,50 L90,50',\n            list: 'ss-list',\n            optgroup: 'ss-optgroup',\n            optgroupLabel: 'ss-optgroup-label',\n            optgroupLabelText: 'ss-optgroup-label-text',\n            optgroupActions: 'ss-optgroup-actions',\n            optgroupSelectAll: 'ss-selectall',\n            optgroupSelectAllBox: 'M60,10 L10,10 L10,90 L90,90 L90,50',\n            optgroupSelectAllCheck: 'M30,45 L50,70 L90,10',\n            optgroupClosable: 'ss-closable',\n            option: 'ss-option',\n            optionDelete: 'M10,10 L90,90 M10,90 L90,10',\n            highlighted: 'ss-highlighted',\n            open: 'ss-open',\n            close: 'ss-close',\n            selected: 'ss-selected',\n            error: 'ss-error',\n            disabled: 'ss-disabled',\n            hide: 'ss-hide',\n        };\n        this.store = store;\n        this.settings = settings;\n        this.callbacks = callbacks;\n        this.main = this.mainDiv();\n        this.content = this.contentDiv();\n        this.updateClassStyles();\n        this.updateAriaAttributes();\n        this.settings.contentLocation.appendChild(this.content.main);\n    }\n    enable() {\n        this.main.main.classList.remove(this.classes.disabled);\n        this.content.search.input.disabled = false;\n    }\n    disable() {\n        this.main.main.classList.add(this.classes.disabled);\n        this.content.search.input.disabled = true;\n    }\n    open() {\n        this.main.arrow.path.setAttribute('d', this.classes.arrowOpen);\n        this.main.main.classList.add(this.settings.openPosition === 'up' ? this.classes.openAbove : this.classes.openBelow);\n        this.main.main.setAttribute('aria-expanded', 'true');\n        this.moveContent();\n        const selectedOptions = this.store.getSelectedOptions();\n        if (selectedOptions.length) {\n            const selectedId = selectedOptions[selectedOptions.length - 1].id;\n            const selectedOption = this.content.list.querySelector('[data-id=\"' + selectedId + '\"]');\n            if (selectedOption) {\n                this.ensureElementInView(this.content.list, selectedOption);\n            }\n        }\n    }\n    close() {\n        this.main.main.classList.remove(this.classes.openAbove);\n        this.main.main.classList.remove(this.classes.openBelow);\n        this.main.main.setAttribute('aria-expanded', 'false');\n        this.content.main.classList.remove(this.classes.openAbove);\n        this.content.main.classList.remove(this.classes.openBelow);\n        this.main.arrow.path.setAttribute('d', this.classes.arrowClose);\n    }\n    updateClassStyles() {\n        this.main.main.className = '';\n        this.main.main.removeAttribute('style');\n        this.content.main.className = '';\n        this.content.main.removeAttribute('style');\n        this.main.main.classList.add(this.classes.main);\n        this.content.main.classList.add(this.classes.content);\n        if (this.settings.style !== '') {\n            this.main.main.style.cssText = this.settings.style;\n            this.content.main.style.cssText = this.settings.style;\n        }\n        if (this.settings.class.length) {\n            for (const c of this.settings.class) {\n                if (c.trim() !== '') {\n                    this.main.main.classList.add(c.trim());\n                    this.content.main.classList.add(c.trim());\n                }\n            }\n        }\n        if (this.settings.contentPosition === 'relative') {\n            this.content.main.classList.add('ss-' + this.settings.contentPosition);\n        }\n    }\n    updateAriaAttributes() {\n        this.main.main.role = 'combobox';\n        this.main.main.setAttribute('aria-haspopup', 'listbox');\n        this.main.main.setAttribute('aria-controls', this.content.main.id);\n        this.main.main.setAttribute('aria-expanded', 'false');\n        this.content.main.setAttribute('role', 'listbox');\n    }\n    mainDiv() {\n        var _a;\n        const main = document.createElement('div');\n        main.dataset.id = this.settings.id;\n        main.id = this.settings.id;\n        main.tabIndex = 0;\n        main.onkeydown = (e) => {\n            switch (e.key) {\n                case 'ArrowUp':\n                case 'ArrowDown':\n                    this.callbacks.open();\n                    e.key === 'ArrowDown' ? this.highlight('down') : this.highlight('up');\n                    return false;\n                case 'Tab':\n                    this.callbacks.close();\n                    return true;\n                case 'Enter':\n                case ' ':\n                    this.callbacks.open();\n                    const highlighted = this.content.list.querySelector('.' + this.classes.highlighted);\n                    if (highlighted) {\n                        highlighted.click();\n                    }\n                    return false;\n                case 'Escape':\n                    this.callbacks.close();\n                    return false;\n            }\n        };\n        main.onclick = (e) => {\n            if (this.settings.disabled) {\n                return;\n            }\n            this.settings.isOpen ? this.callbacks.close() : this.callbacks.open();\n        };\n        const values = document.createElement('div');\n        values.classList.add(this.classes.values);\n        main.appendChild(values);\n        const deselect = document.createElement('div');\n        deselect.classList.add(this.classes.deselect);\n        const selectedOptions = (_a = this.store) === null || _a === void 0 ? void 0 : _a.getSelectedOptions();\n        if (!this.settings.allowDeselect || (this.settings.isMultiple && selectedOptions && selectedOptions.length <= 0)) {\n            deselect.classList.add(this.classes.hide);\n        }\n        else {\n            deselect.classList.remove(this.classes.hide);\n        }\n        deselect.onclick = (e) => {\n            e.stopPropagation();\n            if (this.settings.disabled) {\n                return;\n            }\n            let shouldDelete = true;\n            const before = this.store.getSelectedOptions();\n            const after = [];\n            if (this.callbacks.beforeChange) {\n                shouldDelete = this.callbacks.beforeChange(after, before) === true;\n            }\n            if (shouldDelete) {\n                if (this.settings.isMultiple) {\n                    this.callbacks.setSelected([], false);\n                    this.updateDeselectAll();\n                }\n                else {\n                    this.callbacks.setSelected([''], false);\n                }\n                if (this.settings.closeOnSelect) {\n                    this.callbacks.close();\n                }\n                if (this.callbacks.afterChange) {\n                    this.callbacks.afterChange(after);\n                }\n            }\n        };\n        const deselectSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n        deselectSvg.setAttribute('viewBox', '0 0 100 100');\n        const deselectPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n        deselectPath.setAttribute('d', this.classes.deselectPath);\n        deselectSvg.appendChild(deselectPath);\n        deselect.appendChild(deselectSvg);\n        main.appendChild(deselect);\n        const arrow = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n        arrow.classList.add(this.classes.arrow);\n        arrow.setAttribute('viewBox', '0 0 100 100');\n        const arrowPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n        arrowPath.setAttribute('d', this.classes.arrowClose);\n        if (this.settings.alwaysOpen) {\n            arrow.classList.add(this.classes.hide);\n        }\n        arrow.appendChild(arrowPath);\n        main.appendChild(arrow);\n        return {\n            main: main,\n            values: values,\n            deselect: {\n                main: deselect,\n                svg: deselectSvg,\n                path: deselectPath,\n            },\n            arrow: {\n                main: arrow,\n                path: arrowPath,\n            },\n        };\n    }\n    mainFocus(eventType) {\n        if (eventType !== 'click') {\n            this.main.main.focus({ preventScroll: true });\n        }\n    }\n    placeholder() {\n        const placeholderOption = this.store.filter((o) => o.placeholder, false);\n        let placeholderText = this.settings.placeholderText;\n        if (placeholderOption.length) {\n            if (placeholderOption[0].html !== '') {\n                placeholderText = placeholderOption[0].html;\n            }\n            else if (placeholderOption[0].text !== '') {\n                placeholderText = placeholderOption[0].text;\n            }\n        }\n        const placeholder = document.createElement('div');\n        placeholder.classList.add(this.classes.placeholder);\n        placeholder.innerHTML = placeholderText;\n        return placeholder;\n    }\n    renderValues() {\n        if (!this.settings.isMultiple) {\n            this.renderSingleValue();\n            return;\n        }\n        this.renderMultipleValues();\n    }\n    renderSingleValue() {\n        const selected = this.store.filter((o) => {\n            return o.selected && !o.placeholder;\n        }, false);\n        const selectedSingle = selected.length > 0 ? selected[0] : null;\n        if (!selectedSingle) {\n            this.main.values.innerHTML = this.placeholder().outerHTML;\n        }\n        else {\n            const singleValue = document.createElement('div');\n            singleValue.classList.add(this.classes.single);\n            if (selectedSingle.html) {\n                singleValue.innerHTML = selectedSingle.html;\n            }\n            else {\n                singleValue.innerText = selectedSingle.text;\n            }\n            this.main.values.innerHTML = singleValue.outerHTML;\n        }\n        if (!this.settings.allowDeselect || !selected.length) {\n            this.main.deselect.main.classList.add(this.classes.hide);\n        }\n        else {\n            this.main.deselect.main.classList.remove(this.classes.hide);\n        }\n    }\n    renderMultipleValues() {\n        let currentNodes = this.main.values.childNodes;\n        let selectedOptions = this.store.filter((opt) => {\n            return opt.selected && opt.display;\n        }, false);\n        if (selectedOptions.length === 0) {\n            this.main.values.innerHTML = this.placeholder().outerHTML;\n            return;\n        }\n        else {\n            const placeholder = this.main.values.querySelector('.' + this.classes.placeholder);\n            if (placeholder) {\n                placeholder.remove();\n            }\n        }\n        if (selectedOptions.length > this.settings.maxValuesShown) {\n            const singleValue = document.createElement('div');\n            singleValue.classList.add(this.classes.max);\n            singleValue.textContent = this.settings.maxValuesMessage.replace('{number}', selectedOptions.length.toString());\n            this.main.values.innerHTML = singleValue.outerHTML;\n            return;\n        }\n        else {\n            const maxValuesMessage = this.main.values.querySelector('.' + this.classes.max);\n            if (maxValuesMessage) {\n                maxValuesMessage.remove();\n            }\n        }\n        let removeNodes = [];\n        for (let i = 0; i < currentNodes.length; i++) {\n            const node = currentNodes[i];\n            const id = node.getAttribute('data-id');\n            if (id) {\n                const found = selectedOptions.filter((opt) => {\n                    return opt.id === id;\n                }, false);\n                if (!found.length) {\n                    removeNodes.push(node);\n                }\n            }\n        }\n        for (const n of removeNodes) {\n            n.classList.add(this.classes.valueOut);\n            setTimeout(() => {\n                if (this.main.values.hasChildNodes() && this.main.values.contains(n)) {\n                    this.main.values.removeChild(n);\n                }\n            }, 100);\n        }\n        currentNodes = this.main.values.childNodes;\n        for (let d = 0; d < selectedOptions.length; d++) {\n            let shouldAdd = true;\n            for (let i = 0; i < currentNodes.length; i++) {\n                if (selectedOptions[d].id === String(currentNodes[i].dataset.id)) {\n                    shouldAdd = false;\n                }\n            }\n            if (shouldAdd) {\n                if (currentNodes.length === 0) {\n                    this.main.values.appendChild(this.multipleValue(selectedOptions[d]));\n                }\n                else if (d === 0) {\n                    this.main.values.insertBefore(this.multipleValue(selectedOptions[d]), currentNodes[d]);\n                }\n                else {\n                    currentNodes[d - 1].insertAdjacentElement('afterend', this.multipleValue(selectedOptions[d]));\n                }\n            }\n        }\n        this.updateDeselectAll();\n    }\n    multipleValue(option) {\n        const value = document.createElement('div');\n        value.classList.add(this.classes.value);\n        value.dataset.id = option.id;\n        const text = document.createElement('div');\n        text.classList.add(this.classes.valueText);\n        text.innerText = option.text;\n        value.appendChild(text);\n        if (!option.mandatory) {\n            const deleteDiv = document.createElement('div');\n            deleteDiv.classList.add(this.classes.valueDelete);\n            deleteDiv.onclick = (e) => {\n                e.preventDefault();\n                e.stopPropagation();\n                if (this.settings.disabled) {\n                    return;\n                }\n                let shouldDelete = true;\n                const before = this.store.getSelectedOptions();\n                const after = before.filter((o) => {\n                    return o.selected && o.id !== option.id;\n                }, true);\n                if (this.settings.minSelected && after.length < this.settings.minSelected) {\n                    return;\n                }\n                if (this.callbacks.beforeChange) {\n                    shouldDelete = this.callbacks.beforeChange(after, before) === true;\n                }\n                if (shouldDelete) {\n                    let selectedValues = [];\n                    for (const o of after) {\n                        if (o instanceof Optgroup) {\n                            for (const c of o.options) {\n                                selectedValues.push(c.value);\n                            }\n                        }\n                        if (o instanceof Option) {\n                            selectedValues.push(o.value);\n                        }\n                    }\n                    this.callbacks.setSelected(selectedValues, false);\n                    if (this.settings.closeOnSelect) {\n                        this.callbacks.close();\n                    }\n                    if (this.callbacks.afterChange) {\n                        this.callbacks.afterChange(after);\n                    }\n                    this.updateDeselectAll();\n                }\n            };\n            const deleteSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n            deleteSvg.setAttribute('viewBox', '0 0 100 100');\n            const deletePath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n            deletePath.setAttribute('d', this.classes.optionDelete);\n            deleteSvg.appendChild(deletePath);\n            deleteDiv.appendChild(deleteSvg);\n            value.appendChild(deleteDiv);\n        }\n        return value;\n    }\n    contentDiv() {\n        const main = document.createElement('div');\n        main.dataset.id = this.settings.id;\n        main.id = this.settings.id;\n        const search = this.searchDiv();\n        main.appendChild(search.main);\n        const list = this.listDiv();\n        main.appendChild(list);\n        return {\n            main: main,\n            search: search,\n            list: list,\n        };\n    }\n    moveContent() {\n        if (this.settings.contentPosition === 'relative') {\n            this.moveContentBelow();\n            return;\n        }\n        if (this.settings.openPosition === 'down') {\n            this.moveContentBelow();\n            return;\n        }\n        else if (this.settings.openPosition === 'up') {\n            this.moveContentAbove();\n            return;\n        }\n        if (this.putContent() === 'up') {\n            this.moveContentAbove();\n        }\n        else {\n            this.moveContentBelow();\n        }\n    }\n    searchDiv() {\n        const main = document.createElement('div');\n        const input = document.createElement('input');\n        const addable = document.createElement('div');\n        main.classList.add(this.classes.search);\n        const searchReturn = {\n            main,\n            input,\n        };\n        if (!this.settings.showSearch) {\n            main.classList.add(this.classes.hide);\n            input.readOnly = true;\n        }\n        input.type = 'search';\n        input.placeholder = this.settings.searchPlaceholder;\n        input.tabIndex = -1;\n        input.setAttribute('aria-label', this.settings.searchPlaceholder);\n        input.setAttribute('autocapitalize', 'off');\n        input.setAttribute('autocomplete', 'off');\n        input.setAttribute('autocorrect', 'off');\n        input.oninput = debounce((e) => {\n            this.callbacks.search(e.target.value);\n        }, 100);\n        input.onkeydown = (e) => {\n            switch (e.key) {\n                case 'ArrowUp':\n                case 'ArrowDown':\n                    e.key === 'ArrowDown' ? this.highlight('down') : this.highlight('up');\n                    return false;\n                case 'Tab':\n                    this.callbacks.close();\n                    return true;\n                case 'Escape':\n                    this.callbacks.close();\n                    return false;\n                case 'Enter':\n                case ' ':\n                    if (this.callbacks.addable && e.ctrlKey) {\n                        addable.click();\n                        return false;\n                    }\n                    else {\n                        const highlighted = this.content.list.querySelector('.' + this.classes.highlighted);\n                        if (highlighted) {\n                            highlighted.click();\n                            return false;\n                        }\n                    }\n                    return true;\n            }\n        };\n        main.appendChild(input);\n        if (this.callbacks.addable) {\n            addable.classList.add(this.classes.addable);\n            const plus = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n            plus.setAttribute('viewBox', '0 0 100 100');\n            const plusPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n            plusPath.setAttribute('d', this.classes.addablePath);\n            plus.appendChild(plusPath);\n            addable.appendChild(plus);\n            addable.onclick = (e) => {\n                e.preventDefault();\n                e.stopPropagation();\n                if (!this.callbacks.addable) {\n                    return;\n                }\n                const inputValue = this.content.search.input.value.trim();\n                if (inputValue === '') {\n                    this.content.search.input.focus();\n                    return;\n                }\n                const runFinish = (oo) => {\n                    let newOption = new Option(oo);\n                    this.callbacks.addOption(newOption);\n                    if (this.settings.isMultiple) {\n                        let values = this.store.getSelected();\n                        values.push(newOption.value);\n                        this.callbacks.setSelected(values, true);\n                    }\n                    else {\n                        this.callbacks.setSelected([newOption.value], true);\n                    }\n                    this.callbacks.search('');\n                    if (this.settings.closeOnSelect) {\n                        setTimeout(() => {\n                            this.callbacks.close();\n                        }, 100);\n                    }\n                };\n                const addableValue = this.callbacks.addable(inputValue);\n                if (addableValue === false || addableValue === undefined || addableValue === null) {\n                    return;\n                }\n                if (addableValue instanceof Promise) {\n                    addableValue.then((value) => {\n                        if (typeof value === 'string') {\n                            runFinish({\n                                text: value,\n                                value: value,\n                            });\n                        }\n                        else {\n                            runFinish(value);\n                        }\n                    });\n                }\n                else if (typeof addableValue === 'string') {\n                    runFinish({\n                        text: addableValue,\n                        value: addableValue,\n                    });\n                }\n                else {\n                    runFinish(addableValue);\n                }\n                return;\n            };\n            main.appendChild(addable);\n            searchReturn.addable = {\n                main: addable,\n                svg: plus,\n                path: plusPath,\n            };\n        }\n        return searchReturn;\n    }\n    searchFocus() {\n        this.content.search.input.focus();\n    }\n    getOptions(notPlaceholder = false, notDisabled = false, notHidden = false) {\n        let query = '.' + this.classes.option;\n        if (notPlaceholder) {\n            query += ':not(.' + this.classes.placeholder + ')';\n        }\n        if (notDisabled) {\n            query += ':not(.' + this.classes.disabled + ')';\n        }\n        if (notHidden) {\n            query += ':not(.' + this.classes.hide + ')';\n        }\n        return Array.from(this.content.list.querySelectorAll(query));\n    }\n    highlight(dir) {\n        const options = this.getOptions(true, true, true);\n        if (options.length === 0) {\n            return;\n        }\n        if (options.length === 1) {\n            if (!options[0].classList.contains(this.classes.highlighted)) {\n                options[0].classList.add(this.classes.highlighted);\n                return;\n            }\n        }\n        for (let i = 0; i < options.length; i++) {\n            if (options[i].classList.contains(this.classes.highlighted)) {\n                const prevOption = options[i];\n                prevOption.classList.remove(this.classes.highlighted);\n                const prevParent = prevOption.parentElement;\n                if (prevParent && prevParent.classList.contains(this.classes.open)) {\n                    const optgroupLabel = prevParent.querySelector('.' + this.classes.optgroupLabel);\n                    if (optgroupLabel) {\n                        optgroupLabel.click();\n                    }\n                }\n                let selectOption = options[dir === 'down' ? (i + 1 < options.length ? i + 1 : 0) : i - 1 >= 0 ? i - 1 : options.length - 1];\n                selectOption.classList.add(this.classes.highlighted);\n                this.ensureElementInView(this.content.list, selectOption);\n                const selectParent = selectOption.parentElement;\n                if (selectParent && selectParent.classList.contains(this.classes.close)) {\n                    const optgroupLabel = selectParent.querySelector('.' + this.classes.optgroupLabel);\n                    if (optgroupLabel) {\n                        optgroupLabel.click();\n                    }\n                }\n                return;\n            }\n        }\n        options[dir === 'down' ? 0 : options.length - 1].classList.add(this.classes.highlighted);\n        this.ensureElementInView(this.content.list, options[dir === 'down' ? 0 : options.length - 1]);\n    }\n    listDiv() {\n        const options = document.createElement('div');\n        options.classList.add(this.classes.list);\n        return options;\n    }\n    renderError(error) {\n        this.content.list.innerHTML = '';\n        const errorDiv = document.createElement('div');\n        errorDiv.classList.add(this.classes.error);\n        errorDiv.textContent = error;\n        this.content.list.appendChild(errorDiv);\n    }\n    renderSearching() {\n        this.content.list.innerHTML = '';\n        const searchingDiv = document.createElement('div');\n        searchingDiv.classList.add(this.classes.searching);\n        searchingDiv.textContent = this.settings.searchingText;\n        this.content.list.appendChild(searchingDiv);\n    }\n    renderOptions(data) {\n        this.content.list.innerHTML = '';\n        if (data.length === 0) {\n            const noResults = document.createElement('div');\n            noResults.classList.add(this.classes.search);\n            noResults.innerHTML = this.settings.searchText;\n            this.content.list.appendChild(noResults);\n            return;\n        }\n        for (const d of data) {\n            if (d instanceof Optgroup) {\n                const optgroupEl = document.createElement('div');\n                optgroupEl.classList.add(this.classes.optgroup);\n                const optgroupLabel = document.createElement('div');\n                optgroupLabel.classList.add(this.classes.optgroupLabel);\n                optgroupEl.appendChild(optgroupLabel);\n                const optgroupLabelText = document.createElement('div');\n                optgroupLabelText.classList.add(this.classes.optgroupLabelText);\n                optgroupLabelText.textContent = d.label;\n                optgroupLabel.appendChild(optgroupLabelText);\n                const optgroupActions = document.createElement('div');\n                optgroupActions.classList.add(this.classes.optgroupActions);\n                optgroupLabel.appendChild(optgroupActions);\n                if (this.settings.isMultiple && d.selectAll) {\n                    const selectAll = document.createElement('div');\n                    selectAll.classList.add(this.classes.optgroupSelectAll);\n                    let allSelected = true;\n                    for (const o of d.options) {\n                        if (!o.selected) {\n                            allSelected = false;\n                            break;\n                        }\n                    }\n                    if (allSelected) {\n                        selectAll.classList.add(this.classes.selected);\n                    }\n                    const selectAllText = document.createElement('span');\n                    selectAllText.textContent = d.selectAllText;\n                    selectAll.appendChild(selectAllText);\n                    const selectAllSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n                    selectAllSvg.setAttribute('viewBox', '0 0 100 100');\n                    selectAll.appendChild(selectAllSvg);\n                    const selectAllBox = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n                    selectAllBox.setAttribute('d', this.classes.optgroupSelectAllBox);\n                    selectAllSvg.appendChild(selectAllBox);\n                    const selectAllCheck = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n                    selectAllCheck.setAttribute('d', this.classes.optgroupSelectAllCheck);\n                    selectAllSvg.appendChild(selectAllCheck);\n                    selectAll.addEventListener('click', (e) => {\n                        e.preventDefault();\n                        e.stopPropagation();\n                        const currentSelected = this.store.getSelected();\n                        if (allSelected) {\n                            const newSelected = currentSelected.filter((s) => {\n                                for (const o of d.options) {\n                                    if (s === o.value) {\n                                        return false;\n                                    }\n                                }\n                                return true;\n                            });\n                            this.callbacks.setSelected(newSelected, true);\n                            return;\n                        }\n                        else {\n                            const newSelected = currentSelected.concat(d.options.map((o) => o.value));\n                            for (const o of d.options) {\n                                if (!this.store.getOptionByID(o.id)) {\n                                    this.callbacks.addOption(o);\n                                }\n                            }\n                            this.callbacks.setSelected(newSelected, true);\n                            return;\n                        }\n                    });\n                    optgroupActions.appendChild(selectAll);\n                }\n                if (d.closable !== 'off') {\n                    const optgroupClosable = document.createElement('div');\n                    optgroupClosable.classList.add(this.classes.optgroupClosable);\n                    const optgroupClosableSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n                    optgroupClosableSvg.setAttribute('viewBox', '0 0 100 100');\n                    optgroupClosableSvg.classList.add(this.classes.arrow);\n                    optgroupClosable.appendChild(optgroupClosableSvg);\n                    const optgroupClosableArrow = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n                    optgroupClosableSvg.appendChild(optgroupClosableArrow);\n                    if (d.options.some((o) => o.selected) || this.content.search.input.value.trim() !== '') {\n                        optgroupClosable.classList.add(this.classes.open);\n                        optgroupClosableArrow.setAttribute('d', this.classes.arrowOpen);\n                    }\n                    else if (d.closable === 'open') {\n                        optgroupEl.classList.add(this.classes.open);\n                        optgroupClosableArrow.setAttribute('d', this.classes.arrowOpen);\n                    }\n                    else if (d.closable === 'close') {\n                        optgroupEl.classList.add(this.classes.close);\n                        optgroupClosableArrow.setAttribute('d', this.classes.arrowClose);\n                    }\n                    optgroupLabel.addEventListener('click', (e) => {\n                        e.preventDefault();\n                        e.stopPropagation();\n                        if (optgroupEl.classList.contains(this.classes.close)) {\n                            optgroupEl.classList.remove(this.classes.close);\n                            optgroupEl.classList.add(this.classes.open);\n                            optgroupClosableArrow.setAttribute('d', this.classes.arrowOpen);\n                        }\n                        else {\n                            optgroupEl.classList.remove(this.classes.open);\n                            optgroupEl.classList.add(this.classes.close);\n                            optgroupClosableArrow.setAttribute('d', this.classes.arrowClose);\n                        }\n                    });\n                    optgroupActions.appendChild(optgroupClosable);\n                }\n                optgroupEl.appendChild(optgroupLabel);\n                for (const o of d.options) {\n                    optgroupEl.appendChild(this.option(o));\n                }\n                this.content.list.appendChild(optgroupEl);\n            }\n            if (d instanceof Option) {\n                this.content.list.appendChild(this.option(d));\n            }\n        }\n    }\n    option(option) {\n        if (option.placeholder) {\n            const placeholder = document.createElement('div');\n            placeholder.classList.add(this.classes.option);\n            placeholder.classList.add(this.classes.hide);\n            return placeholder;\n        }\n        const optionEl = document.createElement('div');\n        optionEl.dataset.id = option.id;\n        optionEl.id = option.id;\n        optionEl.classList.add(this.classes.option);\n        optionEl.setAttribute('role', 'option');\n        if (option.class) {\n            option.class.split(' ').forEach((dataClass) => {\n                optionEl.classList.add(dataClass);\n            });\n        }\n        if (option.style) {\n            optionEl.style.cssText = option.style;\n        }\n        if (this.settings.searchHighlight && this.content.search.input.value.trim() !== '') {\n            optionEl.innerHTML = this.highlightText(option.html !== '' ? option.html : option.text, this.content.search.input.value, this.classes.searchHighlighter);\n        }\n        else if (option.html !== '') {\n            optionEl.innerHTML = option.html;\n        }\n        else {\n            optionEl.textContent = option.text;\n        }\n        if (this.settings.showOptionTooltips && optionEl.textContent) {\n            optionEl.setAttribute('title', optionEl.textContent);\n        }\n        if (!option.display) {\n            optionEl.classList.add(this.classes.hide);\n        }\n        if (option.disabled) {\n            optionEl.classList.add(this.classes.disabled);\n        }\n        if (option.selected && this.settings.hideSelected) {\n            optionEl.classList.add(this.classes.hide);\n        }\n        if (option.selected) {\n            optionEl.classList.add(this.classes.selected);\n            optionEl.setAttribute('aria-selected', 'true');\n            this.main.main.setAttribute('aria-activedescendant', optionEl.id);\n        }\n        else {\n            optionEl.classList.remove(this.classes.selected);\n            optionEl.setAttribute('aria-selected', 'false');\n        }\n        optionEl.addEventListener('click', (e) => {\n            e.preventDefault();\n            e.stopPropagation();\n            const selectedOptions = this.store.getSelected();\n            const element = e.currentTarget;\n            const elementID = String(element.dataset.id);\n            if (option.disabled || (option.selected && !this.settings.allowDeselect)) {\n                return;\n            }\n            if ((this.settings.isMultiple && this.settings.maxSelected <= selectedOptions.length && !option.selected) ||\n                (this.settings.isMultiple && this.settings.minSelected >= selectedOptions.length && option.selected)) {\n                return;\n            }\n            let shouldUpdate = false;\n            const before = this.store.getSelectedOptions();\n            let after = [];\n            if (this.settings.isMultiple) {\n                if (option.selected) {\n                    after = before.filter((o) => o.id !== elementID);\n                }\n                else {\n                    after = before.concat(option);\n                }\n            }\n            if (!this.settings.isMultiple) {\n                if (option.selected) {\n                    after = [];\n                }\n                else {\n                    after = [option];\n                }\n            }\n            if (!this.callbacks.beforeChange) {\n                shouldUpdate = true;\n            }\n            if (this.callbacks.beforeChange) {\n                if (this.callbacks.beforeChange(after, before) === false) {\n                    shouldUpdate = false;\n                }\n                else {\n                    shouldUpdate = true;\n                }\n            }\n            if (shouldUpdate) {\n                if (!this.store.getOptionByID(elementID)) {\n                    this.callbacks.addOption(option);\n                }\n                this.callbacks.setSelected(after.map((o) => o.value), false);\n                if (this.settings.closeOnSelect) {\n                    this.callbacks.close();\n                }\n                if (this.callbacks.afterChange) {\n                    this.callbacks.afterChange(after);\n                }\n            }\n        });\n        return optionEl;\n    }\n    destroy() {\n        this.main.main.remove();\n        this.content.main.remove();\n    }\n    highlightText(str, search, className) {\n        let completedString = str;\n        const regex = new RegExp('(' + search.trim() + ')(?![^<]*>[^<>]*</)', 'i');\n        if (!str.match(regex)) {\n            return str;\n        }\n        const matchStartPosition = str.match(regex).index;\n        const matchEndPosition = matchStartPosition + str.match(regex)[0].toString().length;\n        const originalTextFoundByRegex = str.substring(matchStartPosition, matchEndPosition);\n        completedString = completedString.replace(regex, `<mark class=\"${className}\">${originalTextFoundByRegex}</mark>`);\n        return completedString;\n    }\n    moveContentAbove() {\n        const mainHeight = this.main.main.offsetHeight;\n        const contentHeight = this.content.main.offsetHeight;\n        this.main.main.classList.remove(this.classes.openBelow);\n        this.main.main.classList.add(this.classes.openAbove);\n        this.content.main.classList.remove(this.classes.openBelow);\n        this.content.main.classList.add(this.classes.openAbove);\n        const containerRect = this.main.main.getBoundingClientRect();\n        this.content.main.style.margin = '-' + (mainHeight + contentHeight - 1) + 'px 0px 0px 0px';\n        this.content.main.style.top = containerRect.top + containerRect.height + window.scrollY + 'px';\n        this.content.main.style.left = containerRect.left + window.scrollX + 'px';\n        this.content.main.style.width = containerRect.width + 'px';\n    }\n    moveContentBelow() {\n        this.main.main.classList.remove(this.classes.openAbove);\n        this.main.main.classList.add(this.classes.openBelow);\n        this.content.main.classList.remove(this.classes.openAbove);\n        this.content.main.classList.add(this.classes.openBelow);\n        const containerRect = this.main.main.getBoundingClientRect();\n        this.content.main.style.margin = '-1px 0px 0px 0px';\n        if (this.settings.contentPosition !== 'relative') {\n            this.content.main.style.top = containerRect.top + containerRect.height + window.scrollY + 'px';\n            this.content.main.style.left = containerRect.left + window.scrollX + 'px';\n            this.content.main.style.width = containerRect.width + 'px';\n        }\n    }\n    ensureElementInView(container, element) {\n        const cTop = container.scrollTop + container.offsetTop;\n        const cBottom = cTop + container.clientHeight;\n        const eTop = element.offsetTop;\n        const eBottom = eTop + element.clientHeight;\n        if (eTop < cTop) {\n            container.scrollTop -= cTop - eTop;\n        }\n        else if (eBottom > cBottom) {\n            container.scrollTop += eBottom - cBottom;\n        }\n    }\n    putContent() {\n        const mainHeight = this.main.main.offsetHeight;\n        const mainRect = this.main.main.getBoundingClientRect();\n        const contentHeight = this.content.main.offsetHeight;\n        const spaceBelow = window.innerHeight - (mainRect.top + mainHeight);\n        if (spaceBelow <= contentHeight) {\n            if (mainRect.top > contentHeight) {\n                return 'up';\n            }\n            else {\n                return 'down';\n            }\n        }\n        return 'down';\n    }\n    updateDeselectAll() {\n        if (!this.store || !this.settings) {\n            return;\n        }\n        const selected = this.store.getSelectedOptions();\n        const hasSelectedItems = selected && selected.length > 0;\n        const isMultiple = this.settings.isMultiple;\n        const allowDeselect = this.settings.allowDeselect;\n        const deselectButton = this.main.deselect.main;\n        const hideClass = this.classes.hide;\n        if (allowDeselect && !(isMultiple && !hasSelectedItems)) {\n            deselectButton.classList.remove(hideClass);\n        }\n        else {\n            deselectButton.classList.add(hideClass);\n        }\n    }\n}\n\nclass Select {\n    constructor(select) {\n        this.listen = false;\n        this.observer = null;\n        this.select = select;\n        this.select.addEventListener('change', this.valueChange.bind(this), {\n            passive: true,\n        });\n        this.observer = new MutationObserver(this.observeCall.bind(this));\n        this.changeListen(true);\n    }\n    enable() {\n        this.select.disabled = false;\n    }\n    disable() {\n        this.select.disabled = true;\n    }\n    hideUI() {\n        this.select.tabIndex = -1;\n        this.select.style.display = 'none';\n        this.select.setAttribute('aria-hidden', 'true');\n    }\n    showUI() {\n        this.select.removeAttribute('tabindex');\n        this.select.style.display = '';\n        this.select.removeAttribute('aria-hidden');\n    }\n    changeListen(listen) {\n        this.listen = listen;\n        if (listen) {\n            if (this.observer) {\n                this.observer.observe(this.select, {\n                    subtree: true,\n                    childList: true,\n                    attributes: true,\n                });\n            }\n        }\n        if (!listen) {\n            if (this.observer) {\n                this.observer.disconnect();\n            }\n        }\n    }\n    valueChange(ev) {\n        if (this.listen && this.onValueChange) {\n            this.onValueChange(this.getSelectedValues());\n        }\n        return true;\n    }\n    observeCall(mutations) {\n        if (!this.listen) {\n            return;\n        }\n        let classChanged = false;\n        let disabledChanged = false;\n        let optgroupOptionChanged = false;\n        for (const m of mutations) {\n            if (m.target === this.select) {\n                if (m.attributeName === 'disabled') {\n                    disabledChanged = true;\n                }\n                if (m.attributeName === 'class') {\n                    classChanged = true;\n                }\n            }\n            if (m.target.nodeName === 'OPTGROUP' || m.target.nodeName === 'OPTION') {\n                optgroupOptionChanged = true;\n            }\n        }\n        if (classChanged && this.onClassChange) {\n            this.onClassChange(this.select.className.split(' '));\n        }\n        if (disabledChanged && this.onDisabledChange) {\n            this.changeListen(false);\n            this.onDisabledChange(this.select.disabled);\n            this.changeListen(true);\n        }\n        if (optgroupOptionChanged && this.onOptionsChange) {\n            this.changeListen(false);\n            this.onOptionsChange(this.getData());\n            this.changeListen(true);\n        }\n    }\n    getData() {\n        let data = [];\n        const nodes = this.select.childNodes;\n        for (const n of nodes) {\n            if (n.nodeName === 'OPTGROUP') {\n                data.push(this.getDataFromOptgroup(n));\n            }\n            if (n.nodeName === 'OPTION') {\n                data.push(this.getDataFromOption(n));\n            }\n        }\n        return data;\n    }\n    getDataFromOptgroup(optgroup) {\n        let data = {\n            id: optgroup.id,\n            label: optgroup.label,\n            selectAll: optgroup.dataset ? optgroup.dataset.selectall === 'true' : false,\n            selectAllText: optgroup.dataset ? optgroup.dataset.selectalltext : 'Select all',\n            closable: optgroup.dataset ? optgroup.dataset.closable : 'off',\n            options: [],\n        };\n        const options = optgroup.childNodes;\n        for (const o of options) {\n            if (o.nodeName === 'OPTION') {\n                data.options.push(this.getDataFromOption(o));\n            }\n        }\n        return data;\n    }\n    getDataFromOption(option) {\n        return {\n            id: option.id,\n            value: option.value,\n            text: option.text,\n            html: option.dataset && option.dataset.html ? option.dataset.html : '',\n            selected: option.selected,\n            display: option.style.display === 'none' ? false : true,\n            disabled: option.disabled,\n            mandatory: option.dataset ? option.dataset.mandatory === 'true' : false,\n            placeholder: option.dataset.placeholder === 'true',\n            class: option.className,\n            style: option.style.cssText,\n            data: option.dataset,\n        };\n    }\n    getSelectedValues() {\n        let values = [];\n        const options = this.select.childNodes;\n        for (const o of options) {\n            if (o.nodeName === 'OPTGROUP') {\n                const optgroupOptions = o.childNodes;\n                for (const oo of optgroupOptions) {\n                    if (oo.nodeName === 'OPTION') {\n                        const option = oo;\n                        if (option.selected) {\n                            values.push(option.value);\n                        }\n                    }\n                }\n            }\n            if (o.nodeName === 'OPTION') {\n                const option = o;\n                if (option.selected) {\n                    values.push(option.value);\n                }\n            }\n        }\n        return values;\n    }\n    setSelected(value) {\n        this.changeListen(false);\n        const options = this.select.childNodes;\n        for (const o of options) {\n            if (o.nodeName === 'OPTGROUP') {\n                const optgroup = o;\n                const optgroupOptions = optgroup.childNodes;\n                for (const oo of optgroupOptions) {\n                    if (oo.nodeName === 'OPTION') {\n                        const option = oo;\n                        option.selected = value.includes(option.value);\n                    }\n                }\n            }\n            if (o.nodeName === 'OPTION') {\n                const option = o;\n                option.selected = value.includes(option.value);\n            }\n        }\n        this.changeListen(true);\n    }\n    updateSelect(id, style, classes) {\n        this.changeListen(false);\n        if (id) {\n            this.select.dataset.id = id;\n        }\n        if (style) {\n            this.select.style.cssText = style;\n        }\n        if (classes) {\n            this.select.className = '';\n            classes.forEach((c) => {\n                if (c.trim() !== '') {\n                    this.select.classList.add(c.trim());\n                }\n            });\n        }\n        this.changeListen(true);\n    }\n    updateOptions(data) {\n        this.changeListen(false);\n        this.select.innerHTML = '';\n        for (const d of data) {\n            if (d instanceof Optgroup) {\n                this.select.appendChild(this.createOptgroup(d));\n            }\n            if (d instanceof Option) {\n                this.select.appendChild(this.createOption(d));\n            }\n        }\n        this.select.dispatchEvent(new Event('change'));\n        this.changeListen(true);\n    }\n    createOptgroup(optgroup) {\n        const optgroupEl = document.createElement('optgroup');\n        optgroupEl.id = optgroup.id;\n        optgroupEl.label = optgroup.label;\n        if (optgroup.selectAll) {\n            optgroupEl.dataset.selectAll = 'true';\n        }\n        if (optgroup.closable !== 'off') {\n            optgroupEl.dataset.closable = optgroup.closable;\n        }\n        if (optgroup.options) {\n            for (const o of optgroup.options) {\n                optgroupEl.appendChild(this.createOption(o));\n            }\n        }\n        return optgroupEl;\n    }\n    createOption(info) {\n        const optionEl = document.createElement('option');\n        optionEl.id = info.id;\n        optionEl.value = info.value;\n        optionEl.innerHTML = info.text;\n        if (info.html !== '') {\n            optionEl.setAttribute('data-html', info.html);\n        }\n        if (info.selected) {\n            optionEl.selected = info.selected;\n        }\n        if (info.disabled) {\n            optionEl.disabled = true;\n        }\n        if (info.display === false) {\n            optionEl.style.display = 'none';\n        }\n        if (info.placeholder) {\n            optionEl.setAttribute('data-placeholder', 'true');\n        }\n        if (info.mandatory) {\n            optionEl.setAttribute('data-mandatory', 'true');\n        }\n        if (info.class) {\n            info.class.split(' ').forEach((optionClass) => {\n                optionEl.classList.add(optionClass);\n            });\n        }\n        if (info.data && typeof info.data === 'object') {\n            Object.keys(info.data).forEach((key) => {\n                optionEl.setAttribute('data-' + kebabCase(key), info.data[key]);\n            });\n        }\n        return optionEl;\n    }\n    destroy() {\n        this.changeListen(false);\n        this.select.removeEventListener('change', this.valueChange.bind(this));\n        if (this.observer) {\n            this.observer.disconnect();\n            this.observer = null;\n        }\n        delete this.select.dataset.id;\n        this.showUI();\n    }\n}\n\nclass SlimSelect {\n    constructor(config) {\n        var _a;\n        this.events = {\n            search: undefined,\n            searchFilter: (opt, search) => {\n                return opt.text.toLowerCase().indexOf(search.toLowerCase()) !== -1;\n            },\n            addable: undefined,\n            beforeChange: undefined,\n            afterChange: undefined,\n            beforeOpen: undefined,\n            afterOpen: undefined,\n            beforeClose: undefined,\n            afterClose: undefined,\n        };\n        this.windowResize = debounce(() => {\n            if (!this.settings.isOpen && !this.settings.isFullOpen) {\n                return;\n            }\n            this.render.moveContent();\n        });\n        this.windowScroll = debounce(() => {\n            if (!this.settings.isOpen && !this.settings.isFullOpen) {\n                return;\n            }\n            this.render.moveContent();\n        });\n        this.documentClick = (e) => {\n            if (!this.settings.isOpen) {\n                return;\n            }\n            if (e.target && !hasClassInTree(e.target, this.settings.id)) {\n                this.close(e.type);\n            }\n        };\n        this.windowVisibilityChange = () => {\n            if (document.hidden) {\n                this.close();\n            }\n        };\n        this.selectEl = (typeof config.select === 'string' ? document.querySelector(config.select) : config.select);\n        if (!this.selectEl) {\n            if (config.events && config.events.error) {\n                config.events.error(new Error('Could not find select element'));\n            }\n            return;\n        }\n        if (this.selectEl.tagName !== 'SELECT') {\n            if (config.events && config.events.error) {\n                config.events.error(new Error('Element isnt of type select'));\n            }\n            return;\n        }\n        if (this.selectEl.dataset.ssid) {\n            this.destroy();\n        }\n        this.settings = new Settings(config.settings);\n        const debounceEvents = ['afterChange', 'beforeOpen', 'afterOpen', 'beforeClose', 'afterClose'];\n        for (const key in config.events) {\n            if (!config.events.hasOwnProperty(key)) {\n                continue;\n            }\n            if (debounceEvents.indexOf(key) !== -1) {\n                this.events[key] = debounce(config.events[key], 100);\n            }\n            else {\n                this.events[key] = config.events[key];\n            }\n        }\n        this.settings.disabled = ((_a = config.settings) === null || _a === void 0 ? void 0 : _a.disabled) ? config.settings.disabled : this.selectEl.disabled;\n        this.settings.isMultiple = this.selectEl.multiple;\n        this.settings.style = this.selectEl.style.cssText;\n        this.settings.class = this.selectEl.className.split(' ');\n        this.select = new Select(this.selectEl);\n        this.select.updateSelect(this.settings.id, this.settings.style, this.settings.class);\n        this.select.hideUI();\n        this.select.onValueChange = (values) => {\n            this.setSelected(values);\n        };\n        this.select.onClassChange = (classes) => {\n            this.settings.class = classes;\n            this.render.updateClassStyles();\n        };\n        this.select.onDisabledChange = (disabled) => {\n            if (disabled) {\n                this.disable();\n            }\n            else {\n                this.enable();\n            }\n        };\n        this.select.onOptionsChange = (data) => {\n            this.setData(data);\n        };\n        this.store = new Store(this.settings.isMultiple ? 'multiple' : 'single', config.data ? config.data : this.select.getData());\n        if (config.data) {\n            this.select.updateOptions(this.store.getData());\n        }\n        const callbacks = {\n            open: this.open.bind(this),\n            close: this.close.bind(this),\n            addable: this.events.addable ? this.events.addable : undefined,\n            setSelected: this.setSelected.bind(this),\n            addOption: this.addOption.bind(this),\n            search: this.search.bind(this),\n            beforeChange: this.events.beforeChange,\n            afterChange: this.events.afterChange,\n        };\n        this.render = new Render(this.settings, this.store, callbacks);\n        this.render.renderValues();\n        this.render.renderOptions(this.store.getData());\n        const selectAriaLabel = this.selectEl.getAttribute('aria-label');\n        const selectAriaLabelledBy = this.selectEl.getAttribute('aria-labelledby');\n        if (selectAriaLabel) {\n            this.render.main.main.setAttribute('aria-label', selectAriaLabel);\n        }\n        else if (selectAriaLabelledBy) {\n            this.render.main.main.setAttribute('aria-labelledby', selectAriaLabelledBy);\n        }\n        if (this.selectEl.parentNode) {\n            this.selectEl.parentNode.insertBefore(this.render.main.main, this.selectEl.nextSibling);\n        }\n        document.addEventListener('click', this.documentClick);\n        window.addEventListener('resize', this.windowResize, false);\n        if (this.settings.openPosition === 'auto') {\n            window.addEventListener('scroll', this.windowScroll, false);\n        }\n        document.addEventListener('visibilitychange', this.windowVisibilityChange);\n        if (this.settings.disabled) {\n            this.disable();\n        }\n        if (this.settings.alwaysOpen) {\n            this.open();\n        }\n        this.selectEl.slim = this;\n    }\n    enable() {\n        this.settings.disabled = false;\n        this.select.enable();\n        this.render.enable();\n    }\n    disable() {\n        this.settings.disabled = true;\n        this.select.disable();\n        this.render.disable();\n    }\n    getData() {\n        return this.store.getData();\n    }\n    setData(data) {\n        const selected = this.store.getSelected();\n        const err = this.store.validateDataArray(data);\n        if (err) {\n            if (this.events.error) {\n                this.events.error(err);\n            }\n            return;\n        }\n        this.store.setData(data);\n        const dataClean = this.store.getData();\n        this.select.updateOptions(dataClean);\n        this.render.renderValues();\n        this.render.renderOptions(dataClean);\n        if (this.events.afterChange && !isEqual(selected, this.store.getSelected())) {\n            this.events.afterChange(this.store.getSelectedOptions());\n        }\n    }\n    getSelected() {\n        return this.store.getSelected();\n    }\n    setSelected(value, runAfterChange = true) {\n        const selected = this.store.getSelected();\n        this.store.setSelectedBy('value', Array.isArray(value) ? value : [value]);\n        const data = this.store.getData();\n        this.select.updateOptions(data);\n        this.render.renderValues();\n        if (this.render.content.search.input.value !== '') {\n            this.search(this.render.content.search.input.value);\n        }\n        else {\n            this.render.renderOptions(data);\n        }\n        if (runAfterChange && this.events.afterChange && !isEqual(selected, this.store.getSelected())) {\n            this.events.afterChange(this.store.getSelectedOptions());\n        }\n    }\n    addOption(option) {\n        const selected = this.store.getSelected();\n        if (!this.store.getDataOptions().some((o) => { var _a; return o.value === ((_a = option.value) !== null && _a !== void 0 ? _a : option.text); })) {\n            this.store.addOption(option);\n        }\n        const data = this.store.getData();\n        this.select.updateOptions(data);\n        this.render.renderValues();\n        this.render.renderOptions(data);\n        if (this.events.afterChange && !isEqual(selected, this.store.getSelected())) {\n            this.events.afterChange(this.store.getSelectedOptions());\n        }\n    }\n    open() {\n        if (this.settings.disabled || this.settings.isOpen) {\n            return;\n        }\n        if (this.events.beforeOpen) {\n            this.events.beforeOpen();\n        }\n        this.render.open();\n        if (this.settings.showSearch) {\n            this.render.searchFocus();\n        }\n        this.settings.isOpen = true;\n        setTimeout(() => {\n            if (this.events.afterOpen) {\n                this.events.afterOpen();\n            }\n            if (this.settings.isOpen) {\n                this.settings.isFullOpen = true;\n            }\n        }, this.settings.timeoutDelay);\n        if (this.settings.contentPosition === 'absolute') {\n            if (this.settings.intervalMove) {\n                clearInterval(this.settings.intervalMove);\n            }\n            this.settings.intervalMove = setInterval(this.render.moveContent.bind(this.render), 500);\n        }\n    }\n    close(eventType = null) {\n        if (!this.settings.isOpen || this.settings.alwaysOpen) {\n            return;\n        }\n        if (this.events.beforeClose) {\n            this.events.beforeClose();\n        }\n        this.render.close();\n        if (this.render.content.search.input.value !== '') {\n            this.search('');\n        }\n        this.render.mainFocus(eventType);\n        this.settings.isOpen = false;\n        this.settings.isFullOpen = false;\n        setTimeout(() => {\n            if (this.events.afterClose) {\n                this.events.afterClose();\n            }\n        }, this.settings.timeoutDelay);\n        if (this.settings.intervalMove) {\n            clearInterval(this.settings.intervalMove);\n        }\n    }\n    search(value) {\n        if (this.render.content.search.input.value !== value) {\n            this.render.content.search.input.value = value;\n        }\n        if (!this.events.search) {\n            this.render.renderOptions(value === '' ? this.store.getData() : this.store.search(value, this.events.searchFilter));\n            return;\n        }\n        this.render.renderSearching();\n        const searchResp = this.events.search(value, this.store.getSelectedOptions());\n        if (searchResp instanceof Promise) {\n            searchResp\n                .then((data) => {\n                this.render.renderOptions(this.store.partialToFullData(data));\n            })\n                .catch((err) => {\n                this.render.renderError(typeof err === 'string' ? err : err.message);\n            });\n            return;\n        }\n        else if (Array.isArray(searchResp)) {\n            this.render.renderOptions(this.store.partialToFullData(searchResp));\n        }\n        else {\n            this.render.renderError('Search event must return a promise or an array of data');\n        }\n    }\n    destroy() {\n        document.removeEventListener('click', this.documentClick);\n        window.removeEventListener('resize', this.windowResize, false);\n        if (this.settings.openPosition === 'auto') {\n            window.removeEventListener('scroll', this.windowScroll, false);\n        }\n        document.removeEventListener('visibilitychange', this.windowVisibilityChange);\n        this.store.setData([]);\n        this.render.destroy();\n        this.select.destroy();\n    }\n}\n\nexport { SlimSelect as default };\n","/*!\n * @kurkle/color v0.3.4\n * https://github.com/kurkle/color#readme\n * (c) 2024 Jukka Kurkela\n * Released under the MIT License\n */\nfunction round(v) {\n  return v + 0.5 | 0;\n}\nconst lim = (v, l, h) => Math.max(Math.min(v, h), l);\nfunction p2b(v) {\n  return lim(round(v * 2.55), 0, 255);\n}\nfunction b2p(v) {\n  return lim(round(v / 2.55), 0, 100);\n}\nfunction n2b(v) {\n  return lim(round(v * 255), 0, 255);\n}\nfunction b2n(v) {\n  return lim(round(v / 2.55) / 100, 0, 1);\n}\nfunction n2p(v) {\n  return lim(round(v * 100), 0, 100);\n}\n\nconst map$1 = {0: 0, 1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8, 9: 9, A: 10, B: 11, C: 12, D: 13, E: 14, F: 15, a: 10, b: 11, c: 12, d: 13, e: 14, f: 15};\nconst hex = [...'0123456789ABCDEF'];\nconst h1 = b => hex[b & 0xF];\nconst h2 = b => hex[(b & 0xF0) >> 4] + hex[b & 0xF];\nconst eq = b => ((b & 0xF0) >> 4) === (b & 0xF);\nconst isShort = v => eq(v.r) && eq(v.g) && eq(v.b) && eq(v.a);\nfunction hexParse(str) {\n  var len = str.length;\n  var ret;\n  if (str[0] === '#') {\n    if (len === 4 || len === 5) {\n      ret = {\n        r: 255 & map$1[str[1]] * 17,\n        g: 255 & map$1[str[2]] * 17,\n        b: 255 & map$1[str[3]] * 17,\n        a: len === 5 ? map$1[str[4]] * 17 : 255\n      };\n    } else if (len === 7 || len === 9) {\n      ret = {\n        r: map$1[str[1]] << 4 | map$1[str[2]],\n        g: map$1[str[3]] << 4 | map$1[str[4]],\n        b: map$1[str[5]] << 4 | map$1[str[6]],\n        a: len === 9 ? (map$1[str[7]] << 4 | map$1[str[8]]) : 255\n      };\n    }\n  }\n  return ret;\n}\nconst alpha = (a, f) => a < 255 ? f(a) : '';\nfunction hexString(v) {\n  var f = isShort(v) ? h1 : h2;\n  return v\n    ? '#' + f(v.r) + f(v.g) + f(v.b) + alpha(v.a, f)\n    : undefined;\n}\n\nconst HUE_RE = /^(hsla?|hwb|hsv)\\(\\s*([-+.e\\d]+)(?:deg)?[\\s,]+([-+.e\\d]+)%[\\s,]+([-+.e\\d]+)%(?:[\\s,]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction hsl2rgbn(h, s, l) {\n  const a = s * Math.min(l, 1 - l);\n  const f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k, 1), -1);\n  return [f(0), f(8), f(4)];\n}\nfunction hsv2rgbn(h, s, v) {\n  const f = (n, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n  return [f(5), f(3), f(1)];\n}\nfunction hwb2rgbn(h, w, b) {\n  const rgb = hsl2rgbn(h, 1, 0.5);\n  let i;\n  if (w + b > 1) {\n    i = 1 / (w + b);\n    w *= i;\n    b *= i;\n  }\n  for (i = 0; i < 3; i++) {\n    rgb[i] *= 1 - w - b;\n    rgb[i] += w;\n  }\n  return rgb;\n}\nfunction hueValue(r, g, b, d, max) {\n  if (r === max) {\n    return ((g - b) / d) + (g < b ? 6 : 0);\n  }\n  if (g === max) {\n    return (b - r) / d + 2;\n  }\n  return (r - g) / d + 4;\n}\nfunction rgb2hsl(v) {\n  const range = 255;\n  const r = v.r / range;\n  const g = v.g / range;\n  const b = v.b / range;\n  const max = Math.max(r, g, b);\n  const min = Math.min(r, g, b);\n  const l = (max + min) / 2;\n  let h, s, d;\n  if (max !== min) {\n    d = max - min;\n    s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n    h = hueValue(r, g, b, d, max);\n    h = h * 60 + 0.5;\n  }\n  return [h | 0, s || 0, l];\n}\nfunction calln(f, a, b, c) {\n  return (\n    Array.isArray(a)\n      ? f(a[0], a[1], a[2])\n      : f(a, b, c)\n  ).map(n2b);\n}\nfunction hsl2rgb(h, s, l) {\n  return calln(hsl2rgbn, h, s, l);\n}\nfunction hwb2rgb(h, w, b) {\n  return calln(hwb2rgbn, h, w, b);\n}\nfunction hsv2rgb(h, s, v) {\n  return calln(hsv2rgbn, h, s, v);\n}\nfunction hue(h) {\n  return (h % 360 + 360) % 360;\n}\nfunction hueParse(str) {\n  const m = HUE_RE.exec(str);\n  let a = 255;\n  let v;\n  if (!m) {\n    return;\n  }\n  if (m[5] !== v) {\n    a = m[6] ? p2b(+m[5]) : n2b(+m[5]);\n  }\n  const h = hue(+m[2]);\n  const p1 = +m[3] / 100;\n  const p2 = +m[4] / 100;\n  if (m[1] === 'hwb') {\n    v = hwb2rgb(h, p1, p2);\n  } else if (m[1] === 'hsv') {\n    v = hsv2rgb(h, p1, p2);\n  } else {\n    v = hsl2rgb(h, p1, p2);\n  }\n  return {\n    r: v[0],\n    g: v[1],\n    b: v[2],\n    a: a\n  };\n}\nfunction rotate(v, deg) {\n  var h = rgb2hsl(v);\n  h[0] = hue(h[0] + deg);\n  h = hsl2rgb(h);\n  v.r = h[0];\n  v.g = h[1];\n  v.b = h[2];\n}\nfunction hslString(v) {\n  if (!v) {\n    return;\n  }\n  const a = rgb2hsl(v);\n  const h = a[0];\n  const s = n2p(a[1]);\n  const l = n2p(a[2]);\n  return v.a < 255\n    ? `hsla(${h}, ${s}%, ${l}%, ${b2n(v.a)})`\n    : `hsl(${h}, ${s}%, ${l}%)`;\n}\n\nconst map = {\n\tx: 'dark',\n\tZ: 'light',\n\tY: 're',\n\tX: 'blu',\n\tW: 'gr',\n\tV: 'medium',\n\tU: 'slate',\n\tA: 'ee',\n\tT: 'ol',\n\tS: 'or',\n\tB: 'ra',\n\tC: 'lateg',\n\tD: 'ights',\n\tR: 'in',\n\tQ: 'turquois',\n\tE: 'hi',\n\tP: 'ro',\n\tO: 'al',\n\tN: 'le',\n\tM: 'de',\n\tL: 'yello',\n\tF: 'en',\n\tK: 'ch',\n\tG: 'arks',\n\tH: 'ea',\n\tI: 'ightg',\n\tJ: 'wh'\n};\nconst names$1 = {\n\tOiceXe: 'f0f8ff',\n\tantiquewEte: 'faebd7',\n\taqua: 'ffff',\n\taquamarRe: '7fffd4',\n\tazuY: 'f0ffff',\n\tbeige: 'f5f5dc',\n\tbisque: 'ffe4c4',\n\tblack: '0',\n\tblanKedOmond: 'ffebcd',\n\tXe: 'ff',\n\tXeviTet: '8a2be2',\n\tbPwn: 'a52a2a',\n\tburlywood: 'deb887',\n\tcaMtXe: '5f9ea0',\n\tKartYuse: '7fff00',\n\tKocTate: 'd2691e',\n\tcSO: 'ff7f50',\n\tcSnflowerXe: '6495ed',\n\tcSnsilk: 'fff8dc',\n\tcrimson: 'dc143c',\n\tcyan: 'ffff',\n\txXe: '8b',\n\txcyan: '8b8b',\n\txgTMnPd: 'b8860b',\n\txWay: 'a9a9a9',\n\txgYF: '6400',\n\txgYy: 'a9a9a9',\n\txkhaki: 'bdb76b',\n\txmagFta: '8b008b',\n\txTivegYF: '556b2f',\n\txSange: 'ff8c00',\n\txScEd: '9932cc',\n\txYd: '8b0000',\n\txsOmon: 'e9967a',\n\txsHgYF: '8fbc8f',\n\txUXe: '483d8b',\n\txUWay: '2f4f4f',\n\txUgYy: '2f4f4f',\n\txQe: 'ced1',\n\txviTet: '9400d3',\n\tdAppRk: 'ff1493',\n\tdApskyXe: 'bfff',\n\tdimWay: '696969',\n\tdimgYy: '696969',\n\tdodgerXe: '1e90ff',\n\tfiYbrick: 'b22222',\n\tflSOwEte: 'fffaf0',\n\tfoYstWAn: '228b22',\n\tfuKsia: 'ff00ff',\n\tgaRsbSo: 'dcdcdc',\n\tghostwEte: 'f8f8ff',\n\tgTd: 'ffd700',\n\tgTMnPd: 'daa520',\n\tWay: '808080',\n\tgYF: '8000',\n\tgYFLw: 'adff2f',\n\tgYy: '808080',\n\thoneyMw: 'f0fff0',\n\thotpRk: 'ff69b4',\n\tRdianYd: 'cd5c5c',\n\tRdigo: '4b0082',\n\tivSy: 'fffff0',\n\tkhaki: 'f0e68c',\n\tlavFMr: 'e6e6fa',\n\tlavFMrXsh: 'fff0f5',\n\tlawngYF: '7cfc00',\n\tNmoncEffon: 'fffacd',\n\tZXe: 'add8e6',\n\tZcSO: 'f08080',\n\tZcyan: 'e0ffff',\n\tZgTMnPdLw: 'fafad2',\n\tZWay: 'd3d3d3',\n\tZgYF: '90ee90',\n\tZgYy: 'd3d3d3',\n\tZpRk: 'ffb6c1',\n\tZsOmon: 'ffa07a',\n\tZsHgYF: '20b2aa',\n\tZskyXe: '87cefa',\n\tZUWay: '778899',\n\tZUgYy: '778899',\n\tZstAlXe: 'b0c4de',\n\tZLw: 'ffffe0',\n\tlime: 'ff00',\n\tlimegYF: '32cd32',\n\tlRF: 'faf0e6',\n\tmagFta: 'ff00ff',\n\tmaPon: '800000',\n\tVaquamarRe: '66cdaa',\n\tVXe: 'cd',\n\tVScEd: 'ba55d3',\n\tVpurpN: '9370db',\n\tVsHgYF: '3cb371',\n\tVUXe: '7b68ee',\n\tVsprRggYF: 'fa9a',\n\tVQe: '48d1cc',\n\tVviTetYd: 'c71585',\n\tmidnightXe: '191970',\n\tmRtcYam: 'f5fffa',\n\tmistyPse: 'ffe4e1',\n\tmoccasR: 'ffe4b5',\n\tnavajowEte: 'ffdead',\n\tnavy: '80',\n\tTdlace: 'fdf5e6',\n\tTive: '808000',\n\tTivedBb: '6b8e23',\n\tSange: 'ffa500',\n\tSangeYd: 'ff4500',\n\tScEd: 'da70d6',\n\tpOegTMnPd: 'eee8aa',\n\tpOegYF: '98fb98',\n\tpOeQe: 'afeeee',\n\tpOeviTetYd: 'db7093',\n\tpapayawEp: 'ffefd5',\n\tpHKpuff: 'ffdab9',\n\tperu: 'cd853f',\n\tpRk: 'ffc0cb',\n\tplum: 'dda0dd',\n\tpowMrXe: 'b0e0e6',\n\tpurpN: '800080',\n\tYbeccapurpN: '663399',\n\tYd: 'ff0000',\n\tPsybrown: 'bc8f8f',\n\tPyOXe: '4169e1',\n\tsaddNbPwn: '8b4513',\n\tsOmon: 'fa8072',\n\tsandybPwn: 'f4a460',\n\tsHgYF: '2e8b57',\n\tsHshell: 'fff5ee',\n\tsiFna: 'a0522d',\n\tsilver: 'c0c0c0',\n\tskyXe: '87ceeb',\n\tUXe: '6a5acd',\n\tUWay: '708090',\n\tUgYy: '708090',\n\tsnow: 'fffafa',\n\tsprRggYF: 'ff7f',\n\tstAlXe: '4682b4',\n\ttan: 'd2b48c',\n\tteO: '8080',\n\ttEstN: 'd8bfd8',\n\ttomato: 'ff6347',\n\tQe: '40e0d0',\n\tviTet: 'ee82ee',\n\tJHt: 'f5deb3',\n\twEte: 'ffffff',\n\twEtesmoke: 'f5f5f5',\n\tLw: 'ffff00',\n\tLwgYF: '9acd32'\n};\nfunction unpack() {\n  const unpacked = {};\n  const keys = Object.keys(names$1);\n  const tkeys = Object.keys(map);\n  let i, j, k, ok, nk;\n  for (i = 0; i < keys.length; i++) {\n    ok = nk = keys[i];\n    for (j = 0; j < tkeys.length; j++) {\n      k = tkeys[j];\n      nk = nk.replace(k, map[k]);\n    }\n    k = parseInt(names$1[ok], 16);\n    unpacked[nk] = [k >> 16 & 0xFF, k >> 8 & 0xFF, k & 0xFF];\n  }\n  return unpacked;\n}\n\nlet names;\nfunction nameParse(str) {\n  if (!names) {\n    names = unpack();\n    names.transparent = [0, 0, 0, 0];\n  }\n  const a = names[str.toLowerCase()];\n  return a && {\n    r: a[0],\n    g: a[1],\n    b: a[2],\n    a: a.length === 4 ? a[3] : 255\n  };\n}\n\nconst RGB_RE = /^rgba?\\(\\s*([-+.\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?[\\s,]+([-+.e\\d]+)(%)?(?:[\\s,/]+([-+.e\\d]+)(%)?)?\\s*\\)$/;\nfunction rgbParse(str) {\n  const m = RGB_RE.exec(str);\n  let a = 255;\n  let r, g, b;\n  if (!m) {\n    return;\n  }\n  if (m[7] !== r) {\n    const v = +m[7];\n    a = m[8] ? p2b(v) : lim(v * 255, 0, 255);\n  }\n  r = +m[1];\n  g = +m[3];\n  b = +m[5];\n  r = 255 & (m[2] ? p2b(r) : lim(r, 0, 255));\n  g = 255 & (m[4] ? p2b(g) : lim(g, 0, 255));\n  b = 255 & (m[6] ? p2b(b) : lim(b, 0, 255));\n  return {\n    r: r,\n    g: g,\n    b: b,\n    a: a\n  };\n}\nfunction rgbString(v) {\n  return v && (\n    v.a < 255\n      ? `rgba(${v.r}, ${v.g}, ${v.b}, ${b2n(v.a)})`\n      : `rgb(${v.r}, ${v.g}, ${v.b})`\n  );\n}\n\nconst to = v => v <= 0.0031308 ? v * 12.92 : Math.pow(v, 1.0 / 2.4) * 1.055 - 0.055;\nconst from = v => v <= 0.04045 ? v / 12.92 : Math.pow((v + 0.055) / 1.055, 2.4);\nfunction interpolate(rgb1, rgb2, t) {\n  const r = from(b2n(rgb1.r));\n  const g = from(b2n(rgb1.g));\n  const b = from(b2n(rgb1.b));\n  return {\n    r: n2b(to(r + t * (from(b2n(rgb2.r)) - r))),\n    g: n2b(to(g + t * (from(b2n(rgb2.g)) - g))),\n    b: n2b(to(b + t * (from(b2n(rgb2.b)) - b))),\n    a: rgb1.a + t * (rgb2.a - rgb1.a)\n  };\n}\n\nfunction modHSL(v, i, ratio) {\n  if (v) {\n    let tmp = rgb2hsl(v);\n    tmp[i] = Math.max(0, Math.min(tmp[i] + tmp[i] * ratio, i === 0 ? 360 : 1));\n    tmp = hsl2rgb(tmp);\n    v.r = tmp[0];\n    v.g = tmp[1];\n    v.b = tmp[2];\n  }\n}\nfunction clone(v, proto) {\n  return v ? Object.assign(proto || {}, v) : v;\n}\nfunction fromObject(input) {\n  var v = {r: 0, g: 0, b: 0, a: 255};\n  if (Array.isArray(input)) {\n    if (input.length >= 3) {\n      v = {r: input[0], g: input[1], b: input[2], a: 255};\n      if (input.length > 3) {\n        v.a = n2b(input[3]);\n      }\n    }\n  } else {\n    v = clone(input, {r: 0, g: 0, b: 0, a: 1});\n    v.a = n2b(v.a);\n  }\n  return v;\n}\nfunction functionParse(str) {\n  if (str.charAt(0) === 'r') {\n    return rgbParse(str);\n  }\n  return hueParse(str);\n}\nclass Color {\n  constructor(input) {\n    if (input instanceof Color) {\n      return input;\n    }\n    const type = typeof input;\n    let v;\n    if (type === 'object') {\n      v = fromObject(input);\n    } else if (type === 'string') {\n      v = hexParse(input) || nameParse(input) || functionParse(input);\n    }\n    this._rgb = v;\n    this._valid = !!v;\n  }\n  get valid() {\n    return this._valid;\n  }\n  get rgb() {\n    var v = clone(this._rgb);\n    if (v) {\n      v.a = b2n(v.a);\n    }\n    return v;\n  }\n  set rgb(obj) {\n    this._rgb = fromObject(obj);\n  }\n  rgbString() {\n    return this._valid ? rgbString(this._rgb) : undefined;\n  }\n  hexString() {\n    return this._valid ? hexString(this._rgb) : undefined;\n  }\n  hslString() {\n    return this._valid ? hslString(this._rgb) : undefined;\n  }\n  mix(color, weight) {\n    if (color) {\n      const c1 = this.rgb;\n      const c2 = color.rgb;\n      let w2;\n      const p = weight === w2 ? 0.5 : weight;\n      const w = 2 * p - 1;\n      const a = c1.a - c2.a;\n      const w1 = ((w * a === -1 ? w : (w + a) / (1 + w * a)) + 1) / 2.0;\n      w2 = 1 - w1;\n      c1.r = 0xFF & w1 * c1.r + w2 * c2.r + 0.5;\n      c1.g = 0xFF & w1 * c1.g + w2 * c2.g + 0.5;\n      c1.b = 0xFF & w1 * c1.b + w2 * c2.b + 0.5;\n      c1.a = p * c1.a + (1 - p) * c2.a;\n      this.rgb = c1;\n    }\n    return this;\n  }\n  interpolate(color, t) {\n    if (color) {\n      this._rgb = interpolate(this._rgb, color._rgb, t);\n    }\n    return this;\n  }\n  clone() {\n    return new Color(this.rgb);\n  }\n  alpha(a) {\n    this._rgb.a = n2b(a);\n    return this;\n  }\n  clearer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 - ratio;\n    return this;\n  }\n  greyscale() {\n    const rgb = this._rgb;\n    const val = round(rgb.r * 0.3 + rgb.g * 0.59 + rgb.b * 0.11);\n    rgb.r = rgb.g = rgb.b = val;\n    return this;\n  }\n  opaquer(ratio) {\n    const rgb = this._rgb;\n    rgb.a *= 1 + ratio;\n    return this;\n  }\n  negate() {\n    const v = this._rgb;\n    v.r = 255 - v.r;\n    v.g = 255 - v.g;\n    v.b = 255 - v.b;\n    return this;\n  }\n  lighten(ratio) {\n    modHSL(this._rgb, 2, ratio);\n    return this;\n  }\n  darken(ratio) {\n    modHSL(this._rgb, 2, -ratio);\n    return this;\n  }\n  saturate(ratio) {\n    modHSL(this._rgb, 1, ratio);\n    return this;\n  }\n  desaturate(ratio) {\n    modHSL(this._rgb, 1, -ratio);\n    return this;\n  }\n  rotate(deg) {\n    rotate(this._rgb, deg);\n    return this;\n  }\n}\n\nfunction index_esm(input) {\n  return new Color(input);\n}\n\nexport { Color, b2n, b2p, index_esm as default, hexParse, hexString, hsl2rgb, hslString, hsv2rgb, hueParse, hwb2rgb, lim, n2b, n2p, nameParse, p2b, rgb2hsl, rgbParse, rgbString, rotate, round };\n","// This file is auto-generated by ./bin/rails stimulus:manifest:update\n// Run that command whenever you add a new controller or create them with\n// ./bin/rails generate stimulus controllerName\n\nimport { application } from \"./application\";\n\nimport HelloController from \"./hello_controller\";\napplication.register(\"hello\", HelloController);\n\nimport SlimSelectController from \"./slim_select_controller\";\napplication.register(\"slim_select\", SlimSelectController);\n\nimport ModalController from \"./modal_controller\";\napplication.register(\"modal\", ModalController);\n\nimport WorkModalController from \"./work_modal_controller\";\napplication.register(\"work_modal\", WorkModalController);\n\nimport NotificationController from \"./notification_controller\";\napplication.register(\"notification\", NotificationController);\n\nimport VehicleController from \"./vehicle_controller\";\napplication.register(\"vehicle\", VehicleController);\n","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  connect() {\n    this.element.textContent = \"Hello World!\";\n  }\n}\n","import { Controller } from \"@hotwired/stimulus\";\nimport SlimSelect from 'slim-select';\n\nexport default class extends Controller {\n  connect() {\n    new SlimSelect({\n      select: this.element,\n      settings: {\n        placeholderText: '-- 部品構造マスタ --',\n      }\n    });\n  }\n\n  change(event) {\n    const part_id = event.target.value;\n    const vehicle_code = event.target.dataset.code;\n    const url = event.target.dataset.url;\n    const method = event.target.dataset.method;\n    const frame = document.getElementById('subpart-list');\n    frame.src = `/vehicles/${vehicle_code}/parts/${part_id}/subpart_list?url=${url}&method=${method}`;\n    frame.reload();\n  }\n}","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  static targets = [\"modal\", \"form\"];\n\n  open(event) {\n    event.preventDefault();\n    document.getElementById('modal-code').value = event.currentTarget.dataset.code;\n    document.getElementById('modal-version').value = event.currentTarget.dataset.versionId;\n    this.formTarget.method = 'patch';\n    this.formTarget.action = `vehicles/${event.currentTarget.dataset.code}`;\n\n    this.modalTarget.classList.toggle('hidden');\n  }\n\n  close(event) {\n    event.preventDefault();\n    this.modalTarget.classList.toggle('hidden');\n  }\n}","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n  open = (event) => {\n    event.preventDefault();\n    const selected_subpart = event.target['dataset']['subpartId'];\n    const with_subparts = event.target['dataset']['withSubparts'];\n\n    document.querySelector('#work_form #subpart_id').value = selected_subpart;\n    document.querySelector('#work_form #with_subparts').value = with_subparts;\n\n    document.getElementById(event.currentTarget.dataset.id).classList.remove('hidden');\n  };\n\n  edit = () => {\n    console.log(document.querySelectorAll('#work_form input'));\n    document.querySelectorAll('#work_form input').forEach((input) => {\n      input.disabled = false;\n    });\n    document.querySelectorAll('#work_form textarea').forEach((input) => {\n      input.disabled = false;\n    });\n    document.querySelectorAll('#work_form select').forEach((input) => {\n      input.disabled = false;\n    });\n    document.querySelector('#work_form input[type=submit]').classList.remove('hidden');\n    document.querySelector('#work_modal .upload-button').classList.add('hidden');\n  };\n\n  close = (event) => {\n    event.preventDefault();\n    document.getElementById(event.currentTarget.dataset.id).classList.add('hidden');\n  };\n\n  addToName = (event) => {\n    event.preventDefault();\n    const replace_to_name = document.querySelector('#subpart-list .part_name').textContent;\n    document.querySelector('#to_name').textContent = replace_to_name;\n  };\n}","import { Controller } from \"@hotwired/stimulus\";\nimport SlimSelect from 'slim-select';\n\nexport default class extends Controller {\n  connect() {\n    new SlimSelect({ select: this.element });\n\n    document.addEventListener(\"turbo:load\", () => {\n      document.querySelectorAll(\".from-version\").forEach((frame) => {\n        frame.src = `/notifications/${frame.dataset.notificationId}/versions/${frame.dataset.id}?from=true`;\n      });\n      document.querySelectorAll(\".to-version\").forEach((frame) => {\n        frame.src = `/notifications/${frame.dataset.notificationId}/versions/${frame.dataset.id}?to=true`;\n      });\n      const frame = document.querySelector(\"#new_parts\");\n      frame.src = `/notifications/${frame.dataset.id}/new_parts`;\n    });\n  }\n\n  updateRank(event) {\n    const rank = event.target.value;\n    const anchor = document.getElementById('rank_updater');\n    anchor.href = `/notifications/rank?rank=${rank}`;\n    anchor.click();\n  }\n\n  addUpgradingVersion(event) {\n    const parent = event.target.closest('#upgrading_versions');\n    const [fromId, fromName] = parent.querySelector('#from_version').value.split(/:(.+)/);\n    const [toId, toName] = parent.querySelector('#to_version').value.split(/:(.+)/);\n\n    const cnt = document.querySelectorAll(\"#from_version_names div\").length;\n    document.querySelector(\"#from_version_names\")\n      .insertAdjacentHTML('beforeend', `\n        <div class='flex'>\n          <a href='javascript:void(0);' class='text-red-500 block mb-1' data-id=\"${cnt}\" data-action='click->notification#removeUpgradingVersion'>\n            ${fromName || '指定なし'}\n            <input type=\"hidden\" value=\"${fromId}\" name=\"upgrade_notification[versions_attributes][${cnt}][from_version_id]\">\n            <input type=\"hidden\" value=\"${toId}\" name=\"upgrade_notification[versions_attributes][${cnt}][to_version_id]\">\n          </a>\n        </div>\n      `);\n    document.querySelector(\"#to_version_names\")\n      .insertAdjacentHTML('beforeend', `<div class='mb-1' id=\"to_${cnt}\">${toName || '指定なし'}</div>`);\n    const fr = new SlimSelect({ select: '#from_version' });\n    fr.setSelected('');\n    const to = new SlimSelect({ select: '#to_version' });\n    to.setSelected('');\n  }\n\n  removeUpgradingVersion(event) {\n    const dataId = event.target.dataset.id;\n    const parent = event.target.closest('div');\n    parent.remove();\n    document.getElementById(`to_${dataId}`).remove();\n  }\n\n  checkDelete(event) {\n    if (event.target.checked) {\n      event.target.closest('.version').classList.add('text-gray-300');\n      event.target.nextSibling.classList.remove('hidden');\n    } else {\n      event.target.closest('.version').classList.remove('text-gray-300');\n      event.target.nextSibling.classList.add('hidden');\n    }\n  }\n}","import { Controller } from \"@hotwired/stimulus\";\n\nexport default class extends Controller {\n\n  openModal = () => {\n    document.getElementById('work_modal').classList.remove('hidden');\n  };\n\n  closeModal = () => {\n    console.log('close modal');\n    document.getElementById('work_modal').classList.add('hidden');\n  };\n\n  toggleSubpart(event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    // Try to find the container element (supports both table and div structures)\n    let container = event.target.closest('.part-item'); // Shop view (div structure)\n    let isTableStructure = false;\n\n    if (!container) {\n      // Admin view (table structure)\n      container = event.target.closest('tr');\n      isTableStructure = true;\n    }\n\n    if (!container) return;\n\n    // Get the level from the data attribute\n    let level;\n    if (isTableStructure) {\n      // For table structure, level is in nested div\n      const levelDiv = container.querySelector('[data-level]');\n      if (!levelDiv) return;\n      level = parseInt(levelDiv.dataset.level);\n    } else {\n      // For div structure, level is on the container itself\n      level = parseInt(container.dataset.level);\n    }\n\n    let nextElement = container.nextElementSibling;\n\n    // Get next element's level\n    let getNextLevel = (element) => {\n      if (isTableStructure) {\n        const levelDiv = element.querySelector('[data-level]');\n        return levelDiv ? parseInt(levelDiv.dataset.level) : null;\n      } else {\n        return element.dataset.level ? parseInt(element.dataset.level) : null;\n      }\n    };\n\n    // Check if we have children\n    if (!nextElement) return;\n    const nextLevel = getNextLevel(nextElement);\n    if (nextLevel === null || nextLevel <= level) return;\n\n    // Toggle the expand/collapse icons (only for shop view)\n    const toggleIcon = event.target.closest('.toggle-icon');\n    if (toggleIcon) {\n      const expandedIcon = toggleIcon.querySelector('.toggle-expanded');\n      const collapsedIcon = toggleIcon.querySelector('.toggle-collapsed');\n      if (expandedIcon) expandedIcon.classList.toggle('hidden');\n      if (collapsedIcon) collapsedIcon.classList.toggle('hidden');\n    }\n\n    // For table structure, also toggle the icon in render_level helper\n    if (isTableStructure) {\n      const iconPlus = container.querySelector('.absolute');\n      if (iconPlus) {\n        iconPlus.classList.toggle('hidden');\n      }\n    }\n\n    // Toggle visibility of all children\n    while (nextElement) {\n      const currentNextLevel = getNextLevel(nextElement);\n      if (currentNextLevel === null || currentNextLevel <= level) break;\n\n      nextElement.classList.toggle('hidden');\n      nextElement = nextElement.nextElementSibling;\n    }\n  }\n}\n","/*!\n * Chart.js v4.5.1\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { Color } from '@kurkle/color';\n\n/**\n * @namespace Chart.helpers\n */ /**\n * An empty function that can be used, for example, for optional callback.\n */ function noop() {\n/* noop */ }\n/**\n * Returns a unique id, sequentially generated from a global variable.\n */ const uid = (()=>{\n    let id = 0;\n    return ()=>id++;\n})();\n/**\n * Returns true if `value` is neither null nor undefined, else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isNullOrUndef(value) {\n    return value === null || value === undefined;\n}\n/**\n * Returns true if `value` is an array (including typed arrays), else returns false.\n * @param value - The value to test.\n * @function\n */ function isArray(value) {\n    if (Array.isArray && Array.isArray(value)) {\n        return true;\n    }\n    const type = Object.prototype.toString.call(value);\n    if (type.slice(0, 7) === '[object' && type.slice(-6) === 'Array]') {\n        return true;\n    }\n    return false;\n}\n/**\n * Returns true if `value` is an object (excluding null), else returns false.\n * @param value - The value to test.\n * @since 2.7.0\n */ function isObject(value) {\n    return value !== null && Object.prototype.toString.call(value) === '[object Object]';\n}\n/**\n * Returns true if `value` is a finite number, else returns false\n * @param value  - The value to test.\n */ function isNumberFinite(value) {\n    return (typeof value === 'number' || value instanceof Number) && isFinite(+value);\n}\n/**\n * Returns `value` if finite, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is not finite.\n */ function finiteOrDefault(value, defaultValue) {\n    return isNumberFinite(value) ? value : defaultValue;\n}\n/**\n * Returns `value` if defined, else returns `defaultValue`.\n * @param value - The value to return if defined.\n * @param defaultValue - The value to return if `value` is undefined.\n */ function valueOrDefault(value, defaultValue) {\n    return typeof value === 'undefined' ? defaultValue : value;\n}\nconst toPercentage = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 : +value / dimension;\nconst toDimension = (value, dimension)=>typeof value === 'string' && value.endsWith('%') ? parseFloat(value) / 100 * dimension : +value;\n/**\n * Calls `fn` with the given `args` in the scope defined by `thisArg` and returns the\n * value returned by `fn`. If `fn` is not a function, this method returns undefined.\n * @param fn - The function to call.\n * @param args - The arguments with which `fn` should be called.\n * @param [thisArg] - The value of `this` provided for the call to `fn`.\n */ function callback(fn, args, thisArg) {\n    if (fn && typeof fn.call === 'function') {\n        return fn.apply(thisArg, args);\n    }\n}\nfunction each(loopable, fn, thisArg, reverse) {\n    let i, len, keys;\n    if (isArray(loopable)) {\n        len = loopable.length;\n        if (reverse) {\n            for(i = len - 1; i >= 0; i--){\n                fn.call(thisArg, loopable[i], i);\n            }\n        } else {\n            for(i = 0; i < len; i++){\n                fn.call(thisArg, loopable[i], i);\n            }\n        }\n    } else if (isObject(loopable)) {\n        keys = Object.keys(loopable);\n        len = keys.length;\n        for(i = 0; i < len; i++){\n            fn.call(thisArg, loopable[keys[i]], keys[i]);\n        }\n    }\n}\n/**\n * Returns true if the `a0` and `a1` arrays have the same content, else returns false.\n * @param a0 - The array to compare\n * @param a1 - The array to compare\n * @private\n */ function _elementsEqual(a0, a1) {\n    let i, ilen, v0, v1;\n    if (!a0 || !a1 || a0.length !== a1.length) {\n        return false;\n    }\n    for(i = 0, ilen = a0.length; i < ilen; ++i){\n        v0 = a0[i];\n        v1 = a1[i];\n        if (v0.datasetIndex !== v1.datasetIndex || v0.index !== v1.index) {\n            return false;\n        }\n    }\n    return true;\n}\n/**\n * Returns a deep copy of `source` without keeping references on objects and arrays.\n * @param source - The value to clone.\n */ function clone(source) {\n    if (isArray(source)) {\n        return source.map(clone);\n    }\n    if (isObject(source)) {\n        const target = Object.create(null);\n        const keys = Object.keys(source);\n        const klen = keys.length;\n        let k = 0;\n        for(; k < klen; ++k){\n            target[keys[k]] = clone(source[keys[k]]);\n        }\n        return target;\n    }\n    return source;\n}\nfunction isValidKey(key) {\n    return [\n        '__proto__',\n        'prototype',\n        'constructor'\n    ].indexOf(key) === -1;\n}\n/**\n * The default merger when Chart.helpers.merge is called without merger option.\n * Note(SB): also used by mergeConfig and mergeScaleConfig as fallback.\n * @private\n */ function _merger(key, target, source, options) {\n    if (!isValidKey(key)) {\n        return;\n    }\n    const tval = target[key];\n    const sval = source[key];\n    if (isObject(tval) && isObject(sval)) {\n        // eslint-disable-next-line @typescript-eslint/no-use-before-define\n        merge(tval, sval, options);\n    } else {\n        target[key] = clone(sval);\n    }\n}\nfunction merge(target, source, options) {\n    const sources = isArray(source) ? source : [\n        source\n    ];\n    const ilen = sources.length;\n    if (!isObject(target)) {\n        return target;\n    }\n    options = options || {};\n    const merger = options.merger || _merger;\n    let current;\n    for(let i = 0; i < ilen; ++i){\n        current = sources[i];\n        if (!isObject(current)) {\n            continue;\n        }\n        const keys = Object.keys(current);\n        for(let k = 0, klen = keys.length; k < klen; ++k){\n            merger(keys[k], target, current, options);\n        }\n    }\n    return target;\n}\nfunction mergeIf(target, source) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    return merge(target, source, {\n        merger: _mergerIf\n    });\n}\n/**\n * Merges source[key] in target[key] only if target[key] is undefined.\n * @private\n */ function _mergerIf(key, target, source) {\n    if (!isValidKey(key)) {\n        return;\n    }\n    const tval = target[key];\n    const sval = source[key];\n    if (isObject(tval) && isObject(sval)) {\n        mergeIf(tval, sval);\n    } else if (!Object.prototype.hasOwnProperty.call(target, key)) {\n        target[key] = clone(sval);\n    }\n}\n/**\n * @private\n */ function _deprecated(scope, value, previous, current) {\n    if (value !== undefined) {\n        console.warn(scope + ': \"' + previous + '\" is deprecated. Please use \"' + current + '\" instead');\n    }\n}\n// resolveObjectKey resolver cache\nconst keyResolvers = {\n    // Chart.helpers.core resolveObjectKey should resolve empty key to root object\n    '': (v)=>v,\n    // default resolvers\n    x: (o)=>o.x,\n    y: (o)=>o.y\n};\n/**\n * @private\n */ function _splitKey(key) {\n    const parts = key.split('.');\n    const keys = [];\n    let tmp = '';\n    for (const part of parts){\n        tmp += part;\n        if (tmp.endsWith('\\\\')) {\n            tmp = tmp.slice(0, -1) + '.';\n        } else {\n            keys.push(tmp);\n            tmp = '';\n        }\n    }\n    return keys;\n}\nfunction _getKeyResolver(key) {\n    const keys = _splitKey(key);\n    return (obj)=>{\n        for (const k of keys){\n            if (k === '') {\n                break;\n            }\n            obj = obj && obj[k];\n        }\n        return obj;\n    };\n}\nfunction resolveObjectKey(obj, key) {\n    const resolver = keyResolvers[key] || (keyResolvers[key] = _getKeyResolver(key));\n    return resolver(obj);\n}\n/**\n * @private\n */ function _capitalize(str) {\n    return str.charAt(0).toUpperCase() + str.slice(1);\n}\nconst defined = (value)=>typeof value !== 'undefined';\nconst isFunction = (value)=>typeof value === 'function';\n// Adapted from https://stackoverflow.com/questions/31128855/comparing-ecma6-sets-for-equality#31129384\nconst setsEqual = (a, b)=>{\n    if (a.size !== b.size) {\n        return false;\n    }\n    for (const item of a){\n        if (!b.has(item)) {\n            return false;\n        }\n    }\n    return true;\n};\n/**\n * @param e - The event\n * @private\n */ function _isClickEvent(e) {\n    return e.type === 'mouseup' || e.type === 'click' || e.type === 'contextmenu';\n}\n\n/**\n * @alias Chart.helpers.math\n * @namespace\n */ const PI = Math.PI;\nconst TAU = 2 * PI;\nconst PITAU = TAU + PI;\nconst INFINITY = Number.POSITIVE_INFINITY;\nconst RAD_PER_DEG = PI / 180;\nconst HALF_PI = PI / 2;\nconst QUARTER_PI = PI / 4;\nconst TWO_THIRDS_PI = PI * 2 / 3;\nconst log10 = Math.log10;\nconst sign = Math.sign;\nfunction almostEquals(x, y, epsilon) {\n    return Math.abs(x - y) < epsilon;\n}\n/**\n * Implementation of the nice number algorithm used in determining where axis labels will go\n */ function niceNum(range) {\n    const roundedRange = Math.round(range);\n    range = almostEquals(range, roundedRange, range / 1000) ? roundedRange : range;\n    const niceRange = Math.pow(10, Math.floor(log10(range)));\n    const fraction = range / niceRange;\n    const niceFraction = fraction <= 1 ? 1 : fraction <= 2 ? 2 : fraction <= 5 ? 5 : 10;\n    return niceFraction * niceRange;\n}\n/**\n * Returns an array of factors sorted from 1 to sqrt(value)\n * @private\n */ function _factorize(value) {\n    const result = [];\n    const sqrt = Math.sqrt(value);\n    let i;\n    for(i = 1; i < sqrt; i++){\n        if (value % i === 0) {\n            result.push(i);\n            result.push(value / i);\n        }\n    }\n    if (sqrt === (sqrt | 0)) {\n        result.push(sqrt);\n    }\n    result.sort((a, b)=>a - b).pop();\n    return result;\n}\n/**\n * Verifies that attempting to coerce n to string or number won't throw a TypeError.\n */ function isNonPrimitive(n) {\n    return typeof n === 'symbol' || typeof n === 'object' && n !== null && !(Symbol.toPrimitive in n || 'toString' in n || 'valueOf' in n);\n}\nfunction isNumber(n) {\n    return !isNonPrimitive(n) && !isNaN(parseFloat(n)) && isFinite(n);\n}\nfunction almostWhole(x, epsilon) {\n    const rounded = Math.round(x);\n    return rounded - epsilon <= x && rounded + epsilon >= x;\n}\n/**\n * @private\n */ function _setMinAndMaxByKey(array, target, property) {\n    let i, ilen, value;\n    for(i = 0, ilen = array.length; i < ilen; i++){\n        value = array[i][property];\n        if (!isNaN(value)) {\n            target.min = Math.min(target.min, value);\n            target.max = Math.max(target.max, value);\n        }\n    }\n}\nfunction toRadians(degrees) {\n    return degrees * (PI / 180);\n}\nfunction toDegrees(radians) {\n    return radians * (180 / PI);\n}\n/**\n * Returns the number of decimal places\n * i.e. the number of digits after the decimal point, of the value of this Number.\n * @param x - A number.\n * @returns The number of decimal places.\n * @private\n */ function _decimalPlaces(x) {\n    if (!isNumberFinite(x)) {\n        return;\n    }\n    let e = 1;\n    let p = 0;\n    while(Math.round(x * e) / e !== x){\n        e *= 10;\n        p++;\n    }\n    return p;\n}\n// Gets the angle from vertical upright to the point about a centre.\nfunction getAngleFromPoint(centrePoint, anglePoint) {\n    const distanceFromXCenter = anglePoint.x - centrePoint.x;\n    const distanceFromYCenter = anglePoint.y - centrePoint.y;\n    const radialDistanceFromCenter = Math.sqrt(distanceFromXCenter * distanceFromXCenter + distanceFromYCenter * distanceFromYCenter);\n    let angle = Math.atan2(distanceFromYCenter, distanceFromXCenter);\n    if (angle < -0.5 * PI) {\n        angle += TAU; // make sure the returned angle is in the range of (-PI/2, 3PI/2]\n    }\n    return {\n        angle,\n        distance: radialDistanceFromCenter\n    };\n}\nfunction distanceBetweenPoints(pt1, pt2) {\n    return Math.sqrt(Math.pow(pt2.x - pt1.x, 2) + Math.pow(pt2.y - pt1.y, 2));\n}\n/**\n * Shortest distance between angles, in either direction.\n * @private\n */ function _angleDiff(a, b) {\n    return (a - b + PITAU) % TAU - PI;\n}\n/**\n * Normalize angle to be between 0 and 2*PI\n * @private\n */ function _normalizeAngle(a) {\n    return (a % TAU + TAU) % TAU;\n}\n/**\n * @private\n */ function _angleBetween(angle, start, end, sameAngleIsFullCircle) {\n    const a = _normalizeAngle(angle);\n    const s = _normalizeAngle(start);\n    const e = _normalizeAngle(end);\n    const angleToStart = _normalizeAngle(s - a);\n    const angleToEnd = _normalizeAngle(e - a);\n    const startToAngle = _normalizeAngle(a - s);\n    const endToAngle = _normalizeAngle(a - e);\n    return a === s || a === e || sameAngleIsFullCircle && s === e || angleToStart > angleToEnd && startToAngle < endToAngle;\n}\n/**\n * Limit `value` between `min` and `max`\n * @param value\n * @param min\n * @param max\n * @private\n */ function _limitValue(value, min, max) {\n    return Math.max(min, Math.min(max, value));\n}\n/**\n * @param {number} value\n * @private\n */ function _int16Range(value) {\n    return _limitValue(value, -32768, 32767);\n}\n/**\n * @param value\n * @param start\n * @param end\n * @param [epsilon]\n * @private\n */ function _isBetween(value, start, end, epsilon = 1e-6) {\n    return value >= Math.min(start, end) - epsilon && value <= Math.max(start, end) + epsilon;\n}\n\nfunction _lookup(table, value, cmp) {\n    cmp = cmp || ((index)=>table[index] < value);\n    let hi = table.length - 1;\n    let lo = 0;\n    let mid;\n    while(hi - lo > 1){\n        mid = lo + hi >> 1;\n        if (cmp(mid)) {\n            lo = mid;\n        } else {\n            hi = mid;\n        }\n    }\n    return {\n        lo,\n        hi\n    };\n}\n/**\n * Binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @param last - lookup last index\n * @private\n */ const _lookupByKey = (table, key, value, last)=>_lookup(table, value, last ? (index)=>{\n        const ti = table[index][key];\n        return ti < value || ti === value && table[index + 1][key] === value;\n    } : (index)=>table[index][key] < value);\n/**\n * Reverse binary search\n * @param table - the table search. must be sorted!\n * @param key - property name for the value in each entry\n * @param value - value to find\n * @private\n */ const _rlookupByKey = (table, key, value)=>_lookup(table, value, (index)=>table[index][key] >= value);\n/**\n * Return subset of `values` between `min` and `max` inclusive.\n * Values are assumed to be in sorted order.\n * @param values - sorted array of values\n * @param min - min value\n * @param max - max value\n */ function _filterBetween(values, min, max) {\n    let start = 0;\n    let end = values.length;\n    while(start < end && values[start] < min){\n        start++;\n    }\n    while(end > start && values[end - 1] > max){\n        end--;\n    }\n    return start > 0 || end < values.length ? values.slice(start, end) : values;\n}\nconst arrayEvents = [\n    'push',\n    'pop',\n    'shift',\n    'splice',\n    'unshift'\n];\nfunction listenArrayEvents(array, listener) {\n    if (array._chartjs) {\n        array._chartjs.listeners.push(listener);\n        return;\n    }\n    Object.defineProperty(array, '_chartjs', {\n        configurable: true,\n        enumerable: false,\n        value: {\n            listeners: [\n                listener\n            ]\n        }\n    });\n    arrayEvents.forEach((key)=>{\n        const method = '_onData' + _capitalize(key);\n        const base = array[key];\n        Object.defineProperty(array, key, {\n            configurable: true,\n            enumerable: false,\n            value (...args) {\n                const res = base.apply(this, args);\n                array._chartjs.listeners.forEach((object)=>{\n                    if (typeof object[method] === 'function') {\n                        object[method](...args);\n                    }\n                });\n                return res;\n            }\n        });\n    });\n}\nfunction unlistenArrayEvents(array, listener) {\n    const stub = array._chartjs;\n    if (!stub) {\n        return;\n    }\n    const listeners = stub.listeners;\n    const index = listeners.indexOf(listener);\n    if (index !== -1) {\n        listeners.splice(index, 1);\n    }\n    if (listeners.length > 0) {\n        return;\n    }\n    arrayEvents.forEach((key)=>{\n        delete array[key];\n    });\n    delete array._chartjs;\n}\n/**\n * @param items\n */ function _arrayUnique(items) {\n    const set = new Set(items);\n    if (set.size === items.length) {\n        return items;\n    }\n    return Array.from(set);\n}\n\nfunction fontString(pixelSize, fontStyle, fontFamily) {\n    return fontStyle + ' ' + pixelSize + 'px ' + fontFamily;\n}\n/**\n* Request animation polyfill\n*/ const requestAnimFrame = function() {\n    if (typeof window === 'undefined') {\n        return function(callback) {\n            return callback();\n        };\n    }\n    return window.requestAnimationFrame;\n}();\n/**\n * Throttles calling `fn` once per animation frame\n * Latest arguments are used on the actual call\n */ function throttled(fn, thisArg) {\n    let argsToUse = [];\n    let ticking = false;\n    return function(...args) {\n        // Save the args for use later\n        argsToUse = args;\n        if (!ticking) {\n            ticking = true;\n            requestAnimFrame.call(window, ()=>{\n                ticking = false;\n                fn.apply(thisArg, argsToUse);\n            });\n        }\n    };\n}\n/**\n * Debounces calling `fn` for `delay` ms\n */ function debounce(fn, delay) {\n    let timeout;\n    return function(...args) {\n        if (delay) {\n            clearTimeout(timeout);\n            timeout = setTimeout(fn, delay, args);\n        } else {\n            fn.apply(this, args);\n        }\n        return delay;\n    };\n}\n/**\n * Converts 'start' to 'left', 'end' to 'right' and others to 'center'\n * @private\n */ const _toLeftRightCenter = (align)=>align === 'start' ? 'left' : align === 'end' ? 'right' : 'center';\n/**\n * Returns `start`, `end` or `(start + end) / 2` depending on `align`. Defaults to `center`\n * @private\n */ const _alignStartEnd = (align, start, end)=>align === 'start' ? start : align === 'end' ? end : (start + end) / 2;\n/**\n * Returns `left`, `right` or `(left + right) / 2` depending on `align`. Defaults to `left`\n * @private\n */ const _textX = (align, left, right, rtl)=>{\n    const check = rtl ? 'left' : 'right';\n    return align === check ? right : align === 'center' ? (left + right) / 2 : left;\n};\n/**\n * Return start and count of visible points.\n * @private\n */ function _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled) {\n    const pointCount = points.length;\n    let start = 0;\n    let count = pointCount;\n    if (meta._sorted) {\n        const { iScale , vScale , _parsed  } = meta;\n        const spanGaps = meta.dataset ? meta.dataset.options ? meta.dataset.options.spanGaps : null : null;\n        const axis = iScale.axis;\n        const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n        if (minDefined) {\n            start = Math.min(// @ts-expect-error Need to type _parsed\n            _lookupByKey(_parsed, axis, min).lo, // @ts-expect-error Need to fix types on _lookupByKey\n            animationsDisabled ? pointCount : _lookupByKey(points, axis, iScale.getPixelForValue(min)).lo);\n            if (spanGaps) {\n                const distanceToDefinedLo = _parsed.slice(0, start + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                start -= Math.max(0, distanceToDefinedLo);\n            }\n            start = _limitValue(start, 0, pointCount - 1);\n        }\n        if (maxDefined) {\n            let end = Math.max(// @ts-expect-error Need to type _parsed\n            _lookupByKey(_parsed, iScale.axis, max, true).hi + 1, // @ts-expect-error Need to fix types on _lookupByKey\n            animationsDisabled ? 0 : _lookupByKey(points, axis, iScale.getPixelForValue(max), true).hi + 1);\n            if (spanGaps) {\n                const distanceToDefinedHi = _parsed.slice(end - 1).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                end += Math.max(0, distanceToDefinedHi);\n            }\n            count = _limitValue(end, start, pointCount) - start;\n        } else {\n            count = pointCount - start;\n        }\n    }\n    return {\n        start,\n        count\n    };\n}\n/**\n * Checks if the scale ranges have changed.\n * @param {object} meta - dataset meta.\n * @returns {boolean}\n * @private\n */ function _scaleRangesChanged(meta) {\n    const { xScale , yScale , _scaleRanges  } = meta;\n    const newRanges = {\n        xmin: xScale.min,\n        xmax: xScale.max,\n        ymin: yScale.min,\n        ymax: yScale.max\n    };\n    if (!_scaleRanges) {\n        meta._scaleRanges = newRanges;\n        return true;\n    }\n    const changed = _scaleRanges.xmin !== xScale.min || _scaleRanges.xmax !== xScale.max || _scaleRanges.ymin !== yScale.min || _scaleRanges.ymax !== yScale.max;\n    Object.assign(_scaleRanges, newRanges);\n    return changed;\n}\n\nconst atEdge = (t)=>t === 0 || t === 1;\nconst elasticIn = (t, s, p)=>-(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * TAU / p));\nconst elasticOut = (t, s, p)=>Math.pow(2, -10 * t) * Math.sin((t - s) * TAU / p) + 1;\n/**\n * Easing functions adapted from Robert Penner's easing equations.\n * @namespace Chart.helpers.easing.effects\n * @see http://www.robertpenner.com/easing/\n */ const effects = {\n    linear: (t)=>t,\n    easeInQuad: (t)=>t * t,\n    easeOutQuad: (t)=>-t * (t - 2),\n    easeInOutQuad: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t : -0.5 * (--t * (t - 2) - 1),\n    easeInCubic: (t)=>t * t * t,\n    easeOutCubic: (t)=>(t -= 1) * t * t + 1,\n    easeInOutCubic: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t : 0.5 * ((t -= 2) * t * t + 2),\n    easeInQuart: (t)=>t * t * t * t,\n    easeOutQuart: (t)=>-((t -= 1) * t * t * t - 1),\n    easeInOutQuart: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t : -0.5 * ((t -= 2) * t * t * t - 2),\n    easeInQuint: (t)=>t * t * t * t * t,\n    easeOutQuint: (t)=>(t -= 1) * t * t * t * t + 1,\n    easeInOutQuint: (t)=>(t /= 0.5) < 1 ? 0.5 * t * t * t * t * t : 0.5 * ((t -= 2) * t * t * t * t + 2),\n    easeInSine: (t)=>-Math.cos(t * HALF_PI) + 1,\n    easeOutSine: (t)=>Math.sin(t * HALF_PI),\n    easeInOutSine: (t)=>-0.5 * (Math.cos(PI * t) - 1),\n    easeInExpo: (t)=>t === 0 ? 0 : Math.pow(2, 10 * (t - 1)),\n    easeOutExpo: (t)=>t === 1 ? 1 : -Math.pow(2, -10 * t) + 1,\n    easeInOutExpo: (t)=>atEdge(t) ? t : t < 0.5 ? 0.5 * Math.pow(2, 10 * (t * 2 - 1)) : 0.5 * (-Math.pow(2, -10 * (t * 2 - 1)) + 2),\n    easeInCirc: (t)=>t >= 1 ? t : -(Math.sqrt(1 - t * t) - 1),\n    easeOutCirc: (t)=>Math.sqrt(1 - (t -= 1) * t),\n    easeInOutCirc: (t)=>(t /= 0.5) < 1 ? -0.5 * (Math.sqrt(1 - t * t) - 1) : 0.5 * (Math.sqrt(1 - (t -= 2) * t) + 1),\n    easeInElastic: (t)=>atEdge(t) ? t : elasticIn(t, 0.075, 0.3),\n    easeOutElastic: (t)=>atEdge(t) ? t : elasticOut(t, 0.075, 0.3),\n    easeInOutElastic (t) {\n        const s = 0.1125;\n        const p = 0.45;\n        return atEdge(t) ? t : t < 0.5 ? 0.5 * elasticIn(t * 2, s, p) : 0.5 + 0.5 * elasticOut(t * 2 - 1, s, p);\n    },\n    easeInBack (t) {\n        const s = 1.70158;\n        return t * t * ((s + 1) * t - s);\n    },\n    easeOutBack (t) {\n        const s = 1.70158;\n        return (t -= 1) * t * ((s + 1) * t + s) + 1;\n    },\n    easeInOutBack (t) {\n        let s = 1.70158;\n        if ((t /= 0.5) < 1) {\n            return 0.5 * (t * t * (((s *= 1.525) + 1) * t - s));\n        }\n        return 0.5 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);\n    },\n    easeInBounce: (t)=>1 - effects.easeOutBounce(1 - t),\n    easeOutBounce (t) {\n        const m = 7.5625;\n        const d = 2.75;\n        if (t < 1 / d) {\n            return m * t * t;\n        }\n        if (t < 2 / d) {\n            return m * (t -= 1.5 / d) * t + 0.75;\n        }\n        if (t < 2.5 / d) {\n            return m * (t -= 2.25 / d) * t + 0.9375;\n        }\n        return m * (t -= 2.625 / d) * t + 0.984375;\n    },\n    easeInOutBounce: (t)=>t < 0.5 ? effects.easeInBounce(t * 2) * 0.5 : effects.easeOutBounce(t * 2 - 1) * 0.5 + 0.5\n};\n\nfunction isPatternOrGradient(value) {\n    if (value && typeof value === 'object') {\n        const type = value.toString();\n        return type === '[object CanvasPattern]' || type === '[object CanvasGradient]';\n    }\n    return false;\n}\nfunction color(value) {\n    return isPatternOrGradient(value) ? value : new Color(value);\n}\nfunction getHoverColor(value) {\n    return isPatternOrGradient(value) ? value : new Color(value).saturate(0.5).darken(0.1).hexString();\n}\n\nconst numbers = [\n    'x',\n    'y',\n    'borderWidth',\n    'radius',\n    'tension'\n];\nconst colors = [\n    'color',\n    'borderColor',\n    'backgroundColor'\n];\nfunction applyAnimationsDefaults(defaults) {\n    defaults.set('animation', {\n        delay: undefined,\n        duration: 1000,\n        easing: 'easeOutQuart',\n        fn: undefined,\n        from: undefined,\n        loop: undefined,\n        to: undefined,\n        type: undefined\n    });\n    defaults.describe('animation', {\n        _fallback: false,\n        _indexable: false,\n        _scriptable: (name)=>name !== 'onProgress' && name !== 'onComplete' && name !== 'fn'\n    });\n    defaults.set('animations', {\n        colors: {\n            type: 'color',\n            properties: colors\n        },\n        numbers: {\n            type: 'number',\n            properties: numbers\n        }\n    });\n    defaults.describe('animations', {\n        _fallback: 'animation'\n    });\n    defaults.set('transitions', {\n        active: {\n            animation: {\n                duration: 400\n            }\n        },\n        resize: {\n            animation: {\n                duration: 0\n            }\n        },\n        show: {\n            animations: {\n                colors: {\n                    from: 'transparent'\n                },\n                visible: {\n                    type: 'boolean',\n                    duration: 0\n                }\n            }\n        },\n        hide: {\n            animations: {\n                colors: {\n                    to: 'transparent'\n                },\n                visible: {\n                    type: 'boolean',\n                    easing: 'linear',\n                    fn: (v)=>v | 0\n                }\n            }\n        }\n    });\n}\n\nfunction applyLayoutsDefaults(defaults) {\n    defaults.set('layout', {\n        autoPadding: true,\n        padding: {\n            top: 0,\n            right: 0,\n            bottom: 0,\n            left: 0\n        }\n    });\n}\n\nconst intlCache = new Map();\nfunction getNumberFormat(locale, options) {\n    options = options || {};\n    const cacheKey = locale + JSON.stringify(options);\n    let formatter = intlCache.get(cacheKey);\n    if (!formatter) {\n        formatter = new Intl.NumberFormat(locale, options);\n        intlCache.set(cacheKey, formatter);\n    }\n    return formatter;\n}\nfunction formatNumber(num, locale, options) {\n    return getNumberFormat(locale, options).format(num);\n}\n\nconst formatters = {\n values (value) {\n        return isArray(value) ?  value : '' + value;\n    },\n numeric (tickValue, index, ticks) {\n        if (tickValue === 0) {\n            return '0';\n        }\n        const locale = this.chart.options.locale;\n        let notation;\n        let delta = tickValue;\n        if (ticks.length > 1) {\n            const maxTick = Math.max(Math.abs(ticks[0].value), Math.abs(ticks[ticks.length - 1].value));\n            if (maxTick < 1e-4 || maxTick > 1e+15) {\n                notation = 'scientific';\n            }\n            delta = calculateDelta(tickValue, ticks);\n        }\n        const logDelta = log10(Math.abs(delta));\n        const numDecimal = isNaN(logDelta) ? 1 : Math.max(Math.min(-1 * Math.floor(logDelta), 20), 0);\n        const options = {\n            notation,\n            minimumFractionDigits: numDecimal,\n            maximumFractionDigits: numDecimal\n        };\n        Object.assign(options, this.options.ticks.format);\n        return formatNumber(tickValue, locale, options);\n    },\n logarithmic (tickValue, index, ticks) {\n        if (tickValue === 0) {\n            return '0';\n        }\n        const remain = ticks[index].significand || tickValue / Math.pow(10, Math.floor(log10(tickValue)));\n        if ([\n            1,\n            2,\n            3,\n            5,\n            10,\n            15\n        ].includes(remain) || index > 0.8 * ticks.length) {\n            return formatters.numeric.call(this, tickValue, index, ticks);\n        }\n        return '';\n    }\n};\nfunction calculateDelta(tickValue, ticks) {\n    let delta = ticks.length > 3 ? ticks[2].value - ticks[1].value : ticks[1].value - ticks[0].value;\n    if (Math.abs(delta) >= 1 && tickValue !== Math.floor(tickValue)) {\n        delta = tickValue - Math.floor(tickValue);\n    }\n    return delta;\n}\n var Ticks = {\n    formatters\n};\n\nfunction applyScaleDefaults(defaults) {\n    defaults.set('scale', {\n        display: true,\n        offset: false,\n        reverse: false,\n        beginAtZero: false,\n bounds: 'ticks',\n        clip: true,\n grace: 0,\n        grid: {\n            display: true,\n            lineWidth: 1,\n            drawOnChartArea: true,\n            drawTicks: true,\n            tickLength: 8,\n            tickWidth: (_ctx, options)=>options.lineWidth,\n            tickColor: (_ctx, options)=>options.color,\n            offset: false\n        },\n        border: {\n            display: true,\n            dash: [],\n            dashOffset: 0.0,\n            width: 1\n        },\n        title: {\n            display: false,\n            text: '',\n            padding: {\n                top: 4,\n                bottom: 4\n            }\n        },\n        ticks: {\n            minRotation: 0,\n            maxRotation: 50,\n            mirror: false,\n            textStrokeWidth: 0,\n            textStrokeColor: '',\n            padding: 3,\n            display: true,\n            autoSkip: true,\n            autoSkipPadding: 3,\n            labelOffset: 0,\n            callback: Ticks.formatters.values,\n            minor: {},\n            major: {},\n            align: 'center',\n            crossAlign: 'near',\n            showLabelBackdrop: false,\n            backdropColor: 'rgba(255, 255, 255, 0.75)',\n            backdropPadding: 2\n        }\n    });\n    defaults.route('scale.ticks', 'color', '', 'color');\n    defaults.route('scale.grid', 'color', '', 'borderColor');\n    defaults.route('scale.border', 'color', '', 'borderColor');\n    defaults.route('scale.title', 'color', '', 'color');\n    defaults.describe('scale', {\n        _fallback: false,\n        _scriptable: (name)=>!name.startsWith('before') && !name.startsWith('after') && name !== 'callback' && name !== 'parser',\n        _indexable: (name)=>name !== 'borderDash' && name !== 'tickBorderDash' && name !== 'dash'\n    });\n    defaults.describe('scales', {\n        _fallback: 'scale'\n    });\n    defaults.describe('scale.ticks', {\n        _scriptable: (name)=>name !== 'backdropPadding' && name !== 'callback',\n        _indexable: (name)=>name !== 'backdropPadding'\n    });\n}\n\nconst overrides = Object.create(null);\nconst descriptors = Object.create(null);\n function getScope$1(node, key) {\n    if (!key) {\n        return node;\n    }\n    const keys = key.split('.');\n    for(let i = 0, n = keys.length; i < n; ++i){\n        const k = keys[i];\n        node = node[k] || (node[k] = Object.create(null));\n    }\n    return node;\n}\nfunction set(root, scope, values) {\n    if (typeof scope === 'string') {\n        return merge(getScope$1(root, scope), values);\n    }\n    return merge(getScope$1(root, ''), scope);\n}\n class Defaults {\n    constructor(_descriptors, _appliers){\n        this.animation = undefined;\n        this.backgroundColor = 'rgba(0,0,0,0.1)';\n        this.borderColor = 'rgba(0,0,0,0.1)';\n        this.color = '#666';\n        this.datasets = {};\n        this.devicePixelRatio = (context)=>context.chart.platform.getDevicePixelRatio();\n        this.elements = {};\n        this.events = [\n            'mousemove',\n            'mouseout',\n            'click',\n            'touchstart',\n            'touchmove'\n        ];\n        this.font = {\n            family: \"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif\",\n            size: 12,\n            style: 'normal',\n            lineHeight: 1.2,\n            weight: null\n        };\n        this.hover = {};\n        this.hoverBackgroundColor = (ctx, options)=>getHoverColor(options.backgroundColor);\n        this.hoverBorderColor = (ctx, options)=>getHoverColor(options.borderColor);\n        this.hoverColor = (ctx, options)=>getHoverColor(options.color);\n        this.indexAxis = 'x';\n        this.interaction = {\n            mode: 'nearest',\n            intersect: true,\n            includeInvisible: false\n        };\n        this.maintainAspectRatio = true;\n        this.onHover = null;\n        this.onClick = null;\n        this.parsing = true;\n        this.plugins = {};\n        this.responsive = true;\n        this.scale = undefined;\n        this.scales = {};\n        this.showLine = true;\n        this.drawActiveElementsOnTop = true;\n        this.describe(_descriptors);\n        this.apply(_appliers);\n    }\n set(scope, values) {\n        return set(this, scope, values);\n    }\n get(scope) {\n        return getScope$1(this, scope);\n    }\n describe(scope, values) {\n        return set(descriptors, scope, values);\n    }\n    override(scope, values) {\n        return set(overrides, scope, values);\n    }\n route(scope, name, targetScope, targetName) {\n        const scopeObject = getScope$1(this, scope);\n        const targetScopeObject = getScope$1(this, targetScope);\n        const privateName = '_' + name;\n        Object.defineProperties(scopeObject, {\n            [privateName]: {\n                value: scopeObject[name],\n                writable: true\n            },\n            [name]: {\n                enumerable: true,\n                get () {\n                    const local = this[privateName];\n                    const target = targetScopeObject[targetName];\n                    if (isObject(local)) {\n                        return Object.assign({}, target, local);\n                    }\n                    return valueOrDefault(local, target);\n                },\n                set (value) {\n                    this[privateName] = value;\n                }\n            }\n        });\n    }\n    apply(appliers) {\n        appliers.forEach((apply)=>apply(this));\n    }\n}\nvar defaults = /* #__PURE__ */ new Defaults({\n    _scriptable: (name)=>!name.startsWith('on'),\n    _indexable: (name)=>name !== 'events',\n    hover: {\n        _fallback: 'interaction'\n    },\n    interaction: {\n        _scriptable: false,\n        _indexable: false\n    }\n}, [\n    applyAnimationsDefaults,\n    applyLayoutsDefaults,\n    applyScaleDefaults\n]);\n\n/**\n * Converts the given font object into a CSS font string.\n * @param font - A font object.\n * @return The CSS font string. See https://developer.mozilla.org/en-US/docs/Web/CSS/font\n * @private\n */ function toFontString(font) {\n    if (!font || isNullOrUndef(font.size) || isNullOrUndef(font.family)) {\n        return null;\n    }\n    return (font.style ? font.style + ' ' : '') + (font.weight ? font.weight + ' ' : '') + font.size + 'px ' + font.family;\n}\n/**\n * @private\n */ function _measureText(ctx, data, gc, longest, string) {\n    let textWidth = data[string];\n    if (!textWidth) {\n        textWidth = data[string] = ctx.measureText(string).width;\n        gc.push(string);\n    }\n    if (textWidth > longest) {\n        longest = textWidth;\n    }\n    return longest;\n}\n/**\n * @private\n */ // eslint-disable-next-line complexity\nfunction _longestText(ctx, font, arrayOfThings, cache) {\n    cache = cache || {};\n    let data = cache.data = cache.data || {};\n    let gc = cache.garbageCollect = cache.garbageCollect || [];\n    if (cache.font !== font) {\n        data = cache.data = {};\n        gc = cache.garbageCollect = [];\n        cache.font = font;\n    }\n    ctx.save();\n    ctx.font = font;\n    let longest = 0;\n    const ilen = arrayOfThings.length;\n    let i, j, jlen, thing, nestedThing;\n    for(i = 0; i < ilen; i++){\n        thing = arrayOfThings[i];\n        // Undefined strings and arrays should not be measured\n        if (thing !== undefined && thing !== null && !isArray(thing)) {\n            longest = _measureText(ctx, data, gc, longest, thing);\n        } else if (isArray(thing)) {\n            // if it is an array lets measure each element\n            // to do maybe simplify this function a bit so we can do this more recursively?\n            for(j = 0, jlen = thing.length; j < jlen; j++){\n                nestedThing = thing[j];\n                // Undefined strings and arrays should not be measured\n                if (nestedThing !== undefined && nestedThing !== null && !isArray(nestedThing)) {\n                    longest = _measureText(ctx, data, gc, longest, nestedThing);\n                }\n            }\n        }\n    }\n    ctx.restore();\n    const gcLen = gc.length / 2;\n    if (gcLen > arrayOfThings.length) {\n        for(i = 0; i < gcLen; i++){\n            delete data[gc[i]];\n        }\n        gc.splice(0, gcLen);\n    }\n    return longest;\n}\n/**\n * Returns the aligned pixel value to avoid anti-aliasing blur\n * @param chart - The chart instance.\n * @param pixel - A pixel value.\n * @param width - The width of the element.\n * @returns The aligned pixel value.\n * @private\n */ function _alignPixel(chart, pixel, width) {\n    const devicePixelRatio = chart.currentDevicePixelRatio;\n    const halfWidth = width !== 0 ? Math.max(width / 2, 0.5) : 0;\n    return Math.round((pixel - halfWidth) * devicePixelRatio) / devicePixelRatio + halfWidth;\n}\n/**\n * Clears the entire canvas.\n */ function clearCanvas(canvas, ctx) {\n    if (!ctx && !canvas) {\n        return;\n    }\n    ctx = ctx || canvas.getContext('2d');\n    ctx.save();\n    // canvas.width and canvas.height do not consider the canvas transform,\n    // while clearRect does\n    ctx.resetTransform();\n    ctx.clearRect(0, 0, canvas.width, canvas.height);\n    ctx.restore();\n}\nfunction drawPoint(ctx, options, x, y) {\n    // eslint-disable-next-line @typescript-eslint/no-use-before-define\n    drawPointLegend(ctx, options, x, y, null);\n}\n// eslint-disable-next-line complexity\nfunction drawPointLegend(ctx, options, x, y, w) {\n    let type, xOffset, yOffset, size, cornerRadius, width, xOffsetW, yOffsetW;\n    const style = options.pointStyle;\n    const rotation = options.rotation;\n    const radius = options.radius;\n    let rad = (rotation || 0) * RAD_PER_DEG;\n    if (style && typeof style === 'object') {\n        type = style.toString();\n        if (type === '[object HTMLImageElement]' || type === '[object HTMLCanvasElement]') {\n            ctx.save();\n            ctx.translate(x, y);\n            ctx.rotate(rad);\n            ctx.drawImage(style, -style.width / 2, -style.height / 2, style.width, style.height);\n            ctx.restore();\n            return;\n        }\n    }\n    if (isNaN(radius) || radius <= 0) {\n        return;\n    }\n    ctx.beginPath();\n    switch(style){\n        // Default includes circle\n        default:\n            if (w) {\n                ctx.ellipse(x, y, w / 2, radius, 0, 0, TAU);\n            } else {\n                ctx.arc(x, y, radius, 0, TAU);\n            }\n            ctx.closePath();\n            break;\n        case 'triangle':\n            width = w ? w / 2 : radius;\n            ctx.moveTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            rad += TWO_THIRDS_PI;\n            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            rad += TWO_THIRDS_PI;\n            ctx.lineTo(x + Math.sin(rad) * width, y - Math.cos(rad) * radius);\n            ctx.closePath();\n            break;\n        case 'rectRounded':\n            // NOTE: the rounded rect implementation changed to use `arc` instead of\n            // `quadraticCurveTo` since it generates better results when rect is\n            // almost a circle. 0.516 (instead of 0.5) produces results with visually\n            // closer proportion to the previous impl and it is inscribed in the\n            // circle with `radius`. For more details, see the following PRs:\n            // https://github.com/chartjs/Chart.js/issues/5597\n            // https://github.com/chartjs/Chart.js/issues/5858\n            cornerRadius = radius * 0.516;\n            size = radius - cornerRadius;\n            xOffset = Math.cos(rad + QUARTER_PI) * size;\n            xOffsetW = Math.cos(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n            yOffset = Math.sin(rad + QUARTER_PI) * size;\n            yOffsetW = Math.sin(rad + QUARTER_PI) * (w ? w / 2 - cornerRadius : size);\n            ctx.arc(x - xOffsetW, y - yOffset, cornerRadius, rad - PI, rad - HALF_PI);\n            ctx.arc(x + yOffsetW, y - xOffset, cornerRadius, rad - HALF_PI, rad);\n            ctx.arc(x + xOffsetW, y + yOffset, cornerRadius, rad, rad + HALF_PI);\n            ctx.arc(x - yOffsetW, y + xOffset, cornerRadius, rad + HALF_PI, rad + PI);\n            ctx.closePath();\n            break;\n        case 'rect':\n            if (!rotation) {\n                size = Math.SQRT1_2 * radius;\n                width = w ? w / 2 : size;\n                ctx.rect(x - width, y - size, 2 * width, 2 * size);\n                break;\n            }\n            rad += QUARTER_PI;\n        /* falls through */ case 'rectRot':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            ctx.closePath();\n            break;\n        case 'crossRot':\n            rad += QUARTER_PI;\n        /* falls through */ case 'cross':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            break;\n        case 'star':\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            rad += QUARTER_PI;\n            xOffsetW = Math.cos(rad) * (w ? w / 2 : radius);\n            xOffset = Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            yOffsetW = Math.sin(rad) * (w ? w / 2 : radius);\n            ctx.moveTo(x - xOffsetW, y - yOffset);\n            ctx.lineTo(x + xOffsetW, y + yOffset);\n            ctx.moveTo(x + yOffsetW, y - xOffset);\n            ctx.lineTo(x - yOffsetW, y + xOffset);\n            break;\n        case 'line':\n            xOffset = w ? w / 2 : Math.cos(rad) * radius;\n            yOffset = Math.sin(rad) * radius;\n            ctx.moveTo(x - xOffset, y - yOffset);\n            ctx.lineTo(x + xOffset, y + yOffset);\n            break;\n        case 'dash':\n            ctx.moveTo(x, y);\n            ctx.lineTo(x + Math.cos(rad) * (w ? w / 2 : radius), y + Math.sin(rad) * radius);\n            break;\n        case false:\n            ctx.closePath();\n            break;\n    }\n    ctx.fill();\n    if (options.borderWidth > 0) {\n        ctx.stroke();\n    }\n}\n/**\n * Returns true if the point is inside the rectangle\n * @param point - The point to test\n * @param area - The rectangle\n * @param margin - allowed margin\n * @private\n */ function _isPointInArea(point, area, margin) {\n    margin = margin || 0.5; // margin - default is to match rounded decimals\n    return !area || point && point.x > area.left - margin && point.x < area.right + margin && point.y > area.top - margin && point.y < area.bottom + margin;\n}\nfunction clipArea(ctx, area) {\n    ctx.save();\n    ctx.beginPath();\n    ctx.rect(area.left, area.top, area.right - area.left, area.bottom - area.top);\n    ctx.clip();\n}\nfunction unclipArea(ctx) {\n    ctx.restore();\n}\n/**\n * @private\n */ function _steppedLineTo(ctx, previous, target, flip, mode) {\n    if (!previous) {\n        return ctx.lineTo(target.x, target.y);\n    }\n    if (mode === 'middle') {\n        const midpoint = (previous.x + target.x) / 2.0;\n        ctx.lineTo(midpoint, previous.y);\n        ctx.lineTo(midpoint, target.y);\n    } else if (mode === 'after' !== !!flip) {\n        ctx.lineTo(previous.x, target.y);\n    } else {\n        ctx.lineTo(target.x, previous.y);\n    }\n    ctx.lineTo(target.x, target.y);\n}\n/**\n * @private\n */ function _bezierCurveTo(ctx, previous, target, flip) {\n    if (!previous) {\n        return ctx.lineTo(target.x, target.y);\n    }\n    ctx.bezierCurveTo(flip ? previous.cp1x : previous.cp2x, flip ? previous.cp1y : previous.cp2y, flip ? target.cp2x : target.cp1x, flip ? target.cp2y : target.cp1y, target.x, target.y);\n}\nfunction setRenderOpts(ctx, opts) {\n    if (opts.translation) {\n        ctx.translate(opts.translation[0], opts.translation[1]);\n    }\n    if (!isNullOrUndef(opts.rotation)) {\n        ctx.rotate(opts.rotation);\n    }\n    if (opts.color) {\n        ctx.fillStyle = opts.color;\n    }\n    if (opts.textAlign) {\n        ctx.textAlign = opts.textAlign;\n    }\n    if (opts.textBaseline) {\n        ctx.textBaseline = opts.textBaseline;\n    }\n}\nfunction decorateText(ctx, x, y, line, opts) {\n    if (opts.strikethrough || opts.underline) {\n        /**\n     * Now that IE11 support has been dropped, we can use more\n     * of the TextMetrics object. The actual bounding boxes\n     * are unflagged in Chrome, Firefox, Edge, and Safari so they\n     * can be safely used.\n     * See https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics#Browser_compatibility\n     */ const metrics = ctx.measureText(line);\n        const left = x - metrics.actualBoundingBoxLeft;\n        const right = x + metrics.actualBoundingBoxRight;\n        const top = y - metrics.actualBoundingBoxAscent;\n        const bottom = y + metrics.actualBoundingBoxDescent;\n        const yDecoration = opts.strikethrough ? (top + bottom) / 2 : bottom;\n        ctx.strokeStyle = ctx.fillStyle;\n        ctx.beginPath();\n        ctx.lineWidth = opts.decorationWidth || 2;\n        ctx.moveTo(left, yDecoration);\n        ctx.lineTo(right, yDecoration);\n        ctx.stroke();\n    }\n}\nfunction drawBackdrop(ctx, opts) {\n    const oldColor = ctx.fillStyle;\n    ctx.fillStyle = opts.color;\n    ctx.fillRect(opts.left, opts.top, opts.width, opts.height);\n    ctx.fillStyle = oldColor;\n}\n/**\n * Render text onto the canvas\n */ function renderText(ctx, text, x, y, font, opts = {}) {\n    const lines = isArray(text) ? text : [\n        text\n    ];\n    const stroke = opts.strokeWidth > 0 && opts.strokeColor !== '';\n    let i, line;\n    ctx.save();\n    ctx.font = font.string;\n    setRenderOpts(ctx, opts);\n    for(i = 0; i < lines.length; ++i){\n        line = lines[i];\n        if (opts.backdrop) {\n            drawBackdrop(ctx, opts.backdrop);\n        }\n        if (stroke) {\n            if (opts.strokeColor) {\n                ctx.strokeStyle = opts.strokeColor;\n            }\n            if (!isNullOrUndef(opts.strokeWidth)) {\n                ctx.lineWidth = opts.strokeWidth;\n            }\n            ctx.strokeText(line, x, y, opts.maxWidth);\n        }\n        ctx.fillText(line, x, y, opts.maxWidth);\n        decorateText(ctx, x, y, line, opts);\n        y += Number(font.lineHeight);\n    }\n    ctx.restore();\n}\n/**\n * Add a path of a rectangle with rounded corners to the current sub-path\n * @param ctx - Context\n * @param rect - Bounding rect\n */ function addRoundedRectPath(ctx, rect) {\n    const { x , y , w , h , radius  } = rect;\n    // top left arc\n    ctx.arc(x + radius.topLeft, y + radius.topLeft, radius.topLeft, 1.5 * PI, PI, true);\n    // line from top left to bottom left\n    ctx.lineTo(x, y + h - radius.bottomLeft);\n    // bottom left arc\n    ctx.arc(x + radius.bottomLeft, y + h - radius.bottomLeft, radius.bottomLeft, PI, HALF_PI, true);\n    // line from bottom left to bottom right\n    ctx.lineTo(x + w - radius.bottomRight, y + h);\n    // bottom right arc\n    ctx.arc(x + w - radius.bottomRight, y + h - radius.bottomRight, radius.bottomRight, HALF_PI, 0, true);\n    // line from bottom right to top right\n    ctx.lineTo(x + w, y + radius.topRight);\n    // top right arc\n    ctx.arc(x + w - radius.topRight, y + radius.topRight, radius.topRight, 0, -HALF_PI, true);\n    // line from top right to top left\n    ctx.lineTo(x + radius.topLeft, y);\n}\n\nconst LINE_HEIGHT = /^(normal|(\\d+(?:\\.\\d+)?)(px|em|%)?)$/;\nconst FONT_STYLE = /^(normal|italic|initial|inherit|unset|(oblique( -?[0-9]?[0-9]deg)?))$/;\n/**\n * @alias Chart.helpers.options\n * @namespace\n */ /**\n * Converts the given line height `value` in pixels for a specific font `size`.\n * @param value - The lineHeight to parse (eg. 1.6, '14px', '75%', '1.6em').\n * @param size - The font size (in pixels) used to resolve relative `value`.\n * @returns The effective line height in pixels (size * 1.2 if value is invalid).\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/line-height\n * @since 2.7.0\n */ function toLineHeight(value, size) {\n    const matches = ('' + value).match(LINE_HEIGHT);\n    if (!matches || matches[1] === 'normal') {\n        return size * 1.2;\n    }\n    value = +matches[2];\n    switch(matches[3]){\n        case 'px':\n            return value;\n        case '%':\n            value /= 100;\n            break;\n    }\n    return size * value;\n}\nconst numberOrZero = (v)=>+v || 0;\nfunction _readValueToProps(value, props) {\n    const ret = {};\n    const objProps = isObject(props);\n    const keys = objProps ? Object.keys(props) : props;\n    const read = isObject(value) ? objProps ? (prop)=>valueOrDefault(value[prop], value[props[prop]]) : (prop)=>value[prop] : ()=>value;\n    for (const prop of keys){\n        ret[prop] = numberOrZero(read(prop));\n    }\n    return ret;\n}\n/**\n * Converts the given value into a TRBL object.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left)\n * @since 3.0.0\n */ function toTRBL(value) {\n    return _readValueToProps(value, {\n        top: 'y',\n        right: 'x',\n        bottom: 'y',\n        left: 'x'\n    });\n}\n/**\n * Converts the given value into a TRBL corners object (similar with css border-radius).\n * @param value - If a number, set the value to all TRBL corner components,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n * @returns The TRBL corner values (topLeft, topRight, bottomLeft, bottomRight)\n * @since 3.0.0\n */ function toTRBLCorners(value) {\n    return _readValueToProps(value, [\n        'topLeft',\n        'topRight',\n        'bottomLeft',\n        'bottomRight'\n    ]);\n}\n/**\n * Converts the given value into a padding object with pre-computed width/height.\n * @param value - If a number, set the value to all TRBL component,\n *  else, if an object, use defined properties and sets undefined ones to 0.\n *  x / y are shorthands for same value for left/right and top/bottom.\n * @returns The padding values (top, right, bottom, left, width, height)\n * @since 2.7.0\n */ function toPadding(value) {\n    const obj = toTRBL(value);\n    obj.width = obj.left + obj.right;\n    obj.height = obj.top + obj.bottom;\n    return obj;\n}\n/**\n * Parses font options and returns the font object.\n * @param options - A object that contains font options to be parsed.\n * @param fallback - A object that contains fallback font options.\n * @return The font object.\n * @private\n */ function toFont(options, fallback) {\n    options = options || {};\n    fallback = fallback || defaults.font;\n    let size = valueOrDefault(options.size, fallback.size);\n    if (typeof size === 'string') {\n        size = parseInt(size, 10);\n    }\n    let style = valueOrDefault(options.style, fallback.style);\n    if (style && !('' + style).match(FONT_STYLE)) {\n        console.warn('Invalid font style specified: \"' + style + '\"');\n        style = undefined;\n    }\n    const font = {\n        family: valueOrDefault(options.family, fallback.family),\n        lineHeight: toLineHeight(valueOrDefault(options.lineHeight, fallback.lineHeight), size),\n        size,\n        style,\n        weight: valueOrDefault(options.weight, fallback.weight),\n        string: ''\n    };\n    font.string = toFontString(font);\n    return font;\n}\n/**\n * Evaluates the given `inputs` sequentially and returns the first defined value.\n * @param inputs - An array of values, falling back to the last value.\n * @param context - If defined and the current value is a function, the value\n * is called with `context` as first argument and the result becomes the new input.\n * @param index - If defined and the current value is an array, the value\n * at `index` become the new input.\n * @param info - object to return information about resolution in\n * @param info.cacheable - Will be set to `false` if option is not cacheable.\n * @since 2.7.0\n */ function resolve(inputs, context, index, info) {\n    let cacheable = true;\n    let i, ilen, value;\n    for(i = 0, ilen = inputs.length; i < ilen; ++i){\n        value = inputs[i];\n        if (value === undefined) {\n            continue;\n        }\n        if (context !== undefined && typeof value === 'function') {\n            value = value(context);\n            cacheable = false;\n        }\n        if (index !== undefined && isArray(value)) {\n            value = value[index % value.length];\n            cacheable = false;\n        }\n        if (value !== undefined) {\n            if (info && !cacheable) {\n                info.cacheable = false;\n            }\n            return value;\n        }\n    }\n}\n/**\n * @param minmax\n * @param grace\n * @param beginAtZero\n * @private\n */ function _addGrace(minmax, grace, beginAtZero) {\n    const { min , max  } = minmax;\n    const change = toDimension(grace, (max - min) / 2);\n    const keepZero = (value, add)=>beginAtZero && value === 0 ? 0 : value + add;\n    return {\n        min: keepZero(min, -Math.abs(change)),\n        max: keepZero(max, change)\n    };\n}\nfunction createContext(parentContext, context) {\n    return Object.assign(Object.create(parentContext), context);\n}\n\n/**\n * Creates a Proxy for resolving raw values for options.\n * @param scopes - The option scopes to look for values, in resolution order\n * @param prefixes - The prefixes for values, in resolution order.\n * @param rootScopes - The root option scopes\n * @param fallback - Parent scopes fallback\n * @param getTarget - callback for getting the target for changed values\n * @returns Proxy\n * @private\n */ function _createResolver(scopes, prefixes = [\n    ''\n], rootScopes, fallback, getTarget = ()=>scopes[0]) {\n    const finalRootScopes = rootScopes || scopes;\n    if (typeof fallback === 'undefined') {\n        fallback = _resolve('_fallback', scopes);\n    }\n    const cache = {\n        [Symbol.toStringTag]: 'Object',\n        _cacheable: true,\n        _scopes: scopes,\n        _rootScopes: finalRootScopes,\n        _fallback: fallback,\n        _getTarget: getTarget,\n        override: (scope)=>_createResolver([\n                scope,\n                ...scopes\n            ], prefixes, finalRootScopes, fallback)\n    };\n    return new Proxy(cache, {\n        /**\n     * A trap for the delete operator.\n     */ deleteProperty (target, prop) {\n            delete target[prop]; // remove from cache\n            delete target._keys; // remove cached keys\n            delete scopes[0][prop]; // remove from top level scope\n            return true;\n        },\n        /**\n     * A trap for getting property values.\n     */ get (target, prop) {\n            return _cached(target, prop, ()=>_resolveWithPrefixes(prop, prefixes, scopes, target));\n        },\n        /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */ getOwnPropertyDescriptor (target, prop) {\n            return Reflect.getOwnPropertyDescriptor(target._scopes[0], prop);\n        },\n        /**\n     * A trap for Object.getPrototypeOf.\n     */ getPrototypeOf () {\n            return Reflect.getPrototypeOf(scopes[0]);\n        },\n        /**\n     * A trap for the in operator.\n     */ has (target, prop) {\n            return getKeysFromAllScopes(target).includes(prop);\n        },\n        /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */ ownKeys (target) {\n            return getKeysFromAllScopes(target);\n        },\n        /**\n     * A trap for setting property values.\n     */ set (target, prop, value) {\n            const storage = target._storage || (target._storage = getTarget());\n            target[prop] = storage[prop] = value; // set to top level scope + cache\n            delete target._keys; // remove cached keys\n            return true;\n        }\n    });\n}\n/**\n * Returns an Proxy for resolving option values with context.\n * @param proxy - The Proxy returned by `_createResolver`\n * @param context - Context object for scriptable/indexable options\n * @param subProxy - The proxy provided for scriptable options\n * @param descriptorDefaults - Defaults for descriptors\n * @private\n */ function _attachContext(proxy, context, subProxy, descriptorDefaults) {\n    const cache = {\n        _cacheable: false,\n        _proxy: proxy,\n        _context: context,\n        _subProxy: subProxy,\n        _stack: new Set(),\n        _descriptors: _descriptors(proxy, descriptorDefaults),\n        setContext: (ctx)=>_attachContext(proxy, ctx, subProxy, descriptorDefaults),\n        override: (scope)=>_attachContext(proxy.override(scope), context, subProxy, descriptorDefaults)\n    };\n    return new Proxy(cache, {\n        /**\n     * A trap for the delete operator.\n     */ deleteProperty (target, prop) {\n            delete target[prop]; // remove from cache\n            delete proxy[prop]; // remove from proxy\n            return true;\n        },\n        /**\n     * A trap for getting property values.\n     */ get (target, prop, receiver) {\n            return _cached(target, prop, ()=>_resolveWithContext(target, prop, receiver));\n        },\n        /**\n     * A trap for Object.getOwnPropertyDescriptor.\n     * Also used by Object.hasOwnProperty.\n     */ getOwnPropertyDescriptor (target, prop) {\n            return target._descriptors.allKeys ? Reflect.has(proxy, prop) ? {\n                enumerable: true,\n                configurable: true\n            } : undefined : Reflect.getOwnPropertyDescriptor(proxy, prop);\n        },\n        /**\n     * A trap for Object.getPrototypeOf.\n     */ getPrototypeOf () {\n            return Reflect.getPrototypeOf(proxy);\n        },\n        /**\n     * A trap for the in operator.\n     */ has (target, prop) {\n            return Reflect.has(proxy, prop);\n        },\n        /**\n     * A trap for Object.getOwnPropertyNames and Object.getOwnPropertySymbols.\n     */ ownKeys () {\n            return Reflect.ownKeys(proxy);\n        },\n        /**\n     * A trap for setting property values.\n     */ set (target, prop, value) {\n            proxy[prop] = value; // set to proxy\n            delete target[prop]; // remove from cache\n            return true;\n        }\n    });\n}\n/**\n * @private\n */ function _descriptors(proxy, defaults = {\n    scriptable: true,\n    indexable: true\n}) {\n    const { _scriptable =defaults.scriptable , _indexable =defaults.indexable , _allKeys =defaults.allKeys  } = proxy;\n    return {\n        allKeys: _allKeys,\n        scriptable: _scriptable,\n        indexable: _indexable,\n        isScriptable: isFunction(_scriptable) ? _scriptable : ()=>_scriptable,\n        isIndexable: isFunction(_indexable) ? _indexable : ()=>_indexable\n    };\n}\nconst readKey = (prefix, name)=>prefix ? prefix + _capitalize(name) : name;\nconst needsSubResolver = (prop, value)=>isObject(value) && prop !== 'adapters' && (Object.getPrototypeOf(value) === null || value.constructor === Object);\nfunction _cached(target, prop, resolve) {\n    if (Object.prototype.hasOwnProperty.call(target, prop) || prop === 'constructor') {\n        return target[prop];\n    }\n    const value = resolve();\n    // cache the resolved value\n    target[prop] = value;\n    return value;\n}\nfunction _resolveWithContext(target, prop, receiver) {\n    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n    let value = _proxy[prop]; // resolve from proxy\n    // resolve with context\n    if (isFunction(value) && descriptors.isScriptable(prop)) {\n        value = _resolveScriptable(prop, value, target, receiver);\n    }\n    if (isArray(value) && value.length) {\n        value = _resolveArray(prop, value, target, descriptors.isIndexable);\n    }\n    if (needsSubResolver(prop, value)) {\n        // if the resolved value is an object, create a sub resolver for it\n        value = _attachContext(value, _context, _subProxy && _subProxy[prop], descriptors);\n    }\n    return value;\n}\nfunction _resolveScriptable(prop, getValue, target, receiver) {\n    const { _proxy , _context , _subProxy , _stack  } = target;\n    if (_stack.has(prop)) {\n        throw new Error('Recursion detected: ' + Array.from(_stack).join('->') + '->' + prop);\n    }\n    _stack.add(prop);\n    let value = getValue(_context, _subProxy || receiver);\n    _stack.delete(prop);\n    if (needsSubResolver(prop, value)) {\n        // When scriptable option returns an object, create a resolver on that.\n        value = createSubResolver(_proxy._scopes, _proxy, prop, value);\n    }\n    return value;\n}\nfunction _resolveArray(prop, value, target, isIndexable) {\n    const { _proxy , _context , _subProxy , _descriptors: descriptors  } = target;\n    if (typeof _context.index !== 'undefined' && isIndexable(prop)) {\n        return value[_context.index % value.length];\n    } else if (isObject(value[0])) {\n        // Array of objects, return array or resolvers\n        const arr = value;\n        const scopes = _proxy._scopes.filter((s)=>s !== arr);\n        value = [];\n        for (const item of arr){\n            const resolver = createSubResolver(scopes, _proxy, prop, item);\n            value.push(_attachContext(resolver, _context, _subProxy && _subProxy[prop], descriptors));\n        }\n    }\n    return value;\n}\nfunction resolveFallback(fallback, prop, value) {\n    return isFunction(fallback) ? fallback(prop, value) : fallback;\n}\nconst getScope = (key, parent)=>key === true ? parent : typeof key === 'string' ? resolveObjectKey(parent, key) : undefined;\nfunction addScopes(set, parentScopes, key, parentFallback, value) {\n    for (const parent of parentScopes){\n        const scope = getScope(key, parent);\n        if (scope) {\n            set.add(scope);\n            const fallback = resolveFallback(scope._fallback, key, value);\n            if (typeof fallback !== 'undefined' && fallback !== key && fallback !== parentFallback) {\n                // When we reach the descriptor that defines a new _fallback, return that.\n                // The fallback will resume to that new scope.\n                return fallback;\n            }\n        } else if (scope === false && typeof parentFallback !== 'undefined' && key !== parentFallback) {\n            // Fallback to `false` results to `false`, when falling back to different key.\n            // For example `interaction` from `hover` or `plugins.tooltip` and `animation` from `animations`\n            return null;\n        }\n    }\n    return false;\n}\nfunction createSubResolver(parentScopes, resolver, prop, value) {\n    const rootScopes = resolver._rootScopes;\n    const fallback = resolveFallback(resolver._fallback, prop, value);\n    const allScopes = [\n        ...parentScopes,\n        ...rootScopes\n    ];\n    const set = new Set();\n    set.add(value);\n    let key = addScopesFromKey(set, allScopes, prop, fallback || prop, value);\n    if (key === null) {\n        return false;\n    }\n    if (typeof fallback !== 'undefined' && fallback !== prop) {\n        key = addScopesFromKey(set, allScopes, fallback, key, value);\n        if (key === null) {\n            return false;\n        }\n    }\n    return _createResolver(Array.from(set), [\n        ''\n    ], rootScopes, fallback, ()=>subGetTarget(resolver, prop, value));\n}\nfunction addScopesFromKey(set, allScopes, key, fallback, item) {\n    while(key){\n        key = addScopes(set, allScopes, key, fallback, item);\n    }\n    return key;\n}\nfunction subGetTarget(resolver, prop, value) {\n    const parent = resolver._getTarget();\n    if (!(prop in parent)) {\n        parent[prop] = {};\n    }\n    const target = parent[prop];\n    if (isArray(target) && isObject(value)) {\n        // For array of objects, the object is used to store updated values\n        return value;\n    }\n    return target || {};\n}\nfunction _resolveWithPrefixes(prop, prefixes, scopes, proxy) {\n    let value;\n    for (const prefix of prefixes){\n        value = _resolve(readKey(prefix, prop), scopes);\n        if (typeof value !== 'undefined') {\n            return needsSubResolver(prop, value) ? createSubResolver(scopes, proxy, prop, value) : value;\n        }\n    }\n}\nfunction _resolve(key, scopes) {\n    for (const scope of scopes){\n        if (!scope) {\n            continue;\n        }\n        const value = scope[key];\n        if (typeof value !== 'undefined') {\n            return value;\n        }\n    }\n}\nfunction getKeysFromAllScopes(target) {\n    let keys = target._keys;\n    if (!keys) {\n        keys = target._keys = resolveKeysFromAllScopes(target._scopes);\n    }\n    return keys;\n}\nfunction resolveKeysFromAllScopes(scopes) {\n    const set = new Set();\n    for (const scope of scopes){\n        for (const key of Object.keys(scope).filter((k)=>!k.startsWith('_'))){\n            set.add(key);\n        }\n    }\n    return Array.from(set);\n}\nfunction _parseObjectDataRadialScale(meta, data, start, count) {\n    const { iScale  } = meta;\n    const { key ='r'  } = this._parsing;\n    const parsed = new Array(count);\n    let i, ilen, index, item;\n    for(i = 0, ilen = count; i < ilen; ++i){\n        index = i + start;\n        item = data[index];\n        parsed[i] = {\n            r: iScale.parse(resolveObjectKey(item, key), index)\n        };\n    }\n    return parsed;\n}\n\nconst EPSILON = Number.EPSILON || 1e-14;\nconst getPoint = (points, i)=>i < points.length && !points[i].skip && points[i];\nconst getValueAxis = (indexAxis)=>indexAxis === 'x' ? 'y' : 'x';\nfunction splineCurve(firstPoint, middlePoint, afterPoint, t) {\n    // Props to Rob Spencer at scaled innovation for his post on splining between points\n    // http://scaledinnovation.com/analytics/splines/aboutSplines.html\n    // This function must also respect \"skipped\" points\n    const previous = firstPoint.skip ? middlePoint : firstPoint;\n    const current = middlePoint;\n    const next = afterPoint.skip ? middlePoint : afterPoint;\n    const d01 = distanceBetweenPoints(current, previous);\n    const d12 = distanceBetweenPoints(next, current);\n    let s01 = d01 / (d01 + d12);\n    let s12 = d12 / (d01 + d12);\n    // If all points are the same, s01 & s02 will be inf\n    s01 = isNaN(s01) ? 0 : s01;\n    s12 = isNaN(s12) ? 0 : s12;\n    const fa = t * s01; // scaling factor for triangle Ta\n    const fb = t * s12;\n    return {\n        previous: {\n            x: current.x - fa * (next.x - previous.x),\n            y: current.y - fa * (next.y - previous.y)\n        },\n        next: {\n            x: current.x + fb * (next.x - previous.x),\n            y: current.y + fb * (next.y - previous.y)\n        }\n    };\n}\n/**\n * Adjust tangents to ensure monotonic properties\n */ function monotoneAdjust(points, deltaK, mK) {\n    const pointsLen = points.length;\n    let alphaK, betaK, tauK, squaredMagnitude, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(let i = 0; i < pointsLen - 1; ++i){\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent || !pointAfter) {\n            continue;\n        }\n        if (almostEquals(deltaK[i], 0, EPSILON)) {\n            mK[i] = mK[i + 1] = 0;\n            continue;\n        }\n        alphaK = mK[i] / deltaK[i];\n        betaK = mK[i + 1] / deltaK[i];\n        squaredMagnitude = Math.pow(alphaK, 2) + Math.pow(betaK, 2);\n        if (squaredMagnitude <= 9) {\n            continue;\n        }\n        tauK = 3 / Math.sqrt(squaredMagnitude);\n        mK[i] = alphaK * tauK * deltaK[i];\n        mK[i + 1] = betaK * tauK * deltaK[i];\n    }\n}\nfunction monotoneCompute(points, mK, indexAxis = 'x') {\n    const valueAxis = getValueAxis(indexAxis);\n    const pointsLen = points.length;\n    let delta, pointBefore, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(let i = 0; i < pointsLen; ++i){\n        pointBefore = pointCurrent;\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent) {\n            continue;\n        }\n        const iPixel = pointCurrent[indexAxis];\n        const vPixel = pointCurrent[valueAxis];\n        if (pointBefore) {\n            delta = (iPixel - pointBefore[indexAxis]) / 3;\n            pointCurrent[`cp1${indexAxis}`] = iPixel - delta;\n            pointCurrent[`cp1${valueAxis}`] = vPixel - delta * mK[i];\n        }\n        if (pointAfter) {\n            delta = (pointAfter[indexAxis] - iPixel) / 3;\n            pointCurrent[`cp2${indexAxis}`] = iPixel + delta;\n            pointCurrent[`cp2${valueAxis}`] = vPixel + delta * mK[i];\n        }\n    }\n}\n/**\n * This function calculates Bézier control points in a similar way than |splineCurve|,\n * but preserves monotonicity of the provided data and ensures no local extremums are added\n * between the dataset discrete points due to the interpolation.\n * See : https://en.wikipedia.org/wiki/Monotone_cubic_interpolation\n */ function splineCurveMonotone(points, indexAxis = 'x') {\n    const valueAxis = getValueAxis(indexAxis);\n    const pointsLen = points.length;\n    const deltaK = Array(pointsLen).fill(0);\n    const mK = Array(pointsLen);\n    // Calculate slopes (deltaK) and initialize tangents (mK)\n    let i, pointBefore, pointCurrent;\n    let pointAfter = getPoint(points, 0);\n    for(i = 0; i < pointsLen; ++i){\n        pointBefore = pointCurrent;\n        pointCurrent = pointAfter;\n        pointAfter = getPoint(points, i + 1);\n        if (!pointCurrent) {\n            continue;\n        }\n        if (pointAfter) {\n            const slopeDelta = pointAfter[indexAxis] - pointCurrent[indexAxis];\n            // In the case of two points that appear at the same x pixel, slopeDeltaX is 0\n            deltaK[i] = slopeDelta !== 0 ? (pointAfter[valueAxis] - pointCurrent[valueAxis]) / slopeDelta : 0;\n        }\n        mK[i] = !pointBefore ? deltaK[i] : !pointAfter ? deltaK[i - 1] : sign(deltaK[i - 1]) !== sign(deltaK[i]) ? 0 : (deltaK[i - 1] + deltaK[i]) / 2;\n    }\n    monotoneAdjust(points, deltaK, mK);\n    monotoneCompute(points, mK, indexAxis);\n}\nfunction capControlPoint(pt, min, max) {\n    return Math.max(Math.min(pt, max), min);\n}\nfunction capBezierPoints(points, area) {\n    let i, ilen, point, inArea, inAreaPrev;\n    let inAreaNext = _isPointInArea(points[0], area);\n    for(i = 0, ilen = points.length; i < ilen; ++i){\n        inAreaPrev = inArea;\n        inArea = inAreaNext;\n        inAreaNext = i < ilen - 1 && _isPointInArea(points[i + 1], area);\n        if (!inArea) {\n            continue;\n        }\n        point = points[i];\n        if (inAreaPrev) {\n            point.cp1x = capControlPoint(point.cp1x, area.left, area.right);\n            point.cp1y = capControlPoint(point.cp1y, area.top, area.bottom);\n        }\n        if (inAreaNext) {\n            point.cp2x = capControlPoint(point.cp2x, area.left, area.right);\n            point.cp2y = capControlPoint(point.cp2y, area.top, area.bottom);\n        }\n    }\n}\n/**\n * @private\n */ function _updateBezierControlPoints(points, options, area, loop, indexAxis) {\n    let i, ilen, point, controlPoints;\n    // Only consider points that are drawn in case the spanGaps option is used\n    if (options.spanGaps) {\n        points = points.filter((pt)=>!pt.skip);\n    }\n    if (options.cubicInterpolationMode === 'monotone') {\n        splineCurveMonotone(points, indexAxis);\n    } else {\n        let prev = loop ? points[points.length - 1] : points[0];\n        for(i = 0, ilen = points.length; i < ilen; ++i){\n            point = points[i];\n            controlPoints = splineCurve(prev, point, points[Math.min(i + 1, ilen - (loop ? 0 : 1)) % ilen], options.tension);\n            point.cp1x = controlPoints.previous.x;\n            point.cp1y = controlPoints.previous.y;\n            point.cp2x = controlPoints.next.x;\n            point.cp2y = controlPoints.next.y;\n            prev = point;\n        }\n    }\n    if (options.capBezierPoints) {\n        capBezierPoints(points, area);\n    }\n}\n\n/**\n * @private\n */ function _isDomSupported() {\n    return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n/**\n * @private\n */ function _getParentNode(domNode) {\n    let parent = domNode.parentNode;\n    if (parent && parent.toString() === '[object ShadowRoot]') {\n        parent = parent.host;\n    }\n    return parent;\n}\n/**\n * convert max-width/max-height values that may be percentages into a number\n * @private\n */ function parseMaxStyle(styleValue, node, parentProperty) {\n    let valueInPixels;\n    if (typeof styleValue === 'string') {\n        valueInPixels = parseInt(styleValue, 10);\n        if (styleValue.indexOf('%') !== -1) {\n            // percentage * size in dimension\n            valueInPixels = valueInPixels / 100 * node.parentNode[parentProperty];\n        }\n    } else {\n        valueInPixels = styleValue;\n    }\n    return valueInPixels;\n}\nconst getComputedStyle = (element)=>element.ownerDocument.defaultView.getComputedStyle(element, null);\nfunction getStyle(el, property) {\n    return getComputedStyle(el).getPropertyValue(property);\n}\nconst positions = [\n    'top',\n    'right',\n    'bottom',\n    'left'\n];\nfunction getPositionedStyle(styles, style, suffix) {\n    const result = {};\n    suffix = suffix ? '-' + suffix : '';\n    for(let i = 0; i < 4; i++){\n        const pos = positions[i];\n        result[pos] = parseFloat(styles[style + '-' + pos + suffix]) || 0;\n    }\n    result.width = result.left + result.right;\n    result.height = result.top + result.bottom;\n    return result;\n}\nconst useOffsetPos = (x, y, target)=>(x > 0 || y > 0) && (!target || !target.shadowRoot);\n/**\n * @param e\n * @param canvas\n * @returns Canvas position\n */ function getCanvasPosition(e, canvas) {\n    const touches = e.touches;\n    const source = touches && touches.length ? touches[0] : e;\n    const { offsetX , offsetY  } = source;\n    let box = false;\n    let x, y;\n    if (useOffsetPos(offsetX, offsetY, e.target)) {\n        x = offsetX;\n        y = offsetY;\n    } else {\n        const rect = canvas.getBoundingClientRect();\n        x = source.clientX - rect.left;\n        y = source.clientY - rect.top;\n        box = true;\n    }\n    return {\n        x,\n        y,\n        box\n    };\n}\n/**\n * Gets an event's x, y coordinates, relative to the chart area\n * @param event\n * @param chart\n * @returns x and y coordinates of the event\n */ function getRelativePosition(event, chart) {\n    if ('native' in event) {\n        return event;\n    }\n    const { canvas , currentDevicePixelRatio  } = chart;\n    const style = getComputedStyle(canvas);\n    const borderBox = style.boxSizing === 'border-box';\n    const paddings = getPositionedStyle(style, 'padding');\n    const borders = getPositionedStyle(style, 'border', 'width');\n    const { x , y , box  } = getCanvasPosition(event, canvas);\n    const xOffset = paddings.left + (box && borders.left);\n    const yOffset = paddings.top + (box && borders.top);\n    let { width , height  } = chart;\n    if (borderBox) {\n        width -= paddings.width + borders.width;\n        height -= paddings.height + borders.height;\n    }\n    return {\n        x: Math.round((x - xOffset) / width * canvas.width / currentDevicePixelRatio),\n        y: Math.round((y - yOffset) / height * canvas.height / currentDevicePixelRatio)\n    };\n}\nfunction getContainerSize(canvas, width, height) {\n    let maxWidth, maxHeight;\n    if (width === undefined || height === undefined) {\n        const container = canvas && _getParentNode(canvas);\n        if (!container) {\n            width = canvas.clientWidth;\n            height = canvas.clientHeight;\n        } else {\n            const rect = container.getBoundingClientRect(); // this is the border box of the container\n            const containerStyle = getComputedStyle(container);\n            const containerBorder = getPositionedStyle(containerStyle, 'border', 'width');\n            const containerPadding = getPositionedStyle(containerStyle, 'padding');\n            width = rect.width - containerPadding.width - containerBorder.width;\n            height = rect.height - containerPadding.height - containerBorder.height;\n            maxWidth = parseMaxStyle(containerStyle.maxWidth, container, 'clientWidth');\n            maxHeight = parseMaxStyle(containerStyle.maxHeight, container, 'clientHeight');\n        }\n    }\n    return {\n        width,\n        height,\n        maxWidth: maxWidth || INFINITY,\n        maxHeight: maxHeight || INFINITY\n    };\n}\nconst round1 = (v)=>Math.round(v * 10) / 10;\n// eslint-disable-next-line complexity\nfunction getMaximumSize(canvas, bbWidth, bbHeight, aspectRatio) {\n    const style = getComputedStyle(canvas);\n    const margins = getPositionedStyle(style, 'margin');\n    const maxWidth = parseMaxStyle(style.maxWidth, canvas, 'clientWidth') || INFINITY;\n    const maxHeight = parseMaxStyle(style.maxHeight, canvas, 'clientHeight') || INFINITY;\n    const containerSize = getContainerSize(canvas, bbWidth, bbHeight);\n    let { width , height  } = containerSize;\n    if (style.boxSizing === 'content-box') {\n        const borders = getPositionedStyle(style, 'border', 'width');\n        const paddings = getPositionedStyle(style, 'padding');\n        width -= paddings.width + borders.width;\n        height -= paddings.height + borders.height;\n    }\n    width = Math.max(0, width - margins.width);\n    height = Math.max(0, aspectRatio ? width / aspectRatio : height - margins.height);\n    width = round1(Math.min(width, maxWidth, containerSize.maxWidth));\n    height = round1(Math.min(height, maxHeight, containerSize.maxHeight));\n    if (width && !height) {\n        // https://github.com/chartjs/Chart.js/issues/4659\n        // If the canvas has width, but no height, default to aspectRatio of 2 (canvas default)\n        height = round1(width / 2);\n    }\n    const maintainHeight = bbWidth !== undefined || bbHeight !== undefined;\n    if (maintainHeight && aspectRatio && containerSize.height && height > containerSize.height) {\n        height = containerSize.height;\n        width = round1(Math.floor(height * aspectRatio));\n    }\n    return {\n        width,\n        height\n    };\n}\n/**\n * @param chart\n * @param forceRatio\n * @param forceStyle\n * @returns True if the canvas context size or transformation has changed.\n */ function retinaScale(chart, forceRatio, forceStyle) {\n    const pixelRatio = forceRatio || 1;\n    const deviceHeight = round1(chart.height * pixelRatio);\n    const deviceWidth = round1(chart.width * pixelRatio);\n    chart.height = round1(chart.height);\n    chart.width = round1(chart.width);\n    const canvas = chart.canvas;\n    // If no style has been set on the canvas, the render size is used as display size,\n    // making the chart visually bigger, so let's enforce it to the \"correct\" values.\n    // See https://github.com/chartjs/Chart.js/issues/3575\n    if (canvas.style && (forceStyle || !canvas.style.height && !canvas.style.width)) {\n        canvas.style.height = `${chart.height}px`;\n        canvas.style.width = `${chart.width}px`;\n    }\n    if (chart.currentDevicePixelRatio !== pixelRatio || canvas.height !== deviceHeight || canvas.width !== deviceWidth) {\n        chart.currentDevicePixelRatio = pixelRatio;\n        canvas.height = deviceHeight;\n        canvas.width = deviceWidth;\n        chart.ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n        return true;\n    }\n    return false;\n}\n/**\n * Detects support for options object argument in addEventListener.\n * https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener#Safely_detecting_option_support\n * @private\n */ const supportsEventListenerOptions = function() {\n    let passiveSupported = false;\n    try {\n        const options = {\n            get passive () {\n                passiveSupported = true;\n                return false;\n            }\n        };\n        if (_isDomSupported()) {\n            window.addEventListener('test', null, options);\n            window.removeEventListener('test', null, options);\n        }\n    } catch (e) {\n    // continue regardless of error\n    }\n    return passiveSupported;\n}();\n/**\n * The \"used\" size is the final value of a dimension property after all calculations have\n * been performed. This method uses the computed style of `element` but returns undefined\n * if the computed style is not expressed in pixels. That can happen in some cases where\n * `element` has a size relative to its parent and this last one is not yet displayed,\n * for example because of `display: none` on a parent node.\n * @see https://developer.mozilla.org/en-US/docs/Web/CSS/used_value\n * @returns Size in pixels or undefined if unknown.\n */ function readUsedSize(element, property) {\n    const value = getStyle(element, property);\n    const matches = value && value.match(/^(\\d+)(\\.\\d+)?px$/);\n    return matches ? +matches[1] : undefined;\n}\n\n/**\n * @private\n */ function _pointInLine(p1, p2, t, mode) {\n    return {\n        x: p1.x + t * (p2.x - p1.x),\n        y: p1.y + t * (p2.y - p1.y)\n    };\n}\n/**\n * @private\n */ function _steppedInterpolation(p1, p2, t, mode) {\n    return {\n        x: p1.x + t * (p2.x - p1.x),\n        y: mode === 'middle' ? t < 0.5 ? p1.y : p2.y : mode === 'after' ? t < 1 ? p1.y : p2.y : t > 0 ? p2.y : p1.y\n    };\n}\n/**\n * @private\n */ function _bezierInterpolation(p1, p2, t, mode) {\n    const cp1 = {\n        x: p1.cp2x,\n        y: p1.cp2y\n    };\n    const cp2 = {\n        x: p2.cp1x,\n        y: p2.cp1y\n    };\n    const a = _pointInLine(p1, cp1, t);\n    const b = _pointInLine(cp1, cp2, t);\n    const c = _pointInLine(cp2, p2, t);\n    const d = _pointInLine(a, b, t);\n    const e = _pointInLine(b, c, t);\n    return _pointInLine(d, e, t);\n}\n\nconst getRightToLeftAdapter = function(rectX, width) {\n    return {\n        x (x) {\n            return rectX + rectX + width - x;\n        },\n        setWidth (w) {\n            width = w;\n        },\n        textAlign (align) {\n            if (align === 'center') {\n                return align;\n            }\n            return align === 'right' ? 'left' : 'right';\n        },\n        xPlus (x, value) {\n            return x - value;\n        },\n        leftForLtr (x, itemWidth) {\n            return x - itemWidth;\n        }\n    };\n};\nconst getLeftToRightAdapter = function() {\n    return {\n        x (x) {\n            return x;\n        },\n        setWidth (w) {},\n        textAlign (align) {\n            return align;\n        },\n        xPlus (x, value) {\n            return x + value;\n        },\n        leftForLtr (x, _itemWidth) {\n            return x;\n        }\n    };\n};\nfunction getRtlAdapter(rtl, rectX, width) {\n    return rtl ? getRightToLeftAdapter(rectX, width) : getLeftToRightAdapter();\n}\nfunction overrideTextDirection(ctx, direction) {\n    let style, original;\n    if (direction === 'ltr' || direction === 'rtl') {\n        style = ctx.canvas.style;\n        original = [\n            style.getPropertyValue('direction'),\n            style.getPropertyPriority('direction')\n        ];\n        style.setProperty('direction', direction, 'important');\n        ctx.prevTextDirection = original;\n    }\n}\nfunction restoreTextDirection(ctx, original) {\n    if (original !== undefined) {\n        delete ctx.prevTextDirection;\n        ctx.canvas.style.setProperty('direction', original[0], original[1]);\n    }\n}\n\nfunction propertyFn(property) {\n    if (property === 'angle') {\n        return {\n            between: _angleBetween,\n            compare: _angleDiff,\n            normalize: _normalizeAngle\n        };\n    }\n    return {\n        between: _isBetween,\n        compare: (a, b)=>a - b,\n        normalize: (x)=>x\n    };\n}\nfunction normalizeSegment({ start , end , count , loop , style  }) {\n    return {\n        start: start % count,\n        end: end % count,\n        loop: loop && (end - start + 1) % count === 0,\n        style\n    };\n}\nfunction getSegment(segment, points, bounds) {\n    const { property , start: startBound , end: endBound  } = bounds;\n    const { between , normalize  } = propertyFn(property);\n    const count = points.length;\n    let { start , end , loop  } = segment;\n    let i, ilen;\n    if (loop) {\n        start += count;\n        end += count;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            if (!between(normalize(points[start % count][property]), startBound, endBound)) {\n                break;\n            }\n            start--;\n            end--;\n        }\n        start %= count;\n        end %= count;\n    }\n    if (end < start) {\n        end += count;\n    }\n    return {\n        start,\n        end,\n        loop,\n        style: segment.style\n    };\n}\n function _boundSegment(segment, points, bounds) {\n    if (!bounds) {\n        return [\n            segment\n        ];\n    }\n    const { property , start: startBound , end: endBound  } = bounds;\n    const count = points.length;\n    const { compare , between , normalize  } = propertyFn(property);\n    const { start , end , loop , style  } = getSegment(segment, points, bounds);\n    const result = [];\n    let inside = false;\n    let subStart = null;\n    let value, point, prevValue;\n    const startIsBefore = ()=>between(startBound, prevValue, value) && compare(startBound, prevValue) !== 0;\n    const endIsBefore = ()=>compare(endBound, value) === 0 || between(endBound, prevValue, value);\n    const shouldStart = ()=>inside || startIsBefore();\n    const shouldStop = ()=>!inside || endIsBefore();\n    for(let i = start, prev = start; i <= end; ++i){\n        point = points[i % count];\n        if (point.skip) {\n            continue;\n        }\n        value = normalize(point[property]);\n        if (value === prevValue) {\n            continue;\n        }\n        inside = between(value, startBound, endBound);\n        if (subStart === null && shouldStart()) {\n            subStart = compare(value, startBound) === 0 ? i : prev;\n        }\n        if (subStart !== null && shouldStop()) {\n            result.push(normalizeSegment({\n                start: subStart,\n                end: i,\n                loop,\n                count,\n                style\n            }));\n            subStart = null;\n        }\n        prev = i;\n        prevValue = value;\n    }\n    if (subStart !== null) {\n        result.push(normalizeSegment({\n            start: subStart,\n            end,\n            loop,\n            count,\n            style\n        }));\n    }\n    return result;\n}\n function _boundSegments(line, bounds) {\n    const result = [];\n    const segments = line.segments;\n    for(let i = 0; i < segments.length; i++){\n        const sub = _boundSegment(segments[i], line.points, bounds);\n        if (sub.length) {\n            result.push(...sub);\n        }\n    }\n    return result;\n}\n function findStartAndEnd(points, count, loop, spanGaps) {\n    let start = 0;\n    let end = count - 1;\n    if (loop && !spanGaps) {\n        while(start < count && !points[start].skip){\n            start++;\n        }\n    }\n    while(start < count && points[start].skip){\n        start++;\n    }\n    start %= count;\n    if (loop) {\n        end += start;\n    }\n    while(end > start && points[end % count].skip){\n        end--;\n    }\n    end %= count;\n    return {\n        start,\n        end\n    };\n}\n function solidSegments(points, start, max, loop) {\n    const count = points.length;\n    const result = [];\n    let last = start;\n    let prev = points[start];\n    let end;\n    for(end = start + 1; end <= max; ++end){\n        const cur = points[end % count];\n        if (cur.skip || cur.stop) {\n            if (!prev.skip) {\n                loop = false;\n                result.push({\n                    start: start % count,\n                    end: (end - 1) % count,\n                    loop\n                });\n                start = last = cur.stop ? end : null;\n            }\n        } else {\n            last = end;\n            if (prev.skip) {\n                start = end;\n            }\n        }\n        prev = cur;\n    }\n    if (last !== null) {\n        result.push({\n            start: start % count,\n            end: last % count,\n            loop\n        });\n    }\n    return result;\n}\n function _computeSegments(line, segmentOptions) {\n    const points = line.points;\n    const spanGaps = line.options.spanGaps;\n    const count = points.length;\n    if (!count) {\n        return [];\n    }\n    const loop = !!line._loop;\n    const { start , end  } = findStartAndEnd(points, count, loop, spanGaps);\n    if (spanGaps === true) {\n        return splitByStyles(line, [\n            {\n                start,\n                end,\n                loop\n            }\n        ], points, segmentOptions);\n    }\n    const max = end < start ? end + count : end;\n    const completeLoop = !!line._fullLoop && start === 0 && end === count - 1;\n    return splitByStyles(line, solidSegments(points, start, max, completeLoop), points, segmentOptions);\n}\n function splitByStyles(line, segments, points, segmentOptions) {\n    if (!segmentOptions || !segmentOptions.setContext || !points) {\n        return segments;\n    }\n    return doSplitByStyles(line, segments, points, segmentOptions);\n}\n function doSplitByStyles(line, segments, points, segmentOptions) {\n    const chartContext = line._chart.getContext();\n    const baseStyle = readStyle(line.options);\n    const { _datasetIndex: datasetIndex , options: { spanGaps  }  } = line;\n    const count = points.length;\n    const result = [];\n    let prevStyle = baseStyle;\n    let start = segments[0].start;\n    let i = start;\n    function addStyle(s, e, l, st) {\n        const dir = spanGaps ? -1 : 1;\n        if (s === e) {\n            return;\n        }\n        s += count;\n        while(points[s % count].skip){\n            s -= dir;\n        }\n        while(points[e % count].skip){\n            e += dir;\n        }\n        if (s % count !== e % count) {\n            result.push({\n                start: s % count,\n                end: e % count,\n                loop: l,\n                style: st\n            });\n            prevStyle = st;\n            start = e % count;\n        }\n    }\n    for (const segment of segments){\n        start = spanGaps ? start : segment.start;\n        let prev = points[start % count];\n        let style;\n        for(i = start + 1; i <= segment.end; i++){\n            const pt = points[i % count];\n            style = readStyle(segmentOptions.setContext(createContext(chartContext, {\n                type: 'segment',\n                p0: prev,\n                p1: pt,\n                p0DataIndex: (i - 1) % count,\n                p1DataIndex: i % count,\n                datasetIndex\n            })));\n            if (styleChanged(style, prevStyle)) {\n                addStyle(start, i - 1, segment.loop, prevStyle);\n            }\n            prev = pt;\n            prevStyle = style;\n        }\n        if (start < i - 1) {\n            addStyle(start, i - 1, segment.loop, prevStyle);\n        }\n    }\n    return result;\n}\nfunction readStyle(options) {\n    return {\n        backgroundColor: options.backgroundColor,\n        borderCapStyle: options.borderCapStyle,\n        borderDash: options.borderDash,\n        borderDashOffset: options.borderDashOffset,\n        borderJoinStyle: options.borderJoinStyle,\n        borderWidth: options.borderWidth,\n        borderColor: options.borderColor\n    };\n}\nfunction styleChanged(style, prevStyle) {\n    if (!prevStyle) {\n        return false;\n    }\n    const cache = [];\n    const replacer = function(key, value) {\n        if (!isPatternOrGradient(value)) {\n            return value;\n        }\n        if (!cache.includes(value)) {\n            cache.push(value);\n        }\n        return cache.indexOf(value);\n    };\n    return JSON.stringify(style, replacer) !== JSON.stringify(prevStyle, replacer);\n}\n\nfunction getSizeForArea(scale, chartArea, field) {\n    return scale.options.clip ? scale[field] : chartArea[field];\n}\nfunction getDatasetArea(meta, chartArea) {\n    const { xScale , yScale  } = meta;\n    if (xScale && yScale) {\n        return {\n            left: getSizeForArea(xScale, chartArea, 'left'),\n            right: getSizeForArea(xScale, chartArea, 'right'),\n            top: getSizeForArea(yScale, chartArea, 'top'),\n            bottom: getSizeForArea(yScale, chartArea, 'bottom')\n        };\n    }\n    return chartArea;\n}\nfunction getDatasetClipArea(chart, meta) {\n    const clip = meta._clip;\n    if (clip.disabled) {\n        return false;\n    }\n    const area = getDatasetArea(meta, chart.chartArea);\n    return {\n        left: clip.left === false ? 0 : area.left - (clip.left === true ? 0 : clip.left),\n        right: clip.right === false ? chart.width : area.right + (clip.right === true ? 0 : clip.right),\n        top: clip.top === false ? 0 : area.top - (clip.top === true ? 0 : clip.top),\n        bottom: clip.bottom === false ? chart.height : area.bottom + (clip.bottom === true ? 0 : clip.bottom)\n    };\n}\n\nexport { unclipArea as $, _rlookupByKey as A, _lookupByKey as B, _isPointInArea as C, getAngleFromPoint as D, toPadding as E, each as F, getMaximumSize as G, HALF_PI as H, _getParentNode as I, readUsedSize as J, supportsEventListenerOptions as K, throttled as L, _isDomSupported as M, _factorize as N, finiteOrDefault as O, PI as P, callback as Q, _addGrace as R, _limitValue as S, TAU as T, toDegrees as U, _measureText as V, _int16Range as W, _alignPixel as X, clipArea as Y, renderText as Z, _arrayUnique as _, resolve as a, getStyle as a$, toFont as a0, _toLeftRightCenter as a1, _alignStartEnd as a2, overrides as a3, merge as a4, _capitalize as a5, descriptors as a6, isFunction as a7, _attachContext as a8, _createResolver as a9, getRtlAdapter as aA, overrideTextDirection as aB, _textX as aC, restoreTextDirection as aD, drawPointLegend as aE, distanceBetweenPoints as aF, noop as aG, _setMinAndMaxByKey as aH, niceNum as aI, almostWhole as aJ, almostEquals as aK, _decimalPlaces as aL, Ticks as aM, log10 as aN, _longestText as aO, _filterBetween as aP, _lookup as aQ, isPatternOrGradient as aR, getHoverColor as aS, clone as aT, _merger as aU, _mergerIf as aV, _deprecated as aW, _splitKey as aX, toFontString as aY, splineCurve as aZ, splineCurveMonotone as a_, _descriptors as aa, mergeIf as ab, uid as ac, debounce as ad, retinaScale as ae, clearCanvas as af, setsEqual as ag, getDatasetClipArea as ah, _elementsEqual as ai, _isClickEvent as aj, _isBetween as ak, _normalizeAngle as al, _readValueToProps as am, _updateBezierControlPoints as an, _computeSegments as ao, _boundSegments as ap, _steppedInterpolation as aq, _bezierInterpolation as ar, _pointInLine as as, _steppedLineTo as at, _bezierCurveTo as au, drawPoint as av, addRoundedRectPath as aw, toTRBL as ax, toTRBLCorners as ay, _boundSegment as az, isArray as b, fontString as b0, toLineHeight as b1, PITAU as b2, INFINITY as b3, RAD_PER_DEG as b4, QUARTER_PI as b5, TWO_THIRDS_PI as b6, _angleDiff as b7, color as c, defaults as d, effects as e, resolveObjectKey as f, isNumberFinite as g, defined as h, isObject as i, createContext as j, isNullOrUndef as k, listenArrayEvents as l, toPercentage as m, toDimension as n, formatNumber as o, _angleBetween as p, _getStartAndCountOfVisiblePoints as q, requestAnimFrame as r, sign as s, toRadians as t, unlistenArrayEvents as u, valueOrDefault as v, _scaleRangesChanged as w, isNumber as x, _parseObjectDataRadialScale as y, getRelativePosition as z };\n//# sourceMappingURL=helpers.dataset.js.map\n","/*!\n * Chart.js v4.5.1\n * https://www.chartjs.org\n * (c) 2025 Chart.js Contributors\n * Released under the MIT License\n */\nimport { r as requestAnimFrame, a as resolve, e as effects, c as color, i as isObject, d as defaults, b as isArray, v as valueOrDefault, u as unlistenArrayEvents, l as listenArrayEvents, f as resolveObjectKey, g as isNumberFinite, h as defined, s as sign, j as createContext, k as isNullOrUndef, _ as _arrayUnique, t as toRadians, m as toPercentage, n as toDimension, T as TAU, o as formatNumber, p as _angleBetween, H as HALF_PI, P as PI, q as _getStartAndCountOfVisiblePoints, w as _scaleRangesChanged, x as isNumber, y as _parseObjectDataRadialScale, z as getRelativePosition, A as _rlookupByKey, B as _lookupByKey, C as _isPointInArea, D as getAngleFromPoint, E as toPadding, F as each, G as getMaximumSize, I as _getParentNode, J as readUsedSize, K as supportsEventListenerOptions, L as throttled, M as _isDomSupported, N as _factorize, O as finiteOrDefault, Q as callback, R as _addGrace, S as _limitValue, U as toDegrees, V as _measureText, W as _int16Range, X as _alignPixel, Y as clipArea, Z as renderText, $ as unclipArea, a0 as toFont, a1 as _toLeftRightCenter, a2 as _alignStartEnd, a3 as overrides, a4 as merge, a5 as _capitalize, a6 as descriptors, a7 as isFunction, a8 as _attachContext, a9 as _createResolver, aa as _descriptors, ab as mergeIf, ac as uid, ad as debounce, ae as retinaScale, af as clearCanvas, ag as setsEqual, ah as getDatasetClipArea, ai as _elementsEqual, aj as _isClickEvent, ak as _isBetween, al as _normalizeAngle, am as _readValueToProps, an as _updateBezierControlPoints, ao as _computeSegments, ap as _boundSegments, aq as _steppedInterpolation, ar as _bezierInterpolation, as as _pointInLine, at as _steppedLineTo, au as _bezierCurveTo, av as drawPoint, aw as addRoundedRectPath, ax as toTRBL, ay as toTRBLCorners, az as _boundSegment, aA as getRtlAdapter, aB as overrideTextDirection, aC as _textX, aD as restoreTextDirection, aE as drawPointLegend, aF as distanceBetweenPoints, aG as noop, aH as _setMinAndMaxByKey, aI as niceNum, aJ as almostWhole, aK as almostEquals, aL as _decimalPlaces, aM as Ticks, aN as log10, aO as _longestText, aP as _filterBetween, aQ as _lookup } from './chunks/helpers.dataset.js';\nimport '@kurkle/color';\n\nclass Animator {\n    constructor(){\n        this._request = null;\n        this._charts = new Map();\n        this._running = false;\n        this._lastDate = undefined;\n    }\n _notify(chart, anims, date, type) {\n        const callbacks = anims.listeners[type];\n        const numSteps = anims.duration;\n        callbacks.forEach((fn)=>fn({\n                chart,\n                initial: anims.initial,\n                numSteps,\n                currentStep: Math.min(date - anims.start, numSteps)\n            }));\n    }\n _refresh() {\n        if (this._request) {\n            return;\n        }\n        this._running = true;\n        this._request = requestAnimFrame.call(window, ()=>{\n            this._update();\n            this._request = null;\n            if (this._running) {\n                this._refresh();\n            }\n        });\n    }\n _update(date = Date.now()) {\n        let remaining = 0;\n        this._charts.forEach((anims, chart)=>{\n            if (!anims.running || !anims.items.length) {\n                return;\n            }\n            const items = anims.items;\n            let i = items.length - 1;\n            let draw = false;\n            let item;\n            for(; i >= 0; --i){\n                item = items[i];\n                if (item._active) {\n                    if (item._total > anims.duration) {\n                        anims.duration = item._total;\n                    }\n                    item.tick(date);\n                    draw = true;\n                } else {\n                    items[i] = items[items.length - 1];\n                    items.pop();\n                }\n            }\n            if (draw) {\n                chart.draw();\n                this._notify(chart, anims, date, 'progress');\n            }\n            if (!items.length) {\n                anims.running = false;\n                this._notify(chart, anims, date, 'complete');\n                anims.initial = false;\n            }\n            remaining += items.length;\n        });\n        this._lastDate = date;\n        if (remaining === 0) {\n            this._running = false;\n        }\n    }\n _getAnims(chart) {\n        const charts = this._charts;\n        let anims = charts.get(chart);\n        if (!anims) {\n            anims = {\n                running: false,\n                initial: true,\n                items: [],\n                listeners: {\n                    complete: [],\n                    progress: []\n                }\n            };\n            charts.set(chart, anims);\n        }\n        return anims;\n    }\n listen(chart, event, cb) {\n        this._getAnims(chart).listeners[event].push(cb);\n    }\n add(chart, items) {\n        if (!items || !items.length) {\n            return;\n        }\n        this._getAnims(chart).items.push(...items);\n    }\n has(chart) {\n        return this._getAnims(chart).items.length > 0;\n    }\n start(chart) {\n        const anims = this._charts.get(chart);\n        if (!anims) {\n            return;\n        }\n        anims.running = true;\n        anims.start = Date.now();\n        anims.duration = anims.items.reduce((acc, cur)=>Math.max(acc, cur._duration), 0);\n        this._refresh();\n    }\n    running(chart) {\n        if (!this._running) {\n            return false;\n        }\n        const anims = this._charts.get(chart);\n        if (!anims || !anims.running || !anims.items.length) {\n            return false;\n        }\n        return true;\n    }\n stop(chart) {\n        const anims = this._charts.get(chart);\n        if (!anims || !anims.items.length) {\n            return;\n        }\n        const items = anims.items;\n        let i = items.length - 1;\n        for(; i >= 0; --i){\n            items[i].cancel();\n        }\n        anims.items = [];\n        this._notify(chart, anims, Date.now(), 'complete');\n    }\n remove(chart) {\n        return this._charts.delete(chart);\n    }\n}\nvar animator = /* #__PURE__ */ new Animator();\n\nconst transparent = 'transparent';\nconst interpolators = {\n    boolean (from, to, factor) {\n        return factor > 0.5 ? to : from;\n    },\n color (from, to, factor) {\n        const c0 = color(from || transparent);\n        const c1 = c0.valid && color(to || transparent);\n        return c1 && c1.valid ? c1.mix(c0, factor).hexString() : to;\n    },\n    number (from, to, factor) {\n        return from + (to - from) * factor;\n    }\n};\nclass Animation {\n    constructor(cfg, target, prop, to){\n        const currentValue = target[prop];\n        to = resolve([\n            cfg.to,\n            to,\n            currentValue,\n            cfg.from\n        ]);\n        const from = resolve([\n            cfg.from,\n            currentValue,\n            to\n        ]);\n        this._active = true;\n        this._fn = cfg.fn || interpolators[cfg.type || typeof from];\n        this._easing = effects[cfg.easing] || effects.linear;\n        this._start = Math.floor(Date.now() + (cfg.delay || 0));\n        this._duration = this._total = Math.floor(cfg.duration);\n        this._loop = !!cfg.loop;\n        this._target = target;\n        this._prop = prop;\n        this._from = from;\n        this._to = to;\n        this._promises = undefined;\n    }\n    active() {\n        return this._active;\n    }\n    update(cfg, to, date) {\n        if (this._active) {\n            this._notify(false);\n            const currentValue = this._target[this._prop];\n            const elapsed = date - this._start;\n            const remain = this._duration - elapsed;\n            this._start = date;\n            this._duration = Math.floor(Math.max(remain, cfg.duration));\n            this._total += elapsed;\n            this._loop = !!cfg.loop;\n            this._to = resolve([\n                cfg.to,\n                to,\n                currentValue,\n                cfg.from\n            ]);\n            this._from = resolve([\n                cfg.from,\n                currentValue,\n                to\n            ]);\n        }\n    }\n    cancel() {\n        if (this._active) {\n            this.tick(Date.now());\n            this._active = false;\n            this._notify(false);\n        }\n    }\n    tick(date) {\n        const elapsed = date - this._start;\n        const duration = this._duration;\n        const prop = this._prop;\n        const from = this._from;\n        const loop = this._loop;\n        const to = this._to;\n        let factor;\n        this._active = from !== to && (loop || elapsed < duration);\n        if (!this._active) {\n            this._target[prop] = to;\n            this._notify(true);\n            return;\n        }\n        if (elapsed < 0) {\n            this._target[prop] = from;\n            return;\n        }\n        factor = elapsed / duration % 2;\n        factor = loop && factor > 1 ? 2 - factor : factor;\n        factor = this._easing(Math.min(1, Math.max(0, factor)));\n        this._target[prop] = this._fn(from, to, factor);\n    }\n    wait() {\n        const promises = this._promises || (this._promises = []);\n        return new Promise((res, rej)=>{\n            promises.push({\n                res,\n                rej\n            });\n        });\n    }\n    _notify(resolved) {\n        const method = resolved ? 'res' : 'rej';\n        const promises = this._promises || [];\n        for(let i = 0; i < promises.length; i++){\n            promises[i][method]();\n        }\n    }\n}\n\nclass Animations {\n    constructor(chart, config){\n        this._chart = chart;\n        this._properties = new Map();\n        this.configure(config);\n    }\n    configure(config) {\n        if (!isObject(config)) {\n            return;\n        }\n        const animationOptions = Object.keys(defaults.animation);\n        const animatedProps = this._properties;\n        Object.getOwnPropertyNames(config).forEach((key)=>{\n            const cfg = config[key];\n            if (!isObject(cfg)) {\n                return;\n            }\n            const resolved = {};\n            for (const option of animationOptions){\n                resolved[option] = cfg[option];\n            }\n            (isArray(cfg.properties) && cfg.properties || [\n                key\n            ]).forEach((prop)=>{\n                if (prop === key || !animatedProps.has(prop)) {\n                    animatedProps.set(prop, resolved);\n                }\n            });\n        });\n    }\n _animateOptions(target, values) {\n        const newOptions = values.options;\n        const options = resolveTargetOptions(target, newOptions);\n        if (!options) {\n            return [];\n        }\n        const animations = this._createAnimations(options, newOptions);\n        if (newOptions.$shared) {\n            awaitAll(target.options.$animations, newOptions).then(()=>{\n                target.options = newOptions;\n            }, ()=>{\n            });\n        }\n        return animations;\n    }\n _createAnimations(target, values) {\n        const animatedProps = this._properties;\n        const animations = [];\n        const running = target.$animations || (target.$animations = {});\n        const props = Object.keys(values);\n        const date = Date.now();\n        let i;\n        for(i = props.length - 1; i >= 0; --i){\n            const prop = props[i];\n            if (prop.charAt(0) === '$') {\n                continue;\n            }\n            if (prop === 'options') {\n                animations.push(...this._animateOptions(target, values));\n                continue;\n            }\n            const value = values[prop];\n            let animation = running[prop];\n            const cfg = animatedProps.get(prop);\n            if (animation) {\n                if (cfg && animation.active()) {\n                    animation.update(cfg, value, date);\n                    continue;\n                } else {\n                    animation.cancel();\n                }\n            }\n            if (!cfg || !cfg.duration) {\n                target[prop] = value;\n                continue;\n            }\n            running[prop] = animation = new Animation(cfg, target, prop, value);\n            animations.push(animation);\n        }\n        return animations;\n    }\n update(target, values) {\n        if (this._properties.size === 0) {\n            Object.assign(target, values);\n            return;\n        }\n        const animations = this._createAnimations(target, values);\n        if (animations.length) {\n            animator.add(this._chart, animations);\n            return true;\n        }\n    }\n}\nfunction awaitAll(animations, properties) {\n    const running = [];\n    const keys = Object.keys(properties);\n    for(let i = 0; i < keys.length; i++){\n        const anim = animations[keys[i]];\n        if (anim && anim.active()) {\n            running.push(anim.wait());\n        }\n    }\n    return Promise.all(running);\n}\nfunction resolveTargetOptions(target, newOptions) {\n    if (!newOptions) {\n        return;\n    }\n    let options = target.options;\n    if (!options) {\n        target.options = newOptions;\n        return;\n    }\n    if (options.$shared) {\n        target.options = options = Object.assign({}, options, {\n            $shared: false,\n            $animations: {}\n        });\n    }\n    return options;\n}\n\nfunction scaleClip(scale, allowedOverflow) {\n    const opts = scale && scale.options || {};\n    const reverse = opts.reverse;\n    const min = opts.min === undefined ? allowedOverflow : 0;\n    const max = opts.max === undefined ? allowedOverflow : 0;\n    return {\n        start: reverse ? max : min,\n        end: reverse ? min : max\n    };\n}\nfunction defaultClip(xScale, yScale, allowedOverflow) {\n    if (allowedOverflow === false) {\n        return false;\n    }\n    const x = scaleClip(xScale, allowedOverflow);\n    const y = scaleClip(yScale, allowedOverflow);\n    return {\n        top: y.end,\n        right: x.end,\n        bottom: y.start,\n        left: x.start\n    };\n}\nfunction toClip(value) {\n    let t, r, b, l;\n    if (isObject(value)) {\n        t = value.top;\n        r = value.right;\n        b = value.bottom;\n        l = value.left;\n    } else {\n        t = r = b = l = value;\n    }\n    return {\n        top: t,\n        right: r,\n        bottom: b,\n        left: l,\n        disabled: value === false\n    };\n}\nfunction getSortedDatasetIndices(chart, filterVisible) {\n    const keys = [];\n    const metasets = chart._getSortedDatasetMetas(filterVisible);\n    let i, ilen;\n    for(i = 0, ilen = metasets.length; i < ilen; ++i){\n        keys.push(metasets[i].index);\n    }\n    return keys;\n}\nfunction applyStack(stack, value, dsIndex, options = {}) {\n    const keys = stack.keys;\n    const singleMode = options.mode === 'single';\n    let i, ilen, datasetIndex, otherValue;\n    if (value === null) {\n        return;\n    }\n    let found = false;\n    for(i = 0, ilen = keys.length; i < ilen; ++i){\n        datasetIndex = +keys[i];\n        if (datasetIndex === dsIndex) {\n            found = true;\n            if (options.all) {\n                continue;\n            }\n            break;\n        }\n        otherValue = stack.values[datasetIndex];\n        if (isNumberFinite(otherValue) && (singleMode || value === 0 || sign(value) === sign(otherValue))) {\n            value += otherValue;\n        }\n    }\n    if (!found && !options.all) {\n        return 0;\n    }\n    return value;\n}\nfunction convertObjectDataToArray(data, meta) {\n    const { iScale , vScale  } = meta;\n    const iAxisKey = iScale.axis === 'x' ? 'x' : 'y';\n    const vAxisKey = vScale.axis === 'x' ? 'x' : 'y';\n    const keys = Object.keys(data);\n    const adata = new Array(keys.length);\n    let i, ilen, key;\n    for(i = 0, ilen = keys.length; i < ilen; ++i){\n        key = keys[i];\n        adata[i] = {\n            [iAxisKey]: key,\n            [vAxisKey]: data[key]\n        };\n    }\n    return adata;\n}\nfunction isStacked(scale, meta) {\n    const stacked = scale && scale.options.stacked;\n    return stacked || stacked === undefined && meta.stack !== undefined;\n}\nfunction getStackKey(indexScale, valueScale, meta) {\n    return `${indexScale.id}.${valueScale.id}.${meta.stack || meta.type}`;\n}\nfunction getUserBounds(scale) {\n    const { min , max , minDefined , maxDefined  } = scale.getUserBounds();\n    return {\n        min: minDefined ? min : Number.NEGATIVE_INFINITY,\n        max: maxDefined ? max : Number.POSITIVE_INFINITY\n    };\n}\nfunction getOrCreateStack(stacks, stackKey, indexValue) {\n    const subStack = stacks[stackKey] || (stacks[stackKey] = {});\n    return subStack[indexValue] || (subStack[indexValue] = {});\n}\nfunction getLastIndexInStack(stack, vScale, positive, type) {\n    for (const meta of vScale.getMatchingVisibleMetas(type).reverse()){\n        const value = stack[meta.index];\n        if (positive && value > 0 || !positive && value < 0) {\n            return meta.index;\n        }\n    }\n    return null;\n}\nfunction updateStacks(controller, parsed) {\n    const { chart , _cachedMeta: meta  } = controller;\n    const stacks = chart._stacks || (chart._stacks = {});\n    const { iScale , vScale , index: datasetIndex  } = meta;\n    const iAxis = iScale.axis;\n    const vAxis = vScale.axis;\n    const key = getStackKey(iScale, vScale, meta);\n    const ilen = parsed.length;\n    let stack;\n    for(let i = 0; i < ilen; ++i){\n        const item = parsed[i];\n        const { [iAxis]: index , [vAxis]: value  } = item;\n        const itemStacks = item._stacks || (item._stacks = {});\n        stack = itemStacks[vAxis] = getOrCreateStack(stacks, key, index);\n        stack[datasetIndex] = value;\n        stack._top = getLastIndexInStack(stack, vScale, true, meta.type);\n        stack._bottom = getLastIndexInStack(stack, vScale, false, meta.type);\n        const visualValues = stack._visualValues || (stack._visualValues = {});\n        visualValues[datasetIndex] = value;\n    }\n}\nfunction getFirstScaleId(chart, axis) {\n    const scales = chart.scales;\n    return Object.keys(scales).filter((key)=>scales[key].axis === axis).shift();\n}\nfunction createDatasetContext(parent, index) {\n    return createContext(parent, {\n        active: false,\n        dataset: undefined,\n        datasetIndex: index,\n        index,\n        mode: 'default',\n        type: 'dataset'\n    });\n}\nfunction createDataContext(parent, index, element) {\n    return createContext(parent, {\n        active: false,\n        dataIndex: index,\n        parsed: undefined,\n        raw: undefined,\n        element,\n        index,\n        mode: 'default',\n        type: 'data'\n    });\n}\nfunction clearStacks(meta, items) {\n    const datasetIndex = meta.controller.index;\n    const axis = meta.vScale && meta.vScale.axis;\n    if (!axis) {\n        return;\n    }\n    items = items || meta._parsed;\n    for (const parsed of items){\n        const stacks = parsed._stacks;\n        if (!stacks || stacks[axis] === undefined || stacks[axis][datasetIndex] === undefined) {\n            return;\n        }\n        delete stacks[axis][datasetIndex];\n        if (stacks[axis]._visualValues !== undefined && stacks[axis]._visualValues[datasetIndex] !== undefined) {\n            delete stacks[axis]._visualValues[datasetIndex];\n        }\n    }\n}\nconst isDirectUpdateMode = (mode)=>mode === 'reset' || mode === 'none';\nconst cloneIfNotShared = (cached, shared)=>shared ? cached : Object.assign({}, cached);\nconst createStack = (canStack, meta, chart)=>canStack && !meta.hidden && meta._stacked && {\n        keys: getSortedDatasetIndices(chart, true),\n        values: null\n    };\nclass DatasetController {\n static defaults = {};\n static datasetElementType = null;\n static dataElementType = null;\n constructor(chart, datasetIndex){\n        this.chart = chart;\n        this._ctx = chart.ctx;\n        this.index = datasetIndex;\n        this._cachedDataOpts = {};\n        this._cachedMeta = this.getMeta();\n        this._type = this._cachedMeta.type;\n        this.options = undefined;\n         this._parsing = false;\n        this._data = undefined;\n        this._objectData = undefined;\n        this._sharedOptions = undefined;\n        this._drawStart = undefined;\n        this._drawCount = undefined;\n        this.enableOptionSharing = false;\n        this.supportsDecimation = false;\n        this.$context = undefined;\n        this._syncList = [];\n        this.datasetElementType = new.target.datasetElementType;\n        this.dataElementType = new.target.dataElementType;\n        this.initialize();\n    }\n    initialize() {\n        const meta = this._cachedMeta;\n        this.configure();\n        this.linkScales();\n        meta._stacked = isStacked(meta.vScale, meta);\n        this.addElements();\n        if (this.options.fill && !this.chart.isPluginEnabled('filler')) {\n            console.warn(\"Tried to use the 'fill' option without the 'Filler' plugin enabled. Please import and register the 'Filler' plugin and make sure it is not disabled in the options\");\n        }\n    }\n    updateIndex(datasetIndex) {\n        if (this.index !== datasetIndex) {\n            clearStacks(this._cachedMeta);\n        }\n        this.index = datasetIndex;\n    }\n    linkScales() {\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const dataset = this.getDataset();\n        const chooseId = (axis, x, y, r)=>axis === 'x' ? x : axis === 'r' ? r : y;\n        const xid = meta.xAxisID = valueOrDefault(dataset.xAxisID, getFirstScaleId(chart, 'x'));\n        const yid = meta.yAxisID = valueOrDefault(dataset.yAxisID, getFirstScaleId(chart, 'y'));\n        const rid = meta.rAxisID = valueOrDefault(dataset.rAxisID, getFirstScaleId(chart, 'r'));\n        const indexAxis = meta.indexAxis;\n        const iid = meta.iAxisID = chooseId(indexAxis, xid, yid, rid);\n        const vid = meta.vAxisID = chooseId(indexAxis, yid, xid, rid);\n        meta.xScale = this.getScaleForId(xid);\n        meta.yScale = this.getScaleForId(yid);\n        meta.rScale = this.getScaleForId(rid);\n        meta.iScale = this.getScaleForId(iid);\n        meta.vScale = this.getScaleForId(vid);\n    }\n    getDataset() {\n        return this.chart.data.datasets[this.index];\n    }\n    getMeta() {\n        return this.chart.getDatasetMeta(this.index);\n    }\n getScaleForId(scaleID) {\n        return this.chart.scales[scaleID];\n    }\n _getOtherScale(scale) {\n        const meta = this._cachedMeta;\n        return scale === meta.iScale ? meta.vScale : meta.iScale;\n    }\n    reset() {\n        this._update('reset');\n    }\n _destroy() {\n        const meta = this._cachedMeta;\n        if (this._data) {\n            unlistenArrayEvents(this._data, this);\n        }\n        if (meta._stacked) {\n            clearStacks(meta);\n        }\n    }\n _dataCheck() {\n        const dataset = this.getDataset();\n        const data = dataset.data || (dataset.data = []);\n        const _data = this._data;\n        if (isObject(data)) {\n            const meta = this._cachedMeta;\n            this._data = convertObjectDataToArray(data, meta);\n        } else if (_data !== data) {\n            if (_data) {\n                unlistenArrayEvents(_data, this);\n                const meta = this._cachedMeta;\n                clearStacks(meta);\n                meta._parsed = [];\n            }\n            if (data && Object.isExtensible(data)) {\n                listenArrayEvents(data, this);\n            }\n            this._syncList = [];\n            this._data = data;\n        }\n    }\n    addElements() {\n        const meta = this._cachedMeta;\n        this._dataCheck();\n        if (this.datasetElementType) {\n            meta.dataset = new this.datasetElementType();\n        }\n    }\n    buildOrUpdateElements(resetNewElements) {\n        const meta = this._cachedMeta;\n        const dataset = this.getDataset();\n        let stackChanged = false;\n        this._dataCheck();\n        const oldStacked = meta._stacked;\n        meta._stacked = isStacked(meta.vScale, meta);\n        if (meta.stack !== dataset.stack) {\n            stackChanged = true;\n            clearStacks(meta);\n            meta.stack = dataset.stack;\n        }\n        this._resyncElements(resetNewElements);\n        if (stackChanged || oldStacked !== meta._stacked) {\n            updateStacks(this, meta._parsed);\n            meta._stacked = isStacked(meta.vScale, meta);\n        }\n    }\n configure() {\n        const config = this.chart.config;\n        const scopeKeys = config.datasetScopeKeys(this._type);\n        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys, true);\n        this.options = config.createResolver(scopes, this.getContext());\n        this._parsing = this.options.parsing;\n        this._cachedDataOpts = {};\n    }\n parse(start, count) {\n        const { _cachedMeta: meta , _data: data  } = this;\n        const { iScale , _stacked  } = meta;\n        const iAxis = iScale.axis;\n        let sorted = start === 0 && count === data.length ? true : meta._sorted;\n        let prev = start > 0 && meta._parsed[start - 1];\n        let i, cur, parsed;\n        if (this._parsing === false) {\n            meta._parsed = data;\n            meta._sorted = true;\n            parsed = data;\n        } else {\n            if (isArray(data[start])) {\n                parsed = this.parseArrayData(meta, data, start, count);\n            } else if (isObject(data[start])) {\n                parsed = this.parseObjectData(meta, data, start, count);\n            } else {\n                parsed = this.parsePrimitiveData(meta, data, start, count);\n            }\n            const isNotInOrderComparedToPrev = ()=>cur[iAxis] === null || prev && cur[iAxis] < prev[iAxis];\n            for(i = 0; i < count; ++i){\n                meta._parsed[i + start] = cur = parsed[i];\n                if (sorted) {\n                    if (isNotInOrderComparedToPrev()) {\n                        sorted = false;\n                    }\n                    prev = cur;\n                }\n            }\n            meta._sorted = sorted;\n        }\n        if (_stacked) {\n            updateStacks(this, parsed);\n        }\n    }\n parsePrimitiveData(meta, data, start, count) {\n        const { iScale , vScale  } = meta;\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const labels = iScale.getLabels();\n        const singleScale = iScale === vScale;\n        const parsed = new Array(count);\n        let i, ilen, index;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            parsed[i] = {\n                [iAxis]: singleScale || iScale.parse(labels[index], index),\n                [vAxis]: vScale.parse(data[index], index)\n            };\n        }\n        return parsed;\n    }\n parseArrayData(meta, data, start, count) {\n        const { xScale , yScale  } = meta;\n        const parsed = new Array(count);\n        let i, ilen, index, item;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            item = data[index];\n            parsed[i] = {\n                x: xScale.parse(item[0], index),\n                y: yScale.parse(item[1], index)\n            };\n        }\n        return parsed;\n    }\n parseObjectData(meta, data, start, count) {\n        const { xScale , yScale  } = meta;\n        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;\n        const parsed = new Array(count);\n        let i, ilen, index, item;\n        for(i = 0, ilen = count; i < ilen; ++i){\n            index = i + start;\n            item = data[index];\n            parsed[i] = {\n                x: xScale.parse(resolveObjectKey(item, xAxisKey), index),\n                y: yScale.parse(resolveObjectKey(item, yAxisKey), index)\n            };\n        }\n        return parsed;\n    }\n getParsed(index) {\n        return this._cachedMeta._parsed[index];\n    }\n getDataElement(index) {\n        return this._cachedMeta.data[index];\n    }\n applyStack(scale, parsed, mode) {\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const value = parsed[scale.axis];\n        const stack = {\n            keys: getSortedDatasetIndices(chart, true),\n            values: parsed._stacks[scale.axis]._visualValues\n        };\n        return applyStack(stack, value, meta.index, {\n            mode\n        });\n    }\n updateRangeFromParsed(range, scale, parsed, stack) {\n        const parsedValue = parsed[scale.axis];\n        let value = parsedValue === null ? NaN : parsedValue;\n        const values = stack && parsed._stacks[scale.axis];\n        if (stack && values) {\n            stack.values = values;\n            value = applyStack(stack, parsedValue, this._cachedMeta.index);\n        }\n        range.min = Math.min(range.min, value);\n        range.max = Math.max(range.max, value);\n    }\n getMinMax(scale, canStack) {\n        const meta = this._cachedMeta;\n        const _parsed = meta._parsed;\n        const sorted = meta._sorted && scale === meta.iScale;\n        const ilen = _parsed.length;\n        const otherScale = this._getOtherScale(scale);\n        const stack = createStack(canStack, meta, this.chart);\n        const range = {\n            min: Number.POSITIVE_INFINITY,\n            max: Number.NEGATIVE_INFINITY\n        };\n        const { min: otherMin , max: otherMax  } = getUserBounds(otherScale);\n        let i, parsed;\n        function _skip() {\n            parsed = _parsed[i];\n            const otherValue = parsed[otherScale.axis];\n            return !isNumberFinite(parsed[scale.axis]) || otherMin > otherValue || otherMax < otherValue;\n        }\n        for(i = 0; i < ilen; ++i){\n            if (_skip()) {\n                continue;\n            }\n            this.updateRangeFromParsed(range, scale, parsed, stack);\n            if (sorted) {\n                break;\n            }\n        }\n        if (sorted) {\n            for(i = ilen - 1; i >= 0; --i){\n                if (_skip()) {\n                    continue;\n                }\n                this.updateRangeFromParsed(range, scale, parsed, stack);\n                break;\n            }\n        }\n        return range;\n    }\n    getAllParsedValues(scale) {\n        const parsed = this._cachedMeta._parsed;\n        const values = [];\n        let i, ilen, value;\n        for(i = 0, ilen = parsed.length; i < ilen; ++i){\n            value = parsed[i][scale.axis];\n            if (isNumberFinite(value)) {\n                values.push(value);\n            }\n        }\n        return values;\n    }\n getMaxOverflow() {\n        return false;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const iScale = meta.iScale;\n        const vScale = meta.vScale;\n        const parsed = this.getParsed(index);\n        return {\n            label: iScale ? '' + iScale.getLabelForValue(parsed[iScale.axis]) : '',\n            value: vScale ? '' + vScale.getLabelForValue(parsed[vScale.axis]) : ''\n        };\n    }\n _update(mode) {\n        const meta = this._cachedMeta;\n        this.update(mode || 'default');\n        meta._clip = toClip(valueOrDefault(this.options.clip, defaultClip(meta.xScale, meta.yScale, this.getMaxOverflow())));\n    }\n update(mode) {}\n    draw() {\n        const ctx = this._ctx;\n        const chart = this.chart;\n        const meta = this._cachedMeta;\n        const elements = meta.data || [];\n        const area = chart.chartArea;\n        const active = [];\n        const start = this._drawStart || 0;\n        const count = this._drawCount || elements.length - start;\n        const drawActiveElementsOnTop = this.options.drawActiveElementsOnTop;\n        let i;\n        if (meta.dataset) {\n            meta.dataset.draw(ctx, area, start, count);\n        }\n        for(i = start; i < start + count; ++i){\n            const element = elements[i];\n            if (element.hidden) {\n                continue;\n            }\n            if (element.active && drawActiveElementsOnTop) {\n                active.push(element);\n            } else {\n                element.draw(ctx, area);\n            }\n        }\n        for(i = 0; i < active.length; ++i){\n            active[i].draw(ctx, area);\n        }\n    }\n getStyle(index, active) {\n        const mode = active ? 'active' : 'default';\n        return index === undefined && this._cachedMeta.dataset ? this.resolveDatasetElementOptions(mode) : this.resolveDataElementOptions(index || 0, mode);\n    }\n getContext(index, active, mode) {\n        const dataset = this.getDataset();\n        let context;\n        if (index >= 0 && index < this._cachedMeta.data.length) {\n            const element = this._cachedMeta.data[index];\n            context = element.$context || (element.$context = createDataContext(this.getContext(), index, element));\n            context.parsed = this.getParsed(index);\n            context.raw = dataset.data[index];\n            context.index = context.dataIndex = index;\n        } else {\n            context = this.$context || (this.$context = createDatasetContext(this.chart.getContext(), this.index));\n            context.dataset = dataset;\n            context.index = context.datasetIndex = this.index;\n        }\n        context.active = !!active;\n        context.mode = mode;\n        return context;\n    }\n resolveDatasetElementOptions(mode) {\n        return this._resolveElementOptions(this.datasetElementType.id, mode);\n    }\n resolveDataElementOptions(index, mode) {\n        return this._resolveElementOptions(this.dataElementType.id, mode, index);\n    }\n _resolveElementOptions(elementType, mode = 'default', index) {\n        const active = mode === 'active';\n        const cache = this._cachedDataOpts;\n        const cacheKey = elementType + '-' + mode;\n        const cached = cache[cacheKey];\n        const sharing = this.enableOptionSharing && defined(index);\n        if (cached) {\n            return cloneIfNotShared(cached, sharing);\n        }\n        const config = this.chart.config;\n        const scopeKeys = config.datasetElementScopeKeys(this._type, elementType);\n        const prefixes = active ? [\n            `${elementType}Hover`,\n            'hover',\n            elementType,\n            ''\n        ] : [\n            elementType,\n            ''\n        ];\n        const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n        const names = Object.keys(defaults.elements[elementType]);\n        const context = ()=>this.getContext(index, active, mode);\n        const values = config.resolveNamedOptions(scopes, names, context, prefixes);\n        if (values.$shared) {\n            values.$shared = sharing;\n            cache[cacheKey] = Object.freeze(cloneIfNotShared(values, sharing));\n        }\n        return values;\n    }\n _resolveAnimations(index, transition, active) {\n        const chart = this.chart;\n        const cache = this._cachedDataOpts;\n        const cacheKey = `animation-${transition}`;\n        const cached = cache[cacheKey];\n        if (cached) {\n            return cached;\n        }\n        let options;\n        if (chart.options.animation !== false) {\n            const config = this.chart.config;\n            const scopeKeys = config.datasetAnimationScopeKeys(this._type, transition);\n            const scopes = config.getOptionScopes(this.getDataset(), scopeKeys);\n            options = config.createResolver(scopes, this.getContext(index, active, transition));\n        }\n        const animations = new Animations(chart, options && options.animations);\n        if (options && options._cacheable) {\n            cache[cacheKey] = Object.freeze(animations);\n        }\n        return animations;\n    }\n getSharedOptions(options) {\n        if (!options.$shared) {\n            return;\n        }\n        return this._sharedOptions || (this._sharedOptions = Object.assign({}, options));\n    }\n includeOptions(mode, sharedOptions) {\n        return !sharedOptions || isDirectUpdateMode(mode) || this.chart._animationsDisabled;\n    }\n _getSharedOptions(start, mode) {\n        const firstOpts = this.resolveDataElementOptions(start, mode);\n        const previouslySharedOptions = this._sharedOptions;\n        const sharedOptions = this.getSharedOptions(firstOpts);\n        const includeOptions = this.includeOptions(mode, sharedOptions) || sharedOptions !== previouslySharedOptions;\n        this.updateSharedOptions(sharedOptions, mode, firstOpts);\n        return {\n            sharedOptions,\n            includeOptions\n        };\n    }\n updateElement(element, index, properties, mode) {\n        if (isDirectUpdateMode(mode)) {\n            Object.assign(element, properties);\n        } else {\n            this._resolveAnimations(index, mode).update(element, properties);\n        }\n    }\n updateSharedOptions(sharedOptions, mode, newOptions) {\n        if (sharedOptions && !isDirectUpdateMode(mode)) {\n            this._resolveAnimations(undefined, mode).update(sharedOptions, newOptions);\n        }\n    }\n _setStyle(element, index, mode, active) {\n        element.active = active;\n        const options = this.getStyle(index, active);\n        this._resolveAnimations(index, mode, active).update(element, {\n            options: !active && this.getSharedOptions(options) || options\n        });\n    }\n    removeHoverStyle(element, datasetIndex, index) {\n        this._setStyle(element, index, 'active', false);\n    }\n    setHoverStyle(element, datasetIndex, index) {\n        this._setStyle(element, index, 'active', true);\n    }\n _removeDatasetHoverStyle() {\n        const element = this._cachedMeta.dataset;\n        if (element) {\n            this._setStyle(element, undefined, 'active', false);\n        }\n    }\n _setDatasetHoverStyle() {\n        const element = this._cachedMeta.dataset;\n        if (element) {\n            this._setStyle(element, undefined, 'active', true);\n        }\n    }\n _resyncElements(resetNewElements) {\n        const data = this._data;\n        const elements = this._cachedMeta.data;\n        for (const [method, arg1, arg2] of this._syncList){\n            this[method](arg1, arg2);\n        }\n        this._syncList = [];\n        const numMeta = elements.length;\n        const numData = data.length;\n        const count = Math.min(numData, numMeta);\n        if (count) {\n            this.parse(0, count);\n        }\n        if (numData > numMeta) {\n            this._insertElements(numMeta, numData - numMeta, resetNewElements);\n        } else if (numData < numMeta) {\n            this._removeElements(numData, numMeta - numData);\n        }\n    }\n _insertElements(start, count, resetNewElements = true) {\n        const meta = this._cachedMeta;\n        const data = meta.data;\n        const end = start + count;\n        let i;\n        const move = (arr)=>{\n            arr.length += count;\n            for(i = arr.length - 1; i >= end; i--){\n                arr[i] = arr[i - count];\n            }\n        };\n        move(data);\n        for(i = start; i < end; ++i){\n            data[i] = new this.dataElementType();\n        }\n        if (this._parsing) {\n            move(meta._parsed);\n        }\n        this.parse(start, count);\n        if (resetNewElements) {\n            this.updateElements(data, start, count, 'reset');\n        }\n    }\n    updateElements(element, start, count, mode) {}\n _removeElements(start, count) {\n        const meta = this._cachedMeta;\n        if (this._parsing) {\n            const removed = meta._parsed.splice(start, count);\n            if (meta._stacked) {\n                clearStacks(meta, removed);\n            }\n        }\n        meta.data.splice(start, count);\n    }\n _sync(args) {\n        if (this._parsing) {\n            this._syncList.push(args);\n        } else {\n            const [method, arg1, arg2] = args;\n            this[method](arg1, arg2);\n        }\n        this.chart._dataChanges.push([\n            this.index,\n            ...args\n        ]);\n    }\n    _onDataPush() {\n        const count = arguments.length;\n        this._sync([\n            '_insertElements',\n            this.getDataset().data.length - count,\n            count\n        ]);\n    }\n    _onDataPop() {\n        this._sync([\n            '_removeElements',\n            this._cachedMeta.data.length - 1,\n            1\n        ]);\n    }\n    _onDataShift() {\n        this._sync([\n            '_removeElements',\n            0,\n            1\n        ]);\n    }\n    _onDataSplice(start, count) {\n        if (count) {\n            this._sync([\n                '_removeElements',\n                start,\n                count\n            ]);\n        }\n        const newCount = arguments.length - 2;\n        if (newCount) {\n            this._sync([\n                '_insertElements',\n                start,\n                newCount\n            ]);\n        }\n    }\n    _onDataUnshift() {\n        this._sync([\n            '_insertElements',\n            0,\n            arguments.length\n        ]);\n    }\n}\n\nfunction getAllScaleValues(scale, type) {\n    if (!scale._cache.$bar) {\n        const visibleMetas = scale.getMatchingVisibleMetas(type);\n        let values = [];\n        for(let i = 0, ilen = visibleMetas.length; i < ilen; i++){\n            values = values.concat(visibleMetas[i].controller.getAllParsedValues(scale));\n        }\n        scale._cache.$bar = _arrayUnique(values.sort((a, b)=>a - b));\n    }\n    return scale._cache.$bar;\n}\n function computeMinSampleSize(meta) {\n    const scale = meta.iScale;\n    const values = getAllScaleValues(scale, meta.type);\n    let min = scale._length;\n    let i, ilen, curr, prev;\n    const updateMinAndPrev = ()=>{\n        if (curr === 32767 || curr === -32768) {\n            return;\n        }\n        if (defined(prev)) {\n            min = Math.min(min, Math.abs(curr - prev) || min);\n        }\n        prev = curr;\n    };\n    for(i = 0, ilen = values.length; i < ilen; ++i){\n        curr = scale.getPixelForValue(values[i]);\n        updateMinAndPrev();\n    }\n    prev = undefined;\n    for(i = 0, ilen = scale.ticks.length; i < ilen; ++i){\n        curr = scale.getPixelForTick(i);\n        updateMinAndPrev();\n    }\n    return min;\n}\n function computeFitCategoryTraits(index, ruler, options, stackCount) {\n    const thickness = options.barThickness;\n    let size, ratio;\n    if (isNullOrUndef(thickness)) {\n        size = ruler.min * options.categoryPercentage;\n        ratio = options.barPercentage;\n    } else {\n        size = thickness * stackCount;\n        ratio = 1;\n    }\n    return {\n        chunk: size / stackCount,\n        ratio,\n        start: ruler.pixels[index] - size / 2\n    };\n}\n function computeFlexCategoryTraits(index, ruler, options, stackCount) {\n    const pixels = ruler.pixels;\n    const curr = pixels[index];\n    let prev = index > 0 ? pixels[index - 1] : null;\n    let next = index < pixels.length - 1 ? pixels[index + 1] : null;\n    const percent = options.categoryPercentage;\n    if (prev === null) {\n        prev = curr - (next === null ? ruler.end - ruler.start : next - curr);\n    }\n    if (next === null) {\n        next = curr + curr - prev;\n    }\n    const start = curr - (curr - Math.min(prev, next)) / 2 * percent;\n    const size = Math.abs(next - prev) / 2 * percent;\n    return {\n        chunk: size / stackCount,\n        ratio: options.barPercentage,\n        start\n    };\n}\nfunction parseFloatBar(entry, item, vScale, i) {\n    const startValue = vScale.parse(entry[0], i);\n    const endValue = vScale.parse(entry[1], i);\n    const min = Math.min(startValue, endValue);\n    const max = Math.max(startValue, endValue);\n    let barStart = min;\n    let barEnd = max;\n    if (Math.abs(min) > Math.abs(max)) {\n        barStart = max;\n        barEnd = min;\n    }\n    item[vScale.axis] = barEnd;\n    item._custom = {\n        barStart,\n        barEnd,\n        start: startValue,\n        end: endValue,\n        min,\n        max\n    };\n}\nfunction parseValue(entry, item, vScale, i) {\n    if (isArray(entry)) {\n        parseFloatBar(entry, item, vScale, i);\n    } else {\n        item[vScale.axis] = vScale.parse(entry, i);\n    }\n    return item;\n}\nfunction parseArrayOrPrimitive(meta, data, start, count) {\n    const iScale = meta.iScale;\n    const vScale = meta.vScale;\n    const labels = iScale.getLabels();\n    const singleScale = iScale === vScale;\n    const parsed = [];\n    let i, ilen, item, entry;\n    for(i = start, ilen = start + count; i < ilen; ++i){\n        entry = data[i];\n        item = {};\n        item[iScale.axis] = singleScale || iScale.parse(labels[i], i);\n        parsed.push(parseValue(entry, item, vScale, i));\n    }\n    return parsed;\n}\nfunction isFloatBar(custom) {\n    return custom && custom.barStart !== undefined && custom.barEnd !== undefined;\n}\nfunction barSign(size, vScale, actualBase) {\n    if (size !== 0) {\n        return sign(size);\n    }\n    return (vScale.isHorizontal() ? 1 : -1) * (vScale.min >= actualBase ? 1 : -1);\n}\nfunction borderProps(properties) {\n    let reverse, start, end, top, bottom;\n    if (properties.horizontal) {\n        reverse = properties.base > properties.x;\n        start = 'left';\n        end = 'right';\n    } else {\n        reverse = properties.base < properties.y;\n        start = 'bottom';\n        end = 'top';\n    }\n    if (reverse) {\n        top = 'end';\n        bottom = 'start';\n    } else {\n        top = 'start';\n        bottom = 'end';\n    }\n    return {\n        start,\n        end,\n        reverse,\n        top,\n        bottom\n    };\n}\nfunction setBorderSkipped(properties, options, stack, index) {\n    let edge = options.borderSkipped;\n    const res = {};\n    if (!edge) {\n        properties.borderSkipped = res;\n        return;\n    }\n    if (edge === true) {\n        properties.borderSkipped = {\n            top: true,\n            right: true,\n            bottom: true,\n            left: true\n        };\n        return;\n    }\n    const { start , end , reverse , top , bottom  } = borderProps(properties);\n    if (edge === 'middle' && stack) {\n        properties.enableBorderRadius = true;\n        if ((stack._top || 0) === index) {\n            edge = top;\n        } else if ((stack._bottom || 0) === index) {\n            edge = bottom;\n        } else {\n            res[parseEdge(bottom, start, end, reverse)] = true;\n            edge = top;\n        }\n    }\n    res[parseEdge(edge, start, end, reverse)] = true;\n    properties.borderSkipped = res;\n}\nfunction parseEdge(edge, a, b, reverse) {\n    if (reverse) {\n        edge = swap(edge, a, b);\n        edge = startEnd(edge, b, a);\n    } else {\n        edge = startEnd(edge, a, b);\n    }\n    return edge;\n}\nfunction swap(orig, v1, v2) {\n    return orig === v1 ? v2 : orig === v2 ? v1 : orig;\n}\nfunction startEnd(v, start, end) {\n    return v === 'start' ? start : v === 'end' ? end : v;\n}\nfunction setInflateAmount(properties, { inflateAmount  }, ratio) {\n    properties.inflateAmount = inflateAmount === 'auto' ? ratio === 1 ? 0.33 : 0 : inflateAmount;\n}\nclass BarController extends DatasetController {\n    static id = 'bar';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'bar',\n        categoryPercentage: 0.8,\n        barPercentage: 0.9,\n        grouped: true,\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'base',\n                    'width',\n                    'height'\n                ]\n            }\n        }\n    };\n static overrides = {\n        scales: {\n            _index_: {\n                type: 'category',\n                offset: true,\n                grid: {\n                    offset: true\n                }\n            },\n            _value_: {\n                type: 'linear',\n                beginAtZero: true\n            }\n        }\n    };\n parsePrimitiveData(meta, data, start, count) {\n        return parseArrayOrPrimitive(meta, data, start, count);\n    }\n parseArrayData(meta, data, start, count) {\n        return parseArrayOrPrimitive(meta, data, start, count);\n    }\n parseObjectData(meta, data, start, count) {\n        const { iScale , vScale  } = meta;\n        const { xAxisKey ='x' , yAxisKey ='y'  } = this._parsing;\n        const iAxisKey = iScale.axis === 'x' ? xAxisKey : yAxisKey;\n        const vAxisKey = vScale.axis === 'x' ? xAxisKey : yAxisKey;\n        const parsed = [];\n        let i, ilen, item, obj;\n        for(i = start, ilen = start + count; i < ilen; ++i){\n            obj = data[i];\n            item = {};\n            item[iScale.axis] = iScale.parse(resolveObjectKey(obj, iAxisKey), i);\n            parsed.push(parseValue(resolveObjectKey(obj, vAxisKey), item, vScale, i));\n        }\n        return parsed;\n    }\n updateRangeFromParsed(range, scale, parsed, stack) {\n        super.updateRangeFromParsed(range, scale, parsed, stack);\n        const custom = parsed._custom;\n        if (custom && scale === this._cachedMeta.vScale) {\n            range.min = Math.min(range.min, custom.min);\n            range.max = Math.max(range.max, custom.max);\n        }\n    }\n getMaxOverflow() {\n        return 0;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const { iScale , vScale  } = meta;\n        const parsed = this.getParsed(index);\n        const custom = parsed._custom;\n        const value = isFloatBar(custom) ? '[' + custom.start + ', ' + custom.end + ']' : '' + vScale.getLabelForValue(parsed[vScale.axis]);\n        return {\n            label: '' + iScale.getLabelForValue(parsed[iScale.axis]),\n            value\n        };\n    }\n    initialize() {\n        this.enableOptionSharing = true;\n        super.initialize();\n        const meta = this._cachedMeta;\n        meta.stack = this.getDataset().stack;\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        this.updateElements(meta.data, 0, meta.data.length, mode);\n    }\n    updateElements(bars, start, count, mode) {\n        const reset = mode === 'reset';\n        const { index , _cachedMeta: { vScale  }  } = this;\n        const base = vScale.getBasePixel();\n        const horizontal = vScale.isHorizontal();\n        const ruler = this._getRuler();\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        for(let i = start; i < start + count; i++){\n            const parsed = this.getParsed(i);\n            const vpixels = reset || isNullOrUndef(parsed[vScale.axis]) ? {\n                base,\n                head: base\n            } : this._calculateBarValuePixels(i);\n            const ipixels = this._calculateBarIndexPixels(i, ruler);\n            const stack = (parsed._stacks || {})[vScale.axis];\n            const properties = {\n                horizontal,\n                base: vpixels.base,\n                enableBorderRadius: !stack || isFloatBar(parsed._custom) || index === stack._top || index === stack._bottom,\n                x: horizontal ? vpixels.head : ipixels.center,\n                y: horizontal ? ipixels.center : vpixels.head,\n                height: horizontal ? ipixels.size : Math.abs(vpixels.size),\n                width: horizontal ? Math.abs(vpixels.size) : ipixels.size\n            };\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, bars[i].active ? 'active' : mode);\n            }\n            const options = properties.options || bars[i].options;\n            setBorderSkipped(properties, options, stack, index);\n            setInflateAmount(properties, options, ruler.ratio);\n            this.updateElement(bars[i], i, properties, mode);\n        }\n    }\n _getStacks(last, dataIndex) {\n        const { iScale  } = this._cachedMeta;\n        const metasets = iScale.getMatchingVisibleMetas(this._type).filter((meta)=>meta.controller.options.grouped);\n        const stacked = iScale.options.stacked;\n        const stacks = [];\n        const currentParsed = this._cachedMeta.controller.getParsed(dataIndex);\n        const iScaleValue = currentParsed && currentParsed[iScale.axis];\n        const skipNull = (meta)=>{\n            const parsed = meta._parsed.find((item)=>item[iScale.axis] === iScaleValue);\n            const val = parsed && parsed[meta.vScale.axis];\n            if (isNullOrUndef(val) || isNaN(val)) {\n                return true;\n            }\n        };\n        for (const meta of metasets){\n            if (dataIndex !== undefined && skipNull(meta)) {\n                continue;\n            }\n            if (stacked === false || stacks.indexOf(meta.stack) === -1 || stacked === undefined && meta.stack === undefined) {\n                stacks.push(meta.stack);\n            }\n            if (meta.index === last) {\n                break;\n            }\n        }\n        if (!stacks.length) {\n            stacks.push(undefined);\n        }\n        return stacks;\n    }\n _getStackCount(index) {\n        return this._getStacks(undefined, index).length;\n    }\n    _getAxisCount() {\n        return this._getAxis().length;\n    }\n    getFirstScaleIdForIndexAxis() {\n        const scales = this.chart.scales;\n        const indexScaleId = this.chart.options.indexAxis;\n        return Object.keys(scales).filter((key)=>scales[key].axis === indexScaleId).shift();\n    }\n    _getAxis() {\n        const axis = {};\n        const firstScaleAxisId = this.getFirstScaleIdForIndexAxis();\n        for (const dataset of this.chart.data.datasets){\n            axis[valueOrDefault(this.chart.options.indexAxis === 'x' ? dataset.xAxisID : dataset.yAxisID, firstScaleAxisId)] = true;\n        }\n        return Object.keys(axis);\n    }\n _getStackIndex(datasetIndex, name, dataIndex) {\n        const stacks = this._getStacks(datasetIndex, dataIndex);\n        const index = name !== undefined ? stacks.indexOf(name) : -1;\n        return index === -1 ? stacks.length - 1 : index;\n    }\n _getRuler() {\n        const opts = this.options;\n        const meta = this._cachedMeta;\n        const iScale = meta.iScale;\n        const pixels = [];\n        let i, ilen;\n        for(i = 0, ilen = meta.data.length; i < ilen; ++i){\n            pixels.push(iScale.getPixelForValue(this.getParsed(i)[iScale.axis], i));\n        }\n        const barThickness = opts.barThickness;\n        const min = barThickness || computeMinSampleSize(meta);\n        return {\n            min,\n            pixels,\n            start: iScale._startPixel,\n            end: iScale._endPixel,\n            stackCount: this._getStackCount(),\n            scale: iScale,\n            grouped: opts.grouped,\n            ratio: barThickness ? 1 : opts.categoryPercentage * opts.barPercentage\n        };\n    }\n _calculateBarValuePixels(index) {\n        const { _cachedMeta: { vScale , _stacked , index: datasetIndex  } , options: { base: baseValue , minBarLength  }  } = this;\n        const actualBase = baseValue || 0;\n        const parsed = this.getParsed(index);\n        const custom = parsed._custom;\n        const floating = isFloatBar(custom);\n        let value = parsed[vScale.axis];\n        let start = 0;\n        let length = _stacked ? this.applyStack(vScale, parsed, _stacked) : value;\n        let head, size;\n        if (length !== value) {\n            start = length - value;\n            length = value;\n        }\n        if (floating) {\n            value = custom.barStart;\n            length = custom.barEnd - custom.barStart;\n            if (value !== 0 && sign(value) !== sign(custom.barEnd)) {\n                start = 0;\n            }\n            start += value;\n        }\n        const startValue = !isNullOrUndef(baseValue) && !floating ? baseValue : start;\n        let base = vScale.getPixelForValue(startValue);\n        if (this.chart.getDataVisibility(index)) {\n            head = vScale.getPixelForValue(start + length);\n        } else {\n            head = base;\n        }\n        size = head - base;\n        if (Math.abs(size) < minBarLength) {\n            size = barSign(size, vScale, actualBase) * minBarLength;\n            if (value === actualBase) {\n                base -= size / 2;\n            }\n            const startPixel = vScale.getPixelForDecimal(0);\n            const endPixel = vScale.getPixelForDecimal(1);\n            const min = Math.min(startPixel, endPixel);\n            const max = Math.max(startPixel, endPixel);\n            base = Math.max(Math.min(base, max), min);\n            head = base + size;\n            if (_stacked && !floating) {\n                parsed._stacks[vScale.axis]._visualValues[datasetIndex] = vScale.getValueForPixel(head) - vScale.getValueForPixel(base);\n            }\n        }\n        if (base === vScale.getPixelForValue(actualBase)) {\n            const halfGrid = sign(size) * vScale.getLineWidthForValue(actualBase) / 2;\n            base += halfGrid;\n            size -= halfGrid;\n        }\n        return {\n            size,\n            base,\n            head,\n            center: head + size / 2\n        };\n    }\n _calculateBarIndexPixels(index, ruler) {\n        const scale = ruler.scale;\n        const options = this.options;\n        const skipNull = options.skipNull;\n        const maxBarThickness = valueOrDefault(options.maxBarThickness, Infinity);\n        let center, size;\n        const axisCount = this._getAxisCount();\n        if (ruler.grouped) {\n            const stackCount = skipNull ? this._getStackCount(index) : ruler.stackCount;\n            const range = options.barThickness === 'flex' ? computeFlexCategoryTraits(index, ruler, options, stackCount * axisCount) : computeFitCategoryTraits(index, ruler, options, stackCount * axisCount);\n            const axisID = this.chart.options.indexAxis === 'x' ? this.getDataset().xAxisID : this.getDataset().yAxisID;\n            const axisNumber = this._getAxis().indexOf(valueOrDefault(axisID, this.getFirstScaleIdForIndexAxis()));\n            const stackIndex = this._getStackIndex(this.index, this._cachedMeta.stack, skipNull ? index : undefined) + axisNumber;\n            center = range.start + range.chunk * stackIndex + range.chunk / 2;\n            size = Math.min(maxBarThickness, range.chunk * range.ratio);\n        } else {\n            center = scale.getPixelForValue(this.getParsed(index)[scale.axis], index);\n            size = Math.min(maxBarThickness, ruler.min * ruler.ratio);\n        }\n        return {\n            base: center - size / 2,\n            head: center + size / 2,\n            center,\n            size\n        };\n    }\n    draw() {\n        const meta = this._cachedMeta;\n        const vScale = meta.vScale;\n        const rects = meta.data;\n        const ilen = rects.length;\n        let i = 0;\n        for(; i < ilen; ++i){\n            if (this.getParsed(i)[vScale.axis] !== null && !rects[i].hidden) {\n                rects[i].draw(this._ctx);\n            }\n        }\n    }\n}\n\nclass BubbleController extends DatasetController {\n    static id = 'bubble';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'point',\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'borderWidth',\n                    'radius'\n                ]\n            }\n        }\n    };\n static overrides = {\n        scales: {\n            x: {\n                type: 'linear'\n            },\n            y: {\n                type: 'linear'\n            }\n        }\n    };\n    initialize() {\n        this.enableOptionSharing = true;\n        super.initialize();\n    }\n parsePrimitiveData(meta, data, start, count) {\n        const parsed = super.parsePrimitiveData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            parsed[i]._custom = this.resolveDataElementOptions(i + start).radius;\n        }\n        return parsed;\n    }\n parseArrayData(meta, data, start, count) {\n        const parsed = super.parseArrayData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            const item = data[start + i];\n            parsed[i]._custom = valueOrDefault(item[2], this.resolveDataElementOptions(i + start).radius);\n        }\n        return parsed;\n    }\n parseObjectData(meta, data, start, count) {\n        const parsed = super.parseObjectData(meta, data, start, count);\n        for(let i = 0; i < parsed.length; i++){\n            const item = data[start + i];\n            parsed[i]._custom = valueOrDefault(item && item.r && +item.r, this.resolveDataElementOptions(i + start).radius);\n        }\n        return parsed;\n    }\n getMaxOverflow() {\n        const data = this._cachedMeta.data;\n        let max = 0;\n        for(let i = data.length - 1; i >= 0; --i){\n            max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n        }\n        return max > 0 && max;\n    }\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const labels = this.chart.data.labels || [];\n        const { xScale , yScale  } = meta;\n        const parsed = this.getParsed(index);\n        const x = xScale.getLabelForValue(parsed.x);\n        const y = yScale.getLabelForValue(parsed.y);\n        const r = parsed._custom;\n        return {\n            label: labels[index] || '',\n            value: '(' + x + ', ' + y + (r ? ', ' + r : '') + ')'\n        };\n    }\n    update(mode) {\n        const points = this._cachedMeta.data;\n        this.updateElements(points, 0, points.length, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale  } = this._cachedMeta;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        for(let i = start; i < start + count; i++){\n            const point = points[i];\n            const parsed = !reset && this.getParsed(i);\n            const properties = {};\n            const iPixel = properties[iAxis] = reset ? iScale.getPixelForDecimal(0.5) : iScale.getPixelForValue(parsed[iAxis]);\n            const vPixel = properties[vAxis] = reset ? vScale.getBasePixel() : vScale.getPixelForValue(parsed[vAxis]);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel);\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n                if (reset) {\n                    properties.options.radius = 0;\n                }\n            }\n            this.updateElement(point, i, properties, mode);\n        }\n    }\n resolveDataElementOptions(index, mode) {\n        const parsed = this.getParsed(index);\n        let values = super.resolveDataElementOptions(index, mode);\n        if (values.$shared) {\n            values = Object.assign({}, values, {\n                $shared: false\n            });\n        }\n        const radius = values.radius;\n        if (mode !== 'active') {\n            values.radius = 0;\n        }\n        values.radius += valueOrDefault(parsed && parsed._custom, radius);\n        return values;\n    }\n}\n\nfunction getRatioAndOffset(rotation, circumference, cutout) {\n    let ratioX = 1;\n    let ratioY = 1;\n    let offsetX = 0;\n    let offsetY = 0;\n    if (circumference < TAU) {\n        const startAngle = rotation;\n        const endAngle = startAngle + circumference;\n        const startX = Math.cos(startAngle);\n        const startY = Math.sin(startAngle);\n        const endX = Math.cos(endAngle);\n        const endY = Math.sin(endAngle);\n        const calcMax = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? 1 : Math.max(a, a * cutout, b, b * cutout);\n        const calcMin = (angle, a, b)=>_angleBetween(angle, startAngle, endAngle, true) ? -1 : Math.min(a, a * cutout, b, b * cutout);\n        const maxX = calcMax(0, startX, endX);\n        const maxY = calcMax(HALF_PI, startY, endY);\n        const minX = calcMin(PI, startX, endX);\n        const minY = calcMin(PI + HALF_PI, startY, endY);\n        ratioX = (maxX - minX) / 2;\n        ratioY = (maxY - minY) / 2;\n        offsetX = -(maxX + minX) / 2;\n        offsetY = -(maxY + minY) / 2;\n    }\n    return {\n        ratioX,\n        ratioY,\n        offsetX,\n        offsetY\n    };\n}\nclass DoughnutController extends DatasetController {\n    static id = 'doughnut';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'arc',\n        animation: {\n            animateRotate: true,\n            animateScale: false\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'circumference',\n                    'endAngle',\n                    'innerRadius',\n                    'outerRadius',\n                    'startAngle',\n                    'x',\n                    'y',\n                    'offset',\n                    'borderWidth',\n                    'spacing'\n                ]\n            }\n        },\n        cutout: '50%',\n        rotation: 0,\n        circumference: 360,\n        radius: '100%',\n        spacing: 0,\n        indexAxis: 'r'\n    };\n    static descriptors = {\n        _scriptable: (name)=>name !== 'spacing',\n        _indexable: (name)=>name !== 'spacing' && !name.startsWith('borderDash') && !name.startsWith('hoverBorderDash')\n    };\n static overrides = {\n        aspectRatio: 1,\n        plugins: {\n            legend: {\n                labels: {\n                    generateLabels (chart) {\n                        const data = chart.data;\n                        const { labels: { pointStyle , textAlign , color , useBorderRadius , borderRadius  }  } = chart.legend.options;\n                        if (data.labels.length && data.datasets.length) {\n                            return data.labels.map((label, i)=>{\n                                const meta = chart.getDatasetMeta(0);\n                                const style = meta.controller.getStyle(i);\n                                return {\n                                    text: label,\n                                    fillStyle: style.backgroundColor,\n                                    fontColor: color,\n                                    hidden: !chart.getDataVisibility(i),\n                                    lineDash: style.borderDash,\n                                    lineDashOffset: style.borderDashOffset,\n                                    lineJoin: style.borderJoinStyle,\n                                    lineWidth: style.borderWidth,\n                                    strokeStyle: style.borderColor,\n                                    textAlign: textAlign,\n                                    pointStyle: pointStyle,\n                                    borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n                                    index: i\n                                };\n                            });\n                        }\n                        return [];\n                    }\n                },\n                onClick (e, legendItem, legend) {\n                    legend.chart.toggleDataVisibility(legendItem.index);\n                    legend.chart.update();\n                }\n            }\n        }\n    };\n    constructor(chart, datasetIndex){\n        super(chart, datasetIndex);\n        this.enableOptionSharing = true;\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n        this.offsetX = undefined;\n        this.offsetY = undefined;\n    }\n    linkScales() {}\n parse(start, count) {\n        const data = this.getDataset().data;\n        const meta = this._cachedMeta;\n        if (this._parsing === false) {\n            meta._parsed = data;\n        } else {\n            let getter = (i)=>+data[i];\n            if (isObject(data[start])) {\n                const { key ='value'  } = this._parsing;\n                getter = (i)=>+resolveObjectKey(data[i], key);\n            }\n            let i, ilen;\n            for(i = start, ilen = start + count; i < ilen; ++i){\n                meta._parsed[i] = getter(i);\n            }\n        }\n    }\n _getRotation() {\n        return toRadians(this.options.rotation - 90);\n    }\n _getCircumference() {\n        return toRadians(this.options.circumference);\n    }\n _getRotationExtents() {\n        let min = TAU;\n        let max = -TAU;\n        for(let i = 0; i < this.chart.data.datasets.length; ++i){\n            if (this.chart.isDatasetVisible(i) && this.chart.getDatasetMeta(i).type === this._type) {\n                const controller = this.chart.getDatasetMeta(i).controller;\n                const rotation = controller._getRotation();\n                const circumference = controller._getCircumference();\n                min = Math.min(min, rotation);\n                max = Math.max(max, rotation + circumference);\n            }\n        }\n        return {\n            rotation: min,\n            circumference: max - min\n        };\n    }\n update(mode) {\n        const chart = this.chart;\n        const { chartArea  } = chart;\n        const meta = this._cachedMeta;\n        const arcs = meta.data;\n        const spacing = this.getMaxBorderWidth() + this.getMaxOffset(arcs) + this.options.spacing;\n        const maxSize = Math.max((Math.min(chartArea.width, chartArea.height) - spacing) / 2, 0);\n        const cutout = Math.min(toPercentage(this.options.cutout, maxSize), 1);\n        const chartWeight = this._getRingWeight(this.index);\n        const { circumference , rotation  } = this._getRotationExtents();\n        const { ratioX , ratioY , offsetX , offsetY  } = getRatioAndOffset(rotation, circumference, cutout);\n        const maxWidth = (chartArea.width - spacing) / ratioX;\n        const maxHeight = (chartArea.height - spacing) / ratioY;\n        const maxRadius = Math.max(Math.min(maxWidth, maxHeight) / 2, 0);\n        const outerRadius = toDimension(this.options.radius, maxRadius);\n        const innerRadius = Math.max(outerRadius * cutout, 0);\n        const radiusLength = (outerRadius - innerRadius) / this._getVisibleDatasetWeightTotal();\n        this.offsetX = offsetX * outerRadius;\n        this.offsetY = offsetY * outerRadius;\n        meta.total = this.calculateTotal();\n        this.outerRadius = outerRadius - radiusLength * this._getRingWeightOffset(this.index);\n        this.innerRadius = Math.max(this.outerRadius - radiusLength * chartWeight, 0);\n        this.updateElements(arcs, 0, arcs.length, mode);\n    }\n _circumference(i, reset) {\n        const opts = this.options;\n        const meta = this._cachedMeta;\n        const circumference = this._getCircumference();\n        if (reset && opts.animation.animateRotate || !this.chart.getDataVisibility(i) || meta._parsed[i] === null || meta.data[i].hidden) {\n            return 0;\n        }\n        return this.calculateCircumference(meta._parsed[i] * circumference / TAU);\n    }\n    updateElements(arcs, start, count, mode) {\n        const reset = mode === 'reset';\n        const chart = this.chart;\n        const chartArea = chart.chartArea;\n        const opts = chart.options;\n        const animationOpts = opts.animation;\n        const centerX = (chartArea.left + chartArea.right) / 2;\n        const centerY = (chartArea.top + chartArea.bottom) / 2;\n        const animateScale = reset && animationOpts.animateScale;\n        const innerRadius = animateScale ? 0 : this.innerRadius;\n        const outerRadius = animateScale ? 0 : this.outerRadius;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        let startAngle = this._getRotation();\n        let i;\n        for(i = 0; i < start; ++i){\n            startAngle += this._circumference(i, reset);\n        }\n        for(i = start; i < start + count; ++i){\n            const circumference = this._circumference(i, reset);\n            const arc = arcs[i];\n            const properties = {\n                x: centerX + this.offsetX,\n                y: centerY + this.offsetY,\n                startAngle,\n                endAngle: startAngle + circumference,\n                circumference,\n                outerRadius,\n                innerRadius\n            };\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, arc.active ? 'active' : mode);\n            }\n            startAngle += circumference;\n            this.updateElement(arc, i, properties, mode);\n        }\n    }\n    calculateTotal() {\n        const meta = this._cachedMeta;\n        const metaData = meta.data;\n        let total = 0;\n        let i;\n        for(i = 0; i < metaData.length; i++){\n            const value = meta._parsed[i];\n            if (value !== null && !isNaN(value) && this.chart.getDataVisibility(i) && !metaData[i].hidden) {\n                total += Math.abs(value);\n            }\n        }\n        return total;\n    }\n    calculateCircumference(value) {\n        const total = this._cachedMeta.total;\n        if (total > 0 && !isNaN(value)) {\n            return TAU * (Math.abs(value) / total);\n        }\n        return 0;\n    }\n    getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const chart = this.chart;\n        const labels = chart.data.labels || [];\n        const value = formatNumber(meta._parsed[index], chart.options.locale);\n        return {\n            label: labels[index] || '',\n            value\n        };\n    }\n    getMaxBorderWidth(arcs) {\n        let max = 0;\n        const chart = this.chart;\n        let i, ilen, meta, controller, options;\n        if (!arcs) {\n            for(i = 0, ilen = chart.data.datasets.length; i < ilen; ++i){\n                if (chart.isDatasetVisible(i)) {\n                    meta = chart.getDatasetMeta(i);\n                    arcs = meta.data;\n                    controller = meta.controller;\n                    break;\n                }\n            }\n        }\n        if (!arcs) {\n            return 0;\n        }\n        for(i = 0, ilen = arcs.length; i < ilen; ++i){\n            options = controller.resolveDataElementOptions(i);\n            if (options.borderAlign !== 'inner') {\n                max = Math.max(max, options.borderWidth || 0, options.hoverBorderWidth || 0);\n            }\n        }\n        return max;\n    }\n    getMaxOffset(arcs) {\n        let max = 0;\n        for(let i = 0, ilen = arcs.length; i < ilen; ++i){\n            const options = this.resolveDataElementOptions(i);\n            max = Math.max(max, options.offset || 0, options.hoverOffset || 0);\n        }\n        return max;\n    }\n _getRingWeightOffset(datasetIndex) {\n        let ringWeightOffset = 0;\n        for(let i = 0; i < datasetIndex; ++i){\n            if (this.chart.isDatasetVisible(i)) {\n                ringWeightOffset += this._getRingWeight(i);\n            }\n        }\n        return ringWeightOffset;\n    }\n _getRingWeight(datasetIndex) {\n        return Math.max(valueOrDefault(this.chart.data.datasets[datasetIndex].weight, 1), 0);\n    }\n _getVisibleDatasetWeightTotal() {\n        return this._getRingWeightOffset(this.chart.data.datasets.length) || 1;\n    }\n}\n\nclass LineController extends DatasetController {\n    static id = 'line';\n static defaults = {\n        datasetElementType: 'line',\n        dataElementType: 'point',\n        showLine: true,\n        spanGaps: false\n    };\n static overrides = {\n        scales: {\n            _index_: {\n                type: 'category'\n            },\n            _value_: {\n                type: 'linear'\n            }\n        }\n    };\n    initialize() {\n        this.enableOptionSharing = true;\n        this.supportsDecimation = true;\n        super.initialize();\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const { dataset: line , data: points = [] , _dataset  } = meta;\n        const animationsDisabled = this.chart._animationsDisabled;\n        let { start , count  } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n        this._drawStart = start;\n        this._drawCount = count;\n        if (_scaleRangesChanged(meta)) {\n            start = 0;\n            count = points.length;\n        }\n        line._chart = this.chart;\n        line._datasetIndex = this.index;\n        line._decimated = !!_dataset._decimated;\n        line.points = points;\n        const options = this.resolveDatasetElementOptions(mode);\n        if (!this.options.showLine) {\n            options.borderWidth = 0;\n        }\n        options.segment = this.options.segment;\n        this.updateElement(line, undefined, {\n            animated: !animationsDisabled,\n            options\n        }, mode);\n        this.updateElements(points, start, count, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;\n        const { sharedOptions , includeOptions  } = this._getSharedOptions(start, mode);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const { spanGaps , segment  } = this.options;\n        const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n        const end = start + count;\n        const pointsCount = points.length;\n        let prevParsed = start > 0 && this.getParsed(start - 1);\n        for(let i = 0; i < pointsCount; ++i){\n            const point = points[i];\n            const properties = directUpdate ? point : {};\n            if (i < start || i >= end) {\n                properties.skip = true;\n                continue;\n            }\n            const parsed = this.getParsed(i);\n            const nullData = isNullOrUndef(parsed[vAxis]);\n            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n            if (segment) {\n                properties.parsed = parsed;\n                properties.raw = _dataset.data[i];\n            }\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            }\n            if (!directUpdate) {\n                this.updateElement(point, i, properties, mode);\n            }\n            prevParsed = parsed;\n        }\n    }\n getMaxOverflow() {\n        const meta = this._cachedMeta;\n        const dataset = meta.dataset;\n        const border = dataset.options && dataset.options.borderWidth || 0;\n        const data = meta.data || [];\n        if (!data.length) {\n            return border;\n        }\n        const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n        return Math.max(border, firstPoint, lastPoint) / 2;\n    }\n    draw() {\n        const meta = this._cachedMeta;\n        meta.dataset.updateControlPoints(this.chart.chartArea, meta.iScale.axis);\n        super.draw();\n    }\n}\n\nclass PolarAreaController extends DatasetController {\n    static id = 'polarArea';\n static defaults = {\n        dataElementType: 'arc',\n        animation: {\n            animateRotate: true,\n            animateScale: true\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'startAngle',\n                    'endAngle',\n                    'innerRadius',\n                    'outerRadius'\n                ]\n            }\n        },\n        indexAxis: 'r',\n        startAngle: 0\n    };\n static overrides = {\n        aspectRatio: 1,\n        plugins: {\n            legend: {\n                labels: {\n                    generateLabels (chart) {\n                        const data = chart.data;\n                        if (data.labels.length && data.datasets.length) {\n                            const { labels: { pointStyle , color  }  } = chart.legend.options;\n                            return data.labels.map((label, i)=>{\n                                const meta = chart.getDatasetMeta(0);\n                                const style = meta.controller.getStyle(i);\n                                return {\n                                    text: label,\n                                    fillStyle: style.backgroundColor,\n                                    strokeStyle: style.borderColor,\n                                    fontColor: color,\n                                    lineWidth: style.borderWidth,\n                                    pointStyle: pointStyle,\n                                    hidden: !chart.getDataVisibility(i),\n                                    index: i\n                                };\n                            });\n                        }\n                        return [];\n                    }\n                },\n                onClick (e, legendItem, legend) {\n                    legend.chart.toggleDataVisibility(legendItem.index);\n                    legend.chart.update();\n                }\n            }\n        },\n        scales: {\n            r: {\n                type: 'radialLinear',\n                angleLines: {\n                    display: false\n                },\n                beginAtZero: true,\n                grid: {\n                    circular: true\n                },\n                pointLabels: {\n                    display: false\n                },\n                startAngle: 0\n            }\n        }\n    };\n    constructor(chart, datasetIndex){\n        super(chart, datasetIndex);\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n    }\n    getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const chart = this.chart;\n        const labels = chart.data.labels || [];\n        const value = formatNumber(meta._parsed[index].r, chart.options.locale);\n        return {\n            label: labels[index] || '',\n            value\n        };\n    }\n    parseObjectData(meta, data, start, count) {\n        return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n    }\n    update(mode) {\n        const arcs = this._cachedMeta.data;\n        this._updateRadius();\n        this.updateElements(arcs, 0, arcs.length, mode);\n    }\n getMinMax() {\n        const meta = this._cachedMeta;\n        const range = {\n            min: Number.POSITIVE_INFINITY,\n            max: Number.NEGATIVE_INFINITY\n        };\n        meta.data.forEach((element, index)=>{\n            const parsed = this.getParsed(index).r;\n            if (!isNaN(parsed) && this.chart.getDataVisibility(index)) {\n                if (parsed < range.min) {\n                    range.min = parsed;\n                }\n                if (parsed > range.max) {\n                    range.max = parsed;\n                }\n            }\n        });\n        return range;\n    }\n _updateRadius() {\n        const chart = this.chart;\n        const chartArea = chart.chartArea;\n        const opts = chart.options;\n        const minSize = Math.min(chartArea.right - chartArea.left, chartArea.bottom - chartArea.top);\n        const outerRadius = Math.max(minSize / 2, 0);\n        const innerRadius = Math.max(opts.cutoutPercentage ? outerRadius / 100 * opts.cutoutPercentage : 1, 0);\n        const radiusLength = (outerRadius - innerRadius) / chart.getVisibleDatasetCount();\n        this.outerRadius = outerRadius - radiusLength * this.index;\n        this.innerRadius = this.outerRadius - radiusLength;\n    }\n    updateElements(arcs, start, count, mode) {\n        const reset = mode === 'reset';\n        const chart = this.chart;\n        const opts = chart.options;\n        const animationOpts = opts.animation;\n        const scale = this._cachedMeta.rScale;\n        const centerX = scale.xCenter;\n        const centerY = scale.yCenter;\n        const datasetStartAngle = scale.getIndexAngle(0) - 0.5 * PI;\n        let angle = datasetStartAngle;\n        let i;\n        const defaultAngle = 360 / this.countVisibleElements();\n        for(i = 0; i < start; ++i){\n            angle += this._computeAngle(i, mode, defaultAngle);\n        }\n        for(i = start; i < start + count; i++){\n            const arc = arcs[i];\n            let startAngle = angle;\n            let endAngle = angle + this._computeAngle(i, mode, defaultAngle);\n            let outerRadius = chart.getDataVisibility(i) ? scale.getDistanceFromCenterForValue(this.getParsed(i).r) : 0;\n            angle = endAngle;\n            if (reset) {\n                if (animationOpts.animateScale) {\n                    outerRadius = 0;\n                }\n                if (animationOpts.animateRotate) {\n                    startAngle = endAngle = datasetStartAngle;\n                }\n            }\n            const properties = {\n                x: centerX,\n                y: centerY,\n                innerRadius: 0,\n                outerRadius,\n                startAngle,\n                endAngle,\n                options: this.resolveDataElementOptions(i, arc.active ? 'active' : mode)\n            };\n            this.updateElement(arc, i, properties, mode);\n        }\n    }\n    countVisibleElements() {\n        const meta = this._cachedMeta;\n        let count = 0;\n        meta.data.forEach((element, index)=>{\n            if (!isNaN(this.getParsed(index).r) && this.chart.getDataVisibility(index)) {\n                count++;\n            }\n        });\n        return count;\n    }\n _computeAngle(index, mode, defaultAngle) {\n        return this.chart.getDataVisibility(index) ? toRadians(this.resolveDataElementOptions(index, mode).angle || defaultAngle) : 0;\n    }\n}\n\nclass PieController extends DoughnutController {\n    static id = 'pie';\n static defaults = {\n        cutout: 0,\n        rotation: 0,\n        circumference: 360,\n        radius: '100%'\n    };\n}\n\nclass RadarController extends DatasetController {\n    static id = 'radar';\n static defaults = {\n        datasetElementType: 'line',\n        dataElementType: 'point',\n        indexAxis: 'r',\n        showLine: true,\n        elements: {\n            line: {\n                fill: 'start'\n            }\n        }\n    };\n static overrides = {\n        aspectRatio: 1,\n        scales: {\n            r: {\n                type: 'radialLinear'\n            }\n        }\n    };\n getLabelAndValue(index) {\n        const vScale = this._cachedMeta.vScale;\n        const parsed = this.getParsed(index);\n        return {\n            label: vScale.getLabels()[index],\n            value: '' + vScale.getLabelForValue(parsed[vScale.axis])\n        };\n    }\n    parseObjectData(meta, data, start, count) {\n        return _parseObjectDataRadialScale.bind(this)(meta, data, start, count);\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const line = meta.dataset;\n        const points = meta.data || [];\n        const labels = meta.iScale.getLabels();\n        line.points = points;\n        if (mode !== 'resize') {\n            const options = this.resolveDatasetElementOptions(mode);\n            if (!this.options.showLine) {\n                options.borderWidth = 0;\n            }\n            const properties = {\n                _loop: true,\n                _fullLoop: labels.length === points.length,\n                options\n            };\n            this.updateElement(line, undefined, properties, mode);\n        }\n        this.updateElements(points, 0, points.length, mode);\n    }\n    updateElements(points, start, count, mode) {\n        const scale = this._cachedMeta.rScale;\n        const reset = mode === 'reset';\n        for(let i = start; i < start + count; i++){\n            const point = points[i];\n            const options = this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            const pointPosition = scale.getPointPositionForValue(i, this.getParsed(i).r);\n            const x = reset ? scale.xCenter : pointPosition.x;\n            const y = reset ? scale.yCenter : pointPosition.y;\n            const properties = {\n                x,\n                y,\n                angle: pointPosition.angle,\n                skip: isNaN(x) || isNaN(y),\n                options\n            };\n            this.updateElement(point, i, properties, mode);\n        }\n    }\n}\n\nclass ScatterController extends DatasetController {\n    static id = 'scatter';\n static defaults = {\n        datasetElementType: false,\n        dataElementType: 'point',\n        showLine: false,\n        fill: false\n    };\n static overrides = {\n        interaction: {\n            mode: 'point'\n        },\n        scales: {\n            x: {\n                type: 'linear'\n            },\n            y: {\n                type: 'linear'\n            }\n        }\n    };\n getLabelAndValue(index) {\n        const meta = this._cachedMeta;\n        const labels = this.chart.data.labels || [];\n        const { xScale , yScale  } = meta;\n        const parsed = this.getParsed(index);\n        const x = xScale.getLabelForValue(parsed.x);\n        const y = yScale.getLabelForValue(parsed.y);\n        return {\n            label: labels[index] || '',\n            value: '(' + x + ', ' + y + ')'\n        };\n    }\n    update(mode) {\n        const meta = this._cachedMeta;\n        const { data: points = []  } = meta;\n        const animationsDisabled = this.chart._animationsDisabled;\n        let { start , count  } = _getStartAndCountOfVisiblePoints(meta, points, animationsDisabled);\n        this._drawStart = start;\n        this._drawCount = count;\n        if (_scaleRangesChanged(meta)) {\n            start = 0;\n            count = points.length;\n        }\n        if (this.options.showLine) {\n            if (!this.datasetElementType) {\n                this.addElements();\n            }\n            const { dataset: line , _dataset  } = meta;\n            line._chart = this.chart;\n            line._datasetIndex = this.index;\n            line._decimated = !!_dataset._decimated;\n            line.points = points;\n            const options = this.resolveDatasetElementOptions(mode);\n            options.segment = this.options.segment;\n            this.updateElement(line, undefined, {\n                animated: !animationsDisabled,\n                options\n            }, mode);\n        } else if (this.datasetElementType) {\n            delete meta.dataset;\n            this.datasetElementType = false;\n        }\n        this.updateElements(points, start, count, mode);\n    }\n    addElements() {\n        const { showLine  } = this.options;\n        if (!this.datasetElementType && showLine) {\n            this.datasetElementType = this.chart.registry.getElement('line');\n        }\n        super.addElements();\n    }\n    updateElements(points, start, count, mode) {\n        const reset = mode === 'reset';\n        const { iScale , vScale , _stacked , _dataset  } = this._cachedMeta;\n        const firstOpts = this.resolveDataElementOptions(start, mode);\n        const sharedOptions = this.getSharedOptions(firstOpts);\n        const includeOptions = this.includeOptions(mode, sharedOptions);\n        const iAxis = iScale.axis;\n        const vAxis = vScale.axis;\n        const { spanGaps , segment  } = this.options;\n        const maxGapLength = isNumber(spanGaps) ? spanGaps : Number.POSITIVE_INFINITY;\n        const directUpdate = this.chart._animationsDisabled || reset || mode === 'none';\n        let prevParsed = start > 0 && this.getParsed(start - 1);\n        for(let i = start; i < start + count; ++i){\n            const point = points[i];\n            const parsed = this.getParsed(i);\n            const properties = directUpdate ? point : {};\n            const nullData = isNullOrUndef(parsed[vAxis]);\n            const iPixel = properties[iAxis] = iScale.getPixelForValue(parsed[iAxis], i);\n            const vPixel = properties[vAxis] = reset || nullData ? vScale.getBasePixel() : vScale.getPixelForValue(_stacked ? this.applyStack(vScale, parsed, _stacked) : parsed[vAxis], i);\n            properties.skip = isNaN(iPixel) || isNaN(vPixel) || nullData;\n            properties.stop = i > 0 && Math.abs(parsed[iAxis] - prevParsed[iAxis]) > maxGapLength;\n            if (segment) {\n                properties.parsed = parsed;\n                properties.raw = _dataset.data[i];\n            }\n            if (includeOptions) {\n                properties.options = sharedOptions || this.resolveDataElementOptions(i, point.active ? 'active' : mode);\n            }\n            if (!directUpdate) {\n                this.updateElement(point, i, properties, mode);\n            }\n            prevParsed = parsed;\n        }\n        this.updateSharedOptions(sharedOptions, mode, firstOpts);\n    }\n getMaxOverflow() {\n        const meta = this._cachedMeta;\n        const data = meta.data || [];\n        if (!this.options.showLine) {\n            let max = 0;\n            for(let i = data.length - 1; i >= 0; --i){\n                max = Math.max(max, data[i].size(this.resolveDataElementOptions(i)) / 2);\n            }\n            return max > 0 && max;\n        }\n        const dataset = meta.dataset;\n        const border = dataset.options && dataset.options.borderWidth || 0;\n        if (!data.length) {\n            return border;\n        }\n        const firstPoint = data[0].size(this.resolveDataElementOptions(0));\n        const lastPoint = data[data.length - 1].size(this.resolveDataElementOptions(data.length - 1));\n        return Math.max(border, firstPoint, lastPoint) / 2;\n    }\n}\n\nvar controllers = /*#__PURE__*/Object.freeze({\n__proto__: null,\nBarController: BarController,\nBubbleController: BubbleController,\nDoughnutController: DoughnutController,\nLineController: LineController,\nPieController: PieController,\nPolarAreaController: PolarAreaController,\nRadarController: RadarController,\nScatterController: ScatterController\n});\n\n/**\n * @namespace Chart._adapters\n * @since 2.8.0\n * @private\n */ function abstract() {\n    throw new Error('This method is not implemented: Check that a complete date adapter is provided.');\n}\n/**\n * Date adapter (current used by the time scale)\n * @namespace Chart._adapters._date\n * @memberof Chart._adapters\n * @private\n */ class DateAdapterBase {\n    /**\n   * Override default date adapter methods.\n   * Accepts type parameter to define options type.\n   * @example\n   * Chart._adapters._date.override<{myAdapterOption: string}>({\n   *   init() {\n   *     console.log(this.options.myAdapterOption);\n   *   }\n   * })\n   */ static override(members) {\n        Object.assign(DateAdapterBase.prototype, members);\n    }\n    options;\n    constructor(options){\n        this.options = options || {};\n    }\n    // eslint-disable-next-line @typescript-eslint/no-empty-function\n    init() {}\n    formats() {\n        return abstract();\n    }\n    parse() {\n        return abstract();\n    }\n    format() {\n        return abstract();\n    }\n    add() {\n        return abstract();\n    }\n    diff() {\n        return abstract();\n    }\n    startOf() {\n        return abstract();\n    }\n    endOf() {\n        return abstract();\n    }\n}\nvar adapters = {\n    _date: DateAdapterBase\n};\n\nfunction binarySearch(metaset, axis, value, intersect) {\n    const { controller , data , _sorted  } = metaset;\n    const iScale = controller._cachedMeta.iScale;\n    const spanGaps = metaset.dataset ? metaset.dataset.options ? metaset.dataset.options.spanGaps : null : null;\n    if (iScale && axis === iScale.axis && axis !== 'r' && _sorted && data.length) {\n        const lookupMethod = iScale._reversePixels ? _rlookupByKey : _lookupByKey;\n        if (!intersect) {\n            const result = lookupMethod(data, axis, value);\n            if (spanGaps) {\n                const { vScale  } = controller._cachedMeta;\n                const { _parsed  } = metaset;\n                const distanceToDefinedLo = _parsed.slice(0, result.lo + 1).reverse().findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                result.lo -= Math.max(0, distanceToDefinedLo);\n                const distanceToDefinedHi = _parsed.slice(result.hi).findIndex((point)=>!isNullOrUndef(point[vScale.axis]));\n                result.hi += Math.max(0, distanceToDefinedHi);\n            }\n            return result;\n        } else if (controller._sharedOptions) {\n            const el = data[0];\n            const range = typeof el.getRange === 'function' && el.getRange(axis);\n            if (range) {\n                const start = lookupMethod(data, axis, value - range);\n                const end = lookupMethod(data, axis, value + range);\n                return {\n                    lo: start.lo,\n                    hi: end.hi\n                };\n            }\n        }\n    }\n    return {\n        lo: 0,\n        hi: data.length - 1\n    };\n}\n function evaluateInteractionItems(chart, axis, position, handler, intersect) {\n    const metasets = chart.getSortedVisibleDatasetMetas();\n    const value = position[axis];\n    for(let i = 0, ilen = metasets.length; i < ilen; ++i){\n        const { index , data  } = metasets[i];\n        const { lo , hi  } = binarySearch(metasets[i], axis, value, intersect);\n        for(let j = lo; j <= hi; ++j){\n            const element = data[j];\n            if (!element.skip) {\n                handler(element, index, j);\n            }\n        }\n    }\n}\n function getDistanceMetricForAxis(axis) {\n    const useX = axis.indexOf('x') !== -1;\n    const useY = axis.indexOf('y') !== -1;\n    return function(pt1, pt2) {\n        const deltaX = useX ? Math.abs(pt1.x - pt2.x) : 0;\n        const deltaY = useY ? Math.abs(pt1.y - pt2.y) : 0;\n        return Math.sqrt(Math.pow(deltaX, 2) + Math.pow(deltaY, 2));\n    };\n}\n function getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) {\n    const items = [];\n    if (!includeInvisible && !chart.isPointInArea(position)) {\n        return items;\n    }\n    const evaluationFunc = function(element, datasetIndex, index) {\n        if (!includeInvisible && !_isPointInArea(element, chart.chartArea, 0)) {\n            return;\n        }\n        if (element.inRange(position.x, position.y, useFinalPosition)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    };\n    evaluateInteractionItems(chart, axis, position, evaluationFunc, true);\n    return items;\n}\n function getNearestRadialItems(chart, position, axis, useFinalPosition) {\n    let items = [];\n    function evaluationFunc(element, datasetIndex, index) {\n        const { startAngle , endAngle  } = element.getProps([\n            'startAngle',\n            'endAngle'\n        ], useFinalPosition);\n        const { angle  } = getAngleFromPoint(element, {\n            x: position.x,\n            y: position.y\n        });\n        if (_angleBetween(angle, startAngle, endAngle)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    }\n    evaluateInteractionItems(chart, axis, position, evaluationFunc);\n    return items;\n}\n function getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n    let items = [];\n    const distanceMetric = getDistanceMetricForAxis(axis);\n    let minDistance = Number.POSITIVE_INFINITY;\n    function evaluationFunc(element, datasetIndex, index) {\n        const inRange = element.inRange(position.x, position.y, useFinalPosition);\n        if (intersect && !inRange) {\n            return;\n        }\n        const center = element.getCenterPoint(useFinalPosition);\n        const pointInArea = !!includeInvisible || chart.isPointInArea(center);\n        if (!pointInArea && !inRange) {\n            return;\n        }\n        const distance = distanceMetric(position, center);\n        if (distance < minDistance) {\n            items = [\n                {\n                    element,\n                    datasetIndex,\n                    index\n                }\n            ];\n            minDistance = distance;\n        } else if (distance === minDistance) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n        }\n    }\n    evaluateInteractionItems(chart, axis, position, evaluationFunc);\n    return items;\n}\n function getNearestItems(chart, position, axis, intersect, useFinalPosition, includeInvisible) {\n    if (!includeInvisible && !chart.isPointInArea(position)) {\n        return [];\n    }\n    return axis === 'r' && !intersect ? getNearestRadialItems(chart, position, axis, useFinalPosition) : getNearestCartesianItems(chart, position, axis, intersect, useFinalPosition, includeInvisible);\n}\n function getAxisItems(chart, position, axis, intersect, useFinalPosition) {\n    const items = [];\n    const rangeMethod = axis === 'x' ? 'inXRange' : 'inYRange';\n    let intersectsItem = false;\n    evaluateInteractionItems(chart, axis, position, (element, datasetIndex, index)=>{\n        if (element[rangeMethod] && element[rangeMethod](position[axis], useFinalPosition)) {\n            items.push({\n                element,\n                datasetIndex,\n                index\n            });\n            intersectsItem = intersectsItem || element.inRange(position.x, position.y, useFinalPosition);\n        }\n    });\n    if (intersect && !intersectsItem) {\n        return [];\n    }\n    return items;\n}\n var Interaction = {\n    evaluateInteractionItems,\n    modes: {\n index (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'x';\n            const includeInvisible = options.includeInvisible || false;\n            const items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n            const elements = [];\n            if (!items.length) {\n                return [];\n            }\n            chart.getSortedVisibleDatasetMetas().forEach((meta)=>{\n                const index = items[0].index;\n                const element = meta.data[index];\n                if (element && !element.skip) {\n                    elements.push({\n                        element,\n                        datasetIndex: meta.index,\n                        index\n                    });\n                }\n            });\n            return elements;\n        },\n dataset (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            let items = options.intersect ? getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible) : getNearestItems(chart, position, axis, false, useFinalPosition, includeInvisible);\n            if (items.length > 0) {\n                const datasetIndex = items[0].datasetIndex;\n                const data = chart.getDatasetMeta(datasetIndex).data;\n                items = [];\n                for(let i = 0; i < data.length; ++i){\n                    items.push({\n                        element: data[i],\n                        datasetIndex,\n                        index: i\n                    });\n                }\n            }\n            return items;\n        },\n point (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            return getIntersectItems(chart, position, axis, useFinalPosition, includeInvisible);\n        },\n nearest (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            const axis = options.axis || 'xy';\n            const includeInvisible = options.includeInvisible || false;\n            return getNearestItems(chart, position, axis, options.intersect, useFinalPosition, includeInvisible);\n        },\n x (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            return getAxisItems(chart, position, 'x', options.intersect, useFinalPosition);\n        },\n y (chart, e, options, useFinalPosition) {\n            const position = getRelativePosition(e, chart);\n            return getAxisItems(chart, position, 'y', options.intersect, useFinalPosition);\n        }\n    }\n};\n\nconst STATIC_POSITIONS = [\n    'left',\n    'top',\n    'right',\n    'bottom'\n];\nfunction filterByPosition(array, position) {\n    return array.filter((v)=>v.pos === position);\n}\nfunction filterDynamicPositionByAxis(array, axis) {\n    return array.filter((v)=>STATIC_POSITIONS.indexOf(v.pos) === -1 && v.box.axis === axis);\n}\nfunction sortByWeight(array, reverse) {\n    return array.sort((a, b)=>{\n        const v0 = reverse ? b : a;\n        const v1 = reverse ? a : b;\n        return v0.weight === v1.weight ? v0.index - v1.index : v0.weight - v1.weight;\n    });\n}\nfunction wrapBoxes(boxes) {\n    const layoutBoxes = [];\n    let i, ilen, box, pos, stack, stackWeight;\n    for(i = 0, ilen = (boxes || []).length; i < ilen; ++i){\n        box = boxes[i];\n        ({ position: pos , options: { stack , stackWeight =1  }  } = box);\n        layoutBoxes.push({\n            index: i,\n            box,\n            pos,\n            horizontal: box.isHorizontal(),\n            weight: box.weight,\n            stack: stack && pos + stack,\n            stackWeight\n        });\n    }\n    return layoutBoxes;\n}\nfunction buildStacks(layouts) {\n    const stacks = {};\n    for (const wrap of layouts){\n        const { stack , pos , stackWeight  } = wrap;\n        if (!stack || !STATIC_POSITIONS.includes(pos)) {\n            continue;\n        }\n        const _stack = stacks[stack] || (stacks[stack] = {\n            count: 0,\n            placed: 0,\n            weight: 0,\n            size: 0\n        });\n        _stack.count++;\n        _stack.weight += stackWeight;\n    }\n    return stacks;\n}\n function setLayoutDims(layouts, params) {\n    const stacks = buildStacks(layouts);\n    const { vBoxMaxWidth , hBoxMaxHeight  } = params;\n    let i, ilen, layout;\n    for(i = 0, ilen = layouts.length; i < ilen; ++i){\n        layout = layouts[i];\n        const { fullSize  } = layout.box;\n        const stack = stacks[layout.stack];\n        const factor = stack && layout.stackWeight / stack.weight;\n        if (layout.horizontal) {\n            layout.width = factor ? factor * vBoxMaxWidth : fullSize && params.availableWidth;\n            layout.height = hBoxMaxHeight;\n        } else {\n            layout.width = vBoxMaxWidth;\n            layout.height = factor ? factor * hBoxMaxHeight : fullSize && params.availableHeight;\n        }\n    }\n    return stacks;\n}\nfunction buildLayoutBoxes(boxes) {\n    const layoutBoxes = wrapBoxes(boxes);\n    const fullSize = sortByWeight(layoutBoxes.filter((wrap)=>wrap.box.fullSize), true);\n    const left = sortByWeight(filterByPosition(layoutBoxes, 'left'), true);\n    const right = sortByWeight(filterByPosition(layoutBoxes, 'right'));\n    const top = sortByWeight(filterByPosition(layoutBoxes, 'top'), true);\n    const bottom = sortByWeight(filterByPosition(layoutBoxes, 'bottom'));\n    const centerHorizontal = filterDynamicPositionByAxis(layoutBoxes, 'x');\n    const centerVertical = filterDynamicPositionByAxis(layoutBoxes, 'y');\n    return {\n        fullSize,\n        leftAndTop: left.concat(top),\n        rightAndBottom: right.concat(centerVertical).concat(bottom).concat(centerHorizontal),\n        chartArea: filterByPosition(layoutBoxes, 'chartArea'),\n        vertical: left.concat(right).concat(centerVertical),\n        horizontal: top.concat(bottom).concat(centerHorizontal)\n    };\n}\nfunction getCombinedMax(maxPadding, chartArea, a, b) {\n    return Math.max(maxPadding[a], chartArea[a]) + Math.max(maxPadding[b], chartArea[b]);\n}\nfunction updateMaxPadding(maxPadding, boxPadding) {\n    maxPadding.top = Math.max(maxPadding.top, boxPadding.top);\n    maxPadding.left = Math.max(maxPadding.left, boxPadding.left);\n    maxPadding.bottom = Math.max(maxPadding.bottom, boxPadding.bottom);\n    maxPadding.right = Math.max(maxPadding.right, boxPadding.right);\n}\nfunction updateDims(chartArea, params, layout, stacks) {\n    const { pos , box  } = layout;\n    const maxPadding = chartArea.maxPadding;\n    if (!isObject(pos)) {\n        if (layout.size) {\n            chartArea[pos] -= layout.size;\n        }\n        const stack = stacks[layout.stack] || {\n            size: 0,\n            count: 1\n        };\n        stack.size = Math.max(stack.size, layout.horizontal ? box.height : box.width);\n        layout.size = stack.size / stack.count;\n        chartArea[pos] += layout.size;\n    }\n    if (box.getPadding) {\n        updateMaxPadding(maxPadding, box.getPadding());\n    }\n    const newWidth = Math.max(0, params.outerWidth - getCombinedMax(maxPadding, chartArea, 'left', 'right'));\n    const newHeight = Math.max(0, params.outerHeight - getCombinedMax(maxPadding, chartArea, 'top', 'bottom'));\n    const widthChanged = newWidth !== chartArea.w;\n    const heightChanged = newHeight !== chartArea.h;\n    chartArea.w = newWidth;\n    chartArea.h = newHeight;\n    return layout.horizontal ? {\n        same: widthChanged,\n        other: heightChanged\n    } : {\n        same: heightChanged,\n        other: widthChanged\n    };\n}\nfunction handleMaxPadding(chartArea) {\n    const maxPadding = chartArea.maxPadding;\n    function updatePos(pos) {\n        const change = Math.max(maxPadding[pos] - chartArea[pos], 0);\n        chartArea[pos] += change;\n        return change;\n    }\n    chartArea.y += updatePos('top');\n    chartArea.x += updatePos('left');\n    updatePos('right');\n    updatePos('bottom');\n}\nfunction getMargins(horizontal, chartArea) {\n    const maxPadding = chartArea.maxPadding;\n    function marginForPositions(positions) {\n        const margin = {\n            left: 0,\n            top: 0,\n            right: 0,\n            bottom: 0\n        };\n        positions.forEach((pos)=>{\n            margin[pos] = Math.max(chartArea[pos], maxPadding[pos]);\n        });\n        return margin;\n    }\n    return horizontal ? marginForPositions([\n        'left',\n        'right'\n    ]) : marginForPositions([\n        'top',\n        'bottom'\n    ]);\n}\nfunction fitBoxes(boxes, chartArea, params, stacks) {\n    const refitBoxes = [];\n    let i, ilen, layout, box, refit, changed;\n    for(i = 0, ilen = boxes.length, refit = 0; i < ilen; ++i){\n        layout = boxes[i];\n        box = layout.box;\n        box.update(layout.width || chartArea.w, layout.height || chartArea.h, getMargins(layout.horizontal, chartArea));\n        const { same , other  } = updateDims(chartArea, params, layout, stacks);\n        refit |= same && refitBoxes.length;\n        changed = changed || other;\n        if (!box.fullSize) {\n            refitBoxes.push(layout);\n        }\n    }\n    return refit && fitBoxes(refitBoxes, chartArea, params, stacks) || changed;\n}\nfunction setBoxDims(box, left, top, width, height) {\n    box.top = top;\n    box.left = left;\n    box.right = left + width;\n    box.bottom = top + height;\n    box.width = width;\n    box.height = height;\n}\nfunction placeBoxes(boxes, chartArea, params, stacks) {\n    const userPadding = params.padding;\n    let { x , y  } = chartArea;\n    for (const layout of boxes){\n        const box = layout.box;\n        const stack = stacks[layout.stack] || {\n            count: 1,\n            placed: 0,\n            weight: 1\n        };\n        const weight = layout.stackWeight / stack.weight || 1;\n        if (layout.horizontal) {\n            const width = chartArea.w * weight;\n            const height = stack.size || box.height;\n            if (defined(stack.start)) {\n                y = stack.start;\n            }\n            if (box.fullSize) {\n                setBoxDims(box, userPadding.left, y, params.outerWidth - userPadding.right - userPadding.left, height);\n            } else {\n                setBoxDims(box, chartArea.left + stack.placed, y, width, height);\n            }\n            stack.start = y;\n            stack.placed += width;\n            y = box.bottom;\n        } else {\n            const height = chartArea.h * weight;\n            const width = stack.size || box.width;\n            if (defined(stack.start)) {\n                x = stack.start;\n            }\n            if (box.fullSize) {\n                setBoxDims(box, x, userPadding.top, width, params.outerHeight - userPadding.bottom - userPadding.top);\n            } else {\n                setBoxDims(box, x, chartArea.top + stack.placed, width, height);\n            }\n            stack.start = x;\n            stack.placed += height;\n            x = box.right;\n        }\n    }\n    chartArea.x = x;\n    chartArea.y = y;\n}\nvar layouts = {\n addBox (chart, item) {\n        if (!chart.boxes) {\n            chart.boxes = [];\n        }\n        item.fullSize = item.fullSize || false;\n        item.position = item.position || 'top';\n        item.weight = item.weight || 0;\n        item._layers = item._layers || function() {\n            return [\n                {\n                    z: 0,\n                    draw (chartArea) {\n                        item.draw(chartArea);\n                    }\n                }\n            ];\n        };\n        chart.boxes.push(item);\n    },\n removeBox (chart, layoutItem) {\n        const index = chart.boxes ? chart.boxes.indexOf(layoutItem) : -1;\n        if (index !== -1) {\n            chart.boxes.splice(index, 1);\n        }\n    },\n configure (chart, item, options) {\n        item.fullSize = options.fullSize;\n        item.position = options.position;\n        item.weight = options.weight;\n    },\n update (chart, width, height, minPadding) {\n        if (!chart) {\n            return;\n        }\n        const padding = toPadding(chart.options.layout.padding);\n        const availableWidth = Math.max(width - padding.width, 0);\n        const availableHeight = Math.max(height - padding.height, 0);\n        const boxes = buildLayoutBoxes(chart.boxes);\n        const verticalBoxes = boxes.vertical;\n        const horizontalBoxes = boxes.horizontal;\n        each(chart.boxes, (box)=>{\n            if (typeof box.beforeLayout === 'function') {\n                box.beforeLayout();\n            }\n        });\n        const visibleVerticalBoxCount = verticalBoxes.reduce((total, wrap)=>wrap.box.options && wrap.box.options.display === false ? total : total + 1, 0) || 1;\n        const params = Object.freeze({\n            outerWidth: width,\n            outerHeight: height,\n            padding,\n            availableWidth,\n            availableHeight,\n            vBoxMaxWidth: availableWidth / 2 / visibleVerticalBoxCount,\n            hBoxMaxHeight: availableHeight / 2\n        });\n        const maxPadding = Object.assign({}, padding);\n        updateMaxPadding(maxPadding, toPadding(minPadding));\n        const chartArea = Object.assign({\n            maxPadding,\n            w: availableWidth,\n            h: availableHeight,\n            x: padding.left,\n            y: padding.top\n        }, padding);\n        const stacks = setLayoutDims(verticalBoxes.concat(horizontalBoxes), params);\n        fitBoxes(boxes.fullSize, chartArea, params, stacks);\n        fitBoxes(verticalBoxes, chartArea, params, stacks);\n        if (fitBoxes(horizontalBoxes, chartArea, params, stacks)) {\n            fitBoxes(verticalBoxes, chartArea, params, stacks);\n        }\n        handleMaxPadding(chartArea);\n        placeBoxes(boxes.leftAndTop, chartArea, params, stacks);\n        chartArea.x += chartArea.w;\n        chartArea.y += chartArea.h;\n        placeBoxes(boxes.rightAndBottom, chartArea, params, stacks);\n        chart.chartArea = {\n            left: chartArea.left,\n            top: chartArea.top,\n            right: chartArea.left + chartArea.w,\n            bottom: chartArea.top + chartArea.h,\n            height: chartArea.h,\n            width: chartArea.w\n        };\n        each(boxes.chartArea, (layout)=>{\n            const box = layout.box;\n            Object.assign(box, chart.chartArea);\n            box.update(chartArea.w, chartArea.h, {\n                left: 0,\n                top: 0,\n                right: 0,\n                bottom: 0\n            });\n        });\n    }\n};\n\nclass BasePlatform {\n acquireContext(canvas, aspectRatio) {}\n releaseContext(context) {\n        return false;\n    }\n addEventListener(chart, type, listener) {}\n removeEventListener(chart, type, listener) {}\n getDevicePixelRatio() {\n        return 1;\n    }\n getMaximumSize(element, width, height, aspectRatio) {\n        width = Math.max(0, width || element.width);\n        height = height || element.height;\n        return {\n            width,\n            height: Math.max(0, aspectRatio ? Math.floor(width / aspectRatio) : height)\n        };\n    }\n isAttached(canvas) {\n        return true;\n    }\n updateConfig(config) {\n    }\n}\n\nclass BasicPlatform extends BasePlatform {\n    acquireContext(item) {\n        return item && item.getContext && item.getContext('2d') || null;\n    }\n    updateConfig(config) {\n        config.options.animation = false;\n    }\n}\n\nconst EXPANDO_KEY = '$chartjs';\n const EVENT_TYPES = {\n    touchstart: 'mousedown',\n    touchmove: 'mousemove',\n    touchend: 'mouseup',\n    pointerenter: 'mouseenter',\n    pointerdown: 'mousedown',\n    pointermove: 'mousemove',\n    pointerup: 'mouseup',\n    pointerleave: 'mouseout',\n    pointerout: 'mouseout'\n};\nconst isNullOrEmpty = (value)=>value === null || value === '';\n function initCanvas(canvas, aspectRatio) {\n    const style = canvas.style;\n    const renderHeight = canvas.getAttribute('height');\n    const renderWidth = canvas.getAttribute('width');\n    canvas[EXPANDO_KEY] = {\n        initial: {\n            height: renderHeight,\n            width: renderWidth,\n            style: {\n                display: style.display,\n                height: style.height,\n                width: style.width\n            }\n        }\n    };\n    style.display = style.display || 'block';\n    style.boxSizing = style.boxSizing || 'border-box';\n    if (isNullOrEmpty(renderWidth)) {\n        const displayWidth = readUsedSize(canvas, 'width');\n        if (displayWidth !== undefined) {\n            canvas.width = displayWidth;\n        }\n    }\n    if (isNullOrEmpty(renderHeight)) {\n        if (canvas.style.height === '') {\n            canvas.height = canvas.width / (aspectRatio || 2);\n        } else {\n            const displayHeight = readUsedSize(canvas, 'height');\n            if (displayHeight !== undefined) {\n                canvas.height = displayHeight;\n            }\n        }\n    }\n    return canvas;\n}\nconst eventListenerOptions = supportsEventListenerOptions ? {\n    passive: true\n} : false;\nfunction addListener(node, type, listener) {\n    if (node) {\n        node.addEventListener(type, listener, eventListenerOptions);\n    }\n}\nfunction removeListener(chart, type, listener) {\n    if (chart && chart.canvas) {\n        chart.canvas.removeEventListener(type, listener, eventListenerOptions);\n    }\n}\nfunction fromNativeEvent(event, chart) {\n    const type = EVENT_TYPES[event.type] || event.type;\n    const { x , y  } = getRelativePosition(event, chart);\n    return {\n        type,\n        chart,\n        native: event,\n        x: x !== undefined ? x : null,\n        y: y !== undefined ? y : null\n    };\n}\nfunction nodeListContains(nodeList, canvas) {\n    for (const node of nodeList){\n        if (node === canvas || node.contains(canvas)) {\n            return true;\n        }\n    }\n}\nfunction createAttachObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const observer = new MutationObserver((entries)=>{\n        let trigger = false;\n        for (const entry of entries){\n            trigger = trigger || nodeListContains(entry.addedNodes, canvas);\n            trigger = trigger && !nodeListContains(entry.removedNodes, canvas);\n        }\n        if (trigger) {\n            listener();\n        }\n    });\n    observer.observe(document, {\n        childList: true,\n        subtree: true\n    });\n    return observer;\n}\nfunction createDetachObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const observer = new MutationObserver((entries)=>{\n        let trigger = false;\n        for (const entry of entries){\n            trigger = trigger || nodeListContains(entry.removedNodes, canvas);\n            trigger = trigger && !nodeListContains(entry.addedNodes, canvas);\n        }\n        if (trigger) {\n            listener();\n        }\n    });\n    observer.observe(document, {\n        childList: true,\n        subtree: true\n    });\n    return observer;\n}\nconst drpListeningCharts = new Map();\nlet oldDevicePixelRatio = 0;\nfunction onWindowResize() {\n    const dpr = window.devicePixelRatio;\n    if (dpr === oldDevicePixelRatio) {\n        return;\n    }\n    oldDevicePixelRatio = dpr;\n    drpListeningCharts.forEach((resize, chart)=>{\n        if (chart.currentDevicePixelRatio !== dpr) {\n            resize();\n        }\n    });\n}\nfunction listenDevicePixelRatioChanges(chart, resize) {\n    if (!drpListeningCharts.size) {\n        window.addEventListener('resize', onWindowResize);\n    }\n    drpListeningCharts.set(chart, resize);\n}\nfunction unlistenDevicePixelRatioChanges(chart) {\n    drpListeningCharts.delete(chart);\n    if (!drpListeningCharts.size) {\n        window.removeEventListener('resize', onWindowResize);\n    }\n}\nfunction createResizeObserver(chart, type, listener) {\n    const canvas = chart.canvas;\n    const container = canvas && _getParentNode(canvas);\n    if (!container) {\n        return;\n    }\n    const resize = throttled((width, height)=>{\n        const w = container.clientWidth;\n        listener(width, height);\n        if (w < container.clientWidth) {\n            listener();\n        }\n    }, window);\n    const observer = new ResizeObserver((entries)=>{\n        const entry = entries[0];\n        const width = entry.contentRect.width;\n        const height = entry.contentRect.height;\n        if (width === 0 && height === 0) {\n            return;\n        }\n        resize(width, height);\n    });\n    observer.observe(container);\n    listenDevicePixelRatioChanges(chart, resize);\n    return observer;\n}\nfunction releaseObserver(chart, type, observer) {\n    if (observer) {\n        observer.disconnect();\n    }\n    if (type === 'resize') {\n        unlistenDevicePixelRatioChanges(chart);\n    }\n}\nfunction createProxyAndListen(chart, type, listener) {\n    const canvas = chart.canvas;\n    const proxy = throttled((event)=>{\n        if (chart.ctx !== null) {\n            listener(fromNativeEvent(event, chart));\n        }\n    }, chart);\n    addListener(canvas, type, proxy);\n    return proxy;\n}\n class DomPlatform extends BasePlatform {\n acquireContext(canvas, aspectRatio) {\n        const context = canvas && canvas.getContext && canvas.getContext('2d');\n        if (context && context.canvas === canvas) {\n            initCanvas(canvas, aspectRatio);\n            return context;\n        }\n        return null;\n    }\n releaseContext(context) {\n        const canvas = context.canvas;\n        if (!canvas[EXPANDO_KEY]) {\n            return false;\n        }\n        const initial = canvas[EXPANDO_KEY].initial;\n        [\n            'height',\n            'width'\n        ].forEach((prop)=>{\n            const value = initial[prop];\n            if (isNullOrUndef(value)) {\n                canvas.removeAttribute(prop);\n            } else {\n                canvas.setAttribute(prop, value);\n            }\n        });\n        const style = initial.style || {};\n        Object.keys(style).forEach((key)=>{\n            canvas.style[key] = style[key];\n        });\n        canvas.width = canvas.width;\n        delete canvas[EXPANDO_KEY];\n        return true;\n    }\n addEventListener(chart, type, listener) {\n        this.removeEventListener(chart, type);\n        const proxies = chart.$proxies || (chart.$proxies = {});\n        const handlers = {\n            attach: createAttachObserver,\n            detach: createDetachObserver,\n            resize: createResizeObserver\n        };\n        const handler = handlers[type] || createProxyAndListen;\n        proxies[type] = handler(chart, type, listener);\n    }\n removeEventListener(chart, type) {\n        const proxies = chart.$proxies || (chart.$proxies = {});\n        const proxy = proxies[type];\n        if (!proxy) {\n            return;\n        }\n        const handlers = {\n            attach: releaseObserver,\n            detach: releaseObserver,\n            resize: releaseObserver\n        };\n        const handler = handlers[type] || removeListener;\n        handler(chart, type, proxy);\n        proxies[type] = undefined;\n    }\n    getDevicePixelRatio() {\n        return window.devicePixelRatio;\n    }\n getMaximumSize(canvas, width, height, aspectRatio) {\n        return getMaximumSize(canvas, width, height, aspectRatio);\n    }\n isAttached(canvas) {\n        const container = canvas && _getParentNode(canvas);\n        return !!(container && container.isConnected);\n    }\n}\n\nfunction _detectPlatform(canvas) {\n    if (!_isDomSupported() || typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n        return BasicPlatform;\n    }\n    return DomPlatform;\n}\n\nclass Element {\n    static defaults = {};\n    static defaultRoutes = undefined;\n    x;\n    y;\n    active = false;\n    options;\n    $animations;\n    tooltipPosition(useFinalPosition) {\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return {\n            x,\n            y\n        };\n    }\n    hasValue() {\n        return isNumber(this.x) && isNumber(this.y);\n    }\n    getProps(props, final) {\n        const anims = this.$animations;\n        if (!final || !anims) {\n            // let's not create an object, if not needed\n            return this;\n        }\n        const ret = {};\n        props.forEach((prop)=>{\n            ret[prop] = anims[prop] && anims[prop].active() ? anims[prop]._to : this[prop];\n        });\n        return ret;\n    }\n}\n\nfunction autoSkip(scale, ticks) {\n    const tickOpts = scale.options.ticks;\n    const determinedMaxTicks = determineMaxTicks(scale);\n    const ticksLimit = Math.min(tickOpts.maxTicksLimit || determinedMaxTicks, determinedMaxTicks);\n    const majorIndices = tickOpts.major.enabled ? getMajorIndices(ticks) : [];\n    const numMajorIndices = majorIndices.length;\n    const first = majorIndices[0];\n    const last = majorIndices[numMajorIndices - 1];\n    const newTicks = [];\n    if (numMajorIndices > ticksLimit) {\n        skipMajors(ticks, newTicks, majorIndices, numMajorIndices / ticksLimit);\n        return newTicks;\n    }\n    const spacing = calculateSpacing(majorIndices, ticks, ticksLimit);\n    if (numMajorIndices > 0) {\n        let i, ilen;\n        const avgMajorSpacing = numMajorIndices > 1 ? Math.round((last - first) / (numMajorIndices - 1)) : null;\n        skip(ticks, newTicks, spacing, isNullOrUndef(avgMajorSpacing) ? 0 : first - avgMajorSpacing, first);\n        for(i = 0, ilen = numMajorIndices - 1; i < ilen; i++){\n            skip(ticks, newTicks, spacing, majorIndices[i], majorIndices[i + 1]);\n        }\n        skip(ticks, newTicks, spacing, last, isNullOrUndef(avgMajorSpacing) ? ticks.length : last + avgMajorSpacing);\n        return newTicks;\n    }\n    skip(ticks, newTicks, spacing);\n    return newTicks;\n}\nfunction determineMaxTicks(scale) {\n    const offset = scale.options.offset;\n    const tickLength = scale._tickSize();\n    const maxScale = scale._length / tickLength + (offset ? 0 : 1);\n    const maxChart = scale._maxLength / tickLength;\n    return Math.floor(Math.min(maxScale, maxChart));\n}\n function calculateSpacing(majorIndices, ticks, ticksLimit) {\n    const evenMajorSpacing = getEvenSpacing(majorIndices);\n    const spacing = ticks.length / ticksLimit;\n    if (!evenMajorSpacing) {\n        return Math.max(spacing, 1);\n    }\n    const factors = _factorize(evenMajorSpacing);\n    for(let i = 0, ilen = factors.length - 1; i < ilen; i++){\n        const factor = factors[i];\n        if (factor > spacing) {\n            return factor;\n        }\n    }\n    return Math.max(spacing, 1);\n}\n function getMajorIndices(ticks) {\n    const result = [];\n    let i, ilen;\n    for(i = 0, ilen = ticks.length; i < ilen; i++){\n        if (ticks[i].major) {\n            result.push(i);\n        }\n    }\n    return result;\n}\n function skipMajors(ticks, newTicks, majorIndices, spacing) {\n    let count = 0;\n    let next = majorIndices[0];\n    let i;\n    spacing = Math.ceil(spacing);\n    for(i = 0; i < ticks.length; i++){\n        if (i === next) {\n            newTicks.push(ticks[i]);\n            count++;\n            next = majorIndices[count * spacing];\n        }\n    }\n}\n function skip(ticks, newTicks, spacing, majorStart, majorEnd) {\n    const start = valueOrDefault(majorStart, 0);\n    const end = Math.min(valueOrDefault(majorEnd, ticks.length), ticks.length);\n    let count = 0;\n    let length, i, next;\n    spacing = Math.ceil(spacing);\n    if (majorEnd) {\n        length = majorEnd - majorStart;\n        spacing = length / Math.floor(length / spacing);\n    }\n    next = start;\n    while(next < 0){\n        count++;\n        next = Math.round(start + count * spacing);\n    }\n    for(i = Math.max(start, 0); i < end; i++){\n        if (i === next) {\n            newTicks.push(ticks[i]);\n            count++;\n            next = Math.round(start + count * spacing);\n        }\n    }\n}\n function getEvenSpacing(arr) {\n    const len = arr.length;\n    let i, diff;\n    if (len < 2) {\n        return false;\n    }\n    for(diff = arr[0], i = 1; i < len; ++i){\n        if (arr[i] - arr[i - 1] !== diff) {\n            return false;\n        }\n    }\n    return diff;\n}\n\nconst reverseAlign = (align)=>align === 'left' ? 'right' : align === 'right' ? 'left' : align;\nconst offsetFromEdge = (scale, edge, offset)=>edge === 'top' || edge === 'left' ? scale[edge] + offset : scale[edge] - offset;\nconst getTicksLimit = (ticksLength, maxTicksLimit)=>Math.min(maxTicksLimit || ticksLength, ticksLength);\n function sample(arr, numItems) {\n    const result = [];\n    const increment = arr.length / numItems;\n    const len = arr.length;\n    let i = 0;\n    for(; i < len; i += increment){\n        result.push(arr[Math.floor(i)]);\n    }\n    return result;\n}\n function getPixelForGridLine(scale, index, offsetGridLines) {\n    const length = scale.ticks.length;\n    const validIndex = Math.min(index, length - 1);\n    const start = scale._startPixel;\n    const end = scale._endPixel;\n    const epsilon = 1e-6;\n    let lineValue = scale.getPixelForTick(validIndex);\n    let offset;\n    if (offsetGridLines) {\n        if (length === 1) {\n            offset = Math.max(lineValue - start, end - lineValue);\n        } else if (index === 0) {\n            offset = (scale.getPixelForTick(1) - lineValue) / 2;\n        } else {\n            offset = (lineValue - scale.getPixelForTick(validIndex - 1)) / 2;\n        }\n        lineValue += validIndex < index ? offset : -offset;\n        if (lineValue < start - epsilon || lineValue > end + epsilon) {\n            return;\n        }\n    }\n    return lineValue;\n}\n function garbageCollect(caches, length) {\n    each(caches, (cache)=>{\n        const gc = cache.gc;\n        const gcLen = gc.length / 2;\n        let i;\n        if (gcLen > length) {\n            for(i = 0; i < gcLen; ++i){\n                delete cache.data[gc[i]];\n            }\n            gc.splice(0, gcLen);\n        }\n    });\n}\n function getTickMarkLength(options) {\n    return options.drawTicks ? options.tickLength : 0;\n}\n function getTitleHeight(options, fallback) {\n    if (!options.display) {\n        return 0;\n    }\n    const font = toFont(options.font, fallback);\n    const padding = toPadding(options.padding);\n    const lines = isArray(options.text) ? options.text.length : 1;\n    return lines * font.lineHeight + padding.height;\n}\nfunction createScaleContext(parent, scale) {\n    return createContext(parent, {\n        scale,\n        type: 'scale'\n    });\n}\nfunction createTickContext(parent, index, tick) {\n    return createContext(parent, {\n        tick,\n        index,\n        type: 'tick'\n    });\n}\nfunction titleAlign(align, position, reverse) {\n     let ret = _toLeftRightCenter(align);\n    if (reverse && position !== 'right' || !reverse && position === 'right') {\n        ret = reverseAlign(ret);\n    }\n    return ret;\n}\nfunction titleArgs(scale, offset, position, align) {\n    const { top , left , bottom , right , chart  } = scale;\n    const { chartArea , scales  } = chart;\n    let rotation = 0;\n    let maxWidth, titleX, titleY;\n    const height = bottom - top;\n    const width = right - left;\n    if (scale.isHorizontal()) {\n        titleX = _alignStartEnd(align, left, right);\n        if (isObject(position)) {\n            const positionAxisID = Object.keys(position)[0];\n            const value = position[positionAxisID];\n            titleY = scales[positionAxisID].getPixelForValue(value) + height - offset;\n        } else if (position === 'center') {\n            titleY = (chartArea.bottom + chartArea.top) / 2 + height - offset;\n        } else {\n            titleY = offsetFromEdge(scale, position, offset);\n        }\n        maxWidth = right - left;\n    } else {\n        if (isObject(position)) {\n            const positionAxisID = Object.keys(position)[0];\n            const value = position[positionAxisID];\n            titleX = scales[positionAxisID].getPixelForValue(value) - width + offset;\n        } else if (position === 'center') {\n            titleX = (chartArea.left + chartArea.right) / 2 - width + offset;\n        } else {\n            titleX = offsetFromEdge(scale, position, offset);\n        }\n        titleY = _alignStartEnd(align, bottom, top);\n        rotation = position === 'left' ? -HALF_PI : HALF_PI;\n    }\n    return {\n        titleX,\n        titleY,\n        maxWidth,\n        rotation\n    };\n}\nclass Scale extends Element {\n    constructor(cfg){\n        super();\n         this.id = cfg.id;\n         this.type = cfg.type;\n         this.options = undefined;\n         this.ctx = cfg.ctx;\n         this.chart = cfg.chart;\n         this.top = undefined;\n         this.bottom = undefined;\n         this.left = undefined;\n         this.right = undefined;\n         this.width = undefined;\n         this.height = undefined;\n        this._margins = {\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0\n        };\n         this.maxWidth = undefined;\n         this.maxHeight = undefined;\n         this.paddingTop = undefined;\n         this.paddingBottom = undefined;\n         this.paddingLeft = undefined;\n         this.paddingRight = undefined;\n         this.axis = undefined;\n         this.labelRotation = undefined;\n        this.min = undefined;\n        this.max = undefined;\n        this._range = undefined;\n         this.ticks = [];\n         this._gridLineItems = null;\n         this._labelItems = null;\n         this._labelSizes = null;\n        this._length = 0;\n        this._maxLength = 0;\n        this._longestTextCache = {};\n         this._startPixel = undefined;\n         this._endPixel = undefined;\n        this._reversePixels = false;\n        this._userMax = undefined;\n        this._userMin = undefined;\n        this._suggestedMax = undefined;\n        this._suggestedMin = undefined;\n        this._ticksLength = 0;\n        this._borderValue = 0;\n        this._cache = {};\n        this._dataLimitsCached = false;\n        this.$context = undefined;\n    }\n init(options) {\n        this.options = options.setContext(this.getContext());\n        this.axis = options.axis;\n        this._userMin = this.parse(options.min);\n        this._userMax = this.parse(options.max);\n        this._suggestedMin = this.parse(options.suggestedMin);\n        this._suggestedMax = this.parse(options.suggestedMax);\n    }\n parse(raw, index) {\n        return raw;\n    }\n getUserBounds() {\n        let { _userMin , _userMax , _suggestedMin , _suggestedMax  } = this;\n        _userMin = finiteOrDefault(_userMin, Number.POSITIVE_INFINITY);\n        _userMax = finiteOrDefault(_userMax, Number.NEGATIVE_INFINITY);\n        _suggestedMin = finiteOrDefault(_suggestedMin, Number.POSITIVE_INFINITY);\n        _suggestedMax = finiteOrDefault(_suggestedMax, Number.NEGATIVE_INFINITY);\n        return {\n            min: finiteOrDefault(_userMin, _suggestedMin),\n            max: finiteOrDefault(_userMax, _suggestedMax),\n            minDefined: isNumberFinite(_userMin),\n            maxDefined: isNumberFinite(_userMax)\n        };\n    }\n getMinMax(canStack) {\n        let { min , max , minDefined , maxDefined  } = this.getUserBounds();\n        let range;\n        if (minDefined && maxDefined) {\n            return {\n                min,\n                max\n            };\n        }\n        const metas = this.getMatchingVisibleMetas();\n        for(let i = 0, ilen = metas.length; i < ilen; ++i){\n            range = metas[i].controller.getMinMax(this, canStack);\n            if (!minDefined) {\n                min = Math.min(min, range.min);\n            }\n            if (!maxDefined) {\n                max = Math.max(max, range.max);\n            }\n        }\n        min = maxDefined && min > max ? max : min;\n        max = minDefined && min > max ? min : max;\n        return {\n            min: finiteOrDefault(min, finiteOrDefault(max, min)),\n            max: finiteOrDefault(max, finiteOrDefault(min, max))\n        };\n    }\n getPadding() {\n        return {\n            left: this.paddingLeft || 0,\n            top: this.paddingTop || 0,\n            right: this.paddingRight || 0,\n            bottom: this.paddingBottom || 0\n        };\n    }\n getTicks() {\n        return this.ticks;\n    }\n getLabels() {\n        const data = this.chart.data;\n        return this.options.labels || (this.isHorizontal() ? data.xLabels : data.yLabels) || data.labels || [];\n    }\n getLabelItems(chartArea = this.chart.chartArea) {\n        const items = this._labelItems || (this._labelItems = this._computeLabelItems(chartArea));\n        return items;\n    }\n    beforeLayout() {\n        this._cache = {};\n        this._dataLimitsCached = false;\n    }\n    beforeUpdate() {\n        callback(this.options.beforeUpdate, [\n            this\n        ]);\n    }\n update(maxWidth, maxHeight, margins) {\n        const { beginAtZero , grace , ticks: tickOpts  } = this.options;\n        const sampleSize = tickOpts.sampleSize;\n        this.beforeUpdate();\n        this.maxWidth = maxWidth;\n        this.maxHeight = maxHeight;\n        this._margins = margins = Object.assign({\n            left: 0,\n            right: 0,\n            top: 0,\n            bottom: 0\n        }, margins);\n        this.ticks = null;\n        this._labelSizes = null;\n        this._gridLineItems = null;\n        this._labelItems = null;\n        this.beforeSetDimensions();\n        this.setDimensions();\n        this.afterSetDimensions();\n        this._maxLength = this.isHorizontal() ? this.width + margins.left + margins.right : this.height + margins.top + margins.bottom;\n        if (!this._dataLimitsCached) {\n            this.beforeDataLimits();\n            this.determineDataLimits();\n            this.afterDataLimits();\n            this._range = _addGrace(this, grace, beginAtZero);\n            this._dataLimitsCached = true;\n        }\n        this.beforeBuildTicks();\n        this.ticks = this.buildTicks() || [];\n        this.afterBuildTicks();\n        const samplingEnabled = sampleSize < this.ticks.length;\n        this._convertTicksToLabels(samplingEnabled ? sample(this.ticks, sampleSize) : this.ticks);\n        this.configure();\n        this.beforeCalculateLabelRotation();\n        this.calculateLabelRotation();\n        this.afterCalculateLabelRotation();\n        if (tickOpts.display && (tickOpts.autoSkip || tickOpts.source === 'auto')) {\n            this.ticks = autoSkip(this, this.ticks);\n            this._labelSizes = null;\n            this.afterAutoSkip();\n        }\n        if (samplingEnabled) {\n            this._convertTicksToLabels(this.ticks);\n        }\n        this.beforeFit();\n        this.fit();\n        this.afterFit();\n        this.afterUpdate();\n    }\n configure() {\n        let reversePixels = this.options.reverse;\n        let startPixel, endPixel;\n        if (this.isHorizontal()) {\n            startPixel = this.left;\n            endPixel = this.right;\n        } else {\n            startPixel = this.top;\n            endPixel = this.bottom;\n            reversePixels = !reversePixels;\n        }\n        this._startPixel = startPixel;\n        this._endPixel = endPixel;\n        this._reversePixels = reversePixels;\n        this._length = endPixel - startPixel;\n        this._alignToPixels = this.options.alignToPixels;\n    }\n    afterUpdate() {\n        callback(this.options.afterUpdate, [\n            this\n        ]);\n    }\n    beforeSetDimensions() {\n        callback(this.options.beforeSetDimensions, [\n            this\n        ]);\n    }\n    setDimensions() {\n        if (this.isHorizontal()) {\n            this.width = this.maxWidth;\n            this.left = 0;\n            this.right = this.width;\n        } else {\n            this.height = this.maxHeight;\n            this.top = 0;\n            this.bottom = this.height;\n        }\n        this.paddingLeft = 0;\n        this.paddingTop = 0;\n        this.paddingRight = 0;\n        this.paddingBottom = 0;\n    }\n    afterSetDimensions() {\n        callback(this.options.afterSetDimensions, [\n            this\n        ]);\n    }\n    _callHooks(name) {\n        this.chart.notifyPlugins(name, this.getContext());\n        callback(this.options[name], [\n            this\n        ]);\n    }\n    beforeDataLimits() {\n        this._callHooks('beforeDataLimits');\n    }\n    determineDataLimits() {}\n    afterDataLimits() {\n        this._callHooks('afterDataLimits');\n    }\n    beforeBuildTicks() {\n        this._callHooks('beforeBuildTicks');\n    }\n buildTicks() {\n        return [];\n    }\n    afterBuildTicks() {\n        this._callHooks('afterBuildTicks');\n    }\n    beforeTickToLabelConversion() {\n        callback(this.options.beforeTickToLabelConversion, [\n            this\n        ]);\n    }\n generateTickLabels(ticks) {\n        const tickOpts = this.options.ticks;\n        let i, ilen, tick;\n        for(i = 0, ilen = ticks.length; i < ilen; i++){\n            tick = ticks[i];\n            tick.label = callback(tickOpts.callback, [\n                tick.value,\n                i,\n                ticks\n            ], this);\n        }\n    }\n    afterTickToLabelConversion() {\n        callback(this.options.afterTickToLabelConversion, [\n            this\n        ]);\n    }\n    beforeCalculateLabelRotation() {\n        callback(this.options.beforeCalculateLabelRotation, [\n            this\n        ]);\n    }\n    calculateLabelRotation() {\n        const options = this.options;\n        const tickOpts = options.ticks;\n        const numTicks = getTicksLimit(this.ticks.length, options.ticks.maxTicksLimit);\n        const minRotation = tickOpts.minRotation || 0;\n        const maxRotation = tickOpts.maxRotation;\n        let labelRotation = minRotation;\n        let tickWidth, maxHeight, maxLabelDiagonal;\n        if (!this._isVisible() || !tickOpts.display || minRotation >= maxRotation || numTicks <= 1 || !this.isHorizontal()) {\n            this.labelRotation = minRotation;\n            return;\n        }\n        const labelSizes = this._getLabelSizes();\n        const maxLabelWidth = labelSizes.widest.width;\n        const maxLabelHeight = labelSizes.highest.height;\n        const maxWidth = _limitValue(this.chart.width - maxLabelWidth, 0, this.maxWidth);\n        tickWidth = options.offset ? this.maxWidth / numTicks : maxWidth / (numTicks - 1);\n        if (maxLabelWidth + 6 > tickWidth) {\n            tickWidth = maxWidth / (numTicks - (options.offset ? 0.5 : 1));\n            maxHeight = this.maxHeight - getTickMarkLength(options.grid) - tickOpts.padding - getTitleHeight(options.title, this.chart.options.font);\n            maxLabelDiagonal = Math.sqrt(maxLabelWidth * maxLabelWidth + maxLabelHeight * maxLabelHeight);\n            labelRotation = toDegrees(Math.min(Math.asin(_limitValue((labelSizes.highest.height + 6) / tickWidth, -1, 1)), Math.asin(_limitValue(maxHeight / maxLabelDiagonal, -1, 1)) - Math.asin(_limitValue(maxLabelHeight / maxLabelDiagonal, -1, 1))));\n            labelRotation = Math.max(minRotation, Math.min(maxRotation, labelRotation));\n        }\n        this.labelRotation = labelRotation;\n    }\n    afterCalculateLabelRotation() {\n        callback(this.options.afterCalculateLabelRotation, [\n            this\n        ]);\n    }\n    afterAutoSkip() {}\n    beforeFit() {\n        callback(this.options.beforeFit, [\n            this\n        ]);\n    }\n    fit() {\n        const minSize = {\n            width: 0,\n            height: 0\n        };\n        const { chart , options: { ticks: tickOpts , title: titleOpts , grid: gridOpts  }  } = this;\n        const display = this._isVisible();\n        const isHorizontal = this.isHorizontal();\n        if (display) {\n            const titleHeight = getTitleHeight(titleOpts, chart.options.font);\n            if (isHorizontal) {\n                minSize.width = this.maxWidth;\n                minSize.height = getTickMarkLength(gridOpts) + titleHeight;\n            } else {\n                minSize.height = this.maxHeight;\n                minSize.width = getTickMarkLength(gridOpts) + titleHeight;\n            }\n            if (tickOpts.display && this.ticks.length) {\n                const { first , last , widest , highest  } = this._getLabelSizes();\n                const tickPadding = tickOpts.padding * 2;\n                const angleRadians = toRadians(this.labelRotation);\n                const cos = Math.cos(angleRadians);\n                const sin = Math.sin(angleRadians);\n                if (isHorizontal) {\n                    const labelHeight = tickOpts.mirror ? 0 : sin * widest.width + cos * highest.height;\n                    minSize.height = Math.min(this.maxHeight, minSize.height + labelHeight + tickPadding);\n                } else {\n                    const labelWidth = tickOpts.mirror ? 0 : cos * widest.width + sin * highest.height;\n                    minSize.width = Math.min(this.maxWidth, minSize.width + labelWidth + tickPadding);\n                }\n                this._calculatePadding(first, last, sin, cos);\n            }\n        }\n        this._handleMargins();\n        if (isHorizontal) {\n            this.width = this._length = chart.width - this._margins.left - this._margins.right;\n            this.height = minSize.height;\n        } else {\n            this.width = minSize.width;\n            this.height = this._length = chart.height - this._margins.top - this._margins.bottom;\n        }\n    }\n    _calculatePadding(first, last, sin, cos) {\n        const { ticks: { align , padding  } , position  } = this.options;\n        const isRotated = this.labelRotation !== 0;\n        const labelsBelowTicks = position !== 'top' && this.axis === 'x';\n        if (this.isHorizontal()) {\n            const offsetLeft = this.getPixelForTick(0) - this.left;\n            const offsetRight = this.right - this.getPixelForTick(this.ticks.length - 1);\n            let paddingLeft = 0;\n            let paddingRight = 0;\n            if (isRotated) {\n                if (labelsBelowTicks) {\n                    paddingLeft = cos * first.width;\n                    paddingRight = sin * last.height;\n                } else {\n                    paddingLeft = sin * first.height;\n                    paddingRight = cos * last.width;\n                }\n            } else if (align === 'start') {\n                paddingRight = last.width;\n            } else if (align === 'end') {\n                paddingLeft = first.width;\n            } else if (align !== 'inner') {\n                paddingLeft = first.width / 2;\n                paddingRight = last.width / 2;\n            }\n            this.paddingLeft = Math.max((paddingLeft - offsetLeft + padding) * this.width / (this.width - offsetLeft), 0);\n            this.paddingRight = Math.max((paddingRight - offsetRight + padding) * this.width / (this.width - offsetRight), 0);\n        } else {\n            let paddingTop = last.height / 2;\n            let paddingBottom = first.height / 2;\n            if (align === 'start') {\n                paddingTop = 0;\n                paddingBottom = first.height;\n            } else if (align === 'end') {\n                paddingTop = last.height;\n                paddingBottom = 0;\n            }\n            this.paddingTop = paddingTop + padding;\n            this.paddingBottom = paddingBottom + padding;\n        }\n    }\n _handleMargins() {\n        if (this._margins) {\n            this._margins.left = Math.max(this.paddingLeft, this._margins.left);\n            this._margins.top = Math.max(this.paddingTop, this._margins.top);\n            this._margins.right = Math.max(this.paddingRight, this._margins.right);\n            this._margins.bottom = Math.max(this.paddingBottom, this._margins.bottom);\n        }\n    }\n    afterFit() {\n        callback(this.options.afterFit, [\n            this\n        ]);\n    }\n isHorizontal() {\n        const { axis , position  } = this.options;\n        return position === 'top' || position === 'bottom' || axis === 'x';\n    }\n isFullSize() {\n        return this.options.fullSize;\n    }\n _convertTicksToLabels(ticks) {\n        this.beforeTickToLabelConversion();\n        this.generateTickLabels(ticks);\n        let i, ilen;\n        for(i = 0, ilen = ticks.length; i < ilen; i++){\n            if (isNullOrUndef(ticks[i].label)) {\n                ticks.splice(i, 1);\n                ilen--;\n                i--;\n            }\n        }\n        this.afterTickToLabelConversion();\n    }\n _getLabelSizes() {\n        let labelSizes = this._labelSizes;\n        if (!labelSizes) {\n            const sampleSize = this.options.ticks.sampleSize;\n            let ticks = this.ticks;\n            if (sampleSize < ticks.length) {\n                ticks = sample(ticks, sampleSize);\n            }\n            this._labelSizes = labelSizes = this._computeLabelSizes(ticks, ticks.length, this.options.ticks.maxTicksLimit);\n        }\n        return labelSizes;\n    }\n _computeLabelSizes(ticks, length, maxTicksLimit) {\n        const { ctx , _longestTextCache: caches  } = this;\n        const widths = [];\n        const heights = [];\n        const increment = Math.floor(length / getTicksLimit(length, maxTicksLimit));\n        let widestLabelSize = 0;\n        let highestLabelSize = 0;\n        let i, j, jlen, label, tickFont, fontString, cache, lineHeight, width, height, nestedLabel;\n        for(i = 0; i < length; i += increment){\n            label = ticks[i].label;\n            tickFont = this._resolveTickFontOptions(i);\n            ctx.font = fontString = tickFont.string;\n            cache = caches[fontString] = caches[fontString] || {\n                data: {},\n                gc: []\n            };\n            lineHeight = tickFont.lineHeight;\n            width = height = 0;\n            if (!isNullOrUndef(label) && !isArray(label)) {\n                width = _measureText(ctx, cache.data, cache.gc, width, label);\n                height = lineHeight;\n            } else if (isArray(label)) {\n                for(j = 0, jlen = label.length; j < jlen; ++j){\n                    nestedLabel =  label[j];\n                    if (!isNullOrUndef(nestedLabel) && !isArray(nestedLabel)) {\n                        width = _measureText(ctx, cache.data, cache.gc, width, nestedLabel);\n                        height += lineHeight;\n                    }\n                }\n            }\n            widths.push(width);\n            heights.push(height);\n            widestLabelSize = Math.max(width, widestLabelSize);\n            highestLabelSize = Math.max(height, highestLabelSize);\n        }\n        garbageCollect(caches, length);\n        const widest = widths.indexOf(widestLabelSize);\n        const highest = heights.indexOf(highestLabelSize);\n        const valueAt = (idx)=>({\n                width: widths[idx] || 0,\n                height: heights[idx] || 0\n            });\n        return {\n            first: valueAt(0),\n            last: valueAt(length - 1),\n            widest: valueAt(widest),\n            highest: valueAt(highest),\n            widths,\n            heights\n        };\n    }\n getLabelForValue(value) {\n        return value;\n    }\n getPixelForValue(value, index) {\n        return NaN;\n    }\n getValueForPixel(pixel) {}\n getPixelForTick(index) {\n        const ticks = this.ticks;\n        if (index < 0 || index > ticks.length - 1) {\n            return null;\n        }\n        return this.getPixelForValue(ticks[index].value);\n    }\n getPixelForDecimal(decimal) {\n        if (this._reversePixels) {\n            decimal = 1 - decimal;\n        }\n        const pixel = this._startPixel + decimal * this._length;\n        return _int16Range(this._alignToPixels ? _alignPixel(this.chart, pixel, 0) : pixel);\n    }\n getDecimalForPixel(pixel) {\n        const decimal = (pixel - this._startPixel) / this._length;\n        return this._reversePixels ? 1 - decimal : decimal;\n    }\n getBasePixel() {\n        return this.getPixelForValue(this.getBaseValue());\n    }\n getBaseValue() {\n        const { min , max  } = this;\n        return min < 0 && max < 0 ? max : min > 0 && max > 0 ? min : 0;\n    }\n getContext(index) {\n        const ticks = this.ticks || [];\n        if (index >= 0 && index < ticks.length) {\n            const tick = ticks[index];\n            return tick.$context || (tick.$context = createTickContext(this.getContext(), index, tick));\n        }\n        return this.$context || (this.$context = createScaleContext(this.chart.getContext(), this));\n    }\n _tickSize() {\n        const optionTicks = this.options.ticks;\n        const rot = toRadians(this.labelRotation);\n        const cos = Math.abs(Math.cos(rot));\n        const sin = Math.abs(Math.sin(rot));\n        const labelSizes = this._getLabelSizes();\n        const padding = optionTicks.autoSkipPadding || 0;\n        const w = labelSizes ? labelSizes.widest.width + padding : 0;\n        const h = labelSizes ? labelSizes.highest.height + padding : 0;\n        return this.isHorizontal() ? h * cos > w * sin ? w / cos : h / sin : h * sin < w * cos ? h / cos : w / sin;\n    }\n _isVisible() {\n        const display = this.options.display;\n        if (display !== 'auto') {\n            return !!display;\n        }\n        return this.getMatchingVisibleMetas().length > 0;\n    }\n _computeGridLineItems(chartArea) {\n        const axis = this.axis;\n        const chart = this.chart;\n        const options = this.options;\n        const { grid , position , border  } = options;\n        const offset = grid.offset;\n        const isHorizontal = this.isHorizontal();\n        const ticks = this.ticks;\n        const ticksLength = ticks.length + (offset ? 1 : 0);\n        const tl = getTickMarkLength(grid);\n        const items = [];\n        const borderOpts = border.setContext(this.getContext());\n        const axisWidth = borderOpts.display ? borderOpts.width : 0;\n        const axisHalfWidth = axisWidth / 2;\n        const alignBorderValue = function(pixel) {\n            return _alignPixel(chart, pixel, axisWidth);\n        };\n        let borderValue, i, lineValue, alignedLineValue;\n        let tx1, ty1, tx2, ty2, x1, y1, x2, y2;\n        if (position === 'top') {\n            borderValue = alignBorderValue(this.bottom);\n            ty1 = this.bottom - tl;\n            ty2 = borderValue - axisHalfWidth;\n            y1 = alignBorderValue(chartArea.top) + axisHalfWidth;\n            y2 = chartArea.bottom;\n        } else if (position === 'bottom') {\n            borderValue = alignBorderValue(this.top);\n            y1 = chartArea.top;\n            y2 = alignBorderValue(chartArea.bottom) - axisHalfWidth;\n            ty1 = borderValue + axisHalfWidth;\n            ty2 = this.top + tl;\n        } else if (position === 'left') {\n            borderValue = alignBorderValue(this.right);\n            tx1 = this.right - tl;\n            tx2 = borderValue - axisHalfWidth;\n            x1 = alignBorderValue(chartArea.left) + axisHalfWidth;\n            x2 = chartArea.right;\n        } else if (position === 'right') {\n            borderValue = alignBorderValue(this.left);\n            x1 = chartArea.left;\n            x2 = alignBorderValue(chartArea.right) - axisHalfWidth;\n            tx1 = borderValue + axisHalfWidth;\n            tx2 = this.left + tl;\n        } else if (axis === 'x') {\n            if (position === 'center') {\n                borderValue = alignBorderValue((chartArea.top + chartArea.bottom) / 2 + 0.5);\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n            }\n            y1 = chartArea.top;\n            y2 = chartArea.bottom;\n            ty1 = borderValue + axisHalfWidth;\n            ty2 = ty1 + tl;\n        } else if (axis === 'y') {\n            if (position === 'center') {\n                borderValue = alignBorderValue((chartArea.left + chartArea.right) / 2);\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                borderValue = alignBorderValue(this.chart.scales[positionAxisID].getPixelForValue(value));\n            }\n            tx1 = borderValue - axisHalfWidth;\n            tx2 = tx1 - tl;\n            x1 = chartArea.left;\n            x2 = chartArea.right;\n        }\n        const limit = valueOrDefault(options.ticks.maxTicksLimit, ticksLength);\n        const step = Math.max(1, Math.ceil(ticksLength / limit));\n        for(i = 0; i < ticksLength; i += step){\n            const context = this.getContext(i);\n            const optsAtIndex = grid.setContext(context);\n            const optsAtIndexBorder = border.setContext(context);\n            const lineWidth = optsAtIndex.lineWidth;\n            const lineColor = optsAtIndex.color;\n            const borderDash = optsAtIndexBorder.dash || [];\n            const borderDashOffset = optsAtIndexBorder.dashOffset;\n            const tickWidth = optsAtIndex.tickWidth;\n            const tickColor = optsAtIndex.tickColor;\n            const tickBorderDash = optsAtIndex.tickBorderDash || [];\n            const tickBorderDashOffset = optsAtIndex.tickBorderDashOffset;\n            lineValue = getPixelForGridLine(this, i, offset);\n            if (lineValue === undefined) {\n                continue;\n            }\n            alignedLineValue = _alignPixel(chart, lineValue, lineWidth);\n            if (isHorizontal) {\n                tx1 = tx2 = x1 = x2 = alignedLineValue;\n            } else {\n                ty1 = ty2 = y1 = y2 = alignedLineValue;\n            }\n            items.push({\n                tx1,\n                ty1,\n                tx2,\n                ty2,\n                x1,\n                y1,\n                x2,\n                y2,\n                width: lineWidth,\n                color: lineColor,\n                borderDash,\n                borderDashOffset,\n                tickWidth,\n                tickColor,\n                tickBorderDash,\n                tickBorderDashOffset\n            });\n        }\n        this._ticksLength = ticksLength;\n        this._borderValue = borderValue;\n        return items;\n    }\n _computeLabelItems(chartArea) {\n        const axis = this.axis;\n        const options = this.options;\n        const { position , ticks: optionTicks  } = options;\n        const isHorizontal = this.isHorizontal();\n        const ticks = this.ticks;\n        const { align , crossAlign , padding , mirror  } = optionTicks;\n        const tl = getTickMarkLength(options.grid);\n        const tickAndPadding = tl + padding;\n        const hTickAndPadding = mirror ? -padding : tickAndPadding;\n        const rotation = -toRadians(this.labelRotation);\n        const items = [];\n        let i, ilen, tick, label, x, y, textAlign, pixel, font, lineHeight, lineCount, textOffset;\n        let textBaseline = 'middle';\n        if (position === 'top') {\n            y = this.bottom - hTickAndPadding;\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (position === 'bottom') {\n            y = this.top + hTickAndPadding;\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (position === 'left') {\n            const ret = this._getYAxisLabelAlignment(tl);\n            textAlign = ret.textAlign;\n            x = ret.x;\n        } else if (position === 'right') {\n            const ret = this._getYAxisLabelAlignment(tl);\n            textAlign = ret.textAlign;\n            x = ret.x;\n        } else if (axis === 'x') {\n            if (position === 'center') {\n                y = (chartArea.top + chartArea.bottom) / 2 + tickAndPadding;\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                y = this.chart.scales[positionAxisID].getPixelForValue(value) + tickAndPadding;\n            }\n            textAlign = this._getXAxisLabelAlignment();\n        } else if (axis === 'y') {\n            if (position === 'center') {\n                x = (chartArea.left + chartArea.right) / 2 - tickAndPadding;\n            } else if (isObject(position)) {\n                const positionAxisID = Object.keys(position)[0];\n                const value = position[positionAxisID];\n                x = this.chart.scales[positionAxisID].getPixelForValue(value);\n            }\n            textAlign = this._getYAxisLabelAlignment(tl).textAlign;\n        }\n        if (axis === 'y') {\n            if (align === 'start') {\n                textBaseline = 'top';\n            } else if (align === 'end') {\n                textBaseline = 'bottom';\n            }\n        }\n        const labelSizes = this._getLabelSizes();\n        for(i = 0, ilen = ticks.length; i < ilen; ++i){\n            tick = ticks[i];\n            label = tick.label;\n            const optsAtIndex = optionTicks.setContext(this.getContext(i));\n            pixel = this.getPixelForTick(i) + optionTicks.labelOffset;\n            font = this._resolveTickFontOptions(i);\n            lineHeight = font.lineHeight;\n            lineCount = isArray(label) ? label.length : 1;\n            const halfCount = lineCount / 2;\n            const color = optsAtIndex.color;\n            const strokeColor = optsAtIndex.textStrokeColor;\n            const strokeWidth = optsAtIndex.textStrokeWidth;\n            let tickTextAlign = textAlign;\n            if (isHorizontal) {\n                x = pixel;\n                if (textAlign === 'inner') {\n                    if (i === ilen - 1) {\n                        tickTextAlign = !this.options.reverse ? 'right' : 'left';\n                    } else if (i === 0) {\n                        tickTextAlign = !this.options.reverse ? 'left' : 'right';\n                    } else {\n                        tickTextAlign = 'center';\n                    }\n                }\n                if (position === 'top') {\n                    if (crossAlign === 'near' || rotation !== 0) {\n                        textOffset = -lineCount * lineHeight + lineHeight / 2;\n                    } else if (crossAlign === 'center') {\n                        textOffset = -labelSizes.highest.height / 2 - halfCount * lineHeight + lineHeight;\n                    } else {\n                        textOffset = -labelSizes.highest.height + lineHeight / 2;\n                    }\n                } else {\n                    if (crossAlign === 'near' || rotation !== 0) {\n                        textOffset = lineHeight / 2;\n                    } else if (crossAlign === 'center') {\n                        textOffset = labelSizes.highest.height / 2 - halfCount * lineHeight;\n                    } else {\n                        textOffset = labelSizes.highest.height - lineCount * lineHeight;\n                    }\n                }\n                if (mirror) {\n                    textOffset *= -1;\n                }\n                if (rotation !== 0 && !optsAtIndex.showLabelBackdrop) {\n                    x += lineHeight / 2 * Math.sin(rotation);\n                }\n            } else {\n                y = pixel;\n                textOffset = (1 - lineCount) * lineHeight / 2;\n            }\n            let backdrop;\n            if (optsAtIndex.showLabelBackdrop) {\n                const labelPadding = toPadding(optsAtIndex.backdropPadding);\n                const height = labelSizes.heights[i];\n                const width = labelSizes.widths[i];\n                let top = textOffset - labelPadding.top;\n                let left = 0 - labelPadding.left;\n                switch(textBaseline){\n                    case 'middle':\n                        top -= height / 2;\n                        break;\n                    case 'bottom':\n                        top -= height;\n                        break;\n                }\n                switch(textAlign){\n                    case 'center':\n                        left -= width / 2;\n                        break;\n                    case 'right':\n                        left -= width;\n                        break;\n                    case 'inner':\n                        if (i === ilen - 1) {\n                            left -= width;\n                        } else if (i > 0) {\n                            left -= width / 2;\n                        }\n                        break;\n                }\n                backdrop = {\n                    left,\n                    top,\n                    width: width + labelPadding.width,\n                    height: height + labelPadding.height,\n                    color: optsAtIndex.backdropColor\n                };\n            }\n            items.push({\n                label,\n                font,\n                textOffset,\n                options: {\n                    rotation,\n                    color,\n                    strokeColor,\n                    strokeWidth,\n                    textAlign: tickTextAlign,\n                    textBaseline,\n                    translation: [\n                        x,\n                        y\n                    ],\n                    backdrop\n                }\n            });\n        }\n        return items;\n    }\n    _getXAxisLabelAlignment() {\n        const { position , ticks  } = this.options;\n        const rotation = -toRadians(this.labelRotation);\n        if (rotation) {\n            return position === 'top' ? 'left' : 'right';\n        }\n        let align = 'center';\n        if (ticks.align === 'start') {\n            align = 'left';\n        } else if (ticks.align === 'end') {\n            align = 'right';\n        } else if (ticks.align === 'inner') {\n            align = 'inner';\n        }\n        return align;\n    }\n    _getYAxisLabelAlignment(tl) {\n        const { position , ticks: { crossAlign , mirror , padding  }  } = this.options;\n        const labelSizes = this._getLabelSizes();\n        const tickAndPadding = tl + padding;\n        const widest = labelSizes.widest.width;\n        let textAlign;\n        let x;\n        if (position === 'left') {\n            if (mirror) {\n                x = this.right + padding;\n                if (crossAlign === 'near') {\n                    textAlign = 'left';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x += widest / 2;\n                } else {\n                    textAlign = 'right';\n                    x += widest;\n                }\n            } else {\n                x = this.right - tickAndPadding;\n                if (crossAlign === 'near') {\n                    textAlign = 'right';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x -= widest / 2;\n                } else {\n                    textAlign = 'left';\n                    x = this.left;\n                }\n            }\n        } else if (position === 'right') {\n            if (mirror) {\n                x = this.left + padding;\n                if (crossAlign === 'near') {\n                    textAlign = 'right';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x -= widest / 2;\n                } else {\n                    textAlign = 'left';\n                    x -= widest;\n                }\n            } else {\n                x = this.left + tickAndPadding;\n                if (crossAlign === 'near') {\n                    textAlign = 'left';\n                } else if (crossAlign === 'center') {\n                    textAlign = 'center';\n                    x += widest / 2;\n                } else {\n                    textAlign = 'right';\n                    x = this.right;\n                }\n            }\n        } else {\n            textAlign = 'right';\n        }\n        return {\n            textAlign,\n            x\n        };\n    }\n _computeLabelArea() {\n        if (this.options.ticks.mirror) {\n            return;\n        }\n        const chart = this.chart;\n        const position = this.options.position;\n        if (position === 'left' || position === 'right') {\n            return {\n                top: 0,\n                left: this.left,\n                bottom: chart.height,\n                right: this.right\n            };\n        }\n        if (position === 'top' || position === 'bottom') {\n            return {\n                top: this.top,\n                left: 0,\n                bottom: this.bottom,\n                right: chart.width\n            };\n        }\n    }\n drawBackground() {\n        const { ctx , options: { backgroundColor  } , left , top , width , height  } = this;\n        if (backgroundColor) {\n            ctx.save();\n            ctx.fillStyle = backgroundColor;\n            ctx.fillRect(left, top, width, height);\n            ctx.restore();\n        }\n    }\n    getLineWidthForValue(value) {\n        const grid = this.options.grid;\n        if (!this._isVisible() || !grid.display) {\n            return 0;\n        }\n        const ticks = this.ticks;\n        const index = ticks.findIndex((t)=>t.value === value);\n        if (index >= 0) {\n            const opts = grid.setContext(this.getContext(index));\n            return opts.lineWidth;\n        }\n        return 0;\n    }\n drawGrid(chartArea) {\n        const grid = this.options.grid;\n        const ctx = this.ctx;\n        const items = this._gridLineItems || (this._gridLineItems = this._computeGridLineItems(chartArea));\n        let i, ilen;\n        const drawLine = (p1, p2, style)=>{\n            if (!style.width || !style.color) {\n                return;\n            }\n            ctx.save();\n            ctx.lineWidth = style.width;\n            ctx.strokeStyle = style.color;\n            ctx.setLineDash(style.borderDash || []);\n            ctx.lineDashOffset = style.borderDashOffset;\n            ctx.beginPath();\n            ctx.moveTo(p1.x, p1.y);\n            ctx.lineTo(p2.x, p2.y);\n            ctx.stroke();\n            ctx.restore();\n        };\n        if (grid.display) {\n            for(i = 0, ilen = items.length; i < ilen; ++i){\n                const item = items[i];\n                if (grid.drawOnChartArea) {\n                    drawLine({\n                        x: item.x1,\n                        y: item.y1\n                    }, {\n                        x: item.x2,\n                        y: item.y2\n                    }, item);\n                }\n                if (grid.drawTicks) {\n                    drawLine({\n                        x: item.tx1,\n                        y: item.ty1\n                    }, {\n                        x: item.tx2,\n                        y: item.ty2\n                    }, {\n                        color: item.tickColor,\n                        width: item.tickWidth,\n                        borderDash: item.tickBorderDash,\n                        borderDashOffset: item.tickBorderDashOffset\n                    });\n                }\n            }\n        }\n    }\n drawBorder() {\n        const { chart , ctx , options: { border , grid  }  } = this;\n        const borderOpts = border.setContext(this.getContext());\n        const axisWidth = border.display ? borderOpts.width : 0;\n        if (!axisWidth) {\n            return;\n        }\n        const lastLineWidth = grid.setContext(this.getContext(0)).lineWidth;\n        const borderValue = this._borderValue;\n        let x1, x2, y1, y2;\n        if (this.isHorizontal()) {\n            x1 = _alignPixel(chart, this.left, axisWidth) - axisWidth / 2;\n            x2 = _alignPixel(chart, this.right, lastLineWidth) + lastLineWidth / 2;\n            y1 = y2 = borderValue;\n        } else {\n            y1 = _alignPixel(chart, this.top, axisWidth) - axisWidth / 2;\n            y2 = _alignPixel(chart, this.bottom, lastLineWidth) + lastLineWidth / 2;\n            x1 = x2 = borderValue;\n        }\n        ctx.save();\n        ctx.lineWidth = borderOpts.width;\n        ctx.strokeStyle = borderOpts.color;\n        ctx.beginPath();\n        ctx.moveTo(x1, y1);\n        ctx.lineTo(x2, y2);\n        ctx.stroke();\n        ctx.restore();\n    }\n drawLabels(chartArea) {\n        const optionTicks = this.options.ticks;\n        if (!optionTicks.display) {\n            return;\n        }\n        const ctx = this.ctx;\n        const area = this._computeLabelArea();\n        if (area) {\n            clipArea(ctx, area);\n        }\n        const items = this.getLabelItems(chartArea);\n        for (const item of items){\n            const renderTextOptions = item.options;\n            const tickFont = item.font;\n            const label = item.label;\n            const y = item.textOffset;\n            renderText(ctx, label, 0, y, tickFont, renderTextOptions);\n        }\n        if (area) {\n            unclipArea(ctx);\n        }\n    }\n drawTitle() {\n        const { ctx , options: { position , title , reverse  }  } = this;\n        if (!title.display) {\n            return;\n        }\n        const font = toFont(title.font);\n        const padding = toPadding(title.padding);\n        const align = title.align;\n        let offset = font.lineHeight / 2;\n        if (position === 'bottom' || position === 'center' || isObject(position)) {\n            offset += padding.bottom;\n            if (isArray(title.text)) {\n                offset += font.lineHeight * (title.text.length - 1);\n            }\n        } else {\n            offset += padding.top;\n        }\n        const { titleX , titleY , maxWidth , rotation  } = titleArgs(this, offset, position, align);\n        renderText(ctx, title.text, 0, 0, font, {\n            color: title.color,\n            maxWidth,\n            rotation,\n            textAlign: titleAlign(align, position, reverse),\n            textBaseline: 'middle',\n            translation: [\n                titleX,\n                titleY\n            ]\n        });\n    }\n    draw(chartArea) {\n        if (!this._isVisible()) {\n            return;\n        }\n        this.drawBackground();\n        this.drawGrid(chartArea);\n        this.drawBorder();\n        this.drawTitle();\n        this.drawLabels(chartArea);\n    }\n _layers() {\n        const opts = this.options;\n        const tz = opts.ticks && opts.ticks.z || 0;\n        const gz = valueOrDefault(opts.grid && opts.grid.z, -1);\n        const bz = valueOrDefault(opts.border && opts.border.z, 0);\n        if (!this._isVisible() || this.draw !== Scale.prototype.draw) {\n            return [\n                {\n                    z: tz,\n                    draw: (chartArea)=>{\n                        this.draw(chartArea);\n                    }\n                }\n            ];\n        }\n        return [\n            {\n                z: gz,\n                draw: (chartArea)=>{\n                    this.drawBackground();\n                    this.drawGrid(chartArea);\n                    this.drawTitle();\n                }\n            },\n            {\n                z: bz,\n                draw: ()=>{\n                    this.drawBorder();\n                }\n            },\n            {\n                z: tz,\n                draw: (chartArea)=>{\n                    this.drawLabels(chartArea);\n                }\n            }\n        ];\n    }\n getMatchingVisibleMetas(type) {\n        const metas = this.chart.getSortedVisibleDatasetMetas();\n        const axisID = this.axis + 'AxisID';\n        const result = [];\n        let i, ilen;\n        for(i = 0, ilen = metas.length; i < ilen; ++i){\n            const meta = metas[i];\n            if (meta[axisID] === this.id && (!type || meta.type === type)) {\n                result.push(meta);\n            }\n        }\n        return result;\n    }\n _resolveTickFontOptions(index) {\n        const opts = this.options.ticks.setContext(this.getContext(index));\n        return toFont(opts.font);\n    }\n _maxDigits() {\n        const fontSize = this._resolveTickFontOptions(0).lineHeight;\n        return (this.isHorizontal() ? this.width : this.height) / fontSize;\n    }\n}\n\nclass TypedRegistry {\n    constructor(type, scope, override){\n        this.type = type;\n        this.scope = scope;\n        this.override = override;\n        this.items = Object.create(null);\n    }\n    isForType(type) {\n        return Object.prototype.isPrototypeOf.call(this.type.prototype, type.prototype);\n    }\n register(item) {\n        const proto = Object.getPrototypeOf(item);\n        let parentScope;\n        if (isIChartComponent(proto)) {\n            parentScope = this.register(proto);\n        }\n        const items = this.items;\n        const id = item.id;\n        const scope = this.scope + '.' + id;\n        if (!id) {\n            throw new Error('class does not have id: ' + item);\n        }\n        if (id in items) {\n            return scope;\n        }\n        items[id] = item;\n        registerDefaults(item, scope, parentScope);\n        if (this.override) {\n            defaults.override(item.id, item.overrides);\n        }\n        return scope;\n    }\n get(id) {\n        return this.items[id];\n    }\n unregister(item) {\n        const items = this.items;\n        const id = item.id;\n        const scope = this.scope;\n        if (id in items) {\n            delete items[id];\n        }\n        if (scope && id in defaults[scope]) {\n            delete defaults[scope][id];\n            if (this.override) {\n                delete overrides[id];\n            }\n        }\n    }\n}\nfunction registerDefaults(item, scope, parentScope) {\n    const itemDefaults = merge(Object.create(null), [\n        parentScope ? defaults.get(parentScope) : {},\n        defaults.get(scope),\n        item.defaults\n    ]);\n    defaults.set(scope, itemDefaults);\n    if (item.defaultRoutes) {\n        routeDefaults(scope, item.defaultRoutes);\n    }\n    if (item.descriptors) {\n        defaults.describe(scope, item.descriptors);\n    }\n}\nfunction routeDefaults(scope, routes) {\n    Object.keys(routes).forEach((property)=>{\n        const propertyParts = property.split('.');\n        const sourceName = propertyParts.pop();\n        const sourceScope = [\n            scope\n        ].concat(propertyParts).join('.');\n        const parts = routes[property].split('.');\n        const targetName = parts.pop();\n        const targetScope = parts.join('.');\n        defaults.route(sourceScope, sourceName, targetScope, targetName);\n    });\n}\nfunction isIChartComponent(proto) {\n    return 'id' in proto && 'defaults' in proto;\n}\n\nclass Registry {\n    constructor(){\n        this.controllers = new TypedRegistry(DatasetController, 'datasets', true);\n        this.elements = new TypedRegistry(Element, 'elements');\n        this.plugins = new TypedRegistry(Object, 'plugins');\n        this.scales = new TypedRegistry(Scale, 'scales');\n        this._typedRegistries = [\n            this.controllers,\n            this.scales,\n            this.elements\n        ];\n    }\n add(...args) {\n        this._each('register', args);\n    }\n    remove(...args) {\n        this._each('unregister', args);\n    }\n addControllers(...args) {\n        this._each('register', args, this.controllers);\n    }\n addElements(...args) {\n        this._each('register', args, this.elements);\n    }\n addPlugins(...args) {\n        this._each('register', args, this.plugins);\n    }\n addScales(...args) {\n        this._each('register', args, this.scales);\n    }\n getController(id) {\n        return this._get(id, this.controllers, 'controller');\n    }\n getElement(id) {\n        return this._get(id, this.elements, 'element');\n    }\n getPlugin(id) {\n        return this._get(id, this.plugins, 'plugin');\n    }\n getScale(id) {\n        return this._get(id, this.scales, 'scale');\n    }\n removeControllers(...args) {\n        this._each('unregister', args, this.controllers);\n    }\n removeElements(...args) {\n        this._each('unregister', args, this.elements);\n    }\n removePlugins(...args) {\n        this._each('unregister', args, this.plugins);\n    }\n removeScales(...args) {\n        this._each('unregister', args, this.scales);\n    }\n _each(method, args, typedRegistry) {\n        [\n            ...args\n        ].forEach((arg)=>{\n            const reg = typedRegistry || this._getRegistryForType(arg);\n            if (typedRegistry || reg.isForType(arg) || reg === this.plugins && arg.id) {\n                this._exec(method, reg, arg);\n            } else {\n                each(arg, (item)=>{\n                    const itemReg = typedRegistry || this._getRegistryForType(item);\n                    this._exec(method, itemReg, item);\n                });\n            }\n        });\n    }\n _exec(method, registry, component) {\n        const camelMethod = _capitalize(method);\n        callback(component['before' + camelMethod], [], component);\n        registry[method](component);\n        callback(component['after' + camelMethod], [], component);\n    }\n _getRegistryForType(type) {\n        for(let i = 0; i < this._typedRegistries.length; i++){\n            const reg = this._typedRegistries[i];\n            if (reg.isForType(type)) {\n                return reg;\n            }\n        }\n        return this.plugins;\n    }\n _get(id, typedRegistry, type) {\n        const item = typedRegistry.get(id);\n        if (item === undefined) {\n            throw new Error('\"' + id + '\" is not a registered ' + type + '.');\n        }\n        return item;\n    }\n}\nvar registry = /* #__PURE__ */ new Registry();\n\nclass PluginService {\n    constructor(){\n        this._init = undefined;\n    }\n notify(chart, hook, args, filter) {\n        if (hook === 'beforeInit') {\n            this._init = this._createDescriptors(chart, true);\n            this._notify(this._init, chart, 'install');\n        }\n        if (this._init === undefined) {\n            return;\n        }\n        const descriptors = filter ? this._descriptors(chart).filter(filter) : this._descriptors(chart);\n        const result = this._notify(descriptors, chart, hook, args);\n        if (hook === 'afterDestroy') {\n            this._notify(descriptors, chart, 'stop');\n            this._notify(this._init, chart, 'uninstall');\n            this._init = undefined;\n        }\n        return result;\n    }\n _notify(descriptors, chart, hook, args) {\n        args = args || {};\n        for (const descriptor of descriptors){\n            const plugin = descriptor.plugin;\n            const method = plugin[hook];\n            const params = [\n                chart,\n                args,\n                descriptor.options\n            ];\n            if (callback(method, params, plugin) === false && args.cancelable) {\n                return false;\n            }\n        }\n        return true;\n    }\n    invalidate() {\n        if (!isNullOrUndef(this._cache)) {\n            this._oldCache = this._cache;\n            this._cache = undefined;\n        }\n    }\n _descriptors(chart) {\n        if (this._cache) {\n            return this._cache;\n        }\n        const descriptors = this._cache = this._createDescriptors(chart);\n        this._notifyStateChanges(chart);\n        return descriptors;\n    }\n    _createDescriptors(chart, all) {\n        const config = chart && chart.config;\n        const options = valueOrDefault(config.options && config.options.plugins, {});\n        const plugins = allPlugins(config);\n        return options === false && !all ? [] : createDescriptors(chart, plugins, options, all);\n    }\n _notifyStateChanges(chart) {\n        const previousDescriptors = this._oldCache || [];\n        const descriptors = this._cache;\n        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.plugin.id === y.plugin.id));\n        this._notify(diff(previousDescriptors, descriptors), chart, 'stop');\n        this._notify(diff(descriptors, previousDescriptors), chart, 'start');\n    }\n}\n function allPlugins(config) {\n    const localIds = {};\n    const plugins = [];\n    const keys = Object.keys(registry.plugins.items);\n    for(let i = 0; i < keys.length; i++){\n        plugins.push(registry.getPlugin(keys[i]));\n    }\n    const local = config.plugins || [];\n    for(let i = 0; i < local.length; i++){\n        const plugin = local[i];\n        if (plugins.indexOf(plugin) === -1) {\n            plugins.push(plugin);\n            localIds[plugin.id] = true;\n        }\n    }\n    return {\n        plugins,\n        localIds\n    };\n}\nfunction getOpts(options, all) {\n    if (!all && options === false) {\n        return null;\n    }\n    if (options === true) {\n        return {};\n    }\n    return options;\n}\nfunction createDescriptors(chart, { plugins , localIds  }, options, all) {\n    const result = [];\n    const context = chart.getContext();\n    for (const plugin of plugins){\n        const id = plugin.id;\n        const opts = getOpts(options[id], all);\n        if (opts === null) {\n            continue;\n        }\n        result.push({\n            plugin,\n            options: pluginOpts(chart.config, {\n                plugin,\n                local: localIds[id]\n            }, opts, context)\n        });\n    }\n    return result;\n}\nfunction pluginOpts(config, { plugin , local  }, opts, context) {\n    const keys = config.pluginScopeKeys(plugin);\n    const scopes = config.getOptionScopes(opts, keys);\n    if (local && plugin.defaults) {\n        scopes.push(plugin.defaults);\n    }\n    return config.createResolver(scopes, context, [\n        ''\n    ], {\n        scriptable: false,\n        indexable: false,\n        allKeys: true\n    });\n}\n\nfunction getIndexAxis(type, options) {\n    const datasetDefaults = defaults.datasets[type] || {};\n    const datasetOptions = (options.datasets || {})[type] || {};\n    return datasetOptions.indexAxis || options.indexAxis || datasetDefaults.indexAxis || 'x';\n}\nfunction getAxisFromDefaultScaleID(id, indexAxis) {\n    let axis = id;\n    if (id === '_index_') {\n        axis = indexAxis;\n    } else if (id === '_value_') {\n        axis = indexAxis === 'x' ? 'y' : 'x';\n    }\n    return axis;\n}\nfunction getDefaultScaleIDFromAxis(axis, indexAxis) {\n    return axis === indexAxis ? '_index_' : '_value_';\n}\nfunction idMatchesAxis(id) {\n    if (id === 'x' || id === 'y' || id === 'r') {\n        return id;\n    }\n}\nfunction axisFromPosition(position) {\n    if (position === 'top' || position === 'bottom') {\n        return 'x';\n    }\n    if (position === 'left' || position === 'right') {\n        return 'y';\n    }\n}\nfunction determineAxis(id, ...scaleOptions) {\n    if (idMatchesAxis(id)) {\n        return id;\n    }\n    for (const opts of scaleOptions){\n        const axis = opts.axis || axisFromPosition(opts.position) || id.length > 1 && idMatchesAxis(id[0].toLowerCase());\n        if (axis) {\n            return axis;\n        }\n    }\n    throw new Error(`Cannot determine type of '${id}' axis. Please provide 'axis' or 'position' option.`);\n}\nfunction getAxisFromDataset(id, axis, dataset) {\n    if (dataset[axis + 'AxisID'] === id) {\n        return {\n            axis\n        };\n    }\n}\nfunction retrieveAxisFromDatasets(id, config) {\n    if (config.data && config.data.datasets) {\n        const boundDs = config.data.datasets.filter((d)=>d.xAxisID === id || d.yAxisID === id);\n        if (boundDs.length) {\n            return getAxisFromDataset(id, 'x', boundDs[0]) || getAxisFromDataset(id, 'y', boundDs[0]);\n        }\n    }\n    return {};\n}\nfunction mergeScaleConfig(config, options) {\n    const chartDefaults = overrides[config.type] || {\n        scales: {}\n    };\n    const configScales = options.scales || {};\n    const chartIndexAxis = getIndexAxis(config.type, options);\n    const scales = Object.create(null);\n    Object.keys(configScales).forEach((id)=>{\n        const scaleConf = configScales[id];\n        if (!isObject(scaleConf)) {\n            return console.error(`Invalid scale configuration for scale: ${id}`);\n        }\n        if (scaleConf._proxy) {\n            return console.warn(`Ignoring resolver passed as options for scale: ${id}`);\n        }\n        const axis = determineAxis(id, scaleConf, retrieveAxisFromDatasets(id, config), defaults.scales[scaleConf.type]);\n        const defaultId = getDefaultScaleIDFromAxis(axis, chartIndexAxis);\n        const defaultScaleOptions = chartDefaults.scales || {};\n        scales[id] = mergeIf(Object.create(null), [\n            {\n                axis\n            },\n            scaleConf,\n            defaultScaleOptions[axis],\n            defaultScaleOptions[defaultId]\n        ]);\n    });\n    config.data.datasets.forEach((dataset)=>{\n        const type = dataset.type || config.type;\n        const indexAxis = dataset.indexAxis || getIndexAxis(type, options);\n        const datasetDefaults = overrides[type] || {};\n        const defaultScaleOptions = datasetDefaults.scales || {};\n        Object.keys(defaultScaleOptions).forEach((defaultID)=>{\n            const axis = getAxisFromDefaultScaleID(defaultID, indexAxis);\n            const id = dataset[axis + 'AxisID'] || axis;\n            scales[id] = scales[id] || Object.create(null);\n            mergeIf(scales[id], [\n                {\n                    axis\n                },\n                configScales[id],\n                defaultScaleOptions[defaultID]\n            ]);\n        });\n    });\n    Object.keys(scales).forEach((key)=>{\n        const scale = scales[key];\n        mergeIf(scale, [\n            defaults.scales[scale.type],\n            defaults.scale\n        ]);\n    });\n    return scales;\n}\nfunction initOptions(config) {\n    const options = config.options || (config.options = {});\n    options.plugins = valueOrDefault(options.plugins, {});\n    options.scales = mergeScaleConfig(config, options);\n}\nfunction initData(data) {\n    data = data || {};\n    data.datasets = data.datasets || [];\n    data.labels = data.labels || [];\n    return data;\n}\nfunction initConfig(config) {\n    config = config || {};\n    config.data = initData(config.data);\n    initOptions(config);\n    return config;\n}\nconst keyCache = new Map();\nconst keysCached = new Set();\nfunction cachedKeys(cacheKey, generate) {\n    let keys = keyCache.get(cacheKey);\n    if (!keys) {\n        keys = generate();\n        keyCache.set(cacheKey, keys);\n        keysCached.add(keys);\n    }\n    return keys;\n}\nconst addIfFound = (set, obj, key)=>{\n    const opts = resolveObjectKey(obj, key);\n    if (opts !== undefined) {\n        set.add(opts);\n    }\n};\nclass Config {\n    constructor(config){\n        this._config = initConfig(config);\n        this._scopeCache = new Map();\n        this._resolverCache = new Map();\n    }\n    get platform() {\n        return this._config.platform;\n    }\n    get type() {\n        return this._config.type;\n    }\n    set type(type) {\n        this._config.type = type;\n    }\n    get data() {\n        return this._config.data;\n    }\n    set data(data) {\n        this._config.data = initData(data);\n    }\n    get options() {\n        return this._config.options;\n    }\n    set options(options) {\n        this._config.options = options;\n    }\n    get plugins() {\n        return this._config.plugins;\n    }\n    update() {\n        const config = this._config;\n        this.clearCache();\n        initOptions(config);\n    }\n    clearCache() {\n        this._scopeCache.clear();\n        this._resolverCache.clear();\n    }\n datasetScopeKeys(datasetType) {\n        return cachedKeys(datasetType, ()=>[\n                [\n                    `datasets.${datasetType}`,\n                    ''\n                ]\n            ]);\n    }\n datasetAnimationScopeKeys(datasetType, transition) {\n        return cachedKeys(`${datasetType}.transition.${transition}`, ()=>[\n                [\n                    `datasets.${datasetType}.transitions.${transition}`,\n                    `transitions.${transition}`\n                ],\n                [\n                    `datasets.${datasetType}`,\n                    ''\n                ]\n            ]);\n    }\n datasetElementScopeKeys(datasetType, elementType) {\n        return cachedKeys(`${datasetType}-${elementType}`, ()=>[\n                [\n                    `datasets.${datasetType}.elements.${elementType}`,\n                    `datasets.${datasetType}`,\n                    `elements.${elementType}`,\n                    ''\n                ]\n            ]);\n    }\n pluginScopeKeys(plugin) {\n        const id = plugin.id;\n        const type = this.type;\n        return cachedKeys(`${type}-plugin-${id}`, ()=>[\n                [\n                    `plugins.${id}`,\n                    ...plugin.additionalOptionScopes || []\n                ]\n            ]);\n    }\n _cachedScopes(mainScope, resetCache) {\n        const _scopeCache = this._scopeCache;\n        let cache = _scopeCache.get(mainScope);\n        if (!cache || resetCache) {\n            cache = new Map();\n            _scopeCache.set(mainScope, cache);\n        }\n        return cache;\n    }\n getOptionScopes(mainScope, keyLists, resetCache) {\n        const { options , type  } = this;\n        const cache = this._cachedScopes(mainScope, resetCache);\n        const cached = cache.get(keyLists);\n        if (cached) {\n            return cached;\n        }\n        const scopes = new Set();\n        keyLists.forEach((keys)=>{\n            if (mainScope) {\n                scopes.add(mainScope);\n                keys.forEach((key)=>addIfFound(scopes, mainScope, key));\n            }\n            keys.forEach((key)=>addIfFound(scopes, options, key));\n            keys.forEach((key)=>addIfFound(scopes, overrides[type] || {}, key));\n            keys.forEach((key)=>addIfFound(scopes, defaults, key));\n            keys.forEach((key)=>addIfFound(scopes, descriptors, key));\n        });\n        const array = Array.from(scopes);\n        if (array.length === 0) {\n            array.push(Object.create(null));\n        }\n        if (keysCached.has(keyLists)) {\n            cache.set(keyLists, array);\n        }\n        return array;\n    }\n chartOptionScopes() {\n        const { options , type  } = this;\n        return [\n            options,\n            overrides[type] || {},\n            defaults.datasets[type] || {},\n            {\n                type\n            },\n            defaults,\n            descriptors\n        ];\n    }\n resolveNamedOptions(scopes, names, context, prefixes = [\n        ''\n    ]) {\n        const result = {\n            $shared: true\n        };\n        const { resolver , subPrefixes  } = getResolver(this._resolverCache, scopes, prefixes);\n        let options = resolver;\n        if (needContext(resolver, names)) {\n            result.$shared = false;\n            context = isFunction(context) ? context() : context;\n            const subResolver = this.createResolver(scopes, context, subPrefixes);\n            options = _attachContext(resolver, context, subResolver);\n        }\n        for (const prop of names){\n            result[prop] = options[prop];\n        }\n        return result;\n    }\n createResolver(scopes, context, prefixes = [\n        ''\n    ], descriptorDefaults) {\n        const { resolver  } = getResolver(this._resolverCache, scopes, prefixes);\n        return isObject(context) ? _attachContext(resolver, context, undefined, descriptorDefaults) : resolver;\n    }\n}\nfunction getResolver(resolverCache, scopes, prefixes) {\n    let cache = resolverCache.get(scopes);\n    if (!cache) {\n        cache = new Map();\n        resolverCache.set(scopes, cache);\n    }\n    const cacheKey = prefixes.join();\n    let cached = cache.get(cacheKey);\n    if (!cached) {\n        const resolver = _createResolver(scopes, prefixes);\n        cached = {\n            resolver,\n            subPrefixes: prefixes.filter((p)=>!p.toLowerCase().includes('hover'))\n        };\n        cache.set(cacheKey, cached);\n    }\n    return cached;\n}\nconst hasFunction = (value)=>isObject(value) && Object.getOwnPropertyNames(value).some((key)=>isFunction(value[key]));\nfunction needContext(proxy, names) {\n    const { isScriptable , isIndexable  } = _descriptors(proxy);\n    for (const prop of names){\n        const scriptable = isScriptable(prop);\n        const indexable = isIndexable(prop);\n        const value = (indexable || scriptable) && proxy[prop];\n        if (scriptable && (isFunction(value) || hasFunction(value)) || indexable && isArray(value)) {\n            return true;\n        }\n    }\n    return false;\n}\n\nvar version = \"4.5.1\";\n\nconst KNOWN_POSITIONS = [\n    'top',\n    'bottom',\n    'left',\n    'right',\n    'chartArea'\n];\nfunction positionIsHorizontal(position, axis) {\n    return position === 'top' || position === 'bottom' || KNOWN_POSITIONS.indexOf(position) === -1 && axis === 'x';\n}\nfunction compare2Level(l1, l2) {\n    return function(a, b) {\n        return a[l1] === b[l1] ? a[l2] - b[l2] : a[l1] - b[l1];\n    };\n}\nfunction onAnimationsComplete(context) {\n    const chart = context.chart;\n    const animationOptions = chart.options.animation;\n    chart.notifyPlugins('afterRender');\n    callback(animationOptions && animationOptions.onComplete, [\n        context\n    ], chart);\n}\nfunction onAnimationProgress(context) {\n    const chart = context.chart;\n    const animationOptions = chart.options.animation;\n    callback(animationOptions && animationOptions.onProgress, [\n        context\n    ], chart);\n}\n function getCanvas(item) {\n    if (_isDomSupported() && typeof item === 'string') {\n        item = document.getElementById(item);\n    } else if (item && item.length) {\n        item = item[0];\n    }\n    if (item && item.canvas) {\n        item = item.canvas;\n    }\n    return item;\n}\nconst instances = {};\nconst getChart = (key)=>{\n    const canvas = getCanvas(key);\n    return Object.values(instances).filter((c)=>c.canvas === canvas).pop();\n};\nfunction moveNumericKeys(obj, start, move) {\n    const keys = Object.keys(obj);\n    for (const key of keys){\n        const intKey = +key;\n        if (intKey >= start) {\n            const value = obj[key];\n            delete obj[key];\n            if (move > 0 || intKey > start) {\n                obj[intKey + move] = value;\n            }\n        }\n    }\n}\n function determineLastEvent(e, lastEvent, inChartArea, isClick) {\n    if (!inChartArea || e.type === 'mouseout') {\n        return null;\n    }\n    if (isClick) {\n        return lastEvent;\n    }\n    return e;\n}\nclass Chart {\n    static defaults = defaults;\n    static instances = instances;\n    static overrides = overrides;\n    static registry = registry;\n    static version = version;\n    static getChart = getChart;\n    static register(...items) {\n        registry.add(...items);\n        invalidatePlugins();\n    }\n    static unregister(...items) {\n        registry.remove(...items);\n        invalidatePlugins();\n    }\n    constructor(item, userConfig){\n        const config = this.config = new Config(userConfig);\n        const initialCanvas = getCanvas(item);\n        const existingChart = getChart(initialCanvas);\n        if (existingChart) {\n            throw new Error('Canvas is already in use. Chart with ID \\'' + existingChart.id + '\\'' + ' must be destroyed before the canvas with ID \\'' + existingChart.canvas.id + '\\' can be reused.');\n        }\n        const options = config.createResolver(config.chartOptionScopes(), this.getContext());\n        this.platform = new (config.platform || _detectPlatform(initialCanvas))();\n        this.platform.updateConfig(config);\n        const context = this.platform.acquireContext(initialCanvas, options.aspectRatio);\n        const canvas = context && context.canvas;\n        const height = canvas && canvas.height;\n        const width = canvas && canvas.width;\n        this.id = uid();\n        this.ctx = context;\n        this.canvas = canvas;\n        this.width = width;\n        this.height = height;\n        this._options = options;\n        this._aspectRatio = this.aspectRatio;\n        this._layers = [];\n        this._metasets = [];\n        this._stacks = undefined;\n        this.boxes = [];\n        this.currentDevicePixelRatio = undefined;\n        this.chartArea = undefined;\n        this._active = [];\n        this._lastEvent = undefined;\n        this._listeners = {};\n         this._responsiveListeners = undefined;\n        this._sortedMetasets = [];\n        this.scales = {};\n        this._plugins = new PluginService();\n        this.$proxies = {};\n        this._hiddenIndices = {};\n        this.attached = false;\n        this._animationsDisabled = undefined;\n        this.$context = undefined;\n        this._doResize = debounce((mode)=>this.update(mode), options.resizeDelay || 0);\n        this._dataChanges = [];\n        instances[this.id] = this;\n        if (!context || !canvas) {\n            console.error(\"Failed to create chart: can't acquire context from the given item\");\n            return;\n        }\n        animator.listen(this, 'complete', onAnimationsComplete);\n        animator.listen(this, 'progress', onAnimationProgress);\n        this._initialize();\n        if (this.attached) {\n            this.update();\n        }\n    }\n    get aspectRatio() {\n        const { options: { aspectRatio , maintainAspectRatio  } , width , height , _aspectRatio  } = this;\n        if (!isNullOrUndef(aspectRatio)) {\n            return aspectRatio;\n        }\n        if (maintainAspectRatio && _aspectRatio) {\n            return _aspectRatio;\n        }\n        return height ? width / height : null;\n    }\n    get data() {\n        return this.config.data;\n    }\n    set data(data) {\n        this.config.data = data;\n    }\n    get options() {\n        return this._options;\n    }\n    set options(options) {\n        this.config.options = options;\n    }\n    get registry() {\n        return registry;\n    }\n _initialize() {\n        this.notifyPlugins('beforeInit');\n        if (this.options.responsive) {\n            this.resize();\n        } else {\n            retinaScale(this, this.options.devicePixelRatio);\n        }\n        this.bindEvents();\n        this.notifyPlugins('afterInit');\n        return this;\n    }\n    clear() {\n        clearCanvas(this.canvas, this.ctx);\n        return this;\n    }\n    stop() {\n        animator.stop(this);\n        return this;\n    }\n resize(width, height) {\n        if (!animator.running(this)) {\n            this._resize(width, height);\n        } else {\n            this._resizeBeforeDraw = {\n                width,\n                height\n            };\n        }\n    }\n    _resize(width, height) {\n        const options = this.options;\n        const canvas = this.canvas;\n        const aspectRatio = options.maintainAspectRatio && this.aspectRatio;\n        const newSize = this.platform.getMaximumSize(canvas, width, height, aspectRatio);\n        const newRatio = options.devicePixelRatio || this.platform.getDevicePixelRatio();\n        const mode = this.width ? 'resize' : 'attach';\n        this.width = newSize.width;\n        this.height = newSize.height;\n        this._aspectRatio = this.aspectRatio;\n        if (!retinaScale(this, newRatio, true)) {\n            return;\n        }\n        this.notifyPlugins('resize', {\n            size: newSize\n        });\n        callback(options.onResize, [\n            this,\n            newSize\n        ], this);\n        if (this.attached) {\n            if (this._doResize(mode)) {\n                this.render();\n            }\n        }\n    }\n    ensureScalesHaveIDs() {\n        const options = this.options;\n        const scalesOptions = options.scales || {};\n        each(scalesOptions, (axisOptions, axisID)=>{\n            axisOptions.id = axisID;\n        });\n    }\n buildOrUpdateScales() {\n        const options = this.options;\n        const scaleOpts = options.scales;\n        const scales = this.scales;\n        const updated = Object.keys(scales).reduce((obj, id)=>{\n            obj[id] = false;\n            return obj;\n        }, {});\n        let items = [];\n        if (scaleOpts) {\n            items = items.concat(Object.keys(scaleOpts).map((id)=>{\n                const scaleOptions = scaleOpts[id];\n                const axis = determineAxis(id, scaleOptions);\n                const isRadial = axis === 'r';\n                const isHorizontal = axis === 'x';\n                return {\n                    options: scaleOptions,\n                    dposition: isRadial ? 'chartArea' : isHorizontal ? 'bottom' : 'left',\n                    dtype: isRadial ? 'radialLinear' : isHorizontal ? 'category' : 'linear'\n                };\n            }));\n        }\n        each(items, (item)=>{\n            const scaleOptions = item.options;\n            const id = scaleOptions.id;\n            const axis = determineAxis(id, scaleOptions);\n            const scaleType = valueOrDefault(scaleOptions.type, item.dtype);\n            if (scaleOptions.position === undefined || positionIsHorizontal(scaleOptions.position, axis) !== positionIsHorizontal(item.dposition)) {\n                scaleOptions.position = item.dposition;\n            }\n            updated[id] = true;\n            let scale = null;\n            if (id in scales && scales[id].type === scaleType) {\n                scale = scales[id];\n            } else {\n                const scaleClass = registry.getScale(scaleType);\n                scale = new scaleClass({\n                    id,\n                    type: scaleType,\n                    ctx: this.ctx,\n                    chart: this\n                });\n                scales[scale.id] = scale;\n            }\n            scale.init(scaleOptions, options);\n        });\n        each(updated, (hasUpdated, id)=>{\n            if (!hasUpdated) {\n                delete scales[id];\n            }\n        });\n        each(scales, (scale)=>{\n            layouts.configure(this, scale, scale.options);\n            layouts.addBox(this, scale);\n        });\n    }\n _updateMetasets() {\n        const metasets = this._metasets;\n        const numData = this.data.datasets.length;\n        const numMeta = metasets.length;\n        metasets.sort((a, b)=>a.index - b.index);\n        if (numMeta > numData) {\n            for(let i = numData; i < numMeta; ++i){\n                this._destroyDatasetMeta(i);\n            }\n            metasets.splice(numData, numMeta - numData);\n        }\n        this._sortedMetasets = metasets.slice(0).sort(compare2Level('order', 'index'));\n    }\n _removeUnreferencedMetasets() {\n        const { _metasets: metasets , data: { datasets  }  } = this;\n        if (metasets.length > datasets.length) {\n            delete this._stacks;\n        }\n        metasets.forEach((meta, index)=>{\n            if (datasets.filter((x)=>x === meta._dataset).length === 0) {\n                this._destroyDatasetMeta(index);\n            }\n        });\n    }\n    buildOrUpdateControllers() {\n        const newControllers = [];\n        const datasets = this.data.datasets;\n        let i, ilen;\n        this._removeUnreferencedMetasets();\n        for(i = 0, ilen = datasets.length; i < ilen; i++){\n            const dataset = datasets[i];\n            let meta = this.getDatasetMeta(i);\n            const type = dataset.type || this.config.type;\n            if (meta.type && meta.type !== type) {\n                this._destroyDatasetMeta(i);\n                meta = this.getDatasetMeta(i);\n            }\n            meta.type = type;\n            meta.indexAxis = dataset.indexAxis || getIndexAxis(type, this.options);\n            meta.order = dataset.order || 0;\n            meta.index = i;\n            meta.label = '' + dataset.label;\n            meta.visible = this.isDatasetVisible(i);\n            if (meta.controller) {\n                meta.controller.updateIndex(i);\n                meta.controller.linkScales();\n            } else {\n                const ControllerClass = registry.getController(type);\n                const { datasetElementType , dataElementType  } = defaults.datasets[type];\n                Object.assign(ControllerClass, {\n                    dataElementType: registry.getElement(dataElementType),\n                    datasetElementType: datasetElementType && registry.getElement(datasetElementType)\n                });\n                meta.controller = new ControllerClass(this, i);\n                newControllers.push(meta.controller);\n            }\n        }\n        this._updateMetasets();\n        return newControllers;\n    }\n _resetElements() {\n        each(this.data.datasets, (dataset, datasetIndex)=>{\n            this.getDatasetMeta(datasetIndex).controller.reset();\n        }, this);\n    }\n reset() {\n        this._resetElements();\n        this.notifyPlugins('reset');\n    }\n    update(mode) {\n        const config = this.config;\n        config.update();\n        const options = this._options = config.createResolver(config.chartOptionScopes(), this.getContext());\n        const animsDisabled = this._animationsDisabled = !options.animation;\n        this._updateScales();\n        this._checkEventBindings();\n        this._updateHiddenIndices();\n        this._plugins.invalidate();\n        if (this.notifyPlugins('beforeUpdate', {\n            mode,\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const newControllers = this.buildOrUpdateControllers();\n        this.notifyPlugins('beforeElementsUpdate');\n        let minPadding = 0;\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; i++){\n            const { controller  } = this.getDatasetMeta(i);\n            const reset = !animsDisabled && newControllers.indexOf(controller) === -1;\n            controller.buildOrUpdateElements(reset);\n            minPadding = Math.max(+controller.getMaxOverflow(), minPadding);\n        }\n        minPadding = this._minPadding = options.layout.autoPadding ? minPadding : 0;\n        this._updateLayout(minPadding);\n        if (!animsDisabled) {\n            each(newControllers, (controller)=>{\n                controller.reset();\n            });\n        }\n        this._updateDatasets(mode);\n        this.notifyPlugins('afterUpdate', {\n            mode\n        });\n        this._layers.sort(compare2Level('z', '_idx'));\n        const { _active , _lastEvent  } = this;\n        if (_lastEvent) {\n            this._eventHandler(_lastEvent, true);\n        } else if (_active.length) {\n            this._updateHoverStyles(_active, _active, true);\n        }\n        this.render();\n    }\n _updateScales() {\n        each(this.scales, (scale)=>{\n            layouts.removeBox(this, scale);\n        });\n        this.ensureScalesHaveIDs();\n        this.buildOrUpdateScales();\n    }\n _checkEventBindings() {\n        const options = this.options;\n        const existingEvents = new Set(Object.keys(this._listeners));\n        const newEvents = new Set(options.events);\n        if (!setsEqual(existingEvents, newEvents) || !!this._responsiveListeners !== options.responsive) {\n            this.unbindEvents();\n            this.bindEvents();\n        }\n    }\n _updateHiddenIndices() {\n        const { _hiddenIndices  } = this;\n        const changes = this._getUniformDataChanges() || [];\n        for (const { method , start , count  } of changes){\n            const move = method === '_removeElements' ? -count : count;\n            moveNumericKeys(_hiddenIndices, start, move);\n        }\n    }\n _getUniformDataChanges() {\n        const _dataChanges = this._dataChanges;\n        if (!_dataChanges || !_dataChanges.length) {\n            return;\n        }\n        this._dataChanges = [];\n        const datasetCount = this.data.datasets.length;\n        const makeSet = (idx)=>new Set(_dataChanges.filter((c)=>c[0] === idx).map((c, i)=>i + ',' + c.splice(1).join(',')));\n        const changeSet = makeSet(0);\n        for(let i = 1; i < datasetCount; i++){\n            if (!setsEqual(changeSet, makeSet(i))) {\n                return;\n            }\n        }\n        return Array.from(changeSet).map((c)=>c.split(',')).map((a)=>({\n                method: a[1],\n                start: +a[2],\n                count: +a[3]\n            }));\n    }\n _updateLayout(minPadding) {\n        if (this.notifyPlugins('beforeLayout', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        layouts.update(this, this.width, this.height, minPadding);\n        const area = this.chartArea;\n        const noArea = area.width <= 0 || area.height <= 0;\n        this._layers = [];\n        each(this.boxes, (box)=>{\n            if (noArea && box.position === 'chartArea') {\n                return;\n            }\n            if (box.configure) {\n                box.configure();\n            }\n            this._layers.push(...box._layers());\n        }, this);\n        this._layers.forEach((item, index)=>{\n            item._idx = index;\n        });\n        this.notifyPlugins('afterLayout');\n    }\n _updateDatasets(mode) {\n        if (this.notifyPlugins('beforeDatasetsUpdate', {\n            mode,\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this.getDatasetMeta(i).controller.configure();\n        }\n        for(let i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this._updateDataset(i, isFunction(mode) ? mode({\n                datasetIndex: i\n            }) : mode);\n        }\n        this.notifyPlugins('afterDatasetsUpdate', {\n            mode\n        });\n    }\n _updateDataset(index, mode) {\n        const meta = this.getDatasetMeta(index);\n        const args = {\n            meta,\n            index,\n            mode,\n            cancelable: true\n        };\n        if (this.notifyPlugins('beforeDatasetUpdate', args) === false) {\n            return;\n        }\n        meta.controller._update(mode);\n        args.cancelable = false;\n        this.notifyPlugins('afterDatasetUpdate', args);\n    }\n    render() {\n        if (this.notifyPlugins('beforeRender', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        if (animator.has(this)) {\n            if (this.attached && !animator.running(this)) {\n                animator.start(this);\n            }\n        } else {\n            this.draw();\n            onAnimationsComplete({\n                chart: this\n            });\n        }\n    }\n    draw() {\n        let i;\n        if (this._resizeBeforeDraw) {\n            const { width , height  } = this._resizeBeforeDraw;\n            this._resizeBeforeDraw = null;\n            this._resize(width, height);\n        }\n        this.clear();\n        if (this.width <= 0 || this.height <= 0) {\n            return;\n        }\n        if (this.notifyPlugins('beforeDraw', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const layers = this._layers;\n        for(i = 0; i < layers.length && layers[i].z <= 0; ++i){\n            layers[i].draw(this.chartArea);\n        }\n        this._drawDatasets();\n        for(; i < layers.length; ++i){\n            layers[i].draw(this.chartArea);\n        }\n        this.notifyPlugins('afterDraw');\n    }\n _getSortedDatasetMetas(filterVisible) {\n        const metasets = this._sortedMetasets;\n        const result = [];\n        let i, ilen;\n        for(i = 0, ilen = metasets.length; i < ilen; ++i){\n            const meta = metasets[i];\n            if (!filterVisible || meta.visible) {\n                result.push(meta);\n            }\n        }\n        return result;\n    }\n getSortedVisibleDatasetMetas() {\n        return this._getSortedDatasetMetas(true);\n    }\n _drawDatasets() {\n        if (this.notifyPlugins('beforeDatasetsDraw', {\n            cancelable: true\n        }) === false) {\n            return;\n        }\n        const metasets = this.getSortedVisibleDatasetMetas();\n        for(let i = metasets.length - 1; i >= 0; --i){\n            this._drawDataset(metasets[i]);\n        }\n        this.notifyPlugins('afterDatasetsDraw');\n    }\n _drawDataset(meta) {\n        const ctx = this.ctx;\n        const args = {\n            meta,\n            index: meta.index,\n            cancelable: true\n        };\n        const clip = getDatasetClipArea(this, meta);\n        if (this.notifyPlugins('beforeDatasetDraw', args) === false) {\n            return;\n        }\n        if (clip) {\n            clipArea(ctx, clip);\n        }\n        meta.controller.draw();\n        if (clip) {\n            unclipArea(ctx);\n        }\n        args.cancelable = false;\n        this.notifyPlugins('afterDatasetDraw', args);\n    }\n isPointInArea(point) {\n        return _isPointInArea(point, this.chartArea, this._minPadding);\n    }\n    getElementsAtEventForMode(e, mode, options, useFinalPosition) {\n        const method = Interaction.modes[mode];\n        if (typeof method === 'function') {\n            return method(this, e, options, useFinalPosition);\n        }\n        return [];\n    }\n    getDatasetMeta(datasetIndex) {\n        const dataset = this.data.datasets[datasetIndex];\n        const metasets = this._metasets;\n        let meta = metasets.filter((x)=>x && x._dataset === dataset).pop();\n        if (!meta) {\n            meta = {\n                type: null,\n                data: [],\n                dataset: null,\n                controller: null,\n                hidden: null,\n                xAxisID: null,\n                yAxisID: null,\n                order: dataset && dataset.order || 0,\n                index: datasetIndex,\n                _dataset: dataset,\n                _parsed: [],\n                _sorted: false\n            };\n            metasets.push(meta);\n        }\n        return meta;\n    }\n    getContext() {\n        return this.$context || (this.$context = createContext(null, {\n            chart: this,\n            type: 'chart'\n        }));\n    }\n    getVisibleDatasetCount() {\n        return this.getSortedVisibleDatasetMetas().length;\n    }\n    isDatasetVisible(datasetIndex) {\n        const dataset = this.data.datasets[datasetIndex];\n        if (!dataset) {\n            return false;\n        }\n        const meta = this.getDatasetMeta(datasetIndex);\n        return typeof meta.hidden === 'boolean' ? !meta.hidden : !dataset.hidden;\n    }\n    setDatasetVisibility(datasetIndex, visible) {\n        const meta = this.getDatasetMeta(datasetIndex);\n        meta.hidden = !visible;\n    }\n    toggleDataVisibility(index) {\n        this._hiddenIndices[index] = !this._hiddenIndices[index];\n    }\n    getDataVisibility(index) {\n        return !this._hiddenIndices[index];\n    }\n _updateVisibility(datasetIndex, dataIndex, visible) {\n        const mode = visible ? 'show' : 'hide';\n        const meta = this.getDatasetMeta(datasetIndex);\n        const anims = meta.controller._resolveAnimations(undefined, mode);\n        if (defined(dataIndex)) {\n            meta.data[dataIndex].hidden = !visible;\n            this.update();\n        } else {\n            this.setDatasetVisibility(datasetIndex, visible);\n            anims.update(meta, {\n                visible\n            });\n            this.update((ctx)=>ctx.datasetIndex === datasetIndex ? mode : undefined);\n        }\n    }\n    hide(datasetIndex, dataIndex) {\n        this._updateVisibility(datasetIndex, dataIndex, false);\n    }\n    show(datasetIndex, dataIndex) {\n        this._updateVisibility(datasetIndex, dataIndex, true);\n    }\n _destroyDatasetMeta(datasetIndex) {\n        const meta = this._metasets[datasetIndex];\n        if (meta && meta.controller) {\n            meta.controller._destroy();\n        }\n        delete this._metasets[datasetIndex];\n    }\n    _stop() {\n        let i, ilen;\n        this.stop();\n        animator.remove(this);\n        for(i = 0, ilen = this.data.datasets.length; i < ilen; ++i){\n            this._destroyDatasetMeta(i);\n        }\n    }\n    destroy() {\n        this.notifyPlugins('beforeDestroy');\n        const { canvas , ctx  } = this;\n        this._stop();\n        this.config.clearCache();\n        if (canvas) {\n            this.unbindEvents();\n            clearCanvas(canvas, ctx);\n            this.platform.releaseContext(ctx);\n            this.canvas = null;\n            this.ctx = null;\n        }\n        delete instances[this.id];\n        this.notifyPlugins('afterDestroy');\n    }\n    toBase64Image(...args) {\n        return this.canvas.toDataURL(...args);\n    }\n bindEvents() {\n        this.bindUserEvents();\n        if (this.options.responsive) {\n            this.bindResponsiveEvents();\n        } else {\n            this.attached = true;\n        }\n    }\n bindUserEvents() {\n        const listeners = this._listeners;\n        const platform = this.platform;\n        const _add = (type, listener)=>{\n            platform.addEventListener(this, type, listener);\n            listeners[type] = listener;\n        };\n        const listener = (e, x, y)=>{\n            e.offsetX = x;\n            e.offsetY = y;\n            this._eventHandler(e);\n        };\n        each(this.options.events, (type)=>_add(type, listener));\n    }\n bindResponsiveEvents() {\n        if (!this._responsiveListeners) {\n            this._responsiveListeners = {};\n        }\n        const listeners = this._responsiveListeners;\n        const platform = this.platform;\n        const _add = (type, listener)=>{\n            platform.addEventListener(this, type, listener);\n            listeners[type] = listener;\n        };\n        const _remove = (type, listener)=>{\n            if (listeners[type]) {\n                platform.removeEventListener(this, type, listener);\n                delete listeners[type];\n            }\n        };\n        const listener = (width, height)=>{\n            if (this.canvas) {\n                this.resize(width, height);\n            }\n        };\n        let detached;\n        const attached = ()=>{\n            _remove('attach', attached);\n            this.attached = true;\n            this.resize();\n            _add('resize', listener);\n            _add('detach', detached);\n        };\n        detached = ()=>{\n            this.attached = false;\n            _remove('resize', listener);\n            this._stop();\n            this._resize(0, 0);\n            _add('attach', attached);\n        };\n        if (platform.isAttached(this.canvas)) {\n            attached();\n        } else {\n            detached();\n        }\n    }\n unbindEvents() {\n        each(this._listeners, (listener, type)=>{\n            this.platform.removeEventListener(this, type, listener);\n        });\n        this._listeners = {};\n        each(this._responsiveListeners, (listener, type)=>{\n            this.platform.removeEventListener(this, type, listener);\n        });\n        this._responsiveListeners = undefined;\n    }\n    updateHoverStyle(items, mode, enabled) {\n        const prefix = enabled ? 'set' : 'remove';\n        let meta, item, i, ilen;\n        if (mode === 'dataset') {\n            meta = this.getDatasetMeta(items[0].datasetIndex);\n            meta.controller['_' + prefix + 'DatasetHoverStyle']();\n        }\n        for(i = 0, ilen = items.length; i < ilen; ++i){\n            item = items[i];\n            const controller = item && this.getDatasetMeta(item.datasetIndex).controller;\n            if (controller) {\n                controller[prefix + 'HoverStyle'](item.element, item.datasetIndex, item.index);\n            }\n        }\n    }\n getActiveElements() {\n        return this._active || [];\n    }\n setActiveElements(activeElements) {\n        const lastActive = this._active || [];\n        const active = activeElements.map(({ datasetIndex , index  })=>{\n            const meta = this.getDatasetMeta(datasetIndex);\n            if (!meta) {\n                throw new Error('No dataset found at index ' + datasetIndex);\n            }\n            return {\n                datasetIndex,\n                element: meta.data[index],\n                index\n            };\n        });\n        const changed = !_elementsEqual(active, lastActive);\n        if (changed) {\n            this._active = active;\n            this._lastEvent = null;\n            this._updateHoverStyles(active, lastActive);\n        }\n    }\n notifyPlugins(hook, args, filter) {\n        return this._plugins.notify(this, hook, args, filter);\n    }\n isPluginEnabled(pluginId) {\n        return this._plugins._cache.filter((p)=>p.plugin.id === pluginId).length === 1;\n    }\n _updateHoverStyles(active, lastActive, replay) {\n        const hoverOptions = this.options.hover;\n        const diff = (a, b)=>a.filter((x)=>!b.some((y)=>x.datasetIndex === y.datasetIndex && x.index === y.index));\n        const deactivated = diff(lastActive, active);\n        const activated = replay ? active : diff(active, lastActive);\n        if (deactivated.length) {\n            this.updateHoverStyle(deactivated, hoverOptions.mode, false);\n        }\n        if (activated.length && hoverOptions.mode) {\n            this.updateHoverStyle(activated, hoverOptions.mode, true);\n        }\n    }\n _eventHandler(e, replay) {\n        const args = {\n            event: e,\n            replay,\n            cancelable: true,\n            inChartArea: this.isPointInArea(e)\n        };\n        const eventFilter = (plugin)=>(plugin.options.events || this.options.events).includes(e.native.type);\n        if (this.notifyPlugins('beforeEvent', args, eventFilter) === false) {\n            return;\n        }\n        const changed = this._handleEvent(e, replay, args.inChartArea);\n        args.cancelable = false;\n        this.notifyPlugins('afterEvent', args, eventFilter);\n        if (changed || args.changed) {\n            this.render();\n        }\n        return this;\n    }\n _handleEvent(e, replay, inChartArea) {\n        const { _active: lastActive = [] , options  } = this;\n        const useFinalPosition = replay;\n        const active = this._getActiveElements(e, lastActive, inChartArea, useFinalPosition);\n        const isClick = _isClickEvent(e);\n        const lastEvent = determineLastEvent(e, this._lastEvent, inChartArea, isClick);\n        if (inChartArea) {\n            this._lastEvent = null;\n            callback(options.onHover, [\n                e,\n                active,\n                this\n            ], this);\n            if (isClick) {\n                callback(options.onClick, [\n                    e,\n                    active,\n                    this\n                ], this);\n            }\n        }\n        const changed = !_elementsEqual(active, lastActive);\n        if (changed || replay) {\n            this._active = active;\n            this._updateHoverStyles(active, lastActive, replay);\n        }\n        this._lastEvent = lastEvent;\n        return changed;\n    }\n _getActiveElements(e, lastActive, inChartArea, useFinalPosition) {\n        if (e.type === 'mouseout') {\n            return [];\n        }\n        if (!inChartArea) {\n            return lastActive;\n        }\n        const hoverOptions = this.options.hover;\n        return this.getElementsAtEventForMode(e, hoverOptions.mode, hoverOptions, useFinalPosition);\n    }\n}\nfunction invalidatePlugins() {\n    return each(Chart.instances, (chart)=>chart._plugins.invalidate());\n}\n\nfunction clipSelf(ctx, element, endAngle) {\n    const { startAngle , x , y , outerRadius , innerRadius , options  } = element;\n    const { borderWidth , borderJoinStyle  } = options;\n    const outerAngleClip = Math.min(borderWidth / outerRadius, _normalizeAngle(startAngle - endAngle));\n    ctx.beginPath();\n    ctx.arc(x, y, outerRadius - borderWidth / 2, startAngle + outerAngleClip / 2, endAngle - outerAngleClip / 2);\n    if (innerRadius > 0) {\n        const innerAngleClip = Math.min(borderWidth / innerRadius, _normalizeAngle(startAngle - endAngle));\n        ctx.arc(x, y, innerRadius + borderWidth / 2, endAngle - innerAngleClip / 2, startAngle + innerAngleClip / 2, true);\n    } else {\n        const clipWidth = Math.min(borderWidth / 2, outerRadius * _normalizeAngle(startAngle - endAngle));\n        if (borderJoinStyle === 'round') {\n            ctx.arc(x, y, clipWidth, endAngle - PI / 2, startAngle + PI / 2, true);\n        } else if (borderJoinStyle === 'bevel') {\n            const r = 2 * clipWidth * clipWidth;\n            const endX = -r * Math.cos(endAngle + PI / 2) + x;\n            const endY = -r * Math.sin(endAngle + PI / 2) + y;\n            const startX = r * Math.cos(startAngle + PI / 2) + x;\n            const startY = r * Math.sin(startAngle + PI / 2) + y;\n            ctx.lineTo(endX, endY);\n            ctx.lineTo(startX, startY);\n        }\n    }\n    ctx.closePath();\n    ctx.moveTo(0, 0);\n    ctx.rect(0, 0, ctx.canvas.width, ctx.canvas.height);\n    ctx.clip('evenodd');\n}\nfunction clipArc(ctx, element, endAngle) {\n    const { startAngle , pixelMargin , x , y , outerRadius , innerRadius  } = element;\n    let angleMargin = pixelMargin / outerRadius;\n    // Draw an inner border by clipping the arc and drawing a double-width border\n    // Enlarge the clipping arc by 0.33 pixels to eliminate glitches between borders\n    ctx.beginPath();\n    ctx.arc(x, y, outerRadius, startAngle - angleMargin, endAngle + angleMargin);\n    if (innerRadius > pixelMargin) {\n        angleMargin = pixelMargin / innerRadius;\n        ctx.arc(x, y, innerRadius, endAngle + angleMargin, startAngle - angleMargin, true);\n    } else {\n        ctx.arc(x, y, pixelMargin, endAngle + HALF_PI, startAngle - HALF_PI);\n    }\n    ctx.closePath();\n    ctx.clip();\n}\nfunction toRadiusCorners(value) {\n    return _readValueToProps(value, [\n        'outerStart',\n        'outerEnd',\n        'innerStart',\n        'innerEnd'\n    ]);\n}\n/**\n * Parse border radius from the provided options\n */ function parseBorderRadius$1(arc, innerRadius, outerRadius, angleDelta) {\n    const o = toRadiusCorners(arc.options.borderRadius);\n    const halfThickness = (outerRadius - innerRadius) / 2;\n    const innerLimit = Math.min(halfThickness, angleDelta * innerRadius / 2);\n    // Outer limits are complicated. We want to compute the available angular distance at\n    // a radius of outerRadius - borderRadius because for small angular distances, this term limits.\n    // We compute at r = outerRadius - borderRadius because this circle defines the center of the border corners.\n    //\n    // If the borderRadius is large, that value can become negative.\n    // This causes the outer borders to lose their radius entirely, which is rather unexpected. To solve that, if borderRadius > outerRadius\n    // we know that the thickness term will dominate and compute the limits at that point\n    const computeOuterLimit = (val)=>{\n        const outerArcLimit = (outerRadius - Math.min(halfThickness, val)) * angleDelta / 2;\n        return _limitValue(val, 0, Math.min(halfThickness, outerArcLimit));\n    };\n    return {\n        outerStart: computeOuterLimit(o.outerStart),\n        outerEnd: computeOuterLimit(o.outerEnd),\n        innerStart: _limitValue(o.innerStart, 0, innerLimit),\n        innerEnd: _limitValue(o.innerEnd, 0, innerLimit)\n    };\n}\n/**\n * Convert (r, 𝜃) to (x, y)\n */ function rThetaToXY(r, theta, x, y) {\n    return {\n        x: x + r * Math.cos(theta),\n        y: y + r * Math.sin(theta)\n    };\n}\n/**\n * Path the arc, respecting border radius by separating into left and right halves.\n *\n *   Start      End\n *\n *    1--->a--->2    Outer\n *   /           \\\n *   8           3\n *   |           |\n *   |           |\n *   7           4\n *   \\           /\n *    6<---b<---5    Inner\n */ function pathArc(ctx, element, offset, spacing, end, circular) {\n    const { x , y , startAngle: start , pixelMargin , innerRadius: innerR  } = element;\n    const outerRadius = Math.max(element.outerRadius + spacing + offset - pixelMargin, 0);\n    const innerRadius = innerR > 0 ? innerR + spacing + offset + pixelMargin : 0;\n    let spacingOffset = 0;\n    const alpha = end - start;\n    if (spacing) {\n        // When spacing is present, it is the same for all items\n        // So we adjust the start and end angle of the arc such that\n        // the distance is the same as it would be without the spacing\n        const noSpacingInnerRadius = innerR > 0 ? innerR - spacing : 0;\n        const noSpacingOuterRadius = outerRadius > 0 ? outerRadius - spacing : 0;\n        const avNogSpacingRadius = (noSpacingInnerRadius + noSpacingOuterRadius) / 2;\n        const adjustedAngle = avNogSpacingRadius !== 0 ? alpha * avNogSpacingRadius / (avNogSpacingRadius + spacing) : alpha;\n        spacingOffset = (alpha - adjustedAngle) / 2;\n    }\n    const beta = Math.max(0.001, alpha * outerRadius - offset / PI) / outerRadius;\n    const angleOffset = (alpha - beta) / 2;\n    const startAngle = start + angleOffset + spacingOffset;\n    const endAngle = end - angleOffset - spacingOffset;\n    const { outerStart , outerEnd , innerStart , innerEnd  } = parseBorderRadius$1(element, innerRadius, outerRadius, endAngle - startAngle);\n    const outerStartAdjustedRadius = outerRadius - outerStart;\n    const outerEndAdjustedRadius = outerRadius - outerEnd;\n    const outerStartAdjustedAngle = startAngle + outerStart / outerStartAdjustedRadius;\n    const outerEndAdjustedAngle = endAngle - outerEnd / outerEndAdjustedRadius;\n    const innerStartAdjustedRadius = innerRadius + innerStart;\n    const innerEndAdjustedRadius = innerRadius + innerEnd;\n    const innerStartAdjustedAngle = startAngle + innerStart / innerStartAdjustedRadius;\n    const innerEndAdjustedAngle = endAngle - innerEnd / innerEndAdjustedRadius;\n    ctx.beginPath();\n    if (circular) {\n        // The first arc segments from point 1 to point a to point 2\n        const outerMidAdjustedAngle = (outerStartAdjustedAngle + outerEndAdjustedAngle) / 2;\n        ctx.arc(x, y, outerRadius, outerStartAdjustedAngle, outerMidAdjustedAngle);\n        ctx.arc(x, y, outerRadius, outerMidAdjustedAngle, outerEndAdjustedAngle);\n        // The corner segment from point 2 to point 3\n        if (outerEnd > 0) {\n            const pCenter = rThetaToXY(outerEndAdjustedRadius, outerEndAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, outerEnd, outerEndAdjustedAngle, endAngle + HALF_PI);\n        }\n        // The line from point 3 to point 4\n        const p4 = rThetaToXY(innerEndAdjustedRadius, endAngle, x, y);\n        ctx.lineTo(p4.x, p4.y);\n        // The corner segment from point 4 to point 5\n        if (innerEnd > 0) {\n            const pCenter = rThetaToXY(innerEndAdjustedRadius, innerEndAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, innerEnd, endAngle + HALF_PI, innerEndAdjustedAngle + Math.PI);\n        }\n        // The inner arc from point 5 to point b to point 6\n        const innerMidAdjustedAngle = (endAngle - innerEnd / innerRadius + (startAngle + innerStart / innerRadius)) / 2;\n        ctx.arc(x, y, innerRadius, endAngle - innerEnd / innerRadius, innerMidAdjustedAngle, true);\n        ctx.arc(x, y, innerRadius, innerMidAdjustedAngle, startAngle + innerStart / innerRadius, true);\n        // The corner segment from point 6 to point 7\n        if (innerStart > 0) {\n            const pCenter = rThetaToXY(innerStartAdjustedRadius, innerStartAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, innerStart, innerStartAdjustedAngle + Math.PI, startAngle - HALF_PI);\n        }\n        // The line from point 7 to point 8\n        const p8 = rThetaToXY(outerStartAdjustedRadius, startAngle, x, y);\n        ctx.lineTo(p8.x, p8.y);\n        // The corner segment from point 8 to point 1\n        if (outerStart > 0) {\n            const pCenter = rThetaToXY(outerStartAdjustedRadius, outerStartAdjustedAngle, x, y);\n            ctx.arc(pCenter.x, pCenter.y, outerStart, startAngle - HALF_PI, outerStartAdjustedAngle);\n        }\n    } else {\n        ctx.moveTo(x, y);\n        const outerStartX = Math.cos(outerStartAdjustedAngle) * outerRadius + x;\n        const outerStartY = Math.sin(outerStartAdjustedAngle) * outerRadius + y;\n        ctx.lineTo(outerStartX, outerStartY);\n        const outerEndX = Math.cos(outerEndAdjustedAngle) * outerRadius + x;\n        const outerEndY = Math.sin(outerEndAdjustedAngle) * outerRadius + y;\n        ctx.lineTo(outerEndX, outerEndY);\n    }\n    ctx.closePath();\n}\nfunction drawArc(ctx, element, offset, spacing, circular) {\n    const { fullCircles , startAngle , circumference  } = element;\n    let endAngle = element.endAngle;\n    if (fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        for(let i = 0; i < fullCircles; ++i){\n            ctx.fill();\n        }\n        if (!isNaN(circumference)) {\n            endAngle = startAngle + (circumference % TAU || TAU);\n        }\n    }\n    pathArc(ctx, element, offset, spacing, endAngle, circular);\n    ctx.fill();\n    return endAngle;\n}\nfunction drawBorder(ctx, element, offset, spacing, circular) {\n    const { fullCircles , startAngle , circumference , options  } = element;\n    const { borderWidth , borderJoinStyle , borderDash , borderDashOffset , borderRadius  } = options;\n    const inner = options.borderAlign === 'inner';\n    if (!borderWidth) {\n        return;\n    }\n    ctx.setLineDash(borderDash || []);\n    ctx.lineDashOffset = borderDashOffset;\n    if (inner) {\n        ctx.lineWidth = borderWidth * 2;\n        ctx.lineJoin = borderJoinStyle || 'round';\n    } else {\n        ctx.lineWidth = borderWidth;\n        ctx.lineJoin = borderJoinStyle || 'bevel';\n    }\n    let endAngle = element.endAngle;\n    if (fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        for(let i = 0; i < fullCircles; ++i){\n            ctx.stroke();\n        }\n        if (!isNaN(circumference)) {\n            endAngle = startAngle + (circumference % TAU || TAU);\n        }\n    }\n    if (inner) {\n        clipArc(ctx, element, endAngle);\n    }\n    if (options.selfJoin && endAngle - startAngle >= PI && borderRadius === 0 && borderJoinStyle !== 'miter') {\n        clipSelf(ctx, element, endAngle);\n    }\n    if (!fullCircles) {\n        pathArc(ctx, element, offset, spacing, endAngle, circular);\n        ctx.stroke();\n    }\n}\nclass ArcElement extends Element {\n    static id = 'arc';\n    static defaults = {\n        borderAlign: 'center',\n        borderColor: '#fff',\n        borderDash: [],\n        borderDashOffset: 0,\n        borderJoinStyle: undefined,\n        borderRadius: 0,\n        borderWidth: 2,\n        offset: 0,\n        spacing: 0,\n        angle: undefined,\n        circular: true,\n        selfJoin: false\n    };\n    static defaultRoutes = {\n        backgroundColor: 'backgroundColor'\n    };\n    static descriptors = {\n        _scriptable: true,\n        _indexable: (name)=>name !== 'borderDash'\n    };\n    circumference;\n    endAngle;\n    fullCircles;\n    innerRadius;\n    outerRadius;\n    pixelMargin;\n    startAngle;\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.circumference = undefined;\n        this.startAngle = undefined;\n        this.endAngle = undefined;\n        this.innerRadius = undefined;\n        this.outerRadius = undefined;\n        this.pixelMargin = 0;\n        this.fullCircles = 0;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    inRange(chartX, chartY, useFinalPosition) {\n        const point = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        const { angle , distance  } = getAngleFromPoint(point, {\n            x: chartX,\n            y: chartY\n        });\n        const { startAngle , endAngle , innerRadius , outerRadius , circumference  } = this.getProps([\n            'startAngle',\n            'endAngle',\n            'innerRadius',\n            'outerRadius',\n            'circumference'\n        ], useFinalPosition);\n        const rAdjust = (this.options.spacing + this.options.borderWidth) / 2;\n        const _circumference = valueOrDefault(circumference, endAngle - startAngle);\n        const nonZeroBetween = _angleBetween(angle, startAngle, endAngle) && startAngle !== endAngle;\n        const betweenAngles = _circumference >= TAU || nonZeroBetween;\n        const withinRadius = _isBetween(distance, innerRadius + rAdjust, outerRadius + rAdjust);\n        return betweenAngles && withinRadius;\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y , startAngle , endAngle , innerRadius , outerRadius  } = this.getProps([\n            'x',\n            'y',\n            'startAngle',\n            'endAngle',\n            'innerRadius',\n            'outerRadius'\n        ], useFinalPosition);\n        const { offset , spacing  } = this.options;\n        const halfAngle = (startAngle + endAngle) / 2;\n        const halfRadius = (innerRadius + outerRadius + spacing + offset) / 2;\n        return {\n            x: x + Math.cos(halfAngle) * halfRadius,\n            y: y + Math.sin(halfAngle) * halfRadius\n        };\n    }\n    tooltipPosition(useFinalPosition) {\n        return this.getCenterPoint(useFinalPosition);\n    }\n    draw(ctx) {\n        const { options , circumference  } = this;\n        const offset = (options.offset || 0) / 4;\n        const spacing = (options.spacing || 0) / 2;\n        const circular = options.circular;\n        this.pixelMargin = options.borderAlign === 'inner' ? 0.33 : 0;\n        this.fullCircles = circumference > TAU ? Math.floor(circumference / TAU) : 0;\n        if (circumference === 0 || this.innerRadius < 0 || this.outerRadius < 0) {\n            return;\n        }\n        ctx.save();\n        const halfAngle = (this.startAngle + this.endAngle) / 2;\n        ctx.translate(Math.cos(halfAngle) * offset, Math.sin(halfAngle) * offset);\n        const fix = 1 - Math.sin(Math.min(PI, circumference || 0));\n        const radiusOffset = offset * fix;\n        ctx.fillStyle = options.backgroundColor;\n        ctx.strokeStyle = options.borderColor;\n        drawArc(ctx, this, radiusOffset, spacing, circular);\n        drawBorder(ctx, this, radiusOffset, spacing, circular);\n        ctx.restore();\n    }\n}\n\nfunction setStyle(ctx, options, style = options) {\n    ctx.lineCap = valueOrDefault(style.borderCapStyle, options.borderCapStyle);\n    ctx.setLineDash(valueOrDefault(style.borderDash, options.borderDash));\n    ctx.lineDashOffset = valueOrDefault(style.borderDashOffset, options.borderDashOffset);\n    ctx.lineJoin = valueOrDefault(style.borderJoinStyle, options.borderJoinStyle);\n    ctx.lineWidth = valueOrDefault(style.borderWidth, options.borderWidth);\n    ctx.strokeStyle = valueOrDefault(style.borderColor, options.borderColor);\n}\nfunction lineTo(ctx, previous, target) {\n    ctx.lineTo(target.x, target.y);\n}\n function getLineMethod(options) {\n    if (options.stepped) {\n        return _steppedLineTo;\n    }\n    if (options.tension || options.cubicInterpolationMode === 'monotone') {\n        return _bezierCurveTo;\n    }\n    return lineTo;\n}\nfunction pathVars(points, segment, params = {}) {\n    const count = points.length;\n    const { start: paramsStart = 0 , end: paramsEnd = count - 1  } = params;\n    const { start: segmentStart , end: segmentEnd  } = segment;\n    const start = Math.max(paramsStart, segmentStart);\n    const end = Math.min(paramsEnd, segmentEnd);\n    const outside = paramsStart < segmentStart && paramsEnd < segmentStart || paramsStart > segmentEnd && paramsEnd > segmentEnd;\n    return {\n        count,\n        start,\n        loop: segment.loop,\n        ilen: end < start && !outside ? count + end - start : end - start\n    };\n}\n function pathSegment(ctx, line, segment, params) {\n    const { points , options  } = line;\n    const { count , start , loop , ilen  } = pathVars(points, segment, params);\n    const lineMethod = getLineMethod(options);\n    let { move =true , reverse  } = params || {};\n    let i, point, prev;\n    for(i = 0; i <= ilen; ++i){\n        point = points[(start + (reverse ? ilen - i : i)) % count];\n        if (point.skip) {\n            continue;\n        } else if (move) {\n            ctx.moveTo(point.x, point.y);\n            move = false;\n        } else {\n            lineMethod(ctx, prev, point, reverse, options.stepped);\n        }\n        prev = point;\n    }\n    if (loop) {\n        point = points[(start + (reverse ? ilen : 0)) % count];\n        lineMethod(ctx, prev, point, reverse, options.stepped);\n    }\n    return !!loop;\n}\n function fastPathSegment(ctx, line, segment, params) {\n    const points = line.points;\n    const { count , start , ilen  } = pathVars(points, segment, params);\n    const { move =true , reverse  } = params || {};\n    let avgX = 0;\n    let countX = 0;\n    let i, point, prevX, minY, maxY, lastY;\n    const pointIndex = (index)=>(start + (reverse ? ilen - index : index)) % count;\n    const drawX = ()=>{\n        if (minY !== maxY) {\n            ctx.lineTo(avgX, maxY);\n            ctx.lineTo(avgX, minY);\n            ctx.lineTo(avgX, lastY);\n        }\n    };\n    if (move) {\n        point = points[pointIndex(0)];\n        ctx.moveTo(point.x, point.y);\n    }\n    for(i = 0; i <= ilen; ++i){\n        point = points[pointIndex(i)];\n        if (point.skip) {\n            continue;\n        }\n        const x = point.x;\n        const y = point.y;\n        const truncX = x | 0;\n        if (truncX === prevX) {\n            if (y < minY) {\n                minY = y;\n            } else if (y > maxY) {\n                maxY = y;\n            }\n            avgX = (countX * avgX + x) / ++countX;\n        } else {\n            drawX();\n            ctx.lineTo(x, y);\n            prevX = truncX;\n            countX = 0;\n            minY = maxY = y;\n        }\n        lastY = y;\n    }\n    drawX();\n}\n function _getSegmentMethod(line) {\n    const opts = line.options;\n    const borderDash = opts.borderDash && opts.borderDash.length;\n    const useFastPath = !line._decimated && !line._loop && !opts.tension && opts.cubicInterpolationMode !== 'monotone' && !opts.stepped && !borderDash;\n    return useFastPath ? fastPathSegment : pathSegment;\n}\n function _getInterpolationMethod(options) {\n    if (options.stepped) {\n        return _steppedInterpolation;\n    }\n    if (options.tension || options.cubicInterpolationMode === 'monotone') {\n        return _bezierInterpolation;\n    }\n    return _pointInLine;\n}\nfunction strokePathWithCache(ctx, line, start, count) {\n    let path = line._path;\n    if (!path) {\n        path = line._path = new Path2D();\n        if (line.path(path, start, count)) {\n            path.closePath();\n        }\n    }\n    setStyle(ctx, line.options);\n    ctx.stroke(path);\n}\nfunction strokePathDirect(ctx, line, start, count) {\n    const { segments , options  } = line;\n    const segmentMethod = _getSegmentMethod(line);\n    for (const segment of segments){\n        setStyle(ctx, options, segment.style);\n        ctx.beginPath();\n        if (segmentMethod(ctx, line, segment, {\n            start,\n            end: start + count - 1\n        })) {\n            ctx.closePath();\n        }\n        ctx.stroke();\n    }\n}\nconst usePath2D = typeof Path2D === 'function';\nfunction draw(ctx, line, start, count) {\n    if (usePath2D && !line.options.segment) {\n        strokePathWithCache(ctx, line, start, count);\n    } else {\n        strokePathDirect(ctx, line, start, count);\n    }\n}\nclass LineElement extends Element {\n    static id = 'line';\n static defaults = {\n        borderCapStyle: 'butt',\n        borderDash: [],\n        borderDashOffset: 0,\n        borderJoinStyle: 'miter',\n        borderWidth: 3,\n        capBezierPoints: true,\n        cubicInterpolationMode: 'default',\n        fill: false,\n        spanGaps: false,\n        stepped: false,\n        tension: 0\n    };\n static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    static descriptors = {\n        _scriptable: true,\n        _indexable: (name)=>name !== 'borderDash' && name !== 'fill'\n    };\n    constructor(cfg){\n        super();\n        this.animated = true;\n        this.options = undefined;\n        this._chart = undefined;\n        this._loop = undefined;\n        this._fullLoop = undefined;\n        this._path = undefined;\n        this._points = undefined;\n        this._segments = undefined;\n        this._decimated = false;\n        this._pointsUpdated = false;\n        this._datasetIndex = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    updateControlPoints(chartArea, indexAxis) {\n        const options = this.options;\n        if ((options.tension || options.cubicInterpolationMode === 'monotone') && !options.stepped && !this._pointsUpdated) {\n            const loop = options.spanGaps ? this._loop : this._fullLoop;\n            _updateBezierControlPoints(this._points, options, chartArea, loop, indexAxis);\n            this._pointsUpdated = true;\n        }\n    }\n    set points(points) {\n        this._points = points;\n        delete this._segments;\n        delete this._path;\n        this._pointsUpdated = false;\n    }\n    get points() {\n        return this._points;\n    }\n    get segments() {\n        return this._segments || (this._segments = _computeSegments(this, this.options.segment));\n    }\n first() {\n        const segments = this.segments;\n        const points = this.points;\n        return segments.length && points[segments[0].start];\n    }\n last() {\n        const segments = this.segments;\n        const points = this.points;\n        const count = segments.length;\n        return count && points[segments[count - 1].end];\n    }\n interpolate(point, property) {\n        const options = this.options;\n        const value = point[property];\n        const points = this.points;\n        const segments = _boundSegments(this, {\n            property,\n            start: value,\n            end: value\n        });\n        if (!segments.length) {\n            return;\n        }\n        const result = [];\n        const _interpolate = _getInterpolationMethod(options);\n        let i, ilen;\n        for(i = 0, ilen = segments.length; i < ilen; ++i){\n            const { start , end  } = segments[i];\n            const p1 = points[start];\n            const p2 = points[end];\n            if (p1 === p2) {\n                result.push(p1);\n                continue;\n            }\n            const t = Math.abs((value - p1[property]) / (p2[property] - p1[property]));\n            const interpolated = _interpolate(p1, p2, t, options.stepped);\n            interpolated[property] = point[property];\n            result.push(interpolated);\n        }\n        return result.length === 1 ? result[0] : result;\n    }\n pathSegment(ctx, segment, params) {\n        const segmentMethod = _getSegmentMethod(this);\n        return segmentMethod(ctx, this, segment, params);\n    }\n path(ctx, start, count) {\n        const segments = this.segments;\n        const segmentMethod = _getSegmentMethod(this);\n        let loop = this._loop;\n        start = start || 0;\n        count = count || this.points.length - start;\n        for (const segment of segments){\n            loop &= segmentMethod(ctx, this, segment, {\n                start,\n                end: start + count - 1\n            });\n        }\n        return !!loop;\n    }\n draw(ctx, chartArea, start, count) {\n        const options = this.options || {};\n        const points = this.points || [];\n        if (points.length && options.borderWidth) {\n            ctx.save();\n            draw(ctx, this, start, count);\n            ctx.restore();\n        }\n        if (this.animated) {\n            this._pointsUpdated = false;\n            this._path = undefined;\n        }\n    }\n}\n\nfunction inRange$1(el, pos, axis, useFinalPosition) {\n    const options = el.options;\n    const { [axis]: value  } = el.getProps([\n        axis\n    ], useFinalPosition);\n    return Math.abs(pos - value) < options.radius + options.hitRadius;\n}\nclass PointElement extends Element {\n    static id = 'point';\n    parsed;\n    skip;\n    stop;\n    /**\n   * @type {any}\n   */ static defaults = {\n        borderWidth: 1,\n        hitRadius: 1,\n        hoverBorderWidth: 1,\n        hoverRadius: 4,\n        pointStyle: 'circle',\n        radius: 3,\n        rotation: 0\n    };\n    /**\n   * @type {any}\n   */ static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.parsed = undefined;\n        this.skip = undefined;\n        this.stop = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    inRange(mouseX, mouseY, useFinalPosition) {\n        const options = this.options;\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return Math.pow(mouseX - x, 2) + Math.pow(mouseY - y, 2) < Math.pow(options.hitRadius + options.radius, 2);\n    }\n    inXRange(mouseX, useFinalPosition) {\n        return inRange$1(this, mouseX, 'x', useFinalPosition);\n    }\n    inYRange(mouseY, useFinalPosition) {\n        return inRange$1(this, mouseY, 'y', useFinalPosition);\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y  } = this.getProps([\n            'x',\n            'y'\n        ], useFinalPosition);\n        return {\n            x,\n            y\n        };\n    }\n    size(options) {\n        options = options || this.options || {};\n        let radius = options.radius || 0;\n        radius = Math.max(radius, radius && options.hoverRadius || 0);\n        const borderWidth = radius && options.borderWidth || 0;\n        return (radius + borderWidth) * 2;\n    }\n    draw(ctx, area) {\n        const options = this.options;\n        if (this.skip || options.radius < 0.1 || !_isPointInArea(this, area, this.size(options) / 2)) {\n            return;\n        }\n        ctx.strokeStyle = options.borderColor;\n        ctx.lineWidth = options.borderWidth;\n        ctx.fillStyle = options.backgroundColor;\n        drawPoint(ctx, options, this.x, this.y);\n    }\n    getRange() {\n        const options = this.options || {};\n        // @ts-expect-error Fallbacks should never be hit in practice\n        return options.radius + options.hitRadius;\n    }\n}\n\nfunction getBarBounds(bar, useFinalPosition) {\n    const { x , y , base , width , height  } =  bar.getProps([\n        'x',\n        'y',\n        'base',\n        'width',\n        'height'\n    ], useFinalPosition);\n    let left, right, top, bottom, half;\n    if (bar.horizontal) {\n        half = height / 2;\n        left = Math.min(x, base);\n        right = Math.max(x, base);\n        top = y - half;\n        bottom = y + half;\n    } else {\n        half = width / 2;\n        left = x - half;\n        right = x + half;\n        top = Math.min(y, base);\n        bottom = Math.max(y, base);\n    }\n    return {\n        left,\n        top,\n        right,\n        bottom\n    };\n}\nfunction skipOrLimit(skip, value, min, max) {\n    return skip ? 0 : _limitValue(value, min, max);\n}\nfunction parseBorderWidth(bar, maxW, maxH) {\n    const value = bar.options.borderWidth;\n    const skip = bar.borderSkipped;\n    const o = toTRBL(value);\n    return {\n        t: skipOrLimit(skip.top, o.top, 0, maxH),\n        r: skipOrLimit(skip.right, o.right, 0, maxW),\n        b: skipOrLimit(skip.bottom, o.bottom, 0, maxH),\n        l: skipOrLimit(skip.left, o.left, 0, maxW)\n    };\n}\nfunction parseBorderRadius(bar, maxW, maxH) {\n    const { enableBorderRadius  } = bar.getProps([\n        'enableBorderRadius'\n    ]);\n    const value = bar.options.borderRadius;\n    const o = toTRBLCorners(value);\n    const maxR = Math.min(maxW, maxH);\n    const skip = bar.borderSkipped;\n    const enableBorder = enableBorderRadius || isObject(value);\n    return {\n        topLeft: skipOrLimit(!enableBorder || skip.top || skip.left, o.topLeft, 0, maxR),\n        topRight: skipOrLimit(!enableBorder || skip.top || skip.right, o.topRight, 0, maxR),\n        bottomLeft: skipOrLimit(!enableBorder || skip.bottom || skip.left, o.bottomLeft, 0, maxR),\n        bottomRight: skipOrLimit(!enableBorder || skip.bottom || skip.right, o.bottomRight, 0, maxR)\n    };\n}\nfunction boundingRects(bar) {\n    const bounds = getBarBounds(bar);\n    const width = bounds.right - bounds.left;\n    const height = bounds.bottom - bounds.top;\n    const border = parseBorderWidth(bar, width / 2, height / 2);\n    const radius = parseBorderRadius(bar, width / 2, height / 2);\n    return {\n        outer: {\n            x: bounds.left,\n            y: bounds.top,\n            w: width,\n            h: height,\n            radius\n        },\n        inner: {\n            x: bounds.left + border.l,\n            y: bounds.top + border.t,\n            w: width - border.l - border.r,\n            h: height - border.t - border.b,\n            radius: {\n                topLeft: Math.max(0, radius.topLeft - Math.max(border.t, border.l)),\n                topRight: Math.max(0, radius.topRight - Math.max(border.t, border.r)),\n                bottomLeft: Math.max(0, radius.bottomLeft - Math.max(border.b, border.l)),\n                bottomRight: Math.max(0, radius.bottomRight - Math.max(border.b, border.r))\n            }\n        }\n    };\n}\nfunction inRange(bar, x, y, useFinalPosition) {\n    const skipX = x === null;\n    const skipY = y === null;\n    const skipBoth = skipX && skipY;\n    const bounds = bar && !skipBoth && getBarBounds(bar, useFinalPosition);\n    return bounds && (skipX || _isBetween(x, bounds.left, bounds.right)) && (skipY || _isBetween(y, bounds.top, bounds.bottom));\n}\nfunction hasRadius(radius) {\n    return radius.topLeft || radius.topRight || radius.bottomLeft || radius.bottomRight;\n}\n function addNormalRectPath(ctx, rect) {\n    ctx.rect(rect.x, rect.y, rect.w, rect.h);\n}\nfunction inflateRect(rect, amount, refRect = {}) {\n    const x = rect.x !== refRect.x ? -amount : 0;\n    const y = rect.y !== refRect.y ? -amount : 0;\n    const w = (rect.x + rect.w !== refRect.x + refRect.w ? amount : 0) - x;\n    const h = (rect.y + rect.h !== refRect.y + refRect.h ? amount : 0) - y;\n    return {\n        x: rect.x + x,\n        y: rect.y + y,\n        w: rect.w + w,\n        h: rect.h + h,\n        radius: rect.radius\n    };\n}\nclass BarElement extends Element {\n    static id = 'bar';\n static defaults = {\n        borderSkipped: 'start',\n        borderWidth: 0,\n        borderRadius: 0,\n        inflateAmount: 'auto',\n        pointStyle: undefined\n    };\n static defaultRoutes = {\n        backgroundColor: 'backgroundColor',\n        borderColor: 'borderColor'\n    };\n    constructor(cfg){\n        super();\n        this.options = undefined;\n        this.horizontal = undefined;\n        this.base = undefined;\n        this.width = undefined;\n        this.height = undefined;\n        this.inflateAmount = undefined;\n        if (cfg) {\n            Object.assign(this, cfg);\n        }\n    }\n    draw(ctx) {\n        const { inflateAmount , options: { borderColor , backgroundColor  }  } = this;\n        const { inner , outer  } = boundingRects(this);\n        const addRectPath = hasRadius(outer.radius) ? addRoundedRectPath : addNormalRectPath;\n        ctx.save();\n        if (outer.w !== inner.w || outer.h !== inner.h) {\n            ctx.beginPath();\n            addRectPath(ctx, inflateRect(outer, inflateAmount, inner));\n            ctx.clip();\n            addRectPath(ctx, inflateRect(inner, -inflateAmount, outer));\n            ctx.fillStyle = borderColor;\n            ctx.fill('evenodd');\n        }\n        ctx.beginPath();\n        addRectPath(ctx, inflateRect(inner, inflateAmount));\n        ctx.fillStyle = backgroundColor;\n        ctx.fill();\n        ctx.restore();\n    }\n    inRange(mouseX, mouseY, useFinalPosition) {\n        return inRange(this, mouseX, mouseY, useFinalPosition);\n    }\n    inXRange(mouseX, useFinalPosition) {\n        return inRange(this, mouseX, null, useFinalPosition);\n    }\n    inYRange(mouseY, useFinalPosition) {\n        return inRange(this, null, mouseY, useFinalPosition);\n    }\n    getCenterPoint(useFinalPosition) {\n        const { x , y , base , horizontal  } =  this.getProps([\n            'x',\n            'y',\n            'base',\n            'horizontal'\n        ], useFinalPosition);\n        return {\n            x: horizontal ? (x + base) / 2 : x,\n            y: horizontal ? y : (y + base) / 2\n        };\n    }\n    getRange(axis) {\n        return axis === 'x' ? this.width / 2 : this.height / 2;\n    }\n}\n\nvar elements = /*#__PURE__*/Object.freeze({\n__proto__: null,\nArcElement: ArcElement,\nBarElement: BarElement,\nLineElement: LineElement,\nPointElement: PointElement\n});\n\nconst BORDER_COLORS = [\n    'rgb(54, 162, 235)',\n    'rgb(255, 99, 132)',\n    'rgb(255, 159, 64)',\n    'rgb(255, 205, 86)',\n    'rgb(75, 192, 192)',\n    'rgb(153, 102, 255)',\n    'rgb(201, 203, 207)' // grey\n];\n// Border colors with 50% transparency\nconst BACKGROUND_COLORS = /* #__PURE__ */ BORDER_COLORS.map((color)=>color.replace('rgb(', 'rgba(').replace(')', ', 0.5)'));\nfunction getBorderColor(i) {\n    return BORDER_COLORS[i % BORDER_COLORS.length];\n}\nfunction getBackgroundColor(i) {\n    return BACKGROUND_COLORS[i % BACKGROUND_COLORS.length];\n}\nfunction colorizeDefaultDataset(dataset, i) {\n    dataset.borderColor = getBorderColor(i);\n    dataset.backgroundColor = getBackgroundColor(i);\n    return ++i;\n}\nfunction colorizeDoughnutDataset(dataset, i) {\n    dataset.backgroundColor = dataset.data.map(()=>getBorderColor(i++));\n    return i;\n}\nfunction colorizePolarAreaDataset(dataset, i) {\n    dataset.backgroundColor = dataset.data.map(()=>getBackgroundColor(i++));\n    return i;\n}\nfunction getColorizer(chart) {\n    let i = 0;\n    return (dataset, datasetIndex)=>{\n        const controller = chart.getDatasetMeta(datasetIndex).controller;\n        if (controller instanceof DoughnutController) {\n            i = colorizeDoughnutDataset(dataset, i);\n        } else if (controller instanceof PolarAreaController) {\n            i = colorizePolarAreaDataset(dataset, i);\n        } else if (controller) {\n            i = colorizeDefaultDataset(dataset, i);\n        }\n    };\n}\nfunction containsColorsDefinitions(descriptors) {\n    let k;\n    for(k in descriptors){\n        if (descriptors[k].borderColor || descriptors[k].backgroundColor) {\n            return true;\n        }\n    }\n    return false;\n}\nfunction containsColorsDefinition(descriptor) {\n    return descriptor && (descriptor.borderColor || descriptor.backgroundColor);\n}\nfunction containsDefaultColorsDefenitions() {\n    return defaults.borderColor !== 'rgba(0,0,0,0.1)' || defaults.backgroundColor !== 'rgba(0,0,0,0.1)';\n}\nvar plugin_colors = {\n    id: 'colors',\n    defaults: {\n        enabled: true,\n        forceOverride: false\n    },\n    beforeLayout (chart, _args, options) {\n        if (!options.enabled) {\n            return;\n        }\n        const { data: { datasets  } , options: chartOptions  } = chart.config;\n        const { elements  } = chartOptions;\n        const containsColorDefenition = containsColorsDefinitions(datasets) || containsColorsDefinition(chartOptions) || elements && containsColorsDefinitions(elements) || containsDefaultColorsDefenitions();\n        if (!options.forceOverride && containsColorDefenition) {\n            return;\n        }\n        const colorizer = getColorizer(chart);\n        datasets.forEach(colorizer);\n    }\n};\n\nfunction lttbDecimation(data, start, count, availableWidth, options) {\n const samples = options.samples || availableWidth;\n    if (samples >= count) {\n        return data.slice(start, start + count);\n    }\n    const decimated = [];\n    const bucketWidth = (count - 2) / (samples - 2);\n    let sampledIndex = 0;\n    const endIndex = start + count - 1;\n    let a = start;\n    let i, maxAreaPoint, maxArea, area, nextA;\n    decimated[sampledIndex++] = data[a];\n    for(i = 0; i < samples - 2; i++){\n        let avgX = 0;\n        let avgY = 0;\n        let j;\n        const avgRangeStart = Math.floor((i + 1) * bucketWidth) + 1 + start;\n        const avgRangeEnd = Math.min(Math.floor((i + 2) * bucketWidth) + 1, count) + start;\n        const avgRangeLength = avgRangeEnd - avgRangeStart;\n        for(j = avgRangeStart; j < avgRangeEnd; j++){\n            avgX += data[j].x;\n            avgY += data[j].y;\n        }\n        avgX /= avgRangeLength;\n        avgY /= avgRangeLength;\n        const rangeOffs = Math.floor(i * bucketWidth) + 1 + start;\n        const rangeTo = Math.min(Math.floor((i + 1) * bucketWidth) + 1, count) + start;\n        const { x: pointAx , y: pointAy  } = data[a];\n        maxArea = area = -1;\n        for(j = rangeOffs; j < rangeTo; j++){\n            area = 0.5 * Math.abs((pointAx - avgX) * (data[j].y - pointAy) - (pointAx - data[j].x) * (avgY - pointAy));\n            if (area > maxArea) {\n                maxArea = area;\n                maxAreaPoint = data[j];\n                nextA = j;\n            }\n        }\n        decimated[sampledIndex++] = maxAreaPoint;\n        a = nextA;\n    }\n    decimated[sampledIndex++] = data[endIndex];\n    return decimated;\n}\nfunction minMaxDecimation(data, start, count, availableWidth) {\n    let avgX = 0;\n    let countX = 0;\n    let i, point, x, y, prevX, minIndex, maxIndex, startIndex, minY, maxY;\n    const decimated = [];\n    const endIndex = start + count - 1;\n    const xMin = data[start].x;\n    const xMax = data[endIndex].x;\n    const dx = xMax - xMin;\n    for(i = start; i < start + count; ++i){\n        point = data[i];\n        x = (point.x - xMin) / dx * availableWidth;\n        y = point.y;\n        const truncX = x | 0;\n        if (truncX === prevX) {\n            if (y < minY) {\n                minY = y;\n                minIndex = i;\n            } else if (y > maxY) {\n                maxY = y;\n                maxIndex = i;\n            }\n            avgX = (countX * avgX + point.x) / ++countX;\n        } else {\n            const lastIndex = i - 1;\n            if (!isNullOrUndef(minIndex) && !isNullOrUndef(maxIndex)) {\n                const intermediateIndex1 = Math.min(minIndex, maxIndex);\n                const intermediateIndex2 = Math.max(minIndex, maxIndex);\n                if (intermediateIndex1 !== startIndex && intermediateIndex1 !== lastIndex) {\n                    decimated.push({\n                        ...data[intermediateIndex1],\n                        x: avgX\n                    });\n                }\n                if (intermediateIndex2 !== startIndex && intermediateIndex2 !== lastIndex) {\n                    decimated.push({\n                        ...data[intermediateIndex2],\n                        x: avgX\n                    });\n                }\n            }\n            if (i > 0 && lastIndex !== startIndex) {\n                decimated.push(data[lastIndex]);\n            }\n            decimated.push(point);\n            prevX = truncX;\n            countX = 0;\n            minY = maxY = y;\n            minIndex = maxIndex = startIndex = i;\n        }\n    }\n    return decimated;\n}\nfunction cleanDecimatedDataset(dataset) {\n    if (dataset._decimated) {\n        const data = dataset._data;\n        delete dataset._decimated;\n        delete dataset._data;\n        Object.defineProperty(dataset, 'data', {\n            configurable: true,\n            enumerable: true,\n            writable: true,\n            value: data\n        });\n    }\n}\nfunction cleanDecimatedData(chart) {\n    chart.data.datasets.forEach((dataset)=>{\n        cleanDecimatedDataset(dataset);\n    });\n}\nfunction getStartAndCountOfVisiblePointsSimplified(meta, points) {\n    const pointCount = points.length;\n    let start = 0;\n    let count;\n    const { iScale  } = meta;\n    const { min , max , minDefined , maxDefined  } = iScale.getUserBounds();\n    if (minDefined) {\n        start = _limitValue(_lookupByKey(points, iScale.axis, min).lo, 0, pointCount - 1);\n    }\n    if (maxDefined) {\n        count = _limitValue(_lookupByKey(points, iScale.axis, max).hi + 1, start, pointCount) - start;\n    } else {\n        count = pointCount - start;\n    }\n    return {\n        start,\n        count\n    };\n}\nvar plugin_decimation = {\n    id: 'decimation',\n    defaults: {\n        algorithm: 'min-max',\n        enabled: false\n    },\n    beforeElementsUpdate: (chart, args, options)=>{\n        if (!options.enabled) {\n            cleanDecimatedData(chart);\n            return;\n        }\n        const availableWidth = chart.width;\n        chart.data.datasets.forEach((dataset, datasetIndex)=>{\n            const { _data , indexAxis  } = dataset;\n            const meta = chart.getDatasetMeta(datasetIndex);\n            const data = _data || dataset.data;\n            if (resolve([\n                indexAxis,\n                chart.options.indexAxis\n            ]) === 'y') {\n                return;\n            }\n            if (!meta.controller.supportsDecimation) {\n                return;\n            }\n            const xAxis = chart.scales[meta.xAxisID];\n            if (xAxis.type !== 'linear' && xAxis.type !== 'time') {\n                return;\n            }\n            if (chart.options.parsing) {\n                return;\n            }\n            let { start , count  } = getStartAndCountOfVisiblePointsSimplified(meta, data);\n            const threshold = options.threshold || 4 * availableWidth;\n            if (count <= threshold) {\n                cleanDecimatedDataset(dataset);\n                return;\n            }\n            if (isNullOrUndef(_data)) {\n                dataset._data = data;\n                delete dataset.data;\n                Object.defineProperty(dataset, 'data', {\n                    configurable: true,\n                    enumerable: true,\n                    get: function() {\n                        return this._decimated;\n                    },\n                    set: function(d) {\n                        this._data = d;\n                    }\n                });\n            }\n            let decimated;\n            switch(options.algorithm){\n                case 'lttb':\n                    decimated = lttbDecimation(data, start, count, availableWidth, options);\n                    break;\n                case 'min-max':\n                    decimated = minMaxDecimation(data, start, count, availableWidth);\n                    break;\n                default:\n                    throw new Error(`Unsupported decimation algorithm '${options.algorithm}'`);\n            }\n            dataset._decimated = decimated;\n        });\n    },\n    destroy (chart) {\n        cleanDecimatedData(chart);\n    }\n};\n\nfunction _segments(line, target, property) {\n    const segments = line.segments;\n    const points = line.points;\n    const tpoints = target.points;\n    const parts = [];\n    for (const segment of segments){\n        let { start , end  } = segment;\n        end = _findSegmentEnd(start, end, points);\n        const bounds = _getBounds(property, points[start], points[end], segment.loop);\n        if (!target.segments) {\n            parts.push({\n                source: segment,\n                target: bounds,\n                start: points[start],\n                end: points[end]\n            });\n            continue;\n        }\n        const targetSegments = _boundSegments(target, bounds);\n        for (const tgt of targetSegments){\n            const subBounds = _getBounds(property, tpoints[tgt.start], tpoints[tgt.end], tgt.loop);\n            const fillSources = _boundSegment(segment, points, subBounds);\n            for (const fillSource of fillSources){\n                parts.push({\n                    source: fillSource,\n                    target: tgt,\n                    start: {\n                        [property]: _getEdge(bounds, subBounds, 'start', Math.max)\n                    },\n                    end: {\n                        [property]: _getEdge(bounds, subBounds, 'end', Math.min)\n                    }\n                });\n            }\n        }\n    }\n    return parts;\n}\nfunction _getBounds(property, first, last, loop) {\n    if (loop) {\n        return;\n    }\n    let start = first[property];\n    let end = last[property];\n    if (property === 'angle') {\n        start = _normalizeAngle(start);\n        end = _normalizeAngle(end);\n    }\n    return {\n        property,\n        start,\n        end\n    };\n}\nfunction _pointsFromSegments(boundary, line) {\n    const { x =null , y =null  } = boundary || {};\n    const linePoints = line.points;\n    const points = [];\n    line.segments.forEach(({ start , end  })=>{\n        end = _findSegmentEnd(start, end, linePoints);\n        const first = linePoints[start];\n        const last = linePoints[end];\n        if (y !== null) {\n            points.push({\n                x: first.x,\n                y\n            });\n            points.push({\n                x: last.x,\n                y\n            });\n        } else if (x !== null) {\n            points.push({\n                x,\n                y: first.y\n            });\n            points.push({\n                x,\n                y: last.y\n            });\n        }\n    });\n    return points;\n}\nfunction _findSegmentEnd(start, end, points) {\n    for(; end > start; end--){\n        const point = points[end];\n        if (!isNaN(point.x) && !isNaN(point.y)) {\n            break;\n        }\n    }\n    return end;\n}\nfunction _getEdge(a, b, prop, fn) {\n    if (a && b) {\n        return fn(a[prop], b[prop]);\n    }\n    return a ? a[prop] : b ? b[prop] : 0;\n}\n\nfunction _createBoundaryLine(boundary, line) {\n    let points = [];\n    let _loop = false;\n    if (isArray(boundary)) {\n        _loop = true;\n        points = boundary;\n    } else {\n        points = _pointsFromSegments(boundary, line);\n    }\n    return points.length ? new LineElement({\n        points,\n        options: {\n            tension: 0\n        },\n        _loop,\n        _fullLoop: _loop\n    }) : null;\n}\nfunction _shouldApplyFill(source) {\n    return source && source.fill !== false;\n}\n\nfunction _resolveTarget(sources, index, propagate) {\n    const source = sources[index];\n    let fill = source.fill;\n    const visited = [\n        index\n    ];\n    let target;\n    if (!propagate) {\n        return fill;\n    }\n    while(fill !== false && visited.indexOf(fill) === -1){\n        if (!isNumberFinite(fill)) {\n            return fill;\n        }\n        target = sources[fill];\n        if (!target) {\n            return false;\n        }\n        if (target.visible) {\n            return fill;\n        }\n        visited.push(fill);\n        fill = target.fill;\n    }\n    return false;\n}\n function _decodeFill(line, index, count) {\n     const fill = parseFillOption(line);\n    if (isObject(fill)) {\n        return isNaN(fill.value) ? false : fill;\n    }\n    let target = parseFloat(fill);\n    if (isNumberFinite(target) && Math.floor(target) === target) {\n        return decodeTargetIndex(fill[0], index, target, count);\n    }\n    return [\n        'origin',\n        'start',\n        'end',\n        'stack',\n        'shape'\n    ].indexOf(fill) >= 0 && fill;\n}\nfunction decodeTargetIndex(firstCh, index, target, count) {\n    if (firstCh === '-' || firstCh === '+') {\n        target = index + target;\n    }\n    if (target === index || target < 0 || target >= count) {\n        return false;\n    }\n    return target;\n}\n function _getTargetPixel(fill, scale) {\n    let pixel = null;\n    if (fill === 'start') {\n        pixel = scale.bottom;\n    } else if (fill === 'end') {\n        pixel = scale.top;\n    } else if (isObject(fill)) {\n        pixel = scale.getPixelForValue(fill.value);\n    } else if (scale.getBasePixel) {\n        pixel = scale.getBasePixel();\n    }\n    return pixel;\n}\n function _getTargetValue(fill, scale, startValue) {\n    let value;\n    if (fill === 'start') {\n        value = startValue;\n    } else if (fill === 'end') {\n        value = scale.options.reverse ? scale.min : scale.max;\n    } else if (isObject(fill)) {\n        value = fill.value;\n    } else {\n        value = scale.getBaseValue();\n    }\n    return value;\n}\n function parseFillOption(line) {\n    const options = line.options;\n    const fillOption = options.fill;\n    let fill = valueOrDefault(fillOption && fillOption.target, fillOption);\n    if (fill === undefined) {\n        fill = !!options.backgroundColor;\n    }\n    if (fill === false || fill === null) {\n        return false;\n    }\n    if (fill === true) {\n        return 'origin';\n    }\n    return fill;\n}\n\nfunction _buildStackLine(source) {\n    const { scale , index , line  } = source;\n    const points = [];\n    const segments = line.segments;\n    const sourcePoints = line.points;\n    const linesBelow = getLinesBelow(scale, index);\n    linesBelow.push(_createBoundaryLine({\n        x: null,\n        y: scale.bottom\n    }, line));\n    for(let i = 0; i < segments.length; i++){\n        const segment = segments[i];\n        for(let j = segment.start; j <= segment.end; j++){\n            addPointsBelow(points, sourcePoints[j], linesBelow);\n        }\n    }\n    return new LineElement({\n        points,\n        options: {}\n    });\n}\n function getLinesBelow(scale, index) {\n    const below = [];\n    const metas = scale.getMatchingVisibleMetas('line');\n    for(let i = 0; i < metas.length; i++){\n        const meta = metas[i];\n        if (meta.index === index) {\n            break;\n        }\n        if (!meta.hidden) {\n            below.unshift(meta.dataset);\n        }\n    }\n    return below;\n}\n function addPointsBelow(points, sourcePoint, linesBelow) {\n    const postponed = [];\n    for(let j = 0; j < linesBelow.length; j++){\n        const line = linesBelow[j];\n        const { first , last , point  } = findPoint(line, sourcePoint, 'x');\n        if (!point || first && last) {\n            continue;\n        }\n        if (first) {\n            postponed.unshift(point);\n        } else {\n            points.push(point);\n            if (!last) {\n                break;\n            }\n        }\n    }\n    points.push(...postponed);\n}\n function findPoint(line, sourcePoint, property) {\n    const point = line.interpolate(sourcePoint, property);\n    if (!point) {\n        return {};\n    }\n    const pointValue = point[property];\n    const segments = line.segments;\n    const linePoints = line.points;\n    let first = false;\n    let last = false;\n    for(let i = 0; i < segments.length; i++){\n        const segment = segments[i];\n        const firstValue = linePoints[segment.start][property];\n        const lastValue = linePoints[segment.end][property];\n        if (_isBetween(pointValue, firstValue, lastValue)) {\n            first = pointValue === firstValue;\n            last = pointValue === lastValue;\n            break;\n        }\n    }\n    return {\n        first,\n        last,\n        point\n    };\n}\n\nclass simpleArc {\n    constructor(opts){\n        this.x = opts.x;\n        this.y = opts.y;\n        this.radius = opts.radius;\n    }\n    pathSegment(ctx, bounds, opts) {\n        const { x , y , radius  } = this;\n        bounds = bounds || {\n            start: 0,\n            end: TAU\n        };\n        ctx.arc(x, y, radius, bounds.end, bounds.start, true);\n        return !opts.bounds;\n    }\n    interpolate(point) {\n        const { x , y , radius  } = this;\n        const angle = point.angle;\n        return {\n            x: x + Math.cos(angle) * radius,\n            y: y + Math.sin(angle) * radius,\n            angle\n        };\n    }\n}\n\nfunction _getTarget(source) {\n    const { chart , fill , line  } = source;\n    if (isNumberFinite(fill)) {\n        return getLineByIndex(chart, fill);\n    }\n    if (fill === 'stack') {\n        return _buildStackLine(source);\n    }\n    if (fill === 'shape') {\n        return true;\n    }\n    const boundary = computeBoundary(source);\n    if (boundary instanceof simpleArc) {\n        return boundary;\n    }\n    return _createBoundaryLine(boundary, line);\n}\n function getLineByIndex(chart, index) {\n    const meta = chart.getDatasetMeta(index);\n    const visible = meta && chart.isDatasetVisible(index);\n    return visible ? meta.dataset : null;\n}\nfunction computeBoundary(source) {\n    const scale = source.scale || {};\n    if (scale.getPointPositionForValue) {\n        return computeCircularBoundary(source);\n    }\n    return computeLinearBoundary(source);\n}\nfunction computeLinearBoundary(source) {\n    const { scale ={} , fill  } = source;\n    const pixel = _getTargetPixel(fill, scale);\n    if (isNumberFinite(pixel)) {\n        const horizontal = scale.isHorizontal();\n        return {\n            x: horizontal ? pixel : null,\n            y: horizontal ? null : pixel\n        };\n    }\n    return null;\n}\nfunction computeCircularBoundary(source) {\n    const { scale , fill  } = source;\n    const options = scale.options;\n    const length = scale.getLabels().length;\n    const start = options.reverse ? scale.max : scale.min;\n    const value = _getTargetValue(fill, scale, start);\n    const target = [];\n    if (options.grid.circular) {\n        const center = scale.getPointPositionForValue(0, start);\n        return new simpleArc({\n            x: center.x,\n            y: center.y,\n            radius: scale.getDistanceFromCenterForValue(value)\n        });\n    }\n    for(let i = 0; i < length; ++i){\n        target.push(scale.getPointPositionForValue(i, value));\n    }\n    return target;\n}\n\nfunction _drawfill(ctx, source, area) {\n    const target = _getTarget(source);\n    const { chart , index , line , scale , axis  } = source;\n    const lineOpts = line.options;\n    const fillOption = lineOpts.fill;\n    const color = lineOpts.backgroundColor;\n    const { above =color , below =color  } = fillOption || {};\n    const meta = chart.getDatasetMeta(index);\n    const clip = getDatasetClipArea(chart, meta);\n    if (target && line.points.length) {\n        clipArea(ctx, area);\n        doFill(ctx, {\n            line,\n            target,\n            above,\n            below,\n            area,\n            scale,\n            axis,\n            clip\n        });\n        unclipArea(ctx);\n    }\n}\nfunction doFill(ctx, cfg) {\n    const { line , target , above , below , area , scale , clip  } = cfg;\n    const property = line._loop ? 'angle' : cfg.axis;\n    ctx.save();\n    let fillColor = below;\n    if (below !== above) {\n        if (property === 'x') {\n            clipVertical(ctx, target, area.top);\n            fill(ctx, {\n                line,\n                target,\n                color: above,\n                scale,\n                property,\n                clip\n            });\n            ctx.restore();\n            ctx.save();\n            clipVertical(ctx, target, area.bottom);\n        } else if (property === 'y') {\n            clipHorizontal(ctx, target, area.left);\n            fill(ctx, {\n                line,\n                target,\n                color: below,\n                scale,\n                property,\n                clip\n            });\n            ctx.restore();\n            ctx.save();\n            clipHorizontal(ctx, target, area.right);\n            fillColor = above;\n        }\n    }\n    fill(ctx, {\n        line,\n        target,\n        color: fillColor,\n        scale,\n        property,\n        clip\n    });\n    ctx.restore();\n}\nfunction clipVertical(ctx, target, clipY) {\n    const { segments , points  } = target;\n    let first = true;\n    let lineLoop = false;\n    ctx.beginPath();\n    for (const segment of segments){\n        const { start , end  } = segment;\n        const firstPoint = points[start];\n        const lastPoint = points[_findSegmentEnd(start, end, points)];\n        if (first) {\n            ctx.moveTo(firstPoint.x, firstPoint.y);\n            first = false;\n        } else {\n            ctx.lineTo(firstPoint.x, clipY);\n            ctx.lineTo(firstPoint.x, firstPoint.y);\n        }\n        lineLoop = !!target.pathSegment(ctx, segment, {\n            move: lineLoop\n        });\n        if (lineLoop) {\n            ctx.closePath();\n        } else {\n            ctx.lineTo(lastPoint.x, clipY);\n        }\n    }\n    ctx.lineTo(target.first().x, clipY);\n    ctx.closePath();\n    ctx.clip();\n}\nfunction clipHorizontal(ctx, target, clipX) {\n    const { segments , points  } = target;\n    let first = true;\n    let lineLoop = false;\n    ctx.beginPath();\n    for (const segment of segments){\n        const { start , end  } = segment;\n        const firstPoint = points[start];\n        const lastPoint = points[_findSegmentEnd(start, end, points)];\n        if (first) {\n            ctx.moveTo(firstPoint.x, firstPoint.y);\n            first = false;\n        } else {\n            ctx.lineTo(clipX, firstPoint.y);\n            ctx.lineTo(firstPoint.x, firstPoint.y);\n        }\n        lineLoop = !!target.pathSegment(ctx, segment, {\n            move: lineLoop\n        });\n        if (lineLoop) {\n            ctx.closePath();\n        } else {\n            ctx.lineTo(clipX, lastPoint.y);\n        }\n    }\n    ctx.lineTo(clipX, target.first().y);\n    ctx.closePath();\n    ctx.clip();\n}\nfunction fill(ctx, cfg) {\n    const { line , target , property , color , scale , clip  } = cfg;\n    const segments = _segments(line, target, property);\n    for (const { source: src , target: tgt , start , end  } of segments){\n        const { style: { backgroundColor =color  } = {}  } = src;\n        const notShape = target !== true;\n        ctx.save();\n        ctx.fillStyle = backgroundColor;\n        clipBounds(ctx, scale, clip, notShape && _getBounds(property, start, end));\n        ctx.beginPath();\n        const lineLoop = !!line.pathSegment(ctx, src);\n        let loop;\n        if (notShape) {\n            if (lineLoop) {\n                ctx.closePath();\n            } else {\n                interpolatedLineTo(ctx, target, end, property);\n            }\n            const targetLoop = !!target.pathSegment(ctx, tgt, {\n                move: lineLoop,\n                reverse: true\n            });\n            loop = lineLoop && targetLoop;\n            if (!loop) {\n                interpolatedLineTo(ctx, target, start, property);\n            }\n        }\n        ctx.closePath();\n        ctx.fill(loop ? 'evenodd' : 'nonzero');\n        ctx.restore();\n    }\n}\nfunction clipBounds(ctx, scale, clip, bounds) {\n    const chartArea = scale.chart.chartArea;\n    const { property , start , end  } = bounds || {};\n    if (property === 'x' || property === 'y') {\n        let left, top, right, bottom;\n        if (property === 'x') {\n            left = start;\n            top = chartArea.top;\n            right = end;\n            bottom = chartArea.bottom;\n        } else {\n            left = chartArea.left;\n            top = start;\n            right = chartArea.right;\n            bottom = end;\n        }\n        ctx.beginPath();\n        if (clip) {\n            left = Math.max(left, clip.left);\n            right = Math.min(right, clip.right);\n            top = Math.max(top, clip.top);\n            bottom = Math.min(bottom, clip.bottom);\n        }\n        ctx.rect(left, top, right - left, bottom - top);\n        ctx.clip();\n    }\n}\nfunction interpolatedLineTo(ctx, target, point, property) {\n    const interpolatedPoint = target.interpolate(point, property);\n    if (interpolatedPoint) {\n        ctx.lineTo(interpolatedPoint.x, interpolatedPoint.y);\n    }\n}\n\nvar index = {\n    id: 'filler',\n    afterDatasetsUpdate (chart, _args, options) {\n        const count = (chart.data.datasets || []).length;\n        const sources = [];\n        let meta, i, line, source;\n        for(i = 0; i < count; ++i){\n            meta = chart.getDatasetMeta(i);\n            line = meta.dataset;\n            source = null;\n            if (line && line.options && line instanceof LineElement) {\n                source = {\n                    visible: chart.isDatasetVisible(i),\n                    index: i,\n                    fill: _decodeFill(line, i, count),\n                    chart,\n                    axis: meta.controller.options.indexAxis,\n                    scale: meta.vScale,\n                    line\n                };\n            }\n            meta.$filler = source;\n            sources.push(source);\n        }\n        for(i = 0; i < count; ++i){\n            source = sources[i];\n            if (!source || source.fill === false) {\n                continue;\n            }\n            source.fill = _resolveTarget(sources, i, options.propagate);\n        }\n    },\n    beforeDraw (chart, _args, options) {\n        const draw = options.drawTime === 'beforeDraw';\n        const metasets = chart.getSortedVisibleDatasetMetas();\n        const area = chart.chartArea;\n        for(let i = metasets.length - 1; i >= 0; --i){\n            const source = metasets[i].$filler;\n            if (!source) {\n                continue;\n            }\n            source.line.updateControlPoints(area, source.axis);\n            if (draw && source.fill) {\n                _drawfill(chart.ctx, source, area);\n            }\n        }\n    },\n    beforeDatasetsDraw (chart, _args, options) {\n        if (options.drawTime !== 'beforeDatasetsDraw') {\n            return;\n        }\n        const metasets = chart.getSortedVisibleDatasetMetas();\n        for(let i = metasets.length - 1; i >= 0; --i){\n            const source = metasets[i].$filler;\n            if (_shouldApplyFill(source)) {\n                _drawfill(chart.ctx, source, chart.chartArea);\n            }\n        }\n    },\n    beforeDatasetDraw (chart, args, options) {\n        const source = args.meta.$filler;\n        if (!_shouldApplyFill(source) || options.drawTime !== 'beforeDatasetDraw') {\n            return;\n        }\n        _drawfill(chart.ctx, source, chart.chartArea);\n    },\n    defaults: {\n        propagate: true,\n        drawTime: 'beforeDatasetDraw'\n    }\n};\n\nconst getBoxSize = (labelOpts, fontSize)=>{\n    let { boxHeight =fontSize , boxWidth =fontSize  } = labelOpts;\n    if (labelOpts.usePointStyle) {\n        boxHeight = Math.min(boxHeight, fontSize);\n        boxWidth = labelOpts.pointStyleWidth || Math.min(boxWidth, fontSize);\n    }\n    return {\n        boxWidth,\n        boxHeight,\n        itemHeight: Math.max(fontSize, boxHeight)\n    };\n};\nconst itemsEqual = (a, b)=>a !== null && b !== null && a.datasetIndex === b.datasetIndex && a.index === b.index;\nclass Legend extends Element {\n constructor(config){\n        super();\n        this._added = false;\n        this.legendHitBoxes = [];\n this._hoveredItem = null;\n        this.doughnutMode = false;\n        this.chart = config.chart;\n        this.options = config.options;\n        this.ctx = config.ctx;\n        this.legendItems = undefined;\n        this.columnSizes = undefined;\n        this.lineWidths = undefined;\n        this.maxHeight = undefined;\n        this.maxWidth = undefined;\n        this.top = undefined;\n        this.bottom = undefined;\n        this.left = undefined;\n        this.right = undefined;\n        this.height = undefined;\n        this.width = undefined;\n        this._margins = undefined;\n        this.position = undefined;\n        this.weight = undefined;\n        this.fullSize = undefined;\n    }\n    update(maxWidth, maxHeight, margins) {\n        this.maxWidth = maxWidth;\n        this.maxHeight = maxHeight;\n        this._margins = margins;\n        this.setDimensions();\n        this.buildLabels();\n        this.fit();\n    }\n    setDimensions() {\n        if (this.isHorizontal()) {\n            this.width = this.maxWidth;\n            this.left = this._margins.left;\n            this.right = this.width;\n        } else {\n            this.height = this.maxHeight;\n            this.top = this._margins.top;\n            this.bottom = this.height;\n        }\n    }\n    buildLabels() {\n        const labelOpts = this.options.labels || {};\n        let legendItems = callback(labelOpts.generateLabels, [\n            this.chart\n        ], this) || [];\n        if (labelOpts.filter) {\n            legendItems = legendItems.filter((item)=>labelOpts.filter(item, this.chart.data));\n        }\n        if (labelOpts.sort) {\n            legendItems = legendItems.sort((a, b)=>labelOpts.sort(a, b, this.chart.data));\n        }\n        if (this.options.reverse) {\n            legendItems.reverse();\n        }\n        this.legendItems = legendItems;\n    }\n    fit() {\n        const { options , ctx  } = this;\n        if (!options.display) {\n            this.width = this.height = 0;\n            return;\n        }\n        const labelOpts = options.labels;\n        const labelFont = toFont(labelOpts.font);\n        const fontSize = labelFont.size;\n        const titleHeight = this._computeTitleHeight();\n        const { boxWidth , itemHeight  } = getBoxSize(labelOpts, fontSize);\n        let width, height;\n        ctx.font = labelFont.string;\n        if (this.isHorizontal()) {\n            width = this.maxWidth;\n            height = this._fitRows(titleHeight, fontSize, boxWidth, itemHeight) + 10;\n        } else {\n            height = this.maxHeight;\n            width = this._fitCols(titleHeight, labelFont, boxWidth, itemHeight) + 10;\n        }\n        this.width = Math.min(width, options.maxWidth || this.maxWidth);\n        this.height = Math.min(height, options.maxHeight || this.maxHeight);\n    }\n _fitRows(titleHeight, fontSize, boxWidth, itemHeight) {\n        const { ctx , maxWidth , options: { labels: { padding  }  }  } = this;\n        const hitboxes = this.legendHitBoxes = [];\n        const lineWidths = this.lineWidths = [\n            0\n        ];\n        const lineHeight = itemHeight + padding;\n        let totalHeight = titleHeight;\n        ctx.textAlign = 'left';\n        ctx.textBaseline = 'middle';\n        let row = -1;\n        let top = -lineHeight;\n        this.legendItems.forEach((legendItem, i)=>{\n            const itemWidth = boxWidth + fontSize / 2 + ctx.measureText(legendItem.text).width;\n            if (i === 0 || lineWidths[lineWidths.length - 1] + itemWidth + 2 * padding > maxWidth) {\n                totalHeight += lineHeight;\n                lineWidths[lineWidths.length - (i > 0 ? 0 : 1)] = 0;\n                top += lineHeight;\n                row++;\n            }\n            hitboxes[i] = {\n                left: 0,\n                top,\n                row,\n                width: itemWidth,\n                height: itemHeight\n            };\n            lineWidths[lineWidths.length - 1] += itemWidth + padding;\n        });\n        return totalHeight;\n    }\n    _fitCols(titleHeight, labelFont, boxWidth, _itemHeight) {\n        const { ctx , maxHeight , options: { labels: { padding  }  }  } = this;\n        const hitboxes = this.legendHitBoxes = [];\n        const columnSizes = this.columnSizes = [];\n        const heightLimit = maxHeight - titleHeight;\n        let totalWidth = padding;\n        let currentColWidth = 0;\n        let currentColHeight = 0;\n        let left = 0;\n        let col = 0;\n        this.legendItems.forEach((legendItem, i)=>{\n            const { itemWidth , itemHeight  } = calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight);\n            if (i > 0 && currentColHeight + itemHeight + 2 * padding > heightLimit) {\n                totalWidth += currentColWidth + padding;\n                columnSizes.push({\n                    width: currentColWidth,\n                    height: currentColHeight\n                });\n                left += currentColWidth + padding;\n                col++;\n                currentColWidth = currentColHeight = 0;\n            }\n            hitboxes[i] = {\n                left,\n                top: currentColHeight,\n                col,\n                width: itemWidth,\n                height: itemHeight\n            };\n            currentColWidth = Math.max(currentColWidth, itemWidth);\n            currentColHeight += itemHeight + padding;\n        });\n        totalWidth += currentColWidth;\n        columnSizes.push({\n            width: currentColWidth,\n            height: currentColHeight\n        });\n        return totalWidth;\n    }\n    adjustHitBoxes() {\n        if (!this.options.display) {\n            return;\n        }\n        const titleHeight = this._computeTitleHeight();\n        const { legendHitBoxes: hitboxes , options: { align , labels: { padding  } , rtl  }  } = this;\n        const rtlHelper = getRtlAdapter(rtl, this.left, this.width);\n        if (this.isHorizontal()) {\n            let row = 0;\n            let left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n            for (const hitbox of hitboxes){\n                if (row !== hitbox.row) {\n                    row = hitbox.row;\n                    left = _alignStartEnd(align, this.left + padding, this.right - this.lineWidths[row]);\n                }\n                hitbox.top += this.top + titleHeight + padding;\n                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(left), hitbox.width);\n                left += hitbox.width + padding;\n            }\n        } else {\n            let col = 0;\n            let top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n            for (const hitbox of hitboxes){\n                if (hitbox.col !== col) {\n                    col = hitbox.col;\n                    top = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - this.columnSizes[col].height);\n                }\n                hitbox.top = top;\n                hitbox.left += this.left + padding;\n                hitbox.left = rtlHelper.leftForLtr(rtlHelper.x(hitbox.left), hitbox.width);\n                top += hitbox.height + padding;\n            }\n        }\n    }\n    isHorizontal() {\n        return this.options.position === 'top' || this.options.position === 'bottom';\n    }\n    draw() {\n        if (this.options.display) {\n            const ctx = this.ctx;\n            clipArea(ctx, this);\n            this._draw();\n            unclipArea(ctx);\n        }\n    }\n _draw() {\n        const { options: opts , columnSizes , lineWidths , ctx  } = this;\n        const { align , labels: labelOpts  } = opts;\n        const defaultColor = defaults.color;\n        const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n        const labelFont = toFont(labelOpts.font);\n        const { padding  } = labelOpts;\n        const fontSize = labelFont.size;\n        const halfFontSize = fontSize / 2;\n        let cursor;\n        this.drawTitle();\n        ctx.textAlign = rtlHelper.textAlign('left');\n        ctx.textBaseline = 'middle';\n        ctx.lineWidth = 0.5;\n        ctx.font = labelFont.string;\n        const { boxWidth , boxHeight , itemHeight  } = getBoxSize(labelOpts, fontSize);\n        const drawLegendBox = function(x, y, legendItem) {\n            if (isNaN(boxWidth) || boxWidth <= 0 || isNaN(boxHeight) || boxHeight < 0) {\n                return;\n            }\n            ctx.save();\n            const lineWidth = valueOrDefault(legendItem.lineWidth, 1);\n            ctx.fillStyle = valueOrDefault(legendItem.fillStyle, defaultColor);\n            ctx.lineCap = valueOrDefault(legendItem.lineCap, 'butt');\n            ctx.lineDashOffset = valueOrDefault(legendItem.lineDashOffset, 0);\n            ctx.lineJoin = valueOrDefault(legendItem.lineJoin, 'miter');\n            ctx.lineWidth = lineWidth;\n            ctx.strokeStyle = valueOrDefault(legendItem.strokeStyle, defaultColor);\n            ctx.setLineDash(valueOrDefault(legendItem.lineDash, []));\n            if (labelOpts.usePointStyle) {\n                const drawOptions = {\n                    radius: boxHeight * Math.SQRT2 / 2,\n                    pointStyle: legendItem.pointStyle,\n                    rotation: legendItem.rotation,\n                    borderWidth: lineWidth\n                };\n                const centerX = rtlHelper.xPlus(x, boxWidth / 2);\n                const centerY = y + halfFontSize;\n                drawPointLegend(ctx, drawOptions, centerX, centerY, labelOpts.pointStyleWidth && boxWidth);\n            } else {\n                const yBoxTop = y + Math.max((fontSize - boxHeight) / 2, 0);\n                const xBoxLeft = rtlHelper.leftForLtr(x, boxWidth);\n                const borderRadius = toTRBLCorners(legendItem.borderRadius);\n                ctx.beginPath();\n                if (Object.values(borderRadius).some((v)=>v !== 0)) {\n                    addRoundedRectPath(ctx, {\n                        x: xBoxLeft,\n                        y: yBoxTop,\n                        w: boxWidth,\n                        h: boxHeight,\n                        radius: borderRadius\n                    });\n                } else {\n                    ctx.rect(xBoxLeft, yBoxTop, boxWidth, boxHeight);\n                }\n                ctx.fill();\n                if (lineWidth !== 0) {\n                    ctx.stroke();\n                }\n            }\n            ctx.restore();\n        };\n        const fillText = function(x, y, legendItem) {\n            renderText(ctx, legendItem.text, x, y + itemHeight / 2, labelFont, {\n                strikethrough: legendItem.hidden,\n                textAlign: rtlHelper.textAlign(legendItem.textAlign)\n            });\n        };\n        const isHorizontal = this.isHorizontal();\n        const titleHeight = this._computeTitleHeight();\n        if (isHorizontal) {\n            cursor = {\n                x: _alignStartEnd(align, this.left + padding, this.right - lineWidths[0]),\n                y: this.top + padding + titleHeight,\n                line: 0\n            };\n        } else {\n            cursor = {\n                x: this.left + padding,\n                y: _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[0].height),\n                line: 0\n            };\n        }\n        overrideTextDirection(this.ctx, opts.textDirection);\n        const lineHeight = itemHeight + padding;\n        this.legendItems.forEach((legendItem, i)=>{\n            ctx.strokeStyle = legendItem.fontColor;\n            ctx.fillStyle = legendItem.fontColor;\n            const textWidth = ctx.measureText(legendItem.text).width;\n            const textAlign = rtlHelper.textAlign(legendItem.textAlign || (legendItem.textAlign = labelOpts.textAlign));\n            const width = boxWidth + halfFontSize + textWidth;\n            let x = cursor.x;\n            let y = cursor.y;\n            rtlHelper.setWidth(this.width);\n            if (isHorizontal) {\n                if (i > 0 && x + width + padding > this.right) {\n                    y = cursor.y += lineHeight;\n                    cursor.line++;\n                    x = cursor.x = _alignStartEnd(align, this.left + padding, this.right - lineWidths[cursor.line]);\n                }\n            } else if (i > 0 && y + lineHeight > this.bottom) {\n                x = cursor.x = x + columnSizes[cursor.line].width + padding;\n                cursor.line++;\n                y = cursor.y = _alignStartEnd(align, this.top + titleHeight + padding, this.bottom - columnSizes[cursor.line].height);\n            }\n            const realX = rtlHelper.x(x);\n            drawLegendBox(realX, y, legendItem);\n            x = _textX(textAlign, x + boxWidth + halfFontSize, isHorizontal ? x + width : this.right, opts.rtl);\n            fillText(rtlHelper.x(x), y, legendItem);\n            if (isHorizontal) {\n                cursor.x += width + padding;\n            } else if (typeof legendItem.text !== 'string') {\n                const fontLineHeight = labelFont.lineHeight;\n                cursor.y += calculateLegendItemHeight(legendItem, fontLineHeight) + padding;\n            } else {\n                cursor.y += lineHeight;\n            }\n        });\n        restoreTextDirection(this.ctx, opts.textDirection);\n    }\n drawTitle() {\n        const opts = this.options;\n        const titleOpts = opts.title;\n        const titleFont = toFont(titleOpts.font);\n        const titlePadding = toPadding(titleOpts.padding);\n        if (!titleOpts.display) {\n            return;\n        }\n        const rtlHelper = getRtlAdapter(opts.rtl, this.left, this.width);\n        const ctx = this.ctx;\n        const position = titleOpts.position;\n        const halfFontSize = titleFont.size / 2;\n        const topPaddingPlusHalfFontSize = titlePadding.top + halfFontSize;\n        let y;\n        let left = this.left;\n        let maxWidth = this.width;\n        if (this.isHorizontal()) {\n            maxWidth = Math.max(...this.lineWidths);\n            y = this.top + topPaddingPlusHalfFontSize;\n            left = _alignStartEnd(opts.align, left, this.right - maxWidth);\n        } else {\n            const maxHeight = this.columnSizes.reduce((acc, size)=>Math.max(acc, size.height), 0);\n            y = topPaddingPlusHalfFontSize + _alignStartEnd(opts.align, this.top, this.bottom - maxHeight - opts.labels.padding - this._computeTitleHeight());\n        }\n        const x = _alignStartEnd(position, left, left + maxWidth);\n        ctx.textAlign = rtlHelper.textAlign(_toLeftRightCenter(position));\n        ctx.textBaseline = 'middle';\n        ctx.strokeStyle = titleOpts.color;\n        ctx.fillStyle = titleOpts.color;\n        ctx.font = titleFont.string;\n        renderText(ctx, titleOpts.text, x, y, titleFont);\n    }\n _computeTitleHeight() {\n        const titleOpts = this.options.title;\n        const titleFont = toFont(titleOpts.font);\n        const titlePadding = toPadding(titleOpts.padding);\n        return titleOpts.display ? titleFont.lineHeight + titlePadding.height : 0;\n    }\n _getLegendItemAt(x, y) {\n        let i, hitBox, lh;\n        if (_isBetween(x, this.left, this.right) && _isBetween(y, this.top, this.bottom)) {\n            lh = this.legendHitBoxes;\n            for(i = 0; i < lh.length; ++i){\n                hitBox = lh[i];\n                if (_isBetween(x, hitBox.left, hitBox.left + hitBox.width) && _isBetween(y, hitBox.top, hitBox.top + hitBox.height)) {\n                    return this.legendItems[i];\n                }\n            }\n        }\n        return null;\n    }\n handleEvent(e) {\n        const opts = this.options;\n        if (!isListened(e.type, opts)) {\n            return;\n        }\n        const hoveredItem = this._getLegendItemAt(e.x, e.y);\n        if (e.type === 'mousemove' || e.type === 'mouseout') {\n            const previous = this._hoveredItem;\n            const sameItem = itemsEqual(previous, hoveredItem);\n            if (previous && !sameItem) {\n                callback(opts.onLeave, [\n                    e,\n                    previous,\n                    this\n                ], this);\n            }\n            this._hoveredItem = hoveredItem;\n            if (hoveredItem && !sameItem) {\n                callback(opts.onHover, [\n                    e,\n                    hoveredItem,\n                    this\n                ], this);\n            }\n        } else if (hoveredItem) {\n            callback(opts.onClick, [\n                e,\n                hoveredItem,\n                this\n            ], this);\n        }\n    }\n}\nfunction calculateItemSize(boxWidth, labelFont, ctx, legendItem, _itemHeight) {\n    const itemWidth = calculateItemWidth(legendItem, boxWidth, labelFont, ctx);\n    const itemHeight = calculateItemHeight(_itemHeight, legendItem, labelFont.lineHeight);\n    return {\n        itemWidth,\n        itemHeight\n    };\n}\nfunction calculateItemWidth(legendItem, boxWidth, labelFont, ctx) {\n    let legendItemText = legendItem.text;\n    if (legendItemText && typeof legendItemText !== 'string') {\n        legendItemText = legendItemText.reduce((a, b)=>a.length > b.length ? a : b);\n    }\n    return boxWidth + labelFont.size / 2 + ctx.measureText(legendItemText).width;\n}\nfunction calculateItemHeight(_itemHeight, legendItem, fontLineHeight) {\n    let itemHeight = _itemHeight;\n    if (typeof legendItem.text !== 'string') {\n        itemHeight = calculateLegendItemHeight(legendItem, fontLineHeight);\n    }\n    return itemHeight;\n}\nfunction calculateLegendItemHeight(legendItem, fontLineHeight) {\n    const labelHeight = legendItem.text ? legendItem.text.length : 0;\n    return fontLineHeight * labelHeight;\n}\nfunction isListened(type, opts) {\n    if ((type === 'mousemove' || type === 'mouseout') && (opts.onHover || opts.onLeave)) {\n        return true;\n    }\n    if (opts.onClick && (type === 'click' || type === 'mouseup')) {\n        return true;\n    }\n    return false;\n}\nvar plugin_legend = {\n    id: 'legend',\n _element: Legend,\n    start (chart, _args, options) {\n        const legend = chart.legend = new Legend({\n            ctx: chart.ctx,\n            options,\n            chart\n        });\n        layouts.configure(chart, legend, options);\n        layouts.addBox(chart, legend);\n    },\n    stop (chart) {\n        layouts.removeBox(chart, chart.legend);\n        delete chart.legend;\n    },\n    beforeUpdate (chart, _args, options) {\n        const legend = chart.legend;\n        layouts.configure(chart, legend, options);\n        legend.options = options;\n    },\n    afterUpdate (chart) {\n        const legend = chart.legend;\n        legend.buildLabels();\n        legend.adjustHitBoxes();\n    },\n    afterEvent (chart, args) {\n        if (!args.replay) {\n            chart.legend.handleEvent(args.event);\n        }\n    },\n    defaults: {\n        display: true,\n        position: 'top',\n        align: 'center',\n        fullSize: true,\n        reverse: false,\n        weight: 1000,\n        onClick (e, legendItem, legend) {\n            const index = legendItem.datasetIndex;\n            const ci = legend.chart;\n            if (ci.isDatasetVisible(index)) {\n                ci.hide(index);\n                legendItem.hidden = true;\n            } else {\n                ci.show(index);\n                legendItem.hidden = false;\n            }\n        },\n        onHover: null,\n        onLeave: null,\n        labels: {\n            color: (ctx)=>ctx.chart.options.color,\n            boxWidth: 40,\n            padding: 10,\n            generateLabels (chart) {\n                const datasets = chart.data.datasets;\n                const { labels: { usePointStyle , pointStyle , textAlign , color , useBorderRadius , borderRadius  }  } = chart.legend.options;\n                return chart._getSortedDatasetMetas().map((meta)=>{\n                    const style = meta.controller.getStyle(usePointStyle ? 0 : undefined);\n                    const borderWidth = toPadding(style.borderWidth);\n                    return {\n                        text: datasets[meta.index].label,\n                        fillStyle: style.backgroundColor,\n                        fontColor: color,\n                        hidden: !meta.visible,\n                        lineCap: style.borderCapStyle,\n                        lineDash: style.borderDash,\n                        lineDashOffset: style.borderDashOffset,\n                        lineJoin: style.borderJoinStyle,\n                        lineWidth: (borderWidth.width + borderWidth.height) / 4,\n                        strokeStyle: style.borderColor,\n                        pointStyle: pointStyle || style.pointStyle,\n                        rotation: style.rotation,\n                        textAlign: textAlign || style.textAlign,\n                        borderRadius: useBorderRadius && (borderRadius || style.borderRadius),\n                        datasetIndex: meta.index\n                    };\n                }, this);\n            }\n        },\n        title: {\n            color: (ctx)=>ctx.chart.options.color,\n            display: false,\n            position: 'center',\n            text: ''\n        }\n    },\n    descriptors: {\n        _scriptable: (name)=>!name.startsWith('on'),\n        labels: {\n            _scriptable: (name)=>![\n                    'generateLabels',\n                    'filter',\n                    'sort'\n                ].includes(name)\n        }\n    }\n};\n\nclass Title extends Element {\n constructor(config){\n        super();\n        this.chart = config.chart;\n        this.options = config.options;\n        this.ctx = config.ctx;\n        this._padding = undefined;\n        this.top = undefined;\n        this.bottom = undefined;\n        this.left = undefined;\n        this.right = undefined;\n        this.width = undefined;\n        this.height = undefined;\n        this.position = undefined;\n        this.weight = undefined;\n        this.fullSize = undefined;\n    }\n    update(maxWidth, maxHeight) {\n        const opts = this.options;\n        this.left = 0;\n        this.top = 0;\n        if (!opts.display) {\n            this.width = this.height = this.right = this.bottom = 0;\n            return;\n        }\n        this.width = this.right = maxWidth;\n        this.height = this.bottom = maxHeight;\n        const lineCount = isArray(opts.text) ? opts.text.length : 1;\n        this._padding = toPadding(opts.padding);\n        const textSize = lineCount * toFont(opts.font).lineHeight + this._padding.height;\n        if (this.isHorizontal()) {\n            this.height = textSize;\n        } else {\n            this.width = textSize;\n        }\n    }\n    isHorizontal() {\n        const pos = this.options.position;\n        return pos === 'top' || pos === 'bottom';\n    }\n    _drawArgs(offset) {\n        const { top , left , bottom , right , options  } = this;\n        const align = options.align;\n        let rotation = 0;\n        let maxWidth, titleX, titleY;\n        if (this.isHorizontal()) {\n            titleX = _alignStartEnd(align, left, right);\n            titleY = top + offset;\n            maxWidth = right - left;\n        } else {\n            if (options.position === 'left') {\n                titleX = left + offset;\n                titleY = _alignStartEnd(align, bottom, top);\n                rotation = PI * -0.5;\n            } else {\n                titleX = right - offset;\n                titleY = _alignStartEnd(align, top, bottom);\n                rotation = PI * 0.5;\n            }\n            maxWidth = bottom - top;\n        }\n        return {\n            titleX,\n            titleY,\n            maxWidth,\n            rotation\n        };\n    }\n    draw() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        if (!opts.display) {\n            return;\n        }\n        const fontOpts = toFont(opts.font);\n        const lineHeight = fontOpts.lineHeight;\n        const offset = lineHeight / 2 + this._padding.top;\n        const { titleX , titleY , maxWidth , rotation  } = this._drawArgs(offset);\n        renderText(ctx, opts.text, 0, 0, fontOpts, {\n            color: opts.color,\n            maxWidth,\n            rotation,\n            textAlign: _toLeftRightCenter(opts.align),\n            textBaseline: 'middle',\n            translation: [\n                titleX,\n                titleY\n            ]\n        });\n    }\n}\nfunction createTitle(chart, titleOpts) {\n    const title = new Title({\n        ctx: chart.ctx,\n        options: titleOpts,\n        chart\n    });\n    layouts.configure(chart, title, titleOpts);\n    layouts.addBox(chart, title);\n    chart.titleBlock = title;\n}\nvar plugin_title = {\n    id: 'title',\n _element: Title,\n    start (chart, _args, options) {\n        createTitle(chart, options);\n    },\n    stop (chart) {\n        const titleBlock = chart.titleBlock;\n        layouts.removeBox(chart, titleBlock);\n        delete chart.titleBlock;\n    },\n    beforeUpdate (chart, _args, options) {\n        const title = chart.titleBlock;\n        layouts.configure(chart, title, options);\n        title.options = options;\n    },\n    defaults: {\n        align: 'center',\n        display: false,\n        font: {\n            weight: 'bold'\n        },\n        fullSize: true,\n        padding: 10,\n        position: 'top',\n        text: '',\n        weight: 2000\n    },\n    defaultRoutes: {\n        color: 'color'\n    },\n    descriptors: {\n        _scriptable: true,\n        _indexable: false\n    }\n};\n\nconst map = new WeakMap();\nvar plugin_subtitle = {\n    id: 'subtitle',\n    start (chart, _args, options) {\n        const title = new Title({\n            ctx: chart.ctx,\n            options,\n            chart\n        });\n        layouts.configure(chart, title, options);\n        layouts.addBox(chart, title);\n        map.set(chart, title);\n    },\n    stop (chart) {\n        layouts.removeBox(chart, map.get(chart));\n        map.delete(chart);\n    },\n    beforeUpdate (chart, _args, options) {\n        const title = map.get(chart);\n        layouts.configure(chart, title, options);\n        title.options = options;\n    },\n    defaults: {\n        align: 'center',\n        display: false,\n        font: {\n            weight: 'normal'\n        },\n        fullSize: true,\n        padding: 0,\n        position: 'top',\n        text: '',\n        weight: 1500\n    },\n    defaultRoutes: {\n        color: 'color'\n    },\n    descriptors: {\n        _scriptable: true,\n        _indexable: false\n    }\n};\n\nconst positioners = {\n average (items) {\n        if (!items.length) {\n            return false;\n        }\n        let i, len;\n        let xSet = new Set();\n        let y = 0;\n        let count = 0;\n        for(i = 0, len = items.length; i < len; ++i){\n            const el = items[i].element;\n            if (el && el.hasValue()) {\n                const pos = el.tooltipPosition();\n                xSet.add(pos.x);\n                y += pos.y;\n                ++count;\n            }\n        }\n        if (count === 0 || xSet.size === 0) {\n            return false;\n        }\n        const xAverage = [\n            ...xSet\n        ].reduce((a, b)=>a + b) / xSet.size;\n        return {\n            x: xAverage,\n            y: y / count\n        };\n    },\n nearest (items, eventPosition) {\n        if (!items.length) {\n            return false;\n        }\n        let x = eventPosition.x;\n        let y = eventPosition.y;\n        let minDistance = Number.POSITIVE_INFINITY;\n        let i, len, nearestElement;\n        for(i = 0, len = items.length; i < len; ++i){\n            const el = items[i].element;\n            if (el && el.hasValue()) {\n                const center = el.getCenterPoint();\n                const d = distanceBetweenPoints(eventPosition, center);\n                if (d < minDistance) {\n                    minDistance = d;\n                    nearestElement = el;\n                }\n            }\n        }\n        if (nearestElement) {\n            const tp = nearestElement.tooltipPosition();\n            x = tp.x;\n            y = tp.y;\n        }\n        return {\n            x,\n            y\n        };\n    }\n};\nfunction pushOrConcat(base, toPush) {\n    if (toPush) {\n        if (isArray(toPush)) {\n            Array.prototype.push.apply(base, toPush);\n        } else {\n            base.push(toPush);\n        }\n    }\n    return base;\n}\n function splitNewlines(str) {\n    if ((typeof str === 'string' || str instanceof String) && str.indexOf('\\n') > -1) {\n        return str.split('\\n');\n    }\n    return str;\n}\n function createTooltipItem(chart, item) {\n    const { element , datasetIndex , index  } = item;\n    const controller = chart.getDatasetMeta(datasetIndex).controller;\n    const { label , value  } = controller.getLabelAndValue(index);\n    return {\n        chart,\n        label,\n        parsed: controller.getParsed(index),\n        raw: chart.data.datasets[datasetIndex].data[index],\n        formattedValue: value,\n        dataset: controller.getDataset(),\n        dataIndex: index,\n        datasetIndex,\n        element\n    };\n}\n function getTooltipSize(tooltip, options) {\n    const ctx = tooltip.chart.ctx;\n    const { body , footer , title  } = tooltip;\n    const { boxWidth , boxHeight  } = options;\n    const bodyFont = toFont(options.bodyFont);\n    const titleFont = toFont(options.titleFont);\n    const footerFont = toFont(options.footerFont);\n    const titleLineCount = title.length;\n    const footerLineCount = footer.length;\n    const bodyLineItemCount = body.length;\n    const padding = toPadding(options.padding);\n    let height = padding.height;\n    let width = 0;\n    let combinedBodyLength = body.reduce((count, bodyItem)=>count + bodyItem.before.length + bodyItem.lines.length + bodyItem.after.length, 0);\n    combinedBodyLength += tooltip.beforeBody.length + tooltip.afterBody.length;\n    if (titleLineCount) {\n        height += titleLineCount * titleFont.lineHeight + (titleLineCount - 1) * options.titleSpacing + options.titleMarginBottom;\n    }\n    if (combinedBodyLength) {\n        const bodyLineHeight = options.displayColors ? Math.max(boxHeight, bodyFont.lineHeight) : bodyFont.lineHeight;\n        height += bodyLineItemCount * bodyLineHeight + (combinedBodyLength - bodyLineItemCount) * bodyFont.lineHeight + (combinedBodyLength - 1) * options.bodySpacing;\n    }\n    if (footerLineCount) {\n        height += options.footerMarginTop + footerLineCount * footerFont.lineHeight + (footerLineCount - 1) * options.footerSpacing;\n    }\n    let widthPadding = 0;\n    const maxLineWidth = function(line) {\n        width = Math.max(width, ctx.measureText(line).width + widthPadding);\n    };\n    ctx.save();\n    ctx.font = titleFont.string;\n    each(tooltip.title, maxLineWidth);\n    ctx.font = bodyFont.string;\n    each(tooltip.beforeBody.concat(tooltip.afterBody), maxLineWidth);\n    widthPadding = options.displayColors ? boxWidth + 2 + options.boxPadding : 0;\n    each(body, (bodyItem)=>{\n        each(bodyItem.before, maxLineWidth);\n        each(bodyItem.lines, maxLineWidth);\n        each(bodyItem.after, maxLineWidth);\n    });\n    widthPadding = 0;\n    ctx.font = footerFont.string;\n    each(tooltip.footer, maxLineWidth);\n    ctx.restore();\n    width += padding.width;\n    return {\n        width,\n        height\n    };\n}\nfunction determineYAlign(chart, size) {\n    const { y , height  } = size;\n    if (y < height / 2) {\n        return 'top';\n    } else if (y > chart.height - height / 2) {\n        return 'bottom';\n    }\n    return 'center';\n}\nfunction doesNotFitWithAlign(xAlign, chart, options, size) {\n    const { x , width  } = size;\n    const caret = options.caretSize + options.caretPadding;\n    if (xAlign === 'left' && x + width + caret > chart.width) {\n        return true;\n    }\n    if (xAlign === 'right' && x - width - caret < 0) {\n        return true;\n    }\n}\nfunction determineXAlign(chart, options, size, yAlign) {\n    const { x , width  } = size;\n    const { width: chartWidth , chartArea: { left , right  }  } = chart;\n    let xAlign = 'center';\n    if (yAlign === 'center') {\n        xAlign = x <= (left + right) / 2 ? 'left' : 'right';\n    } else if (x <= width / 2) {\n        xAlign = 'left';\n    } else if (x >= chartWidth - width / 2) {\n        xAlign = 'right';\n    }\n    if (doesNotFitWithAlign(xAlign, chart, options, size)) {\n        xAlign = 'center';\n    }\n    return xAlign;\n}\n function determineAlignment(chart, options, size) {\n    const yAlign = size.yAlign || options.yAlign || determineYAlign(chart, size);\n    return {\n        xAlign: size.xAlign || options.xAlign || determineXAlign(chart, options, size, yAlign),\n        yAlign\n    };\n}\nfunction alignX(size, xAlign) {\n    let { x , width  } = size;\n    if (xAlign === 'right') {\n        x -= width;\n    } else if (xAlign === 'center') {\n        x -= width / 2;\n    }\n    return x;\n}\nfunction alignY(size, yAlign, paddingAndSize) {\n    let { y , height  } = size;\n    if (yAlign === 'top') {\n        y += paddingAndSize;\n    } else if (yAlign === 'bottom') {\n        y -= height + paddingAndSize;\n    } else {\n        y -= height / 2;\n    }\n    return y;\n}\n function getBackgroundPoint(options, size, alignment, chart) {\n    const { caretSize , caretPadding , cornerRadius  } = options;\n    const { xAlign , yAlign  } = alignment;\n    const paddingAndSize = caretSize + caretPadding;\n    const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(cornerRadius);\n    let x = alignX(size, xAlign);\n    const y = alignY(size, yAlign, paddingAndSize);\n    if (yAlign === 'center') {\n        if (xAlign === 'left') {\n            x += paddingAndSize;\n        } else if (xAlign === 'right') {\n            x -= paddingAndSize;\n        }\n    } else if (xAlign === 'left') {\n        x -= Math.max(topLeft, bottomLeft) + caretSize;\n    } else if (xAlign === 'right') {\n        x += Math.max(topRight, bottomRight) + caretSize;\n    }\n    return {\n        x: _limitValue(x, 0, chart.width - size.width),\n        y: _limitValue(y, 0, chart.height - size.height)\n    };\n}\nfunction getAlignedX(tooltip, align, options) {\n    const padding = toPadding(options.padding);\n    return align === 'center' ? tooltip.x + tooltip.width / 2 : align === 'right' ? tooltip.x + tooltip.width - padding.right : tooltip.x + padding.left;\n}\n function getBeforeAfterBodyLines(callback) {\n    return pushOrConcat([], splitNewlines(callback));\n}\nfunction createTooltipContext(parent, tooltip, tooltipItems) {\n    return createContext(parent, {\n        tooltip,\n        tooltipItems,\n        type: 'tooltip'\n    });\n}\nfunction overrideCallbacks(callbacks, context) {\n    const override = context && context.dataset && context.dataset.tooltip && context.dataset.tooltip.callbacks;\n    return override ? callbacks.override(override) : callbacks;\n}\nconst defaultCallbacks = {\n    beforeTitle: noop,\n    title (tooltipItems) {\n        if (tooltipItems.length > 0) {\n            const item = tooltipItems[0];\n            const labels = item.chart.data.labels;\n            const labelCount = labels ? labels.length : 0;\n            if (this && this.options && this.options.mode === 'dataset') {\n                return item.dataset.label || '';\n            } else if (item.label) {\n                return item.label;\n            } else if (labelCount > 0 && item.dataIndex < labelCount) {\n                return labels[item.dataIndex];\n            }\n        }\n        return '';\n    },\n    afterTitle: noop,\n    beforeBody: noop,\n    beforeLabel: noop,\n    label (tooltipItem) {\n        if (this && this.options && this.options.mode === 'dataset') {\n            return tooltipItem.label + ': ' + tooltipItem.formattedValue || tooltipItem.formattedValue;\n        }\n        let label = tooltipItem.dataset.label || '';\n        if (label) {\n            label += ': ';\n        }\n        const value = tooltipItem.formattedValue;\n        if (!isNullOrUndef(value)) {\n            label += value;\n        }\n        return label;\n    },\n    labelColor (tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n            borderColor: options.borderColor,\n            backgroundColor: options.backgroundColor,\n            borderWidth: options.borderWidth,\n            borderDash: options.borderDash,\n            borderDashOffset: options.borderDashOffset,\n            borderRadius: 0\n        };\n    },\n    labelTextColor () {\n        return this.options.bodyColor;\n    },\n    labelPointStyle (tooltipItem) {\n        const meta = tooltipItem.chart.getDatasetMeta(tooltipItem.datasetIndex);\n        const options = meta.controller.getStyle(tooltipItem.dataIndex);\n        return {\n            pointStyle: options.pointStyle,\n            rotation: options.rotation\n        };\n    },\n    afterLabel: noop,\n    afterBody: noop,\n    beforeFooter: noop,\n    footer: noop,\n    afterFooter: noop\n};\n function invokeCallbackWithFallback(callbacks, name, ctx, arg) {\n    const result = callbacks[name].call(ctx, arg);\n    if (typeof result === 'undefined') {\n        return defaultCallbacks[name].call(ctx, arg);\n    }\n    return result;\n}\nclass Tooltip extends Element {\n static positioners = positioners;\n    constructor(config){\n        super();\n        this.opacity = 0;\n        this._active = [];\n        this._eventPosition = undefined;\n        this._size = undefined;\n        this._cachedAnimations = undefined;\n        this._tooltipItems = [];\n        this.$animations = undefined;\n        this.$context = undefined;\n        this.chart = config.chart;\n        this.options = config.options;\n        this.dataPoints = undefined;\n        this.title = undefined;\n        this.beforeBody = undefined;\n        this.body = undefined;\n        this.afterBody = undefined;\n        this.footer = undefined;\n        this.xAlign = undefined;\n        this.yAlign = undefined;\n        this.x = undefined;\n        this.y = undefined;\n        this.height = undefined;\n        this.width = undefined;\n        this.caretX = undefined;\n        this.caretY = undefined;\n        this.labelColors = undefined;\n        this.labelPointStyles = undefined;\n        this.labelTextColors = undefined;\n    }\n    initialize(options) {\n        this.options = options;\n        this._cachedAnimations = undefined;\n        this.$context = undefined;\n    }\n _resolveAnimations() {\n        const cached = this._cachedAnimations;\n        if (cached) {\n            return cached;\n        }\n        const chart = this.chart;\n        const options = this.options.setContext(this.getContext());\n        const opts = options.enabled && chart.options.animation && options.animations;\n        const animations = new Animations(this.chart, opts);\n        if (opts._cacheable) {\n            this._cachedAnimations = Object.freeze(animations);\n        }\n        return animations;\n    }\n getContext() {\n        return this.$context || (this.$context = createTooltipContext(this.chart.getContext(), this, this._tooltipItems));\n    }\n    getTitle(context, options) {\n        const { callbacks  } = options;\n        const beforeTitle = invokeCallbackWithFallback(callbacks, 'beforeTitle', this, context);\n        const title = invokeCallbackWithFallback(callbacks, 'title', this, context);\n        const afterTitle = invokeCallbackWithFallback(callbacks, 'afterTitle', this, context);\n        let lines = [];\n        lines = pushOrConcat(lines, splitNewlines(beforeTitle));\n        lines = pushOrConcat(lines, splitNewlines(title));\n        lines = pushOrConcat(lines, splitNewlines(afterTitle));\n        return lines;\n    }\n    getBeforeBody(tooltipItems, options) {\n        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'beforeBody', this, tooltipItems));\n    }\n    getBody(tooltipItems, options) {\n        const { callbacks  } = options;\n        const bodyItems = [];\n        each(tooltipItems, (context)=>{\n            const bodyItem = {\n                before: [],\n                lines: [],\n                after: []\n            };\n            const scoped = overrideCallbacks(callbacks, context);\n            pushOrConcat(bodyItem.before, splitNewlines(invokeCallbackWithFallback(scoped, 'beforeLabel', this, context)));\n            pushOrConcat(bodyItem.lines, invokeCallbackWithFallback(scoped, 'label', this, context));\n            pushOrConcat(bodyItem.after, splitNewlines(invokeCallbackWithFallback(scoped, 'afterLabel', this, context)));\n            bodyItems.push(bodyItem);\n        });\n        return bodyItems;\n    }\n    getAfterBody(tooltipItems, options) {\n        return getBeforeAfterBodyLines(invokeCallbackWithFallback(options.callbacks, 'afterBody', this, tooltipItems));\n    }\n    getFooter(tooltipItems, options) {\n        const { callbacks  } = options;\n        const beforeFooter = invokeCallbackWithFallback(callbacks, 'beforeFooter', this, tooltipItems);\n        const footer = invokeCallbackWithFallback(callbacks, 'footer', this, tooltipItems);\n        const afterFooter = invokeCallbackWithFallback(callbacks, 'afterFooter', this, tooltipItems);\n        let lines = [];\n        lines = pushOrConcat(lines, splitNewlines(beforeFooter));\n        lines = pushOrConcat(lines, splitNewlines(footer));\n        lines = pushOrConcat(lines, splitNewlines(afterFooter));\n        return lines;\n    }\n _createItems(options) {\n        const active = this._active;\n        const data = this.chart.data;\n        const labelColors = [];\n        const labelPointStyles = [];\n        const labelTextColors = [];\n        let tooltipItems = [];\n        let i, len;\n        for(i = 0, len = active.length; i < len; ++i){\n            tooltipItems.push(createTooltipItem(this.chart, active[i]));\n        }\n        if (options.filter) {\n            tooltipItems = tooltipItems.filter((element, index, array)=>options.filter(element, index, array, data));\n        }\n        if (options.itemSort) {\n            tooltipItems = tooltipItems.sort((a, b)=>options.itemSort(a, b, data));\n        }\n        each(tooltipItems, (context)=>{\n            const scoped = overrideCallbacks(options.callbacks, context);\n            labelColors.push(invokeCallbackWithFallback(scoped, 'labelColor', this, context));\n            labelPointStyles.push(invokeCallbackWithFallback(scoped, 'labelPointStyle', this, context));\n            labelTextColors.push(invokeCallbackWithFallback(scoped, 'labelTextColor', this, context));\n        });\n        this.labelColors = labelColors;\n        this.labelPointStyles = labelPointStyles;\n        this.labelTextColors = labelTextColors;\n        this.dataPoints = tooltipItems;\n        return tooltipItems;\n    }\n    update(changed, replay) {\n        const options = this.options.setContext(this.getContext());\n        const active = this._active;\n        let properties;\n        let tooltipItems = [];\n        if (!active.length) {\n            if (this.opacity !== 0) {\n                properties = {\n                    opacity: 0\n                };\n            }\n        } else {\n            const position = positioners[options.position].call(this, active, this._eventPosition);\n            tooltipItems = this._createItems(options);\n            this.title = this.getTitle(tooltipItems, options);\n            this.beforeBody = this.getBeforeBody(tooltipItems, options);\n            this.body = this.getBody(tooltipItems, options);\n            this.afterBody = this.getAfterBody(tooltipItems, options);\n            this.footer = this.getFooter(tooltipItems, options);\n            const size = this._size = getTooltipSize(this, options);\n            const positionAndSize = Object.assign({}, position, size);\n            const alignment = determineAlignment(this.chart, options, positionAndSize);\n            const backgroundPoint = getBackgroundPoint(options, positionAndSize, alignment, this.chart);\n            this.xAlign = alignment.xAlign;\n            this.yAlign = alignment.yAlign;\n            properties = {\n                opacity: 1,\n                x: backgroundPoint.x,\n                y: backgroundPoint.y,\n                width: size.width,\n                height: size.height,\n                caretX: position.x,\n                caretY: position.y\n            };\n        }\n        this._tooltipItems = tooltipItems;\n        this.$context = undefined;\n        if (properties) {\n            this._resolveAnimations().update(this, properties);\n        }\n        if (changed && options.external) {\n            options.external.call(this, {\n                chart: this.chart,\n                tooltip: this,\n                replay\n            });\n        }\n    }\n    drawCaret(tooltipPoint, ctx, size, options) {\n        const caretPosition = this.getCaretPosition(tooltipPoint, size, options);\n        ctx.lineTo(caretPosition.x1, caretPosition.y1);\n        ctx.lineTo(caretPosition.x2, caretPosition.y2);\n        ctx.lineTo(caretPosition.x3, caretPosition.y3);\n    }\n    getCaretPosition(tooltipPoint, size, options) {\n        const { xAlign , yAlign  } = this;\n        const { caretSize , cornerRadius  } = options;\n        const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(cornerRadius);\n        const { x: ptX , y: ptY  } = tooltipPoint;\n        const { width , height  } = size;\n        let x1, x2, x3, y1, y2, y3;\n        if (yAlign === 'center') {\n            y2 = ptY + height / 2;\n            if (xAlign === 'left') {\n                x1 = ptX;\n                x2 = x1 - caretSize;\n                y1 = y2 + caretSize;\n                y3 = y2 - caretSize;\n            } else {\n                x1 = ptX + width;\n                x2 = x1 + caretSize;\n                y1 = y2 - caretSize;\n                y3 = y2 + caretSize;\n            }\n            x3 = x1;\n        } else {\n            if (xAlign === 'left') {\n                x2 = ptX + Math.max(topLeft, bottomLeft) + caretSize;\n            } else if (xAlign === 'right') {\n                x2 = ptX + width - Math.max(topRight, bottomRight) - caretSize;\n            } else {\n                x2 = this.caretX;\n            }\n            if (yAlign === 'top') {\n                y1 = ptY;\n                y2 = y1 - caretSize;\n                x1 = x2 - caretSize;\n                x3 = x2 + caretSize;\n            } else {\n                y1 = ptY + height;\n                y2 = y1 + caretSize;\n                x1 = x2 + caretSize;\n                x3 = x2 - caretSize;\n            }\n            y3 = y1;\n        }\n        return {\n            x1,\n            x2,\n            x3,\n            y1,\n            y2,\n            y3\n        };\n    }\n    drawTitle(pt, ctx, options) {\n        const title = this.title;\n        const length = title.length;\n        let titleFont, titleSpacing, i;\n        if (length) {\n            const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n            pt.x = getAlignedX(this, options.titleAlign, options);\n            ctx.textAlign = rtlHelper.textAlign(options.titleAlign);\n            ctx.textBaseline = 'middle';\n            titleFont = toFont(options.titleFont);\n            titleSpacing = options.titleSpacing;\n            ctx.fillStyle = options.titleColor;\n            ctx.font = titleFont.string;\n            for(i = 0; i < length; ++i){\n                ctx.fillText(title[i], rtlHelper.x(pt.x), pt.y + titleFont.lineHeight / 2);\n                pt.y += titleFont.lineHeight + titleSpacing;\n                if (i + 1 === length) {\n                    pt.y += options.titleMarginBottom - titleSpacing;\n                }\n            }\n        }\n    }\n _drawColorBox(ctx, pt, i, rtlHelper, options) {\n        const labelColor = this.labelColors[i];\n        const labelPointStyle = this.labelPointStyles[i];\n        const { boxHeight , boxWidth  } = options;\n        const bodyFont = toFont(options.bodyFont);\n        const colorX = getAlignedX(this, 'left', options);\n        const rtlColorX = rtlHelper.x(colorX);\n        const yOffSet = boxHeight < bodyFont.lineHeight ? (bodyFont.lineHeight - boxHeight) / 2 : 0;\n        const colorY = pt.y + yOffSet;\n        if (options.usePointStyle) {\n            const drawOptions = {\n                radius: Math.min(boxWidth, boxHeight) / 2,\n                pointStyle: labelPointStyle.pointStyle,\n                rotation: labelPointStyle.rotation,\n                borderWidth: 1\n            };\n            const centerX = rtlHelper.leftForLtr(rtlColorX, boxWidth) + boxWidth / 2;\n            const centerY = colorY + boxHeight / 2;\n            ctx.strokeStyle = options.multiKeyBackground;\n            ctx.fillStyle = options.multiKeyBackground;\n            drawPoint(ctx, drawOptions, centerX, centerY);\n            ctx.strokeStyle = labelColor.borderColor;\n            ctx.fillStyle = labelColor.backgroundColor;\n            drawPoint(ctx, drawOptions, centerX, centerY);\n        } else {\n            ctx.lineWidth = isObject(labelColor.borderWidth) ? Math.max(...Object.values(labelColor.borderWidth)) : labelColor.borderWidth || 1;\n            ctx.strokeStyle = labelColor.borderColor;\n            ctx.setLineDash(labelColor.borderDash || []);\n            ctx.lineDashOffset = labelColor.borderDashOffset || 0;\n            const outerX = rtlHelper.leftForLtr(rtlColorX, boxWidth);\n            const innerX = rtlHelper.leftForLtr(rtlHelper.xPlus(rtlColorX, 1), boxWidth - 2);\n            const borderRadius = toTRBLCorners(labelColor.borderRadius);\n            if (Object.values(borderRadius).some((v)=>v !== 0)) {\n                ctx.beginPath();\n                ctx.fillStyle = options.multiKeyBackground;\n                addRoundedRectPath(ctx, {\n                    x: outerX,\n                    y: colorY,\n                    w: boxWidth,\n                    h: boxHeight,\n                    radius: borderRadius\n                });\n                ctx.fill();\n                ctx.stroke();\n                ctx.fillStyle = labelColor.backgroundColor;\n                ctx.beginPath();\n                addRoundedRectPath(ctx, {\n                    x: innerX,\n                    y: colorY + 1,\n                    w: boxWidth - 2,\n                    h: boxHeight - 2,\n                    radius: borderRadius\n                });\n                ctx.fill();\n            } else {\n                ctx.fillStyle = options.multiKeyBackground;\n                ctx.fillRect(outerX, colorY, boxWidth, boxHeight);\n                ctx.strokeRect(outerX, colorY, boxWidth, boxHeight);\n                ctx.fillStyle = labelColor.backgroundColor;\n                ctx.fillRect(innerX, colorY + 1, boxWidth - 2, boxHeight - 2);\n            }\n        }\n        ctx.fillStyle = this.labelTextColors[i];\n    }\n    drawBody(pt, ctx, options) {\n        const { body  } = this;\n        const { bodySpacing , bodyAlign , displayColors , boxHeight , boxWidth , boxPadding  } = options;\n        const bodyFont = toFont(options.bodyFont);\n        let bodyLineHeight = bodyFont.lineHeight;\n        let xLinePadding = 0;\n        const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n        const fillLineOfText = function(line) {\n            ctx.fillText(line, rtlHelper.x(pt.x + xLinePadding), pt.y + bodyLineHeight / 2);\n            pt.y += bodyLineHeight + bodySpacing;\n        };\n        const bodyAlignForCalculation = rtlHelper.textAlign(bodyAlign);\n        let bodyItem, textColor, lines, i, j, ilen, jlen;\n        ctx.textAlign = bodyAlign;\n        ctx.textBaseline = 'middle';\n        ctx.font = bodyFont.string;\n        pt.x = getAlignedX(this, bodyAlignForCalculation, options);\n        ctx.fillStyle = options.bodyColor;\n        each(this.beforeBody, fillLineOfText);\n        xLinePadding = displayColors && bodyAlignForCalculation !== 'right' ? bodyAlign === 'center' ? boxWidth / 2 + boxPadding : boxWidth + 2 + boxPadding : 0;\n        for(i = 0, ilen = body.length; i < ilen; ++i){\n            bodyItem = body[i];\n            textColor = this.labelTextColors[i];\n            ctx.fillStyle = textColor;\n            each(bodyItem.before, fillLineOfText);\n            lines = bodyItem.lines;\n            if (displayColors && lines.length) {\n                this._drawColorBox(ctx, pt, i, rtlHelper, options);\n                bodyLineHeight = Math.max(bodyFont.lineHeight, boxHeight);\n            }\n            for(j = 0, jlen = lines.length; j < jlen; ++j){\n                fillLineOfText(lines[j]);\n                bodyLineHeight = bodyFont.lineHeight;\n            }\n            each(bodyItem.after, fillLineOfText);\n        }\n        xLinePadding = 0;\n        bodyLineHeight = bodyFont.lineHeight;\n        each(this.afterBody, fillLineOfText);\n        pt.y -= bodySpacing;\n    }\n    drawFooter(pt, ctx, options) {\n        const footer = this.footer;\n        const length = footer.length;\n        let footerFont, i;\n        if (length) {\n            const rtlHelper = getRtlAdapter(options.rtl, this.x, this.width);\n            pt.x = getAlignedX(this, options.footerAlign, options);\n            pt.y += options.footerMarginTop;\n            ctx.textAlign = rtlHelper.textAlign(options.footerAlign);\n            ctx.textBaseline = 'middle';\n            footerFont = toFont(options.footerFont);\n            ctx.fillStyle = options.footerColor;\n            ctx.font = footerFont.string;\n            for(i = 0; i < length; ++i){\n                ctx.fillText(footer[i], rtlHelper.x(pt.x), pt.y + footerFont.lineHeight / 2);\n                pt.y += footerFont.lineHeight + options.footerSpacing;\n            }\n        }\n    }\n    drawBackground(pt, ctx, tooltipSize, options) {\n        const { xAlign , yAlign  } = this;\n        const { x , y  } = pt;\n        const { width , height  } = tooltipSize;\n        const { topLeft , topRight , bottomLeft , bottomRight  } = toTRBLCorners(options.cornerRadius);\n        ctx.fillStyle = options.backgroundColor;\n        ctx.strokeStyle = options.borderColor;\n        ctx.lineWidth = options.borderWidth;\n        ctx.beginPath();\n        ctx.moveTo(x + topLeft, y);\n        if (yAlign === 'top') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + width - topRight, y);\n        ctx.quadraticCurveTo(x + width, y, x + width, y + topRight);\n        if (yAlign === 'center' && xAlign === 'right') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + width, y + height - bottomRight);\n        ctx.quadraticCurveTo(x + width, y + height, x + width - bottomRight, y + height);\n        if (yAlign === 'bottom') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x + bottomLeft, y + height);\n        ctx.quadraticCurveTo(x, y + height, x, y + height - bottomLeft);\n        if (yAlign === 'center' && xAlign === 'left') {\n            this.drawCaret(pt, ctx, tooltipSize, options);\n        }\n        ctx.lineTo(x, y + topLeft);\n        ctx.quadraticCurveTo(x, y, x + topLeft, y);\n        ctx.closePath();\n        ctx.fill();\n        if (options.borderWidth > 0) {\n            ctx.stroke();\n        }\n    }\n _updateAnimationTarget(options) {\n        const chart = this.chart;\n        const anims = this.$animations;\n        const animX = anims && anims.x;\n        const animY = anims && anims.y;\n        if (animX || animY) {\n            const position = positioners[options.position].call(this, this._active, this._eventPosition);\n            if (!position) {\n                return;\n            }\n            const size = this._size = getTooltipSize(this, options);\n            const positionAndSize = Object.assign({}, position, this._size);\n            const alignment = determineAlignment(chart, options, positionAndSize);\n            const point = getBackgroundPoint(options, positionAndSize, alignment, chart);\n            if (animX._to !== point.x || animY._to !== point.y) {\n                this.xAlign = alignment.xAlign;\n                this.yAlign = alignment.yAlign;\n                this.width = size.width;\n                this.height = size.height;\n                this.caretX = position.x;\n                this.caretY = position.y;\n                this._resolveAnimations().update(this, point);\n            }\n        }\n    }\n _willRender() {\n        return !!this.opacity;\n    }\n    draw(ctx) {\n        const options = this.options.setContext(this.getContext());\n        let opacity = this.opacity;\n        if (!opacity) {\n            return;\n        }\n        this._updateAnimationTarget(options);\n        const tooltipSize = {\n            width: this.width,\n            height: this.height\n        };\n        const pt = {\n            x: this.x,\n            y: this.y\n        };\n        opacity = Math.abs(opacity) < 1e-3 ? 0 : opacity;\n        const padding = toPadding(options.padding);\n        const hasTooltipContent = this.title.length || this.beforeBody.length || this.body.length || this.afterBody.length || this.footer.length;\n        if (options.enabled && hasTooltipContent) {\n            ctx.save();\n            ctx.globalAlpha = opacity;\n            this.drawBackground(pt, ctx, tooltipSize, options);\n            overrideTextDirection(ctx, options.textDirection);\n            pt.y += padding.top;\n            this.drawTitle(pt, ctx, options);\n            this.drawBody(pt, ctx, options);\n            this.drawFooter(pt, ctx, options);\n            restoreTextDirection(ctx, options.textDirection);\n            ctx.restore();\n        }\n    }\n getActiveElements() {\n        return this._active || [];\n    }\n setActiveElements(activeElements, eventPosition) {\n        const lastActive = this._active;\n        const active = activeElements.map(({ datasetIndex , index  })=>{\n            const meta = this.chart.getDatasetMeta(datasetIndex);\n            if (!meta) {\n                throw new Error('Cannot find a dataset at index ' + datasetIndex);\n            }\n            return {\n                datasetIndex,\n                element: meta.data[index],\n                index\n            };\n        });\n        const changed = !_elementsEqual(lastActive, active);\n        const positionChanged = this._positionChanged(active, eventPosition);\n        if (changed || positionChanged) {\n            this._active = active;\n            this._eventPosition = eventPosition;\n            this._ignoreReplayEvents = true;\n            this.update(true);\n        }\n    }\n handleEvent(e, replay, inChartArea = true) {\n        if (replay && this._ignoreReplayEvents) {\n            return false;\n        }\n        this._ignoreReplayEvents = false;\n        const options = this.options;\n        const lastActive = this._active || [];\n        const active = this._getActiveElements(e, lastActive, replay, inChartArea);\n        const positionChanged = this._positionChanged(active, e);\n        const changed = replay || !_elementsEqual(active, lastActive) || positionChanged;\n        if (changed) {\n            this._active = active;\n            if (options.enabled || options.external) {\n                this._eventPosition = {\n                    x: e.x,\n                    y: e.y\n                };\n                this.update(true, replay);\n            }\n        }\n        return changed;\n    }\n _getActiveElements(e, lastActive, replay, inChartArea) {\n        const options = this.options;\n        if (e.type === 'mouseout') {\n            return [];\n        }\n        if (!inChartArea) {\n            return lastActive.filter((i)=>this.chart.data.datasets[i.datasetIndex] && this.chart.getDatasetMeta(i.datasetIndex).controller.getParsed(i.index) !== undefined);\n        }\n        const active = this.chart.getElementsAtEventForMode(e, options.mode, options, replay);\n        if (options.reverse) {\n            active.reverse();\n        }\n        return active;\n    }\n _positionChanged(active, e) {\n        const { caretX , caretY , options  } = this;\n        const position = positioners[options.position].call(this, active, e);\n        return position !== false && (caretX !== position.x || caretY !== position.y);\n    }\n}\nvar plugin_tooltip = {\n    id: 'tooltip',\n    _element: Tooltip,\n    positioners,\n    afterInit (chart, _args, options) {\n        if (options) {\n            chart.tooltip = new Tooltip({\n                chart,\n                options\n            });\n        }\n    },\n    beforeUpdate (chart, _args, options) {\n        if (chart.tooltip) {\n            chart.tooltip.initialize(options);\n        }\n    },\n    reset (chart, _args, options) {\n        if (chart.tooltip) {\n            chart.tooltip.initialize(options);\n        }\n    },\n    afterDraw (chart) {\n        const tooltip = chart.tooltip;\n        if (tooltip && tooltip._willRender()) {\n            const args = {\n                tooltip\n            };\n            if (chart.notifyPlugins('beforeTooltipDraw', {\n                ...args,\n                cancelable: true\n            }) === false) {\n                return;\n            }\n            tooltip.draw(chart.ctx);\n            chart.notifyPlugins('afterTooltipDraw', args);\n        }\n    },\n    afterEvent (chart, args) {\n        if (chart.tooltip) {\n            const useFinalPosition = args.replay;\n            if (chart.tooltip.handleEvent(args.event, useFinalPosition, args.inChartArea)) {\n                args.changed = true;\n            }\n        }\n    },\n    defaults: {\n        enabled: true,\n        external: null,\n        position: 'average',\n        backgroundColor: 'rgba(0,0,0,0.8)',\n        titleColor: '#fff',\n        titleFont: {\n            weight: 'bold'\n        },\n        titleSpacing: 2,\n        titleMarginBottom: 6,\n        titleAlign: 'left',\n        bodyColor: '#fff',\n        bodySpacing: 2,\n        bodyFont: {},\n        bodyAlign: 'left',\n        footerColor: '#fff',\n        footerSpacing: 2,\n        footerMarginTop: 6,\n        footerFont: {\n            weight: 'bold'\n        },\n        footerAlign: 'left',\n        padding: 6,\n        caretPadding: 2,\n        caretSize: 5,\n        cornerRadius: 6,\n        boxHeight: (ctx, opts)=>opts.bodyFont.size,\n        boxWidth: (ctx, opts)=>opts.bodyFont.size,\n        multiKeyBackground: '#fff',\n        displayColors: true,\n        boxPadding: 0,\n        borderColor: 'rgba(0,0,0,0)',\n        borderWidth: 0,\n        animation: {\n            duration: 400,\n            easing: 'easeOutQuart'\n        },\n        animations: {\n            numbers: {\n                type: 'number',\n                properties: [\n                    'x',\n                    'y',\n                    'width',\n                    'height',\n                    'caretX',\n                    'caretY'\n                ]\n            },\n            opacity: {\n                easing: 'linear',\n                duration: 200\n            }\n        },\n        callbacks: defaultCallbacks\n    },\n    defaultRoutes: {\n        bodyFont: 'font',\n        footerFont: 'font',\n        titleFont: 'font'\n    },\n    descriptors: {\n        _scriptable: (name)=>name !== 'filter' && name !== 'itemSort' && name !== 'external',\n        _indexable: false,\n        callbacks: {\n            _scriptable: false,\n            _indexable: false\n        },\n        animation: {\n            _fallback: false\n        },\n        animations: {\n            _fallback: 'animation'\n        }\n    },\n    additionalOptionScopes: [\n        'interaction'\n    ]\n};\n\nvar plugins = /*#__PURE__*/Object.freeze({\n__proto__: null,\nColors: plugin_colors,\nDecimation: plugin_decimation,\nFiller: index,\nLegend: plugin_legend,\nSubTitle: plugin_subtitle,\nTitle: plugin_title,\nTooltip: plugin_tooltip\n});\n\nconst addIfString = (labels, raw, index, addedLabels)=>{\n    if (typeof raw === 'string') {\n        index = labels.push(raw) - 1;\n        addedLabels.unshift({\n            index,\n            label: raw\n        });\n    } else if (isNaN(raw)) {\n        index = null;\n    }\n    return index;\n};\nfunction findOrAddLabel(labels, raw, index, addedLabels) {\n    const first = labels.indexOf(raw);\n    if (first === -1) {\n        return addIfString(labels, raw, index, addedLabels);\n    }\n    const last = labels.lastIndexOf(raw);\n    return first !== last ? index : first;\n}\nconst validIndex = (index, max)=>index === null ? null : _limitValue(Math.round(index), 0, max);\nfunction _getLabelForValue(value) {\n    const labels = this.getLabels();\n    if (value >= 0 && value < labels.length) {\n        return labels[value];\n    }\n    return value;\n}\nclass CategoryScale extends Scale {\n    static id = 'category';\n static defaults = {\n        ticks: {\n            callback: _getLabelForValue\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this._startValue = undefined;\n        this._valueRange = 0;\n        this._addedLabels = [];\n    }\n    init(scaleOptions) {\n        const added = this._addedLabels;\n        if (added.length) {\n            const labels = this.getLabels();\n            for (const { index , label  } of added){\n                if (labels[index] === label) {\n                    labels.splice(index, 1);\n                }\n            }\n            this._addedLabels = [];\n        }\n        super.init(scaleOptions);\n    }\n    parse(raw, index) {\n        if (isNullOrUndef(raw)) {\n            return null;\n        }\n        const labels = this.getLabels();\n        index = isFinite(index) && labels[index] === raw ? index : findOrAddLabel(labels, raw, valueOrDefault(index, raw), this._addedLabels);\n        return validIndex(index, labels.length - 1);\n    }\n    determineDataLimits() {\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let { min , max  } = this.getMinMax(true);\n        if (this.options.bounds === 'ticks') {\n            if (!minDefined) {\n                min = 0;\n            }\n            if (!maxDefined) {\n                max = this.getLabels().length - 1;\n            }\n        }\n        this.min = min;\n        this.max = max;\n    }\n    buildTicks() {\n        const min = this.min;\n        const max = this.max;\n        const offset = this.options.offset;\n        const ticks = [];\n        let labels = this.getLabels();\n        labels = min === 0 && max === labels.length - 1 ? labels : labels.slice(min, max + 1);\n        this._valueRange = Math.max(labels.length - (offset ? 0 : 1), 1);\n        this._startValue = this.min - (offset ? 0.5 : 0);\n        for(let value = min; value <= max; value++){\n            ticks.push({\n                value\n            });\n        }\n        return ticks;\n    }\n    getLabelForValue(value) {\n        return _getLabelForValue.call(this, value);\n    }\n configure() {\n        super.configure();\n        if (!this.isHorizontal()) {\n            this._reversePixels = !this._reversePixels;\n        }\n    }\n    getPixelForValue(value) {\n        if (typeof value !== 'number') {\n            value = this.parse(value);\n        }\n        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n    }\n    getPixelForTick(index) {\n        const ticks = this.ticks;\n        if (index < 0 || index > ticks.length - 1) {\n            return null;\n        }\n        return this.getPixelForValue(ticks[index].value);\n    }\n    getValueForPixel(pixel) {\n        return Math.round(this._startValue + this.getDecimalForPixel(pixel) * this._valueRange);\n    }\n    getBasePixel() {\n        return this.bottom;\n    }\n}\n\nfunction generateTicks$1(generationOptions, dataRange) {\n    const ticks = [];\n    const MIN_SPACING = 1e-14;\n    const { bounds , step , min , max , precision , count , maxTicks , maxDigits , includeBounds  } = generationOptions;\n    const unit = step || 1;\n    const maxSpaces = maxTicks - 1;\n    const { min: rmin , max: rmax  } = dataRange;\n    const minDefined = !isNullOrUndef(min);\n    const maxDefined = !isNullOrUndef(max);\n    const countDefined = !isNullOrUndef(count);\n    const minSpacing = (rmax - rmin) / (maxDigits + 1);\n    let spacing = niceNum((rmax - rmin) / maxSpaces / unit) * unit;\n    let factor, niceMin, niceMax, numSpaces;\n    if (spacing < MIN_SPACING && !minDefined && !maxDefined) {\n        return [\n            {\n                value: rmin\n            },\n            {\n                value: rmax\n            }\n        ];\n    }\n    numSpaces = Math.ceil(rmax / spacing) - Math.floor(rmin / spacing);\n    if (numSpaces > maxSpaces) {\n        spacing = niceNum(numSpaces * spacing / maxSpaces / unit) * unit;\n    }\n    if (!isNullOrUndef(precision)) {\n        factor = Math.pow(10, precision);\n        spacing = Math.ceil(spacing * factor) / factor;\n    }\n    if (bounds === 'ticks') {\n        niceMin = Math.floor(rmin / spacing) * spacing;\n        niceMax = Math.ceil(rmax / spacing) * spacing;\n    } else {\n        niceMin = rmin;\n        niceMax = rmax;\n    }\n    if (minDefined && maxDefined && step && almostWhole((max - min) / step, spacing / 1000)) {\n        numSpaces = Math.round(Math.min((max - min) / spacing, maxTicks));\n        spacing = (max - min) / numSpaces;\n        niceMin = min;\n        niceMax = max;\n    } else if (countDefined) {\n        niceMin = minDefined ? min : niceMin;\n        niceMax = maxDefined ? max : niceMax;\n        numSpaces = count - 1;\n        spacing = (niceMax - niceMin) / numSpaces;\n    } else {\n        numSpaces = (niceMax - niceMin) / spacing;\n        if (almostEquals(numSpaces, Math.round(numSpaces), spacing / 1000)) {\n            numSpaces = Math.round(numSpaces);\n        } else {\n            numSpaces = Math.ceil(numSpaces);\n        }\n    }\n    const decimalPlaces = Math.max(_decimalPlaces(spacing), _decimalPlaces(niceMin));\n    factor = Math.pow(10, isNullOrUndef(precision) ? decimalPlaces : precision);\n    niceMin = Math.round(niceMin * factor) / factor;\n    niceMax = Math.round(niceMax * factor) / factor;\n    let j = 0;\n    if (minDefined) {\n        if (includeBounds && niceMin !== min) {\n            ticks.push({\n                value: min\n            });\n            if (niceMin < min) {\n                j++;\n            }\n            if (almostEquals(Math.round((niceMin + j * spacing) * factor) / factor, min, relativeLabelSize(min, minSpacing, generationOptions))) {\n                j++;\n            }\n        } else if (niceMin < min) {\n            j++;\n        }\n    }\n    for(; j < numSpaces; ++j){\n        const tickValue = Math.round((niceMin + j * spacing) * factor) / factor;\n        if (maxDefined && tickValue > max) {\n            break;\n        }\n        ticks.push({\n            value: tickValue\n        });\n    }\n    if (maxDefined && includeBounds && niceMax !== max) {\n        if (ticks.length && almostEquals(ticks[ticks.length - 1].value, max, relativeLabelSize(max, minSpacing, generationOptions))) {\n            ticks[ticks.length - 1].value = max;\n        } else {\n            ticks.push({\n                value: max\n            });\n        }\n    } else if (!maxDefined || niceMax === max) {\n        ticks.push({\n            value: niceMax\n        });\n    }\n    return ticks;\n}\nfunction relativeLabelSize(value, minSpacing, { horizontal , minRotation  }) {\n    const rad = toRadians(minRotation);\n    const ratio = (horizontal ? Math.sin(rad) : Math.cos(rad)) || 0.001;\n    const length = 0.75 * minSpacing * ('' + value).length;\n    return Math.min(minSpacing / ratio, length);\n}\nclass LinearScaleBase extends Scale {\n    constructor(cfg){\n        super(cfg);\n         this.start = undefined;\n         this.end = undefined;\n         this._startValue = undefined;\n         this._endValue = undefined;\n        this._valueRange = 0;\n    }\n    parse(raw, index) {\n        if (isNullOrUndef(raw)) {\n            return null;\n        }\n        if ((typeof raw === 'number' || raw instanceof Number) && !isFinite(+raw)) {\n            return null;\n        }\n        return +raw;\n    }\n    handleTickRangeOptions() {\n        const { beginAtZero  } = this.options;\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let { min , max  } = this;\n        const setMin = (v)=>min = minDefined ? min : v;\n        const setMax = (v)=>max = maxDefined ? max : v;\n        if (beginAtZero) {\n            const minSign = sign(min);\n            const maxSign = sign(max);\n            if (minSign < 0 && maxSign < 0) {\n                setMax(0);\n            } else if (minSign > 0 && maxSign > 0) {\n                setMin(0);\n            }\n        }\n        if (min === max) {\n            let offset = max === 0 ? 1 : Math.abs(max * 0.05);\n            setMax(max + offset);\n            if (!beginAtZero) {\n                setMin(min - offset);\n            }\n        }\n        this.min = min;\n        this.max = max;\n    }\n    getTickLimit() {\n        const tickOpts = this.options.ticks;\n        let { maxTicksLimit , stepSize  } = tickOpts;\n        let maxTicks;\n        if (stepSize) {\n            maxTicks = Math.ceil(this.max / stepSize) - Math.floor(this.min / stepSize) + 1;\n            if (maxTicks > 1000) {\n                console.warn(`scales.${this.id}.ticks.stepSize: ${stepSize} would result generating up to ${maxTicks} ticks. Limiting to 1000.`);\n                maxTicks = 1000;\n            }\n        } else {\n            maxTicks = this.computeTickLimit();\n            maxTicksLimit = maxTicksLimit || 11;\n        }\n        if (maxTicksLimit) {\n            maxTicks = Math.min(maxTicksLimit, maxTicks);\n        }\n        return maxTicks;\n    }\n computeTickLimit() {\n        return Number.POSITIVE_INFINITY;\n    }\n    buildTicks() {\n        const opts = this.options;\n        const tickOpts = opts.ticks;\n        let maxTicks = this.getTickLimit();\n        maxTicks = Math.max(2, maxTicks);\n        const numericGeneratorOptions = {\n            maxTicks,\n            bounds: opts.bounds,\n            min: opts.min,\n            max: opts.max,\n            precision: tickOpts.precision,\n            step: tickOpts.stepSize,\n            count: tickOpts.count,\n            maxDigits: this._maxDigits(),\n            horizontal: this.isHorizontal(),\n            minRotation: tickOpts.minRotation || 0,\n            includeBounds: tickOpts.includeBounds !== false\n        };\n        const dataRange = this._range || this;\n        const ticks = generateTicks$1(numericGeneratorOptions, dataRange);\n        if (opts.bounds === 'ticks') {\n            _setMinAndMaxByKey(ticks, this, 'value');\n        }\n        if (opts.reverse) {\n            ticks.reverse();\n            this.start = this.max;\n            this.end = this.min;\n        } else {\n            this.start = this.min;\n            this.end = this.max;\n        }\n        return ticks;\n    }\n configure() {\n        const ticks = this.ticks;\n        let start = this.min;\n        let end = this.max;\n        super.configure();\n        if (this.options.offset && ticks.length) {\n            const offset = (end - start) / Math.max(ticks.length - 1, 1) / 2;\n            start -= offset;\n            end += offset;\n        }\n        this._startValue = start;\n        this._endValue = end;\n        this._valueRange = end - start;\n    }\n    getLabelForValue(value) {\n        return formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n    }\n}\n\nclass LinearScale extends LinearScaleBase {\n    static id = 'linear';\n static defaults = {\n        ticks: {\n            callback: Ticks.formatters.numeric\n        }\n    };\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(true);\n        this.min = isNumberFinite(min) ? min : 0;\n        this.max = isNumberFinite(max) ? max : 1;\n        this.handleTickRangeOptions();\n    }\n computeTickLimit() {\n        const horizontal = this.isHorizontal();\n        const length = horizontal ? this.width : this.height;\n        const minRotation = toRadians(this.options.ticks.minRotation);\n        const ratio = (horizontal ? Math.sin(minRotation) : Math.cos(minRotation)) || 0.001;\n        const tickFont = this._resolveTickFontOptions(0);\n        return Math.ceil(length / Math.min(40, tickFont.lineHeight / ratio));\n    }\n    getPixelForValue(value) {\n        return value === null ? NaN : this.getPixelForDecimal((value - this._startValue) / this._valueRange);\n    }\n    getValueForPixel(pixel) {\n        return this._startValue + this.getDecimalForPixel(pixel) * this._valueRange;\n    }\n}\n\nconst log10Floor = (v)=>Math.floor(log10(v));\nconst changeExponent = (v, m)=>Math.pow(10, log10Floor(v) + m);\nfunction isMajor(tickVal) {\n    const remain = tickVal / Math.pow(10, log10Floor(tickVal));\n    return remain === 1;\n}\nfunction steps(min, max, rangeExp) {\n    const rangeStep = Math.pow(10, rangeExp);\n    const start = Math.floor(min / rangeStep);\n    const end = Math.ceil(max / rangeStep);\n    return end - start;\n}\nfunction startExp(min, max) {\n    const range = max - min;\n    let rangeExp = log10Floor(range);\n    while(steps(min, max, rangeExp) > 10){\n        rangeExp++;\n    }\n    while(steps(min, max, rangeExp) < 10){\n        rangeExp--;\n    }\n    return Math.min(rangeExp, log10Floor(min));\n}\n function generateTicks(generationOptions, { min , max  }) {\n    min = finiteOrDefault(generationOptions.min, min);\n    const ticks = [];\n    const minExp = log10Floor(min);\n    let exp = startExp(min, max);\n    let precision = exp < 0 ? Math.pow(10, Math.abs(exp)) : 1;\n    const stepSize = Math.pow(10, exp);\n    const base = minExp > exp ? Math.pow(10, minExp) : 0;\n    const start = Math.round((min - base) * precision) / precision;\n    const offset = Math.floor((min - base) / stepSize / 10) * stepSize * 10;\n    let significand = Math.floor((start - offset) / Math.pow(10, exp));\n    let value = finiteOrDefault(generationOptions.min, Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision);\n    while(value < max){\n        ticks.push({\n            value,\n            major: isMajor(value),\n            significand\n        });\n        if (significand >= 10) {\n            significand = significand < 15 ? 15 : 20;\n        } else {\n            significand++;\n        }\n        if (significand >= 20) {\n            exp++;\n            significand = 2;\n            precision = exp >= 0 ? 1 : precision;\n        }\n        value = Math.round((base + offset + significand * Math.pow(10, exp)) * precision) / precision;\n    }\n    const lastTick = finiteOrDefault(generationOptions.max, value);\n    ticks.push({\n        value: lastTick,\n        major: isMajor(lastTick),\n        significand\n    });\n    return ticks;\n}\nclass LogarithmicScale extends Scale {\n    static id = 'logarithmic';\n static defaults = {\n        ticks: {\n            callback: Ticks.formatters.logarithmic,\n            major: {\n                enabled: true\n            }\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this.start = undefined;\n         this.end = undefined;\n         this._startValue = undefined;\n        this._valueRange = 0;\n    }\n    parse(raw, index) {\n        const value = LinearScaleBase.prototype.parse.apply(this, [\n            raw,\n            index\n        ]);\n        if (value === 0) {\n            this._zero = true;\n            return undefined;\n        }\n        return isNumberFinite(value) && value > 0 ? value : null;\n    }\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(true);\n        this.min = isNumberFinite(min) ? Math.max(0, min) : null;\n        this.max = isNumberFinite(max) ? Math.max(0, max) : null;\n        if (this.options.beginAtZero) {\n            this._zero = true;\n        }\n        if (this._zero && this.min !== this._suggestedMin && !isNumberFinite(this._userMin)) {\n            this.min = min === changeExponent(this.min, 0) ? changeExponent(this.min, -1) : changeExponent(this.min, 0);\n        }\n        this.handleTickRangeOptions();\n    }\n    handleTickRangeOptions() {\n        const { minDefined , maxDefined  } = this.getUserBounds();\n        let min = this.min;\n        let max = this.max;\n        const setMin = (v)=>min = minDefined ? min : v;\n        const setMax = (v)=>max = maxDefined ? max : v;\n        if (min === max) {\n            if (min <= 0) {\n                setMin(1);\n                setMax(10);\n            } else {\n                setMin(changeExponent(min, -1));\n                setMax(changeExponent(max, +1));\n            }\n        }\n        if (min <= 0) {\n            setMin(changeExponent(max, -1));\n        }\n        if (max <= 0) {\n            setMax(changeExponent(min, +1));\n        }\n        this.min = min;\n        this.max = max;\n    }\n    buildTicks() {\n        const opts = this.options;\n        const generationOptions = {\n            min: this._userMin,\n            max: this._userMax\n        };\n        const ticks = generateTicks(generationOptions, this);\n        if (opts.bounds === 'ticks') {\n            _setMinAndMaxByKey(ticks, this, 'value');\n        }\n        if (opts.reverse) {\n            ticks.reverse();\n            this.start = this.max;\n            this.end = this.min;\n        } else {\n            this.start = this.min;\n            this.end = this.max;\n        }\n        return ticks;\n    }\n getLabelForValue(value) {\n        return value === undefined ? '0' : formatNumber(value, this.chart.options.locale, this.options.ticks.format);\n    }\n configure() {\n        const start = this.min;\n        super.configure();\n        this._startValue = log10(start);\n        this._valueRange = log10(this.max) - log10(start);\n    }\n    getPixelForValue(value) {\n        if (value === undefined || value === 0) {\n            value = this.min;\n        }\n        if (value === null || isNaN(value)) {\n            return NaN;\n        }\n        return this.getPixelForDecimal(value === this.min ? 0 : (log10(value) - this._startValue) / this._valueRange);\n    }\n    getValueForPixel(pixel) {\n        const decimal = this.getDecimalForPixel(pixel);\n        return Math.pow(10, this._startValue + decimal * this._valueRange);\n    }\n}\n\nfunction getTickBackdropHeight(opts) {\n    const tickOpts = opts.ticks;\n    if (tickOpts.display && opts.display) {\n        const padding = toPadding(tickOpts.backdropPadding);\n        return valueOrDefault(tickOpts.font && tickOpts.font.size, defaults.font.size) + padding.height;\n    }\n    return 0;\n}\nfunction measureLabelSize(ctx, font, label) {\n    label = isArray(label) ? label : [\n        label\n    ];\n    return {\n        w: _longestText(ctx, font.string, label),\n        h: label.length * font.lineHeight\n    };\n}\nfunction determineLimits(angle, pos, size, min, max) {\n    if (angle === min || angle === max) {\n        return {\n            start: pos - size / 2,\n            end: pos + size / 2\n        };\n    } else if (angle < min || angle > max) {\n        return {\n            start: pos - size,\n            end: pos\n        };\n    }\n    return {\n        start: pos,\n        end: pos + size\n    };\n}\n function fitWithPointLabels(scale) {\n    const orig = {\n        l: scale.left + scale._padding.left,\n        r: scale.right - scale._padding.right,\n        t: scale.top + scale._padding.top,\n        b: scale.bottom - scale._padding.bottom\n    };\n    const limits = Object.assign({}, orig);\n    const labelSizes = [];\n    const padding = [];\n    const valueCount = scale._pointLabels.length;\n    const pointLabelOpts = scale.options.pointLabels;\n    const additionalAngle = pointLabelOpts.centerPointLabels ? PI / valueCount : 0;\n    for(let i = 0; i < valueCount; i++){\n        const opts = pointLabelOpts.setContext(scale.getPointLabelContext(i));\n        padding[i] = opts.padding;\n        const pointPosition = scale.getPointPosition(i, scale.drawingArea + padding[i], additionalAngle);\n        const plFont = toFont(opts.font);\n        const textSize = measureLabelSize(scale.ctx, plFont, scale._pointLabels[i]);\n        labelSizes[i] = textSize;\n        const angleRadians = _normalizeAngle(scale.getIndexAngle(i) + additionalAngle);\n        const angle = Math.round(toDegrees(angleRadians));\n        const hLimits = determineLimits(angle, pointPosition.x, textSize.w, 0, 180);\n        const vLimits = determineLimits(angle, pointPosition.y, textSize.h, 90, 270);\n        updateLimits(limits, orig, angleRadians, hLimits, vLimits);\n    }\n    scale.setCenterPoint(orig.l - limits.l, limits.r - orig.r, orig.t - limits.t, limits.b - orig.b);\n    scale._pointLabelItems = buildPointLabelItems(scale, labelSizes, padding);\n}\nfunction updateLimits(limits, orig, angle, hLimits, vLimits) {\n    const sin = Math.abs(Math.sin(angle));\n    const cos = Math.abs(Math.cos(angle));\n    let x = 0;\n    let y = 0;\n    if (hLimits.start < orig.l) {\n        x = (orig.l - hLimits.start) / sin;\n        limits.l = Math.min(limits.l, orig.l - x);\n    } else if (hLimits.end > orig.r) {\n        x = (hLimits.end - orig.r) / sin;\n        limits.r = Math.max(limits.r, orig.r + x);\n    }\n    if (vLimits.start < orig.t) {\n        y = (orig.t - vLimits.start) / cos;\n        limits.t = Math.min(limits.t, orig.t - y);\n    } else if (vLimits.end > orig.b) {\n        y = (vLimits.end - orig.b) / cos;\n        limits.b = Math.max(limits.b, orig.b + y);\n    }\n}\nfunction createPointLabelItem(scale, index, itemOpts) {\n    const outerDistance = scale.drawingArea;\n    const { extra , additionalAngle , padding , size  } = itemOpts;\n    const pointLabelPosition = scale.getPointPosition(index, outerDistance + extra + padding, additionalAngle);\n    const angle = Math.round(toDegrees(_normalizeAngle(pointLabelPosition.angle + HALF_PI)));\n    const y = yForAngle(pointLabelPosition.y, size.h, angle);\n    const textAlign = getTextAlignForAngle(angle);\n    const left = leftForTextAlign(pointLabelPosition.x, size.w, textAlign);\n    return {\n        visible: true,\n        x: pointLabelPosition.x,\n        y,\n        textAlign,\n        left,\n        top: y,\n        right: left + size.w,\n        bottom: y + size.h\n    };\n}\nfunction isNotOverlapped(item, area) {\n    if (!area) {\n        return true;\n    }\n    const { left , top , right , bottom  } = item;\n    const apexesInArea = _isPointInArea({\n        x: left,\n        y: top\n    }, area) || _isPointInArea({\n        x: left,\n        y: bottom\n    }, area) || _isPointInArea({\n        x: right,\n        y: top\n    }, area) || _isPointInArea({\n        x: right,\n        y: bottom\n    }, area);\n    return !apexesInArea;\n}\nfunction buildPointLabelItems(scale, labelSizes, padding) {\n    const items = [];\n    const valueCount = scale._pointLabels.length;\n    const opts = scale.options;\n    const { centerPointLabels , display  } = opts.pointLabels;\n    const itemOpts = {\n        extra: getTickBackdropHeight(opts) / 2,\n        additionalAngle: centerPointLabels ? PI / valueCount : 0\n    };\n    let area;\n    for(let i = 0; i < valueCount; i++){\n        itemOpts.padding = padding[i];\n        itemOpts.size = labelSizes[i];\n        const item = createPointLabelItem(scale, i, itemOpts);\n        items.push(item);\n        if (display === 'auto') {\n            item.visible = isNotOverlapped(item, area);\n            if (item.visible) {\n                area = item;\n            }\n        }\n    }\n    return items;\n}\nfunction getTextAlignForAngle(angle) {\n    if (angle === 0 || angle === 180) {\n        return 'center';\n    } else if (angle < 180) {\n        return 'left';\n    }\n    return 'right';\n}\nfunction leftForTextAlign(x, w, align) {\n    if (align === 'right') {\n        x -= w;\n    } else if (align === 'center') {\n        x -= w / 2;\n    }\n    return x;\n}\nfunction yForAngle(y, h, angle) {\n    if (angle === 90 || angle === 270) {\n        y -= h / 2;\n    } else if (angle > 270 || angle < 90) {\n        y -= h;\n    }\n    return y;\n}\nfunction drawPointLabelBox(ctx, opts, item) {\n    const { left , top , right , bottom  } = item;\n    const { backdropColor  } = opts;\n    if (!isNullOrUndef(backdropColor)) {\n        const borderRadius = toTRBLCorners(opts.borderRadius);\n        const padding = toPadding(opts.backdropPadding);\n        ctx.fillStyle = backdropColor;\n        const backdropLeft = left - padding.left;\n        const backdropTop = top - padding.top;\n        const backdropWidth = right - left + padding.width;\n        const backdropHeight = bottom - top + padding.height;\n        if (Object.values(borderRadius).some((v)=>v !== 0)) {\n            ctx.beginPath();\n            addRoundedRectPath(ctx, {\n                x: backdropLeft,\n                y: backdropTop,\n                w: backdropWidth,\n                h: backdropHeight,\n                radius: borderRadius\n            });\n            ctx.fill();\n        } else {\n            ctx.fillRect(backdropLeft, backdropTop, backdropWidth, backdropHeight);\n        }\n    }\n}\nfunction drawPointLabels(scale, labelCount) {\n    const { ctx , options: { pointLabels  }  } = scale;\n    for(let i = labelCount - 1; i >= 0; i--){\n        const item = scale._pointLabelItems[i];\n        if (!item.visible) {\n            continue;\n        }\n        const optsAtIndex = pointLabels.setContext(scale.getPointLabelContext(i));\n        drawPointLabelBox(ctx, optsAtIndex, item);\n        const plFont = toFont(optsAtIndex.font);\n        const { x , y , textAlign  } = item;\n        renderText(ctx, scale._pointLabels[i], x, y + plFont.lineHeight / 2, plFont, {\n            color: optsAtIndex.color,\n            textAlign: textAlign,\n            textBaseline: 'middle'\n        });\n    }\n}\nfunction pathRadiusLine(scale, radius, circular, labelCount) {\n    const { ctx  } = scale;\n    if (circular) {\n        ctx.arc(scale.xCenter, scale.yCenter, radius, 0, TAU);\n    } else {\n        let pointPosition = scale.getPointPosition(0, radius);\n        ctx.moveTo(pointPosition.x, pointPosition.y);\n        for(let i = 1; i < labelCount; i++){\n            pointPosition = scale.getPointPosition(i, radius);\n            ctx.lineTo(pointPosition.x, pointPosition.y);\n        }\n    }\n}\nfunction drawRadiusLine(scale, gridLineOpts, radius, labelCount, borderOpts) {\n    const ctx = scale.ctx;\n    const circular = gridLineOpts.circular;\n    const { color , lineWidth  } = gridLineOpts;\n    if (!circular && !labelCount || !color || !lineWidth || radius < 0) {\n        return;\n    }\n    ctx.save();\n    ctx.strokeStyle = color;\n    ctx.lineWidth = lineWidth;\n    ctx.setLineDash(borderOpts.dash || []);\n    ctx.lineDashOffset = borderOpts.dashOffset;\n    ctx.beginPath();\n    pathRadiusLine(scale, radius, circular, labelCount);\n    ctx.closePath();\n    ctx.stroke();\n    ctx.restore();\n}\nfunction createPointLabelContext(parent, index, label) {\n    return createContext(parent, {\n        label,\n        index,\n        type: 'pointLabel'\n    });\n}\nclass RadialLinearScale extends LinearScaleBase {\n    static id = 'radialLinear';\n static defaults = {\n        display: true,\n        animate: true,\n        position: 'chartArea',\n        angleLines: {\n            display: true,\n            lineWidth: 1,\n            borderDash: [],\n            borderDashOffset: 0.0\n        },\n        grid: {\n            circular: false\n        },\n        startAngle: 0,\n        ticks: {\n            showLabelBackdrop: true,\n            callback: Ticks.formatters.numeric\n        },\n        pointLabels: {\n            backdropColor: undefined,\n            backdropPadding: 2,\n            display: true,\n            font: {\n                size: 10\n            },\n            callback (label) {\n                return label;\n            },\n            padding: 5,\n            centerPointLabels: false\n        }\n    };\n    static defaultRoutes = {\n        'angleLines.color': 'borderColor',\n        'pointLabels.color': 'color',\n        'ticks.color': 'color'\n    };\n    static descriptors = {\n        angleLines: {\n            _fallback: 'grid'\n        }\n    };\n    constructor(cfg){\n        super(cfg);\n         this.xCenter = undefined;\n         this.yCenter = undefined;\n         this.drawingArea = undefined;\n         this._pointLabels = [];\n        this._pointLabelItems = [];\n    }\n    setDimensions() {\n        const padding = this._padding = toPadding(getTickBackdropHeight(this.options) / 2);\n        const w = this.width = this.maxWidth - padding.width;\n        const h = this.height = this.maxHeight - padding.height;\n        this.xCenter = Math.floor(this.left + w / 2 + padding.left);\n        this.yCenter = Math.floor(this.top + h / 2 + padding.top);\n        this.drawingArea = Math.floor(Math.min(w, h) / 2);\n    }\n    determineDataLimits() {\n        const { min , max  } = this.getMinMax(false);\n        this.min = isNumberFinite(min) && !isNaN(min) ? min : 0;\n        this.max = isNumberFinite(max) && !isNaN(max) ? max : 0;\n        this.handleTickRangeOptions();\n    }\n computeTickLimit() {\n        return Math.ceil(this.drawingArea / getTickBackdropHeight(this.options));\n    }\n    generateTickLabels(ticks) {\n        LinearScaleBase.prototype.generateTickLabels.call(this, ticks);\n        this._pointLabels = this.getLabels().map((value, index)=>{\n            const label = callback(this.options.pointLabels.callback, [\n                value,\n                index\n            ], this);\n            return label || label === 0 ? label : '';\n        }).filter((v, i)=>this.chart.getDataVisibility(i));\n    }\n    fit() {\n        const opts = this.options;\n        if (opts.display && opts.pointLabels.display) {\n            fitWithPointLabels(this);\n        } else {\n            this.setCenterPoint(0, 0, 0, 0);\n        }\n    }\n    setCenterPoint(leftMovement, rightMovement, topMovement, bottomMovement) {\n        this.xCenter += Math.floor((leftMovement - rightMovement) / 2);\n        this.yCenter += Math.floor((topMovement - bottomMovement) / 2);\n        this.drawingArea -= Math.min(this.drawingArea / 2, Math.max(leftMovement, rightMovement, topMovement, bottomMovement));\n    }\n    getIndexAngle(index) {\n        const angleMultiplier = TAU / (this._pointLabels.length || 1);\n        const startAngle = this.options.startAngle || 0;\n        return _normalizeAngle(index * angleMultiplier + toRadians(startAngle));\n    }\n    getDistanceFromCenterForValue(value) {\n        if (isNullOrUndef(value)) {\n            return NaN;\n        }\n        const scalingFactor = this.drawingArea / (this.max - this.min);\n        if (this.options.reverse) {\n            return (this.max - value) * scalingFactor;\n        }\n        return (value - this.min) * scalingFactor;\n    }\n    getValueForDistanceFromCenter(distance) {\n        if (isNullOrUndef(distance)) {\n            return NaN;\n        }\n        const scaledDistance = distance / (this.drawingArea / (this.max - this.min));\n        return this.options.reverse ? this.max - scaledDistance : this.min + scaledDistance;\n    }\n    getPointLabelContext(index) {\n        const pointLabels = this._pointLabels || [];\n        if (index >= 0 && index < pointLabels.length) {\n            const pointLabel = pointLabels[index];\n            return createPointLabelContext(this.getContext(), index, pointLabel);\n        }\n    }\n    getPointPosition(index, distanceFromCenter, additionalAngle = 0) {\n        const angle = this.getIndexAngle(index) - HALF_PI + additionalAngle;\n        return {\n            x: Math.cos(angle) * distanceFromCenter + this.xCenter,\n            y: Math.sin(angle) * distanceFromCenter + this.yCenter,\n            angle\n        };\n    }\n    getPointPositionForValue(index, value) {\n        return this.getPointPosition(index, this.getDistanceFromCenterForValue(value));\n    }\n    getBasePosition(index) {\n        return this.getPointPositionForValue(index || 0, this.getBaseValue());\n    }\n    getPointLabelPosition(index) {\n        const { left , top , right , bottom  } = this._pointLabelItems[index];\n        return {\n            left,\n            top,\n            right,\n            bottom\n        };\n    }\n drawBackground() {\n        const { backgroundColor , grid: { circular  }  } = this.options;\n        if (backgroundColor) {\n            const ctx = this.ctx;\n            ctx.save();\n            ctx.beginPath();\n            pathRadiusLine(this, this.getDistanceFromCenterForValue(this._endValue), circular, this._pointLabels.length);\n            ctx.closePath();\n            ctx.fillStyle = backgroundColor;\n            ctx.fill();\n            ctx.restore();\n        }\n    }\n drawGrid() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        const { angleLines , grid , border  } = opts;\n        const labelCount = this._pointLabels.length;\n        let i, offset, position;\n        if (opts.pointLabels.display) {\n            drawPointLabels(this, labelCount);\n        }\n        if (grid.display) {\n            this.ticks.forEach((tick, index)=>{\n                if (index !== 0 || index === 0 && this.min < 0) {\n                    offset = this.getDistanceFromCenterForValue(tick.value);\n                    const context = this.getContext(index);\n                    const optsAtIndex = grid.setContext(context);\n                    const optsAtIndexBorder = border.setContext(context);\n                    drawRadiusLine(this, optsAtIndex, offset, labelCount, optsAtIndexBorder);\n                }\n            });\n        }\n        if (angleLines.display) {\n            ctx.save();\n            for(i = labelCount - 1; i >= 0; i--){\n                const optsAtIndex = angleLines.setContext(this.getPointLabelContext(i));\n                const { color , lineWidth  } = optsAtIndex;\n                if (!lineWidth || !color) {\n                    continue;\n                }\n                ctx.lineWidth = lineWidth;\n                ctx.strokeStyle = color;\n                ctx.setLineDash(optsAtIndex.borderDash);\n                ctx.lineDashOffset = optsAtIndex.borderDashOffset;\n                offset = this.getDistanceFromCenterForValue(opts.reverse ? this.min : this.max);\n                position = this.getPointPosition(i, offset);\n                ctx.beginPath();\n                ctx.moveTo(this.xCenter, this.yCenter);\n                ctx.lineTo(position.x, position.y);\n                ctx.stroke();\n            }\n            ctx.restore();\n        }\n    }\n drawBorder() {}\n drawLabels() {\n        const ctx = this.ctx;\n        const opts = this.options;\n        const tickOpts = opts.ticks;\n        if (!tickOpts.display) {\n            return;\n        }\n        const startAngle = this.getIndexAngle(0);\n        let offset, width;\n        ctx.save();\n        ctx.translate(this.xCenter, this.yCenter);\n        ctx.rotate(startAngle);\n        ctx.textAlign = 'center';\n        ctx.textBaseline = 'middle';\n        this.ticks.forEach((tick, index)=>{\n            if (index === 0 && this.min >= 0 && !opts.reverse) {\n                return;\n            }\n            const optsAtIndex = tickOpts.setContext(this.getContext(index));\n            const tickFont = toFont(optsAtIndex.font);\n            offset = this.getDistanceFromCenterForValue(this.ticks[index].value);\n            if (optsAtIndex.showLabelBackdrop) {\n                ctx.font = tickFont.string;\n                width = ctx.measureText(tick.label).width;\n                ctx.fillStyle = optsAtIndex.backdropColor;\n                const padding = toPadding(optsAtIndex.backdropPadding);\n                ctx.fillRect(-width / 2 - padding.left, -offset - tickFont.size / 2 - padding.top, width + padding.width, tickFont.size + padding.height);\n            }\n            renderText(ctx, tick.label, 0, -offset, tickFont, {\n                color: optsAtIndex.color,\n                strokeColor: optsAtIndex.textStrokeColor,\n                strokeWidth: optsAtIndex.textStrokeWidth\n            });\n        });\n        ctx.restore();\n    }\n drawTitle() {}\n}\n\nconst INTERVALS = {\n    millisecond: {\n        common: true,\n        size: 1,\n        steps: 1000\n    },\n    second: {\n        common: true,\n        size: 1000,\n        steps: 60\n    },\n    minute: {\n        common: true,\n        size: 60000,\n        steps: 60\n    },\n    hour: {\n        common: true,\n        size: 3600000,\n        steps: 24\n    },\n    day: {\n        common: true,\n        size: 86400000,\n        steps: 30\n    },\n    week: {\n        common: false,\n        size: 604800000,\n        steps: 4\n    },\n    month: {\n        common: true,\n        size: 2.628e9,\n        steps: 12\n    },\n    quarter: {\n        common: false,\n        size: 7.884e9,\n        steps: 4\n    },\n    year: {\n        common: true,\n        size: 3.154e10\n    }\n};\n const UNITS =  /* #__PURE__ */ Object.keys(INTERVALS);\n function sorter(a, b) {\n    return a - b;\n}\n function parse(scale, input) {\n    if (isNullOrUndef(input)) {\n        return null;\n    }\n    const adapter = scale._adapter;\n    const { parser , round , isoWeekday  } = scale._parseOpts;\n    let value = input;\n    if (typeof parser === 'function') {\n        value = parser(value);\n    }\n    if (!isNumberFinite(value)) {\n        value = typeof parser === 'string' ? adapter.parse(value, parser) : adapter.parse(value);\n    }\n    if (value === null) {\n        return null;\n    }\n    if (round) {\n        value = round === 'week' && (isNumber(isoWeekday) || isoWeekday === true) ? adapter.startOf(value, 'isoWeek', isoWeekday) : adapter.startOf(value, round);\n    }\n    return +value;\n}\n function determineUnitForAutoTicks(minUnit, min, max, capacity) {\n    const ilen = UNITS.length;\n    for(let i = UNITS.indexOf(minUnit); i < ilen - 1; ++i){\n        const interval = INTERVALS[UNITS[i]];\n        const factor = interval.steps ? interval.steps : Number.MAX_SAFE_INTEGER;\n        if (interval.common && Math.ceil((max - min) / (factor * interval.size)) <= capacity) {\n            return UNITS[i];\n        }\n    }\n    return UNITS[ilen - 1];\n}\n function determineUnitForFormatting(scale, numTicks, minUnit, min, max) {\n    for(let i = UNITS.length - 1; i >= UNITS.indexOf(minUnit); i--){\n        const unit = UNITS[i];\n        if (INTERVALS[unit].common && scale._adapter.diff(max, min, unit) >= numTicks - 1) {\n            return unit;\n        }\n    }\n    return UNITS[minUnit ? UNITS.indexOf(minUnit) : 0];\n}\n function determineMajorUnit(unit) {\n    for(let i = UNITS.indexOf(unit) + 1, ilen = UNITS.length; i < ilen; ++i){\n        if (INTERVALS[UNITS[i]].common) {\n            return UNITS[i];\n        }\n    }\n}\n function addTick(ticks, time, timestamps) {\n    if (!timestamps) {\n        ticks[time] = true;\n    } else if (timestamps.length) {\n        const { lo , hi  } = _lookup(timestamps, time);\n        const timestamp = timestamps[lo] >= time ? timestamps[lo] : timestamps[hi];\n        ticks[timestamp] = true;\n    }\n}\n function setMajorTicks(scale, ticks, map, majorUnit) {\n    const adapter = scale._adapter;\n    const first = +adapter.startOf(ticks[0].value, majorUnit);\n    const last = ticks[ticks.length - 1].value;\n    let major, index;\n    for(major = first; major <= last; major = +adapter.add(major, 1, majorUnit)){\n        index = map[major];\n        if (index >= 0) {\n            ticks[index].major = true;\n        }\n    }\n    return ticks;\n}\n function ticksFromTimestamps(scale, values, majorUnit) {\n    const ticks = [];\n     const map = {};\n    const ilen = values.length;\n    let i, value;\n    for(i = 0; i < ilen; ++i){\n        value = values[i];\n        map[value] = i;\n        ticks.push({\n            value,\n            major: false\n        });\n    }\n    return ilen === 0 || !majorUnit ? ticks : setMajorTicks(scale, ticks, map, majorUnit);\n}\nclass TimeScale extends Scale {\n    static id = 'time';\n static defaults = {\n bounds: 'data',\n        adapters: {},\n        time: {\n            parser: false,\n            unit: false,\n            round: false,\n            isoWeekday: false,\n            minUnit: 'millisecond',\n            displayFormats: {}\n        },\n        ticks: {\n source: 'auto',\n            callback: false,\n            major: {\n                enabled: false\n            }\n        }\n    };\n constructor(props){\n        super(props);\n         this._cache = {\n            data: [],\n            labels: [],\n            all: []\n        };\n         this._unit = 'day';\n         this._majorUnit = undefined;\n        this._offsets = {};\n        this._normalized = false;\n        this._parseOpts = undefined;\n    }\n    init(scaleOpts, opts = {}) {\n        const time = scaleOpts.time || (scaleOpts.time = {});\n         const adapter = this._adapter = new adapters._date(scaleOpts.adapters.date);\n        adapter.init(opts);\n        mergeIf(time.displayFormats, adapter.formats());\n        this._parseOpts = {\n            parser: time.parser,\n            round: time.round,\n            isoWeekday: time.isoWeekday\n        };\n        super.init(scaleOpts);\n        this._normalized = opts.normalized;\n    }\n parse(raw, index) {\n        if (raw === undefined) {\n            return null;\n        }\n        return parse(this, raw);\n    }\n    beforeLayout() {\n        super.beforeLayout();\n        this._cache = {\n            data: [],\n            labels: [],\n            all: []\n        };\n    }\n    determineDataLimits() {\n        const options = this.options;\n        const adapter = this._adapter;\n        const unit = options.time.unit || 'day';\n        let { min , max , minDefined , maxDefined  } = this.getUserBounds();\n function _applyBounds(bounds) {\n            if (!minDefined && !isNaN(bounds.min)) {\n                min = Math.min(min, bounds.min);\n            }\n            if (!maxDefined && !isNaN(bounds.max)) {\n                max = Math.max(max, bounds.max);\n            }\n        }\n        if (!minDefined || !maxDefined) {\n            _applyBounds(this._getLabelBounds());\n            if (options.bounds !== 'ticks' || options.ticks.source !== 'labels') {\n                _applyBounds(this.getMinMax(false));\n            }\n        }\n        min = isNumberFinite(min) && !isNaN(min) ? min : +adapter.startOf(Date.now(), unit);\n        max = isNumberFinite(max) && !isNaN(max) ? max : +adapter.endOf(Date.now(), unit) + 1;\n        this.min = Math.min(min, max - 1);\n        this.max = Math.max(min + 1, max);\n    }\n _getLabelBounds() {\n        const arr = this.getLabelTimestamps();\n        let min = Number.POSITIVE_INFINITY;\n        let max = Number.NEGATIVE_INFINITY;\n        if (arr.length) {\n            min = arr[0];\n            max = arr[arr.length - 1];\n        }\n        return {\n            min,\n            max\n        };\n    }\n buildTicks() {\n        const options = this.options;\n        const timeOpts = options.time;\n        const tickOpts = options.ticks;\n        const timestamps = tickOpts.source === 'labels' ? this.getLabelTimestamps() : this._generate();\n        if (options.bounds === 'ticks' && timestamps.length) {\n            this.min = this._userMin || timestamps[0];\n            this.max = this._userMax || timestamps[timestamps.length - 1];\n        }\n        const min = this.min;\n        const max = this.max;\n        const ticks = _filterBetween(timestamps, min, max);\n        this._unit = timeOpts.unit || (tickOpts.autoSkip ? determineUnitForAutoTicks(timeOpts.minUnit, this.min, this.max, this._getLabelCapacity(min)) : determineUnitForFormatting(this, ticks.length, timeOpts.minUnit, this.min, this.max));\n        this._majorUnit = !tickOpts.major.enabled || this._unit === 'year' ? undefined : determineMajorUnit(this._unit);\n        this.initOffsets(timestamps);\n        if (options.reverse) {\n            ticks.reverse();\n        }\n        return ticksFromTimestamps(this, ticks, this._majorUnit);\n    }\n    afterAutoSkip() {\n        if (this.options.offsetAfterAutoskip) {\n            this.initOffsets(this.ticks.map((tick)=>+tick.value));\n        }\n    }\n initOffsets(timestamps = []) {\n        let start = 0;\n        let end = 0;\n        let first, last;\n        if (this.options.offset && timestamps.length) {\n            first = this.getDecimalForValue(timestamps[0]);\n            if (timestamps.length === 1) {\n                start = 1 - first;\n            } else {\n                start = (this.getDecimalForValue(timestamps[1]) - first) / 2;\n            }\n            last = this.getDecimalForValue(timestamps[timestamps.length - 1]);\n            if (timestamps.length === 1) {\n                end = last;\n            } else {\n                end = (last - this.getDecimalForValue(timestamps[timestamps.length - 2])) / 2;\n            }\n        }\n        const limit = timestamps.length < 3 ? 0.5 : 0.25;\n        start = _limitValue(start, 0, limit);\n        end = _limitValue(end, 0, limit);\n        this._offsets = {\n            start,\n            end,\n            factor: 1 / (start + 1 + end)\n        };\n    }\n _generate() {\n        const adapter = this._adapter;\n        const min = this.min;\n        const max = this.max;\n        const options = this.options;\n        const timeOpts = options.time;\n        const minor = timeOpts.unit || determineUnitForAutoTicks(timeOpts.minUnit, min, max, this._getLabelCapacity(min));\n        const stepSize = valueOrDefault(options.ticks.stepSize, 1);\n        const weekday = minor === 'week' ? timeOpts.isoWeekday : false;\n        const hasWeekday = isNumber(weekday) || weekday === true;\n        const ticks = {};\n        let first = min;\n        let time, count;\n        if (hasWeekday) {\n            first = +adapter.startOf(first, 'isoWeek', weekday);\n        }\n        first = +adapter.startOf(first, hasWeekday ? 'day' : minor);\n        if (adapter.diff(max, min, minor) > 100000 * stepSize) {\n            throw new Error(min + ' and ' + max + ' are too far apart with stepSize of ' + stepSize + ' ' + minor);\n        }\n        const timestamps = options.ticks.source === 'data' && this.getDataTimestamps();\n        for(time = first, count = 0; time < max; time = +adapter.add(time, stepSize, minor), count++){\n            addTick(ticks, time, timestamps);\n        }\n        if (time === max || options.bounds === 'ticks' || count === 1) {\n            addTick(ticks, time, timestamps);\n        }\n        return Object.keys(ticks).sort(sorter).map((x)=>+x);\n    }\n getLabelForValue(value) {\n        const adapter = this._adapter;\n        const timeOpts = this.options.time;\n        if (timeOpts.tooltipFormat) {\n            return adapter.format(value, timeOpts.tooltipFormat);\n        }\n        return adapter.format(value, timeOpts.displayFormats.datetime);\n    }\n format(value, format) {\n        const options = this.options;\n        const formats = options.time.displayFormats;\n        const unit = this._unit;\n        const fmt = format || formats[unit];\n        return this._adapter.format(value, fmt);\n    }\n _tickFormatFunction(time, index, ticks, format) {\n        const options = this.options;\n        const formatter = options.ticks.callback;\n        if (formatter) {\n            return callback(formatter, [\n                time,\n                index,\n                ticks\n            ], this);\n        }\n        const formats = options.time.displayFormats;\n        const unit = this._unit;\n        const majorUnit = this._majorUnit;\n        const minorFormat = unit && formats[unit];\n        const majorFormat = majorUnit && formats[majorUnit];\n        const tick = ticks[index];\n        const major = majorUnit && majorFormat && tick && tick.major;\n        return this._adapter.format(time, format || (major ? majorFormat : minorFormat));\n    }\n generateTickLabels(ticks) {\n        let i, ilen, tick;\n        for(i = 0, ilen = ticks.length; i < ilen; ++i){\n            tick = ticks[i];\n            tick.label = this._tickFormatFunction(tick.value, i, ticks);\n        }\n    }\n getDecimalForValue(value) {\n        return value === null ? NaN : (value - this.min) / (this.max - this.min);\n    }\n getPixelForValue(value) {\n        const offsets = this._offsets;\n        const pos = this.getDecimalForValue(value);\n        return this.getPixelForDecimal((offsets.start + pos) * offsets.factor);\n    }\n getValueForPixel(pixel) {\n        const offsets = this._offsets;\n        const pos = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n        return this.min + pos * (this.max - this.min);\n    }\n _getLabelSize(label) {\n        const ticksOpts = this.options.ticks;\n        const tickLabelWidth = this.ctx.measureText(label).width;\n        const angle = toRadians(this.isHorizontal() ? ticksOpts.maxRotation : ticksOpts.minRotation);\n        const cosRotation = Math.cos(angle);\n        const sinRotation = Math.sin(angle);\n        const tickFontSize = this._resolveTickFontOptions(0).size;\n        return {\n            w: tickLabelWidth * cosRotation + tickFontSize * sinRotation,\n            h: tickLabelWidth * sinRotation + tickFontSize * cosRotation\n        };\n    }\n _getLabelCapacity(exampleTime) {\n        const timeOpts = this.options.time;\n        const displayFormats = timeOpts.displayFormats;\n        const format = displayFormats[timeOpts.unit] || displayFormats.millisecond;\n        const exampleLabel = this._tickFormatFunction(exampleTime, 0, ticksFromTimestamps(this, [\n            exampleTime\n        ], this._majorUnit), format);\n        const size = this._getLabelSize(exampleLabel);\n        const capacity = Math.floor(this.isHorizontal() ? this.width / size.w : this.height / size.h) - 1;\n        return capacity > 0 ? capacity : 1;\n    }\n getDataTimestamps() {\n        let timestamps = this._cache.data || [];\n        let i, ilen;\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const metas = this.getMatchingVisibleMetas();\n        if (this._normalized && metas.length) {\n            return this._cache.data = metas[0].controller.getAllParsedValues(this);\n        }\n        for(i = 0, ilen = metas.length; i < ilen; ++i){\n            timestamps = timestamps.concat(metas[i].controller.getAllParsedValues(this));\n        }\n        return this._cache.data = this.normalize(timestamps);\n    }\n getLabelTimestamps() {\n        const timestamps = this._cache.labels || [];\n        let i, ilen;\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const labels = this.getLabels();\n        for(i = 0, ilen = labels.length; i < ilen; ++i){\n            timestamps.push(parse(this, labels[i]));\n        }\n        return this._cache.labels = this._normalized ? timestamps : this.normalize(timestamps);\n    }\n normalize(values) {\n        return _arrayUnique(values.sort(sorter));\n    }\n}\n\nfunction interpolate(table, val, reverse) {\n    let lo = 0;\n    let hi = table.length - 1;\n    let prevSource, nextSource, prevTarget, nextTarget;\n    if (reverse) {\n        if (val >= table[lo].pos && val <= table[hi].pos) {\n            ({ lo , hi  } = _lookupByKey(table, 'pos', val));\n        }\n        ({ pos: prevSource , time: prevTarget  } = table[lo]);\n        ({ pos: nextSource , time: nextTarget  } = table[hi]);\n    } else {\n        if (val >= table[lo].time && val <= table[hi].time) {\n            ({ lo , hi  } = _lookupByKey(table, 'time', val));\n        }\n        ({ time: prevSource , pos: prevTarget  } = table[lo]);\n        ({ time: nextSource , pos: nextTarget  } = table[hi]);\n    }\n    const span = nextSource - prevSource;\n    return span ? prevTarget + (nextTarget - prevTarget) * (val - prevSource) / span : prevTarget;\n}\nclass TimeSeriesScale extends TimeScale {\n    static id = 'timeseries';\n static defaults = TimeScale.defaults;\n constructor(props){\n        super(props);\n         this._table = [];\n         this._minPos = undefined;\n         this._tableRange = undefined;\n    }\n initOffsets() {\n        const timestamps = this._getTimestampsForTable();\n        const table = this._table = this.buildLookupTable(timestamps);\n        this._minPos = interpolate(table, this.min);\n        this._tableRange = interpolate(table, this.max) - this._minPos;\n        super.initOffsets(timestamps);\n    }\n buildLookupTable(timestamps) {\n        const { min , max  } = this;\n        const items = [];\n        const table = [];\n        let i, ilen, prev, curr, next;\n        for(i = 0, ilen = timestamps.length; i < ilen; ++i){\n            curr = timestamps[i];\n            if (curr >= min && curr <= max) {\n                items.push(curr);\n            }\n        }\n        if (items.length < 2) {\n            return [\n                {\n                    time: min,\n                    pos: 0\n                },\n                {\n                    time: max,\n                    pos: 1\n                }\n            ];\n        }\n        for(i = 0, ilen = items.length; i < ilen; ++i){\n            next = items[i + 1];\n            prev = items[i - 1];\n            curr = items[i];\n            if (Math.round((next + prev) / 2) !== curr) {\n                table.push({\n                    time: curr,\n                    pos: i / (ilen - 1)\n                });\n            }\n        }\n        return table;\n    }\n _generate() {\n        const min = this.min;\n        const max = this.max;\n        let timestamps = super.getDataTimestamps();\n        if (!timestamps.includes(min) || !timestamps.length) {\n            timestamps.splice(0, 0, min);\n        }\n        if (!timestamps.includes(max) || timestamps.length === 1) {\n            timestamps.push(max);\n        }\n        return timestamps.sort((a, b)=>a - b);\n    }\n _getTimestampsForTable() {\n        let timestamps = this._cache.all || [];\n        if (timestamps.length) {\n            return timestamps;\n        }\n        const data = this.getDataTimestamps();\n        const label = this.getLabelTimestamps();\n        if (data.length && label.length) {\n            timestamps = this.normalize(data.concat(label));\n        } else {\n            timestamps = data.length ? data : label;\n        }\n        timestamps = this._cache.all = timestamps;\n        return timestamps;\n    }\n getDecimalForValue(value) {\n        return (interpolate(this._table, value) - this._minPos) / this._tableRange;\n    }\n getValueForPixel(pixel) {\n        const offsets = this._offsets;\n        const decimal = this.getDecimalForPixel(pixel) / offsets.factor - offsets.end;\n        return interpolate(this._table, decimal * this._tableRange + this._minPos, true);\n    }\n}\n\nvar scales = /*#__PURE__*/Object.freeze({\n__proto__: null,\nCategoryScale: CategoryScale,\nLinearScale: LinearScale,\nLogarithmicScale: LogarithmicScale,\nRadialLinearScale: RadialLinearScale,\nTimeScale: TimeScale,\nTimeSeriesScale: TimeSeriesScale\n});\n\nconst registerables = [\n    controllers,\n    elements,\n    plugins,\n    scales\n];\n\nexport { Animation, Animations, ArcElement, BarController, BarElement, BasePlatform, BasicPlatform, BubbleController, CategoryScale, Chart, plugin_colors as Colors, DatasetController, plugin_decimation as Decimation, DomPlatform, DoughnutController, Element, index as Filler, Interaction, plugin_legend as Legend, LineController, LineElement, LinearScale, LogarithmicScale, PieController, PointElement, PolarAreaController, RadarController, RadialLinearScale, Scale, ScatterController, plugin_subtitle as SubTitle, Ticks, TimeScale, TimeSeriesScale, plugin_title as Title, plugin_tooltip as Tooltip, adapters as _adapters, _detectPlatform, animator, controllers, defaults, elements, layouts, plugins, registerables, registry, scales };\n//# sourceMappingURL=chart.js.map\n","import {Chart, registerables} from '../dist/chart.js';\n\nChart.register(...registerables);\n\nexport * from '../dist/chart.js';\nexport default Chart;\n","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n// We're using a generic because languages have different plural rules.\n\n// eslint-disable-next-line no-use-before-define\n\nfunction insertReplacement(source, rx, replacement) {\n  const newParts = [];\n  source.forEach(chunk => {\n    // When the source contains multiple placeholders for interpolation,\n    // we should ignore chunks that are not strings, because those\n    // can be JSX objects and will be otherwise incorrectly turned into strings.\n    // Without this condition we’d get this: [object Object] hello [object Object] my <button>\n    if (typeof chunk !== 'string') {\n      return newParts.push(chunk);\n    }\n    return rx[Symbol.split](chunk).forEach((raw, i, list) => {\n      if (raw !== '') {\n        newParts.push(raw);\n      }\n\n      // Interlace with the `replacement` value\n      if (i < list.length - 1) {\n        newParts.push(replacement);\n      }\n    });\n  });\n  return newParts;\n}\n\n/**\n * Takes a string with placeholder variables like `%{smart_count} file selected`\n * and replaces it with values from options `{smart_count: 5}`\n *\n * @license https://github.com/airbnb/polyglot.js/blob/master/LICENSE\n * taken from https://github.com/airbnb/polyglot.js/blob/master/lib/polyglot.js#L299\n *\n * @param phrase that needs interpolation, with placeholders\n * @param options with values that will be used to replace placeholders\n */\nfunction interpolate(phrase, options) {\n  const dollarRegex = /\\$/g;\n  const dollarBillsYall = '$$$$';\n  let interpolated = [phrase];\n  if (options == null) return interpolated;\n  for (const arg of Object.keys(options)) {\n    if (arg !== '_') {\n      // Ensure replacement value is escaped to prevent special $-prefixed\n      // regex replace tokens. the \"$$$$\" is needed because each \"$\" needs to\n      // be escaped with \"$\" itself, and we need two in the resulting output.\n      let replacement = options[arg];\n      if (typeof replacement === 'string') {\n        replacement = dollarRegex[Symbol.replace](replacement, dollarBillsYall);\n      }\n      // We create a new `RegExp` each time instead of using a more-efficient\n      // string replace so that the same argument can be replaced multiple times\n      // in the same phrase.\n      interpolated = insertReplacement(interpolated, new RegExp(`%\\\\{${arg}\\\\}`, 'g'), replacement);\n    }\n  }\n  return interpolated;\n}\nconst defaultOnMissingKey = key => {\n  throw new Error(`missing string: ${key}`);\n};\n\n/**\n * Translates strings with interpolation & pluralization support.\n * Extensible with custom dictionaries and pluralization functions.\n *\n * Borrows heavily from and inspired by Polyglot https://github.com/airbnb/polyglot.js,\n * basically a stripped-down version of it. Differences: pluralization functions are not hardcoded\n * and can be easily added among with dictionaries, nested objects are used for pluralization\n * as opposed to `||||` delimeter\n *\n * Usage example: `translator.translate('files_chosen', {smart_count: 3})`\n */\nvar _onMissingKey = /*#__PURE__*/_classPrivateFieldLooseKey(\"onMissingKey\");\nvar _apply = /*#__PURE__*/_classPrivateFieldLooseKey(\"apply\");\nexport default class Translator {\n  constructor(locales, _temp) {\n    let {\n      onMissingKey = defaultOnMissingKey\n    } = _temp === void 0 ? {} : _temp;\n    Object.defineProperty(this, _apply, {\n      value: _apply2\n    });\n    Object.defineProperty(this, _onMissingKey, {\n      writable: true,\n      value: void 0\n    });\n    this.locale = {\n      strings: {},\n      pluralize(n) {\n        if (n === 1) {\n          return 0;\n        }\n        return 1;\n      }\n    };\n    if (Array.isArray(locales)) {\n      locales.forEach(_classPrivateFieldLooseBase(this, _apply)[_apply], this);\n    } else {\n      _classPrivateFieldLooseBase(this, _apply)[_apply](locales);\n    }\n    _classPrivateFieldLooseBase(this, _onMissingKey)[_onMissingKey] = onMissingKey;\n  }\n  /**\n   * Public translate method\n   *\n   * @param key\n   * @param options with values that will be used later to replace placeholders in string\n   * @returns string translated (and interpolated)\n   */\n  translate(key, options) {\n    return this.translateArray(key, options).join('');\n  }\n\n  /**\n   * Get a translation and return the translated and interpolated parts as an array.\n   *\n   * @returns The translated and interpolated parts, in order.\n   */\n  translateArray(key, options) {\n    let string = this.locale.strings[key];\n    if (string == null) {\n      _classPrivateFieldLooseBase(this, _onMissingKey)[_onMissingKey](key);\n      string = key;\n    }\n    const hasPluralForms = typeof string === 'object';\n    if (hasPluralForms) {\n      if (options && typeof options.smart_count !== 'undefined') {\n        const plural = this.locale.pluralize(options.smart_count);\n        return interpolate(string[plural], options);\n      }\n      throw new Error('Attempted to use a string with plural forms, but no value was given for %{smart_count}');\n    }\n    if (typeof string !== 'string') {\n      throw new Error(`string was not a string`);\n    }\n    return interpolate(string, options);\n  }\n}\nfunction _apply2(locale) {\n  if (!(locale != null && locale.strings)) {\n    return;\n  }\n  const prevLocale = this.locale;\n  Object.assign(this.locale, {\n    strings: {\n      ...prevLocale.strings,\n      ...locale.strings\n    },\n    pluralize: locale.pluralize || prevLocale.pluralize\n  });\n}","import Chart from 'chart.js/auto';\n\ndocument.addEventListener('turbo:load', () => {\n  if (!document.getElementById('chart_symptom')) return;\n\n  const bgColors = Array(2).fill([\n    'rgba(255, 99, 132, 0.2)',\n    'rgba(54, 162, 235, 0.2)',\n    'rgba(255, 206, 86, 0.2)',\n    'rgba(75, 192, 192, 0.2)',\n    'rgba(153, 102, 255, 0.2)',\n    'rgba(255, 159, 64, 0.2)'\n  ]).flat();\n  const borderColors = Array(2).fill([\n    'rgba(255, 99, 132, 1)',\n    'rgba(54, 162, 235, 1)',\n    'rgba(255, 206, 86, 1)',\n    'rgba(75, 192, 192, 1)',\n    'rgba(153, 102, 255, 1)',\n    'rgba(255, 159, 64, 1)'\n  ]).flat();\n\n  ['symptom', 'seriousness', 'stage', 'cause'].forEach((type) => {\n    const ctx = document.getElementById(`chart_${type}`).getContext('2d');\n    const data = JSON.parse(document.getElementById(`data_${type}`).value);\n\n    let bgClrs = bgColors;\n    bgClrs.splice(data[1].findIndex(element => element.startsWith('なし')), 1, 'rgba(206, 206, 206, 0.2)');\n    let bdClrs = borderColors;\n    bdClrs.splice(data[1].findIndex(element => element.startsWith('なし')), 1, 'rgba(206, 206, 206, 1)');\n    new Chart(ctx, {\n      type: 'pie',\n      data: {\n        labels: data[1],\n        datasets: [{\n          data: data[2],\n          backgroundColor: bgClrs,\n          borderColor: bdClrs,\n          borderWidth: 1\n        }]\n      },\n      options: {\n        responsive: true,\n        maintainAspectRatio: false,\n        plugins: {\n          legend: {\n            display: false,\n          },\n          title: {\n            display: true,\n            text: data[0]\n          }\n        }\n      }\n    });\n  });\n});\n","let urlAlphabet =\n  'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict'\nexport let customAlphabet = (alphabet, defaultSize = 21) => {\n  return (size = defaultSize) => {\n    let id = ''\n    let i = size\n    while (i--) {\n      id += alphabet[(Math.random() * alphabet.length) | 0]\n    }\n    return id\n  }\n}\nexport let nanoid = (size = 21) => {\n  let id = ''\n  let i = size\n  while (i--) {\n    id += urlAlphabet[(Math.random() * 64) | 0]\n  }\n  return id\n}\n","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"3.2.2\"\n};\nvar _callbacks = /*#__PURE__*/_classPrivateFieldLooseKey(\"callbacks\");\nvar _publish = /*#__PURE__*/_classPrivateFieldLooseKey(\"publish\");\n/**\n * Default store that keeps state in a simple object.\n */\nclass DefaultStore {\n  constructor() {\n    Object.defineProperty(this, _publish, {\n      value: _publish2\n    });\n    this.state = {};\n    Object.defineProperty(this, _callbacks, {\n      writable: true,\n      value: new Set()\n    });\n  }\n  getState() {\n    return this.state;\n  }\n  setState(patch) {\n    const prevState = {\n      ...this.state\n    };\n    const nextState = {\n      ...this.state,\n      ...patch\n    };\n    this.state = nextState;\n    _classPrivateFieldLooseBase(this, _publish)[_publish](prevState, nextState, patch);\n  }\n  subscribe(listener) {\n    _classPrivateFieldLooseBase(this, _callbacks)[_callbacks].add(listener);\n    return () => {\n      _classPrivateFieldLooseBase(this, _callbacks)[_callbacks].delete(listener);\n    };\n  }\n}\nfunction _publish2() {\n  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n  _classPrivateFieldLooseBase(this, _callbacks)[_callbacks].forEach(listener => {\n    listener(...args);\n  });\n}\nDefaultStore.VERSION = packageJson.version;\nexport default DefaultStore;","/**\n * Takes a full filename string and returns an object {name, extension}\n */\nexport default function getFileNameAndExtension(fullFileName) {\n  const lastDot = fullFileName.lastIndexOf('.');\n  // these count as no extension: \"no-dot\", \"trailing-dot.\"\n  if (lastDot === -1 || lastDot === fullFileName.length - 1) {\n    return {\n      name: fullFileName,\n      extension: undefined\n    };\n  }\n  return {\n    name: fullFileName.slice(0, lastDot),\n    extension: fullFileName.slice(lastDot + 1)\n  };\n}","// ___Why not add the mime-types package?\n//    It's 19.7kB gzipped, and we only need mime types for well-known extensions (for file previews).\n// ___Where to take new extensions from?\n//    https://github.com/jshttp/mime-db/blob/master/db.json\n\nexport default {\n  __proto__: null,\n  md: 'text/markdown',\n  markdown: 'text/markdown',\n  mp4: 'video/mp4',\n  mp3: 'audio/mp3',\n  svg: 'image/svg+xml',\n  jpg: 'image/jpeg',\n  png: 'image/png',\n  webp: 'image/webp',\n  gif: 'image/gif',\n  heic: 'image/heic',\n  heif: 'image/heif',\n  yaml: 'text/yaml',\n  yml: 'text/yaml',\n  csv: 'text/csv',\n  tsv: 'text/tab-separated-values',\n  tab: 'text/tab-separated-values',\n  avi: 'video/x-msvideo',\n  mks: 'video/x-matroska',\n  mkv: 'video/x-matroska',\n  mov: 'video/quicktime',\n  dicom: 'application/dicom',\n  doc: 'application/msword',\n  docm: 'application/vnd.ms-word.document.macroenabled.12',\n  docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n  dot: 'application/msword',\n  dotm: 'application/vnd.ms-word.template.macroenabled.12',\n  dotx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',\n  xla: 'application/vnd.ms-excel',\n  xlam: 'application/vnd.ms-excel.addin.macroenabled.12',\n  xlc: 'application/vnd.ms-excel',\n  xlf: 'application/x-xliff+xml',\n  xlm: 'application/vnd.ms-excel',\n  xls: 'application/vnd.ms-excel',\n  xlsb: 'application/vnd.ms-excel.sheet.binary.macroenabled.12',\n  xlsm: 'application/vnd.ms-excel.sheet.macroenabled.12',\n  xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n  xlt: 'application/vnd.ms-excel',\n  xltm: 'application/vnd.ms-excel.template.macroenabled.12',\n  xltx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.template',\n  xlw: 'application/vnd.ms-excel',\n  txt: 'text/plain',\n  text: 'text/plain',\n  conf: 'text/plain',\n  log: 'text/plain',\n  pdf: 'application/pdf',\n  zip: 'application/zip',\n  '7z': 'application/x-7z-compressed',\n  rar: 'application/x-rar-compressed',\n  tar: 'application/x-tar',\n  gz: 'application/gzip',\n  dmg: 'application/x-apple-diskimage'\n};","import getFileNameAndExtension from \"./getFileNameAndExtension.js\";\nimport mimeTypes from \"./mimeTypes.js\";\nexport default function getFileType(file) {\n  var _getFileNameAndExtens;\n  if (file.type) return file.type;\n  const fileExtension = file.name ? (_getFileNameAndExtens = getFileNameAndExtension(file.name).extension) == null ? void 0 : _getFileNameAndExtens.toLowerCase() : null;\n  if (fileExtension && fileExtension in mimeTypes) {\n    // else, see if we can map extension to a mime type\n    return mimeTypes[fileExtension];\n  }\n  // if all fails, fall back to a generic byte stream type\n  return 'application/octet-stream';\n}","import getFileType from \"./getFileType.js\";\nfunction encodeCharacter(character) {\n  return character.charCodeAt(0).toString(32);\n}\nfunction encodeFilename(name) {\n  let suffix = '';\n  return name.replace(/[^A-Z0-9]/gi, character => {\n    suffix += `-${encodeCharacter(character)}`;\n    return '/';\n  }) + suffix;\n}\n\n/**\n * Takes a file object and turns it into fileID, by converting file.name to lowercase,\n * removing extra characters and adding type, size and lastModified\n */\nexport default function generateFileID(file, instanceId) {\n  // It's tempting to do `[items].filter(Boolean).join('-')` here, but that\n  // is slower! simple string concatenation is fast\n\n  let id = instanceId || 'uppy';\n  if (typeof file.name === 'string') {\n    id += `-${encodeFilename(file.name.toLowerCase())}`;\n  }\n  if (file.type !== undefined) {\n    id += `-${file.type}`;\n  }\n  if (file.meta && typeof file.meta.relativePath === 'string') {\n    id += `-${encodeFilename(file.meta.relativePath.toLowerCase())}`;\n  }\n  if (file.data.size !== undefined) {\n    id += `-${file.data.size}`;\n  }\n  if (file.data.lastModified !== undefined) {\n    id += `-${file.data.lastModified}`;\n  }\n  return id;\n}\n\n// If the provider has a stable, unique ID, then we can use that to identify the file.\n// Then we don't have to generate our own ID, and we can add the same file many times if needed (different path)\nfunction hasFileStableId(file) {\n  if (!file.isRemote || !file.remote) return false;\n  // These are the providers that it seems like have stable IDs for their files. The other's I haven't checked yet.\n  const stableIdProviders = new Set(['box', 'dropbox', 'drive', 'facebook', 'unsplash']);\n  return stableIdProviders.has(file.remote.provider);\n}\nexport function getSafeFileId(file, instanceId) {\n  if (hasFileStableId(file)) return file.id;\n  const fileType = getFileType(file);\n  return generateFileID({\n    ...file,\n    type: fileType\n  }, instanceId);\n}","// Edge 15.x does not fire 'progress' events on uploads.\n// See https://github.com/transloadit/uppy/issues/945\n// And https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/12224510/\nexport default function supportsUploadProgress(userAgent) {\n  // Allow passing in userAgent for tests\n  if (userAgent == null && typeof navigator !== 'undefined') {\n    // eslint-disable-next-line no-param-reassign\n    userAgent = navigator.userAgent;\n  }\n  // Assume it works because basically everything supports progress events.\n  if (!userAgent) return true;\n  const m = /Edge\\/(\\d+\\.\\d+)/.exec(userAgent);\n  if (!m) return true;\n  const edgeVersion = m[1];\n  const version = edgeVersion.split('.', 2);\n  const major = parseInt(version[0], 10);\n  const minor = parseInt(version[1], 10);\n\n  // Worked before:\n  // Edge 40.15063.0.0\n  // Microsoft EdgeHTML 15.15063\n  if (major < 15 || major === 15 && minor < 15063) {\n    return true;\n  }\n\n  // Fixed in:\n  // Microsoft EdgeHTML 18.18218\n  if (major > 18 || major === 18 && minor >= 18218) {\n    return true;\n  }\n\n  // other versions don't work.\n  return false;\n}","/**\n * Adds zero to strings shorter than two characters.\n */\nfunction pad(number) {\n  return number < 10 ? `0${number}` : number.toString();\n}\n\n/**\n * Returns a timestamp in the format of `hours:minutes:seconds`\n */\nexport default function getTimeStamp() {\n  const date = new Date();\n  const hours = pad(date.getHours());\n  const minutes = pad(date.getMinutes());\n  const seconds = pad(date.getSeconds());\n  return `${hours}:${minutes}:${seconds}`;\n}","/* eslint-disable no-console */\nimport getTimeStamp from '@uppy/utils/lib/getTimeStamp';\n\n// Swallow all logs, except errors.\n// default if logger is not set or debug: false\nconst justErrorsLogger = {\n  debug: () => {},\n  warn: () => {},\n  error: function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    return console.error(`[Uppy] [${getTimeStamp()}]`, ...args);\n  }\n};\n\n// Print logs to console with namespace + timestamp,\n// set by logger: Uppy.debugLogger or debug: true\nconst debugLogger = {\n  debug: function () {\n    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n      args[_key2] = arguments[_key2];\n    }\n    return console.debug(`[Uppy] [${getTimeStamp()}]`, ...args);\n  },\n  warn: function () {\n    for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n      args[_key3] = arguments[_key3];\n    }\n    return console.warn(`[Uppy] [${getTimeStamp()}]`, ...args);\n  },\n  error: function () {\n    for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n      args[_key4] = arguments[_key4];\n    }\n    return console.error(`[Uppy] [${getTimeStamp()}]`, ...args);\n  }\n};\nexport { justErrorsLogger, debugLogger };","/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable max-classes-per-file, class-methods-use-this */\nimport prettierBytes from '@transloadit/prettier-bytes';\n// @ts-ignore untyped\nimport match from 'mime-match';\n\n/**\n * The minimal required properties to be present from UppyFile in order to validate it.\n */\n\nconst defaultOptions = {\n  maxFileSize: null,\n  minFileSize: null,\n  maxTotalFileSize: null,\n  maxNumberOfFiles: null,\n  minNumberOfFiles: null,\n  allowedFileTypes: null,\n  requiredMetaFields: []\n};\nclass RestrictionError extends Error {\n  constructor(message, opts) {\n    var _opts$isUserFacing;\n    super(message);\n    this.isRestriction = true;\n    this.isUserFacing = (_opts$isUserFacing = opts == null ? void 0 : opts.isUserFacing) != null ? _opts$isUserFacing : true;\n    if (opts != null && opts.file) {\n      this.file = opts.file; // only some restriction errors are related to a particular file\n    }\n  }\n}\nclass Restricter {\n  constructor(getOpts, getI18n) {\n    this.getI18n = getI18n;\n    this.getOpts = () => {\n      var _opts$restrictions;\n      const opts = getOpts();\n      if (((_opts$restrictions = opts.restrictions) == null ? void 0 : _opts$restrictions.allowedFileTypes) != null && !Array.isArray(opts.restrictions.allowedFileTypes)) {\n        throw new TypeError('`restrictions.allowedFileTypes` must be an array');\n      }\n      return opts;\n    };\n  }\n\n  // Because these operations are slow, we cannot run them for every file (if we are adding multiple files)\n  validateAggregateRestrictions(existingFiles, addingFiles) {\n    const {\n      maxTotalFileSize,\n      maxNumberOfFiles\n    } = this.getOpts().restrictions;\n    if (maxNumberOfFiles) {\n      const nonGhostFiles = existingFiles.filter(f => !f.isGhost);\n      if (nonGhostFiles.length + addingFiles.length > maxNumberOfFiles) {\n        throw new RestrictionError(`${this.getI18n()('youCanOnlyUploadX', {\n          smart_count: maxNumberOfFiles\n        })}`);\n      }\n    }\n    if (maxTotalFileSize) {\n      const totalFilesSize = [...existingFiles, ...addingFiles].reduce((total, f) => {\n        var _f$size;\n        return total + ((_f$size = f.size) != null ? _f$size : 0);\n      }, 0);\n      if (totalFilesSize > maxTotalFileSize) {\n        throw new RestrictionError(this.getI18n()('aggregateExceedsSize', {\n          sizeAllowed: prettierBytes(maxTotalFileSize),\n          size: prettierBytes(totalFilesSize)\n        }));\n      }\n    }\n  }\n  validateSingleFile(file) {\n    const {\n      maxFileSize,\n      minFileSize,\n      allowedFileTypes\n    } = this.getOpts().restrictions;\n    if (allowedFileTypes) {\n      const isCorrectFileType = allowedFileTypes.some(type => {\n        // check if this is a mime-type\n        if (type.includes('/')) {\n          if (!file.type) return false;\n          return match(file.type.replace(/;.*?$/, ''), type);\n        }\n\n        // otherwise this is likely an extension\n        if (type[0] === '.' && file.extension) {\n          return file.extension.toLowerCase() === type.slice(1).toLowerCase();\n        }\n        return false;\n      });\n      if (!isCorrectFileType) {\n        const allowedFileTypesString = allowedFileTypes.join(', ');\n        throw new RestrictionError(this.getI18n()('youCanOnlyUploadFileTypes', {\n          types: allowedFileTypesString\n        }), {\n          file\n        });\n      }\n    }\n\n    // We can't check maxFileSize if the size is unknown.\n    if (maxFileSize && file.size != null && file.size > maxFileSize) {\n      throw new RestrictionError(this.getI18n()('exceedsSize', {\n        size: prettierBytes(maxFileSize),\n        file: file.name\n      }), {\n        file\n      });\n    }\n\n    // We can't check minFileSize if the size is unknown.\n    if (minFileSize && file.size != null && file.size < minFileSize) {\n      throw new RestrictionError(this.getI18n()('inferiorSize', {\n        size: prettierBytes(minFileSize)\n      }), {\n        file\n      });\n    }\n  }\n  validate(existingFiles, addingFiles) {\n    addingFiles.forEach(addingFile => {\n      this.validateSingleFile(addingFile);\n    });\n    this.validateAggregateRestrictions(existingFiles, addingFiles);\n  }\n  validateMinNumberOfFiles(files) {\n    const {\n      minNumberOfFiles\n    } = this.getOpts().restrictions;\n    if (minNumberOfFiles && Object.keys(files).length < minNumberOfFiles) {\n      throw new RestrictionError(this.getI18n()('youHaveToAtLeastSelectX', {\n        smart_count: minNumberOfFiles\n      }));\n    }\n  }\n  getMissingRequiredMetaFields(file) {\n    const error = new RestrictionError(this.getI18n()('missingRequiredMetaFieldOnFile', {\n      fileName: file.name\n    }));\n    const {\n      requiredMetaFields\n    } = this.getOpts().restrictions;\n    const missingFields = [];\n    for (const field of requiredMetaFields) {\n      if (!Object.hasOwn(file.meta, field) || file.meta[field] === '') {\n        missingFields.push(field);\n      }\n    }\n    return {\n      missingFields,\n      error\n    };\n  }\n}\nexport { Restricter, defaultOptions, RestrictionError };","export default {\n  strings: {\n    addBulkFilesFailed: {\n      0: 'Failed to add %{smart_count} file due to an internal error',\n      1: 'Failed to add %{smart_count} files due to internal errors'\n    },\n    youCanOnlyUploadX: {\n      0: 'You can only upload %{smart_count} file',\n      1: 'You can only upload %{smart_count} files'\n    },\n    youHaveToAtLeastSelectX: {\n      0: 'You have to select at least %{smart_count} file',\n      1: 'You have to select at least %{smart_count} files'\n    },\n    aggregateExceedsSize: 'You selected %{size} of files, but maximum allowed size is %{sizeAllowed}',\n    exceedsSize: '%{file} exceeds maximum allowed size of %{size}',\n    missingRequiredMetaField: 'Missing required meta fields',\n    missingRequiredMetaFieldOnFile: 'Missing required meta fields in %{fileName}',\n    inferiorSize: 'This file is smaller than the allowed size of %{size}',\n    youCanOnlyUploadFileTypes: 'You can only upload: %{types}',\n    noMoreFilesAllowed: 'Cannot add more files',\n    noDuplicates: \"Cannot add the duplicate file '%{fileName}', it already exists\",\n    companionError: 'Connection with Companion failed',\n    authAborted: 'Authentication aborted',\n    companionUnauthorizeHint: 'To unauthorize to your %{provider} account, please go to %{url}',\n    failedToUpload: 'Failed to upload %{file}',\n    noInternetConnection: 'No Internet connection',\n    connectedToInternet: 'Connected to the Internet',\n    // Strings for remote providers\n    noFilesFound: 'You have no files or folders here',\n    noSearchResults: 'Unfortunately, there are no results for this search',\n    selectX: {\n      0: 'Select %{smart_count}',\n      1: 'Select %{smart_count}'\n    },\n    allFilesFromFolderNamed: 'All files from folder %{name}',\n    openFolderNamed: 'Open folder %{name}',\n    cancel: 'Cancel',\n    logOut: 'Log out',\n    filter: 'Filter',\n    resetFilter: 'Reset filter',\n    loading: 'Loading...',\n    loadedXFiles: 'Loaded %{numFiles} files',\n    authenticateWithTitle: 'Please authenticate with %{pluginName} to select files',\n    authenticateWith: 'Connect to %{pluginName}',\n    signInWithGoogle: 'Sign in with Google',\n    searchImages: 'Search for images',\n    enterTextToSearch: 'Enter text to search for images',\n    search: 'Search',\n    resetSearch: 'Reset search',\n    emptyFolderAdded: 'No files were added from empty folder',\n    addedNumFiles: 'Added %{numFiles} file(s)',\n    folderAlreadyAdded: 'The folder \"%{folder}\" was already added',\n    folderAdded: {\n      0: 'Added %{smart_count} file from %{folder}',\n      1: 'Added %{smart_count} files from %{folder}'\n    },\n    additionalRestrictionsFailed: '%{count} additional restrictions were not fulfilled',\n    unnamed: 'Unnamed'\n  }\n};","let _Symbol$for, _Symbol$for2;\nfunction _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n/* eslint-disable max-classes-per-file */\n/* global AggregateError */\n\nimport Translator from '@uppy/utils/lib/Translator';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore untyped\nimport ee from 'namespace-emitter';\nimport { nanoid } from 'nanoid/non-secure';\nimport throttle from 'lodash/throttle.js';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore store-default types not always available on that branch\nimport DefaultStore from '@uppy/store-default';\nimport getFileType from '@uppy/utils/lib/getFileType';\nimport getFileNameAndExtension from '@uppy/utils/lib/getFileNameAndExtension';\nimport { getSafeFileId } from '@uppy/utils/lib/generateFileID';\nimport supportsUploadProgress from \"./supportsUploadProgress.js\";\nimport getFileName from \"./getFileName.js\";\nimport { justErrorsLogger, debugLogger } from \"./loggers.js\";\nimport { Restricter, defaultOptions as defaultRestrictionOptions, RestrictionError } from \"./Restricter.js\";\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"3.13.1\"\n};\nimport locale from \"./locale.js\";\n\n/*\n * UnknownProviderPlugin can be any Companion plugin (such as Google Drive).\n * As the plugins are passed around throughout Uppy we need a generic type for this.\n * It may seems like duplication, but this type safe. Changing the type of `storage`\n * will error in the `Provider` class of @uppy/companion-client and vice versa.\n *\n * Note that this is the *plugin* class, not a version of the `Provider` class.\n * `Provider` does operate on Companion plugins with `uppy.getPlugin()`.\n */\n\n/*\n * UnknownSearchProviderPlugin can be any search Companion plugin (such as Unsplash).\n * As the plugins are passed around throughout Uppy we need a generic type for this.\n * It may seems like duplication, but this type safe. Changing the type of `title`\n * will error in the `SearchProvider` class of @uppy/companion-client and vice versa.\n *\n * Note that this is the *plugin* class, not a version of the `SearchProvider` class.\n * `SearchProvider` does operate on Companion plugins with `uppy.getPlugin()`.\n */\n\n// TODO: can we use namespaces in other plugins to populate this?\n// eslint-disable-next-line @typescript-eslint/no-empty-interface\n\n// The user facing type for UppyOptions used in uppy.setOptions()\n\n/** @deprecated */\n\nconst defaultUploadState = {\n  totalProgress: 0,\n  allowNewUpload: true,\n  error: null,\n  recoveredState: null\n};\n\n/**\n * Uppy Core module.\n * Manages plugins, state updates, acts as an event bus,\n * adds/removes files and metadata.\n */\nvar _plugins = /*#__PURE__*/_classPrivateFieldLooseKey(\"plugins\");\nvar _restricter = /*#__PURE__*/_classPrivateFieldLooseKey(\"restricter\");\nvar _storeUnsubscribe = /*#__PURE__*/_classPrivateFieldLooseKey(\"storeUnsubscribe\");\nvar _emitter = /*#__PURE__*/_classPrivateFieldLooseKey(\"emitter\");\nvar _preProcessors = /*#__PURE__*/_classPrivateFieldLooseKey(\"preProcessors\");\nvar _uploaders = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploaders\");\nvar _postProcessors = /*#__PURE__*/_classPrivateFieldLooseKey(\"postProcessors\");\nvar _informAndEmit = /*#__PURE__*/_classPrivateFieldLooseKey(\"informAndEmit\");\nvar _checkRequiredMetaFieldsOnFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"checkRequiredMetaFieldsOnFile\");\nvar _checkRequiredMetaFields = /*#__PURE__*/_classPrivateFieldLooseKey(\"checkRequiredMetaFields\");\nvar _assertNewUploadAllowed = /*#__PURE__*/_classPrivateFieldLooseKey(\"assertNewUploadAllowed\");\nvar _transformFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"transformFile\");\nvar _startIfAutoProceed = /*#__PURE__*/_classPrivateFieldLooseKey(\"startIfAutoProceed\");\nvar _checkAndUpdateFileState = /*#__PURE__*/_classPrivateFieldLooseKey(\"checkAndUpdateFileState\");\nvar _addListeners = /*#__PURE__*/_classPrivateFieldLooseKey(\"addListeners\");\nvar _updateOnlineStatus = /*#__PURE__*/_classPrivateFieldLooseKey(\"updateOnlineStatus\");\nvar _requestClientById = /*#__PURE__*/_classPrivateFieldLooseKey(\"requestClientById\");\nvar _createUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"createUpload\");\nvar _getUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"getUpload\");\nvar _removeUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"removeUpload\");\nvar _runUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"runUpload\");\n_Symbol$for = Symbol.for('uppy test: getPlugins');\n_Symbol$for2 = Symbol.for('uppy test: createUpload');\nexport class Uppy {\n  /**\n   * Instantiate Uppy\n   */\n  constructor(_opts) {\n    /**\n     * Run an upload. This picks up where it left off in case the upload is being restored.\n     */\n    Object.defineProperty(this, _runUpload, {\n      value: _runUpload2\n    });\n    /**\n     * Remove an upload, eg. if it has been canceled or completed.\n     *\n     */\n    Object.defineProperty(this, _removeUpload, {\n      value: _removeUpload2\n    });\n    Object.defineProperty(this, _getUpload, {\n      value: _getUpload2\n    });\n    /**\n     * Create an upload for a bunch of files.\n     *\n     */\n    Object.defineProperty(this, _createUpload, {\n      value: _createUpload2\n    });\n    /**\n     * Registers listeners for all global actions, like:\n     * `error`, `file-removed`, `upload-progress`\n     */\n    Object.defineProperty(this, _addListeners, {\n      value: _addListeners2\n    });\n    Object.defineProperty(this, _checkAndUpdateFileState, {\n      value: _checkAndUpdateFileState2\n    });\n    // Schedule an upload if `autoProceed` is enabled.\n    Object.defineProperty(this, _startIfAutoProceed, {\n      value: _startIfAutoProceed2\n    });\n    /**\n     * Create a file state object based on user-provided `addFile()` options.\n     */\n    Object.defineProperty(this, _transformFile, {\n      value: _transformFile2\n    });\n    Object.defineProperty(this, _assertNewUploadAllowed, {\n      value: _assertNewUploadAllowed2\n    });\n    Object.defineProperty(this, _checkRequiredMetaFields, {\n      value: _checkRequiredMetaFields2\n    });\n    Object.defineProperty(this, _checkRequiredMetaFieldsOnFile, {\n      value: _checkRequiredMetaFieldsOnFile2\n    });\n    Object.defineProperty(this, _informAndEmit, {\n      value: _informAndEmit2\n    });\n    Object.defineProperty(this, _plugins, {\n      writable: true,\n      value: Object.create(null)\n    });\n    Object.defineProperty(this, _restricter, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _storeUnsubscribe, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _emitter, {\n      writable: true,\n      value: ee()\n    });\n    Object.defineProperty(this, _preProcessors, {\n      writable: true,\n      value: new Set()\n    });\n    Object.defineProperty(this, _uploaders, {\n      writable: true,\n      value: new Set()\n    });\n    Object.defineProperty(this, _postProcessors, {\n      writable: true,\n      value: new Set()\n    });\n    this.scheduledAutoProceed = null;\n    this.wasOffline = false;\n    // ___Why throttle at 500ms?\n    //    - We must throttle at >250ms for superfocus in Dashboard to work well\n    //    (because animation takes 0.25s, and we want to wait for all animations to be over before refocusing).\n    //    [Practical Check]: if thottle is at 100ms, then if you are uploading a file,\n    //    and click 'ADD MORE FILES', - focus won't activate in Firefox.\n    //    - We must throttle at around >500ms to avoid performance lags.\n    //    [Practical Check] Firefox, try to upload a big file for a prolonged period of time. Laptop will start to heat up.\n    // todo when uploading multiple files, this will cause problems because they share the same throttle,\n    // meaning some files might never get their progress reported (eaten up by progress events from other files)\n    this.calculateProgress = throttle((file, data) => {\n      const fileInState = this.getFile(file == null ? void 0 : file.id);\n      if (file == null || !fileInState) {\n        this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n        return;\n      }\n      if (fileInState.progress.percentage === 100) {\n        this.log(`Not setting progress for a file that has been already uploaded: ${file.id}`);\n        return;\n      }\n\n      // bytesTotal may be null or zero; in that case we can't divide by it\n      const canHavePercentage = Number.isFinite(data.bytesTotal) && data.bytesTotal > 0;\n      this.setFileState(file.id, {\n        progress: {\n          ...fileInState.progress,\n          bytesUploaded: data.bytesUploaded,\n          bytesTotal: data.bytesTotal,\n          percentage: canHavePercentage ? Math.round(data.bytesUploaded / data.bytesTotal * 100) : 0\n        }\n      });\n      this.calculateTotalProgress();\n    }, 500, {\n      leading: true,\n      trailing: true\n    });\n    Object.defineProperty(this, _updateOnlineStatus, {\n      writable: true,\n      value: this.updateOnlineStatus.bind(this)\n    });\n    // We need to store request clients by a unique ID, so we can share RequestClient instances across files\n    // this allows us to do rate limiting and synchronous operations like refreshing provider tokens\n    // example: refreshing tokens: if each file has their own requestclient,\n    // we don't have any way to synchronize all requests in order to\n    // - block all requests\n    // - refresh the token\n    // - unblock all requests and allow them to run with a the new access token\n    // back when we had a requestclient per file, once an access token expired,\n    // all 6 files would go ahead and refresh the token at the same time\n    // (calling /refresh-token up to 6 times), which will probably fail for some providers\n    Object.defineProperty(this, _requestClientById, {\n      writable: true,\n      value: new Map()\n    });\n    this.defaultLocale = locale;\n    const defaultOptions = {\n      id: 'uppy',\n      autoProceed: false,\n      allowMultipleUploadBatches: true,\n      debug: false,\n      restrictions: defaultRestrictionOptions,\n      meta: {},\n      onBeforeFileAdded: (file, files) => !Object.hasOwn(files, file.id),\n      onBeforeUpload: files => files,\n      store: new DefaultStore(),\n      logger: justErrorsLogger,\n      infoTimeout: 5000\n    };\n    const merged = {\n      ...defaultOptions,\n      ..._opts\n    };\n    // Merge default options with the ones set by user,\n    // making sure to merge restrictions too\n    this.opts = {\n      ...merged,\n      restrictions: {\n        ...defaultOptions.restrictions,\n        ...(_opts && _opts.restrictions)\n      }\n    };\n\n    // Support debug: true for backwards-compatability, unless logger is set in opts\n    // opts instead of this.opts to avoid comparing objects — we set logger: justErrorsLogger in defaultOptions\n    if (_opts && _opts.logger && _opts.debug) {\n      this.log('You are using a custom `logger`, but also set `debug: true`, which uses built-in logger to output logs to console. Ignoring `debug: true` and using your custom `logger`.', 'warning');\n    } else if (_opts && _opts.debug) {\n      this.opts.logger = debugLogger;\n    }\n    this.log(`Using Core v${Uppy.VERSION}`);\n    this.i18nInit();\n    this.store = this.opts.store;\n    this.setState({\n      ...defaultUploadState,\n      plugins: {},\n      files: {},\n      currentUploads: {},\n      capabilities: {\n        uploadProgress: supportsUploadProgress(),\n        individualCancellation: true,\n        resumableUploads: false\n      },\n      meta: {\n        ...this.opts.meta\n      },\n      info: []\n    });\n    _classPrivateFieldLooseBase(this, _restricter)[_restricter] = new Restricter(() => this.opts, () => this.i18n);\n    _classPrivateFieldLooseBase(this, _storeUnsubscribe)[_storeUnsubscribe] = this.store.subscribe(\n    // eslint-disable-next-line\n    // @ts-ignore Store is incorrectly typed\n    (prevState, nextState, patch) => {\n      // eslint-disable-next-line\n      // @ts-ignore Store is incorrectly typed\n      this.emit('state-update', prevState, nextState, patch);\n      this.updateAll(nextState);\n    });\n\n    // Exposing uppy object on window for debugging and testing\n    if (this.opts.debug && typeof window !== 'undefined') {\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore Mutating the global object for debug purposes\n      window[this.opts.id] = this;\n    }\n    _classPrivateFieldLooseBase(this, _addListeners)[_addListeners]();\n  }\n  emit(event) {\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    _classPrivateFieldLooseBase(this, _emitter)[_emitter].emit(event, ...args);\n  }\n  on(event, callback) {\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].on(event, callback);\n    return this;\n  }\n  once(event, callback) {\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].once(event, callback);\n    return this;\n  }\n  off(event, callback) {\n    _classPrivateFieldLooseBase(this, _emitter)[_emitter].off(event, callback);\n    return this;\n  }\n\n  /**\n   * Iterate on all plugins and run `update` on them.\n   * Called each time state changes.\n   *\n   */\n  updateAll(state) {\n    this.iteratePlugins(plugin => {\n      plugin.update(state);\n    });\n  }\n\n  /**\n   * Updates state with a patch\n   */\n  setState(patch) {\n    // eslint-disable-next-line\n    // @ts-ignore Store is incorrectly typed\n    this.store.setState(patch);\n  }\n\n  /**\n   * Returns current state.\n   */\n  getState() {\n    // eslint-disable-next-line\n    // @ts-ignore Store is incorrectly typed\n    return this.store.getState();\n  }\n  patchFilesState(filesWithNewState) {\n    const existingFilesState = this.getState().files;\n    this.setState({\n      files: {\n        ...existingFilesState,\n        ...Object.fromEntries(Object.entries(filesWithNewState).map(_ref => {\n          let [fileID, newFileState] = _ref;\n          return [fileID, {\n            ...existingFilesState[fileID],\n            ...newFileState\n          }];\n        }))\n      }\n    });\n  }\n\n  /**\n   * Shorthand to set state for a specific file.\n   */\n  setFileState(fileID, state) {\n    if (!this.getState().files[fileID]) {\n      throw new Error(`Can’t set state for ${fileID} (the file could have been removed)`);\n    }\n    this.patchFilesState({\n      [fileID]: state\n    });\n  }\n  i18nInit() {\n    const onMissingKey = key => this.log(`Missing i18n string: ${key}`, 'error');\n    const translator = new Translator([this.defaultLocale, this.opts.locale], {\n      onMissingKey\n    });\n    this.i18n = translator.translate.bind(translator);\n    this.i18nArray = translator.translateArray.bind(translator);\n    this.locale = translator.locale;\n  }\n  setOptions(newOpts) {\n    this.opts = {\n      ...this.opts,\n      ...newOpts,\n      restrictions: {\n        ...this.opts.restrictions,\n        ...(newOpts == null ? void 0 : newOpts.restrictions)\n      }\n    };\n    if (newOpts.meta) {\n      this.setMeta(newOpts.meta);\n    }\n    this.i18nInit();\n    if (newOpts.locale) {\n      this.iteratePlugins(plugin => {\n        plugin.setOptions(newOpts);\n      });\n    }\n\n    // Note: this is not the preact `setState`, it's an internal function that has the same name.\n    this.setState(undefined); // so that UI re-renders with new options\n  }\n\n  // todo next major: remove\n  resetProgress() {\n    const defaultProgress = {\n      percentage: 0,\n      bytesUploaded: 0,\n      uploadComplete: false,\n      uploadStarted: null\n    };\n    const files = {\n      ...this.getState().files\n    };\n    const updatedFiles = {};\n    Object.keys(files).forEach(fileID => {\n      updatedFiles[fileID] = {\n        ...files[fileID],\n        progress: {\n          ...files[fileID].progress,\n          ...defaultProgress\n        }\n      };\n    });\n    this.setState({\n      files: updatedFiles,\n      ...defaultUploadState\n    });\n    this.emit('reset-progress');\n  }\n\n  // @todo next major: rename to `clear()`, make it also cancel ongoing uploads\n  // or throw and say you need to cancel manually\n  clearUploadedFiles() {\n    const {\n      capabilities,\n      currentUploads\n    } = this.getState();\n    if (Object.keys(currentUploads).length > 0 && !capabilities.individualCancellation) {\n      throw new Error('The installed uploader plugin does not allow removing files during an upload.');\n    }\n    this.setState({\n      ...defaultUploadState,\n      files: {}\n    });\n  }\n  addPreProcessor(fn) {\n    _classPrivateFieldLooseBase(this, _preProcessors)[_preProcessors].add(fn);\n  }\n  removePreProcessor(fn) {\n    return _classPrivateFieldLooseBase(this, _preProcessors)[_preProcessors].delete(fn);\n  }\n  addPostProcessor(fn) {\n    _classPrivateFieldLooseBase(this, _postProcessors)[_postProcessors].add(fn);\n  }\n  removePostProcessor(fn) {\n    return _classPrivateFieldLooseBase(this, _postProcessors)[_postProcessors].delete(fn);\n  }\n  addUploader(fn) {\n    _classPrivateFieldLooseBase(this, _uploaders)[_uploaders].add(fn);\n  }\n  removeUploader(fn) {\n    return _classPrivateFieldLooseBase(this, _uploaders)[_uploaders].delete(fn);\n  }\n  setMeta(data) {\n    const updatedMeta = {\n      ...this.getState().meta,\n      ...data\n    };\n    const updatedFiles = {\n      ...this.getState().files\n    };\n    Object.keys(updatedFiles).forEach(fileID => {\n      updatedFiles[fileID] = {\n        ...updatedFiles[fileID],\n        meta: {\n          ...updatedFiles[fileID].meta,\n          ...data\n        }\n      };\n    });\n    this.log('Adding metadata:');\n    this.log(data);\n    this.setState({\n      meta: updatedMeta,\n      files: updatedFiles\n    });\n  }\n  setFileMeta(fileID, data) {\n    const updatedFiles = {\n      ...this.getState().files\n    };\n    if (!updatedFiles[fileID]) {\n      this.log('Was trying to set metadata for a file that has been removed: ', fileID);\n      return;\n    }\n    const newMeta = {\n      ...updatedFiles[fileID].meta,\n      ...data\n    };\n    updatedFiles[fileID] = {\n      ...updatedFiles[fileID],\n      meta: newMeta\n    };\n    this.setState({\n      files: updatedFiles\n    });\n  }\n\n  /**\n   * Get a file object.\n   */\n  getFile(fileID) {\n    return this.getState().files[fileID];\n  }\n\n  /**\n   * Get all files in an array.\n   */\n  getFiles() {\n    const {\n      files\n    } = this.getState();\n    return Object.values(files);\n  }\n  getFilesByIds(ids) {\n    return ids.map(id => this.getFile(id));\n  }\n  getObjectOfFilesPerState() {\n    const {\n      files: filesObject,\n      totalProgress,\n      error\n    } = this.getState();\n    const files = Object.values(filesObject);\n    const inProgressFiles = [];\n    const newFiles = [];\n    const startedFiles = [];\n    const uploadStartedFiles = [];\n    const pausedFiles = [];\n    const completeFiles = [];\n    const erroredFiles = [];\n    const inProgressNotPausedFiles = [];\n    const processingFiles = [];\n    for (const file of files) {\n      const {\n        progress\n      } = file;\n      if (!progress.uploadComplete && progress.uploadStarted) {\n        inProgressFiles.push(file);\n        if (!file.isPaused) {\n          inProgressNotPausedFiles.push(file);\n        }\n      }\n      if (!progress.uploadStarted) {\n        newFiles.push(file);\n      }\n      if (progress.uploadStarted || progress.preprocess || progress.postprocess) {\n        startedFiles.push(file);\n      }\n      if (progress.uploadStarted) {\n        uploadStartedFiles.push(file);\n      }\n      if (file.isPaused) {\n        pausedFiles.push(file);\n      }\n      if (progress.uploadComplete) {\n        completeFiles.push(file);\n      }\n      if (file.error) {\n        erroredFiles.push(file);\n      }\n      if (progress.preprocess || progress.postprocess) {\n        processingFiles.push(file);\n      }\n    }\n    return {\n      newFiles,\n      startedFiles,\n      uploadStartedFiles,\n      pausedFiles,\n      completeFiles,\n      erroredFiles,\n      inProgressFiles,\n      inProgressNotPausedFiles,\n      processingFiles,\n      isUploadStarted: uploadStartedFiles.length > 0,\n      isAllComplete: totalProgress === 100 && completeFiles.length === files.length && processingFiles.length === 0,\n      isAllErrored: !!error && erroredFiles.length === files.length,\n      isAllPaused: inProgressFiles.length !== 0 && pausedFiles.length === inProgressFiles.length,\n      isUploadInProgress: inProgressFiles.length > 0,\n      isSomeGhost: files.some(file => file.isGhost)\n    };\n  }\n  validateRestrictions(file, files) {\n    if (files === void 0) {\n      files = this.getFiles();\n    }\n    try {\n      _classPrivateFieldLooseBase(this, _restricter)[_restricter].validate(files, [file]);\n    } catch (err) {\n      return err;\n    }\n    return null;\n  }\n  checkIfFileAlreadyExists(fileID) {\n    const {\n      files\n    } = this.getState();\n    if (files[fileID] && !files[fileID].isGhost) {\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Add a new file to `state.files`. This will run `onBeforeFileAdded`,\n   * try to guess file type in a clever way, check file against restrictions,\n   * and start an upload if `autoProceed === true`.\n   */\n  addFile(file) {\n    _classPrivateFieldLooseBase(this, _assertNewUploadAllowed)[_assertNewUploadAllowed](file);\n    const {\n      nextFilesState,\n      validFilesToAdd,\n      errors\n    } = _classPrivateFieldLooseBase(this, _checkAndUpdateFileState)[_checkAndUpdateFileState]([file]);\n    const restrictionErrors = errors.filter(error => error.isRestriction);\n    _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit](restrictionErrors);\n    if (errors.length > 0) throw errors[0];\n    this.setState({\n      files: nextFilesState\n    });\n    const [firstValidFileToAdd] = validFilesToAdd;\n    this.emit('file-added', firstValidFileToAdd);\n    this.emit('files-added', validFilesToAdd);\n    this.log(`Added file: ${firstValidFileToAdd.name}, ${firstValidFileToAdd.id}, mime type: ${firstValidFileToAdd.type}`);\n    _classPrivateFieldLooseBase(this, _startIfAutoProceed)[_startIfAutoProceed]();\n    return firstValidFileToAdd.id;\n  }\n\n  /**\n   * Add multiple files to `state.files`. See the `addFile()` documentation.\n   *\n   * If an error occurs while adding a file, it is logged and the user is notified.\n   * This is good for UI plugins, but not for programmatic use.\n   * Programmatic users should usually still use `addFile()` on individual files.\n   */\n  addFiles(fileDescriptors) {\n    _classPrivateFieldLooseBase(this, _assertNewUploadAllowed)[_assertNewUploadAllowed]();\n    const {\n      nextFilesState,\n      validFilesToAdd,\n      errors\n    } = _classPrivateFieldLooseBase(this, _checkAndUpdateFileState)[_checkAndUpdateFileState](fileDescriptors);\n    const restrictionErrors = errors.filter(error => error.isRestriction);\n    _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit](restrictionErrors);\n    const nonRestrictionErrors = errors.filter(error => !error.isRestriction);\n    if (nonRestrictionErrors.length > 0) {\n      let message = 'Multiple errors occurred while adding files:\\n';\n      nonRestrictionErrors.forEach(subError => {\n        message += `\\n * ${subError.message}`;\n      });\n      this.info({\n        message: this.i18n('addBulkFilesFailed', {\n          smart_count: nonRestrictionErrors.length\n        }),\n        details: message\n      }, 'error', this.opts.infoTimeout);\n      if (typeof AggregateError === 'function') {\n        throw new AggregateError(nonRestrictionErrors, message);\n      } else {\n        const err = new Error(message);\n        // @ts-expect-error fallback when AggregateError is not available\n        err.errors = nonRestrictionErrors;\n        throw err;\n      }\n    }\n\n    // OK, we haven't thrown an error, we can start updating state and emitting events now:\n\n    this.setState({\n      files: nextFilesState\n    });\n    validFilesToAdd.forEach(file => {\n      this.emit('file-added', file);\n    });\n    this.emit('files-added', validFilesToAdd);\n    if (validFilesToAdd.length > 5) {\n      this.log(`Added batch of ${validFilesToAdd.length} files`);\n    } else {\n      Object.values(validFilesToAdd).forEach(file => {\n        this.log(`Added file: ${file.name}\\n id: ${file.id}\\n type: ${file.type}`);\n      });\n    }\n    if (validFilesToAdd.length > 0) {\n      _classPrivateFieldLooseBase(this, _startIfAutoProceed)[_startIfAutoProceed]();\n    }\n  }\n  removeFiles(fileIDs, reason) {\n    const {\n      files,\n      currentUploads\n    } = this.getState();\n    const updatedFiles = {\n      ...files\n    };\n    const updatedUploads = {\n      ...currentUploads\n    };\n    const removedFiles = Object.create(null);\n    fileIDs.forEach(fileID => {\n      if (files[fileID]) {\n        removedFiles[fileID] = files[fileID];\n        delete updatedFiles[fileID];\n      }\n    });\n\n    // Remove files from the `fileIDs` list in each upload.\n    function fileIsNotRemoved(uploadFileID) {\n      return removedFiles[uploadFileID] === undefined;\n    }\n    Object.keys(updatedUploads).forEach(uploadID => {\n      const newFileIDs = currentUploads[uploadID].fileIDs.filter(fileIsNotRemoved);\n\n      // Remove the upload if no files are associated with it anymore.\n      if (newFileIDs.length === 0) {\n        delete updatedUploads[uploadID];\n        return;\n      }\n      const {\n        capabilities\n      } = this.getState();\n      if (newFileIDs.length !== currentUploads[uploadID].fileIDs.length && !capabilities.individualCancellation) {\n        throw new Error('The installed uploader plugin does not allow removing files during an upload.');\n      }\n      updatedUploads[uploadID] = {\n        ...currentUploads[uploadID],\n        fileIDs: newFileIDs\n      };\n    });\n    const stateUpdate = {\n      currentUploads: updatedUploads,\n      files: updatedFiles\n    };\n\n    // If all files were removed - allow new uploads,\n    // and clear recoveredState\n    if (Object.keys(updatedFiles).length === 0) {\n      stateUpdate.allowNewUpload = true;\n      stateUpdate.error = null;\n      stateUpdate.recoveredState = null;\n    }\n    this.setState(stateUpdate);\n    this.calculateTotalProgress();\n    const removedFileIDs = Object.keys(removedFiles);\n    removedFileIDs.forEach(fileID => {\n      this.emit('file-removed', removedFiles[fileID], reason);\n    });\n    if (removedFileIDs.length > 5) {\n      this.log(`Removed ${removedFileIDs.length} files`);\n    } else {\n      this.log(`Removed files: ${removedFileIDs.join(', ')}`);\n    }\n  }\n  removeFile(fileID, reason) {\n    this.removeFiles([fileID], reason);\n  }\n  pauseResume(fileID) {\n    if (!this.getState().capabilities.resumableUploads || this.getFile(fileID).progress.uploadComplete) {\n      return undefined;\n    }\n    const wasPaused = this.getFile(fileID).isPaused || false;\n    const isPaused = !wasPaused;\n    this.setFileState(fileID, {\n      isPaused\n    });\n    this.emit('upload-pause', fileID, isPaused);\n    return isPaused;\n  }\n  pauseAll() {\n    const updatedFiles = {\n      ...this.getState().files\n    };\n    const inProgressUpdatedFiles = Object.keys(updatedFiles).filter(file => {\n      return !updatedFiles[file].progress.uploadComplete && updatedFiles[file].progress.uploadStarted;\n    });\n    inProgressUpdatedFiles.forEach(file => {\n      const updatedFile = {\n        ...updatedFiles[file],\n        isPaused: true\n      };\n      updatedFiles[file] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles\n    });\n    this.emit('pause-all');\n  }\n  resumeAll() {\n    const updatedFiles = {\n      ...this.getState().files\n    };\n    const inProgressUpdatedFiles = Object.keys(updatedFiles).filter(file => {\n      return !updatedFiles[file].progress.uploadComplete && updatedFiles[file].progress.uploadStarted;\n    });\n    inProgressUpdatedFiles.forEach(file => {\n      const updatedFile = {\n        ...updatedFiles[file],\n        isPaused: false,\n        error: null\n      };\n      updatedFiles[file] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles\n    });\n    this.emit('resume-all');\n  }\n  retryAll() {\n    const updatedFiles = {\n      ...this.getState().files\n    };\n    const filesToRetry = Object.keys(updatedFiles).filter(file => {\n      return updatedFiles[file].error;\n    });\n    filesToRetry.forEach(file => {\n      const updatedFile = {\n        ...updatedFiles[file],\n        isPaused: false,\n        error: null\n      };\n      updatedFiles[file] = updatedFile;\n    });\n    this.setState({\n      files: updatedFiles,\n      error: null\n    });\n    this.emit('retry-all', filesToRetry);\n    if (filesToRetry.length === 0) {\n      return Promise.resolve({\n        successful: [],\n        failed: []\n      });\n    }\n    const uploadID = _classPrivateFieldLooseBase(this, _createUpload)[_createUpload](filesToRetry, {\n      forceAllowNewUpload: true // create new upload even if allowNewUpload: false\n    });\n    return _classPrivateFieldLooseBase(this, _runUpload)[_runUpload](uploadID);\n  }\n  cancelAll(_temp) {\n    let {\n      reason = 'user'\n    } = _temp === void 0 ? {} : _temp;\n    this.emit('cancel-all', {\n      reason\n    });\n\n    // Only remove existing uploads if user is canceling\n    if (reason === 'user') {\n      const {\n        files\n      } = this.getState();\n      const fileIDs = Object.keys(files);\n      if (fileIDs.length) {\n        this.removeFiles(fileIDs, 'cancel-all');\n      }\n      this.setState(defaultUploadState);\n      // todo should we call this.emit('reset-progress') like we do for resetProgress?\n    }\n  }\n  retryUpload(fileID) {\n    this.setFileState(fileID, {\n      error: null,\n      isPaused: false\n    });\n    this.emit('upload-retry', fileID);\n    const uploadID = _classPrivateFieldLooseBase(this, _createUpload)[_createUpload]([fileID], {\n      forceAllowNewUpload: true // create new upload even if allowNewUpload: false\n    });\n    return _classPrivateFieldLooseBase(this, _runUpload)[_runUpload](uploadID);\n  }\n  logout() {\n    this.iteratePlugins(plugin => {\n      var _provider;\n      ;\n      (_provider = plugin.provider) == null || _provider.logout == null || _provider.logout();\n    });\n  }\n  calculateTotalProgress() {\n    // calculate total progress, using the number of files currently uploading,\n    // multiplied by 100 and the summ of individual progress of each file\n    const files = this.getFiles();\n    const inProgress = files.filter(file => {\n      return file.progress.uploadStarted || file.progress.preprocess || file.progress.postprocess;\n    });\n    if (inProgress.length === 0) {\n      this.emit('progress', 0);\n      this.setState({\n        totalProgress: 0\n      });\n      return;\n    }\n    const sizedFiles = inProgress.filter(file => file.progress.bytesTotal != null);\n    const unsizedFiles = inProgress.filter(file => file.progress.bytesTotal == null);\n    if (sizedFiles.length === 0) {\n      const progressMax = inProgress.length * 100;\n      const currentProgress = unsizedFiles.reduce((acc, file) => {\n        return acc + file.progress.percentage;\n      }, 0);\n      const totalProgress = Math.round(currentProgress / progressMax * 100);\n      this.setState({\n        totalProgress\n      });\n      return;\n    }\n    let totalSize = sizedFiles.reduce((acc, file) => {\n      var _file$progress$bytesT;\n      return acc + ((_file$progress$bytesT = file.progress.bytesTotal) != null ? _file$progress$bytesT : 0);\n    }, 0);\n    const averageSize = totalSize / sizedFiles.length;\n    totalSize += averageSize * unsizedFiles.length;\n    let uploadedSize = 0;\n    sizedFiles.forEach(file => {\n      uploadedSize += file.progress.bytesUploaded;\n    });\n    unsizedFiles.forEach(file => {\n      uploadedSize += averageSize * (file.progress.percentage || 0) / 100;\n    });\n    let totalProgress = totalSize === 0 ? 0 : Math.round(uploadedSize / totalSize * 100);\n\n    // hot fix, because:\n    // uploadedSize ended up larger than totalSize, resulting in 1325% total\n    if (totalProgress > 100) {\n      totalProgress = 100;\n    }\n    this.setState({\n      totalProgress\n    });\n    this.emit('progress', totalProgress);\n  }\n  updateOnlineStatus() {\n    var _window$navigator$onL;\n    const online = (_window$navigator$onL = window.navigator.onLine) != null ? _window$navigator$onL : true;\n    if (!online) {\n      this.emit('is-offline');\n      this.info(this.i18n('noInternetConnection'), 'error', 0);\n      this.wasOffline = true;\n    } else {\n      this.emit('is-online');\n      if (this.wasOffline) {\n        this.emit('back-online');\n        this.info(this.i18n('connectedToInternet'), 'success', 3000);\n        this.wasOffline = false;\n      }\n    }\n  }\n  getID() {\n    return this.opts.id;\n  }\n\n  /**\n   * Registers a plugin with Core.\n   */\n  use(Plugin, opts) {\n    if (typeof Plugin !== 'function') {\n      const msg = `Expected a plugin class, but got ${Plugin === null ? 'null' : typeof Plugin}.` + ' Please verify that the plugin was imported and spelled correctly.';\n      throw new TypeError(msg);\n    }\n\n    // Instantiate\n    const plugin = new Plugin(this, opts);\n    const pluginId = plugin.id;\n    if (!pluginId) {\n      throw new Error('Your plugin must have an id');\n    }\n    if (!plugin.type) {\n      throw new Error('Your plugin must have a type');\n    }\n    const existsPluginAlready = this.getPlugin(pluginId);\n    if (existsPluginAlready) {\n      const msg = `Already found a plugin named '${existsPluginAlready.id}'. ` + `Tried to use: '${pluginId}'.\\n` + 'Uppy plugins must have unique `id` options. See https://uppy.io/docs/plugins/#id.';\n      throw new Error(msg);\n    }\n\n    // @ts-expect-error does exist\n    if (Plugin.VERSION) {\n      // @ts-expect-error does exist\n      this.log(`Using ${pluginId} v${Plugin.VERSION}`);\n    }\n    if (plugin.type in _classPrivateFieldLooseBase(this, _plugins)[_plugins]) {\n      _classPrivateFieldLooseBase(this, _plugins)[_plugins][plugin.type].push(plugin);\n    } else {\n      _classPrivateFieldLooseBase(this, _plugins)[_plugins][plugin.type] = [plugin];\n    }\n    plugin.install();\n    this.emit('plugin-added', plugin);\n    return this;\n  }\n\n  /**\n   * Find one Plugin by name.\n   */\n  getPlugin(id) {\n    for (const plugins of Object.values(_classPrivateFieldLooseBase(this, _plugins)[_plugins])) {\n      const foundPlugin = plugins.find(plugin => plugin.id === id);\n      if (foundPlugin != null) return foundPlugin;\n    }\n    return undefined;\n  }\n  [_Symbol$for](type) {\n    return _classPrivateFieldLooseBase(this, _plugins)[_plugins][type];\n  }\n\n  /**\n   * Iterate through all `use`d plugins.\n   *\n   */\n  iteratePlugins(method) {\n    Object.values(_classPrivateFieldLooseBase(this, _plugins)[_plugins]).flat(1).forEach(method);\n  }\n\n  /**\n   * Uninstall and remove a plugin.\n   *\n   * @param {object} instance The plugin instance to remove.\n   */\n  removePlugin(instance) {\n    this.log(`Removing plugin ${instance.id}`);\n    this.emit('plugin-remove', instance);\n    if (instance.uninstall) {\n      instance.uninstall();\n    }\n    const list = _classPrivateFieldLooseBase(this, _plugins)[_plugins][instance.type];\n    // list.indexOf failed here, because Vue3 converted the plugin instance\n    // to a Proxy object, which failed the strict comparison test:\n    // obj !== objProxy\n    const index = list.findIndex(item => item.id === instance.id);\n    if (index !== -1) {\n      list.splice(index, 1);\n    }\n    const state = this.getState();\n    const updatedState = {\n      plugins: {\n        ...state.plugins,\n        [instance.id]: undefined\n      }\n    };\n    this.setState(updatedState);\n  }\n\n  /**\n   * Uninstall all plugins and close down this Uppy instance.\n   */\n  // @todo next major: rename to `destroy`.\n  // Cancel local uploads, cancel remote uploads, DON'T cancel assemblies\n  // document that if you do want to cancel assemblies, you need to call smth manually.\n  // Potentially remove reason, as it’s confusing, just come up with a default behaviour.\n  close(_temp2) {\n    let {\n      reason\n    } = _temp2 === void 0 ? {} : _temp2;\n    this.log(`Closing Uppy instance ${this.opts.id}: removing all files and uninstalling plugins`);\n    this.cancelAll({\n      reason\n    });\n    _classPrivateFieldLooseBase(this, _storeUnsubscribe)[_storeUnsubscribe]();\n    this.iteratePlugins(plugin => {\n      this.removePlugin(plugin);\n    });\n    if (typeof window !== 'undefined' && window.removeEventListener) {\n      window.removeEventListener('online', _classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus]);\n      window.removeEventListener('offline', _classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus]);\n    }\n  }\n  hideInfo() {\n    const {\n      info\n    } = this.getState();\n    this.setState({\n      info: info.slice(1)\n    });\n    this.emit('info-hidden');\n  }\n\n  /**\n   * Set info message in `state.info`, so that UI plugins like `Informer`\n   * can display the message.\n   */\n  info(message, type, duration) {\n    if (type === void 0) {\n      type = 'info';\n    }\n    if (duration === void 0) {\n      duration = 3000;\n    }\n    const isComplexMessage = typeof message === 'object';\n    this.setState({\n      info: [...this.getState().info, {\n        type,\n        message: isComplexMessage ? message.message : message,\n        details: isComplexMessage ? message.details : null\n      }]\n    });\n    setTimeout(() => this.hideInfo(), duration);\n    this.emit('info-visible');\n  }\n\n  /**\n   * Passes messages to a function, provided in `opts.logger`.\n   * If `opts.logger: Uppy.debugLogger` or `opts.debug: true`, logs to the browser console.\n   */\n  log(message, type) {\n    const {\n      logger\n    } = this.opts;\n    switch (type) {\n      case 'error':\n        logger.error(message);\n        break;\n      case 'warning':\n        logger.warn(message);\n        break;\n      default:\n        logger.debug(message);\n        break;\n    }\n  }\n  registerRequestClient(id, client) {\n    _classPrivateFieldLooseBase(this, _requestClientById)[_requestClientById].set(id, client);\n  }\n\n  /** @protected */\n  getRequestClientForFile(file) {\n    if (!file.remote) throw new Error(`Tried to get RequestClient for a non-remote file ${file.id}`);\n    const requestClient = _classPrivateFieldLooseBase(this, _requestClientById)[_requestClientById].get(file.remote.requestClientId);\n    if (requestClient == null) throw new Error(`requestClientId \"${file.remote.requestClientId}\" not registered for file \"${file.id}\"`);\n    return requestClient;\n  }\n\n  /**\n   * Restore an upload by its ID.\n   */\n  restore(uploadID) {\n    this.log(`Core: attempting to restore upload \"${uploadID}\"`);\n    if (!this.getState().currentUploads[uploadID]) {\n      _classPrivateFieldLooseBase(this, _removeUpload)[_removeUpload](uploadID);\n      return Promise.reject(new Error('Nonexistent upload'));\n    }\n    return _classPrivateFieldLooseBase(this, _runUpload)[_runUpload](uploadID);\n  }\n  [_Symbol$for2]() {\n    // @ts-expect-error https://github.com/microsoft/TypeScript/issues/47595\n    return _classPrivateFieldLooseBase(this, _createUpload)[_createUpload](...arguments);\n  }\n  /**\n   * Add data to an upload's result object.\n   */\n  addResultData(uploadID, data) {\n    if (!_classPrivateFieldLooseBase(this, _getUpload)[_getUpload](uploadID)) {\n      this.log(`Not setting result for an upload that has been removed: ${uploadID}`);\n      return;\n    }\n    const {\n      currentUploads\n    } = this.getState();\n    const currentUpload = {\n      ...currentUploads[uploadID],\n      result: {\n        ...currentUploads[uploadID].result,\n        ...data\n      }\n    };\n    this.setState({\n      currentUploads: {\n        ...currentUploads,\n        [uploadID]: currentUpload\n      }\n    });\n  }\n  /**\n   * Start an upload for all the files that are not currently being uploaded.\n   */\n  upload() {\n    var _classPrivateFieldLoo;\n    if (!((_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _plugins)[_plugins]['uploader']) != null && _classPrivateFieldLoo.length)) {\n      this.log('No uploader type plugins are used', 'warning');\n    }\n    let {\n      files\n    } = this.getState();\n    const onBeforeUploadResult = this.opts.onBeforeUpload(files);\n    if (onBeforeUploadResult === false) {\n      return Promise.reject(new Error('Not starting the upload because onBeforeUpload returned false'));\n    }\n    if (onBeforeUploadResult && typeof onBeforeUploadResult === 'object') {\n      files = onBeforeUploadResult;\n      // Updating files in state, because uploader plugins receive file IDs,\n      // and then fetch the actual file object from state\n      this.setState({\n        files\n      });\n    }\n    return Promise.resolve().then(() => _classPrivateFieldLooseBase(this, _restricter)[_restricter].validateMinNumberOfFiles(files)).catch(err => {\n      _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit]([err]);\n      throw err;\n    }).then(() => {\n      if (!_classPrivateFieldLooseBase(this, _checkRequiredMetaFields)[_checkRequiredMetaFields](files)) {\n        throw new RestrictionError(this.i18n('missingRequiredMetaField'));\n      }\n    }).catch(err => {\n      // Doing this in a separate catch because we already emited and logged\n      // all the errors in `checkRequiredMetaFields` so we only throw a generic\n      // missing fields error here.\n      throw err;\n    }).then(() => {\n      const {\n        currentUploads\n      } = this.getState();\n      // get a list of files that are currently assigned to uploads\n      const currentlyUploadingFiles = Object.values(currentUploads).flatMap(curr => curr.fileIDs);\n      const waitingFileIDs = [];\n      Object.keys(files).forEach(fileID => {\n        const file = this.getFile(fileID);\n        // if the file hasn't started uploading and hasn't already been assigned to an upload..\n        if (!file.progress.uploadStarted && currentlyUploadingFiles.indexOf(fileID) === -1) {\n          waitingFileIDs.push(file.id);\n        }\n      });\n      const uploadID = _classPrivateFieldLooseBase(this, _createUpload)[_createUpload](waitingFileIDs);\n      return _classPrivateFieldLooseBase(this, _runUpload)[_runUpload](uploadID);\n    }).catch(err => {\n      this.emit('error', err);\n      this.log(err, 'error');\n      throw err;\n    });\n  }\n}\nfunction _informAndEmit2(errors) {\n  for (const error of errors) {\n    if (error.isRestriction) {\n      this.emit('restriction-failed', error.file, error);\n    } else {\n      this.emit('error', error, error.file);\n    }\n    this.log(error, 'warning');\n  }\n  const userFacingErrors = errors.filter(error => error.isUserFacing);\n\n  // don't flood the user: only show the first 4 toasts\n  const maxNumToShow = 4;\n  const firstErrors = userFacingErrors.slice(0, maxNumToShow);\n  const additionalErrors = userFacingErrors.slice(maxNumToShow);\n  firstErrors.forEach(_ref2 => {\n    let {\n      message,\n      details = ''\n    } = _ref2;\n    this.info({\n      message,\n      details\n    }, 'error', this.opts.infoTimeout);\n  });\n  if (additionalErrors.length > 0) {\n    this.info({\n      message: this.i18n('additionalRestrictionsFailed', {\n        count: additionalErrors.length\n      })\n    });\n  }\n}\nfunction _checkRequiredMetaFieldsOnFile2(file) {\n  const {\n    missingFields,\n    error\n  } = _classPrivateFieldLooseBase(this, _restricter)[_restricter].getMissingRequiredMetaFields(file);\n  if (missingFields.length > 0) {\n    this.setFileState(file.id, {\n      missingRequiredMetaFields: missingFields\n    });\n    this.log(error.message);\n    this.emit('restriction-failed', file, error);\n    return false;\n  }\n  return true;\n}\nfunction _checkRequiredMetaFields2(files) {\n  let success = true;\n  for (const file of Object.values(files)) {\n    if (!_classPrivateFieldLooseBase(this, _checkRequiredMetaFieldsOnFile)[_checkRequiredMetaFieldsOnFile](file)) {\n      success = false;\n    }\n  }\n  return success;\n}\nfunction _assertNewUploadAllowed2(file) {\n  const {\n    allowNewUpload\n  } = this.getState();\n  if (allowNewUpload === false) {\n    const error = new RestrictionError(this.i18n('noMoreFilesAllowed'), {\n      file\n    });\n    _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit]([error]);\n    throw error;\n  }\n}\nfunction _transformFile2(fileDescriptorOrFile) {\n  // Uppy expects files in { name, type, size, data } format.\n  // If the actual File object is passed from input[type=file] or drag-drop,\n  // we normalize it to match Uppy file object\n  const file = fileDescriptorOrFile instanceof File ? {\n    name: fileDescriptorOrFile.name,\n    type: fileDescriptorOrFile.type,\n    size: fileDescriptorOrFile.size,\n    data: fileDescriptorOrFile\n  } : fileDescriptorOrFile;\n  const fileType = getFileType(file);\n  const fileName = getFileName(fileType, file);\n  const fileExtension = getFileNameAndExtension(fileName).extension;\n  const id = getSafeFileId(file, this.getID());\n  const meta = file.meta || {};\n  meta.name = fileName;\n  meta.type = fileType;\n\n  // `null` means the size is unknown.\n  const size = Number.isFinite(file.data.size) ? file.data.size : null;\n  return {\n    source: file.source || '',\n    id,\n    name: fileName,\n    extension: fileExtension || '',\n    meta: {\n      ...this.getState().meta,\n      ...meta\n    },\n    type: fileType,\n    data: file.data,\n    progress: {\n      percentage: 0,\n      bytesUploaded: 0,\n      bytesTotal: size,\n      uploadComplete: false,\n      uploadStarted: null\n    },\n    size,\n    isGhost: false,\n    isRemote: file.isRemote || false,\n    // TODO: this should not be a string\n    // @ts-expect-error wrong\n    remote: file.remote || '',\n    preview: file.preview\n  };\n}\nfunction _startIfAutoProceed2() {\n  if (this.opts.autoProceed && !this.scheduledAutoProceed) {\n    this.scheduledAutoProceed = setTimeout(() => {\n      this.scheduledAutoProceed = null;\n      this.upload().catch(err => {\n        if (!err.isRestriction) {\n          this.log(err.stack || err.message || err);\n        }\n      });\n    }, 4);\n  }\n}\nfunction _checkAndUpdateFileState2(filesToAdd) {\n  const {\n    files: existingFiles\n  } = this.getState();\n\n  // create a copy of the files object only once\n  const nextFilesState = {\n    ...existingFiles\n  };\n  const validFilesToAdd = [];\n  const errors = [];\n  for (const fileToAdd of filesToAdd) {\n    try {\n      var _existingFiles$newFil;\n      let newFile = _classPrivateFieldLooseBase(this, _transformFile)[_transformFile](fileToAdd);\n\n      // If a file has been recovered (Golden Retriever), but we were unable to recover its data (probably too large),\n      // users are asked to re-select these half-recovered files and then this method will be called again.\n      // In order to keep the progress, meta and everything else, we keep the existing file,\n      // but we replace `data`, and we remove `isGhost`, because the file is no longer a ghost now\n      const isGhost = (_existingFiles$newFil = existingFiles[newFile.id]) == null ? void 0 : _existingFiles$newFil.isGhost;\n      if (isGhost) {\n        const existingFileState = existingFiles[newFile.id];\n        newFile = {\n          ...existingFileState,\n          isGhost: false,\n          data: fileToAdd.data\n        };\n        this.log(`Replaced the blob in the restored ghost file: ${newFile.name}, ${newFile.id}`);\n      }\n      const onBeforeFileAddedResult = this.opts.onBeforeFileAdded(newFile, nextFilesState);\n      if (!onBeforeFileAddedResult && this.checkIfFileAlreadyExists(newFile.id)) {\n        throw new RestrictionError(this.i18n('noDuplicates', {\n          fileName: newFile.name\n        }), {\n          file: fileToAdd\n        });\n      }\n\n      // Pass through reselected files from Golden Retriever\n      if (onBeforeFileAddedResult === false && !isGhost) {\n        // Don’t show UI info for this error, as it should be done by the developer\n        throw new RestrictionError('Cannot add the file because onBeforeFileAdded returned false.', {\n          isUserFacing: false,\n          file: fileToAdd\n        });\n      } else if (typeof onBeforeFileAddedResult === 'object' && onBeforeFileAddedResult !== null) {\n        newFile = onBeforeFileAddedResult;\n      }\n      _classPrivateFieldLooseBase(this, _restricter)[_restricter].validateSingleFile(newFile);\n\n      // need to add it to the new local state immediately, so we can use the state to validate the next files too\n      nextFilesState[newFile.id] = newFile;\n      validFilesToAdd.push(newFile);\n    } catch (err) {\n      errors.push(err);\n    }\n  }\n  try {\n    // need to run this separately because it's much more slow, so if we run it inside the for-loop it will be very slow\n    // when many files are added\n    _classPrivateFieldLooseBase(this, _restricter)[_restricter].validateAggregateRestrictions(Object.values(existingFiles), validFilesToAdd);\n  } catch (err) {\n    errors.push(err);\n\n    // If we have any aggregate error, don't allow adding this batch\n    return {\n      nextFilesState: existingFiles,\n      validFilesToAdd: [],\n      errors\n    };\n  }\n  return {\n    nextFilesState,\n    validFilesToAdd,\n    errors\n  };\n}\nfunction _addListeners2() {\n  // Type inference only works for inline functions so we have to type it again\n  const errorHandler = (error, file, response) => {\n    let errorMsg = error.message || 'Unknown error';\n    if (error.details) {\n      errorMsg += ` ${error.details}`;\n    }\n    this.setState({\n      error: errorMsg\n    });\n    if (file != null && file.id in this.getState().files) {\n      this.setFileState(file.id, {\n        error: errorMsg,\n        response\n      });\n    }\n  };\n  this.on('error', errorHandler);\n  this.on('upload-error', (file, error, response) => {\n    errorHandler(error, file, response);\n    if (typeof error === 'object' && error.message) {\n      var _file$name;\n      this.log(error.message, 'error');\n      const newError = new Error(this.i18n('failedToUpload', {\n        file: (_file$name = file == null ? void 0 : file.name) != null ? _file$name : ''\n      })); // we may want a new custom error here\n      newError.isUserFacing = true; // todo maybe don't do this with all errors?\n      newError.details = error.message;\n      if (error.details) {\n        newError.details += ` ${error.details}`;\n      }\n      _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit]([newError]);\n    } else {\n      _classPrivateFieldLooseBase(this, _informAndEmit)[_informAndEmit]([error]);\n    }\n  });\n  let uploadStalledWarningRecentlyEmitted = null;\n  this.on('upload-stalled', (error, files) => {\n    const {\n      message\n    } = error;\n    const details = files.map(file => file.meta.name).join(', ');\n    if (!uploadStalledWarningRecentlyEmitted) {\n      this.info({\n        message,\n        details\n      }, 'warning', this.opts.infoTimeout);\n      uploadStalledWarningRecentlyEmitted = setTimeout(() => {\n        uploadStalledWarningRecentlyEmitted = null;\n      }, this.opts.infoTimeout);\n    }\n    this.log(`${message} ${details}`.trim(), 'warning');\n  });\n  this.on('upload', () => {\n    this.setState({\n      error: null\n    });\n  });\n  const onUploadStarted = files => {\n    const filesFiltered = files.filter(file => {\n      const exists = file != null && this.getFile(file.id);\n      if (!exists) this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return exists;\n    });\n    const filesState = Object.fromEntries(filesFiltered.map(file => [file.id, {\n      progress: {\n        uploadStarted: Date.now(),\n        uploadComplete: false,\n        percentage: 0,\n        bytesUploaded: 0,\n        bytesTotal: file.size\n      }\n    }]));\n    this.patchFilesState(filesState);\n  };\n  this.on('upload-start', files => {\n    files.forEach(file => {\n      // todo backward compat, remove this event in a next major\n      this.emit('upload-started', file);\n    });\n    onUploadStarted(files);\n  });\n  this.on('upload-progress', this.calculateProgress);\n  this.on('upload-success', (file, uploadResp) => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n    const currentProgress = this.getFile(file.id).progress;\n    this.setFileState(file.id, {\n      progress: {\n        ...currentProgress,\n        postprocess: _classPrivateFieldLooseBase(this, _postProcessors)[_postProcessors].size > 0 ? {\n          mode: 'indeterminate'\n        } : undefined,\n        uploadComplete: true,\n        percentage: 100,\n        bytesUploaded: currentProgress.bytesTotal\n      },\n      response: uploadResp,\n      uploadURL: uploadResp.uploadURL,\n      isPaused: false\n    });\n\n    // Remote providers sometimes don't tell us the file size,\n    // but we can know how many bytes we uploaded once the upload is complete.\n    if (file.size == null) {\n      this.setFileState(file.id, {\n        size: uploadResp.bytesUploaded || currentProgress.bytesTotal\n      });\n    }\n    this.calculateTotalProgress();\n  });\n  this.on('preprocess-progress', (file, progress) => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n    this.setFileState(file.id, {\n      progress: {\n        ...this.getFile(file.id).progress,\n        preprocess: progress\n      }\n    });\n  });\n  this.on('preprocess-complete', file => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n    const files = {\n      ...this.getState().files\n    };\n    files[file.id] = {\n      ...files[file.id],\n      progress: {\n        ...files[file.id].progress\n      }\n    };\n    delete files[file.id].progress.preprocess;\n    this.setState({\n      files\n    });\n  });\n  this.on('postprocess-progress', (file, progress) => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n    this.setFileState(file.id, {\n      progress: {\n        ...this.getState().files[file.id].progress,\n        postprocess: progress\n      }\n    });\n  });\n  this.on('postprocess-complete', file => {\n    if (file == null || !this.getFile(file.id)) {\n      this.log(`Not setting progress for a file that has been removed: ${file == null ? void 0 : file.id}`);\n      return;\n    }\n    const files = {\n      ...this.getState().files\n    };\n    files[file.id] = {\n      ...files[file.id],\n      progress: {\n        ...files[file.id].progress\n      }\n    };\n    delete files[file.id].progress.postprocess;\n    this.setState({\n      files\n    });\n  });\n  this.on('restored', () => {\n    // Files may have changed--ensure progress is still accurate.\n    this.calculateTotalProgress();\n  });\n\n  // @ts-expect-error should fix itself when dashboard it typed (also this doesn't belong here)\n  this.on('dashboard:file-edit-complete', file => {\n    if (file) {\n      _classPrivateFieldLooseBase(this, _checkRequiredMetaFieldsOnFile)[_checkRequiredMetaFieldsOnFile](file);\n    }\n  });\n\n  // show informer if offline\n  if (typeof window !== 'undefined' && window.addEventListener) {\n    window.addEventListener('online', _classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus]);\n    window.addEventListener('offline', _classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus]);\n    setTimeout(_classPrivateFieldLooseBase(this, _updateOnlineStatus)[_updateOnlineStatus], 3000);\n  }\n}\nfunction _createUpload2(fileIDs, opts) {\n  if (opts === void 0) {\n    opts = {};\n  }\n  // uppy.retryAll sets this to true — when retrying we want to ignore `allowNewUpload: false`\n  const {\n    forceAllowNewUpload = false\n  } = opts;\n  const {\n    allowNewUpload,\n    currentUploads\n  } = this.getState();\n  if (!allowNewUpload && !forceAllowNewUpload) {\n    throw new Error('Cannot create a new upload: already uploading.');\n  }\n  const uploadID = nanoid();\n  this.emit('upload', {\n    id: uploadID,\n    fileIDs\n  });\n  this.setState({\n    allowNewUpload: this.opts.allowMultipleUploadBatches !== false && this.opts.allowMultipleUploads !== false,\n    currentUploads: {\n      ...currentUploads,\n      [uploadID]: {\n        fileIDs,\n        step: 0,\n        result: {}\n      }\n    }\n  });\n  return uploadID;\n}\nfunction _getUpload2(uploadID) {\n  const {\n    currentUploads\n  } = this.getState();\n  return currentUploads[uploadID];\n}\nfunction _removeUpload2(uploadID) {\n  const currentUploads = {\n    ...this.getState().currentUploads\n  };\n  delete currentUploads[uploadID];\n  this.setState({\n    currentUploads\n  });\n}\nasync function _runUpload2(uploadID) {\n  const getCurrentUpload = () => {\n    const {\n      currentUploads\n    } = this.getState();\n    return currentUploads[uploadID];\n  };\n  let currentUpload = getCurrentUpload();\n  const steps = [..._classPrivateFieldLooseBase(this, _preProcessors)[_preProcessors], ..._classPrivateFieldLooseBase(this, _uploaders)[_uploaders], ..._classPrivateFieldLooseBase(this, _postProcessors)[_postProcessors]];\n  try {\n    for (let step = currentUpload.step || 0; step < steps.length; step++) {\n      if (!currentUpload) {\n        break;\n      }\n      const fn = steps[step];\n      this.setState({\n        currentUploads: {\n          ...this.getState().currentUploads,\n          [uploadID]: {\n            ...currentUpload,\n            step\n          }\n        }\n      });\n      const {\n        fileIDs\n      } = currentUpload;\n\n      // TODO give this the `updatedUpload` object as its only parameter maybe?\n      // Otherwise when more metadata may be added to the upload this would keep getting more parameters\n      await fn(fileIDs, uploadID);\n\n      // Update currentUpload value in case it was modified asynchronously.\n      currentUpload = getCurrentUpload();\n    }\n  } catch (err) {\n    _classPrivateFieldLooseBase(this, _removeUpload)[_removeUpload](uploadID);\n    throw err;\n  }\n\n  // Set result data.\n  if (currentUpload) {\n    // Mark postprocessing step as complete if necessary; this addresses a case where we might get\n    // stuck in the postprocessing UI while the upload is fully complete.\n    // If the postprocessing steps do not do any work, they may not emit postprocessing events at\n    // all, and never mark the postprocessing as complete. This is fine on its own but we\n    // introduced code in the @uppy/core upload-success handler to prepare postprocessing progress\n    // state if any postprocessors are registered. That is to avoid a \"flash of completed state\"\n    // before the postprocessing plugins can emit events.\n    //\n    // So, just in case an upload with postprocessing plugins *has* completed *without* emitting\n    // postprocessing completion, we do it instead.\n    currentUpload.fileIDs.forEach(fileID => {\n      const file = this.getFile(fileID);\n      if (file && file.progress.postprocess) {\n        this.emit('postprocess-complete', file);\n      }\n    });\n    const files = currentUpload.fileIDs.map(fileID => this.getFile(fileID));\n    const successful = files.filter(file => !file.error);\n    const failed = files.filter(file => file.error);\n    this.addResultData(uploadID, {\n      successful,\n      failed,\n      uploadID\n    });\n\n    // Update currentUpload value in case it was modified asynchronously.\n    currentUpload = getCurrentUpload();\n  }\n  // Emit completion events.\n  // This is in a separate function so that the `currentUploads` variable\n  // always refers to the latest state. In the handler right above it refers\n  // to an outdated object without the `.result` property.\n  let result;\n  if (currentUpload) {\n    result = currentUpload.result;\n    this.emit('complete', result);\n    _classPrivateFieldLooseBase(this, _removeUpload)[_removeUpload](uploadID);\n  }\n  if (result == null) {\n    this.log(`Not setting result for an upload that has been removed: ${uploadID}`);\n  }\n  return result;\n}\nUppy.VERSION = packageJson.version;\nexport default Uppy;","export default function getFileName(fileType, fileDescriptor) {\n  if (fileDescriptor.name) {\n    return fileDescriptor.name;\n  }\n  if (fileType.split('/')[0] === 'image') {\n    return `${fileType.split('/')[0]}.${fileType.split('/')[1]}`;\n  }\n  return 'noname';\n}","var n,l,u,t,i,r,o,e,f,c,s,a,h,p={},v=[],y=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,d=Array.isArray;function w(n,l){for(var u in l)n[u]=l[u];return n}function g(n){n&&n.parentNode&&n.parentNode.removeChild(n)}function _(l,u,t){var i,r,o,e={};for(o in u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:e[o]=u[o];if(arguments.length>2&&(e.children=arguments.length>3?n.call(arguments,2):t),\"function\"==typeof l&&null!=l.defaultProps)for(o in l.defaultProps)void 0===e[o]&&(e[o]=l.defaultProps[o]);return m(l,e,i,r,null)}function m(n,t,i,r,o){var e={type:n,props:t,key:i,ref:r,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:null==o?++u:o,__i:-1,__u:0};return null==o&&null!=l.vnode&&l.vnode(e),e}function b(){return{current:null}}function k(n){return n.children}function x(n,l){this.props=n,this.context=l}function S(n,l){if(null==l)return n.__?S(n.__,n.__i+1):null;for(var u;l<n.__k.length;l++)if(null!=(u=n.__k[l])&&null!=u.__e)return u.__e;return\"function\"==typeof n.type?S(n):null}function C(n){if(n.__P&&n.__d){var u=n.__v,t=u.__e,i=[],r=[],o=w({},u);o.__v=u.__v+1,l.vnode&&l.vnode(o),z(n.__P,o,u,n.__n,n.__P.namespaceURI,32&u.__u?[t]:null,i,null==t?S(u):t,!!(32&u.__u),r),o.__v=u.__v,o.__.__k[o.__i]=o,V(i,o,r),u.__e=u.__=null,o.__e!=t&&M(o)}}function M(n){if(null!=(n=n.__)&&null!=n.__c)return n.__e=n.__c.base=null,n.__k.some(function(l){if(null!=l&&null!=l.__e)return n.__e=n.__c.base=l.__e}),M(n)}function $(n){(!n.__d&&(n.__d=!0)&&i.push(n)&&!I.__r++||r!=l.debounceRendering)&&((r=l.debounceRendering)||o)(I)}function I(){try{for(var n,l=1;i.length;)i.length>l&&i.sort(e),n=i.shift(),l=i.length,C(n)}finally{i.length=I.__r=0}}function P(n,l,u,t,i,r,o,e,f,c,s){var a,h,y,d,w,g,_,m=t&&t.__k||v,b=l.length;for(f=A(u,l,m,f,b),a=0;a<b;a++)null!=(y=u.__k[a])&&(h=-1!=y.__i&&m[y.__i]||p,y.__i=a,g=z(n,y,h,i,r,o,e,f,c,s),d=y.__e,y.ref&&h.ref!=y.ref&&(h.ref&&D(h.ref,null,y),s.push(y.ref,y.__c||d,y)),null==w&&null!=d&&(w=d),(_=!!(4&y.__u))||h.__k===y.__k?f=H(y,f,n,_):\"function\"==typeof y.type&&void 0!==g?f=g:d&&(f=d.nextSibling),y.__u&=-7);return u.__e=w,f}function A(n,l,u,t,i){var r,o,e,f,c,s=u.length,a=s,h=0;for(n.__k=new Array(i),r=0;r<i;r++)null!=(o=l[r])&&\"boolean\"!=typeof o&&\"function\"!=typeof o?(\"string\"==typeof o||\"number\"==typeof o||\"bigint\"==typeof o||o.constructor==String?o=n.__k[r]=m(null,o,null,null,null):d(o)?o=n.__k[r]=m(k,{children:o},null,null,null):void 0===o.constructor&&o.__b>0?o=n.__k[r]=m(o.type,o.props,o.key,o.ref?o.ref:null,o.__v):n.__k[r]=o,f=r+h,o.__=n,o.__b=n.__b+1,e=null,-1!=(c=o.__i=T(o,u,f,a))&&(a--,(e=u[c])&&(e.__u|=2)),null==e||null==e.__v?(-1==c&&(i>s?h--:i<s&&h++),\"function\"!=typeof o.type&&(o.__u|=4)):c!=f&&(c==f-1?h--:c==f+1?h++:(c>f?h--:h++,o.__u|=4))):n.__k[r]=null;if(a)for(r=0;r<s;r++)null!=(e=u[r])&&0==(2&e.__u)&&(e.__e==t&&(t=S(e)),E(e,e));return t}function H(n,l,u,t){var i,r;if(\"function\"==typeof n.type){for(i=n.__k,r=0;i&&r<i.length;r++)i[r]&&(i[r].__=n,l=H(i[r],l,u,t));return l}n.__e!=l&&(t&&(l&&n.type&&!l.parentNode&&(l=S(n)),u.insertBefore(n.__e,l||null)),l=n.__e);do{l=l&&l.nextSibling}while(null!=l&&8==l.nodeType);return l}function L(n,l){return l=l||[],null==n||\"boolean\"==typeof n||(d(n)?n.some(function(n){L(n,l)}):l.push(n)),l}function T(n,l,u,t){var i,r,o,e=n.key,f=n.type,c=l[u],s=null!=c&&0==(2&c.__u);if(null===c&&null==e||s&&e==c.key&&f==c.type)return u;if(t>(s?1:0))for(i=u-1,r=u+1;i>=0||r<l.length;)if(null!=(c=l[o=i>=0?i--:r++])&&0==(2&c.__u)&&e==c.key&&f==c.type)return o;return-1}function j(n,l,u){\"-\"==l[0]?n.setProperty(l,null==u?\"\":u):n[l]=null==u?\"\":\"number\"!=typeof u||y.test(l)?u:u+\"px\"}function F(n,l,u,t,i){var r,o;n:if(\"style\"==l)if(\"string\"==typeof u)n.style.cssText=u;else{if(\"string\"==typeof t&&(n.style.cssText=t=\"\"),t)for(l in t)u&&l in u||j(n.style,l,\"\");if(u)for(l in u)t&&u[l]==t[l]||j(n.style,l,u[l])}else if(\"o\"==l[0]&&\"n\"==l[1])r=l!=(l=l.replace(f,\"$1\")),o=l.toLowerCase(),l=o in n||\"onFocusOut\"==l||\"onFocusIn\"==l?o.slice(2):l.slice(2),n.l||(n.l={}),n.l[l+r]=u,u?t?u.u=t.u:(u.u=c,n.addEventListener(l,r?a:s,r)):n.removeEventListener(l,r?a:s,r);else{if(\"http://www.w3.org/2000/svg\"==i)l=l.replace(/xlink(H|:h)/,\"h\").replace(/sName$/,\"s\");else if(\"width\"!=l&&\"height\"!=l&&\"href\"!=l&&\"list\"!=l&&\"form\"!=l&&\"tabIndex\"!=l&&\"download\"!=l&&\"rowSpan\"!=l&&\"colSpan\"!=l&&\"role\"!=l&&\"popover\"!=l&&l in n)try{n[l]=null==u?\"\":u;break n}catch(n){}\"function\"==typeof u||(null==u||!1===u&&\"-\"!=l[4]?n.removeAttribute(l):n.setAttribute(l,\"popover\"==l&&1==u?\"\":u))}}function O(n){return function(u){if(this.l){var t=this.l[u.type+n];if(null==u.t)u.t=c++;else if(u.t<t.u)return;return t(l.event?l.event(u):u)}}}function z(n,u,t,i,r,o,e,f,c,s){var a,h,p,y,_,m,b,S,C,M,$,I,A,H,L,T=u.type;if(void 0!==u.constructor)return null;128&t.__u&&(c=!!(32&t.__u),o=[f=u.__e=t.__e]),(a=l.__b)&&a(u);n:if(\"function\"==typeof T)try{if(S=u.props,C=T.prototype&&T.prototype.render,M=(a=T.contextType)&&i[a.__c],$=a?M?M.props.value:a.__:i,t.__c?b=(h=u.__c=t.__c).__=h.__E:(C?u.__c=h=new T(S,$):(u.__c=h=new x(S,$),h.constructor=T,h.render=G),M&&M.sub(h),h.state||(h.state={}),h.__n=i,p=h.__d=!0,h.__h=[],h._sb=[]),C&&null==h.__s&&(h.__s=h.state),C&&null!=T.getDerivedStateFromProps&&(h.__s==h.state&&(h.__s=w({},h.__s)),w(h.__s,T.getDerivedStateFromProps(S,h.__s))),y=h.props,_=h.state,h.__v=u,p)C&&null==T.getDerivedStateFromProps&&null!=h.componentWillMount&&h.componentWillMount(),C&&null!=h.componentDidMount&&h.__h.push(h.componentDidMount);else{if(C&&null==T.getDerivedStateFromProps&&S!==y&&null!=h.componentWillReceiveProps&&h.componentWillReceiveProps(S,$),u.__v==t.__v||!h.__e&&null!=h.shouldComponentUpdate&&!1===h.shouldComponentUpdate(S,h.__s,$)){u.__v!=t.__v&&(h.props=S,h.state=h.__s,h.__d=!1),u.__e=t.__e,u.__k=t.__k,u.__k.some(function(n){n&&(n.__=u)}),v.push.apply(h.__h,h._sb),h._sb=[],h.__h.length&&e.push(h);break n}null!=h.componentWillUpdate&&h.componentWillUpdate(S,h.__s,$),C&&null!=h.componentDidUpdate&&h.__h.push(function(){h.componentDidUpdate(y,_,m)})}if(h.context=$,h.props=S,h.__P=n,h.__e=!1,I=l.__r,A=0,C)h.state=h.__s,h.__d=!1,I&&I(u),a=h.render(h.props,h.state,h.context),v.push.apply(h.__h,h._sb),h._sb=[];else do{h.__d=!1,I&&I(u),a=h.render(h.props,h.state,h.context),h.state=h.__s}while(h.__d&&++A<25);h.state=h.__s,null!=h.getChildContext&&(i=w(w({},i),h.getChildContext())),C&&!p&&null!=h.getSnapshotBeforeUpdate&&(m=h.getSnapshotBeforeUpdate(y,_)),H=null!=a&&a.type===k&&null==a.key?q(a.props.children):a,f=P(n,d(H)?H:[H],u,t,i,r,o,e,f,c,s),h.base=u.__e,u.__u&=-161,h.__h.length&&e.push(h),b&&(h.__E=h.__=null)}catch(n){if(u.__v=null,c||null!=o)if(n.then){for(u.__u|=c?160:128;f&&8==f.nodeType&&f.nextSibling;)f=f.nextSibling;o[o.indexOf(f)]=null,u.__e=f}else{for(L=o.length;L--;)g(o[L]);N(u)}else u.__e=t.__e,u.__k=t.__k,n.then||N(u);l.__e(n,u,t)}else null==o&&u.__v==t.__v?(u.__k=t.__k,u.__e=t.__e):f=u.__e=B(t.__e,u,t,i,r,o,e,c,s);return(a=l.diffed)&&a(u),128&u.__u?void 0:f}function N(n){n&&(n.__c&&(n.__c.__e=!0),n.__k&&n.__k.some(N))}function V(n,u,t){for(var i=0;i<t.length;i++)D(t[i],t[++i],t[++i]);l.__c&&l.__c(u,n),n.some(function(u){try{n=u.__h,u.__h=[],n.some(function(n){n.call(u)})}catch(n){l.__e(n,u.__v)}})}function q(n){return\"object\"!=typeof n||null==n||n.__b>0?n:d(n)?n.map(q):w({},n)}function B(u,t,i,r,o,e,f,c,s){var a,h,v,y,w,_,m,b=i.props||p,k=t.props,x=t.type;if(\"svg\"==x?o=\"http://www.w3.org/2000/svg\":\"math\"==x?o=\"http://www.w3.org/1998/Math/MathML\":o||(o=\"http://www.w3.org/1999/xhtml\"),null!=e)for(a=0;a<e.length;a++)if((w=e[a])&&\"setAttribute\"in w==!!x&&(x?w.localName==x:3==w.nodeType)){u=w,e[a]=null;break}if(null==u){if(null==x)return document.createTextNode(k);u=document.createElementNS(o,x,k.is&&k),c&&(l.__m&&l.__m(t,e),c=!1),e=null}if(null==x)b===k||c&&u.data==k||(u.data=k);else{if(e=e&&n.call(u.childNodes),!c&&null!=e)for(b={},a=0;a<u.attributes.length;a++)b[(w=u.attributes[a]).name]=w.value;for(a in b)w=b[a],\"dangerouslySetInnerHTML\"==a?v=w:\"children\"==a||a in k||\"value\"==a&&\"defaultValue\"in k||\"checked\"==a&&\"defaultChecked\"in k||F(u,a,null,w,o);for(a in k)w=k[a],\"children\"==a?y=w:\"dangerouslySetInnerHTML\"==a?h=w:\"value\"==a?_=w:\"checked\"==a?m=w:c&&\"function\"!=typeof w||b[a]===w||F(u,a,w,b[a],o);if(h)c||v&&(h.__html==v.__html||h.__html==u.innerHTML)||(u.innerHTML=h.__html),t.__k=[];else if(v&&(u.innerHTML=\"\"),P(\"template\"==t.type?u.content:u,d(y)?y:[y],t,i,r,\"foreignObject\"==x?\"http://www.w3.org/1999/xhtml\":o,e,f,e?e[0]:i.__k&&S(i,0),c,s),null!=e)for(a=e.length;a--;)g(e[a]);c||(a=\"value\",\"progress\"==x&&null==_?u.removeAttribute(\"value\"):null!=_&&(_!==u[a]||\"progress\"==x&&!_||\"option\"==x&&_!=b[a])&&F(u,a,_,b[a],o),a=\"checked\",null!=m&&m!=u[a]&&F(u,a,m,b[a],o))}return u}function D(n,u,t){try{if(\"function\"==typeof n){var i=\"function\"==typeof n.__u;i&&n.__u(),i&&null==u||(n.__u=n(u))}else n.current=u}catch(n){l.__e(n,t)}}function E(n,u,t){var i,r;if(l.unmount&&l.unmount(n),(i=n.ref)&&(i.current&&i.current!=n.__e||D(i,null,u)),null!=(i=n.__c)){if(i.componentWillUnmount)try{i.componentWillUnmount()}catch(n){l.__e(n,u)}i.base=i.__P=null}if(i=n.__k)for(r=0;r<i.length;r++)i[r]&&E(i[r],u,t||\"function\"!=typeof n.type);t||g(n.__e),n.__c=n.__=n.__e=void 0}function G(n,l,u){return this.constructor(n,u)}function J(u,t,i){var r,o,e,f;t==document&&(t=document.documentElement),l.__&&l.__(u,t),o=(r=\"function\"==typeof i)?null:i&&i.__k||t.__k,e=[],f=[],z(t,u=(!r&&i||t).__k=_(k,null,[u]),o||p,p,t.namespaceURI,!r&&i?[i]:o?null:t.firstChild?n.call(t.childNodes):null,e,!r&&i?i:o?o.__e:t.firstChild,r,f),V(e,u,f)}function K(n,l){J(n,l,K)}function Q(l,u,t){var i,r,o,e,f=w({},l.props);for(o in l.type&&l.type.defaultProps&&(e=l.type.defaultProps),u)\"key\"==o?i=u[o]:\"ref\"==o?r=u[o]:f[o]=void 0===u[o]&&null!=e?e[o]:u[o];return arguments.length>2&&(f.children=arguments.length>3?n.call(arguments,2):t),m(l.type,f,i||l.key,r||l.ref,null)}function R(n){function l(n){var u,t;return this.getChildContext||(u=new Set,(t={})[l.__c]=this,this.getChildContext=function(){return t},this.componentWillUnmount=function(){u=null},this.shouldComponentUpdate=function(n){this.props.value!=n.value&&u.forEach(function(n){n.__e=!0,$(n)})},this.sub=function(n){u.add(n);var l=n.componentWillUnmount;n.componentWillUnmount=function(){u&&u.delete(n),l&&l.call(n)}}),n.children}return l.__c=\"__cC\"+h++,l.__=n,l.Provider=l.__l=(l.Consumer=function(n,l){return n.children(l)}).contextType=l,l}n=v.slice,l={__e:function(n,l,u,t){for(var i,r,o;l=l.__;)if((i=l.__c)&&!i.__)try{if((r=i.constructor)&&null!=r.getDerivedStateFromError&&(i.setState(r.getDerivedStateFromError(n)),o=i.__d),null!=i.componentDidCatch&&(i.componentDidCatch(n,t||{}),o=i.__d),o)return i.__E=i}catch(l){n=l}throw n}},u=0,t=function(n){return null!=n&&void 0===n.constructor},x.prototype.setState=function(n,l){var u;u=null!=this.__s&&this.__s!=this.state?this.__s:this.__s=w({},this.state),\"function\"==typeof n&&(n=n(w({},u),this.props)),n&&w(u,n),null!=n&&this.__v&&(l&&this._sb.push(l),$(this))},x.prototype.forceUpdate=function(n){this.__v&&(this.__e=!0,n&&this.__h.push(n),$(this))},x.prototype.render=k,i=[],o=\"function\"==typeof Promise?Promise.prototype.then.bind(Promise.resolve()):setTimeout,e=function(n,l){return n.__v.__b-l.__v.__b},I.__r=0,f=/(PointerCapture)$|Capture$/i,c=0,s=O(!1),a=O(!0),h=0;export{x as Component,k as Fragment,Q as cloneElement,R as createContext,_ as createElement,b as createRef,_ as h,K as hydrate,t as isValidElement,l as options,J as render,L as toChildArray};\n//# sourceMappingURL=preact.module.js.map\n","/**\n * Check if an object is a DOM element. Duck-typing based on `nodeType`.\n */\nexport default function isDOMElement(obj) {\n  if (typeof obj !== 'object' || obj === null) return false;\n  if (!('nodeType' in obj)) return false;\n  return obj.nodeType === Node.ELEMENT_NODE;\n}","import isDOMElement from \"./isDOMElement.js\";\nfunction findDOMElement(element, context) {\n  if (context === void 0) {\n    context = document;\n  }\n  if (typeof element === 'string') {\n    return context.querySelector(element);\n  }\n  if (isDOMElement(element)) {\n    return element;\n  }\n  return null;\n}\nexport default findDOMElement;","/**\n * Get the declared text direction for an element.\n */\n\nfunction getTextDirection(element) {\n  var _element;\n  // There is another way to determine text direction using getComputedStyle(), as done here:\n  // https://github.com/pencil-js/text-direction/blob/2a235ce95089b3185acec3b51313cbba921b3811/text-direction.js\n  //\n  // We do not use that approach because we are interested specifically in the _declared_ text direction.\n  // If no text direction is declared, we have to provide our own explicit text direction so our\n  // bidirectional CSS style sheets work.\n  while (element && !element.dir) {\n    // eslint-disable-next-line no-param-reassign\n    element = element.parentNode;\n  }\n  return (_element = element) == null ? void 0 : _element.dir;\n}\nexport default getTextDirection;","/* eslint-disable class-methods-use-this */\n\n/**\n * Core plugin logic that all plugins share.\n *\n * BasePlugin does not contain DOM rendering so it can be used for plugins\n * without a user interface.\n *\n * See `Plugin` for the extended version with Preact rendering for interfaces.\n */\n\nimport Translator from '@uppy/utils/lib/Translator';\n\n/**\n * DefinePluginOpts marks all of the passed AlwaysDefinedKeys as “required” or “always defined”.\n */\n\nexport default class BasePlugin {\n  constructor(uppy, opts) {\n    this.uppy = uppy;\n    this.opts = opts != null ? opts : {};\n  }\n  getPluginState() {\n    const {\n      plugins\n    } = this.uppy.getState();\n    return (plugins == null ? void 0 : plugins[this.id]) || {};\n  }\n  setPluginState(update) {\n    const {\n      plugins\n    } = this.uppy.getState();\n    this.uppy.setState({\n      plugins: {\n        ...plugins,\n        [this.id]: {\n          ...plugins[this.id],\n          ...update\n        }\n      }\n    });\n  }\n  setOptions(newOpts) {\n    this.opts = {\n      ...this.opts,\n      ...newOpts\n    };\n    this.setPluginState(undefined); // so that UI re-renders with new options\n    this.i18nInit();\n  }\n  i18nInit() {\n    const translator = new Translator([this.defaultLocale, this.uppy.locale, this.opts.locale]);\n    this.i18n = translator.translate.bind(translator);\n    this.i18nArray = translator.translateArray.bind(translator);\n    this.setPluginState(undefined); // so that UI re-renders and we see the updated locale\n  }\n\n  /**\n   * Extendable methods\n   * ==================\n   * These methods are here to serve as an overview of the extendable methods as well as\n   * making them not conditional in use, such as `if (this.afterUpdate)`.\n   */\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  addTarget(plugin) {\n    throw new Error(\"Extend the addTarget method to add your plugin to another plugin's target\");\n  }\n  install() {}\n  uninstall() {}\n\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  update(state) {}\n\n  // Called after every state update, after everything's mounted. Debounced.\n  afterUpdate() {}\n}","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\n/* eslint-disable class-methods-use-this */\nimport { render } from 'preact';\nimport findDOMElement from '@uppy/utils/lib/findDOMElement';\nimport getTextDirection from '@uppy/utils/lib/getTextDirection';\nimport BasePlugin from \"./BasePlugin.js\";\n/**\n * Defer a frequent call to the microtask queue.\n */\nfunction debounce(fn) {\n  let calling = null;\n  let latestArgs;\n  return function () {\n    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n      args[_key] = arguments[_key];\n    }\n    latestArgs = args;\n    if (!calling) {\n      calling = Promise.resolve().then(() => {\n        calling = null;\n        // At this point `args` may be different from the most\n        // recent state, if multiple calls happened since this task\n        // was queued. So we use the `latestArgs`, which definitely\n        // is the most recent call.\n        return fn(...latestArgs);\n      });\n    }\n    return calling;\n  };\n}\n\n/**\n * UIPlugin is the extended version of BasePlugin to incorporate rendering with Preact.\n * Use this for plugins that need a user interface.\n *\n * For plugins without an user interface, see BasePlugin.\n */\nvar _updateUI = /*#__PURE__*/_classPrivateFieldLooseKey(\"updateUI\");\nclass UIPlugin extends BasePlugin {\n  constructor() {\n    super(...arguments);\n    Object.defineProperty(this, _updateUI, {\n      writable: true,\n      value: void 0\n    });\n  }\n  getTargetPlugin(target // eslint-disable-line no-use-before-define\n  ) {\n    let targetPlugin;\n    if (typeof (target == null ? void 0 : target.addTarget) === 'function') {\n      // Targeting a plugin *instance*\n      targetPlugin = target;\n      if (!(targetPlugin instanceof UIPlugin)) {\n        // eslint-disable-next-line no-console\n        console.warn(new Error('The provided plugin is not an instance of UIPlugin. This is an indication of a bug with the way Uppy is bundled.', {\n          cause: {\n            targetPlugin,\n            UIPlugin\n          }\n        }));\n      }\n    } else if (typeof target === 'function') {\n      // Targeting a plugin type\n      const Target = target;\n      // Find the target plugin instance.\n      this.uppy.iteratePlugins(p => {\n        if (p instanceof Target) {\n          targetPlugin = p;\n        }\n      });\n    }\n    return targetPlugin;\n  }\n\n  /**\n   * Check if supplied `target` is a DOM element or an `object`.\n   * If it’s an object — target is a plugin, and we search `plugins`\n   * for a plugin with same name and return its target.\n   */\n  mount(target,\n  // eslint-disable-line no-use-before-define\n  plugin) {\n    const callerPluginName = plugin.id;\n    const targetElement = findDOMElement(target);\n    if (targetElement) {\n      this.isTargetDOMEl = true;\n      // When target is <body> with a single <div> element,\n      // Preact thinks it’s the Uppy root element in there when doing a diff,\n      // and destroys it. So we are creating a fragment (could be empty div)\n      const uppyRootElement = document.createElement('div');\n      uppyRootElement.classList.add('uppy-Root');\n\n      // API for plugins that require a synchronous rerender.\n      _classPrivateFieldLooseBase(this, _updateUI)[_updateUI] = debounce(state => {\n        // plugin could be removed, but this.rerender is debounced below,\n        // so it could still be called even after uppy.removePlugin or uppy.close\n        // hence the check\n        if (!this.uppy.getPlugin(this.id)) return;\n        render(this.render(state), uppyRootElement);\n        this.afterUpdate();\n      });\n      this.uppy.log(`Installing ${callerPluginName} to a DOM element '${target}'`);\n      if (this.opts.replaceTargetContent) {\n        // Doing render(h(null), targetElement), which should have been\n        // a better way, since because the component might need to do additional cleanup when it is removed,\n        // stopped working — Preact just adds null into target, not replacing\n        targetElement.innerHTML = '';\n      }\n      render(this.render(this.uppy.getState()), uppyRootElement);\n      this.el = uppyRootElement;\n      targetElement.appendChild(uppyRootElement);\n\n      // Set the text direction if the page has not defined one.\n      uppyRootElement.dir = this.opts.direction || getTextDirection(uppyRootElement) || 'ltr';\n      this.onMount();\n      return this.el;\n    }\n    const targetPlugin = this.getTargetPlugin(target);\n    if (targetPlugin) {\n      this.uppy.log(`Installing ${callerPluginName} to ${targetPlugin.id}`);\n      this.parent = targetPlugin;\n      this.el = targetPlugin.addTarget(plugin);\n      this.onMount();\n      return this.el;\n    }\n    this.uppy.log(`Not installing ${callerPluginName}`);\n    let message = `Invalid target option given to ${callerPluginName}.`;\n    if (typeof target === 'function') {\n      message += ' The given target is not a Plugin class. ' + \"Please check that you're not specifying a React Component instead of a plugin. \" + 'If you are using @uppy/* packages directly, make sure you have only 1 version of @uppy/core installed: ' + 'run `npm ls @uppy/core` on the command line and verify that all the versions match and are deduped correctly.';\n    } else {\n      message += 'If you meant to target an HTML element, please make sure that the element exists. ' + 'Check that the <script> tag initializing Uppy is right before the closing </body> tag at the end of the page. ' + '(see https://github.com/transloadit/uppy/issues/1042)\\n\\n' + 'If you meant to target a plugin, please confirm that your `import` statements or `require` calls are correct.';\n    }\n    throw new Error(message);\n  }\n\n  /**\n   * Called when plugin is mounted, whether in DOM or into another plugin.\n   * Needed because sometimes plugins are mounted separately/after `install`,\n   * so this.el and this.parent might not be available in `install`.\n   * This is the case with @uppy/react plugins, for example.\n   */\n  // eslint-disable-next-line @typescript-eslint/no-unused-vars\n  render(state) {\n    throw new Error('Extend the render method to add your plugin to a DOM element');\n  }\n  update(state) {\n    if (this.el != null) {\n      var _classPrivateFieldLoo, _classPrivateFieldLoo2;\n      (_classPrivateFieldLoo = (_classPrivateFieldLoo2 = _classPrivateFieldLooseBase(this, _updateUI))[_updateUI]) == null || _classPrivateFieldLoo.call(_classPrivateFieldLoo2, state);\n    }\n  }\n  unmount() {\n    if (this.isTargetDOMEl) {\n      var _this$el;\n      (_this$el = this.el) == null || _this$el.remove();\n    }\n    this.onUnmount();\n  }\n  onMount() {}\n  onUnmount() {}\n}\nexport default UIPlugin;","/**\n * Low-pass filter using Exponential Moving Averages (aka exponential smoothing)\n * Filters a sequence of values by updating the mixing the previous output value\n * with the new input using the exponential window function\n *\n * @param newValue the n-th value of the sequence\n * @param previousSmoothedValue the exponential average of the first n-1 values\n * @param halfLife value of `dt` to move the smoothed value halfway between `previousFilteredValue` and `newValue`\n * @param dt time elapsed between adding the (n-1)th and the n-th values\n * @returns the exponential average of the first n values\n */\nexport default function emaFilter(newValue, previousSmoothedValue, halfLife, dt) {\n  if (halfLife === 0 || newValue === previousSmoothedValue) return newValue;\n  if (dt === 0) return previousSmoothedValue;\n  return newValue + (previousSmoothedValue - newValue) * 2 ** (-dt / halfLife);\n}","export default {\n  STATE_ERROR: 'error',\n  STATE_WAITING: 'waiting',\n  STATE_PREPROCESSING: 'preprocessing',\n  STATE_UPLOADING: 'uploading',\n  STATE_POSTPROCESSING: 'postprocessing',\n  STATE_COMPLETE: 'complete'\n};","export default function calculateProcessingProgress(files) {\n  const values = [];\n  let mode = 'indeterminate';\n  let message;\n  for (const {\n    progress\n  } of Object.values(files)) {\n    const {\n      preprocess,\n      postprocess\n    } = progress;\n    // In the future we should probably do this differently. For now we'll take the\n    // mode and message from the first file…\n    if (message == null && (preprocess || postprocess)) {\n      ;\n      ({\n        mode,\n        message\n      } = preprocess || postprocess);\n    }\n    if ((preprocess == null ? void 0 : preprocess.mode) === 'determinate') values.push(preprocess.value);\n    if ((postprocess == null ? void 0 : postprocess.mode) === 'determinate') values.push(postprocess.value);\n  }\n  const value = values.reduce((total, progressValue) => {\n    return total + progressValue / values.length;\n  }, 0);\n  return {\n    mode,\n    message,\n    value\n  };\n}","import secondsToTime from \"./secondsToTime.js\";\nexport default function prettyETA(seconds) {\n  const time = secondsToTime(seconds);\n\n  // Only display hours and minutes if they are greater than 0 but always\n  // display minutes if hours is being displayed\n  // Display a leading zero if the there is a preceding unit: 1m 05s, but 5s\n  const hoursStr = time.hours === 0 ? '' : `${time.hours}h`;\n  const minutesStr = time.minutes === 0 ? '' : `${time.hours === 0 ? time.minutes : ` ${time.minutes.toString(10).padStart(2, '0')}`}m`;\n  const secondsStr = time.hours !== 0 ? '' : `${time.minutes === 0 ? time.seconds : ` ${time.seconds.toString(10).padStart(2, '0')}`}s`;\n  return `${hoursStr}${minutesStr}${secondsStr}`;\n}","export default function secondsToTime(rawSeconds) {\n  const hours = Math.floor(rawSeconds / 3600) % 24;\n  const minutes = Math.floor(rawSeconds / 60) % 60;\n  const seconds = Math.floor(rawSeconds % 60);\n  return {\n    hours,\n    minutes,\n    seconds\n  };\n}","import { h } from 'preact';\nimport classNames from 'classnames';\nimport prettierBytes from '@transloadit/prettier-bytes';\nimport prettyETA from '@uppy/utils/lib/prettyETA';\nimport statusBarStates from \"./StatusBarStates.js\";\nconst DOT = `\\u00B7`;\nconst renderDot = () => ` ${DOT} `;\nfunction UploadBtn(props) {\n  const {\n    newFiles,\n    isUploadStarted,\n    recoveredState,\n    i18n,\n    uploadState,\n    isSomeGhost,\n    startUpload\n  } = props;\n  const uploadBtnClassNames = classNames('uppy-u-reset', 'uppy-c-btn', 'uppy-StatusBar-actionBtn', 'uppy-StatusBar-actionBtn--upload', {\n    'uppy-c-btn-primary': uploadState === statusBarStates.STATE_WAITING\n  }, {\n    'uppy-StatusBar-actionBtn--disabled': isSomeGhost\n  });\n  const uploadBtnText = newFiles && isUploadStarted && !recoveredState ? i18n('uploadXNewFiles', {\n    smart_count: newFiles\n  }) : i18n('uploadXFiles', {\n    smart_count: newFiles\n  });\n  return h(\"button\", {\n    type: \"button\",\n    className: uploadBtnClassNames,\n    \"aria-label\": i18n('uploadXFiles', {\n      smart_count: newFiles\n    }),\n    onClick: startUpload,\n    disabled: isSomeGhost,\n    \"data-uppy-super-focusable\": true\n  }, uploadBtnText);\n}\nfunction RetryBtn(props) {\n  const {\n    i18n,\n    uppy\n  } = props;\n  return h(\"button\", {\n    type: \"button\",\n    className: \"uppy-u-reset uppy-c-btn uppy-StatusBar-actionBtn uppy-StatusBar-actionBtn--retry\",\n    \"aria-label\": i18n('retryUpload'),\n    onClick: () => uppy.retryAll().catch(() => {\n      /* Error reported and handled via an event */\n    }),\n    \"data-uppy-super-focusable\": true,\n    \"data-cy\": \"retry\"\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    width: \"8\",\n    height: \"10\",\n    viewBox: \"0 0 8 10\"\n  }, h(\"path\", {\n    d: \"M4 2.408a2.75 2.75 0 1 0 2.75 2.75.626.626 0 0 1 1.25.018v.023a4 4 0 1 1-4-4.041V.25a.25.25 0 0 1 .389-.208l2.299 1.533a.25.25 0 0 1 0 .416l-2.3 1.533A.25.25 0 0 1 4 3.316v-.908z\"\n  })), i18n('retry'));\n}\nfunction CancelBtn(props) {\n  const {\n    i18n,\n    uppy\n  } = props;\n  return h(\"button\", {\n    type: \"button\",\n    className: \"uppy-u-reset uppy-StatusBar-actionCircleBtn\",\n    title: i18n('cancel'),\n    \"aria-label\": i18n('cancel'),\n    onClick: () => uppy.cancelAll(),\n    \"data-cy\": \"cancel\",\n    \"data-uppy-super-focusable\": true\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    width: \"16\",\n    height: \"16\",\n    viewBox: \"0 0 16 16\"\n  }, h(\"g\", {\n    fill: \"none\",\n    fillRule: \"evenodd\"\n  }, h(\"circle\", {\n    fill: \"#888\",\n    cx: \"8\",\n    cy: \"8\",\n    r: \"8\"\n  }), h(\"path\", {\n    fill: \"#FFF\",\n    d: \"M9.283 8l2.567 2.567-1.283 1.283L8 9.283 5.433 11.85 4.15 10.567 6.717 8 4.15 5.433 5.433 4.15 8 6.717l2.567-2.567 1.283 1.283z\"\n  }))));\n}\nfunction PauseResumeButton(props) {\n  const {\n    isAllPaused,\n    i18n,\n    isAllComplete,\n    resumableUploads,\n    uppy\n  } = props;\n  const title = isAllPaused ? i18n('resume') : i18n('pause');\n  function togglePauseResume() {\n    if (isAllComplete) return;\n    if (!resumableUploads) {\n      uppy.cancelAll();\n      return;\n    }\n    if (isAllPaused) {\n      uppy.resumeAll();\n      return;\n    }\n    uppy.pauseAll();\n  }\n  return h(\"button\", {\n    title: title,\n    \"aria-label\": title,\n    className: \"uppy-u-reset uppy-StatusBar-actionCircleBtn\",\n    type: \"button\",\n    onClick: togglePauseResume,\n    \"data-cy\": \"togglePauseResume\",\n    \"data-uppy-super-focusable\": true\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    width: \"16\",\n    height: \"16\",\n    viewBox: \"0 0 16 16\"\n  }, h(\"g\", {\n    fill: \"none\",\n    fillRule: \"evenodd\"\n  }, h(\"circle\", {\n    fill: \"#888\",\n    cx: \"8\",\n    cy: \"8\",\n    r: \"8\"\n  }), h(\"path\", {\n    fill: \"#FFF\",\n    d: isAllPaused ? 'M6 4.25L11.5 8 6 11.75z' : 'M5 4.5h2v7H5v-7zm4 0h2v7H9v-7z'\n  }))));\n}\nfunction DoneBtn(props) {\n  const {\n    i18n,\n    doneButtonHandler\n  } = props;\n  return h(\"button\", {\n    type: \"button\",\n    className: \"uppy-u-reset uppy-c-btn uppy-StatusBar-actionBtn uppy-StatusBar-actionBtn--done\",\n    onClick: doneButtonHandler,\n    \"data-uppy-super-focusable\": true\n  }, i18n('done'));\n}\nfunction LoadingSpinner() {\n  return h(\"svg\", {\n    className: \"uppy-StatusBar-spinner\",\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    width: \"14\",\n    height: \"14\"\n  }, h(\"path\", {\n    d: \"M13.983 6.547c-.12-2.509-1.64-4.893-3.939-5.936-2.48-1.127-5.488-.656-7.556 1.094C.524 3.367-.398 6.048.162 8.562c.556 2.495 2.46 4.52 4.94 5.183 2.932.784 5.61-.602 7.256-3.015-1.493 1.993-3.745 3.309-6.298 2.868-2.514-.434-4.578-2.349-5.153-4.84a6.226 6.226 0 0 1 2.98-6.778C6.34.586 9.74 1.1 11.373 3.493c.407.596.693 1.282.842 1.988.127.598.073 1.197.161 1.794.078.525.543 1.257 1.15.864.525-.341.49-1.05.456-1.592-.007-.15.02.3 0 0\",\n    fillRule: \"evenodd\"\n  }));\n}\nfunction ProgressBarProcessing(props) {\n  const {\n    progress\n  } = props;\n  const {\n    value,\n    mode,\n    message\n  } = progress;\n  const dot = `\\u00B7`;\n  return h(\"div\", {\n    className: \"uppy-StatusBar-content\"\n  }, h(LoadingSpinner, null), mode === 'determinate' ? `${Math.round(value * 100)}% ${dot} ` : '', message);\n}\nfunction ProgressDetails(props) {\n  const {\n    numUploads,\n    complete,\n    totalUploadedSize,\n    totalSize,\n    totalETA,\n    i18n\n  } = props;\n  const ifShowFilesUploadedOfTotal = numUploads > 1;\n  return h(\"div\", {\n    className: \"uppy-StatusBar-statusSecondary\"\n  }, ifShowFilesUploadedOfTotal && i18n('filesUploadedOfTotal', {\n    complete,\n    smart_count: numUploads\n  }), h(\"span\", {\n    className: \"uppy-StatusBar-additionalInfo\"\n  }, ifShowFilesUploadedOfTotal && renderDot(), i18n('dataUploadedOfTotal', {\n    complete: prettierBytes(totalUploadedSize),\n    total: prettierBytes(totalSize)\n  }), renderDot(), i18n('xTimeLeft', {\n    time: prettyETA(totalETA)\n  })));\n}\nfunction FileUploadCount(props) {\n  const {\n    i18n,\n    complete,\n    numUploads\n  } = props;\n  return h(\"div\", {\n    className: \"uppy-StatusBar-statusSecondary\"\n  }, i18n('filesUploadedOfTotal', {\n    complete,\n    smart_count: numUploads\n  }));\n}\nfunction UploadNewlyAddedFiles(props) {\n  const {\n    i18n,\n    newFiles,\n    startUpload\n  } = props;\n  const uploadBtnClassNames = classNames('uppy-u-reset', 'uppy-c-btn', 'uppy-StatusBar-actionBtn', 'uppy-StatusBar-actionBtn--uploadNewlyAdded');\n  return h(\"div\", {\n    className: \"uppy-StatusBar-statusSecondary\"\n  }, h(\"div\", {\n    className: \"uppy-StatusBar-statusSecondaryHint\"\n  }, i18n('xMoreFilesAdded', {\n    smart_count: newFiles\n  })), h(\"button\", {\n    type: \"button\",\n    className: uploadBtnClassNames,\n    \"aria-label\": i18n('uploadXFiles', {\n      smart_count: newFiles\n    }),\n    onClick: startUpload\n  }, i18n('upload')));\n}\nfunction ProgressBarUploading(props) {\n  const {\n    i18n,\n    supportsUploadProgress,\n    totalProgress,\n    showProgressDetails,\n    isUploadStarted,\n    isAllComplete,\n    isAllPaused,\n    newFiles,\n    numUploads,\n    complete,\n    totalUploadedSize,\n    totalSize,\n    totalETA,\n    startUpload\n  } = props;\n  const showUploadNewlyAddedFiles = newFiles && isUploadStarted;\n  if (!isUploadStarted || isAllComplete) {\n    return null;\n  }\n  const title = isAllPaused ? i18n('paused') : i18n('uploading');\n  function renderProgressDetails() {\n    if (!isAllPaused && !showUploadNewlyAddedFiles && showProgressDetails) {\n      if (supportsUploadProgress) {\n        return h(ProgressDetails, {\n          numUploads: numUploads,\n          complete: complete,\n          totalUploadedSize: totalUploadedSize,\n          totalSize: totalSize,\n          totalETA: totalETA,\n          i18n: i18n\n        });\n      }\n      return h(FileUploadCount, {\n        i18n: i18n,\n        complete: complete,\n        numUploads: numUploads\n      });\n    }\n    return null;\n  }\n  return h(\"div\", {\n    className: \"uppy-StatusBar-content\",\n    \"aria-label\": title,\n    title: title\n  }, !isAllPaused ? h(LoadingSpinner, null) : null, h(\"div\", {\n    className: \"uppy-StatusBar-status\"\n  }, h(\"div\", {\n    className: \"uppy-StatusBar-statusPrimary\"\n  }, supportsUploadProgress ? `${title}: ${totalProgress}%` : title), renderProgressDetails(), showUploadNewlyAddedFiles ? h(UploadNewlyAddedFiles, {\n    i18n: i18n,\n    newFiles: newFiles,\n    startUpload: startUpload\n  }) : null));\n}\nfunction ProgressBarComplete(props) {\n  const {\n    i18n\n  } = props;\n  return h(\"div\", {\n    className: \"uppy-StatusBar-content\",\n    role: \"status\",\n    title: i18n('complete')\n  }, h(\"div\", {\n    className: \"uppy-StatusBar-status\"\n  }, h(\"div\", {\n    className: \"uppy-StatusBar-statusPrimary\"\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-StatusBar-statusIndicator uppy-c-icon\",\n    width: \"15\",\n    height: \"11\",\n    viewBox: \"0 0 15 11\"\n  }, h(\"path\", {\n    d: \"M.414 5.843L1.627 4.63l3.472 3.472L13.202 0l1.212 1.213L5.1 10.528z\"\n  })), i18n('complete'))));\n}\nfunction ProgressBarError(props) {\n  const {\n    error,\n    i18n,\n    complete,\n    numUploads\n  } = props;\n  function displayErrorAlert() {\n    const errorMessage = `${i18n('uploadFailed')} \\n\\n ${error}`;\n    // eslint-disable-next-line no-alert\n    alert(errorMessage); // TODO: move to custom alert implementation\n  }\n  return h(\"div\", {\n    className: \"uppy-StatusBar-content\",\n    title: i18n('uploadFailed')\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-StatusBar-statusIndicator uppy-c-icon\",\n    width: \"11\",\n    height: \"11\",\n    viewBox: \"0 0 11 11\"\n  }, h(\"path\", {\n    d: \"M4.278 5.5L0 1.222 1.222 0 5.5 4.278 9.778 0 11 1.222 6.722 5.5 11 9.778 9.778 11 5.5 6.722 1.222 11 0 9.778z\"\n  })), h(\"div\", {\n    className: \"uppy-StatusBar-status\"\n  }, h(\"div\", {\n    className: \"uppy-StatusBar-statusPrimary\"\n  }, i18n('uploadFailed'), h(\"button\", {\n    className: \"uppy-u-reset uppy-StatusBar-details\",\n    \"aria-label\": i18n('showErrorDetails'),\n    \"data-microtip-position\": \"top-right\",\n    \"data-microtip-size\": \"medium\",\n    onClick: displayErrorAlert,\n    type: \"button\"\n  }, \"?\")), h(FileUploadCount, {\n    i18n: i18n,\n    complete: complete,\n    numUploads: numUploads\n  })));\n}\nexport { UploadBtn, RetryBtn, CancelBtn, PauseResumeButton, DoneBtn, LoadingSpinner, ProgressDetails, ProgressBarProcessing, ProgressBarError, ProgressBarUploading, ProgressBarComplete };","import { h } from 'preact';\nimport classNames from 'classnames';\nimport statusBarStates from \"./StatusBarStates.js\";\nimport calculateProcessingProgress from \"./calculateProcessingProgress.js\";\nimport { UploadBtn, RetryBtn, CancelBtn, PauseResumeButton, DoneBtn, ProgressBarProcessing, ProgressBarError, ProgressBarUploading, ProgressBarComplete } from \"./Components.js\";\nconst {\n  STATE_ERROR,\n  STATE_WAITING,\n  STATE_PREPROCESSING,\n  STATE_UPLOADING,\n  STATE_POSTPROCESSING,\n  STATE_COMPLETE\n} = statusBarStates;\n// TODO: rename the function to StatusBarUI on the next major.\nexport default function StatusBar(props) {\n  const {\n    newFiles,\n    allowNewUpload,\n    isUploadInProgress,\n    isAllPaused,\n    resumableUploads,\n    error,\n    hideUploadButton,\n    hidePauseResumeButton,\n    hideCancelButton,\n    hideRetryButton,\n    recoveredState,\n    uploadState,\n    totalProgress,\n    files,\n    supportsUploadProgress,\n    hideAfterFinish,\n    isSomeGhost,\n    doneButtonHandler,\n    isUploadStarted,\n    i18n,\n    startUpload,\n    uppy,\n    isAllComplete,\n    showProgressDetails,\n    numUploads,\n    complete,\n    totalSize,\n    totalETA,\n    totalUploadedSize\n  } = props;\n  function getProgressValue() {\n    switch (uploadState) {\n      case STATE_POSTPROCESSING:\n      case STATE_PREPROCESSING:\n        {\n          const progress = calculateProcessingProgress(files);\n          if (progress.mode === 'determinate') {\n            return progress.value * 100;\n          }\n          return totalProgress;\n        }\n      case STATE_ERROR:\n        {\n          return null;\n        }\n      case STATE_UPLOADING:\n        {\n          if (!supportsUploadProgress) {\n            return null;\n          }\n          return totalProgress;\n        }\n      default:\n        return totalProgress;\n    }\n  }\n  function getIsIndeterminate() {\n    switch (uploadState) {\n      case STATE_POSTPROCESSING:\n      case STATE_PREPROCESSING:\n        {\n          const {\n            mode\n          } = calculateProcessingProgress(files);\n          return mode === 'indeterminate';\n        }\n      case STATE_UPLOADING:\n        {\n          if (!supportsUploadProgress) {\n            return true;\n          }\n          return false;\n        }\n      default:\n        return false;\n    }\n  }\n  function getIsHidden() {\n    if (recoveredState) {\n      return false;\n    }\n    switch (uploadState) {\n      case STATE_WAITING:\n        return hideUploadButton || newFiles === 0;\n      case STATE_COMPLETE:\n        return hideAfterFinish;\n      default:\n        return false;\n    }\n  }\n  const progressValue = getProgressValue();\n  const isHidden = getIsHidden();\n  const width = progressValue != null ? progressValue : 100;\n  const showUploadBtn = !error && newFiles && !isUploadInProgress && !isAllPaused && allowNewUpload && !hideUploadButton;\n  const showCancelBtn = !hideCancelButton && uploadState !== STATE_WAITING && uploadState !== STATE_COMPLETE;\n  const showPauseResumeBtn = resumableUploads && !hidePauseResumeButton && uploadState === STATE_UPLOADING;\n  const showRetryBtn = error && !isAllComplete && !hideRetryButton;\n  const showDoneBtn = doneButtonHandler && uploadState === STATE_COMPLETE;\n  const progressClassNames = classNames('uppy-StatusBar-progress', {\n    'is-indeterminate': getIsIndeterminate()\n  });\n  const statusBarClassNames = classNames('uppy-StatusBar', `is-${uploadState}`, {\n    'has-ghosts': isSomeGhost\n  });\n  return h(\"div\", {\n    className: statusBarClassNames,\n    \"aria-hidden\": isHidden\n  }, h(\"div\", {\n    className: progressClassNames,\n    style: {\n      width: `${width}%`\n    },\n    role: \"progressbar\",\n    \"aria-label\": `${width}%`,\n    \"aria-valuetext\": `${width}%`,\n    \"aria-valuemin\": 0,\n    \"aria-valuemax\": 100,\n    \"aria-valuenow\": progressValue\n  }), (() => {\n    switch (uploadState) {\n      case STATE_PREPROCESSING:\n      case STATE_POSTPROCESSING:\n        return h(ProgressBarProcessing, {\n          progress: calculateProcessingProgress(files)\n        });\n      case STATE_COMPLETE:\n        return h(ProgressBarComplete, {\n          i18n: i18n\n        });\n      case STATE_ERROR:\n        return h(ProgressBarError, {\n          error: error,\n          i18n: i18n,\n          numUploads: numUploads,\n          complete: complete\n        });\n      case STATE_UPLOADING:\n        return h(ProgressBarUploading, {\n          i18n: i18n,\n          supportsUploadProgress: supportsUploadProgress,\n          totalProgress: totalProgress,\n          showProgressDetails: showProgressDetails,\n          isUploadStarted: isUploadStarted,\n          isAllComplete: isAllComplete,\n          isAllPaused: isAllPaused,\n          newFiles: newFiles,\n          numUploads: numUploads,\n          complete: complete,\n          totalUploadedSize: totalUploadedSize,\n          totalSize: totalSize,\n          totalETA: totalETA,\n          startUpload: startUpload\n        });\n      default:\n        return null;\n    }\n  })(), h(\"div\", {\n    className: \"uppy-StatusBar-actions\"\n  }, recoveredState || showUploadBtn ? h(UploadBtn, {\n    newFiles: newFiles,\n    isUploadStarted: isUploadStarted,\n    recoveredState: recoveredState,\n    i18n: i18n,\n    isSomeGhost: isSomeGhost,\n    startUpload: startUpload,\n    uploadState: uploadState\n  }) : null, showRetryBtn ? h(RetryBtn, {\n    i18n: i18n,\n    uppy: uppy\n  }) : null, showPauseResumeBtn ? h(PauseResumeButton, {\n    isAllPaused: isAllPaused,\n    i18n: i18n,\n    isAllComplete: isAllComplete,\n    resumableUploads: resumableUploads,\n    uppy: uppy\n  }) : null, showCancelBtn ? h(CancelBtn, {\n    i18n: i18n,\n    uppy: uppy\n  }) : null, showDoneBtn ? h(DoneBtn, {\n    i18n: i18n,\n    doneButtonHandler: doneButtonHandler\n  }) : null));\n}\nStatusBar.defaultProps = {\n  doneButtonHandler: undefined,\n  hideAfterFinish: false,\n  hideCancelButton: false,\n  hidePauseResumeButton: false,\n  hideRetryButton: false,\n  hideUploadButton: undefined,\n  showProgressDetails: undefined\n};","export default {\n  strings: {\n    // Shown in the status bar while files are being uploaded.\n    uploading: 'Uploading',\n    // Shown in the status bar once all files have been uploaded.\n    complete: 'Complete',\n    // Shown in the status bar if an upload failed.\n    uploadFailed: 'Upload failed',\n    // Shown in the status bar while the upload is paused.\n    paused: 'Paused',\n    // Used as the label for the button that retries an upload.\n    retry: 'Retry',\n    // Used as the label for the button that cancels an upload.\n    cancel: 'Cancel',\n    // Used as the label for the button that pauses an upload.\n    pause: 'Pause',\n    // Used as the label for the button that resumes an upload.\n    resume: 'Resume',\n    // Used as the label for the button that resets the upload state after an upload\n    done: 'Done',\n    // When `showProgressDetails` is set, shows the number of files that have been fully uploaded so far.\n    filesUploadedOfTotal: {\n      0: '%{complete} of %{smart_count} file uploaded',\n      1: '%{complete} of %{smart_count} files uploaded'\n    },\n    // When `showProgressDetails` is set, shows the amount of bytes that have been uploaded so far.\n    dataUploadedOfTotal: '%{complete} of %{total}',\n    // When `showProgressDetails` is set, shows an estimation of how long the upload will take to complete.\n    xTimeLeft: '%{time} left',\n    // Used as the label for the button that starts an upload.\n    uploadXFiles: {\n      0: 'Upload %{smart_count} file',\n      1: 'Upload %{smart_count} files'\n    },\n    // Used as the label for the button that starts an upload, if another upload has been started in the past\n    // and new files were added later.\n    uploadXNewFiles: {\n      0: 'Upload +%{smart_count} file',\n      1: 'Upload +%{smart_count} files'\n    },\n    upload: 'Upload',\n    retryUpload: 'Retry upload',\n    xMoreFilesAdded: {\n      0: '%{smart_count} more file added',\n      1: '%{smart_count} more files added'\n    },\n    showErrorDetails: 'Show error details'\n  }\n};","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\nimport { UIPlugin } from '@uppy/core';\nimport emaFilter from '@uppy/utils/lib/emaFilter';\nimport getTextDirection from '@uppy/utils/lib/getTextDirection';\nimport statusBarStates from \"./StatusBarStates.js\";\nimport StatusBarUI from \"./StatusBarUI.js\";\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"3.3.3\"\n};\nimport locale from \"./locale.js\";\nconst speedFilterHalfLife = 2000;\nconst ETAFilterHalfLife = 2000;\nfunction getUploadingState(error, isAllComplete, recoveredState, files) {\n  if (error) {\n    return statusBarStates.STATE_ERROR;\n  }\n  if (isAllComplete) {\n    return statusBarStates.STATE_COMPLETE;\n  }\n  if (recoveredState) {\n    return statusBarStates.STATE_WAITING;\n  }\n  let state = statusBarStates.STATE_WAITING;\n  const fileIDs = Object.keys(files);\n  for (let i = 0; i < fileIDs.length; i++) {\n    const {\n      progress\n    } = files[fileIDs[i]];\n    // If ANY files are being uploaded right now, show the uploading state.\n    if (progress.uploadStarted && !progress.uploadComplete) {\n      return statusBarStates.STATE_UPLOADING;\n    }\n    // If files are being preprocessed AND postprocessed at this time, we show the\n    // preprocess state. If any files are being uploaded we show uploading.\n    if (progress.preprocess) {\n      state = statusBarStates.STATE_PREPROCESSING;\n    }\n    // If NO files are being preprocessed or uploaded right now, but some files are\n    // being postprocessed, show the postprocess state.\n    if (progress.postprocess && state !== statusBarStates.STATE_PREPROCESSING) {\n      state = statusBarStates.STATE_POSTPROCESSING;\n    }\n  }\n  return state;\n}\n\n// set default options, must be kept in sync with @uppy/react/src/StatusBar.js\nconst defaultOptions = {\n  target: 'body',\n  hideUploadButton: false,\n  hideRetryButton: false,\n  hidePauseResumeButton: false,\n  hideCancelButton: false,\n  showProgressDetails: false,\n  hideAfterFinish: true,\n  doneButtonHandler: null\n};\n\n/**\n * StatusBar: renders a status bar with upload/pause/resume/cancel/retry buttons,\n * progress percentage and time remaining.\n */\nvar _lastUpdateTime = /*#__PURE__*/_classPrivateFieldLooseKey(\"lastUpdateTime\");\nvar _previousUploadedBytes = /*#__PURE__*/_classPrivateFieldLooseKey(\"previousUploadedBytes\");\nvar _previousSpeed = /*#__PURE__*/_classPrivateFieldLooseKey(\"previousSpeed\");\nvar _previousETA = /*#__PURE__*/_classPrivateFieldLooseKey(\"previousETA\");\nvar _computeSmoothETA = /*#__PURE__*/_classPrivateFieldLooseKey(\"computeSmoothETA\");\nvar _onUploadStart = /*#__PURE__*/_classPrivateFieldLooseKey(\"onUploadStart\");\nexport default class StatusBar extends UIPlugin {\n  constructor(uppy, opts) {\n    super(uppy, {\n      ...defaultOptions,\n      ...opts\n    });\n    Object.defineProperty(this, _computeSmoothETA, {\n      value: _computeSmoothETA2\n    });\n    Object.defineProperty(this, _lastUpdateTime, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _previousUploadedBytes, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _previousSpeed, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _previousETA, {\n      writable: true,\n      value: void 0\n    });\n    this.startUpload = () => {\n      return this.uppy.upload().catch(() => {\n        // Error logged in Core\n      });\n    };\n    Object.defineProperty(this, _onUploadStart, {\n      writable: true,\n      value: () => {\n        const {\n          recoveredState\n        } = this.uppy.getState();\n        _classPrivateFieldLooseBase(this, _previousSpeed)[_previousSpeed] = null;\n        _classPrivateFieldLooseBase(this, _previousETA)[_previousETA] = null;\n        if (recoveredState) {\n          _classPrivateFieldLooseBase(this, _previousUploadedBytes)[_previousUploadedBytes] = Object.values(recoveredState.files).reduce((pv, _ref) => {\n            let {\n              progress\n            } = _ref;\n            return pv + progress.bytesUploaded;\n          }, 0);\n\n          // We don't set `#lastUpdateTime` at this point because the upload won't\n          // actually resume until the user asks for it.\n\n          this.uppy.emit('restore-confirmed');\n          return;\n        }\n        _classPrivateFieldLooseBase(this, _lastUpdateTime)[_lastUpdateTime] = performance.now();\n        _classPrivateFieldLooseBase(this, _previousUploadedBytes)[_previousUploadedBytes] = 0;\n      }\n    });\n    this.id = this.opts.id || 'StatusBar';\n    this.title = 'StatusBar';\n    this.type = 'progressindicator';\n    this.defaultLocale = locale;\n    this.i18nInit();\n    this.render = this.render.bind(this);\n    this.install = this.install.bind(this);\n  }\n  render(state) {\n    const {\n      capabilities,\n      files,\n      allowNewUpload,\n      totalProgress,\n      error,\n      recoveredState\n    } = state;\n    const {\n      newFiles,\n      startedFiles,\n      completeFiles,\n      isUploadStarted,\n      isAllComplete,\n      isAllErrored,\n      isAllPaused,\n      isUploadInProgress,\n      isSomeGhost\n    } = this.uppy.getObjectOfFilesPerState();\n\n    // If some state was recovered, we want to show Upload button/counter\n    // for all the files, because in this case it’s not an Upload button,\n    // but “Confirm Restore Button”\n    const newFilesOrRecovered = recoveredState ? Object.values(files) : newFiles;\n    const resumableUploads = !!capabilities.resumableUploads;\n    const supportsUploadProgress = capabilities.uploadProgress !== false;\n    let totalSize = 0;\n    let totalUploadedSize = 0;\n    startedFiles.forEach(file => {\n      totalSize += file.progress.bytesTotal || 0;\n      totalUploadedSize += file.progress.bytesUploaded || 0;\n    });\n    const totalETA = _classPrivateFieldLooseBase(this, _computeSmoothETA)[_computeSmoothETA]({\n      uploaded: totalUploadedSize,\n      total: totalSize,\n      remaining: totalSize - totalUploadedSize\n    });\n    return StatusBarUI({\n      error,\n      uploadState: getUploadingState(error, isAllComplete, recoveredState, state.files || {}),\n      allowNewUpload,\n      totalProgress,\n      totalSize,\n      totalUploadedSize,\n      isAllComplete: false,\n      isAllPaused,\n      // @ts-expect-error TODO: remove this in 4.x branch\n      isAllErrored,\n      isUploadStarted,\n      isUploadInProgress,\n      isSomeGhost,\n      recoveredState,\n      complete: completeFiles.length,\n      newFiles: newFilesOrRecovered.length,\n      numUploads: startedFiles.length,\n      totalETA,\n      files,\n      i18n: this.i18n,\n      uppy: this.uppy,\n      startUpload: this.startUpload,\n      doneButtonHandler: this.opts.doneButtonHandler,\n      resumableUploads,\n      supportsUploadProgress,\n      showProgressDetails: this.opts.showProgressDetails,\n      hideUploadButton: this.opts.hideUploadButton,\n      hideRetryButton: this.opts.hideRetryButton,\n      hidePauseResumeButton: this.opts.hidePauseResumeButton,\n      hideCancelButton: this.opts.hideCancelButton,\n      hideAfterFinish: this.opts.hideAfterFinish,\n      // ts-expect-error TODO: remove this in 4.x branch\n      isTargetDOMEl: this.isTargetDOMEl\n    });\n  }\n  onMount() {\n    // Set the text direction if the page has not defined one.\n    const element = this.el;\n    const direction = getTextDirection(element);\n    if (!direction) {\n      element.dir = 'ltr';\n    }\n  }\n  install() {\n    const {\n      target\n    } = this.opts;\n    if (target) {\n      this.mount(target, this);\n    }\n    this.uppy.on('upload', _classPrivateFieldLooseBase(this, _onUploadStart)[_onUploadStart]);\n\n    // To cover the use case where the status bar is installed while the upload\n    // has started, we set `lastUpdateTime` right away.\n    _classPrivateFieldLooseBase(this, _lastUpdateTime)[_lastUpdateTime] = performance.now();\n    _classPrivateFieldLooseBase(this, _previousUploadedBytes)[_previousUploadedBytes] = this.uppy.getFiles().reduce((pv, file) => pv + file.progress.bytesUploaded, 0);\n  }\n  uninstall() {\n    this.unmount();\n    this.uppy.off('upload', _classPrivateFieldLooseBase(this, _onUploadStart)[_onUploadStart]);\n  }\n}\nfunction _computeSmoothETA2(totalBytes) {\n  var _classPrivateFieldLoo, _classPrivateFieldLoo2;\n  if (totalBytes.total === 0 || totalBytes.remaining === 0) {\n    return 0;\n  }\n\n  // When state is restored, lastUpdateTime is still nullish at this point.\n  (_classPrivateFieldLoo2 = (_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _lastUpdateTime))[_lastUpdateTime]) != null ? _classPrivateFieldLoo2 : _classPrivateFieldLoo[_lastUpdateTime] = performance.now();\n  const dt = performance.now() - _classPrivateFieldLooseBase(this, _lastUpdateTime)[_lastUpdateTime];\n  if (dt === 0) {\n    var _classPrivateFieldLoo3;\n    return Math.round(((_classPrivateFieldLoo3 = _classPrivateFieldLooseBase(this, _previousETA)[_previousETA]) != null ? _classPrivateFieldLoo3 : 0) / 100) / 10;\n  }\n  const uploadedBytesSinceLastTick = totalBytes.uploaded - _classPrivateFieldLooseBase(this, _previousUploadedBytes)[_previousUploadedBytes];\n  _classPrivateFieldLooseBase(this, _previousUploadedBytes)[_previousUploadedBytes] = totalBytes.uploaded;\n\n  // uploadedBytesSinceLastTick can be negative in some cases (packet loss?)\n  // in which case, we wait for next tick to update ETA.\n  if (uploadedBytesSinceLastTick <= 0) {\n    var _classPrivateFieldLoo4;\n    return Math.round(((_classPrivateFieldLoo4 = _classPrivateFieldLooseBase(this, _previousETA)[_previousETA]) != null ? _classPrivateFieldLoo4 : 0) / 100) / 10;\n  }\n  const currentSpeed = uploadedBytesSinceLastTick / dt;\n  const filteredSpeed = _classPrivateFieldLooseBase(this, _previousSpeed)[_previousSpeed] == null ? currentSpeed : emaFilter(currentSpeed, _classPrivateFieldLooseBase(this, _previousSpeed)[_previousSpeed], speedFilterHalfLife, dt);\n  _classPrivateFieldLooseBase(this, _previousSpeed)[_previousSpeed] = filteredSpeed;\n  const instantETA = totalBytes.remaining / filteredSpeed;\n  const updatedPreviousETA = Math.max(_classPrivateFieldLooseBase(this, _previousETA)[_previousETA] - dt, 0);\n  const filteredETA = _classPrivateFieldLooseBase(this, _previousETA)[_previousETA] == null ? instantETA : emaFilter(instantETA, updatedPreviousETA, ETAFilterHalfLife, dt);\n  _classPrivateFieldLooseBase(this, _previousETA)[_previousETA] = filteredETA;\n  _classPrivateFieldLooseBase(this, _lastUpdateTime)[_lastUpdateTime] = performance.now();\n  return Math.round(filteredETA / 100) / 10;\n}\nStatusBar.VERSION = packageJson.version;","import { h, Component, createRef } from 'preact';\nconst TRANSITION_MS = 300;\nexport default class FadeIn extends Component {\n  constructor() {\n    super(...arguments);\n    this.ref = createRef();\n  }\n  componentWillEnter(callback) {\n    this.ref.current.style.opacity = '1';\n    this.ref.current.style.transform = 'none';\n    setTimeout(callback, TRANSITION_MS);\n  }\n  componentWillLeave(callback) {\n    this.ref.current.style.opacity = '0';\n    this.ref.current.style.transform = 'translateY(350%)';\n    setTimeout(callback, TRANSITION_MS);\n  }\n  render() {\n    const {\n      children\n    } = this.props;\n    return h(\"div\", {\n      className: \"uppy-Informer-animated\",\n      ref: this.ref\n    }, children);\n  }\n}","// INFO: not typing copy pasted libarary code\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck\n/* eslint-disable */\n/**\n * @source https://github.com/developit/preact-transition-group\n */\n\nimport { Component, cloneElement, h, toChildArray } from 'preact';\nfunction assign(obj, props) {\n  return Object.assign(obj, props);\n}\nfunction getKey(vnode, fallback) {\n  var _vnode$key;\n  return (_vnode$key = vnode == null ? void 0 : vnode.key) != null ? _vnode$key : fallback;\n}\nfunction linkRef(component, name) {\n  const cache = component._ptgLinkedRefs || (component._ptgLinkedRefs = {});\n  return cache[name] || (cache[name] = c => {\n    component.refs[name] = c;\n  });\n}\nfunction getChildMapping(children) {\n  const out = {};\n  for (let i = 0; i < children.length; i++) {\n    if (children[i] != null) {\n      const key = getKey(children[i], i.toString(36));\n      out[key] = children[i];\n    }\n  }\n  return out;\n}\nfunction mergeChildMappings(prev, next) {\n  prev = prev || {};\n  next = next || {};\n  const getValueForKey = key => next.hasOwnProperty(key) ? next[key] : prev[key];\n\n  // For each key of `next`, the list of keys to insert before that key in\n  // the combined list\n  const nextKeysPending = {};\n  let pendingKeys = [];\n  for (const prevKey in prev) {\n    if (next.hasOwnProperty(prevKey)) {\n      if (pendingKeys.length) {\n        nextKeysPending[prevKey] = pendingKeys;\n        pendingKeys = [];\n      }\n    } else {\n      pendingKeys.push(prevKey);\n    }\n  }\n  const childMapping = {};\n  for (const nextKey in next) {\n    if (nextKeysPending.hasOwnProperty(nextKey)) {\n      for (let i = 0; i < nextKeysPending[nextKey].length; i++) {\n        const pendingNextKey = nextKeysPending[nextKey][i];\n        childMapping[nextKeysPending[nextKey][i]] = getValueForKey(pendingNextKey);\n      }\n    }\n    childMapping[nextKey] = getValueForKey(nextKey);\n  }\n\n  // Finally, add the keys which didn't appear before any key in `next`\n  for (let i = 0; i < pendingKeys.length; i++) {\n    childMapping[pendingKeys[i]] = getValueForKey(pendingKeys[i]);\n  }\n  return childMapping;\n}\nconst identity = i => i;\nclass TransitionGroup extends Component {\n  constructor(props, context) {\n    super(props, context);\n    this.refs = {};\n    this.state = {\n      children: getChildMapping(toChildArray(toChildArray(this.props.children)) || [])\n    };\n    this.performAppear = this.performAppear.bind(this);\n    this.performEnter = this.performEnter.bind(this);\n    this.performLeave = this.performLeave.bind(this);\n  }\n  componentWillMount() {\n    this.currentlyTransitioningKeys = {};\n    this.keysToAbortLeave = [];\n    this.keysToEnter = [];\n    this.keysToLeave = [];\n  }\n  componentDidMount() {\n    const initialChildMapping = this.state.children;\n    for (const key in initialChildMapping) {\n      if (initialChildMapping[key]) {\n        // this.performAppear(getKey(initialChildMapping[key], key));\n        this.performAppear(key);\n      }\n    }\n  }\n  componentWillReceiveProps(nextProps) {\n    const nextChildMapping = getChildMapping(toChildArray(nextProps.children) || []);\n    const prevChildMapping = this.state.children;\n    this.setState(prevState => ({\n      children: mergeChildMappings(prevState.children, nextChildMapping)\n    }));\n    let key;\n    for (key in nextChildMapping) {\n      if (nextChildMapping.hasOwnProperty(key)) {\n        const hasPrev = prevChildMapping && prevChildMapping.hasOwnProperty(key);\n        // We should re-enter the component and abort its leave function\n        if (nextChildMapping[key] && hasPrev && this.currentlyTransitioningKeys[key]) {\n          this.keysToEnter.push(key);\n          this.keysToAbortLeave.push(key);\n        } else if (nextChildMapping[key] && !hasPrev && !this.currentlyTransitioningKeys[key]) {\n          this.keysToEnter.push(key);\n        }\n      }\n    }\n    for (key in prevChildMapping) {\n      if (prevChildMapping.hasOwnProperty(key)) {\n        const hasNext = nextChildMapping && nextChildMapping.hasOwnProperty(key);\n        if (prevChildMapping[key] && !hasNext && !this.currentlyTransitioningKeys[key]) {\n          this.keysToLeave.push(key);\n        }\n      }\n    }\n  }\n  componentDidUpdate() {\n    const {\n      keysToEnter\n    } = this;\n    this.keysToEnter = [];\n    keysToEnter.forEach(this.performEnter);\n    const {\n      keysToLeave\n    } = this;\n    this.keysToLeave = [];\n    keysToLeave.forEach(this.performLeave);\n  }\n  _finishAbort(key) {\n    const idx = this.keysToAbortLeave.indexOf(key);\n    if (idx !== -1) {\n      this.keysToAbortLeave.splice(idx, 1);\n    }\n  }\n  performAppear(key) {\n    this.currentlyTransitioningKeys[key] = true;\n    const component = this.refs[key];\n    if (component != null && component.componentWillAppear) {\n      component.componentWillAppear(this._handleDoneAppearing.bind(this, key));\n    } else {\n      this._handleDoneAppearing(key);\n    }\n  }\n  _handleDoneAppearing(key) {\n    const component = this.refs[key];\n    if (component != null && component.componentDidAppear) {\n      component.componentDidAppear();\n    }\n    delete this.currentlyTransitioningKeys[key];\n    this._finishAbort(key);\n    const currentChildMapping = getChildMapping(toChildArray(this.props.children) || []);\n    if (!currentChildMapping || !currentChildMapping.hasOwnProperty(key)) {\n      // This was removed before it had fully appeared. Remove it.\n      this.performLeave(key);\n    }\n  }\n  performEnter(key) {\n    this.currentlyTransitioningKeys[key] = true;\n    const component = this.refs[key];\n    if (component != null && component.componentWillEnter) {\n      component.componentWillEnter(this._handleDoneEntering.bind(this, key));\n    } else {\n      this._handleDoneEntering(key);\n    }\n  }\n  _handleDoneEntering(key) {\n    const component = this.refs[key];\n    if (component != null && component.componentDidEnter) {\n      component.componentDidEnter();\n    }\n    delete this.currentlyTransitioningKeys[key];\n    this._finishAbort(key);\n    const currentChildMapping = getChildMapping(toChildArray(this.props.children) || []);\n    if (!currentChildMapping || !currentChildMapping.hasOwnProperty(key)) {\n      // This was removed before it had fully entered. Remove it.\n      this.performLeave(key);\n    }\n  }\n  performLeave(key) {\n    // If we should immediately abort this leave function,\n    // don't run the leave transition at all.\n    const idx = this.keysToAbortLeave.indexOf(key);\n    if (idx !== -1) {\n      return;\n    }\n    this.currentlyTransitioningKeys[key] = true;\n    const component = this.refs[key];\n    if (component != null && component.componentWillLeave) {\n      component.componentWillLeave(this._handleDoneLeaving.bind(this, key));\n    } else {\n      // Note that this is somewhat dangerous b/c it calls setState()\n      // again, effectively mutating the component before all the work\n      // is done.\n      this._handleDoneLeaving(key);\n    }\n  }\n  _handleDoneLeaving(key) {\n    // If we should immediately abort the leave,\n    // then skip this altogether\n    const idx = this.keysToAbortLeave.indexOf(key);\n    if (idx !== -1) {\n      return;\n    }\n    const component = this.refs[key];\n    if (component != null && component.componentDidLeave) {\n      component.componentDidLeave();\n    }\n    delete this.currentlyTransitioningKeys[key];\n    const currentChildMapping = getChildMapping(toChildArray(this.props.children) || []);\n    if (currentChildMapping && currentChildMapping.hasOwnProperty(key)) {\n      // This entered again before it fully left. Add it again.\n      this.performEnter(key);\n    } else {\n      const children = assign({}, this.state.children);\n      delete children[key];\n      this.setState({\n        children\n      });\n    }\n  }\n  render(_ref, _ref2) {\n    let {\n      childFactory,\n      transitionLeave,\n      transitionName,\n      transitionAppear,\n      transitionEnter,\n      transitionLeaveTimeout,\n      transitionEnterTimeout,\n      transitionAppearTimeout,\n      component,\n      ...props\n    } = _ref;\n    let {\n      children\n    } = _ref2;\n    // TODO: we could get rid of the need for the wrapper node\n    // by cloning a single child\n    const childrenToRender = Object.entries(children).map(_ref3 => {\n      let [key, child] = _ref3;\n      if (!child) return undefined;\n      const ref = linkRef(this, key);\n      return cloneElement(childFactory(child), {\n        ref,\n        key\n      });\n    }).filter(Boolean);\n    return h(component, props, childrenToRender);\n  }\n}\nTransitionGroup.defaultProps = {\n  component: 'span',\n  childFactory: identity\n};\nexport default TransitionGroup;","/* eslint-disable jsx-a11y/no-noninteractive-element-interactions  */\n/* eslint-disable jsx-a11y/click-events-have-key-events */\nimport { h } from 'preact';\nimport { UIPlugin } from '@uppy/core';\nimport FadeIn from \"./FadeIn.js\";\nimport TransitionGroup from \"./TransitionGroup.js\";\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"3.1.0\"\n};\n/**\n * Informer\n * Shows rad message bubbles\n * used like this: `uppy.info('hello world', 'info', 5000)`\n * or for errors: `uppy.info('Error uploading img.jpg', 'error', 5000)`\n *\n */\nexport default class Informer extends UIPlugin {\n  constructor(uppy, opts) {\n    super(uppy, opts);\n    this.render = state => {\n      return h(\"div\", {\n        className: \"uppy uppy-Informer\"\n      }, h(TransitionGroup, null, state.info.map(info => h(FadeIn, {\n        key: info.message\n      }, h(\"p\", {\n        role: \"alert\"\n      }, info.message, ' ', info.details && h(\"span\", {\n        \"aria-label\": info.details,\n        \"data-microtip-position\": \"top-left\",\n        \"data-microtip-size\": \"medium\",\n        role: \"tooltip\",\n        onClick: () =>\n        // eslint-disable-next-line no-alert\n        alert(`${info.message} \\n\\n ${info.details}`)\n      }, \"?\"))))));\n    };\n    this.type = 'progressindicator';\n    this.id = this.opts.id || 'Informer';\n    this.title = 'Informer';\n  }\n  install() {\n    const {\n      target\n    } = this.opts;\n    if (target) {\n      this.mount(target, this);\n    }\n  }\n}\nInformer.VERSION = packageJson.version;","const DATA_URL_PATTERN = /^data:([^/]+\\/[^,;]+(?:[^,]*?))(;base64)?,([\\s\\S]*)$/;\nfunction dataURItoBlob(dataURI, opts, toFile) {\n  var _ref, _opts$mimeType;\n  // get the base64 data\n  const dataURIData = DATA_URL_PATTERN.exec(dataURI);\n\n  // user may provide mime type, if not get it from data URI\n  const mimeType = (_ref = (_opts$mimeType = opts.mimeType) != null ? _opts$mimeType : dataURIData == null ? void 0 : dataURIData[1]) != null ? _ref : 'plain/text';\n  let data; // We add `!` to tell TS we're OK with `data` being not defined when the dataURI is invalid.\n  if ((dataURIData == null ? void 0 : dataURIData[2]) != null) {\n    const binary = atob(decodeURIComponent(dataURIData[3]));\n    const bytes = new Uint8Array(binary.length);\n    for (let i = 0; i < binary.length; i++) {\n      bytes[i] = binary.charCodeAt(i);\n    }\n    data = [bytes];\n  } else if ((dataURIData == null ? void 0 : dataURIData[3]) != null) {\n    data = [decodeURIComponent(dataURIData[3])];\n  }\n\n  // Convert to a File?\n  if (toFile) {\n    return new File(data, opts.name || '', {\n      type: mimeType\n    });\n  }\n  return new Blob(data, {\n    type: mimeType\n  });\n}\nexport default dataURItoBlob;","/**\n * Check if a URL string is an object URL from `URL.createObjectURL`.\n */\nexport default function isObjectURL(url) {\n  return url.startsWith('blob:');\n}","export default function isPreviewSupported(fileType) {\n  if (!fileType) return false;\n  // list of images that browsers can preview\n  return /^[^/]+\\/(jpe?g|gif|png|svg|svg\\+xml|bmp|webp|avif)$/.test(fileType);\n}","function e(e,t,s){return t in e?Object.defineProperty(e,t,{value:s,enumerable:!0,configurable:!0,writable:!0}):e[t]=s,e}var t=\"undefined\"!=typeof self?self:global;const s=\"undefined\"!=typeof navigator,i=s&&\"undefined\"==typeof HTMLImageElement,n=!(\"undefined\"==typeof global||\"undefined\"==typeof process||!process.versions||!process.versions.node),r=t.Buffer,a=!!r,h=e=>void 0!==e;function f(e){return void 0===e||(e instanceof Map?0===e.size:0===Object.values(e).filter(h).length)}function l(e){let t=new Error(e);throw delete t.stack,t}function o(e){let t=function(e){let t=0;return e.ifd0.enabled&&(t+=1024),e.exif.enabled&&(t+=2048),e.makerNote&&(t+=2048),e.userComment&&(t+=1024),e.gps.enabled&&(t+=512),e.interop.enabled&&(t+=100),e.ifd1.enabled&&(t+=1024),t+2048}(e);return e.jfif.enabled&&(t+=50),e.xmp.enabled&&(t+=2e4),e.iptc.enabled&&(t+=14e3),e.icc.enabled&&(t+=6e3),t}const u=e=>String.fromCharCode.apply(null,e),d=\"undefined\"!=typeof TextDecoder?new TextDecoder(\"utf-8\"):void 0;class c{static from(e,t){return e instanceof this&&e.le===t?e:new c(e,void 0,void 0,t)}constructor(e,t=0,s,i){if(\"boolean\"==typeof i&&(this.le=i),Array.isArray(e)&&(e=new Uint8Array(e)),0===e)this.byteOffset=0,this.byteLength=0;else if(e instanceof ArrayBuffer){void 0===s&&(s=e.byteLength-t);let i=new DataView(e,t,s);this._swapDataView(i)}else if(e instanceof Uint8Array||e instanceof DataView||e instanceof c){void 0===s&&(s=e.byteLength-t),(t+=e.byteOffset)+s>e.byteOffset+e.byteLength&&l(\"Creating view outside of available memory in ArrayBuffer\");let i=new DataView(e.buffer,t,s);this._swapDataView(i)}else if(\"number\"==typeof e){let t=new DataView(new ArrayBuffer(e));this._swapDataView(t)}else l(\"Invalid input argument for BufferView: \"+e)}_swapArrayBuffer(e){this._swapDataView(new DataView(e))}_swapBuffer(e){this._swapDataView(new DataView(e.buffer,e.byteOffset,e.byteLength))}_swapDataView(e){this.dataView=e,this.buffer=e.buffer,this.byteOffset=e.byteOffset,this.byteLength=e.byteLength}_lengthToEnd(e){return this.byteLength-e}set(e,t,s=c){return e instanceof DataView||e instanceof c?e=new Uint8Array(e.buffer,e.byteOffset,e.byteLength):e instanceof ArrayBuffer&&(e=new Uint8Array(e)),e instanceof Uint8Array||l(\"BufferView.set(): Invalid data argument.\"),this.toUint8().set(e,t),new s(this,t,e.byteLength)}subarray(e,t){return t=t||this._lengthToEnd(e),new c(this,e,t)}toUint8(){return new Uint8Array(this.buffer,this.byteOffset,this.byteLength)}getUint8Array(e,t){return new Uint8Array(this.buffer,this.byteOffset+e,t)}getString(e=0,t=this.byteLength){let s=this.getUint8Array(e,t);return i=s,d?d.decode(i):a?Buffer.from(i).toString(\"utf8\"):decodeURIComponent(escape(u(i)));var i}getLatin1String(e=0,t=this.byteLength){let s=this.getUint8Array(e,t);return u(s)}getUnicodeString(e=0,t=this.byteLength){const s=[];for(let i=0;i<t&&e+i<this.byteLength;i+=2)s.push(this.getUint16(e+i));return u(s)}getInt8(e){return this.dataView.getInt8(e)}getUint8(e){return this.dataView.getUint8(e)}getInt16(e,t=this.le){return this.dataView.getInt16(e,t)}getInt32(e,t=this.le){return this.dataView.getInt32(e,t)}getUint16(e,t=this.le){return this.dataView.getUint16(e,t)}getUint32(e,t=this.le){return this.dataView.getUint32(e,t)}getFloat32(e,t=this.le){return this.dataView.getFloat32(e,t)}getFloat64(e,t=this.le){return this.dataView.getFloat64(e,t)}getFloat(e,t=this.le){return this.dataView.getFloat32(e,t)}getDouble(e,t=this.le){return this.dataView.getFloat64(e,t)}getUintBytes(e,t,s){switch(t){case 1:return this.getUint8(e,s);case 2:return this.getUint16(e,s);case 4:return this.getUint32(e,s);case 8:return this.getUint64&&this.getUint64(e,s)}}getUint(e,t,s){switch(t){case 8:return this.getUint8(e,s);case 16:return this.getUint16(e,s);case 32:return this.getUint32(e,s);case 64:return this.getUint64&&this.getUint64(e,s)}}toString(e){return this.dataView.toString(e,this.constructor.name)}ensureChunk(){}}function p(e,t){l(`${e} '${t}' was not loaded, try using full build of exifr.`)}class g extends Map{constructor(e){super(),this.kind=e}get(e,t){return this.has(e)||p(this.kind,e),t&&(e in t||function(e,t){l(`Unknown ${e} '${t}'.`)}(this.kind,e),t[e].enabled||p(this.kind,e)),super.get(e)}keyList(){return Array.from(this.keys())}}var m=new g(\"file parser\"),y=new g(\"segment parser\"),b=new g(\"file reader\");let w=t.fetch;function k(e,t){return(i=e).startsWith(\"data:\")||i.length>1e4?v(e,t,\"base64\"):n&&e.includes(\"://\")?O(e,t,\"url\",S):n?v(e,t,\"fs\"):s?O(e,t,\"url\",S):void l(\"Invalid input argument\");var i}async function O(e,t,s,i){return b.has(s)?v(e,t,s):i?async function(e,t){let s=await t(e);return new c(s)}(e,i):void l(`Parser ${s} is not loaded`)}async function v(e,t,s){let i=new(b.get(s))(e,t);return await i.read(),i}const S=e=>w(e).then((e=>e.arrayBuffer())),A=e=>new Promise(((t,s)=>{let i=new FileReader;i.onloadend=()=>t(i.result||new ArrayBuffer),i.onerror=s,i.readAsArrayBuffer(e)}));class U extends Map{get tagKeys(){return this.allKeys||(this.allKeys=Array.from(this.keys())),this.allKeys}get tagValues(){return this.allValues||(this.allValues=Array.from(this.values())),this.allValues}}function x(e,t,s){let i=new U;for(let[e,t]of s)i.set(e,t);if(Array.isArray(t))for(let s of t)e.set(s,i);else e.set(t,i);return i}function C(e,t,s){let i,n=e.get(t);for(i of s)n.set(i[0],i[1])}const B=new Map,V=new Map,I=new Map,L=[\"chunked\",\"firstChunkSize\",\"firstChunkSizeNode\",\"firstChunkSizeBrowser\",\"chunkSize\",\"chunkLimit\"],T=[\"jfif\",\"xmp\",\"icc\",\"iptc\",\"ihdr\"],z=[\"tiff\",...T],P=[\"ifd0\",\"ifd1\",\"exif\",\"gps\",\"interop\"],F=[...z,...P],j=[\"makerNote\",\"userComment\"],E=[\"translateKeys\",\"translateValues\",\"reviveValues\",\"multiSegment\"],M=[...E,\"sanitize\",\"mergeOutput\",\"silentErrors\"];class _{get translate(){return this.translateKeys||this.translateValues||this.reviveValues}}class D extends _{get needed(){return this.enabled||this.deps.size>0}constructor(t,s,i,n){if(super(),e(this,\"enabled\",!1),e(this,\"skip\",new Set),e(this,\"pick\",new Set),e(this,\"deps\",new Set),e(this,\"translateKeys\",!1),e(this,\"translateValues\",!1),e(this,\"reviveValues\",!1),this.key=t,this.enabled=s,this.parse=this.enabled,this.applyInheritables(n),this.canBeFiltered=P.includes(t),this.canBeFiltered&&(this.dict=B.get(t)),void 0!==i)if(Array.isArray(i))this.parse=this.enabled=!0,this.canBeFiltered&&i.length>0&&this.translateTagSet(i,this.pick);else if(\"object\"==typeof i){if(this.enabled=!0,this.parse=!1!==i.parse,this.canBeFiltered){let{pick:e,skip:t}=i;e&&e.length>0&&this.translateTagSet(e,this.pick),t&&t.length>0&&this.translateTagSet(t,this.skip)}this.applyInheritables(i)}else!0===i||!1===i?this.parse=this.enabled=i:l(`Invalid options argument: ${i}`)}applyInheritables(e){let t,s;for(t of E)s=e[t],void 0!==s&&(this[t]=s)}translateTagSet(e,t){if(this.dict){let s,i,{tagKeys:n,tagValues:r}=this.dict;for(s of e)\"string\"==typeof s?(i=r.indexOf(s),-1===i&&(i=n.indexOf(Number(s))),-1!==i&&t.add(Number(n[i]))):t.add(s)}else for(let s of e)t.add(s)}finalizeFilters(){!this.enabled&&this.deps.size>0?(this.enabled=!0,X(this.pick,this.deps)):this.enabled&&this.pick.size>0&&X(this.pick,this.deps)}}var N={jfif:!1,tiff:!0,xmp:!1,icc:!1,iptc:!1,ifd0:!0,ifd1:!1,exif:!0,gps:!0,interop:!1,ihdr:void 0,makerNote:!1,userComment:!1,multiSegment:!1,skip:[],pick:[],translateKeys:!0,translateValues:!0,reviveValues:!0,sanitize:!0,mergeOutput:!0,silentErrors:!0,chunked:!0,firstChunkSize:void 0,firstChunkSizeNode:512,firstChunkSizeBrowser:65536,chunkSize:65536,chunkLimit:5},$=new Map;class R extends _{static useCached(e){let t=$.get(e);return void 0!==t||(t=new this(e),$.set(e,t)),t}constructor(e){super(),!0===e?this.setupFromTrue():void 0===e?this.setupFromUndefined():Array.isArray(e)?this.setupFromArray(e):\"object\"==typeof e?this.setupFromObject(e):l(`Invalid options argument ${e}`),void 0===this.firstChunkSize&&(this.firstChunkSize=s?this.firstChunkSizeBrowser:this.firstChunkSizeNode),this.mergeOutput&&(this.ifd1.enabled=!1),this.filterNestedSegmentTags(),this.traverseTiffDependencyTree(),this.checkLoadedPlugins()}setupFromUndefined(){let e;for(e of L)this[e]=N[e];for(e of M)this[e]=N[e];for(e of j)this[e]=N[e];for(e of F)this[e]=new D(e,N[e],void 0,this)}setupFromTrue(){let e;for(e of L)this[e]=N[e];for(e of M)this[e]=N[e];for(e of j)this[e]=!0;for(e of F)this[e]=new D(e,!0,void 0,this)}setupFromArray(e){let t;for(t of L)this[t]=N[t];for(t of M)this[t]=N[t];for(t of j)this[t]=N[t];for(t of F)this[t]=new D(t,!1,void 0,this);this.setupGlobalFilters(e,void 0,P)}setupFromObject(e){let t;for(t of(P.ifd0=P.ifd0||P.image,P.ifd1=P.ifd1||P.thumbnail,Object.assign(this,e),L))this[t]=W(e[t],N[t]);for(t of M)this[t]=W(e[t],N[t]);for(t of j)this[t]=W(e[t],N[t]);for(t of z)this[t]=new D(t,N[t],e[t],this);for(t of P)this[t]=new D(t,N[t],e[t],this.tiff);this.setupGlobalFilters(e.pick,e.skip,P,F),!0===e.tiff?this.batchEnableWithBool(P,!0):!1===e.tiff?this.batchEnableWithUserValue(P,e):Array.isArray(e.tiff)?this.setupGlobalFilters(e.tiff,void 0,P):\"object\"==typeof e.tiff&&this.setupGlobalFilters(e.tiff.pick,e.tiff.skip,P)}batchEnableWithBool(e,t){for(let s of e)this[s].enabled=t}batchEnableWithUserValue(e,t){for(let s of e){let e=t[s];this[s].enabled=!1!==e&&void 0!==e}}setupGlobalFilters(e,t,s,i=s){if(e&&e.length){for(let e of i)this[e].enabled=!1;let t=K(e,s);for(let[e,s]of t)X(this[e].pick,s),this[e].enabled=!0}else if(t&&t.length){let e=K(t,s);for(let[t,s]of e)X(this[t].skip,s)}}filterNestedSegmentTags(){let{ifd0:e,exif:t,xmp:s,iptc:i,icc:n}=this;this.makerNote?t.deps.add(37500):t.skip.add(37500),this.userComment?t.deps.add(37510):t.skip.add(37510),s.enabled||e.skip.add(700),i.enabled||e.skip.add(33723),n.enabled||e.skip.add(34675)}traverseTiffDependencyTree(){let{ifd0:e,exif:t,gps:s,interop:i}=this;i.needed&&(t.deps.add(40965),e.deps.add(40965)),t.needed&&e.deps.add(34665),s.needed&&e.deps.add(34853),this.tiff.enabled=P.some((e=>!0===this[e].enabled))||this.makerNote||this.userComment;for(let e of P)this[e].finalizeFilters()}get onlyTiff(){return!T.map((e=>this[e].enabled)).some((e=>!0===e))&&this.tiff.enabled}checkLoadedPlugins(){for(let e of z)this[e].enabled&&!y.has(e)&&p(\"segment parser\",e)}}function K(e,t){let s,i,n,r,a=[];for(n of t){for(r of(s=B.get(n),i=[],s))(e.includes(r[0])||e.includes(r[1]))&&i.push(r[0]);i.length&&a.push([n,i])}return a}function W(e,t){return void 0!==e?e:void 0!==t?t:void 0}function X(e,t){for(let s of t)e.add(s)}e(R,\"default\",N);class H{constructor(t){e(this,\"parsers\",{}),e(this,\"output\",{}),e(this,\"errors\",[]),e(this,\"pushToErrors\",(e=>this.errors.push(e))),this.options=R.useCached(t)}async read(e){this.file=await function(e,t){return\"string\"==typeof e?k(e,t):s&&!i&&e instanceof HTMLImageElement?k(e.src,t):e instanceof Uint8Array||e instanceof ArrayBuffer||e instanceof DataView?new c(e):s&&e instanceof Blob?O(e,t,\"blob\",A):void l(\"Invalid input argument\")}(e,this.options)}setup(){if(this.fileParser)return;let{file:e}=this,t=e.getUint16(0);for(let[s,i]of m)if(i.canHandle(e,t))return this.fileParser=new i(this.options,this.file,this.parsers),e[s]=!0;this.file.close&&this.file.close(),l(\"Unknown file format\")}async parse(){let{output:e,errors:t}=this;return this.setup(),this.options.silentErrors?(await this.executeParsers().catch(this.pushToErrors),t.push(...this.fileParser.errors)):await this.executeParsers(),this.file.close&&this.file.close(),this.options.silentErrors&&t.length>0&&(e.errors=t),f(s=e)?void 0:s;var s}async executeParsers(){let{output:e}=this;await this.fileParser.parse();let t=Object.values(this.parsers).map((async t=>{let s=await t.parse();t.assignToOutput(e,s)}));this.options.silentErrors&&(t=t.map((e=>e.catch(this.pushToErrors)))),await Promise.all(t)}async extractThumbnail(){this.setup();let{options:e,file:t}=this,s=y.get(\"tiff\",e);var i;if(t.tiff?i={start:0,type:\"tiff\"}:t.jpeg&&(i=await this.fileParser.getOrFindSegment(\"tiff\")),void 0===i)return;let n=await this.fileParser.ensureSegmentChunk(i),r=this.parsers.tiff=new s(n,e,t),a=await r.extractThumbnail();return t.close&&t.close(),a}}async function Y(e,t){let s=new H(t);return await s.read(e),s.parse()}var G=Object.freeze({__proto__:null,parse:Y,Exifr:H,fileParsers:m,segmentParsers:y,fileReaders:b,tagKeys:B,tagValues:V,tagRevivers:I,createDictionary:x,extendDictionary:C,fetchUrlAsArrayBuffer:S,readBlobAsArrayBuffer:A,chunkedProps:L,otherSegments:T,segments:z,tiffBlocks:P,segmentsAndBlocks:F,tiffExtractables:j,inheritables:E,allFormatters:M,Options:R});class J{static findPosition(e,t){let s=e.getUint16(t+2)+2,i=\"function\"==typeof this.headerLength?this.headerLength(e,t,s):this.headerLength,n=t+i,r=s-i;return{offset:t,length:s,headerLength:i,start:n,size:r,end:n+r}}static parse(e,t={}){return new this(e,new R({[this.type]:t}),e).parse()}normalizeInput(e){return e instanceof c?e:new c(e)}constructor(t,s={},i){e(this,\"errors\",[]),e(this,\"raw\",new Map),e(this,\"handleError\",(e=>{if(!this.options.silentErrors)throw e;this.errors.push(e.message)})),this.chunk=this.normalizeInput(t),this.file=i,this.type=this.constructor.type,this.globalOptions=this.options=s,this.localOptions=s[this.type],this.canTranslate=this.localOptions&&this.localOptions.translate}translate(){this.canTranslate&&(this.translated=this.translateBlock(this.raw,this.type))}get output(){return this.translated?this.translated:this.raw?Object.fromEntries(this.raw):void 0}translateBlock(e,t){let s=I.get(t),i=V.get(t),n=B.get(t),r=this.options[t],a=r.reviveValues&&!!s,h=r.translateValues&&!!i,f=r.translateKeys&&!!n,l={};for(let[t,r]of e)a&&s.has(t)?r=s.get(t)(r):h&&i.has(t)&&(r=this.translateValue(r,i.get(t))),f&&n.has(t)&&(t=n.get(t)||t),l[t]=r;return l}translateValue(e,t){return t[e]||t.DEFAULT||e}assignToOutput(e,t){this.assignObjectToOutput(e,this.constructor.type,t)}assignObjectToOutput(e,t,s){if(this.globalOptions.mergeOutput)return Object.assign(e,s);e[t]?Object.assign(e[t],s):e[t]=s}}e(J,\"headerLength\",4),e(J,\"type\",void 0),e(J,\"multiSegment\",!1),e(J,\"canHandle\",(()=>!1));function q(e){return 192===e||194===e||196===e||219===e||221===e||218===e||254===e}function Q(e){return e>=224&&e<=239}function Z(e,t,s){for(let[i,n]of y)if(n.canHandle(e,t,s))return i}class ee extends class{constructor(t,s,i){e(this,\"errors\",[]),e(this,\"ensureSegmentChunk\",(async e=>{let t=e.start,s=e.size||65536;if(this.file.chunked)if(this.file.available(t,s))e.chunk=this.file.subarray(t,s);else try{e.chunk=await this.file.readChunk(t,s)}catch(t){l(`Couldn't read segment: ${JSON.stringify(e)}. ${t.message}`)}else this.file.byteLength>t+s?e.chunk=this.file.subarray(t,s):void 0===e.size?e.chunk=this.file.subarray(t):l(\"Segment unreachable: \"+JSON.stringify(e));return e.chunk})),this.extendOptions&&this.extendOptions(t),this.options=t,this.file=s,this.parsers=i}injectSegment(e,t){this.options[e].enabled&&this.createParser(e,t)}createParser(e,t){let s=new(y.get(e))(t,this.options,this.file);return this.parsers[e]=s}createParsers(e){for(let t of e){let{type:e,chunk:s}=t,i=this.options[e];if(i&&i.enabled){let t=this.parsers[e];t&&t.append||t||this.createParser(e,s)}}}async readSegments(e){let t=e.map(this.ensureSegmentChunk);await Promise.all(t)}}{constructor(...t){super(...t),e(this,\"appSegments\",[]),e(this,\"jpegSegments\",[]),e(this,\"unknownSegments\",[])}static canHandle(e,t){return 65496===t}async parse(){await this.findAppSegments(),await this.readSegments(this.appSegments),this.mergeMultiSegments(),this.createParsers(this.mergedAppSegments||this.appSegments)}setupSegmentFinderArgs(e){!0===e?(this.findAll=!0,this.wanted=new Set(y.keyList())):(e=void 0===e?y.keyList().filter((e=>this.options[e].enabled)):e.filter((e=>this.options[e].enabled&&y.has(e))),this.findAll=!1,this.remaining=new Set(e),this.wanted=new Set(e)),this.unfinishedMultiSegment=!1}async findAppSegments(e=0,t){this.setupSegmentFinderArgs(t);let{file:s,findAll:i,wanted:n,remaining:r}=this;if(!i&&this.file.chunked&&(i=Array.from(n).some((e=>{let t=y.get(e),s=this.options[e];return t.multiSegment&&s.multiSegment})),i&&await this.file.readWhole()),e=this.findAppSegmentsInRange(e,s.byteLength),!this.options.onlyTiff&&s.chunked){let t=!1;for(;r.size>0&&!t&&(s.canReadNextChunk||this.unfinishedMultiSegment);){let{nextChunkOffset:i}=s,n=this.appSegments.some((e=>!this.file.available(e.offset||e.start,e.length||e.size)));if(t=e>i&&!n?!await s.readNextChunk(e):!await s.readNextChunk(i),void 0===(e=this.findAppSegmentsInRange(e,s.byteLength)))return}}}findAppSegmentsInRange(e,t){t-=2;let s,i,n,r,a,h,{file:f,findAll:l,wanted:o,remaining:u,options:d}=this;for(;e<t;e++)if(255===f.getUint8(e))if(s=f.getUint8(e+1),Q(s)){if(i=f.getUint16(e+2),n=Z(f,e,i),n&&o.has(n)&&(r=y.get(n),a=r.findPosition(f,e),h=d[n],a.type=n,this.appSegments.push(a),!l&&(r.multiSegment&&h.multiSegment?(this.unfinishedMultiSegment=a.chunkNumber<a.chunkCount,this.unfinishedMultiSegment||u.delete(n)):u.delete(n),0===u.size)))break;d.recordUnknownSegments&&(a=J.findPosition(f,e),a.marker=s,this.unknownSegments.push(a)),e+=i+1}else if(q(s)){if(i=f.getUint16(e+2),218===s&&!1!==d.stopAfterSos)return;d.recordJpegSegments&&this.jpegSegments.push({offset:e,length:i,marker:s}),e+=i+1}return e}mergeMultiSegments(){if(!this.appSegments.some((e=>e.multiSegment)))return;let e=function(e,t){let s,i,n,r=new Map;for(let a=0;a<e.length;a++)s=e[a],i=s[t],r.has(i)?n=r.get(i):r.set(i,n=[]),n.push(s);return Array.from(r)}(this.appSegments,\"type\");this.mergedAppSegments=e.map((([e,t])=>{let s=y.get(e,this.options);if(s.handleMultiSegments){return{type:e,chunk:s.handleMultiSegments(t)}}return t[0]}))}getSegment(e){return this.appSegments.find((t=>t.type===e))}async getOrFindSegment(e){let t=this.getSegment(e);return void 0===t&&(await this.findAppSegments(0,[e]),t=this.getSegment(e)),t}}e(ee,\"type\",\"jpeg\"),m.set(\"jpeg\",ee);const te=[void 0,1,1,2,4,8,1,1,2,4,8,4,8,4];class se extends J{parseHeader(){var e=this.chunk.getUint16();18761===e?this.le=!0:19789===e&&(this.le=!1),this.chunk.le=this.le,this.headerParsed=!0}parseTags(e,t,s=new Map){let{pick:i,skip:n}=this.options[t];i=new Set(i);let r=i.size>0,a=0===n.size,h=this.chunk.getUint16(e);e+=2;for(let f=0;f<h;f++){let h=this.chunk.getUint16(e);if(r){if(i.has(h)&&(s.set(h,this.parseTag(e,h,t)),i.delete(h),0===i.size))break}else!a&&n.has(h)||s.set(h,this.parseTag(e,h,t));e+=12}return s}parseTag(e,t,s){let{chunk:i}=this,n=i.getUint16(e+2),r=i.getUint32(e+4),a=te[n];if(a*r<=4?e+=8:e=i.getUint32(e+8),(n<1||n>13)&&l(`Invalid TIFF value type. block: ${s.toUpperCase()}, tag: ${t.toString(16)}, type: ${n}, offset ${e}`),e>i.byteLength&&l(`Invalid TIFF value offset. block: ${s.toUpperCase()}, tag: ${t.toString(16)}, type: ${n}, offset ${e} is outside of chunk size ${i.byteLength}`),1===n)return i.getUint8Array(e,r);if(2===n)return\"\"===(h=function(e){for(;e.endsWith(\"\\0\");)e=e.slice(0,-1);return e}(h=i.getString(e,r)).trim())?void 0:h;var h;if(7===n)return i.getUint8Array(e,r);if(1===r)return this.parseTagValue(n,e);{let t=new(function(e){switch(e){case 1:return Uint8Array;case 3:return Uint16Array;case 4:return Uint32Array;case 5:return Array;case 6:return Int8Array;case 8:return Int16Array;case 9:return Int32Array;case 10:return Array;case 11:return Float32Array;case 12:return Float64Array;default:return Array}}(n))(r),s=a;for(let i=0;i<r;i++)t[i]=this.parseTagValue(n,e),e+=s;return t}}parseTagValue(e,t){let{chunk:s}=this;switch(e){case 1:return s.getUint8(t);case 3:return s.getUint16(t);case 4:return s.getUint32(t);case 5:return s.getUint32(t)/s.getUint32(t+4);case 6:return s.getInt8(t);case 8:return s.getInt16(t);case 9:return s.getInt32(t);case 10:return s.getInt32(t)/s.getInt32(t+4);case 11:return s.getFloat(t);case 12:return s.getDouble(t);case 13:return s.getUint32(t);default:l(`Invalid tiff type ${e}`)}}}class ie extends se{static canHandle(e,t){return 225===e.getUint8(t+1)&&1165519206===e.getUint32(t+4)&&0===e.getUint16(t+8)}async parse(){this.parseHeader();let{options:e}=this;return e.ifd0.enabled&&await this.parseIfd0Block(),e.exif.enabled&&await this.safeParse(\"parseExifBlock\"),e.gps.enabled&&await this.safeParse(\"parseGpsBlock\"),e.interop.enabled&&await this.safeParse(\"parseInteropBlock\"),e.ifd1.enabled&&await this.safeParse(\"parseThumbnailBlock\"),this.createOutput()}safeParse(e){let t=this[e]();return void 0!==t.catch&&(t=t.catch(this.handleError)),t}findIfd0Offset(){void 0===this.ifd0Offset&&(this.ifd0Offset=this.chunk.getUint32(4))}findIfd1Offset(){if(void 0===this.ifd1Offset){this.findIfd0Offset();let e=this.chunk.getUint16(this.ifd0Offset),t=this.ifd0Offset+2+12*e;this.ifd1Offset=this.chunk.getUint32(t)}}parseBlock(e,t){let s=new Map;return this[t]=s,this.parseTags(e,t,s),s}async parseIfd0Block(){if(this.ifd0)return;let{file:e}=this;this.findIfd0Offset(),this.ifd0Offset<8&&l(\"Malformed EXIF data\"),!e.chunked&&this.ifd0Offset>e.byteLength&&l(`IFD0 offset points to outside of file.\\nthis.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${e.byteLength}`),e.tiff&&await e.ensureChunk(this.ifd0Offset,o(this.options));let t=this.parseBlock(this.ifd0Offset,\"ifd0\");return 0!==t.size?(this.exifOffset=t.get(34665),this.interopOffset=t.get(40965),this.gpsOffset=t.get(34853),this.xmp=t.get(700),this.iptc=t.get(33723),this.icc=t.get(34675),this.options.sanitize&&(t.delete(34665),t.delete(40965),t.delete(34853),t.delete(700),t.delete(33723),t.delete(34675)),t):void 0}async parseExifBlock(){if(this.exif)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.exifOffset)return;this.file.tiff&&await this.file.ensureChunk(this.exifOffset,o(this.options));let e=this.parseBlock(this.exifOffset,\"exif\");return this.interopOffset||(this.interopOffset=e.get(40965)),this.makerNote=e.get(37500),this.userComment=e.get(37510),this.options.sanitize&&(e.delete(40965),e.delete(37500),e.delete(37510)),this.unpack(e,41728),this.unpack(e,41729),e}unpack(e,t){let s=e.get(t);s&&1===s.length&&e.set(t,s[0])}async parseGpsBlock(){if(this.gps)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.gpsOffset)return;let e=this.parseBlock(this.gpsOffset,\"gps\");return e&&e.has(2)&&e.has(4)&&(e.set(\"latitude\",ne(...e.get(2),e.get(1))),e.set(\"longitude\",ne(...e.get(4),e.get(3)))),e}async parseInteropBlock(){if(!this.interop&&(this.ifd0||await this.parseIfd0Block(),void 0!==this.interopOffset||this.exif||await this.parseExifBlock(),void 0!==this.interopOffset))return this.parseBlock(this.interopOffset,\"interop\")}async parseThumbnailBlock(e=!1){if(!this.ifd1&&!this.ifd1Parsed&&(!this.options.mergeOutput||e))return this.findIfd1Offset(),this.ifd1Offset>0&&(this.parseBlock(this.ifd1Offset,\"ifd1\"),this.ifd1Parsed=!0),this.ifd1}async extractThumbnail(){if(this.headerParsed||this.parseHeader(),this.ifd1Parsed||await this.parseThumbnailBlock(!0),void 0===this.ifd1)return;let e=this.ifd1.get(513),t=this.ifd1.get(514);return this.chunk.getUint8Array(e,t)}get image(){return this.ifd0}get thumbnail(){return this.ifd1}createOutput(){let e,t,s,i={};for(t of P)if(e=this[t],!f(e))if(s=this.canTranslate?this.translateBlock(e,t):Object.fromEntries(e),this.options.mergeOutput){if(\"ifd1\"===t)continue;Object.assign(i,s)}else i[t]=s;return this.makerNote&&(i.makerNote=this.makerNote),this.userComment&&(i.userComment=this.userComment),i}assignToOutput(e,t){if(this.globalOptions.mergeOutput)Object.assign(e,t);else for(let[s,i]of Object.entries(t))this.assignObjectToOutput(e,s,i)}}function ne(e,t,s,i){var n=e+t/60+s/3600;return\"S\"!==i&&\"W\"!==i||(n*=-1),n}e(ie,\"type\",\"tiff\"),e(ie,\"headerLength\",10),y.set(\"tiff\",ie);var re=Object.freeze({__proto__:null,default:G,Exifr:H,fileParsers:m,segmentParsers:y,fileReaders:b,tagKeys:B,tagValues:V,tagRevivers:I,createDictionary:x,extendDictionary:C,fetchUrlAsArrayBuffer:S,readBlobAsArrayBuffer:A,chunkedProps:L,otherSegments:T,segments:z,tiffBlocks:P,segmentsAndBlocks:F,tiffExtractables:j,inheritables:E,allFormatters:M,Options:R,parse:Y});const ae={ifd0:!1,ifd1:!1,exif:!1,gps:!1,interop:!1,sanitize:!1,reviveValues:!0,translateKeys:!1,translateValues:!1,mergeOutput:!1},he=Object.assign({},ae,{firstChunkSize:4e4,gps:[1,2,3,4]});async function fe(e){let t=new H(he);await t.read(e);let s=await t.parse();if(s&&s.gps){let{latitude:e,longitude:t}=s.gps;return{latitude:e,longitude:t}}}const le=Object.assign({},ae,{tiff:!1,ifd1:!0,mergeOutput:!1});async function oe(e){let t=new H(le);await t.read(e);let s=await t.extractThumbnail();return s&&a?r.from(s):s}async function ue(e){let t=await this.thumbnail(e);if(void 0!==t){let e=new Blob([t]);return URL.createObjectURL(e)}}const de=Object.assign({},ae,{firstChunkSize:4e4,ifd0:[274]});async function ce(e){let t=new H(de);await t.read(e);let s=await t.parse();if(s&&s.ifd0)return s.ifd0[274]}const pe=Object.freeze({1:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:0,rad:0},2:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:0,rad:0},3:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:180,rad:180*Math.PI/180},4:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:180,rad:180*Math.PI/180},5:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:90,rad:90*Math.PI/180},6:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:90,rad:90*Math.PI/180},7:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:270,rad:270*Math.PI/180},8:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:270,rad:270*Math.PI/180}});let ge=!0,me=!0;if(\"object\"==typeof navigator){let e=navigator.userAgent;if(e.includes(\"iPad\")||e.includes(\"iPhone\")){let t=e.match(/OS (\\d+)_(\\d+)/);if(t){let[,e,s]=t,i=Number(e)+.1*Number(s);ge=i<13.4,me=!1}}else if(e.includes(\"OS X 10\")){let[,t]=e.match(/OS X 10[_.](\\d+)/);ge=me=Number(t)<15}if(e.includes(\"Chrome/\")){let[,t]=e.match(/Chrome\\/(\\d+)/);ge=me=Number(t)<81}else if(e.includes(\"Firefox/\")){let[,t]=e.match(/Firefox\\/(\\d+)/);ge=me=Number(t)<77}}async function ye(e){let t=await ce(e);return Object.assign({canvas:ge,css:me},pe[t])}class be extends c{constructor(...t){super(...t),e(this,\"ranges\",new we),0!==this.byteLength&&this.ranges.add(0,this.byteLength)}_tryExtend(e,t,s){if(0===e&&0===this.byteLength&&s){let e=new DataView(s.buffer||s,s.byteOffset,s.byteLength);this._swapDataView(e)}else{let s=e+t;if(s>this.byteLength){let{dataView:e}=this._extend(s);this._swapDataView(e)}}}_extend(e){let t;t=a?r.allocUnsafe(e):new Uint8Array(e);let s=new DataView(t.buffer,t.byteOffset,t.byteLength);return t.set(new Uint8Array(this.buffer,this.byteOffset,this.byteLength),0),{uintView:t,dataView:s}}subarray(e,t,s=!1){return t=t||this._lengthToEnd(e),s&&this._tryExtend(e,t),this.ranges.add(e,t),super.subarray(e,t)}set(e,t,s=!1){s&&this._tryExtend(t,e.byteLength,e);let i=super.set(e,t);return this.ranges.add(t,i.byteLength),i}async ensureChunk(e,t){this.chunked&&(this.ranges.available(e,t)||await this.readChunk(e,t))}available(e,t){return this.ranges.available(e,t)}}class we{constructor(){e(this,\"list\",[])}get length(){return this.list.length}add(e,t,s=0){let i=e+t,n=this.list.filter((t=>ke(e,t.offset,i)||ke(e,t.end,i)));if(n.length>0){e=Math.min(e,...n.map((e=>e.offset))),i=Math.max(i,...n.map((e=>e.end))),t=i-e;let s=n.shift();s.offset=e,s.length=t,s.end=i,this.list=this.list.filter((e=>!n.includes(e)))}else this.list.push({offset:e,length:t,end:i})}available(e,t){let s=e+t;return this.list.some((t=>t.offset<=e&&s<=t.end))}}function ke(e,t,s){return e<=t&&t<=s}class Oe extends be{constructor(t,s){super(0),e(this,\"chunksRead\",0),this.input=t,this.options=s}async readWhole(){this.chunked=!1,await this.readChunk(this.nextChunkOffset)}async readChunked(){this.chunked=!0,await this.readChunk(0,this.options.firstChunkSize)}async readNextChunk(e=this.nextChunkOffset){if(this.fullyRead)return this.chunksRead++,!1;let t=this.options.chunkSize,s=await this.readChunk(e,t);return!!s&&s.byteLength===t}async readChunk(e,t){if(this.chunksRead++,0!==(t=this.safeWrapAddress(e,t)))return this._readChunk(e,t)}safeWrapAddress(e,t){return void 0!==this.size&&e+t>this.size?Math.max(0,this.size-e):t}get nextChunkOffset(){if(0!==this.ranges.list.length)return this.ranges.list[0].length}get canReadNextChunk(){return this.chunksRead<this.options.chunkLimit}get fullyRead(){return void 0!==this.size&&this.nextChunkOffset===this.size}read(){return this.options.chunked?this.readChunked():this.readWhole()}close(){}}b.set(\"blob\",class extends Oe{async readWhole(){this.chunked=!1;let e=await A(this.input);this._swapArrayBuffer(e)}readChunked(){return this.chunked=!0,this.size=this.input.size,super.readChunked()}async _readChunk(e,t){let s=t?e+t:void 0,i=this.input.slice(e,s),n=await A(i);return this.set(n,e,!0)}});export default re;export{H as Exifr,R as Options,M as allFormatters,L as chunkedProps,x as createDictionary,C as extendDictionary,S as fetchUrlAsArrayBuffer,m as fileParsers,b as fileReaders,fe as gps,he as gpsOnlyOptions,E as inheritables,ce as orientation,de as orientationOnlyOptions,T as otherSegments,Y as parse,A as readBlobAsArrayBuffer,ge as rotateCanvas,me as rotateCss,ye as rotation,pe as rotations,y as segmentParsers,z as segments,F as segmentsAndBlocks,B as tagKeys,I as tagRevivers,V as tagValues,oe as thumbnail,le as thumbnailOnlyOptions,ue as thumbnailUrl,P as tiffBlocks,j as tiffExtractables};\n","export default {\n  strings: {\n    generatingThumbnails: 'Generating thumbnails...'\n  }\n};","import { UIPlugin } from '@uppy/core';\nimport dataURItoBlob from '@uppy/utils/lib/dataURItoBlob';\nimport isObjectURL from '@uppy/utils/lib/isObjectURL';\nimport isPreviewSupported from '@uppy/utils/lib/isPreviewSupported';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore untyped\nimport { rotation } from 'exifr/dist/mini.esm.mjs';\nimport locale from \"./locale.js\";\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"3.1.0\"\n};\n/**\n * Save a <canvas> element's content to a Blob object.\n *\n */\nfunction canvasToBlob(canvas, type, quality) {\n  try {\n    canvas.getContext('2d').getImageData(0, 0, 1, 1);\n  } catch (err) {\n    if (err.code === 18) {\n      return Promise.reject(new Error('cannot read image, probably an svg with external resources'));\n    }\n  }\n  if (canvas.toBlob) {\n    return new Promise(resolve => {\n      canvas.toBlob(resolve, type, quality);\n    }).then(blob => {\n      if (blob === null) {\n        throw new Error('cannot read image, probably an svg with external resources');\n      }\n      return blob;\n    });\n  }\n  return Promise.resolve().then(() => {\n    return dataURItoBlob(canvas.toDataURL(type, quality), {});\n  }).then(blob => {\n    if (blob === null) {\n      throw new Error('could not extract blob, probably an old browser');\n    }\n    return blob;\n  });\n}\nfunction rotateImage(image, translate) {\n  let w = image.width;\n  let h = image.height;\n  if (translate.deg === 90 || translate.deg === 270) {\n    w = image.height;\n    h = image.width;\n  }\n  const canvas = document.createElement('canvas');\n  canvas.width = w;\n  canvas.height = h;\n  const context = canvas.getContext('2d');\n  context.translate(w / 2, h / 2);\n  if (translate.canvas) {\n    context.rotate(translate.rad);\n    context.scale(translate.scaleX, translate.scaleY);\n  }\n  context.drawImage(image, -image.width / 2, -image.height / 2, image.width, image.height);\n  return canvas;\n}\n\n/**\n * Make sure the image doesn’t exceed browser/device canvas limits.\n * For ios with 256 RAM and ie\n */\nfunction protect(image) {\n  // https://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element\n\n  const ratio = image.width / image.height;\n  const maxSquare = 5000000; // ios max canvas square\n  const maxSize = 4096; // ie max canvas dimensions\n\n  let maxW = Math.floor(Math.sqrt(maxSquare * ratio));\n  let maxH = Math.floor(maxSquare / Math.sqrt(maxSquare * ratio));\n  if (maxW > maxSize) {\n    maxW = maxSize;\n    maxH = Math.round(maxW / ratio);\n  }\n  if (maxH > maxSize) {\n    maxH = maxSize;\n    maxW = Math.round(ratio * maxH);\n  }\n  if (image.width > maxW) {\n    const canvas = document.createElement('canvas');\n    canvas.width = maxW;\n    canvas.height = maxH;\n    canvas.getContext('2d').drawImage(image, 0, 0, maxW, maxH);\n    return canvas;\n  }\n  return image;\n}\nconst defaultOptions = {\n  thumbnailWidth: null,\n  thumbnailHeight: null,\n  thumbnailType: 'image/jpeg',\n  waitForThumbnailsBeforeUpload: false,\n  lazy: false\n};\n/**\n * The Thumbnail Generator plugin\n */\n\nexport default class ThumbnailGenerator extends UIPlugin {\n  constructor(uppy, opts) {\n    super(uppy, {\n      ...defaultOptions,\n      ...opts\n    });\n    this.onFileAdded = file => {\n      if (!file.preview && file.data && isPreviewSupported(file.type) && !file.isRemote) {\n        this.addToQueue(file.id);\n      }\n    };\n    /**\n     * Cancel a lazy request for a thumbnail if the thumbnail has not yet been generated.\n     */\n    this.onCancelRequest = file => {\n      const index = this.queue.indexOf(file.id);\n      if (index !== -1) {\n        this.queue.splice(index, 1);\n      }\n    };\n    /**\n     * Clean up the thumbnail for a file. Cancel lazy requests and free the thumbnail URL.\n     */\n    this.onFileRemoved = file => {\n      const index = this.queue.indexOf(file.id);\n      if (index !== -1) {\n        this.queue.splice(index, 1);\n      }\n\n      // Clean up object URLs.\n      if (file.preview && isObjectURL(file.preview)) {\n        URL.revokeObjectURL(file.preview);\n      }\n    };\n    this.onRestored = () => {\n      const restoredFiles = this.uppy.getFiles().filter(file => file.isRestored);\n      restoredFiles.forEach(file => {\n        // Only add blob URLs; they are likely invalid after being restored.\n        if (!file.preview || isObjectURL(file.preview)) {\n          this.addToQueue(file.id);\n        }\n      });\n    };\n    this.onAllFilesRemoved = () => {\n      this.queue = [];\n    };\n    this.waitUntilAllProcessed = fileIDs => {\n      fileIDs.forEach(fileID => {\n        const file = this.uppy.getFile(fileID);\n        this.uppy.emit('preprocess-progress', file, {\n          mode: 'indeterminate',\n          message: this.i18n('generatingThumbnails')\n        });\n      });\n      const emitPreprocessCompleteForAll = () => {\n        fileIDs.forEach(fileID => {\n          const file = this.uppy.getFile(fileID);\n          this.uppy.emit('preprocess-complete', file);\n        });\n      };\n      return new Promise(resolve => {\n        if (this.queueProcessing) {\n          this.uppy.once('thumbnail:all-generated', () => {\n            emitPreprocessCompleteForAll();\n            resolve();\n          });\n        } else {\n          emitPreprocessCompleteForAll();\n          resolve();\n        }\n      });\n    };\n    this.type = 'modifier';\n    this.id = this.opts.id || 'ThumbnailGenerator';\n    this.title = 'Thumbnail Generator';\n    this.queue = [];\n    this.queueProcessing = false;\n    this.defaultThumbnailDimension = 200;\n    this.thumbnailType = this.opts.thumbnailType;\n    this.defaultLocale = locale;\n    this.i18nInit();\n    if (this.opts.lazy && this.opts.waitForThumbnailsBeforeUpload) {\n      throw new Error('ThumbnailGenerator: The `lazy` and `waitForThumbnailsBeforeUpload` options are mutually exclusive. Please ensure at most one of them is set to `true`.');\n    }\n  }\n  createThumbnail(file, targetWidth, targetHeight) {\n    const originalUrl = URL.createObjectURL(file.data);\n    const onload = new Promise((resolve, reject) => {\n      const image = new Image();\n      image.src = originalUrl;\n      image.addEventListener('load', () => {\n        URL.revokeObjectURL(originalUrl);\n        resolve(image);\n      });\n      image.addEventListener('error', event => {\n        URL.revokeObjectURL(originalUrl);\n        reject(event.error || new Error('Could not create thumbnail'));\n      });\n    });\n    const orientationPromise = rotation(file.data).catch(() => 1);\n    return Promise.all([onload, orientationPromise]).then(_ref => {\n      let [image, orientation] = _ref;\n      const dimensions = this.getProportionalDimensions(image, targetWidth, targetHeight, orientation.deg);\n      const rotatedImage = rotateImage(image, orientation);\n      const resizedImage = this.resizeImage(rotatedImage, dimensions.width, dimensions.height);\n      return canvasToBlob(resizedImage, this.thumbnailType, 80);\n    }).then(blob => {\n      return URL.createObjectURL(blob);\n    });\n  }\n\n  /**\n   * Get the new calculated dimensions for the given image and a target width\n   * or height. If both width and height are given, only width is taken into\n   * account. If neither width nor height are given, the default dimension\n   * is used.\n   */\n  getProportionalDimensions(img, width, height, deg) {\n    // eslint-disable-line no-shadow\n    let aspect = img.width / img.height;\n    if (deg === 90 || deg === 270) {\n      aspect = img.height / img.width;\n    }\n    if (width != null) {\n      return {\n        width,\n        height: Math.round(width / aspect)\n      };\n    }\n    if (height != null) {\n      return {\n        width: Math.round(height * aspect),\n        height\n      };\n    }\n    return {\n      width: this.defaultThumbnailDimension,\n      height: Math.round(this.defaultThumbnailDimension / aspect)\n    };\n  }\n\n  /**\n   * Resize an image to the target `width` and `height`.\n   *\n   * Returns a Canvas with the resized image on it.\n   */\n  // eslint-disable-next-line class-methods-use-this\n  resizeImage(image, targetWidth, targetHeight) {\n    // Resizing in steps refactored to use a solution from\n    // https://blog.uploadcare.com/image-resize-in-browsers-is-broken-e38eed08df01\n\n    let img = protect(image);\n    let steps = Math.ceil(Math.log2(img.width / targetWidth));\n    if (steps < 1) {\n      steps = 1;\n    }\n    let sW = targetWidth * 2 ** (steps - 1);\n    let sH = targetHeight * 2 ** (steps - 1);\n    const x = 2;\n    while (steps--) {\n      const canvas = document.createElement('canvas');\n      canvas.width = sW;\n      canvas.height = sH;\n      canvas.getContext('2d').drawImage(img, 0, 0, sW, sH);\n      img = canvas;\n      sW = Math.round(sW / x);\n      sH = Math.round(sH / x);\n    }\n    return img;\n  }\n\n  /**\n   * Set the preview URL for a file.\n   */\n  setPreviewURL(fileID, preview) {\n    this.uppy.setFileState(fileID, {\n      preview\n    });\n  }\n  addToQueue(fileID) {\n    this.queue.push(fileID);\n    if (this.queueProcessing === false) {\n      this.processQueue();\n    }\n  }\n  processQueue() {\n    this.queueProcessing = true;\n    if (this.queue.length > 0) {\n      const current = this.uppy.getFile(this.queue.shift());\n      if (!current) {\n        this.uppy.log('[ThumbnailGenerator] file was removed before a thumbnail could be generated, but not removed from the queue. This is probably a bug', 'error');\n        return Promise.resolve();\n      }\n      return this.requestThumbnail(current).catch(() => {}) // eslint-disable-line node/handle-callback-err\n      .then(() => this.processQueue());\n    }\n    this.queueProcessing = false;\n    this.uppy.log('[ThumbnailGenerator] Emptied thumbnail queue');\n    this.uppy.emit('thumbnail:all-generated');\n    return Promise.resolve();\n  }\n  requestThumbnail(file) {\n    if (isPreviewSupported(file.type) && !file.isRemote) {\n      return this.createThumbnail(file, this.opts.thumbnailWidth, this.opts.thumbnailHeight).then(preview => {\n        this.setPreviewURL(file.id, preview);\n        this.uppy.log(`[ThumbnailGenerator] Generated thumbnail for ${file.id}`);\n        this.uppy.emit('thumbnail:generated', this.uppy.getFile(file.id), preview);\n      }).catch(err => {\n        this.uppy.log(`[ThumbnailGenerator] Failed thumbnail for ${file.id}:`, 'warning');\n        this.uppy.log(err, 'warning');\n        this.uppy.emit('thumbnail:error', this.uppy.getFile(file.id), err);\n      });\n    }\n    return Promise.resolve();\n  }\n  install() {\n    this.uppy.on('file-removed', this.onFileRemoved);\n    this.uppy.on('cancel-all', this.onAllFilesRemoved);\n    if (this.opts.lazy) {\n      this.uppy.on('thumbnail:request', this.onFileAdded);\n      this.uppy.on('thumbnail:cancel', this.onCancelRequest);\n    } else {\n      this.uppy.on('thumbnail:request', this.onFileAdded);\n      this.uppy.on('file-added', this.onFileAdded);\n      this.uppy.on('restored', this.onRestored);\n    }\n    if (this.opts.waitForThumbnailsBeforeUpload) {\n      this.uppy.addPreProcessor(this.waitUntilAllProcessed);\n    }\n  }\n  uninstall() {\n    this.uppy.off('file-removed', this.onFileRemoved);\n    this.uppy.off('cancel-all', this.onAllFilesRemoved);\n    if (this.opts.lazy) {\n      this.uppy.off('thumbnail:request', this.onFileAdded);\n      this.uppy.off('thumbnail:cancel', this.onCancelRequest);\n    } else {\n      this.uppy.off('thumbnail:request', this.onFileAdded);\n      this.uppy.off('file-added', this.onFileAdded);\n      this.uppy.off('restored', this.onRestored);\n    }\n    if (this.opts.waitForThumbnailsBeforeUpload) {\n      this.uppy.removePreProcessor(this.waitUntilAllProcessed);\n    }\n  }\n}\nThumbnailGenerator.VERSION = packageJson.version;","import isDOMElement from \"./isDOMElement.js\";\n/**\n * Find one or more DOM elements.\n */\nfunction findAllDOMElements(element) {\n  if (typeof element === 'string') {\n    const elements = document.querySelectorAll(element);\n    return elements.length === 0 ? null : Array.from(elements);\n  }\n  if (typeof element === 'object' && isDOMElement(element)) {\n    return [element];\n  }\n  return null;\n}\nexport default findAllDOMElements;","/**\n * Converts list into array\n */\nexport default Array.from;","/**\n * Recursive function, calls the original callback() when the directory is entirely parsed.\n */\nexport default function getFilesAndDirectoriesFromDirectory(directoryReader, oldEntries, logDropError, _ref) {\n  let {\n    onSuccess\n  } = _ref;\n  directoryReader.readEntries(entries => {\n    const newEntries = [...oldEntries, ...entries];\n    // According to the FileSystem API spec, getFilesAndDirectoriesFromDirectory()\n    // must be called until it calls the onSuccess with an empty array.\n    if (entries.length) {\n      queueMicrotask(() => {\n        getFilesAndDirectoriesFromDirectory(directoryReader, newEntries, logDropError, {\n          onSuccess\n        });\n      });\n      // Done iterating this particular directory\n    } else {\n      onSuccess(newEntries);\n    }\n  },\n  // Make sure we resolve on error anyway, it's fine if only one directory couldn't be parsed!\n  error => {\n    logDropError(error);\n    onSuccess(oldEntries);\n  });\n}","import getFilesAndDirectoriesFromDirectory from \"./getFilesAndDirectoriesFromDirectory.js\";\n/**\n * Polyfill for the new (experimental) getAsFileSystemHandle API (using the popular webkitGetAsEntry behind the scenes)\n * so that we can switch to the getAsFileSystemHandle API once it (hopefully) becomes standard\n */\nfunction getAsFileSystemHandleFromEntry(entry, logDropError) {\n  if (entry == null) return entry;\n  return {\n    kind:\n    // eslint-disable-next-line no-nested-ternary\n    entry.isFile ? 'file' : entry.isDirectory ? 'directory' : undefined,\n    name: entry.name,\n    getFile() {\n      return new Promise((resolve, reject) => entry.file(resolve, reject));\n    },\n    async *values() {\n      // If the file is a directory.\n      const directoryReader = entry.createReader();\n      const entries = await new Promise(resolve => {\n        getFilesAndDirectoriesFromDirectory(directoryReader, [], logDropError, {\n          onSuccess: dirEntries => resolve(dirEntries.map(file => getAsFileSystemHandleFromEntry(file, logDropError)))\n        });\n      });\n      yield* entries;\n    },\n    isSameEntry: undefined\n  };\n}\nfunction createPromiseToAddFileOrParseDirectory(entry, relativePath, lastResortFile) {\n  try {\n    if (lastResortFile === void 0) {\n      lastResortFile = undefined;\n    }\n    return async function* () {\n      const getNextRelativePath = () => `${relativePath}/${entry.name}`;\n\n      // For each dropped item, - make sure it's a file/directory, and start deepening in!\n      if (entry.kind === 'file') {\n        const file = await entry.getFile();\n        if (file != null) {\n          ;\n          file.relativePath = relativePath ? getNextRelativePath() : null;\n          yield file;\n        } else if (lastResortFile != null) yield lastResortFile;\n      } else if (entry.kind === 'directory') {\n        for await (const handle of entry.values()) {\n          // Recurse on the directory, appending the dir name to the relative path\n          yield* createPromiseToAddFileOrParseDirectory(handle, relativePath ? getNextRelativePath() : entry.name);\n        }\n      } else if (lastResortFile != null) yield lastResortFile;\n    }();\n  } catch (e) {\n    return Promise.reject(e);\n  }\n}\n\n/**\n * Load all files from data transfer, and recursively read any directories.\n * Note that IE is not supported for drag-drop, because IE doesn't support Data Transfers\n *\n * @param {DataTransfer} dataTransfer\n * @param {*} logDropError on error\n */\nexport default async function* getFilesFromDataTransfer(dataTransfer, logDropError) {\n  // Retrieving the dropped items must happen synchronously\n  // otherwise only the first item gets treated and the other ones are garbage collected.\n  // https://github.com/transloadit/uppy/pull/3998\n  const fileSystemHandles = await Promise.all(Array.from(dataTransfer.items, async item => {\n    var _fileSystemHandle;\n    let fileSystemHandle;\n\n    // TODO enable getAsFileSystemHandle API once we can get it working with subdirectories\n    // IMPORTANT: Need to check isSecureContext *before* calling getAsFileSystemHandle\n    // or else Chrome will crash when running in HTTP: https://github.com/transloadit/uppy/issues/4133\n    // if (window.isSecureContext && item.getAsFileSystemHandle != null)\n    // fileSystemHandle = await item.getAsFileSystemHandle()\n\n    // `webkitGetAsEntry` exists in all popular browsers (including non-WebKit browsers),\n    // however it may be renamed to getAsEntry() in the future, so you should code defensively, looking for both.\n    // from https://developer.mozilla.org/en-US/docs/Web/API/DataTransferItem/webkitGetAsEntry\n    const getAsEntry = () => typeof item.getAsEntry === 'function' ? item.getAsEntry() : item.webkitGetAsEntry();\n    // eslint-disable-next-line prefer-const\n    (_fileSystemHandle = fileSystemHandle) != null ? _fileSystemHandle : fileSystemHandle = getAsFileSystemHandleFromEntry(getAsEntry(), logDropError);\n    return {\n      fileSystemHandle,\n      lastResortFile: item.getAsFile() // can be used as a fallback in case other methods fail\n    };\n  }));\n  for (const {\n    lastResortFile,\n    fileSystemHandle\n  } of fileSystemHandles) {\n    // fileSystemHandle and lastResortFile can be null when we drop an url.\n    if (fileSystemHandle != null) {\n      try {\n        yield* createPromiseToAddFileOrParseDirectory(fileSystemHandle, '', lastResortFile);\n      } catch (err) {\n        // Example: If dropping a symbolic link, Chromium will throw:\n        // \"DOMException: A requested file or directory could not be found at the time an operation was processed.\",\n        // So we will use lastResortFile instead. See https://github.com/transloadit/uppy/issues/3505.\n        if (lastResortFile != null) {\n          yield lastResortFile;\n        } else {\n          logDropError(err);\n        }\n      }\n    } else if (lastResortFile != null) yield lastResortFile;\n  }\n}","export class TimeoutError extends Error {\n\tconstructor(message) {\n\t\tsuper(message);\n\t\tthis.name = 'TimeoutError';\n\t}\n}\n\n/**\nAn error to be thrown when the request is aborted by AbortController.\nDOMException is thrown instead of this Error when DOMException is available.\n*/\nexport class AbortError extends Error {\n\tconstructor(message) {\n\t\tsuper();\n\t\tthis.name = 'AbortError';\n\t\tthis.message = message;\n\t}\n}\n\n/**\nTODO: Remove AbortError and just throw DOMException when targeting Node 18.\n*/\nconst getDOMException = errorMessage => globalThis.DOMException === undefined ?\n\tnew AbortError(errorMessage) :\n\tnew DOMException(errorMessage);\n\n/**\nTODO: Remove below function and just 'reject(signal.reason)' when targeting Node 18.\n*/\nconst getAbortedReason = signal => {\n\tconst reason = signal.reason === undefined ?\n\t\tgetDOMException('This operation was aborted.') :\n\t\tsignal.reason;\n\n\treturn reason instanceof Error ? reason : getDOMException(reason);\n};\n\nexport default function pTimeout(promise, milliseconds, fallback, options) {\n\tlet timer;\n\n\tconst cancelablePromise = new Promise((resolve, reject) => {\n\t\tif (typeof milliseconds !== 'number' || Math.sign(milliseconds) !== 1) {\n\t\t\tthrow new TypeError(`Expected \\`milliseconds\\` to be a positive number, got \\`${milliseconds}\\``);\n\t\t}\n\n\t\tif (milliseconds === Number.POSITIVE_INFINITY) {\n\t\t\tresolve(promise);\n\t\t\treturn;\n\t\t}\n\n\t\toptions = {\n\t\t\tcustomTimers: {setTimeout, clearTimeout},\n\t\t\t...options\n\t\t};\n\n\t\tif (options.signal) {\n\t\t\tconst {signal} = options;\n\t\t\tif (signal.aborted) {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t}\n\n\t\t\tsignal.addEventListener('abort', () => {\n\t\t\t\treject(getAbortedReason(signal));\n\t\t\t});\n\t\t}\n\n\t\ttimer = options.customTimers.setTimeout.call(undefined, () => {\n\t\t\tif (typeof fallback === 'function') {\n\t\t\t\ttry {\n\t\t\t\t\tresolve(fallback());\n\t\t\t\t} catch (error) {\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst message = typeof fallback === 'string' ? fallback : `Promise timed out after ${milliseconds} milliseconds`;\n\t\t\tconst timeoutError = fallback instanceof Error ? fallback : new TimeoutError(message);\n\n\t\t\tif (typeof promise.cancel === 'function') {\n\t\t\t\tpromise.cancel();\n\t\t\t}\n\n\t\t\treject(timeoutError);\n\t\t}, milliseconds);\n\n\t\t(async () => {\n\t\t\ttry {\n\t\t\t\tresolve(await promise);\n\t\t\t} catch (error) {\n\t\t\t\treject(error);\n\t\t\t} finally {\n\t\t\t\toptions.customTimers.clearTimeout.call(undefined, timer);\n\t\t\t}\n\t\t})();\n\t});\n\n\tcancelablePromise.clear = () => {\n\t\tclearTimeout(timer);\n\t\ttimer = undefined;\n\t};\n\n\treturn cancelablePromise;\n}\n","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PriorityQueue_queue;\nimport lowerBound from './lower-bound.js';\nclass PriorityQueue {\n    constructor() {\n        _PriorityQueue_queue.set(this, []);\n    }\n    enqueue(run, options) {\n        options = {\n            priority: 0,\n            ...options,\n        };\n        const element = {\n            priority: options.priority,\n            run,\n        };\n        if (this.size && __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\")[this.size - 1].priority >= options.priority) {\n            __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").push(element);\n            return;\n        }\n        const index = lowerBound(__classPrivateFieldGet(this, _PriorityQueue_queue, \"f\"), element, (a, b) => b.priority - a.priority);\n        __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").splice(index, 0, element);\n    }\n    dequeue() {\n        const item = __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").shift();\n        return item === null || item === void 0 ? void 0 : item.run;\n    }\n    filter(options) {\n        return __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").filter((element) => element.priority === options.priority).map((element) => element.run);\n    }\n    get size() {\n        return __classPrivateFieldGet(this, _PriorityQueue_queue, \"f\").length;\n    }\n}\n_PriorityQueue_queue = new WeakMap();\nexport default PriorityQueue;\n","var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n    if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\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\");\n    return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n    if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\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\");\n    return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _PQueue_instances, _PQueue_carryoverConcurrencyCount, _PQueue_isIntervalIgnored, _PQueue_intervalCount, _PQueue_intervalCap, _PQueue_interval, _PQueue_intervalEnd, _PQueue_intervalId, _PQueue_timeoutId, _PQueue_queue, _PQueue_queueClass, _PQueue_pending, _PQueue_concurrency, _PQueue_isPaused, _PQueue_throwOnTimeout, _PQueue_doesIntervalAllowAnother_get, _PQueue_doesConcurrentAllowAnother_get, _PQueue_next, _PQueue_onResumeInterval, _PQueue_isIntervalPaused_get, _PQueue_tryToStartAnother, _PQueue_initializeIntervalIfNeeded, _PQueue_onInterval, _PQueue_processQueue, _PQueue_throwOnAbort, _PQueue_onEvent;\nimport { EventEmitter } from 'eventemitter3';\nimport pTimeout, { TimeoutError } from 'p-timeout';\nimport PriorityQueue from './priority-queue.js';\n/**\nThe error thrown by `queue.add()` when a job is aborted before it is run. See `signal`.\n*/\nexport class AbortError extends Error {\n}\n/**\nPromise queue with concurrency control.\n*/\nclass PQueue extends EventEmitter {\n    // TODO: The `throwOnTimeout` option should affect the return types of `add()` and `addAll()`\n    constructor(options) {\n        var _a, _b, _c, _d;\n        super();\n        _PQueue_instances.add(this);\n        _PQueue_carryoverConcurrencyCount.set(this, void 0);\n        _PQueue_isIntervalIgnored.set(this, void 0);\n        _PQueue_intervalCount.set(this, 0);\n        _PQueue_intervalCap.set(this, void 0);\n        _PQueue_interval.set(this, void 0);\n        _PQueue_intervalEnd.set(this, 0);\n        _PQueue_intervalId.set(this, void 0);\n        _PQueue_timeoutId.set(this, void 0);\n        _PQueue_queue.set(this, void 0);\n        _PQueue_queueClass.set(this, void 0);\n        _PQueue_pending.set(this, 0);\n        // The `!` is needed because of https://github.com/microsoft/TypeScript/issues/32194\n        _PQueue_concurrency.set(this, void 0);\n        _PQueue_isPaused.set(this, void 0);\n        _PQueue_throwOnTimeout.set(this, void 0);\n        /**\n        Per-operation timeout in milliseconds. Operations fulfill once `timeout` elapses if they haven't already.\n    \n        Applies to each future operation.\n        */\n        Object.defineProperty(this, \"timeout\", {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: void 0\n        });\n        // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n        options = {\n            carryoverConcurrencyCount: false,\n            intervalCap: Number.POSITIVE_INFINITY,\n            interval: 0,\n            concurrency: Number.POSITIVE_INFINITY,\n            autoStart: true,\n            queueClass: PriorityQueue,\n            ...options,\n        };\n        if (!(typeof options.intervalCap === 'number' && options.intervalCap >= 1)) {\n            throw new TypeError(`Expected \\`intervalCap\\` to be a number from 1 and up, got \\`${(_b = (_a = options.intervalCap) === null || _a === void 0 ? void 0 : _a.toString()) !== null && _b !== void 0 ? _b : ''}\\` (${typeof options.intervalCap})`);\n        }\n        if (options.interval === undefined || !(Number.isFinite(options.interval) && options.interval >= 0)) {\n            throw new TypeError(`Expected \\`interval\\` to be a finite number >= 0, got \\`${(_d = (_c = options.interval) === null || _c === void 0 ? void 0 : _c.toString()) !== null && _d !== void 0 ? _d : ''}\\` (${typeof options.interval})`);\n        }\n        __classPrivateFieldSet(this, _PQueue_carryoverConcurrencyCount, options.carryoverConcurrencyCount, \"f\");\n        __classPrivateFieldSet(this, _PQueue_isIntervalIgnored, options.intervalCap === Number.POSITIVE_INFINITY || options.interval === 0, \"f\");\n        __classPrivateFieldSet(this, _PQueue_intervalCap, options.intervalCap, \"f\");\n        __classPrivateFieldSet(this, _PQueue_interval, options.interval, \"f\");\n        __classPrivateFieldSet(this, _PQueue_queue, new options.queueClass(), \"f\");\n        __classPrivateFieldSet(this, _PQueue_queueClass, options.queueClass, \"f\");\n        this.concurrency = options.concurrency;\n        this.timeout = options.timeout;\n        __classPrivateFieldSet(this, _PQueue_throwOnTimeout, options.throwOnTimeout === true, \"f\");\n        __classPrivateFieldSet(this, _PQueue_isPaused, options.autoStart === false, \"f\");\n    }\n    get concurrency() {\n        return __classPrivateFieldGet(this, _PQueue_concurrency, \"f\");\n    }\n    set concurrency(newConcurrency) {\n        if (!(typeof newConcurrency === 'number' && newConcurrency >= 1)) {\n            throw new TypeError(`Expected \\`concurrency\\` to be a number from 1 and up, got \\`${newConcurrency}\\` (${typeof newConcurrency})`);\n        }\n        __classPrivateFieldSet(this, _PQueue_concurrency, newConcurrency, \"f\");\n        __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n    }\n    async add(function_, options = {}) {\n        options = {\n            timeout: this.timeout,\n            throwOnTimeout: __classPrivateFieldGet(this, _PQueue_throwOnTimeout, \"f\"),\n            ...options,\n        };\n        return new Promise((resolve, reject) => {\n            __classPrivateFieldGet(this, _PQueue_queue, \"f\").enqueue(async () => {\n                var _a;\n                var _b, _c;\n                __classPrivateFieldSet(this, _PQueue_pending, (_b = __classPrivateFieldGet(this, _PQueue_pending, \"f\"), _b++, _b), \"f\");\n                __classPrivateFieldSet(this, _PQueue_intervalCount, (_c = __classPrivateFieldGet(this, _PQueue_intervalCount, \"f\"), _c++, _c), \"f\");\n                try {\n                    // TODO: Use options.signal?.throwIfAborted() when targeting Node.js 18\n                    if ((_a = options.signal) === null || _a === void 0 ? void 0 : _a.aborted) {\n                        // TODO: Use ABORT_ERR code when targeting Node.js 16 (https://nodejs.org/docs/latest-v16.x/api/errors.html#abort_err)\n                        throw new AbortError('The task was aborted.');\n                    }\n                    let operation = function_({ signal: options.signal });\n                    if (options.timeout) {\n                        operation = pTimeout(Promise.resolve(operation), options.timeout);\n                    }\n                    if (options.signal) {\n                        operation = Promise.race([operation, __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_throwOnAbort).call(this, options.signal)]);\n                    }\n                    const result = await operation;\n                    resolve(result);\n                    this.emit('completed', result);\n                }\n                catch (error) {\n                    if (error instanceof TimeoutError && !options.throwOnTimeout) {\n                        resolve();\n                        return;\n                    }\n                    reject(error);\n                    this.emit('error', error);\n                }\n                finally {\n                    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_next).call(this);\n                }\n            }, options);\n            this.emit('add');\n            __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this);\n        });\n    }\n    async addAll(functions, options) {\n        return Promise.all(functions.map(async (function_) => this.add(function_, options)));\n    }\n    /**\n    Start (or resume) executing enqueued tasks within concurrency limit. No need to call this if queue is not paused (via `options.autoStart = false` or by `.pause()` method.)\n    */\n    start() {\n        if (!__classPrivateFieldGet(this, _PQueue_isPaused, \"f\")) {\n            return this;\n        }\n        __classPrivateFieldSet(this, _PQueue_isPaused, false, \"f\");\n        __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n        return this;\n    }\n    /**\n    Put queue execution on hold.\n    */\n    pause() {\n        __classPrivateFieldSet(this, _PQueue_isPaused, true, \"f\");\n    }\n    /**\n    Clear the queue.\n    */\n    clear() {\n        __classPrivateFieldSet(this, _PQueue_queue, new (__classPrivateFieldGet(this, _PQueue_queueClass, \"f\"))(), \"f\");\n    }\n    /**\n    Can be called multiple times. Useful if you for example add additional items at a later time.\n\n    @returns A promise that settles when the queue becomes empty.\n    */\n    async onEmpty() {\n        // Instantly resolve if the queue is empty\n        if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n            return;\n        }\n        await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'empty');\n    }\n    /**\n    @returns A promise that settles when the queue size is less than the given limit: `queue.size < limit`.\n\n    If you want to avoid having the queue grow beyond a certain size you can `await queue.onSizeLessThan()` before adding a new item.\n\n    Note that this only limits the number of items waiting to start. There could still be up to `concurrency` jobs already running that this call does not include in its calculation.\n    */\n    async onSizeLessThan(limit) {\n        // Instantly resolve if the queue is empty.\n        if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size < limit) {\n            return;\n        }\n        await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'next', () => __classPrivateFieldGet(this, _PQueue_queue, \"f\").size < limit);\n    }\n    /**\n    The difference with `.onEmpty` is that `.onIdle` guarantees that all work from the queue has finished. `.onEmpty` merely signals that the queue is empty, but it could mean that some promises haven't completed yet.\n\n    @returns A promise that settles when the queue becomes empty, and all promises have completed; `queue.size === 0 && queue.pending === 0`.\n    */\n    async onIdle() {\n        // Instantly resolve if none pending and if nothing else is queued\n        if (__classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n            return;\n        }\n        await __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onEvent).call(this, 'idle');\n    }\n    /**\n    Size of the queue, the number of queued items waiting to run.\n    */\n    get size() {\n        return __classPrivateFieldGet(this, _PQueue_queue, \"f\").size;\n    }\n    /**\n    Size of the queue, filtered by the given options.\n\n    For example, this can be used to find the number of items remaining in the queue with a specific priority level.\n    */\n    sizeBy(options) {\n        // eslint-disable-next-line unicorn/no-array-callback-reference\n        return __classPrivateFieldGet(this, _PQueue_queue, \"f\").filter(options).length;\n    }\n    /**\n    Number of running items (no longer in the queue).\n    */\n    get pending() {\n        return __classPrivateFieldGet(this, _PQueue_pending, \"f\");\n    }\n    /**\n    Whether the queue is currently paused.\n    */\n    get isPaused() {\n        return __classPrivateFieldGet(this, _PQueue_isPaused, \"f\");\n    }\n}\n_PQueue_carryoverConcurrencyCount = new WeakMap(), _PQueue_isIntervalIgnored = new WeakMap(), _PQueue_intervalCount = new WeakMap(), _PQueue_intervalCap = new WeakMap(), _PQueue_interval = new WeakMap(), _PQueue_intervalEnd = new WeakMap(), _PQueue_intervalId = new WeakMap(), _PQueue_timeoutId = new WeakMap(), _PQueue_queue = new WeakMap(), _PQueue_queueClass = new WeakMap(), _PQueue_pending = new WeakMap(), _PQueue_concurrency = new WeakMap(), _PQueue_isPaused = new WeakMap(), _PQueue_throwOnTimeout = new WeakMap(), _PQueue_instances = new WeakSet(), _PQueue_doesIntervalAllowAnother_get = function _PQueue_doesIntervalAllowAnother_get() {\n    return __classPrivateFieldGet(this, _PQueue_isIntervalIgnored, \"f\") || __classPrivateFieldGet(this, _PQueue_intervalCount, \"f\") < __classPrivateFieldGet(this, _PQueue_intervalCap, \"f\");\n}, _PQueue_doesConcurrentAllowAnother_get = function _PQueue_doesConcurrentAllowAnother_get() {\n    return __classPrivateFieldGet(this, _PQueue_pending, \"f\") < __classPrivateFieldGet(this, _PQueue_concurrency, \"f\");\n}, _PQueue_next = function _PQueue_next() {\n    var _a;\n    __classPrivateFieldSet(this, _PQueue_pending, (_a = __classPrivateFieldGet(this, _PQueue_pending, \"f\"), _a--, _a), \"f\");\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this);\n    this.emit('next');\n}, _PQueue_onResumeInterval = function _PQueue_onResumeInterval() {\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onInterval).call(this);\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_initializeIntervalIfNeeded).call(this);\n    __classPrivateFieldSet(this, _PQueue_timeoutId, undefined, \"f\");\n}, _PQueue_isIntervalPaused_get = function _PQueue_isIntervalPaused_get() {\n    const now = Date.now();\n    if (__classPrivateFieldGet(this, _PQueue_intervalId, \"f\") === undefined) {\n        const delay = __classPrivateFieldGet(this, _PQueue_intervalEnd, \"f\") - now;\n        if (delay < 0) {\n            // Act as the interval was done\n            // We don't need to resume it here because it will be resumed on line 160\n            __classPrivateFieldSet(this, _PQueue_intervalCount, (__classPrivateFieldGet(this, _PQueue_carryoverConcurrencyCount, \"f\")) ? __classPrivateFieldGet(this, _PQueue_pending, \"f\") : 0, \"f\");\n        }\n        else {\n            // Act as the interval is pending\n            if (__classPrivateFieldGet(this, _PQueue_timeoutId, \"f\") === undefined) {\n                __classPrivateFieldSet(this, _PQueue_timeoutId, setTimeout(() => {\n                    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onResumeInterval).call(this);\n                }, delay), \"f\");\n            }\n            return true;\n        }\n    }\n    return false;\n}, _PQueue_tryToStartAnother = function _PQueue_tryToStartAnother() {\n    if (__classPrivateFieldGet(this, _PQueue_queue, \"f\").size === 0) {\n        // We can clear the interval (\"pause\")\n        // Because we can redo it later (\"resume\")\n        if (__classPrivateFieldGet(this, _PQueue_intervalId, \"f\")) {\n            clearInterval(__classPrivateFieldGet(this, _PQueue_intervalId, \"f\"));\n        }\n        __classPrivateFieldSet(this, _PQueue_intervalId, undefined, \"f\");\n        this.emit('empty');\n        if (__classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0) {\n            this.emit('idle');\n        }\n        return false;\n    }\n    if (!__classPrivateFieldGet(this, _PQueue_isPaused, \"f\")) {\n        const canInitializeInterval = !__classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_isIntervalPaused_get);\n        if (__classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_doesIntervalAllowAnother_get) && __classPrivateFieldGet(this, _PQueue_instances, \"a\", _PQueue_doesConcurrentAllowAnother_get)) {\n            const job = __classPrivateFieldGet(this, _PQueue_queue, \"f\").dequeue();\n            if (!job) {\n                return false;\n            }\n            this.emit('active');\n            job();\n            if (canInitializeInterval) {\n                __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_initializeIntervalIfNeeded).call(this);\n            }\n            return true;\n        }\n    }\n    return false;\n}, _PQueue_initializeIntervalIfNeeded = function _PQueue_initializeIntervalIfNeeded() {\n    if (__classPrivateFieldGet(this, _PQueue_isIntervalIgnored, \"f\") || __classPrivateFieldGet(this, _PQueue_intervalId, \"f\") !== undefined) {\n        return;\n    }\n    __classPrivateFieldSet(this, _PQueue_intervalId, setInterval(() => {\n        __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_onInterval).call(this);\n    }, __classPrivateFieldGet(this, _PQueue_interval, \"f\")), \"f\");\n    __classPrivateFieldSet(this, _PQueue_intervalEnd, Date.now() + __classPrivateFieldGet(this, _PQueue_interval, \"f\"), \"f\");\n}, _PQueue_onInterval = function _PQueue_onInterval() {\n    if (__classPrivateFieldGet(this, _PQueue_intervalCount, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_pending, \"f\") === 0 && __classPrivateFieldGet(this, _PQueue_intervalId, \"f\")) {\n        clearInterval(__classPrivateFieldGet(this, _PQueue_intervalId, \"f\"));\n        __classPrivateFieldSet(this, _PQueue_intervalId, undefined, \"f\");\n    }\n    __classPrivateFieldSet(this, _PQueue_intervalCount, __classPrivateFieldGet(this, _PQueue_carryoverConcurrencyCount, \"f\") ? __classPrivateFieldGet(this, _PQueue_pending, \"f\") : 0, \"f\");\n    __classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_processQueue).call(this);\n}, _PQueue_processQueue = function _PQueue_processQueue() {\n    // eslint-disable-next-line no-empty\n    while (__classPrivateFieldGet(this, _PQueue_instances, \"m\", _PQueue_tryToStartAnother).call(this)) { }\n}, _PQueue_throwOnAbort = async function _PQueue_throwOnAbort(signal) {\n    return new Promise((_resolve, reject) => {\n        signal.addEventListener('abort', () => {\n            // TODO: Reject with signal.throwIfAborted() when targeting Node.js 18\n            // TODO: Use ABORT_ERR code when targeting Node.js 16 (https://nodejs.org/docs/latest-v16.x/api/errors.html#abort_err)\n            reject(new AbortError('The task was aborted.'));\n        }, { once: true });\n    });\n}, _PQueue_onEvent = async function _PQueue_onEvent(event, filter) {\n    return new Promise(resolve => {\n        const listener = () => {\n            if (filter && !filter()) {\n                return;\n            }\n            this.off(event, listener);\n            resolve();\n        };\n        this.on(event, listener);\n    });\n};\nexport default PQueue;\n","// Port of lower_bound from https://en.cppreference.com/w/cpp/algorithm/lower_bound\n// Used to compute insertion index to keep queue sorted after insertion\nexport default function lowerBound(array, value, comparator) {\n    let first = 0;\n    let count = array.length;\n    while (count > 0) {\n        const step = Math.trunc(count / 2);\n        let it = first + step;\n        if (comparator(array[it], value) <= 0) {\n            first = ++it;\n            count -= step + 1;\n        }\n        else {\n            count = step;\n        }\n    }\n    return first;\n}\n","import{options as n}from\"preact\";var t,r,u,i,o=0,f=[],c=n,e=c.__b,a=c.__r,v=c.diffed,l=c.__c,m=c.unmount,s=c.__;function p(n,t){c.__h&&c.__h(r,n,o||t),o=0;var u=r.__H||(r.__H={__:[],__h:[]});return n>=u.__.length&&u.__.push({}),u.__[n]}function d(n){return o=1,h(D,n)}function h(n,u,i){var o=p(t++,2);if(o.t=n,!o.__c&&(o.__=[i?i(u):D(void 0,u),function(n){var t=o.__N?o.__N[0]:o.__[0],r=o.t(t,n);t!==r&&(o.__N=[r,o.__[1]],o.__c.setState({}))}],o.__c=r,!r.__f)){var f=function(n,t,r){if(!o.__c.__H)return!0;var u=o.__c.__H.__.filter(function(n){return n.__c});if(u.every(function(n){return!n.__N}))return!c||c.call(this,n,t,r);var i=o.__c.props!==n;return u.some(function(n){if(n.__N){var t=n.__[0];n.__=n.__N,n.__N=void 0,t!==n.__[0]&&(i=!0)}}),c&&c.call(this,n,t,r)||i};r.__f=!0;var c=r.shouldComponentUpdate,e=r.componentWillUpdate;r.componentWillUpdate=function(n,t,r){if(this.__e){var u=c;c=void 0,f(n,t,r),c=u}e&&e.call(this,n,t,r)},r.shouldComponentUpdate=f}return o.__N||o.__}function y(n,u){var i=p(t++,3);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__H.__h.push(i))}function _(n,u){var i=p(t++,4);!c.__s&&C(i.__H,u)&&(i.__=n,i.u=u,r.__h.push(i))}function A(n){return o=5,T(function(){return{current:n}},[])}function F(n,t,r){o=6,_(function(){if(\"function\"==typeof n){var r=n(t());return function(){n(null),r&&\"function\"==typeof r&&r()}}if(n)return n.current=t(),function(){return n.current=null}},null==r?r:r.concat(n))}function T(n,r){var u=p(t++,7);return C(u.__H,r)&&(u.__=n(),u.__H=r,u.__h=n),u.__}function q(n,t){return o=8,T(function(){return n},t)}function x(n){var u=r.context[n.__c],i=p(t++,9);return i.c=n,u?(null==i.__&&(i.__=!0,u.sub(r)),u.props.value):n.__}function P(n,t){c.useDebugValue&&c.useDebugValue(t?t(n):n)}function b(n){var u=p(t++,10),i=d();return u.__=n,r.componentDidCatch||(r.componentDidCatch=function(n,t){u.__&&u.__(n,t),i[1](n)}),[i[0],function(){i[1](void 0)}]}function g(){var n=p(t++,11);if(!n.__){for(var u=r.__v;null!==u&&!u.__m&&null!==u.__;)u=u.__;var i=u.__m||(u.__m=[0,0]);n.__=\"P\"+i[0]+\"-\"+i[1]++}return n.__}function j(){for(var n;n=f.shift();){var t=n.__H;if(n.__P&&t)try{t.__h.some(z),t.__h.some(B),t.__h=[]}catch(r){t.__h=[],c.__e(r,n.__v)}}}c.__b=function(n){r=null,e&&e(n)},c.__=function(n,t){n&&t.__k&&t.__k.__m&&(n.__m=t.__k.__m),s&&s(n,t)},c.__r=function(n){a&&a(n),t=0;var i=(r=n.__c).__H;i&&(u===r?(i.__h=[],r.__h=[],i.__.some(function(n){n.__N&&(n.__=n.__N),n.u=n.__N=void 0})):(i.__h.some(z),i.__h.some(B),i.__h=[],t=0)),u=r},c.diffed=function(n){v&&v(n);var t=n.__c;t&&t.__H&&(t.__H.__h.length&&(1!==f.push(t)&&i===c.requestAnimationFrame||((i=c.requestAnimationFrame)||w)(j)),t.__H.__.some(function(n){n.u&&(n.__H=n.u),n.u=void 0})),u=r=null},c.__c=function(n,t){t.some(function(n){try{n.__h.some(z),n.__h=n.__h.filter(function(n){return!n.__||B(n)})}catch(r){t.some(function(n){n.__h&&(n.__h=[])}),t=[],c.__e(r,n.__v)}}),l&&l(n,t)},c.unmount=function(n){m&&m(n);var t,r=n.__c;r&&r.__H&&(r.__H.__.some(function(n){try{z(n)}catch(n){t=n}}),r.__H=void 0,t&&c.__e(t,r.__v))};var k=\"function\"==typeof requestAnimationFrame;function w(n){var t,r=function(){clearTimeout(u),k&&cancelAnimationFrame(t),setTimeout(n)},u=setTimeout(r,35);k&&(t=requestAnimationFrame(r))}function z(n){var t=r,u=n.__c;\"function\"==typeof u&&(n.__c=void 0,u()),r=t}function B(n){var t=r;n.__c=n.__(),r=t}function C(n,t){return!n||n.length!==t.length||t.some(function(t,r){return t!==n[r]})}function D(n,t){return\"function\"==typeof t?t(n):t}export{q as useCallback,x as useContext,P as useDebugValue,y as useEffect,b as useErrorBoundary,g as useId,F as useImperativeHandle,_ as useLayoutEffect,T as useMemo,h as useReducer,A as useRef,d as useState};\n//# sourceMappingURL=hooks.module.js.map\n","/* eslint-disable react/require-default-props */\nimport { h } from 'preact';\nimport { useCallback } from 'preact/hooks';\nfunction GoogleIcon() {\n  return h(\"svg\", {\n    width: \"26\",\n    height: \"26\",\n    viewBox: \"0 0 26 26\",\n    xmlns: \"http://www.w3.org/2000/svg\"\n  }, h(\"g\", {\n    fill: \"none\",\n    \"fill-rule\": \"evenodd\"\n  }, h(\"circle\", {\n    fill: \"#FFF\",\n    cx: \"13\",\n    cy: \"13\",\n    r: \"13\"\n  }), h(\"path\", {\n    d: \"M21.64 13.205c0-.639-.057-1.252-.164-1.841H13v3.481h4.844a4.14 4.14 0 01-1.796 2.716v2.259h2.908c1.702-1.567 2.684-3.875 2.684-6.615z\",\n    fill: \"#4285F4\",\n    \"fill-rule\": \"nonzero\"\n  }), h(\"path\", {\n    d: \"M13 22c2.43 0 4.467-.806 5.956-2.18l-2.908-2.259c-.806.54-1.837.86-3.048.86-2.344 0-4.328-1.584-5.036-3.711H4.957v2.332A8.997 8.997 0 0013 22z\",\n    fill: \"#34A853\",\n    \"fill-rule\": \"nonzero\"\n  }), h(\"path\", {\n    d: \"M7.964 14.71A5.41 5.41 0 017.682 13c0-.593.102-1.17.282-1.71V8.958H4.957A8.996 8.996 0 004 13c0 1.452.348 2.827.957 4.042l3.007-2.332z\",\n    fill: \"#FBBC05\",\n    \"fill-rule\": \"nonzero\"\n  }), h(\"path\", {\n    d: \"M13 7.58c1.321 0 2.508.454 3.44 1.345l2.582-2.58C17.463 4.891 15.426 4 13 4a8.997 8.997 0 00-8.043 4.958l3.007 2.332C8.672 9.163 10.656 7.58 13 7.58z\",\n    fill: \"#EA4335\",\n    \"fill-rule\": \"nonzero\"\n  }), h(\"path\", {\n    d: \"M4 4h18v18H4z\"\n  })));\n}\nfunction DefaultForm(_ref) {\n  let {\n    pluginName,\n    i18n,\n    onAuth\n  } = _ref;\n  // In order to comply with Google's brand we need to create a different button\n  // for the Google Drive plugin\n  const isGoogleDrive = pluginName === 'Google Drive';\n  const onSubmit = useCallback(e => {\n    e.preventDefault();\n    onAuth();\n  }, [onAuth]);\n  return h(\"form\", {\n    onSubmit: onSubmit\n  }, isGoogleDrive ? h(\"button\", {\n    type: \"submit\",\n    className: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary uppy-Provider-authBtn uppy-Provider-btn-google\",\n    \"data-uppy-super-focusable\": true\n  }, h(GoogleIcon, null), i18n('signInWithGoogle')) : h(\"button\", {\n    type: \"submit\",\n    className: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary uppy-Provider-authBtn\",\n    \"data-uppy-super-focusable\": true\n  }, i18n('authenticateWith', {\n    pluginName\n  })));\n}\nconst defaultRenderForm = _ref2 => {\n  let {\n    pluginName,\n    i18n,\n    onAuth\n  } = _ref2;\n  return h(DefaultForm, {\n    pluginName: pluginName,\n    i18n: i18n,\n    onAuth: onAuth\n  });\n};\nexport default function AuthView(props) {\n  const {\n    loading,\n    pluginName,\n    pluginIcon,\n    i18n,\n    handleAuth,\n    renderForm = defaultRenderForm\n  } = props;\n  return h(\"div\", {\n    className: \"uppy-Provider-auth\"\n  }, h(\"div\", {\n    className: \"uppy-Provider-authIcon\"\n  }, pluginIcon()), h(\"div\", {\n    className: \"uppy-Provider-authTitle\"\n  }, i18n('authenticateWithTitle', {\n    pluginName\n  })), h(\"div\", {\n    className: \"uppy-Provider-authForm\"\n  }, renderForm({\n    pluginName,\n    i18n,\n    loading,\n    onAuth: handleAuth\n  })));\n}","import { h, Fragment } from 'preact';\nexport default function User(_ref) {\n  let {\n    i18n,\n    logout,\n    username\n  } = _ref;\n  return h(Fragment, null, h(\"span\", {\n    className: \"uppy-ProviderBrowser-user\",\n    key: \"username\"\n  }, username), h(\"button\", {\n    type: \"button\",\n    onClick: logout,\n    className: \"uppy-u-reset uppy-c-btn uppy-ProviderBrowser-userLogout\",\n    key: \"logout\"\n  }, i18n('logOut')));\n}","import { h, Fragment } from 'preact';\nconst Breadcrumb = props => {\n  const {\n    getFolder,\n    title,\n    isLast\n  } = props;\n  return h(Fragment, null, h(\"button\", {\n    type: \"button\",\n    className: \"uppy-u-reset uppy-c-btn\",\n    onClick: getFolder\n  }, title), !isLast ? ' / ' : '');\n};\nexport default function Breadcrumbs(props) {\n  const {\n    getFolder,\n    title,\n    breadcrumbsIcon,\n    breadcrumbs\n  } = props;\n  return h(\"div\", {\n    className: \"uppy-Provider-breadcrumbs\"\n  }, h(\"div\", {\n    className: \"uppy-Provider-breadcrumbsIcon\"\n  }, breadcrumbsIcon), breadcrumbs.map((directory, i) => h(Breadcrumb, {\n    key: directory.id,\n    getFolder: () => getFolder(directory.requestPath, directory.name),\n    title: i === 0 ? title : directory.name,\n    isLast: i + 1 === breadcrumbs.length\n  })));\n}","/* eslint-disable react/destructuring-assignment */\nimport { h, Fragment } from 'preact';\nimport User from \"./User.js\";\nimport Breadcrumbs from \"../Breadcrumbs.js\";\nexport default function Header(props) {\n  return h(Fragment, null, props.showBreadcrumbs && h(Breadcrumbs, {\n    getFolder: props.getFolder,\n    breadcrumbs: props.breadcrumbs,\n    breadcrumbsIcon: props.pluginIcon && props.pluginIcon(),\n    title: props.title\n  }), h(User, {\n    logout: props.logout,\n    username: props.username,\n    i18n: props.i18n\n  }));\n}","import getFileNameAndExtension from \"./getFileNameAndExtension.js\";\nexport default function remoteFileObjToLocal(file) {\n  return {\n    ...file,\n    type: file.mimeType,\n    extension: file.name ? getFileNameAndExtension(file.name).extension : null\n  };\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/**\n * Adapted from preact-virtual-list: https://github.com/developit/preact-virtual-list\n *\n * © 2016 Jason Miller\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 all\n * 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 THE\n * SOFTWARE.\n *\n * Adaptations:\n * - Added role=presentation to helper elements\n * - Tweaked styles for Uppy's Dashboard use case\n */\n\nimport { h, Component } from 'preact';\nconst STYLE_INNER = {\n  position: 'relative',\n  // Disabled for our use case: the wrapper elements around FileList already deal with overflow,\n  // and this additional property would hide things that we want to show.\n  //\n  // overflow: 'hidden',\n  width: '100%',\n  minHeight: '100%'\n};\nconst STYLE_CONTENT = {\n  position: 'absolute',\n  top: 0,\n  left: 0,\n  // Because the `top` value gets set to some offset, this `height` being 100% would make the scrollbar\n  // stretch far beyond the content. For our use case, the content div actually can get its height from\n  // the elements inside it, so we don't need to specify a `height` property at all.\n  //\n  // height: '100%',\n  width: '100%',\n  overflow: 'visible'\n};\nclass VirtualList extends Component {\n  constructor(props) {\n    super(props);\n\n    // The currently focused node, used to retain focus when the visible rows change.\n    // To avoid update loops, this should not cause state updates, so it's kept as a plain property.\n    this.handleScroll = () => {\n      this.setState({\n        offset: this.base.scrollTop\n      });\n    };\n    this.handleResize = () => {\n      this.resize();\n    };\n    this.focusElement = null;\n    this.state = {\n      offset: 0,\n      height: 0\n    };\n  }\n  componentDidMount() {\n    this.resize();\n    window.addEventListener('resize', this.handleResize);\n  }\n\n  // TODO: refactor to stable lifecycle method\n  // eslint-disable-next-line\n  componentWillUpdate() {\n    if (this.base.contains(document.activeElement)) {\n      this.focusElement = document.activeElement;\n    }\n  }\n  componentDidUpdate() {\n    // Maintain focus when rows are added and removed.\n    if (this.focusElement && this.focusElement.parentNode && document.activeElement !== this.focusElement) {\n      this.focusElement.focus();\n    }\n    this.focusElement = null;\n    this.resize();\n  }\n  componentWillUnmount() {\n    window.removeEventListener('resize', this.handleResize);\n  }\n  resize() {\n    const {\n      height\n    } = this.state;\n    if (height !== this.base.offsetHeight) {\n      this.setState({\n        height: this.base.offsetHeight\n      });\n    }\n  }\n  render(_ref) {\n    let {\n      data,\n      rowHeight,\n      renderRow,\n      overscanCount = 10,\n      ...props\n    } = _ref;\n    const {\n      offset,\n      height\n    } = this.state;\n    // first visible row index\n    let start = Math.floor(offset / rowHeight);\n\n    // actual number of visible rows (without overscan)\n    let visibleRowCount = Math.floor(height / rowHeight);\n\n    // Overscan: render blocks of rows modulo an overscan row count\n    // This dramatically reduces DOM writes during scrolling\n    if (overscanCount) {\n      start = Math.max(0, start - start % overscanCount);\n      visibleRowCount += overscanCount;\n    }\n\n    // last visible + overscan row index + padding to allow keyboard focus to travel past the visible area\n    const end = start + visibleRowCount + 4;\n\n    // data slice currently in viewport plus overscan items\n    const selection = data.slice(start, end);\n    const styleInner = {\n      ...STYLE_INNER,\n      height: data.length * rowHeight\n    };\n    const styleContent = {\n      ...STYLE_CONTENT,\n      top: start * rowHeight\n    };\n\n    // The `role=\"presentation\"` attributes ensure that these wrapper elements are not treated as list\n    // items by accessibility and outline tools.\n    return (\n      // eslint-disable-next-line react/jsx-props-no-spreading\n      h(\"div\", _extends({\n        onScroll: this.handleScroll\n      }, props), h(\"div\", {\n        role: \"presentation\",\n        style: styleInner\n      }, h(\"div\", {\n        role: \"presentation\",\n        style: styleContent\n      }, selection.map(renderRow))))\n    );\n  }\n}\nexport default VirtualList;","/* eslint-disable react/require-default-props */\nimport { h, Fragment } from 'preact';\nimport { useEffect, useState, useCallback } from 'preact/hooks';\nimport { nanoid } from 'nanoid/non-secure';\nexport default function SearchFilterInput(props) {\n  const {\n    search,\n    searchOnInput,\n    searchTerm,\n    showButton,\n    inputLabel,\n    clearSearchLabel,\n    buttonLabel,\n    clearSearch,\n    inputClassName,\n    buttonCSSClassName\n  } = props;\n  const [searchText, setSearchText] = useState(searchTerm != null ? searchTerm : '');\n  // const debouncedSearch = debounce((q) => search(q), 1000)\n\n  const validateAndSearch = useCallback(ev => {\n    ev.preventDefault();\n    search(searchText);\n  }, [search, searchText]);\n  const handleInput = useCallback(ev => {\n    const inputValue = ev.target.value;\n    setSearchText(inputValue);\n    if (searchOnInput) search(inputValue);\n  }, [setSearchText, searchOnInput, search]);\n  const handleReset = () => {\n    setSearchText('');\n    if (clearSearch) clearSearch();\n  };\n  const [form] = useState(() => {\n    const formEl = document.createElement('form');\n    formEl.setAttribute('tabindex', '-1');\n    formEl.id = nanoid();\n    return formEl;\n  });\n  useEffect(() => {\n    document.body.appendChild(form);\n    form.addEventListener('submit', validateAndSearch);\n    return () => {\n      form.removeEventListener('submit', validateAndSearch);\n      document.body.removeChild(form);\n    };\n  }, [form, validateAndSearch]);\n  return h(Fragment, null, h(\"input\", {\n    className: `uppy-u-reset ${inputClassName}`,\n    type: \"search\",\n    \"aria-label\": inputLabel,\n    placeholder: inputLabel,\n    value: searchText,\n    onInput: handleInput,\n    form: form.id,\n    \"data-uppy-super-focusable\": true\n  }), !showButton && h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon uppy-ProviderBrowser-searchFilterIcon\",\n    width: \"12\",\n    height: \"12\",\n    viewBox: \"0 0 12 12\"\n  }, h(\"path\", {\n    d: \"M8.638 7.99l3.172 3.172a.492.492 0 1 1-.697.697L7.91 8.656a4.977 4.977 0 0 1-2.983.983C2.206 9.639 0 7.481 0 4.819 0 2.158 2.206 0 4.927 0c2.721 0 4.927 2.158 4.927 4.82a4.74 4.74 0 0 1-1.216 3.17zm-3.71.685c2.176 0 3.94-1.726 3.94-3.856 0-2.129-1.764-3.855-3.94-3.855C2.75.964.984 2.69.984 4.819c0 2.13 1.765 3.856 3.942 3.856z\"\n  })), !showButton && searchText && h(\"button\", {\n    className: \"uppy-u-reset uppy-ProviderBrowser-searchFilterReset\",\n    type: \"button\",\n    \"aria-label\": clearSearchLabel,\n    title: clearSearchLabel,\n    onClick: handleReset\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    viewBox: \"0 0 19 19\"\n  }, h(\"path\", {\n    d: \"M17.318 17.232L9.94 9.854 9.586 9.5l-.354.354-7.378 7.378h.707l-.62-.62v.706L9.318 9.94l.354-.354-.354-.354L1.94 1.854v.707l.62-.62h-.706l7.378 7.378.354.354.354-.354 7.378-7.378h-.707l.622.62v-.706L9.854 9.232l-.354.354.354.354 7.378 7.378.708-.707-7.38-7.378v.708l7.38-7.38.353-.353-.353-.353-.622-.622-.353-.353-.354.352-7.378 7.38h.708L2.56 1.23 2.208.88l-.353.353-.622.62-.353.355.352.353 7.38 7.38v-.708l-7.38 7.38-.353.353.352.353.622.622.353.353.354-.353 7.38-7.38h-.708l7.38 7.38z\"\n  }))), showButton && h(\"button\", {\n    className: `uppy-u-reset uppy-c-btn uppy-c-btn-primary ${buttonCSSClassName}`,\n    type: \"submit\",\n    form: form.id\n  }, buttonLabel));\n}","import { h } from 'preact';\nexport default function FooterActions(_ref) {\n  let {\n    cancel,\n    done,\n    i18n,\n    selected\n  } = _ref;\n  return h(\"div\", {\n    className: \"uppy-ProviderBrowser-footer\"\n  }, h(\"button\", {\n    className: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary\",\n    onClick: done,\n    type: \"button\"\n  }, i18n('selectX', {\n    smart_count: selected\n  })), h(\"button\", {\n    className: \"uppy-u-reset uppy-c-btn uppy-c-btn-link\",\n    onClick: cancel,\n    type: \"button\"\n  }, i18n('cancel')));\n}","/* eslint-disable react/require-default-props */\nimport { h } from 'preact';\nfunction FileIcon() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    width: 11,\n    height: 14.5,\n    viewBox: \"0 0 44 58\"\n  }, h(\"path\", {\n    d: \"M27.437.517a1 1 0 0 0-.094.03H4.25C2.037.548.217 2.368.217 4.58v48.405c0 2.212 1.82 4.03 4.03 4.03H39.03c2.21 0 4.03-1.818 4.03-4.03V15.61a1 1 0 0 0-.03-.28 1 1 0 0 0 0-.093 1 1 0 0 0-.03-.032 1 1 0 0 0 0-.03 1 1 0 0 0-.032-.063 1 1 0 0 0-.03-.063 1 1 0 0 0-.032 0 1 1 0 0 0-.03-.063 1 1 0 0 0-.032-.03 1 1 0 0 0-.03-.063 1 1 0 0 0-.063-.062l-14.593-14a1 1 0 0 0-.062-.062A1 1 0 0 0 28 .708a1 1 0 0 0-.374-.157 1 1 0 0 0-.156 0 1 1 0 0 0-.03-.03l-.003-.003zM4.25 2.547h22.218v9.97c0 2.21 1.82 4.03 4.03 4.03h10.564v36.438a2.02 2.02 0 0 1-2.032 2.032H4.25c-1.13 0-2.032-.9-2.032-2.032V4.58c0-1.13.902-2.032 2.03-2.032zm24.218 1.345l10.375 9.937.75.718H30.5c-1.13 0-2.032-.9-2.032-2.03V3.89z\"\n  }));\n}\nfunction FolderIcon() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    style: {\n      minWidth: 16,\n      marginRight: 3\n    },\n    viewBox: \"0 0 276.157 276.157\"\n  }, h(\"path\", {\n    d: \"M273.08 101.378c-3.3-4.65-8.86-7.32-15.254-7.32h-24.34V67.59c0-10.2-8.3-18.5-18.5-18.5h-85.322c-3.63 0-9.295-2.875-11.436-5.805l-6.386-8.735c-4.982-6.814-15.104-11.954-23.546-11.954H58.73c-9.292 0-18.638 6.608-21.737 15.372l-2.033 5.752c-.958 2.71-4.72 5.37-7.596 5.37H18.5C8.3 49.09 0 57.39 0 67.59v167.07c0 .886.16 1.73.443 2.52.152 3.306 1.18 6.424 3.053 9.064 3.3 4.652 8.86 7.32 15.255 7.32h188.487c11.395 0 23.27-8.425 27.035-19.18l40.677-116.188c2.11-6.035 1.43-12.164-1.87-16.816zM18.5 64.088h8.864c9.295 0 18.64-6.607 21.738-15.37l2.032-5.75c.96-2.712 4.722-5.373 7.597-5.373h29.565c3.63 0 9.295 2.876 11.437 5.806l6.386 8.735c4.982 6.815 15.104 11.954 23.546 11.954h85.322c1.898 0 3.5 1.602 3.5 3.5v26.47H69.34c-11.395 0-23.27 8.423-27.035 19.178L15 191.23V67.59c0-1.898 1.603-3.5 3.5-3.5zm242.29 49.15l-40.676 116.188c-1.674 4.78-7.812 9.135-12.877 9.135H18.75c-1.447 0-2.576-.372-3.02-.997-.442-.625-.422-1.814.057-3.18l40.677-116.19c1.674-4.78 7.812-9.134 12.877-9.134h188.487c1.448 0 2.577.372 3.02.997.443.625.423 1.814-.056 3.18z\"\n  }));\n}\nfunction VideoIcon() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    style: {\n      width: 16,\n      marginRight: 4\n    },\n    viewBox: \"0 0 58 58\"\n  }, h(\"path\", {\n    d: \"M36.537 28.156l-11-7a1.005 1.005 0 0 0-1.02-.033C24.2 21.3 24 21.635 24 22v14a1 1 0 0 0 1.537.844l11-7a1.002 1.002 0 0 0 0-1.688zM26 34.18V23.82L34.137 29 26 34.18z\"\n  }), h(\"path\", {\n    d: \"M57 6H1a1 1 0 0 0-1 1v44a1 1 0 0 0 1 1h56a1 1 0 0 0 1-1V7a1 1 0 0 0-1-1zM10 28H2v-9h8v9zm-8 2h8v9H2v-9zm10 10V8h34v42H12V40zm44-12h-8v-9h8v9zm-8 2h8v9h-8v-9zm8-22v9h-8V8h8zM2 8h8v9H2V8zm0 42v-9h8v9H2zm54 0h-8v-9h8v9z\"\n  }));\n}\nexport default function ItemIcon(props) {\n  const {\n    itemIconString\n  } = props;\n  if (itemIconString === null) return null;\n  switch (itemIconString) {\n    case 'file':\n      return h(FileIcon, null);\n    case 'folder':\n      return h(FolderIcon, null);\n    case 'video':\n      return h(VideoIcon, null);\n    default:\n      {\n        const {\n          alt\n        } = props;\n        return h(\"img\", {\n          src: itemIconString,\n          alt: alt\n          // @ts-expect-error TS does not understand but attribute exists here.\n          ,\n          referrerPolicy: \"no-referrer\",\n          loading: \"lazy\",\n          width: 16,\n          height: 16\n        });\n      }\n  }\n}","/* eslint-disable react/require-default-props */\nimport { h } from 'preact';\nimport classNames from 'classnames';\nfunction GridListItem(props) {\n  const {\n    className,\n    isDisabled,\n    restrictionError,\n    isChecked,\n    title,\n    itemIconEl,\n    showTitles,\n    toggleCheckbox,\n    recordShiftKeyPress,\n    id,\n    children\n  } = props;\n  const checkBoxClassName = classNames('uppy-u-reset', 'uppy-ProviderBrowserItem-checkbox', 'uppy-ProviderBrowserItem-checkbox--grid', {\n    'uppy-ProviderBrowserItem-checkbox--is-checked': isChecked\n  });\n  return h(\"li\", {\n    className: className,\n    title: isDisabled ? restrictionError == null ? void 0 : restrictionError.message : undefined\n  }, h(\"input\", {\n    type: \"checkbox\",\n    className: checkBoxClassName,\n    onChange: toggleCheckbox,\n    onKeyDown: recordShiftKeyPress\n    // @ts-expect-error this is fine onMouseDown too\n    ,\n    onMouseDown: recordShiftKeyPress,\n    name: \"listitem\",\n    id: id,\n    checked: isChecked,\n    disabled: isDisabled,\n    \"data-uppy-super-focusable\": true\n  }), h(\"label\", {\n    htmlFor: id,\n    \"aria-label\": title,\n    className: \"uppy-u-reset uppy-ProviderBrowserItem-inner\"\n  }, itemIconEl, showTitles && title, children));\n}\nexport default GridListItem;","/* eslint-disable react/require-default-props */\n\nimport { h } from 'preact';\n\n// if folder:\n//   + checkbox (selects all files from folder)\n//   + folder name (opens folder)\n// if file:\n//   + checkbox (selects file)\n//   + file name (selects file)\n\nexport default function ListItem(props) {\n  const {\n    className,\n    isDisabled,\n    restrictionError,\n    isCheckboxDisabled,\n    isChecked,\n    toggleCheckbox,\n    recordShiftKeyPress,\n    type,\n    id,\n    itemIconEl,\n    title,\n    handleFolderClick,\n    showTitles,\n    i18n\n  } = props;\n  return h(\"li\", {\n    className: className,\n    title: isDisabled ? restrictionError == null ? void 0 : restrictionError.message : undefined\n  }, !isCheckboxDisabled ? h(\"input\", {\n    type: \"checkbox\",\n    className: `uppy-u-reset uppy-ProviderBrowserItem-checkbox ${isChecked ? 'uppy-ProviderBrowserItem-checkbox--is-checked' : ''}`,\n    onChange: toggleCheckbox,\n    onKeyDown: recordShiftKeyPress,\n    onMouseDown: recordShiftKeyPress\n    // for the <label/>\n    ,\n    name: \"listitem\",\n    id: id,\n    checked: isChecked,\n    \"aria-label\": type === 'file' ? null : i18n('allFilesFromFolderNamed', {\n      name: title\n    }),\n    disabled: isDisabled,\n    \"data-uppy-super-focusable\": true\n  }) : null, type === 'file' ?\n  // label for a checkbox\n  h(\"label\", {\n    htmlFor: id,\n    className: \"uppy-u-reset uppy-ProviderBrowserItem-inner\"\n  }, h(\"div\", {\n    className: \"uppy-ProviderBrowserItem-iconWrap\"\n  }, itemIconEl), showTitles && title)\n  // button to open a folder\n  : h(\"button\", {\n    type: \"button\",\n    className: \"uppy-u-reset uppy-c-btn uppy-ProviderBrowserItem-inner\",\n    onClick: handleFolderClick,\n    \"aria-label\": i18n('openFolderNamed', {\n      name: title\n    })\n  }, h(\"div\", {\n    className: \"uppy-ProviderBrowserItem-iconWrap\"\n  }, itemIconEl), showTitles && title ? h(\"span\", null, title) : i18n('unnamed')));\n}","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/* eslint-disable react/require-default-props */\nimport { h } from 'preact';\nimport classNames from 'classnames';\nimport ItemIcon from \"./components/ItemIcon.js\";\nimport GridListItem from \"./components/GridLi.js\";\nimport ListItem from \"./components/ListLi.js\";\nexport default function Item(props) {\n  const {\n    author,\n    getItemIcon,\n    isChecked,\n    isDisabled,\n    viewType\n  } = props;\n  const itemIconString = getItemIcon();\n  const className = classNames('uppy-ProviderBrowserItem', {\n    'uppy-ProviderBrowserItem--selected': isChecked\n  }, {\n    'uppy-ProviderBrowserItem--disabled': isDisabled\n  }, {\n    'uppy-ProviderBrowserItem--noPreview': itemIconString === 'video'\n  });\n  const itemIconEl = h(ItemIcon, {\n    itemIconString: itemIconString\n  });\n  switch (viewType) {\n    case 'grid':\n      return h(GridListItem, _extends({}, props, {\n        className: className,\n        itemIconEl: itemIconEl\n      }));\n    case 'list':\n      return h(ListItem, _extends({}, props, {\n        className: className,\n        itemIconEl: itemIconEl\n      }));\n    case 'unsplash':\n      return h(GridListItem, _extends({}, props, {\n        className: className,\n        itemIconEl: itemIconEl\n      }), h(\"a\", {\n        href: `${author.url}?utm_source=Companion&utm_medium=referral`,\n        target: \"_blank\",\n        rel: \"noopener noreferrer\",\n        className: \"uppy-ProviderBrowserItem-author\",\n        tabIndex: -1\n      }, author.name));\n    default:\n      throw new Error(`There is no such type ${viewType}`);\n  }\n}","/* eslint-disable react/require-default-props */\nimport { h } from 'preact';\nimport classNames from 'classnames';\nimport remoteFileObjToLocal from '@uppy/utils/lib/remoteFileObjToLocal';\nimport { useMemo } from 'preact/hooks';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore untyped\nimport VirtualList from '@uppy/utils/lib/VirtualList';\nimport SearchFilterInput from \"./SearchFilterInput.js\";\nimport FooterActions from \"./FooterActions.js\";\nimport Item from \"./Item/index.js\";\nconst VIRTUAL_SHARED_DIR = 'shared-with-me';\nfunction ListItem(props) {\n  const {\n    currentSelection,\n    uppyFiles,\n    viewType,\n    isChecked,\n    toggleCheckbox,\n    recordShiftKeyPress,\n    showTitles,\n    i18n,\n    validateRestrictions,\n    getNextFolder,\n    f\n  } = props;\n  if (f.isFolder) {\n    return Item({\n      showTitles,\n      viewType,\n      i18n,\n      id: f.id,\n      title: f.name,\n      getItemIcon: () => f.icon,\n      isChecked: isChecked(f),\n      toggleCheckbox: event => toggleCheckbox(event, f),\n      recordShiftKeyPress,\n      type: 'folder',\n      // TODO: when was this supposed to be true?\n      isDisabled: false,\n      isCheckboxDisabled: f.id === VIRTUAL_SHARED_DIR,\n      // getNextFolder always exists when f.isFolder is true\n      handleFolderClick: () => getNextFolder(f)\n    });\n  }\n  const restrictionError = validateRestrictions(remoteFileObjToLocal(f), [...uppyFiles, ...currentSelection]);\n  return Item({\n    id: f.id,\n    title: f.name,\n    author: f.author,\n    getItemIcon: () => viewType === 'grid' && f.thumbnail ? f.thumbnail : f.icon,\n    isChecked: isChecked(f),\n    toggleCheckbox: event => toggleCheckbox(event, f),\n    isCheckboxDisabled: false,\n    recordShiftKeyPress,\n    showTitles,\n    viewType,\n    i18n,\n    type: 'file',\n    isDisabled: Boolean(restrictionError) && !isChecked(f),\n    restrictionError\n  });\n}\nfunction Browser(props) {\n  const {\n    currentSelection,\n    folders,\n    files,\n    uppyFiles,\n    viewType,\n    headerComponent,\n    showBreadcrumbs,\n    isChecked,\n    toggleCheckbox,\n    recordShiftKeyPress,\n    handleScroll,\n    showTitles,\n    i18n,\n    validateRestrictions,\n    isLoading,\n    showSearchFilter,\n    search,\n    searchTerm,\n    clearSearch,\n    searchOnInput,\n    searchInputLabel,\n    clearSearchLabel,\n    getNextFolder,\n    cancel,\n    done,\n    noResultsLabel,\n    virtualList\n  } = props;\n  const selected = currentSelection.length;\n  const rows = useMemo(() => [...folders, ...files], [folders, files]);\n  return h(\"div\", {\n    className: classNames('uppy-ProviderBrowser', `uppy-ProviderBrowser-viewType--${viewType}`)\n  }, headerComponent && h(\"div\", {\n    className: \"uppy-ProviderBrowser-header\"\n  }, h(\"div\", {\n    className: classNames('uppy-ProviderBrowser-headerBar', !showBreadcrumbs && 'uppy-ProviderBrowser-headerBar--simple')\n  }, headerComponent)), showSearchFilter && h(\"div\", {\n    class: \"uppy-ProviderBrowser-searchFilter\"\n  }, h(SearchFilterInput, {\n    search: search,\n    searchTerm: searchTerm,\n    clearSearch: clearSearch,\n    inputLabel: searchInputLabel,\n    clearSearchLabel: clearSearchLabel,\n    inputClassName: \"uppy-ProviderBrowser-searchFilterInput\",\n    searchOnInput: searchOnInput\n  })), (() => {\n    if (isLoading) {\n      return h(\"div\", {\n        className: \"uppy-Provider-loading\"\n      }, h(\"span\", null, typeof isLoading === 'string' ? isLoading : i18n('loading')));\n    }\n    if (!folders.length && !files.length) {\n      return h(\"div\", {\n        className: \"uppy-Provider-empty\"\n      }, noResultsLabel);\n    }\n    if (virtualList) {\n      return h(\"div\", {\n        className: \"uppy-ProviderBrowser-body\"\n      }, h(\"ul\", {\n        className: \"uppy-ProviderBrowser-list\"\n      }, h(VirtualList, {\n        data: rows,\n        renderRow: f => h(ListItem, {\n          currentSelection: currentSelection,\n          uppyFiles: uppyFiles,\n          viewType: viewType,\n          isChecked: isChecked,\n          toggleCheckbox: toggleCheckbox,\n          recordShiftKeyPress: recordShiftKeyPress,\n          showTitles: showTitles,\n          i18n: i18n,\n          validateRestrictions: validateRestrictions,\n          getNextFolder: getNextFolder,\n          f: f\n        }),\n        rowHeight: 31\n      })));\n    }\n    return h(\"div\", {\n      className: \"uppy-ProviderBrowser-body\"\n    }, h(\"ul\", {\n      className: \"uppy-ProviderBrowser-list\",\n      onScroll: handleScroll,\n      role: \"listbox\"\n      // making <ul> not focusable for firefox\n      ,\n      tabIndex: -1\n    }, rows.map(f => h(ListItem, {\n      currentSelection: currentSelection,\n      uppyFiles: uppyFiles,\n      viewType: viewType,\n      isChecked: isChecked,\n      toggleCheckbox: toggleCheckbox,\n      recordShiftKeyPress: recordShiftKeyPress,\n      showTitles: showTitles,\n      i18n: i18n,\n      validateRestrictions: validateRestrictions,\n      getNextFolder: getNextFolder,\n      f: f\n    }))));\n  })(), selected > 0 && h(FooterActions, {\n    selected: selected,\n    done: done,\n    cancel: cancel,\n    i18n: i18n\n  }));\n}\nexport default Browser;","import { Component, toChildArray } from 'preact';\nexport default class CloseWrapper extends Component {\n  componentWillUnmount() {\n    const {\n      onUnmount\n    } = this.props;\n    onUnmount();\n  }\n  render() {\n    const {\n      children\n    } = this.props;\n    return toChildArray(children)[0];\n  }\n}","import remoteFileObjToLocal from '@uppy/utils/lib/remoteFileObjToLocal';\n\n// Conditional type for selecting the plugin\n\n// Conditional type for selecting the provider from the selected plugin\n\nexport default class View {\n  constructor(plugin, opts) {\n    this.filterItems = items => {\n      const state = this.plugin.getPluginState();\n      if (!state.filterInput || state.filterInput === '') {\n        return items;\n      }\n      return items.filter(folder => {\n        return folder.name.toLowerCase().indexOf(state.filterInput.toLowerCase()) !== -1;\n      });\n    };\n    this.recordShiftKeyPress = e => {\n      this.isShiftKeyPressed = e.shiftKey;\n    };\n    this.isChecked = file => {\n      const {\n        currentSelection\n      } = this.plugin.getPluginState();\n      // comparing id instead of the file object, because the reference to the object\n      // changes when we switch folders, and the file list is updated\n      return currentSelection.some(item => item.id === file.id);\n    };\n    this.plugin = plugin;\n    this.provider = opts.provider;\n    this.opts = opts;\n    this.isHandlingScroll = false;\n    this.preFirstRender = this.preFirstRender.bind(this);\n    this.handleError = this.handleError.bind(this);\n    this.clearSelection = this.clearSelection.bind(this);\n    this.cancelPicking = this.cancelPicking.bind(this);\n  }\n  preFirstRender() {\n    this.plugin.setPluginState({\n      didFirstRender: true\n    });\n    this.plugin.onFirstRender();\n  }\n  shouldHandleScroll(event) {\n    const {\n      scrollHeight,\n      scrollTop,\n      offsetHeight\n    } = event.target;\n    const scrollPosition = scrollHeight - (scrollTop + offsetHeight);\n    return scrollPosition < 50 && !this.isHandlingScroll;\n  }\n  clearSelection() {\n    this.plugin.setPluginState({\n      currentSelection: [],\n      filterInput: ''\n    });\n  }\n  cancelPicking() {\n    this.clearSelection();\n    const dashboard = this.plugin.uppy.getPlugin('Dashboard');\n    if (dashboard) {\n      // @ts-expect-error impossible to type this correctly without adding dashboard\n      // as a dependency to this package.\n      dashboard.hideAllPanels();\n    }\n  }\n  handleError(error) {\n    var _error$cause;\n    const {\n      uppy\n    } = this.plugin;\n    const message = uppy.i18n('companionError');\n    uppy.log(error.toString());\n    if (error.isAuthError || ((_error$cause = error.cause) == null ? void 0 : _error$cause.name) === 'AbortError') {\n      // authError just means we're not authenticated, don't show to user\n      // AbortError means the user has clicked \"cancel\" on an operation\n      return;\n    }\n    uppy.info({\n      message,\n      details: error.toString()\n    }, 'error', 5000);\n  }\n  registerRequestClient() {\n    this.requestClientId = this.provider.provider;\n    this.plugin.uppy.registerRequestClient(this.requestClientId, this.provider);\n  }\n\n  // TODO: document what is a \"tagFile\" or get rid of this concept\n  getTagFile(file) {\n    const tagFile = {\n      id: file.id,\n      source: this.plugin.id,\n      name: file.name || file.id,\n      type: file.mimeType,\n      isRemote: true,\n      data: file,\n      // @ts-expect-error meta is filled conditionally below\n      meta: {},\n      body: {\n        fileId: file.id\n      },\n      remote: {\n        companionUrl: this.plugin.opts.companionUrl,\n        // @ts-expect-error untyped for now\n        url: `${this.provider.fileUrl(file.requestPath)}`,\n        body: {\n          fileId: file.id\n        },\n        providerName: this.provider.name,\n        provider: this.provider.provider,\n        requestClientId: this.requestClientId\n      }\n    };\n    if (file.thumbnail) {\n      tagFile.preview = file.thumbnail;\n    }\n    if (file.author) {\n      if (file.author.name != null) tagFile.meta.authorName = String(file.author.name);\n      if (file.author.url) tagFile.meta.authorUrl = file.author.url;\n    }\n\n    // add relativePath similar to non-remote files: https://github.com/transloadit/uppy/pull/4486#issuecomment-1579203717\n    if (file.relDirPath != null) tagFile.meta.relativePath = file.relDirPath ? `${file.relDirPath}/${tagFile.name}` : null;\n    // and absolutePath (with leading slash) https://github.com/transloadit/uppy/pull/4537#issuecomment-1614236655\n    if (file.absDirPath != null) tagFile.meta.absolutePath = file.absDirPath ? `/${file.absDirPath}/${tagFile.name}` : `/${tagFile.name}`;\n    return tagFile;\n  }\n  /**\n   * Toggles file/folder checkbox to on/off state while updating files list.\n   *\n   * Note that some extra complexity comes from supporting shift+click to\n   * toggle multiple checkboxes at once, which is done by getting all files\n   * in between last checked file and current one.\n   */\n  toggleCheckbox(e, file) {\n    e.stopPropagation();\n    e.preventDefault();\n    e.currentTarget.focus();\n    const {\n      folders,\n      files\n    } = this.plugin.getPluginState();\n    const items = this.filterItems(folders.concat(files));\n    // Shift-clicking selects a single consecutive list of items\n    // starting at the previous click.\n    if (this.lastCheckbox && this.isShiftKeyPressed) {\n      const {\n        currentSelection\n      } = this.plugin.getPluginState();\n      const prevIndex = items.indexOf(this.lastCheckbox);\n      const currentIndex = items.indexOf(file);\n      const newSelection = prevIndex < currentIndex ? items.slice(prevIndex, currentIndex + 1) : items.slice(currentIndex, prevIndex + 1);\n      const reducedNewSelection = [];\n\n      // Check restrictions on each file in currentSelection,\n      // reduce it to only contain files that pass restrictions\n      for (const item of newSelection) {\n        const {\n          uppy\n        } = this.plugin;\n        const restrictionError = uppy.validateRestrictions(remoteFileObjToLocal(item), [...uppy.getFiles(), ...reducedNewSelection]);\n        if (!restrictionError) {\n          reducedNewSelection.push(item);\n        } else {\n          uppy.info({\n            message: restrictionError.message\n          }, 'error', uppy.opts.infoTimeout);\n        }\n      }\n      this.plugin.setPluginState({\n        currentSelection: [...new Set([...currentSelection, ...reducedNewSelection])]\n      });\n      return;\n    }\n    this.lastCheckbox = file;\n    const {\n      currentSelection\n    } = this.plugin.getPluginState();\n    if (this.isChecked(file)) {\n      this.plugin.setPluginState({\n        currentSelection: currentSelection.filter(item => item.id !== file.id)\n      });\n    } else {\n      this.plugin.setPluginState({\n        currentSelection: currentSelection.concat([file])\n      });\n    }\n  }\n  setLoading(loading) {\n    this.plugin.setPluginState({\n      loading\n    });\n  }\n}","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\nimport { h } from 'preact';\nimport PQueue from 'p-queue';\nimport { getSafeFileId } from '@uppy/utils/lib/generateFileID';\nimport AuthView from \"./AuthView.js\";\nimport Header from \"./Header.js\";\nimport Browser from \"../Browser.js\";\nimport CloseWrapper from \"../CloseWrapper.js\";\nimport View from \"../View.js\";\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"3.13.0\"\n};\nfunction formatBreadcrumbs(breadcrumbs) {\n  return breadcrumbs.slice(1).map(directory => directory.name).join('/');\n}\nfunction prependPath(path, component) {\n  if (!path) return component;\n  return `${path}/${component}`;\n}\nexport function defaultPickerIcon() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    width: \"30\",\n    height: \"30\",\n    viewBox: \"0 0 30 30\"\n  }, h(\"path\", {\n    d: \"M15 30c8.284 0 15-6.716 15-15 0-8.284-6.716-15-15-15C6.716 0 0 6.716 0 15c0 8.284 6.716 15 15 15zm4.258-12.676v6.846h-8.426v-6.846H5.204l9.82-12.364 9.82 12.364H19.26z\"\n  }));\n}\nconst defaultOptions = {\n  viewType: 'list',\n  showTitles: true,\n  showFilter: true,\n  showBreadcrumbs: true,\n  loadAllFiles: false,\n  virtualList: false\n};\nvar _abortController = /*#__PURE__*/_classPrivateFieldLooseKey(\"abortController\");\nvar _withAbort = /*#__PURE__*/_classPrivateFieldLooseKey(\"withAbort\");\nvar _list = /*#__PURE__*/_classPrivateFieldLooseKey(\"list\");\nvar _listFilesAndFolders = /*#__PURE__*/_classPrivateFieldLooseKey(\"listFilesAndFolders\");\nvar _recursivelyListAllFiles = /*#__PURE__*/_classPrivateFieldLooseKey(\"recursivelyListAllFiles\");\n/**\n * Class to easily generate generic views for Provider plugins\n */\nexport default class ProviderView extends View {\n  constructor(plugin, opts) {\n    super(plugin, {\n      ...defaultOptions,\n      ...opts\n    });\n\n    // Logic\n    Object.defineProperty(this, _recursivelyListAllFiles, {\n      value: _recursivelyListAllFiles2\n    });\n    Object.defineProperty(this, _listFilesAndFolders, {\n      value: _listFilesAndFolders2\n    });\n    Object.defineProperty(this, _list, {\n      value: _list2\n    });\n    Object.defineProperty(this, _withAbort, {\n      value: _withAbort2\n    });\n    Object.defineProperty(this, _abortController, {\n      writable: true,\n      value: void 0\n    });\n    this.filterQuery = this.filterQuery.bind(this);\n    this.clearFilter = this.clearFilter.bind(this);\n    this.getFolder = this.getFolder.bind(this);\n    this.getNextFolder = this.getNextFolder.bind(this);\n    this.logout = this.logout.bind(this);\n    this.handleAuth = this.handleAuth.bind(this);\n    this.handleScroll = this.handleScroll.bind(this);\n    this.donePicking = this.donePicking.bind(this);\n\n    // Visual\n    this.render = this.render.bind(this);\n\n    // Set default state for the plugin\n    this.plugin.setPluginState({\n      authenticated: undefined,\n      // we don't know yet\n      files: [],\n      folders: [],\n      breadcrumbs: [],\n      filterInput: '',\n      isSearchVisible: false,\n      currentSelection: []\n    });\n    this.registerRequestClient();\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  tearDown() {\n    // Nothing.\n  }\n  /**\n   * Select a folder based on its id: fetches the folder and then updates state with its contents\n   * TODO rename to something better like selectFolder or navigateToFolder (breaking change?)\n   *\n   */\n  async getFolder(requestPath, name) {\n    this.setLoading(true);\n    try {\n      await _classPrivateFieldLooseBase(this, _withAbort)[_withAbort](async signal => {\n        this.lastCheckbox = undefined;\n        let {\n          breadcrumbs\n        } = this.plugin.getPluginState();\n        const index = breadcrumbs.findIndex(dir => requestPath === dir.requestPath);\n        if (index !== -1) {\n          // means we navigated back to a known directory (already in the stack), so cut the stack off there\n          breadcrumbs = breadcrumbs.slice(0, index + 1);\n        } else {\n          // we have navigated into a new (unknown) folder, add it to the stack\n          breadcrumbs = [...breadcrumbs, {\n            requestPath,\n            name\n          }];\n        }\n        this.nextPagePath = requestPath;\n        let files = [];\n        let folders = [];\n        do {\n          const {\n            files: newFiles,\n            folders: newFolders\n          } = await _classPrivateFieldLooseBase(this, _listFilesAndFolders)[_listFilesAndFolders]({\n            breadcrumbs,\n            signal\n          });\n          files = files.concat(newFiles);\n          folders = folders.concat(newFolders);\n          this.setLoading(this.plugin.uppy.i18n('loadedXFiles', {\n            numFiles: files.length + folders.length\n          }));\n        } while (this.opts.loadAllFiles && this.nextPagePath);\n        this.plugin.setPluginState({\n          folders,\n          files,\n          breadcrumbs,\n          filterInput: ''\n        });\n      });\n    } catch (err) {\n      // This is the first call that happens when the provider view loads, after auth, so it's probably nice to show any\n      // error occurring here to the user.\n      if ((err == null ? void 0 : err.name) === 'UserFacingApiError') {\n        this.plugin.uppy.info({\n          message: this.plugin.uppy.i18n(err.message)\n        }, 'warning', 5000);\n        return;\n      }\n      this.handleError(err);\n    } finally {\n      this.setLoading(false);\n    }\n  }\n\n  /**\n   * Fetches new folder\n   */\n  getNextFolder(folder) {\n    this.getFolder(folder.requestPath, folder.name);\n    this.lastCheckbox = undefined;\n  }\n\n  /**\n   * Removes session token on client side.\n   */\n  async logout() {\n    try {\n      await _classPrivateFieldLooseBase(this, _withAbort)[_withAbort](async signal => {\n        const res = await this.provider.logout({\n          signal\n        });\n        // res.ok is from the JSON body, not to be confused with Response.ok\n        if (res.ok) {\n          if (!res.revoked) {\n            const message = this.plugin.uppy.i18n('companionUnauthorizeHint', {\n              provider: this.plugin.title,\n              url: res.manual_revoke_url\n            });\n            this.plugin.uppy.info(message, 'info', 7000);\n          }\n          const newState = {\n            authenticated: false,\n            files: [],\n            folders: [],\n            breadcrumbs: [],\n            filterInput: ''\n          };\n          this.plugin.setPluginState(newState);\n        }\n      });\n    } catch (err) {\n      this.handleError(err);\n    }\n  }\n  filterQuery(input) {\n    this.plugin.setPluginState({\n      filterInput: input\n    });\n  }\n  clearFilter() {\n    this.plugin.setPluginState({\n      filterInput: ''\n    });\n  }\n  async handleAuth(authFormData) {\n    try {\n      await _classPrivateFieldLooseBase(this, _withAbort)[_withAbort](async signal => {\n        this.setLoading(true);\n        await this.provider.login({\n          authFormData,\n          signal\n        });\n        this.plugin.setPluginState({\n          authenticated: true\n        });\n        this.preFirstRender();\n      });\n    } catch (err) {\n      if (err.name === 'UserFacingApiError') {\n        this.plugin.uppy.info({\n          message: this.plugin.uppy.i18n(err.message)\n        }, 'warning', 5000);\n        return;\n      }\n      this.plugin.uppy.log(`login failed: ${err.message}`);\n    } finally {\n      this.setLoading(false);\n    }\n  }\n  async handleScroll(event) {\n    if (this.shouldHandleScroll(event) && this.nextPagePath) {\n      this.isHandlingScroll = true;\n      try {\n        await _classPrivateFieldLooseBase(this, _withAbort)[_withAbort](async signal => {\n          const {\n            files,\n            folders,\n            breadcrumbs\n          } = this.plugin.getPluginState();\n          const {\n            files: newFiles,\n            folders: newFolders\n          } = await _classPrivateFieldLooseBase(this, _listFilesAndFolders)[_listFilesAndFolders]({\n            breadcrumbs,\n            signal\n          });\n          const combinedFiles = files.concat(newFiles);\n          const combinedFolders = folders.concat(newFolders);\n          this.plugin.setPluginState({\n            folders: combinedFolders,\n            files: combinedFiles\n          });\n        });\n      } catch (error) {\n        this.handleError(error);\n      } finally {\n        this.isHandlingScroll = false;\n      }\n    }\n  }\n  async donePicking() {\n    this.setLoading(true);\n    try {\n      await _classPrivateFieldLooseBase(this, _withAbort)[_withAbort](async signal => {\n        const {\n          currentSelection\n        } = this.plugin.getPluginState();\n        const messages = [];\n        const newFiles = [];\n        for (const selectedItem of currentSelection) {\n          const {\n            requestPath\n          } = selectedItem;\n          const withRelDirPath = newItem => ({\n            ...newItem,\n            // calculate the file's path relative to the user's selected item's path\n            // see https://github.com/transloadit/uppy/pull/4537#issuecomment-1614236655\n            relDirPath: newItem.absDirPath.replace(selectedItem.absDirPath, '').replace(/^\\//, '')\n          });\n          if (selectedItem.isFolder) {\n            let isEmpty = true;\n            let numNewFiles = 0;\n            const queue = new PQueue({\n              concurrency: 6\n            });\n            const onFiles = files => {\n              for (const newFile of files) {\n                const tagFile = this.getTagFile(newFile);\n                const id = getSafeFileId(tagFile, this.plugin.uppy.getID());\n                // If the same folder is added again, we don't want to send\n                // X amount of duplicate file notifications, we want to say\n                // the folder was already added. This checks if all files are duplicate,\n                // if that's the case, we don't add the files.\n                if (!this.plugin.uppy.checkIfFileAlreadyExists(id)) {\n                  newFiles.push(withRelDirPath(newFile));\n                  numNewFiles++;\n                  this.setLoading(this.plugin.uppy.i18n('addedNumFiles', {\n                    numFiles: numNewFiles\n                  }));\n                }\n                isEmpty = false;\n              }\n            };\n            await _classPrivateFieldLooseBase(this, _recursivelyListAllFiles)[_recursivelyListAllFiles]({\n              requestPath,\n              absDirPath: prependPath(selectedItem.absDirPath, selectedItem.name),\n              relDirPath: selectedItem.name,\n              queue,\n              onFiles,\n              signal\n            });\n            await queue.onIdle();\n            let message;\n            if (isEmpty) {\n              message = this.plugin.uppy.i18n('emptyFolderAdded');\n            } else if (numNewFiles === 0) {\n              message = this.plugin.uppy.i18n('folderAlreadyAdded', {\n                folder: selectedItem.name\n              });\n            } else {\n              // TODO we don't really know at this point whether any files were actually added\n              // (only later after addFiles has been called) so we should probably rewrite this.\n              // Example: If all files fail to add due to restriction error, it will still say \"Added 100 files from folder\"\n              message = this.plugin.uppy.i18n('folderAdded', {\n                smart_count: numNewFiles,\n                folder: selectedItem.name\n              });\n            }\n            messages.push(message);\n          } else {\n            newFiles.push(withRelDirPath(selectedItem));\n          }\n        }\n\n        // Note: this.plugin.uppy.addFiles must be only run once we are done fetching all files,\n        // because it will cause the loading screen to disappear,\n        // and that will allow the user to start the upload, so we need to make sure we have\n        // finished all async operations before we add any file\n        // see https://github.com/transloadit/uppy/pull/4384\n        this.plugin.uppy.log('Adding files from a remote provider');\n        this.plugin.uppy.addFiles(\n        // @ts-expect-error `addFiles` expects `body` to be `File` or `Blob`,\n        // but as the todo comment in `View.ts` indicates, we strangly pass `CompanionFile` as `body`.\n        // For now it's better to ignore than to have a potential breaking change.\n        newFiles.map(file => this.getTagFile(file, this.requestClientId)));\n        this.plugin.setPluginState({\n          filterInput: ''\n        });\n        messages.forEach(message => this.plugin.uppy.info(message));\n        this.clearSelection();\n      });\n    } catch (err) {\n      this.handleError(err);\n    } finally {\n      this.setLoading(false);\n    }\n  }\n  render(state, viewOptions) {\n    var _this = this;\n    if (viewOptions === void 0) {\n      viewOptions = {};\n    }\n    const {\n      authenticated,\n      didFirstRender\n    } = this.plugin.getPluginState();\n    const {\n      i18n\n    } = this.plugin.uppy;\n    if (!didFirstRender) {\n      this.preFirstRender();\n    }\n    const targetViewOptions = {\n      ...this.opts,\n      ...viewOptions\n    };\n    const {\n      files,\n      folders,\n      filterInput,\n      loading,\n      currentSelection\n    } = this.plugin.getPluginState();\n    const {\n      isChecked,\n      recordShiftKeyPress,\n      filterItems\n    } = this;\n    const hasInput = filterInput !== '';\n    const pluginIcon = this.plugin.icon || defaultPickerIcon;\n    const headerProps = {\n      showBreadcrumbs: targetViewOptions.showBreadcrumbs,\n      getFolder: this.getFolder,\n      breadcrumbs: this.plugin.getPluginState().breadcrumbs,\n      pluginIcon,\n      title: this.plugin.title,\n      logout: this.logout,\n      username: this.username,\n      i18n\n    };\n    const browserProps = {\n      isChecked,\n      toggleCheckbox: this.toggleCheckbox.bind(this),\n      recordShiftKeyPress,\n      currentSelection,\n      files: hasInput ? filterItems(files) : files,\n      folders: hasInput ? filterItems(folders) : folders,\n      getNextFolder: this.getNextFolder,\n      getFolder: this.getFolder,\n      loadAllFiles: this.opts.loadAllFiles,\n      virtualList: this.opts.virtualList,\n      // For SearchFilterInput component\n      showSearchFilter: targetViewOptions.showFilter,\n      search: this.filterQuery,\n      clearSearch: this.clearFilter,\n      searchTerm: filterInput,\n      searchOnInput: true,\n      searchInputLabel: i18n('filter'),\n      clearSearchLabel: i18n('resetFilter'),\n      noResultsLabel: i18n('noFilesFound'),\n      logout: this.logout,\n      handleScroll: this.handleScroll,\n      done: this.donePicking,\n      cancel: this.cancelPicking,\n      // eslint-disable-next-line react/jsx-props-no-spreading\n      headerComponent: h(Header, headerProps),\n      title: this.plugin.title,\n      viewType: targetViewOptions.viewType,\n      showTitles: targetViewOptions.showTitles,\n      showBreadcrumbs: targetViewOptions.showBreadcrumbs,\n      pluginIcon,\n      i18n: this.plugin.uppy.i18n,\n      uppyFiles: this.plugin.uppy.getFiles(),\n      validateRestrictions: function () {\n        return _this.plugin.uppy.validateRestrictions(...arguments);\n      },\n      isLoading: loading\n    };\n    if (authenticated === false) {\n      return h(CloseWrapper, {\n        onUnmount: this.clearSelection\n      }, h(AuthView, {\n        pluginName: this.plugin.title,\n        pluginIcon: pluginIcon,\n        handleAuth: this.handleAuth,\n        i18n: this.plugin.uppy.i18nArray,\n        renderForm: this.opts.renderAuthForm,\n        loading: loading\n      }));\n    }\n    return h(CloseWrapper, {\n      onUnmount: this.clearSelection\n    }, h(Browser, browserProps));\n  }\n}\nasync function _withAbort2(op) {\n  var _classPrivateFieldLoo;\n  // prevent multiple requests in parallel from causing race conditions\n  (_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _abortController)[_abortController]) == null || _classPrivateFieldLoo.abort();\n  const abortController = new AbortController();\n  _classPrivateFieldLooseBase(this, _abortController)[_abortController] = abortController;\n  const cancelRequest = () => {\n    abortController.abort();\n    this.clearSelection();\n  };\n  try {\n    // @ts-expect-error this should be typed in @uppy/dashboard.\n    // Even then I don't think we can make this work without adding dashboard\n    // as a dependency to provider-views.\n    this.plugin.uppy.on('dashboard:close-panel', cancelRequest);\n    this.plugin.uppy.on('cancel-all', cancelRequest);\n    await op(abortController.signal);\n  } finally {\n    // @ts-expect-error this should be typed in @uppy/dashboard.\n    // Even then I don't think we can make this work without adding dashboard\n    // as a dependency to provider-views.\n    this.plugin.uppy.off('dashboard:close-panel', cancelRequest);\n    this.plugin.uppy.off('cancel-all', cancelRequest);\n    _classPrivateFieldLooseBase(this, _abortController)[_abortController] = undefined;\n  }\n}\nasync function _list2(_ref) {\n  let {\n    requestPath,\n    absDirPath,\n    signal\n  } = _ref;\n  const {\n    username,\n    nextPagePath,\n    items\n  } = await this.provider.list(requestPath, {\n    signal\n  });\n  this.username = username || this.username;\n  return {\n    items: items.map(item => ({\n      ...item,\n      absDirPath\n    })),\n    nextPagePath\n  };\n}\nasync function _listFilesAndFolders2(_ref2) {\n  let {\n    breadcrumbs,\n    signal\n  } = _ref2;\n  const absDirPath = formatBreadcrumbs(breadcrumbs);\n  const {\n    items,\n    nextPagePath\n  } = await _classPrivateFieldLooseBase(this, _list)[_list]({\n    requestPath: this.nextPagePath,\n    absDirPath,\n    signal\n  });\n  this.nextPagePath = nextPagePath;\n  const files = [];\n  const folders = [];\n  items.forEach(item => {\n    if (item.isFolder) {\n      folders.push(item);\n    } else {\n      files.push(item);\n    }\n  });\n  return {\n    files,\n    folders\n  };\n}\nasync function _recursivelyListAllFiles2(_ref3) {\n  let {\n    requestPath,\n    absDirPath,\n    relDirPath,\n    queue,\n    onFiles,\n    signal\n  } = _ref3;\n  let curPath = requestPath;\n  while (curPath) {\n    const res = await _classPrivateFieldLooseBase(this, _list)[_list]({\n      requestPath: curPath,\n      absDirPath,\n      signal\n    });\n    curPath = res.nextPagePath;\n    const files = res.items.filter(item => !item.isFolder);\n    const folders = res.items.filter(item => item.isFolder);\n    onFiles(files);\n\n    // recursively queue call to self for each folder\n    const promises = folders.map(async folder => queue.add(async () => _classPrivateFieldLooseBase(this, _recursivelyListAllFiles)[_recursivelyListAllFiles]({\n      requestPath: folder.requestPath,\n      absDirPath: prependPath(absDirPath, folder.name),\n      relDirPath: prependPath(relDirPath, folder.name),\n      queue,\n      onFiles,\n      signal\n    })));\n    await Promise.all(promises); // in case we get an error\n  }\n}\nProviderView.VERSION = packageJson.version;","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\nimport { h } from 'preact';\nimport SearchFilterInput from \"../SearchFilterInput.js\";\nimport Browser from \"../Browser.js\";\nimport CloseWrapper from \"../CloseWrapper.js\";\nimport View from \"../View.js\";\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"3.13.0\"\n};\nconst defaultState = {\n  isInputMode: true,\n  files: [],\n  folders: [],\n  breadcrumbs: [],\n  filterInput: '',\n  currentSelection: [],\n  searchTerm: null\n};\nconst defaultOptions = {\n  viewType: 'grid',\n  showTitles: true,\n  showFilter: true,\n  showBreadcrumbs: true\n};\nvar _updateFilesAndInputMode = /*#__PURE__*/_classPrivateFieldLooseKey(\"updateFilesAndInputMode\");\n/**\n * SearchProviderView, used for Unsplash and future image search providers.\n * Extends generic View, shared with regular providers like Google Drive and Instagram.\n */\nexport default class SearchProviderView extends View {\n  constructor(plugin, opts) {\n    super(plugin, {\n      ...defaultOptions,\n      ...opts\n    });\n    Object.defineProperty(this, _updateFilesAndInputMode, {\n      value: _updateFilesAndInputMode2\n    });\n    this.nextPageQuery = null;\n    this.search = this.search.bind(this);\n    this.clearSearch = this.clearSearch.bind(this);\n    this.resetPluginState = this.resetPluginState.bind(this);\n    this.handleScroll = this.handleScroll.bind(this);\n    this.donePicking = this.donePicking.bind(this);\n    this.render = this.render.bind(this);\n    this.plugin.setPluginState(defaultState);\n    this.registerRequestClient();\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  tearDown() {\n    // Nothing.\n  }\n  resetPluginState() {\n    this.plugin.setPluginState(defaultState);\n  }\n  async search(query) {\n    const {\n      searchTerm\n    } = this.plugin.getPluginState();\n    if (query && query === searchTerm) {\n      // no need to search again as this is the same as the previous search\n      return;\n    }\n    this.setLoading(true);\n    try {\n      const res = await this.provider.search(query);\n      _classPrivateFieldLooseBase(this, _updateFilesAndInputMode)[_updateFilesAndInputMode](res, []);\n    } catch (err) {\n      this.handleError(err);\n    } finally {\n      this.setLoading(false);\n    }\n  }\n  clearSearch() {\n    this.plugin.setPluginState({\n      currentSelection: [],\n      files: [],\n      searchTerm: null\n    });\n  }\n  async handleScroll(event) {\n    const query = this.nextPageQuery || null;\n    if (this.shouldHandleScroll(event) && query) {\n      this.isHandlingScroll = true;\n      try {\n        const {\n          files,\n          searchTerm\n        } = this.plugin.getPluginState();\n        const response = await this.provider.search(searchTerm, query);\n        _classPrivateFieldLooseBase(this, _updateFilesAndInputMode)[_updateFilesAndInputMode](response, files);\n      } catch (error) {\n        this.handleError(error);\n      } finally {\n        this.isHandlingScroll = false;\n      }\n    }\n  }\n  donePicking() {\n    const {\n      currentSelection\n    } = this.plugin.getPluginState();\n    this.plugin.uppy.log('Adding remote search provider files');\n    this.plugin.uppy.addFiles(currentSelection.map(file => this.getTagFile(file)));\n    this.resetPluginState();\n  }\n  render(state, viewOptions) {\n    var _this = this;\n    if (viewOptions === void 0) {\n      viewOptions = {};\n    }\n    const {\n      didFirstRender,\n      isInputMode,\n      searchTerm\n    } = this.plugin.getPluginState();\n    const {\n      i18n\n    } = this.plugin.uppy;\n    if (!didFirstRender) {\n      this.preFirstRender();\n    }\n    const targetViewOptions = {\n      ...this.opts,\n      ...viewOptions\n    };\n    const {\n      files,\n      folders,\n      filterInput,\n      loading,\n      currentSelection\n    } = this.plugin.getPluginState();\n    const {\n      isChecked,\n      filterItems,\n      recordShiftKeyPress\n    } = this;\n    const hasInput = filterInput !== '';\n    const browserProps = {\n      isChecked,\n      toggleCheckbox: this.toggleCheckbox.bind(this),\n      recordShiftKeyPress,\n      currentSelection,\n      files: hasInput ? filterItems(files) : files,\n      folders: hasInput ? filterItems(folders) : folders,\n      handleScroll: this.handleScroll,\n      done: this.donePicking,\n      cancel: this.cancelPicking,\n      // For SearchFilterInput component\n      showSearchFilter: targetViewOptions.showFilter,\n      search: this.search,\n      clearSearch: this.clearSearch,\n      searchTerm,\n      searchOnInput: false,\n      searchInputLabel: i18n('search'),\n      clearSearchLabel: i18n('resetSearch'),\n      noResultsLabel: i18n('noSearchResults'),\n      title: this.plugin.title,\n      viewType: targetViewOptions.viewType,\n      showTitles: targetViewOptions.showTitles,\n      showFilter: targetViewOptions.showFilter,\n      isLoading: loading,\n      showBreadcrumbs: targetViewOptions.showBreadcrumbs,\n      pluginIcon: this.plugin.icon,\n      i18n,\n      uppyFiles: this.plugin.uppy.getFiles(),\n      validateRestrictions: function () {\n        return _this.plugin.uppy.validateRestrictions(...arguments);\n      }\n    };\n    if (isInputMode) {\n      return h(CloseWrapper, {\n        onUnmount: this.resetPluginState\n      }, h(\"div\", {\n        className: \"uppy-SearchProvider\"\n      }, h(SearchFilterInput, {\n        search: this.search,\n        inputLabel: i18n('enterTextToSearch'),\n        buttonLabel: i18n('searchImages'),\n        inputClassName: \"uppy-c-textInput uppy-SearchProvider-input\",\n        buttonCSSClassName: \"uppy-SearchProvider-searchButton\",\n        showButton: true\n      })));\n    }\n    return h(CloseWrapper, {\n      onUnmount: this.resetPluginState\n    }, h(Browser, browserProps));\n  }\n}\nfunction _updateFilesAndInputMode2(res, files) {\n  this.nextPageQuery = res.nextPageQuery;\n  res.items.forEach(item => {\n    files.push(item);\n  });\n  this.plugin.setPluginState({\n    currentSelection: [],\n    isInputMode: false,\n    files,\n    searchTerm: res.searchedFor\n  });\n}\nSearchProviderView.VERSION = packageJson.version;","var safeIsNaN = Number.isNaN ||\n    function ponyfill(value) {\n        return typeof value === 'number' && value !== value;\n    };\nfunction isEqual(first, second) {\n    if (first === second) {\n        return true;\n    }\n    if (safeIsNaN(first) && safeIsNaN(second)) {\n        return true;\n    }\n    return false;\n}\nfunction areInputsEqual(newInputs, lastInputs) {\n    if (newInputs.length !== lastInputs.length) {\n        return false;\n    }\n    for (var i = 0; i < newInputs.length; i++) {\n        if (!isEqual(newInputs[i], lastInputs[i])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction memoizeOne(resultFn, isEqual) {\n    if (isEqual === void 0) { isEqual = areInputsEqual; }\n    var cache = null;\n    function memoized() {\n        var newArgs = [];\n        for (var _i = 0; _i < arguments.length; _i++) {\n            newArgs[_i] = arguments[_i];\n        }\n        if (cache && cache.lastThis === this && isEqual(newArgs, cache.lastArgs)) {\n            return cache.lastResult;\n        }\n        var lastResult = resultFn.apply(this, newArgs);\n        cache = {\n            lastResult: lastResult,\n            lastArgs: newArgs,\n            lastThis: this,\n        };\n        return lastResult;\n    }\n    memoized.clear = function clear() {\n        cache = null;\n    };\n    return memoized;\n}\n\nexport { memoizeOne as default };\n","export default ['a[href]:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])', 'area[href]:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])', 'input:not([disabled]):not([inert]):not([aria-hidden])', 'select:not([disabled]):not([inert]):not([aria-hidden])', 'textarea:not([disabled]):not([inert]):not([aria-hidden])', 'button:not([disabled]):not([inert]):not([aria-hidden])', 'iframe:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])', 'object:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])', 'embed:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])', '[contenteditable]:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])', '[tabindex]:not([tabindex^=\"-\"]):not([inert]):not([aria-hidden])'];","/**\n * @returns {HTMLElement} - either dashboard element, or the overlay that's most on top\n */\nexport default function getActiveOverlayEl(dashboardEl, activeOverlayType) {\n  if (activeOverlayType) {\n    const overlayEl = dashboardEl.querySelector(`[data-uppy-paneltype=\"${activeOverlayType}\"]`);\n    // if an overlay is already mounted\n    if (overlayEl) return overlayEl;\n  }\n  return dashboardEl;\n}","import toArray from '@uppy/utils/lib/toArray';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore untyped\nimport FOCUSABLE_ELEMENTS from '@uppy/utils/lib/FOCUSABLE_ELEMENTS';\nimport getActiveOverlayEl from \"./getActiveOverlayEl.js\";\nfunction focusOnFirstNode(event, nodes) {\n  const node = nodes[0];\n  if (node) {\n    node.focus();\n    event.preventDefault();\n  }\n}\nfunction focusOnLastNode(event, nodes) {\n  const node = nodes[nodes.length - 1];\n  if (node) {\n    node.focus();\n    event.preventDefault();\n  }\n}\n\n// ___Why not just use (focusedItemIndex === -1)?\n//    Firefox thinks <ul> is focusable, but we don't have <ul>s in our FOCUSABLE_ELEMENTS. Which means that if we tab into\n//    the <ul>, code will think that we are not in the active overlay, and we should focusOnFirstNode() of the currently\n//    active overlay!\n//    [Practical check] if we use (focusedItemIndex === -1), instagram provider in firefox will never get focus on its pics\n//    in the <ul>.\nfunction isFocusInOverlay(activeOverlayEl) {\n  return activeOverlayEl.contains(document.activeElement);\n}\nfunction trapFocus(event, activeOverlayType, dashboardEl) {\n  const activeOverlayEl = getActiveOverlayEl(dashboardEl, activeOverlayType);\n  const focusableNodes = toArray(activeOverlayEl.querySelectorAll(FOCUSABLE_ELEMENTS));\n  const focusedItemIndex = focusableNodes.indexOf(document.activeElement);\n\n  // If we pressed tab, and focus is not yet within the current overlay - focus on\n  // the first element within the current overlay.\n  // This is a safety measure (for when user returns from another tab e.g.), most\n  // plugins will try to focus on some important element as it loads.\n  if (!isFocusInOverlay(activeOverlayEl)) {\n    focusOnFirstNode(event, focusableNodes);\n    // If we pressed shift + tab, and we're on the first element of a modal\n  } else if (event.shiftKey && focusedItemIndex === 0) {\n    focusOnLastNode(event, focusableNodes);\n    // If we pressed tab, and we're on the last element of the modal\n  } else if (!event.shiftKey && focusedItemIndex === focusableNodes.length - 1) {\n    focusOnFirstNode(event, focusableNodes);\n  }\n}\n\n// Traps focus inside of the currently open overlay (e.g. Dashboard, or e.g. Instagram),\n// never lets focus disappear from the modal.\nexport { trapFocus as forModal };\n\n// Traps focus inside of the currently open overlay, unless overlay is null - then let the user tab away.\nexport function forInline(event, activeOverlayType, dashboardEl) {\n  // ___When we're in the bare 'Drop files here, paste, browse or import from' screen\n  if (activeOverlayType === null) {\n    // Do nothing and let the browser handle it, user can tab away from Uppy to other elements on the page\n    // ___When there is some overlay with 'Done' button\n  } else {\n    // Trap the focus inside this overlay!\n    // User can close the overlay (click 'Done') if they want to travel away from Uppy.\n    trapFocus(event, activeOverlayType, dashboardEl);\n  }\n}","/**\n * Checks if the browser supports Drag & Drop (not supported on mobile devices, for example).\n */\nexport default function isDragDropSupported() {\n  const div = document.body;\n  if (!('draggable' in div) || !('ondragstart' in div && 'ondrop' in div)) {\n    return false;\n  }\n  if (!('FormData' in window)) {\n    return false;\n  }\n  if (!('FileReader' in window)) {\n    return false;\n  }\n  return true;\n}","import { h } from 'preact';\nfunction iconImage() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 25 25\"\n  }, h(\"g\", {\n    fill: \"#686DE0\",\n    fillRule: \"evenodd\"\n  }, h(\"path\", {\n    d: \"M5 7v10h15V7H5zm0-1h15a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1z\",\n    fillRule: \"nonzero\"\n  }), h(\"path\", {\n    d: \"M6.35 17.172l4.994-5.026a.5.5 0 0 1 .707 0l2.16 2.16 3.505-3.505a.5.5 0 0 1 .707 0l2.336 2.31-.707.72-1.983-1.97-3.505 3.505a.5.5 0 0 1-.707 0l-2.16-2.159-3.938 3.939-1.409.026z\",\n    fillRule: \"nonzero\"\n  }), h(\"circle\", {\n    cx: \"7.5\",\n    cy: \"9.5\",\n    r: \"1.5\"\n  })));\n}\nfunction iconAudio() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 25 25\"\n  }, h(\"path\", {\n    d: \"M9.5 18.64c0 1.14-1.145 2-2.5 2s-2.5-.86-2.5-2c0-1.14 1.145-2 2.5-2 .557 0 1.079.145 1.5.396V7.25a.5.5 0 0 1 .379-.485l9-2.25A.5.5 0 0 1 18.5 5v11.64c0 1.14-1.145 2-2.5 2s-2.5-.86-2.5-2c0-1.14 1.145-2 2.5-2 .557 0 1.079.145 1.5.396V8.67l-8 2v7.97zm8-11v-2l-8 2v2l8-2zM7 19.64c.855 0 1.5-.484 1.5-1s-.645-1-1.5-1-1.5.484-1.5 1 .645 1 1.5 1zm9-2c.855 0 1.5-.484 1.5-1s-.645-1-1.5-1-1.5.484-1.5 1 .645 1 1.5 1z\",\n    fill: \"#049BCF\",\n    fillRule: \"nonzero\"\n  }));\n}\nfunction iconVideo() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 25 25\"\n  }, h(\"path\", {\n    d: \"M16 11.834l4.486-2.691A1 1 0 0 1 22 10v6a1 1 0 0 1-1.514.857L16 14.167V17a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V9a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v2.834zM15 9H5v8h10V9zm1 4l5 3v-6l-5 3z\",\n    fill: \"#19AF67\",\n    fillRule: \"nonzero\"\n  }));\n}\nfunction iconPDF() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 25 25\"\n  }, h(\"path\", {\n    d: \"M9.766 8.295c-.691-1.843-.539-3.401.747-3.726 1.643-.414 2.505.938 2.39 3.299-.039.79-.194 1.662-.537 3.148.324.49.66.967 1.055 1.51.17.231.382.488.629.757 1.866-.128 3.653.114 4.918.655 1.487.635 2.192 1.685 1.614 2.84-.566 1.133-1.839 1.084-3.416.249-1.141-.604-2.457-1.634-3.51-2.707a13.467 13.467 0 0 0-2.238.426c-1.392 4.051-4.534 6.453-5.707 4.572-.986-1.58 1.38-4.206 4.914-5.375.097-.322.185-.656.264-1.001.08-.353.306-1.31.407-1.737-.678-1.059-1.2-2.031-1.53-2.91zm2.098 4.87c-.033.144-.068.287-.104.427l.033-.01-.012.038a14.065 14.065 0 0 1 1.02-.197l-.032-.033.052-.004a7.902 7.902 0 0 1-.208-.271c-.197-.27-.38-.526-.555-.775l-.006.028-.002-.003c-.076.323-.148.632-.186.8zm5.77 2.978c1.143.605 1.832.632 2.054.187.26-.519-.087-1.034-1.113-1.473-.911-.39-2.175-.608-3.55-.608.845.766 1.787 1.459 2.609 1.894zM6.559 18.789c.14.223.693.16 1.425-.413.827-.648 1.61-1.747 2.208-3.206-2.563 1.064-4.102 2.867-3.633 3.62zm5.345-10.97c.088-1.793-.351-2.48-1.146-2.28-.473.119-.564 1.05-.056 2.405.213.566.52 1.188.908 1.859.18-.858.268-1.453.294-1.984z\",\n    fill: \"#E2514A\",\n    fillRule: \"nonzero\"\n  }));\n}\nfunction iconArchive() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 25 25\"\n  }, h(\"path\", {\n    d: \"M10.45 2.05h1.05a.5.5 0 0 1 .5.5v.024a.5.5 0 0 1-.5.5h-1.05a.5.5 0 0 1-.5-.5V2.55a.5.5 0 0 1 .5-.5zm2.05 1.024h1.05a.5.5 0 0 1 .5.5V3.6a.5.5 0 0 1-.5.5H12.5a.5.5 0 0 1-.5-.5v-.025a.5.5 0 0 1 .5-.5v-.001zM10.45 0h1.05a.5.5 0 0 1 .5.5v.025a.5.5 0 0 1-.5.5h-1.05a.5.5 0 0 1-.5-.5V.5a.5.5 0 0 1 .5-.5zm2.05 1.025h1.05a.5.5 0 0 1 .5.5v.024a.5.5 0 0 1-.5.5H12.5a.5.5 0 0 1-.5-.5v-.024a.5.5 0 0 1 .5-.5zm-2.05 3.074h1.05a.5.5 0 0 1 .5.5v.025a.5.5 0 0 1-.5.5h-1.05a.5.5 0 0 1-.5-.5v-.025a.5.5 0 0 1 .5-.5zm2.05 1.025h1.05a.5.5 0 0 1 .5.5v.024a.5.5 0 0 1-.5.5H12.5a.5.5 0 0 1-.5-.5v-.024a.5.5 0 0 1 .5-.5zm-2.05 1.024h1.05a.5.5 0 0 1 .5.5v.025a.5.5 0 0 1-.5.5h-1.05a.5.5 0 0 1-.5-.5v-.025a.5.5 0 0 1 .5-.5zm2.05 1.025h1.05a.5.5 0 0 1 .5.5v.025a.5.5 0 0 1-.5.5H12.5a.5.5 0 0 1-.5-.5v-.025a.5.5 0 0 1 .5-.5zm-2.05 1.025h1.05a.5.5 0 0 1 .5.5v.025a.5.5 0 0 1-.5.5h-1.05a.5.5 0 0 1-.5-.5v-.025a.5.5 0 0 1 .5-.5zm2.05 1.025h1.05a.5.5 0 0 1 .5.5v.024a.5.5 0 0 1-.5.5H12.5a.5.5 0 0 1-.5-.5v-.024a.5.5 0 0 1 .5-.5zm-1.656 3.074l-.82 5.946c.52.302 1.174.458 1.976.458.803 0 1.455-.156 1.975-.458l-.82-5.946h-2.311zm0-1.025h2.312c.512 0 .946.378 1.015.885l.82 5.946c.056.412-.142.817-.501 1.026-.686.398-1.515.597-2.49.597-.974 0-1.804-.199-2.49-.597a1.025 1.025 0 0 1-.5-1.026l.819-5.946c.07-.507.503-.885 1.015-.885zm.545 6.6a.5.5 0 0 1-.397-.561l.143-.999a.5.5 0 0 1 .495-.429h.74a.5.5 0 0 1 .495.43l.143.998a.5.5 0 0 1-.397.561c-.404.08-.819.08-1.222 0z\",\n    fill: \"#00C469\",\n    fillRule: \"nonzero\"\n  }));\n}\nfunction iconFile() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 25 25\"\n  }, h(\"g\", {\n    fill: \"#A7AFB7\",\n    fillRule: \"nonzero\"\n  }, h(\"path\", {\n    d: \"M5.5 22a.5.5 0 0 1-.5-.5v-18a.5.5 0 0 1 .5-.5h10.719a.5.5 0 0 1 .367.16l3.281 3.556a.5.5 0 0 1 .133.339V21.5a.5.5 0 0 1-.5.5h-14zm.5-1h13V7.25L16 4H6v17z\"\n  }), h(\"path\", {\n    d: \"M15 4v3a1 1 0 0 0 1 1h3V7h-3V4h-1z\"\n  })));\n}\nfunction iconText() {\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    width: \"25\",\n    height: \"25\",\n    viewBox: \"0 0 25 25\"\n  }, h(\"path\", {\n    d: \"M4.5 7h13a.5.5 0 1 1 0 1h-13a.5.5 0 0 1 0-1zm0 3h15a.5.5 0 1 1 0 1h-15a.5.5 0 1 1 0-1zm0 3h15a.5.5 0 1 1 0 1h-15a.5.5 0 1 1 0-1zm0 3h10a.5.5 0 1 1 0 1h-10a.5.5 0 1 1 0-1z\",\n    fill: \"#5A5E69\",\n    fillRule: \"nonzero\"\n  }));\n}\nexport default function getIconByMime(fileType) {\n  const defaultChoice = {\n    color: '#838999',\n    icon: iconFile()\n  };\n  if (!fileType) return defaultChoice;\n  const fileTypeGeneral = fileType.split('/')[0];\n  const fileTypeSpecific = fileType.split('/')[1];\n\n  // Text\n  if (fileTypeGeneral === 'text') {\n    return {\n      color: '#5a5e69',\n      icon: iconText()\n    };\n  }\n\n  // Image\n  if (fileTypeGeneral === 'image') {\n    return {\n      color: '#686de0',\n      icon: iconImage()\n    };\n  }\n\n  // Audio\n  if (fileTypeGeneral === 'audio') {\n    return {\n      color: '#068dbb',\n      icon: iconAudio()\n    };\n  }\n\n  // Video\n  if (fileTypeGeneral === 'video') {\n    return {\n      color: '#19af67',\n      icon: iconVideo()\n    };\n  }\n\n  // PDF\n  if (fileTypeGeneral === 'application' && fileTypeSpecific === 'pdf') {\n    return {\n      color: '#e25149',\n      icon: iconPDF()\n    };\n  }\n\n  // Archive\n  const archiveTypes = ['zip', 'x-7z-compressed', 'x-zip-compressed', 'x-rar-compressed', 'x-tar', 'x-gzip', 'x-apple-diskimage'];\n  if (fileTypeGeneral === 'application' && archiveTypes.indexOf(fileTypeSpecific) !== -1) {\n    return {\n      color: '#00C469',\n      icon: iconArchive()\n    };\n  }\n  return defaultChoice;\n}","import { h } from 'preact';\nimport getFileTypeIcon from \"../utils/getFileTypeIcon.js\";\nexport default function FilePreview(props) {\n  const {\n    file\n  } = props;\n  if (file.preview) {\n    return h(\"img\", {\n      className: \"uppy-Dashboard-Item-previewImg\",\n      alt: file.name,\n      src: file.preview\n    });\n  }\n  const {\n    color,\n    icon\n  } = getFileTypeIcon(file.type);\n  return h(\"div\", {\n    className: \"uppy-Dashboard-Item-previewIconWrap\"\n  }, h(\"span\", {\n    className: \"uppy-Dashboard-Item-previewIcon\",\n    style: {\n      color\n    }\n  }, icon), h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-Dashboard-Item-previewIconBg\",\n    width: \"58\",\n    height: \"76\",\n    viewBox: \"0 0 58 76\"\n  }, h(\"rect\", {\n    fill: \"#FFF\",\n    width: \"58\",\n    height: \"76\",\n    rx: \"3\",\n    fillRule: \"evenodd\"\n  })));\n}","import { h } from 'preact';\nconst metaFieldIdToName = (metaFieldId, metaFields) => {\n  const fields = typeof metaFields === 'function' ? metaFields() : metaFields;\n  const field = fields.filter(f => f.id === metaFieldId);\n  return field[0].name;\n};\nexport default function MetaErrorMessage(props) {\n  const {\n    file,\n    toggleFileCard,\n    i18n,\n    metaFields\n  } = props;\n  const {\n    missingRequiredMetaFields\n  } = file;\n  if (!(missingRequiredMetaFields != null && missingRequiredMetaFields.length)) {\n    return null;\n  }\n  const metaFieldsString = missingRequiredMetaFields.map(missingMetaField => metaFieldIdToName(missingMetaField, metaFields)).join(', ');\n  return h(\"div\", {\n    className: \"uppy-Dashboard-Item-errorMessage\"\n  }, i18n('missingRequiredMetaFields', {\n    smart_count: missingRequiredMetaFields.length,\n    fields: metaFieldsString\n  }), ' ', h(\"button\", {\n    type: \"button\",\n    class: \"uppy-u-reset uppy-Dashboard-Item-errorMessageBtn\",\n    onClick: () => toggleFileCard(true, file.id)\n  }, i18n('editFile')));\n}","import { h } from 'preact';\nimport FilePreview from \"../../FilePreview.js\";\nimport MetaErrorMessage from \"../MetaErrorMessage.js\";\nimport getFileTypeIcon from \"../../../utils/getFileTypeIcon.js\";\nexport default function FilePreviewAndLink(props) {\n  const {\n    file,\n    i18n,\n    toggleFileCard,\n    metaFields,\n    showLinkToFileUploadResult\n  } = props;\n  const white = 'rgba(255, 255, 255, 0.5)';\n  const previewBackgroundColor = file.preview ? white : getFileTypeIcon(file.type).color;\n  return h(\"div\", {\n    className: \"uppy-Dashboard-Item-previewInnerWrap\",\n    style: {\n      backgroundColor: previewBackgroundColor\n    }\n  }, showLinkToFileUploadResult && file.uploadURL && h(\"a\", {\n    className: \"uppy-Dashboard-Item-previewLink\",\n    href: file.uploadURL,\n    rel: \"noreferrer noopener\",\n    target: \"_blank\",\n    \"aria-label\": file.meta.name\n  }, h(\"span\", {\n    hidden: true\n  }, file.meta.name)), h(FilePreview, {\n    file: file\n  }), h(MetaErrorMessage, {\n    file: file,\n    i18n: i18n,\n    toggleFileCard: toggleFileCard,\n    metaFields: metaFields\n  }));\n}","/* eslint-disable react/destructuring-assignment */\nimport { h } from 'preact';\nfunction onPauseResumeCancelRetry(props) {\n  if (props.isUploaded) return;\n  if (props.error && !props.hideRetryButton) {\n    props.uppy.retryUpload(props.file.id);\n    return;\n  }\n  if (props.resumableUploads && !props.hidePauseResumeButton) {\n    props.uppy.pauseResume(props.file.id);\n  } else if (props.individualCancellation && !props.hideCancelButton) {\n    props.uppy.removeFile(props.file.id);\n  }\n}\nfunction progressIndicatorTitle(props) {\n  if (props.isUploaded) {\n    return props.i18n('uploadComplete');\n  }\n  if (props.error) {\n    return props.i18n('retryUpload');\n  }\n  if (props.resumableUploads) {\n    if (props.file.isPaused) {\n      return props.i18n('resumeUpload');\n    }\n    return props.i18n('pauseUpload');\n  }\n  if (props.individualCancellation) {\n    return props.i18n('cancelUpload');\n  }\n  return '';\n}\nfunction ProgressIndicatorButton(props) {\n  return h(\"div\", {\n    className: \"uppy-Dashboard-Item-progress\"\n  }, h(\"button\", {\n    className: \"uppy-u-reset uppy-c-btn uppy-Dashboard-Item-progressIndicator\",\n    type: \"button\",\n    \"aria-label\": progressIndicatorTitle(props),\n    title: progressIndicatorTitle(props),\n    onClick: () => onPauseResumeCancelRetry(props)\n  }, props.children));\n}\nfunction ProgressCircleContainer(_ref) {\n  let {\n    children\n  } = _ref;\n  return h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    width: \"70\",\n    height: \"70\",\n    viewBox: \"0 0 36 36\",\n    className: \"uppy-c-icon uppy-Dashboard-Item-progressIcon--circle\"\n  }, children);\n}\nfunction ProgressCircle(_ref2) {\n  let {\n    progress\n  } = _ref2;\n  // circle length equals 2 * PI * R\n  const circleLength = 2 * Math.PI * 15;\n  return h(\"g\", null, h(\"circle\", {\n    className: \"uppy-Dashboard-Item-progressIcon--bg\",\n    r: \"15\",\n    cx: \"18\",\n    cy: \"18\",\n    \"stroke-width\": \"2\",\n    fill: \"none\"\n  }), h(\"circle\", {\n    className: \"uppy-Dashboard-Item-progressIcon--progress\",\n    r: \"15\",\n    cx: \"18\",\n    cy: \"18\",\n    transform: \"rotate(-90, 18, 18)\",\n    fill: \"none\",\n    \"stroke-width\": \"2\",\n    \"stroke-dasharray\": circleLength,\n    \"stroke-dashoffset\": circleLength - circleLength / 100 * progress\n  }));\n}\nexport default function FileProgress(props) {\n  // Nothing if upload has not started\n  if (!props.file.progress.uploadStarted) {\n    return null;\n  }\n\n  // Green checkmark when complete\n  if (props.isUploaded) {\n    return h(\"div\", {\n      className: \"uppy-Dashboard-Item-progress\"\n    }, h(\"div\", {\n      className: \"uppy-Dashboard-Item-progressIndicator\"\n    }, h(ProgressCircleContainer, null, h(\"circle\", {\n      r: \"15\",\n      cx: \"18\",\n      cy: \"18\",\n      fill: \"#1bb240\"\n    }), h(\"polygon\", {\n      className: \"uppy-Dashboard-Item-progressIcon--check\",\n      transform: \"translate(2, 3)\",\n      points: \"14 22.5 7 15.2457065 8.99985857 13.1732815 14 18.3547104 22.9729883 9 25 11.1005634\"\n    }))));\n  }\n  if (props.recoveredState) {\n    return undefined;\n  }\n\n  // Retry button for error\n  if (props.error && !props.hideRetryButton) {\n    return (\n      // eslint-disable-next-line react/jsx-props-no-spreading\n      h(ProgressIndicatorButton, props, h(\"svg\", {\n        \"aria-hidden\": \"true\",\n        focusable: \"false\",\n        className: \"uppy-c-icon uppy-Dashboard-Item-progressIcon--retry\",\n        width: \"28\",\n        height: \"31\",\n        viewBox: \"0 0 16 19\"\n      }, h(\"path\", {\n        d: \"M16 11a8 8 0 1 1-8-8v2a6 6 0 1 0 6 6h2z\"\n      }), h(\"path\", {\n        d: \"M7.9 3H10v2H7.9z\"\n      }), h(\"path\", {\n        d: \"M8.536.5l3.535 3.536-1.414 1.414L7.12 1.914z\"\n      }), h(\"path\", {\n        d: \"M10.657 2.621l1.414 1.415L8.536 7.57 7.12 6.157z\"\n      })))\n    );\n  }\n\n  // Pause/resume button for resumable uploads\n  if (props.resumableUploads && !props.hidePauseResumeButton) {\n    return (\n      // eslint-disable-next-line react/jsx-props-no-spreading\n      h(ProgressIndicatorButton, props, h(ProgressCircleContainer, null, h(ProgressCircle, {\n        progress: props.file.progress.percentage\n      }), props.file.isPaused ? h(\"polygon\", {\n        className: \"uppy-Dashboard-Item-progressIcon--play\",\n        transform: \"translate(3, 3)\",\n        points: \"12 20 12 10 20 15\"\n      }) : h(\"g\", {\n        className: \"uppy-Dashboard-Item-progressIcon--pause\",\n        transform: \"translate(14.5, 13)\"\n      }, h(\"rect\", {\n        x: \"0\",\n        y: \"0\",\n        width: \"2\",\n        height: \"10\",\n        rx: \"0\"\n      }), h(\"rect\", {\n        x: \"5\",\n        y: \"0\",\n        width: \"2\",\n        height: \"10\",\n        rx: \"0\"\n      }))))\n    );\n  }\n\n  // Cancel button for non-resumable uploads if individualCancellation is supported (not bundled)\n  if (!props.resumableUploads && props.individualCancellation && !props.hideCancelButton) {\n    return (\n      // eslint-disable-next-line react/jsx-props-no-spreading\n      h(ProgressIndicatorButton, props, h(ProgressCircleContainer, null, h(ProgressCircle, {\n        progress: props.file.progress.percentage\n      }), h(\"polygon\", {\n        className: \"cancel\",\n        transform: \"translate(2, 2)\",\n        points: \"19.8856516 11.0625 16 14.9481516 12.1019737 11.0625 11.0625 12.1143484 14.9481516 16 11.0625 19.8980263 12.1019737 20.9375 16 17.0518484 19.8856516 20.9375 20.9375 19.8980263 17.0518484 16 20.9375 12\"\n      })))\n    );\n  }\n\n  // Just progress when buttons are disabled\n  return h(\"div\", {\n    className: \"uppy-Dashboard-Item-progress\"\n  }, h(\"div\", {\n    className: \"uppy-Dashboard-Item-progressIndicator\"\n  }, h(ProgressCircleContainer, null, h(ProgressCircle, {\n    progress: props.file.progress.percentage\n  }))));\n}","/**\n * Truncates a string to the given number of chars (maxLength) by inserting '...' in the middle of that string.\n * Partially taken from https://stackoverflow.com/a/5723274/3192470.\n */\nconst separator = '...';\nexport default function truncateString(string, maxLength) {\n  // Return the empty string if maxLength is zero\n  if (maxLength === 0) return '';\n  // Return original string if it's already shorter than maxLength\n  if (string.length <= maxLength) return string;\n  // Return truncated substring appended of the ellipsis char if string can't be meaningfully truncated\n  if (maxLength <= separator.length + 1) return `${string.slice(0, maxLength - 1)}…`;\n  const charsToShow = maxLength - separator.length;\n  const frontChars = Math.ceil(charsToShow / 2);\n  const backChars = Math.floor(charsToShow / 2);\n  return string.slice(0, frontChars) + separator + string.slice(-backChars);\n}","/* eslint-disable react/destructuring-assignment */\nimport { h, Fragment } from 'preact';\nimport prettierBytes from '@transloadit/prettier-bytes';\nimport truncateString from '@uppy/utils/lib/truncateString';\nimport MetaErrorMessage from \"../MetaErrorMessage.js\";\nconst renderFileName = props => {\n  const {\n    author,\n    name\n  } = props.file.meta;\n  function getMaxNameLength() {\n    if (props.isSingleFile && props.containerHeight >= 350) {\n      return 90;\n    }\n    if (props.containerWidth <= 352) {\n      return 35;\n    }\n    if (props.containerWidth <= 576) {\n      return 60;\n    }\n    // When `author` is present, we want to make sure\n    // the file name fits on one line so we can place\n    // the author on the second line.\n    return author ? 20 : 30;\n  }\n  return h(\"div\", {\n    className: \"uppy-Dashboard-Item-name\",\n    title: name\n  }, truncateString(name, getMaxNameLength()));\n};\nconst renderAuthor = props => {\n  var _props$file$remote;\n  const {\n    author\n  } = props.file.meta;\n  const providerName = (_props$file$remote = props.file.remote) == null ? void 0 : _props$file$remote.providerName;\n  const dot = `\\u00B7`;\n  if (!author) {\n    return null;\n  }\n  return h(\"div\", {\n    className: \"uppy-Dashboard-Item-author\"\n  }, h(\"a\", {\n    href: `${author.url}?utm_source=Companion&utm_medium=referral`,\n    target: \"_blank\",\n    rel: \"noopener noreferrer\"\n  }, truncateString(author.name, 13)), providerName ? h(Fragment, null, ` ${dot} `, providerName, ` ${dot} `) : null);\n};\nconst renderFileSize = props => props.file.size && h(\"div\", {\n  className: \"uppy-Dashboard-Item-statusSize\"\n}, prettierBytes(props.file.size));\nconst ReSelectButton = props => props.file.isGhost && h(\"span\", null, ' \\u2022 ', h(\"button\", {\n  className: \"uppy-u-reset uppy-c-btn uppy-Dashboard-Item-reSelect\",\n  type: \"button\",\n  onClick: props.toggleAddFilesPanel\n}, props.i18n('reSelect')));\nconst ErrorButton = _ref => {\n  let {\n    file,\n    onClick\n  } = _ref;\n  if (file.error) {\n    return h(\"button\", {\n      className: \"uppy-u-reset uppy-c-btn uppy-Dashboard-Item-errorDetails\",\n      \"aria-label\": file.error,\n      \"data-microtip-position\": \"bottom\",\n      \"data-microtip-size\": \"medium\",\n      onClick: onClick,\n      type: \"button\"\n    }, \"?\");\n  }\n  return null;\n};\nexport default function FileInfo(props) {\n  const {\n    file\n  } = props;\n  return h(\"div\", {\n    className: \"uppy-Dashboard-Item-fileInfo\",\n    \"data-uppy-file-source\": file.source\n  }, h(\"div\", {\n    className: \"uppy-Dashboard-Item-fileName\"\n  }, renderFileName(props), h(ErrorButton, {\n    file: props.file\n    // eslint-disable-next-line no-alert\n    ,\n    onClick: () => alert(props.file.error) // TODO: move to a custom alert implementation\n  })), h(\"div\", {\n    className: \"uppy-Dashboard-Item-status\"\n  }, renderAuthor(props), renderFileSize(props), ReSelectButton(props)), h(MetaErrorMessage, {\n    file: props.file,\n    i18n: props.i18n,\n    toggleFileCard: props.toggleFileCard,\n    metaFields: props.metaFields\n  }));\n}","import { h } from 'preact';\nimport copyToClipboard from \"../../../utils/copyToClipboard.js\";\nfunction EditButton(_ref) {\n  let {\n    file,\n    uploadInProgressOrComplete,\n    metaFields,\n    canEditFile,\n    i18n,\n    onClick\n  } = _ref;\n  if (!uploadInProgressOrComplete && metaFields && metaFields.length > 0 || !uploadInProgressOrComplete && canEditFile(file)) {\n    return h(\"button\", {\n      className: \"uppy-u-reset uppy-c-btn uppy-Dashboard-Item-action uppy-Dashboard-Item-action--edit\",\n      type: \"button\",\n      \"aria-label\": i18n('editFileWithFilename', {\n        file: file.meta.name\n      }),\n      title: i18n('editFileWithFilename', {\n        file: file.meta.name\n      }),\n      onClick: () => onClick()\n    }, h(\"svg\", {\n      \"aria-hidden\": \"true\",\n      focusable: \"false\",\n      className: \"uppy-c-icon\",\n      width: \"14\",\n      height: \"14\",\n      viewBox: \"0 0 14 14\"\n    }, h(\"g\", {\n      fillRule: \"evenodd\"\n    }, h(\"path\", {\n      d: \"M1.5 10.793h2.793A1 1 0 0 0 5 10.5L11.5 4a1 1 0 0 0 0-1.414L9.707.793a1 1 0 0 0-1.414 0l-6.5 6.5A1 1 0 0 0 1.5 8v2.793zm1-1V8L9 1.5l1.793 1.793-6.5 6.5H2.5z\",\n      fillRule: \"nonzero\"\n    }), h(\"rect\", {\n      x: \"1\",\n      y: \"12.293\",\n      width: \"11\",\n      height: \"1\",\n      rx: \".5\"\n    }), h(\"path\", {\n      fillRule: \"nonzero\",\n      d: \"M6.793 2.5L9.5 5.207l.707-.707L7.5 1.793z\"\n    }))));\n  }\n  return null;\n}\nfunction RemoveButton(_ref2) {\n  let {\n    i18n,\n    onClick,\n    file\n  } = _ref2;\n  return h(\"button\", {\n    className: \"uppy-u-reset uppy-Dashboard-Item-action uppy-Dashboard-Item-action--remove\",\n    type: \"button\",\n    \"aria-label\": i18n('removeFile', {\n      file: file.meta.name\n    }),\n    title: i18n('removeFile', {\n      file: file.meta.name\n    }),\n    onClick: () => onClick()\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    width: \"18\",\n    height: \"18\",\n    viewBox: \"0 0 18 18\"\n  }, h(\"path\", {\n    d: \"M9 0C4.034 0 0 4.034 0 9s4.034 9 9 9 9-4.034 9-9-4.034-9-9-9z\"\n  }), h(\"path\", {\n    fill: \"#FFF\",\n    d: \"M13 12.222l-.778.778L9 9.778 5.778 13 5 12.222 8.222 9 5 5.778 5.778 5 9 8.222 12.222 5l.778.778L9.778 9z\"\n  })));\n}\nconst copyLinkToClipboard = (event, props) => {\n  copyToClipboard(props.file.uploadURL, props.i18n('copyLinkToClipboardFallback')).then(() => {\n    props.uppy.log('Link copied to clipboard.');\n    props.uppy.info(props.i18n('copyLinkToClipboardSuccess'), 'info', 3000);\n  }).catch(props.uppy.log)\n  // avoid losing focus\n  .then(() => event.target.focus({\n    preventScroll: true\n  }));\n};\nfunction CopyLinkButton(props) {\n  const {\n    i18n\n  } = props;\n  return h(\"button\", {\n    className: \"uppy-u-reset uppy-Dashboard-Item-action uppy-Dashboard-Item-action--copyLink\",\n    type: \"button\",\n    \"aria-label\": i18n('copyLink'),\n    title: i18n('copyLink'),\n    onClick: event => copyLinkToClipboard(event, props)\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    width: \"14\",\n    height: \"14\",\n    viewBox: \"0 0 14 12\"\n  }, h(\"path\", {\n    d: \"M7.94 7.703a2.613 2.613 0 0 1-.626 2.681l-.852.851a2.597 2.597 0 0 1-1.849.766A2.616 2.616 0 0 1 2.764 7.54l.852-.852a2.596 2.596 0 0 1 2.69-.625L5.267 7.099a1.44 1.44 0 0 0-.833.407l-.852.851a1.458 1.458 0 0 0 1.03 2.486c.39 0 .755-.152 1.03-.426l.852-.852c.231-.231.363-.522.406-.824l1.04-1.038zm4.295-5.937A2.596 2.596 0 0 0 10.387 1c-.698 0-1.355.272-1.849.766l-.852.851a2.614 2.614 0 0 0-.624 2.688l1.036-1.036c.041-.304.173-.6.407-.833l.852-.852c.275-.275.64-.426 1.03-.426a1.458 1.458 0 0 1 1.03 2.486l-.852.851a1.442 1.442 0 0 1-.824.406l-1.04 1.04a2.596 2.596 0 0 0 2.683-.628l.851-.85a2.616 2.616 0 0 0 0-3.697zm-6.88 6.883a.577.577 0 0 0 .82 0l3.474-3.474a.579.579 0 1 0-.819-.82L5.355 7.83a.579.579 0 0 0 0 .819z\"\n  })));\n}\nexport default function Buttons(props) {\n  const {\n    uppy,\n    file,\n    uploadInProgressOrComplete,\n    canEditFile,\n    metaFields,\n    showLinkToFileUploadResult,\n    showRemoveButton,\n    i18n,\n    toggleFileCard,\n    openFileEditor\n  } = props;\n  const editAction = () => {\n    if (metaFields && metaFields.length > 0) {\n      toggleFileCard(true, file.id);\n    } else {\n      openFileEditor(file);\n    }\n  };\n  return h(\"div\", {\n    className: \"uppy-Dashboard-Item-actionWrapper\"\n  }, h(EditButton, {\n    i18n: i18n,\n    file: file,\n    uploadInProgressOrComplete: uploadInProgressOrComplete,\n    canEditFile: canEditFile,\n    metaFields: metaFields,\n    onClick: editAction\n  }), showLinkToFileUploadResult && file.uploadURL ? h(CopyLinkButton, {\n    file: file,\n    uppy: uppy,\n    i18n: i18n\n  }) : null, showRemoveButton ? h(RemoveButton, {\n    i18n: i18n,\n    file: file,\n    uppy: uppy,\n    onClick: () => uppy.removeFile(file.id, 'removed-by-user')\n  }) : null);\n}","/**\n * Copies text to clipboard by creating an almost invisible textarea,\n * adding text there, then running execCommand('copy').\n * Falls back to prompt() when the easy way fails (hello, Safari!)\n * From http://stackoverflow.com/a/30810322\n *\n * @param {string} textToCopy\n * @param {string} fallbackString\n * @returns {Promise}\n */\n\nexport default function copyToClipboard(textToCopy, fallbackString) {\n  if (fallbackString === void 0) {\n    fallbackString = 'Copy the URL below';\n  }\n  return new Promise(resolve => {\n    const textArea = document.createElement('textarea');\n    textArea.setAttribute('style', {\n      position: 'fixed',\n      top: 0,\n      left: 0,\n      width: '2em',\n      height: '2em',\n      padding: 0,\n      border: 'none',\n      outline: 'none',\n      boxShadow: 'none',\n      background: 'transparent'\n    });\n    textArea.value = textToCopy;\n    document.body.appendChild(textArea);\n    textArea.select();\n    const magicCopyFailed = () => {\n      document.body.removeChild(textArea);\n      // eslint-disable-next-line no-alert\n      window.prompt(fallbackString, textToCopy);\n      resolve();\n    };\n    try {\n      const successful = document.execCommand('copy');\n      if (!successful) {\n        return magicCopyFailed();\n      }\n      document.body.removeChild(textArea);\n      return resolve();\n    } catch (err) {\n      document.body.removeChild(textArea);\n      return magicCopyFailed();\n    }\n  });\n}","// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck Typing this file requires more work, skipping it to unblock the rest of the transition.\n\n/* eslint-disable react/destructuring-assignment */\nimport { h, Component } from 'preact';\nimport classNames from 'classnames';\nimport shallowEqual from 'is-shallow-equal';\nimport FilePreviewAndLink from \"./FilePreviewAndLink/index.js\";\nimport FileProgress from \"./FileProgress/index.js\";\nimport FileInfo from \"./FileInfo/index.js\";\nimport Buttons from \"./Buttons/index.js\";\nexport default class FileItem extends Component {\n  componentDidMount() {\n    const {\n      file\n    } = this.props;\n    if (!file.preview) {\n      this.props.handleRequestThumbnail(file);\n    }\n  }\n  shouldComponentUpdate(nextProps) {\n    return !shallowEqual(this.props, nextProps);\n  }\n\n  // VirtualList mounts FileItems again and they emit `thumbnail:request`\n  // Otherwise thumbnails are broken or missing after Golden Retriever restores files\n  componentDidUpdate() {\n    const {\n      file\n    } = this.props;\n    if (!file.preview) {\n      this.props.handleRequestThumbnail(file);\n    }\n  }\n  componentWillUnmount() {\n    const {\n      file\n    } = this.props;\n    if (!file.preview) {\n      this.props.handleCancelThumbnail(file);\n    }\n  }\n  render() {\n    const {\n      file\n    } = this.props;\n    const isProcessing = file.progress.preprocess || file.progress.postprocess;\n    const isUploaded = file.progress.uploadComplete && !isProcessing && !file.error;\n    const uploadInProgressOrComplete = file.progress.uploadStarted || isProcessing;\n    const uploadInProgress = file.progress.uploadStarted && !file.progress.uploadComplete || isProcessing;\n    const error = file.error || false;\n\n    // File that Golden Retriever was able to partly restore (only meta, not blob),\n    // users still need to re-add it, so it’s a ghost\n    const {\n      isGhost\n    } = file;\n    let showRemoveButton = this.props.individualCancellation ? !isUploaded : !uploadInProgress && !isUploaded;\n    if (isUploaded && this.props.showRemoveButtonAfterComplete) {\n      showRemoveButton = true;\n    }\n    const dashboardItemClass = classNames({\n      'uppy-Dashboard-Item': true,\n      'is-inprogress': uploadInProgress && !this.props.recoveredState,\n      'is-processing': isProcessing,\n      'is-complete': isUploaded,\n      'is-error': !!error,\n      'is-resumable': this.props.resumableUploads,\n      'is-noIndividualCancellation': !this.props.individualCancellation,\n      'is-ghost': isGhost\n    });\n    return h(\"div\", {\n      className: dashboardItemClass,\n      id: `uppy_${file.id}`,\n      role: this.props.role\n    }, h(\"div\", {\n      className: \"uppy-Dashboard-Item-preview\"\n    }, h(FilePreviewAndLink, {\n      file: file,\n      showLinkToFileUploadResult: this.props.showLinkToFileUploadResult,\n      i18n: this.props.i18n,\n      toggleFileCard: this.props.toggleFileCard,\n      metaFields: this.props.metaFields\n    }), h(FileProgress, {\n      uppy: this.props.uppy,\n      file: file,\n      error: error,\n      isUploaded: isUploaded,\n      hideRetryButton: this.props.hideRetryButton,\n      hideCancelButton: this.props.hideCancelButton,\n      hidePauseResumeButton: this.props.hidePauseResumeButton,\n      recoveredState: this.props.recoveredState,\n      showRemoveButtonAfterComplete: this.props.showRemoveButtonAfterComplete,\n      resumableUploads: this.props.resumableUploads,\n      individualCancellation: this.props.individualCancellation,\n      i18n: this.props.i18n\n    })), h(\"div\", {\n      className: \"uppy-Dashboard-Item-fileInfoAndButtons\"\n    }, h(FileInfo, {\n      file: file,\n      id: this.props.id,\n      acquirers: this.props.acquirers,\n      containerWidth: this.props.containerWidth,\n      containerHeight: this.props.containerHeight,\n      i18n: this.props.i18n,\n      toggleAddFilesPanel: this.props.toggleAddFilesPanel,\n      toggleFileCard: this.props.toggleFileCard,\n      metaFields: this.props.metaFields,\n      isSingleFile: this.props.isSingleFile\n    }), h(Buttons, {\n      file: file,\n      metaFields: this.props.metaFields,\n      showLinkToFileUploadResult: this.props.showLinkToFileUploadResult,\n      showRemoveButton: showRemoveButton,\n      canEditFile: this.props.canEditFile,\n      uploadInProgressOrComplete: uploadInProgressOrComplete,\n      toggleFileCard: this.props.toggleFileCard,\n      openFileEditor: this.props.openFileEditor,\n      uppy: this.props.uppy,\n      i18n: this.props.i18n\n    })));\n  }\n}","import { h } from 'preact';\nimport { useMemo } from 'preact/hooks';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore untyped\nimport VirtualList from '@uppy/utils/lib/VirtualList';\nimport FileItem from \"./FileItem/index.js\";\nfunction chunks(list, size) {\n  const chunked = [];\n  let currentChunk = [];\n  list.forEach(item => {\n    if (currentChunk.length < size) {\n      currentChunk.push(item);\n    } else {\n      chunked.push(currentChunk);\n      currentChunk = [item];\n    }\n  });\n  if (currentChunk.length) chunked.push(currentChunk);\n  return chunked;\n}\nexport default function FileList(_ref) {\n  let {\n    id,\n    error,\n    i18n,\n    uppy,\n    files,\n    acquirers,\n    resumableUploads,\n    hideRetryButton,\n    hidePauseResumeButton,\n    hideCancelButton,\n    showLinkToFileUploadResult,\n    showRemoveButtonAfterComplete,\n    isWide,\n    metaFields,\n    isSingleFile,\n    toggleFileCard,\n    handleRequestThumbnail,\n    handleCancelThumbnail,\n    recoveredState,\n    individualCancellation,\n    itemsPerRow,\n    openFileEditor,\n    canEditFile,\n    toggleAddFilesPanel,\n    containerWidth,\n    containerHeight\n  } = _ref;\n  // It's not great that this is hardcoded!\n  // It's ESPECIALLY not great that this is checking against `itemsPerRow`!\n  const rowHeight = itemsPerRow === 1 ?\n  // Mobile\n  71\n  // 190px height + 2 * 5px margin\n  : 200;\n\n  // Sort files by file.isGhost, ghost files first, only if recoveredState is present\n  const rows = useMemo(() => {\n    const sortByGhostComesFirst = (file1, file2) => files[file2].isGhost - files[file1].isGhost;\n    const fileIds = Object.keys(files);\n    if (recoveredState) fileIds.sort(sortByGhostComesFirst);\n    return chunks(fileIds, itemsPerRow);\n  }, [files, itemsPerRow, recoveredState]);\n  const renderRow = (row // The `role=\"presentation` attribute ensures that the list items are properly\n  ) =>\n  // associated with the `VirtualList` element.\n  // We use the first file ID as the key—this should not change across scroll rerenders\n  h(\"div\", {\n    class: \"uppy-Dashboard-filesInner\",\n    role: \"presentation\",\n    key: row[0]\n  }, row.map(fileID => h(FileItem, {\n    key: fileID\n    // @ts-expect-error it's fine\n    ,\n    uppy: uppy\n    // FIXME This is confusing, it's actually the Dashboard's plugin ID\n    ,\n    id: id,\n    error: error\n    // TODO move this to context\n    ,\n    i18n: i18n\n    // features\n    ,\n    acquirers: acquirers,\n    resumableUploads: resumableUploads,\n    individualCancellation: individualCancellation\n    // visual options\n    ,\n    hideRetryButton: hideRetryButton,\n    hidePauseResumeButton: hidePauseResumeButton,\n    hideCancelButton: hideCancelButton,\n    showLinkToFileUploadResult: showLinkToFileUploadResult,\n    showRemoveButtonAfterComplete: showRemoveButtonAfterComplete,\n    isWide: isWide,\n    metaFields: metaFields,\n    recoveredState: recoveredState,\n    isSingleFile: isSingleFile,\n    containerWidth: containerWidth,\n    containerHeight: containerHeight\n    // callbacks\n    ,\n    toggleFileCard: toggleFileCard,\n    handleRequestThumbnail: handleRequestThumbnail,\n    handleCancelThumbnail: handleCancelThumbnail,\n    role: \"listitem\",\n    openFileEditor: openFileEditor,\n    canEditFile: canEditFile,\n    toggleAddFilesPanel: toggleAddFilesPanel,\n    file: files[fileID]\n  })));\n  if (isSingleFile) {\n    return h(\"div\", {\n      class: \"uppy-Dashboard-files\"\n    }, renderRow(rows[0]));\n  }\n  return h(VirtualList, {\n    class: \"uppy-Dashboard-files\",\n    role: \"list\",\n    data: rows,\n    renderRow: renderRow,\n    rowHeight: rowHeight\n  });\n}","let _Symbol$for;\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-nocheck Typing this file requires more work, skipping it to unblock the rest of the transition.\n\n/* eslint-disable react/destructuring-assignment */\nimport { h, Component, Fragment } from 'preact';\n_Symbol$for = Symbol.for('uppy test: disable unused locale key warning');\nclass AddFiles extends Component {\n  constructor() {\n    super(...arguments);\n    this.triggerFileInputClick = () => {\n      this.fileInput.click();\n    };\n    this.triggerFolderInputClick = () => {\n      this.folderInput.click();\n    };\n    this.triggerVideoCameraInputClick = () => {\n      this.mobileVideoFileInput.click();\n    };\n    this.triggerPhotoCameraInputClick = () => {\n      this.mobilePhotoFileInput.click();\n    };\n    this.onFileInputChange = event => {\n      this.props.handleInputChange(event);\n\n      // We clear the input after a file is selected, because otherwise\n      // change event is not fired in Chrome and Safari when a file\n      // with the same name is selected.\n      // ___Why not use value=\"\" on <input/> instead?\n      //    Because if we use that method of clearing the input,\n      //    Chrome will not trigger change if we drop the same file twice (Issue #768).\n      event.target.value = null; // eslint-disable-line no-param-reassign\n    };\n    this.renderHiddenInput = (isFolder, refCallback) => {\n      return h(\"input\", {\n        className: \"uppy-Dashboard-input\",\n        hidden: true,\n        \"aria-hidden\": \"true\",\n        tabIndex: -1,\n        webkitdirectory: isFolder,\n        type: \"file\",\n        name: \"files[]\",\n        multiple: this.props.maxNumberOfFiles !== 1,\n        onChange: this.onFileInputChange,\n        accept: this.props.allowedFileTypes,\n        ref: refCallback\n      });\n    };\n    this.renderHiddenCameraInput = (type, nativeCameraFacingMode, refCallback) => {\n      const typeToAccept = {\n        photo: 'image/*',\n        video: 'video/*'\n      };\n      const accept = typeToAccept[type];\n      return h(\"input\", {\n        className: \"uppy-Dashboard-input\",\n        hidden: true,\n        \"aria-hidden\": \"true\",\n        tabIndex: -1,\n        type: \"file\",\n        name: `camera-${type}`,\n        onChange: this.onFileInputChange,\n        capture: nativeCameraFacingMode,\n        accept: accept,\n        ref: refCallback\n      });\n    };\n    this.renderMyDeviceAcquirer = () => {\n      return h(\"div\", {\n        className: \"uppy-DashboardTab\",\n        role: \"presentation\",\n        \"data-uppy-acquirer-id\": \"MyDevice\"\n      }, h(\"button\", {\n        type: \"button\",\n        className: \"uppy-u-reset uppy-c-btn uppy-DashboardTab-btn\",\n        role: \"tab\",\n        tabIndex: 0,\n        \"data-uppy-super-focusable\": true,\n        onClick: this.triggerFileInputClick\n      }, h(\"div\", {\n        className: \"uppy-DashboardTab-inner\"\n      }, h(\"svg\", {\n        className: \"uppy-DashboardTab-iconMyDevice\",\n        \"aria-hidden\": \"true\",\n        focusable: \"false\",\n        width: \"32\",\n        height: \"32\",\n        viewBox: \"0 0 32 32\"\n      }, h(\"path\", {\n        d: \"M8.45 22.087l-1.305-6.674h17.678l-1.572 6.674H8.45zm4.975-12.412l1.083 1.765a.823.823 0 00.715.386h7.951V13.5H8.587V9.675h4.838zM26.043 13.5h-1.195v-2.598c0-.463-.336-.75-.798-.75h-8.356l-1.082-1.766A.823.823 0 0013.897 8H7.728c-.462 0-.815.256-.815.718V13.5h-.956a.97.97 0 00-.746.37.972.972 0 00-.19.81l1.724 8.565c.095.44.484.755.933.755H24c.44 0 .824-.3.929-.727l2.043-8.568a.972.972 0 00-.176-.825.967.967 0 00-.753-.38z\",\n        fill: \"currentcolor\",\n        \"fill-rule\": \"evenodd\"\n      }))), h(\"div\", {\n        className: \"uppy-DashboardTab-name\"\n      }, this.props.i18n('myDevice'))));\n    };\n    this.renderPhotoCamera = () => {\n      return h(\"div\", {\n        className: \"uppy-DashboardTab\",\n        role: \"presentation\",\n        \"data-uppy-acquirer-id\": \"MobilePhotoCamera\"\n      }, h(\"button\", {\n        type: \"button\",\n        className: \"uppy-u-reset uppy-c-btn uppy-DashboardTab-btn\",\n        role: \"tab\",\n        tabIndex: 0,\n        \"data-uppy-super-focusable\": true,\n        onClick: this.triggerPhotoCameraInputClick\n      }, h(\"div\", {\n        className: \"uppy-DashboardTab-inner\"\n      }, h(\"svg\", {\n        \"aria-hidden\": \"true\",\n        focusable: \"false\",\n        width: \"32\",\n        height: \"32\",\n        viewBox: \"0 0 32 32\"\n      }, h(\"path\", {\n        d: \"M23.5 9.5c1.417 0 2.5 1.083 2.5 2.5v9.167c0 1.416-1.083 2.5-2.5 2.5h-15c-1.417 0-2.5-1.084-2.5-2.5V12c0-1.417 1.083-2.5 2.5-2.5h2.917l1.416-2.167C13 7.167 13.25 7 13.5 7h5c.25 0 .5.167.667.333L20.583 9.5H23.5zM16 11.417a4.706 4.706 0 00-4.75 4.75 4.704 4.704 0 004.75 4.75 4.703 4.703 0 004.75-4.75c0-2.663-2.09-4.75-4.75-4.75zm0 7.825c-1.744 0-3.076-1.332-3.076-3.074 0-1.745 1.333-3.077 3.076-3.077 1.744 0 3.074 1.333 3.074 3.076s-1.33 3.075-3.074 3.075z\",\n        fill: \"#02B383\",\n        \"fill-rule\": \"nonzero\"\n      }))), h(\"div\", {\n        className: \"uppy-DashboardTab-name\"\n      }, this.props.i18n('takePictureBtn'))));\n    };\n    this.renderVideoCamera = () => {\n      return h(\"div\", {\n        className: \"uppy-DashboardTab\",\n        role: \"presentation\",\n        \"data-uppy-acquirer-id\": \"MobileVideoCamera\"\n      }, h(\"button\", {\n        type: \"button\",\n        className: \"uppy-u-reset uppy-c-btn uppy-DashboardTab-btn\",\n        role: \"tab\",\n        tabIndex: 0,\n        \"data-uppy-super-focusable\": true,\n        onClick: this.triggerVideoCameraInputClick\n      }, h(\"div\", {\n        className: \"uppy-DashboardTab-inner\"\n      }, h(\"svg\", {\n        \"aria-hidden\": \"true\",\n        width: \"32\",\n        height: \"32\",\n        viewBox: \"0 0 32 32\"\n      }, h(\"path\", {\n        fill: \"#FF675E\",\n        fillRule: \"nonzero\",\n        d: \"m21.254 14.277 2.941-2.588c.797-.313 1.243.818 1.09 1.554-.01 2.094.02 4.189-.017 6.282-.126.915-1.145 1.08-1.58.34l-2.434-2.142c-.192.287-.504 1.305-.738.468-.104-1.293-.028-2.596-.05-3.894.047-.312.381.823.426 1.069.063-.384.206-.744.362-1.09zm-12.939-3.73c3.858.013 7.717-.025 11.574.02.912.129 1.492 1.237 1.351 2.217-.019 2.412.04 4.83-.03 7.239-.17 1.025-1.166 1.59-2.029 1.429-3.705-.012-7.41.025-11.114-.019-.913-.129-1.492-1.237-1.352-2.217.018-2.404-.036-4.813.029-7.214.136-.82.83-1.473 1.571-1.454z \"\n      }))), h(\"div\", {\n        className: \"uppy-DashboardTab-name\"\n      }, this.props.i18n('recordVideoBtn'))));\n    };\n    this.renderBrowseButton = (text, onClickFn) => {\n      const numberOfAcquirers = this.props.acquirers.length;\n      return h(\"button\", {\n        type: \"button\",\n        className: \"uppy-u-reset uppy-c-btn uppy-Dashboard-browse\",\n        onClick: onClickFn,\n        \"data-uppy-super-focusable\": numberOfAcquirers === 0\n      }, text);\n    };\n    this.renderDropPasteBrowseTagline = numberOfAcquirers => {\n      const browseFiles = this.renderBrowseButton(this.props.i18n('browseFiles'), this.triggerFileInputClick);\n      const browseFolders = this.renderBrowseButton(this.props.i18n('browseFolders'), this.triggerFolderInputClick);\n\n      // in order to keep the i18n CamelCase and options lower (as are defaults) we will want to transform a lower\n      // to Camel\n      const lowerFMSelectionType = this.props.fileManagerSelectionType;\n      const camelFMSelectionType = lowerFMSelectionType.charAt(0).toUpperCase() + lowerFMSelectionType.slice(1);\n      return h(\"div\", {\n        class: \"uppy-Dashboard-AddFiles-title\"\n      },\n      // eslint-disable-next-line no-nested-ternary\n      this.props.disableLocalFiles ? this.props.i18n('importFiles') : numberOfAcquirers > 0 ? this.props.i18nArray(`dropPasteImport${camelFMSelectionType}`, {\n        browseFiles,\n        browseFolders,\n        browse: browseFiles\n      }) : this.props.i18nArray(`dropPaste${camelFMSelectionType}`, {\n        browseFiles,\n        browseFolders,\n        browse: browseFiles\n      }));\n    };\n    this.renderAcquirer = acquirer => {\n      var _this$props$activePic;\n      return h(\"div\", {\n        className: \"uppy-DashboardTab\",\n        role: \"presentation\",\n        \"data-uppy-acquirer-id\": acquirer.id\n      }, h(\"button\", {\n        type: \"button\",\n        className: \"uppy-u-reset uppy-c-btn uppy-DashboardTab-btn\",\n        role: \"tab\",\n        tabIndex: 0,\n        \"data-cy\": acquirer.id,\n        \"aria-controls\": `uppy-DashboardContent-panel--${acquirer.id}`,\n        \"aria-selected\": ((_this$props$activePic = this.props.activePickerPanel) == null ? void 0 : _this$props$activePic.id) === acquirer.id,\n        \"data-uppy-super-focusable\": true,\n        onClick: () => this.props.showPanel(acquirer.id)\n      }, h(\"div\", {\n        className: \"uppy-DashboardTab-inner\"\n      }, acquirer.icon()), h(\"div\", {\n        className: \"uppy-DashboardTab-name\"\n      }, acquirer.name)));\n    };\n    this.renderAcquirers = acquirers => {\n      // Group last two buttons, so we don’t end up with\n      // just one button on a new line\n      const acquirersWithoutLastTwo = [...acquirers];\n      const lastTwoAcquirers = acquirersWithoutLastTwo.splice(acquirers.length - 2, acquirers.length);\n      return h(Fragment, null, acquirersWithoutLastTwo.map(acquirer => this.renderAcquirer(acquirer)), h(\"span\", {\n        role: \"presentation\",\n        style: {\n          'white-space': 'nowrap'\n        }\n      }, lastTwoAcquirers.map(acquirer => this.renderAcquirer(acquirer))));\n    };\n    this.renderSourcesList = (acquirers, disableLocalFiles) => {\n      const {\n        showNativePhotoCameraButton,\n        showNativeVideoCameraButton\n      } = this.props;\n      let list = [];\n      const myDeviceKey = 'myDevice';\n      if (!disableLocalFiles) list.push({\n        key: myDeviceKey,\n        elements: this.renderMyDeviceAcquirer()\n      });\n      if (showNativePhotoCameraButton) list.push({\n        key: 'nativePhotoCameraButton',\n        elements: this.renderPhotoCamera()\n      });\n      if (showNativeVideoCameraButton) list.push({\n        key: 'nativePhotoCameraButton',\n        elements: this.renderVideoCamera()\n      });\n      list.push(...acquirers.map(acquirer => ({\n        key: acquirer.id,\n        elements: this.renderAcquirer(acquirer)\n      })));\n\n      // doesn't make sense to show only a lonely \"My Device\"\n      const hasOnlyMyDevice = list.length === 1 && list[0].key === myDeviceKey;\n      if (hasOnlyMyDevice) list = [];\n\n      // Group last two buttons, so we don’t end up with\n      // just one button on a new line\n      const listWithoutLastTwo = [...list];\n      const lastTwo = listWithoutLastTwo.splice(list.length - 2, list.length);\n      const renderList = l => l.map(_ref => {\n        let {\n          key,\n          elements\n        } = _ref;\n        return h(Fragment, {\n          key: key\n        }, elements);\n      });\n      return h(Fragment, null, this.renderDropPasteBrowseTagline(list.length), h(\"div\", {\n        className: \"uppy-Dashboard-AddFiles-list\",\n        role: \"tablist\"\n      }, renderList(listWithoutLastTwo), h(\"span\", {\n        role: \"presentation\",\n        style: {\n          'white-space': 'nowrap'\n        }\n      }, renderList(lastTwo))));\n    };\n  }\n  [_Symbol$for]() {\n    // Those are actually used in `renderDropPasteBrowseTagline` method.\n    this.props.i18nArray('dropPasteBoth');\n    this.props.i18nArray('dropPasteFiles');\n    this.props.i18nArray('dropPasteFolders');\n    this.props.i18nArray('dropPasteImportBoth');\n    this.props.i18nArray('dropPasteImportFiles');\n    this.props.i18nArray('dropPasteImportFolders');\n  }\n  renderPoweredByUppy() {\n    const {\n      i18nArray\n    } = this.props;\n    const uppyBranding = h(\"span\", null, h(\"svg\", {\n      \"aria-hidden\": \"true\",\n      focusable: \"false\",\n      className: \"uppy-c-icon uppy-Dashboard-poweredByIcon\",\n      width: \"11\",\n      height: \"11\",\n      viewBox: \"0 0 11 11\"\n    }, h(\"path\", {\n      d: \"M7.365 10.5l-.01-4.045h2.612L5.5.806l-4.467 5.65h2.604l.01 4.044h3.718z\",\n      fillRule: \"evenodd\"\n    })), h(\"span\", {\n      className: \"uppy-Dashboard-poweredByUppy\"\n    }, \"Uppy\"));\n    const linkText = i18nArray('poweredBy', {\n      uppy: uppyBranding\n    });\n    return h(\"a\", {\n      tabIndex: -1,\n      href: \"https://uppy.io\",\n      rel: \"noreferrer noopener\",\n      target: \"_blank\",\n      className: \"uppy-Dashboard-poweredBy\"\n    }, linkText);\n  }\n  render() {\n    const {\n      showNativePhotoCameraButton,\n      showNativeVideoCameraButton,\n      nativeCameraFacingMode\n    } = this.props;\n    return h(\"div\", {\n      className: \"uppy-Dashboard-AddFiles\"\n    }, this.renderHiddenInput(false, ref => {\n      this.fileInput = ref;\n    }), this.renderHiddenInput(true, ref => {\n      this.folderInput = ref;\n    }), showNativePhotoCameraButton && this.renderHiddenCameraInput('photo', nativeCameraFacingMode, ref => {\n      this.mobilePhotoFileInput = ref;\n    }), showNativeVideoCameraButton && this.renderHiddenCameraInput('video', nativeCameraFacingMode, ref => {\n      this.mobileVideoFileInput = ref;\n    }), this.renderSourcesList(this.props.acquirers, this.props.disableLocalFiles), h(\"div\", {\n      className: \"uppy-Dashboard-AddFiles-info\"\n    }, this.props.note && h(\"div\", {\n      className: \"uppy-Dashboard-note\"\n    }, this.props.note), this.props.proudlyDisplayPoweredByUppy && this.renderPoweredByUppy(this.props)));\n  }\n}\nexport default AddFiles;","/* eslint-disable react/destructuring-assignment */\nimport { h } from 'preact';\nimport classNames from 'classnames';\nimport AddFiles from \"./AddFiles.js\";\nconst AddFilesPanel = props => {\n  return h(\"div\", {\n    className: classNames('uppy-Dashboard-AddFilesPanel', props.className),\n    \"data-uppy-panelType\": \"AddFiles\",\n    \"aria-hidden\": !props.showAddFilesPanel\n  }, h(\"div\", {\n    className: \"uppy-DashboardContent-bar\"\n  }, h(\"div\", {\n    className: \"uppy-DashboardContent-title\",\n    role: \"heading\",\n    \"aria-level\": \"1\"\n  }, props.i18n('addingMoreFiles')), h(\"button\", {\n    className: \"uppy-DashboardContent-back\",\n    type: \"button\",\n    onClick: () => props.toggleAddFilesPanel(false)\n  }, props.i18n('back'))), h(AddFiles, props));\n};\nexport default AddFilesPanel;","// ignore drop/paste events if they are not in input or textarea —\n// otherwise when Url plugin adds drop/paste listeners to this.el,\n// draging UI elements or pasting anything into any field triggers those events —\n// Url treats them as URLs that need to be imported\n\nfunction ignoreEvent(ev) {\n  const {\n    tagName\n  } = ev.target;\n  if (tagName === 'INPUT' || tagName === 'TEXTAREA') {\n    ev.stopPropagation();\n    return;\n  }\n  ev.preventDefault();\n  ev.stopPropagation();\n}\nexport default ignoreEvent;","import { h } from 'preact';\nimport classNames from 'classnames';\nimport ignoreEvent from \"../utils/ignoreEvent.js\";\nfunction PickerPanelContent(_ref) {\n  let {\n    activePickerPanel,\n    className,\n    hideAllPanels,\n    i18n,\n    state,\n    uppy\n  } = _ref;\n  return h(\"div\", {\n    className: classNames('uppy-DashboardContent-panel', className),\n    role: \"tabpanel\",\n    \"data-uppy-panelType\": \"PickerPanel\",\n    id: `uppy-DashboardContent-panel--${activePickerPanel.id}`,\n    onDragOver: ignoreEvent,\n    onDragLeave: ignoreEvent,\n    onDrop: ignoreEvent,\n    onPaste: ignoreEvent\n  }, h(\"div\", {\n    className: \"uppy-DashboardContent-bar\"\n  }, h(\"div\", {\n    className: \"uppy-DashboardContent-title\",\n    role: \"heading\",\n    \"aria-level\": \"1\"\n  }, i18n('importFrom', {\n    name: activePickerPanel.name\n  })), h(\"button\", {\n    className: \"uppy-DashboardContent-back\",\n    type: \"button\",\n    onClick: hideAllPanels\n  }, i18n('cancel'))), h(\"div\", {\n    className: \"uppy-DashboardContent-panelBody\"\n  }, uppy.getPlugin(activePickerPanel.id).render(state)));\n}\nexport default PickerPanelContent;","/* eslint-disable react/destructuring-assignment */\nimport { h } from 'preact';\nimport classNames from 'classnames';\nfunction EditorPanel(props) {\n  const file = props.files[props.fileCardFor];\n  const handleCancel = () => {\n    props.uppy.emit('file-editor:cancel', file);\n    props.closeFileEditor();\n  };\n  return h(\"div\", {\n    className: classNames('uppy-DashboardContent-panel', props.className),\n    role: \"tabpanel\",\n    \"data-uppy-panelType\": \"FileEditor\",\n    id: \"uppy-DashboardContent-panel--editor\"\n  }, h(\"div\", {\n    className: \"uppy-DashboardContent-bar\"\n  }, h(\"div\", {\n    className: \"uppy-DashboardContent-title\",\n    role: \"heading\",\n    \"aria-level\": \"1\"\n  }, props.i18nArray('editing', {\n    file: h(\"span\", {\n      className: \"uppy-DashboardContent-titleFile\"\n    }, file.meta ? file.meta.name : file.name)\n  })), h(\"button\", {\n    className: \"uppy-DashboardContent-back\",\n    type: \"button\",\n    onClick: handleCancel\n  }, props.i18n('cancel')), h(\"button\", {\n    className: \"uppy-DashboardContent-save\",\n    type: \"button\",\n    onClick: props.saveFileEditor\n  }, props.i18n('save'))), h(\"div\", {\n    className: \"uppy-DashboardContent-panelBody\"\n  }, props.editors.map(target => {\n    return props.uppy.getPlugin(target.id).render(props.state);\n  })));\n}\nexport default EditorPanel;","import { h } from 'preact';\nconst uploadStates = {\n  STATE_ERROR: 'error',\n  STATE_WAITING: 'waiting',\n  STATE_PREPROCESSING: 'preprocessing',\n  STATE_UPLOADING: 'uploading',\n  STATE_POSTPROCESSING: 'postprocessing',\n  STATE_COMPLETE: 'complete',\n  STATE_PAUSED: 'paused'\n};\nfunction getUploadingState(isAllErrored, isAllComplete, isAllPaused, files) {\n  if (files === void 0) {\n    files = {};\n  }\n  if (isAllErrored) {\n    return uploadStates.STATE_ERROR;\n  }\n  if (isAllComplete) {\n    return uploadStates.STATE_COMPLETE;\n  }\n  if (isAllPaused) {\n    return uploadStates.STATE_PAUSED;\n  }\n  let state = uploadStates.STATE_WAITING;\n  const fileIDs = Object.keys(files);\n  for (let i = 0; i < fileIDs.length; i++) {\n    const {\n      progress\n    } = files[fileIDs[i]];\n    // If ANY files are being uploaded right now, show the uploading state.\n    if (progress.uploadStarted && !progress.uploadComplete) {\n      return uploadStates.STATE_UPLOADING;\n    }\n    // If files are being preprocessed AND postprocessed at this time, we show the\n    // preprocess state. If any files are being uploaded we show uploading.\n    if (progress.preprocess && state !== uploadStates.STATE_UPLOADING) {\n      state = uploadStates.STATE_PREPROCESSING;\n    }\n    // If NO files are being preprocessed or uploaded right now, but some files are\n    // being postprocessed, show the postprocess state.\n    if (progress.postprocess && state !== uploadStates.STATE_UPLOADING && state !== uploadStates.STATE_PREPROCESSING) {\n      state = uploadStates.STATE_POSTPROCESSING;\n    }\n  }\n  return state;\n}\nfunction UploadStatus(_ref) {\n  let {\n    files,\n    i18n,\n    isAllComplete,\n    isAllErrored,\n    isAllPaused,\n    inProgressNotPausedFiles,\n    newFiles,\n    processingFiles\n  } = _ref;\n  const uploadingState = getUploadingState(isAllErrored, isAllComplete, isAllPaused, files);\n  switch (uploadingState) {\n    case 'uploading':\n      return i18n('uploadingXFiles', {\n        smart_count: inProgressNotPausedFiles.length\n      });\n    case 'preprocessing':\n    case 'postprocessing':\n      return i18n('processingXFiles', {\n        smart_count: processingFiles.length\n      });\n    case 'paused':\n      return i18n('uploadPaused');\n    case 'waiting':\n      return i18n('xFilesSelected', {\n        smart_count: newFiles.length\n      });\n    case 'complete':\n      return i18n('uploadComplete');\n    case 'error':\n      return i18n('error');\n    default:\n  }\n}\nfunction PanelTopBar(props) {\n  const {\n    i18n,\n    isAllComplete,\n    hideCancelButton,\n    maxNumberOfFiles,\n    toggleAddFilesPanel,\n    uppy\n  } = props;\n  let {\n    allowNewUpload\n  } = props;\n  // TODO maybe this should be done in ../Dashboard.jsx, then just pass that down as `allowNewUpload`\n  if (allowNewUpload && maxNumberOfFiles) {\n    // eslint-disable-next-line react/destructuring-assignment\n    allowNewUpload = props.totalFileCount < props.maxNumberOfFiles;\n  }\n  return h(\"div\", {\n    className: \"uppy-DashboardContent-bar\"\n  }, !isAllComplete && !hideCancelButton ? h(\"button\", {\n    className: \"uppy-DashboardContent-back\",\n    type: \"button\",\n    onClick: () => uppy.cancelAll()\n  }, i18n('cancel')) : h(\"div\", null), h(\"div\", {\n    className: \"uppy-DashboardContent-title\",\n    role: \"heading\",\n    \"aria-level\": \"1\"\n  }, h(UploadStatus, props)), allowNewUpload ? h(\"button\", {\n    className: \"uppy-DashboardContent-addMore\",\n    type: \"button\",\n    \"aria-label\": i18n('addMoreFiles'),\n    title: i18n('addMoreFiles'),\n    onClick: () => toggleAddFilesPanel(true)\n  }, h(\"svg\", {\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    className: \"uppy-c-icon\",\n    width: \"15\",\n    height: \"15\",\n    viewBox: \"0 0 15 15\"\n  }, h(\"path\", {\n    d: \"M8 6.5h6a.5.5 0 0 1 .5.5v.5a.5.5 0 0 1-.5.5H8v6a.5.5 0 0 1-.5.5H7a.5.5 0 0 1-.5-.5V8h-6a.5.5 0 0 1-.5-.5V7a.5.5 0 0 1 .5-.5h6v-6A.5.5 0 0 1 7 0h.5a.5.5 0 0 1 .5.5v6z\"\n  })), h(\"span\", {\n    className: \"uppy-DashboardContent-addMoreCaption\"\n  }, i18n('addMore'))) : h(\"div\", null));\n}\nexport default PanelTopBar;","import { h } from 'preact';\nexport default function RenderMetaFields(props) {\n  const {\n    computedMetaFields,\n    requiredMetaFields,\n    updateMeta,\n    form,\n    formState\n  } = props;\n  const fieldCSSClasses = {\n    text: 'uppy-u-reset uppy-c-textInput uppy-Dashboard-FileCard-input'\n  };\n  return computedMetaFields.map(field => {\n    const id = `uppy-Dashboard-FileCard-input-${field.id}`;\n    const required = requiredMetaFields.includes(field.id);\n    return h(\"fieldset\", {\n      key: field.id,\n      className: \"uppy-Dashboard-FileCard-fieldset\"\n    }, h(\"label\", {\n      className: \"uppy-Dashboard-FileCard-label\",\n      htmlFor: id\n    }, field.name), field.render !== undefined ? field.render({\n      value: formState[field.id],\n      onChange: newVal => updateMeta(newVal, field.id),\n      fieldCSSClasses,\n      required,\n      form: form.id\n    }, h) : h(\"input\", {\n      className: fieldCSSClasses.text,\n      id: id,\n      form: form.id,\n      type: field.type || 'text',\n      required: required,\n      value: formState[field.id],\n      placeholder: field.placeholder,\n      onInput: ev => updateMeta(ev.target.value, field.id),\n      \"data-uppy-super-focusable\": true\n    }));\n  });\n}","import { h } from 'preact';\nimport { useEffect, useState, useCallback } from 'preact/hooks';\nimport classNames from 'classnames';\nimport { nanoid } from 'nanoid/non-secure';\nimport getFileTypeIcon from \"../../utils/getFileTypeIcon.js\";\nimport ignoreEvent from \"../../utils/ignoreEvent.js\";\nimport FilePreview from \"../FilePreview.js\";\nimport RenderMetaFields from \"./RenderMetaFields.js\";\nexport default function FileCard(props) {\n  var _getMetaFields;\n  const {\n    files,\n    fileCardFor,\n    toggleFileCard,\n    saveFileCard,\n    metaFields,\n    requiredMetaFields,\n    openFileEditor,\n    i18n,\n    i18nArray,\n    className,\n    canEditFile\n  } = props;\n  const getMetaFields = () => {\n    return typeof metaFields === 'function' ? metaFields(files[fileCardFor]) : metaFields;\n  };\n  const file = files[fileCardFor];\n  const computedMetaFields = (_getMetaFields = getMetaFields()) != null ? _getMetaFields : [];\n  const showEditButton = canEditFile(file);\n  const storedMetaData = {};\n  computedMetaFields.forEach(field => {\n    var _file$meta$field$id;\n    storedMetaData[field.id] = (_file$meta$field$id = file.meta[field.id]) != null ? _file$meta$field$id : '';\n  });\n  const [formState, setFormState] = useState(storedMetaData);\n  const handleSave = useCallback(ev => {\n    ev.preventDefault();\n    saveFileCard(formState, fileCardFor);\n  }, [saveFileCard, formState, fileCardFor]);\n  const updateMeta = (newVal, name) => {\n    setFormState({\n      ...formState,\n      [name]: newVal\n    });\n  };\n  const handleCancel = () => {\n    toggleFileCard(false);\n  };\n  const [form] = useState(() => {\n    const formEl = document.createElement('form');\n    formEl.setAttribute('tabindex', '-1');\n    formEl.id = nanoid();\n    return formEl;\n  });\n  useEffect(() => {\n    document.body.appendChild(form);\n    form.addEventListener('submit', handleSave);\n    return () => {\n      form.removeEventListener('submit', handleSave);\n      document.body.removeChild(form);\n    };\n  }, [form, handleSave]);\n  return h(\"div\", {\n    className: classNames('uppy-Dashboard-FileCard', className),\n    \"data-uppy-panelType\": \"FileCard\",\n    onDragOver: ignoreEvent,\n    onDragLeave: ignoreEvent,\n    onDrop: ignoreEvent,\n    onPaste: ignoreEvent\n  }, h(\"div\", {\n    className: \"uppy-DashboardContent-bar\"\n  }, h(\"div\", {\n    className: \"uppy-DashboardContent-title\",\n    role: \"heading\",\n    \"aria-level\": \"1\"\n  }, i18nArray('editing', {\n    file: h(\"span\", {\n      className: \"uppy-DashboardContent-titleFile\"\n    }, file.meta ? file.meta.name : file.name)\n  })), h(\"button\", {\n    className: \"uppy-DashboardContent-back\",\n    type: \"button\",\n    form: form.id,\n    title: i18n('finishEditingFile'),\n    onClick: handleCancel\n  }, i18n('cancel'))), h(\"div\", {\n    className: \"uppy-Dashboard-FileCard-inner\"\n  }, h(\"div\", {\n    className: \"uppy-Dashboard-FileCard-preview\",\n    style: {\n      backgroundColor: getFileTypeIcon(file.type).color\n    }\n  }, h(FilePreview, {\n    file: file\n  }), showEditButton && h(\"button\", {\n    type: \"button\",\n    className: \"uppy-u-reset uppy-c-btn uppy-Dashboard-FileCard-edit\",\n    onClick: event => {\n      // When opening the image editor we want to save any meta fields changes.\n      // Otherwise it's confusing for the user to click save in the editor,\n      // but the changes here are discarded. This bypasses validation,\n      // but we are okay with that.\n      handleSave(event);\n      openFileEditor(file);\n    }\n  }, i18n('editImage'))), h(\"div\", {\n    className: \"uppy-Dashboard-FileCard-info\"\n  }, h(RenderMetaFields, {\n    computedMetaFields: computedMetaFields,\n    requiredMetaFields: requiredMetaFields,\n    updateMeta: updateMeta,\n    form: form,\n    formState: formState\n  })), h(\"div\", {\n    className: \"uppy-Dashboard-FileCard-actions\"\n  }, h(\"button\", {\n    className: \"uppy-u-reset uppy-c-btn uppy-c-btn-primary uppy-Dashboard-FileCard-actionsBtn\"\n    // If `form` attribute is supported, we want a submit button to trigger the form validation.\n    // Otherwise, fallback to a classic button with a onClick event handler.\n    ,\n    type: \"submit\",\n    form: form.id\n  }, i18n('saveChanges')), h(\"button\", {\n    className: \"uppy-u-reset uppy-c-btn uppy-c-btn-link uppy-Dashboard-FileCard-actionsBtn\",\n    type: \"button\",\n    onClick: handleCancel,\n    form: form.id\n  }, i18n('cancel')))));\n}","import { cloneElement, toChildArray } from 'preact';\nimport { useEffect, useState, useRef } from 'preact/hooks';\nimport classNames from 'classnames';\nconst transitionName = 'uppy-transition-slideDownUp';\nconst duration = 250;\n\n/**\n * Vertical slide transition.\n *\n * This can take a _single_ child component, which _must_ accept a `className` prop.\n *\n * Currently this is specific to the `uppy-transition-slideDownUp` transition,\n * but it should be simple to extend this for any type of single-element\n * transition by setting the CSS name and duration as props.\n */\nfunction Slide(_ref) {\n  let {\n    children\n  } = _ref;\n  const [cachedChildren, setCachedChildren] = useState(null);\n  const [className, setClassName] = useState('');\n  const enterTimeoutRef = useRef();\n  const leaveTimeoutRef = useRef();\n  const animationFrameRef = useRef();\n  const handleEnterTransition = () => {\n    setClassName(`${transitionName}-enter`);\n    cancelAnimationFrame(animationFrameRef.current);\n    clearTimeout(leaveTimeoutRef.current);\n    leaveTimeoutRef.current = undefined;\n    animationFrameRef.current = requestAnimationFrame(() => {\n      setClassName(`${transitionName}-enter ${transitionName}-enter-active`);\n      enterTimeoutRef.current = setTimeout(() => {\n        setClassName('');\n      }, duration);\n    });\n  };\n  const handleLeaveTransition = () => {\n    setClassName(`${transitionName}-leave`);\n    cancelAnimationFrame(animationFrameRef.current);\n    clearTimeout(enterTimeoutRef.current);\n    enterTimeoutRef.current = undefined;\n    animationFrameRef.current = requestAnimationFrame(() => {\n      setClassName(`${transitionName}-leave ${transitionName}-leave-active`);\n      leaveTimeoutRef.current = setTimeout(() => {\n        setCachedChildren(null);\n        setClassName('');\n      }, duration);\n    });\n  };\n  useEffect(() => {\n    const child = toChildArray(children)[0];\n    if (cachedChildren === child) return;\n    if (child && !cachedChildren) {\n      handleEnterTransition();\n    } else if (cachedChildren && !child && !leaveTimeoutRef.current) {\n      handleLeaveTransition();\n    }\n    setCachedChildren(child);\n  }, [children, cachedChildren]); // Dependency array to trigger effect on children change\n\n  useEffect(() => {\n    return () => {\n      clearTimeout(enterTimeoutRef.current);\n      clearTimeout(leaveTimeoutRef.current);\n      cancelAnimationFrame(animationFrameRef.current);\n    };\n  }, []); // Cleanup useEffect\n\n  if (!cachedChildren) return null;\n  return cloneElement(cachedChildren, {\n    className: classNames(className, cachedChildren.props.className)\n  });\n}\nexport default Slide;","function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n/* eslint-disable react/destructuring-assignment, react/jsx-props-no-spreading */\nimport { h } from 'preact';\nimport classNames from 'classnames';\nimport isDragDropSupported from '@uppy/utils/lib/isDragDropSupported';\nimport FileList from \"./FileList.js\";\nimport AddFiles from \"./AddFiles.js\";\nimport AddFilesPanel from \"./AddFilesPanel.js\";\nimport PickerPanelContent from \"./PickerPanelContent.js\";\nimport EditorPanel from \"./EditorPanel.js\";\nimport PanelTopBar from \"./PickerPanelTopBar.js\";\nimport FileCard from \"./FileCard/index.js\";\nimport Slide from \"./Slide.js\";\n\n// http://dev.edenspiekermann.com/2016/02/11/introducing-accessible-modal-dialog\n// https://github.com/ghosh/micromodal\n\nconst WIDTH_XL = 900;\nconst WIDTH_LG = 700;\nconst WIDTH_MD = 576;\nconst HEIGHT_MD = 330;\n// We might want to enable this in the future\n// const HEIGHT_LG = 400\n// const HEIGHT_XL = 460\n\nexport default function Dashboard(props) {\n  const isNoFiles = props.totalFileCount === 0;\n  const isSingleFile = props.totalFileCount === 1;\n  const isSizeMD = props.containerWidth > WIDTH_MD;\n  const isSizeHeightMD = props.containerHeight > HEIGHT_MD;\n  const dashboardClassName = classNames({\n    'uppy-Dashboard': true,\n    'uppy-Dashboard--isDisabled': props.disabled,\n    'uppy-Dashboard--animateOpenClose': props.animateOpenClose,\n    'uppy-Dashboard--isClosing': props.isClosing,\n    'uppy-Dashboard--isDraggingOver': props.isDraggingOver,\n    'uppy-Dashboard--modal': !props.inline,\n    'uppy-size--md': props.containerWidth > WIDTH_MD,\n    'uppy-size--lg': props.containerWidth > WIDTH_LG,\n    'uppy-size--xl': props.containerWidth > WIDTH_XL,\n    'uppy-size--height-md': props.containerHeight > HEIGHT_MD,\n    // We might want to enable this in the future\n    // 'uppy-size--height-lg': props.containerHeight > HEIGHT_LG,\n    // 'uppy-size--height-xl': props.containerHeight > HEIGHT_XL,\n    'uppy-Dashboard--isAddFilesPanelVisible': props.showAddFilesPanel,\n    'uppy-Dashboard--isInnerWrapVisible': props.areInsidesReadyToBeVisible,\n    // Only enable “centered single file” mode when Dashboard is tall enough\n    'uppy-Dashboard--singleFile': props.singleFileFullScreen && isSingleFile && isSizeHeightMD\n  });\n\n  // Important: keep these in sync with the percent width values in `src/components/FileItem/index.scss`.\n  let itemsPerRow = 1; // mobile\n  if (props.containerWidth > WIDTH_XL) {\n    itemsPerRow = 5;\n  } else if (props.containerWidth > WIDTH_LG) {\n    itemsPerRow = 4;\n  } else if (props.containerWidth > WIDTH_MD) {\n    itemsPerRow = 3;\n  }\n  const showFileList = props.showSelectedFiles && !isNoFiles;\n  const numberOfFilesForRecovery = props.recoveredState ? Object.keys(props.recoveredState.files).length : null;\n  const numberOfGhosts = props.files ? Object.keys(props.files).filter(fileID => props.files[fileID].isGhost).length : null;\n  const renderRestoredText = () => {\n    if (numberOfGhosts > 0) {\n      return props.i18n('recoveredXFiles', {\n        smart_count: numberOfGhosts\n      });\n    }\n    return props.i18n('recoveredAllFiles');\n  };\n  const dashboard = h(\"div\", {\n    className: dashboardClassName,\n    \"data-uppy-theme\": props.theme,\n    \"data-uppy-num-acquirers\": props.acquirers.length,\n    \"data-uppy-drag-drop-supported\": !props.disableLocalFiles && isDragDropSupported(),\n    \"aria-hidden\": props.inline ? 'false' : props.isHidden,\n    \"aria-disabled\": props.disabled,\n    \"aria-label\": !props.inline ? props.i18n('dashboardWindowTitle') : props.i18n('dashboardTitle'),\n    onPaste: props.handlePaste,\n    onDragOver: props.handleDragOver,\n    onDragLeave: props.handleDragLeave,\n    onDrop: props.handleDrop\n  }, h(\"div\", {\n    \"aria-hidden\": \"true\",\n    className: \"uppy-Dashboard-overlay\",\n    tabIndex: -1,\n    onClick: props.handleClickOutside\n  }), h(\"div\", {\n    className: \"uppy-Dashboard-inner\",\n    \"aria-modal\": !props.inline && 'true',\n    role: props.inline ? undefined : 'dialog',\n    style: {\n      width: props.inline && props.width ? props.width : '',\n      height: props.inline && props.height ? props.height : ''\n    }\n  }, !props.inline ? h(\"button\", {\n    className: \"uppy-u-reset uppy-Dashboard-close\",\n    type: \"button\",\n    \"aria-label\": props.i18n('closeModal'),\n    title: props.i18n('closeModal'),\n    onClick: props.closeModal\n  }, h(\"span\", {\n    \"aria-hidden\": \"true\"\n  }, \"\\xD7\")) : null, h(\"div\", {\n    className: \"uppy-Dashboard-innerWrap\"\n  }, h(\"div\", {\n    className: \"uppy-Dashboard-dropFilesHereHint\"\n  }, props.i18n('dropHint')), showFileList && h(PanelTopBar, props), numberOfFilesForRecovery && h(\"div\", {\n    className: \"uppy-Dashboard-serviceMsg\"\n  }, h(\"svg\", {\n    className: \"uppy-Dashboard-serviceMsg-icon\",\n    \"aria-hidden\": \"true\",\n    focusable: \"false\",\n    width: \"21\",\n    height: \"16\",\n    viewBox: \"0 0 24 19\"\n  }, h(\"g\", {\n    transform: \"translate(0 -1)\",\n    fill: \"none\",\n    fillRule: \"evenodd\"\n  }, h(\"path\", {\n    d: \"M12.857 1.43l10.234 17.056A1 1 0 0122.234 20H1.766a1 1 0 01-.857-1.514L11.143 1.429a1 1 0 011.714 0z\",\n    fill: \"#FFD300\"\n  }), h(\"path\", {\n    fill: \"#000\",\n    d: \"M11 6h2l-.3 8h-1.4z\"\n  }), h(\"circle\", {\n    fill: \"#000\",\n    cx: \"12\",\n    cy: \"17\",\n    r: \"1\"\n  }))), h(\"strong\", {\n    className: \"uppy-Dashboard-serviceMsg-title\"\n  }, props.i18n('sessionRestored')), h(\"div\", {\n    className: \"uppy-Dashboard-serviceMsg-text\"\n  }, renderRestoredText())), showFileList ? h(FileList, {\n    id: props.id,\n    error: props.error,\n    i18n: props.i18n,\n    uppy: props.uppy,\n    files: props.files,\n    acquirers: props.acquirers,\n    resumableUploads: props.resumableUploads,\n    hideRetryButton: props.hideRetryButton,\n    hidePauseResumeButton: props.hidePauseResumeButton,\n    hideCancelButton: props.hideCancelButton,\n    showLinkToFileUploadResult: props.showLinkToFileUploadResult,\n    showRemoveButtonAfterComplete: props.showRemoveButtonAfterComplete,\n    isWide: props.isWide,\n    metaFields: props.metaFields,\n    toggleFileCard: props.toggleFileCard,\n    handleRequestThumbnail: props.handleRequestThumbnail,\n    handleCancelThumbnail: props.handleCancelThumbnail,\n    recoveredState: props.recoveredState,\n    individualCancellation: props.individualCancellation,\n    openFileEditor: props.openFileEditor,\n    canEditFile: props.canEditFile,\n    toggleAddFilesPanel: props.toggleAddFilesPanel,\n    isSingleFile: isSingleFile,\n    itemsPerRow: itemsPerRow\n  })\n  // eslint-disable-next-line react/jsx-props-no-spreading\n  : h(AddFiles, _extends({}, props, {\n    isSizeMD: isSizeMD\n  })), h(Slide, null, props.showAddFilesPanel ? h(AddFilesPanel, _extends({\n    key: \"AddFiles\"\n  }, props, {\n    isSizeMD: isSizeMD\n  })) : null), h(Slide, null, props.fileCardFor ? h(FileCard, _extends({\n    key: \"FileCard\"\n  }, props)) : null), h(Slide, null, props.activePickerPanel ? h(PickerPanelContent, _extends({\n    key: \"Picker\"\n  }, props)) : null), h(Slide, null, props.showFileEditor ? h(EditorPanel, _extends({\n    key: \"Editor\"\n  }, props)) : null), h(\"div\", {\n    className: \"uppy-Dashboard-progressindicators\"\n  }, props.progressindicators.map(target => {\n    return props.uppy.getPlugin(target.id).render(props.state);\n  })))));\n  return dashboard;\n}","export default {\n  strings: {\n    // When `inline: false`, used as the screen reader label for the button that closes the modal.\n    closeModal: 'Close Modal',\n    // Used as the screen reader label for the plus (+) button that shows the “Add more files” screen\n    addMoreFiles: 'Add more files',\n    addingMoreFiles: 'Adding more files',\n    // Used as the header for import panels, e.g., “Import from Google Drive”.\n    importFrom: 'Import from %{name}',\n    // When `inline: false`, used as the screen reader label for the dashboard modal.\n    dashboardWindowTitle: 'Uppy Dashboard Window (Press escape to close)',\n    // When `inline: true`, used as the screen reader label for the dashboard area.\n    dashboardTitle: 'Uppy Dashboard',\n    // Shown in the Informer when a link to a file was copied to the clipboard.\n    copyLinkToClipboardSuccess: 'Link copied to clipboard.',\n    // Used when a link cannot be copied automatically — the user has to select the text from the\n    // input element below this string.\n    copyLinkToClipboardFallback: 'Copy the URL below',\n    // Used as the hover title and screen reader label for buttons that copy a file link.\n    copyLink: 'Copy link',\n    back: 'Back',\n    // Used as the screen reader label for buttons that remove a file.\n    removeFile: 'Remove file',\n    // Used as the screen reader label for buttons that open the metadata editor panel for a file.\n    editFile: 'Edit file',\n    editImage: 'Edit image',\n    // Shown in the panel header for the metadata editor. Rendered as “Editing image.png”.\n    editing: 'Editing %{file}',\n    // Shown on the main upload screen when an upload error occurs\n    error: 'Error',\n    // Used as the screen reader label for the button that saves metadata edits and returns to the\n    // file list view.\n    finishEditingFile: 'Finish editing file',\n    saveChanges: 'Save changes',\n    // Used as the label for the tab button that opens the system file selection dialog.\n    myDevice: 'My Device',\n    dropHint: 'Drop your files here',\n    // Used as the hover text and screen reader label for file progress indicators when\n    // they have been fully uploaded.\n    uploadComplete: 'Upload complete',\n    uploadPaused: 'Upload paused',\n    // Used as the hover text and screen reader label for the buttons to resume paused uploads.\n    resumeUpload: 'Resume upload',\n    // Used as the hover text and screen reader label for the buttons to pause uploads.\n    pauseUpload: 'Pause upload',\n    // Used as the hover text and screen reader label for the buttons to retry failed uploads.\n    retryUpload: 'Retry upload',\n    // Used as the hover text and screen reader label for the buttons to cancel uploads.\n    cancelUpload: 'Cancel upload',\n    // Used in a title, how many files are currently selected\n    xFilesSelected: {\n      0: '%{smart_count} file selected',\n      1: '%{smart_count} files selected'\n    },\n    uploadingXFiles: {\n      0: 'Uploading %{smart_count} file',\n      1: 'Uploading %{smart_count} files'\n    },\n    processingXFiles: {\n      0: 'Processing %{smart_count} file',\n      1: 'Processing %{smart_count} files'\n    },\n    // The \"powered by Uppy\" link at the bottom of the Dashboard.\n    poweredBy: 'Powered by %{uppy}',\n    addMore: 'Add more',\n    editFileWithFilename: 'Edit file %{file}',\n    save: 'Save',\n    cancel: 'Cancel',\n    dropPasteFiles: 'Drop files here or %{browseFiles}',\n    dropPasteFolders: 'Drop files here or %{browseFolders}',\n    dropPasteBoth: 'Drop files here, %{browseFiles} or %{browseFolders}',\n    dropPasteImportFiles: 'Drop files here, %{browseFiles} or import from:',\n    dropPasteImportFolders: 'Drop files here, %{browseFolders} or import from:',\n    dropPasteImportBoth: 'Drop files here, %{browseFiles}, %{browseFolders} or import from:',\n    importFiles: 'Import files from:',\n    browseFiles: 'browse files',\n    browseFolders: 'browse folders',\n    recoveredXFiles: {\n      0: 'We could not fully recover 1 file. Please re-select it and resume the upload.',\n      1: 'We could not fully recover %{smart_count} files. Please re-select them and resume the upload.'\n    },\n    recoveredAllFiles: 'We restored all files. You can now resume the upload.',\n    sessionRestored: 'Session restored',\n    reSelect: 'Re-select',\n    missingRequiredMetaFields: {\n      0: 'Missing required meta field: %{fields}.',\n      1: 'Missing required meta fields: %{fields}.'\n    },\n    // Used for native device camera buttons on mobile\n    takePictureBtn: 'Take Picture',\n    recordVideoBtn: 'Record Video'\n  }\n};","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\nimport { UIPlugin } from '@uppy/core';\nimport StatusBar from '@uppy/status-bar';\nimport Informer from '@uppy/informer';\nimport ThumbnailGenerator from '@uppy/thumbnail-generator';\nimport findAllDOMElements from '@uppy/utils/lib/findAllDOMElements';\nimport toArray from '@uppy/utils/lib/toArray';\nimport getDroppedFiles from '@uppy/utils/lib/getDroppedFiles';\nimport { defaultPickerIcon } from '@uppy/provider-views';\nimport { nanoid } from 'nanoid/non-secure';\nimport memoizeOne from 'memoize-one';\nimport * as trapFocus from \"./utils/trapFocus.js\";\nimport createSuperFocus from \"./utils/createSuperFocus.js\";\nimport DashboardUI from \"./components/Dashboard.js\";\n\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"3.9.1\"\n};\nimport locale from \"./locale.js\";\nconst memoize = memoizeOne.default || memoizeOne;\nconst TAB_KEY = 9;\nconst ESC_KEY = 27;\nfunction createPromise() {\n  const o = {};\n  o.promise = new Promise((resolve, reject) => {\n    o.resolve = resolve;\n    o.reject = reject;\n  });\n  return o;\n}\n// set default options, must be kept in sync with packages/@uppy/react/src/DashboardModal.js\nconst defaultOptions = {\n  target: 'body',\n  metaFields: [],\n  inline: false,\n  width: 750,\n  height: 550,\n  thumbnailWidth: 280,\n  thumbnailType: 'image/jpeg',\n  waitForThumbnailsBeforeUpload: false,\n  defaultPickerIcon,\n  showLinkToFileUploadResult: false,\n  showProgressDetails: false,\n  hideUploadButton: false,\n  hideCancelButton: false,\n  hideRetryButton: false,\n  hidePauseResumeButton: false,\n  hideProgressAfterFinish: false,\n  note: null,\n  closeModalOnClickOutside: false,\n  closeAfterFinish: false,\n  singleFileFullScreen: true,\n  disableStatusBar: false,\n  disableInformer: false,\n  disableThumbnailGenerator: false,\n  disablePageScrollWhenModalOpen: true,\n  animateOpenClose: true,\n  fileManagerSelectionType: 'files',\n  proudlyDisplayPoweredByUppy: true,\n  showSelectedFiles: true,\n  showRemoveButtonAfterComplete: false,\n  browserBackButtonClose: false,\n  showNativePhotoCameraButton: false,\n  showNativeVideoCameraButton: false,\n  theme: 'light',\n  autoOpen: null,\n  autoOpenFileEditor: false,\n  disabled: false,\n  disableLocalFiles: false,\n  // Dynamic default options, they have to be defined in the constructor (because\n  // they require access to the `this` keyword), but we still want them to\n  // appear in the default options so TS knows they'll be defined.\n  doneButtonHandler: undefined,\n  onRequestCloseModal: null\n};\n\n/**\n * Dashboard UI with previews, metadata editing, tabs for various services and more\n */\nvar _disabledNodes = /*#__PURE__*/_classPrivateFieldLooseKey(\"disabledNodes\");\nvar _generateLargeThumbnailIfSingleFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"generateLargeThumbnailIfSingleFile\");\nvar _openFileEditorWhenFilesAdded = /*#__PURE__*/_classPrivateFieldLooseKey(\"openFileEditorWhenFilesAdded\");\nvar _attachRenderFunctionToTarget = /*#__PURE__*/_classPrivateFieldLooseKey(\"attachRenderFunctionToTarget\");\nvar _isTargetSupported = /*#__PURE__*/_classPrivateFieldLooseKey(\"isTargetSupported\");\nvar _getAcquirers = /*#__PURE__*/_classPrivateFieldLooseKey(\"getAcquirers\");\nvar _getProgressIndicators = /*#__PURE__*/_classPrivateFieldLooseKey(\"getProgressIndicators\");\nvar _getEditors = /*#__PURE__*/_classPrivateFieldLooseKey(\"getEditors\");\nvar _addSpecifiedPluginsFromOptions = /*#__PURE__*/_classPrivateFieldLooseKey(\"addSpecifiedPluginsFromOptions\");\nvar _autoDiscoverPlugins = /*#__PURE__*/_classPrivateFieldLooseKey(\"autoDiscoverPlugins\");\nvar _addSupportedPluginIfNoTarget = /*#__PURE__*/_classPrivateFieldLooseKey(\"addSupportedPluginIfNoTarget\");\nexport default class Dashboard extends UIPlugin {\n  // Timeouts\n\n  constructor(uppy, _opts) {\n    var _this$opts4, _this$opts4$onRequest;\n    // support for the legacy `autoOpenFileEditor` option,\n    // TODO: we can remove this code when we update the Uppy major version\n    let autoOpen;\n    if (!_opts) {\n      autoOpen = null;\n    } else if (_opts.autoOpen === undefined) {\n      autoOpen = _opts.autoOpenFileEditor ? 'imageEditor' : null;\n    } else {\n      autoOpen = _opts.autoOpen;\n    }\n    super(uppy, {\n      ...defaultOptions,\n      ..._opts,\n      autoOpen\n    });\n    Object.defineProperty(this, _disabledNodes, {\n      writable: true,\n      value: void 0\n    });\n    this.modalName = `uppy-Dashboard-${nanoid()}`;\n    this.superFocus = createSuperFocus();\n    this.ifFocusedOnUppyRecently = false;\n    this.removeTarget = plugin => {\n      const pluginState = this.getPluginState();\n      // filter out the one we want to remove\n      const newTargets = pluginState.targets.filter(target => target.id !== plugin.id);\n      this.setPluginState({\n        targets: newTargets\n      });\n    };\n    this.addTarget = plugin => {\n      const callerPluginId = plugin.id || plugin.constructor.name;\n      const callerPluginName = plugin.title || callerPluginId;\n      const callerPluginType = plugin.type;\n      if (callerPluginType !== 'acquirer' && callerPluginType !== 'progressindicator' && callerPluginType !== 'editor') {\n        const msg = 'Dashboard: can only be targeted by plugins of types: acquirer, progressindicator, editor';\n        this.uppy.log(msg, 'error');\n        return null;\n      }\n      const target = {\n        id: callerPluginId,\n        name: callerPluginName,\n        type: callerPluginType\n      };\n      const state = this.getPluginState();\n      const newTargets = state.targets.slice();\n      newTargets.push(target);\n      this.setPluginState({\n        targets: newTargets\n      });\n      return this.el;\n    };\n    this.hideAllPanels = () => {\n      var _state$activePickerPa;\n      const state = this.getPluginState();\n      const update = {\n        activePickerPanel: undefined,\n        showAddFilesPanel: false,\n        activeOverlayType: null,\n        fileCardFor: null,\n        showFileEditor: false\n      };\n      if (state.activePickerPanel === update.activePickerPanel && state.showAddFilesPanel === update.showAddFilesPanel && state.showFileEditor === update.showFileEditor && state.activeOverlayType === update.activeOverlayType) {\n        // avoid doing a state update if nothing changed\n        return;\n      }\n      this.setPluginState(update);\n      this.uppy.emit('dashboard:close-panel', (_state$activePickerPa = state.activePickerPanel) == null ? void 0 : _state$activePickerPa.id);\n    };\n    this.showPanel = id => {\n      const {\n        targets\n      } = this.getPluginState();\n      const activePickerPanel = targets.find(target => {\n        return target.type === 'acquirer' && target.id === id;\n      });\n      this.setPluginState({\n        activePickerPanel,\n        activeOverlayType: 'PickerPanel'\n      });\n      this.uppy.emit('dashboard:show-panel', id);\n    };\n    this.canEditFile = file => {\n      const {\n        targets\n      } = this.getPluginState();\n      const editors = _classPrivateFieldLooseBase(this, _getEditors)[_getEditors](targets);\n      return editors.some(target => this.uppy.getPlugin(target.id).canEditFile(file));\n    };\n    this.openFileEditor = file => {\n      const {\n        targets\n      } = this.getPluginState();\n      const editors = _classPrivateFieldLooseBase(this, _getEditors)[_getEditors](targets);\n      this.setPluginState({\n        showFileEditor: true,\n        fileCardFor: file.id || null,\n        activeOverlayType: 'FileEditor'\n      });\n      editors.forEach(editor => {\n        ;\n        this.uppy.getPlugin(editor.id).selectFile(file);\n      });\n    };\n    this.closeFileEditor = () => {\n      const {\n        metaFields\n      } = this.getPluginState();\n      const isMetaEditorEnabled = metaFields && metaFields.length > 0;\n      if (isMetaEditorEnabled) {\n        this.setPluginState({\n          showFileEditor: false,\n          activeOverlayType: 'FileCard'\n        });\n      } else {\n        this.setPluginState({\n          showFileEditor: false,\n          fileCardFor: null,\n          activeOverlayType: 'AddFiles'\n        });\n      }\n    };\n    this.saveFileEditor = () => {\n      const {\n        targets\n      } = this.getPluginState();\n      const editors = _classPrivateFieldLooseBase(this, _getEditors)[_getEditors](targets);\n      editors.forEach(editor => {\n        ;\n        this.uppy.getPlugin(editor.id).save();\n      });\n      this.closeFileEditor();\n    };\n    this.openModal = () => {\n      const {\n        promise,\n        resolve\n      } = createPromise();\n      // save scroll position\n      this.savedScrollPosition = window.pageYOffset;\n      // save active element, so we can restore focus when modal is closed\n      this.savedActiveElement = document.activeElement;\n      if (this.opts.disablePageScrollWhenModalOpen) {\n        document.body.classList.add('uppy-Dashboard-isFixed');\n      }\n      if (this.opts.animateOpenClose && this.getPluginState().isClosing) {\n        const handler = () => {\n          this.setPluginState({\n            isHidden: false\n          });\n          this.el.removeEventListener('animationend', handler, false);\n          resolve();\n        };\n        this.el.addEventListener('animationend', handler, false);\n      } else {\n        this.setPluginState({\n          isHidden: false\n        });\n        resolve();\n      }\n      if (this.opts.browserBackButtonClose) {\n        this.updateBrowserHistory();\n      }\n\n      // handle ESC and TAB keys in modal dialog\n      document.addEventListener('keydown', this.handleKeyDownInModal);\n      this.uppy.emit('dashboard:modal-open');\n      return promise;\n    };\n    this.closeModal = opts => {\n      var _opts$manualClose;\n      // Whether the modal is being closed by the user (`true`) or by other means (e.g. browser back button)\n      const manualClose = (_opts$manualClose = opts == null ? void 0 : opts.manualClose) != null ? _opts$manualClose : true;\n      const {\n        isHidden,\n        isClosing\n      } = this.getPluginState();\n      if (isHidden || isClosing) {\n        // short-circuit if animation is ongoing\n        return undefined;\n      }\n      const {\n        promise,\n        resolve\n      } = createPromise();\n      if (this.opts.disablePageScrollWhenModalOpen) {\n        document.body.classList.remove('uppy-Dashboard-isFixed');\n      }\n      if (this.opts.animateOpenClose) {\n        this.setPluginState({\n          isClosing: true\n        });\n        const handler = () => {\n          this.setPluginState({\n            isHidden: true,\n            isClosing: false\n          });\n          this.superFocus.cancel();\n          this.savedActiveElement.focus();\n          this.el.removeEventListener('animationend', handler, false);\n          resolve();\n        };\n        this.el.addEventListener('animationend', handler, false);\n      } else {\n        this.setPluginState({\n          isHidden: true\n        });\n        this.superFocus.cancel();\n        this.savedActiveElement.focus();\n        resolve();\n      }\n\n      // handle ESC and TAB keys in modal dialog\n      document.removeEventListener('keydown', this.handleKeyDownInModal);\n      if (manualClose) {\n        if (this.opts.browserBackButtonClose) {\n          var _history$state;\n          // Make sure that the latest entry in the history state is our modal name\n          // eslint-disable-next-line no-restricted-globals\n          if ((_history$state = history.state) != null && _history$state[this.modalName]) {\n            // Go back in history to clear out the entry we created (ultimately closing the modal)\n            // eslint-disable-next-line no-restricted-globals\n            history.back();\n          }\n        }\n      }\n      this.uppy.emit('dashboard:modal-closed');\n      return promise;\n    };\n    this.isModalOpen = () => {\n      return !this.getPluginState().isHidden || false;\n    };\n    this.requestCloseModal = () => {\n      if (this.opts.onRequestCloseModal) {\n        return this.opts.onRequestCloseModal();\n      }\n      return this.closeModal();\n    };\n    this.setDarkModeCapability = isDarkModeOn => {\n      const {\n        capabilities\n      } = this.uppy.getState();\n      this.uppy.setState({\n        capabilities: {\n          ...capabilities,\n          darkMode: isDarkModeOn\n        }\n      });\n    };\n    this.handleSystemDarkModeChange = event => {\n      const isDarkModeOnNow = event.matches;\n      this.uppy.log(`[Dashboard] Dark mode is ${isDarkModeOnNow ? 'on' : 'off'}`);\n      this.setDarkModeCapability(isDarkModeOnNow);\n    };\n    this.toggleFileCard = (show, fileID) => {\n      const file = this.uppy.getFile(fileID);\n      if (show) {\n        this.uppy.emit('dashboard:file-edit-start', file);\n      } else {\n        this.uppy.emit('dashboard:file-edit-complete', file);\n      }\n      this.setPluginState({\n        fileCardFor: show ? fileID : null,\n        activeOverlayType: show ? 'FileCard' : null\n      });\n    };\n    this.toggleAddFilesPanel = show => {\n      this.setPluginState({\n        showAddFilesPanel: show,\n        activeOverlayType: show ? 'AddFiles' : null\n      });\n    };\n    this.addFiles = files => {\n      const descriptors = files.map(file => ({\n        source: this.id,\n        name: file.name,\n        type: file.type,\n        data: file,\n        meta: {\n          // path of the file relative to the ancestor directory the user selected.\n          // e.g. 'docs/Old Prague/airbnb.pdf'\n          relativePath: file.relativePath || file.webkitRelativePath || null\n        }\n      }));\n      try {\n        this.uppy.addFiles(descriptors);\n      } catch (err) {\n        this.uppy.log(err);\n      }\n    };\n    // ___Why make insides of Dashboard invisible until first ResizeObserver event is emitted?\n    //    ResizeOberserver doesn't emit the first resize event fast enough, users can see the jump from one .uppy-size-- to\n    //    another (e.g. in Safari)\n    // ___Why not apply visibility property to .uppy-Dashboard-inner?\n    //    Because ideally, acc to specs, ResizeObserver should see invisible elements as of width 0. So even though applying\n    //    invisibility to .uppy-Dashboard-inner works now, it may not work in the future.\n    this.startListeningToResize = () => {\n      // Watch for Dashboard container (`.uppy-Dashboard-inner`) resize\n      // and update containerWidth/containerHeight in plugin state accordingly.\n      // Emits first event on initialization.\n      this.resizeObserver = new ResizeObserver(entries => {\n        const uppyDashboardInnerEl = entries[0];\n        const {\n          width,\n          height\n        } = uppyDashboardInnerEl.contentRect;\n        this.setPluginState({\n          containerWidth: width,\n          containerHeight: height,\n          areInsidesReadyToBeVisible: true\n        });\n      });\n      this.resizeObserver.observe(this.el.querySelector('.uppy-Dashboard-inner'));\n\n      // If ResizeObserver fails to emit an event telling us what size to use - default to the mobile view\n      this.makeDashboardInsidesVisibleAnywayTimeout = setTimeout(() => {\n        const pluginState = this.getPluginState();\n        const isModalAndClosed = !this.opts.inline && pluginState.isHidden;\n        if (\n        // We might want to enable this in the future\n\n        // if ResizeObserver hasn't yet fired,\n        !pluginState.areInsidesReadyToBeVisible &&\n        // and it's not due to the modal being closed\n        !isModalAndClosed) {\n          this.uppy.log('[Dashboard] resize event didn’t fire on time: defaulted to mobile layout', 'warning');\n          this.setPluginState({\n            areInsidesReadyToBeVisible: true\n          });\n        }\n      }, 1000);\n    };\n    this.stopListeningToResize = () => {\n      this.resizeObserver.disconnect();\n      clearTimeout(this.makeDashboardInsidesVisibleAnywayTimeout);\n    };\n    // Records whether we have been interacting with uppy right now,\n    // which is then used to determine whether state updates should trigger a refocusing.\n    this.recordIfFocusedOnUppyRecently = event => {\n      if (this.el.contains(event.target)) {\n        this.ifFocusedOnUppyRecently = true;\n      } else {\n        this.ifFocusedOnUppyRecently = false;\n        // ___Why run this.superFocus.cancel here when it already runs in superFocusOnEachUpdate?\n        //    Because superFocus is debounced, when we move from Uppy to some other element on the page,\n        //    previously run superFocus sometimes hits and moves focus back to Uppy.\n        this.superFocus.cancel();\n      }\n    };\n    this.disableInteractiveElements = disable => {\n      var _classPrivateFieldLoo;\n      const NODES_TO_DISABLE = ['a[href]', 'input:not([disabled])', 'select:not([disabled])', 'textarea:not([disabled])', 'button:not([disabled])', '[role=\"button\"]:not([disabled])'];\n      const nodesToDisable = (_classPrivateFieldLoo = _classPrivateFieldLooseBase(this, _disabledNodes)[_disabledNodes]) != null ? _classPrivateFieldLoo : toArray(this.el.querySelectorAll(NODES_TO_DISABLE)).filter(node => !node.classList.contains('uppy-Dashboard-close'));\n      for (const node of nodesToDisable) {\n        // Links can’t have `disabled` attr, so we use `aria-disabled` for a11y\n        if (node.tagName === 'A') {\n          node.setAttribute('aria-disabled', disable);\n        } else {\n          node.disabled = disable;\n        }\n      }\n      if (disable) {\n        _classPrivateFieldLooseBase(this, _disabledNodes)[_disabledNodes] = nodesToDisable;\n      } else {\n        _classPrivateFieldLooseBase(this, _disabledNodes)[_disabledNodes] = null;\n      }\n      this.dashboardIsDisabled = disable;\n    };\n    this.updateBrowserHistory = () => {\n      var _history$state2;\n      // Ensure history state does not already contain our modal name to avoid double-pushing\n      // eslint-disable-next-line no-restricted-globals\n      if (!((_history$state2 = history.state) != null && _history$state2[this.modalName])) {\n        // Push to history so that the page is not lost on browser back button press\n        // eslint-disable-next-line no-restricted-globals\n        history.pushState({\n          // eslint-disable-next-line no-restricted-globals\n          ...history.state,\n          [this.modalName]: true\n        }, '');\n      }\n\n      // Listen for back button presses\n      window.addEventListener('popstate', this.handlePopState, false);\n    };\n    this.handlePopState = event => {\n      var _event$state;\n      // Close the modal if the history state no longer contains our modal name\n      if (this.isModalOpen() && (!event.state || !event.state[this.modalName])) {\n        this.closeModal({\n          manualClose: false\n        });\n      }\n\n      // When the browser back button is pressed and uppy is now the latest entry\n      // in the history but the modal is closed, fix the history by removing the\n      // uppy history entry.\n      // This occurs when another entry is added into the history state while the\n      // modal is open, and then the modal gets manually closed.\n      // Solves PR #575 (https://github.com/transloadit/uppy/pull/575)\n      if (!this.isModalOpen() && (_event$state = event.state) != null && _event$state[this.modalName]) {\n        // eslint-disable-next-line no-restricted-globals\n        history.back();\n      }\n    };\n    this.handleKeyDownInModal = event => {\n      // close modal on esc key press\n      if (event.keyCode === ESC_KEY) this.requestCloseModal();\n      // trap focus on tab key press\n      if (event.keyCode === TAB_KEY) trapFocus.forModal(event, this.getPluginState().activeOverlayType, this.el);\n    };\n    this.handleClickOutside = () => {\n      if (this.opts.closeModalOnClickOutside) this.requestCloseModal();\n    };\n    this.handlePaste = event => {\n      // Let any acquirer plugin (Url/Webcam/etc.) handle pastes to the root\n      this.uppy.iteratePlugins(plugin => {\n        if (plugin.type === 'acquirer') {\n          // Every Plugin with .type acquirer can define handleRootPaste(event)\n          ;\n          plugin.handleRootPaste == null || plugin.handleRootPaste(event);\n        }\n      });\n\n      // Add all dropped files\n      const files = toArray(event.clipboardData.files);\n      if (files.length > 0) {\n        this.uppy.log('[Dashboard] Files pasted');\n        this.addFiles(files);\n      }\n    };\n    this.handleInputChange = event => {\n      event.preventDefault();\n      const files = toArray(event.target.files);\n      if (files.length > 0) {\n        this.uppy.log('[Dashboard] Files selected through input');\n        this.addFiles(files);\n      }\n    };\n    this.handleDragOver = event => {\n      var _this$opts$onDragOver, _this$opts;\n      event.preventDefault();\n      event.stopPropagation();\n\n      // Check if some plugin can handle the datatransfer without files —\n      // for instance, the Url plugin can import a url\n      const canSomePluginHandleRootDrop = () => {\n        let somePluginCanHandleRootDrop = true;\n        this.uppy.iteratePlugins(plugin => {\n          if (plugin.canHandleRootDrop != null && plugin.canHandleRootDrop(event)) {\n            somePluginCanHandleRootDrop = true;\n          }\n        });\n        return somePluginCanHandleRootDrop;\n      };\n\n      // Check if the \"type\" of the datatransfer object includes files\n      const doesEventHaveFiles = () => {\n        const {\n          types\n        } = event.dataTransfer;\n        return types.some(type => type === 'Files');\n      };\n\n      // Deny drop, if no plugins can handle datatransfer, there are no files,\n      // or when opts.disabled is set, or new uploads are not allowed\n      const somePluginCanHandleRootDrop = canSomePluginHandleRootDrop();\n      const hasFiles = doesEventHaveFiles();\n      if (!somePluginCanHandleRootDrop && !hasFiles || this.opts.disabled ||\n      // opts.disableLocalFiles should only be taken into account if no plugins\n      // can handle the datatransfer\n      this.opts.disableLocalFiles && (hasFiles || !somePluginCanHandleRootDrop) || !this.uppy.getState().allowNewUpload) {\n        event.dataTransfer.dropEffect = 'none'; // eslint-disable-line no-param-reassign\n        clearTimeout(this.removeDragOverClassTimeout);\n        return;\n      }\n\n      // Add a small (+) icon on drop\n      // (and prevent browsers from interpreting this as files being _moved_ into the\n      // browser, https://github.com/transloadit/uppy/issues/1978).\n      event.dataTransfer.dropEffect = 'copy'; // eslint-disable-line no-param-reassign\n\n      clearTimeout(this.removeDragOverClassTimeout);\n      this.setPluginState({\n        isDraggingOver: true\n      });\n      (_this$opts$onDragOver = (_this$opts = this.opts).onDragOver) == null || _this$opts$onDragOver.call(_this$opts, event);\n    };\n    this.handleDragLeave = event => {\n      var _this$opts$onDragLeav, _this$opts2;\n      event.preventDefault();\n      event.stopPropagation();\n      clearTimeout(this.removeDragOverClassTimeout);\n      // Timeout against flickering, this solution is taken from drag-drop library.\n      // Solution with 'pointer-events: none' didn't work across browsers.\n      this.removeDragOverClassTimeout = setTimeout(() => {\n        this.setPluginState({\n          isDraggingOver: false\n        });\n      }, 50);\n      (_this$opts$onDragLeav = (_this$opts2 = this.opts).onDragLeave) == null || _this$opts$onDragLeav.call(_this$opts2, event);\n    };\n    this.handleDrop = async event => {\n      var _this$opts$onDrop, _this$opts3;\n      event.preventDefault();\n      event.stopPropagation();\n      clearTimeout(this.removeDragOverClassTimeout);\n      this.setPluginState({\n        isDraggingOver: false\n      });\n\n      // Let any acquirer plugin (Url/Webcam/etc.) handle drops to the root\n      this.uppy.iteratePlugins(plugin => {\n        if (plugin.type === 'acquirer') {\n          // Every Plugin with .type acquirer can define handleRootDrop(event)\n          ;\n          plugin.handleRootDrop == null || plugin.handleRootDrop(event);\n        }\n      });\n\n      // Add all dropped files\n      let executedDropErrorOnce = false;\n      const logDropError = error => {\n        this.uppy.log(error, 'error');\n\n        // In practice all drop errors are most likely the same,\n        // so let's just show one to avoid overwhelming the user\n        if (!executedDropErrorOnce) {\n          this.uppy.info(error.message, 'error');\n          executedDropErrorOnce = true;\n        }\n      };\n      this.uppy.log('[Dashboard] Processing dropped files');\n\n      // Add all dropped files\n      const files = await getDroppedFiles(event.dataTransfer, {\n        logDropError\n      });\n      if (files.length > 0) {\n        this.uppy.log('[Dashboard] Files dropped');\n        this.addFiles(files);\n      }\n      (_this$opts$onDrop = (_this$opts3 = this.opts).onDrop) == null || _this$opts$onDrop.call(_this$opts3, event);\n    };\n    this.handleRequestThumbnail = file => {\n      if (!this.opts.waitForThumbnailsBeforeUpload) {\n        this.uppy.emit('thumbnail:request', file);\n      }\n    };\n    /**\n     * We cancel thumbnail requests when a file item component unmounts to avoid\n     * clogging up the queue when the user scrolls past many elements.\n     */\n    this.handleCancelThumbnail = file => {\n      if (!this.opts.waitForThumbnailsBeforeUpload) {\n        this.uppy.emit('thumbnail:cancel', file);\n      }\n    };\n    this.handleKeyDownInInline = event => {\n      // Trap focus on tab key press.\n      if (event.keyCode === TAB_KEY) trapFocus.forInline(event, this.getPluginState().activeOverlayType, this.el);\n    };\n    // ___Why do we listen to the 'paste' event on a document instead of onPaste={props.handlePaste} prop,\n    //    or this.el.addEventListener('paste')?\n    //    Because (at least) Chrome doesn't handle paste if focus is on some button, e.g. 'My Device'.\n    //    => Therefore, the best option is to listen to all 'paste' events, and only react to them when we are focused on our\n    //       particular Uppy instance.\n    // ___Why do we still need onPaste={props.handlePaste} for the DashboardUi?\n    //    Because if we click on the 'Drop files here' caption e.g., `document.activeElement` will be 'body'. Which means our\n    //    standard determination of whether we're pasting into our Uppy instance won't work.\n    //    => Therefore, we need a traditional onPaste={props.handlePaste} handler too.\n    this.handlePasteOnBody = event => {\n      const isFocusInOverlay = this.el.contains(document.activeElement);\n      if (isFocusInOverlay) {\n        this.handlePaste(event);\n      }\n    };\n    this.handleComplete = _ref => {\n      let {\n        failed\n      } = _ref;\n      if (this.opts.closeAfterFinish && !(failed != null && failed.length)) {\n        // All uploads are done\n        this.requestCloseModal();\n      }\n    };\n    this.handleCancelRestore = () => {\n      this.uppy.emit('restore-canceled');\n    };\n    Object.defineProperty(this, _generateLargeThumbnailIfSingleFile, {\n      writable: true,\n      value: () => {\n        if (this.opts.disableThumbnailGenerator) {\n          return;\n        }\n        const LARGE_THUMBNAIL = 600;\n        const files = this.uppy.getFiles();\n        if (files.length === 1) {\n          const thumbnailGenerator = this.uppy.getPlugin(`${this.id}:ThumbnailGenerator`);\n          thumbnailGenerator == null || thumbnailGenerator.setOptions({\n            thumbnailWidth: LARGE_THUMBNAIL\n          });\n          const fileForThumbnail = {\n            ...files[0],\n            preview: undefined\n          };\n          thumbnailGenerator == null || thumbnailGenerator.requestThumbnail(fileForThumbnail).then(() => {\n            thumbnailGenerator == null || thumbnailGenerator.setOptions({\n              thumbnailWidth: this.opts.thumbnailWidth\n            });\n          });\n        }\n      }\n    });\n    Object.defineProperty(this, _openFileEditorWhenFilesAdded, {\n      writable: true,\n      value: files => {\n        const firstFile = files[0];\n        const {\n          metaFields\n        } = this.getPluginState();\n        const isMetaEditorEnabled = metaFields && metaFields.length > 0;\n        const isImageEditorEnabled = this.canEditFile(firstFile);\n        if (isMetaEditorEnabled && this.opts.autoOpen === 'metaEditor') {\n          this.toggleFileCard(true, firstFile.id);\n        } else if (isImageEditorEnabled && this.opts.autoOpen === 'imageEditor') {\n          this.openFileEditor(firstFile);\n        }\n      }\n    });\n    this.initEvents = () => {\n      // Modal open button\n      if (this.opts.trigger && !this.opts.inline) {\n        const showModalTrigger = findAllDOMElements(this.opts.trigger);\n        if (showModalTrigger) {\n          showModalTrigger.forEach(trigger => trigger.addEventListener('click', this.openModal));\n        } else {\n          this.uppy.log('Dashboard modal trigger not found. Make sure `trigger` is set in Dashboard options, unless you are planning to call `dashboard.openModal()` method yourself', 'warning');\n        }\n      }\n      this.startListeningToResize();\n      document.addEventListener('paste', this.handlePasteOnBody);\n      this.uppy.on('plugin-added', _classPrivateFieldLooseBase(this, _addSupportedPluginIfNoTarget)[_addSupportedPluginIfNoTarget]);\n      this.uppy.on('plugin-remove', this.removeTarget);\n      this.uppy.on('file-added', this.hideAllPanels);\n      this.uppy.on('dashboard:modal-closed', this.hideAllPanels);\n      this.uppy.on('complete', this.handleComplete);\n      this.uppy.on('files-added', _classPrivateFieldLooseBase(this, _generateLargeThumbnailIfSingleFile)[_generateLargeThumbnailIfSingleFile]);\n      this.uppy.on('file-removed', _classPrivateFieldLooseBase(this, _generateLargeThumbnailIfSingleFile)[_generateLargeThumbnailIfSingleFile]);\n\n      // ___Why fire on capture?\n      //    Because this.ifFocusedOnUppyRecently needs to change before onUpdate() fires.\n      document.addEventListener('focus', this.recordIfFocusedOnUppyRecently, true);\n      document.addEventListener('click', this.recordIfFocusedOnUppyRecently, true);\n      if (this.opts.inline) {\n        this.el.addEventListener('keydown', this.handleKeyDownInInline);\n      }\n      if (this.opts.autoOpen) {\n        this.uppy.on('files-added', _classPrivateFieldLooseBase(this, _openFileEditorWhenFilesAdded)[_openFileEditorWhenFilesAdded]);\n      }\n    };\n    this.removeEvents = () => {\n      const showModalTrigger = findAllDOMElements(this.opts.trigger);\n      if (!this.opts.inline && showModalTrigger) {\n        showModalTrigger.forEach(trigger => trigger.removeEventListener('click', this.openModal));\n      }\n      this.stopListeningToResize();\n      document.removeEventListener('paste', this.handlePasteOnBody);\n      window.removeEventListener('popstate', this.handlePopState, false);\n      this.uppy.off('plugin-added', _classPrivateFieldLooseBase(this, _addSupportedPluginIfNoTarget)[_addSupportedPluginIfNoTarget]);\n      this.uppy.off('plugin-remove', this.removeTarget);\n      this.uppy.off('file-added', this.hideAllPanels);\n      this.uppy.off('dashboard:modal-closed', this.hideAllPanels);\n      this.uppy.off('complete', this.handleComplete);\n      this.uppy.off('files-added', _classPrivateFieldLooseBase(this, _generateLargeThumbnailIfSingleFile)[_generateLargeThumbnailIfSingleFile]);\n      this.uppy.off('file-removed', _classPrivateFieldLooseBase(this, _generateLargeThumbnailIfSingleFile)[_generateLargeThumbnailIfSingleFile]);\n      document.removeEventListener('focus', this.recordIfFocusedOnUppyRecently);\n      document.removeEventListener('click', this.recordIfFocusedOnUppyRecently);\n      if (this.opts.inline) {\n        this.el.removeEventListener('keydown', this.handleKeyDownInInline);\n      }\n      if (this.opts.autoOpen) {\n        this.uppy.off('files-added', _classPrivateFieldLooseBase(this, _openFileEditorWhenFilesAdded)[_openFileEditorWhenFilesAdded]);\n      }\n    };\n    this.superFocusOnEachUpdate = () => {\n      const isFocusInUppy = this.el.contains(document.activeElement);\n      // When focus is lost on the page (== focus is on body for most browsers, or focus is null for IE11)\n      const isFocusNowhere = document.activeElement === document.body || document.activeElement === null;\n      const isInformerHidden = this.uppy.getState().info.length === 0;\n      const isModal = !this.opts.inline;\n      if (\n      // If update is connected to showing the Informer - let the screen reader calmly read it.\n      isInformerHidden && (\n      // If we are in a modal - always superfocus without concern for other elements\n      // on the page (user is unlikely to want to interact with the rest of the page)\n      isModal ||\n      // If we are already inside of Uppy, or\n      isFocusInUppy ||\n      // If we are not focused on anything BUT we have already, at least once, focused on uppy\n      //   1. We focus when isFocusNowhere, because when the element we were focused\n      //      on disappears (e.g. an overlay), - focus gets lost. If user is typing\n      //      something somewhere else on the page, - focus won't be 'nowhere'.\n      //   2. We only focus when focus is nowhere AND this.ifFocusedOnUppyRecently,\n      //      to avoid focus jumps if we do something else on the page.\n      //   [Practical check] Without '&& this.ifFocusedOnUppyRecently', in Safari, in inline mode,\n      //                     when file is uploading, - navigate via tab to the checkbox,\n      //                     try to press space multiple times. Focus will jump to Uppy.\n      isFocusNowhere && this.ifFocusedOnUppyRecently)) {\n        this.superFocus(this.el, this.getPluginState().activeOverlayType);\n      } else {\n        this.superFocus.cancel();\n      }\n    };\n    this.afterUpdate = () => {\n      if (this.opts.disabled && !this.dashboardIsDisabled) {\n        this.disableInteractiveElements(true);\n        return;\n      }\n      if (!this.opts.disabled && this.dashboardIsDisabled) {\n        this.disableInteractiveElements(false);\n      }\n      this.superFocusOnEachUpdate();\n    };\n    this.saveFileCard = (meta, fileID) => {\n      this.uppy.setFileMeta(fileID, meta);\n      this.toggleFileCard(false, fileID);\n    };\n    Object.defineProperty(this, _attachRenderFunctionToTarget, {\n      writable: true,\n      value: target => {\n        const plugin = this.uppy.getPlugin(target.id);\n        return {\n          ...target,\n          icon: plugin.icon || this.opts.defaultPickerIcon,\n          render: plugin.render\n        };\n      }\n    });\n    Object.defineProperty(this, _isTargetSupported, {\n      writable: true,\n      value: target => {\n        const plugin = this.uppy.getPlugin(target.id);\n        // If the plugin does not provide a `supported` check, assume the plugin works everywhere.\n        if (typeof plugin.isSupported !== 'function') {\n          return true;\n        }\n        return plugin.isSupported();\n      }\n    });\n    Object.defineProperty(this, _getAcquirers, {\n      writable: true,\n      value: memoize(targets => {\n        return targets.filter(target => target.type === 'acquirer' && _classPrivateFieldLooseBase(this, _isTargetSupported)[_isTargetSupported](target)).map(_classPrivateFieldLooseBase(this, _attachRenderFunctionToTarget)[_attachRenderFunctionToTarget]);\n      })\n    });\n    Object.defineProperty(this, _getProgressIndicators, {\n      writable: true,\n      value: memoize(targets => {\n        return targets.filter(target => target.type === 'progressindicator').map(_classPrivateFieldLooseBase(this, _attachRenderFunctionToTarget)[_attachRenderFunctionToTarget]);\n      })\n    });\n    Object.defineProperty(this, _getEditors, {\n      writable: true,\n      value: memoize(targets => {\n        return targets.filter(target => target.type === 'editor').map(_classPrivateFieldLooseBase(this, _attachRenderFunctionToTarget)[_attachRenderFunctionToTarget]);\n      })\n    });\n    this.render = state => {\n      const pluginState = this.getPluginState();\n      const {\n        files,\n        capabilities,\n        allowNewUpload\n      } = state;\n      const {\n        newFiles,\n        uploadStartedFiles,\n        completeFiles,\n        erroredFiles,\n        inProgressFiles,\n        inProgressNotPausedFiles,\n        processingFiles,\n        isUploadStarted,\n        isAllComplete,\n        isAllErrored,\n        isAllPaused\n      } = this.uppy.getObjectOfFilesPerState();\n      const acquirers = _classPrivateFieldLooseBase(this, _getAcquirers)[_getAcquirers](pluginState.targets);\n      const progressindicators = _classPrivateFieldLooseBase(this, _getProgressIndicators)[_getProgressIndicators](pluginState.targets);\n      const editors = _classPrivateFieldLooseBase(this, _getEditors)[_getEditors](pluginState.targets);\n      let theme;\n      if (this.opts.theme === 'auto') {\n        theme = capabilities.darkMode ? 'dark' : 'light';\n      } else {\n        theme = this.opts.theme;\n      }\n      if (['files', 'folders', 'both'].indexOf(this.opts.fileManagerSelectionType) < 0) {\n        this.opts.fileManagerSelectionType = 'files';\n        // eslint-disable-next-line no-console\n        console.warn(`Unsupported option for \"fileManagerSelectionType\". Using default of \"${this.opts.fileManagerSelectionType}\".`);\n      }\n      return DashboardUI({\n        state,\n        isHidden: pluginState.isHidden,\n        files,\n        newFiles,\n        uploadStartedFiles,\n        completeFiles,\n        erroredFiles,\n        inProgressFiles,\n        inProgressNotPausedFiles,\n        processingFiles,\n        isUploadStarted,\n        isAllComplete,\n        isAllErrored,\n        isAllPaused,\n        totalFileCount: Object.keys(files).length,\n        totalProgress: state.totalProgress,\n        allowNewUpload,\n        acquirers,\n        theme,\n        disabled: this.opts.disabled,\n        disableLocalFiles: this.opts.disableLocalFiles,\n        direction: this.opts.direction,\n        activePickerPanel: pluginState.activePickerPanel,\n        showFileEditor: pluginState.showFileEditor,\n        saveFileEditor: this.saveFileEditor,\n        closeFileEditor: this.closeFileEditor,\n        disableInteractiveElements: this.disableInteractiveElements,\n        animateOpenClose: this.opts.animateOpenClose,\n        isClosing: pluginState.isClosing,\n        progressindicators,\n        editors,\n        autoProceed: this.uppy.opts.autoProceed,\n        id: this.id,\n        closeModal: this.requestCloseModal,\n        handleClickOutside: this.handleClickOutside,\n        handleInputChange: this.handleInputChange,\n        handlePaste: this.handlePaste,\n        inline: this.opts.inline,\n        showPanel: this.showPanel,\n        hideAllPanels: this.hideAllPanels,\n        i18n: this.i18n,\n        i18nArray: this.i18nArray,\n        uppy: this.uppy,\n        note: this.opts.note,\n        recoveredState: state.recoveredState,\n        metaFields: pluginState.metaFields,\n        resumableUploads: capabilities.resumableUploads || false,\n        individualCancellation: capabilities.individualCancellation,\n        isMobileDevice: capabilities.isMobileDevice,\n        fileCardFor: pluginState.fileCardFor,\n        toggleFileCard: this.toggleFileCard,\n        toggleAddFilesPanel: this.toggleAddFilesPanel,\n        showAddFilesPanel: pluginState.showAddFilesPanel,\n        saveFileCard: this.saveFileCard,\n        openFileEditor: this.openFileEditor,\n        canEditFile: this.canEditFile,\n        width: this.opts.width,\n        height: this.opts.height,\n        showLinkToFileUploadResult: this.opts.showLinkToFileUploadResult,\n        fileManagerSelectionType: this.opts.fileManagerSelectionType,\n        proudlyDisplayPoweredByUppy: this.opts.proudlyDisplayPoweredByUppy,\n        hideCancelButton: this.opts.hideCancelButton,\n        hideRetryButton: this.opts.hideRetryButton,\n        hidePauseResumeButton: this.opts.hidePauseResumeButton,\n        showRemoveButtonAfterComplete: this.opts.showRemoveButtonAfterComplete,\n        containerWidth: pluginState.containerWidth,\n        containerHeight: pluginState.containerHeight,\n        areInsidesReadyToBeVisible: pluginState.areInsidesReadyToBeVisible,\n        isTargetDOMEl: this.isTargetDOMEl,\n        parentElement: this.el,\n        allowedFileTypes: this.uppy.opts.restrictions.allowedFileTypes,\n        maxNumberOfFiles: this.uppy.opts.restrictions.maxNumberOfFiles,\n        requiredMetaFields: this.uppy.opts.restrictions.requiredMetaFields,\n        showSelectedFiles: this.opts.showSelectedFiles,\n        showNativePhotoCameraButton: this.opts.showNativePhotoCameraButton,\n        showNativeVideoCameraButton: this.opts.showNativeVideoCameraButton,\n        nativeCameraFacingMode: this.opts.nativeCameraFacingMode,\n        singleFileFullScreen: this.opts.singleFileFullScreen,\n        handleCancelRestore: this.handleCancelRestore,\n        handleRequestThumbnail: this.handleRequestThumbnail,\n        handleCancelThumbnail: this.handleCancelThumbnail,\n        // drag props\n        isDraggingOver: pluginState.isDraggingOver,\n        handleDragOver: this.handleDragOver,\n        handleDragLeave: this.handleDragLeave,\n        handleDrop: this.handleDrop\n      });\n    };\n    Object.defineProperty(this, _addSpecifiedPluginsFromOptions, {\n      writable: true,\n      value: () => {\n        const plugins = this.opts.plugins || [];\n        plugins.forEach(pluginID => {\n          const plugin = this.uppy.getPlugin(pluginID);\n          if (plugin) {\n            ;\n            plugin.mount(this, plugin);\n          } else {\n            this.uppy.log(`[Uppy] Dashboard could not find plugin '${pluginID}', make sure to uppy.use() the plugins you are specifying`, 'warning');\n          }\n        });\n      }\n    });\n    Object.defineProperty(this, _autoDiscoverPlugins, {\n      writable: true,\n      value: () => {\n        this.uppy.iteratePlugins(_classPrivateFieldLooseBase(this, _addSupportedPluginIfNoTarget)[_addSupportedPluginIfNoTarget]);\n      }\n    });\n    Object.defineProperty(this, _addSupportedPluginIfNoTarget, {\n      writable: true,\n      value: plugin => {\n        var _plugin$opts;\n        // Only these types belong on the Dashboard,\n        // we wouldn’t want to try and mount Compressor or Tus, for example.\n        const typesAllowed = ['acquirer', 'editor'];\n        if (plugin && !((_plugin$opts = plugin.opts) != null && _plugin$opts.target) && typesAllowed.includes(plugin.type)) {\n          const pluginAlreadyAdded = this.getPluginState().targets.some(installedPlugin => plugin.id === installedPlugin.id);\n          if (!pluginAlreadyAdded) {\n            ;\n            plugin.mount(this, plugin);\n          }\n        }\n      }\n    });\n    this.install = () => {\n      // Set default state for Dashboard\n      this.setPluginState({\n        isHidden: true,\n        fileCardFor: null,\n        activeOverlayType: null,\n        showAddFilesPanel: false,\n        activePickerPanel: undefined,\n        showFileEditor: false,\n        metaFields: this.opts.metaFields,\n        targets: [],\n        // We'll make them visible once .containerWidth is determined\n        areInsidesReadyToBeVisible: false,\n        isDraggingOver: false\n      });\n      const {\n        inline,\n        closeAfterFinish\n      } = this.opts;\n      if (inline && closeAfterFinish) {\n        throw new Error('[Dashboard] `closeAfterFinish: true` cannot be used on an inline Dashboard, because an inline Dashboard cannot be closed at all. Either set `inline: false`, or disable the `closeAfterFinish` option.');\n      }\n      const {\n        allowMultipleUploads,\n        allowMultipleUploadBatches\n      } = this.uppy.opts;\n      if ((allowMultipleUploads || allowMultipleUploadBatches) && closeAfterFinish) {\n        this.uppy.log('[Dashboard] When using `closeAfterFinish`, we recommended setting the `allowMultipleUploadBatches` option to `false` in the Uppy constructor. See https://uppy.io/docs/uppy/#allowMultipleUploads-true', 'warning');\n      }\n      const {\n        target\n      } = this.opts;\n      if (target) {\n        this.mount(target, this);\n      }\n      if (!this.opts.disableStatusBar) {\n        this.uppy.use(StatusBar, {\n          id: `${this.id}:StatusBar`,\n          target: this,\n          hideUploadButton: this.opts.hideUploadButton,\n          hideRetryButton: this.opts.hideRetryButton,\n          hidePauseResumeButton: this.opts.hidePauseResumeButton,\n          hideCancelButton: this.opts.hideCancelButton,\n          showProgressDetails: this.opts.showProgressDetails,\n          hideAfterFinish: this.opts.hideProgressAfterFinish,\n          locale: this.opts.locale,\n          doneButtonHandler: this.opts.doneButtonHandler\n        });\n      }\n      if (!this.opts.disableInformer) {\n        this.uppy.use(Informer, {\n          id: `${this.id}:Informer`,\n          target: this\n        });\n      }\n      if (!this.opts.disableThumbnailGenerator) {\n        this.uppy.use(ThumbnailGenerator, {\n          id: `${this.id}:ThumbnailGenerator`,\n          thumbnailWidth: this.opts.thumbnailWidth,\n          thumbnailHeight: this.opts.thumbnailHeight,\n          thumbnailType: this.opts.thumbnailType,\n          waitForThumbnailsBeforeUpload: this.opts.waitForThumbnailsBeforeUpload,\n          // If we don't block on thumbnails, we can lazily generate them\n          lazy: !this.opts.waitForThumbnailsBeforeUpload\n        });\n      }\n\n      // Dark Mode / theme\n      this.darkModeMediaQuery = typeof window !== 'undefined' && window.matchMedia ? window.matchMedia('(prefers-color-scheme: dark)') : null;\n      const isDarkModeOnFromTheStart = this.darkModeMediaQuery ? this.darkModeMediaQuery.matches : false;\n      this.uppy.log(`[Dashboard] Dark mode is ${isDarkModeOnFromTheStart ? 'on' : 'off'}`);\n      this.setDarkModeCapability(isDarkModeOnFromTheStart);\n      if (this.opts.theme === 'auto') {\n        var _this$darkModeMediaQu;\n        (_this$darkModeMediaQu = this.darkModeMediaQuery) == null || _this$darkModeMediaQu.addListener(this.handleSystemDarkModeChange);\n      }\n      _classPrivateFieldLooseBase(this, _addSpecifiedPluginsFromOptions)[_addSpecifiedPluginsFromOptions]();\n      _classPrivateFieldLooseBase(this, _autoDiscoverPlugins)[_autoDiscoverPlugins]();\n      this.initEvents();\n    };\n    this.uninstall = () => {\n      if (!this.opts.disableInformer) {\n        const informer = this.uppy.getPlugin(`${this.id}:Informer`);\n        // Checking if this plugin exists, in case it was removed by uppy-core\n        // before the Dashboard was.\n        if (informer) this.uppy.removePlugin(informer);\n      }\n      if (!this.opts.disableStatusBar) {\n        const statusBar = this.uppy.getPlugin(`${this.id}:StatusBar`);\n        if (statusBar) this.uppy.removePlugin(statusBar);\n      }\n      if (!this.opts.disableThumbnailGenerator) {\n        const thumbnail = this.uppy.getPlugin(`${this.id}:ThumbnailGenerator`);\n        if (thumbnail) this.uppy.removePlugin(thumbnail);\n      }\n      const plugins = this.opts.plugins || [];\n      plugins.forEach(pluginID => {\n        const plugin = this.uppy.getPlugin(pluginID);\n        if (plugin) plugin.unmount();\n      });\n      if (this.opts.theme === 'auto') {\n        var _this$darkModeMediaQu2;\n        (_this$darkModeMediaQu2 = this.darkModeMediaQuery) == null || _this$darkModeMediaQu2.removeListener(this.handleSystemDarkModeChange);\n      }\n      if (this.opts.disablePageScrollWhenModalOpen) {\n        document.body.classList.remove('uppy-Dashboard-isFixed');\n      }\n      this.unmount();\n      this.removeEvents();\n    };\n    this.id = this.opts.id || 'Dashboard';\n    this.title = 'Dashboard';\n    this.type = 'orchestrator';\n    this.defaultLocale = locale;\n\n    // Dynamic default options:\n    if (this.opts.doneButtonHandler === undefined) {\n      // `null` means \"do not display a Done button\", while `undefined` means\n      // \"I want the default behavior\". For this reason, we need to differentiate `null` and `undefined`.\n      this.opts.doneButtonHandler = () => {\n        this.uppy.clearUploadedFiles();\n        this.requestCloseModal();\n      };\n    }\n    (_this$opts4$onRequest = (_this$opts4 = this.opts).onRequestCloseModal) != null ? _this$opts4$onRequest : _this$opts4.onRequestCloseModal = () => this.closeModal();\n    this.i18nInit();\n  }\n}\nDashboard.VERSION = packageJson.version;","import debounce from 'lodash/debounce.js';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore untyped\nimport FOCUSABLE_ELEMENTS from '@uppy/utils/lib/FOCUSABLE_ELEMENTS';\nimport getActiveOverlayEl from \"./getActiveOverlayEl.js\";\n/*\n  Focuses on some element in the currently topmost overlay.\n\n  1. If there are some [data-uppy-super-focusable] elements rendered already - focuses\n     on the first superfocusable element, and leaves focus up to the control of\n     a user (until currently focused element disappears from the screen [which\n     can happen when overlay changes, or, e.g., when we click on a folder in googledrive]).\n  2. If there are no [data-uppy-super-focusable] elements yet (or ever) - focuses\n     on the first focusable element, but switches focus if superfocusable elements appear on next render.\n*/\nexport default function createSuperFocus() {\n  let lastFocusWasOnSuperFocusableEl = false;\n  const superFocus = (dashboardEl, activeOverlayType) => {\n    const overlayEl = getActiveOverlayEl(dashboardEl, activeOverlayType);\n    const isFocusInOverlay = overlayEl.contains(document.activeElement);\n    // If focus is already in the topmost overlay, AND on last update we focused on the superfocusable\n    // element - then leave focus up to the user.\n    // [Practical check] without this line, typing in the search input in googledrive overlay won't work.\n    if (isFocusInOverlay && lastFocusWasOnSuperFocusableEl) return;\n    const superFocusableEl = overlayEl.querySelector('[data-uppy-super-focusable]');\n    // If we are already in the topmost overlay, AND there are no super focusable elements yet, - leave focus up to the user.\n    // [Practical check] without this line, if you are in an empty folder in google drive, and something's uploading in the\n    // bg, - focus will be jumping to Done all the time.\n    if (isFocusInOverlay && !superFocusableEl) return;\n    if (superFocusableEl) {\n      superFocusableEl.focus({\n        preventScroll: true\n      });\n      lastFocusWasOnSuperFocusableEl = true;\n    } else {\n      const firstEl = overlayEl.querySelector(FOCUSABLE_ELEMENTS);\n      firstEl == null || firstEl.focus({\n        preventScroll: true\n      });\n      lastFocusWasOnSuperFocusableEl = false;\n    }\n  };\n\n  // ___Why do we need to debounce?\n  //    1. To deal with animations: overlay changes via animations, which results in the DOM updating AFTER plugin.update()\n  //       already executed.\n  //    [Practical check] without debounce, if we open the Url overlay, and click 'Done', Dashboard won't get focused again.\n  //    [Practical check] if we delay 250ms instead of 260ms - IE11 won't get focused in same situation.\n  //    2. Performance: there can be many state update()s in a second, and this function is called every time.\n  return debounce(superFocus, 260);\n}","import webkitGetAsEntryApi from \"./utils/webkitGetAsEntryApi/index.js\";\nimport fallbackApi from \"./utils/fallbackApi.js\";\n\n/**\n * Returns a promise that resolves to the array of dropped files (if a folder is\n * dropped, and browser supports folder parsing - promise resolves to the flat\n * array of all files in all directories).\n * Each file has .relativePath prop appended to it (e.g. \"/docs/Prague/ticket_from_prague_to_ufa.pdf\")\n * if browser supports it. Otherwise it's undefined.\n *\n * @param dataTransfer\n * @param options\n * @param options.logDropError - a function that's called every time some\n * folder or some file error out (e.g. because of the folder name being too long\n * on Windows). Notice that resulting promise will always be resolved anyway.\n *\n * @returns {Promise} - Array<File>\n */\nexport default async function getDroppedFiles(dataTransfer, options) {\n  var _options$logDropError;\n  // Get all files from all subdirs. Works (at least) in Chrome, Mozilla, and Safari\n  const logDropError = (_options$logDropError = options == null ? void 0 : options.logDropError) != null ? _options$logDropError : Function.prototype;\n  try {\n    const accumulator = [];\n    for await (const file of webkitGetAsEntryApi(dataTransfer, logDropError)) {\n      accumulator.push(file);\n    }\n    return accumulator;\n    // Otherwise just return all first-order files\n  } catch {\n    return fallbackApi(dataTransfer);\n  }\n}","import toArray from \"../../toArray.js\";\n\n// .files fallback, should be implemented in any browser\nexport default function fallbackApi(dataTransfer) {\n  const files = toArray(dataTransfer.files);\n  return Promise.resolve(files);\n}","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\nvar _uppy = /*#__PURE__*/_classPrivateFieldLooseKey(\"uppy\");\nvar _events = /*#__PURE__*/_classPrivateFieldLooseKey(\"events\");\n/**\n * Create a wrapper around an event emitter with a `remove` method to remove\n * all events that were added using the wrapped emitter.\n */\nexport default class EventManager {\n  constructor(uppy) {\n    Object.defineProperty(this, _uppy, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _events, {\n      writable: true,\n      value: []\n    });\n    _classPrivateFieldLooseBase(this, _uppy)[_uppy] = uppy;\n  }\n\n  /** @deprecated */\n\n  on(event, fn) {\n    _classPrivateFieldLooseBase(this, _events)[_events].push([event, fn]);\n    return _classPrivateFieldLooseBase(this, _uppy)[_uppy].on(event, fn);\n  }\n  remove() {\n    for (const [event, fn] of _classPrivateFieldLooseBase(this, _events)[_events].splice(0)) {\n      _classPrivateFieldLooseBase(this, _uppy)[_uppy].off(event, fn);\n    }\n  }\n  onFilePause(fileID, cb) {\n    this.on('upload-pause', (targetFileID, isPaused) => {\n      if (fileID === targetFileID) {\n        cb(isPaused);\n      }\n    });\n  }\n  onFileRemove(fileID, cb) {\n    this.on('file-removed', file => {\n      if (fileID === file.id) cb(file.id);\n    });\n  }\n  onPause(fileID, cb) {\n    this.on('upload-pause', (targetFileID, isPaused) => {\n      if (fileID === targetFileID) {\n        // const isPaused = this.#uppy.pauseResume(fileID)\n        cb(isPaused);\n      }\n    });\n  }\n  onRetry(fileID, cb) {\n    this.on('upload-retry', targetFileID => {\n      if (fileID === targetFileID) {\n        cb();\n      }\n    });\n  }\n  onRetryAll(fileID, cb) {\n    this.on('retry-all', () => {\n      if (!_classPrivateFieldLooseBase(this, _uppy)[_uppy].getFile(fileID)) return;\n      cb();\n    });\n  }\n  onPauseAll(fileID, cb) {\n    this.on('pause-all', () => {\n      if (!_classPrivateFieldLooseBase(this, _uppy)[_uppy].getFile(fileID)) return;\n      cb();\n    });\n  }\n  onCancelAll(fileID, eventHandler) {\n    var _this = this;\n    this.on('cancel-all', function () {\n      if (!_classPrivateFieldLooseBase(_this, _uppy)[_uppy].getFile(fileID)) return;\n      eventHandler(...arguments);\n    });\n  }\n  onResumeAll(fileID, cb) {\n    this.on('resume-all', () => {\n      if (!_classPrivateFieldLooseBase(this, _uppy)[_uppy].getFile(fileID)) return;\n      cb();\n    });\n  }\n}","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\nfunction createCancelError(cause) {\n  return new Error('Cancelled', {\n    cause\n  });\n}\nfunction abortOn(signal) {\n  if (signal != null) {\n    var _this$then;\n    const abortPromise = () => this.abort(signal.reason);\n    signal.addEventListener('abort', abortPromise, {\n      once: true\n    });\n    const removeAbortListener = () => {\n      signal.removeEventListener('abort', abortPromise);\n    };\n    (_this$then = this.then) == null || _this$then.call(this, removeAbortListener, removeAbortListener);\n  }\n  return this;\n}\nvar _activeRequests = /*#__PURE__*/_classPrivateFieldLooseKey(\"activeRequests\");\nvar _queuedHandlers = /*#__PURE__*/_classPrivateFieldLooseKey(\"queuedHandlers\");\nvar _paused = /*#__PURE__*/_classPrivateFieldLooseKey(\"paused\");\nvar _pauseTimer = /*#__PURE__*/_classPrivateFieldLooseKey(\"pauseTimer\");\nvar _downLimit = /*#__PURE__*/_classPrivateFieldLooseKey(\"downLimit\");\nvar _upperLimit = /*#__PURE__*/_classPrivateFieldLooseKey(\"upperLimit\");\nvar _rateLimitingTimer = /*#__PURE__*/_classPrivateFieldLooseKey(\"rateLimitingTimer\");\nvar _call = /*#__PURE__*/_classPrivateFieldLooseKey(\"call\");\nvar _queueNext = /*#__PURE__*/_classPrivateFieldLooseKey(\"queueNext\");\nvar _next = /*#__PURE__*/_classPrivateFieldLooseKey(\"next\");\nvar _queue = /*#__PURE__*/_classPrivateFieldLooseKey(\"queue\");\nvar _dequeue = /*#__PURE__*/_classPrivateFieldLooseKey(\"dequeue\");\nvar _resume = /*#__PURE__*/_classPrivateFieldLooseKey(\"resume\");\nvar _increaseLimit = /*#__PURE__*/_classPrivateFieldLooseKey(\"increaseLimit\");\nexport class RateLimitedQueue {\n  constructor(limit) {\n    Object.defineProperty(this, _dequeue, {\n      value: _dequeue2\n    });\n    Object.defineProperty(this, _queue, {\n      value: _queue2\n    });\n    Object.defineProperty(this, _next, {\n      value: _next2\n    });\n    Object.defineProperty(this, _queueNext, {\n      value: _queueNext2\n    });\n    Object.defineProperty(this, _call, {\n      value: _call2\n    });\n    Object.defineProperty(this, _activeRequests, {\n      writable: true,\n      value: 0\n    });\n    Object.defineProperty(this, _queuedHandlers, {\n      writable: true,\n      value: []\n    });\n    Object.defineProperty(this, _paused, {\n      writable: true,\n      value: false\n    });\n    Object.defineProperty(this, _pauseTimer, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _downLimit, {\n      writable: true,\n      value: 1\n    });\n    Object.defineProperty(this, _upperLimit, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _rateLimitingTimer, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _resume, {\n      writable: true,\n      value: () => this.resume()\n    });\n    Object.defineProperty(this, _increaseLimit, {\n      writable: true,\n      value: () => {\n        if (_classPrivateFieldLooseBase(this, _paused)[_paused]) {\n          _classPrivateFieldLooseBase(this, _rateLimitingTimer)[_rateLimitingTimer] = setTimeout(_classPrivateFieldLooseBase(this, _increaseLimit)[_increaseLimit], 0);\n          return;\n        }\n        _classPrivateFieldLooseBase(this, _downLimit)[_downLimit] = this.limit;\n        this.limit = Math.ceil((_classPrivateFieldLooseBase(this, _upperLimit)[_upperLimit] + _classPrivateFieldLooseBase(this, _downLimit)[_downLimit]) / 2);\n        for (let i = _classPrivateFieldLooseBase(this, _downLimit)[_downLimit]; i <= this.limit; i++) {\n          _classPrivateFieldLooseBase(this, _queueNext)[_queueNext]();\n        }\n        if (_classPrivateFieldLooseBase(this, _upperLimit)[_upperLimit] - _classPrivateFieldLooseBase(this, _downLimit)[_downLimit] > 3) {\n          _classPrivateFieldLooseBase(this, _rateLimitingTimer)[_rateLimitingTimer] = setTimeout(_classPrivateFieldLooseBase(this, _increaseLimit)[_increaseLimit], 2000);\n        } else {\n          _classPrivateFieldLooseBase(this, _downLimit)[_downLimit] = Math.floor(_classPrivateFieldLooseBase(this, _downLimit)[_downLimit] / 2);\n        }\n      }\n    });\n    if (typeof limit !== 'number' || limit === 0) {\n      this.limit = Infinity;\n    } else {\n      this.limit = limit;\n    }\n  }\n  run(fn, queueOptions) {\n    if (!_classPrivateFieldLooseBase(this, _paused)[_paused] && _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] < this.limit) {\n      return _classPrivateFieldLooseBase(this, _call)[_call](fn);\n    }\n    return _classPrivateFieldLooseBase(this, _queue)[_queue](fn, queueOptions);\n  }\n  wrapSyncFunction(fn, queueOptions) {\n    var _this = this;\n    return function () {\n      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n        args[_key] = arguments[_key];\n      }\n      const queuedRequest = _this.run(() => {\n        fn(...args);\n        queueMicrotask(() => queuedRequest.done());\n        return () => {};\n      }, queueOptions);\n      return {\n        abortOn,\n        abort() {\n          queuedRequest.abort();\n        }\n      };\n    };\n  }\n  wrapPromiseFunction(fn, queueOptions) {\n    var _this2 = this;\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      let queuedRequest;\n      const outerPromise = new Promise((resolve, reject) => {\n        queuedRequest = _this2.run(() => {\n          let cancelError;\n          let innerPromise;\n          try {\n            innerPromise = Promise.resolve(fn(...args));\n          } catch (err) {\n            innerPromise = Promise.reject(err);\n          }\n          innerPromise.then(result => {\n            if (cancelError) {\n              reject(cancelError);\n            } else {\n              queuedRequest.done();\n              resolve(result);\n            }\n          }, err => {\n            if (cancelError) {\n              reject(cancelError);\n            } else {\n              queuedRequest.done();\n              reject(err);\n            }\n          });\n          return cause => {\n            cancelError = createCancelError(cause);\n          };\n        }, queueOptions);\n      });\n      outerPromise.abort = cause => {\n        queuedRequest.abort(cause);\n      };\n      outerPromise.abortOn = abortOn;\n      return outerPromise;\n    };\n  }\n  resume() {\n    _classPrivateFieldLooseBase(this, _paused)[_paused] = false;\n    clearTimeout(_classPrivateFieldLooseBase(this, _pauseTimer)[_pauseTimer]);\n    for (let i = 0; i < this.limit; i++) {\n      _classPrivateFieldLooseBase(this, _queueNext)[_queueNext]();\n    }\n  }\n  /**\n   * Freezes the queue for a while or indefinitely.\n   *\n   * @param {number | null } [duration] Duration for the pause to happen, in milliseconds.\n   *                                    If omitted, the queue won't resume automatically.\n   */\n  pause(duration) {\n    if (duration === void 0) {\n      duration = null;\n    }\n    _classPrivateFieldLooseBase(this, _paused)[_paused] = true;\n    clearTimeout(_classPrivateFieldLooseBase(this, _pauseTimer)[_pauseTimer]);\n    if (duration != null) {\n      _classPrivateFieldLooseBase(this, _pauseTimer)[_pauseTimer] = setTimeout(_classPrivateFieldLooseBase(this, _resume)[_resume], duration);\n    }\n  }\n\n  /**\n   * Pauses the queue for a duration, and lower the limit of concurrent requests\n   * when the queue resumes. When the queue resumes, it tries to progressively\n   * increase the limit in `this.#increaseLimit` until another call is made to\n   * `this.rateLimit`.\n   * Call this function when using the RateLimitedQueue for network requests and\n   * the remote server responds with 429 HTTP code.\n   *\n   * @param {number} duration in milliseconds.\n   */\n  rateLimit(duration) {\n    clearTimeout(_classPrivateFieldLooseBase(this, _rateLimitingTimer)[_rateLimitingTimer]);\n    this.pause(duration);\n    if (this.limit > 1 && Number.isFinite(this.limit)) {\n      _classPrivateFieldLooseBase(this, _upperLimit)[_upperLimit] = this.limit - 1;\n      this.limit = _classPrivateFieldLooseBase(this, _downLimit)[_downLimit];\n      _classPrivateFieldLooseBase(this, _rateLimitingTimer)[_rateLimitingTimer] = setTimeout(_classPrivateFieldLooseBase(this, _increaseLimit)[_increaseLimit], duration);\n    }\n  }\n  get isPaused() {\n    return _classPrivateFieldLooseBase(this, _paused)[_paused];\n  }\n}\nfunction _call2(fn) {\n  _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] += 1;\n  let done = false;\n  let cancelActive;\n  try {\n    cancelActive = fn();\n  } catch (err) {\n    _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] -= 1;\n    throw err;\n  }\n  return {\n    abort: cause => {\n      if (done) return;\n      done = true;\n      _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] -= 1;\n      cancelActive == null || cancelActive(cause);\n      _classPrivateFieldLooseBase(this, _queueNext)[_queueNext]();\n    },\n    done: () => {\n      if (done) return;\n      done = true;\n      _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] -= 1;\n      _classPrivateFieldLooseBase(this, _queueNext)[_queueNext]();\n    }\n  };\n}\nfunction _queueNext2() {\n  // Do it soon but not immediately, this allows clearing out the entire queue synchronously\n  // one by one without continuously _advancing_ it (and starting new tasks before immediately\n  // aborting them)\n  queueMicrotask(() => _classPrivateFieldLooseBase(this, _next)[_next]());\n}\nfunction _next2() {\n  if (_classPrivateFieldLooseBase(this, _paused)[_paused] || _classPrivateFieldLooseBase(this, _activeRequests)[_activeRequests] >= this.limit) {\n    return;\n  }\n  if (_classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].length === 0) {\n    return;\n  }\n\n  // Dispatch the next request, and update the abort/done handlers\n  // so that cancelling it does the Right Thing (and doesn't just try\n  // to dequeue an already-running request).\n  const next = _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].shift();\n  if (next == null) {\n    throw new Error('Invariant violation: next is null');\n  }\n  const handler = _classPrivateFieldLooseBase(this, _call)[_call](next.fn);\n  next.abort = handler.abort;\n  next.done = handler.done;\n}\nfunction _queue2(fn, options) {\n  const handler = {\n    fn,\n    priority: (options == null ? void 0 : options.priority) || 0,\n    abort: () => {\n      _classPrivateFieldLooseBase(this, _dequeue)[_dequeue](handler);\n    },\n    done: () => {\n      throw new Error('Cannot mark a queued request as done: this indicates a bug');\n    }\n  };\n  const index = _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].findIndex(other => {\n    return handler.priority > other.priority;\n  });\n  if (index === -1) {\n    _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].push(handler);\n  } else {\n    _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].splice(index, 0, handler);\n  }\n  return handler;\n}\nfunction _dequeue2(handler) {\n  const index = _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].indexOf(handler);\n  if (index !== -1) {\n    _classPrivateFieldLooseBase(this, _queuedHandlers)[_queuedHandlers].splice(index, 1);\n  }\n}\nexport const internalRateLimitedQueue = Symbol('__queue');","class NetworkError extends Error {\n  constructor(error, xhr) {\n    if (xhr === void 0) {\n      xhr = null;\n    }\n    super(`This looks like a network error, the endpoint might be blocked by an internet provider or a firewall.`);\n    this.cause = error;\n    this.isNetworkError = true;\n    this.request = xhr;\n  }\n}\nexport default NetworkError;","function isNetworkError(xhr) {\n  if (!xhr) {\n    return false;\n  }\n  return xhr.readyState !== 0 && xhr.readyState !== 4 || xhr.status === 0;\n}\nexport default isNetworkError;","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\nvar _aliveTimer = /*#__PURE__*/_classPrivateFieldLooseKey(\"aliveTimer\");\nvar _isDone = /*#__PURE__*/_classPrivateFieldLooseKey(\"isDone\");\nvar _onTimedOut = /*#__PURE__*/_classPrivateFieldLooseKey(\"onTimedOut\");\nvar _timeout = /*#__PURE__*/_classPrivateFieldLooseKey(\"timeout\");\n/**\n * Helper to abort upload requests if there has not been any progress for `timeout` ms.\n * Create an instance using `timer = new ProgressTimeout(10000, onTimeout)`\n * Call `timer.progress()` to signal that there has been progress of any kind.\n * Call `timer.done()` when the upload has completed.\n */\nclass ProgressTimeout {\n  constructor(timeout,\n  // eslint-disable-next-line no-shadow\n  timeoutHandler) {\n    Object.defineProperty(this, _aliveTimer, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _isDone, {\n      writable: true,\n      value: false\n    });\n    Object.defineProperty(this, _onTimedOut, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _timeout, {\n      writable: true,\n      value: void 0\n    });\n    _classPrivateFieldLooseBase(this, _timeout)[_timeout] = timeout;\n    _classPrivateFieldLooseBase(this, _onTimedOut)[_onTimedOut] = () => timeoutHandler(timeout);\n  }\n  progress() {\n    // Some browsers fire another progress event when the upload is\n    // cancelled, so we have to ignore progress after the timer was\n    // told to stop.\n    if (_classPrivateFieldLooseBase(this, _isDone)[_isDone]) return;\n    if (_classPrivateFieldLooseBase(this, _timeout)[_timeout] > 0) {\n      clearTimeout(_classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer]);\n      _classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer] = setTimeout(_classPrivateFieldLooseBase(this, _onTimedOut)[_onTimedOut], _classPrivateFieldLooseBase(this, _timeout)[_timeout]);\n    }\n  }\n  done() {\n    if (!_classPrivateFieldLooseBase(this, _isDone)[_isDone]) {\n      clearTimeout(_classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer]);\n      _classPrivateFieldLooseBase(this, _aliveTimer)[_aliveTimer] = undefined;\n      _classPrivateFieldLooseBase(this, _isDone)[_isDone] = true;\n    }\n  }\n}\nexport default ProgressTimeout;","import NetworkError from \"./NetworkError.js\";\nimport ProgressTimeout from \"./ProgressTimeout.js\";\nconst noop = () => {};\n/**\n * Fetches data from a specified URL using XMLHttpRequest, with optional retry functionality and progress tracking.\n *\n * @param url The URL to send the request to.\n * @param options Optional settings for the fetch operation.\n */\nexport function fetcher(url, options) {\n  if (options === void 0) {\n    options = {};\n  }\n  const {\n    body = null,\n    headers = {},\n    method = 'GET',\n    onBeforeRequest = noop,\n    onUploadProgress = noop,\n    shouldRetry = () => true,\n    onAfterRequest = noop,\n    onTimeout = noop,\n    responseType,\n    retries = 3,\n    signal = null,\n    timeout = 30000,\n    withCredentials = false\n  } = options;\n\n  // 300 ms, 600 ms, 1200 ms, 2400 ms, 4800 ms\n  const delay = attempt => 0.3 * 2 ** (attempt - 1) * 1000;\n  const timer = new ProgressTimeout(timeout, onTimeout);\n  function requestWithRetry(retryCount) {\n    if (retryCount === void 0) {\n      retryCount = 0;\n    }\n    // eslint-disable-next-line no-async-promise-executor\n    return new Promise(async (resolve, reject) => {\n      const xhr = new XMLHttpRequest();\n      xhr.open(method, url, true);\n      xhr.withCredentials = withCredentials;\n      if (responseType) {\n        xhr.responseType = responseType;\n      }\n      signal == null || signal.addEventListener('abort', () => {\n        xhr.abort();\n        // Using DOMException for abort errors aligns with\n        // the convention established by the Fetch API.\n        reject(new DOMException('Aborted', 'AbortError'));\n      });\n      xhr.onload = async () => {\n        await onAfterRequest(xhr, retryCount);\n        if (xhr.status >= 200 && xhr.status < 300) {\n          timer.done();\n          resolve(xhr);\n        } else if (shouldRetry(xhr) && retryCount < retries) {\n          setTimeout(() => {\n            requestWithRetry(retryCount + 1).then(resolve, reject);\n          }, delay(retryCount));\n        } else {\n          timer.done();\n          reject(new NetworkError(xhr.statusText, xhr));\n        }\n      };\n      xhr.onerror = () => {\n        if (shouldRetry(xhr) && retryCount < retries) {\n          setTimeout(() => {\n            requestWithRetry(retryCount + 1).then(resolve, reject);\n          }, delay(retryCount));\n        } else {\n          timer.done();\n          reject(new NetworkError(xhr.statusText, xhr));\n        }\n      };\n      xhr.upload.onprogress = event => {\n        timer.progress();\n        onUploadProgress(event);\n      };\n      if (headers) {\n        Object.keys(headers).forEach(key => {\n          xhr.setRequestHeader(key, headers[key]);\n        });\n      }\n      await onBeforeRequest(xhr, retryCount);\n      xhr.send(body);\n    });\n  }\n  return requestWithRetry();\n}","export default {\n  strings: {\n    // Shown in the Informer if an upload is being canceled because it stalled for too long.\n    uploadStalled: 'Upload has not made any progress for %{seconds} seconds. You may want to retry it.'\n  }\n};","function _classPrivateFieldLooseBase(receiver, privateKey) { if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) { throw new TypeError(\"attempted to use private field on non-instance\"); } return receiver; }\nvar id = 0;\nfunction _classPrivateFieldLooseKey(name) { return \"__private_\" + id++ + \"_\" + name; }\nimport BasePlugin from '@uppy/core/lib/BasePlugin.js';\nimport EventManager from '@uppy/core/lib/EventManager.js';\nimport { RateLimitedQueue, internalRateLimitedQueue\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore untyped\n} from '@uppy/utils/lib/RateLimitedQueue';\nimport NetworkError from '@uppy/utils/lib/NetworkError';\nimport isNetworkError from '@uppy/utils/lib/isNetworkError';\nimport { fetcher } from '@uppy/utils/lib/fetcher';\nimport { filterNonFailedFiles, filterFilesToEmitUploadStarted } from '@uppy/utils/lib/fileFilters';\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\n// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n// @ts-ignore We don't want TS to generate types for the package.json\nconst packageJson = {\n  \"version\": \"3.6.8\"\n};\nimport locale from \"./locale.js\";\nfunction buildResponseError(xhr, err) {\n  let error = err;\n  // No error message\n  if (!error) error = new Error('Upload error');\n  // Got an error message string\n  if (typeof error === 'string') error = new Error(error);\n  // Got something else\n  if (!(error instanceof Error)) {\n    error = Object.assign(new Error('Upload error'), {\n      data: error\n    });\n  }\n  if (isNetworkError(xhr)) {\n    error = new NetworkError(error, xhr);\n    return error;\n  }\n\n  // @ts-expect-error request can only be set on NetworkError\n  // but we use NetworkError to distinguish between errors.\n  error.request = xhr;\n  return error;\n}\n\n/**\n * Set `data.type` in the blob to `file.meta.type`,\n * because we might have detected a more accurate file type in Uppy\n * https://stackoverflow.com/a/50875615\n */\nfunction setTypeInBlob(file) {\n  const dataWithUpdatedType = file.data.slice(0, file.data.size, file.meta.type);\n  return dataWithUpdatedType;\n}\nconst defaultOptions = {\n  formData: true,\n  fieldName: 'file',\n  method: 'post',\n  allowedMetaFields: null,\n  responseUrlFieldName: 'url',\n  bundle: false,\n  headers: {},\n  timeout: 30 * 1000,\n  limit: 5,\n  withCredentials: false,\n  responseType: '',\n  getResponseData(responseText) {\n    let parsedResponse = {};\n    try {\n      parsedResponse = JSON.parse(responseText);\n    } catch {\n      // ignore\n    }\n    // We don't have access to the B (Body) generic here\n    // so we have to cast it to any. The user facing types\n    // remain correct, this is only to please the merging of default options.\n    return parsedResponse;\n  },\n  getResponseError(_, response) {\n    let error = new Error('Upload error');\n    if (isNetworkError(response)) {\n      error = new NetworkError(error, response);\n    }\n    return error;\n  },\n  validateStatus(status) {\n    return status >= 200 && status < 300;\n  }\n};\nvar _getFetcher = /*#__PURE__*/_classPrivateFieldLooseKey(\"getFetcher\");\nvar _uploadLocalFile = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadLocalFile\");\nvar _uploadBundle = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadBundle\");\nvar _getCompanionClientArgs = /*#__PURE__*/_classPrivateFieldLooseKey(\"getCompanionClientArgs\");\nvar _uploadFiles = /*#__PURE__*/_classPrivateFieldLooseKey(\"uploadFiles\");\nvar _handleUpload = /*#__PURE__*/_classPrivateFieldLooseKey(\"handleUpload\");\nexport default class XHRUpload extends BasePlugin {\n  constructor(uppy, _opts) {\n    super(uppy, {\n      ...defaultOptions,\n      fieldName: _opts.bundle ? 'files[]' : 'file',\n      ..._opts\n    });\n    Object.defineProperty(this, _uploadFiles, {\n      value: _uploadFiles2\n    });\n    Object.defineProperty(this, _getCompanionClientArgs, {\n      value: _getCompanionClientArgs2\n    });\n    Object.defineProperty(this, _uploadBundle, {\n      value: _uploadBundle2\n    });\n    Object.defineProperty(this, _uploadLocalFile, {\n      value: _uploadLocalFile2\n    });\n    Object.defineProperty(this, _getFetcher, {\n      writable: true,\n      value: void 0\n    });\n    Object.defineProperty(this, _handleUpload, {\n      writable: true,\n      value: async fileIDs => {\n        if (fileIDs.length === 0) {\n          this.uppy.log('[XHRUpload] No files to upload!');\n          return;\n        }\n\n        // No limit configured by the user, and no RateLimitedQueue passed in by a \"parent\" plugin\n        // (basically just AwsS3) using the internal symbol\n        // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n        // @ts-ignore untyped internal\n        if (this.opts.limit === 0 && !this.opts[internalRateLimitedQueue]) {\n          this.uppy.log('[XHRUpload] When uploading multiple files at once, consider setting the `limit` option (to `10` for example), to limit the number of concurrent uploads, which helps prevent memory and network issues: https://uppy.io/docs/xhr-upload/#limit-0', 'warning');\n        }\n        this.uppy.log('[XHRUpload] Uploading...');\n        const files = this.uppy.getFilesByIds(fileIDs);\n        const filesFiltered = filterNonFailedFiles(files);\n        const filesToEmit = filterFilesToEmitUploadStarted(filesFiltered);\n        this.uppy.emit('upload-start', filesToEmit);\n        if (this.opts.bundle) {\n          // if bundle: true, we don’t support remote uploads\n          const isSomeFileRemote = filesFiltered.some(file => file.isRemote);\n          if (isSomeFileRemote) {\n            throw new Error('Can’t upload remote files when the `bundle: true` option is set');\n          }\n          if (typeof this.opts.headers === 'function') {\n            throw new TypeError('`headers` may not be a function when the `bundle: true` option is set');\n          }\n          await _classPrivateFieldLooseBase(this, _uploadBundle)[_uploadBundle](filesFiltered);\n        } else {\n          await _classPrivateFieldLooseBase(this, _uploadFiles)[_uploadFiles](filesFiltered);\n        }\n      }\n    });\n    this.type = 'uploader';\n    this.id = this.opts.id || 'XHRUpload';\n    this.defaultLocale = locale;\n    this.i18nInit();\n\n    // Simultaneous upload limiting is shared across all uploads with this plugin.\n    if (internalRateLimitedQueue in this.opts) {\n      // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n      // @ts-ignore untyped internal\n      this.requests = this.opts[internalRateLimitedQueue];\n    } else {\n      this.requests = new RateLimitedQueue(this.opts.limit);\n    }\n    if (this.opts.bundle && !this.opts.formData) {\n      throw new Error('`opts.formData` must be true when `opts.bundle` is enabled.');\n    }\n    if (this.opts.bundle && typeof this.opts.headers === 'function') {\n      throw new Error('`opts.headers` can not be a function when the `bundle: true` option is set.');\n    }\n    if ((_opts == null ? void 0 : _opts.allowedMetaFields) === undefined && 'metaFields' in this.opts) {\n      throw new Error('The `metaFields` option has been renamed to `allowedMetaFields`.');\n    }\n    this.uploaderEvents = Object.create(null);\n    /**\n     * xhr-upload wrapper for `fetcher` to handle user options\n     * `validateStatus`, `getResponseError`, `getResponseData`\n     * and to emit `upload-progress`, `upload-error`, and `upload-success` events.\n     */\n    _classPrivateFieldLooseBase(this, _getFetcher)[_getFetcher] = files => {\n      return async (url, options) => {\n        try {\n          var _options$method;\n          const res = await fetcher(url, {\n            ...options,\n            method: options == null || (_options$method = options.method) == null ? void 0 : _options$method.toUpperCase(),\n            onTimeout: timeout => {\n              const seconds = Math.ceil(timeout / 1000);\n              const error = new Error(this.i18n('uploadStalled', {\n                seconds\n              }));\n              this.uppy.emit('upload-stalled', error, files);\n            },\n            onUploadProgress: event => {\n              if (event.lengthComputable) {\n                for (const file of files) {\n                  this.uppy.emit('upload-progress', file, {\n                    // TODO: do not send `uploader` in next major\n                    // @ts-expect-error we can't type this and we should remove it\n                    uploader: this,\n                    bytesUploaded: event.loaded / event.total * file.size,\n                    bytesTotal: file.size\n                  });\n                }\n              }\n            }\n          });\n          if (!this.opts.validateStatus(res.status, res.responseText, res)) {\n            throw new NetworkError(res.statusText, res);\n          }\n          const body = this.opts.getResponseData(res.responseText, res);\n          const uploadURL = body == null ? void 0 : body[this.opts.responseUrlFieldName];\n          for (const file of files) {\n            this.uppy.emit('upload-success', file, {\n              status: res.status,\n              body,\n              uploadURL\n            });\n          }\n          return res;\n        } catch (error) {\n          if (error.name === 'AbortError') {\n            return undefined;\n          }\n          if (error instanceof NetworkError) {\n            const request = error.request;\n            const customError = buildResponseError(request, this.opts.getResponseError(request.responseText, request));\n            for (const file of files) {\n              this.uppy.emit('upload-error', file, customError);\n            }\n          }\n          throw error;\n        }\n      };\n    };\n  }\n  getOptions(file) {\n    const overrides = this.uppy.getState().xhrUpload;\n    const {\n      headers\n    } = this.opts;\n    const opts = {\n      ...this.opts,\n      ...(overrides || {}),\n      ...(file.xhrUpload || {}),\n      headers: {}\n    };\n    // Support for `headers` as a function, only in the XHRUpload settings.\n    // Options set by other plugins in Uppy state or on the files themselves are still merged in afterward.\n    //\n    // ```js\n    // headers: (file) => ({ expires: file.meta.expires })\n    // ```\n    if (typeof headers === 'function') {\n      opts.headers = headers(file);\n    } else {\n      Object.assign(opts.headers, this.opts.headers);\n    }\n    if (overrides) {\n      Object.assign(opts.headers, overrides.headers);\n    }\n    if (file.xhrUpload) {\n      Object.assign(opts.headers, file.xhrUpload.headers);\n    }\n    return opts;\n  }\n\n  // eslint-disable-next-line class-methods-use-this\n  addMetadata(formData, meta, opts) {\n    const allowedMetaFields = Array.isArray(opts.allowedMetaFields) ? opts.allowedMetaFields : Object.keys(meta); // Send along all fields by default.\n\n    allowedMetaFields.forEach(item => {\n      const value = meta[item];\n      if (Array.isArray(value)) {\n        // In this case we don't transform `item` to add brackets, it's up to\n        // the user to add the brackets so it won't be overridden.\n        value.forEach(subItem => formData.append(item, subItem));\n      } else {\n        formData.append(item, value);\n      }\n    });\n  }\n  createFormDataUpload(file, opts) {\n    const formPost = new FormData();\n    this.addMetadata(formPost, file.meta, opts);\n    const dataWithUpdatedType = setTypeInBlob(file);\n    if (file.name) {\n      formPost.append(opts.fieldName, dataWithUpdatedType, file.meta.name);\n    } else {\n      formPost.append(opts.fieldName, dataWithUpdatedType);\n    }\n    return formPost;\n  }\n  createBundledUpload(files, opts) {\n    const formPost = new FormData();\n    const {\n      meta\n    } = this.uppy.getState();\n    this.addMetadata(formPost, meta, opts);\n    files.forEach(file => {\n      const options = this.getOptions(file);\n      const dataWithUpdatedType = setTypeInBlob(file);\n      if (file.name) {\n        formPost.append(options.fieldName, dataWithUpdatedType, file.name);\n      } else {\n        formPost.append(options.fieldName, dataWithUpdatedType);\n      }\n    });\n    return formPost;\n  }\n  install() {\n    if (this.opts.bundle) {\n      const {\n        capabilities\n      } = this.uppy.getState();\n      this.uppy.setState({\n        capabilities: {\n          ...capabilities,\n          individualCancellation: false\n        }\n      });\n    }\n    this.uppy.addUploader(_classPrivateFieldLooseBase(this, _handleUpload)[_handleUpload]);\n  }\n  uninstall() {\n    if (this.opts.bundle) {\n      const {\n        capabilities\n      } = this.uppy.getState();\n      this.uppy.setState({\n        capabilities: {\n          ...capabilities,\n          individualCancellation: true\n        }\n      });\n    }\n    this.uppy.removeUploader(_classPrivateFieldLooseBase(this, _handleUpload)[_handleUpload]);\n  }\n}\nasync function _uploadLocalFile2(file) {\n  const events = new EventManager(this.uppy);\n  const controller = new AbortController();\n  const uppyFetch = this.requests.wrapPromiseFunction(async () => {\n    const opts = this.getOptions(file);\n    const fetch = _classPrivateFieldLooseBase(this, _getFetcher)[_getFetcher]([file]);\n    const body = opts.formData ? this.createFormDataUpload(file, opts) : file.data;\n    return fetch(opts.endpoint, {\n      ...opts,\n      body,\n      signal: controller.signal\n    });\n  });\n  events.onFileRemove(file.id, () => controller.abort());\n  events.onCancelAll(file.id, _ref => {\n    let {\n      reason\n    } = _ref;\n    if (reason === 'user') {\n      controller.abort();\n    }\n  });\n  try {\n    await uppyFetch().abortOn(controller.signal);\n  } catch (error) {\n    // TODO: create formal error with name 'AbortError' (this comes from RateLimitedQueue)\n    if (error.message !== 'Cancelled') {\n      throw error;\n    }\n  } finally {\n    events.remove();\n  }\n}\nasync function _uploadBundle2(files) {\n  const controller = new AbortController();\n  const uppyFetch = this.requests.wrapPromiseFunction(async () => {\n    var _this$uppy$getState$x;\n    const optsFromState = (_this$uppy$getState$x = this.uppy.getState().xhrUpload) != null ? _this$uppy$getState$x : {};\n    const fetch = _classPrivateFieldLooseBase(this, _getFetcher)[_getFetcher](files);\n    const body = this.createBundledUpload(files, {\n      ...this.opts,\n      ...optsFromState\n    });\n    return fetch(this.opts.endpoint, {\n      // headers can't be a function with bundle: true\n      ...this.opts,\n      body,\n      signal: controller.signal\n    });\n  });\n  function abort() {\n    controller.abort();\n  }\n\n  // We only need to abort on cancel all because\n  // individual cancellations are not possible with bundle: true\n  this.uppy.once('cancel-all', abort);\n  try {\n    await uppyFetch().abortOn(controller.signal);\n  } catch (error) {\n    // TODO: create formal error with name 'AbortError' (this comes from RateLimitedQueue)\n    if (error.message !== 'Cancelled') {\n      throw error;\n    }\n  } finally {\n    this.uppy.off('cancel-all', abort);\n  }\n}\nfunction _getCompanionClientArgs2(file) {\n  var _file$remote;\n  const opts = this.getOptions(file);\n  const allowedMetaFields = Array.isArray(opts.allowedMetaFields) ? opts.allowedMetaFields\n  // Send along all fields by default.\n  : Object.keys(file.meta);\n  return {\n    ...((_file$remote = file.remote) == null ? void 0 : _file$remote.body),\n    protocol: 'multipart',\n    endpoint: opts.endpoint,\n    size: file.data.size,\n    fieldname: opts.fieldName,\n    metadata: Object.fromEntries(allowedMetaFields.map(name => [name, file.meta[name]])),\n    httpMethod: opts.method,\n    useFormData: opts.formData,\n    headers: opts.headers\n  };\n}\nasync function _uploadFiles2(files) {\n  await Promise.allSettled(files.map(file => {\n    if (file.isRemote) {\n      const getQueue = () => this.requests;\n      const controller = new AbortController();\n      const removedHandler = removedFile => {\n        if (removedFile.id === file.id) controller.abort();\n      };\n      this.uppy.on('file-removed', removedHandler);\n      const uploadPromise = this.uppy.getRequestClientForFile(file).uploadRemoteFile(file, _classPrivateFieldLooseBase(this, _getCompanionClientArgs)[_getCompanionClientArgs](file), {\n        signal: controller.signal,\n        getQueue\n      });\n      this.requests.wrapSyncFunction(() => {\n        this.uppy.off('file-removed', removedHandler);\n      }, {\n        priority: -1\n      })();\n      return uploadPromise;\n    }\n    return _classPrivateFieldLooseBase(this, _uploadLocalFile)[_uploadLocalFile](file);\n  }));\n}\n// eslint-disable-next-line global-require\nXHRUpload.VERSION = packageJson.version;","export function filterNonFailedFiles(files) {\n  const hasError = file => 'error' in file && !!file.error;\n  return files.filter(file => !hasError(file));\n}\n\n// Don't double-emit upload-started for Golden Retriever-restored files that were already started\nexport function filterFilesToEmitUploadStarted(files) {\n  return files.filter(file => {\n    var _file$progress;\n    return !((_file$progress = file.progress) != null && _file$progress.uploadStarted) || !file.isRestored;\n  });\n}","// Entry point for the build script in your package.json\nimport \"@hotwired/turbo-rails\";\nimport \"./controllers\";\nimport './partsset';\nimport './work_chart';\n\nimport Uppy from '@uppy/core';\nimport Dashboard from '@uppy/dashboard';\nimport XHR from '@uppy/xhr-upload';\nif (document.getElementById('uppy-dashboard')) {\n  new Uppy().use(Dashboard, { inline: true, target: '#uppy-dashboard' })\n            .use(XHR, { endpoint: '/image' });\n}\n"],"names":["window","showChooseFileName","file_input","file_name","files","name","document","getElementById","value","changeState","classList","toggle","actions_links","getElementsByClassName","i","length","logger","console","undefined","WebSocket","log","messages","this","enabled","push","Date","now","adapters","getTime","secondsSince","time","ConnectionMonitor","constructor","connection","visibilityDidChange","bind","reconnectAttempts","start","isRunning","startedAt","stoppedAt","startPolling","addEventListener","staleThreshold","stop","stopPolling","removeEventListener","recordMessage","pingedAt","recordConnect","disconnectedAt","recordDisconnect","poll","clearTimeout","pollTimeout","setTimeout","reconnectIfStale","getPollInterval","reconnectionBackoffRate","Math","pow","min","random","connectionIsStale","refreshedAt","disconnectedRecently","reopen","visibilityState","isOpen","message_types","protocols","supportedProtocols","slice","indexOf","Connection","consumer","open","subscriptions","monitor","disconnected","send","data","webSocket","JSON","stringify","isActive","getState","socketProtocols","subprotocols","uninstallEventHandlers","url","installEventHandlers","close","allowReconnect","error","reopenDelay","getProtocol","protocol","isState","triedToReconnect","isProtocolSupported","call","states","state","readyState","toLowerCase","eventName","events","handler","prototype","message","event","identifier","reason","reconnect","type","parse","welcome","reconnectAttempted","reload","disconnect","ping","confirmation","confirmSubscription","notify","reconnected","rejection","reject","notifyAll","willAttemptReconnect","Subscription","params","mixin","object","properties","key","extend","perform","action","command","unsubscribe","remove","pendingSubscriptions","guarantee","subscription","startGuaranteeing","forget","filter","s","stopGuaranteeing","retrySubscribing","retryTimeout","map","subscribe","Subscriptions","guarantor","create","channelName","channel","add","ensureActiveConnection","findAll","sendCommand","callbackName","args","Consumer","_url","test","a","createElement","href","replace","createWebSocketURL","connect","addSubProtocol","subprotocol","createConsumer","element","head","querySelector","getAttribute","getConfig","default_mount_path","module","exports","input","Number","isNaN","TypeError","neg","num","abs","units","exponent","floor","unit","round","toFixed","has","Object","hasOwnProperty","prefix","Events","EE","fn","context","once","addListener","emitter","listener","evt","_events","_eventsCount","clearEvent","EventEmitter","__proto__","eventNames","names","getOwnPropertySymbols","concat","listeners","handlers","l","ee","Array","listenerCount","emit","a1","a2","a3","a4","a5","len","arguments","removeListener","apply","j","on","removeAllListeners","off","prefixed","b","Symbol","getRawTag","objectToString","symToStringTag","toStringTag","trimmedEndIndex","reTrimStart","string","freeGlobal","g","objectProto","nativeObjectToString","toString","isOwn","tag","unmasked","e","result","freeSelf","self","root","Function","reWhitespace","index","charAt","isObject","toNumber","nativeMax","max","nativeMin","func","wait","options","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","trailing","invokeFunc","thisArg","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","cancel","flush","baseGetTag","isObjectLike","debounce","baseTrim","isSymbol","reIsBadHex","reIsBinary","reIsOctal","freeParseInt","parseInt","other","valueOf","isBinary","wildcard","reMimePartSplit","target","pattern","split","_fns","arg1","arg2","arg3","arg4","arg5","arg6","toEmit","out","idx","substring","keys","getListeners","fns","emitAll","one","keep","WildcardMatcher","text","separator","hasWild","parts","match","ii","testParts","matches","partsCount","String","splice","matcher","hasOwn","classNames","classes","arg","appendClass","parseValue","isArray","includes","newClass","default","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","d","definition","o","defineProperty","enumerable","get","globalThis","obj","prop","Reflect","customElements","polyfillWrapFlushCallback","BuiltInHTMLElement","HTMLElement","construct","setPrototypeOf","raise","errorConstructor","requestSubmit","submitter","form","DOMException","validateSubmitter","click","hidden","appendChild","removeChild","HTMLFormElement","submittersByForm","WeakMap","clickCaptured","Element","Node","parentElement","candidate","closest","findSubmitterFromClickTarget","set","FrameLoadingStyle","FetchMethod","FormSubmissionState","FormEnctype","TimingMetric","VisitState","Event","navigator","vendor","SubmitEvent","FrameElement","observedAttributes","super","loaded","Promise","resolve","delegate","delegateConstructor","connectedCallback","disconnectedCallback","sourceURLReloaded","attributeChangedCallback","loadingStyleChanged","completeChanged","sourceURLChanged","disabledChanged","src","setAttribute","removeAttribute","loading","lazy","eager","disabled","hasAttribute","autoscroll","complete","isLoading","ownerDocument","isPreview","_a","_b","documentElement","expandURL","locatable","URL","baseURI","getAnchor","anchorMatch","hash","getAction","locationIsVisitable","location","rootLocation","baseURL","origin","pathname","endsWith","getPrefix","startsWith","isPrefixedBy","getPathComponents","getLastPathComponent","getRequestURL","anchor","toCacheKey","FetchResponse","response","succeeded","ok","failed","clientError","statusCode","serverError","redirected","isHTML","contentType","status","header","responseText","clone","responseHTML","headers","activateScriptElement","createdScriptElement","cspNonce","getMetaContent","nonce","textContent","async","destinationElement","sourceElement","attributes","copyElementAttributes","dispatch","cancelable","detail","CustomEvent","bubbles","composed","isConnected","dispatchEvent","nextAnimationFrame","requestAnimationFrame","parseHTMLDocument","html","DOMParser","parseFromString","unindent","strings","values","lines","reduce","interpolate","indent","line","join","uuid","from","_","attributeName","elements","markAsBusy","localName","clearBusyState","waitForLoad","timeoutInMilliseconds","onComplete","getHistoryMethodForAction","history","replaceState","pushState","getVisitAction","isAction","getMetaElement","content","findClosestRecursively","selector","assignedSlot","getRootNode","host","FetchRequest","method","body","URLSearchParams","abortController","AbortController","resolveRequestPromise","_value","defaultHeaders","searchParams","entries","abort","fetchOptions","prepareRequest","allowRequestToBeIntercepted","requestStarted","fetch","receive","willDelegateErrorHandling","requestErrored","requestFinished","fetchResponse","defaultPrevented","requestPreventedHandlingResponse","requestSucceededWithResponse","requestFailedWithResponse","toUpperCase","credentials","redirect","isSafe","signal","abortSignal","referrer","Accept","acceptResponseType","mimeType","requestInterception","resume","request","AppearanceObserver","started","intersect","lastEntry","isIntersecting","elementAppearedInViewport","intersectionObserver","IntersectionObserver","observe","unobserve","StreamMessage","wrap","template","innerHTML","createDocumentFragment","fragment","querySelectorAll","streamElement","importNode","inertScriptElement","templateElement","replaceWith","importStreamElements","FormSubmission","confirmMethod","_element","_submitter","confirm","formElement","mustRedirect","initialized","formData","FormData","append","buildFormData","File","search","mergeFormDataEntries","fetchRequest","post","put","patch","delete","fetchMethodFromString","formElementAction","enctype","urlEncoded","stringFormData","encoding","multipart","plain","formEnctypeFromString","requesting","confirmationMessage","stopping","stopped","token","cookieName","cookie","find","decodeURIComponent","getCookieValue","requestAcceptsTurboStreamResponse","_request","waiting","setSubmitsWith","formSubmission","formSubmissionStarted","success","formSubmissionFailedWithResponse","requestMustRedirect","responseSucceededWithoutRedirect","Error","formSubmissionErrored","receiving","formSubmissionSucceededWithResponse","resetSubmitterText","assign","formSubmissionFinished","submitsWith","originalSubmitText","some","Snapshot","activeElement","children","hasAnchor","getElementForAnchor","firstAutofocusableElement","permanentElements","queryPermanentElementsAll","getPermanentElementById","id","getPermanentElementMapForSnapshot","snapshot","permanentElementMap","currentPermanentElement","newPermanentElement","node","FormSubmitObserver","eventTarget","submitCaptured","submitBubbled","submissionDoesNotDismissDialog","getElementsByName","HTMLIFrameElement","submissionDoesNotTargetIFrame","willSubmitForm","preventDefault","stopImmediatePropagation","formSubmitted","View","resolveRenderPromise","resolveInterceptionPromise","scrollToAnchor","scrollToElement","focusElement","scrollToPosition","x","y","scrollToAnchorFromLocation","scrollIntoView","focus","scrollRoot","scrollTo","scrollToTop","render","renderer","shouldRender","newSnapshot","renderPromise","prepareToRenderSnapshot","renderInterception","renderElement","allowsImmediateRender","renderSnapshot","viewRenderedSnapshot","preloadOnLoadLinksForView","finishRenderingSnapshot","invalidate","reloadReason","viewInvalidated","markAsPreview","prepareToRender","finishRendering","FrameView","missing","LinkInterceptor","clickBubbled","respondsToEventTarget","clickEvent","linkClicked","shouldInterceptLinkClick","originalEvent","linkClickIntercepted","willVisit","_event","LinkClickObserver","MouseEvent","clickEventIsSignificant","composedPath","link","findLinkFromClickTarget","doesNotTargetIFrame","getLocationForLink","willFollowLinkToLocation","followedLinkToLocation","isContentEditable","which","altKey","ctrlKey","metaKey","shiftKey","FormLinkClickObserver","linkInterceptor","willSubmitFormLinkToLocation","turboFrame","turboAction","turboConfirm","submittedFormLinkToLocation","Bardo","preservingPermanentElements","callback","bardo","enter","leave","enteringBardo","replaceNewPermanentElementWithPlaceholder","replaceCurrentPermanentElementWithClone","replacePlaceholderWithPermanentElement","leavingBardo","permanentElement","placeholder","createPlaceholderForPermanentElement","cloneNode","getPlaceholderById","placeholders","Renderer","currentSnapshot","willRender","promise","resolvingFunctions","focusFirstAutofocusableElement","connectedSnapshot","elementIsFocusable","contains","currentElement","newElement","FrameRenderer","destinationRange","createRange","selectNodeContents","deleteContents","frameElement","sourceRange","extractContents","loadFrameElement","scrollFrameIntoView","activateScriptElements","willRenderFrame","firstElementChild","block","behavior","readScrollBehavior","newScriptElements","activatedScriptElement","ProgressBar","defaultCSS","animationDuration","hiding","visible","trickle","setValue","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","installStylesheetElement","show","installProgressElement","startTrickling","hide","fadeProgressElement","uninstallProgressElement","stopTrickling","refresh","insertBefore","firstChild","style","width","opacity","parentNode","trickleInterval","setInterval","clearInterval","className","HeadSnapshot","detailsByOuterHTML","elementIsNoscript","elementWithoutNonce","outerHTML","details","elementType","tracked","elementIsTracked","trackedElementSignature","getScriptElementsNotInSnapshot","getElementsMatchingTypeNotInSnapshot","getStylesheetElementsNotInSnapshot","matchedType","provisionalElements","getMetaValue","findMetaElementByName","elementIsMetaElementWithName","elementIsScript","tagName","elementIsStylesheet","PageSnapshot","fromHTMLString","fromDocument","fromElement","headSnapshot","clonedElement","selectElements","clonedSelectElements","source","option","selectedOptions","selected","clonedPasswordInput","headElement","getSetting","cacheControlValue","isPreviewable","isCacheable","isVisitable","defaultOptions","historyChanged","visitCachedSnapshot","updateHistory","shouldCacheSnapshot","acceptsStreamResponse","SystemStatusCode","PageStage","Visit","restorationIdentifier","timingMetrics","followedRedirect","scrolled","snapshotCached","snapshotHTML","isSamePage","locationWithActionIsSamePage","adapter","view","restorationData","getRestorationDataForIdentifier","silent","recordTimingMetric","visitStart","visitStarted","cancelRender","canceled","visitEnd","completed","followRedirect","visitCompleted","fail","visitFailed","changeHistory","update","issueRequest","hasPreloadedResponse","simulateRequest","shouldIssueRequest","startRequest","recordResponse","finishRequest","requestStart","visitRequestStarted","isSuccessful","visitRequestCompleted","visitRequestFailedWithStatusCode","requestEnd","visitRequestFinished","loadResponse","cacheSnapshot","renderPage","performScroll","visitRendered","renderError","getCachedSnapshot","getCachedSnapshotForLocation","getPreloadedSnapshot","hasCachedSnapshot","loadCachedSnapshot","redirectedToLocation","visitProposedToLocation","goToSamePageAnchor","_response","contentTypeMismatch","_error","networkFailure","forceReloaded","scrollToRestoredPosition","visitScrolledToSamePageLocation","lastRenderedLocation","scrollPosition","metric","getTimingMetrics","then","frame","cancelAnimationFrame","BrowserAdapter","session","progressBar","showProgressBar","startVisit","visit","showVisitProgressBarAfterDelay","timeoutFailure","_visit","hideVisitProgressBar","pageInvalidated","_formSubmission","showFormProgressBarAfterDelay","hideFormProgressBar","visitProgressBarTimeout","progressBarDelay","formProgressBarTimeout","CacheObserver","deprecatedSelector","removeTemporaryElements","temporaryElements","temporaryElementsWithDeprecation","warn","FrameRedirector","formSubmitObserver","_location","shouldRedirect","findFrameElement","shouldSubmit","meta","submissionIsNavigatable","elementIsNavigatable","History","pageLoaded","onPopState","shouldHandlePopState","turbo","historyPoppedToLocationWithRestorationIdentifier","onPageLoad","updateRestorationData","additionalData","assumeControlOfScrollRestoration","previousScrollRestoration","scrollRestoration","relinquishControlOfScrollRestoration","pageIsLoaded","Navigator","proposeVisit","allowsVisitingLocationWithAction","currentVisit","submitForm","clearSnapshotCache","visitOptions","getActionForFormSubmission","currentAnchor","isRestorationToTop","oldURL","newURL","PageObserver","stage","initial","interpretReadyState","pageIsInteractive","pageIsComplete","pageWillUnload","interactive","pageBecameInteractive","ScrollObserver","onScroll","updatePosition","pageXOffset","pageYOffset","position","scrollPositionChanged","StreamMessageRenderer","permanentElementsInDocument","permanentElementInDocument","elementInStream","getPermanentElementMapForFragment","StreamObserver","sources","Set","inspectFetchResponse","fetchResponseFromEvent","fetchResponseIsStream","receiveMessageResponse","receiveMessageEvent","receiveMessageHTML","connectStreamSource","streamSourceIsConnected","disconnectStreamSource","receivedMessageFromStream","ErrorRenderer","replaceChild","replaceHeadAndBody","newHead","replaceableElement","scriptElements","PageRenderer","HTMLBodyElement","trackedElementsAreIdentical","mergeHead","replaceBody","currentHeadSnapshot","newHeadSnapshot","mergedHeadElements","mergeProvisionalElements","newStylesheetElements","copyNewHeadStylesheetElements","copyNewHeadScriptElements","activateNewBody","assignNewBody","loadingElements","newHeadStylesheetElements","all","newHeadScriptElements","newHeadElements","newHeadProvisionalElements","currentHeadProvisionalElements","isCurrentElementInElementList","elementList","isEqualNode","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","adoptNode","activateNewBodyScriptElements","newBodyScriptElements","SnapshotCache","size","snapshots","read","touch","write","clear","unshift","trim","PageView","snapshotCache","viewWillCacheSnapshot","cachedSnapshot","Preloader","preloadURL","extendURLWithDeprecatedProperties","defineProperties","deprecatedLocationPropertyDescriptors","absoluteURL","StreamActions","after","targetElements","forEach","templateContent","nextSibling","removeDuplicateTargetChildren","before","prepend","targetElement","preloader","pageObserver","cacheObserver","linkClickObserver","scrollObserver","streamObserver","formLinkClickObserver","frameRedirector","streamMessageRenderer","drive","formMode","disable","registerAdapter","renderStreamMessage","clearCache","setProgressBarDelay","delay","setFormMode","mode","applicationAllowsFollowingLinkToLocation","getActionForLink","applicationAllowsVisitingLocation","notifyApplicationAfterVisitingLocation","notifyApplicationAfterPageLoad","notifyApplicationAfterVisitingSamePageLocation","notifyApplicationBeforeCachingSnapshot","notifyApplicationBeforeRender","_snapshot","_isPreview","notifyApplicationAfterRender","frameLoaded","notifyApplicationAfterFrameLoad","frameRendered","notifyApplicationAfterFrameRender","ev","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","newBody","timing","HashChangeEvent","submitterIsNavigatable","container","withinFrame","cache","resetCacheControl","setCacheControl","exemptPageFromCache","exemptPageFromPreview","setMetaContent","navigator$1","Turbo","freeze","setConfirmMethod","TurboFrameMissingError","getFrameElementById","activateElement","currentURL","right","StreamElement","performAction","beforeRenderEvent","duplicateChildren","c","existingChildren","flatMap","newChildrenIds","actionFunction","targetElementsById","targets","targetElementsByQuery","HTMLTemplateElement","description","newStream","StreamSourceElement","streamSource","EventSource","setConsumer","newConsumer","walk","RegExp","acc","camel","m","fetchResponseLoaded","_fetchResponse","currentFetchRequest","resolveVisitPromise","connected","hasBeenLoaded","ignoredAttributes","previousFrameElement","replaceChildren","appearanceObserver","loadingStyle","loadSourceURL","isIgnoringChangesTo","ignoringChangesToAttribute","sourceURL","loadFrameResponse","handleUnvisitableFrameResponse","proposeVisitIfNavigatedWithAction","shouldInterceptNavigation","navigateFrame","currentNavigationElement","newFrame","_newElement","newFrameElement","extractForeignFrameElement","willHandleFrameMissingFromResponse","handleFrameMissingFromResponse","withCurrentNavigationElement","pageSnapshot","visitResponse","Response","throwFrameMissingError","wrapped","CSS","escape","formActionIsVisitable","define","currentScript","TurboCableStreamSourceElement","getConsumer","subscribeTo","received","dispatchMessageEvent","subscriptionConnected","subscriptionDisconnected","MessageEvent","signed_stream_name","dataset","isBodyInit","formMethod","HTMLButtonElement","HTMLInputElement","determineFormMethod","overrideMethod","determineFetchMethod","EventListener","eventOptions","unorderedBindings","bindingConnected","binding","bindingDisconnected","handleEvent","extendedEvent","immediatePropagationStopped","extendEvent","bindings","hasBindings","sort","left","leftIndex","rightIndex","Dispatcher","application","eventListenerMaps","Map","eventListeners","eventListener","fetchEventListenerForBinding","clearEventListeners","clearEventListenersForBinding","handleError","removeMappedEventListenerFor","eventListenerMap","fetchEventListenerMapForEventTarget","cacheKey","fetchEventListener","createEventListener","defaultActionDescriptorFilters","stopPropagation","prevent","descriptorPattern","camelize","char","namespaceCamelize","capitalize","dasherize","isSomething","hasProperty","property","allModifiers","Action","descriptor","schema","defaultEventNames","getDefaultEventNameForElement","methodName","keyFilter","forToken","descriptorString","eventTargetName","parseActionDescriptorString","eventFilter","shouldIgnoreKeyboardEvent","filters","keyFilterDissatisfied","standardFilter","keyMappings","shouldIgnoreMouseEvent","typecast","ctrl","alt","shift","modifier","button","select","textarea","o_O","Binding","actionEvent","prepareActionEvent","willBeInvokedByEvent","applyEventModifiers","invokeWithEvent","controller","actionDescriptorFilters","passes","currentTarget","logDebugActivity","KeyboardEvent","scope","containsElement","ElementObserver","mutationObserverInit","childList","subtree","mutationObserver","MutationObserver","mutations","processMutations","pause","takeRecords","matchElementsInTree","removeElement","addElement","mutation","processMutation","processAttributeChange","processRemovedNodes","removedNodes","processAddedNodes","addedNodes","elementAttributeChanged","matchElement","nodes","elementFromNode","processTree","elementIsActive","tree","processor","nodeType","ELEMENT_NODE","elementMatched","elementUnmatched","AttributeObserver","elementObserver","elementMatchedAttribute","elementUnmatchedAttribute","elementAttributeValueChanged","Multimap","valuesByKey","prune","del","hasKey","hasValue","getValuesForKey","getKeysForValue","_key","_values","SelectorObserver","_selector","matchesByElement","selectorMatchElement","selectorMatched","selectors","selectorUnmatched","_attributeName","matchedBefore","StringMapObserver","stringMap","attributeOldValue","knownAttributeNames","refreshAttribute","oldValue","getStringMapKeyForAttribute","stringMapKeyAdded","stringMapValueChanged","stringMapKeyRemoved","currentAttributeNames","recordedAttributeNames","attribute","TokenListObserver","attributeObserver","tokensByElement","tokensMatched","readTokensForElement","unmatchedTokens","matchedTokens","refreshTokensForElement","tokensUnmatched","tokens","tokenMatched","tokenUnmatched","previousTokens","currentTokens","firstDifferingIndex","zip","findIndex","previousToken","currentToken","tokenString","parseTokenString","ValueListObserver","tokenListObserver","parseResultsByToken","valuesByTokenByElement","fetchParseResultForToken","fetchValuesByTokenForElement","elementMatchedValue","elementUnmatchedValue","parseResult","parseToken","valuesByToken","parseValueForToken","BindingObserver","bindingsByAction","valueListObserver","actionAttribute","disconnectAllActions","connectAction","disconnectAction","ValueObserver","receiver","stringMapObserver","valueDescriptorMap","invokeChangedCallbacksForDefaultValues","invokeChangedCallback","writer","defaultValue","valueDescriptorNameMap","valueDescriptors","rawValue","rawOldValue","changedMethodName","changedMethod","reader","descriptors","hasMethodName","TargetObserver","targetsByName","disconnectAllTargets","connectTarget","disconnectTarget","targetConnected","targetDisconnected","readInheritableStaticArrayValues","propertyName","ancestors","getAncestorsForConstructor","getOwnStaticArrayValues","getPrototypeOf","reverse","OutletObserver","outletsByName","outletElementsByName","selectorObserverMap","attributeObserverMap","outletDefinitions","outletName","setupSelectorObserverForOutlet","setupAttributeObserverForOutlet","dependentContexts","observer","disconnectAllOutlets","stopSelectorObservers","stopAttributeObservers","outlet","getOutlet","connectOutlet","getOutletFromMap","disconnectOutlet","hasOutlet","hasOutletController","controllerAttribute","getOutletNameFromOutletAttributeName","updateSelectorObserverForOutlet","outletConnected","outletDisconnected","selectorObserver","attributeNameForOutletName","outlets","getSelectorForOutletName","outletAttributeForScope","outletDependencies","dependencies","router","modules","controllerConstructor","dependentControllerIdentifiers","identifiers","contexts","getControllerForElementAndIdentifier","Context","functionName","bindingObserver","dispatcher","valueObserver","targetObserver","outletObserver","initialize","invokeControllerMethod","getOwnKeys","getOwnPropertyNames","extendWithReflect","extended","testReflectExtension","Module","shadowConstructor","shadowProperties","shadowingDescriptor","getOwnPropertyDescriptor","getShadowedDescriptor","getShadowProperties","shadow","blessedProperties","blessing","getBlessedProperties","blessDefinition","contextsByScope","connectedContexts","connectContextForScope","fetchContextForScope","disconnectContextForScope","ClassMap","getDataKey","getAll","getAttributeName","getAttributeNameForKey","DataMap","Guide","warnedKeysByObject","warnedKeys","attributeValueContainsToken","TargetSet","targetName","targetNames","findTarget","findLegacyTarget","findAllTargets","findAllLegacyTargets","getSelectorForTargetName","findElement","findAllElements","targetAttributeForScope","getLegacySelectorForTargetName","deprecate","targetDescriptor","targetAttribute","revisedAttributeName","guide","OutletSet","controllerElement","outletNames","findOutlet","findAllOutlets","queryElements","matchesElement","Scope","controllerSelector","documentScope","isDocumentScope","ScopeObserver","scopesByIdentifierByElement","scopeReferenceCounts","parseValueForElementAndIdentifier","scopesByIdentifier","fetchScopesByIdentifierForElement","createScopeForElementAndIdentifier","referenceCount","scopeConnected","scopeDisconnected","Router","scopeObserver","modulesByIdentifier","loadDefinition","unloadIdentifier","connectModule","afterLoad","disconnectModule","getContextForElementAndIdentifier","proposeToConnectScopeForElementAndIdentifier","defaultSchema","tab","esc","space","up","down","home","end","page_up","page_down","objectFromEntries","n","array","memo","k","v","getOutletController","getControllerAndEnsureConnectedScope","outletController","parseValueDefinitionPair","typeDefinition","payload","typeFromObject","typeObject","hasType","hasDefault","fullObject","onlyType","onlyDefault","parseValueTypeConstant","typeFromDefaultValue","parseValueTypeDefault","parseValueTypeObject","typeFromConstant","parseValueTypeDefinition","constant","defaultValuesByType","constantFromType","defaultValueForDefinition","hasCustomDefaultValue","readers","writers","valueDescriptorForTokenAndTypeDefinition","Boolean","boolean","number","writeJSON","Controller","shouldLoad","_identifier","_application","blessings","classDefinition","targetDefinition","valueDefinitionPairs","pairs","getOwnStaticObjectPairs","readInheritableStaticObjectPairs","propertyDescriptorMap","valueDefinitionPair","valueDescriptor","propertiesForValueDefinitionPair","outletDefinition","camelizedName","outletElement","propertiesForOutletDefinition","debug","logFormattedMessage","register","load","registerActionOption","rest","unload","controllers","onerror","groupCollapsed","groupEnd","generateID","immediate","timeout","callNow","isEqual","Stimulus","Settings","settings","class","isMultiple","isFullOpen","intervalMove","alwaysOpen","showSearch","searchPlaceholder","searchText","searchingText","searchHighlight","closeOnSelect","contentLocation","contentPosition","openPosition","placeholderText","allowDeselect","hideSelected","showOptionTooltips","minSelected","maxSelected","timeoutDelay","maxValuesShown","maxValuesMessage","Optgroup","optgroup","label","selectAll","selectAllText","closable","Option","display","mandatory","Store","selectType","setData","validateDataArray","dataObj","validateOption","partialToFullData","dataFinal","optOptions","setSelectedBy","getSelected","getData","getDataOptions","addOption","selectedType","selectedValues","firstOption","hasSelected","getSelectedOptions","opt","getSelectedIDs","selectedIDs","op","getOptgroupByID","getOptionByID","searchFilter","includeOptgroup","dataSearch","getSelectType","Render","store","callbacks","main","single","valueText","valueDelete","valueOut","deselect","deselectPath","arrow","arrowClose","arrowOpen","openAbove","openBelow","searchHighlighter","searching","addable","addablePath","list","optgroupLabel","optgroupLabelText","optgroupActions","optgroupSelectAll","optgroupSelectAllBox","optgroupSelectAllCheck","optgroupClosable","optionDelete","highlighted","mainDiv","contentDiv","updateClassStyles","updateAriaAttributes","enable","path","moveContent","selectedId","selectedOption","ensureElementInView","cssText","role","tabIndex","onkeydown","highlight","onclick","shouldDelete","beforeChange","setSelected","updateDeselectAll","afterChange","deselectSvg","createElementNS","arrowPath","svg","mainFocus","eventType","preventScroll","placeholderOption","renderValues","renderMultipleValues","renderSingleValue","selectedSingle","singleValue","innerText","currentNodes","childNodes","removeNodes","hasChildNodes","shouldAdd","multipleValue","insertAdjacentElement","deleteDiv","deleteSvg","deletePath","searchDiv","listDiv","putContent","moveContentAbove","moveContentBelow","searchReturn","readOnly","oninput","plus","plusPath","inputValue","runFinish","oo","newOption","addableValue","searchFocus","getOptions","notPlaceholder","notDisabled","notHidden","query","dir","prevOption","prevParent","selectOption","selectParent","errorDiv","renderSearching","searchingDiv","renderOptions","noResults","optgroupEl","allSelected","selectAllSvg","selectAllBox","selectAllCheck","currentSelected","newSelected","optgroupClosableSvg","optgroupClosableArrow","optionEl","dataClass","highlightText","elementID","shouldUpdate","destroy","str","completedString","regex","matchStartPosition","matchEndPosition","originalTextFoundByRegex","mainHeight","offsetHeight","contentHeight","containerRect","getBoundingClientRect","margin","top","height","scrollY","scrollX","cTop","scrollTop","offsetTop","cBottom","clientHeight","eTop","eBottom","mainRect","innerHeight","hasSelectedItems","deselectButton","hideClass","Select","listen","valueChange","passive","observeCall","changeListen","hideUI","showUI","onValueChange","getSelectedValues","classChanged","optgroupOptionChanged","nodeName","onClassChange","onDisabledChange","onOptionsChange","getDataFromOptgroup","getDataFromOption","selectall","selectalltext","optgroupOptions","updateSelect","updateOptions","createOptgroup","createOption","info","optionClass","kebabCase","SlimSelect","config","beforeOpen","afterOpen","beforeClose","afterClose","windowResize","windowScroll","documentClick","hasClass","parentByClass","hasClassInTree","windowVisibilityChange","selectEl","ssid","debounceEvents","multiple","selectAriaLabel","selectAriaLabelledBy","slim","err","dataClean","runAfterChange","searchResp","catch","change","part_id","vehicle_code","code","static","versionId","formTarget","modalTarget","selected_subpart","with_subparts","edit","addToName","replace_to_name","notificationId","updateRank","rank","addUpgradingVersion","parent","fromId","fromName","toId","toName","cnt","insertAdjacentHTML","removeUpgradingVersion","dataId","checkDelete","checked","openModal","closeModal","toggleSubpart","level","isTableStructure","levelDiv","nextElement","nextElementSibling","getNextLevel","nextLevel","toggleIcon","expandedIcon","collapsedIcon","iconPlus","currentNextLevel","lim","h","p2b","n2b","b2n","n2p","map$1","A","B","C","D","E","F","f","hex","h1","h2","eq","HUE_RE","hsl2rgbn","hsv2rgbn","hwb2rgbn","w","rgb","rgb2hsl","r","hueValue","calln","hsl2rgb","hue","Z","Y","X","W","V","U","T","S","R","Q","P","O","N","M","L","K","G","H","I","J","names$1","OiceXe","antiquewEte","aqua","aquamarRe","azuY","beige","bisque","black","blanKedOmond","Xe","XeviTet","bPwn","burlywood","caMtXe","KartYuse","KocTate","cSO","cSnflowerXe","cSnsilk","crimson","cyan","xXe","xcyan","xgTMnPd","xWay","xgYF","xgYy","xkhaki","xmagFta","xTivegYF","xSange","xScEd","xYd","xsOmon","xsHgYF","xUXe","xUWay","xUgYy","xQe","xviTet","dAppRk","dApskyXe","dimWay","dimgYy","dodgerXe","fiYbrick","flSOwEte","foYstWAn","fuKsia","gaRsbSo","ghostwEte","gTd","gTMnPd","Way","gYF","gYFLw","gYy","honeyMw","hotpRk","RdianYd","Rdigo","ivSy","khaki","lavFMr","lavFMrXsh","lawngYF","NmoncEffon","ZXe","ZcSO","Zcyan","ZgTMnPdLw","ZWay","ZgYF","ZgYy","ZpRk","ZsOmon","ZsHgYF","ZskyXe","ZUWay","ZUgYy","ZstAlXe","ZLw","lime","limegYF","lRF","magFta","maPon","VaquamarRe","VXe","VScEd","VpurpN","VsHgYF","VUXe","VsprRggYF","VQe","VviTetYd","midnightXe","mRtcYam","mistyPse","moccasR","navajowEte","navy","Tdlace","Tive","TivedBb","Sange","SangeYd","ScEd","pOegTMnPd","pOegYF","pOeQe","pOeviTetYd","papayawEp","pHKpuff","peru","pRk","plum","powMrXe","purpN","YbeccapurpN","Yd","Psybrown","PyOXe","saddNbPwn","sOmon","sandybPwn","sHgYF","sHshell","siFna","silver","skyXe","UXe","UWay","UgYy","snow","sprRggYF","stAlXe","tan","teO","tEstN","tomato","Qe","viTet","JHt","wEte","wEtesmoke","Lw","LwgYF","RGB_RE","to","modHSL","ratio","tmp","proto","fromObject","functionParse","exec","rgbParse","p1","p2","hwb2rgb","hsv2rgb","hueParse","Color","ret","unpacked","tkeys","nk","unpack","transparent","nameParse","_rgb","_valid","valid","rgbString","hexString","isShort","alpha","hslString","mix","color","weight","c1","c2","w2","p","w1","t","rgb1","rgb2","clearer","greyscale","val","opaquer","negate","lighten","darken","saturate","desaturate","rotate","deg","noop","uid","isNullOrUndef","isNumberFinite","isFinite","finiteOrDefault","valueOrDefault","toDimension","dimension","parseFloat","each","loopable","_elementsEqual","a0","ilen","v0","v1","datasetIndex","klen","isValidKey","_merger","tval","sval","merge","merger","current","mergeIf","_mergerIf","keyResolvers","resolveObjectKey","resolver","part","_splitKey","_getKeyResolver","_capitalize","defined","isFunction","setsEqual","item","PI","TAU","PITAU","INFINITY","POSITIVE_INFINITY","RAD_PER_DEG","HALF_PI","QUARTER_PI","TWO_THIRDS_PI","log10","sign","almostEquals","epsilon","niceNum","range","roundedRange","niceRange","fraction","isNumber","toPrimitive","isNonPrimitive","_setMinAndMaxByKey","toRadians","degrees","toDegrees","radians","_decimalPlaces","getAngleFromPoint","centrePoint","anglePoint","distanceFromXCenter","distanceFromYCenter","radialDistanceFromCenter","sqrt","angle","atan2","distance","distanceBetweenPoints","pt1","pt2","_angleDiff","_normalizeAngle","_angleBetween","sameAngleIsFullCircle","angleToStart","angleToEnd","startToAngle","endToAngle","_limitValue","_isBetween","_lookup","table","cmp","mid","hi","lo","_lookupByKey","last","ti","_rlookupByKey","arrayEvents","unlistenArrayEvents","stub","_chartjs","_arrayUnique","items","requestAnimFrame","throttled","argsToUse","ticking","_toLeftRightCenter","align","_alignStartEnd","_getStartAndCountOfVisiblePoints","points","animationsDisabled","pointCount","count","_sorted","iScale","vScale","_parsed","spanGaps","axis","minDefined","maxDefined","getUserBounds","getPixelForValue","distanceToDefinedLo","point","distanceToDefinedHi","_scaleRangesChanged","xScale","yScale","_scaleRanges","newRanges","xmin","xmax","ymin","ymax","changed","atEdge","elasticIn","sin","elasticOut","effects","linear","easeInQuad","easeOutQuad","easeInOutQuad","easeInCubic","easeOutCubic","easeInOutCubic","easeInQuart","easeOutQuart","easeInOutQuart","easeInQuint","easeOutQuint","easeInOutQuint","easeInSine","cos","easeOutSine","easeInOutSine","easeInExpo","easeOutExpo","easeInOutExpo","easeInCirc","easeOutCirc","easeInOutCirc","easeInElastic","easeOutElastic","easeInOutElastic","easeInBack","easeOutBack","easeInOutBack","easeInBounce","easeOutBounce","easeInOutBounce","isPatternOrGradient","getHoverColor","numbers","colors","intlCache","formatNumber","locale","formatter","Intl","NumberFormat","getNumberFormat","format","formatters","numeric","tickValue","ticks","chart","notation","delta","maxTick","calculateDelta","logDelta","numDecimal","minimumFractionDigits","maximumFractionDigits","logarithmic","remain","significand","Ticks","overrides","getScope$1","Defaults","_descriptors","_appliers","animation","backgroundColor","borderColor","datasets","devicePixelRatio","platform","getDevicePixelRatio","font","family","lineHeight","hover","hoverBackgroundColor","ctx","hoverBorderColor","hoverColor","indexAxis","interaction","includeInvisible","maintainAspectRatio","onHover","onClick","parsing","plugins","responsive","scale","scales","showLine","drawActiveElementsOnTop","describe","override","route","targetScope","scopeObject","targetScopeObject","privateName","writable","local","appliers","defaults","_scriptable","_indexable","_fallback","duration","easing","loop","active","resize","animations","autoPadding","padding","bottom","offset","beginAtZero","bounds","clip","grace","grid","lineWidth","drawOnChartArea","drawTicks","tickLength","tickWidth","_ctx","tickColor","border","dash","dashOffset","title","minRotation","maxRotation","mirror","textStrokeWidth","textStrokeColor","autoSkip","autoSkipPadding","labelOffset","minor","major","crossAlign","showLabelBackdrop","backdropColor","backdropPadding","_measureText","gc","longest","textWidth","measureText","_longestText","arrayOfThings","garbageCollect","save","jlen","thing","nestedThing","restore","gcLen","_alignPixel","pixel","currentDevicePixelRatio","halfWidth","clearCanvas","canvas","getContext","resetTransform","clearRect","drawPoint","drawPointLegend","xOffset","yOffset","cornerRadius","xOffsetW","yOffsetW","pointStyle","rotation","radius","rad","translate","drawImage","beginPath","ellipse","arc","closePath","moveTo","lineTo","SQRT1_2","rect","fill","borderWidth","stroke","_isPointInArea","area","clipArea","unclipArea","_steppedLineTo","previous","flip","midpoint","_bezierCurveTo","bezierCurveTo","cp1x","cp2x","cp1y","cp2y","decorateText","opts","strikethrough","underline","metrics","actualBoundingBoxLeft","actualBoundingBoxRight","actualBoundingBoxAscent","actualBoundingBoxDescent","yDecoration","strokeStyle","fillStyle","decorationWidth","drawBackdrop","oldColor","fillRect","renderText","strokeWidth","strokeColor","translation","textAlign","textBaseline","setRenderOpts","backdrop","strokeText","maxWidth","fillText","addRoundedRectPath","topLeft","bottomLeft","bottomRight","topRight","LINE_HEIGHT","FONT_STYLE","toLineHeight","numberOrZero","_readValueToProps","props","objProps","toTRBL","toTRBLCorners","toPadding","toFont","fallback","toFontString","inputs","cacheable","createContext","parentContext","_createResolver","scopes","prefixes","rootScopes","getTarget","finalRootScopes","_resolve","_cacheable","_scopes","_rootScopes","_getTarget","Proxy","deleteProperty","_keys","_cached","proxy","readKey","needsSubResolver","createSubResolver","_resolveWithPrefixes","getKeysFromAllScopes","ownKeys","storage","_storage","_attachContext","subProxy","descriptorDefaults","_proxy","_context","_subProxy","_stack","setContext","isScriptable","getValue","_resolveScriptable","isIndexable","arr","_resolveArray","_resolveWithContext","allKeys","configurable","scriptable","indexable","_allKeys","resolveFallback","getScope","addScopes","parentScopes","parentFallback","allScopes","addScopesFromKey","subGetTarget","resolveKeysFromAllScopes","_parseObjectDataRadialScale","_parsing","parsed","EPSILON","getPoint","skip","getValueAxis","splineCurve","firstPoint","middlePoint","afterPoint","next","d01","d12","s01","s12","fa","fb","capControlPoint","pt","_updateBezierControlPoints","controlPoints","cubicInterpolationMode","valueAxis","pointsLen","deltaK","mK","pointBefore","pointCurrent","pointAfter","slopeDelta","alphaK","betaK","tauK","squaredMagnitude","monotoneAdjust","iPixel","vPixel","monotoneCompute","splineCurveMonotone","prev","tension","capBezierPoints","inArea","inAreaPrev","inAreaNext","_isDomSupported","_getParentNode","domNode","parseMaxStyle","styleValue","parentProperty","valueInPixels","getComputedStyle","defaultView","positions","getPositionedStyle","styles","suffix","pos","getRelativePosition","borderBox","boxSizing","paddings","borders","box","touches","offsetX","offsetY","shadowRoot","useOffsetPos","clientX","clientY","getCanvasPosition","round1","retinaScale","forceRatio","forceStyle","pixelRatio","deviceHeight","deviceWidth","setTransform","supportsEventListenerOptions","passiveSupported","readUsedSize","el","getPropertyValue","getStyle","_pointInLine","_steppedInterpolation","_bezierInterpolation","cp1","cp2","getRtlAdapter","rtl","rectX","setWidth","xPlus","leftForLtr","itemWidth","getRightToLeftAdapter","_itemWidth","overrideTextDirection","direction","original","getPropertyPriority","setProperty","prevTextDirection","restoreTextDirection","propertyFn","between","compare","normalize","normalizeSegment","_boundSegment","segment","startBound","endBound","getSegment","prevValue","inside","subStart","shouldStart","shouldStop","_boundSegments","segments","sub","readStyle","borderCapStyle","borderDash","borderDashOffset","borderJoinStyle","styleChanged","prevStyle","replacer","getSizeForArea","chartArea","field","getDatasetClipArea","_clip","getDatasetArea","Animator","_charts","_running","_lastDate","_notify","anims","date","numSteps","currentStep","_refresh","_update","remaining","running","draw","_active","_total","tick","pop","_getAnims","charts","progress","cb","cur","_duration","animator","interpolators","factor","c0","Animation","cfg","currentValue","_fn","_easing","_start","_loop","_target","_prop","_from","_to","_promises","elapsed","promises","res","rej","resolved","Animations","_chart","_properties","configure","animationOptions","animatedProps","_animateOptions","newOptions","$shared","$animations","resolveTargetOptions","_createAnimations","anim","awaitAll","scaleClip","allowedOverflow","getSortedDatasetIndices","filterVisible","metasets","_getSortedDatasetMetas","applyStack","stack","dsIndex","singleMode","otherValue","found","isStacked","stacked","getOrCreateStack","stacks","stackKey","indexValue","subStack","getLastIndexInStack","positive","getMatchingVisibleMetas","updateStacks","_cachedMeta","_stacks","iAxis","vAxis","indexScale","valueScale","getStackKey","_top","_bottom","_visualValues","getFirstScaleId","clearStacks","isDirectUpdateMode","cloneIfNotShared","cached","shared","DatasetController","_cachedDataOpts","getMeta","_type","_data","_objectData","_sharedOptions","_drawStart","_drawCount","enableOptionSharing","supportsDecimation","$context","_syncList","datasetElementType","dataElementType","linkScales","_stacked","addElements","isPluginEnabled","updateIndex","getDataset","chooseId","xid","xAxisID","yid","yAxisID","rid","rAxisID","iid","iAxisID","vid","vAxisID","getScaleForId","rScale","getDatasetMeta","scaleID","_getOtherScale","reset","_destroy","_dataCheck","iAxisKey","vAxisKey","adata","convertObjectDataToArray","isExtensible","base","buildOrUpdateElements","resetNewElements","stackChanged","oldStacked","_resyncElements","scopeKeys","datasetScopeKeys","getOptionScopes","createResolver","sorted","parseArrayData","parseObjectData","parsePrimitiveData","isNotInOrderComparedToPrev","labels","getLabels","singleScale","xAxisKey","yAxisKey","getParsed","getDataElement","updateRangeFromParsed","parsedValue","NaN","getMinMax","canStack","otherScale","createStack","NEGATIVE_INFINITY","otherMin","otherMax","_skip","getAllParsedValues","getMaxOverflow","getLabelAndValue","getLabelForValue","toClip","defaultClip","resolveDatasetElementOptions","resolveDataElementOptions","dataIndex","raw","createDataContext","createDatasetContext","_resolveElementOptions","sharing","datasetElementScopeKeys","resolveNamedOptions","_resolveAnimations","transition","datasetAnimationScopeKeys","getSharedOptions","includeOptions","sharedOptions","_animationsDisabled","_getSharedOptions","firstOpts","previouslySharedOptions","updateSharedOptions","updateElement","_setStyle","removeHoverStyle","setHoverStyle","_removeDatasetHoverStyle","_setDatasetHoverStyle","numMeta","numData","_insertElements","_removeElements","move","updateElements","removed","_sync","_dataChanges","_onDataPush","_onDataPop","_onDataShift","_onDataSplice","newCount","_onDataUnshift","computeMinSampleSize","_cache","$bar","visibleMetas","getAllScaleValues","curr","_length","updateMinAndPrev","getPixelForTick","entry","startValue","endValue","barStart","barEnd","_custom","parseFloatBar","parseArrayOrPrimitive","isFloatBar","custom","setBorderSkipped","edge","borderSkipped","horizontal","borderProps","enableBorderRadius","parseEdge","orig","v2","startEnd","setInflateAmount","inflateAmount","DoughnutController","animateRotate","animateScale","cutout","circumference","spacing","aspectRatio","legend","generateLabels","useBorderRadius","borderRadius","fontColor","getDataVisibility","lineDash","lineDashOffset","lineJoin","legendItem","toggleDataVisibility","innerRadius","outerRadius","getter","_getRotation","_getCircumference","_getRotationExtents","isDatasetVisible","arcs","getMaxBorderWidth","getMaxOffset","maxSize","chartWeight","_getRingWeight","ratioX","ratioY","startAngle","endAngle","startX","startY","endX","endY","calcMax","calcMin","maxX","maxY","minX","minY","getRatioAndOffset","maxHeight","maxRadius","radiusLength","_getVisibleDatasetWeightTotal","total","calculateTotal","_getRingWeightOffset","_circumference","calculateCircumference","animationOpts","centerX","centerY","metaData","borderAlign","hoverBorderWidth","hoverOffset","ringWeightOffset","PolarAreaController","angleLines","circular","pointLabels","_updateRadius","minSize","cutoutPercentage","getVisibleDatasetCount","xCenter","yCenter","datasetStartAngle","getIndexAngle","defaultAngle","countVisibleElements","_computeAngle","getDistanceFromCenterForValue","BarController","categoryPercentage","barPercentage","grouped","_index_","_value_","bars","getBasePixel","isHorizontal","ruler","_getRuler","vpixels","_calculateBarValuePixels","ipixels","_calculateBarIndexPixels","center","_getStacks","currentParsed","iScaleValue","skipNull","_getStackCount","_getAxisCount","_getAxis","getFirstScaleIdForIndexAxis","indexScaleId","firstScaleAxisId","_getStackIndex","pixels","barThickness","_startPixel","_endPixel","stackCount","baseValue","minBarLength","actualBase","floating","barSign","startPixel","getPixelForDecimal","endPixel","getValueForPixel","halfGrid","getLineWidthForValue","maxBarThickness","Infinity","axisCount","percent","chunk","computeFlexCategoryTraits","thickness","computeFitCategoryTraits","axisID","axisNumber","stackIndex","rects","BubbleController","LineController","_dataset","_datasetIndex","_decimated","animated","maxGapLength","directUpdate","pointsCount","prevParsed","nullData","lastPoint","updateControlPoints","PieController","RadarController","_fullLoop","pointPosition","getPointPositionForValue","ScatterController","registry","getElement","DateAdapterBase","members","init","formats","diff","startOf","endOf","binarySearch","metaset","lookupMethod","_reversePixels","getRange","evaluateInteractionItems","getSortedVisibleDatasetMetas","getIntersectItems","useFinalPosition","isPointInArea","inRange","getNearestItems","distanceMetric","useX","useY","deltaX","deltaY","getDistanceMetricForAxis","minDistance","getCenterPoint","getNearestCartesianItems","getProps","getNearestRadialItems","getAxisItems","rangeMethod","intersectsItem","Interaction","modes","nearest","STATIC_POSITIONS","filterByPosition","filterDynamicPositionByAxis","sortByWeight","getCombinedMax","maxPadding","updateMaxPadding","boxPadding","updateDims","layout","getPadding","newWidth","outerWidth","newHeight","outerHeight","widthChanged","heightChanged","same","getMargins","marginForPositions","fitBoxes","boxes","refitBoxes","refit","fullSize","setBoxDims","placeBoxes","userPadding","placed","stackWeight","layouts","addBox","_layers","z","removeBox","layoutItem","minPadding","availableWidth","availableHeight","layoutBoxes","wrapBoxes","centerHorizontal","centerVertical","leftAndTop","rightAndBottom","vertical","buildLayoutBoxes","verticalBoxes","horizontalBoxes","beforeLayout","visibleVerticalBoxCount","vBoxMaxWidth","hBoxMaxHeight","buildStacks","setLayoutDims","updatePos","handleMaxPadding","BasePlatform","acquireContext","releaseContext","getMaximumSize","isAttached","updateConfig","BasicPlatform","EXPANDO_KEY","EVENT_TYPES","touchstart","touchmove","touchend","pointerenter","pointerdown","pointermove","pointerup","pointerleave","pointerout","isNullOrEmpty","eventListenerOptions","nodeListContains","nodeList","createAttachObserver","trigger","createDetachObserver","drpListeningCharts","oldDevicePixelRatio","onWindowResize","dpr","createResizeObserver","clientWidth","ResizeObserver","contentRect","listenDevicePixelRatioChanges","releaseObserver","unlistenDevicePixelRatioChanges","createProxyAndListen","native","fromNativeEvent","DomPlatform","renderHeight","renderWidth","displayWidth","displayHeight","initCanvas","proxies","$proxies","attach","detach","bbWidth","bbHeight","margins","containerSize","containerStyle","containerBorder","containerPadding","getContainerSize","tooltipPosition","final","newTicks","majorStart","majorEnd","ceil","offsetFromEdge","getTicksLimit","ticksLength","maxTicksLimit","sample","numItems","increment","getPixelForGridLine","offsetGridLines","validIndex","lineValue","getTickMarkLength","getTitleHeight","titleAlign","reverseAlign","Scale","_margins","paddingTop","paddingBottom","paddingLeft","paddingRight","labelRotation","_range","_gridLineItems","_labelItems","_labelSizes","_maxLength","_longestTextCache","_userMax","_userMin","_suggestedMax","_suggestedMin","_ticksLength","_borderValue","_dataLimitsCached","suggestedMin","suggestedMax","metas","getTicks","xLabels","yLabels","getLabelItems","_computeLabelItems","beforeUpdate","tickOpts","sampleSize","beforeSetDimensions","setDimensions","afterSetDimensions","beforeDataLimits","determineDataLimits","afterDataLimits","minmax","keepZero","_addGrace","beforeBuildTicks","buildTicks","afterBuildTicks","samplingEnabled","_convertTicksToLabels","beforeCalculateLabelRotation","calculateLabelRotation","afterCalculateLabelRotation","determinedMaxTicks","_tickSize","maxScale","maxChart","determineMaxTicks","ticksLimit","majorIndices","getMajorIndices","numMajorIndices","first","skipMajors","evenMajorSpacing","getEvenSpacing","factors","_factorize","calculateSpacing","avgMajorSpacing","afterAutoSkip","beforeFit","fit","afterFit","afterUpdate","reversePixels","_alignToPixels","alignToPixels","_callHooks","notifyPlugins","beforeTickToLabelConversion","generateTickLabels","afterTickToLabelConversion","numTicks","maxLabelDiagonal","_isVisible","labelSizes","_getLabelSizes","maxLabelWidth","widest","maxLabelHeight","highest","asin","titleOpts","gridOpts","titleHeight","tickPadding","angleRadians","labelHeight","labelWidth","_calculatePadding","_handleMargins","isRotated","labelsBelowTicks","offsetLeft","offsetRight","isFullSize","_computeLabelSizes","caches","widths","heights","tickFont","fontString","nestedLabel","widestLabelSize","highestLabelSize","_resolveTickFontOptions","valueAt","decimal","getDecimalForPixel","getBaseValue","createTickContext","optionTicks","rot","_computeGridLineItems","tl","borderOpts","axisWidth","axisHalfWidth","alignBorderValue","borderValue","alignedLineValue","tx1","ty1","tx2","ty2","x1","y1","x2","y2","positionAxisID","limit","step","optsAtIndex","optsAtIndexBorder","lineColor","tickBorderDash","tickBorderDashOffset","tickAndPadding","hTickAndPadding","lineCount","textOffset","_getXAxisLabelAlignment","_getYAxisLabelAlignment","halfCount","tickTextAlign","labelPadding","_computeLabelArea","drawBackground","drawGrid","drawLine","setLineDash","drawBorder","lastLineWidth","drawLabels","renderTextOptions","drawTitle","titleX","titleY","titleArgs","tz","gz","bz","_maxDigits","fontSize","TypedRegistry","isForType","isPrototypeOf","parentScope","isIChartComponent","itemDefaults","defaultRoutes","routes","propertyParts","sourceName","sourceScope","routeDefaults","registerDefaults","unregister","Registry","_typedRegistries","_each","addControllers","addPlugins","addScales","getController","_get","getPlugin","getScale","removeControllers","removeElements","removePlugins","removeScales","typedRegistry","reg","_getRegistryForType","_exec","itemReg","component","camelMethod","PluginService","_init","hook","_createDescriptors","plugin","_oldCache","_notifyStateChanges","localIds","allPlugins","getOpts","pluginOpts","createDescriptors","previousDescriptors","pluginScopeKeys","getIndexAxis","datasetDefaults","idMatchesAxis","axisFromPosition","determineAxis","scaleOptions","getAxisFromDataset","initOptions","chartDefaults","configScales","chartIndexAxis","scaleConf","boundDs","retrieveAxisFromDatasets","defaultId","getDefaultScaleIDFromAxis","defaultScaleOptions","defaultID","getAxisFromDefaultScaleID","mergeScaleConfig","initData","keyCache","keysCached","cachedKeys","generate","addIfFound","Config","_config","initConfig","_scopeCache","_resolverCache","datasetType","additionalOptionScopes","_cachedScopes","mainScope","resetCache","keyLists","chartOptionScopes","subPrefixes","getResolver","hasFunction","needContext","resolverCache","KNOWN_POSITIONS","positionIsHorizontal","compare2Level","l1","l2","onAnimationsComplete","onAnimationProgress","onProgress","getCanvas","instances","getChart","moveNumericKeys","intKey","Chart","invalidatePlugins","userConfig","initialCanvas","existingChart","OffscreenCanvas","_detectPlatform","_options","_aspectRatio","_metasets","_lastEvent","_listeners","_responsiveListeners","_sortedMetasets","_plugins","_hiddenIndices","attached","_doResize","resizeDelay","_initialize","bindEvents","_resizeBeforeDraw","_resize","newSize","newRatio","onResize","ensureScalesHaveIDs","axisOptions","buildOrUpdateScales","scaleOpts","updated","isRadial","dposition","dtype","scaleType","hasUpdated","_updateMetasets","_destroyDatasetMeta","_removeUnreferencedMetasets","buildOrUpdateControllers","newControllers","order","ControllerClass","_resetElements","animsDisabled","_updateScales","_checkEventBindings","_updateHiddenIndices","_minPadding","_updateLayout","_updateDatasets","_eventHandler","_updateHoverStyles","existingEvents","newEvents","unbindEvents","changes","_getUniformDataChanges","datasetCount","makeSet","changeSet","noArea","_idx","_updateDataset","layers","_drawDatasets","_drawDataset","getElementsAtEventForMode","setDatasetVisibility","_updateVisibility","_stop","toBase64Image","toDataURL","bindUserEvents","bindResponsiveEvents","_add","_remove","detached","updateHoverStyle","getActiveElements","setActiveElements","activeElements","lastActive","pluginId","replay","hoverOptions","deactivated","activated","inChartArea","_handleEvent","_getActiveElements","isClick","_isClickEvent","lastEvent","determineLastEvent","rThetaToXY","theta","pathArc","pixelMargin","innerR","spacingOffset","avNogSpacingRadius","angleOffset","outerStart","outerEnd","innerStart","innerEnd","angleDelta","halfThickness","innerLimit","computeOuterLimit","outerArcLimit","parseBorderRadius$1","outerStartAdjustedRadius","outerEndAdjustedRadius","outerStartAdjustedAngle","outerEndAdjustedAngle","innerStartAdjustedRadius","innerEndAdjustedRadius","innerStartAdjustedAngle","innerEndAdjustedAngle","outerMidAdjustedAngle","pCenter","p4","innerMidAdjustedAngle","p8","outerStartX","outerStartY","outerEndX","outerEndY","setStyle","lineCap","pathVars","paramsStart","paramsEnd","segmentStart","segmentEnd","outside","pathSegment","lineMethod","stepped","getLineMethod","fastPathSegment","prevX","lastY","avgX","countX","pointIndex","drawX","truncX","_getSegmentMethod","usePath2D","Path2D","LineElement","_path","_points","_segments","_pointsUpdated","segmentOptions","findStartAndEnd","chartContext","baseStyle","addStyle","st","p0","p0DataIndex","p1DataIndex","doSplitByStyles","splitByStyles","solidSegments","_computeSegments","_interpolate","_getInterpolationMethod","interpolated","segmentMethod","strokePathWithCache","strokePathDirect","inRange$1","hitRadius","getBarBounds","bar","half","skipOrLimit","skipX","skipY","addNormalRectPath","inflateRect","amount","refRect","ArcElement","selfJoin","fullCircles","chartX","chartY","rAdjust","nonZeroBetween","betweenAngles","withinRadius","halfAngle","halfRadius","radiusOffset","drawArc","inner","angleMargin","clipArc","outerAngleClip","innerAngleClip","clipWidth","clipSelf","BarElement","outer","maxW","maxH","parseBorderWidth","maxR","enableBorder","parseBorderRadius","boundingRects","addRectPath","mouseX","mouseY","inXRange","inYRange","PointElement","hoverRadius","BORDER_COLORS","BACKGROUND_COLORS","getBorderColor","getBackgroundColor","containsColorsDefinitions","plugin_colors","forceOverride","_args","chartOptions","containsColorDefenition","colorizer","colorizeDoughnutDataset","colorizePolarAreaDataset","colorizeDefaultDataset","getColorizer","cleanDecimatedDataset","cleanDecimatedData","plugin_decimation","algorithm","beforeElementsUpdate","xAxis","decimated","getStartAndCountOfVisiblePointsSimplified","threshold","samples","bucketWidth","sampledIndex","endIndex","maxAreaPoint","maxArea","nextA","avgY","avgRangeStart","avgRangeEnd","avgRangeLength","rangeOffs","rangeTo","pointAx","pointAy","lttbDecimation","minIndex","maxIndex","startIndex","xMin","dx","lastIndex","intermediateIndex1","intermediateIndex2","minMaxDecimation","_getBounds","_findSegmentEnd","_getEdge","_createBoundaryLine","boundary","linePoints","_pointsFromSegments","_shouldApplyFill","_resolveTarget","propagate","visited","_decodeFill","fillOption","parseFillOption","firstCh","decodeTargetIndex","addPointsBelow","sourcePoint","linesBelow","postponed","findPoint","pointValue","firstValue","lastValue","simpleArc","_drawfill","getLineByIndex","sourcePoints","below","getLinesBelow","_buildStackLine","_getTargetValue","computeCircularBoundary","_getTargetPixel","computeLinearBoundary","computeBoundary","lineOpts","above","fillColor","clipVertical","clipHorizontal","doFill","clipY","lineLoop","clipX","tpoints","targetSegments","tgt","subBounds","fillSources","fillSource","notShape","clipBounds","interpolatedLineTo","targetLoop","interpolatedPoint","afterDatasetsUpdate","$filler","beforeDraw","drawTime","beforeDatasetsDraw","beforeDatasetDraw","getBoxSize","labelOpts","boxHeight","boxWidth","usePointStyle","pointStyleWidth","itemHeight","Legend","_added","legendHitBoxes","_hoveredItem","doughnutMode","legendItems","columnSizes","lineWidths","buildLabels","labelFont","_computeTitleHeight","_fitRows","_fitCols","hitboxes","totalHeight","row","_itemHeight","heightLimit","totalWidth","currentColWidth","currentColHeight","col","legendItemText","calculateItemWidth","fontLineHeight","calculateLegendItemHeight","calculateItemHeight","calculateItemSize","adjustHitBoxes","rtlHelper","hitbox","_draw","defaultColor","halfFontSize","cursor","textDirection","drawOptions","SQRT2","yBoxTop","xBoxLeft","drawLegendBox","_textX","titleFont","titlePadding","topPaddingPlusHalfFontSize","_getLegendItemAt","hitBox","lh","onLeave","isListened","hoveredItem","sameItem","itemsEqual","plugin_legend","afterEvent","ci","Title","_padding","textSize","_drawArgs","fontOpts","plugin_title","titleBlock","createTitle","plugin_subtitle","positioners","average","xSet","xAverage","eventPosition","nearestElement","tp","pushOrConcat","toPush","splitNewlines","createTooltipItem","formattedValue","getTooltipSize","tooltip","footer","bodyFont","footerFont","titleLineCount","footerLineCount","bodyLineItemCount","combinedBodyLength","bodyItem","beforeBody","afterBody","titleSpacing","titleMarginBottom","displayColors","bodySpacing","footerMarginTop","footerSpacing","widthPadding","maxLineWidth","determineXAlign","yAlign","chartWidth","xAlign","caret","caretSize","caretPadding","doesNotFitWithAlign","determineAlignment","determineYAlign","getBackgroundPoint","alignment","paddingAndSize","alignX","alignY","getAlignedX","getBeforeAfterBodyLines","overrideCallbacks","defaultCallbacks","beforeTitle","tooltipItems","labelCount","afterTitle","beforeLabel","tooltipItem","labelColor","labelTextColor","bodyColor","labelPointStyle","afterLabel","beforeFooter","afterFooter","invokeCallbackWithFallback","Tooltip","_eventPosition","_size","_cachedAnimations","_tooltipItems","dataPoints","caretX","caretY","labelColors","labelPointStyles","labelTextColors","getTitle","getBeforeBody","getBody","bodyItems","scoped","getAfterBody","getFooter","_createItems","itemSort","positionAndSize","backgroundPoint","external","drawCaret","tooltipPoint","caretPosition","getCaretPosition","x3","y3","ptX","ptY","titleColor","_drawColorBox","colorX","rtlColorX","yOffSet","colorY","multiKeyBackground","outerX","innerX","strokeRect","drawBody","bodyAlign","bodyLineHeight","xLinePadding","fillLineOfText","bodyAlignForCalculation","textColor","drawFooter","footerAlign","footerColor","tooltipSize","quadraticCurveTo","_updateAnimationTarget","animX","animY","_willRender","hasTooltipContent","globalAlpha","positionChanged","_positionChanged","_ignoreReplayEvents","plugin_tooltip","afterInit","afterDraw","Colors","Decimation","Filler","SubTitle","_getLabelForValue","relativeLabelSize","minSpacing","LinearScaleBase","_startValue","_endValue","_valueRange","handleTickRangeOptions","setMin","setMax","minSign","maxSign","getTickLimit","maxTicks","stepSize","computeTickLimit","generationOptions","dataRange","precision","maxDigits","includeBounds","maxSpaces","rmin","rmax","countDefined","niceMin","niceMax","numSpaces","rounded","almostWhole","decimalPlaces","generateTicks$1","LinearScale","log10Floor","changeExponent","isMajor","tickVal","steps","rangeExp","rangeStep","LogarithmicScale","_zero","minExp","exp","startExp","lastTick","generateTicks","getTickBackdropHeight","measureLabelSize","determineLimits","updateLimits","limits","hLimits","vLimits","createPointLabelItem","itemOpts","outerDistance","drawingArea","extra","additionalAngle","pointLabelPosition","getPointPosition","yForAngle","getTextAlignForAngle","leftForTextAlign","isNotOverlapped","drawPointLabelBox","backdropLeft","backdropTop","backdropWidth","backdropHeight","pathRadiusLine","RadialLinearScale","animate","centerPointLabels","_pointLabels","_pointLabelItems","valueCount","pointLabelOpts","getPointLabelContext","plFont","setCenterPoint","buildPointLabelItems","fitWithPointLabels","leftMovement","rightMovement","topMovement","bottomMovement","scalingFactor","getValueForDistanceFromCenter","scaledDistance","pointLabel","createPointLabelContext","distanceFromCenter","getBasePosition","getPointLabelPosition","drawPointLabels","gridLineOpts","drawRadiusLine","INTERVALS","millisecond","common","second","minute","hour","day","week","month","quarter","year","UNITS","sorter","_adapter","parser","isoWeekday","_parseOpts","determineUnitForAutoTicks","minUnit","capacity","interval","MAX_SAFE_INTEGER","addTick","timestamps","ticksFromTimestamps","majorUnit","setMajorTicks","TimeScale","displayFormats","_unit","_majorUnit","_offsets","_normalized","normalized","_applyBounds","_getLabelBounds","getLabelTimestamps","timeOpts","_generate","_filterBetween","_getLabelCapacity","determineUnitForFormatting","determineMajorUnit","initOffsets","offsetAfterAutoskip","getDecimalForValue","weekday","hasWeekday","getDataTimestamps","tooltipFormat","datetime","fmt","_tickFormatFunction","minorFormat","majorFormat","offsets","_getLabelSize","ticksOpts","tickLabelWidth","cosRotation","sinRotation","tickFontSize","exampleTime","exampleLabel","prevSource","nextSource","prevTarget","nextTarget","span","CategoryScale","_addedLabels","added","addedLabels","addIfString","lastIndexOf","findOrAddLabel","TimeSeriesScale","_table","_minPos","_tableRange","_getTimestampsForTable","buildLookupTable","registerables","_classPrivateFieldLooseBase","privateKey","bgColors","flat","borderColors","bgClrs","bdClrs","_classPrivateFieldLooseKey","insertReplacement","rx","replacement","newParts","phrase","dollarRegex","defaultOnMissingKey","_onMissingKey","_apply","Translator","locales","_temp","onMissingKey","_apply2","pluralize","translateArray","smart_count","prevLocale","nanoid","_callbacks","_publish","DefaultStore","_publish2","setState","prevState","nextState","_len","VERSION","getFileNameAndExtension","fullFileName","lastDot","extension","md","markdown","mp4","mp3","jpg","png","webp","gif","heic","heif","yaml","yml","csv","tsv","avi","mks","mkv","mov","dicom","doc","docm","docx","dot","dotm","dotx","xla","xlam","xlc","xlf","xlm","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xlw","txt","conf","pdf","rar","tar","dmg","getFileType","file","_getFileNameAndExtens","fileExtension","encodeFilename","character","charCodeAt","encodeCharacter","getSafeFileId","instanceId","isRemote","remote","provider","hasFileStableId","fileType","relativePath","lastModified","generateFileID","supportsUploadProgress","userAgent","version","pad","getTimeStamp","getHours","getMinutes","getSeconds","justErrorsLogger","debugLogger","_len2","_key2","_len3","_key3","_len4","_key4","maxFileSize","minFileSize","maxTotalFileSize","maxNumberOfFiles","minNumberOfFiles","allowedFileTypes","requiredMetaFields","RestrictionError","_opts$isUserFacing","isRestriction","isUserFacing","Restricter","getI18n","_opts$restrictions","restrictions","validateAggregateRestrictions","existingFiles","addingFiles","nonGhostFiles","isGhost","totalFilesSize","_f$size","sizeAllowed","prettierBytes","validateSingleFile","allowedFileTypesString","types","validate","addingFile","validateMinNumberOfFiles","getMissingRequiredMetaFields","fileName","missingFields","addBulkFilesFailed","youCanOnlyUploadX","youHaveToAtLeastSelectX","aggregateExceedsSize","exceedsSize","missingRequiredMetaField","missingRequiredMetaFieldOnFile","inferiorSize","youCanOnlyUploadFileTypes","noMoreFilesAllowed","noDuplicates","companionError","authAborted","companionUnauthorizeHint","failedToUpload","noInternetConnection","connectedToInternet","noFilesFound","noSearchResults","selectX","allFilesFromFolderNamed","openFolderNamed","logOut","resetFilter","loadedXFiles","authenticateWithTitle","authenticateWith","signInWithGoogle","searchImages","enterTextToSearch","resetSearch","emptyFolderAdded","addedNumFiles","folderAlreadyAdded","folderAdded","additionalRestrictionsFailed","unnamed","_Symbol$for","_Symbol$for2","defaultUploadState","totalProgress","allowNewUpload","recoveredState","_restricter","_storeUnsubscribe","_emitter","_preProcessors","_uploaders","_postProcessors","_informAndEmit","_checkRequiredMetaFieldsOnFile","_checkRequiredMetaFields","_assertNewUploadAllowed","_transformFile","_startIfAutoProceed","_checkAndUpdateFileState","_addListeners","_updateOnlineStatus","_requestClientById","_createUpload","_getUpload","_removeUpload","_runUpload","for","Uppy","_opts","_runUpload2","_removeUpload2","_getUpload2","_createUpload2","_addListeners2","_checkAndUpdateFileState2","_startIfAutoProceed2","_transformFile2","_assertNewUploadAllowed2","_checkRequiredMetaFields2","_checkRequiredMetaFieldsOnFile2","_informAndEmit2","scheduledAutoProceed","wasOffline","calculateProgress","throttle","fileInState","getFile","percentage","canHavePercentage","bytesTotal","setFileState","bytesUploaded","calculateTotalProgress","updateOnlineStatus","defaultLocale","autoProceed","allowMultipleUploadBatches","onBeforeFileAdded","onBeforeUpload","infoTimeout","merged","i18nInit","currentUploads","capabilities","uploadProgress","individualCancellation","resumableUploads","i18n","updateAll","iteratePlugins","patchFilesState","filesWithNewState","existingFilesState","fromEntries","_ref","fileID","newFileState","translator","i18nArray","setOptions","newOpts","setMeta","resetProgress","defaultProgress","uploadComplete","uploadStarted","updatedFiles","clearUploadedFiles","addPreProcessor","removePreProcessor","addPostProcessor","removePostProcessor","addUploader","removeUploader","updatedMeta","setFileMeta","newMeta","getFiles","getFilesByIds","ids","getObjectOfFilesPerState","filesObject","inProgressFiles","newFiles","startedFiles","uploadStartedFiles","pausedFiles","completeFiles","erroredFiles","inProgressNotPausedFiles","processingFiles","isPaused","preprocess","postprocess","isUploadStarted","isAllComplete","isAllErrored","isAllPaused","isUploadInProgress","isSomeGhost","validateRestrictions","checkIfFileAlreadyExists","addFile","nextFilesState","validFilesToAdd","errors","restrictionErrors","firstValidFileToAdd","addFiles","fileDescriptors","nonRestrictionErrors","subError","AggregateError","removeFiles","fileIDs","updatedUploads","removedFiles","fileIsNotRemoved","uploadFileID","uploadID","newFileIDs","stateUpdate","removedFileIDs","removeFile","pauseResume","pauseAll","updatedFile","resumeAll","retryAll","filesToRetry","successful","forceAllowNewUpload","cancelAll","retryUpload","logout","_provider","inProgress","sizedFiles","unsizedFiles","progressMax","currentProgress","totalSize","_file$progress$bytesT","averageSize","uploadedSize","_window$navigator$onL","onLine","getID","use","Plugin","existsPluginAlready","msg","install","foundPlugin","removePlugin","instance","uninstall","updatedState","_temp2","hideInfo","isComplexMessage","registerRequestClient","client","getRequestClientForFile","requestClient","requestClientId","addResultData","currentUpload","upload","_classPrivateFieldLoo","onBeforeUploadResult","currentlyUploadingFiles","waitingFileIDs","userFacingErrors","firstErrors","additionalErrors","_ref2","missingRequiredMetaFields","fileDescriptorOrFile","fileDescriptor","getFileName","preview","filesToAdd","fileToAdd","_existingFiles$newFil","newFile","onBeforeFileAddedResult","errorHandler","errorMsg","_file$name","newError","uploadStalledWarningRecentlyEmitted","onUploadStarted","filesFiltered","exists","filesState","uploadResp","uploadURL","allowMultipleUploads","getCurrentUpload","u","defaultProps","ref","__k","__","__b","__e","__c","__v","__i","__u","vnode","__P","__d","__n","namespaceURI","$","__r","debounceRendering","contextType","__E","__h","_sb","__s","getDerivedStateFromProps","componentWillMount","componentDidMount","componentWillReceiveProps","shouldComponentUpdate","componentWillUpdate","componentDidUpdate","getChildContext","getSnapshotBeforeUpdate","q","diffed","createTextNode","is","__m","__html","unmount","componentWillUnmount","isDOMElement","getDerivedStateFromError","componentDidCatch","forceUpdate","BasePlugin","uppy","getPluginState","setPluginState","addTarget","_updateUI","UIPlugin","getTargetPlugin","targetPlugin","cause","Target","mount","callerPluginName","isTargetDOMEl","uppyRootElement","latestArgs","calling","replaceTargetContent","onMount","_classPrivateFieldLoo2","_this$el","onUnmount","emaFilter","newValue","previousSmoothedValue","halfLife","dt","STATE_ERROR","STATE_WAITING","STATE_PREPROCESSING","STATE_UPLOADING","STATE_POSTPROCESSING","STATE_COMPLETE","calculateProcessingProgress","progressValue","prettyETA","seconds","rawSeconds","hours","minutes","padStart","UploadBtn","uploadState","startUpload","uploadBtnClassNames","uploadBtnText","RetryBtn","focusable","viewBox","CancelBtn","fillRule","cx","cy","PauseResumeButton","DoneBtn","doneButtonHandler","LoadingSpinner","ProgressBarProcessing","ProgressDetails","numUploads","totalUploadedSize","totalETA","ifShowFilesUploadedOfTotal","FileUploadCount","UploadNewlyAddedFiles","ProgressBarUploading","showProgressDetails","showUploadNewlyAddedFiles","ProgressBarComplete","ProgressBarError","errorMessage","alert","hideUploadButton","hidePauseResumeButton","hideCancelButton","hideRetryButton","hideAfterFinish","getProgressValue","isHidden","getIsHidden","showUploadBtn","showCancelBtn","showPauseResumeBtn","showRetryBtn","showDoneBtn","progressClassNames","getIsIndeterminate","uploading","uploadFailed","paused","retry","done","filesUploadedOfTotal","dataUploadedOfTotal","xTimeLeft","uploadXFiles","uploadXNewFiles","xMoreFilesAdded","showErrorDetails","getUploadingState","_lastUpdateTime","_previousUploadedBytes","_previousSpeed","_previousETA","_computeSmoothETA","_onUploadStart","StatusBar","_computeSmoothETA2","pv","performance","newFilesOrRecovered","uploaded","totalBytes","_classPrivateFieldLoo3","uploadedBytesSinceLastTick","_classPrivateFieldLoo4","currentSpeed","filteredSpeed","instantETA","updatedPreviousETA","filteredETA","FadeIn","componentWillEnter","transform","componentWillLeave","getKey","_vnode$key","getChildMapping","mergeChildMappings","getValueForKey","nextKeysPending","pendingKeys","prevKey","childMapping","nextKey","pendingNextKey","TransitionGroup","refs","performAppear","performEnter","performLeave","currentlyTransitioningKeys","keysToAbortLeave","keysToEnter","keysToLeave","initialChildMapping","nextProps","nextChildMapping","prevChildMapping","hasPrev","hasNext","_finishAbort","componentWillAppear","_handleDoneAppearing","componentDidAppear","currentChildMapping","_handleDoneEntering","componentDidEnter","_handleDoneLeaving","componentDidLeave","childFactory","transitionLeave","transitionName","transitionAppear","transitionEnter","transitionLeaveTimeout","transitionEnterTimeout","transitionAppearTimeout","childrenToRender","_ref3","child","_ptgLinkedRefs","linkRef","Informer","DATA_URL_PATTERN","isObjectURL","isPreviewSupported","HTMLImageElement","process","versions","Buffer","ifd0","exif","makerNote","userComment","gps","interop","ifd1","jfif","xmp","iptc","icc","fromCharCode","TextDecoder","le","Uint8Array","byteOffset","byteLength","ArrayBuffer","DataView","_swapDataView","buffer","_swapArrayBuffer","_swapBuffer","dataView","_lengthToEnd","toUint8","subarray","getUint8Array","getString","decode","getLatin1String","getUnicodeString","getUint16","getInt8","getUint8","getInt16","getInt32","getUint32","getFloat32","getFloat64","getFloat","getDouble","getUintBytes","getUint64","getUint","ensureChunk","kind","keyList","arrayBuffer","FileReader","onloadend","readAsArrayBuffer","tagKeys","tagValues","allValues","translateKeys","translateValues","reviveValues","needed","deps","applyInheritables","canBeFiltered","dict","translateTagSet","pick","finalizeFilters","tiff","ihdr","multiSegment","sanitize","mergeOutput","silentErrors","chunked","firstChunkSize","firstChunkSizeNode","firstChunkSizeBrowser","chunkSize","chunkLimit","useCached","setupFromTrue","setupFromUndefined","setupFromArray","setupFromObject","filterNestedSegmentTags","traverseTiffDependencyTree","checkLoadedPlugins","setupGlobalFilters","image","thumbnail","batchEnableWithBool","batchEnableWithUserValue","onlyTiff","Blob","setup","fileParser","canHandle","parsers","output","executeParsers","pushToErrors","assignToOutput","extractThumbnail","jpeg","getOrFindSegment","ensureSegmentChunk","Exifr","fileParsers","segmentParsers","fileReaders","tagRevivers","createDictionary","extendDictionary","fetchUrlAsArrayBuffer","readBlobAsArrayBuffer","chunkedProps","otherSegments","tiffBlocks","segmentsAndBlocks","tiffExtractables","inheritables","allFormatters","Options","findPosition","headerLength","normalizeInput","globalOptions","localOptions","canTranslate","translated","translateBlock","translateValue","DEFAULT","assignObjectToOutput","available","readChunk","extendOptions","injectSegment","createParser","createParsers","readSegments","findAppSegments","appSegments","mergeMultiSegments","mergedAppSegments","setupSegmentFinderArgs","wanted","unfinishedMultiSegment","readWhole","findAppSegmentsInRange","canReadNextChunk","nextChunkOffset","readNextChunk","chunkNumber","chunkCount","recordUnknownSegments","marker","unknownSegments","stopAfterSos","recordJpegSegments","jpegSegments","handleMultiSegments","te","se","parseHeader","headerParsed","parseTags","parseTag","parseTagValue","Uint16Array","Uint32Array","Int8Array","Int16Array","Int32Array","Float32Array","Float64Array","ie","parseIfd0Block","safeParse","createOutput","findIfd0Offset","ifd0Offset","findIfd1Offset","ifd1Offset","parseBlock","exifOffset","interopOffset","gpsOffset","parseExifBlock","parseGpsBlock","ne","parseInteropBlock","parseThumbnailBlock","ifd1Parsed","ae","de","pe","dimensionSwapped","scaleX","scaleY","ge","me","be","we","ranges","_tryExtend","_extend","allocUnsafe","uintView","ke","Oe","readChunked","fullyRead","chunksRead","safeWrapAddress","_readChunk","generatingThumbnails","thumbnailWidth","thumbnailHeight","thumbnailType","waitForThumbnailsBeforeUpload","ThumbnailGenerator","onFileAdded","addToQueue","onCancelRequest","queue","onFileRemoved","revokeObjectURL","onRestored","isRestored","onAllFilesRemoved","waitUntilAllProcessed","emitPreprocessCompleteForAll","queueProcessing","defaultThumbnailDimension","createThumbnail","targetWidth","targetHeight","originalUrl","createObjectURL","onload","Image","orientationPromise","ce","css","orientation","dimensions","getProportionalDimensions","rotatedImage","rotateImage","getImageData","toBlob","blob","dataURI","toFile","_opts$mimeType","dataURIData","binary","atob","bytes","canvasToBlob","resizeImage","img","aspect","maxSquare","protect","log2","sW","sH","setPreviewURL","processQueue","requestThumbnail","getFilesAndDirectoriesFromDirectory","directoryReader","oldEntries","logDropError","onSuccess","readEntries","newEntries","queueMicrotask","getAsFileSystemHandleFromEntry","isFile","isDirectory","createReader","dirEntries","isSameEntry","createPromiseToAddFileOrParseDirectory","lastResortFile","getNextRelativePath","handle","TimeoutError","AbortError","getDOMException","getAbortedReason","_PriorityQueue_queue","__classPrivateFieldGet","_PQueue_instances","_PQueue_carryoverConcurrencyCount","_PQueue_isIntervalIgnored","_PQueue_intervalCount","_PQueue_intervalCap","_PQueue_interval","_PQueue_intervalEnd","_PQueue_intervalId","_PQueue_timeoutId","_PQueue_queue","_PQueue_queueClass","_PQueue_pending","_PQueue_concurrency","_PQueue_isPaused","_PQueue_throwOnTimeout","_PQueue_doesIntervalAllowAnother_get","_PQueue_doesConcurrentAllowAnother_get","_PQueue_next","_PQueue_onResumeInterval","_PQueue_isIntervalPaused_get","_PQueue_tryToStartAnother","_PQueue_initializeIntervalIfNeeded","_PQueue_onInterval","_PQueue_processQueue","_PQueue_throwOnAbort","_PQueue_onEvent","enqueue","run","priority","comparator","trunc","it","lowerBound","dequeue","__classPrivateFieldSet","WeakSet","canInitializeInterval","job","_c","_d","carryoverConcurrencyCount","intervalCap","concurrency","autoStart","queueClass","throwOnTimeout","newConcurrency","function_","aborted","operation","milliseconds","timer","cancelablePromise","customTimers","timeoutError","pTimeout","race","addAll","functions","onEmpty","onSizeLessThan","onIdle","sizeBy","pending","__H","__N","__f","every","GoogleIcon","xmlns","DefaultForm","pluginName","onAuth","isGoogleDrive","onSubmit","defaultRenderForm","AuthView","pluginIcon","handleAuth","renderForm","User","username","Breadcrumb","getFolder","isLast","Breadcrumbs","breadcrumbsIcon","breadcrumbs","directory","requestPath","Header","showBreadcrumbs","remoteFileObjToLocal","_extends","STYLE_INNER","minHeight","STYLE_CONTENT","overflow","handleScroll","handleResize","rowHeight","renderRow","overscanCount","visibleRowCount","selection","styleInner","styleContent","SearchFilterInput","searchOnInput","searchTerm","showButton","inputLabel","clearSearchLabel","buttonLabel","clearSearch","inputClassName","buttonCSSClassName","setSearchText","validateAndSearch","handleInput","formEl","onInput","FooterActions","FileIcon","FolderIcon","minWidth","marginRight","VideoIcon","ItemIcon","itemIconString","referrerPolicy","isDisabled","restrictionError","isChecked","itemIconEl","showTitles","toggleCheckbox","recordShiftKeyPress","checkBoxClassName","onChange","onKeyDown","onMouseDown","htmlFor","ListItem","isCheckboxDisabled","handleFolderClick","Item","author","getItemIcon","viewType","GridLi","rel","currentSelection","uppyFiles","getNextFolder","isFolder","icon","folders","headerComponent","showSearchFilter","searchInputLabel","noResultsLabel","virtualList","rows","CloseWrapper","filterItems","filterInput","folder","isShiftKeyPressed","isHandlingScroll","preFirstRender","clearSelection","cancelPicking","didFirstRender","onFirstRender","shouldHandleScroll","scrollHeight","dashboard","hideAllPanels","_error$cause","isAuthError","getTagFile","tagFile","fileId","companionUrl","fileUrl","providerName","authorName","authorUrl","relDirPath","absDirPath","absolutePath","lastCheckbox","prevIndex","currentIndex","newSelection","reducedNewSelection","setLoading","prependPath","defaultPickerIcon","showFilter","loadAllFiles","_abortController","_withAbort","_list","_listFilesAndFolders","_recursivelyListAllFiles","_withAbort2","cancelRequest","_list2","nextPagePath","_listFilesAndFolders2","formatBreadcrumbs","_recursivelyListAllFiles2","onFiles","curPath","filterQuery","clearFilter","donePicking","authenticated","isSearchVisible","tearDown","newFolders","numFiles","revoked","manual_revoke_url","newState","authFormData","login","combinedFiles","combinedFolders","selectedItem","withRelDirPath","newItem","isEmpty","numNewFiles","viewOptions","_this","targetViewOptions","hasInput","headerProps","browserProps","renderAuthForm","defaultState","isInputMode","_updateFilesAndInputMode","_updateFilesAndInputMode2","nextPageQuery","searchedFor","resetPluginState","safeIsNaN","areInputsEqual","newInputs","lastInputs","memoizeOne","resultFn","memoized","newArgs","_i","lastResult","getActiveOverlayEl","dashboardEl","activeOverlayType","overlayEl","focusOnFirstNode","trapFocus","activeOverlayEl","focusableNodes","toArray","FOCUSABLE_ELEMENTS","focusedItemIndex","isFocusInOverlay","focusOnLastNode","isDragDropSupported","div","getIconByMime","defaultChoice","fileTypeGeneral","fileTypeSpecific","FilePreview","MetaErrorMessage","toggleFileCard","metaFields","metaFieldsString","missingMetaField","metaFieldId","metaFieldIdToName","fields","FilePreviewAndLink","showLinkToFileUploadResult","progressIndicatorTitle","isUploaded","ProgressIndicatorButton","onPauseResumeCancelRetry","ProgressCircleContainer","ProgressCircle","circleLength","FileProgress","truncateString","maxLength","charsToShow","frontChars","backChars","ErrorButton","FileInfo","isSingleFile","containerHeight","containerWidth","renderFileName","_props$file$remote","renderAuthor","renderFileSize","toggleAddFilesPanel","ReSelectButton","EditButton","uploadInProgressOrComplete","canEditFile","RemoveButton","CopyLinkButton","textToCopy","fallbackString","textArea","outline","boxShadow","background","magicCopyFailed","prompt","execCommand","copyLinkToClipboard","Buttons","showRemoveButton","openFileEditor","FileItem","handleRequestThumbnail","handleCancelThumbnail","isProcessing","uploadInProgress","showRemoveButtonAfterComplete","acquirers","FileList","isWide","itemsPerRow","fileIds","file1","file2","currentChunk","chunks","triggerFileInputClick","fileInput","triggerFolderInputClick","folderInput","triggerVideoCameraInputClick","mobileVideoFileInput","triggerPhotoCameraInputClick","mobilePhotoFileInput","onFileInputChange","handleInputChange","renderHiddenInput","refCallback","webkitdirectory","accept","renderHiddenCameraInput","nativeCameraFacingMode","photo","video","capture","renderMyDeviceAcquirer","renderPhotoCamera","renderVideoCamera","renderBrowseButton","onClickFn","renderDropPasteBrowseTagline","numberOfAcquirers","browseFiles","browseFolders","lowerFMSelectionType","fileManagerSelectionType","camelFMSelectionType","disableLocalFiles","browse","renderAcquirer","acquirer","_this$props$activePic","activePickerPanel","showPanel","renderAcquirers","acquirersWithoutLastTwo","lastTwoAcquirers","renderSourcesList","showNativePhotoCameraButton","showNativeVideoCameraButton","myDeviceKey","listWithoutLastTwo","lastTwo","renderList","renderPoweredByUppy","uppyBranding","note","proudlyDisplayPoweredByUppy","showAddFilesPanel","onDragOver","onDragLeave","onDrop","onPaste","fileCardFor","closeFileEditor","saveFileEditor","editors","uploadStates","UploadStatus","uploadingState","totalFileCount","RenderMetaFields","computedMetaFields","updateMeta","formState","fieldCSSClasses","required","newVal","FileCard","_getMetaFields","saveFileCard","showEditButton","storedMetaData","_file$meta$field$id","setFormState","handleSave","handleCancel","cachedChildren","setCachedChildren","setClassName","enterTimeoutRef","leaveTimeoutRef","animationFrameRef","addMoreFiles","addingMoreFiles","importFrom","dashboardWindowTitle","dashboardTitle","copyLinkToClipboardSuccess","copyLinkToClipboardFallback","copyLink","back","editFile","editImage","editing","finishEditingFile","saveChanges","myDevice","dropHint","uploadPaused","resumeUpload","pauseUpload","cancelUpload","xFilesSelected","uploadingXFiles","processingXFiles","poweredBy","addMore","editFileWithFilename","dropPasteFiles","dropPasteFolders","dropPasteBoth","dropPasteImportFiles","dropPasteImportFolders","dropPasteImportBoth","importFiles","recoveredXFiles","recoveredAllFiles","sessionRestored","reSelect","takePictureBtn","recordVideoBtn","memoize","createPromise","inline","hideProgressAfterFinish","closeModalOnClickOutside","closeAfterFinish","singleFileFullScreen","disableStatusBar","disableInformer","disableThumbnailGenerator","disablePageScrollWhenModalOpen","animateOpenClose","showSelectedFiles","browserBackButtonClose","theme","autoOpen","autoOpenFileEditor","onRequestCloseModal","_disabledNodes","_generateLargeThumbnailIfSingleFile","_openFileEditorWhenFilesAdded","_attachRenderFunctionToTarget","_isTargetSupported","_getAcquirers","_getProgressIndicators","_getEditors","_addSpecifiedPluginsFromOptions","_autoDiscoverPlugins","_addSupportedPluginIfNoTarget","Dashboard","_this$opts4","modalName","superFocus","lastFocusWasOnSuperFocusableEl","superFocusableEl","firstEl","createSuperFocus","ifFocusedOnUppyRecently","removeTarget","newTargets","callerPluginId","callerPluginType","_state$activePickerPa","showFileEditor","editor","selectFile","savedScrollPosition","savedActiveElement","isClosing","updateBrowserHistory","handleKeyDownInModal","_opts$manualClose","manualClose","_history$state","isModalOpen","requestCloseModal","setDarkModeCapability","isDarkModeOn","darkMode","handleSystemDarkModeChange","isDarkModeOnNow","webkitRelativePath","startListeningToResize","resizeObserver","uppyDashboardInnerEl","areInsidesReadyToBeVisible","makeDashboardInsidesVisibleAnywayTimeout","pluginState","isModalAndClosed","stopListeningToResize","recordIfFocusedOnUppyRecently","disableInteractiveElements","nodesToDisable","dashboardIsDisabled","_history$state2","handlePopState","_event$state","keyCode","handleClickOutside","handlePaste","handleRootPaste","clipboardData","handleDragOver","_this$opts$onDragOver","_this$opts","somePluginCanHandleRootDrop","canHandleRootDrop","canSomePluginHandleRootDrop","hasFiles","dataTransfer","doesEventHaveFiles","dropEffect","removeDragOverClassTimeout","isDraggingOver","handleDragLeave","_this$opts$onDragLeav","_this$opts2","handleDrop","_this$opts$onDrop","_this$opts3","handleRootDrop","executedDropErrorOnce","_options$logDropError","accumulator","fileSystemHandles","fileSystemHandle","getAsEntry","webkitGetAsEntry","getAsFile","fallbackApi","getDroppedFiles","handleKeyDownInInline","handlePasteOnBody","handleComplete","handleCancelRestore","thumbnailGenerator","fileForThumbnail","firstFile","isMetaEditorEnabled","isImageEditorEnabled","initEvents","showModalTrigger","removeEvents","superFocusOnEachUpdate","isFocusInUppy","isFocusNowhere","isInformerHidden","isModal","isSupported","progressindicators","isNoFiles","isSizeMD","isSizeHeightMD","dashboardClassName","showFileList","numberOfFilesForRecovery","numberOfGhosts","isMobileDevice","pluginID","_plugin$opts","installedPlugin","darkModeMediaQuery","matchMedia","isDarkModeOnFromTheStart","_this$darkModeMediaQu","informer","statusBar","_this$darkModeMediaQu2","_uppy","EventManager","onFilePause","targetFileID","onFileRemove","onPause","onRetry","onRetryAll","onPauseAll","onCancelAll","eventHandler","onResumeAll","abortOn","_this$then","abortPromise","removeAbortListener","_activeRequests","_queuedHandlers","_paused","_pauseTimer","_downLimit","_upperLimit","_rateLimitingTimer","_call","_queueNext","_next","_queue","_dequeue","_resume","_increaseLimit","RateLimitedQueue","_dequeue2","_queue2","_next2","_queueNext2","_call2","queueOptions","wrapSyncFunction","queuedRequest","wrapPromiseFunction","_this2","outerPromise","cancelError","innerPromise","createCancelError","rateLimit","cancelActive","internalRateLimitedQueue","NetworkError","xhr","isNetworkError","_aliveTimer","_isDone","_onTimedOut","_timeout","timeoutHandler","uploadStalled","setTypeInBlob","fieldName","allowedMetaFields","responseUrlFieldName","bundle","withCredentials","responseType","getResponseData","parsedResponse","getResponseError","validateStatus","_getFetcher","_uploadLocalFile","_uploadBundle","_getCompanionClientArgs","_uploadFiles","_handleUpload","XHRUpload","_uploadFiles2","_getCompanionClientArgs2","_uploadBundle2","_uploadLocalFile2","hasError","filesToEmit","_file$progress","filterFilesToEmitUploadStarted","requests","uploaderEvents","_options$method","onBeforeRequest","onUploadProgress","shouldRetry","onAfterRequest","onTimeout","retries","attempt","requestWithRetry","retryCount","XMLHttpRequest","statusText","onprogress","setRequestHeader","fetcher","lengthComputable","uploader","customError","buildResponseError","xhrUpload","addMetadata","subItem","createFormDataUpload","formPost","dataWithUpdatedType","createBundledUpload","uppyFetch","endpoint","_this$uppy$getState$x","optsFromState","_file$remote","fieldname","metadata","httpMethod","useFormData","allSettled","getQueue","removedHandler","removedFile","uploadPromise","uploadRemoteFile"],"sourceRoot":""}