iobroker.admin 7.4.1 → 7.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/admin/i18n/de/translations.json +1 -1
- package/adminWww/asset-manifest.json +13 -13
- package/adminWww/index.html +1 -1
- package/adminWww/static/js/288.7aa5c1cd.chunk.js +2 -0
- package/adminWww/static/js/288.7aa5c1cd.chunk.js.map +1 -0
- package/adminWww/static/js/4720.4d2f2008.chunk.js +2 -0
- package/adminWww/static/js/4720.4d2f2008.chunk.js.map +1 -0
- package/adminWww/static/js/6853.d4463ea5.chunk.js +2 -0
- package/adminWww/static/js/6853.d4463ea5.chunk.js.map +1 -0
- package/adminWww/static/js/{7137.59c61794.chunk.js → 7137.3d55bb2a.chunk.js} +2 -2
- package/adminWww/static/js/7137.3d55bb2a.chunk.js.map +1 -0
- package/adminWww/static/js/7424.25b03f3d.chunk.js +2 -0
- package/adminWww/static/js/7424.25b03f3d.chunk.js.map +1 -0
- package/adminWww/static/js/main.d9df93d8.js +2 -0
- package/adminWww/static/js/main.d9df93d8.js.map +1 -0
- package/io-package.json +222 -37
- package/package.json +4 -4
- package/adminWww/static/js/288.8fd137b7.chunk.js +0 -2
- package/adminWww/static/js/288.8fd137b7.chunk.js.map +0 -1
- package/adminWww/static/js/4720.f547d551.chunk.js +0 -2
- package/adminWww/static/js/4720.f547d551.chunk.js.map +0 -1
- package/adminWww/static/js/591.675e66af.chunk.js +0 -2
- package/adminWww/static/js/591.675e66af.chunk.js.map +0 -1
- package/adminWww/static/js/6853.be661c6e.chunk.js +0 -2
- package/adminWww/static/js/6853.be661c6e.chunk.js.map +0 -1
- package/adminWww/static/js/7137.59c61794.chunk.js.map +0 -1
- package/adminWww/static/js/main.d185596b.js +0 -2
- package/adminWww/static/js/main.d185596b.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"static/js/288.8fd137b7.chunk.js","mappings":"gIA0De,MAAMA,EAiBPC,WAAAA,CAAYC,EAAyBC,EAAcC,GAAkC,KAhB5EF,YAAM,OAENG,SAAoD,GAAG,KAElEC,QAAuE,KAAK,KAE1EC,eAAS,OAETC,QAAuD,KAAK,KAErDL,UAAI,OAEFC,gBAAU,OAErBK,aAAuB,EAAM,KA4BrCC,oBAAsB,CAACC,EAAwBC,KAI3C,GAHAC,KAAKL,QAAUK,KAAKL,SAAW,CAAC,EAG5BK,KAAKC,cAAcH,EAAIC,GAAM,CAC7B,IAAIG,EACAC,EACJ,GAAIJ,EAIA,GAHwB,YAApBC,KAAKT,YAAgD,aAApBS,KAAKT,YACtCa,EAAAA,EAAWC,WAAWN,GAEtBC,KAAKL,QAAQG,GAAK,CAClB,GAAIQ,KAAKC,UAAUP,KAAKL,QAAQG,MAASQ,KAAKC,UAAUR,GAKpD,OAJAG,EAAO,UACPF,KAAKL,QAAQG,GAAMC,CAK3B,MACIG,EAAO,MACPF,KAAKL,QAAQG,GAAMC,MAEpB,KAAIC,KAAKL,QAAQG,GAMpB,OALAI,EAAO,UACPC,EAASH,KAAKL,QAAQG,UACfE,KAAKL,QAAQG,EAIxB,CAEAE,KAAKJ,aAAc,EAEnBI,KAAKQ,eAAeV,EAAIC,GAExBC,KAAKR,SAASiB,SAAQC,GAClBA,EAAG,CACC,CACIZ,KACAC,MACAG,OACAC,aAIhB,GACF,KAmCFQ,kBAAqBC,IACbA,IAAgBZ,KAAKN,WACrBM,KAAKN,WAAY,EAEbM,KAAKR,SAASqB,QACdb,KAAKX,OACAyB,gBAAgBd,KAAKV,KAAO,GAAGU,KAAKV,SAAW,IAAKU,KAAKH,qBACzDkB,MAAK,KAEGf,KAAKgB,YAAW,GAAMD,MAAKpB,IACxBA,GACAsB,OAAOC,KAAKvB,GAASc,SAAQX,GACzBE,KAAKH,oBAAoBC,EAA0BH,EAAQG,KAEnE,GACF,IAELqB,OAAMC,GAAKC,OAAOC,MAAM,+BAA+BtB,KAAKV,UAAU8B,OAE/EpB,KAAKuB,uBAAsB,KACnBX,GAAeZ,KAAKN,YAC5BM,KAAKN,WAAY,EACjBM,KAAKuB,uBAAsB,GAC/B,EAlIAvB,KAAKX,OAASA,EACdW,KAAKV,KAAOA,EACZU,KAAKT,WAAaA,EAElBF,EAAOmC,0BAA0BxB,KAAKW,mBAEtCX,KAAKN,UAAYM,KAAKX,OAAOuB,cACzBZ,KAAKN,WACLM,KAAKW,mBAAkB,EAE/B,CAEUV,aAAAA,CAAcH,EAAYC,GAChC,OAAOD,EAAG2B,WAAW,GAAGzB,KAAKV,YAAcS,GAAOA,EAAIG,OAASF,KAAKT,WACxE,CAGUiB,cAAAA,CAAekB,EAAaC,GAClC,CAGJC,aAAAA,GACI,OAAO5B,KAAKJ,WAChB,CAmDAoB,UAAAA,CAAWa,GAIP,OAHAA,EAASA,GAAU7B,KAAKJ,YACxBI,KAAKJ,aAAc,GAEdiC,GAAU7B,KAAKP,mBAAmBqC,UAIvC9B,KAAKP,QAAUO,KAAKX,OACf0C,oBACG/B,KAAKT,WACLS,KAAKV,KAAO,GAAGU,KAAKV,QAAU,GAC9BU,KAAKV,KAAO,GAAGU,KAAKV,cAAgB,UAEvCyB,MAAKpB,IACFK,KAAKL,QAAUA,EACS,YAApBK,KAAKT,YAAgD,aAApBS,KAAKT,YACtC0B,OAAOC,KAAKlB,KAAKL,SAASc,SAAQX,GAAMM,EAAAA,EAAWC,WAAWL,KAAKL,QAAQG,MAGxEE,KAAKL,WAEfwB,OAAMC,IACHC,OAAOC,MAAM,8BAA8BtB,KAAKT,0BAA0BS,KAAKV,UAAU8B,KAClF,SAnBJpB,KAAKP,OAuBpB,CAGU8B,qBAAAA,CAAsBS,GAA8B,CA4B9DC,eAAAA,CAAgBvB,EAAyCwB,GAChDlC,KAAKR,SAAS2C,SAASzB,KACxBV,KAAKR,SAAS4C,KAAK1B,GAEU,IAAzBV,KAAKR,SAASqB,QAAgBb,KAAKN,WACnCM,KAAKX,OACAyB,gBAAgBd,KAAKV,KAAO,GAAGU,KAAKV,SAAW,IAAKU,KAAKH,qBACzDkB,MAAK,KACGmB,GAEIlC,KAAKgB,YAAW,GAAMD,MAAKpB,IACxBA,GACAsB,OAAOC,KAAKvB,GAASc,SAAQX,GACzBE,KAAKH,oBAAoBC,EAA0BH,EAAQG,KAEnE,GAER,IAEHqB,OAAMC,GAAKC,OAAOC,MAAM,gCAAgCtB,KAAKV,UAAU8B,OAGxF,CAEAiB,iBAAAA,CAAkB3B,GACd,MAAM4B,EAAMtC,KAAKR,SAAS+C,QAAQ7B,IACrB,IAAT4B,IACAtC,KAAKR,SAASgD,OAAOF,EAAK,IACrBtC,KAAKR,SAASqB,QAAUb,KAAKN,WAC9BM,KAAKX,OACAoD,kBAAkBzC,KAAKV,KAAO,GAAGU,KAAKV,SAAW,IAAKU,KAAKH,qBAC3DsB,OAAMC,GAAKC,OAAOC,MAAM,oCAAoCtB,KAAKV,UAAU8B,OAG5F,CAEAsB,OAAAA,GACI1C,KAAKR,SAASiB,SAAQC,GAAMV,KAAKqC,kBAAkB3B,KACnDV,KAAKX,OAAOsD,4BAA4B3C,KAAKW,kBACjD,E,2IC3OG,MAAMiC,GAAiBC,EAAAA,EAAAA,eAAyB,CACnDC,YAAa,EACbC,eAAgB,EAEhBC,MAAO,KACPC,WAAY,KACZC,UAAW,OAGR,SAASC,EAAsBC,GAAwE,IAAvE,SAAEC,GAAqDD,EAC1F,MAAOE,EAAcC,IAAYC,EAAAA,EAAAA,UAAoB,CACjDV,YAAa,EACbC,eAAgB,EAEhBC,MAAO,KACPC,WAAY,KACZC,UAAW,OAGTO,GAAkBC,EAAAA,EAAAA,UACpB,IAAO3D,IACHwD,GAASI,GAEL1C,OAAOC,KAAKyC,GAAW9C,SAAWI,OAAOC,KAAKnB,GAAKc,OAC7C,IAAKd,GAEL,IAAK4D,KAAc5D,IAC5B,GAEL,CAACwD,IAoCL,OAjCAK,EAAAA,EAAAA,YAAU,KACN,GAAIN,EAAaN,MAAO,CACpB,MAAMa,EAAsBP,EAAaL,WAAW,iBAAiBa,QACrE,IAAIC,EAAQ,EACZT,EAAaN,MAAMvC,SAAQuD,IACnB5D,EAAAA,EAAW6D,gBAAgBD,EAAQE,OAAOC,iBAAkBN,IAC5DE,GACJ,IAEJN,EAAgB,CAAEX,YAAaiB,GACnC,CAEA,GAAIT,EAAaJ,UAAW,CACxB,IAAIa,EAAQ,EACZ9C,OAAOC,KAAKoC,EAAaJ,WAAWzC,SAAQuD,IACxC,MAAMI,EAAad,EAAaJ,UAAUc,GACpCK,EAAUf,EAAaL,WAAWe,GAExB,kBAAZA,GACY,UAAZA,GACU,OAAVI,QAAU,IAAVA,GAAAA,EAAYN,SACL,OAAPO,QAAO,IAAPA,GAAAA,EAASP,SACTM,EAAWE,gBAAkBD,EAAQP,SACrC1D,EAAAA,EAAW6D,gBAAgBG,EAAWN,QAASO,EAAQP,UAEvDC,GACJ,IAGJN,EAAgB,CAAEV,eAAgBgB,GACtC,IACD,CAACN,EAAiBH,EAAaN,MAAOM,EAAaJ,UAAWI,EAAaL,cAEvEsB,EAAAA,EAAAA,KAAC3B,EAAe4B,SAAQ,CAACC,MAAOnB,EAAaD,SAAEA,GAC1D,C,iHC5DA,MAAMqB,EAA8B,CAChCC,QAAS,CACLC,SAAU,WAEVC,QAAS,QACTC,MAAO,QAMXC,QAAS,CACLH,SAAU,WACVI,eAAgB,gBAChBH,QAAS,OACTC,MAAO,OACPG,WAAY,SACZC,QAAS,GACT,uCAAwC,CACpCC,SAAU,SAGlBC,UAAW,CACPC,MAAO,iBACPT,SAAU,WACVU,IAAK,EACLC,MAAO,GACP,uCAAwC,CACpCC,SAAU,UAGlBC,cAAe,CACXC,WAAY,YACZF,SAAU,GACVG,GAAI,OACJC,GAAI,OACJd,MAAO,OACPD,QAAS,QACTgB,WAAY,WACZ,uCAAwC,CACpCL,SAAU,QACVG,GAAI,KAyEhB,MAAMG,UAA4BC,EAAAA,UAG9B3G,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAHTE,UAAoB,EAAE,KAmD9BC,eAAiB,CAACrG,EAAYsG,KAC1B,GAAItG,IAAO,GAAGE,KAAKgG,MAAMK,oBAAsBD,GAASpG,KAAKoG,MAAME,UAAYF,EAAMG,IAAK,CACtF,GAAIH,EAAMG,IAAK,CACX,GAAIvG,KAAKkG,WAAaM,KAAKC,MAAQzG,KAAKkG,UAAY,IAEhD,OAEJlG,KAAKkG,UAAYM,KAAKC,KAC1B,CACAzG,KAAKuD,SAAS,CAAE+C,QAASF,EAAMG,MAAO,IAAMvG,KAAK0G,UACrD,GAxDA1G,KAAKoG,MAAQ,CACTE,OAAO,EACPK,KAAM,CAAC,EACPC,OAAQ,KACRC,WAAY,EAEpB,CAEA,uBAAMC,GAAoC,IAADC,EAAAC,EACrC,GAAkC,QAAlCD,EAAI/G,KAAKgG,MAAMrB,QAAQsC,mBAAW,IAAAF,GAAO,QAAPC,EAA9BD,EAAgCG,aAAK,IAAAF,GAArCA,EAAuCG,aAAc,CAErD,MAAMb,QAActG,KAAKgG,MAAM3G,OAAO+H,SAAS,GAAGpH,KAAKgG,MAAMK,oBAC7DrG,KAAKkG,UAAiB,OAALI,QAAK,IAALA,GAAAA,EAAOC,IAAMC,KAAKC,MAAQ,EAC3CzG,KAAKuD,SAAS,CAAE+C,QAAc,OAALA,QAAK,IAALA,IAAAA,EAAOC,OAAO,IAAMvG,KAAK0G,iBAC5C1G,KAAKgG,MAAM3G,OAAOgI,eAAe,GAAGrH,KAAKgG,MAAMK,mBAAoBrG,KAAKmG,eAClF,CACJ,CAEAO,MAAAA,GAAgB,IAADY,EAAAC,EACX,GAAIvH,KAAKoG,MAAME,OAAuC,QAAlCgB,EAAItH,KAAKgG,MAAMrB,QAAQsC,mBAAW,IAAAK,GAAO,QAAPC,EAA9BD,EAAgCJ,aAAK,IAAAK,GAArCA,EAAuCJ,aAAc,CAAC,IAADK,EAAAC,EACzE,MAAMN,EAAmC7G,KAAKoH,MAC1CpH,KAAKC,UAAwC,QAA/BiH,EAACxH,KAAKgG,MAAMrB,QAAQsC,mBAAW,IAAAO,GAAO,QAAPC,EAA9BD,EAAgCN,aAAK,IAAAO,OAAP,EAA9BA,EAAuCN,eAGtDA,EAAaQ,uBACNR,EAAaQ,eAGnB3H,KAAKgG,MAAM3G,OACXuI,OACG5H,KAAKgG,MAAMK,WAAWwB,QAAQ,kBAAmB,IACjD,8BACAV,GAEHpG,MAAM+G,IACCA,GACA9H,KAAKuD,SAAS,CACVqD,OAAQkB,EAAOlB,OACfD,KAAMmB,EAAOnB,MAAQ3G,KAAKoG,MAAMO,KAChCE,WAAY7G,KAAKoG,MAAMS,WAAa,GAE5C,GAEZ,CACJ,CAeAkB,eAAAA,GACI,IAAK/H,KAAKoG,MAAMQ,SAAW5G,KAAKoG,MAAMO,OAAS3G,KAAKoG,MAAME,MAAO,CAAC,IAAD0B,EAAAC,EAC7D,MAAMd,EAA6E,QAAjCa,EAAGhI,KAAKgG,MAAMrB,QAAQsC,mBAAW,IAAAe,GAAO,QAAPC,EAA9BD,EAAgCd,aAAK,IAAAe,OAAP,EAA9BA,EAAuCd,aAC5F,GAAIA,EAAc,CACd,IAAKnH,KAAKoG,MAAME,MAAO,CACnB,MAAMqB,EAA0DR,EAAaQ,eAC7E,GAAIA,EAAgB,CAChB,MAAMO,EACwB,kBAAnBP,EACDA,EACAA,EAAe3H,KAAKgG,MAAM3G,OAAO8I,aAAeR,EAAeS,GAEzE,OAAO7D,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACC,GAAI5D,EAAOK,QAAQ1B,SAAEkF,EAAAA,MAAMC,gBAAgBN,IAC3D,CACA,OAAO3D,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAApF,SAAEqF,EAAAA,KAAKC,EAAE,0BAC/B,CACA,OAAOpE,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,GAC1B,CAEA,OAAO,IACX,CAEA,MAAO,CAAC,CAAGC,EAAaC,GAAY9I,KAAKgG,MAAMK,WAAW0C,MAAM,KAEhE,OACIC,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA5F,SAAA,CACKrD,KAAKoG,MAAM8C,QAAS3E,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAE9D,MAAO,OAAQhC,SAAErD,KAAKoG,MAAM8C,SAC/D3E,EAAAA,EAAAA,KAAC6E,EAAAA,oBAAmB,CAChBD,MAAO,CAAErE,MAAO,QAChB+B,WAAY7G,KAAKoG,MAAMS,WACvBxH,OAAQW,KAAKgG,MAAM3G,OACnBwJ,YAAaA,EACbC,SAAUO,SAASP,EAAU,IAC7BlC,OAAQ5G,KAAKoG,MAAMQ,OACnBD,KAAM3G,KAAKoG,MAAMO,KACjB2C,QAAUJ,GAAoBlJ,KAAKuD,SAAS,CAAE2F,UAC9CK,SAAW5C,GAA8B3G,KAAKuD,SAAS,CAAEoD,SACzD6C,iBAAmBC,IACXA,EAAQ7C,QACR5G,KAAKuD,SAAS,CAAEqD,OAAQ6C,EAAQ7C,OAAQD,KAAM8C,EAAQ9C,MAAQ3G,KAAKoG,MAAMO,QAGrD,YAApB8C,EAAQA,SAAyBA,EAAQC,UACzC1J,KAAK0G,SAEe,SAApB+C,EAAQA,SACRzJ,KAAKgG,MAAM2D,OAAOF,EACtB,EAEJG,UAAQ,EACRC,UAAW7J,KAAKgG,MAAM6D,UACtBC,UAAW9J,KAAKgG,MAAM8D,UACtBC,MAAO/J,KAAKgG,MAAM+D,MAClBC,aAAchK,KAAKgG,MAAMgE,aACzBC,WAAYjK,KAAKgG,MAAMiE,eAIvC,CAEAC,mBAAAA,GACI,OAAOlK,KAAKgG,MAAMrB,QAAQA,SACtBJ,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACC,GAAI5D,EAAOe,cAAcpC,SAAEkF,EAAAA,MAAMC,gBAAgBxI,KAAKgG,MAAMrB,QAAQA,WACzE,IACR,CAEAwF,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CACP2B,UAAU,MACV9B,GAAI5D,EAAOC,QAAQtB,SAAA,EAEnBkB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACC,GAAI5D,EAAOU,UAAU/B,SAAE,IAAImD,KAAKxG,KAAKgG,MAAMrB,QAAQ0F,IAAIC,mBAC3DtK,KAAKkK,sBACLlK,KAAK+H,oBAGlB,EAGJ,UC1OMrD,EAA8B,CAChCpF,KAAOyK,IAAe,CAClBQ,gBAAiBR,EAAMS,QAAQC,WAAWC,MAC1C5F,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT+F,aAAc,MACdC,cAAe,WAEnBH,MAAO,CACHI,SAAU,IACVhG,MAAO,QAEXiG,KAAM,CACFlG,QAAS,QAEbmG,eAAgB,CACZC,SAAU,UAEdC,aAAc,CACVC,UAAW,QAEfC,OAAQ,CACJP,cAAe,UAEnBQ,WAAatB,IAAe,CACxBuB,WAAY,OACZ9F,SAAU,GACVH,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,OAAS,SAEpDC,sBAAwBzB,IAAe,CACnC0B,OAAQ,SACRpG,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,OAAS,SAEpDG,OAAQ,CACJC,WAAY,EACZC,cAAe,EACfhH,SAAU,SACViH,OAAQ,EAERC,OAAQ,GAEZC,KAAM,CACFjH,MAAO,GACP6F,OAAQ,GACRc,OAAQ,SACRO,GAAI,OACJpH,SAAU,WACV,UAAW,CACPqH,QAAS,KACTrH,SAAU,WACVkH,OAAQ,EACRxG,IAAK,EACL4G,KAAM,EACNpH,MAAO,OACP6F,OAAQ,OACRF,WAAY,8CACZ0B,eAAgB,QAChB5B,gBAAiB,SAGzB6B,QAAS,CACLvH,QAAS,OACTI,WAAY,SACZgG,SAAU,SACVnG,MAAO,QAEXuH,WAAY,CACRxH,QAAS,OACTI,WAAY,UAEhBqH,aAAc,CACVC,EAAG,MACH,uCAAwC,CACpCA,EAAG,QAGXC,UAAW,CACP3G,WAAY,SACZoF,SAAU,SACVwB,aAAc,WACd,uCAAwC,CACpCjH,SAAU,UAGlByG,QAAS,CACLhB,SAAU,UAEdyB,YAAa,CACTC,EAAG,MACH,uCAAwC,CACpCnH,SAAU,WAYtB,SAASoH,EAAMxJ,GAA8D,IAA7D,SAAEyJ,EAAQ,OAAEC,KAAW9G,GAAsB5C,EACzD,MAAiB,WAAbyJ,GAEItI,EAAAA,EAAAA,KAACwI,EAAAA,cAAQ,CACL1H,MAAOyH,EAAS,UAAY,eACxB9G,IAKC,SAAb6G,GAEItI,EAAAA,EAAAA,KAACyI,EAAAA,KAAQ,CACL3H,MAAM,UACFW,KAMZzB,EAAAA,EAAAA,KAAC0I,EAAAA,QAAW,CACR9D,MAAO,CAAE9D,MAAO,cACZW,GAGhB,CAgBA,MAAMkH,EAAWC,IAAA,IAAC,SAAE9J,EAAQ,MAAE+J,EAAK,MAAEC,EAAK,MAAElE,GAAwBgE,EAAA,OAChE5I,EAAAA,EAAAA,KAAA,OACI+I,KAAK,WACLxN,GAAI,6BAA6BsN,IACjC,kBAAiB,wBAAwBA,IACzCjE,MAAOA,EAAM9F,UAEbkB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACC,GAAI+E,EAAMhK,UACXkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAC2B,UAAU,MAAK/G,SAAEA,OAE/B,EAiFV,MA2SA,EA3S4BkK,IAWmB,IAXlB,cACzBC,EAAa,QACbC,EAAO,YACPC,EAAW,WACXzD,EAAU,UACVH,EAAS,UACT6D,EAAS,UACT9D,EAAS,MACTE,EAAK,aACLC,EAAY,OACZ3K,GACwBkO,EACxB,MAAOK,EAAOC,IAAYrK,EAAAA,EAAAA,UAAS,KAC5BsK,EAAUC,IAAevK,EAAAA,EAAAA,UAAmB,KAC5CwK,EAAUC,IAAezK,EAAAA,EAAAA,UAAS,KAClC0K,EAAcC,IAAmB3K,EAAAA,EAAAA,WAAS,IAC1C4K,EAAUC,IAAe7K,EAAAA,EAAAA,UAA2B,CAAC,GAQtD8K,EAAyBC,GAAsB,CAACC,EAAiBC,IACnER,EAAYQ,EAAaF,EAAY,IAEnCG,EAAsB,SAAd5E,EAER6E,IAAiC1N,OAAO2N,OAAOjB,GAAWkB,MAC5D/F,GAAqC,yBAAzBA,EAAS5E,OAAO4K,QAGhClL,EAAAA,EAAAA,YAAU,KACN,MAAMmL,EAA8B,CAAC,EACrC,IAAIC,EAAW,GAEf,IAAK,MAAOC,EAAMC,KAAgBjO,OAAOkO,QAAQ3B,GAC7C,IAAK,MAAO4B,EAAOC,KAAiBpO,OAAOkO,QAAQD,EAAYpH,QAC3D,GAAc,WAAVsH,EAIJ,IAAK,MAAOE,EAAUC,KAAoBtO,OAAOkO,QAAQE,EAAaG,YAClET,EAAUK,GAASL,EAAUK,IAAU,CAAC,EACxCL,EAAUK,GAAOE,GAAY,IAAKC,EAAiBN,QAU/D,GALAhO,OAAOC,KAAK6N,GAAWU,KAAIL,GACvBnO,OAAOC,KAAK6N,EAAUK,IAAQK,KAAIX,GAASE,EAAWA,GAAY,GAAGI,MAAUN,QAI/ElB,EAAO,CACP,MAAOwB,EAAON,GAAQlB,EAAM7E,MAAM,MAClC,GAAKgG,EAAUK,IAER,IAAKL,EAAUK,GAAON,GAAO,CAEhC,MAAMY,EAAMzO,OAAOC,KAAK6N,EAAUK,IAAQ,GAEtCvB,EADA6B,EACS,GAAGN,MAAUM,IAEbV,EAEjB,OATInB,EAASmB,EAUjB,MACInB,EAASmB,GAEbX,EAAYU,EAAU,GACvB,CAACpB,EAAWH,EAAeI,IAE9B,MAAO+B,EAAcC,GAAehC,EAAM7E,MAAM,MAC1C8G,EACFF,GAAgBC,EAAcxB,EAASuB,GAAcC,GAAe,KAExE,OACI5G,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACHrC,QAASA,IAAMA,IACfsC,MAAM,EACNzH,GAAI,CAAE,qBAAsB5D,EAAOgG,OAAQrH,SAAA,EAE3C2F,EAAAA,EAAAA,MAAA,MAAIG,MAAOzE,EAAO2H,WAAWhJ,SAAA,EACzBkB,EAAAA,EAAAA,KAACwI,EAAAA,cAAQ,CACLzE,GAAI,CAAEjD,MAAO,gBACb8D,MAAO,CACH3D,SAAU,GACVwK,WAAY,GACZC,YAAa,MAGpBvH,EAAAA,KAAKC,EAAE,iBAENgG,EAUE,MATApK,EAAAA,EAAAA,KAAC2L,EAAAA,QAAO,CACJ5H,GAAI,CAAE1D,SAAU,WAAYW,MAAO,GAAIF,MAAO,gBAC9C8K,MAAOzH,EAAAA,KAAKC,EACR,8GAEJyH,UAAW,CAAEC,OAAQ,CAAE/H,GAAI,CAAEgI,cAAe,UAAajN,UAEzDkB,EAAAA,EAAAA,KAACyI,EAAAA,KAAQ,UAIrBzI,EAAAA,EAAAA,KAACgM,EAAAA,cAAa,CACVpH,MAAO,IAAKzE,EAAOqG,QAASrG,EAAOsG,gBACnCwF,UAAQ,EAAAnN,UAER2F,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAOpF,KAAK+D,SAAA,EAEhBkB,EAAAA,EAAAA,KAACkM,EAAAA,OAAM,CACH7L,SAAS,SACTS,MAAM,UAAShC,UAEfkB,EAAAA,EAAAA,KAACmM,EAAAA,KAAI,CACDjM,MAAOmJ,EACPrE,SAvGHoH,CAACnC,EAA8BoC,KAChDzC,GAAgB,GAChBN,EAAS+C,GACT3C,EAAY,GAAG,EAqGK4C,QAAQ,aACRC,eAAa,EACbC,eAAgBrC,EAAQ,UAAY,YACpCsC,UAAWtC,EAAQ,UAAY,YAAYrL,SAE1CpC,OAAOC,KAAKkN,GAAUqB,KAAIL,GACvBnO,OAAOC,KAAKkN,EAASgB,IAAQK,KAAI,CAACX,EAAMmC,KACpC,MAAMpB,EAAQzB,EAASgB,GAAON,GACxBY,EAAM,GAAGN,MAAUN,IAEzB,OACIvK,EAAAA,EAAAA,KAAC2M,EAAAA,IAAG,CACApD,SAAUA,EAAS3L,SAASuN,GAE5BjL,MAAOiL,EACPyB,MAAO,GAAGtB,EAAMf,KAAKpG,EAAAA,KAAK0I,iBAC1BC,MACI9M,EAAAA,EAAAA,KAACqI,EAAM,CACHC,SAAUgD,EAAMhD,SAChBC,OAAQ4B,QAtPzCtB,EAyPuC6D,EAxP/C,CACHnR,GAAI,wBAAwBsN,IAC5B,gBAAiB,6BAA6BA,OA6OLsC,GAhPjD,IAAmBtC,CA0PuB,UAMrByC,GACG7G,EAAAA,EAAAA,MAACkE,EAAQ,CACLG,MAAO3I,EAAO4H,aAEdnD,MAAO,IAAKzE,EAAOwG,aAAc7F,MAAOqJ,EAAQ,aAAU4C,GAC1DlE,MAAOQ,EAAMvK,SAAA,EAEbkB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAO2G,WACXlC,MAAO,CAAEmC,WAAY,QAASjI,SAE7BwM,EAAMf,KAAKpG,EAAAA,KAAK0I,kBAErB7M,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAO8G,sBAAsBnI,SAEhCwM,EAAM0B,YAAY7I,EAAAA,KAAK0I,kBAE5B7M,EAAAA,EAAAA,KAAA,OAAAlB,SACKwM,EAAMlC,UACD1M,OAAOC,KAAK2O,EAAMlC,WAAW8B,KAAI+B,IAAa,IAADC,EAAAC,EACzC,MAAMC,EAAS,GAAG/D,MAAU4D,IACxBtD,IACAI,EAAsBqD,EAAtBrD,CAA8B,IAAI,GAClCH,GAAgB,IAGpB,MAAMyD,EAAkBjE,GAAaA,EAAU6D,GAC/C,IAAIH,EAAO,mBAKX,OAJmB,OAAfO,QAAe,IAAfA,GAAuB,QAARH,EAAfG,EAAiB1N,cAAM,IAAAuN,GAAvBA,EAAyBJ,MAAuB,OAAfO,QAAe,IAAfA,GAAuB,QAARF,EAAfE,EAAiB1N,cAAM,IAAAwN,GAAvBA,EAAyB5C,OAC1DuC,EAAO,WAAWO,EAAgB1N,OAAO4K,QAAQ8C,EAAgB1N,OAAOmN,SAIxErI,EAAAA,EAAAA,MAAC6I,EAAAA,UAAS,CACN1I,MAAOuF,OAAQ4C,EAAY,CAAE/G,gBAAiB,aAE9CyD,SAAUA,IAAa2D,EACvBpI,SAAU+E,EAAsBqD,GAAQtO,SAAA,EAExCkB,EAAAA,EAAAA,KAACuN,EAAAA,iBAAgB,CACbC,YAAYxN,EAAAA,EAAAA,KAACyN,EAAAA,WAAc,IAC3B1J,GAAI,CACA,iCAAkC5D,EAAOuH,SAE7C,gBAAc,mBACdnM,GAAG,kBAAiBuD,UAEpB2F,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CAACU,MAAOzE,EAAO0H,QAAQ/I,SAAA,EAC9BkB,EAAAA,EAAAA,KAAC0N,EAAAA,UAAS,CACN3J,GAAI5D,EAAOqH,KACX3B,UAAU,MACV8H,MAAOb,KAEX9M,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAO8H,UAAUnJ,SAEpBmO,EAAS3J,QAAQ,qBAAsB,YAIpDtD,EAAAA,EAAAA,KAAC4N,EAAAA,iBAAgB,CAAChJ,MAAOzE,EAAO0G,OAAO/H,SAClCwM,EAAMlC,UAAU6D,GAAUpD,SAASqB,KAAI,CAAC2C,EAAKC,KAC1C9N,EAAAA,EAAAA,KAACuB,EAAmB,CAEhBnB,QAASyN,EACTnI,WAAYA,EAEZ5D,WAAYmL,EACZnS,OAAQA,EACRyK,UAAWA,EACXD,UAAWA,EACXE,MAAOA,EACPC,aAAcA,EAEdL,OAAS2I,GAtRvE,SAAgBA,EAAqCjM,EAAoBoH,GACrE,IAAI8E,EACAC,EAAM,GACLF,EAAYE,IAGNF,EAAYE,IAAIC,WAAWhR,WAAW,MAGtC6Q,EAAYE,IAAIC,WAAWhR,WAAW,MAF7C8Q,EAASD,EAAYC,QAAU,QAC/BC,EAAMF,EAAYE,KAIXF,EAAYE,IAAI/Q,WAAW,YAAc6Q,EAAYE,IAAI/Q,WAAW,aAC3E8Q,EAASD,EAAYC,QAAU,SAC/BC,EAAMF,EAAYE,MAElBA,EAAM,yBAAyBnM,KAAciM,EAAYE,MACzDD,EAASD,EAAYC,QAAU,UAb/BC,EAAM,yBAAyBnM,IAC/BkM,EAASD,EAAYC,QAAU,SAcpB,UAAXA,GAEAG,YACKC,IACOA,EAAKlR,WAAW,KAChBJ,OAAOuR,SAASC,KAAOF,EAChBA,EAAKlR,WAAW,KACvB+Q,EAAM,GAAGnR,OAAOuR,SAASE,YAAYzR,OAAOuR,SAAS3D,OAAOuD,KACrDG,EAAKlR,WAAW,YAAckR,EAAKlR,WAAW,eACrDJ,OAAOuR,SAASG,KAAOJ,EAC3B,GAEJ,IACAH,GAGAF,EAAYU,OAA4B,oBAAZvF,GAC5BA,MAGA+E,EAAI/Q,WAAW,KACf+Q,EAAM,GAAGnR,OAAOuR,SAASE,YAAYzR,OAAOuR,SAAS3D,OAAO5N,OAAOuR,SAASK,WAAWT,IAChFA,EAAI/Q,WAAW,OACtB+Q,EAAM,GAAGnR,OAAOuR,SAASE,YAAYzR,OAAOuR,SAAS3D,OAAOuD,KAGhEnR,OAAO0O,KAAKyC,EAAKD,GAEzB,CAwOkE5I,CAAO2I,EAAad,EAAU/D,IAZ7B4E,SA7BZV,EA8CG,IAGpB,SApFL,YAAY/B,KAuFrB,WAGZ5G,EAAAA,EAAAA,MAACkK,EAAAA,cAAa,CAAA7P,SAAA,CACTsM,GAAgBC,GACbrL,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACRuC,UAA0D,IAA/CnS,OAAOC,KAAKkN,EAASuB,IAAe9O,OAC/CiN,SAAUA,EAAS3L,SAASyN,GAC5BzG,MAAO2E,EAAS3L,SAASyN,GAAe,CAAErF,gBAAiB,eAAa+G,EACxEhJ,GAAI5D,EAAOgI,YACX2G,QAASA,KACL3F,EAAYU,EAASuB,GAAcC,GAAaX,KAAMW,GACtD7B,EAAY,IAAID,EAAU8B,GAAa,EAE3CvK,MAAsD,IAA/CpE,OAAOC,KAAKkN,EAASuB,IAAe9O,OAAe,UAAY,OACtEyS,WAAW/O,EAAAA,EAAAA,KAACgP,EAAAA,MAAS,IAAIlQ,SAExBqF,EAAAA,KAAKC,EAAE,iBAEZ,KACHgH,GAAgBC,GAA8D,IAA/C3O,OAAOC,KAAKkN,EAASuB,IAAe9O,SAChE0D,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,SAAUA,EAAS3L,SAASyN,GAC5BtH,GAAI5D,EAAOgI,YACXvD,MAAO2E,EAAS3L,SAASyN,GAAe,CAAErF,gBAAiB,eAAa+G,EACxE+B,QAASA,KACLtF,EAAY,IAAID,EAAU8B,IAC1BlC,EAAYU,EAASuB,GAAcC,GAAaX,KAAMW,GACtDnC,GAAS,EAEb6F,WACItK,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA5F,SAAA,EACIkB,EAAAA,EAAAA,KAACgP,EAAAA,MAAS,KACVhP,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,OAGlBnO,MAAM,UAAShC,SAEdqF,EAAAA,KAAKC,EAAE,0BAGhBpE,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAEsK,SAAU,MACxBlP,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHrT,GAAG,6BACH+Q,QAAQ,YACRwC,QAASA,IAAM5F,IACf6F,WAAW/O,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,IACrBnO,MAAM,OAAMhC,SAEXqF,EAAAA,KAAKC,EAAE,gBAGX,E,eC5iBjB,MAAMjE,EAA8B,CAChCgP,YAAc3J,IAAe,CACzBnF,SAAU,WACVW,MAAO,EACPD,IAAK,EACLD,MAAO0E,EAAMS,QAAQmJ,KAAK,OAE9BC,aAAc,CACV/O,QAAS,QAEbgP,WAAY,CACRlJ,OAAQ,sBA4BhB,MAAMmJ,UAAsB/N,EAAAA,UACxB3G,WAAAA,CAAY4G,GACRC,MAAMD,GAENhG,KAAKoG,MAAQ,CACT2N,aAAc,GACdC,SAAS,EACTC,aAGU,UAFH5S,OAAe6S,eAA6B7S,OAAO8S,cAAcC,QAChE,8BAGhB,CAEAjK,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACHuE,OAAO,QACPC,WAAS,EACThM,GAAI,CACA,mBAAqBtI,KAAKgG,MAAMuO,aAAgCjD,EAAtB5M,EAAOkP,aACjD,qBAAsBlP,EAAOmP,YAEjCpG,QAASzN,KAAKgG,MAAMwO,aAAexU,KAAKgG,MAAMyH,QAAUzN,KAAKgG,MAAMyO,eACnE1E,MAAM,EACNjF,SAAS,KAAIzH,SAAA,EAEb2F,EAAAA,EAAAA,MAAC0L,EAAAA,YAAW,CAAArR,SAAA,CACPrD,KAAKoG,MAAM2N,cAAgB/T,KAAKgG,MAAM2C,EAAE,oBACzCpE,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLtM,GAAI5D,EAAOgP,YACXL,QAASrT,KAAKgG,MAAMyH,QACpBK,SAAU9N,KAAKgG,MAAMwO,aAAanR,UAElCkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,UAGlBjP,EAAAA,EAAAA,KAACgM,EAAAA,cAAa,CACVC,UAAQ,EACRrH,MAAO,CAAEwB,OAAQ,QAAStH,UAE1BkB,EAAAA,EAAAA,KAACsQ,EAAAA,EAAO,CACJC,WAAS,EAETC,MAAO/U,KAAKgG,MAAM+O,MAClB9F,KAAMjP,KAAKgG,MAAMiJ,KACjB5P,OAAQW,KAAKgG,MAAM3G,OACnBsJ,EAAG3I,KAAKgG,MAAM2C,EACd6L,aAAcxU,KAAKgG,MAAMwO,aACzBQ,aAAchV,KAAKgG,MAAMgP,aACzBC,UAAWA,KACPjV,KAAKuD,SAAS,CAAEyQ,SAAS,IACzBhU,KAAKgG,MAAMiP,WAAW,EAE1BC,UAAWlV,KAAKgG,MAAMkP,UACtBC,SAAUnV,KAAKgG,MAAMmP,SACrBC,IAAKpV,KAAKgG,MAAMoP,IAChBC,WAAYA,IAAMrV,KAAKoG,MAAM6N,cAAgBjU,KAAKgG,MAAMyH,UACxD6H,oBAAsBC,GAAqBvV,KAAKgG,MAAMsP,oBAAoBC,IAftE,cAkBZvM,EAAAA,EAAAA,MAACkK,EAAAA,cAAa,CAAC/J,MAAO,CAAEnE,eAAgB,iBAAkB3B,SAAA,EACtDkB,EAAAA,EAAAA,KAACiR,EAAAA,iBAAgB,CACbrM,MAAO,CAAE6G,WAAY,IACrByF,SACIlR,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACL5H,SAAU9N,KAAKgG,MAAMwO,aACrBmB,QAAS3V,KAAKoG,MAAM6N,aACpB1K,SAAUnI,IACNpB,KAAKuD,SAAS,CAAE0Q,aAAc7S,EAAEmR,OAAOoD,WACpCtU,OAAe6S,eAA6B7S,OAAO8S,cAAcyB,QAChE,6BACAxU,EAAEmR,OAAOoD,QAAU,OAAS,QAC/B,IAIbxE,MAAOnR,KAAKgG,MAAM2C,EAAE,qBAExBK,EAAAA,EAAAA,MAAA,OAAA3F,SAAA,EACIkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACRuC,WAAS,EACTtF,SAAU9N,KAAKgG,MAAMwO,aACrBnB,QAASrT,KAAKgG,MAAMyO,eACpBnB,WAAW/O,EAAAA,EAAAA,KAACsR,EAAAA,cAAiB,IAC7BxQ,MAAM,UACN8D,MAAO,CACH8G,YAAa,GACf5M,SAEDrD,KAAKgG,MAAM8P,aAAe9V,KAAKgG,MAAM2C,EAAE,oBAE5CpE,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,UAAW9N,KAAKgG,MAAMwO,aACtBnB,QAASrT,KAAKgG,MAAMyH,QACpBpI,MAAM,OACN8D,MAAO,CACHoB,gBAAiBvK,KAAKoG,MAAM4N,QAAU,eAAY1C,EAClDjM,MAAOrF,KAAKoG,MAAM4N,QAAU,YAAS1C,GAEzCgC,WAAW/O,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,IAAInQ,SAExBrD,KAAKgG,MAAM2C,EAAE,mBAMtC,EAGJ,U,2DCzKA,MAAMoN,E,MAAUC,GAAAA,UAAW,CAACC,EAASC,IAASD,EAAQC,IAAO,KAEvDC,EAAWA,CAACrW,EAAYsW,KAC1B,MAAMC,EAAOD,EAAMvH,MAAKyH,GAAKA,EAAExH,OAAShP,IACxC,MAAO,CACHuW,OACAjJ,MAAOgJ,EAAM7T,QAAQ8T,GACxB,ECJC3R,EAA8B,CAChC6R,OAAQ,QAuGZ,EApFoBnT,IAckB,IAdjB,QACjBoT,EAAO,WACPC,EAAU,QACVC,EAAO,SACPC,EAAQ,QACRC,EAAO,aACPC,EAAY,WACZC,EAAU,IACVC,EAAG,KACHb,EAAI,QACJD,EAAO,IACPvU,EAAG,SACH2B,EAAQ,KACRyL,GACe1L,EACf,MAAM4T,GAAMC,EAAAA,EAAAA,QAAO,QACZ,UAAEC,GAAaC,IAAQC,EAAAA,EAAAA,GAAQ,CAClCC,OAAQ,MACRC,QAAQC,IACG,CACHL,UAAWK,EAAQC,iBAI3BC,KAAAA,CAAKtK,EAAqBoK,GAAU,IAADG,EAAA,IAA3BhW,IAAKiW,GAAWxK,EACpB,IAAK6J,EAAIY,QACL,OAEJ,MAAQxK,MAAOyK,GAAqB1B,EAASzU,EAAKwU,GAC5C4B,EAA+B,QAAdJ,EAAGV,EAAIY,eAAO,IAAAF,OAAA,EAAXA,EAAaK,wBACjCC,GAAgBF,EAAkBjM,OAASiM,EAAkBxS,KAAO,EAEpE2S,EADeV,EAAQW,kBACKC,EAAIL,EAAkBxS,ID7CnD8S,EACbtY,EACAuY,EACAnC,EACAD,EACAgC,EACAD,KAEA,MAAM,KAAE3B,EAAI,MAAEjJ,GAAU+I,EAASrW,EAAIoW,GACrC,GAAI9I,IAAUiL,KAGVjL,EAAQiL,GAAWJ,EAAeD,MAGlC5K,EAAQiL,GAAWJ,EAAeD,IAGlC3B,GAAQjJ,IAAUiL,EAAS,CAC3B,MAAMC,EAAWhY,KAAKoH,MAAMpH,KAAKC,UAAU2V,IAC3CoC,EAAS9V,OAAO4K,EAAO,GACvBkL,EAAS9V,OAAO6V,EAAS,EAAGhC,GAC5BN,EAAQE,EAASqC,EACrB,GCuBQF,CAAST,EAAWE,EAAkB3B,EAAMD,EAASgC,EAAcD,EACvE,MAGG,WAAEO,GAAcC,EAAMC,IAAWC,EAAAA,EAAAA,GAAQ,CAC5CxY,KAAM,MACNyY,KAAM,CACFjX,IAAKqV,EAAIjI,QACNiI,EACHL,UACAC,WACAC,UACAC,eACAC,cAEJN,QAASA,IAAMA,EACfoC,IAAKA,IAAMnC,IACXa,QAASC,IAAO,CAAOgB,WAAYhB,EAAQgB,kBAG/C3U,EAAAA,EAAAA,YAAU,KACN6U,GAAQI,EAAAA,EAAAA,KAAiB,CAAEC,sBAAsB,GAAO,GAEzD,IACH,MAAM5T,EAAUqT,EAAa,EAAI,EAGjC,OAFAC,EAAKrB,EAAKH,KAGNzS,EAAAA,EAAAA,KAAA,OACIyS,IAAKA,EACL7N,MAAO,IAAKzE,EAAQQ,WACpB,kBAAiBgS,EAAU7T,UAE3BkB,EAAAA,EAAAA,KAAA,KACIrE,KAAK,MACL,kBAAiBgX,EACjB7D,QAAS0F,GAASA,EAAMC,iBACxBjG,KAAM,KAAKjE,IACX3F,MAAO,IACAzE,EACHQ,UACAG,MAAO,UACP4T,eAAgB,QAClB5V,SAEDA,KAEH,E,eC/Fd,MAAMqB,EAA8B,CAChCiS,SAAW5M,IAAe,CACtBU,WAAYV,EAAMS,QAAQ0O,QAAQC,KAClC9T,MAA8B,UAAvB0E,EAAMS,QAAQe,KAAmB,QAAUnL,EAAAA,EAAWgZ,YAAYrP,EAAMS,QAAQ0O,QAAQC,MAAM,GACrG,UAAW,CACP1O,WAAYV,EAAMS,QAAQ0O,QAAQC,KAClC9T,MAA8B,UAAvB0E,EAAMS,QAAQe,KAAmB,QAAUnL,EAAAA,EAAWgZ,YAAYrP,EAAMS,QAAQ0O,QAAQC,MAAM,GACrG,kBAAmB,CACf9T,MAC2B,UAAvB0E,EAAMS,QAAQe,KAAmB,QAAUnL,EAAAA,EAAWgZ,YAAYrP,EAAMS,QAAQ0O,QAAQC,MAAM,OAI9GE,aAAetP,IAAe,CAC1B1E,MAA8B,UAAvB0E,EAAMS,QAAQe,KAAmB,QAAUnL,EAAAA,EAAWgZ,YAAYrP,EAAMS,QAAQ0O,QAAQC,MAAM,KAEzGG,aAAc,CACVC,GAAI,QAERC,OAAQ,CACJrU,SAAU,SACVwF,OAAQ,IAEZ8O,KAAM,CACFlP,gB,SAAiBmP,EAAM,OAuH/B,EAjGoB1T,IAChB,MAAM,WACF8Q,EAAU,aACVD,EAAY,QACZD,EAAO,KACPvF,EAAI,QACJgC,EAAO,SACPsD,EAAQ,KACRzO,EAAI,aACJyR,EAAY,QACZpF,EAAO,MACPlP,EAAK,aACLuU,EAAY,uBACZC,EAAsB,qBACtBC,EAAoB,MACpB3Q,GACAnD,EAEJ,IAAIiG,EAAU/D,EAAOA,EAAKL,QAAQ,OAAQ,KAAO,GAQjD,OANgB,oBAAZoE,GAEmB,mBAAZA,KADPA,EAAU,kBAMVjD,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAEtE,QAAS,OAAQI,WAAY,YAAckE,GAAS,CAAC,GAAK9F,SAAA,GACjEsW,IAAgBpV,EAAAA,EAAAA,KAACwV,EAAAA,WAAU,MAC3BJ,IACCpV,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACLC,QAASpB,EACTlB,QAASA,IAAMuG,GAAa,OAGjCD,IACCpV,EAAAA,EAAAA,KAACyV,EAAAA,YAAW,CACRvV,MAAOY,EACP4U,cAAY,EACZ1Q,SAAU9E,GAASmV,GAAa,EAAOnV,GAAS,SAGxDF,EAAAA,EAAAA,KAAC2V,EAAAA,eAAc,CACX5R,GAAIC,EAAAA,MAAM4R,SAASnU,EAAM+D,MAAO4M,GAAYjS,EAAOiS,SAAUC,GAAWlS,EAAO4U,cAC/EjG,QAASA,EAAQhQ,UAEjBkB,EAAAA,EAAAA,KAAC2L,EAAAA,QAAO,CACJC,MAAOyG,EAAU3K,EAAU,GAC3BmE,UAAW,CAAEC,OAAQ,CAAE/H,GAAI,CAAEgI,cAAe,UAAajN,UAEzD2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EACTrV,WAAW,SACXkE,MAAOzE,EAAO8U,OAAOnW,SAAA,EAErBkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAACgW,EAAAA,aAAY,CACTpR,MAAO,CAAEqR,SAAU,EAAGnV,SACtBiD,GAAIqO,EAAWjS,EAAO2U,kBAAe/H,EAAUjO,UAE/CkB,EAAAA,EAAAA,KAACkW,EAAAA,MAAK,CACF5D,aAAcA,GAAgB,EAC9BxR,OAAuB,SAAfyR,EAAwB,UAAYA,IAAe,UAC3DxO,GAAmB,SAAfwO,EAAwB,CAAE,oBAAqBpS,EAAO+U,WAASnI,EAAUjO,SAE5EgO,SAIXuF,IACErS,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAACmW,EAAAA,aAAY,CAACvR,MAAO,CAAE9D,SAAQhC,UAC3BkB,EAAAA,EAAAA,KAACkW,EAAAA,MAAK,CACF5D,aAAcgD,GAA0B,EACxCxU,OAC8B,SAAzByU,EAAkC,UAAYA,IAC/C,UAEJxR,GAC6B,SAAzBwR,EACM,CAAE,oBAAqBpV,EAAO+U,WAC9BnI,EACTjO,SAEA4I,iBAQ3B,EC5IR0O,EAAmC,CACrC/V,SAAU,QACV0L,cAAe,OACfxE,OAAQ,IACRI,KAAM,EACN5G,IAAK,EACLR,MAAO,OACP6F,OAAQ,QASZ,SAASiQ,EACLC,EACAC,EACAC,GAEA,IAAKF,IAAkBC,EACnB,MAAO,CACHjW,QAAS,QAGjB,IAAI,EAAEmW,EAAC,EAAE7C,GAAM2C,EACXC,IACAC,GAAKH,EAAcG,EACnB7C,GAAK0C,EAAc1C,GAClB6C,EAAG7C,GApBZ,SAAoB6C,EAAW7C,GAG3B,MAAO,CAF+B,GAArB8C,KAAKC,MAAMF,EAAI,IACM,GAArBC,KAAKC,MAAM/C,EAAI,IAEpC,CAgBiBgD,CAAWH,EAAG7C,GACvB6C,GAAKH,EAAcG,EACnB7C,GAAK0C,EAAc1C,GAEvB,MAAMiD,EAAY,aAAaJ,QAAQ7C,OACvC,MAAO,CACHiD,YACAC,gBAAiBD,EAEzB,CAEA,MAAM1W,EAA8B,CAChCpF,KAAOyK,IAAe,CAClBU,WAAYV,EAAMS,QAAQC,WAAW6Q,WA0D7C,QAtDA,SAAyBtV,GACrB,MAAM,SACFuV,EAAQ,WACRhD,EAAU,KACVI,EAAI,cACJkC,EAAa,cACbC,IAEAU,EAAAA,EAAAA,IAAajE,IAAO,CACpBoB,KAAMpB,EAAQnD,UACdmH,SAAUhE,EAAQkE,cAClBZ,cAAetD,EAAQmE,+BACvBZ,cAAevD,EAAQoE,wBACvBpD,WAAYhB,EAAQgB,iBA8BxB,OAAKA,GAKDhU,EAAAA,EAAAA,KAAA,OAAK4E,MAAOwR,EAAYtX,UACpBkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOyR,EAAcC,EAAeC,GAAezX,SA/B3C,QAAbkY,GAEIhX,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAOpF,KACX6J,MAAO,CAAErE,MAAO,KAAMzB,UAEtBkB,EAAAA,EAAAA,KAACqX,EAAU,CAEPrH,QAASoE,EAAKpE,QACdqF,aAAcA,KAAgB,EAC9BhD,QAAS+B,EAAK/B,QACdvF,KAAMsH,EAAKjC,QACXxO,KAAMyQ,EAAKxI,MACXwG,SAAUgC,EAAKhC,SACfE,aAAc8B,EAAK9B,aACnBC,WAAY6B,EAAK7B,WACjB/M,MAAO/D,EAAM+D,OATR4O,EAAK7J,QAcnB,SAIA,IAQf,ECpGA,IAAI+M,EAQJ,MAuDA,EAvDqBzY,IAAsE,IAArE,aAAEuW,EAAY,QAAEtG,EAAO,KAAEuB,GAAyBxR,EACpE,MAAO0Y,EAAUC,GAAeC,IAAAA,SAAe,OACxCjM,EAAMkM,GAAWD,IAAAA,UAAe,IAChCE,EAAWC,GAAgBH,IAAAA,SAA+B,MAEjE,OACIhT,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA5F,SAAA,EACIkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAMA,GAAQ,QACdzL,MAAOwQ,EAAe,CAAEtU,MAAO,OAAU,KACzCgO,QAAS+I,IACL/I,IACKsG,GAODsC,GAAQ,GACRI,aAAaR,KAPbE,EAAYK,EAAGE,eACfL,GAAQM,GAAsB,UAAdL,IAA0BK,IAC1CJ,EAAa,SAEbN,EAAQnJ,YAAW,IAAMuJ,GAAQ,IAAQ,KAI7C,EAEJ9L,MAAOzH,EAAAA,KAAKC,EAAE,kBAAkBtF,UAEhCkB,EAAAA,EAAAA,KAACiY,EAAAA,KAAQ,OAEbjY,EAAAA,EAAAA,KAACkY,EAAAA,OAAM,CACHtT,MAAO,CAAE2C,OAAQ,MACjBiE,KAAMA,EACN+L,SAAUA,EACVI,UAAWA,EACXQ,YAAU,EAAArZ,SAET8J,IAAA,IAAC,gBAAEwP,GAAiBxP,EAAA,OACjB5I,EAAAA,EAAAA,KAACqY,EAAAA,KAAI,IACGD,EACJE,QAAS,IAAIxZ,UAEbkB,EAAAA,EAAAA,KAACuY,EAAAA,MAAK,CAAAzZ,UACFkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MAAO,CACH4T,QAAS,IACX1Z,SAEDqF,EAAAA,KAAKC,EAAE,qDAGb,MAGhB,ECrBEqU,GAAoB,IAEpBC,GAAoB,IAMjC,MAAMvY,GAA8B,CAChCpF,KAAOyK,IAAe,CAClBmT,WAAY,EACZR,WAAY3S,EAAMoT,YAAYC,OAAO,QAAS,CAC1CC,OAAQtT,EAAMoT,YAAYE,OAAOC,QACjCC,SAAUxT,EAAMoT,YAAYI,SAASC,iBAEzC3Y,QAAS,OACTgG,cAAe,WAEnB4S,cAAe,CACX3Y,MAAOkY,IAEXU,cAAe,CACX5Y,MAAOmY,IAEXU,iBAAkB,CACd7Y,MAxB4B,IA0BhC4F,MAAO,CACH5F,MAAO,UACP8Y,UAAW,UAEfC,OAAS9T,IAAe,CACpBlF,QAAS,OACTgG,cAAe,MACf5F,WAAY,SACZ8X,QAAS,iBACNhT,EAAM+T,OAAOC,QAChB/Y,eAAgB,WAChBJ,SAAU,SACVU,IAAK,EACLwG,OAAQ,EACRrB,WAAYV,EAAMS,QAAQC,WAAW6Q,UAEzC0C,cAAe,CACXjB,QAAS,GAEbkB,aAAc,CACVjZ,eAAgB,iBAEpBkZ,KAAM,CACFvS,WAAY,EACZZ,KAAM,YAEVsG,KAAM,CACFvM,MAAO,GACP6F,OAAQ,IAEZwT,SAAU,CACNrZ,MAAO,GACP6F,OAAQ,IAEZyT,YAAa,CACTtZ,MAAO,OACPD,QAAS,OAGTwZ,UAAW,EACXC,aAAc,GAElBC,iBAAkB,CACdrZ,QAAS,EACTwX,WAAY,gBAEhB8B,cAAe,CACXtZ,QAAS,GAEbuZ,aAAe1U,IAAe,CAC1BvE,SAAU,GACVH,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,YAAc,YACrDmT,UAAW,SACX/Y,GAAI,QAERgZ,WAAY,CACR/Z,SAAU,SACViH,OAAQ,EACRtG,MAAO,EACPT,MAAO,cACPkL,WAAY,OACZqO,UAAW,OACX3B,WAAY,iBAIPkC,GACD,EADCA,GAED,EAFCA,GAGA,EAGPC,GAAqG,CACvG,YAAa,CAAEC,MAAO,EAAGzN,MAAM9M,EAAAA,EAAAA,KAACwa,EAAAA,KAAQ,KACxC,WAAY,CAAED,MAAO,EAAGzN,MAAM9M,EAAAA,EAAAA,KAACyI,EAAAA,KAAQ,IAAKiC,MAAM,GAClD,eAAgB,CAAE6P,MAAO,GAAIzN,MAAM9M,EAAAA,EAAAA,KAACya,EAAAA,MAAS,IAAK/P,MAAM,GACxD,gBAAiB,CAAE6P,MAAO,GAAIzN,MAAM9M,EAAAA,EAAAA,KAAC0a,EAAAA,UAAa,IAAKhQ,MAAM,GAC7D,cAAe,CAAE6P,MAAO,GAAIzN,MAAM9M,EAAAA,EAAAA,KAAC2a,EAAAA,SAAY,KAC/C,YAAa,CAAEJ,MAAO,GAAIzN,MAAM9M,EAAAA,EAAAA,KAAC4a,EAAAA,SAAY,KAC7C,cAAe,CAAEL,MAAO,GAAIzN,MAAM9M,EAAAA,EAAAA,KAAC6a,EAAAA,IAAO,IAAKnQ,MAAM,GACrD,WAAY,CAAE6P,MAAO,GAAIzN,MAAM9M,EAAAA,EAAAA,KAAC8a,EAAAA,aAAgB,IAAKpQ,MAAM,GAC3D,aAAc,CAAE6P,MAAO,GAAIzN,MAAM9M,EAAAA,EAAAA,KAAC+a,EAAAA,cAAiB,KACnD,aAAc,CAAER,MAAO,GAAIzN,MAAM9M,EAAAA,EAAAA,KAACgb,EAAAA,QAAW,KAC7C,YAAa,CAAET,MAAO,GAAIzN,MAAM9M,EAAAA,EAAAA,KAACib,EAAAA,cAAiB,KAClD,iBAAkB,CAAEV,MAAO,IAC3B,qBAAsB,CAAEA,MAAO,GAAIhW,SAAU,GAC7C,qBAAsB,CAAEgW,MAAO,GAAIhW,SAAU,GAC7C,qBAAsB,CAAEgW,MAAO,GAAIhW,SAAU,GAC7C,iBAAkB,CAAEgW,MAAO,GAAIhW,SAAU,GACzC,iBAAkB,CAAEgW,MAAO,GAAIhW,SAAU,GACzC,iBAAkB,CAAEgW,MAAO,GAAIhW,SAAU,GACzC,qBAAsB,CAAEgW,MAAO,GAAIhW,SAAU,GAC7C,qBAAsB,CAAEgW,MAAO,GAAIhW,SAAU,GAC7C,qBAAsB,CAAEgW,MAAO,GAAIhW,SAAU,GAC7C,cAAe,CAAEgW,MAAO,GAAIhW,SAAU,GACtC,kBAAmB,CAAEgW,MAAO,GAAIhW,SAAU,GAC1C,kBAAmB,CAAEgW,MAAO,GAAIhW,SAAU,GAC1C,kBAAmB,CAAEgW,MAAO,GAAIhW,SAAU,GAC1C,YAAa,CAAEgW,MAAO,IAAKzN,MAAM9M,EAAAA,EAAAA,KAACkb,EAAAA,QAAW,KAC7C,YAAa,CAAEX,MAAO,IAAKzN,MAAM9M,EAAAA,EAAAA,KAACmb,EAAAA,SAAS,MAkD/C,MAAMC,WAAe5Z,EAAAA,UAKjB3G,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KALT4Z,2BAAqB,OAEZC,mBAAa,OA0E9BC,uBAAyB,IAAqB9f,KAAK+f,SAAQ,GAAM,KAgBjEC,uBAAyB,IACrBhgB,KAAKgG,MAAMia,YACNC,mBACAnf,MAAKyM,GAAiBxN,KAAKmgB,iBAAiB3S,KAC5CrM,OAAM+H,GAAS7H,OAAOC,MAAM,6BAA6B4H,OAAU,KAE5EkX,gBAAmBC,IACfrgB,KAAKuD,SAAS,CAAE8c,aAAY,EAC9B,KAEFC,kBAAqBC,IACjBvgB,KAAKuD,SAAS,CAAEgd,eAAc,EAChC,KAEFJ,iBAAoB3S,IAChB,IAAKA,EACD,OAGJ,MAAMzJ,EAA4B,CAAEyc,QAAS,EAAGC,MAAO,GAEvDxf,OAAOC,KAAKsM,GAAe/M,SAAQwO,IAAS,IAADyR,EAAAC,EACvC,GAAwB,QAApBD,EAAClT,EAAcyB,UAAK,IAAAyR,GAAQ,QAARC,EAAnBD,EAAqB5Y,cAAM,IAAA6Y,GAA3BA,EAA6BC,QAI9B3f,OAAOC,KAAKsM,EAAcyB,GAAMnH,OAAO8Y,OAAOpR,YAAY3O,OAAQ,CAClE,MAAMd,EAAMyN,EAAcyB,GAAMnH,OAAO8Y,OAAOpR,WAE9C,IAAK,MAAMF,KAAYrO,OAAO2N,OAAO7O,GACjCkB,OAAOC,KAAKoO,EAAS3B,WAAWlN,SAAQ,IACd,UAAtB6O,EAASzC,SAAuB9I,EAAMyc,UAAYzc,EAAM0c,SAGpE,KAGJzgB,KAAKuD,SAAS,CAAEsd,kBAAmB9c,GAAQ,EAC7C,KAsQF+c,qBAAuBC,MAAO9P,EAAc+P,EAAwBC,KAChE,MAAM,KAAE/K,GAASlW,KAAKoG,OAChB,OAAE/G,GAAWW,KAAKgG,MAClBkb,EAAsB5gB,KAAKoH,MAAMpH,KAAKC,UAAU2V,IAClD8K,IACAE,EAAQjQ,GAAKsD,SAAW2M,EAAQjQ,GAAKsD,cAExBjD,IAAb2P,IACiB,OAAbA,SACOC,EAAQjQ,GAAK5L,MAEpB6b,EAAQjQ,GAAK5L,MAAQ4b,GAG7B,MAAME,QAAmBnhB,KAAKgG,MAAM3G,OAAO+hB,iBAAgB,GAG3D,GAFAD,EAAWjd,OAAOmd,YAAcH,EAAQzR,KAAIrM,IAAA,IAAC,KAAE0L,EAAI,QAAEyF,EAAO,MAAElP,GAAOjC,EAAA,MAAM,CAAE0L,OAAMyF,UAASlP,QAAO,IAE/F2b,QAA6B1P,IAAb2P,EAChBjhB,KAAKuD,SAAS,CAAE2S,KAAMgL,IAAW,IAC7B7hB,EAAOiiB,gBAAgBH,GAAYhgB,OAAMC,GAAKC,OAAOC,MAAM,6BAA6BF,cAG5F,UACU/B,EAAOiiB,gBAAgBH,EACjC,CAAE,MAAO/f,GACLC,OAAOC,MAAM,6BAA6BF,IAC9C,CACJ,EACF,KAoGFmgB,MACIxK,IAOA,OAAQA,EAAIjI,MACR,IAAK,WAAY,CACb,MAAM,UAAEuR,EAAS,YAAEE,GAAgBvgB,KAAKoG,MACxC,MAAO,CAAE6F,QAASoU,GAAaE,GAAe,EAAGlb,MAAOgb,EAAY,QAAU,OAClF,CAEA,IAAK,eACD,MAAO,CAAEpU,QAASjM,KAAKoG,MAAMrD,gBAAkB,EAAGsC,MAAO,WAE7D,IAAK,YACD,MAAO,CACH4G,QAASjM,KAAKoG,MAAMtD,aAAe,EACnCuC,MAAO,UACPmc,kBAAmBxhB,KAAKoG,MAAMya,kBAAkBL,QAAUxgB,KAAKoG,MAAMya,kBAAkBJ,MACvFgB,gBAAiBzhB,KAAKoG,MAAMya,kBAAkBL,QAAU,EAAI,QAAU,aAG9E,QACI,MAAO,CACHvU,QAAS,EACT5G,MAAO,GACPmc,kBAAmB,EACnBC,gBAAiB,IAE7B,EAjiBAzhB,KAAKoG,MAAQ,CACT8P,KAAM,GACNmK,UAAW,EACXE,YAAa,EACbM,kBAAmB,CAAEJ,MAAO,EAAGD,QAAS,GACxC1d,YAAa6c,GAAO+B,qBAAqB1hB,KAAKgG,MAAMhD,MAAOhD,KAAKgG,MAAM/C,YACtEF,eAAgB4c,GAAOgC,wBAAwB3hB,KAAKgG,MAAM9C,UAAWlD,KAAKgG,MAAM/C,aAGpFjD,KAAK6f,cAAgB7D,IAAAA,YAErBhc,KAAK+f,UAAU5e,OAAMC,GAAKC,OAAOC,MAAM,oBAAoBF,MAC/D,CAEA,+BAAOwgB,CAAyB5b,EAAoBI,GAChD,MAAMtD,EAAc6c,GAAO+B,qBAAqB1b,EAAMhD,MAAOgD,EAAM/C,YAC7DF,EAAiB4c,GAAOgC,wBAAwB3b,EAAM9C,UAAW8C,EAAM/C,YAC7E,OAAIH,IAAgBsD,EAAMtD,aAAeC,IAAmBqD,EAAMrD,eACvD,CAAED,cAAaC,kBAEnB,IACX,CAEA,2BAAO2e,CACH1e,EACAC,GAEA,GAAID,GAASC,EAAY,CAAC,IAAD4e,EACrB,MAAMhe,GAAiD,QAA3Bge,EAAA5e,EAAW,wBAAgB,IAAA4e,OAAA,EAA3BA,EAA6B/d,UAAW,GACpE,IAAIC,EAAQ,EAMZ,OALAf,EAAMvC,SAAQuD,IACN5D,EAAAA,EAAW6D,gBAAgBD,EAAQE,OAAOC,iBAAkBN,IAC5DE,GACJ,IAEGA,CACX,CACA,OAAO,CACX,CAEA,8BAAO4d,CACHze,EACAD,GAEA,GAAIC,EAAW,CACX,IAAIa,EAAQ,EAmBZ,OAjBA9C,OAAOC,KAAKgC,GACP4e,OACArhB,SAAQuD,IACL,MAAMI,EAAalB,EAAUc,GACvBK,EAAUpB,GAAcA,EAAWe,GAEzB,kBAAZA,GACY,UAAZA,GACU,OAAVI,QAAU,IAAVA,GAAAA,EAAYN,SACL,OAAPO,QAAO,IAAPA,GAAAA,EAASP,SACTM,EAAWE,gBAAkBD,EAAQP,SACrC1D,EAAAA,EAAW6D,gBAAgBG,EAAWN,QAASO,EAAQP,UAEvDC,GACJ,IAGDA,CACX,CACA,OAAO,CACX,CAIA+C,iBAAAA,GACI9G,KAAKgG,MAAM+b,gBAAgB9f,gBAAgBjC,KAAK8f,wBAAwB,GAEnE9f,KAAKggB,yBAAyBjf,MAAK,KACpCf,KAAKgG,MAAMia,YAAY+B,4BAA4BhiB,KAAKggB,wBAEnDhgB,KAAK4f,wBACN5f,KAAK4f,uBAAwB,EAC7B5f,KAAKgG,MAAMic,WAAWC,0BAA0BliB,KAAKogB,iBACrDpgB,KAAKgG,MAAMic,WAAWE,4BAA4BniB,KAAKsgB,mBAC3D,GAER,CA0CA8B,oBAAAA,GACIpiB,KAAKgG,MAAM+b,gBAAgB1f,kBAAkBrC,KAAK8f,wBAClD9f,KAAKgG,MAAMia,YAAYoC,8BAA8BriB,KAAKggB,wBAEtDhgB,KAAK4f,wBACL5f,KAAK4f,uBAAwB,EAC7B5f,KAAKgG,MAAMic,WAAWK,4BAA4BtiB,KAAKogB,iBACvDpgB,KAAKgG,MAAMic,WAAWM,8BAA8BviB,KAAKsgB,mBAEjE,CAEAkC,kBAAAA,IACSxiB,KAAKyiB,eAAiBziB,KAAKgG,MAAMI,QAAUwY,IAAiB5e,KAAKgG,MAAM2T,cACxEjH,YAAW,IAAM1S,KAAKgG,MAAM0c,iBAAgB,IAEpD,CAEA,aAAM3C,CAAQle,GACV,IACI,MACM8L,QADmB3N,KAAKgG,MAAM3G,OAAOsjB,oBAAoB9gB,GAEzD+gB,EAA0B,GAC5BjV,GACA1M,OAAOC,KAAKyM,GAAWlN,SAAQX,IAC3B,MAAMgJ,EAAW6E,EAAU7N,GAE3B,GAAa,OAARgJ,QAAQ,IAARA,IAAAA,EAAU+Z,SACX,OAGJ,IAAI9L,EAAM,OAAOjX,EAAG+H,QAAQ,kBAAmB,IAAIA,QAAQ,SAAU,MAErE,MAAMib,EAAYha,EAAS+Z,SAASC,UACpC,IAAIC,EAaA5S,EAZJ,IAAK2S,EAAW,CACZ,MAAMnW,EAAI7M,EAAGkjB,MAAM,YACfrW,IACAoW,EAAU1Z,SAASsD,EAAE,GAAI,IACzBoK,GAAO,IAAIgM,IAEnB,CAEA,GAAIH,EAAY/T,MAAK8J,GAAQA,EAAK7J,OAASiI,IACvC,OAMiD,IAADkM,EADhDna,EAAS+Z,SAAS/T,KAGVqB,EAF8B,kBAA3BrH,EAAS+Z,SAAS/T,KACrBhG,EAAS+Z,SAAS/T,MAAQhG,EAAS+Z,SAAS/T,KAAK9O,KAAKgG,MAAMkd,MACpDpa,EAAS+Z,SAAS/T,KAAK9O,KAAKgG,MAAMkd,MACb,QAA1BD,EAAIna,EAAS+Z,SAAS/T,YAAI,IAAAmU,GAAtBA,EAAwB7a,GACvBpI,KAAKgG,MAAM2C,EAAEG,EAAS+Z,SAAS/T,KAAK1G,IAEpCpI,KAAKgG,MAAM2C,EAAEG,EAASgG,MAG1B9O,KAAKgG,MAAM2C,EAAEG,EAAS+Z,SAAS/T,MAG3CqB,EAAQnQ,KAAKgG,MAAM2C,EAAEG,EAASgG,MAGlC,IAAI/O,EAEAA,EADA8e,GAAS9H,GACH,CAAEjI,KAAMiI,KAAQ8H,GAAS9H,IAEzB,CACFjI,KAAMiI,EACN+H,WAAmCxN,IAA5BxI,EAAS+Z,SAAS/D,MAAsBhW,EAAS+Z,SAAS/D,MAAQ,IACzEzN,KAAMvI,EAAS+Z,SAASxR,MAI3BtR,EAAIsR,KAGe,kBAAbtR,EAAIsR,MACVtR,EAAIsR,KAAK5P,WAAW,eACpB1B,EAAIsR,KAAKlP,SAAS,OAEnBpC,EAAIsR,KAAO,WAAWvI,EAASgG,QAAQ/O,EAAIsR,QAN3CtR,EAAIsR,KAAO,WAAWvI,EAASgG,QAAQhG,EAASuI,OASpDtR,EAAIoQ,MAAQA,EAEP2S,GAEGC,IACAhjB,EAAIoQ,OAAS,IAAI4S,KAGzBH,EAAYxgB,KAAKrC,EAAI,IAI7B,MAAMojB,EAAe,CACjB,YACA,eACA,gBACA,WACA,YACA,cACA,YACA,YACA,aAKJ,IAAIjN,EAFajV,OAAOC,KAAK2d,IAAUuE,QAAOtU,GAAQqU,EAAahhB,SAAS2M,KAE5CW,KAAIX,IAChC,MAAM/O,EAAgB,CAAE+O,UAAS+P,GAAS/P,IAja1D,IAAiBuU,EA2aD,OATAtjB,EAAIoQ,MAAQzH,EAAAA,KAAKC,GAlahB0a,EAoaOvU,EACKjH,QAAQ,OAAQ,IAChBA,QAAQ,KAAM,IACdA,QAAQ,UAAW,QAtajCyb,UAAU,EAAG,GAAGC,cAAgBF,EAAIC,UAAU,GAAGE,eAyahDzjB,EAAIwU,SAAU,EACPxU,CAAG,IAIdmW,EAAOA,EAAKuN,OAAOb,GAEnB1M,EAAOA,EAAKkN,QAAOrjB,GAAOA,IAC1BmW,EAAKzV,SAAQV,GAAQA,EAAIwU,SAAU,IAEnC2B,EAAK4L,MAAK,CAAC4B,EAAGC,IACND,EAAE5E,OAAS6E,EAAE7E,MACN4E,EAAE5E,MAAQ6E,EAAE7E,MAEnB4E,EAAE5E,OACM,EAER6E,EAAE7E,MACK,EAEJ4E,EAAE5U,KAAO6U,EAAE7U,MAAQ,EAAI4U,EAAE5U,KAAO6U,EAAE7U,KAAO,EAAI,IAInD9O,KAAKgG,MAAM3G,OAAOukB,yBAAyB7iB,MAAK8iB,IACjD,MAAMxC,EACFwC,EAAa3f,OAAOmd,aAAe,GAEvCnL,EAAKzV,SAAQsW,IACT,MAAM+M,EAAKzC,EAAYxS,MAAKuN,GAAMA,EAAGtN,OAASiI,EAAIjI,OAC9CgV,IACA/M,EAAIxC,QAAUuP,EAAGvP,QACjBwC,EAAI1R,MAAQye,EAAGze,MACnB,IAGJ,MAAMoK,EAA8B,CAAC,EACrC4R,EAAY5gB,SAAQ,CAACkY,EAAMtG,IAAO5C,EAAIkJ,EAAK7J,MAAQuD,IAEnD6D,EAAK4L,MAAK,CAAC4B,EAAGC,KACV,MAAMI,EAAKtU,EAAIiU,EAAE5U,MACXkV,EAAKvU,EAAIkU,EAAE7U,MACjB,YAAWwC,IAAPyS,QAA2BzS,IAAP0S,EACbD,EAAKC,EAEZD,GACQ,EAERC,EACO,EAEJ,CAAC,IAGZhkB,KAAKuD,SAAS,CAAE2S,SAAQ,KACpB,MAAM+N,EAAiB/N,EAAKzG,KAAItC,IAAA,IAAC,KAAE2B,EAAI,QAAEyF,EAAO,MAAElP,GAAO8H,EAAA,MAAM,CAAE2B,OAAMyF,UAASlP,QAAO,IAEnF/E,KAAKC,UAAU0jB,KAAoB3jB,KAAKC,UAAU8gB,IAC7CrhB,KAAKgG,MAAM3G,OAAO+hB,iBAAgB,GAAMrgB,MAAKmjB,IAC9CA,EAAchgB,OAAOmd,YAAcA,EAE5BrhB,KAAKgG,MAAM3G,OACbiiB,gBAAgB4C,GAChB/iB,OAAMC,GAAKC,OAAOC,MAAM,6BAA6BF,SAElE,GACF,GAEV,CAAE,MAAO8H,GACL7H,OAAOC,MAAM,yBAAyB4H,IAC1C,CACJ,CAEAib,SAAAA,GACI,MAAM,MAAE/d,EAAK,iBAAEge,GAAqBpkB,KAAKgG,MAEzC,OACIgD,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAIC,EAAAA,MAAM4R,SACNna,KAAKgG,MAAM+D,MACXrF,GAAOmZ,OACP7d,KAAKgG,MAAMI,QAAUwY,IAAiB5e,KAAKgG,MAAMqe,UAAY3f,GAAOuZ,cACnEje,KAAKyiB,eAAiBziB,KAAKgG,MAAMI,QAAUwY,IAAiBla,GAAOsZ,eACtE3a,SAAA,EAEF2F,EAAAA,EAAAA,MAAA,OACIG,MAAO,IACAzE,GAAO0Z,eACP1Z,GAAO6Z,oBACI,IAAVnY,EAAc1B,GAAO8Z,cAAgB,CAAE3Z,QAAS,SACtDxB,SAAA,EAEFkB,EAAAA,EAAAA,KAAA,KACIwO,KAAK,SACLM,QAAS0F,GAASA,EAAMC,iBACxB7P,MAAO,CAAE9D,MAAO,UAAW4T,eAAgB,QAAS5V,SAEnDrD,KAAKgG,MAAMse,eAAejT,MACvB9M,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAEwB,OAAQ,GAAI7F,MAAO,IAAKyf,WAAY,QAASlhB,UACvDkB,EAAAA,EAAAA,KAAA,OACIigB,IAAKxkB,KAAKgG,MAAMse,eAAejT,KAC/BoT,IAAI,OACJtb,MAAO,CAAE2B,SAAU,OAAQ4Z,UAAW,OAAQC,cAAe,eAIrEpgB,EAAAA,EAAAA,KAACqgB,EAAAA,OAAM,CACHvR,QAASA,IAAM+Q,EAAiB,QAChCjb,MAAOzE,GAAOyZ,SACdsG,IAAI,WACJD,IAAI,wBAIdxkB,KAAKgG,MAAMse,eAAejT,MAAQrR,KAAKgG,MAAM6e,eAC3C7b,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CAACH,GAAI5D,GAAO+Z,aAAapb,SAAA,CAAC,IAAErD,KAAKgG,MAAM6e,oBAG1DtgB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,KACDrT,KAAKyiB,eAAiBziB,KAAKgG,MAAMI,QAAUwY,GAC3C5e,KAAKgG,MAAM8e,cAAclG,IAEzB5e,KAAKgG,MAAM8e,cAAclG,GAC7B,EACFvb,UAEFkB,EAAAA,EAAAA,KAACwgB,EAAAA,YAAe,QAIhC,CAEAtC,WAAAA,GACI,MAA4B,OAArBziB,KAAKgG,MAAMlB,OAAuC,OAArB9E,KAAKgG,MAAMlB,KACnD,CAgCAkgB,kBAAAA,GACI,MAAM,KAAE9O,EAAI,UAAEmK,EAAS,YAAEE,GAAgBvgB,KAAKoG,OACxC,WAAE6e,EAAU,MAAE7e,EAAK,iBAAEge,GAAqBpkB,KAAKgG,MAE/ChD,EAA6C,CAAC,EAGpD,OAFAhD,KAAKgG,MAAMhD,MAAMvC,SAAQwO,GAASjM,EAAMiM,EAAKvN,KAAOuN,IAE7CiH,EAAKzG,KAAI,CAACsH,EAAK9F,KAAS,IAADiU,EAAAC,EAAAC,EAAAC,EAC1B,OAAKrlB,KAAKgG,MAAM2T,cAAiB5C,EAAIxC,QAIjCvU,KAAKgG,MAAMse,eAAepd,MAAMoe,OAA2D,IAAnDtlB,KAAKgG,MAAMse,eAAepd,MAAMoe,KAAKvO,EAAIjI,MAC1E,MAIPvK,EAAAA,EAAAA,KAACghB,EAAW,CAER/O,QAASxW,KAAKgG,MAAM2T,aACpB7K,KAAMiI,EAAIjI,KACV4H,QACsB,QAAlBwO,EAAArG,GAAS9H,EAAIjI,aAAK,IAAAoW,GAAlBA,EAAoB7T,KAChBwN,GAAS9H,EAAIjI,MAAMuC,MAEnB9M,EAAAA,EAAAA,KAACihB,EAAAA,KAAI,CACDrc,MAAOzE,GAAO2M,KACdmT,IAAKzN,EAAI1F,OAIrB3P,IAAKqV,EAAIjI,KACT6H,SAAUsO,IAAelO,EAAIjI,KAC7BiI,IAAKA,EACLH,SAAU5W,KAAKyiB,eAAiBrc,IAAUwY,GAC1C/H,aAAcwJ,GAAaE,GAAe,EAC1CzJ,WAAYuJ,EAAY,QAAUE,EAAc,OAAS,GACzDrK,KAAMA,EACNO,WAAYA,IAAMzW,KAAK8gB,uBACvB7K,QAAUwP,GAAuBzlB,KAAKuD,SAAS,CAAE2S,KAAMuP,IAAUpiB,UAEjEkB,EAAAA,EAAAA,KAACqX,EAAU,CAEPjC,aAAc3Z,KAAKgG,MAAM2T,aACzBpF,QAASwC,EAAIxC,QACblP,MAAO0R,EAAI1R,MACXuU,aAAcA,CAACoH,EAAc3b,IAAUrF,KAAK8gB,qBAAqB7P,EAAK+P,EAAc3b,GACpFuR,SAAU5W,KAAKyiB,eAAiBrc,IAAUwY,GAC1CvL,QAASjS,IACDA,EAAEskB,SAAWtkB,EAAEukB,UACVC,EAAAA,EAAAA,SACD5lB,KAAKgG,MAAM+b,gBACXhL,EAAIjI,KACJ9O,KAAKgG,MAAM6f,SACX7iB,EACAhD,KAAKgG,MAAM8f,cACX9lB,KAAKgG,MAAM8D,WACb/I,MAAKgS,IACCA,GACAgT,QAAQC,IAAIjT,GAEZ1R,OACK0O,KACG,GAAG1O,OAAOuR,SAASE,aAAazR,OAAOuR,SAAS3D,QAAQ8D,IACxDgE,EAAIjI,MAEPmX,SAEL7B,EAAiBrN,EAAIjI,KACzB,IAGJsV,EAAiBrN,EAAIjI,KACzB,EAEJuC,KACsB,QAAlB8T,EAAAtG,GAAS9H,EAAIjI,aAAK,IAAAqW,GAAlBA,EAAoB9T,KAChBwN,GAAS9H,EAAIjI,MAAMuC,MAEnB9M,EAAAA,EAAAA,KAACihB,EAAAA,KAAI,CACDhB,IAAKzN,EAAI1F,KACTlI,MAAOzE,GAAO2M,OAI1BnJ,KAAM6O,EAAI5G,MACVwG,SAAUsO,IAAelO,EAAIjI,KAC7B+H,aAAc7W,KAAKuhB,MAAMxK,GAAK9K,QAC9B6K,WAAY9W,KAAKuhB,MAAMxK,GAAK1R,MAC5BwU,uBAAuC,QAAjBuL,EAAEplB,KAAKuhB,MAAMxK,UAAI,IAAAqO,OAAA,EAAfA,EAAiB5D,kBACzC1H,qBAAqC,QAAjBuL,EAAErlB,KAAKuhB,MAAMxK,UAAI,IAAAsO,OAAA,EAAfA,EAAiB5D,gBACvC1X,MAAO/J,KAAKgG,MAAM+D,OAjDbgN,EAAIjI,OAxBRiI,EAAIjI,MATN,IAoFO,GAG1B,CAqCA3E,MAAAA,GACI,OAAInK,KAAKyiB,eAEDzZ,EAAAA,EAAAA,MAACkd,EAAAA,gBAAe,CACZ5d,GAAIC,EAAAA,MAAM4R,SAASna,KAAKgG,MAAM+D,MAAOrF,GAAOpF,KAAM,CAAE,6BAA8BoF,GAAOgG,QACzFyb,OAAO,OACPpW,KAAM/P,KAAKgG,MAAMI,QAAUwY,GAC3BnR,QAASA,IAAMzN,KAAKgG,MAAM8e,cAAclG,IACxCwH,OAAQA,IAAMpmB,KAAKgG,MAAM8e,cAAclG,IAAoBvb,SAAA,EAE3DkB,EAAAA,EAAAA,KAAC8hB,EAAe,CAACtc,MAAO/J,KAAKgG,MAAM+D,QAElC/J,KAAKmkB,aAEN5f,EAAAA,EAAAA,KAAC+hB,EAAAA,KAAI,CAAAjjB,SAAErD,KAAKglB,uBACXhlB,KAAKgG,MAAMqe,WACR9f,EAAAA,EAAAA,KAACqX,EAAU,CACP7R,MAAO/J,KAAKgG,MAAM+D,MAClB6M,SAAU5W,KAAKyiB,eAAiBziB,KAAKgG,MAAMI,QAAUwY,GACrDvL,QAASrT,KAAKgG,MAAMugB,SACpBre,KAAMlI,KAAKgG,MAAM2C,EAAE,UACnB0I,MAAM9M,EAAAA,EAAAA,KAACiiB,EAAAA,WAAU,OAG0B,IAAlDxmB,KAAKgG,MAAMse,eAAepd,MAAMoe,KAAKmB,UAAsBzmB,KAAKgG,MAAMI,QAAUwY,KAC7Era,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOia,WAAWtb,UAC1BkB,EAAAA,EAAAA,KAACmiB,EAAY,CACT/M,aAAc3Z,KAAKgG,MAAM2T,aACzBtG,QAASA,IAAMrT,KAAKgG,MAAM0c,iBAAiB1iB,KAAKgG,MAAM2T,sBAS1E3Q,EAAAA,EAAAA,MAAC2d,EAAAA,OAAc,CACXre,GAAIC,EAAAA,MAAM4R,SACNna,KAAKgG,MAAM+D,MACXrF,GAAOpF,KACPU,KAAKgG,MAAMI,QAAUwY,GACfla,GAAOiZ,iBACP3d,KAAKgG,MAAM2T,aACTjV,GAAOgZ,cACPhZ,GAAO+Y,cACf,CACI,qBAAsB/Y,GAAOgG,QAGrCmG,QAAQ,aACRsV,OAAO,OACPpW,KAAM/P,KAAKgG,MAAMI,QAAUwY,GAC3BgI,aAAcA,IAAM5mB,KAAK6f,cAAcjI,UAAY5X,KAAK6f,cAAcjI,QAAQzO,MAAMjE,QAAU,KAC9F2hB,aAAcA,IAAM7mB,KAAK6f,cAAcjI,UAAY5X,KAAK6f,cAAcjI,QAAQzO,MAAMjE,QAAU,KAAK7B,SAAA,EAEnGkB,EAAAA,EAAAA,KAAC8hB,EAAe,CAACtc,MAAO/J,KAAKgG,MAAM+D,QAClC/J,KAAKmkB,aACN5f,EAAAA,EAAAA,KAAC+hB,EAAAA,KAAI,CAACnd,MAAOzE,GAAOwZ,KAAK7a,SAAErD,KAAKglB,uBAC/BhlB,KAAKgG,MAAMqe,WACR9f,EAAAA,EAAAA,KAACqX,EAAU,CACP7R,MAAO/J,KAAKgG,MAAM+D,MAClBZ,MAAO,CAAE+T,WAAY,GACrBtG,SAAU5W,KAAKyiB,eAAiBziB,KAAKgG,MAAMI,QAAUwY,GACrDvL,QAASrT,KAAKgG,MAAMugB,SACpBre,KAAMlI,KAAKgG,MAAM2C,EAAE,UACnB0I,MAAM9M,EAAAA,EAAAA,KAACiiB,EAAAA,WAAU,OAG0B,IAAlDxmB,KAAKgG,MAAMse,eAAepd,MAAMoe,KAAKmB,UAAsBzmB,KAAKgG,MAAMI,QAAUwY,KAC7Era,EAAAA,EAAAA,KAAA,OACI4E,MAAO,IAAKzE,GAAOia,WAAYzZ,QAAS,GACxC8R,IAAKhX,KAAK6f,cAAcxc,UAExBkB,EAAAA,EAAAA,KAACmiB,EAAY,CACT9R,KAAK,QACL+E,aAAc3Z,KAAKgG,MAAM2T,aACzBtG,QAASA,IAAMrT,KAAKgG,MAAM0c,iBAAiB1iB,KAAKgG,MAAM2T,oBAM9E,EAGJgG,GAAOmH,YAAclkB,EACrB,UAAemkB,EAAAA,EAAAA,YAAf,CAA2BpH,IC71BrBjb,GAA8C,CAChDpF,KAAM,CACF4M,KAAM,EACN5G,IAAK,EACLR,MAAO,OACP6F,OAAQ,OACR/F,SAAU,QACV6F,WAAY,oBACZqB,OAAQ,KAEZkb,WAAY,CACR9a,KAAM,MACN5G,IAAK,MACLR,MAAO,MACP6F,OAAQ,MACR/F,SAAU,YAEdqiB,QAAS,CACLC,UAAW,iDAEfC,KAAM,CACFC,gBAAiB,IACjBC,iBAAkB,EAClBC,gBAAiB,SACjBJ,UAAW,uFAwEnB,SApEA,WACI,OACIle,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOpF,KAAK+D,SAAA,EACpBkB,EAAAA,EAAAA,KAAA,SAAAlB,SACK,o0BAyCLkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOsiB,WAAW3jB,UAC1BkB,EAAAA,EAAAA,KAAA,OACI4E,MAAOzE,GAAOuiB,QACdniB,MAAM,OACN6F,OAAO,OACP4c,QAAQ,YACRC,MAAM,6BAA4BnkB,UAElCkB,EAAAA,EAAAA,KAAA,UACI4E,MAAOzE,GAAOyiB,KACdM,KAAK,OACLC,YAAY,IACZC,cAAc,QACdC,GAAG,KACHC,GAAG,KACHC,EAAE,aAM1B,ECtFMpjB,GAA8B,CAChCgG,MAAO,CACHC,OAAQ,OACR+Z,UAAW,OACX5Z,SAAU,OACVG,SAAU,UAEdkF,MAAQpG,IAAe,CACnB1E,MAAO0E,EAAMS,QAAQud,UAAU5O,OAEnC6O,KAAM,CACFrd,OAAQ,oBACRM,SAAU,QAEdgd,MAAO,CACHnjB,MAAO,IACPwZ,aAAc,IAElB4J,KAAM,CACFzU,SAAU,GAEdsK,QAAS,CACLpT,OAxBe,GAyBf4Z,WAAY,SAgBpB,MAAM4D,WAA0BpiB,EAAAA,UAG5B3G,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAHAoiB,cAAQ,EAKrBpoB,KAAKoG,MAAQ,CACTiiB,SAAU,GACVC,eAAgB,GAChBC,eAAe,EACfC,qBAAqB,GAGzBxoB,KAAKooB,UAAWK,EAAAA,EAAAA,YACpB,CAEA3hB,iBAAAA,GAA2B,IAAD4hB,EACD,QAArBA,EAAA1oB,KAAKooB,SAASxQ,eAAO,IAAA8Q,GAArBA,EAAuBzC,OAC3B,CAEA9b,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAAC8T,EAAAA,MAAK,CAAC3T,MAAOzE,GAAOgG,MAAMrH,SAAA,EACvBkB,EAAAA,EAAAA,KAAA,QACI4E,MAAOzE,GAAOsjB,KACdW,YAAU,EACVC,aAAa,MAAKvlB,UAElB2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTwO,UAAU,SAAQxlB,SAAA,EAElBkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,KACV9B,GAAI5D,GAAOyL,MAAM9M,SAEhBrD,KAAKgG,MAAM2C,EAAE,gDAGtBpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACR/C,UAAQ,EACR3E,MAAOzE,GAAOujB,MACd9W,MAAOnR,KAAKgG,MAAM2C,EAAE,sBACpBlE,MAAM,QACN2L,UAAW,CACP6X,MAAO,CAAEc,UAAU,IAEvBC,WAAYhpB,KAAKgG,MAAM2C,EAAE,6CAGjCpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACRT,UAAW,CACP6X,MAAO,CACHW,aAAc,gBAElBK,UAAW,CACPL,aAAc,QAGtBM,UAAW9nB,IACP,GAAc,UAAVA,EAAEsO,KAAmB1P,KAAKoG,MAAMiiB,WAAaroB,KAAKoG,MAAMmiB,cAAe,CACvE,MAAMnM,EAAK/a,OAAO8nB,SAASC,eAAe,kBACtChN,GACAA,EAAG6J,OAEX,GAEJ2C,aAAa,MACbzf,MAAOzE,GAAOujB,MACdjR,IAAKhX,KAAKooB,SACVjX,MAAOnR,KAAKgG,MAAM2C,EAAE,0BACpBzI,KAAK,WACLuE,MAAOzE,KAAKoG,MAAMiiB,SAClBnf,QAASlJ,KAAKoG,MAAMmiB,cACpBhf,SAAUnI,IACN,MAAMmnB,EAAgBnoB,EAAAA,EAAWipB,cAAcjoB,EAAEmR,OAAO9N,OAClD+jB,EAAsBpoB,EAAAA,EAAWipB,cACnCjoB,EAAEmR,OAAO9N,MACTzE,KAAKoG,MAAMkiB,gBAEftoB,KAAKuD,SAAS,CACV8kB,SAAUjnB,EAAEmR,OAAO9N,MACnB8jB,gBAAeA,GAAgBvoB,KAAKgG,MAAM2C,EAAE4f,GAC5CC,sBAAqBA,GACfxoB,KAAKgG,MAAM2C,EAAE6f,IAErB,EAENQ,WAAYhpB,KAAKgG,MAAM2C,EACnB,mGAIZpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACRT,UAAW,CACP6X,MAAO,CACHW,aAAc,gBAElBK,UAAW,CACPL,aAAc,MACd9oB,GAAI,mBAGZopB,UAAW9nB,IAEO,UAAVA,EAAEsO,MACF1P,KAAKoG,MAAMiiB,UACVroB,KAAKoG,MAAMmiB,eACXvoB,KAAKoG,MAAMoiB,qBAEZxoB,KAAKgG,MAAMsjB,OAAOtpB,KAAKoG,MAAMiiB,SACjC,EAEJO,aAAa,MACbzf,MAAOzE,GAAOujB,MACd9W,MAAOnR,KAAKgG,MAAM2C,EAAE,iCACpBlE,MAAOzE,KAAKoG,MAAMkiB,eAClBpoB,KAAK,WACLgJ,QAASlJ,KAAKoG,MAAMoiB,oBACpBjf,SAAUnI,IACN,MAAMonB,EAAsBpoB,EAAAA,EAAWipB,cACnCrpB,KAAKoG,MAAMiiB,SACXjnB,EAAEmR,OAAO9N,OAEbzE,KAAKuD,SAAS,CACV+kB,eAAgBlnB,EAAEmR,OAAO9N,MACzB+jB,sBAAqBA,GACfxoB,KAAKgG,MAAM2C,EAAE6f,IAErB,EAENQ,WAAYhpB,KAAKoG,MAAMoiB,qBAAuB,aAK9Dxf,EAAAA,EAAAA,MAACugB,EAAAA,QAAO,CAACpgB,MAAOzE,GAAOqZ,QAAQ1a,SAAA,EAC3BkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwjB,QACnB3jB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACH9N,MAAM,UACNwL,QAAQ,YACRwC,QAASA,IAAMrT,KAAKgG,MAAMsjB,OAAOtpB,KAAKoG,MAAMiiB,UAC5Cva,UACK9N,KAAKoG,MAAMkiB,kBAAoBtoB,KAAKoG,MAAMoiB,uBAAyBxoB,KAAKoG,MAAMmiB,cAEnFjV,WAAW/O,EAAAA,EAAAA,KAACilB,EAAAA,MAAS,IAAInmB,SAExBrD,KAAKgG,MAAM2C,EAAE,qCAKlC,EAGJ,UAAeoe,EAAAA,EAAAA,YAAf,CAA2BoB,I,gBCrN3B,MAqGA,GArGoD,CAChD/f,GACI,qlCAQJqhB,GACI,6pCAQJC,GACI,kqNAQJ5F,GACI,mtCAQJ6F,GACI,2kCAQJC,GACI,8kCAQJC,GACI,4kCAQJC,GACI,isCAQJvQ,GACI,4kCAQJwQ,GACI,onCAQJ,QACI,ghDC9DFrlB,GAA8B,CAChCgG,MAAO,CACHC,OAAQ,OACR+Z,UAAW,OACX5Z,SAAU,OACVG,SAAU,UAEd+e,QAAS,CACLrf,OAAQ,oBACR7F,MAAO,OACPmG,SAAU,SACV8R,QAAS,GACTkN,UAAW,UAEfC,eAAgB,CACZ1P,SAAU,IACVvK,YAAa,IAEjBka,WAAY,CACRrlB,MAAO,OACP6F,OAAQ,qBACRM,SAAU,QAEdid,KAAM,CACFzU,SAAU,GAEd2W,WAAY,CACR/L,UAAW,GACXhZ,MAAO,WAEXglB,cAAe,CACXxlB,QAAS,gBAEbylB,eAAgB,CACZL,UAAW,OACXja,WAAY,IAEhBua,YAAa,CACTva,WAAY,GAEhB+N,QAAS,CACLpT,OA3Ce,GA4Cf4Z,WAAY,QAEhBiG,eAAgB,CACZ1lB,MAAO,OACPgG,SAAU,IACVmf,UAAW,OACXxe,OAAQ,QAEZgf,YAAa,CACTnM,aAAc,KAqBtB,MAAMoM,WAAyB3kB,EAAAA,UAG3B3G,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAHAoiB,cAAQ,EAKrBpoB,KAAKoG,MAAQ,CACTukB,oBAAoB,EACpBzH,KAAMljB,KAAKgG,MAAMkd,MAAQxa,EAAAA,KAAK0I,cAC9BwZ,UAAU,EACVC,SAAU,KACVC,YAAY,EACZC,sBAAsB,GAG1B/qB,KAAKooB,UAAWK,EAAAA,EAAAA,YACpB,CAEA3hB,iBAAAA,GAA2B,IAAD4hB,EACD,QAArBA,EAAA1oB,KAAKooB,SAASxQ,eAAO,IAAA8Q,GAArBA,EAAuBzC,OAC3B,CAEA,oBAAM+E,GAEF,MAAMliB,QAAiB9I,KAAKgG,MAAM3G,OAAO4rB,qBAEnCC,QAA2ClrB,KAAKgG,MAAM3G,OAAO8rB,UAC/D,kBAAkBriB,KAGhB+hB,QAAiB7qB,KAAKgG,MAAM3G,OAAO+rB,YAAYF,EAAShnB,OAAO+K,KAAM,YAE3EjP,KAAKuD,SAAS,CAAEsnB,WAAUC,YAAY,GAC1C,CAEAO,sBAAAA,GACI,OAAKrrB,KAAKoG,MAAM2kB,sBAIZ/hB,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACHC,MAAM,EACNjF,SAAS,KACTwJ,WAAS,EACThM,GAAI,CAAE,qBAAsB,CAAEoc,UAAW,oBAAqB/Z,OAAQ,sBACtE8C,QAASA,IAAMzN,KAAKuD,SAAS,CAAEwnB,sBAAsB,IAAS1nB,SAAA,EAE9DkB,EAAAA,EAAAA,KAACmQ,EAAAA,YAAW,CAAArR,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3BK,EAAAA,EAAAA,MAACuH,EAAAA,cAAa,CAAAlN,SAAA,CACTrD,KAAKoG,MAAM0kB,aAAcvmB,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,IACxC5I,KAAKoG,MAAM0kB,aAAcvmB,EAAAA,EAAAA,KAAA,OAAAlB,SAAMrD,KAAKgG,MAAM2C,EAAE,yBAC3C3I,KAAKoG,MAAM0kB,aACTvmB,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAE3D,SAAU,GAAI8Y,aAAc,GAAIjb,SACzCrD,KAAKgG,MAAM2C,EACR,oIAIV3I,KAAKoG,MAAM0kB,aACTvmB,EAAAA,EAAAA,KAAC+mB,GAAAA,EAAM,CACHniB,MAAO,CAAEwB,OAAQ,qBACjB4gB,eAAa,EACbzhB,UAAW9J,KAAKgG,MAAM8D,UACtBrF,MAAOnE,KAAKC,UAAUP,KAAKoG,MAAMykB,SAAU,KAAM,SAI7DtmB,EAAAA,EAAAA,KAAC2O,EAAAA,cAAa,CAAA7P,UACVkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACRwC,QAASA,IAAMrT,KAAKuD,SAAS,CAAEwnB,sBAAsB,IACrD1lB,MAAM,UACN+N,WAAS,EACTE,WAAW/O,EAAAA,EAAAA,KAACinB,EAAAA,MAAK,IAAInoB,SAEpBqF,EAAAA,KAAKC,EAAE,gBAtCb,IA2Cf,CAEA8iB,cAAAA,GACI,OAAKzrB,KAAKoG,MAAMwkB,UAIZ5hB,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACHC,MAAM,EACNtC,QAASA,IAAMzN,KAAKuD,SAAS,CAAEqnB,UAAU,IAASvnB,SAAA,EAElDkB,EAAAA,EAAAA,KAACmQ,EAAAA,YAAW,CAAArR,SAAErD,KAAKgG,MAAM2C,EAAE,cAC3BpE,EAAAA,EAAAA,KAACgM,EAAAA,cAAa,CAAAlN,UACV2F,EAAAA,EAAAA,MAAC0iB,EAAAA,kBAAiB,CAAC5rB,GAAG,2BAA0BuD,SAAA,EAC5CkB,EAAAA,EAAAA,KAAA,QACI+I,KAAK,MACL,aAAW,UAASjK,SACvB,iBAEO,IACPrD,KAAKgG,MAAM2C,EAAE,yCAGtBpE,EAAAA,EAAAA,KAAC2O,EAAAA,cAAa,CAAA7P,UACVkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACRwC,QAASA,IAAMrT,KAAKuD,SAAS,CAAEqnB,UAAU,IACzCvlB,MAAM,UACNiO,WAAW/O,EAAAA,EAAAA,KAACilB,EAAAA,MAAS,IAAInmB,SAExBqF,EAAAA,KAAKC,EAAE,qBA1Bb,IA+Bf,CAEA,wBAAOgjB,GACH,MACMC,GADOC,GAAanjB,EAAAA,KAAK0I,gBAAkBya,GAAazjB,IAC3CW,MAAM,MACzB,OACIxE,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO8lB,eAAennB,SAC7BuoB,EAAMnc,KAAI,CAACqc,EAAMzZ,KACd9N,EAAAA,EAAAA,KAAA,OACI4E,MAAOzE,GAAO+lB,YAAYpnB,SAGzByoB,GAFIzZ,MAOzB,CAEAlI,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAAC8T,EAAAA,MAAK,CAAC3T,MAAOzE,GAAOgG,MAAMrH,SAAA,EACvB2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTlR,MAAOzE,GAAOslB,QACdnB,UAAU,SAAQxlB,SAAA,EAElB2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CAAA/W,SAAA,EACF2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAOwlB,eAAe7mB,SAAA,EAE7B2F,EAAAA,EAAAA,MAACgjB,EAAAA,WAAU,CAAA3oB,SAAA,EACPkB,EAAAA,EAAAA,KAAC0nB,EAAAA,SAAS,IACTjsB,KAAKgG,MAAM2C,EAAE,gBAElBK,EAAAA,EAAAA,MAACkjB,EAAAA,OAAM,CACHrb,QAAQ,WACRpM,MAAOiE,EAAAA,KAAK0I,cACZ7H,SAAUnI,IACNsH,EAAAA,KAAKyjB,YAAY/qB,EAAEmR,OAAO9N,OAC1BzE,KAAKuD,SAAS,CAAE2f,KAAM9hB,EAAEmR,OAAO9N,OAA8B,EAC/DpB,SAAA,EAEFkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,KAAIpB,SAAC,aACrBkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,KAAIpB,SAAC,aACrBkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,KAAIpB,SAAC,gDACrBkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,KAAIpB,SAAC,eACrBkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,KAAIpB,SAAC,gBACrBkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,KAAIpB,SAAC,iBACrBkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,KAAIpB,SAAC,cACrBkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,KAAIpB,SAAC,aACrBkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,KAAIpB,SAAC,YACrBkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,KAAIpB,SAAC,kEACrBkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAC,oCAGhC2F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO2lB,cAAchnB,SAAA,EAC7BkB,EAAAA,EAAAA,KAACiR,EAAAA,iBAAgB,CACbrM,MAAOzE,GAAO0lB,WACd3U,SACIlR,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACLsB,IAAKhX,KAAKooB,SACVzS,QAAS3V,KAAKoG,MAAMukB,mBACpBphB,SAAUnI,GAAKpB,KAAKuD,SAAS,CAAEonB,mBAAoBvpB,EAAEmR,OAAOoD,YAGpExE,MAAOnR,KAAKgG,MAAM2C,EAAE,2DAExBK,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO4lB,eAAejnB,SAAA,CAC7BrD,KAAKgG,MAAM2C,EAAE,6CACdpE,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,WACR1H,MAAO,CAAE6G,WAAY,IACrBqD,QAASA,IACLrT,KAAKuD,SAAS,CAAEwnB,sBAAsB,EAAMD,YAAY,IAAQ,IAC5D9qB,KAAKgrB,mBAEZ3nB,SAEArD,KAAKgG,MAAM2C,EAAE,yCAK9BpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAAA,MAAAlB,SAAKrD,KAAKgG,MAAM2C,EAAE,sBAEtBpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACjR,MAAOzE,GAAOylB,WAAW9mB,SAAEqnB,GAAiBiB,0BAEvD3iB,EAAAA,EAAAA,MAACugB,EAAAA,QAAO,CAACpgB,MAAOzE,GAAOqZ,QAAQ1a,SAAA,EAC3BkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwjB,QACnB3jB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACRxL,MAAM,OACNgO,QAASA,IAAMrT,KAAKuD,SAAS,CAAEqnB,UAAU,IACzCtX,WAAW/O,EAAAA,EAAAA,KAAC8nB,EAAAA,MAAU,IAAIhpB,SAEzBrD,KAAKgG,MAAM2C,EAAE,gBAElBpE,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACRxL,MAAM,UACN8D,MAAOzE,GAAO6lB,YACdzc,UAAW9N,KAAKoG,MAAMukB,mBACtBtX,QAASA,IAAMrT,KAAKgG,MAAMsjB,OAAO,CAAEpG,KAAMljB,KAAKoG,MAAM8c,OACpD5P,WAAW/O,EAAAA,EAAAA,KAACilB,EAAAA,MAAS,IAAInmB,SAExBrD,KAAKgG,MAAM2C,EAAE,YAElBpE,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwjB,UAEtBloB,KAAKyrB,iBACLzrB,KAAKqrB,2BAGlB,EAGJ,UAAetE,EAAAA,EAAAA,YAAf,CAA2B2D,I,2HC3O3B,MACA,GAAe,IAA0B,6D,+DC1EzC,MAAM4B,GAA0DtmB,IAC5D,MAAMyJ,GAAM8c,EAAAA,GAAAA,MAIZ,OAHIvmB,EAAMwmB,QACNxmB,EAAMwmB,OAAO/c,GAEV,IAAI,EAITgd,GAAiB,IAEjB/nB,GAA8B,CAChCgG,MAAO,CACHC,OAAQ,OACR+Z,UAAW,OACX5Z,SAAU,OACVG,SAAU,UAEdkF,MAAQpG,IAAe,CACnB1E,MAAO0E,EAAMS,QAAQud,UAAU5O,OAEnCuT,SAAU,CACN/hB,OAAQ,oBACRM,SAAU,QAEdid,KAAM,CACFzU,SAAU,GAEdkZ,QAAS,CACLhiB,OAAQ,OACR7F,MAAO,qBACPmG,SAAU,UAEdwE,IAAK,CACD9E,OAAQ,OACR7F,MAAO,OACPmG,SAAU,UAEd2hB,YAAa,CACT9nB,MAAO2nB,GACPnO,aAAc,GAElBuO,mBAAoB,CAChB/nB,MAAO2nB,IACPnO,aAAc,GAElBwO,aAAc,CACVhoB,MAAO2nB,IACPxc,YAAa,EACbD,WAAY,EACZia,UAAW,OACXtf,OAAQ,OACRM,SAAU,QAEd8S,QAAS,CACLpT,OA/Ce,GAgDf4Z,WAAY,QAEhBwI,aAAc,CACVjoB,MAAO,OACP6F,OAAQ,sBAIVqiB,GAA4C,CAC9C,CACIltB,GAAI,SACJqQ,MAAO,UAEX,CACIrQ,GAAI,IACJqQ,MAAO,KAEX,CACIrQ,GAAI,SACJqQ,MAAO,UAEX,CACIrQ,GAAI,SACJqQ,MAAO,UAEX,CACIrQ,GAAI,MACJqQ,MAAO,QAoCf,MAAM8c,WAA0BlnB,EAAAA,UAgB5B3G,WAAAA,CAAY4G,GACRC,MAAMD,GAhBV,KAOQknB,YAAM,OAENzd,SAAG,OAEH0d,eAAS,OAETC,kBAAY,OAyDpBC,MAAS5d,IACL,IAAKzP,KAAKyP,KAAOzP,KAAKyP,MAAQA,EAAK,CAC/BzP,KAAKyP,IAAMA,EACX,MAAM6d,EAAsB,CACxBC,gBAAmCjc,IAAxBtR,KAAKoG,MAAMonB,SAA0BxtB,KAAKoG,MAAMonB,SAA6B,OAAS,EACjGD,gBAAoCjc,IAAzBtR,KAAKoG,MAAMqnB,UAA2BztB,KAAKoG,MAAMqnB,UAA8B,OAAS,GAGvGztB,KAAKktB,OAAS,IAAIQ,GAAAA,OAAOJ,EAAQ,CAC7BK,WAAW,EACXxd,MAAOzH,EAAAA,KAAKC,EAAE,qBACd8b,IAAK/b,EAAAA,KAAKC,EAAE,qBACZilB,aAAa,IAEZC,MAAMpe,GACNqe,UAAU,qCACVC,GAAG,CAAEC,QAAUC,GAAsBjuB,KAAKkuB,gBAAgBD,IACnE,GACF,KAEFC,gBAAmBD,IAEfjuB,KAAKuD,SAAS,CAAEiqB,SAAUS,EAAI1b,OAAO4b,QAAQC,IAAKX,UAAWQ,EAAI1b,OAAO4b,QAAQE,KAAM,EACxF,KAsBFC,iBAAmB,CAACL,EAAoCnuB,KACpD,MAAM2E,EAAQwpB,EAAI1b,OAAO9N,MACd,aAAP3E,EACAE,KAAKuD,SAAS,CAAEiqB,SAAU/oB,IAE1BzE,KAAKuD,SAAS,CAAEkqB,UAAWhpB,IAG/BzE,KAAKuuB,mBAAmB,EAC1B,KA2BFC,gBAAkB,CAACP,EAAoCnuB,KACxC,SAAPA,EACAE,KAAKuD,SAAS,CAAEkrB,KAAMR,EAAI1b,OAAO9N,QACnB,YAAP3E,EACPE,KAAKuD,SAAS,CAAEmrB,QAAST,EAAI1b,OAAO9N,QAEpCzE,KAAKuD,SAAS,CAAEorB,QAASV,EAAI1b,OAAO9N,QAGxCzE,KAAK4uB,mBAAmB,EA9IxB5uB,KAAKoG,MAAQ,CACTyoB,SAAU,QACVC,SAAU,SACV7kB,WAAY,aACZD,cAAc,EACd2kB,QAAS,GACTF,KAAM,GACNC,QAAS,GACTjB,UAAW,EACXD,SAAU,EACVuB,eAAgB,SAChBC,KAAM,GAEd,CAEAC,aAAAA,CAAcrqB,GACV5E,KAAKuD,SACD,CACIiqB,SAAUD,WAAW3oB,EAASsqB,OAAO1B,SAAS2B,QAAQ,IACtD1B,UAAWF,WAAW3oB,EAASsqB,OAAOzB,UAAU0B,QAAQ,MAE5D,IAAMnvB,KAAKuuB,qBAEnB,CAEAa,qBAAAA,IACQ/tB,OAAOguB,UAAUC,aAAiBtvB,KAAKoG,MAAMqnB,WAAcztB,KAAKoG,MAAMonB,SAGtExtB,KAAKuuB,oBAFLltB,OAAOguB,UAAUC,YAAYC,oBAAmB3qB,GAAY5E,KAAKivB,cAAcrqB,IAIvF,CAEA,uBAAMkC,GACF,MAAM+c,QAAqB7jB,KAAKgG,MAAM3G,OAAOukB,wBAAuB,GACpE5jB,KAAKuD,SACD,CACIsrB,SAAUhL,EAAa3f,OAAO2qB,SAC9BC,SAAUjL,EAAa3f,OAAO4qB,SAC9B7kB,WAAY4Z,EAAa3f,OAAO+F,WAChCD,aAAc6Z,EAAa3f,OAAO8F,aAClC2kB,QAAS9K,EAAa3f,OAAOyqB,QAC7BF,KAAM5K,EAAa3f,OAAOuqB,KAC1BC,QAAS,GACTjB,UAAW5J,EAAa3f,OAAOupB,UAC/BD,SAAU3J,EAAa3f,OAAOspB,SAC9BuB,eAAgBlL,EAAa3f,OAAO6qB,gBAAkB,WAE1D,IAAM/uB,KAAKovB,yBAEnB,CA2BAb,iBAAAA,CAAkBiB,GACVxvB,KAAKotB,cACL/Q,aAAarc,KAAKotB,cAEtBptB,KAAKotB,aAAe1a,YAChB,KACI1S,KAAKotB,aAAe,KACpBptB,KAAKyP,IAAIggB,MAAM,CACXlC,WAAWvtB,KAAKoG,MAAMonB,UACtBD,WAAWvtB,KAAKoG,MAAMqnB,aAE1BztB,KAAKktB,OAAOwC,UAAU,CAClBnC,WAAWvtB,KAAKoG,MAAMonB,UACtBD,WAAWvtB,KAAKoG,MAAMqnB,YACxB,GAEN+B,EAAS,EAAI,IAErB,CAaAZ,iBAAAA,GACQ5uB,KAAKmtB,WACL9Q,aAAarc,KAAKmtB,WAGtBntB,KAAKmtB,UAAYza,YAAW,KACxB1S,KAAKmtB,UAAY,MACA,IAAIwC,GAAAA,uBAGhBC,OAAO,CAAEC,MAAO,GAAG7vB,KAAKoG,MAAMuoB,WAAW3uB,KAAKoG,MAAMqoB,SAASzuB,KAAKoG,MAAMsoB,YACxE3tB,MAAK+uB,IACEA,EAAQ,IACRpd,YACI,IACI1S,KAAKuD,SAAS,CAAEiqB,SAAUsC,EAAQ,GAAG3X,EAAGsV,UAAWqC,EAAQ,GAAG9U,EAAGgU,KAAM,KAAM,IACzEhvB,KAAKuuB,mBAAkB,MAE/B,KAER,GACF,GACP,IACP,CAcApkB,MAAAA,GACI,MAAMmjB,EAAsB,CACxBC,gBAAoCjc,IAAzBtR,KAAKoG,MAAMqnB,UAA2BztB,KAAKoG,MAAMqnB,UAA8B,OAAS,EACnGF,gBAAoCjc,IAAzBtR,KAAKoG,MAAMqnB,UAA2BztB,KAAKoG,MAAMqnB,UAA8B,OAAS,IAGjG,KAAEuB,GAAShvB,KAAKoG,MAEtB,OACI4C,EAAAA,EAAAA,MAAC8T,EAAAA,MAAK,CAAC3T,MAAOzE,GAAOgG,MAAMrH,SAAA,EACvB2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTwO,UAAU,SACV1f,MAAOzE,GAAOgoB,SAASrpB,SAAA,EAEvBkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACjR,MAAOzE,GAAOooB,aAAazpB,UAC9B2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTwO,UAAU,SACV1f,MAAO,CAAErE,MAAO,qBAAsBzB,SAAA,EAEtCkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,KACV9B,GAAI5D,GAAOyL,MAAM9M,SAEhBrD,KAAKgG,MAAM2C,EAAE,gCAGtBK,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTwO,UAAU,SACV1f,MAAOzE,GAAOqoB,aAAa1pB,SAAA,EAE3BkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACjR,MAAO,CAAE8gB,UAAW,QAAS5mB,UAChC2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAOkoB,YAAYvpB,SAAA,EAE1BkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CAAA3oB,SAAErD,KAAKgG,MAAM2C,EAAE,uBAC1BK,EAAAA,EAAAA,MAACkjB,EAAAA,OAAM,CACHrb,QAAQ,WACRpM,MAAOzE,KAAKoG,MAAMyoB,SAClBtlB,SAAUnI,GAAKpB,KAAKuD,SAAS,CAAEsrB,SAAUztB,EAAEmR,OAAO9N,QAAwBpB,SAAA,EAE1EkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAIpB,SAAC,WACrBkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAIpB,SAAC,mBAIjCkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAACwrB,EAAAA,aAAY,CACTC,UAAQ,EACRC,QAASjD,GACTkD,WAAYlwB,KAAKoG,MAAM0oB,SACvBvlB,SAAUA,CAACiF,EAAQoC,IACf5Q,KAAKuD,SAAS,CAAEurB,SAAUle,EAAWA,EAAS9Q,GAAK,KAEvDqwB,cAAeA,CAAC3hB,EAAQsgB,IAAa9uB,KAAKuD,SAAS,CAAEurB,aACrDsB,eAAiBC,GAA0CA,EAAOlgB,MAClEmgB,aAAcA,CAACtqB,EAAOqqB,KAClB9rB,EAAAA,EAAAA,KAAA,SAAQyB,EAAK3C,SAAGgtB,EAAOlgB,QAE3BogB,YAAaC,IACTjsB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,IACF0H,EACJ3f,QAAQ,WACRM,MAAOnR,KAAKgG,MAAM2C,EAAE,mBAKpCpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACjR,MAAO,CAAE8gB,UAAW,QAAS5mB,UAChC2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAOkoB,YAAYvpB,SAAA,EAE1BkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CAAA3oB,SAAErD,KAAKgG,MAAM2C,EAAE,kBAC1BK,EAAAA,EAAAA,MAACkjB,EAAAA,OAAM,CACHrb,QAAQ,WACRpM,MAAOzE,KAAKoG,MAAM6D,WAClBV,SAAUnI,GAAKpB,KAAKuD,SAAS,CAAE0G,WAAY7I,EAAEmR,OAAO9N,QAASpB,SAAA,EAE7DkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAC,gBAC7BkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAC,gBAC7BkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAC,wBAIzCkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACjR,MAAO,CAAE8gB,UAAW,QAAS5mB,UAChC2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAOkoB,YAAYvpB,SAAA,EAE1BkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CAAA3oB,SAAErD,KAAKgG,MAAM2C,EAAE,oBAC1BK,EAAAA,EAAAA,MAACkjB,EAAAA,OAAM,CACHrb,QAAQ,WACRpM,MAAOzE,KAAKoG,MAAM4D,aAAe,OAAS,QAC1CT,SAAUnI,GAAKpB,KAAKuD,SAAS,CAAEyG,aAAiC,SAAnB5I,EAAEmR,OAAO9N,QAAoBpB,SAAA,EAE1E2F,EAAAA,EAAAA,MAACojB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAA,CACjBrD,KAAKgG,MAAM2C,EAAE,UACdpE,EAAAA,EAAAA,KAAA,QAAM4E,MAAO,CAAE6G,WAAY,GAAI3M,SAAC,eAEpC2F,EAAAA,EAAAA,MAACojB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAA,CAClBrD,KAAKgG,MAAM2C,EAAE,UACdpE,EAAAA,EAAAA,KAAA,QAAM4E,MAAO,CAAE6G,WAAY,GAAI3M,SAAC,uBAKhDkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACjR,MAAO,CAAE8gB,UAAW,QAAS5mB,UAChC2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAOkoB,YAAYvpB,SAAA,EAE1BkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CAAA3oB,SAAErD,KAAKgG,MAAM2C,EAAE,cAC1BK,EAAAA,EAAAA,MAACkjB,EAAAA,OAAM,CACHrb,QAAQ,WACRpM,MAAOzE,KAAKoG,MAAMuoB,SAAW,GAC7BplB,SAAUnI,GAAKpB,KAAKwuB,gBAAgBptB,EAAG,WAAWiC,SAAA,EAElDkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,GAAEpB,SAAErD,KAAKgG,MAAM2C,EAAE,4BACjCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,cAAapB,SAAErD,KAAKgG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,qBAAoBpB,SAC/BrD,KAAKgG,MAAM2C,EAAE,yBAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,cAAapB,SAAErD,KAAKgG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,iBAAgBpB,SAAErD,KAAKgG,MAAM2C,EAAE,qBAC/CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,gBAAepB,SAAErD,KAAKgG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YAEtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,cAAapB,SAAErD,KAAKgG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,iBAAgBpB,SAAErD,KAAKgG,MAAM2C,EAAE,qBAC/CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,sBAAqBpB,SAChCrD,KAAKgG,MAAM2C,EAAE,0BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,yBAAwBpB,SACnCrD,KAAKgG,MAAM2C,EAAE,6BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,gBAAepB,SAAErD,KAAKgG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,iCAAgCpB,SAC3CrD,KAAKgG,MAAM2C,EAAE,qCAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,oBAAmBpB,SAC9BrD,KAAKgG,MAAM2C,EAAE,wBAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,eAAcpB,SAAErD,KAAKgG,MAAM2C,EAAE,mBAC7CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,iBAAgBpB,SAAErD,KAAKgG,MAAM2C,EAAE,qBAC/CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,2BAA0BpB,SACrCrD,KAAKgG,MAAM2C,EAAE,+BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAErD,KAAKgG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,mBAAkBpB,SAC7BrD,KAAKgG,MAAM2C,EAAE,uBAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,gBAAepB,SAAErD,KAAKgG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,eAAcpB,SAAErD,KAAKgG,MAAM2C,EAAE,mBAC7CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAErD,KAAKgG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,iBAAgBpB,SAAErD,KAAKgG,MAAM2C,EAAE,qBAC/CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,qBAAoBpB,SAC/BrD,KAAKgG,MAAM2C,EAAE,yBAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,cAAapB,SAAErD,KAAKgG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,oBAAmBpB,SAC9BrD,KAAKgG,MAAM2C,EAAE,wBAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,8BAA6BpB,SACxCrD,KAAKgG,MAAM2C,EAAE,kCAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,gBAAepB,SAAErD,KAAKgG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAErD,KAAKgG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,gBAAepB,SAAErD,KAAKgG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,mBAAkBpB,SAC7BrD,KAAKgG,MAAM2C,EAAE,uBAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,8BAA6BpB,SACxCrD,KAAKgG,MAAM2C,EAAE,kCAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAErD,KAAKgG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,gBAAepB,SAAErD,KAAKgG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,8BAA6BpB,SACxCrD,KAAKgG,MAAM2C,EAAE,kCAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,cAAapB,SAAErD,KAAKgG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAErD,KAAKgG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAErD,KAAKgG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,cAAapB,SAAErD,KAAKgG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,mCAAkCpB,SAC7CrD,KAAKgG,MAAM2C,EAAE,uCAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,yBAAwBpB,SACnCrD,KAAKgG,MAAM2C,EAAE,6BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,gBAAepB,SAAErD,KAAKgG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAErD,KAAKgG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,mBAAkBpB,SAC7BrD,KAAKgG,MAAM2C,EAAE,uBAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,uBAAsBpB,SACjCrD,KAAKgG,MAAM2C,EAAE,2BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,gBAAepB,SAAErD,KAAKgG,MAAM2C,EAAE,oBAC9CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,cAAapB,SAAErD,KAAKgG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAErD,KAAKgG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,iBAAgBpB,SAAErD,KAAKgG,MAAM2C,EAAE,qBAC/CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,2BAA0BpB,SACrCrD,KAAKgG,MAAM2C,EAAE,+BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAErD,KAAKgG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,mBAAkBpB,SAC7BrD,KAAKgG,MAAM2C,EAAE,uBAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAErD,KAAKgG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,cAAapB,SAAErD,KAAKgG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,cAAapB,SAAErD,KAAKgG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,wBAAuBpB,SAClCrD,KAAKgG,MAAM2C,EAAE,4BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,cAAapB,SAAErD,KAAKgG,MAAM2C,EAAE,kBAC5CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,mCAAkCpB,SAC7CrD,KAAKgG,MAAM2C,EAAE,uCAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,wBAAuBpB,SAClCrD,KAAKgG,MAAM2C,EAAE,4BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,eAAcpB,SAAErD,KAAKgG,MAAM2C,EAAE,mBAC7CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,eAAcpB,SAAErD,KAAKgG,MAAM2C,EAAE,mBAC7CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,kBAAiBpB,SAC5BrD,KAAKgG,MAAM2C,EAAE,sBAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,eAAcpB,SAAErD,KAAKgG,MAAM2C,EAAE,mBAC7CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,uCAAsCpB,SACjDrD,KAAKgG,MAAM2C,EAAE,2CAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,0BAAyBpB,SACpCrD,KAAKgG,MAAM2C,EAAE,8BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,iCAAgCpB,SAC3CrD,KAAKgG,MAAM2C,EAAE,qCAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,uBAAsBpB,SACjCrD,KAAKgG,MAAM2C,EAAE,2BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,eACzCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAErD,KAAKgG,MAAM2C,EAAE,WACrCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,sBAAqBpB,SAChCrD,KAAKgG,MAAM2C,EAAE,0BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,eAAcpB,SAAErD,KAAKgG,MAAM2C,EAAE,mBAC7CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,2BAA0BpB,SACrCrD,KAAKgG,MAAM2C,EAAE,+BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,uBAAsBpB,SACjCrD,KAAKgG,MAAM2C,EAAE,2BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,uCAAsCpB,SACjDrD,KAAKgG,MAAM2C,EAAE,2CAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,aAAYpB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC3CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,qBAAoBpB,SAC/BrD,KAAKgG,MAAM2C,EAAE,yBAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,YAAWpB,SAAErD,KAAKgG,MAAM2C,EAAE,gBAC1CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,UAASpB,SAAErD,KAAKgG,MAAM2C,EAAE,cACxCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,2BAA0BpB,SACrCrD,KAAKgG,MAAM2C,EAAE,+BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,wBAAuBpB,SAClCrD,KAAKgG,MAAM2C,EAAE,4BAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,4BAA2BpB,SACtCrD,KAAKgG,MAAM2C,EAAE,gCAElBpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,iBAAgBpB,SAAErD,KAAKgG,MAAM2C,EAAE,qBAC/CpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,YACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,WAAUpB,SAAErD,KAAKgG,MAAM2C,EAAE,uBAIrDpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACRM,MAAOnR,KAAKgG,MAAM2C,EAAE,QACpBQ,MAAOzE,GAAOkoB,YACdnoB,MAAOzE,KAAKoG,MAAMqoB,KAClBllB,SAAUnI,GAAKpB,KAAKwuB,gBAAgBptB,EAAG,QACvCgP,UAAW,CACP6X,MAAO,CACHwI,aAAczwB,KAAKoG,MAAMqoB,MACrBlqB,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAKuD,SAAS,CAAEkrB,KAAM,KAAMprB,UAE3CkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,YAKpBxK,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CAAA/W,SAAA,EACFkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACRM,MAAOnR,KAAKgG,MAAM2C,EAAE,WACpBQ,MAAOzE,GAAOmoB,mBACdpoB,MAAOzE,KAAKoG,MAAMsoB,QAClBnlB,SAAUnI,GAAKpB,KAAKwuB,gBAAgBptB,EAAG,WACvC4nB,WAAYhpB,KAAKgG,MAAM2C,EAAE,oCACzByH,UAAW,CACP6X,MAAO,CACHwI,aAAczwB,KAAKoG,MAAMsoB,SACrBnqB,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAKuD,SAAS,CAAEmrB,QAAS,KAAMrrB,UAE9CkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,UAIhBjP,EAAAA,EAAAA,KAACosB,EAAAA,IAAG,CACA/b,KAAK,QACLvB,QAASA,IAAMrT,KAAK4uB,oBAAoBvrB,UAExCkB,EAAAA,EAAAA,KAACqsB,EAAAA,SAAQ,UAGjBrsB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACRM,MAAOnR,KAAKgG,MAAM2C,EAAE,aACpBQ,MAAOzE,GAAOkoB,YACdnoB,MAAOzE,KAAKoG,MAAMqnB,UAClBlkB,SAAUnI,GAAKpB,KAAKsuB,iBAAiBltB,EAAG,aACxCgP,UAAW,CACP6X,MAAO,CACHwI,aAAczwB,KAAKoG,MAAMqnB,WACrBlpB,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAKuD,SAAS,CAAEkqB,UAAW,KAAMpqB,UAEhDkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,YAKpBjP,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACRM,MAAOnR,KAAKgG,MAAM2C,EAAE,YACpBQ,MAAOzE,GAAOkoB,YACdnoB,MAAOzE,KAAKoG,MAAMonB,SAClBjkB,SAAUnI,GAAKpB,KAAKsuB,iBAAiBltB,EAAG,YACxCgP,UAAW,CACP6X,MAAO,CACHwI,aAAczwB,KAAKoG,MAAMonB,UACrBjpB,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAKuD,SAAS,CAAEiqB,SAAU,KAAMnqB,UAE/CkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,YAKpBjP,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACjR,MAAO,CAAE8gB,UAAW,QAAS5mB,UAChC2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAOkoB,YAAYvpB,SAAA,EAE1BkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CAAA3oB,SAAErD,KAAKgG,MAAM2C,EAAE,uBAC1BK,EAAAA,EAAAA,MAACkjB,EAAAA,OAAM,CACHrb,QAAQ,WACRpM,MAAOzE,KAAKoG,MAAM2oB,eAClBxlB,SAAUnI,GACNpB,KAAKuD,SAAS,CAAEwrB,eAAgB3tB,EAAEmR,OAAO9N,QAC5CpB,SAAA,EAEDkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACvCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,SAAQpB,SAAErD,KAAKgG,MAAM2C,EAAE,6BAO/DpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACjR,MAAOzE,GAAOioB,QAAQtpB,UACzB2F,EAAAA,EAAAA,MAAC6nB,GAAAA,EAAY,CACT1nB,MAAOzE,GAAO+K,IACd6d,OAAQA,EACR0B,KAAMA,EACN8B,QAAS,GACTC,oBAAkB,EAClBC,aAAW,EACXC,iBAAe,EACfC,iBAAe,EACfC,UAAQ,EAERC,cAAe,IAAK/tB,SAAA,EAEpBkB,EAAAA,EAAAA,KAAC8sB,GAAAA,EAAS,CAAC7e,IAAI,8CACfjO,EAAAA,EAAAA,KAAC+nB,GAAc,CAACE,OAAQ/c,GAAOzP,KAAKqtB,MAAM5d,cAItDzG,EAAAA,EAAAA,MAACugB,EAAAA,QAAO,CAACpgB,MAAOzE,GAAOqZ,QAAQ1a,SAAA,EAC3BkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwjB,QACnB3jB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACRxL,MAAM,UACNgO,QAASA,IACLrT,KAAKgG,MAAMsjB,OAAO,CACduF,SAAU7uB,KAAKoG,MAAMyoB,SACrBC,SAAU9uB,KAAKoG,MAAM0oB,SACrB7kB,WAAYjK,KAAKoG,MAAM6D,WACvBD,aAAchK,KAAKoG,MAAM4D,aACzB0kB,QAAS1uB,KAAKoG,MAAMsoB,QACpBK,eAAgB/uB,KAAKoG,MAAM2oB,eAC3BJ,QAAS3uB,KAAKoG,MAAMuoB,QACpBF,KAAMzuB,KAAKoG,MAAMqoB,KACjBhB,UAAWF,WAAWvtB,KAAKoG,MAAMqnB,WACjCD,SAAUD,WAAWvtB,KAAKoG,MAAMonB,YAGxCla,WAAW/O,EAAAA,EAAAA,KAACilB,EAAAA,MAAS,IAAInmB,SAExBrD,KAAKgG,MAAM2C,EAAE,WAElBpE,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwjB,YAInC,EAGJ,UAAenB,EAAAA,EAAAA,YAAf,CAA2BkG,ICh4BrBvoB,GAA8B,CAChCgG,MAAO,CACHC,OAAQ,OACR+Z,UAAW,OACX5Z,SAAU,OACVG,SAAU,UAEdkF,MAAQpG,IAAe,CACnB1E,MAAO0E,EAAMS,QAAQud,UAAU5O,OAEnC6O,KAAM,CACFrd,OAAQ,oBACRM,SAAU,QAEdgd,MAAO,CACHnjB,MAAO,IACPmlB,UAAW,QAEfqH,UAAW,CACPxsB,MAAO,IACP2G,OAAQ,OACR6S,aAAc,IAElB4J,KAAM,CACFzU,SAAU,GAEdsK,QAAS,CACLpT,OA7Be,GA8Bf4Z,WAAY,SAgBpB,MAAMgN,WAAyBxrB,EAAAA,UAC3B3G,WAAAA,CAAY4G,GACRC,MAAMD,GAENhG,KAAKoG,MAAQ,CACTorB,OAAQxxB,KAAKgG,MAAMwrB,KACnBC,SAAUzxB,KAAKgG,MAAMyrB,OAE7B,CAEAtnB,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAAC8T,EAAAA,MAAK,CAAC3T,MAAOzE,GAAOgG,MAAMrH,SAAA,EACvBkB,EAAAA,EAAAA,KAAA,QACI4E,MAAOzE,GAAOsjB,KACdW,YAAU,EACVC,aAAa,MAAKvlB,UAElB2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTwO,UAAU,SAAQxlB,SAAA,EAElBkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,KACV9B,GAAI5D,GAAOyL,MAAM9M,SAEhBrD,KAAKgG,MAAM2C,EAAE,8DAGtBpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACjR,MAAOzE,GAAO4sB,UAAUjuB,UAC3B2F,EAAAA,EAAAA,MAAC0oB,EAAAA,UAAS,CAAAruB,SAAA,EACNkB,EAAAA,EAAAA,KAACiR,EAAAA,iBAAgB,CACbrM,MAAOzE,GAAOujB,MACdxS,SACIlR,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACLC,QAAS3V,KAAKoG,MAAMorB,KACpBjoB,SAAUA,IAAMvJ,KAAKuD,SAAS,CAAEiuB,MAAOxxB,KAAKoG,MAAMorB,SAG1DrgB,MAAOnR,KAAKgG,MAAM2C,EAAE,8BAExBpE,EAAAA,EAAAA,KAACotB,EAAAA,eAAc,CAAAtuB,SACVrD,KAAKgG,MAAM2C,EACR,sHAKhBpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACF2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAOujB,MAAM5kB,SAAA,EAEpBkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CAAA3oB,SAAErD,KAAKgG,MAAM2C,EAAE,mBAC1BK,EAAAA,EAAAA,MAACkjB,EAAAA,OAAM,CACHrb,QAAQ,WACRpM,MAAOzE,KAAKoG,MAAMqrB,OAAS,OAAS,QACpCloB,SAAUnI,GAAKpB,KAAKuD,SAAS,CAAEkuB,OAA2B,SAAnBrwB,EAAEmR,OAAO9N,QAAoBpB,SAAA,EAEpEkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,QAAOpB,SAAErD,KAAKgG,MAAM2C,EAAE,aACtCpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAAC3nB,MAAM,OAAMpB,SAAErD,KAAKgG,MAAM2C,EAAE,sCAEzCpE,EAAAA,EAAAA,KAACotB,EAAAA,eAAc,CAAAtuB,SACVrD,KAAKoG,MAAMqrB,OACNzxB,KAAKgG,MAAM2C,EACP,iHAEJ3I,KAAKgG,MAAM2C,EAAE,+DAMvCK,EAAAA,EAAAA,MAACugB,EAAAA,QAAO,CAACpgB,MAAOzE,GAAOqZ,QAAQ1a,SAAA,EAC3BkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwjB,QACnB3jB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACH9N,MAAM,UACNwL,QAAQ,YACRwC,QAASA,IAAMrT,KAAKgG,MAAMsjB,OAAO,CAAEkI,KAAMxxB,KAAKoG,MAAMorB,KAAMC,OAAQzxB,KAAKoG,MAAMqrB,SAC7Ene,WAAW/O,EAAAA,EAAAA,KAACilB,EAAAA,MAAS,IAAInmB,SAExBrD,KAAKgG,MAAM2C,EAAE,gBAKlC,EAGJ,UAAeoe,EAAAA,EAAAA,YAAf,CAA2BwK,ICpJrB7sB,GAA8B,CAChCgG,MAAO,CACHC,OAAQ,OACR+Z,UAAW,OACX5Z,SAAU,OACVG,SAAU,UAEdkF,MAAQpG,IAAe,CACnB1E,MAAO0E,EAAMS,QAAQud,UAAU5O,OAEnC6O,KAAM,CACFrd,OAAQ,oBACRM,SAAU,QAEdgd,MAAO,CACHnjB,MAAO,IACPwZ,aAAc,IAElB4J,KAAM,CACFzU,SAAU,GAEdsK,QAAS,CACLpT,OAxBe,GAyBf4Z,WAAY,QAEhBrc,KAAM,CACF1C,SAAU,IAGd0D,MAAO,CACH1D,SAAU,GACVH,MAAO,WAEXmb,QAAS,CACLhb,SAAU,GACVH,MAAO,WAEXusB,YAAa,CACTpsB,SAAU,GACVH,MAAO,WAEXqG,OAAQ,CACJuE,YAAa,KAgBrB,MAAM4hB,WAA6B9rB,EAAAA,UAG/B3G,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAHAoiB,cAAQ,EAKrBpoB,KAAKooB,UAAWK,EAAAA,EAAAA,YACpB,CAEA3hB,iBAAAA,GAA2B,IAAD4hB,EACD,QAArBA,EAAA1oB,KAAKooB,SAASxQ,eAAO,IAAA8Q,GAArBA,EAAuBzC,OAC3B,CAEA9b,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAAC8T,EAAAA,MAAK,CAAC3T,MAAOzE,GAAOgG,MAAMrH,SAAA,EACvBkB,EAAAA,EAAAA,KAAA,QACI4E,MAAOzE,GAAOsjB,KACdW,YAAU,EACVC,aAAa,MAAKvlB,UAElB2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTwO,UAAU,SAAQxlB,SAAA,EAElBkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,KACV9B,GAAI5D,GAAOyL,MAAM9M,SAEhBrD,KAAKgG,MAAM2C,EAAE,oDAGtBK,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CAAA/W,SAAA,CACArD,KAAKgG,MAAMwrB,KAAoE,MAA7DjtB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwE,MAAM7F,SAAErD,KAAKgG,MAAM2C,EAAE,cAC3D3I,KAAKgG,MAAMwrB,OAASxxB,KAAKgG,MAAMyrB,QAC5BltB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO8b,QAAQnd,SAAErD,KAAKgG,MAAM2C,EAAE,eAC1C,KACH3I,KAAKgG,MAAMwrB,MAAQxxB,KAAKgG,MAAMyrB,QAC3BltB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOktB,YAAYvuB,SAAErD,KAAKgG,MAAM2C,EAAE,iBAC9C,MAEJpE,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwD,KAAK7E,SACnBrD,KAAKgG,MAAM2C,EACR,0GAIZpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACjR,MAAO,CAAEkV,UAAW,IAAKhb,UAC5BkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwD,KAAK7E,SACnBrD,KAAKgG,MAAM2C,EACR,oFAIZK,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CAACjR,MAAO,CAAEkV,UAAW,IAAKhb,SAAA,EAC5BkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHhK,MAAOzE,GAAOgH,OACdrG,MAAM,YACNwL,QAAQ,YACRwC,QAASA,IAAMhS,OAAO0O,KAAK,uBAAwB,QACnDuD,WAAW/O,EAAAA,EAAAA,KAACutB,EAAAA,SAAY,IAAIzuB,SAC/B,kBAGDkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACH9N,MAAM,YACNwL,QAAQ,YACRwC,QAASA,IAAMhS,OAAO0O,KAAK,uBAAwB,QACnDuD,WAAW/O,EAAAA,EAAAA,KAACwtB,EAAAA,OAAS,IAAI1uB,SAC5B,0BAMb2F,EAAAA,EAAAA,MAACugB,EAAAA,QAAO,CAACpgB,MAAOzE,GAAOqZ,QAAQ1a,SAAA,EAC3BkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwjB,QACnB3jB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACH9N,MAAM,UACNwL,QAAQ,YACRwC,QAASA,IAAMrT,KAAKgG,MAAMsjB,SAC1BhW,WAAW/O,EAAAA,EAAAA,KAACilB,EAAAA,MAAS,IAAInmB,SAExBrD,KAAKgG,MAAM2C,EAAE,qBAKlC,EAGJ,UAAeoe,EAAAA,EAAAA,YAAf,CAA2B8K,ICtHZ,MAAMG,WAA0BhW,IAAAA,UAI3C5c,WAAAA,CAAY4G,GACRC,MAAMD,GAJkB,KACXisB,eAAiB,GAK9BjyB,KAAKoG,MAAQ,CACTnD,WAAY,CAAC,EACbivB,iBAAkB,GAE1B,CAKA,uBAAMprB,GACF,IACI,MAAM7D,QAAmBjD,KAAKgG,MAAM3G,OAAO8yB,cAAcnyB,KAAKgG,MAAMiJ,KAAM,CACtEmjB,KAAMpyB,KAAKgG,MAAM3G,OAAOwkB,aAAa3f,OAAOmuB,aAGhDryB,KAAKuD,SAAS,CAAEN,cACpB,CAAE,MAAO7B,GACL2kB,QAAQ7c,MAAM,8BAA8B9H,EAAEuD,UAClD,CACJ,CAKA,YAAM2kB,GACF,MAAM,iBAAE4I,GAAqBlyB,KAAKoG,MAElCpG,KAAKgG,MAAMsjB,SAGX,IAAK,MAAMjlB,KAAW6tB,QACZ,IAAIpwB,SAAcwwB,IACpBtyB,KAAKgG,MAAMusB,eAAe,OAAOluB,IAAWrE,KAAKgG,MAAMiJ,KAAMqjB,EAAQ,GAGjF,CAOAE,sBAAAA,CAAuBvC,GACnB,MAAM,KAAEnhB,EAAI,YAAEyC,GAAgB0e,EAExB5rB,EAAUrE,KAAKoG,MAAMnD,WAAW6L,GAEtC,IAAKzK,EACD,OAAO,KAGX,MAAM6e,EAAOljB,KAAKgG,MAAM3G,OAAO8I,WAEzBgI,EAAQ9L,EAAQouB,UAAUvP,IAAS7e,EAAQouB,UAAUrqB,GAE3D,OACI7D,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACC,GAAI,CAAEzD,QAAS,OAAQI,WAAY,cAAe5B,UACnD2F,EAAAA,EAAAA,MAAC6I,EAAAA,UAAS,CACN1I,MAAO,CACHupB,YAAa,qBACbC,YAAa,MACbC,YAAa,QACb9tB,MAAO,QACTzB,SAAA,EAEFkB,EAAAA,EAAAA,KAACuN,EAAAA,iBAAgB,CACb3I,MAAO,CACHoB,gBAAiB,eACjBe,WAAY,OACZX,OAAQ,IAEZoH,YAAYxN,EAAAA,EAAAA,KAACyN,EAAAA,WAAc,IAC3B,gBAAc,iBACdlS,GAAG,gBAAeuD,UAElB2F,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CAACc,MAAO,CAAEtE,QAAS,OAAQI,WAAY,SAAU4tB,IAAK,GAAIxvB,SAAA,EAC1DkB,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACLpN,GAAI,CAAEjD,MAAO,eAAgB,gBAAiB,CAAEA,MAAO,iBACvDgO,QAASjS,GAAKA,EAAE0xB,kBAChBvpB,SAAUA,KACN,MAAM,iBAAE2oB,GAAqBlyB,KAAKoG,MAElC,GAAI8rB,EAAiB/vB,SAAS2M,GAAO,CACjC,MAAMmC,EAAMihB,EAAiB3vB,QAAQuM,GACrCojB,EAAiB1vB,OAAOyO,EAAK,EACjC,MACIihB,EAAiB9vB,KAAK0M,GAG1B9O,KAAKuD,SAAS,CAAE2uB,oBAAmB,KAG3C3tB,EAAAA,EAAAA,KAAA,OACIkgB,IAAKtU,EACLqU,IAAKngB,EAAQ0uB,QACb5pB,MAAO,CAAErE,MAAO,GAAI6F,OAAQ,MAE/BwF,QAGT5L,EAAAA,EAAAA,KAAC4N,EAAAA,iBAAgB,CACbhJ,MAAO,CACHoB,gBAAiB,oBACjB1E,WAAY,WACZL,SAAU,GACVykB,UAAW,QACb5mB,UAEFkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAApF,SAAEkO,UAKjC,CAKAyhB,aAAAA,GACI,OACIhqB,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CAACC,GAAI,CAAEzD,QAAS,OAAQguB,IAAK,EAAGhoB,cAAe,UAAWxH,SAAA,EAC1DkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAACH,GAAI,CAAEqD,WAAY,GAAItI,SAAEqF,EAAAA,KAAKC,EAAE,yCAC3CpE,EAAAA,EAAAA,KAAA,MAAAlB,SAAKqF,EAAAA,KAAKC,EAAE,YACZpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAApF,SAAEqF,EAAAA,KAAKC,EAAE,2BACnB3I,KAAKwyB,uBAAuB,CACzB1jB,KAAM,MACNyC,YAAa7I,EAAAA,KAAKC,EAAE,4BAEvB3I,KAAKwyB,uBAAuB,CAAE1jB,KAAM,QAASyC,YAAa7I,EAAAA,KAAKC,EAAE,+BAElEpE,EAAAA,EAAAA,KAAA,MAAAlB,SAAKqF,EAAAA,KAAKC,EAAE,YACZpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAApF,SAAEqF,EAAAA,KAAKC,EAAE,2BACnB3I,KAAKwyB,uBAAuB,CACzB1jB,KAAM,aACNyC,YAAa7I,EAAAA,KAAKC,EAAE,mCAEvB3I,KAAKwyB,uBAAuB,CAAE1jB,KAAM,SAAUyC,YAAa7I,EAAAA,KAAKC,EAAE,gCAEnEpE,EAAAA,EAAAA,KAAA,MAAAlB,SAAKqF,EAAAA,KAAKC,EAAE,oBACZpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAApF,SAAEqF,EAAAA,KAAKC,EAAE,mCACnB3I,KAAKwyB,uBAAuB,CACzB1jB,KAAM,uBACNyC,YAAa7I,EAAAA,KAAKC,EAAE,6CAEvB3I,KAAKwyB,uBAAuB,CAAE1jB,KAAM,WAAYyC,YAAa7I,EAAAA,KAAKC,EAAE,iCACpE3I,KAAKwyB,uBAAuB,CAAE1jB,KAAM,QAASyC,YAAa7I,EAAAA,KAAKC,EAAE,8BACjE3I,KAAKwyB,uBAAuB,CAAE1jB,KAAM,WAAYyC,YAAa7I,EAAAA,KAAKC,EAAE,iCACpE3I,KAAKwyB,uBAAuB,CACzB1jB,KAAM,aACNyC,YAAa7I,EAAAA,KAAKC,EAAE,oCAGxBpE,EAAAA,EAAAA,KAAA,MAAAlB,SAAKqF,EAAAA,KAAKC,EAAE,mBACZpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAApF,SAAEqF,EAAAA,KAAKC,EAAE,6BACnB3I,KAAKwyB,uBAAuB,CAAE1jB,KAAM,UAAWyC,YAAa7I,EAAAA,KAAKC,EAAE,gCACnE3I,KAAKwyB,uBAAuB,CAAE1jB,KAAM,MAAOyC,YAAa7I,EAAAA,KAAKC,EAAE,6BAEhEpE,EAAAA,EAAAA,KAAA,MAAAlB,SAAKqF,EAAAA,KAAKC,EAAE,cACZpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAApF,SAAEqF,EAAAA,KAAKC,EAAE,6BACnB3I,KAAKwyB,uBAAuB,CACzB1jB,KAAM,qBACNyC,YAAa7I,EAAAA,KAAKC,EAAE,4CAGxBpE,EAAAA,EAAAA,KAAA,MAAAlB,SAAKqF,EAAAA,KAAKC,EAAE,oBACZpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAApF,SAAEqF,EAAAA,KAAKC,EAAE,mCACnB3I,KAAKwyB,uBAAuB,CAAE1jB,KAAM,QAASyC,YAAa7I,EAAAA,KAAKC,EAAE,gCAG9E,CAKAwB,MAAAA,GACI,MAAM8oB,EAAqBhyB,OAAOC,KAAKlB,KAAKoG,MAAMnD,YAAYpC,OAAS,EAEvE,OACImI,EAAAA,EAAAA,MAAC8T,EAAAA,MAAK,CACFxU,GAAI,CACAqC,OAAQ,OACR+Z,UAAW,OACX5Z,SAAU,OACVG,SAAU,SACVpG,QAAS,OACTgG,cAAe,SACf5F,WAAY,UACd5B,SAAA,EAEFkB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACAC,GAAI,CACAqC,OAAQ,eAAe3K,KAAKiyB,oBAC5BntB,MAAO,MACPgG,SAAU,QACVG,SAAU,OACV,qBAAsB,OACtB,kBAAmB,OACnB,uBAAwB,CACpBpG,QAAS,SAEfxB,SAED4vB,EAAqBjzB,KAAKgzB,iBAAkBzuB,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,OAEhEI,EAAAA,EAAAA,MAACugB,EAAAA,QAAO,CACJjhB,GAAI,CACAqC,OAAQ3K,KAAKiyB,eACb1N,WAAY,GAAGvkB,KAAKiyB,mBACpBntB,MAAO,QACTzB,SAAA,EAEFkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAEsK,SAAU,MACxBlP,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACH9N,MAAM,UACNwL,QAAQ,YACRwC,QAASA,IAAMrT,KAAKspB,SACpBhW,UAAWtT,KAAKoG,MAAM8rB,iBAAiBrxB,QAAS0D,EAAAA,EAAAA,KAACilB,EAAAA,MAAS,KAAMjlB,EAAAA,EAAAA,KAAC2uB,EAAAA,aAAQ,IAAI7vB,SAE5ErD,KAAKoG,MAAM8rB,iBAAiBrxB,OAAS6H,EAAAA,KAAKC,EAAE,6BAA+BD,EAAAA,KAAKC,EAAE,eAKvG,ECpPJ,MAEMjE,GAA8C,CAChDyuB,OAAQ,CACJxoB,OAAQ,OACR+Z,UAAW,OACX5Z,SAAU,QAEdJ,MAAO,CACH5F,MAAO,OACP6F,OAAQ,OACRM,SAAU,UAEdgB,QAAS,CACLge,UAAW,UAEfmJ,SAAU,CACNtuB,MAAO,OACPmG,SAAU,SACVN,OAAQ,qBAEZ0oB,yBAA0B,CACtB1oB,OAAQ,oBACR7F,MAAO,OACPmG,SAAU,QAEdqoB,iBAAkB,CACdC,gBAAiB,OAAOC,MACxBC,iBAAkB,YAClBtnB,eAAgB,QAChBunB,mBAAoB,UAExBC,kBAAmB,CACfJ,gBAAiB,OAAOK,MACxBH,iBAAkB,YAClBtnB,eAAgB,QAChBunB,mBAAoB,UAExBxL,KAAM,CACFzU,SAAU,GAEdogB,SAAU,CACN7jB,WAAY,GAEhB+N,QAAS,CACLpT,OA7Ce,IA+CnBmpB,KAAM,CACFhvB,MAAO,GACP6F,OAAQ,GACRC,aAAc,MACdH,WAAY,QACZwF,YAAa,EACb0U,cAAe,UAEnBoP,YAAa,CACTC,MAAO,QACPnvB,QAAS,eACTwZ,WAAY,EACZpO,YAAa,GAGjBgkB,UAAW,CACPzuB,SAAU,GACV6Y,UAAW,GACXhZ,MAAO,UACPiG,WAAY,QAEhB4oB,cAAe,CACXpvB,MAAO,MAsBf,MAAMqvB,WAAqBpuB,EAAAA,UAGvB3G,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAHT8f,cAA+C,KAKnD9lB,KAAKoG,MAAQ,CACTguB,WAAY,EACZ5C,MAAM,EACNC,QAAQ,EAEhB,CAEA3qB,iBAAAA,GACS9G,KAAKgG,MAAM3G,OAAO4rB,qBAAqBlqB,MAAMszB,GAC9Cr0B,KAAKgG,MAAM3G,OAAO8rB,UAAU,kBAAkBkJ,KAAatzB,MAAKhB,IAC5DC,KAAK8lB,cAAgB/lB,EACrBC,KAAKuD,SAAS,CAAEiuB,KAAMzxB,EAAIu0B,OAAO9C,KAAMC,OAAQ1xB,EAAIu0B,OAAO7C,QAAS,KAG/E,CAEA8C,aAAAA,GAEI,OACIvrB,EAAAA,EAAAA,MAAA,OAAKG,MAAO,IAAKzE,GAAOgG,SAAUhG,GAAOivB,mBAAoBtwB,SAAA,EACzDkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2uB,4BACnBrqB,EAAAA,EAAAA,MAACugB,EAAAA,QAAO,CAACpgB,MAAOzE,GAAOqZ,QAAQ1a,SAAA,EAC3BkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwjB,QACnBlf,EAAAA,EAAAA,MAACmK,EAAAA,OAAM,CACHtC,QAAQ,YACRxL,MAAM,UACNgO,QAASA,IACLrT,KAAKgG,MAAM3G,OAAOukB,wBAAuB,GAAM7iB,MAAKhB,GAChDC,KAAKuD,SAAS,CACV6wB,WAAYp0B,KAAKoG,MAAMguB,WAAa,GAAKr0B,EAAImE,OAAOswB,iBAAmB,OAGlFnxB,SAAA,CAEAqF,EAAAA,KAAKC,EAAE,gBAAgB,KAACpE,EAAAA,EAAAA,KAACkwB,EAAAA,UAAa,CAACtrB,MAAOzE,GAAOmvB,eAE1DtvB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwjB,YAInC,CAEAwM,aAAAA,GACI,OACInwB,EAAAA,EAAAA,KAACmmB,GAAgB,CACb/hB,EAAGD,EAAAA,KAAKC,EACRtJ,OAAQW,KAAKgG,MAAM3G,OACnBwK,UAAW7J,KAAKgG,MAAM6D,UACtBC,UAAW9J,KAAKgG,MAAM8D,UACtBwf,OAAQvI,UACJ,MAAMhhB,QAAYC,KAAKgG,MAAM3G,OAAO+hB,iBAAgB,GACpDrhB,EAAImE,OAAOswB,kBAAmB,EAClB,OAARtJ,QAAQ,IAARA,GAAAA,EAAUhI,OACVnjB,EAAImE,OAAOywB,SAAWzJ,EAAShI,WACzBljB,KAAKgG,MAAM3G,OAAOiiB,gBAAgBvhB,IAE5CC,KAAKuD,SAAS,CAAE6wB,WAAYp0B,KAAKoG,MAAMguB,WAAa,GAAI,GAIxE,CAEAQ,cAAAA,GACI,OACIrwB,EAAAA,EAAAA,KAAC4jB,GAAiB,CACdxf,EAAGD,EAAAA,KAAKC,EACRtJ,OAAQW,KAAKgG,MAAM3G,OACnBwK,UAAW7J,KAAKgG,MAAM6D,UACtByf,OAASuL,GACL70B,KAAKgG,MAAM3G,OACNy1B,eAAe,QAASD,GACxB9zB,MAAK,IAAMf,KAAKuD,SAAS,CAAE6wB,WAAYp0B,KAAKoG,MAAMguB,WAAa,OAIpF,CAEAW,cAAAA,GACI,OACIxwB,EAAAA,EAAAA,KAAC0oB,GAAiB,CACdtkB,EAAGD,EAAAA,KAAKC,EACRtJ,OAAQW,KAAKgG,MAAM3G,OACnBwK,UAAW7J,KAAKgG,MAAM6D,UACtByf,OAAS4B,GAYLlrB,KAAKgG,MAAM3G,OACN+hB,iBAAgB,GAChBrgB,MAAKhB,IACFkB,OAAO+zB,OAAOj1B,EAAImE,OAAQgnB,GACnBlrB,KAAKgG,MAAM3G,OAAOiiB,gBAAgBvhB,MAE5CgB,MAAK,IAAMf,KAAKuD,SAAS,CAAE6wB,WAAYp0B,KAAKoG,MAAMguB,WAAa,OAIpF,CAEAa,oBAAAA,GACI,OACI1wB,EAAAA,EAAAA,KAACgtB,GAAgB,CACb5oB,EAAGD,EAAAA,KAAKC,EACR6oB,KAAMxxB,KAAKoG,MAAMorB,KACjBC,OAAQzxB,KAAKoG,MAAMqrB,OACnBpyB,OAAQW,KAAKgG,MAAM3G,OACnBwK,UAAW7J,KAAKgG,MAAM6D,UACtByf,OAAS4B,GACLlrB,KAAKuD,SAAS2nB,GAAU,IAAMlrB,KAAKuD,SAAS,CAAE6wB,WAAYp0B,KAAKoG,MAAMguB,WAAa,OAIlG,CAEAc,oBAAAA,GACI,OACI3wB,EAAAA,EAAAA,KAACstB,GAAoB,CACjBlpB,EAAGD,EAAAA,KAAKC,EACRtJ,OAAQW,KAAKgG,MAAM3G,OACnBwK,UAAW7J,KAAKgG,MAAM6D,UACtB2nB,KAAMxxB,KAAKoG,MAAMorB,KACjBC,OAAQzxB,KAAKoG,MAAMqrB,OACnBnI,OAAQA,IAAMtpB,KAAKuD,SAAS,CAAE6wB,WAAYp0B,KAAKoG,MAAMguB,WAAa,KAG9E,CAKAe,cAAAA,GACI,OACI5wB,EAAAA,EAAAA,KAACytB,GAAiB,CACd/iB,KAAMjP,KAAKgG,MAAMiJ,KACjB5P,OAAQW,KAAKgG,MAAM3G,OACnBkzB,eAAgBvyB,KAAKgG,MAAMusB,eAC3BjJ,OAAQA,IAAMtpB,KAAKuD,SAAS,CAAE6wB,WAAYp0B,KAAKoG,MAAMguB,WAAa,KAG9E,CAEA,aAAM3mB,GAEF,MAAM2nB,QAAkBp1B,KAAKgG,MAAM3G,OAAO+H,SAAS,oCAEnD,GAAIpH,KAAK8lB,cAAe,CACpB,IAAIuP,EACAC,EACJ,GACIt1B,KAAK8lB,cAAcwO,OAAO7C,SAAWzxB,KAAKoG,MAAMqrB,QAChDzxB,KAAK8lB,cAAcwO,OAAO9C,OAASxxB,KAAKoG,MAAMorB,KAChD,CACE,GACIxxB,KAAKoG,MAAMqrB,UACTzxB,KAAK8lB,cAAcwO,OAAOe,YAAgBr1B,KAAK8lB,cAAcwO,OAAOgB,aAGtE,IACI,MAAMC,QAAcv1B,KAAKgG,MAAM3G,OAAOm2B,kBACtCH,EAAaE,GAASA,EAAM1mB,MAAKyH,GAAgB,WAAXA,EAAEpW,OACxCo1B,EAAcC,GAASA,EAAM1mB,MAAKyH,GAAgB,YAAXA,EAAEpW,MAC7C,CAAE,MAAOkB,GACLC,OAAOC,MAAM,6BAA6BF,IAC9C,CAIJ,GAFApB,KAAK8lB,cAAcwO,OAAO9C,KAAOxxB,KAAKoG,MAAMorB,KAExCxxB,KAAKoG,MAAMqrB,OAAQ,CACnB,IACMzxB,KAAK8lB,cAAcwO,OAAOe,aAAcA,IACxCr1B,KAAK8lB,cAAcwO,OAAOgB,cAAeA,EAY3C,OAVAj0B,OAAOC,MAAMoH,EAAAA,KAAKC,EAAE,2DACpB3I,KAAK8lB,cAAcwO,OAAO7C,QAAS,QAE7BzxB,KAAKgG,MAAM3G,OAAOo2B,UAAUz1B,KAAK8lB,cAAcpkB,IAAK1B,KAAK8lB,eAC/DpT,YACI,IACKrR,OAAOuR,SAASG,KAAO,UAAU1R,OAAOuR,SAAS3D,qBAA8B,OAATmmB,QAAS,IAATA,GAAAA,EAAW7uB,IAAM,aAAe,MAC3G,UAEJvG,KAAKgG,MAAMyH,UAGfzN,KAAK8lB,cAAcwO,OAAO7C,OAASzxB,KAAKoG,MAAMqrB,OAC9CzxB,KAAK8lB,cAAcwO,OAAOe,WAAar1B,KAAK8lB,cAAcwO,OAAOe,YAAcA,EAAWvmB,KAC1F9O,KAAK8lB,cAAcwO,OAAOgB,YAAct1B,KAAK8lB,cAAcwO,OAAOgB,aAAeA,EAAYxmB,IACjG,CAKA,IAAI4mB,QAHE11B,KAAKgG,MAAM3G,OAAOo2B,UAAUz1B,KAAK8lB,cAAcpkB,IAAK1B,KAAK8lB,eAK3D4P,EADA11B,KAAK8lB,cAAcwO,OAAO7C,OACf,WAAWpwB,OAAOuR,SAAS3D,qBAA8B,OAATmmB,QAAS,IAATA,GAAAA,EAAW7uB,IAAM,aAAe,KAEhF,UAAUlF,OAAOuR,SAAS3D,qBAA8B,OAATmmB,QAAS,IAATA,GAAAA,EAAW7uB,IAAM,aAAe,KAG9FvG,KAAKgG,MAAMyH,QAAQioB,EACvB,MACIC,EAAAA,OAAOC,WAAW,eAAyB,OAATR,QAAS,IAATA,GAAAA,EAAW7uB,IAAM,iBAAc+K,GACjEtR,KAAKgG,MAAMyH,SAEnB,MACIkoB,EAAAA,OAAOC,WAAW,eAAyB,OAATR,QAAS,IAATA,GAAAA,EAAW7uB,IAAM,iBAAc+K,GACjEtR,KAAKgG,MAAMyH,SAEnB,CAEAooB,YAAAA,GAEI,OACI7sB,EAAAA,EAAAA,MAAA,OAAKG,MAAO,IAAKzE,GAAOgG,SAAUhG,GAAO4uB,kBAAmBjwB,SAAA,EACxD2F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO2uB,yBAAyBhwB,SAAA,EACxCkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOuvB,UAAU5wB,SAAEqF,EAAAA,KAAKC,EAAE,yCACtCpE,EAAAA,EAAAA,KAAA,OACIigB,IAAKsR,GACLrR,IAAI,WACJtb,MAAOzE,GAAOwvB,oBAGtBlrB,EAAAA,EAAAA,MAACugB,EAAAA,QAAO,CAACpgB,MAAOzE,GAAOqZ,QAAQ1a,SAAA,EAC3BkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwjB,QACnB3jB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACRxL,MAAM,UACNgO,QAASA,IAAMrT,KAAKyN,UACpB6F,WAAW/O,EAAAA,EAAAA,KAACgP,EAAAA,MAAS,IAAIlQ,SAExBqF,EAAAA,KAAKC,EAAE,aAEZpE,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOwjB,YAInC,CAEA/d,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACH3G,MAAOzE,GAAOyuB,OACdpjB,MAAM,EACNtC,QAASA,OAIT6G,WAAS,EACTyhB,YAAU,EACV,kBAAgB,sBAAqB1yB,SAAA,EAErC2F,EAAAA,EAAAA,MAAC0L,EAAAA,YAAW,CAAC5U,GAAG,sBAAqBuD,SAAA,EACjCkB,EAAAA,EAAAA,KAAA,OACIigB,I,6oTACArb,MAAOzE,GAAOovB,KACdrP,IAAI,SAEP/b,EAAAA,KAAKC,EAAE,0BAA2B,KACnCpE,EAAAA,EAAAA,KAACyxB,EAAAA,gBAAe,CACZ7sB,MAAOzE,GAAOqvB,YACdprB,EAAGD,EAAAA,KAAKC,EACRstB,YAAaj2B,KAAKgG,MAAMiwB,YACxBpsB,UAAW7J,KAAKgG,MAAM6D,UACtB+K,KAAK,cAGb5L,EAAAA,EAAAA,MAACuH,EAAAA,cAAa,CAACpH,MAAOzE,GAAOuH,QAAQ5I,SAAA,EACjCkB,EAAAA,EAAAA,KAACkM,EAAAA,OAAM,CAAC7L,SAAS,SAAQvB,UACrBkB,EAAAA,EAAAA,KAACglB,EAAAA,QAAO,CAAAlmB,UACJ2F,EAAAA,EAAAA,MAACktB,EAAAA,QAAO,CAAC9B,WAAYp0B,KAAKoG,MAAMguB,WAAW/wB,SAAA,EACvCkB,EAAAA,EAAAA,KAAC4xB,EAAAA,KAAI,CAAA9yB,UACDkB,EAAAA,EAAAA,KAAC6xB,EAAAA,UAAS,CAAA/yB,SAAEqF,EAAAA,KAAKC,EAAE,gBAEvBpE,EAAAA,EAAAA,KAAC4xB,EAAAA,KAAI,CAAA9yB,UACDkB,EAAAA,EAAAA,KAAC6xB,EAAAA,UAAS,CAAA/yB,SAAEqF,EAAAA,KAAKC,EAAE,0BAEvBpE,EAAAA,EAAAA,KAAC4xB,EAAAA,KAAI,CAAA9yB,UACDkB,EAAAA,EAAAA,KAAC6xB,EAAAA,UAAS,CAAA/yB,SAAEqF,EAAAA,KAAKC,EAAE,iBAEvBpE,EAAAA,EAAAA,KAAC4xB,EAAAA,KAAI,CAAA9yB,UACDkB,EAAAA,EAAAA,KAAC6xB,EAAAA,UAAS,CAAA/yB,SAAEqF,EAAAA,KAAKC,EAAE,uBAEvBpE,EAAAA,EAAAA,KAAC4xB,EAAAA,KAAI,CAAA9yB,UACDkB,EAAAA,EAAAA,KAAC6xB,EAAAA,UAAS,CAAA/yB,SAAEqF,EAAAA,KAAKC,EAAE,wBAEvBpE,EAAAA,EAAAA,KAAC4xB,EAAAA,KAAI,CAAA9yB,UACDkB,EAAAA,EAAAA,KAAC6xB,EAAAA,UAAS,CAAA/yB,SAAEqF,EAAAA,KAAKC,EAAE,iBAEvBpE,EAAAA,EAAAA,KAAC4xB,EAAAA,KAAI,CAAA9yB,UACDkB,EAAAA,EAAAA,KAAC6xB,EAAAA,UAAS,CAAA/yB,SAAEqF,EAAAA,KAAKC,EAAE,iBAEvBpE,EAAAA,EAAAA,KAAC4xB,EAAAA,KAAI,CAAA9yB,UACDkB,EAAAA,EAAAA,KAAC6xB,EAAAA,UAAS,CAAA/yB,SAAEqF,EAAAA,KAAKC,EAAE,qBAKR,IAA1B3I,KAAKoG,MAAMguB,YAAmB7vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO0uB,SAAS/vB,SAAErD,KAAKu0B,kBAAyB,KAChE,IAA1Bv0B,KAAKoG,MAAMguB,YAAmB7vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO0uB,SAAS/vB,SAAErD,KAAK00B,kBAAyB,KAChE,IAA1B10B,KAAKoG,MAAMguB,YAAmB7vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO0uB,SAAS/vB,SAAErD,KAAK40B,mBAA0B,KACjE,IAA1B50B,KAAKoG,MAAMguB,YACR7vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO0uB,SAAS/vB,SAAErD,KAAKi1B,yBACnC,KACuB,IAA1Bj1B,KAAKoG,MAAMguB,YACR7vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO0uB,SAAS/vB,SAAErD,KAAKk1B,yBACnC,KACuB,IAA1Bl1B,KAAKoG,MAAMguB,YAAmB7vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO0uB,SAAS/vB,SAAErD,KAAK+0B,mBAA0B,KACjE,IAA1B/0B,KAAKoG,MAAMguB,YAAmB7vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO0uB,SAAS/vB,SAAErD,KAAKm1B,mBAA0B,KACjE,IAA1Bn1B,KAAKoG,MAAMguB,YAAmB7vB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO0uB,SAAS/vB,SAAErD,KAAK61B,iBAAwB,UAI1G,EAGJ,UAAe9O,EAAAA,EAAAA,YAAf,CAA2BoN,I,61QCta3B,MAAekC,WAA2Era,IAAAA,WAK1F,YCAMtX,GAA8C,CAChD0uB,SAAU,CACNtuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV2S,UAAW,SACXb,QAAS,IAGbuZ,YAAa,CACTrmB,YAAa,EACbuK,SAAU,QAEd+b,YAAa,CACTlY,UAAW,IAEf5O,IAAK,CACD7E,aAAc,IAIhB0hB,GAA0DtmB,IAC5D,MAAMyJ,GAAM8c,EAAAA,GAAAA,MAIZ,OAHIvmB,EAAMwmB,QACNxmB,EAAMwmB,OAAO/c,GAEV,IAAI,EAkvBf,UAAesX,EAAAA,EAAAA,YAAf,CAptBA,cAAiCsP,GAC7Bj3B,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAQjBknB,YAAM,OAENzd,SAAG,OAEH0d,eAAS,OAETC,kBAAY,OAyLZC,MAAS5d,IACL,IAAIzP,KAAKgG,MAAMwwB,UAGVx2B,KAAKyP,KAAOzP,KAAKyP,MAAQA,GAAK,CAC/BzP,KAAKyP,IAAMA,EACX,MAAM6d,EAAsB,CACxBC,gBACwCjc,IAApCtR,KAAKgG,MAAMW,KAAKzC,OAAOspB,SAChBxtB,KAAKgG,MAAMW,KAAKzC,OAAOspB,SACxB,OACL,EACLD,gBACyCjc,IAArCtR,KAAKgG,MAAMW,KAAKzC,OAAOupB,UAChBztB,KAAKgG,MAAMW,KAAKzC,OAAOupB,UACxB,OACL,GAGTztB,KAAKktB,OAAS,IAAIQ,GAAAA,OAAOJ,EAAQ,CAC7BK,WAAW,EACXxd,MAAOzH,EAAAA,KAAKC,EAAE,qBACd8b,IAAK/b,EAAAA,KAAKC,EAAE,qBACZilB,aAAa,IAEZC,MAAMpe,GACNqe,UAAU,qCACVC,GAAG,CAAEC,QAAUC,GAAsBjuB,KAAKkuB,gBAAgBD,IACnE,GACF,KAmLFwI,YAAc,KACV,MAAMC,EAAQC,GAAUlnB,KAAI,CAACmnB,EAAMxpB,KAC/B7I,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CACL3nB,MAAOmyB,EAAK9nB,KAAKzL,SAGhBrD,KAAKgG,MAAM2C,EAAEiuB,EAAK9nB,OAFd1B,KAMb,OACIpE,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACR5iB,MAAOzE,GAAO4xB,YACdzlB,QAAQ,WAAUxN,SAAA,EAElBkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CACP6K,QAAM,EACN/2B,GAAG,gBAAeuD,SAEjBrD,KAAKgG,MAAM2C,EAAE,eAElBpE,EAAAA,EAAAA,KAAC2nB,EAAAA,OAAM,CACHpe,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACR1H,MAAOzE,GAAO4xB,YACdx2B,GAAG,UACH2E,MAAOzE,KAAKgG,MAAMW,KAAKzC,OAAOyqB,QAC9BplB,SAAUvJ,KAAK82B,oBACfC,cAAY,EAAA1zB,SAEXqzB,MAEK,EAEpB,KAEFI,oBAAuB7I,IACnB,MAAMxpB,EAAQwpB,EAAI1b,OAAO9N,MAEzBzE,KAAKg3B,SADM,UACOvyB,EAAM,EAC1B,KAEFwyB,aAAe,CAAChJ,EAAoCnuB,KAChD,MAAM2E,EAAQwpB,EAAI1b,OAAO9N,MACzBzE,KAAKk3B,cAAczyB,EAAO3E,GAEf,cAAPA,GAA6B,aAAPA,IAClBE,KAAKotB,cACL/Q,aAAarc,KAAKotB,cAEtBptB,KAAKotB,aAAe1a,YAAW,KAC3B1S,KAAKotB,aAAe,KACpBptB,KAAKyP,IAAIggB,MAAM,CACXlC,WAAWvtB,KAAKgG,MAAMW,KAAKzC,OAAOspB,UAClCD,WAAWvtB,KAAKgG,MAAMW,KAAKzC,OAAOupB,aAEtCztB,KAAKktB,OAAOwC,UAAU,CAClBnC,WAAWvtB,KAAKgG,MAAMW,KAAKzC,OAAOspB,UAClCD,WAAWvtB,KAAKgG,MAAMW,KAAKzC,OAAOupB,YACpC,GACH,KACP,EACF,KAEFyJ,cAAgB,CAACzyB,EAAY3E,EAAYY,IAA0BV,KAAKg3B,SAASl3B,EAAI2E,EAAO/D,GAAI,KAEhGy2B,aAAgBlJ,IACZjuB,KAAKi3B,aAAahJ,EAAK,QAEnBjuB,KAAKmtB,WACL9Q,aAAarc,KAAKmtB,WAGtBntB,KAAKmtB,UAAYza,YAAW,KACxB1S,KAAKmtB,UAAY,MACA,IAAIwC,GAAAA,uBAEPC,OAAO,CAAEC,MAAO5B,EAAI1b,OAAO9N,QAAS1D,MAAK+uB,IAC/CA,EAAQ,IACRpd,YACI,IACI1S,KAAKk3B,cAAcpH,EAAQ,GAAG3X,EAAG,YAAY,IACzCnY,KAAKk3B,cAAcpH,EAAQ,GAAG9U,EAAG,aAAa,IAC1Chb,KAAKk3B,cAAc,GAAI,QAAQ,KAC3Bl3B,KAAKyP,IAAIggB,MAAM,CAACK,EAAQ,GAAG3X,EAAG2X,EAAQ,GAAG9U,IACzChb,KAAKktB,OAAOwC,UAAU,CAACI,EAAQ,GAAG3X,EAAG2X,EAAQ,GAAG9U,GAAG,SAInE,KAER,GACF,GACH,IAAI,EACT,KAEFrK,aAAe,CAACsd,EAAoCmJ,KAChD,MAAM3yB,EAAQwpB,EAAI1b,OAAO9N,MACnB3E,EAAKE,KAAKq3B,cAAcD,GAAUt3B,GAG7B,eAAPA,GACC2E,EAAM+e,cAAc/hB,WAAW,WAC/BgD,EAAM+e,cAAcrhB,SAAS,WAI9BnC,KAAKg3B,SAASl3B,EAAI2E,GAFlBzE,KAAKuD,SAAS,CAAE+zB,SAAS,EAAMC,aAAc9yB,GAGjD,EACF,KAEFuyB,SAAW,CAACloB,EAAcrK,EAAY/D,KAClC,MAAM82B,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MAC3C6wB,EAAQtzB,OAA+B4K,GAAQrK,EAChDzE,KAAKgG,MAAMuD,SAASiuB,EAAS,MAAM,IAAM92B,GAAMA,KAAK,EACtD,KAEFwtB,gBAAmBD,IAEf,IAAKjuB,KAAKgG,MAAMwwB,OAAQ,CACpB,MAAMkB,EAAKp3B,KAAKoH,MAAMpH,KAAKC,UAAU0tB,EAAI1b,OAAO4b,UAChDnuB,KAAKg3B,SAAS,WAAYU,EAAGtJ,KAAK,IAAMpuB,KAAKg3B,SAAS,YAAaU,EAAGrJ,MAC1E,GAhhBAruB,KAAKoG,MAAQ,CACT4oB,KAAM,GACNsI,SAAS,EACTC,aAAc,GAEtB,CAUAF,WAAAA,GACI,MAAO,CACH,CACIv3B,GAAI,WACJqQ,MAAO,mBACPwnB,WAAW,EACX/oB,OAAQ,CACJ,CACI9O,GAAI,KACJqQ,MAAO,WAEX,CACIrQ,GAAI,KACJqQ,MAAO,WAEX,CACIrQ,GAAI,KACJqQ,MAAO,8CAEX,CACIrQ,GAAI,KACJqQ,MAAO,sEAEX,CACIrQ,GAAI,KACJqQ,MAAO,aAEX,CACIrQ,GAAI,KACJqQ,MAAO,cAEX,CACIrQ,GAAI,KACJqQ,MAAO,eAEX,CACIrQ,GAAI,KACJqQ,MAAO,YAEX,CACIrQ,GAAI,KACJqQ,MAAO,WAEX,CACIrQ,GAAI,KACJqQ,MAAO,UAEX,CACIrQ,GAAI,QACJqQ,MAAO,8BAInB,CACIrQ,GAAI,WACJqQ,MAAO,oBACPwnB,WAAW,EACX/oB,OAAQ,CACJ,CACI9O,GAAI,QACJqQ,MAAO,SAEX,CACIrQ,GAAI,QACJqQ,MAAO,WAInB,CACIrQ,GAAI,WACJqQ,MAAO,gBACPwnB,WAAW,EACXC,WAAW,EACXC,cAAc,EACdjpB,OAAQ,CACJ,CACI9O,GAAI,SACJqQ,MAAO,UAEX,CACIrQ,GAAI,IACJqQ,MAAO,KAEX,CACIrQ,GAAI,SACJqQ,MAAO,UAEX,CACIrQ,GAAI,SACJqQ,MAAO,UAEX,CACIrQ,GAAI,MACJqQ,MAAO,SAInB,CACIrQ,GAAI,aACJqQ,MAAO,cACPwnB,WAAW,EACX/oB,OAAQ,CACJ,CACI9O,GAAI,aACJqQ,MAAO,cAEX,CACIrQ,GAAI,aACJqQ,MAAO,cAEX,CACIrQ,GAAI,aACJqQ,MAAO,gBAInB,CACIrQ,GAAI,eACJqQ,MAAO,qBACPwnB,WAAW,EACX/oB,OAAQ,CACJ,CACI9O,IAAI,EACJqQ,MAAO,SAEX,CACIrQ,IAAI,EACJqQ,MAAO,WAInB,CACIrQ,GAAI,iBACJqQ,MAAO,kBACPvB,OAAQ,CACJ,CAAE9O,GAAI,GAAIqQ,MAAOnQ,KAAKgG,MAAM2C,EAAE,YAC3B3I,KAAKgG,MAAM8xB,UAAUroB,KAAIsoB,IAAO,CAC/Bj4B,GAAIi4B,EACJ5nB,MAAO4nB,QAInB,CACIj4B,GAAI,aACJqQ,MAAO,qBACPwnB,WAAW,EACX/oB,OAAQxO,EAAAA,EAAW43B,UAAUh4B,KAAKgG,MAAMiyB,QAAQ3D,OAAO4D,cAAc,CAACC,EAAOrpB,KAAI,CAC7EhP,GAAIgP,EACJqB,MAAOrB,OAGf,CACIhP,GAAI,aACJqQ,MAAO,cACPvB,OAAQ,CACJ,CAAE9O,IAAI,EAAMqQ,MAAO,MACnB,CAAErQ,IAAI,EAAOqQ,MAAO,mBAG5B,CACIrQ,GAAI,kBACJqQ,MAAO,oBACPioB,KAAM,oBACNT,WAAW,EACX/oB,OAAQ,CACJ,CAAE9O,GAAI,QAASqQ,MAAO,SACtB,CAAErQ,GAAI,OAAQqQ,MAAO,QACrB,CAAErQ,GAAI,OAAQqQ,MAAO,QACrB,CAAErQ,GAAI,QAASqQ,MAAO,WAG9B,CACIrQ,GAAI,iBACJqQ,MAAO,oBACPwnB,WAAW,EACX/oB,OAAQ,CACJ,CAAE9O,GAAI,SAAUqQ,MAAO,UACvB,CAAErQ,GAAI,SAAUqQ,MAAO,YAIvC,CAiCAkoB,SAAAA,CAAUj3B,EAAYiR,GAClB,IAAI5N,EAASzE,KAAKgG,MAAMW,KAAKzC,OAA+B9C,EAAEtB,IAM9D,GAJa,oBAATsB,EAAEtB,IAA6B2E,IAC/BA,EAAQ,QAGC,eAATrD,EAAEtB,IAAuBE,KAAKgG,MAAMsyB,cACpC,OAAO,KAIX,GAAIt4B,KAAKgG,MAAMse,eAAepd,MAAMgkB,WAA+D,IAAnDlrB,KAAKgG,MAAMse,eAAepd,MAAMgkB,SAAS9pB,EAAEtB,IACvF,OAAO,KAGX,GAAIsB,EAAEy2B,cAAgBz2B,EAAEwN,OACpB,OACIrK,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CACFxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,IAAKn1B,UAGxBkB,EAAAA,EAAAA,KAACwrB,EAAAA,aAAY,CAETC,UAAQ,EACRliB,SAAU9N,KAAKgG,MAAMwwB,OACrBvG,QAAS7uB,EAAEwN,OACXshB,WAAYzrB,EAAMgO,WAClBlJ,SAAUA,CAACkvB,EAAM7nB,KACb,MAAM9Q,EAAKE,KAAKq3B,cAAchlB,GAAGvS,GACT,kBAAb8Q,EAIX5Q,KAAKg3B,SAASl3B,EAAI8Q,EAAWA,EAAS9Q,GAAK,IAHvCE,KAAKg3B,SAASl3B,EAAI8Q,EAGwB,EAElDuf,cAAeA,CAAC3hB,EAAQoC,KACpB,MAAM9Q,EAAKE,KAAKq3B,cAAchlB,GAAGvS,GACjCE,KAAKg3B,SAASl3B,EAAI8Q,EAAS,EAE/Bwf,eAAgBC,GACU,kBAAXA,EACAA,EAEPjvB,EAAEu2B,UACK33B,KAAKgG,MAAM2C,EAAE0nB,EAAOlgB,OAASkgB,EAAOvwB,GAAG2S,YAE3C4d,EAAOlgB,OAASkgB,EAAOvwB,GAAG2S,WAErC6d,aAAcA,CAACtqB,EAAOqqB,KAClB9rB,EAAAA,EAAAA,KAAA,SAAQyB,EAAK3C,SACRjC,EAAEu2B,UACG33B,KAAKgG,MAAM2C,EAAE0nB,EAAOlgB,OAASkgB,EAAOvwB,GAAG2S,YACvC4d,EAAOlgB,OAASkgB,EAAOvwB,KAGrCywB,YAAaC,IACTjsB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,IACF0H,EACJ3f,QAAQ,WACRM,MAAOnR,KAAKgG,MAAM2C,EAAEvH,EAAE+O,YAxC7BkC,GAiDjB,GAAIjR,EAAEw2B,WAAanzB,IAAUrD,EAAEwN,OAAOC,MAAK+nB,GAAQA,EAAK92B,KAAO2E,IAC3D,OACIF,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CACFxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,IAAKn1B,UAGxB2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACR5iB,MAAOzE,GAAO4xB,YACdzlB,QAAQ,WAAUxN,SAAA,EAElBkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CACP6K,QAAM,EACN/2B,GAAI,GAAGsB,EAAEtB,WAAWuD,SAEnBrD,KAAKgG,MAAM2C,EAAEvH,EAAE+O,UAEpB5L,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNhb,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACR/Q,GAAIsB,EAAEtB,GACN2E,MAAOA,EAAMgO,WACblJ,SAAU0kB,GAAOjuB,KAAK2Q,aAAasd,EAAK5b,GACxC2W,WAAY5nB,EAAEg3B,KAAOp4B,KAAKgG,MAAM2C,EAAEvH,EAAEg3B,MAAQ,GAC5ChoB,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ5O,MAAO,CACHc,UAAU,EACV0H,aAAchsB,EAAMgO,YAChBlO,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAK2Q,aAAa,CAAE4B,OAAQ,CAAE9N,MAAO,KAAQ4N,GAAGhP,UAE/DkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,aAlCfnB,GA2CjB,MAAMqkB,EAAQt1B,EAAEwN,OAAOa,KAAI,CAACmnB,EAAMxpB,KAC9B7I,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CACL3nB,MAAOmyB,EAAK92B,GAAauD,SAGxBjC,EAAEu2B,UAAY33B,KAAKgG,MAAM2C,EAAEiuB,EAAKzmB,OAASymB,EAAK92B,GAAG2S,YAAcmkB,EAAKzmB,OAASymB,EAAK92B,IAF9EsN,KAMb,OACI7I,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CACFxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,IAAKn1B,UAGxB2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACR5iB,MAAOzE,GAAO4xB,YACdzlB,QAAQ,WAAUxN,SAAA,EAElBkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CACP6K,QAAM,EACN/2B,GAAI,GAAGsB,EAAEtB,WAAWuD,SAEnBrD,KAAKgG,MAAM2C,EAAEvH,EAAE+O,UAEpB5L,EAAAA,EAAAA,KAAC2nB,EAAAA,OAAM,CACHpe,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACR1H,MAAOzE,GAAO4xB,YACdx2B,GAAIsB,EAAEtB,GACN2E,WAAiB6M,IAAV7M,GAA8BA,EACrC8E,SAAU0kB,GAAOjuB,KAAK2Q,aAAasd,EAAK5b,GACxC0kB,cAAY,EAAA1zB,SAEXqzB,IAEJt1B,EAAEg3B,MAAO7zB,EAAAA,EAAAA,KAACotB,EAAAA,eAAc,CAAAtuB,SAAErD,KAAKgG,MAAM2C,EAAEvH,EAAEg3B,QAA0B,SAvBnE/lB,EA2BjB,CAEAsmB,mBAAAA,GACI,OAAI34B,KAAKoG,MAAMkxB,SAEP/yB,EAAAA,EAAAA,KAACq0B,EAAAA,cAAa,CACV1wB,KAAMlI,KAAKgG,MAAM2C,EAAE,uBACnB8E,QAAS3F,IACL,MAAMrD,EAAQzE,KAAKoG,MAAMmxB,aACzBv3B,KAAKuD,SAAS,CAAE+zB,SAAS,EAAOC,aAAc,OAAQ,KAC9CzvB,GACA9H,KAAKg3B,SAAS,aAAcvyB,EAChC,GACF,IAMX,IACX,CA+HA0F,MAAAA,GACI,MAAM0uB,EAAY74B,KAAKq3B,cAAc5nB,KAAI,CAACrO,EAAGiR,IAAMrS,KAAKq4B,UAAUj3B,EAAGiR,KAE/Dib,EAAsB,CACxBC,gBACwCjc,IAApCtR,KAAKgG,MAAMW,KAAKzC,OAAOspB,SAChBxtB,KAAKgG,MAAMW,KAAKzC,OAAOspB,SACxB,OACL,EACLD,gBACyCjc,IAArCtR,KAAKgG,MAAMW,KAAKzC,OAAOupB,UAChBztB,KAAKgG,MAAMW,KAAKzC,OAAOupB,UACxB,OACL,IAGH,KAAEuB,GAAShvB,KAAKoG,MAEtB,OACI4C,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO0uB,SAAS/vB,SAAA,CACvBrD,KAAK24B,uBACN3vB,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EAAEjX,SAAA,EAEXkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACxF,KAAM,CAAEkkB,GAAI,EAAGC,GAAI,IAAK11B,UAC3B2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EAAEjX,SAAA,EAEXkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACxF,KAAM,CAAE4jB,GAAI,IAAKn1B,UACpBkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNhb,SAAU9N,KAAKgG,MAAMwwB,OACrBliB,WAAS,EACTzD,QAAQ,WACR/Q,GAAG,WACHqR,MAAOnR,KAAKgG,MAAM2C,EAAE,aAEpBlE,MAAOzE,KAAKgG,MAAMW,KAAKzC,OAAO80B,UAAY,GAC1CzvB,SAAUnI,GAAKpB,KAAKg3B,SAAS,WAAY51B,EAAEmR,OAAO9N,OAClDukB,WAAYhpB,KAAKgG,MAAM2C,EACnB,sFAEJyH,UAAW,CACP6X,MAAO,CAEHwI,aAAczwB,KAAKgG,MAAMW,KAAKzC,OAAO80B,UACjCz0B,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAKg3B,SAAS,WAAY,IAAI3zB,UAE7CkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,WAKnBqlB,QAGTt0B,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACxF,KAAM,CAAEkkB,GAAI,EAAGC,GAAI,IAAK11B,UAC3B2F,EAAAA,EAAAA,MAAC6nB,GAAAA,EAAY,CACT1nB,MAAOzE,GAAO+K,IACd6d,OAAQA,EACR0B,KAAMA,EACN8B,QAAS,GACTC,oBAAqB/wB,KAAKgG,MAAMwwB,OAChCxF,aAAchxB,KAAKgG,MAAMwwB,OACzBvF,iBAAkBjxB,KAAKgG,MAAMwwB,OAC7BtF,iBAAkBlxB,KAAKgG,MAAMwwB,OAC7BrF,UAAWnxB,KAAKgG,MAAMwwB,OAEtBpF,cAAe,IAAK/tB,SAAA,EAEpBkB,EAAAA,EAAAA,KAAC8sB,GAAAA,EAAS,CAAC7e,IAAI,8CACfjO,EAAAA,EAAAA,KAAC+nB,GAAc,CAACE,OAAQ/c,GAAOzP,KAAKqtB,MAAM5d,cAItDzG,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EAAEjX,SAAA,EAEXkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,GAAIO,GAAI,GAAI11B,SAAErD,KAAKy2B,iBAC7ClyB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,GAAIO,GAAI,GAAI11B,UAClC2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACR5iB,MAAOzE,GAAO4xB,YACdzlB,QAAQ,WAAUxN,SAAA,EAElBkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CACP6K,QAAM,EACN/2B,GAAG,aAAYuD,SAEdrD,KAAKgG,MAAM2C,EAAE,YAElBpE,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNhb,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACR/Q,GAAG,OACHqR,MAAOnR,KAAKgG,MAAM2C,EAAE,SACpBlE,MAAOzE,KAAKgG,MAAMW,KAAKzC,OAAOuqB,KAC9BllB,SAAU0kB,GAAOjuB,KAAKm3B,aAAalJ,GACnC7d,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ5O,MAAO,CACHc,UAAU,EACV0H,aAAczwB,KAAKgG,MAAMW,KAAKzC,OAAOuqB,MACjClqB,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAKm3B,aAAa,CAAE5kB,OAAQ,CAAE9N,MAAO,MAAQpB,UAE5DkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,eAMxBjP,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,GAAIO,GAAI,GAAI11B,UAClC2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACR5iB,MAAOzE,GAAO4xB,YACdzlB,QAAQ,WAAUxN,SAAA,EAElBkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CACP6K,QAAM,EACN/2B,GAAG,iBAAgBuD,SAElBrD,KAAKgG,MAAM2C,EAAE,gBAElBpE,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNhb,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACR/Q,GAAG,WACHqR,MAAOnR,KAAKgG,MAAM2C,EAAE,aACpBlE,MAAOzE,KAAKgG,MAAMW,KAAKzC,OAAOspB,UAAY,EAC1Cpd,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ5O,MAAO,CACHc,UAAU,IAGlBxf,SAAU0kB,GAAOjuB,KAAKi3B,aAAahJ,EAAK,oBAIpD1pB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACxF,KAAM,CAAE2jB,GAAI,EAAGC,GAAI,GAAIO,GAAI,GAAI11B,UAClC2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACR5iB,MAAOzE,GAAO4xB,YACdzlB,QAAQ,WAAUxN,SAAA,EAElBkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CACP6K,QAAM,EACN/2B,GAAG,kBAAiBuD,SAEnBrD,KAAKgG,MAAM2C,EAAE,iBAElBpE,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNhb,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACR/Q,GAAG,YACHqR,MAAOnR,KAAKgG,MAAM2C,EAAE,cACpBlE,MAAOzE,KAAKgG,MAAMW,KAAKzC,OAAOupB,WAAa,EAC3Crd,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ5O,MAAO,CACHc,UAAU,IAGlBxf,SAAU0kB,GAAOjuB,KAAKi3B,aAAahJ,EAAK,yBAOpE,I,mDClwBJ,MAAMvpB,GAA8B,CAChC0uB,SAAU,CACNtuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV2S,UAAW,SACXb,QAAS,IAGbkc,MAAO,CACHp0B,QAAS,OACTgG,cAAe,SACf/F,MAAO,QAEXo0B,YAAa,CACTttB,cAAe,GACf/G,QAAS,QAEbs0B,iBAAkB,CACdr0B,MAAO,OACPyF,gBAAiB,cACjByF,WAAY,GACZopB,OAAQ,OACRv0B,QAAS,OACTI,WAAY,UAEhBo0B,WAAY,CACRv0B,MAAO,IAEXw0B,aAAc,CACVx0B,MAAO,KAEXy0B,aAAc,CACVz0B,MAAO,IAEX00B,oBAAqB,CACjB10B,MAAO,IACPmlB,UAAW,UAEfwP,aAAc,CACV30B,MAAO,IAEX40B,QAAS,CACL50B,MAAO,KAEXmjB,MAAO,CACHnjB,MAAO,QAEX60B,cAAe,CACX,qBAAsB,CAClBP,OAAQ,oBACRxuB,aAAc,IAGtBgvB,UAAW,CACP3pB,YAAa,EACbnL,MAAO,GACP6F,OAAQ,IAEZkvB,QAAS,CACLvpB,cAAe,SASvB,SAASwpB,GAAYC,GACjB,OAAO35B,EAAAA,EAAW43B,UAAU+B,GAAO,CAAC3H,EAAMtjB,KAAI,CAC1CqB,MAAOrB,EACPkrB,KAAM5H,EAAK4H,QAEnB,CAEA,SAASC,GAAYC,GACjB,MAAMpyB,EAAqB,CAAC,EAC5B,IAAK,MAAM6Q,KAAQuhB,EAEfpyB,EAAO6Q,EAAKxI,OAAS,CAAE6pB,KAAMrhB,EAAKqhB,MAGtC,OAAOlyB,CACX,CAEA,MAAMiS,IAAaogB,EAAAA,GAAAA,IAAe,KAAM51B,EAAAA,EAAAA,KAAC61B,EAAAA,KAAc,CAACjxB,MAAO,CAAEkV,UAAW,EAAGpO,YAAa,EAAGsG,OAAQ,cA0BjG8jB,IAAeC,EAAAA,GAAAA,KAAkCl3B,IAAA,IAAC,MAAEqB,GAAuBrB,EAAA,OAAKqB,CAAK,IACrF81B,IAAeC,EAAAA,GAAAA,KAAgCrtB,IAAA,IAAC,MAAE1I,GAAuB0I,EAAA,OAAK1I,CAAK,IAokBzF,UAAesiB,EAAAA,EAAAA,YAAf,CAlkBA,cAAiCsP,GAC7Bj3B,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAsDjBy0B,MAAQ,KACJ,MAAMjD,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MACtCuzB,EAAQJ,GAAYtC,EAAQlD,OAAO4D,cACzCgC,EAAM93B,KAAK,CACP+N,MAAO,KACP6pB,KAAM,KAEVxC,EAAQlD,OAAO4D,aAAe+B,GAAYC,GAC1Cl6B,KAAKgG,MAAMuD,SAASiuB,EAAQ,EAC9B,KAEFkD,UAAY,KACR,MAAMlD,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MAC5C6wB,EAAQlD,OAAO4D,aAAe,CAE1ByC,OAAQ,CACJX,KAAM,kDAGVY,KAAM,CACFZ,KAAM,0DAId,MAAMa,EAAY55B,OAAOC,KAAKlB,KAAKgG,MAAMW,KAAK2tB,OAAO4D,cAAcrpB,MAC/DC,GAAQ9O,KAAKgG,MAAMW,KAAK2tB,OAAO4D,aAAappB,GAAMkrB,OAASxC,EAAQlD,OAAO4D,aAAayC,OAAOX,OAE9Fa,IACIrD,EAAQlD,OAAO4D,aAAayC,OAAOG,OACnCtD,EAAQlD,OAAO4D,aAAayC,OAAOG,KAAO96B,KAAKgG,MAAMW,KAAK2tB,OAAO4D,aAAa2C,GAAWC,MAEzFtD,EAAQlD,OAAO4D,aAAayC,OAAO9nB,OACnC2kB,EAAQlD,OAAO4D,aAAayC,OAAO9nB,KAAO7S,KAAKgG,MAAMW,KAAK2tB,OAAO4D,aAAa2C,GAAWhoB,MAEzF2kB,EAAQlD,OAAO4D,aAAayC,OAAOI,OACnCvD,EAAQlD,OAAO4D,aAAayC,OAAOI,KAAO/6B,KAAKgG,MAAMW,KAAK2tB,OAAO4D,aAAa2C,GAAWE,OAGjG,MAAMC,EAAU/5B,OAAOC,KAAKlB,KAAKgG,MAAMW,KAAK2tB,OAAO4D,cAAcrpB,MAC7DC,GAAQ9O,KAAKgG,MAAMW,KAAK2tB,OAAO4D,aAAappB,GAAMkrB,OAASxC,EAAQlD,OAAO4D,aAAa0C,KAAKZ,OAE5FgB,IACIxD,EAAQlD,OAAO4D,aAAa0C,KAAKE,OACjCtD,EAAQlD,OAAO4D,aAAa0C,KAAKE,KAAO96B,KAAKgG,MAAMW,KAAK2tB,OAAO4D,aAAa8C,GAASF,MAErFtD,EAAQlD,OAAO4D,aAAa0C,KAAK/nB,OACjC2kB,EAAQlD,OAAO4D,aAAa0C,KAAK/nB,KAAO7S,KAAKgG,MAAMW,KAAK2tB,OAAO4D,aAAa8C,GAASnoB,MAErF2kB,EAAQlD,OAAO4D,aAAa0C,KAAKG,OACjCvD,EAAQlD,OAAO4D,aAAa0C,KAAKG,KAAO/6B,KAAKgG,MAAMW,KAAK2tB,OAAO4D,aAAa8C,GAASD,OAI7F,MAAME,EAAwF76B,EAAAA,EAAWq3B,MACrGz3B,KAAKgG,MAAMiyB,SAEf,OAAKj4B,KAAKgG,MAAMsyB,eAKhB2C,EAAU/2B,OAAOmuB,WAAa,CAAC,UAC/B4I,EAAU/2B,OAAOg3B,mBAAqB,CAAEhD,aAAc,CAAC,EAAGiD,cAAe,QAEzEn7B,KAAKgG,MAAMuD,SAASiuB,EAASyD,GACtB,OARHA,EAAU/2B,OAAOmuB,WAAa,cAC9BryB,KAAKgG,MAAMuD,SAASiuB,EAASyD,GAOtB,EACb,KAEFG,qBAAuB,CACnBC,EACA7D,EACA8D,EACAC,KAEA,MAAMN,EAAY76B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMiyB,SAC9C,IAAKj4B,KAAKgG,MAAMsyB,cAEZ,OADA2C,EAAU/2B,OAAOmuB,WAAagJ,EACvBJ,EAGX,GADAzD,EAAUA,GAAWp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,WAChC2K,IAAbgqB,GAAiE,kBAAhCL,EAAU/2B,OAAOmuB,WAAyB,CAC3E,MAAM/vB,EAAM24B,EAAU/2B,OAAOmuB,WAAW9vB,QAAQ+4B,IACnC,IAATh5B,IACA24B,EAAU/2B,OAAOmuB,WAAW/vB,GAAOi5B,EAE3C,CAMA,GAJ2C,kBAAhCN,EAAU/2B,OAAOmuB,YAA2B4I,EAAU/2B,OAAOmuB,aACpE4I,EAAU/2B,OAAOmuB,WAAa,CAAC4I,EAAU/2B,OAAOmuB,aAEpD4I,EAAU/2B,OAAOmuB,WAAa4I,EAAU/2B,OAAOmuB,YAAc,GAClB,kBAAhC4I,EAAU/2B,OAAOmuB,aACnB4I,EAAU/2B,OAAOmuB,WAAWlwB,SAASk5B,GAAU,CAEhD,MAAM3E,EAAQoD,GAAYtC,EAAQlD,OAAO4D,cACzC+C,EAAU/2B,OAAOmuB,WAAWvQ,MAAK,CAAC4B,EAAGC,IAClB+S,EAAM8E,WAAU7iB,GAAQA,EAAKxI,QAAUuT,IACvCgT,EAAM8E,WAAU7iB,GAAQA,EAAKxI,QAAUwT,KAG9D,CAGJ,OAAOsX,CAAS,EAClB,KAEFQ,UAAYluB,IAA2E,IAA1E,SAAEmuB,EAAQ,SAAEC,GAAkDpuB,EACvEwY,QAAQC,IAAI0V,EAAUC,GACtB,MAAMnE,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MACtC+vB,EAAQoD,GAAYtC,EAAQlD,OAAO4D,cACnCvf,EAAO+d,EAAMgF,GACnBhF,EAAMl0B,OAAOk5B,EAAU,GACvBhF,EAAMl0B,OAAOm5B,EAAU,EAAGhjB,GAC1B6e,EAAQlD,OAAO4D,aAAe+B,GAAYvD,GAE1C,MAAMuE,EAAY76B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMiyB,SAEH,kBAAhCgD,EAAU/2B,OAAOmuB,aACxB4I,EAAU/2B,OAAOmuB,WAAa,CAAC4I,EAAU/2B,OAAOmuB,aAIpD4I,EAAU/2B,OAAOmuB,WAAWvQ,MAAK,CAAC4B,EAAGC,IAClB+S,EAAM8E,WAAU1X,GAAMA,EAAG3T,QAAUuT,IACnCgT,EAAM8E,WAAU1X,GAAMA,EAAG3T,QAAUwT,MAItD3jB,KAAKgG,MAAMuD,SAASiuB,EAASyD,EAAU,EArLvC,MAAMlB,GAC8C,kBAAzC/5B,KAAKgG,MAAMiyB,QAAQ/zB,OAAOmuB,WAC3B,CAACryB,KAAKgG,MAAMiyB,QAAQ/zB,OAAOmuB,YAC3BryB,KAAKgG,MAAMiyB,QAAQ/zB,OAAOmuB,YAClCjP,QAAO0E,GAAKA,IAEd9nB,KAAKoG,MAAQ,CACT8C,OAAQ6wB,EAAMl5B,OACdy2B,SAAS,EACTC,aAAc,KAEtB,CAEAqE,cAAAA,CAAen3B,EAAY3E,EAAYgP,GACnC,MAAM0oB,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MACtCuzB,EAAQJ,GAAYtC,EAAQlD,OAAO4D,cACnCvf,EAAOuhB,EAAMrrB,MAAK7K,GAAWA,EAAQmM,QAAUrQ,IAC/Cw7B,EAAW3iB,EAAKxI,MAItB,IAAI8qB,EAHJtiB,EAAK7J,GAAQrK,EACb+yB,EAAQlD,OAAO4D,aAAe+B,GAAYC,IAIY,kBAAzCl6B,KAAKgG,MAAMiyB,QAAQ/zB,OAAOmuB,YAC/BryB,KAAKgG,MAAMiyB,QAAQ/zB,OAAOmuB,aAAevyB,GACQ,kBAAzCE,KAAKgG,MAAMiyB,QAAQ/zB,OAAOmuB,YAC9BryB,KAAKgG,MAAMiyB,QAAQ/zB,OAAOmuB,WAAWlwB,SAASrC,KAC7C,UAATgP,IAEAmsB,EAAYj7B,KAAKo7B,qBAAqB32B,EAAO+yB,EAAS8D,EAAU72B,IAGpEzE,KAAKgG,MAAMuD,SAASiuB,EAASyD,EACjC,CAEAY,QAAAA,CAAS/7B,GACL,MAAM03B,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MACtCuzB,EAAQJ,GAAYtC,EAAQlD,OAAO4D,cACnC9qB,EAAQ8sB,EAAMsB,WAAUx3B,GAAWA,EAAQmM,QAAUrQ,IAC3Do6B,EAAM13B,OAAO4K,EAAO,GACpBoqB,EAAQlD,OAAO4D,aAAe+B,GAAYC,GACtCl6B,KAAKgG,MAAMiyB,QAAQ/zB,OAAOmuB,aAAevyB,EACrCmB,OAAOC,KAAKs2B,EAAQlD,OAAO4D,cAAcr3B,OAEzCb,KAAKgG,MAAMuD,SAASiuB,EAASx3B,KAAKo7B,qBAAqBn6B,OAAOC,KAAKs2B,EAAQlD,OAAO4D,cAAc,KAEhGl4B,KAAKgG,MAAMuD,SAASiuB,EAASx3B,KAAKo7B,qBAAqB,KAG3Dp7B,KAAKgG,MAAMuD,SAASiuB,EAE5B,CAqIAsE,kBAAAA,CACItE,EACAtuB,EACA6yB,GAEIA,EACA/7B,KAAKuD,SAAS,CAAE+zB,SAAS,EAAMC,aAAc,CAAEC,UAAStuB,WAExDlJ,KAAKuD,SAAS,CAAE2F,UAAS,IAAMlJ,KAAKgG,MAAMuD,SAAS,KAAMiuB,IAEjE,CAEAmB,mBAAAA,GACI,OAAI34B,KAAKoG,MAAMkxB,SAEP/yB,EAAAA,EAAAA,KAACq0B,EAAAA,cAAa,CACV1wB,KAAMlI,KAAKgG,MAAM2C,EAAE,uBACnB8E,QAAS3F,IACL,MAAMrD,EAAQzE,KAAKoG,MAAMmxB,aACzBv3B,KAAKuD,SAAS,CAAE+zB,SAAS,EAAOC,aAAc,OAAQ,KAC9CzvB,GACA9H,KAAKuD,SAAS,CAAE2F,MAAOzE,EAAMyE,QAAS,IAAMlJ,KAAKgG,MAAMuD,SAAS,KAAM9E,EAAM+yB,UAChF,GACF,IAKX,IACX,CAEAwE,kBAAAA,CAAmBrjB,EAA+BvL,GAAmC,IAAD6uB,EAAAC,EAAAC,EAChF,MAAMC,GACDzjB,EAAKxI,OACNwI,EAAKxI,MAAMksB,cAAgB1jB,EAAKxI,OAC/BwI,EAAKxI,MAAMtP,OAAS,KAAO8X,EAAKxI,MAAM6S,MAAM,SAE3Clb,GACFkB,EAAAA,EAAAA,MAACszB,EAAAA,SAAQ,CAACC,UAAU,YAAWl5B,SAAA,EAC3BkB,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAO20B,WACdkD,UAAU,aACVpsB,MAAOnQ,KAAKgG,MAAM2C,EAAE,4BAA4BtF,UAEhDkB,EAAAA,EAAAA,KAACwV,GAAU,OAEf/Q,EAAAA,EAAAA,MAACwzB,EAAAA,UAAS,CACNrzB,MAAOzE,GAAO40B,aACdiD,UAAU,aAAYl5B,SAAA,CAErB+J,EAAQ,EACRpN,KAAKgG,MAAMsyB,eACR/zB,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACL5H,UAC4D,IAAxD9N,KAAKgG,MAAMse,eAAepd,MAAMgkB,SAASmH,YAAwBryB,KAAKgG,MAAMwwB,OAEhFluB,GAAItI,KAAKoG,MAAM8C,MAAQxE,GAAOi1B,mBAAgBroB,EAC9CnB,MAAOnQ,KAAKoG,MAAM8C,MAAQR,EAAAA,KAAKC,EAAE,sCAAwC,GACzEgN,QACoD,kBAAzC3V,KAAKgG,MAAMiyB,QAAQ/zB,OAAOmuB,WAC3BryB,KAAKgG,MAAMiyB,QAAQ/zB,OAAOmuB,aAAe1Z,EAAKxI,MAC9CnQ,KAAKgG,MAAMiyB,QAAQ/zB,OAAOmuB,WAAWlwB,SAASwW,EAAKxI,OAE7D5G,SAAUA,KACN,IAAIwyB,GAAc,EAClB,MAAMvE,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMiyB,SACH,kBAA9BT,EAAQtzB,OAAOmuB,aACtBmF,EAAQtzB,OAAOmuB,WAAa,CAACmF,EAAQtzB,OAAOmuB,aAEhD,IAAI/vB,EAAMk1B,EAAQtzB,OAAOmuB,WAAW9vB,QAAQoW,EAAKxI,OACjD,IAAa,IAAT7N,EAAY,CACZk1B,EAAQtzB,OAAOmuB,WAAWjwB,KAAKuW,EAAKxI,OAGpC,MAAMssB,EAAM3C,GAAY95B,KAAKgG,MAAMW,KAAK2tB,OAAO4D,cAC/CV,EAAQtzB,OAAOmuB,WAAWvQ,MAAK,CAAC4B,EAAGC,IAChB8Y,EAAIjB,WAAU1X,GAAMA,EAAG3T,QAAUuT,IACjC+Y,EAAIjB,WAAU1X,GAAMA,EAAG3T,QAAUwT,MAIpDoY,EAAcpjB,EAAKxI,MAAMqT,cAAc/hB,WAAW,OACtD,MACI+1B,EAAQtzB,OAAOmuB,WAAW7vB,OAAOF,EAAK,GAItCqW,EAAKxI,MAAMqT,cAAc/hB,WAAW,SACpC+1B,EAAQtzB,OAAOmuB,WAAWxjB,MAAKiZ,GAAKA,EAAEtE,cAAc/hB,WAAW,aAE/Da,EAAMk1B,EAAQtzB,OAAOmuB,WAAWmJ,WAAU1T,GACtCA,EAAEtE,cAAc/hB,WAAW,YAE/B+1B,EAAQtzB,OAAOmuB,WAAW7vB,OAAOF,EAAK,IAEtCqW,EAAKxI,MAAMqT,cAAc/hB,WAAW,WACpC+1B,EAAQtzB,OAAOmuB,WAAWxjB,MAAKiZ,GAAKA,EAAEtE,cAAc/hB,WAAW,YAE/Da,EAAMk1B,EAAQtzB,OAAOmuB,WAAWmJ,WAAU1T,GAAKA,EAAEtE,cAAc/hB,WAAW,UAC1E+1B,EAAQtzB,OAAOmuB,WAAW7vB,OAAOF,EAAK,IAG1C,MAAMo6B,GAAUlF,EAAQtzB,OAAOmuB,WAAWxxB,OAC1Cb,KAAK87B,mBAAmBtE,EAASkF,EAAQX,EAAY,IAG7D,SAERx3B,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAO60B,aACdgD,UAAU,aAAYl5B,UAEtBkB,EAAAA,EAAAA,KAAC2L,EAAAA,QAAO,CACJC,MAAOzH,EAAAA,KAAKC,EACR,qFAEJyH,UAAW,CAAEC,OAAQ,CAAE/H,GAAI,CAAEgI,cAAe,UAAajN,UAEzDkB,EAAAA,EAAAA,KAAA,QAAAlB,UACIkB,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACL5H,UAAQ,EAER6H,QAAwC,QAAjCsmB,EAAEj8B,KAAKgG,MAAM22B,SAAShkB,EAAKxI,cAAM,IAAA8rB,OAAA,EAA/BA,EAAiCtB,OAC1CiC,eAAgB58B,KAAKgG,MAAM22B,SAAShkB,EAAKxI,gBAKzD5L,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAO80B,oBACd+C,UAAU,aAAYl5B,UAEtBkB,EAAAA,EAAAA,KAAC2L,EAAAA,QAAO,CACJC,MAAOzH,EAAAA,KAAKC,EAAE,wDACdyH,UAAW,CAAEC,OAAQ,CAAE/H,GAAI,CAAEgI,cAAe,UAAajN,UAEzDkB,EAAAA,EAAAA,KAAA,QAAAlB,UACIkB,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACL5H,SAAU9N,KAAKgG,MAAMwwB,OACrB7gB,QAAkC,QAA3BumB,EAAEl8B,KAAKgG,MAAMiyB,QAAQ/zB,cAAM,IAAAg4B,GAAoB,QAApBC,EAAzBD,EAA2BhB,0BAAkB,IAAAiB,OAApB,EAAzBA,EAA+CjE,aAAavf,EAAKxI,OAC1E5G,SAAUnI,IACN,MAAMy7B,EAAYz8B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMiyB,SAEzC4E,EAAU34B,OAAOg3B,qBAClB2B,EAAU34B,OAAOg3B,mBAAqB,CAClChD,aAAc,CAAC,EACfiD,cAAe,SAIvB0B,EAAU34B,OAAOg3B,mBAAmBhD,aAAavf,EAAKxI,OAAS/O,EAAEmR,OAAOoD,QAExE3V,KAAKgG,MAAMuD,SAASvJ,KAAKgG,MAAMW,KAAMk2B,EAAU,WAMnEt4B,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAOg1B,QACd6C,UAAU,aAAYl5B,UAEtBkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACR/C,SAAU9N,KAAKgG,MAAMwwB,OACrB/xB,MAAOkU,EAAKxI,MACZhH,MAAOzE,GAAOujB,MACdsU,UAAU,cACVhzB,SAAU0kB,GAAOjuB,KAAK47B,eAAe3N,EAAI1b,OAAO9N,MAAOkU,EAAKxI,MAAO,SACnEC,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ5O,MAAO,CACHwI,aAAc9X,EAAKxI,OACf5L,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAK47B,eAAe,GAAIjjB,EAAKxI,MAAO,SAAS9M,UAE5DkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,OAGZtK,MAAOkzB,EACPpT,WAAYoT,EAAY1zB,EAAAA,KAAKC,EAAE,qBAAkB2I,OAGzD/M,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACD,UAAU,uBAAsBl5B,UACvCkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNhb,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACR/Q,GAAI,WAAWsN,IACf3I,MAAOkU,EAAKqhB,KACZ7wB,MAAOzE,GAAOujB,MACdsU,UAAU,cACVhzB,SAAU0kB,GAAOjuB,KAAK47B,eAAe3N,EAAI1b,OAAO9N,MAAOkU,EAAKxI,MAAO,QACnEC,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ5O,MAAO,CACHc,UAAU,EACV0H,aAAc9X,EAAKqhB,MACfz1B,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAK47B,eAAe,GAAIjjB,EAAKxI,MAAO,QAAQ9M,UAE3DkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,YAKpBjP,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAO+0B,aACd8C,UAAU,aAAYl5B,UAEtBkB,EAAAA,EAAAA,KAACosB,EAAAA,IAAG,CACA7iB,SAAU9N,KAAKgG,MAAMwwB,OACrB5hB,KAAK,QACLvP,MAAM,YACN,aAAW,MACXgO,QAASA,IAAMrT,KAAK67B,SAASljB,EAAKxI,OAAO9M,UAEzCkB,EAAAA,EAAAA,KAACu4B,EAAAA,OAAU,WAM3B,OACIv4B,EAAAA,EAAAA,KAACg2B,GAAY,CAETntB,MAAOA,EACP3I,MAAOqD,GAFFsF,EAKjB,CAEA2vB,kBAAAA,CAAmBrG,GACf,MAAM5uB,GACFkB,EAAAA,EAAAA,MAACg0B,EAAAA,MAAK,CAAC7zB,MAAOzE,GAAOu0B,MAAM51B,SAAA,EACvBkB,EAAAA,EAAAA,KAAC04B,EAAAA,UAAS,CAAA55B,UACN2F,EAAAA,EAAAA,MAACszB,EAAAA,SAAQ,CAACC,UAAU,YAAWl5B,SAAA,EAC3BkB,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAO20B,WACdkD,UAAU,gBAEdh4B,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAO40B,aACdiD,UAAU,aAAYl5B,SAErBrD,KAAKgG,MAAMsyB,cAAgB5vB,EAAAA,KAAKC,EAAE,UAAY,MAEnDpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAO60B,aACdgD,UAAU,aAAYl5B,SAErBqF,EAAAA,KAAKC,EAAE,aAEZpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAO80B,oBACd+C,UAAU,aAAYl5B,SAErBqF,EAAAA,KAAKC,EAAE,mBAEZpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAOg1B,QACd6C,UAAU,aAAYl5B,SAErBrD,KAAKgG,MAAM2C,EAAE,WAElBpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACD,UAAU,uBAAsBl5B,SAAErD,KAAKgG,MAAM2C,EAAE,WAC1DpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAO+0B,aACd8C,UAAU,aAAYl5B,SAErB,YAIbkB,EAAAA,EAAAA,KAAC24B,EAAAA,UAAS,CAAA75B,SAAEqzB,EAAMjnB,KAAI,CAACkJ,EAAMvL,IAAUpN,KAAKg8B,mBAAmBrjB,EAAMvL,UAI7E,OACI7I,EAAAA,EAAAA,KAAC81B,GAAY,CACT8C,YAAY,iBACZC,eAAa,EACbC,SAAS,IACT5B,UAAWz7B,KAAKy7B,UAChBh3B,MAAOqD,GAGnB,CAKAw1B,uBAAAA,GAA8C,IAADC,EAAAC,EACzC,MAAMC,GAC0C,QAA5CF,EAAAv9B,KAAKgG,MAAMiyB,QAAQ/zB,OAAOg3B,0BAAkB,IAAAqC,OAAA,EAA5CA,EAA8CpC,gBAAiB,OAC7DuC,GAA6D,QAA5CF,EAAAx9B,KAAKgG,MAAMiyB,QAAQ/zB,OAAOg3B,0BAAkB,IAAAsC,OAAA,EAA5CA,EAA8CtF,eAAgB,CAAC,EAEtF,OACIlvB,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAEtE,QAAS,OAAQmL,WAAY,GAAInF,cAAe,UAAWxH,SAAA,EACrE2F,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAEtE,QAAS,OAAQI,WAAY,UAAW5B,SAAA,EAClDkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAApF,SACNqF,EAAAA,KAAKC,EAAE,uEAEZpE,EAAAA,EAAAA,KAAC2nB,EAAAA,OAAM,CACHrb,QAAQ,WACRvI,GAAI,CAAE0H,WAAY,EAAGsO,aAAc,GACnC7Z,MAAOg5B,EACPl0B,SAAUnI,IACN,MAAMy7B,EAAYz8B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMiyB,SAEzC4E,EAAU34B,OAAOg3B,qBAClB2B,EAAU34B,OAAOg3B,mBAAqB,CAAEhD,aAAc,CAAC,EAAGiD,cAAe,SAG7E0B,EAAU34B,OAAOg3B,mBAAmBC,cAAgB/5B,EAAEmR,OAAO9N,MAE7DzE,KAAKgG,MAAMuD,SAASvJ,KAAKgG,MAAMW,KAAMk2B,EAAU,EACjDx5B,SAEDs6B,GAAAA,GAAsBluB,KAAI4gB,IACvB9rB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CACL3nB,MAAO4rB,EAAOhtB,SAGbu6B,GAAAA,GAA6BvN,IAFzBA,WAOrB9rB,EAAAA,EAAAA,KAACs5B,GAAAA,EAAS,CAACp5B,SAAUi5B,EAAe9C,OAAQ8C,EAAe,mBAAgC,SAAXD,EAAkBp6B,UAC9FkB,EAAAA,EAAAA,KAACu5B,GAAAA,QAAO,CAAC59B,KAAK,UAASmD,SAAEqF,EAAAA,KAAKC,EAAE,yBAEpCpE,EAAAA,EAAAA,KAACs5B,GAAAA,EAAS,CAACp5B,MAAkB,UAAXg5B,EAAmBp6B,UACjCkB,EAAAA,EAAAA,KAACu5B,GAAAA,QAAO,CAAC59B,KAAK,UAASmD,SAClBqF,EAAAA,KAAKC,EACF,sHAMxB,CAEAwB,MAAAA,GACI,MAAMusB,EAAQoD,GAAY95B,KAAKgG,MAAMW,KAAK2tB,OAAO4D,cAEjD,OACIlvB,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO0uB,SAAS/vB,SAAA,CACvBrD,KAAK24B,uBACN3vB,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOw0B,YAAY71B,SAAA,EAC3BkB,EAAAA,EAAAA,KAACosB,EAAAA,IAAG,CACA/b,KAAK,QACLvP,MAAM,UACNyI,SAAU9N,KAAKgG,MAAMwwB,OACrB,aAAW,MACXnjB,QAASrT,KAAKy6B,MACdtxB,MAAOzE,GAAOk1B,UACdzpB,MAAOnQ,KAAKgG,MAAM2C,EAAE,uCAAuCtF,UAE3DkB,EAAAA,EAAAA,KAACw5B,EAAAA,IAAO,OAEZx5B,EAAAA,EAAAA,KAACosB,EAAAA,IAAG,CACA/b,KAAK,QACL9G,SAAU9N,KAAKgG,MAAMwwB,OACrBnjB,QAASrT,KAAK06B,UACdvxB,MAAOzE,GAAOk1B,UACdzpB,MAAOnQ,KAAKgG,MAAM2C,EAAE,sCAAsCtF,UAE1DkB,EAAAA,EAAAA,KAACy5B,EAAAA,sBAAW,MAEfh+B,KAAKs9B,8BAEV/4B,EAAAA,EAAAA,KAAC05B,EAAAA,eAAc,CAAA56B,SAAErD,KAAK+8B,mBAAmBrG,OAGrD,IC7sBEhyB,GAA8C,CAChD0uB,SAAU,CACNtuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV2S,UAAW,SACXb,QAAS,IAGbkc,MAAO,CACHp0B,QAAS,OACTgG,cAAe,SACf/F,MAAO,QAEXmjB,MAAO,CACHnjB,MAAO,IACPmL,YAAa,IAEjBvE,OAAQ,CACJ2S,UAAW,IAEf6f,UAAW,CACP74B,MAAO,SAEX84B,SAAU,CACN94B,MAAO,QAEX+4B,UAAW,CACPt5B,MAAO,KAEXu5B,UAAW,CACPv5B,MAAO,IACPmlB,UAAW,SAEfqU,UAAW,CACPx5B,MAAO,KAEXy5B,WAAY,CACRz5B,MAAO,KAEX05B,aAAc,CACV15B,MAAO,IAEX25B,YAAa,CACT35B,MAAO,KAEX45B,SAAU,CACNzzB,SAAU,OACVN,OAAQ,qBAEZg0B,gBAAiB,CACb75B,MAAO,KAEX85B,UAAW,CACPp5B,SAAU,GACVN,QAAS,GACT25B,UAAW,WA2PnB,UAAe9X,EAAAA,EAAAA,YAAf,CArNA,cAA6BsP,GACzBj3B,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAUjB84B,kBAAoB,CAACh/B,EAAYC,KAClB,oBAAPD,KACAC,EAAMA,GAAQ,CAAC,GACXu0B,OAASv0B,EAAIu0B,QAAU,CAAC,EAC5Bv0B,EAAIu0B,OAAOyK,SAAWh/B,EAAIu0B,OAAOyK,UAAY,GAGzCz+B,KAAKC,UAAUR,EAAIu0B,OAAOyK,YAAcz+B,KAAKC,UAAUP,KAAKoG,MAAM24B,WAClE19B,OAAOC,MAAMtB,KAAKgG,MAAM2C,EAAE,6BAC1B3I,KAAKuD,SAAS,CAAEw7B,SAAUh/B,EAAIu0B,OAAOyK,YAErC19B,OAAOC,MAAMtB,KAAKgG,MAAM2C,EAAE,8BAElC,EArBA3I,KAAKoG,MAAQ,CACT44B,KAAM,GACNlU,YAAY,EACZiU,SAAU/+B,KAAKgG,MAAMW,KAAK2tB,OAAOyK,UAAY,GAGrD,CAkBAj4B,iBAAAA,GACS9G,KAAKgG,MAAM3G,OAAO8rB,UAAU,oBAAoBpqB,MAAKhB,IACtDC,KAAKgG,MAAM3G,OACNyB,gBAAgB,kBAAmBd,KAAK8+B,mBACxC39B,OAAMC,GAAKC,OAAOC,MAAM,wCAAwCF,OACrEpB,KAAKuD,SAAS,CAAEy7B,KAAMj/B,EAAIu0B,OAAO0K,MAAO,GAEhD,CAEA5c,oBAAAA,GACSpiB,KAAKgG,MAAM3G,OAAOoD,kBAAkB,kBAAmBzC,KAAK8+B,kBACrE,CAEA9H,QAAAA,CAASloB,EAA4BrK,GACjC,MAAM+yB,EAAyBjvB,EAAAA,MAAMkvB,MAAMz3B,KAAKgG,MAAMW,MACtD6wB,EAAQlD,OAAOxlB,GAAQrK,EACvBzE,KAAKgG,MAAMuD,SAASiuB,EACxB,CAEA,qBAAMyH,GACFj/B,KAAKuD,SAAS,CAAEunB,YAAY,IAC5B,IACI,IAAIzC,EAAWroB,KAAKgG,MAAMW,KAAK2tB,OAAOjM,SAEtC,GAAiB,sBAAbA,EAAkC,CAClC,MAAMtoB,QAAYC,KAAKgG,MAAM3G,OAAO8rB,UAAU,mBAG1C9C,EADAtoB,EAAIu0B,OAAO4K,QAAUl/B,KAAKgG,MAAMW,KAAK2tB,OAAO4K,YAC3Bl/B,KAAKgG,MAAM3G,OAAO8/B,QAAQp/B,EAAIu0B,OAAOjM,UAE3C,IAEnB,CAEA,MAAM0W,QAAiB/+B,KAAKgG,MAAM3G,OAAO+/B,eACrC/W,EAAWroB,KAAKgG,MAAMW,KAAK2tB,OAAO4K,MAAQ,KAC1C7W,GAGa,OAAb0W,QAAkCztB,IAAbytB,GACjB1W,GACAhnB,OAAOC,MACHtB,KAAKgG,MAAM2C,EAAE,mFAIrB3I,KAAKuD,SAAS,CAAEw7B,WAAUjU,YAAY,KAEtC9qB,KAAKuD,SAAS,CAAEunB,YAAY,GAEpC,CAAE,MAAO5hB,GACLlJ,KAAKuD,SAAS,CAAEunB,YAAY,IACd,oBAAV5hB,EACA7H,OAAOC,MAAMtB,KAAKgG,MAAM2C,EAAE,qCACT,4BAAVO,EACP7H,OAAOC,MAAMtB,KAAKgG,MAAM2C,EAAE,6BAA8B3I,KAAKgG,MAAM2C,EAAE,6BAErEtH,OAAOC,MAAMtB,KAAKgG,MAAM2C,EAAE,6BAA8BO,GAEhE,CACJ,CAEAm2B,cAAAA,GACI,OACI96B,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOg6B,SAASr7B,UACxBkB,EAAAA,EAAAA,KAAC05B,EAAAA,eAAc,CAAA56B,UACX2F,EAAAA,EAAAA,MAACg0B,EAAAA,MAAK,CACFsC,cAAY,EACZ1qB,KAAK,QAAOvR,SAAA,EAEZkB,EAAAA,EAAAA,KAAC04B,EAAAA,UAAS,CAAA55B,UACN2F,EAAAA,EAAAA,MAACszB,EAAAA,SAAQ,CAAAj5B,SAAA,EACLkB,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAO05B,UAAU/6B,SAAErD,KAAKgG,MAAM2C,EAAE,cAClDpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAO25B,UAAUh7B,SAAErD,KAAKgG,MAAM2C,EAAE,iBAClDpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAO45B,UAAUj7B,SAAErD,KAAKgG,MAAM2C,EAAE,WAClDpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAO65B,WAAWl7B,SAAErD,KAAKgG,MAAM2C,EAAE,iBACnDpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAO85B,aAAan7B,SAAErD,KAAKgG,MAAM2C,EAAE,QACrDpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAO+5B,YAAYp7B,SAAErD,KAAKgG,MAAM2C,EAAE,cACpDpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAOi6B,gBAAgBt7B,SAAErD,KAAKgG,MAAM2C,EAAE,0BAGhEpE,EAAAA,EAAAA,KAAC24B,EAAAA,UAAS,CAAA75B,SACLrD,KAAKoG,MAAM24B,UACR/+B,KAAKoG,MAAM24B,SAAStvB,KAAI8vB,IACpBv2B,EAAAA,EAAAA,MAACszB,EAAAA,SAAQ,CAAAj5B,SAAA,EACL2F,EAAAA,EAAAA,MAACwzB,EAAAA,UAAS,CAACrzB,MAAOzE,GAAO05B,UAAU/6B,SAAA,EAC/BkB,EAAAA,EAAAA,KAAA,OAAAlB,SAAMk8B,EAAQC,WACdj7B,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOk6B,UAAUv7B,SAAEk8B,EAAQz/B,SAE3CyE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAO25B,UAAUh7B,SAC9B,IAAImD,KAAK+4B,EAAQxE,MAAM0E,wBAE5Bl7B,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAO,IACAzE,GAAO45B,aACNiB,EAAQP,MAAQh/B,KAAKoG,MAAM44B,OAASO,EAAQP,KAC1Ct6B,GAAOw5B,UACPqB,EAAQP,KACNt6B,GAAOy5B,cACP7sB,GACVjO,SAEDk8B,EAAQP,MAAQ,MAErBz6B,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAO65B,WAAWl7B,SACT,wBAAtBk8B,EAAQG,UAAsC,GAAKH,EAAQG,WAAa,MAE7En7B,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAO85B,aAAan7B,SAAEk8B,EAAQz7B,SAAW,MAC3DS,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAO+5B,YAAYp7B,SAAEk8B,EAAQI,QAAU,MACzDp7B,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAOi6B,gBAAgBt7B,SAChB,SAApBk8B,EAAQK,QACiB,qBAApBL,EAAQK,QACJ,SACAL,EAAQK,QACZ,QA9BCL,EAAQz/B,cAuCvD,CAEAqK,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO0uB,SAAS/vB,SAAA,EACxBkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACR1H,MAAOzE,GAAOujB,MACdna,SAAU9N,KAAKgG,MAAMwwB,QAAUx2B,KAAKoG,MAAM0kB,WAC1CrmB,MAAOzE,KAAKgG,MAAMW,KAAK2tB,OAAO4K,MAC9BlW,WAAYhpB,KAAKgG,MAAM2C,EAAE,2BACzBwI,MAAOnR,KAAKgG,MAAM2C,EAAE,eACpBY,SAAUnI,GAAKpB,KAAKg3B,SAAS,QAAS51B,EAAEmR,OAAO9N,OAC/C2L,UAAW,CACP6X,MAAO,CACHW,aAAc,gBAElBK,UAAW,CACPL,aAAc,WAI1BrkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACR/C,SAAU9N,KAAKgG,MAAMwwB,QAAUx2B,KAAKoG,MAAM0kB,WAC1C3hB,MAAOzE,GAAOujB,MACd/nB,KAAK,WACLuE,MAAOzE,KAAKgG,MAAMW,KAAK2tB,OAAOjM,SAC9BW,WAAYhpB,KAAKgG,MAAM2C,EAAE,2BACzBwI,MAAOnR,KAAKgG,MAAM2C,EAAE,YACpBY,SAAUnI,GAAKpB,KAAKg3B,SAAS,WAAY51B,EAAEmR,OAAO9N,OAClD2L,UAAW,CACP6X,MAAO,CACHW,aAAc,gBAElBK,UAAW,CACPL,aAAc,WAI1BrkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACRyC,WAAW/O,EAAAA,EAAAA,KAACs7B,EAAAA,QAAW,IACvB/xB,SACI9N,KAAKoG,MAAM0kB,YACX9qB,KAAKgG,MAAMwwB,SACVx2B,KAAKgG,MAAMiJ,OACXjP,KAAKgG,MAAMW,KAAK2tB,OAAOjM,WACvBroB,KAAKgG,MAAMW,KAAK2tB,OAAO4K,MAE5B7rB,QAASA,IAAMrT,KAAKi/B,kBACpB91B,MAAOzE,GAAOgH,OACdrG,MAAM,OAAMhC,SAEXrD,KAAKgG,MAAM2C,EAAE,WAEjB3I,KAAKq/B,mBAGlB,I,2BChSJ,MAAM36B,GAA8C,CAChD0uB,SAAU,CACNtuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV2S,UAAW,SACXb,QAAS,GACTnY,SAAU,YAEdk7B,eAAgB,CACZh0B,OAAQ,KAEZmtB,MAAO,CACHp0B,QAAS,OACTgG,cAAe,SACf/F,MAAO,QAEXo0B,YAAa,CACTttB,cAAe,GACf/G,QAAS,QAEbs0B,iBAAkB,CACdr0B,MAAO,OACPyF,gBAAiB,cACjByF,WAAY,GACZopB,OAAQ,OACRv0B,QAAS,OACTI,WAAY,UAEhB86B,UAAW,CACPj7B,MAAO,KAEX40B,QAAS,CACL50B,MAAO,KAEXmjB,MAAO,CACHnjB,MAAO,SAwBf,MAAMk7B,WAA2B3J,GAC7Bj3B,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAqPjBixB,aAAe,CAACxyB,EAAe3E,EAAYgP,KACvC,MAAM0oB,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MACtCuzB,EAAQ8F,GAAmBC,YAAYzI,EAAQlD,OAAO4L,cAC5DhG,EAAMrrB,MAAK7K,GAAWA,EAAQmM,QAAUrQ,IAAIgP,GAAQrK,EACpD+yB,EAAQlD,OAAO4L,aAAeF,GAAmBG,YAAYjG,GAC7Dl6B,KAAKgG,MAAMuD,SAASiuB,EAAQ,EAC9B,KAEFqE,SAAY/7B,IACR,MAAM03B,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MACtCuzB,EAAQ8F,GAAmBC,YAAYzI,EAAQlD,OAAO4L,cACtD9yB,EAAQ8sB,EAAMsB,WAAUx3B,GAAWA,EAAQmM,QAAUrQ,IAC3Do6B,EAAM13B,OAAO4K,EAAO,GACpBoqB,EAAQlD,OAAO4L,aAAeF,GAAmBG,YAAYjG,GAC7Dl6B,KAAKgG,MAAMuD,SAASiuB,EAAQ,EAC9B,KAEFiD,MAAQ,CAACtqB,EAAgBxJ,KACrB,MAAM6wB,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MACtCuzB,EAAQ8F,GAAmBC,YAAYzI,EAAQlD,OAAO4L,cACtDE,EAAWpgC,KAAKgG,MAAM2C,EAAE,eAC9B,IAAKwH,EACD,IAAK,IAAIkC,EAAI,GAAKA,IACd,IAAK6nB,EAAMrrB,MAAK8J,GAAQA,EAAKxI,QAAU,GAAGiwB,KAAY/tB,MAAM,CACxDlC,EAAQ,GAAGiwB,KAAY/tB,IACvB,KACJ,CAIR6nB,EAAM93B,KAAK,CACP+N,MAAOA,GAAS,KAChBxJ,KAAMA,GAAQ,KAElB6wB,EAAQlD,OAAO4L,aAAeF,GAAmBG,YAAYjG,GAC7Dl6B,KAAKgG,MAAMuD,SAASiuB,EAAQ,EAtR5Bx3B,KAAKoG,MAAQ,CACTi6B,SAAS,EAEjB,CAEA,kBAAOJ,CAAY1K,GACf,OAAOn1B,EAAAA,EAAW43B,UAAUzC,GAAO,CAAC+K,EAAMxxB,KAAY,CAClDqB,MAAOrB,EACPnI,KAAM25B,KAEd,CAEA,kBAAOH,CAAYjG,GACf,MAAMpyB,EAAiC,CAAC,EAKxC,OAJAoyB,EAAMz5B,SAAQW,IACV0G,EAAO1G,EAAE+O,OAAS/O,EAAEuF,IAAI,IAGrBmB,CACX,CAEA,iBAAOy4B,CAAWzxB,GAGd,OAFAA,EAAOA,EAAK0U,eAEHrhB,SAAS,WAAa2M,EAAK3M,SAAS,QAClC,SAEP2M,EAAK3M,SAAS,SAAW2M,EAAK3M,SAAS,OAChC,UAEP2M,EAAK3M,SAAS,UAAY2M,EAAK3M,SAAS,MACjC,UAEJ,EACX,CAEAgI,MAAAA,GACI,MAEMq2B,EAFMR,GAAmBC,YAAYjgC,KAAKgG,MAAMW,KAAK2tB,OAAO4L,cAEjDzwB,KAAI,CAACrO,EAAGiR,KACrB,MAAMnS,EAAO8/B,GAAmBO,WAAWn/B,EAAE+O,OAE7C,OACInH,EAAAA,EAAAA,MAACszB,EAAAA,SAAQ,CAELC,UAAU,YAAWl5B,SAAA,EAErBkB,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAOq7B,UACdxD,UAAU,aAAYl5B,SAErBgP,EAAI,KAET9N,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAOg1B,QACd6C,UAAU,aAAYl5B,UAEtBkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNhb,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACRpM,MAAOrD,EAAE+O,MACThH,MAAOzE,GAAOujB,MACdsU,UAAU,cACVhzB,SAAU0kB,GAAOjuB,KAAKi3B,aAAahJ,EAAI1b,OAAO9N,MAAOrD,EAAE+O,MAAO,SAC9DjH,OAAQhJ,EACR8oB,WACI9oB,GACAwI,EAAAA,KAAKC,EACD,6FAGRyH,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ5O,MAAO,CACHc,UAAU,EACV0H,aAAcrvB,EAAE+O,OACZ5L,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAKi3B,aAAa,GAAI71B,EAAE+O,MAAO,SAAS9M,UAEvDkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,YAKpBjP,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACD,UAAU,uBAAsBl5B,UACvCkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNhb,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACR/Q,GAAI,WAAWuS,IACf5N,MAAOrD,EAAEuF,KACTwC,MAAOzE,GAAOujB,MACdsU,UAAU,cACVhzB,SAAU0kB,IACN,IAAIxpB,EAAQwpB,EAAI1b,OAAO9N,MAAMoD,QAAQ,MAAO,IAAIA,QAAQ,MAAO,IAC/D,GAAIpD,EAAMhD,WAAW,MAAO,CACxB,MAAMg/B,EAAQh8B,EAAMsE,MAAM,SAC1B03B,EAAM,GAAKA,EAAM,GAAG54B,QAAQ,MAAO,IACnCpD,EAAQ,QAAQg8B,EAAM,cAAcA,EAAM,cAAcA,EAAM,SAClE,CAEAzgC,KAAKi3B,aAAaxyB,EAAOrD,EAAE+O,MAAO,OAAO,EAE7CC,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ5O,MAAO,CACHc,UAAU,EACV0H,aAAcrvB,EAAEuF,MACZpC,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAKi3B,aAAa,GAAI71B,EAAE+O,MAAO,QAAQ9M,UAEtDkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,YAKpBjP,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAOq7B,UACdxD,UAAU,aAAYl5B,UAEtBkB,EAAAA,EAAAA,KAACosB,EAAAA,IAAG,CACA7iB,SAAU9N,KAAKgG,MAAMwwB,OACrB5hB,KAAK,QACLvP,MAAM,YACN,aAAW,MACXgO,QAASA,IAAMrT,KAAK67B,SAASz6B,EAAE+O,OAAO9M,UAEtCkB,EAAAA,EAAAA,KAACu4B,EAAAA,OAAU,UAhGdzqB,EAmGE,IAGnB,OACIrJ,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO0uB,SAAS/vB,SAAA,EACxBkB,EAAAA,EAAAA,KAACm8B,KAAQ,CAACC,SAAO,EAAAt9B,SACZD,IAAA,IAAC,aAAEw9B,EAAY,cAAEC,EAAa,cAAEC,EAAa,eAAEC,GAAgB39B,EAAA,OAC5DmB,EAAAA,EAAAA,KAAA,UACQq8B,EAAa,CACbrE,UAAWv8B,KAAKoG,MAAMi6B,QAAU,0BAA4B,iBAC5DW,YAAaA,IAAMhhC,KAAKuD,SAAS,CAAE88B,SAAS,IAC5CY,YAAaA,IAAMjhC,KAAKuD,SAAS,CAAE88B,SAAS,IAC5Ca,OAAQA,KACJ,IAAIlhC,KAAKgG,MAAMwwB,OAAf,CAIA,GAAIuK,EAAelgC,OAAQ,CACvB,MAAMuR,EAAgB,GACtB2uB,EAAetgC,SAAQW,IACnB,MAAMuL,EAAI,GAAGvL,EAAE+/B,KAAKryB,SACdsyB,EAAe,GACrBhgC,EAAEigC,OAAO5gC,SAAQ6gC,GAAMF,EAAGh/B,KAAKk/B,EAAG38B,WAClCyN,EAAIhQ,KAAKuK,EAAIy0B,EAAGG,KAAK,KAAK,IAG9BjgC,MAAM8Q,EAAImvB,KAAK,MACnB,CAEIT,EAAcjgC,OACdigC,EAAcrgC,SAAQ0gC,IAClB,MAAMK,EAAS,IAAIC,WACnBD,EAAOE,OAAStgC,GAAKpB,KAAKy6B,MAAM0G,EAAKryB,KAAM1N,EAAEmR,OAAOzK,QACpD05B,EAAOG,WAAWR,EAAK,IAEnBJ,EAAelgC,QACvBS,MAAMtB,KAAKgG,MAAM2C,EAAE,oBAGvB3I,KAAKuD,SAAS,CAAE88B,SAAS,GAvBzB,CAuBiC,IAEvCh9B,UAEFkB,EAAAA,EAAAA,KAAA,YAAWs8B,OACT,KAGd73B,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOw0B,YAAY71B,SAAA,EAC3BkB,EAAAA,EAAAA,KAACosB,EAAAA,IAAG,CACA7iB,SAAU9N,KAAKgG,MAAMwwB,OACrB5hB,KAAK,QACL2nB,UAAU,aACVl3B,MAAM,UACN,aAAW,MACXgO,QAASA,IAAMrT,KAAKy6B,QAAQp3B,UAE5BkB,EAAAA,EAAAA,KAACw5B,EAAAA,IAAO,OAEZx5B,EAAAA,EAAAA,KAACuY,EAAAA,MAAK,CACFjM,QAAQ,WACR1H,MAAOzE,GAAOy0B,iBAAiB91B,SAE9BrD,KAAKgG,MAAM2C,EAAE,oBAGtBpE,EAAAA,EAAAA,KAAC05B,EAAAA,eAAc,CAAC90B,MAAOzE,GAAOo7B,eAAez8B,UACzC2F,EAAAA,EAAAA,MAACg0B,EAAAA,MAAK,CACF7zB,MAAOzE,GAAOu0B,MACd,aAAW,mBAAkB51B,SAAA,EAE7BkB,EAAAA,EAAAA,KAAC04B,EAAAA,UAAS,CAAA55B,UACN2F,EAAAA,EAAAA,MAACszB,EAAAA,SAAQ,CAACC,UAAU,YAAWl5B,SAAA,EAC3BkB,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAOq7B,UACdxD,UAAU,aAAYl5B,SAErB,OAELkB,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAOg1B,QACd6C,UAAU,aAAYl5B,SAErBrD,KAAKgG,MAAM2C,EAAE,WAElBpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACD,UAAU,uBAAsBl5B,SAAErD,KAAKgG,MAAM2C,EAAE,kBAC1DpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNrzB,MAAOzE,GAAOq7B,UACdxD,UAAU,aAAYl5B,SAErB,YAIbkB,EAAAA,EAAAA,KAAC24B,EAAAA,UAAS,CAAA75B,SAAEm9B,WAKhC,EAyCJ,UAAezZ,EAAAA,EAAAA,YAAf,CAA2BiZ,IC1WrBt7B,GAA8B,CAChC0uB,SAAU,CACNtuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV2S,UAAW,SACXb,QAAS,IAGbmc,YAAa,CACTttB,cAAe,GACf/G,QAAS,QAEbs0B,iBAAmBpvB,IAAe,CAC9BjF,MAAO,OACPyF,gBAAiB,cACjByF,WAAY,GACZopB,OAAQ,OACRv0B,QAAS,OACTI,WAAY,SACZ,MAAO,CACH28B,YAAa,EACbv8B,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,OAAS,UAGxD+qB,YAAa,CACT7qB,OAAQ,EACR+O,SAAU,SAkKlB,UAAeuM,EAAAA,EAAAA,YAAf,CAvJA,cAAwBsP,GACpBlsB,MAAAA,GACI,MAAM,KAAExD,GAAS3G,KAAKgG,OAChB,YAAE67B,GAAgBl7B,EAAK2tB,QAAU,CAAC,EACxC,OACItrB,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO0uB,SAAS/vB,SAAA,EACxBkB,EAAAA,EAAAA,KAAA,OACI4E,MAAO,CACHrE,MAAO,OAEPmG,SAAU,OACV2S,UAAW,SACXb,QAAS,GACTvX,SAAU,GACVH,MAAO,WACThC,SAEDrD,KAAKgG,MAAM2C,EAAE,gEAElBpE,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOw0B,YAAY71B,UAC3BkB,EAAAA,EAAAA,KAACuY,EAAAA,MAAK,CACFjM,QAAQ,WACRvI,GAAI5D,GAAOy0B,iBACX2I,wBAAyB,CAAEC,OAAQ/hC,KAAKgG,MAAM2C,EAAE,0BAGxDK,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EAAEjX,SAAA,EAEXkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACxF,KAAM,CAAEmkB,GAAI,EAAGP,GAAI,IAAKn1B,UAC3BkB,EAAAA,EAAAA,KAACwnB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAO4xB,YAAYjzB,UAE1BkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACR/Q,GAAG,QACHgO,SAAU9N,KAAKgG,MAAMwwB,OACrBrlB,MAAOnR,KAAKgG,MAAM2C,EAAE,sBACpBlE,OAAkB,OAAXo9B,QAAW,IAAXA,OAAW,EAAXA,EAAaG,QAAS,GAC7Bz4B,SAAU0kB,GAAOjuB,KAAKi3B,aAAahJ,EAAK,SACxC7d,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ5O,MAAO,CACHc,UAAU,EACV0H,aAAyB,OAAXoR,QAAW,IAAXA,GAAAA,EAAaG,OACvBz9B,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IACLrT,KAAKi3B,aAAa,CAAE1kB,OAAQ,CAAE9N,MAAO,KAAQ,SAChDpB,UAEDkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,cAMxBjP,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACxF,KAAM,CAAEmkB,GAAI,EAAGP,GAAI,IAAKn1B,UAC3BkB,EAAAA,EAAAA,KAACwnB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAO4xB,YAAYjzB,UAE1BkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNhb,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACR/Q,GAAG,UACHqR,MAAOnR,KAAKgG,MAAM2C,EAAE,YACpBlE,OAAkB,OAAXo9B,QAAW,IAAXA,OAAW,EAAXA,EAAaI,UAAW,GAC/B14B,SAAU0kB,GAAOjuB,KAAKi3B,aAAahJ,EAAK,WACxC7d,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ5O,MAAO,CACHc,UAAU,EACV0H,aAAyB,OAAXoR,QAAW,IAAXA,GAAAA,EAAaI,SACvB19B,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IACLrT,KAAKi3B,aAAa,CAAE1kB,OAAQ,CAAE9N,MAAO,KAAQ,WAChDpB,UAEDkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,cAMxBjP,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACxF,KAAM,CAAEmkB,GAAI,EAAGP,GAAI,IAAKn1B,UAC3BkB,EAAAA,EAAAA,KAACwnB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAO4xB,YAAYjzB,UAE1BkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACR/Q,GAAG,OACHgO,SAAU9N,KAAKgG,MAAMwwB,OACrBrlB,MAAOnR,KAAKgG,MAAM2C,EAAE,oBACpBlE,OAAkB,OAAXo9B,QAAW,IAAXA,OAAW,EAAXA,EAAa1a,OAAQ,GAC5B5d,SAAU0kB,GAAOjuB,KAAKi3B,aAAahJ,EAAK,QACxC7d,UAAW,CACPsoB,WAAY,CACR7B,QAAQ,GAEZ5O,MAAO,CACHc,UAAU,EACV0H,aAAyB,OAAXoR,QAAW,IAAXA,GAAAA,EAAa1a,MACvB5iB,EAAAA,EAAAA,KAACmsB,EAAAA,eAAc,CAAC9rB,SAAS,MAAKvB,UAC1BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAKi3B,aAAa,CAAE1kB,OAAQ,CAAE9N,MAAO,KAAQ,QAAQpB,UAEpEkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,QAGlB,kBASxC,CAEAyjB,YAAAA,CAAahJ,EAAoCnuB,GAC7C,MAAM2E,EAAQwpB,EAAI1b,OAAO9N,MACzBzE,KAAKg3B,SAASl3B,EAAI2E,EACtB,CAEAuyB,QAAAA,CAASloB,EAAoCrK,GACzC,MAAM+yB,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MAC5C6wB,EAAQlD,OAAOuN,YAAcrK,EAAQlD,OAAOuN,aAAe,CAAC,EAC5DrK,EAAQlD,OAAOuN,YAAY/yB,GAAQrK,EACnCzE,KAAKgG,MAAMuD,SAASiuB,EACxB,IC7KE9yB,GAA8C,CAChD0uB,SAAU,CACNtuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV2S,UAAW,SACXb,QAAS,IAGbmc,YAAa,CACTttB,cAAe,GACf/G,QAAS,QAEbyxB,YAAa,CACT7qB,OAAQ,EACR+O,SAAU,QAEd0nB,UAAW,CACPjY,UAAW,SACXmP,OAAQ,iBACRwI,YAAa,EACbO,aAAc,IA0BtB,MAAMC,WAAkB/L,GAOpB,eAAOgM,GACH,MAAO,CACH,CACIniC,KAAM,SACNiQ,MAAO,iBAEX,CACIjQ,KAAM,QACNiQ,MAAO,iBAEX,CACIjQ,KAAM,OACNiQ,MAAO,eAGnB,CAEAmyB,SAAAA,CAAUpiC,GACN,MAAMqiC,EAAMviC,KAAKgG,MAAMW,KAAKzC,OAAOs+B,cAActiC,GACjD,OAAOkiC,GAAUK,SAAShzB,KAAIizB,GAAYA,EAASjzB,KAAIkzB,GAAOJ,EAAMI,KACxE,CAEAC,QAAAA,CAASC,GACL,MACMC,EADS9iC,KAAKsiC,UAAUO,GACJpzB,KAAI,CAACmnB,EAAMxpB,KACjCpE,EAAAA,EAAAA,MAAC+5B,EAAAA,SAAQ,CAAA1/B,SAAA,EACLkB,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAOw9B,UAAU7+B,UAC/BkB,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACL5H,SAAU9N,KAAKgG,MAAMwwB,OACrB7gB,UAAWihB,EAAK,GAChBvxB,MAAM,UACNkE,SAAUA,IAAMvJ,KAAKgjC,YAAYH,EAAOz1B,EAAO,QAGvD7I,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAOw9B,UAAU7+B,UAC/BkB,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACL5H,SAAU9N,KAAKgG,MAAMwwB,OACrB7gB,UAAWihB,EAAK,GAChBvxB,MAAM,UACNkE,SAAUA,IAAMvJ,KAAKgjC,YAAYH,EAAOz1B,EAAO,SAd5CA,KAoBnB,OACI7I,EAAAA,EAAAA,KAAC05B,EAAAA,eAAc,CAAA56B,UACX2F,EAAAA,EAAAA,MAACg0B,EAAAA,MAAK,CACF7zB,MAAOzE,GAAOu0B,MACd,aAAW,mBAAkB51B,SAAA,EAE7BkB,EAAAA,EAAAA,KAAC04B,EAAAA,UAAS,CAAA55B,UACN2F,EAAAA,EAAAA,MAACszB,EAAAA,SAAQ,CAAAj5B,SAAA,EACLkB,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNyG,QAAS,EACT95B,MAAOzE,GAAOw9B,UAAU7+B,SAEvBrD,KAAKgG,MAAM2C,EAAE,YAElBpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNyG,QAAS,EACT95B,MAAOzE,GAAOw9B,UAAU7+B,SAEvBrD,KAAKgG,MAAM2C,EAAE,YAElBpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNyG,QAAS,EACT95B,MAAOzE,GAAOw9B,UAAU7+B,SAEvBrD,KAAKgG,MAAM2C,EAAE,oBAI1BK,EAAAA,EAAAA,MAACk0B,EAAAA,UAAS,CAAA75B,SAAA,EACN2F,EAAAA,EAAAA,MAACszB,EAAAA,SAAQ,CAAAj5B,SAAA,EACLkB,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAOw9B,UAAU7+B,SAAErD,KAAKgG,MAAM2C,EAAE,WAClDpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAOw9B,UAAU7+B,SAAErD,KAAKgG,MAAM2C,EAAE,YAClDpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAOw9B,UAAU7+B,SAAErD,KAAKgG,MAAM2C,EAAE,WAClDpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAOw9B,UAAU7+B,SAAErD,KAAKgG,MAAM2C,EAAE,YAClDpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAOw9B,UAAU7+B,SAAErD,KAAKgG,MAAM2C,EAAE,WAClDpE,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACrzB,MAAOzE,GAAOw9B,UAAU7+B,SAAErD,KAAKgG,MAAM2C,EAAE,eAEtDpE,EAAAA,EAAAA,KAAC+3B,EAAAA,SAAQ,CAAAj5B,SAAEy/B,WAK/B,CAEA9L,QAAAA,CAASloB,EAAuBrK,GAC5B,MAAM+yB,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MAC/B,UAATmI,EACA0oB,EAAQtzB,OAAOs+B,cAAcK,MAAQp+B,EACrB,eAATqK,IACP0oB,EAAQtzB,OAAOs+B,cAAcU,WAAaz+B,GAE9CzE,KAAKgG,MAAMuD,SAASiuB,EACxB,CAEAwL,WAAAA,CAAYG,EAA4BC,EAAiBC,GACrD,MAAM7L,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MAC5C6wB,EAAQtzB,OAAOs+B,cAAcW,IAAcf,GAAUK,SAASW,GAASC,GACvErjC,KAAKgG,MAAMuD,SAASiuB,EACxB,CAEArtB,MAAAA,GACI,MAAM+Y,EAAOxa,EAAAA,KAAK0I,cACZkyB,EAAQtjC,KAAKgG,MAAMs9B,MAAM7zB,KAAI,CAACmnB,EAAMxpB,KACtC7I,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CACL3nB,MAAOmyB,EAAKl1B,IAAI2B,SAGa,kBAArBuzB,EAAK1yB,OAAO4K,KACd8nB,EAAK1yB,OAAO4K,KAAKoU,IAAS0T,EAAK1yB,OAAO4K,KAAK1G,GAC3CwuB,EAAK1yB,OAAO4K,MAJb1B,KAQPm2B,EAASvjC,KAAKgG,MAAMu9B,OAAO9zB,KAAI,CAACmnB,EAAMxpB,KACxC7I,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CACL3nB,MAAOmyB,EAAKl1B,IAAI2B,SAGa,kBAArBuzB,EAAK1yB,OAAO4K,KACd8nB,EAAK1yB,OAAO4K,KAAKoU,IAAS0T,EAAK1yB,OAAO4K,KAAK1G,GAC3CwuB,EAAK1yB,OAAO4K,MAJb1B,KAQPo2B,EAAepB,GAAUC,WAAW5yB,KAAI,CAAC6xB,EAAImC,KAC/Cz6B,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFxF,KAAM,CAAEkkB,GAAI,EAAGN,GAAI,GAAIO,GAAI,GAAI11B,SAAA,EAG/BkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPoI,QAAQ,KACRzG,UAAU,MAAK/G,SAEdrD,KAAKgG,MAAM2C,EAAE24B,EAAGnxB,SAEpBnQ,KAAK4iC,SAAStB,EAAGphC,QARbujC,KAYb,OACIz6B,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO0uB,SAAS/vB,SAAA,EACxBkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPoI,QAAQ,KACRzG,UAAU,MAAK/G,SAEdrD,KAAKgG,MAAM2C,EAAE,0BAElBK,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EAAEjX,SAAA,EAEXkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACxF,KAAM,CAAEkkB,GAAI,EAAGN,GAAI,GAAIO,GAAI,GAAI11B,UAClC2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAO4xB,YAAYjzB,SAAA,EAE1BkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CACP6K,QAAM,EACN/2B,GAAG,cAAauD,SAEfrD,KAAKgG,MAAM2C,EAAE,iBAElBpE,EAAAA,EAAAA,KAAC2nB,EAAAA,OAAM,CACHpe,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACR1H,MAAOzE,GAAO4xB,YACdx2B,GAAG,QACH2E,MAAOzE,KAAKgG,MAAMW,KAAKzC,OAAOs+B,cAAcK,MAC5Ct5B,SAAU0kB,GAAOjuB,KAAKg3B,SAAS,QAAS/I,EAAI1b,OAAO9N,OACnDsyB,cAAY,EACZ2M,WAAY,CAAE,aAAc,SAAUrgC,SAErCigC,UAIb/+B,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACxF,KAAM,CAAEkkB,GAAI,EAAGN,GAAI,GAAIO,GAAI,GAAI11B,UAClC2F,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAO4xB,YAAYjzB,SAAA,EAE1BkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CACP6K,QAAM,EACN/2B,GAAG,mBAAkBuD,SAEpBrD,KAAKgG,MAAM2C,EAAE,kBAElBpE,EAAAA,EAAAA,KAAC2nB,EAAAA,OAAM,CACHpe,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACR1H,MAAOzE,GAAO4xB,YACdx2B,GAAG,aACH2E,MAAOzE,KAAKgG,MAAMW,KAAKzC,OAAOs+B,cAAcU,WAC5C35B,SAAU0kB,GAAOjuB,KAAKg3B,SAAS,aAAc/I,EAAI1b,OAAO9N,OACxDsyB,cAAY,EACZ2M,WAAY,CAAE,aAAc,cAAergC,SAE1CkgC,aAKjBh/B,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EAAEjX,SAEVmgC,MAIjB,EA9NEpB,GACaK,SAA+B,CAC1C,CAAC,KAAO,KACR,CAAC,GAAM,IACP,CAAC,EAAK,IA6Nd,UAAe1b,EAAAA,EAAAA,YAAf,CAA2Bqb,I,gBCnR1B/gC,OAAesiC,IAAIC,OAAOC,IAAI,WAAY,cAE3C,MAAMn/B,GAA8C,CAChD0uB,SAAU,CACNtuB,MAAO,OACP6F,OAAQ,QACRM,SAAU,OACV8R,QAAS,IAGb+mB,KAAM,CACF/mB,QAAS,GACTxS,gBAAiBw5B,GAAAA,EAAS,KAC1B1+B,MAAO,OACP4F,SAAU,OACVF,KAAM,QAEVi5B,SAAU,CACNjnB,QAAS,IAEbuZ,YAAa,CACT7qB,OAAQ,EACR+O,SAAU,QAEd2e,iBAAkB,CACdr0B,MAAO,OACPyF,gBAAiB,cACjB6uB,OAAQ,OACRnuB,SAAU,QAEdsrB,YAAa,CACTlY,UAAW,KAcnB,MAAM4lB,WAAyB5N,GAAgDj3B,WAAAA,GAAA,SAAA8kC,WAAA,KAoE3EC,iBAAoB1/B,IAChBzE,KAAKg3B,SAAS,OAAQvyB,GAClBzE,KAAKgG,MAAMo+B,QACXpkC,KAAKgG,MAAMo+B,OAAO3/B,EACtB,CACF,CAxEF,eAAO49B,GACH,MAAO,CACH,CACIviC,GAAI,OACJqQ,MAAO,QAEX,CACIrQ,GAAI,SACJqQ,MAAO,UAEX,CACIrQ,GAAI,UACJqQ,MAAO,WAEX,CACIrQ,GAAI,WACJqQ,MAAO,YAGnB,CAEAk0B,gBAAAA,GACI,MAAM,OAAEngC,GAAWlE,KAAKgG,MAAMW,KAExB+vB,EAAQuN,GAAiB5B,WAAW5yB,KAAI,CAACmnB,EAAMxpB,KACjD7I,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CACL3nB,MAAOmyB,EAAKzmB,MAAM9M,SAGjBrD,KAAKgG,MAAM2C,EAAEiuB,EAAKzmB,QAFd/C,KAMb,OACIpE,EAAAA,EAAAA,MAAC+iB,EAAAA,YAAW,CACRlb,QAAQ,WACR1H,MAAOzE,GAAO4xB,YAAYjzB,SAAA,EAE1BkB,EAAAA,EAAAA,KAACynB,EAAAA,WAAU,CACP6K,QAAM,EACN/2B,GAAG,mBAAkBuD,SAEpBrD,KAAKgG,MAAM2C,EAAE,iBAElBpE,EAAAA,EAAAA,KAAC2nB,EAAAA,OAAM,CACHpe,SAAU9N,KAAKgG,MAAMwwB,OACrB3lB,QAAQ,WACR1H,MAAOzE,GAAO4xB,YACdx2B,GAAG,aACH2E,MAAOP,EAAOogC,KACdvN,cAAY,EACZxtB,SAAWnI,GACPpB,KAAKmkC,iBAAiB/iC,EAAEmR,OAAO9N,OAClCpB,SAEAqzB,MAIjB,CAEAM,QAAAA,CAASloB,EAAcrK,GACnB,MAAM+yB,EAAUp3B,EAAAA,EAAWq3B,MAAMz3B,KAAKgG,MAAMW,MAC3C6wB,EAAQtzB,OAA+B4K,GAAQrK,EAChDzE,KAAKgG,MAAMuD,SAASiuB,EACxB,CASArtB,MAAAA,GACI,OACI5F,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,IAAKzE,GAAO0uB,SAAUzoB,OAAQ,QAAStH,UAC/C2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTC,QAAS,EACTiiB,UAAU,gBACVpzB,MAAO,CAAEwB,OAAQ,QAAStH,SAAA,EAE1B2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFxF,KAAM,CAAEkkB,GAAI,EAAGC,GAAI,EAAGP,GAAI,IAC1BrvB,MAAO,CAAEtE,QAAS,OAAQgG,cAAe,UAAWxH,SAAA,EAEpD2F,EAAAA,EAAAA,MAACu7B,EAAAA,KAAI,CAACp7B,MAAOzE,GAAOo/B,KAAKzgC,SAAA,EACrBkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACP+7B,cAAY,EACZ3zB,QAAQ,KACRzG,UAAU,MAAK/G,SAEdrD,KAAKgG,MAAM2C,EAAE,YAElBpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPoI,QAAQ,QACRzG,UAAU,MACV03B,wBAAyB,CAAEC,OAAQ/hC,KAAKgG,MAAM2C,EAAE,mBAGvD3I,KAAKqkC,mBACLrkC,KAAKgG,MAAMiyB,SACR1zB,EAAAA,EAAAA,KAACuY,EAAAA,MAAK,CACFjM,QAAQ,WACR1H,MAAOzE,GAAOy0B,iBAAiB91B,UAE/BkB,EAAAA,EAAAA,KAAA,MAAAlB,SACKpC,OAAOC,KAAKlB,KAAKgG,MAAMiyB,SAASxoB,KAAIC,IACjCnL,EAAAA,EAAAA,KAAA,MAAAlB,SAAeqM,GAANA,SAIrB,SAER1G,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFxF,KAAM,CAAEkkB,GAAI,EAAGC,GAAI,EAAGP,GAAI,IAC1B+D,UAAU,gBACVpzB,MAAO,CAAEwB,OAAQ,OAAQ9F,QAAS,OAAQgG,cAAe,UAAWxH,SAAA,EAEpEkB,EAAAA,EAAAA,KAACuY,EAAAA,MAAK,CAAC3T,MAAOzE,GAAOs/B,SAAS3gC,UAC1BkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACP+7B,cAAY,EACZ3zB,QAAQ,KACRzG,UAAU,MAAK/G,SAEdrD,KAAKgG,MAAM2C,EAAE,mBAGtBpE,EAAAA,EAAAA,KAAC+mB,GAAAA,EAAM,CACHC,eAAa,EACbzhB,UAAW9J,KAAKgG,MAAM8D,UACtBrF,MAAOnE,KAAKC,UAAUP,KAAKgG,MAAMiyB,QAAS,KAAM,YAMxE,EAGJ,UAAelR,EAAAA,EAAAA,YAAf,CAA2Bkd,ICpKrBQ,GAAgB,oBAEhB//B,GAA8B,CAChC0uB,SAAWrpB,IAAe,CACtBjF,MAAO,OACP6F,OAAQ,eAAeZ,EAAM+T,OAAOC,QAAQ2mB,eAC5Cz5B,SAAU,WAEd8L,IAAK,CAED,EAEJ4tB,YAAa,CACT9/B,QAAS,OACTI,WAAY,SACZD,eAAgB,gBAChB+X,QAAS,cAEboW,OAAQ,CACJruB,MAAO,OACP6F,OAAQ,OACRG,SAAU,QAEdmB,QAAS,CACL8Q,QAAS,gBAEbpG,SAAW5M,IAAe,CACtB1E,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,kBAAoB,qBAkDnE,MAAMq5B,WAA6B7+B,EAAAA,UAS/B3G,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KATjB6+B,0BAAoB,OAEpBC,oBAAc,OAEdC,0BAAoB,OAEpBC,sBAAgB,OAuShBC,iBAAoB/kC,IACXF,KAAKgG,MAAM3G,OAAO+rB,YAAYprB,KAAKgG,MAAMk/B,YAAahlC,GAAMa,MAAK8pB,GAClE7qB,KAAKuD,SAAS,CACVsnB,WACAhH,aAAc,IACP7jB,KAAKoG,MAAMyd,aACd3f,OAAQ,IACDlE,KAAKoG,MAAMyd,aAAa3f,OAC3BogC,KAAMpkC,OAIrB,EA/SDF,KAAKoG,MAAQ,CACT++B,SAAS,EACTC,aAAa,EACbvhB,aAAc,KACdwhB,mBAAoB,KACpBC,mBAAoB,KACpBC,eAAgB,KAChBjN,eAAe,EACfkN,gBAAgB,EAChBv2B,KAAM,GACN0tB,SAAU,CAAC,GAEf38B,KAAKq3B,cAA0Cl2B,OAAMC,GAAKC,OAAOC,MAAM,yBAAyBF,MACpG,CAEA,uBAAM0F,GACF,MAAMwxB,QAAsBt4B,KAAKgG,MAAM3G,OAAOomC,sBAAsB,yBAC9DD,QAAuBxlC,KAAKgG,MAAM3G,OAAOomC,sBAAsB,8BAC/DpR,QAAkBr0B,KAAKgG,MAAM3G,OAAO4rB,qBACpClrB,QAAaC,KAAKgG,MAAM3G,OAAO8rB,UACjC,kBAAkBkJ,KAEtBr0B,KAAKuD,SAAS,CAAE0L,KAAMlP,EAAImE,OAAO+K,KAAMqpB,gBAAekN,kBAC1D,CAEA,iBAAMnO,GACF,MAAMqO,EAA+C,CAAEP,SAAS,GAChE,IACI,IAAIG,QAA2BtlC,KAAKgG,MAAM3G,OAAO8rB,UAAU,uBAC3Dma,EAAqBllC,EAAAA,EAAWq3B,MAAM6N,GACtCA,EAAsBA,GAAsB,CAAC,EAC7CA,EAAmBhR,OAAUgR,EAAmBhR,QAAU,CAAC,EAC3DgR,EAAmBhR,OAAO4D,aAAeoN,EAAmBhR,OAAO4D,cAAgB,CAAC,EACpFwN,EAAS/I,SAAW,CAAC,EAErB17B,OAAOC,KAAKokC,EAAmBhR,OAAO4D,cAAcz3B,SAAQ2xB,IACpDkT,EAAmBhR,OAAO4D,aAAa9F,KACnCkT,EAAmBhR,OAAO4D,aAAa9F,GAAM0I,OAC7C4K,EAAS/I,SAASvK,GAAQkT,EAAmBhR,OAAO4D,aAAa9F,GAAM0I,KAAK6K,iBACrEL,EAAmBhR,OAAO4D,aAAa9F,GAAM0I,MAEpDwK,EAAmBhR,OAAO4D,aAAa9F,GAAMvf,aACtCyyB,EAAmBhR,OAAO4D,aAAa9F,GAAMvf,KAEpDyyB,EAAmBhR,OAAO4D,aAAa9F,GAAM2I,aACtCuK,EAAmBhR,OAAO4D,aAAa9F,GAAM2I,KAE5D,IAGJ/6B,KAAK+kC,qBAAuBzkC,KAAKC,UAAU+kC,GAC3CI,EAASJ,mBAAqBA,EAC9B,MAAMzhB,QAAqB7jB,KAAKgG,MAAM3G,OAAO+hB,iBAAgB,GAC7DphB,KAAK8kC,eAAiBxkC,KAAKC,UAAUsjB,GAAgB,CAAC,GACtD6hB,EAAS7hB,aAAeA,GAAiB,CAAC,EAC1CA,EAAa3f,OAAS2f,EAAa3f,QAAW,CAAC,EAC/C2f,EAAayQ,OAASzQ,EAAayQ,QAAW,CAAC,EAE/CzQ,EAAa3f,OAAOs+B,cAAgB3e,EAAa3f,OAAOs+B,eAAiB,CACrEoD,OAAQ,KACRx/B,MAAO,KACP+6B,KAAM,KACN0B,MAAO,oBACPK,WAAY,8BAGhBrf,EAAa3f,OAAO6qB,eAAiBlL,EAAa3f,OAAO6qB,gBAAkB,SAE3E2W,EAAS7a,eAAiB7qB,KAAKgG,MAAM3G,OAAO+rB,YAAYprB,KAAKgG,MAAMk/B,YAAarhB,EAAa3f,OAAOogC,MACpGoB,EAASpC,YAActjC,KAAKgG,MAAM3G,OAAOwmC,WACzCH,EAASnC,aAAevjC,KAAKgG,MAAM3G,OAAOymC,YAC1C,MAAMn4B,QAAkB3N,KAAKgG,MAAM3G,OAAO0mC,qBAAoB,GAC9DL,EAAS5N,UAAY72B,OAAO2N,OAAOjB,GAC9ByV,QAAOta,GAAYA,EAAS5E,OAAO8hC,aACnCv2B,KAAI3G,IACD,MAAMhJ,EAAKgJ,EAASpH,IAAIqH,MAAM,KAC9B,MAAO,GAAGjJ,EAAGA,EAAGe,OAAS,MAAMf,EAAGA,EAAGe,OAAS,IAAI,IAG1D,MAAMwkC,QAA2BrlC,KAAKgG,MAAM3G,OAAO8rB,UAAU,uBAC7DnrB,KAAK6kC,qBAAuBvkC,KAAKC,UAAU8kC,GAC3CK,EAASL,mBAAqBA,EAC9B,IAAIE,QAAwCvlC,KAAKgG,MAAM3G,OAAO8rB,UAAU,mBACxEoa,EACIA,GACC,CACGrhC,OAAQ,CACJ4K,KAAM,8BAEVwlB,OAAQ,CACJ4K,MAAO,GACP7W,SAAU,GACV0W,SAAU,IAEd7+B,KAAM,UAEVqlC,EAAejR,OAAOjM,WACtBkd,EAAejR,OAAOjM,SAAWoc,IAGrCzkC,KAAKglC,iBAAmB1kC,KAAKC,UAAU,CACnC2+B,MAAOqG,EAAejR,OAAO4K,MAC7B7W,SAAUkd,EAAejR,OAAOjM,WAEpCqd,EAASH,eAAiBA,EAC1BvlC,KAAKuD,SAASmiC,EAClB,CAAE,MAAOtkC,GACLC,OAAOC,MAAM,yBAAyBF,IAC1C,CACJ,CAEAu3B,mBAAAA,GACI,OAAI34B,KAAKoG,MAAMg/B,aAEP7gC,EAAAA,EAAAA,KAACq0B,EAAAA,cAAa,CACV1wB,KAAMlI,KAAKgG,MAAM2C,EAAE,4BACnB8E,QAAS3F,GAAU9H,KAAKuD,SAAS,CAAE6hC,aAAa,IAAS,IAAMt9B,GAAU9H,KAAKgG,MAAMyH,cAIzF,IACX,CAEAw4B,MAAAA,GACI,IAAIC,GAAc,EAClBlmC,KAAKuD,SAAS,CAAEizB,QAAQ,IAAQzV,UAC5B,IACI,IAAI8C,QAAqB7jB,KAAKgG,MAAM3G,OAAO+hB,iBAAgB,GAC3DyC,EAAeA,GAAiB,CAAC,EAC7BvjB,KAAKC,UAAUsjB,EAAa3f,UAAY5D,KAAKC,UAAUP,KAAKoG,MAAMyd,aAAa3f,eACzElE,KAAKgG,MAAM3G,OAAOiiB,gBAAgBthB,KAAKoG,MAAMyd,oBAEjD7jB,KAAKgG,MAAM3G,OAAOo2B,UAAU,sBAAuBz1B,KAAKoG,MAAMi/B,oBAEpE,IAAIC,QAA2BtlC,KAAKgG,MAAM3G,OAAO8rB,UAAU,uBAC3Dma,EAAqBA,GAAuB,CAAC,EAC7CA,EAAmBhR,OAASgR,EAAmBhR,QAAW,CAAC,EAC3DgR,EAAmBhR,OAAO4D,aAAeoN,EAAmBhR,OAAO4D,cAAgB,CAAC,EACpF,MAAMmD,EAAU/6B,KAAKoH,MAAMpH,KAAKC,UAAUP,KAAKoG,MAAMk/B,mBAAmBhR,OAAO4D,eAG/Ej3B,OAAOC,KAAKm6B,GAAS56B,SAAQ2xB,IACrBkT,EAAmBhR,OAAO4D,aAAa9F,KACnCkT,EAAmBhR,OAAO4D,aAAa9F,GAAM0I,OAC7CO,EAAQjJ,GAAM0I,KAAOwK,EAAmBhR,OAAO4D,aAAa9F,GAAM0I,MAElEwK,EAAmBhR,OAAO4D,aAAa9F,GAAMvf,OAC7CwoB,EAAQjJ,GAAMvf,KAAOyyB,EAAmBhR,OAAO4D,aAAa9F,GAAMvf,MAElEyyB,EAAmBhR,OAAO4D,aAAa9F,GAAM2I,OAC7CM,EAAQjJ,GAAM2I,KAAOuK,EAAmBhR,OAAO4D,aAAa9F,GAAM2I,MAE1E,IAEAz6B,KAAKC,UAAUP,KAAKoG,MAAMk/B,mBAAmBhR,OAAO4D,gBAAkB53B,KAAKC,UAAU86B,KACrFiK,EAAmBhR,OAAO4D,aAAemD,EACzC6K,GAAc,QACRlmC,KAAKgG,MAAM3G,OAAOo2B,UAAU,sBAAuB6P,IAG7D,IAAIC,QAAwBvlC,KAAKgG,MAAM3G,OAAO8rB,UAAU,mBACxDoa,EAAiBA,GAAmB,CAAC,EACrCA,EAAerlC,KAAOqlC,EAAerlC,MAAQ,SAC7CqlC,EAAez2B,KAAOy2B,EAAez2B,MAAQ,6BAC7Cy2B,EAAerhC,OAASqhC,EAAerhC,QAAW,CAAC,EACnDqhC,EAAejR,OAASiR,EAAejR,QAAW,CAAC,EACnDiR,EAAejR,OAAOyK,SAAWwG,EAAejR,OAAOyK,UAAY,GACnEwG,EAAejR,OAAOjM,SAAWkd,EAAejR,OAAOjM,UAAY,GACnEkd,EAAejR,OAAO4K,MAAQqG,EAAejR,OAAO4K,OAAS,GAE7D,MAAMiH,EAAkBZ,EAAejR,OAAOjM,SAAWoc,GAAgB,GAEzE,GACIzkC,KAAKoG,MAAMm/B,eAAejR,OAAOjM,WAAa8d,GAC9CZ,EAAejR,OAAO4K,QAAUl/B,KAAKoG,MAAMm/B,eAAejR,OAAO4K,MACnE,CAGE,GAFAqG,EAAejR,OAAO4K,MAAQl/B,KAAKoG,MAAMm/B,eAAejR,OAAO4K,MAG3Dl/B,KAAKoG,MAAMm/B,eAAejR,OAAOjM,WAAaoc,IAC9CzkC,KAAKoG,MAAMm/B,eAAejR,OAAOjM,SAGjC,IACIkd,EAAejR,OAAOjM,eAAiBroB,KAAKgG,MAAM3G,OAAO+mC,QACrDpmC,KAAKoG,MAAMm/B,eAAejR,OAAOjM,SAEzC,CAAE,MAAOnf,GACL7H,OAAOC,MAAMtB,KAAKgG,MAAM2C,EAAE,6BAA8BO,GAC5D,MACQlJ,KAAKoG,MAAMm/B,eAAejR,OAAOjM,WACzCkd,EAAejR,OAAOjM,SAAW,IAErC,UACUroB,KAAKgG,MAAM3G,OAAOo2B,UAAU,kBAAmB8P,SAC/CvlC,KAAKgG,MAAM3G,OAAO+/B,eAAe,KAAM,KACjD,CAAE,MAAOl2B,GACL7H,OAAOC,MAAMtB,KAAKgG,MAAM2C,EAAE,6BAA8BO,GAC5D,CACJ,CAGA5H,MAAMtB,KAAKgG,MAAM2C,EAAE,mBACnB3I,KAAKgG,MAAMyH,QAAQy4B,GACflmC,KAAKoG,MAAMyd,aAAa3f,OAAOmiC,aAAe/lC,KAAKoH,MAAM1H,KAAK8kC,gBAAgB5gC,OAAOmiC,YACrFrmC,KAAKgG,MAAMsgC,eAAetmC,KAAKoG,MAAMyd,aAAa3f,OAAOmiC,YAGzDrmC,KAAKoG,MAAMyd,aAAa3f,OAAOywB,WAAar0B,KAAKoH,MAAM1H,KAAK8kC,gBAAgB5gC,OAAOywB,UACnFr0B,KAAKC,UAAUP,KAAKoG,MAAMyd,aAAa3f,OAAOmuB,cAC1C/xB,KAAKC,UAAUD,KAAKoH,MAAM1H,KAAK8kC,gBAAgB5gC,OAAOmuB,aAE1DhxB,OAAOuR,SAAS2zB,SAEpBvmC,KAAKuD,SAAS,CAAEizB,QAAQ,GAC5B,CAAE,MAAOp1B,GACLC,OAAOC,MAAM,qCAAqCF,IACtD,IAER,CAEA2e,OAAAA,GACI,MAAO,CACH,CACIjgB,GAAI,EACJqQ,MAAO,kBACP/F,UAAWo8B,GACX7/B,KAAM,eACNmI,KAAM,YACNmpB,QAAS,qBACTmM,OAAQ,MAEZ,CACItkC,GAAI,EACJqQ,MAAO,eACP/F,UAAWq8B,GACX9/B,KAAM,qBACNmI,KAAM,kBACNmpB,QAAS,eACTmM,OAAQ,KACR/kC,OAAQW,KAAKgG,MAAM3G,QAEvB,CACIS,GAAI,EACJqQ,MAAO,WACP/F,UAAWs8B,GACX//B,KAAM,iBACNmI,KAAM,cACNmpB,QAAS,KACTmM,OAAQ,KACR/kC,OAAQW,KAAKgG,MAAM3G,QAEvB,CACIS,GAAI,EACJqQ,MAAO,eACP/F,UAAW41B,GACXr5B,KAAM,qBACNmI,KAAM,kBACNmpB,QAAS,KACTmM,OAAQ,MAEZ,CACItkC,GAAI,EACJqQ,MAAO,oBACP/F,UAAWu8B,GACXhgC,KAAM,qBACNmI,KAAM,iBACNmpB,QAAS,KACTmM,OAAQ,MAEZ,CACItkC,GAAI,EACJqQ,MAAO,cACP/F,UAAWg4B,GACXz7B,KAAM,eACNmI,KAAM,gBACNmpB,QAAS,KACTmM,OAAQ,MAEZ,CACItkC,GAAI,EACJqQ,MAAO,aACP/F,UAAW65B,GACXt9B,KAAM,eACNsxB,QAAS,WACTnpB,KAAM,gBACNs1B,OAAQlkC,GAAQF,KAAKilC,iBAAiB/kC,IAGlD,CAiBA0mC,gBAAAA,CAAiBC,GACb,GAAI7mC,KAAKoG,MAAM++B,QACX,OAAO5gC,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,IAG1B,MAAMmO,EAAM8vB,EAASh4B,MAAKlG,GAAKA,EAAEmG,OAAS9O,KAAKgG,MAAMif,WAAWnlB,MAAO+mC,EAAS,GAE1EC,EAAuD/vB,EAAI3M,WAC3D,OAAEm5B,EAAM,MAAED,EAAK,UAAExL,GAAc93B,KAAKoG,MAC1C,OACI7B,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAO0uB,SAAS/vB,UAEpBkB,EAAAA,EAAAA,KAACuiC,EAAW,CACRxiB,eAAgBtkB,KAAKgG,MAAMse,eAC3B/a,SAAUA,CAAC5C,EAAWsxB,EAAcv3B,IAChCV,KAAK+mC,aAAahwB,EAAIpQ,KAAMA,EAAMoQ,EAAIkhB,QAASA,EAASv3B,GAE5DiG,KAAM3G,KAAKoG,MAAM2Q,EAAIpQ,MACrBsxB,QAASj4B,KAAKoG,MAAM2Q,EAAIkhB,SACxBmM,OAAQrtB,EAAIqtB,OACZd,MAAOA,EACPC,OAAQA,EACRjL,cAAet4B,KAAKoG,MAAMkyB,cAC1BjG,WAAYryB,KAAKoG,MAAMyd,aAAa3f,OAAOmuB,WAC3CsK,SAAU38B,KAAKoG,MAAMu2B,SACrB7E,UAAWA,EACXjuB,UAAW7J,KAAKgG,MAAM6D,UACtBC,UAAW9J,KAAKgG,MAAM8D,UACtBmF,KAAMjP,KAAKoG,MAAM6I,KACjBtG,EAAG3I,KAAKgG,MAAM2C,EACdtJ,OAAQW,KAAKgG,MAAM3G,OACnBm3B,OAAQx2B,KAAKoG,MAAMowB,UAInC,CAMAuQ,YAAAA,CAAajnC,EAAS6G,EAAWqgC,EAAY/O,EAAcv3B,GACvD,GAAIiG,GAAQsxB,EAAS,CACjB,MAAM7xB,EAAmC,IAAKpG,KAAKoG,OAC/CO,IACCP,EAActG,GAAM6G,GAErBsxB,IACC7xB,EAAc4gC,GAAS/O,GAE5Bj4B,KAAKuD,SAAS6C,GAAO,IAAM1F,GAAMA,KACrC,CACJ,CAEA,kBAAOumC,CAAYtgC,GAA8D,IAADugC,EAC5E,GAAS,OAAJvgC,QAAI,IAAJA,GAAY,QAARugC,EAAJvgC,EAAM2tB,cAAM,IAAA4S,IAAZA,EAAchP,aACf,OAAO,EAKX,YAAsB5mB,IAHHrQ,OAAOC,KAAKyF,EAAK2tB,OAAO4D,cAAcrpB,MAAMa,IACnDA,GAAOA,EAAI2sB,cAAgB3sB,GAAQA,EAAI7O,OAAS,KAAO6O,EAAIsT,MAAM,UAGjF,CAEA7Y,MAAAA,GACI,MAAMg9B,IACF7mC,KAAKC,UAAUP,KAAKoG,MAAMk/B,sBAAwBtlC,KAAK+kC,sBACvDzkC,KAAKC,UAAUP,KAAKoG,MAAMyd,gBAAkB7jB,KAAK8kC,gBACjDxkC,KAAKC,UAAUP,KAAKoG,MAAMi/B,sBAAwBrlC,KAAK6kC,sBACvDvkC,KAAKC,UAAU,CACX2+B,MAAOl/B,KAAKoG,MAAMm/B,eAAejR,OAAO4K,MACxC7W,SAAUroB,KAAKoG,MAAMm/B,eAAejR,OAAOjM,aACxCroB,KAAKglC,kBAGhB,IAAIoC,GAAW,EACkB,oBAA7BpnC,KAAKgG,MAAMif,WAAWnlB,KACtBsnC,EAAWxC,GAAqBqC,YAAYjnC,KAAKoG,MAAMk/B,qBAG3D,MAAMuB,EAAW7mC,KAAK+f,UAAUqD,QAAOrM,MAC9B/W,KAAKoG,MAAMo/B,gBAA+B,gBAAbzuB,EAAIjI,QAGwB,IAAvD9O,KAAKgG,MAAMse,eAAepd,MAAMgkB,SAASnU,EAAIjI,QAGxDiX,QAAQC,IAAI,cAAcohB,KAC1B,MAAMlxB,EAAO2wB,EAASp3B,KAAIsH,IACtBxS,EAAAA,EAAAA,KAAC2M,EAAAA,IAAG,CAEAC,MAAOnR,KAAKgG,MAAM2C,EAAEoO,EAAI5G,OACxB1L,MAAOsS,EAAIjI,KACXhB,SAAUs5B,GAAYrwB,EAAIjI,QAAU9O,KAAKgG,MAAMif,WAAWnlB,IAAM,aAChEwI,GAAI,CAAE,iBAAkB5D,GAAOiS,WAJ1BI,EAAI5G,SAQjB,OACInH,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACHxH,GAAI,CACA,mBAAoB5D,GAAOyuB,OAC3B,qBAAsB,CAClBxoB,OAAQ,oBACR7F,MAAO,oBACPgG,SAAU,sBAGlBiF,MAAM,EACNtC,QAASA,CAAC45B,EAAIC,KACK,kBAAXA,GAAyC,kBAAXA,IAC1BH,EACAnnC,KAAKuD,SAAS,CAAE6hC,aAAa,IAE7BplC,KAAKgG,MAAMyH,UAEnB,EAEJ6G,WAAS,EACTyhB,YAAY,EACZ,kBAAgB,+BAA8B1yB,SAAA,EAE9C2F,EAAAA,EAAAA,MAACuH,EAAAA,cAAa,CAACpH,MAAOzE,GAAOuH,QAAQ5I,SAAA,EACjCkB,EAAAA,EAAAA,KAACkM,EAAAA,OAAM,CACH7L,SAAS,SACTS,MAAM,UAAShC,UAEf2F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOigC,YAAYthC,SAAA,CACL,OAArBrD,KAAKgG,MAAMlB,OAAuC,OAArB9E,KAAKgG,MAAMlB,QACrCP,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAC8zB,UAAU,aAAYl5B,SAAErD,KAAKgG,MAAM2C,EAAE,oBAErDpE,EAAAA,EAAAA,KAACmM,EAAAA,KAAI,CACDvH,MAAOzE,GAAOqS,IACdhG,eAAe,YACftM,MAAOzE,KAAKgG,MAAMif,WAAWnlB,IAAM,YACnCyJ,SAAUA,CAACiF,EAAQ+4B,IAAmB3C,GAAqB4C,aAAaD,GACxE12B,QAAQ,aACRC,cAAc,OAAMzN,SAEnB6S,KAEL3R,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACL9G,SAAU9N,KAAKoG,MAAMowB,OACrBiR,KAAK,QACLpiC,MAAM,UACNgO,QAASA,IAAO8zB,EAAUnnC,KAAKuD,SAAS,CAAE6hC,aAAa,IAAUplC,KAAKgG,MAAMyH,UAC5E,aAAW,QAAOpK,UAElBkB,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,WAIrBxT,KAAK4mC,iBAAiBC,GACtB7mC,KAAK24B,0BAEV3vB,EAAAA,EAAAA,MAACkK,EAAAA,cAAa,CAAA7P,SAAA,EACVkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,UAAWq5B,GAAWnnC,KAAKoG,MAAMowB,QAAU4Q,EAC3C/zB,QAASA,IAAMrT,KAAKimC,SACpB5gC,MAAM,UACNiO,WAAW/O,EAAAA,EAAAA,KAACgP,EAAAA,MAAS,IAAIlQ,SAExBrD,KAAKgG,MAAM2C,EAAE,mBAElBpE,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,SAAU9N,KAAKoG,MAAMowB,OACrBnjB,QAASA,IAAO8zB,EAAUnnC,KAAKuD,SAAS,CAAE6hC,aAAa,IAAUplC,KAAKgG,MAAMyH,UAC5E6F,WAAW/O,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,IACrBnO,MAAM,OAAMhC,SAEX8jC,EAAUnnC,KAAKgG,MAAM2C,EAAE,UAAY3I,KAAKgG,MAAM2C,EAAE,gBAKrE,EAjfEi8B,GAoWK4C,aAAgBD,IACnB5R,EAAAA,OAAOC,WAAW,KAAM,SAAU2R,EAAO,EA+IjD,UAAexgB,EAAAA,EAAAA,YAAf,CAA2B6d,ICzlBrBlgC,GAA8B,CAChCpF,KAAM,CACFyd,QAAS,GACTtR,OAAQ,OACR5G,QAAS,OACT8F,OAAQ,OACR1F,WAAY,SACZ2F,aAAc,EACd5F,eAAgB,UAEpB0F,MAAQX,IAAe,CACnBQ,gBAAiBR,EAAMS,QAAQC,WAAWC,OAASX,EAAMS,QAAQC,WAAWC,MAAM7J,OAAS,EAAI,IAAM,MACrG0L,EAAG,OACHpB,UAAW,OACXtG,QAAS,OACTgG,cAAe,SACfF,OAAQ,OACR+Z,UAAW,IACX5Z,SAAU,IACV48B,UArBU,iGAuBdC,OAAQ,CACJl8B,OAAQ,EACRlB,gBAAiB,OACjBzF,MAAO,IACP6F,OAAQ,KAEZi9B,UAAW,CACP9iC,MAAO,mBACP6F,OAAQ,mBACRoS,QAAS,GAEbiL,KAAM,CACFljB,MAAO,OACPuZ,UAAW,GAEfwpB,OAAQ,CACJp8B,OAAQ,GAEZnK,MAAO,CACH+c,UAAW,GACX9T,gBAAiB,UACjBwS,QAAS,EACT1X,MAAO,OACPuF,aAAc,EACdpF,SAAU,IAEdsiC,aAAc,CACVC,cAAe,WAEnB1pB,UAAW,CACPA,UAAW,QAEf2pB,SAAU,CACN/d,UAAW,WAyBnB,MAAMge,WAAcliC,EAAAA,UAGhB3G,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAHAkiC,aAAO,EAKpBloC,KAAKoG,MAAQ,CACT+hC,WAAW,GAGfnoC,KAAKkoC,QAAUlsB,IAAAA,YAGf,MAAMosB,EAAO/mC,OAAO8nB,SAASif,KAC7BA,EAAKj/B,MAAMoB,gBAAkBlJ,OAAOgnC,qBACpCD,EAAKj/B,MAAMoqB,gBAAkBlyB,OAAOinC,qBACpCF,EAAKj/B,MAAMgD,eAAiB,OAChC,CAEAhC,MAAAA,GACI,MAAMo+B,EAAS,GAA4B,SAAzBlnC,OAAOuR,SAAS41B,KAAkB,GAAGnnC,OAAOuR,SAASE,aAAazR,OAAOuR,SAASiT,iBAAmB,WAAoC,SAAzBxkB,OAAOuR,SAAS41B,KAAkB,OAAS,UAAUnnC,OAAOuR,SAASC,OAEjMmnB,EACF34B,OAAOonC,WAAkC,kBAArBpnC,OAAOonC,UAAgCpnC,OAAOonC,UAAY,4BAC5EC,EACFrnC,OAAOsnC,YAAoC,mBAAtBtnC,OAAOsnC,WAAkCtnC,OAAOsnC,WAAa,qBAEjE,SAAjBtnC,OAAO69B,QAGP79B,OAAOuR,SAASG,KAAO,GAAG1R,OAAOuR,SAASE,aAAazR,OAAOuR,SAAS3D,OAAO5N,OAAOuR,SAASK,YAElG,MAAM9J,EACD9H,OAAOgnC,sBAAwD,YAAhChnC,OAAOgnC,sBAAuChnC,OAAOinC,qBAC/E,CAAE79B,WAAY,aACd,CAAC,EAEX,OACIlG,EAAAA,EAAAA,KAACuY,EAAAA,MAAK,CACF1S,UAAU,OACVjB,MAAO,IAAKzE,GAAOpF,QAAS6J,GAAQ9F,UAEpC2F,EAAAA,EAAAA,MAAC8T,EAAAA,MAAK,CAACxU,GAAI5D,GAAOgG,MAAMrH,SAAA,EACpB2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFC,WAAS,EACTwO,UAAU,SACV5jB,WAAW,SAAQ5B,SAAA,CAElBhC,OAAOunC,WAAkC,kBAArBvnC,OAAOunC,WACxBrkC,EAAAA,EAAAA,KAAA,OACI4E,MAAO,CACHwB,OAAQ,GACR7F,MAAO,IACPyf,WAAY,OACZ9Z,WAAY,QACZG,aAAc,EACdmS,QAAS,GACX1Z,UAEFkB,EAAAA,EAAAA,KAAA,OACIigB,IAAKnjB,OAAOunC,UACZnkB,IAAI,OACJtb,MAAO,CAAE2B,SAAU,OAAQ4Z,UAAW,YAIrB,UAAzBrjB,OAAOwnC,gBACHtkC,EAAAA,EAAAA,KAACqgB,EAAAA,OAAM,CACHzb,MAAOzE,GAAOijC,OACdnjB,IAAI,eACJlc,GAAI,CAAE,mBAAoB5D,GAAOkjC,cAI7CrjC,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACP2B,UAAU,KACVyG,QAAQ,KAAIxN,SAEXhC,OAAOynC,YAAoC,mBAAtBznC,OAAOynC,WACvBznC,OAAOynC,WACP9oC,KAAKgG,MAAM2C,EAAE,gBAEtBtH,OAAOuR,SAASgd,OAAOztB,SAAS,WAC7BoC,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOpD,MAAM+B,SAAErD,KAAKgG,MAAM2C,EAAE,oBAE5CK,EAAAA,EAAAA,MAAA,QACIgO,IAAKhX,KAAKkoC,QACV/+B,MAAOzE,GAAOsjB,KACdugB,OAAQA,EACRQ,OAAO,OAAM1lC,SAAA,EAEbkB,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACRpF,OAAO,SACPqC,SAAU9N,KAAKoG,MAAM+hC,UACrBa,UAAQ,EACR10B,WAAS,EACTM,KAAK,QACL9U,GAAG,WACHqR,MAAOnR,KAAKgG,MAAM2C,EAAE,cACpBmG,KAAK,WACL8Z,aAAa,WACbxV,WAAS,KAEb7O,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACRpF,OAAO,SACPqC,SAAU9N,KAAKoG,MAAM+hC,UACrBa,UAAQ,EACR10B,WAAS,EACTM,KAAK,QACL9F,KAAK,WACLqC,MAAOnR,KAAKgG,MAAM2C,EAAE,iBACpBzI,KAAK,WACLJ,GAAG,WACH8oB,aAAa,sBAEjBrkB,EAAAA,EAAAA,KAACiR,EAAAA,iBAAgB,CACbC,SACIlR,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACL5V,GAAG,eACHgP,KAAK,eACLrK,MAAM,KACNY,MAAM,UACNyI,SAAU9N,KAAKoG,MAAM+hC,YAG7Bh3B,MAAOnR,KAAKgG,MAAM2C,EAAE,qBAExBpE,EAAAA,EAAAA,KAAA,SACIzE,GAAG,SACHI,KAAK,SACL4O,KAAK,SACLrK,MAAOpD,OAAOuR,SAASK,SAAW5R,OAAOuR,SAASgd,OAAO/nB,QAAQ,SAAU,OAG3EtD,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHjT,KAAK,SACL4N,SAAU9N,KAAKoG,MAAM+hC,UACrB90B,QAASA,KACLrT,KAAKkoC,QAAQtwB,QAAQiwB,SAErBn1B,YAAW,IAAM1S,KAAKuD,SAAS,CAAE4kC,WAAW,KAAS,GAAG,EAE5D7zB,WAAS,EACTzD,QAAQ,YACRxL,MAAM,UACN8D,MAAOzE,GAAOmjC,OAAOxkC,SAEpBrD,KAAKoG,MAAM+hC,WAAY5jC,EAAAA,EAAAA,KAAC0kC,EAAAA,iBAAgB,CAACr0B,KAAM,KAAS5U,KAAKgG,MAAM2C,EAAE,kBAKtFpE,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACc,MAAOzE,GAAO2Z,UAAUhb,UACzB2F,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CACPoI,QAAQ,QACRxL,MAAM,gBACN6jC,MAAM,SAAQ7lC,SAAA,CAEbhC,OAAOonC,WAAkC,kBAArBpnC,OAAOonC,WACxBlkC,EAAAA,EAAAA,KAAC4kC,EAAAA,KAAI,CACDhgC,MAAOzE,GAAOojC,aACdziC,MAAM,UACN0N,KAAMinB,EACNoP,IAAI,sBACJ72B,OAAO,SAAQlP,SAEdqlC,IAEL,KACFrnC,OAAOonC,WAAkC,kBAArBpnC,OAAOonC,UAAwC,KAARC,EAC3DrnC,OAAOonC,WAAkC,kBAArBpnC,OAAOonC,UAUzB,MATAlkC,EAAAA,EAAAA,KAAC4kC,EAAAA,KAAI,CACDhgC,MAAOzE,GAAOojC,aACdziC,MAAM,UACN0N,KAAMinB,EACNoP,IAAI,sBACJ72B,OAAO,SAAQlP,SAClB,sBAS7B,EAGJ,UAAe0jB,EAAAA,EAAAA,YAAf,CAA2BkhB,I,gBC/Q3B,MAAMvjC,GAA8B,CAChCpF,KAAOyK,IAAe,CAClBQ,gBAAiBR,EAAMS,QAAQC,WAAWC,MAC1C5F,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT+F,aAAc,EACdpF,SAAU,GACVE,WAAY,+CAEhBgF,MAAO,CACHI,SAAU,KAEdE,eAAgB,CACZnG,QAAS,QAEbwkC,IAAK,CACDp+B,SAAU,OACVQ,OAAQ,IAEZvD,KAAM,CACF1C,SAAU,IAEd8jC,SAAU,CACN9jC,SAAU,GACV8F,WAAY,QAEhBi+B,SAAU,CACNzkC,MAAO,SA6Hf,GApH0D1B,IAGf,IAHgB,WACvDijC,EAAU,QACV54B,GACoBrK,EACpB,MAAOomC,EAAWC,IAAgBjmC,EAAAA,EAAAA,WAAS,GAE3C,OACIwF,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACHrC,QAASA,IAAMA,IACfsC,MAAM,EACNzH,GAAI,CAAE,qBAAsB5D,GAAOgG,OAAQrH,SAAA,EAE3C2F,EAAAA,EAAAA,MAAC0L,EAAAA,YAAW,CAAArR,SAAA,EACRkB,EAAAA,EAAAA,KAACmlC,EAAAA,WAAU,CAACvgC,MAAO,CAAE8G,YAAa,KACjCvH,EAAAA,KAAKC,EAAE,mBAEZpE,EAAAA,EAAAA,KAACgM,EAAAA,cAAa,CACVpH,MAAOzE,GAAOsG,eACdwF,UAAQ,EAAAnN,UAER2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CAACC,WAAS,EAAAhX,SAAA,EACZkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACjR,MAAOzE,GAAO6kC,SAASlmC,UAC1BkB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAOpF,KAAK+D,UAEhB2F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAO2kC,IAAIhmC,SAAA,EACnBkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MAAOzE,GAAOwD,KACd2I,QAAQ,QACRzG,UAAU,IAAG/G,SAEZgjC,EACK39B,EAAAA,KAAKC,EACD,6EAEJD,EAAAA,KAAKC,EACD,0EAGZ09B,EAQE,MAPA9hC,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MAAOzE,GAAO4kC,SACdz4B,QAAQ,QACRzG,UAAU,IAAG/G,SAEZqF,EAAAA,KAAKC,EAAE,0EAGd09B,EAQE,MAPA9hC,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MAAOzE,GAAO4kC,SACdz4B,QAAQ,QACRzG,UAAU,IAAG/G,SAEZqF,EAAAA,KAAKC,EAAE,oDAGhBpE,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MAAOzE,GAAOwD,KACd2I,QAAQ,QACRzG,UAAU,IAAG/G,SAEZqF,EAAAA,KAAKC,EACF,wFAGPD,EAAAA,KAAKC,EAAE,qBACRpE,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPtP,MAAM,UACNuP,KAAK,QACLvB,QAASA,IAAM5F,EAAQ,gBAAgBpK,UAEvCkB,EAAAA,EAAAA,KAAColC,EAAAA,MAAS,cAK1BplC,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAACiR,EAAAA,iBAAgB,CACbC,SACIlR,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACL5V,GAAG,0BACH6V,QAAS6zB,EACTjgC,SAAUnI,GAAKqoC,EAAaroC,EAAEmR,OAAOoD,WAG7CxE,MAAOzI,EAAAA,KAAKC,EAAE,sEAK9BpE,EAAAA,EAAAA,KAAC2O,EAAAA,cAAa,CAAA7P,UACVkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHrT,GAAG,wBACH+Q,QAAQ,YACRuC,WAAS,EACTC,QAASA,KACDm2B,IACGnoC,OAAeuoC,iBAA+BvoC,OAAOwoC,gBAAgBj0B,QACpE,4BACA,QAGRnI,GAAQ,EAAK,EAEjBpI,MAAM,UACNiO,WAAW/O,EAAAA,EAAAA,KAACgP,EAAAA,MAAS,IAAIlQ,SAExBqF,EAAAA,KAAKC,EAAE,YAGX,E,gBCpIjB,MAAMjE,GAA8B,CAChCpF,KAAOyK,IAAe,CAClBQ,gBAAiBR,EAAMS,QAAQC,WAAWC,MAC1C5F,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT+F,aAAc,MACdC,cAAe,WAEnBH,MAAO,CACHI,SAAU,IACVhG,MAAO,QAEXiG,KAAM,CACFlG,QAAS,QAEbmG,eAAgB,CACZC,SAAU,UAEdC,aAAc,CACVC,UAAW,QAEfxG,QAAS,CACLK,eAAgB,gBAChBH,QAAS,OACTC,MAAO,OACPG,WAAY,SACZ,uCAAwC,CACpCE,SAAU,SAGlBiG,OAAQ,CACJP,cAAe,UAEnBQ,WAAatB,IAAe,CACxBuB,WAAY,OACZ9F,SAAU,GACVH,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,OAAS,SAEpDC,sBAAwBzB,IAAe,CACnC0B,OAAQ,SACRpG,MAA8B,SAAvB0E,EAAMS,QAAQe,KAAkB,OAAS,SAEpDu+B,OAAQ,CACJzkC,MAAO,SACP,uCAAwC,CACpCG,SAAU,UAGlBkG,OAAQ,CACJC,WAAY,GACZC,cAAe,EACfhH,SAAU,SACViH,OAAQ,EACRpB,WAAY,QACZqB,OAAQ,GAEZi+B,SAAU,CACNrkC,WAAY,YACZF,SAAU,GACVG,GAAI,OACJE,WAAY,WACZ,uCAAwC,CACpCL,SAAU,QACVwK,WAAY,IAGpBjE,KAAM,CACFjH,MAAO,GACP6F,OAAQ,GACRqB,GAAI,OACJP,OAAQ,SACR7G,SAAU,WACV,UAAW,CACPqH,QAAS,KACTrH,SAAU,WACVkH,OAAQ,EACRxG,IAAK,EACL4G,KAAM,EACNpH,MAAO,OACP6F,OAAQ,OACRF,WAAY,8CACZ0B,eAAgB,QAChB5B,gBAAiB,SAGzB6B,QAAS,CACLvH,QAAS,OACTI,WAAY,SACZgG,SAAU,UAEdoB,WAAY,CACRxH,QAAS,OACTI,WAAY,UAEhBqH,aAAc,CACVb,OAAQ,EACRc,EAAG,OACH,uCAAwC,CACpCA,EAAG,SAGXC,UAAW,CACP3G,WAAY,SACZoF,SAAU,SACVwB,aAAc,WACd,uCAAwC,CACpCjH,SAAU,UAGlByG,QAAS,CACLhB,SAAU,UAEdyB,YAAa,CACTjB,OAAQ,MACR,uCAAwC,CACpCjG,SAAU,WAehBoH,GAASxJ,IAA+D,IAA9D,KAAE0L,EAAI,SAAEjC,KAAa7G,GAAsB5C,EACvD,OAAQ0L,GACJ,IAAK,cACD,OACIvK,EAAAA,EAAAA,KAACylC,EAAAA,OAAU,CACP7gC,MAAO,CAAE9D,MAAO,cACZW,IAGhB,IAAK,YACD,OACIzB,EAAAA,EAAAA,KAAC0lC,EAAAA,OAAU,CACP9gC,MAAO,CAAE9D,MAAO,cACZW,IAGhB,IAAK,aACD,OACIzB,EAAAA,EAAAA,KAAC2lC,EAAAA,aAAgB,CACb/gC,MAAO,CAAE9D,MAAO,cACZW,IAGhB,IAAK,cACD,OACIzB,EAAAA,EAAAA,KAAC4lC,EAAAA,sBAAyB,CACtBhhC,MAAO,CAAE9D,MAAO,cACZW,IAGhB,IAAK,eACD,OACIzB,EAAAA,EAAAA,KAAC6lC,EAAAA,mBAAsB,CACnBjhC,MAAO,CAAE9D,MAAO,cACZW,IAGhB,IAAK,wBACD,OACIzB,EAAAA,EAAAA,KAAC8lC,EAAAA,OAAU,CACPlhC,MAAO,CAAE9D,MAAO,cACZW,IAGhB,IAAK,mBACD,OACIzB,EAAAA,EAAAA,KAAC+lC,EAAAA,eAAkB,CACfnhC,MAAO,CAAE9D,MAAO,cACZW,IAGhB,IAAK,UACD,OACIzB,EAAAA,EAAAA,KAACwI,EAAAA,cAAQ,CACLzE,GAAI,CACA9C,SAAU,GACVwK,WAAY,EACZC,YAAa,MAEbjK,IAIhB,QACI,MAAiB,WAAb6G,GAEItI,EAAAA,EAAAA,KAACwI,EAAAA,cAAQ,CACL1H,MAAM,aACFW,IAKC,SAAb6G,GAEItI,EAAAA,EAAAA,KAACyI,EAAAA,KAAQ,CACL3H,MAAM,UACFW,KAMZzB,EAAAA,EAAAA,KAAC0I,EAAAA,QAAW,CACR9D,MAAO,CAAE9D,MAAO,cACZW,IAGpB,EAkBJ,MAAMkH,GAAWC,IAAA,IAAC,SAAE9J,EAAQ,MAAEoB,EAAK,MAAE2I,EAAK,SAAEm9B,EAAQ,MAAEl9B,KAAUoT,GAAwBtT,EAAA,OACpF5I,EAAAA,EAAAA,KAAA,OACI+I,KAAK,WACLk9B,OAAQ/lC,IAAU2I,EAClBtN,GAAI,6BAA6BsN,IACjC,kBAAiB,wBAAwBA,IACzCjE,MAAOohC,KACH9pB,EAAKpd,SAERoB,IAAU2I,IACP7I,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACc,MAAOkE,EAAMhK,UACdkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAC2B,UAAU,MAAK/G,SAAEA,OAGnC,EAyPV,GA/N0BkK,IAOoB,IAPnB,SACvBa,EAAQ,QACRX,EAAO,YACPC,EAAW,WACXzD,EAAU,UACVH,EAAS,UACT6D,GACuBJ,EACvB,MAAO9I,EAAOgmC,IAAYjnC,EAAAA,EAAAA,UAAS,IAC5BsK,EAAUC,IAAevK,EAAAA,EAAAA,UAAmB,KAC5CwK,EAAUC,IAAezK,EAAAA,EAAAA,UAAS,KAClC0K,EAAcC,IAAmB3K,EAAAA,EAAAA,WAAS,GAQ3C8K,EACDV,GACD,CAACY,EAAiBC,IACdR,EAAYQ,EAAab,EAAQ,IAEnC88B,EAAqB,SAAd5gC,EAEb,OACId,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACHrC,QAASA,IAAMA,IACfsC,MAAM,EACNzH,GAAI,CAAE,qBAAsB5D,GAAOgG,OAAQrH,SAAA,EAE3C2F,EAAAA,EAAAA,MAAA,MAAIG,MAAOzE,GAAO2H,WAAWhJ,SAAA,EACzBkB,EAAAA,EAAAA,KAACqI,GAAM,CAACkC,KAAK,YACZpG,EAAAA,KAAKC,EAAE,mCAEZpE,EAAAA,EAAAA,KAACgM,EAAAA,cAAa,CACVpH,MAAO,IAAKzE,GAAOqG,QAASrG,GAAOsG,gBACnCwF,UAAQ,EAAAnN,UAER2F,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAOpF,KAAK+D,SAAA,EAEhBkB,EAAAA,EAAAA,KAACkM,EAAAA,OAAM,CACH7L,SAAS,SACTS,MAAM,UAAShC,UAEfkB,EAAAA,EAAAA,KAACmM,EAAAA,KAAI,CACDjM,MAAOA,EACP8E,SArCHoH,CAACoI,EAAgBnI,KAClCzC,GAAgB,GAChBs8B,EAAS75B,GACT3C,EAAY,GAAG,EAmCK4C,QAAQ,aACRC,eAAa,EACbC,eAAgB25B,EAAO,UAAY,YACnC15B,UAAU,UAAS3N,SAElBpC,OAAOkO,QAAQf,GAAUqB,KAAI,CAAAk7B,EAAgB15B,KAAG,IAAjBnC,EAAMe,GAAM86B,EAAA,OACxCpmC,EAAAA,EAAAA,KAAC2M,EAAAA,IAAG,CACA/H,MAAOuhC,EAAO,CAAErlC,MAAO,SAAY,CAAEA,MAAO,SAC5CyI,SAAUA,EAAS3L,SAAS2M,GAE5BqC,MAAOtB,EAAMf,KAAKpG,EAAAA,KAAK0I,eACvBC,MACI9M,EAAAA,EAAAA,KAACqI,GAAM,CACHkC,KAAMA,EACNjC,SAAUgD,EAAMhD,eAxHzCO,EA2H+B6D,EA1HvC,CACHnR,GAAI,wBAAwBsN,IAC5B,gBAAiB,6BAA6BA,OAgHb0B,GAnHzC,IAAmB1B,CA4He,QAIbnM,OAAOC,KAAKkN,GAAUqB,KAAI,CAACX,EAAMmC,KAC9B1M,EAAAA,EAAAA,KAAC2I,GAAQ,CACLG,MAAO3I,GAAO4H,aAEdi+B,SAAU,IAAK7lC,GAAOwG,aAAc7F,MAAOqlC,EAAO,aAAUp5B,GAC5D7M,MAAOA,EACP2I,MAAO6D,EAAI5N,UAEX2F,EAAAA,EAAAA,MAAA,OAAA3F,SAAA,EACIkB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAO2G,WACXlC,MAAO,CAAEmC,WAAY,QAASjI,SAE7B+K,EAASU,GAAMA,KAAKpG,EAAAA,KAAK0I,kBAE9B7M,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAO8G,sBAAsBnI,SAEhC+K,EAASU,GAAMyC,YAAY7I,EAAAA,KAAK0I,kBAErC7M,EAAAA,EAAAA,KAAA,OAAAlB,SACK+K,EAASU,GAAMnB,UACV1M,OAAOC,KAAKkN,EAASU,GAAMnB,WAAW8B,KAAI+B,IAAa,IAADC,EAAAC,EAClD,MAAMtE,EAAQnM,OAAOC,KAAKkN,GAAU7L,QAAQuM,GAExCZ,GAAgBzJ,IAAU2I,IAC1BkB,EAAsB,GAAGQ,KAAQ0C,IAAjClD,CAA6C,IAAI,GACjDH,GAAgB,IAGpB,MAAMyD,EAAkBjE,GAAaA,EAAU6D,GAC/C,IAAIH,EAAO,mBAIX,OAHmB,OAAfO,QAAe,IAAfA,GAAuB,QAARH,EAAfG,EAAiB1N,cAAM,IAAAuN,GAAvBA,EAAyBJ,MAAuB,OAAfO,QAAe,IAAfA,GAAuB,QAARF,EAAfE,EAAiB1N,cAAM,IAAAwN,GAAvBA,EAAyB5C,OAC1DuC,EAAO,WAAWO,EAAgB1N,OAAO4K,QAAQ8C,EAAgB1N,OAAOmN,SAGxErI,EAAAA,EAAAA,MAAC6I,EAAAA,UAAS,CACN1I,MAAOuhC,OAAOp5B,EAAY,CAAE7G,WAAY,aAExCuD,SAAUA,IAAa,GAAGc,KAAQ0C,IAClCjI,SAAU+E,EAAsB,GAAGQ,KAAQ0C,KAAYnO,SAAA,EAEvDkB,EAAAA,EAAAA,KAACuN,EAAAA,iBAAgB,CACbC,YAAYxN,EAAAA,EAAAA,KAACyN,EAAAA,WAAc,IAC3B1J,GAAI,CAAE,iCAAkC5D,GAAOuH,SAC/C,gBAAc,mBACdnM,GAAG,kBAAiBuD,UAEpB2F,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CAACU,MAAOzE,GAAO0H,QAAQ/I,SAAA,EAC9BkB,EAAAA,EAAAA,KAAC0N,EAAAA,UAAS,CACN3J,GAAI5D,GAAOqH,KACX3B,UAAU,MACV8H,MAAOb,KAEX9M,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAO8H,UAAUnJ,SAEpBmO,EAAS3J,QAAQ,qBAAsB,YAIpDtD,EAAAA,EAAAA,KAAC4N,EAAAA,iBAAgB,CAAChJ,MAAOzE,GAAO0G,OAAO/H,SAClC+K,EAASU,GAAMnB,UAAU6D,GAAUpD,SAASqB,KAAI2C,IAC7CpJ,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CAEP2B,UAAU,MACV9B,GAAI5D,GAAOC,QAAQtB,SAAA,EAEnBkB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAOqlC,SAAS1mC,SAEnBkF,EAAAA,MAAMC,gBAAgB4J,EAAIzN,YAE/BJ,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,GAAOolC,OAAOzmC,SAEjBkF,EAAAA,MAAMqiC,WAAW,IAAIpkC,KAAK4L,EAAI/H,IAAKJ,OAdnCmI,EAAI/H,UA3BhBmH,EA8CG,IAGpB,QAEVxI,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOgH,OAAOrI,SAAA,EACtBkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACRuC,UAA4C,IAAjCnS,OAAOC,KAAKkN,GAAUvN,OACjCiN,SAAUA,EAAS3L,SAAS2M,GAC5B3F,MAAO2E,EAAS3L,SAAS2M,GAAQ,CAAErE,WAAY,eAAa6G,EAC5DhJ,GAAI5D,GAAOgI,YACX2G,QAASA,KACL3F,EAAYoB,GACZf,EAAY,IAAID,EAAUgB,GAAM,EAEpCzJ,MAAwC,IAAjCpE,OAAOC,KAAKkN,GAAUvN,OAAe,UAAY,OACxDyS,WAAW/O,EAAAA,EAAAA,KAACgP,EAAAA,MAAS,IAAIlQ,SAExBqF,EAAAA,KAAKC,EAAE,iBAEsB,IAAjC1H,OAAOC,KAAKkN,GAAUvN,SACnB0D,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,SAAUA,EAAS3L,SAAS2M,GAC5BxG,GAAI5D,GAAOgI,YACXvD,MAAO2E,EAAS3L,SAAS2M,GAAQ,CAAErE,WAAY,eAAa6G,EAC5D+B,QAASA,KACLtF,EAAY,IAAID,EAAUgB,IAC1BpB,EAAYoB,GACZrB,GAAS,EAEb6F,WACItK,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA5F,SAAA,EACIkB,EAAAA,EAAAA,KAACgP,EAAAA,MAAS,KACVhP,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,OAGlBnO,MAAM,UAAShC,SAEdqF,EAAAA,KAAKC,EAAE,gCA3HnB,YAAYmG,aAoIjCvK,EAAAA,EAAAA,KAAC2O,EAAAA,cAAa,CAAA7P,UACVkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHrT,GAAG,yBACH+Q,QAAQ,YACRwC,QAASA,IAAM5F,IACf6F,WAAW/O,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,IACrBnO,MAAM,OAAMhC,SAEXqF,EAAAA,KAAKC,EAAE,YAGX,ECrgBF,MAAMkiC,GAmCjBzrC,WAAAA,CAAYC,EAAyByrC,GAAmB,KAlCvCzrC,YAAM,OAENG,cAAQ,OAEjBC,aAAO,OAEPC,eAAS,OAETqrC,UAAI,OAEJC,aAAO,OAEPC,wBAAkB,OAElBC,0BAAoB,OAEpBC,iBAAW,OAEXC,mBAAa,OAEb/J,YAAM,OAENgK,cAAQ,OAERnG,iBAAW,OAEF4F,aAAO,OAEPQ,cAAQ,OAEjBC,gBAAU,OAEVC,aAAO,OA2EfC,WAAc3f,IACV,MAAMhkB,EAAS9H,KAAK0rC,aAAa5f,GAEvB,OAANhkB,QAAM,IAANA,GAAAA,EAAQ6jC,UACR3rC,KAAKgrC,QAAUhrC,KAAKgrC,SAAW,GAC/BhrC,KAAKgrC,QAAQ5oC,KAAK0F,EAAO6jC,SAEpB3rC,KAAKurC,aACNvrC,KAAKurC,WAAa74B,YAAW,KACzB1S,KAAKurC,WAAa,KAClB,MAAMP,EAAUhrC,KAAKgrC,QACrBhrC,KAAKgrC,QAAU,KAEfhrC,KAAKR,SAASiB,SAAQmrC,GAAWA,GAAWA,EAAQZ,EAAS1qC,KAAKC,UAAUurB,GAAMjrB,OAAS,KAAI,GAChG,MAGHiH,EAAO+jC,QACyB,UAA5B/jC,EAAO6jC,QAAQ9+B,UAAwB7M,KAAKmrC,aAC5CnrC,KAAKqhC,SACLrhC,KAAKirC,mBAAmBxqC,SAAQmrC,GAAWA,GAAWA,EAAQ5rC,KAAKqhC,WAChC,SAA5Bv5B,EAAO6jC,QAAQ9+B,UAAuB7M,KAAKorC,gBAClDprC,KAAKqrC,WACLrrC,KAAKkrC,qBAAqBzqC,SAAQmrC,GAAWA,GAAWA,EAAQ5rC,KAAKqrC,cAGjF,EACF,KAEF1qC,kBAAqBC,IACbA,IAAgBZ,KAAKN,WACrBM,KAAKN,WAAY,EACZM,KAAK8rC,SAAQ,KACVlrC,GAAeZ,KAAKN,YAC5BM,KAAKN,WAAY,EACrB,EA3GAM,KAAKX,OAASA,EACdW,KAAKR,SAAW,GAChBQ,KAAKP,QAAU,KAEfO,KAAKirC,mBAAqB,GAC1BjrC,KAAKkrC,qBAAuB,GAC5BlrC,KAAKmrC,aAAc,EACnBnrC,KAAKorC,eAAgB,EACrBprC,KAAKqhC,OAAS,EACdrhC,KAAKqrC,SAAW,EAChBrrC,KAAKklC,YAAc,GACnBllC,KAAKN,UAAYM,KAAKX,OAAOuB,cAC7BZ,KAAK8qC,QAAUA,GAAW,IAC1B9qC,KAAK+qC,KAAO,KACZ/qC,KAAKsrC,SACDjc,UAAU0c,QACV1c,UAAU0c,OAAO5pC,SAAS,UAC1BktB,UAAU2c,YACT3c,UAAU2c,UAAU7pC,SAAS,WAC7BktB,UAAU2c,UAAU7pC,SAAS,SAElC9C,EAAO4sC,mBAAmBjsC,KAAKyrC,YAC/BpsC,EAAOmC,0BAA0BxB,KAAKW,kBAC1C,CAEAurC,cAAAA,CAAehH,GACPA,IAAgBllC,KAAKklC,cACrBllC,KAAKklC,YAAcA,EACdllC,KAAK8rC,SAAQ,GAE1B,CAEAK,iBAAAA,CAAkBC,GACd,GAAIpsC,KAAKmrC,cAAgBiB,IACrBpsC,KAAKmrC,YAAciB,GACdpsC,KAAKmrC,aAAa,CACnB,MAAM9J,EAASrhC,KAAKqhC,OACpBrhC,KAAKqhC,OAAS,EACVA,GACArhC,KAAKirC,mBAAmBxqC,SAAQmrC,GAAWA,GAAWA,EAAQvK,IAEtE,CAER,CAEAgL,mBAAAA,CAAoBD,GAChB,GAAIpsC,KAAKorC,gBAAkBgB,IACvBpsC,KAAKorC,cAAgBgB,GAChBpsC,KAAKorC,eAAe,CACrB,MAAMC,EAAWrrC,KAAKqrC,SACtBrrC,KAAKqrC,SAAW,EACZA,GACArrC,KAAKkrC,qBAAqBzqC,SAAQmrC,GAAWA,GAAWA,EAAQP,IAExE,CAER,CAEAiB,WAAAA,GACQtsC,KAAKqhC,SACLrhC,KAAKqhC,OAAS,EACdrhC,KAAKirC,mBAAmBxqC,SAAQmrC,GAAWA,GAAWA,EAAQ5rC,KAAKqhC,UAE3E,CAEAkL,aAAAA,GACQvsC,KAAKqrC,WACLrrC,KAAKqrC,SAAW,EAChBrrC,KAAKkrC,qBAAqBzqC,SAAQmrC,GAAWA,GAAWA,EAAQ5rC,KAAKqrC,YAE7E,CAwCAppC,eAAAA,CAAgBvB,GACPV,KAAKR,SAAS2C,SAASzB,IACxBV,KAAKR,SAAS4C,KAAK1B,EAE3B,CAEA2B,iBAAAA,CAAkB3B,GACd,MAAM4B,EAAMtC,KAAKR,SAAS+C,QAAQ7B,IAErB,IAAT4B,GACAtC,KAAKR,SAASgD,OAAOF,EAAK,EAElC,CAEA4f,yBAAAA,CAA0BxhB,GACjBV,KAAKirC,mBAAmB9oC,SAASzB,IAClCV,KAAKirC,mBAAmB7oC,KAAK1B,EAErC,CAEA4hB,2BAAAA,CAA4B5hB,GACxB,MAAM4B,EAAMtC,KAAKirC,mBAAmB1oC,QAAQ7B,IAE/B,IAAT4B,GACAtC,KAAKirC,mBAAmBzoC,OAAOF,EAAK,EAE5C,CAEA6f,2BAAAA,CAA4BzhB,GACnBV,KAAKkrC,qBAAqB/oC,SAASzB,IACpCV,KAAKkrC,qBAAqB9oC,KAAK1B,EAEvC,CAEA6hB,6BAAAA,CAA8B7hB,GAC1B,MAAM4B,EAAMtC,KAAKkrC,qBAAqB3oC,QAAQ7B,IAEjC,IAAT4B,GACAtC,KAAKkrC,qBAAqB1oC,OAAOF,EAAK,EAE9C,CAEAopC,YAAAA,CAAa5f,EAAwB0gB,GAEjC,IAAKxsC,KAAK+qC,KACN,OAAO,KAEX,IAAKjf,EACD,OAAO,KAUX,IAAI6f,EACAE,GAAQ,EACZ,MAAMhrC,EAASb,KAAK+qC,KAAKlqC,OAGzB,GAFA2rC,EAAUA,GAAY3rC,GAAUb,KAAK+qC,KAAK/qC,KAAK+qC,KAAKlqC,OAAS,GAAG6O,KAAQ,EAEpD,kBAAToc,EACP6f,EAAU7f,EACN0gB,GAAWA,GAAWb,EAAQthC,GAC9BshC,EAAQj8B,IAAM88B,EAAU,EAExBb,EAAQj8B,IAAMi8B,EAAQthC,OAEvB,CAEH,MAAM0wB,EAAOjP,EAAK9I,MAAM,+CAExB,GAAI+X,GAAQA,EAAKl6B,OAAS,EAAG,CACzB,IAAIwJ,EAEJ,GAAIrK,KAAKsrC,SAAU,CAEf,MAAMmB,EAAK3gB,EAAK9I,MAAM,6DACtB3Y,EAAK,IAAI7D,KACL6C,SAASojC,EAAG,GAAI,IAChBpjC,SAASojC,EAAG,GAAI,IAAM,EACtBpjC,SAASojC,EAAG,GAAI,IAChBpjC,SAASojC,EAAG,GAAI,IAChBpjC,SAASojC,EAAG,GAAI,IAChBpjC,SAASojC,EAAG,GAAI,IAChBpjC,SAASojC,EAAG,GAAI,KAClBC,SACN,KAAO,CACH,MAAMD,EAAK1R,EAAK,GAAGhyB,MAAM,KACzBsB,EAAK,IAAI7D,KAAK,GAAGimC,EAAG,MAAMA,EAAG,MAAMC,SACvC,CACA,IAAIh9B,EAAMrF,EAENmiC,GAAWA,GAAWniC,IACtBqF,EAAM88B,EAAU,GAIpB,MAAMG,EAAO7gB,EAAK9I,MAAM,iCAExB2oB,EAAU,CACNj8B,MACAi9B,KAAMA,EAAOA,EAAK,GAAG9kC,QAAQ,SAAU,IAAM,GAC7ClD,QAASmnB,EAAK/iB,MAAM,YAAY,GAChC8D,SAAUif,EAAK9I,MAAM,qCAAqC,GAAGnb,QAAQ,SAAU,IAC/EwC,KAER,MACIwhC,GAAQ,EAEJhrC,IACA8qC,EAAU3rC,KAAK+qC,KAAKlqC,EAAS,GACzB8qC,IAC+B,kBAApBA,EAAQhnC,QACfgnC,EAAQhnC,QAAUvE,EAAAA,EAAWwsC,kBAAkBjB,EAAQhnC,QAAQkoC,SAAW/gB,GAE1E6f,EAAQhnC,SAAWmnB,GAKvC,CAEA,IAAK6f,EACD,OAAO,KAOX,GAJ+B,kBAApBA,EAAQhnC,UACfgnC,EAAQhnC,QAAUvE,EAAAA,EAAWwsC,kBAAkBjB,EAAQhnC,UAGvDknC,EAAO,CAEP,GAAIhrC,GAAUb,KAAK+qC,KAAKlqC,EAAS,GAAG6O,IAAMi8B,EAAQj8B,IAAK,CACnD,IAAI2C,EAEJ,IAAKA,EAAIxR,EAAS,EAAGwR,GAAK,KAClBrS,KAAK+qC,KAAK14B,GAAG3C,IAAMi8B,EAAQj8B,KADN2C,MAKlB,IAAPA,EACArS,KAAK+qC,KAAK+B,QAAQnB,GAElB3rC,KAAK+qC,KAAKvoC,OAAO6P,EAAI,EAAG,EAAGs5B,EAEnC,MACI3rC,KAAK+qC,KAAK3oC,KAAKupC,GAGf9qC,EAAS,IAAMb,KAAK8qC,SACpB9qC,KAAK+qC,KAAKgC,OAElB,CAEA,MAAO,CAAEpB,UAASE,QACtB,CAEAC,OAAAA,CAAQjqC,GACJ,IAAK7B,KAAKklC,YACN,OAAOpjC,QAAQwwB,QAAQ,CAAEyY,KAAM,GAAIS,QAAS,IAGhD,IAAK3pC,GAAU7B,KAAKP,mBAAmBqC,QACnC,OAAO9B,KAAKP,QAGhB,MAAMutC,EAAYhtC,KAAKqhC,OACjB4L,EAAcjtC,KAAKqrC,SA+DzB,OA9DArrC,KAAKqhC,OAAS,EACdrhC,KAAKqrC,SAAW,EAEhBrrC,KAAKP,QAAUO,KAAKX,OACfysC,QAAQ9rC,KAAKklC,YAAa,KAC1BnkC,MAAK6qB,IAAU,IAADshB,EAEX,GAA0B,oBAArBthB,QAA2Dta,KAAZ,OAALsa,QAAK,IAALA,OAAK,EAALA,EAAO1iB,OAKlD,OAJAlJ,KAAK+qC,KAAO,GAEZ1pC,OAAOC,MAAM,kCAEN,CAAEypC,KAAM/qC,KAAK+qC,KAAMS,QAAS,GAGvC,MAAM2B,EAA4BvhB,EAASA,EAAmBwhB,MAAQ,KACtE,IAOIZ,EAPAhB,EAAU,EAuCd,MArC0B,kBAAf2B,IACP3B,EAAUniC,SAAS8jC,EAAY,KAGnCntC,KAAK+qC,KAAO,GAGXnf,EAAmBnrB,SAAQqrB,IACxB,MAAMhkB,EAAS9H,KAAK0rC,aAAa5f,EAAM0gB,GAC7B,OAAN1kC,QAAM,IAANA,GAAAA,EAAQ6jC,UACRa,EAAU1kC,EAAO6jC,QAAQj8B,IACrB5H,EAAO+jC,OAAqC,UAA5B/jC,EAAO6jC,QAAQ9+B,UAAwB7M,KAAKmrC,aAC5DnrC,KAAKqhC,SAGLv5B,EAAO+jC,OAAqC,SAA5B/jC,EAAO6jC,QAAQ9+B,UAAuB7M,KAAKorC,eAC3DprC,KAAKqrC,WAEb,IAGS,QAAT6B,EAAAltC,KAAK+qC,YAAI,IAAAmC,GAATA,EAAWrsC,QAAUb,KAAK+qC,KAAK,GAAG1gC,IAClCrK,KAAK+qC,KAAKjpB,MAAK,CAAC4B,EAAGC,IAAOD,EAAErZ,GAAKsZ,EAAEtZ,GAAK,EAAIqZ,EAAErZ,GAAKsZ,EAAEtZ,IAAM,EAAI,IAGnErK,KAAKwrC,QAAUA,EAGfxrC,KAAKR,SAASiB,SAAQC,GAAMA,GAAMA,EAAGV,KAAK+qC,KAAMS,KAE5CwB,IAAchtC,KAAKqhC,QACnBrhC,KAAKirC,mBAAmBxqC,SAAQmrC,GAAWA,GAAWA,EAAQ5rC,KAAKqhC,UAEnE4L,IAAgBjtC,KAAKqrC,UACrBrrC,KAAKkrC,qBAAqBzqC,SAAQmrC,GAAWA,GAAWA,EAAQ5rC,KAAKqrC,YAGlE,CAAEN,KAAM/qC,KAAK+qC,KAAMS,UAAS,IAEtCrqC,OAAMC,IACHC,OAAOC,MAAM,oBAAoBF,KAC1B,CAAE2pC,KAAM/qC,KAAK+qC,KAAMS,QAAS,MAGpCxrC,KAAKP,OAChB,CAEA4tC,UAAAA,GACIrtC,KAAK+qC,KAAO,GACZ/qC,KAAKwrC,QAAU,EAEXxrC,KAAKqhC,SACLrhC,KAAKqhC,OAAS,EACdrhC,KAAKirC,mBAAmBxqC,SAAQmrC,GAAWA,GAAWA,EAAQ5rC,KAAKqhC,WAGnErhC,KAAKqrC,WACLrrC,KAAKqrC,SAAW,EAChBrrC,KAAKkrC,qBAAqBzqC,SAAQmrC,GAAWA,GAAWA,EAAQ5rC,KAAKqrC,YAE7E,E,gBCnZW,MAAMiC,WAAwBnuC,GAAAA,EACzCC,WAAAA,CAAYC,GACR4G,MAAM5G,EAAQ,iBAAkB,WACpC,ECMW,MAAMkuC,WAAoBpuC,GAAAA,EAarCC,WAAAA,CAAYC,GACR4G,MAAM5G,EAAQ,cAAe,QAAQ,KAbxBmuC,cAAkE,GAAG,KAErEC,sBAAyF,GAAG,KAE5FC,YAAuC,CAAC,EAAE,KAE1CC,qBAA2F,CAAC,EAAE,KAEvGC,kBAA0D,KAAK,KAE/DC,iBAAW,OAUnBC,mBAAqB,CAAChuC,EAAYsG,KAE9B,GAAItG,EAAG2B,WAAW,iBAAmB3B,EAAGiuC,SAAS,UAAW,CACxD,IAAI7tC,EAEJ,GADAJ,EAAKA,EAAG+H,QAAQ,WAAY,IACxBzB,EACA,QAA6BkL,IAAzBtR,KAAK0tC,YAAY5tC,GAAmB,CACpC,KAAME,KAAK0tC,YAAY5tC,OAAe,OAALsG,QAAK,IAALA,IAAAA,EAAOG,KAKpC,OAJArG,EAAO,UACPF,KAAK0tC,YAAY5tC,KAAa,OAALsG,QAAK,IAALA,IAAAA,EAAOG,IAKxC,MACIrG,EAAO,MACPF,KAAK0tC,YAAY5tC,KAAa,OAALsG,QAAK,IAALA,IAAAA,EAAOG,SAEjC,KAAIvG,KAAK0tC,YAAY5tC,GAKxB,OAJAI,EAAO,iBACAF,KAAK0tC,YAAY5tC,EAI5B,CACAE,KAAKwtC,cAAc/sC,SACfC,GACIA,GACAA,EAAG,CACC,CACIZ,GAAIA,EACJwG,MAAOtG,KAAK0tC,YAAY5tC,GACxBI,WAIpB,GACF,KAgCF8tC,sBAAyBluC,IACrB,MAAMmP,EAAOnP,EAAG+H,QAAQ,uBAAwB,MAG3C7H,KAAK6tC,aAAernC,KAAKC,MAAQzG,KAAK6tC,YAAc,OACjD7tC,KAAK4tC,mBACLvxB,aAAarc,KAAK4tC,mBAGtB5tC,KAAK4tC,kBAAoBl7B,YACrBu7B,IACIjuC,KAAK4tC,kBAAoB,KACzB5tC,KAAK2tC,qBAAqBM,GAASjuC,KAAKkuC,2BAA2BD,GAAO,GAErEjuC,KAAK2tC,qBAAqBM,GAAOltC,MAClCyM,GAAiBA,GAAiBxN,KAAKytC,sBAAsBhtC,SAAQC,GAAMA,EAAG8M,MACjF,GAEL,IACAyB,GAER,EAhGAjP,KAAKwtC,cAAgB,GACrBxtC,KAAKytC,sBAAwB,GAC7BztC,KAAK2tC,qBAAuB,CAAC,EAC7B3tC,KAAK0tC,YAAc,CAAC,CACxB,CAyCAnsC,qBAAAA,CAAsBX,GACdA,EACIZ,KAAKwtC,cAAc3sC,QACdb,KAAKX,OAAOgI,eAAe,sBAAuBrH,KAAK8tC,oBAGhE7sC,OAAOC,KAAKlB,KAAK0tC,aAAajtC,SAASX,GAAgBE,KAAK0tC,YAAY5tC,IAAM,GAEtF,CAEAquC,oBAAAA,CAAqBztC,GACZV,KAAKwtC,cAAcrrC,SAASzB,KAC7BV,KAAKwtC,cAAcprC,KAAK1B,GAEU,IAA9BV,KAAKwtC,cAAc3sC,QAAgBb,KAAKN,WACnCM,KAAKX,OAAOgI,eAAe,sBAAuBrH,KAAK8tC,oBAGxE,CAEAM,sBAAAA,CAAuB1tC,GACnB,MAAM4B,EAAMtC,KAAKwtC,cAAcjrC,QAAQ7B,IAC1B,IAAT4B,IACAtC,KAAKwtC,cAAchrC,OAAOF,EAAK,IAC1BtC,KAAKwtC,cAAc3sC,QAAUb,KAAKN,WACnCM,KAAKX,OAAOgvC,iBAAiB,sBAAuBruC,KAAK8tC,oBAGrE,CA0BAI,0BAAAA,CAA2BI,EAAgBzsC,GACvC,OAAKA,GAAU7B,KAAK2tC,qBAAqBW,aAAmBxsC,UAI5D9B,KAAK2tC,qBAAqBW,GAAUtuC,KAAKX,OAAO+H,SAAS,GAAGknC,WAAgBvtC,MAAKqF,GACpE,OAALA,QAAK,IAALA,GAAAA,EAAOG,IACAvG,KAAKX,OACP6gB,iBAAiBouB,EAAQ,IACzBvtC,MAAMyM,IAAiC,CAAQ,CAAC8gC,GAAS9gC,GAAiB,SAC1ErM,OAAMC,IACH2kB,QAAQtM,KAAK,mCAAmC60B,OAAYltC,KACrD,CAAE,CAACktC,GAAS,SAGxB,CAAE,CAACA,GAAS,SAbZtuC,KAAK2tC,qBAAqBW,EAiBzC,CAEA,sBAAMpuB,CAAiBouB,EAAiBzsC,GACpC,GAAIysC,EACA,OAAOtuC,KAAKkuC,2BAA2BI,EAAQzsC,GAInD,MACM0sC,SADcvuC,KAAKX,OAAOmvC,gBAAgB3sC,IACzB4N,KAAIR,GAAQjP,KAAKkuC,2BAA2Bj/B,EAAKvN,IAAKG,KACvE4sC,QAAiB3sC,QAAQ4sC,IAAIH,GAC7BzmC,EAAoD,CAAC,EAE3D,OADA2mC,EAAShuC,SAAQqnB,GAAK7mB,OAAO+zB,OAAOltB,EAAQggB,KACrChgB,CACX,CAEAka,2BAAAA,CAA4BthB,GACnBV,KAAKytC,sBAAsBtrC,SAASzB,KACrCV,KAAKytC,sBAAsBrrC,KAAK1B,GAEU,IAAtCV,KAAKytC,sBAAsB5sC,QAAgBb,KAAKN,YAChDM,KAAK6tC,YAAcrnC,KAAKC,MACnBzG,KAAKX,OAAOgI,eAAe,gCAAiCrH,KAAKguC,wBAGlF,CAEA3rB,6BAAAA,CAA8B3hB,GAC1B,MAAM4B,EAAMtC,KAAKytC,sBAAsBlrC,QAAQ7B,IAElC,IAAT4B,IACAtC,KAAKytC,sBAAsBjrC,OAAOF,EAAK,IAClCtC,KAAKytC,sBAAsB5sC,QAAUb,KAAKN,WAC3CM,KAAKX,OAAOgvC,iBAAiB,gCAAiCruC,KAAKguC,uBAG/E,EClLW,MAAMW,WAAuBxvC,GAAAA,EAKxCC,WAAAA,CAAYC,GACR4G,MAAM5G,EAAQ,iBAAkB,WAAW,KAL9BuvC,wBAAkB,OAE3BC,eAAS,OAgBjBC,kBAAoB,KACZ9uC,KAAK6uC,WACLxyB,aAAarc,KAAK6uC,WAEtB7uC,KAAK6uC,UAAYn8B,YAAW,KACxB1S,KAAK6uC,UAAY,KACjB7uC,KAAK4uC,mBAAmBnuC,SAAQC,GAAMA,KAAK,GAC5C,IAAI,EAnBPV,KAAK4uC,mBAAqB,EAC9B,CAEU3uC,aAAAA,CAAcH,EAAYC,GAChC,OAAOD,EAAGkjB,MAAM,+BAAiCjjB,GAAOA,EAAIG,OAASF,KAAKT,WAC9E,CAEUiB,cAAAA,CAAekB,EAAaC,GAClC3B,KAAKX,OAAO0vC,wBACZ/uC,KAAKX,OAAO2vC,uBAAuB,GACvC,CAYAC,yBAAAA,CAA0BvuC,GACjBV,KAAK4uC,mBAAmBzsC,SAASzB,KAClCV,KAAK4uC,mBAAmBxsC,KAAK1B,GAEU,IAAnCV,KAAK4uC,mBAAmB/tC,QAAgBb,KAAKN,WAC7CM,KAAKX,OACAyB,gBAAgB,sBAAuBd,KAAK8uC,mBAC5C3tC,OAAMC,GAAKC,OAAOC,MAAM,+BAA+BF,OAGxE,CAEA8tC,2BAAAA,CAA4BxuC,GACxB,MAAM4B,EAAMtC,KAAK4uC,mBAAmBrsC,QAAQ7B,IAC/B,IAAT4B,GACAtC,KAAK4uC,mBAAmBpsC,OAAOF,EAAK,IAGnCtC,KAAK4uC,mBAAmB/tC,QAAUb,KAAKN,WACxCM,KAAKX,OACAoD,kBAAkB,sBAAuBzC,KAAK8uC,mBAC9C3tC,OAAMC,GAAKC,OAAOC,MAAM,iCAAiCF,MAEtE,EC/CW,MAAM+tC,GAWjB/vC,WAAAA,CAAYC,GAA0B,KAVrBA,YAAM,OAENG,cAAQ,OAEjBC,aAAO,OAEPC,eAAS,OAETC,aAAO,OAcfE,oBAAsB,CAACC,EAAYC,KAG/B,IAAII,EACAD,EAHJF,KAAKL,QAAUK,KAAKL,SAAW,CAAC,EAK5BI,GACiB,aAAbA,EAAIG,MAAoC,YAAbH,EAAIG,MAC/BE,EAAAA,EAAWC,WAAWN,GAGtBC,KAAKL,QAAQG,IACbK,EAASH,KAAKL,QAAQG,GAClBQ,KAAKC,UAAUP,KAAKL,QAAQG,MAASQ,KAAKC,UAAUR,IACpDG,EAAO,UACPF,KAAKL,QAAQG,GAAMC,GAGnBG,EAAO,YAGXA,EAAO,MACPF,KAAKL,QAAQG,GAAMC,IAEhBC,KAAKL,QAAQG,IACpBK,EAASH,KAAKL,QAAQG,GACtBI,EAAO,iBACAF,KAAKL,QAAQG,IAGpBI,EAAO,UAGXF,KAAKR,SAASiB,SAAQC,GAClBA,EAAG,CACC,CACIZ,KACAC,MACAG,OACAC,aAGX,EACH,KAmBFQ,kBAAqBC,IACbA,IAAgBZ,KAAKN,WACrBM,KAAKN,WAAY,EAEbM,KAAKR,SAASqB,SACdb,KAAKX,OACAyB,gBAAgB,IAAKd,KAAKH,qBAC1BsB,OAAOC,GAAWC,OAAOC,MAAM,gCAAgCF,OAE/DpB,KAAKgB,YAAW,GAAMD,MACvBpB,GAAWA,GAAWsB,OAAOC,KAAKvB,GAASc,SAAQX,GAAME,KAAKH,oBAAoBC,EAAIH,EAAQG,WAG9Fc,GAAeZ,KAAKN,YAC5BM,KAAKN,WAAY,EACrB,EAxFAM,KAAKX,OAASA,EACdW,KAAKR,SAAW,GAChBQ,KAAKP,QAAU,KAEfJ,EAAOmC,0BAA0BxB,KAAKW,mBAEtCX,KAAKN,UAAYM,KAAKX,OAAOuB,cAE7BZ,KAAKL,QAAU,IACnB,CAgDAqB,UAAAA,CAAWa,GACP,OAAKA,GAAU7B,KAAKP,mBAAmBqC,UAIvC9B,KAAKP,QAAUO,KAAKX,OACf2B,WAAWa,GAAQ,GACnBd,MAAMpB,IACHK,KAAKL,QAAUA,EACRK,KAAKL,WAEfwB,OAAOC,GAAWC,OAAOC,MAAM,uBAAuBF,QAThDpB,KAAKP,OAYpB,CAoBAwC,eAAAA,CAAgBvB,GACPV,KAAKR,SAAS2C,SAASzB,KACxBV,KAAKR,SAAS4C,KAAK1B,GAEU,IAAzBV,KAAKR,SAASqB,QAAgBb,KAAKN,WACnCM,KAAKX,OACAyB,gBAAgB,IAAKd,KAAKH,qBAC1BsB,OAAOC,GAAWC,OAAOC,MAAM,+BAA+BF,OAG/E,CAEAiB,iBAAAA,CAAkB3B,EAAqC0uC,GACnD,MAAM9sC,EAAMtC,KAAKR,SAAS+C,QAAQ7B,IACrB,IAAT4B,GACAtC,KAAKR,SAASgD,OAAOF,EAAK,GAGzBtC,KAAKR,SAASqB,SAAUb,KAAKN,WAAc0vC,GAC5CpvC,KAAKX,OACAoD,kBAAkB,IAAKzC,KAAKH,qBAC5BsB,OAAOC,GAAWC,OAAOC,MAAM,iCAAiCF,MAE7E,E,gBChIJ,MAAMsD,GAA8C,CAChDpF,KAAM,CAEFwF,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT+F,aAAc,EACdC,cAAe,UAEnBH,MAAO,CACHI,SAAU,IACVhG,MAAO,OACP4f,UAAW,IACX/Z,OAAQ,qBAEZI,KAAM,CACFlG,QAAS,QAEbmG,eAAgB,CACZC,SAAU,UAEdmB,QAAS,CACLvH,QAAS,OACTI,WAAY,UAEhBoqC,YAAa,CACT9kC,gBAAiB,UACjBwS,QAAS,GACTvX,SAAU,IAEd8pC,WAAY,CACRxqC,MAAO,OACPwZ,aAAc,KAYhBpR,GAAoC9J,IAA0D,IAAzD,SAAEC,EAAQ,MAAEoB,EAAK,MAAE2I,EAAK,MAAE+C,EAAK,OAAEo/B,KAAWvpC,GAAO5C,EAC1F,OAAImsC,GACOhrC,EAAAA,EAAAA,KAAA,UAASyB,EAAK3C,SAAGoB,IAAU2I,GAAS/J,KAI3CkB,EAAAA,EAAAA,KAAA,UAASyB,EAAK3C,SACToB,IAAU2I,IACPpE,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA5F,SAAA,EACIkB,EAAAA,EAAAA,KAACkM,EAAAA,OAAM,CACH7L,SAAS,SACTS,MAAM,UAAShC,UAEfkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2qC,YAAYhsC,SAAE8M,OAErC5L,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CAACkE,EAAG,EAAElJ,UACNkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAC2B,UAAU,MAAK/G,SAAEA,UAIvC,EAMRmsC,GAA6C,CAC/CnnB,SAAU,WACVonB,SAAU,WACVC,OAAQ,SACR1V,KAAM,aACN2V,QAAS,aACTznC,KAAM,OACN4G,KAAM,aACNqB,MAAO,cA8DX,SAASy/B,GAAe7vC,EAA0BonB,EAAgB1iB,GAC9D,MAAMorC,EAAO1oB,EAAK2lB,UACb3lB,EAAKtmB,QAGNd,EAAI8vC,GAAQ9vC,EAAI8vC,IAAS,CAAC,EAC1BD,GAAe7vC,EAAI8vC,GAAO1oB,EAAM1iB,IAHhC1E,EAAI8vC,GAAQprC,CAKpB,CAEA,SAASqrC,GAAc/vC,EAA0BonB,EAAc1iB,GAG3DmrC,GAAe7vC,EAFGonB,EAAKpe,MAAM,KAEEtE,EACnC,CA2BA,MAqKA,GArKgE0I,IAOzD,IAP0D,MAC7DpD,EAAK,UACLD,EAAS,UACTD,EAAS,OACTxK,EAAM,YACN0wC,EAAW,QACXtiC,GACHN,EACG,MAAOjE,EAAO8mC,IAAYxsC,EAAAA,EAAAA,UAAiC,CAAC,IAErDoD,EAAQqpC,IAAazsC,EAAAA,EAAAA,UAAwE,CAChGtD,KAAM,QACNw2B,MAAO,CAAC,KAGLwZ,EAAYC,IAAiB3sC,EAAAA,EAAAA,UAAoD,CAAC,GAiDzF,OA/CAI,EAAAA,EAAAA,YAAU,KAAO,IAADwsC,EAAAC,EACZ,MAAMC,EAEF,CAAC,EACCC,EAEF,CAAC,EACU,OAAXR,QAAW,IAAXA,GAAoB,QAATK,EAAXL,EAAaJ,eAAO,IAAAS,GAApBA,EAAsBI,KAAOC,MAAMC,QAAmB,OAAXX,QAAW,IAAXA,GAAoB,QAATM,EAAXN,EAAaJ,eAAO,IAAAU,OAAT,EAAXA,EAAsBG,OACjET,EAAYJ,QAAQa,IAAI/vC,SAAQ,CAACyH,EAAc+I,IAAiBq/B,EAAUr/B,GAAO,CAAE/Q,KAAM,SAAUgI,UAEnG6nC,EAAYJ,QAAQgB,OAAOlwC,SAAQ,CAAC2b,EAAInL,KACpCq/B,EAAUr/B,EAAM,GAAK,IACdmL,EACHlc,KAAMsvC,GAAMpzB,EAAGlc,MACfiR,MAAOiL,EAAGjM,MACVjI,KAAMkU,EAAGw0B,IAAMx0B,EAAGw0B,IAAIn+B,WAAa,GACnCM,KAAMqJ,EAAGw0B,IAAMx0B,EAAGw0B,IAAIn+B,WAAa,GACnC8lB,GAAI,EACJsY,SAAS,GAGG,SAAZz0B,EAAGlc,OACHowC,EAAUr/B,EAAM,GAAGvF,QAAS,EAC5B4kC,EAAUr/B,EAAM,GAAGJ,QAAU,YAC7By/B,EAAUr/B,EAAM,GAAG8B,KAAOqJ,EAAGw0B,IAAMx0B,EAAGw0B,IAAIn+B,WAAa,GACvD69B,EAAUr/B,EAAM,GAAG/I,KAAOkU,EAAGjM,MAC7BmgC,EAAUr/B,EAAM,GAAGI,KACf,krCAGQ,aAAZ+K,EAAGlc,OACHowC,EAAUr/B,EAAM,GAAG6/B,QAAS,QAGjBx/B,IAAX8K,EAAGw0B,MACHL,EAASt/B,EAAM,GAAK,IAGR,aAAZmL,EAAGlc,OACHqwC,EAASt/B,EAAM,IAAK,EACxB,IAEJk/B,EAAcI,GACdN,EAAU,CAAE/vC,KAAM,QAASw2B,MAAO4Z,IACtC,GACD,CAACP,KAGA/mC,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACHrC,QAASA,EACTsC,MAAM,EACNzH,GAAI,CAAE,qBAAsB5D,GAAOgG,OAAQrH,SAAA,EAE3C2F,EAAAA,EAAAA,MAAA,MAAIG,MAAOzE,GAAO0H,QAAQ/I,SAAA,EACtBkB,EAAAA,EAAAA,KAACwsC,EAAAA,SAAY,CACT5nC,MAAO,CACH9D,MAAO,kBACPG,SAAU,GACVwK,WAAY,GACZC,YAAa,MAGpBvH,EAAAA,KAAKC,EAAE,6BAA8BonC,EAAYruC,IAAImG,QAAQ,kBAAmB,SAErFtD,EAAAA,EAAAA,KAACgM,EAAAA,cAAa,CACVpH,MAAO,IAAKzE,GAAOqG,QAASrG,GAAOsG,gBACnCwF,UAAQ,EAAAnN,UAERkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOpF,KAAK+D,UACpBkB,EAAAA,EAAAA,KAAC2I,GAAQ,CACLzI,MAAO,EACP2I,MAAO,EACPmiC,QAAM,EACNp/B,MAAOzH,EAAAA,KAAKC,EAAE,QAAQtF,UAEtBkB,EAAAA,EAAAA,KAACuY,EAAAA,MAAK,CAAC3T,MAAOzE,GAAO4qC,WAAWjsC,UAC5BkB,EAAAA,EAAAA,KAACysC,EAAAA,YAAW,CACRrqC,KAAMupC,EACN7wC,OAAQA,EACRyK,UAAWA,EACXD,UAAWA,EACXE,MAAOA,EACPR,SAAU4mC,EACVvpC,OAAQA,EACR0C,QAASA,CAACumC,EAAcnT,IACpBsT,EAAS,IAAK9mC,EAAO,CAAC2mC,GAAOnT,IAGjC1yB,cAAY,EACZlB,SAAU,EACVxC,OAAK,EACL2D,WAAW,aACXrK,YAAaA,OACbqxC,iBAAkBA,OAClB9J,SAAS,EACTt+B,YAAY,QACZqoC,aAAchB,EACdhsC,OAAQ,CAAC,aAM7B8E,EAAAA,EAAAA,MAACkK,EAAAA,cAAa,CAAA7P,SAAA,EACVkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHrT,GAAG,4BACH+Q,QAAQ,YACRuC,WAAS,EACTtF,WAAY7M,OAAOC,KAAKgI,GAAO2F,MAAKghC,GAAQ3mC,EAAM2mC,KAClDx8B,QAASA,KACL,MAAMtT,EAAuC,CAAEu0B,OAAQ,CAAC,GACxD,IAAI6c,GAAM,EACVlwC,OAAOC,KAAK0F,EAAO8vB,OAAOj2B,SAASiP,IAC3B9I,EAAO8vB,MAAMhnB,GAAKs5B,SACbkH,EAAWxgC,IAAmC,aAA3B9I,EAAO8vB,MAAMhnB,GAAKxP,KAItC4vC,GAAc/vC,EAAK6G,EAAO8vB,MAAMhnB,GAAKZ,KAAMohC,EAAWxgC,KAHtDyhC,GAAM,EACN7vC,MAAM,WAAWsF,EAAO8vB,MAAMhnB,GAAKyB,UAIhCvK,EAAO8vB,MAAMhnB,GAAKZ,OACzBqiC,GAAM,EACNrB,GAAc/vC,EAAK6G,EAAO8vB,MAAMhnB,GAAKZ,KAAMohC,EAAWxgC,IAC1D,IAECyhC,GACD1jC,EAAQ1N,EACZ,EAEJsF,MAAM,UACNiO,WAAW/O,EAAAA,EAAAA,KAACgP,EAAAA,MAAS,IAAIlQ,SAExBqF,EAAAA,KAAKC,EAAE,YAEZpE,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHrT,GAAG,4BACH+Q,QAAQ,YACRwC,QAASA,IAAM5F,IACfpI,MAAM,OACNiO,WAAW/O,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,IAAInQ,SAExBqF,EAAAA,KAAKC,EAAE,gBAGX,EC9VF,SAASyoC,GAAcC,EAAmB3hC,GACrD,MAAM/I,GAAQtF,OAAO6S,eAAiB7S,OAAO8S,cAAcC,QAAQ1E,GACnE,GAAI/I,EACA,IACI0qC,EAAe/wC,KAAKoH,MAAMf,EAC9B,CAAE,MACE,CAIR,MAAOP,EAAO7C,IAAYC,EAAAA,EAAAA,UAAS6tC,GAOnC,MAAO,CAACjrC,EALiBwK,KACpBvP,OAAO6S,eAAiB7S,OAAO8S,cAAcyB,QAAQlG,EAAKpP,KAAKC,UAAUqQ,IAC1ErN,EAASqN,EAAS,KAGavP,OAAO6S,eAAiB7S,OAAO8S,cAAcC,QAAQ1E,GAC5F,CCyCA,MAAMhL,GAA8B,CAChCpF,KAAM,CAEFwF,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT+F,aAAc,EACdC,cAAe,UAEnBH,MAAO,CACHI,SAAU,IACVhG,MAAO,OACP4f,UAAW,IACX/Z,OAAQ,qBAEZI,KAAM,CACFlG,QAAS,QAEbmG,eAAgB,CACZC,SAAU,UAEdC,aAAc,CACVC,UAAW,QAEfE,WAAY,CACRC,WAAY,OACZ9F,SAAU,IAEdgG,sBAAuB,CACnBC,OAAQ,UAEZW,QAAS,CACLvH,QAAS,OACTI,WAAY,UAEhBoqC,YAAa,CACT9kC,gBAAiB,UACjBwS,QAAS,GACTvX,SAAU,IAEd8rC,uBAAwB,CACpB/kC,EAAG,MACH/G,SAAU,GACVX,QAAS,OACT8H,EAAG,MACHysB,OAAQ,sBACRxuB,aAAc,MACd3F,WAAY,SACZyX,WAAY,6BAEhB60B,YAAa,CACThnC,gBAAiB,YACjB6uB,OAAQ,qBAEZoY,QAAS,CACLj7B,OAAQ,WAEZkB,MAAO,CACH,UAAW,CACPlN,gBAAiB,cAGzBknC,eAAgB,CACZvsC,QAAS,GACTG,MAAO,WAEXqsC,aAAc,CACVxsC,QAAS,GACTG,MAAO,WAEXssC,SAAU,CACN7sC,MAAO,KAEXm0B,MAAO,CAGH,EAEJqW,WAAY,CACRxqC,MAAO,OACPwZ,aAAc,IAElBszB,cAAe,CACX/sC,QAAS,OACT4G,OAAQ,GACR4S,UAAW,GAEfwzB,UAAW,CACPhtC,QAAS,OAETI,WAAY,SACZO,SAAU,GACVwK,WAAY,EACZ3K,MAAO,UAEX2K,WAAY,CACRA,WAAY,IAEhB8hC,QAAS,CACL/0B,QAAS,EACTtS,WAAY,WAEhBsnC,aAAc,CACVjtC,MAAO,GACP6F,OAAQ,GACRc,OAAQ,GAEZpF,WAAY,CACR2J,WAAY,IAEhBgiC,gBAAiB,CACbntC,QAAS,OACTI,WAAY,WAuBpB,SAASiI,GAAQ9J,GAUsB,IAVrB,MACd+F,EAAK,SACL9F,EAAQ,MACRoB,EAAK,MACL2I,EAAK,MACL+C,EAAK,OACLo/B,EAAM,UACN0C,EAAS,MACTvjC,KACG1I,GACS5C,EACZ,OAAImsC,GACOhrC,EAAAA,EAAAA,KAAA,UAASyB,EAAK3C,SAAGoB,IAAU2I,GAAS/J,IAE3CoB,IAAU2I,GAENpE,EAAAA,EAAAA,MAAA,UACQhD,EACJmD,MAAOA,EAAM9F,SAAA,EAEbkB,EAAAA,EAAAA,KAACkM,EAAAA,OAAM,CACH7L,SAAS,SACTS,MAAM,UAAShC,UAEfkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,IAAKzE,GAAO2qC,YAAahqC,MAAQqJ,OAAkB4C,EAAV,SAAsBjO,SAAE8M,OAEjF5L,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACAc,MAAO8oC,EAAY,CAAEtnC,OAAQ,0BAAwB2G,EACrD/E,EAAG,EAAElJ,UAELkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MAAO8oC,EAAY,CAAEtnC,OAAQ,aAAW2G,EACxClH,UAAU,MAAK/G,SAEdA,SAMd,IACX,CAEA,MAAM6uC,GAAY,CACd,CACIpyC,GAAI,WACJqyC,SAAS,EACTC,gBAAgB,EAChBjhC,MAAO,YAEX,CACIrR,GAAI,OACJqyC,SAAS,EACTC,gBAAgB,EAChBjhC,MAAO,QAEX,CACIrR,GAAI,cACJqyC,SAAS,EACTC,gBAAgB,EAChBjhC,MAAO,eAEX,CACIrR,GAAI,SACJqyC,SAAS,EACTC,gBAAgB,EAChBjhC,MAAO,WAUf,SAASkhC,GAAkBrsC,GACvB,MAAM,YAAEssC,EAAW,SAAEC,EAAQ,iBAAEC,GAAqBxsC,EAEpD,OACIzB,EAAAA,EAAAA,KAAC04B,EAAAA,UAAS,CAAA55B,UACN2F,EAAAA,EAAAA,MAACszB,EAAAA,SAAQ,CAAAj5B,SAAA,EACLkB,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACzf,QAAQ,WAAU1Z,UACzBkB,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACLknB,cAAe0V,EAAc,GAAKA,EAAcC,EAChD58B,QAAS48B,EAAW,GAAKD,IAAgBC,EACzChpC,SAAWwP,GAA6By5B,EAAiBz5B,GACzD2qB,WAAY,CAAE,aAAc,2BAGnCwO,GAAUziC,KAAIgjC,IACXluC,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAEN0M,MAAOuJ,EAASN,QAAU,QAAU,OACpCp1B,QAAS01B,EAASL,eAAiB,OAAS,SAAS/uC,UAErDkB,EAAAA,EAAAA,KAACmuC,EAAAA,eAAc,CAAArvC,SAAEovC,EAASthC,SAJrBshC,EAAS3yC,UAUtC,CAEA,SAAS6yC,GAAahD,GAClB,IAAKA,EACD,MAAO,MAEX,GAAuB,kBAAZA,EACP,OAAOA,EAEX,IAAIznC,EAAO,GAkDX,OAhDIynC,EAAQa,MACRtoC,GAAQQ,EAAAA,KAAKC,EAAE,OACX8nC,MAAMC,QAAQf,EAAQa,MAAQb,EAAQa,IAAI3vC,QAC1CqH,GAAQ,KACJynC,EAAQa,IAAI3vC,QAAU,EACtBqH,GAAQynC,EAAQa,IAAIjP,KAAK,MAEzBr5B,GAAQQ,EAAAA,KAAKC,EAAE,aAAcgnC,EAAQa,IAAI3vC,SAEf,kBAAhB8uC,EAAQa,KAA2C,kBAAhBb,EAAQa,MACzDtoC,GAAQ,KACRA,GAAQynC,EAAQa,MAIpBb,EAAQxI,UACRj/B,IAASA,EAAO,KAAO,IAAMQ,EAAAA,KAAKC,EAAE,WAChC8nC,MAAMC,QAAQf,EAAQxI,UAAYwI,EAAQxI,QAAQtmC,QAClDqH,GAAQ,KACJynC,EAAQxI,QAAQtmC,QAAU,EAC1BqH,GAAQynC,EAAQxI,QAAQ5F,KAAK,MAE7Br5B,GAAQQ,EAAAA,KAAKC,EAAE,aAAcgnC,EAAQxI,QAAQtmC,SAEf,kBAApB8uC,EAAQxI,SAAmD,kBAApBwI,EAAQxI,UAC7Dj/B,GAAQ,KACRA,GAAQynC,EAAQxI,UAIpBwI,EAAQiD,WACR1qC,IAASA,EAAO,KAAO,IAAMQ,EAAAA,KAAKC,EAAE,YAChC8nC,MAAMC,QAAQf,EAAQiD,WAAajD,EAAQiD,SAAS/xC,QACpDqH,GAAQ,KACJynC,EAAQiD,SAAS/xC,QAAU,EAC3BqH,GAAQynC,EAAQiD,SAASrR,KAAK,MAE9Br5B,GAAQQ,EAAAA,KAAKC,EAAE,aAAcgnC,EAAQiD,SAAS/xC,SAEf,kBAArB8uC,EAAQiD,UAAqD,kBAArBjD,EAAQiD,WAC9D1qC,GAAQ,KACRA,GAAQynC,EAAQiD,WAIpBjD,EAAQznC,OACRA,IAASA,EAAO,KAAO,IAAMynC,EAAQznC,MAElCA,CACX,CAg3BA,SAj2BA,SAAwBiF,GAWe,IAAD0lC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAA,IAXb,UACrBrpC,EAAS,UACTD,EAAS,OACTxK,EAAM,WACN4K,EAAU,YACVi7B,EAAW,gBACXkO,EAAe,WACfnwC,EAAU,MACVD,EAAK,QACLyK,EAAO,MACP1D,GACmBoD,EACnB,MAAOkmC,EAAMC,IAAW9vC,EAAAA,EAAAA,UAAiB,IAClC+vC,EAAaC,IAAkBhwC,EAAAA,EAAAA,UAClC,CAAC,IAEEiwC,EAAiBC,IAAsBlwC,EAAAA,EAAAA,UAAkC,CAAC,IAC1EmwC,EAAgBC,IAAqBpwC,EAAAA,EAAAA,WAAkB,IACvDqwC,EAAeC,IAAoBtwC,EAAAA,EAAAA,UAAiC,OAE3EI,EAAAA,EAAAA,YAAU,MACNmd,iBACI,MAAMgzB,QAAuF10C,EAAOuI,OAChG,6BACA,cACA,MAEEosC,EAAuC,CAAC,EACxCC,GACC5yC,OAAe6S,eAA6B7S,OAAO8S,cAAcC,QAChE,+BACC,KACT,IAAI8/B,EACJ,GAAID,EACA,IACIC,EAAgB5zC,KAAKoH,MAAMusC,EAC/B,CAAE,MACEC,EAAgB,IACpB,CAGJjzC,OAAOC,KAAK6yC,GAAYtzC,SAAQiP,IAExBskC,EAAYtkC,GADZwkC,EACmBA,EAAcxkC,GAEN,WAARA,CACvB,IAGJgkC,EAAmBM,GACnBR,EAAeO,EACnB,EAEKI,GAAYhzC,OAAMC,GAAK2kB,QAAQtM,KAAK,4BAA4BrY,MAAK,GAC3E,CAAC/B,KAEJuE,EAAAA,EAAAA,YAAU,MACNmd,iBACI,MAAMqzB,QAAsB/0C,EAAO8rB,UAAU,yBACvB7Z,IAAlB8iC,GACAN,EAAiBM,EAEzB,EAEAC,GAAclzC,OAAMC,GAAK2kB,QAAQtM,KAAK,iCAAiCrY,MAAK,GAC7E,CAAC/B,IAEJ,MAAOi1C,EAAYC,IAAiB/wC,EAAAA,EAAAA,UAAkC,CAAC,IAChEgxC,EAAkBC,IAAuBjxC,EAAAA,EAAAA,WAAS,IAClDkxC,EAAeC,IAAoBnxC,EAAAA,EAAAA,UAAiC,CAAC,IAE5EI,EAAAA,EAAAA,YAAU,KACNZ,EAAMvC,SAAQsgB,UAAqC,IAA9B,IAAErf,GAAsB6L,EACzC,MAAMqnC,QAAmBv1C,EAAO+H,SAAS,GAAG1F,WAE5C6yC,GAAch4B,IAAI,IACXA,EACH,CAAC7a,MAAOkzC,GAAiC,OAAnBA,EAAWruC,QAAyBquC,EAAWruC,OACtE,IAGHtF,OAAOC,KAAKozC,GAAYlxB,QAAO1T,GAAO4kC,EAAW5kC,KAAM7O,OAAS,GAChE4zC,GAAoB,EACxB,GACD,CAACzxC,EAAO3D,EAAQi1C,IAEnB,MAAOO,EAAcC,IAAmBtxC,EAAAA,EAAAA,UAAS,IAC1CuxC,EAAiBC,IAAsBxxC,EAAAA,EAAAA,UAAS,IAChDyxC,EAAgBC,IAAqB1xC,EAAAA,EAAAA,UAAS,IAC9C2xC,EAAaC,IAAkB5xC,EAAAA,EAAAA,WAAS,IACxC6xC,EAAkBC,IAAuB9xC,EAAAA,EAAAA,UAAS,IAClDmT,EAAU4+B,IAAe/xC,EAAAA,EAAAA,UAAmB,KAC5CgyC,EAAiBC,KAAsBjyC,EAAAA,EAAAA,WAAS,IAChDkyC,GAAgBC,KAAqBnyC,EAAAA,EAAAA,UAAS,IAC9CoyC,GAAeC,KAAoBryC,EAAAA,EAAAA,UAA8C,CAAC,IAClFsyC,GAASC,KAAcvyC,EAAAA,EAAAA,UAAS,YAChCwyC,GAAWC,IAAgB7E,IAAc,EAAM,wBAC/C8E,GAASC,IAAc/E,IAAc,EAAM,sBAC3CgF,GAAmBC,KAAwB7yC,EAAAA,EAAAA,UAA4D,OACvG8yC,GAAkBC,KAAuB/yC,EAAAA,EAAAA,UAA4D,MAEtGkL,GAAsB,SAAd5E,GAEP0sC,GAAuBC,KAA4BjzC,EAAAA,EAAAA,UAA0C,CAAE8wB,OAAQ,CAAC,KAExGyW,GAAM2L,KAAWlzC,EAAAA,EAAAA,UAA8B,CAAC,IAChDmzC,GAAeC,KAAoBpzC,EAAAA,EAAAA,WAAS,IAC5CqzC,GAAiBC,KAAsBtzC,EAAAA,EAAAA,UAAS,GAEjDuzC,GAAiBA,CAACjoC,EAAcrK,KAClC,GAAKA,EAGL,OAAQqK,GACJ,IAAK,2BACDgmC,EAAgBrwC,EAAM8B,KACtB,MACJ,IAAK,8BACDyuC,EAAmBvwC,EAAM8B,KACzB,MACJ,IAAK,6BACD2uC,EAAkBzwC,EAAM8B,KACxB,MACJ,IAAK,0BACD6uC,EAAe3wC,EAAM8B,KACrB,MACJ,IAAK,+BACD+uC,EAAoB7wC,EAAM8B,KAIlC,EAEEywC,GAA2BA,CAACl3C,EAAYC,KACrCA,GAGM,qBAAPD,GACAg0C,EAAiB/zC,EACrB,GAEJ6D,EAAAA,EAAAA,YAAU,KACDvE,EAAOyB,gBAAgB,mBAAoBk2C,IAC3C33C,EAAOgI,eAAe,2BAA4B0vC,IAClD13C,EAAOgI,eAAe,8BAA+B0vC,IACrD13C,EAAOgI,eAAe,6BAA8B0vC,IACpD13C,EAAOgI,eAAe,0BAA2B0vC,IACjD13C,EAAOgI,eAAe,+BAAgC0vC,IAEpD,KACE13C,EAAOoD,kBAAkB,mBAAoBu0C,IAC7C33C,EAAOgvC,iBAAiB,2BAA4B0I,IACpD13C,EAAOgvC,iBAAiB,8BAA+B0I,IACvD13C,EAAOgvC,iBAAiB,6BAA8B0I,IACtD13C,EAAOgvC,iBAAiB,0BAA2B0I,IACnD13C,EAAOgvC,iBAAiB,+BAAgC0I,GAAe,IAEjF,CAAC13C,IAEJ,MAIM43C,GAAeA,CAACn3C,EAAY6G,IAC9BtH,EAAO43C,aAAan3C,EAAI6G,GAAMxF,OAAO+H,GAAe7H,OAAOC,MAAM4H,KA0C/DguC,GAAwBA,CAACC,EAAiBz2C,KAA0B,IAAD02C,EAAAC,EACrE,MAAMC,EAAqD,OAAbzD,QAAa,IAAbA,GAAqB,QAARuD,EAAbvD,EAAevf,cAAM,IAAA8iB,OAAR,EAAbA,EAAuBG,aAAa1oC,MAC9E2oC,GAAMA,EAAG91C,MAAQy1C,IAEfp3C,EAAgCu3C,EAAch3C,KAAKoH,MAAMpH,KAAKC,UAAU+2C,IAAgB,KAC9F,IAAI/X,GAAU,EAgBA,IAADkY,GAfN,OAAH13C,QAAG,IAAHA,GAAY,QAATs3C,EAAHt3C,EAAK4vC,eAAO,IAAA0H,GAAZA,EAAc9X,SAAmC,QAAxBx/B,EAAI4vC,QAAQpQ,UACrCA,GAAU,EACLx/B,EAAImE,OAAOwzC,aACZ33C,EAAImE,OAAOwzC,WAAa,uDAAuD33C,EAAImE,OAAO4K,uBAE1F/O,EAAImE,OAAOwzC,YAA+C,kBAA1B33C,EAAImE,OAAOwzC,aAC3C33C,EAAImE,OAAOwzC,WAAa33C,EAAImE,OAAOwzC,WAAWhvC,EAAAA,KAAK0I,gBAAkBrR,EAAImE,OAAOwzC,WAAWtvC,IAE1FrI,EAAImE,OAAOwzC,WAAsBv1C,SAAS,gBAC3CpC,EAAImE,OAAOwzC,WAAc33C,EAAImE,OAAOwzC,WAC/B7vC,QAAQ,aAAc,6BACtBA,QAAQ,SAAU,OAI3B03B,GACe,QAAfkY,EAAI13C,EAAI4vC,eAAO,IAAA8H,GAAXA,EAAa9G,OACb4F,GAAoB,CAAE71C,KAAIX,QAE1BW,IAGJ21C,GAAqB,CAAE31C,KAAIX,OAC/B,EAGE43C,GAAmBA,CAAC73C,EAAYwnC,KAClC,MAAMl6B,EAAQuJ,EAASpU,QAAQzC,GAAM,EACrC+1C,IAAiB+B,IAAM,IAAUA,EAAQ,CAACxqC,GAAQ,YAE9Ck6B,GACAoP,IAAQmB,IAAM,IAAUA,EAAQ,CAAClhC,EAASvJ,EAAQ,IAAK,CAAC1E,EAAAA,KAAKC,EAAE2+B,QAG/D3wB,EAAS9V,OAASuM,EAClBsF,YACI,IACIwkC,GAAsBvgC,EAASvJ,IAAQ,KACnCuoC,GAAkBvoC,EAAQ,GAC1B2oC,GAAW,WACXN,IAAmB,EAAK,KAEhC,KAGJmB,IAAiB,EACrB,EAGEkB,GAAexB,IACjB/xC,EAAAA,EAAAA,KAACwzC,GAAmB,CAChB14C,OAAQA,EACR0K,MAAOA,EACPD,UAAWA,EACXD,UAAWA,EACXkmC,YAAauG,GAAiBv2C,IAC9B0N,QAAS+iB,IACL,MAAM,GAAE9vB,GAAO41C,IACT,IAAEv2C,GAAQu2C,GAChBC,GAAoB,MAEhB/lB,GACAimB,GAAyBjmB,GACzB9vB,KAEAi3C,GAAiB53C,EAAI2B,IAAK,uCAC9B,IAGR,KAkBEs2C,GAAgB5B,IAClB7xC,EAAAA,EAAAA,KAAC0zC,GAAAA,EAAa,CACVC,YAAa9B,GAAkBr2C,IAAI4vC,QAAQpQ,QAC3C/sB,IAAK4jC,GAAkBr2C,IAAImE,OAAOwzC,WAClCjqC,QAAS3F,IAAW,IAADqwC,EACf,MAAM,GAAEz3C,EAAE,IAAEX,GAAQq2C,GACpBC,GAAqB,MAChBvuC,EAGiB,QAAfqwC,EAAIp4C,EAAI4vC,eAAO,IAAAwI,GAAXA,EAAaxH,OACpB4F,GAAoB,CAAE71C,KAAIX,QAE1BW,IAJAi3C,GAAiB53C,EAAI2B,IAAK,8BAK9B,IAGR,KAEJ,OACIsH,EAAAA,EAAAA,MAACovC,EAAAA,EAAa,CAACruC,MAAOA,EAAM1G,SAAA,CACvB20C,GACAF,IACD9uC,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACHrC,QAASA,CAACsL,EAAOuuB,KACE,kBAAXA,GAAyC,kBAAXA,GAC9B75B,GACJ,EAEJsC,MAAM,EACNzH,GAAI,CAAE,qBAAsB5D,GAAOgG,OAAQrH,SAAA,EAE3C2F,EAAAA,EAAAA,MAAA,MAAIG,MAAOzE,GAAO0H,QAAQ/I,SAAA,EACtBkB,EAAAA,EAAAA,KAAC8zC,EAAAA,WAAc,CACXlvC,MAAO,CACH9D,MAAO,kBACPG,SAAU,GACVwK,WAAY,GACZC,YAAa,MAGpBvH,EAAAA,KAAKC,EAAE,iCAEZpE,EAAAA,EAAAA,KAAC2xB,EAAAA,QAAO,CACJ/sB,MAAOzE,GAAOotC,QACdwG,kBAAgB,EAChBlkB,WAAYif,EAAKhwC,SAjPnB,CAAC,iBAAkB,mBAAoB,wBAmP9BoM,KAAI0B,IACP5M,EAAAA,EAAAA,KAAC4xB,EAAAA,KAAI,CAAA9yB,UACDkB,EAAAA,EAAAA,KAAC6xB,EAAAA,UAAS,CAAA/yB,SAAEqF,EAAAA,KAAKC,EAAEwI,MADZA,QAKnB5M,EAAAA,EAAAA,KAACgM,EAAAA,cAAa,CACVpH,MAAO,IAAKzE,GAAOqG,QAASrG,GAAOsG,gBACnCwF,UAAQ,EAAAnN,UAER2F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOpF,KAAK+D,SAAA,EACpBkB,EAAAA,EAAAA,KAAC2I,GAAQ,CACL/D,MAAO,IAAKzE,GAAOwG,aAAc7F,MAAOqJ,GAAQ,aAAU4C,GAC1D7M,MAAO4uC,EACPjmC,MAAO,EACPsB,MAAOA,GACPyB,MAAOzH,EAAAA,KAAKC,EAAE,iCAAiCtF,SAE7CswC,EAqCEwB,IACInsC,EAAAA,EAAAA,MAAA,OAAA3F,SAAA,CACK0xC,GAAmB,GACd,qBAAqBM,KACrB,oBAAoBN,KACzBpB,IACGpvC,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,CACXiI,QAAQ,cACRpM,MAAOswC,GAAmB,GAAKM,EAAmBN,IAGzDA,GAAmB,GACd,GAAGE,qBACH,GAAGJ,wBAjDjB7rC,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA5F,SAAA,CACK,KACDkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2G,WAAWhI,SAAEqF,EAAAA,KAAKC,EAAE,qBACzB,OAAbkrC,QAAa,IAAbA,GAAqB,QAARhB,EAAbgB,EAAevf,cAAM,IAAAue,OAAR,EAAbA,EAAuB0F,YACpBh0C,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO8G,sBAAsBnI,SACpCqF,EAAAA,KAAKC,EACF,kBACAJ,EAAAA,MAAMqiC,WAAW,IAAIpkC,KAAKqtC,EAAcvf,OAAOikB,UAAWtuC,OAItE1F,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,IAAKzE,GAAO2qC,YAAahqC,MAAQqJ,QAAkB4C,EAAV,SAAsBjO,SACtEqF,EAAAA,KAAKC,EAAE,4BAEX1H,OAAOC,KAAKqyC,GAAa9jC,KAAIC,IAC1B1G,EAAAA,EAAAA,MAAA,OAAA3F,SAAA,EACIkB,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACLC,QAAS89B,EAAgB/jC,GACzB5B,SAAU6lC,EACVpqC,SAAUA,CAACyM,EAAGvR,KACV,MAAM+zC,EAAqBl4C,KAAKoH,MAC5BpH,KAAKC,UAAUkzC,IAEnB+E,EAAmB9oC,GAAOjL,GACxBpD,OAAe6S,eAAiB7S,OAAO8S,cAAcyB,QACnD,6BACAtV,KAAKC,UAAUi4C,IAEnB9E,EAAmB8E,EAAmB,IAG7C9oC,IAhBKA,WAuC1B1G,EAAAA,EAAAA,MAACkE,GAAQ,CACL/D,MAAOzE,GAAOwG,aACdzG,MAAO4uC,EACPjmC,MAAO,EACP+C,MACiB,OAAb0jC,QAAa,IAAbA,GAAqB,QAARf,EAAbe,EAAevf,cAAM,IAAAwe,GAArBA,EAAuByF,SACjB7vC,EAAAA,KAAKC,EACD,mDACAJ,EAAAA,MAAMqiC,WAAW,IAAIpkC,KAAKqtC,EAAcvf,OAAOikB,UAAWtuC,IAE9DvB,EAAAA,KAAKC,EAAE,kCAChBtF,SAAA,EAED2F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOktC,cAAcvuC,SAAA,EAC7B2F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOmtC,UAAUxuC,SAAA,EACzBkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAQ+sC,QAA+B5kC,EAArB,CAAEjM,MAAO,SAAsBhC,SACjDqF,EAAAA,KAAKC,EAAE,mBAEZpE,EAAAA,EAAAA,KAACk0C,EAAAA,OAAM,CACH9iC,QAASugC,GACT3sC,SAAUnI,GAAK+0C,GAAW/0C,EAAEmR,OAAOoD,SACnCtQ,MAAM,aAEVd,EAAAA,EAAAA,KAAA,OAAK4E,MAAO+sC,GAAU,CAAE7wC,MAAO,cAAYiM,EAAUjO,SAAEqF,EAAAA,KAAKC,EAAE,sBAElEK,EAAAA,EAAAA,MAAA,OAAKG,MAAO,IAAKzE,GAAOmtC,aAAcntC,GAAOsL,YAAa3M,SAAA,EACtDkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAQ6sC,QAAiC1kC,EAArB,CAAEjM,MAAO,SAAsBhC,SACnDqF,EAAAA,KAAKC,EAAE,qBAEZpE,EAAAA,EAAAA,KAACk0C,EAAAA,OAAM,CACH9iC,QAASqgC,GACTzsC,SAAUnI,GAAK60C,GAAa70C,EAAEmR,OAAOoD,SACrCtQ,MAAM,aAEVd,EAAAA,EAAAA,KAAA,OAAK4E,MAAO6sC,GAAY,CAAE3wC,MAAO,cAAYiM,EAAUjO,SAClDqF,EAAAA,KAAKC,EAAE,2BAIpBpE,EAAAA,EAAAA,KAACuY,EAAAA,MAAK,CAAC3T,MAAOzE,GAAO4qC,WAAWjsC,UAC5BkB,EAAAA,EAAAA,KAAC05B,EAAAA,eAAc,CAAA56B,UACX2F,EAAAA,EAAAA,MAACg0B,EAAAA,MAAK,CACF7zB,MAAOzE,GAAOu0B,MACdrkB,KAAK,QAAOvR,SAAA,EAEZkB,EAAAA,EAAAA,KAAC8tC,GAAiB,CACdC,YAAa37B,EAAS9V,OACtB2xC,iBAjSVz5B,IAC1B,GAAIA,EAAMxG,OAAOoD,QAAjB,CAA2B,IAAD+iC,EAAAC,EACtB,MAAMC,EAA2B,OAAb/E,QAAa,IAAbA,GAAqB,QAAR6E,EAAb7E,EAAevf,cAAM,IAAAokB,GAAc,QAAdC,EAArBD,EAAuBnB,oBAAY,IAAAoB,OAAtB,EAAbA,EAAqClpC,KAAIopC,GAAKA,EAAEn3C,MACpE6zC,EAAYqD,EAEhB,MACArD,EAAY,GAAG,EA4RqBhD,UAAuB,OAAbsB,QAAa,IAAbA,GAAqB,QAARd,EAAbc,EAAevf,cAAM,IAAAye,GAAc,QAAdC,EAArBD,EAAuBwE,oBAAY,IAAAvE,OAAtB,EAAbA,EAAqCnyC,SAAU,KAE7D0D,EAAAA,EAAAA,KAAC24B,EAAAA,UAAS,CAAA75B,SACQ,OAAbwwC,QAAa,IAAbA,GAAqB,QAARZ,EAAbY,EAAevf,cAAM,IAAA2e,GAAc,QAAdC,EAArBD,EAAuBsE,oBAAY,IAAArE,OAAtB,EAAbA,EACK9vB,QAAQhH,IACW,IAAD08B,EAGFC,EAHd,OAAK/C,KAGAE,MACS,OAAF95B,QAAE,IAAFA,GAAW,QAAT28B,EAAF38B,EAAIuzB,eAAO,IAAAoJ,GAAXA,EAAaC,OAHH,QAAXF,EAAC18B,EAAGuzB,eAAO,IAAAmJ,GAAVA,EAAYG,OAKb,IAEdxpC,KAAI,CAAC1P,EAAUkR,KAAW,IAAAioC,EAAAC,EAAAC,EAtSnDtqC,EAAc2tB,EAsSqC,OACvBzzB,EAAAA,EAAAA,MAACszB,EAAAA,SAAQ,CACL7kB,OAAK,EACLnK,KAAK,WAELqJ,SAAqB,QAAbuiC,EAAEn5C,EAAI4vC,eAAO,IAAAuJ,OAAA,EAAXA,EAAaD,OAAO51C,SAAA,EAE9BkB,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAACzf,QAAQ,WAAU1Z,UACzBkB,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACLC,SA/SxC7G,EA+S4D/O,EAAI2B,IA/SlD+6B,EA+SuD9lB,EA/S5B8lB,EAAIt6B,SAAS2M,IAgTduE,QAASjS,GA9SjDi4C,EAAC7qC,EAAaM,EAAc2tB,EAAe6c,KAC3D,MAAMC,EAAgB9c,EAAIl6B,QAAQuM,GAClC,IAAI8pC,EAAwB,IAEL,IAAnBW,EACAX,EAAcA,EAAYn1B,OAAOgZ,EAAK3tB,GACb,IAAlByqC,EACPX,EAAcA,EAAYn1B,OAAOgZ,EAAI+c,MAAM,IACpCD,IAAkB9c,EAAI57B,OAAS,EACtC+3C,EAAcA,EAAYn1B,OAAOgZ,EAAI+c,MAAM,GAAI,IACxCD,EAAgB,IACvBX,EAAcA,EAAYn1B,OAAOgZ,EAAI+c,MAAM,EAAGD,GAAgB9c,EAAI+c,MAAMD,EAAgB,KAG5FD,EAAKV,EAAY,EAiS2CS,CAAYj4C,EAAGrB,EAAI2B,IAAKiV,EAAU4+B,QAI9ChxC,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACNpyB,UAAU,KACVgF,MAAM,MACN2N,QAAQ,OAAM1Z,UAEd2F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOstC,gBAAgB3uC,SAAA,EAC/BkB,EAAAA,EAAAA,KAACqgB,EAAAA,OAAM,CACH/T,QAAQ,SACR4T,IAAK1kB,EAAI2B,IAAImG,QAAQ,kBAAmB,IACxC2c,IAAgC,QAA7B20B,EAAEl2C,EAAWlD,EAAImE,OAAO4K,aAAK,IAAAqqC,OAAA,EAA3BA,EAA6B9nC,KAClClI,MAAOzE,GAAOqtC,gBAElBxtC,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2B,WAAWhD,SACzBtD,EAAI2B,IAAImG,QAAQ,kBAAmB,YAIhDtD,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAAC0M,MAAM,OAAM7lC,SAClBmxC,GACGjwC,EAAAA,EAAAA,KAACk1C,EAAAA,eAAc,CACXnlC,WAAS,EACT4O,KAAMxa,EAAAA,KAAK0I,cACX8M,KAAMlb,EACN2F,EAAGD,EAAAA,KAAKC,EACRlE,MAAOiwC,EAAc30C,EAAI2B,MAAQwjC,EACjCp7B,UAAWA,EACXP,SAAUhD,GACNouC,EAAiB,IACVD,EACH,CAAC30C,EAAI2B,KAAM6E,MAKvB,OAGRhC,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CAAC0M,MAAM,OAAM7lC,SAAEsvC,GAAa5yC,EAAI4vC,YAC1CprC,EAAAA,EAAAA,KAACi4B,EAAAA,UAAS,CACN0M,MAAM,QACNnsB,QAAQ,WAAU1Z,UAElBkB,EAAAA,EAAAA,KAACmR,EAAAA,SAAQ,CACLC,UAAc,OAAH5V,QAAG,IAAHA,GAAY,QAATq5C,EAAHr5C,EAAK4vC,eAAO,IAAAyJ,IAAZA,EAAcJ,KACzB3lC,QAASA,KACL,MAAMkkC,EAAej3C,KAAKoH,MACtBpH,KAAKC,UACY,OAAbszC,QAAa,IAAbA,OAAa,EAAbA,EAAevf,OAAOijB,eAI9BA,EAAatmC,GAAK0+B,QAAU,IACrB4H,EAAatmC,GAAK0+B,QACrBqJ,KAAMzB,EAAatmC,GAAK0+B,QAAQqJ,KAG/B/B,GAAa,mBAAoB,CAClC3iB,OAAQ,CAAEijB,iBACZ,QArETx3C,EAAI2B,IAyEF,iBAOvC6C,EAAAA,EAAAA,KAAC2I,GAAQ,CACLzI,MAAO4uC,EACPjmC,MAAO,EACPjE,MAAO,IAAKzE,GAAOwG,aAAcP,OAAQ,QACzCsnC,WAAS,EACT9hC,MAAOzH,EAAAA,KAAKC,EAAE,oBAAoBtF,UAElC2F,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAEtE,QAAS,OAAQ8F,OAAQ,QAAStH,SAAA,EAC5CkB,EAAAA,EAAAA,KAAA,OAAAlB,SACKsT,EAASlH,KAAI,CAAC2M,EAAInL,KAAG,IAAAyoC,EAAA,OAClB1wC,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MAEViJ,QAASsjC,GAAgB,IAAMG,GAAmB7lC,QAAOK,EACzDhJ,GAAI,IACG5D,GAAO4sC,0BACNqF,GAAgBjyC,GAAO8sC,aAAUlgC,KACjCqlC,GAAgBjyC,GAAO+S,WAAQnG,KAC/BqlC,IAAiBE,KAAoB5lC,EACnCvM,GAAO6sC,iBACPjgC,GACRjO,SAAA,EAEFkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOitC,SAAStuC,UACxB2F,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOstC,gBAAgB3uC,SAAA,EAC/BkB,EAAAA,EAAAA,KAACqgB,EAAAA,OAAM,CACH/T,QAAQ,SACR4T,IAAKrI,EAAGvU,QAAQ,kBAAmB,IACnC2c,IAC+D,QAD5Dk1B,EACCz2C,EAAWmZ,EAAGvU,QAAQ,kBAAmB,IAAIkB,MAAM,KAAK,WAAG,IAAA2wC,OAAA,EAA3DA,EACMroC,KAEVlI,MAAOzE,GAAOqtC,gBAElBxtC,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO2B,WAAWhD,SACzB+Y,EAAGvU,QAAQ,kBAAmB,WAI1C6tC,KAAmBzkC,EAAM,IAAM2kC,GAAc3kC,EAAM,KAChD1M,EAAAA,EAAAA,KAAC0kC,EAAAA,iBAAgB,CAACr0B,KAAM,KAEA,UAA3BghC,GAAc3kC,EAAM,IACjB1M,EAAAA,EAAAA,KAACo1C,EAAAA,cAAiB,CAACxwC,MAAOzE,GAAOgtC,eACN,YAA3BkE,GAAc3kC,EAAM,IACpB1M,EAAAA,EAAAA,KAACq1C,EAAAA,mBAAsB,CAACzwC,MAAOzE,GAAO+sC,iBACtC,OAlCCr1B,EAmCH,MAGbs5B,KAAmBF,GAAmBmB,MACnCpyC,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAE8B,SAAU,SAAUnG,MAAO,sBAAuBzB,UAC5DkB,EAAAA,EAAAA,KAACsQ,EAAAA,EAAO,CACJC,WAAS,EAETC,OAAK,EACL9F,KAAMi2B,EACN2U,SACIlD,GAAgB5L,GAAKp0B,EAASkgC,MAAqB,CAAC,WAAa,KAErEiD,aAAcnD,GACdt3C,OAAQA,EACRsJ,EAAGD,EAAAA,KAAKC,EACRyM,IACIuhC,GACM,GACA,GAAGb,MACCn/B,EAAS++B,GAAiB,GACrB7tC,QAAQ,kBAAmB,IAC3BkB,MAAM,KAAK,KAG9BsM,WAAYA,CAACW,EAAG+jC,KACZ,IAAIpzC,EAAOrG,KAAKoH,MACZpH,KAAKC,UACY,OAAbszC,QAAa,IAAbA,OAAa,EAAbA,EAAevf,OAAOijB,aAAa1oC,MAC9B9O,GAAaA,EAAI2B,MAAQiV,EAAS++B,GAAiB,cAIzD/uC,EAAKgpC,QAEZ,IAAIqK,EAAYrzC,EAAKjF,IAAIqH,MAAM,KAC/BixC,EAAU5M,MACV4M,EAAYA,EAAUzY,KAAK,KACtBliC,EAAO8rB,UAAU6uB,GAAWj5C,MAAMhB,IACnC4G,EAAO,IAAK5G,KAAQ4G,GACpBA,EAAKzC,OAASjD,OAAO+zB,OAAOj1B,EAAImE,OAAQyC,EAAKzC,QAC7CyC,EAAK2tB,OAASrzB,OAAO+zB,OAAOj1B,EAAIu0B,OAAQ3tB,EAAK2tB,QAC7C3tB,EAAKzG,KAAO,WAGRkzC,IACAzsC,EAAKzC,OAAO+1C,SAAW7G,GAE3BzsC,EAAKzC,OAAO+1C,SAAWtzC,EAAKzC,OAAO+1C,UAAY,OAG3CzD,GAAsBliB,QACtBrzB,OAAOC,KAAKs1C,GAAsBliB,QAAQzzB,SAE1CI,OAAO+zB,OAAOruB,EAAK2tB,OAAQkiB,GAAsBliB,QACjDmiB,GAAyB,CAAEniB,OAAQ,CAAC,KAEpCkgB,GAAoBE,EAAc/tC,EAAKjF,OACvCiF,EAAKzC,OAAO+K,KAAOylC,EAAc/tC,EAAKjF,MAIrCu1C,GAAatwC,EAAKjF,IAAKiF,GAAM5F,MAAK,KACnC,GAAI20C,GAAiB/+B,EAAS9V,OAE1Bq2C,GAAsBvgC,EAAS++B,KAAiB,KAC5CC,GAAkBD,GAAiB,GACnCK,GAAW,UAAU,IAEzBW,GAAQ,IACD3L,GACH,CAACp0B,EAAS++B,GAAiB,IAAKqE,IAEpClE,GAAiB,IACVD,GACH,CAACF,IAAiB,gBAEnB,CACHgB,GAAQ,IACD3L,GACH,CAACp0B,EAAS++B,GAAiB,IAAKqE,IAEpClE,GAAiB,IACVD,GACH,CAACF,IAAiB,YAEtBoB,GAAmBpB,GAAiB,GACpC,MAAMtB,EAAgB9zC,KAAKoH,MACvBpH,KAAKC,UAAUszC,IAEfO,IACAA,EAAc9f,OAAOijB,aACjBnD,EAAc9f,OAAOijB,aAAan0B,QAC9BunB,IAA+B,IAA9B,IAAEjpC,GAAsBipC,EACrB,MAAM97B,EAAO8H,EAAS9H,MAClBuN,GAAMA,IAAO1a,IAEjB,OAAKmN,GAMK,YAFN+mC,GACIj/B,EAASpU,QAAQsM,GAAQ,EACd,IAI1BxP,EAAOo2B,UACR,mBACA2e,IAGRwC,IAAiB,GACjBv1C,OAAOC,MAAMoH,EAAAA,KAAKC,EAAE,YACxB,IACF,GACJ,EAENsM,UAAWA,CAACmH,EAAI89B,KACZ,GAAW,KAAP99B,GAAyB,YAAZ05B,GAIjB,GAAIn/B,EAAS9V,OAAS60C,IAA8B,WAAZI,GACpCoB,GAAsBvgC,EAAS++B,KAAiB,IAC5CC,GAAkBD,GAAiB,KAEvCG,GAAiB,IAAKD,GAAe,CAACF,IAAiB,cACpD,CACH,GAAI/+B,EAAS9V,OAAS60C,GAClBG,GAAiB,IACVD,GACH,CAACF,IAAiB,UAEtBwB,GAAsBvgC,EAAS++B,KAAiB,IAC5CC,GAAkBD,GAAiB,KAEvCK,GAAW,WACXW,GAAQ,IAAK3L,GAAM,CAACp0B,EAAS++B,GAAiB,IAAKwE,QAChD,CACHrE,GAAiB,IACVD,GACH,CAACF,IAAiB,UAEtBgB,GAAQ,IAAK3L,GAAM,CAACp0B,EAAS++B,GAAiB,IAAKwE,IACnDtD,IAAiB,GACjBE,GAAmBpB,GAAiB,GACpC,MAAMtB,EAAgB9zC,KAAKoH,MAAMpH,KAAKC,UAAUszC,IAC5CO,IACAA,EAAc9f,OAAOijB,aACjBnD,EAAc9f,OAAOijB,aAAan0B,QAC9B+2B,IAA+B,IAA9B,IAAEz4C,GAAsBy4C,EACrB,MAAMtrC,EAAO8H,EAAS9H,MAAKurC,GAAOA,IAAQ14C,IAC1C,OAAKmN,GAMK,YAFN+mC,GACIj/B,EAASpU,QAAQsM,GAAQ,EACd,IAI1BxP,EAAOo2B,UAAU,mBAAoB2e,GAElD,CACA/yC,OAAOC,MAAM,SAASqV,EAAS++B,GAAiB,KACpD,MA/CIK,GAAW,SA+Cf,GAhKC,GAAGL,MAAkBI,mBAyKtD9sC,EAAAA,EAAAA,MAACkK,EAAAA,cAAa,CAAA7P,SAAA,CACTgwC,EAAO,GAAc,IAATA,IACT9uC,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,SAAmB,IAATulC,EACVhgC,QAASA,KACQ,IAATggC,IA9f5BkC,EAAY,IACZE,IAAmB,GACnBmB,IAAiB,GACjBjB,GAAkB,GAClBI,GAAW,WACXF,GAAiB,CAAC,IAhIOvC,EAAQD,EAAO,EA4nBN,EAEdhuC,MAAM,OACNiO,WAAW/O,EAAAA,EAAAA,KAAC81C,EAAAA,eAAkB,IAAIh3C,SAEjCqF,EAAAA,KAAKC,EAAE,UAGN,IAAT0qC,IACG9uC,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACRuC,WAAS,EACTtF,SAAU6lC,EACVtgC,QApoBA0N,UACpB6yB,GAAkB,GAClB,MAAM0G,EAAYr5C,OAAOC,KAAKuyC,GAAiBrwB,QAAO1T,GAAO+jC,EAAgB/jC,KACvEqkC,QAAmB10C,EAAOuI,OAAO,6BAA8B,SAAU0yC,GAC/E1G,GAAkB,GACdG,EAAW7qC,MACX7H,OAAOC,MAAMyyC,EAAW7qC,OAExBoqC,EAAQ,EACZ,EA4nBoBjuC,MAAM,UACNiO,WAAW/O,EAAAA,EAAAA,KAACg2C,EAAAA,OAAU,IAAIl3C,SAEzBqF,EAAAA,KAAKC,EAAE,cAGN,IAAT0qC,GAAuB,IAATA,IACX9uC,EAAAA,EAAAA,KAAC2L,EAAAA,QAAO,CACJE,UAAW,CAAEC,OAAQ,CAAE/H,GAAI,CAAEgI,cAAe,UAC5CH,MACa,IAATkjC,EACM3qC,EAAAA,KAAKC,EAAE,mEACP,GACTtF,UAEDkB,EAAAA,EAAAA,KAAA,QAAM4E,MAAO,CAAE6G,WAAY,GAAI3M,UAC3BkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,UACK+lC,KACa,OAAbA,QAAa,IAAbA,GAAqB,QAARV,EAAbU,EAAevf,cAAM,IAAA6e,GAArBA,EAAuBoF,WACf,IAATlF,GACAM,GACU,IAATN,IAAe18B,EAAS9V,OAE7BwS,QAASA,KArqBdigC,EAAQD,EAAO,GAuqBO,IAATA,GAjiBpC6D,GAAsBvgC,EAAS,IAAI,KAC/Bg/B,GAAkB,GAClBF,IAAmB,EAAK,GAiiBI,EAEJpwC,MAAgB,IAATguC,EAAa,UAAY,OAChC//B,UAAoB,IAAT+/B,GAAa9uC,EAAAA,EAAAA,KAACi2C,EAAAA,WAAc,KAAMj2C,EAAAA,EAAAA,KAACk2C,EAAAA,aAAgB,IAAIp3C,SAEjEqF,EAAAA,KAAKC,EAAW,IAAT0qC,EAAa,mBAAqB,wBAK1D9uC,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACR/C,SAAU6lC,EACVtgC,QAASA,IAAM5F,IACfpI,MAAgB,IAATguC,EAAa,UAAY,OAChC//B,WAAW/O,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,IAAInQ,SAExBqF,EAAAA,KAAKC,EAAW,IAAT0qC,EAAa,SAAW,mBAMxD,E,6iq2CCpmCMqH,GAAW1+B,IAAAA,MAAW,IAAM,6EAC5B2+B,GAAY3+B,IAAAA,MAAW,IAAM,sFAC7B4+B,GAAQ5+B,IAAAA,MAAW,IAAM,kCACzB6+B,GAAO7+B,IAAAA,MAAW,IAAM,0DACxB8+B,GAAQ9+B,IAAAA,MAAW,IAAM,qEACzB++B,GAAU/+B,IAAAA,MAAW,IAAM,oEAC3Bg/B,GAAQh/B,IAAAA,MAAW,IAAM,kCACzBi/B,GAAQj/B,IAAAA,MAAW,IAAM,oEACzBk/B,GAAYl/B,IAAAA,MAAW,IAAM,0CAC7Bm/B,GAAQn/B,IAAAA,MAAW,IAAM,6EACzBo/B,GAAWp/B,IAAAA,MAAW,IAAM,2DAkB5B6T,GAA6B,CAAC,GAEnCxuB,OAAOuR,SAASgd,QAAU,IACtB/nB,QAAQ,MAAO,IACfkB,MAAM,KACNtI,SAAQovC,IACL,MAAMpP,EAAQoP,EAAK9mC,MAAM,KACpB03B,EAAM,KAGV5Q,GAA2C4Q,EAAM,SACjCnvB,IAAbmvB,EAAM,IAA0B4a,mBAAmB5a,EAAM,IAAG,IAGxE,MAAM/7B,GAA8B,CAChCpF,KAAM,CACFuF,QAAS,OACT8F,OAAQ,QAEZ2wC,OAASvxC,IAAe,CACpB2S,WAAY3S,EAAMoT,YAAYC,OAAO,CAAC,SAAU,SAAU,CACtDC,OAAQtT,EAAMoT,YAAYE,OAAOk+B,MACjCh+B,SAAUxT,EAAMoT,YAAYI,SAASi+B,kBAG7CC,UAAW,CACPlxC,gBAAiB,WAErBmxC,YAAc3xC,IAAe,CACzBjF,MAAO,qBACPa,GAAIqX,KACJN,WAAY3S,EAAMoT,YAAYC,OAAO,CAAC,SAAU,SAAU,CACtDC,OAAQtT,EAAMoT,YAAYE,OAAOC,QACjCC,SAAUxT,EAAMoT,YAAYI,SAASC,mBAG7Cm+B,gBAAkB5xC,IAAe,CAC7BjF,MAAO,qBACPa,GAAIsX,MACJP,WAAY3S,EAAMoT,YAAYC,OAAO,CAAC,SAAU,SAAU,CACtDC,OAAQtT,EAAMoT,YAAYE,OAAOC,QACjCC,SAAUxT,EAAMoT,YAAYI,SAASC,mBAG7Co+B,mBAAqB7xC,IAAe,CAChCjF,MAAO,oBACPa,GAAIk2C,KACJn/B,WAAY3S,EAAMoT,YAAYC,OAAO,CAAC,SAAU,SAAU,CACtDC,OAAQtT,EAAMoT,YAAYE,OAAOC,QACjCC,SAAUxT,EAAMoT,YAAYI,SAASC,mBAG7Cs+B,WAAY,CACR7rC,YAAa,IAEjB8rC,KAAM,CACFl3C,QAAS,QAEboH,QAAUlC,IAAe,IAAAiyC,EAAAC,EAAAC,EAAA,MAAM,CAC3BzoC,SAAU,EACVsJ,QAAS,EACTL,WAAY3S,EAAMoT,YAAYC,OAAO,SAAU,CAC3CC,OAAQtT,EAAMoT,YAAYE,OAAOk+B,MACjCh+B,SAAUxT,EAAMoT,YAAYI,SAASi+B,gBAEzCrwC,UAAW,OACXgxC,GAAI,GAAuB,QAAvBH,EAAGjyC,EAAM+T,OAAOC,eAAO,IAAAi+B,OAAA,EAApBA,EAAsBtX,cAC7B,sDAAuD,CAEnDyX,GAA+E,QAA3EF,EAAAlyC,EAAM+T,OAAOC,QAAQ,8DAAsD,IAAAk+B,GAA3EA,EAA6EvX,UAE3E,GAAG36B,EAAM+T,OAAOC,QAAQ,uDAAuD2mB,mBAC/EpzB,GAEV,2BAA4B,CAExB6qC,GAAoD,QAAhDD,EAAAnyC,EAAM+T,OAAOC,QAAQ,mCAA2B,IAAAm+B,GAAhDA,EAAkDxX,UAEhD,GAAG36B,EAAM+T,OAAOC,QAAQ,4BAA4B2mB,mBACpDpzB,GAEb,EACD8qC,cAAe,CACXz2C,IAAI,MAER02C,kBAAmB,CACf12C,IAAI,OAER22C,qBAAsB,CAClB32C,IAAI,MAER42C,aAAexyC,IAAe,CAC1B2S,WAAY3S,EAAMoT,YAAYC,OAAO,SAAU,CAC3CC,OAAQtT,EAAMoT,YAAYE,OAAOC,QACjCC,SAAUxT,EAAMoT,YAAYI,SAASC,iBAEzC7X,GAAI,IAER62C,WAAY,CACR13C,MAAO,GACP6F,OAAQ,IAGZ8xC,iBAAkB,CACd,EAEJC,mBAAoB,CAChBr3C,MAAO,OAEXs3C,WAAY,CAAC,EACbC,YAAa,CACTryC,gBAAiB,WAErBsyC,cAAe,CACXtyC,gBAAiB,WAErBgU,iBAAkB,CACdrZ,QAAS,EACT8K,WAAY,EACZ0M,WAAY,eACZ5X,MAAO,WAEX0Z,cAAe,CACXtZ,QAAS,GAEbkQ,IAAK,CACD8R,UAAW,yCACXhiB,QAAS,IAEb43C,SAAU,CACNz3C,MAAO,UACP6hB,UAAW,4CAEfhS,UAAYnL,IAAe,CACvB1E,MAA8B,UAAvB0E,EAAMS,QAAQe,KAAmB,UAAY,UACpD2b,UAAW,6CAEf61B,eAAgB,CACZl4C,QAAS,OACToL,YAAa,OACb9E,UAAW,QAGfsI,SAAU,CACNA,SAAU,GAEdupC,UAAW,CACPz4B,WAAY,OACZ1f,QAAS,gBAEbo4C,SAAU,CACNryC,aAAc,EACd9F,MAAO,GACP6F,OAAQ,GACRga,cAAe,SACf3U,WAAY,GACZC,YAAa,IAEjBitC,SAAU,CACNv4B,cAAe,SACfnf,SAAU,GACVsF,SAAU,IACVmF,YAAa,GACbpK,WAAY,SACZoF,SAAU,SACVwB,aAAc,WACd5H,QAAS,gBAEbs4C,eAAiBpzC,IAAe,CAC5Ba,aAAc,EACdL,gBAAwC,SAAvBR,EAAMS,QAAQe,KAAkB,OAAS,OAC1DgB,EAAG,KAEPkS,aAAc,CACVjZ,SAAU,IAEd43C,YAAa,CACTv4C,QAAS,OACTgG,cAAe,SACfoF,YAAa,IAEjBotC,YAAa,CACTlB,GAAI,OACJnwC,GAAI,QAERgtB,SAAU,CACNzU,WAAY,OACZ/e,SAAU,GACVwK,WAAY,GACZC,YAAa,GACbpL,QAAS,eACT8f,cAAe,UAEnBkV,QAAS,CACLvpB,cAAe,SAmBjBgtC,GAAiD,CACnD57C,IAAK,GACLxB,KAAM,QACNgE,OAAQ,CACJ4K,KAAM,iBACN5O,KAAM,UACNq9C,MAAM,EACNC,OAAO,EACPlwC,KAAM,SAEVgnB,OAAQ,CACJngB,aAAc,CAAC,EACf01B,eAAgB,CAAC,IAwHzB,MAAM4T,WAAY9nB,EAAAA,OAgDdv2B,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAhDA03C,kBAAY,EAEe,KAC3BC,yBAAmC,IAAI,KAEhDC,gBAA4C,KAAK,KAExCC,aAAO,OAEPC,gBAAU,OAEnBC,YAA6B,KAAK,KAElCC,cAAwB,EAAE,KAE1BC,SAAiD,KAAK,KAEtDC,oBAA4D,KAAK,KAExDC,yBAAmB,OAEnBC,WAAqB11C,EAAAA,KAAKC,EAAE,uBAAwB,MAAM,KAEnE2b,oBAAc,OAEdrC,gBAAU,OAEVF,qBAAe,OAEf9B,iBAAW,OAEXo+B,oBAAc,OAEdC,mBAAa,OAEbC,iBAAW,OAEXC,kBAA0D,KAAK,KAE/DC,iBAAW,OAEXp/C,YAAM,OAENymB,cAAwB,GAAG,KAE3B44B,aAAuB,EAAE,KA+NjCC,oBAAuB7vC,GAAsB9O,KAAKu+C,YAAYjqB,OAAOngB,aAAarF,GAAM,KAExF8vC,oBAAsB,CAAC9vC,EAAcrK,KACjC,GAAc,OAAVA,EACAA,EAAQ,YACL,QAAc6M,IAAV7M,EAEP,YADAzE,KAAK6+C,uBAAuB/vC,GAGhC9O,KAAKu+C,YAAYjqB,OAAOngB,aAAarF,GAAQrK,EAAMgO,WAEnDzS,KAAK8+C,kBAAkB,EACzB,KAEFD,uBAA0B/vC,IAClB7N,OAAO89C,UAAUC,eAAeC,KAAKj/C,KAAKu+C,YAAYjqB,OAAOngB,aAAcrF,YACpE9O,KAAKu+C,YAAYjqB,OAAOngB,aAAarF,GAC5C9O,KAAK8+C,mBACT,EACF,KAEFI,sBAAyBpwC,GAAsB9O,KAAKu+C,YAAYjqB,OAAOuV,eAAe/6B,GAAM,KAE5FqwC,sBAAwB,CAACrwC,EAAcrK,KACnC,GAAc,OAAVA,EACAA,EAAQ,YACL,QAAc6M,IAAV7M,EAEP,YADAzE,KAAKo/C,yBAAyBtwC,GAGlC9O,KAAKu+C,YAAYjqB,OAAOuV,eAAe/6B,GAAQrK,EAAMgO,WACrDzS,KAAK8+C,kBAAkB,EACzB,KAEFM,yBAA4BtwC,IACpB7N,OAAO89C,UAAUC,eAAeC,KAAKj/C,KAAKu+C,YAAYjqB,OAAOuV,eAAgB/6B,YACtE9O,KAAKu+C,YAAYjqB,OAAOuV,eAAe/6B,GAC9C9O,KAAK8+C,mBACT,EACF,KAYFO,kBAAoB,MACfh+C,OAAO6S,eAAiB7S,OAAO8S,cAAcyB,QAC1C,oBACA5V,KAAKoG,MAAMk5C,cAAgB,QAAU,QAEzCt/C,KAAKuD,SAAS,CAAE+7C,eAAgBt/C,KAAKoG,MAAMk5C,eAAgB,EAC7D,KAodFC,YAAeC,IACX,MAAMx8C,EAAuB1C,KAAKoH,MAAMpH,KAAKC,UAAUP,KAAKoG,MAAMpD,QAElEw8C,EAAO/+C,SAASsY,IACZ,MAAM0mC,EAAcz8C,EAAM6L,MAAKI,GAAQA,EAAKvN,MAAQqX,EAAMjZ,KAC1D,GAAI2/C,EAAa,CACb,MAAMryC,EAAQpK,EAAMT,QAAQk9C,GACxB1mC,EAAMhZ,IAENiD,EAAMoK,GAAS2L,EAAMhZ,IAGrBiD,EAAMR,OAAO4K,EAAO,EAE5B,MAEIpK,EAAMZ,KAAK2W,EAAMhZ,IACrB,IAGJC,KAAKuD,SAAS,CAAEP,SAAQ,EAC1B,KAEF8rC,kBAAoB,KACX9uC,KAAK0/C,yBAAyB1/C,KAAKoG,MAAM8+B,YAAa,MAAM,GAAMnkC,MAAK,IAAMglB,QAAQC,IAAI,kBAAiB,EACjH,KAEF25B,sBAAyBH,IAGrB,MAAMt8C,EAAkC5C,KAAKoH,MAAMpH,KAAKC,UAAUP,KAAKoG,MAAMlD,YAC7E,IAAIikC,GAAU,EACdqY,EAAO/+C,SAAQsY,IACX,MACM1U,EADQ0U,EAAMjZ,GAAGiJ,MAAM,KACP,GACH,YAAfgQ,EAAM7Y,MAAuB6Y,EAAMhZ,IAK5BmD,EAAUmB,GACjBpD,OAAOC,KAAKgC,EAAUmB,IAAU5D,SAAQovC,IAE/B3sC,EAAUmB,GAAiCwrC,KAC3C92B,EAAMhZ,IAAImE,OAA+B2rC,KAEzC3sC,EAAUmB,GAAiCwrC,GAAS92B,EAAMhZ,IAAImE,OAC3D2rC,GAEJ1I,GAAU,EACd,KAGJjkC,EAAUmB,GAAW,CAAEP,QAASiV,EAAMhZ,IAAImE,OAAOJ,SACjDqjC,GAAU,GAlBNjkC,EAAUmB,KACV8iC,GAAU,SACHjkC,EAAUmB,GAiBzB,IAGA8iC,GACAnnC,KAAKuD,SAAS,CAAEL,aACpB,EACF,KAkGF08C,iBAAmB,CAACC,EAAep7C,OACpB,OAALA,QAAK,IAALA,IAAAA,EAAO8B,OAAQvG,KAAKoG,MAAM05C,gBAC5B9/C,KAAKuD,SAAS,CAAEu8C,iBAAuB,OAALr7C,QAAK,IAALA,IAAAA,EAAO8B,MAC7C,EACF,KAEFw5C,kBAAoB,KAChBx7C,EAAAA,EAAAA,KAACy7C,GAAe,CACZl2C,UAAW9J,KAAKoG,MAAM0D,UACtBD,UAAW7J,KAAKoG,MAAMyD,UACtBE,MAAO/J,KAAKoG,MAAM2D,MAClB1K,OAAQW,KAAKX,OACb4K,WAAYjK,KAAKoG,MAAMyd,aAAa3f,OAAO+F,WAC3Ci7B,YAAallC,KAAKoG,MAAM8+B,YACxBkO,gBAAiBpzC,KAAKoG,MAAMyd,aAAa3f,OAAOkvC,gBAChDnwC,WAAYjD,KAAKoG,MAAMnD,WACvBD,MAAOhD,KAAKoG,MAAMpD,MAClByK,QAASA,IAAMkoB,EAAAA,OAAOC,WAAW,QA6DoC,KAC7EqqB,uBAAyBl/B,UACrB,MAAMm/B,EAAsC,CACxC1/B,QAAS,EACTC,MAAO,GAIX,IAAKjT,EAED,YADAxN,KAAKuD,SAAS,CAAE28C,kBAAiB1yC,cAAe,CAAC,IAIrD,IAAK,MAAM0B,KAAejO,OAAO2N,OAAOpB,GACpC,GAAgB,OAAX0B,QAAW,IAAXA,GAAAA,EAAapH,OAGlB,IAAK,MAAOsH,EAAOC,KAAiBpO,OAAOkO,QAAQD,EAAYpH,QAC3D,GAAc,WAAVsH,EAIJ,IAAK,MAAMG,KAAmBtO,OAAO2N,OAAOS,EAAaG,YACrD,IAAK,MAAM2wC,KAAmBl/C,OAAO2N,OAAOW,EAAgB5B,WAAY,CAEpEuyC,EAD+C,UAA7B3wC,EAAgB1C,SACN,UAAY,UAAYszC,EAAgB/xC,SAASvN,MACjF,CAKZ,MAAM8M,QAAkB3N,KAAK+hB,gBAAgB/gB,aAE7ChB,KAAKuD,SAAS,CAAE28C,kBAAiB1yC,cAAe,CAAEA,gBAAeG,cAAc,EAGnF,KAMAyyC,oBAAsBr/B,MAClBvT,EACAyB,KAEA,IAAKzB,IAAkBA,EAAcyB,KAAUzB,EAAcyB,GAAMnH,OAC/D,OAGJ,MAAMA,EAAS0F,EAAcyB,GAAMnH,OAEzB,OAANA,QAAM,IAANA,GAAAA,EAAQ8Y,QAAU3f,OAAOC,KAAK4G,EAAO8Y,OAAOpR,YAAY3O,cAClDb,KAAK+hB,gBAAgB/gB,aAAaD,MAAK4M,GACzC3N,KAAKuD,SAAS,CACV88C,gBAAiB,CACbpxC,OACAtB,YACA7F,aAIhB,EAGJ,KAGAw4C,OAASv/B,MAAOrf,EAAa6+C,KACzB,IACI,IAAKvgD,KAAKoG,MAAMyd,aAAa3f,OAAOswB,iBAChC,OAGJ,MAAMgsB,QAAmBxgD,KAAKX,OAAO+H,SAAS,SAASpH,KAAK0+C,gCAC5D,GAAY,OAAR6B,QAAQ,IAARA,GAAAA,EAAUh6C,IAAK,CAAC,IAADk6C,EACf,IAAIC,EAAO,KACX,IACIA,EAAOpgD,KAAKoH,MAAM64C,EAASh6C,IAC/B,CAAE,MACEwf,QAAQ7c,MAAM,sBAAsBq3C,EAASh6C,MACjD,CAEA,GAAQ,QAAJk6C,EAAAC,SAAI,IAAAD,GAAJA,EAAM5/C,QAAU6/C,EAAK,GAAG5gD,MAAiB,OAAV0gD,QAAU,IAAVA,OAAU,EAAVA,EAAYj6C,KAAK,CAChD,MAAMy4B,QAAqBh/B,KAAKX,OAAOshD,UACjCC,QAAa5gD,KAAKX,OAAOwhD,YAAY7gD,KAAKoG,MAAM8+B,aAAa/jC,OAAM,IAAM,OAEzEwM,QAAkB3N,KAAKX,OAAOsjB,sBAAsBxhB,OAAM,IAAM,OAEhE2/C,SAAuB9gD,KAAKX,OAAO+rB,YAAYprB,KAAKoG,MAAM8+B,YAAa,WAAW6b,YAElFphD,QAAgBK,KAAKs+C,cAAct9C,YAAW,GAC9CggD,EAAY//C,OAAOC,KAAKvB,GAAW,CAAC,GAAGkB,OAEvCogD,GAAYC,EAAAA,GAAAA,GAAcR,EAAgB,OAAVF,QAAU,IAAVA,OAAU,EAAVA,EAAYj6C,IAAe,CAC7D2c,KAAMxa,EAAAA,KAAK0I,cACX+vC,SAAUnhD,KAAKoG,MAAM+6C,SACrBxzC,UAAWA,GAAa,GACxByzC,YAAaR,GAAOA,EAAK,YAAoB,IAC7CS,WAAYT,GAAOA,EAAKU,KAAa,IACrCC,GAAIX,GAAOA,EAAKW,IAAY,IAC5BlvB,WAAYryB,KAAKoG,MAAMyd,aAAa3f,OAAOmuB,WAC3C2M,OACA8hB,gBACAE,cAGS,OAATC,QAAS,IAATA,GAAAA,EAAWpgD,QACXb,KAAKuD,SAAS,CACVi+C,SAAU,CACNP,YACAT,WAAsB,OAAVA,QAAU,IAAVA,OAAU,EAAVA,EAAYj6C,MAIxC,CACJ,CACJ,CAAE,MAAOnF,GACL2kB,QAAQ7c,MAAM,2BAA2B9H,EAAEqgD,SAC3CzhD,KAAK0hD,UAAU,2BAA2BtgD,EAAEqgD,QAAS,QACzD,GACF,KAyFFE,kBAAqBzc,IAA+B,IAAD0c,EAChC,QAAfA,EAAA5hD,KAAKiiB,kBAAU,IAAA2/B,GAAfA,EAAiB1V,eAAehH,EAAY,EAGhD,KAGA2c,cAAgB,KACZ7hD,KAAKuD,SAAS,CAAE0hB,WAAY0Q,EAAAA,OAAOmsB,gBAAiB,IAAM9hD,KAAK+hD,sBAAqB,EAyDxD,KAChC9rB,YAAe+rB,IACX,MAAMn4C,EAAY7J,KAAKoG,MAAMyD,UAEvBo4C,EAAeD,GAAoBz5C,EAAAA,MAAM0tB,YAAYpsB,GAErDE,EAAQ0zC,GAAIyE,YAAYD,GAE9BjiD,KAAKuD,SACD,CACIwG,QACAF,UAAWo4C,EACXn4C,UAAW2zC,GAAI0E,aAAap4C,KAEhC,KAAO,IAADq4C,EAAAC,EACkB,QAApBD,EAAApiD,KAAK49C,uBAAe,IAAAwE,GAAe,QAAfC,EAApBD,EAAsBE,qBAAa,IAAAD,GAAnCA,EAAqCE,YAAY,cAAe,IAAI,GAE3E,EACH,KA8WFn+B,iBAAmB,CAACrN,EAAayrC,EAAiBC,KAC1C1rC,IACI/W,KAAKoG,MAAMs8C,WACX/sB,EAAAA,OAAOC,WAAW7e,EAAKyrC,EAAQC,GAE/BziD,KAAKuD,SAAS,CAAE0hB,WAAY0Q,EAAAA,OAAOmsB,iBAEnC9hD,KAAKuD,SAAS,CACVo/C,qBAAqB,EACrBC,iBAAkB,CAAE7rC,MAAKyrC,SAAQC,YAKpB,OAArBziD,KAAKgG,MAAMlB,OAAuC,OAArB9E,KAAKgG,MAAMlB,OACxC9E,KAAK6iD,kBAAkBC,IAG3B/rC,EAAMA,GAAQ/W,KAAKoG,MAAM6e,YAAcjlB,KAAKoG,MAAM6e,WAAWlO,KAAQ,GAErE/W,KAAK+iD,SAAShsC,EAAIlP,QAAQ,OAAQ,IAAI,EA3nDtC,IACIxG,OAAOC,MAAQqD,IACPA,GAAWA,EAAQ8N,WAAW+Q,cAAcrhB,SAAS,UACrD4jB,QAAQ7c,MAAMvE,GACd3E,KAAK0hD,UAAU/8C,EAAQ8N,WAAY,WAEnCsT,QAAQC,IAAIrhB,GACZ3E,KAAK0hD,UAAU/8C,EAAQ8N,WAAY,QACvC,CAER,CAAE,MACE,CAIJzS,KAAK09C,aAAesF,EAAAA,WAEpB,MAAMtF,EAAmE,CACrEt1C,GAAI66C,GACJx5B,GAAIy5B,GACJx5B,GAAIy5B,GACJv5B,GAAIw5B,GACJv5B,GAAIw5B,GACJ15B,GAAI25B,GACJx/B,GAAIy/B,GACJz5B,GAAI05B,GACJjqC,GAAIkqC,GACJ15B,GAAI25B,GACJ,QAASC,IAIb1iD,OAAOC,KAAKw8C,GAAcj9C,SAASyiB,GAC/BjiB,OAAO+zB,OAAOh1B,KAAK09C,aAAax6B,GAAOw6B,EAAax6B,MAIxDxa,EAAAA,KAAKk7C,gBAAgB5jD,KAAK09C,cAC1Bh1C,EAAAA,KAAKyjB,aACA9qB,OAAOguB,UAAUsF,UAAYtzB,OAAOguB,UAAUw0B,cAAgB,MAC1DvgC,UAAU,EAAG,GACbE,eAGTxjB,KAAK69C,QAAU7hC,IAAAA,YACfhc,KAAK89C,WAAa9hC,IAAAA,YAClBhc,KAAKskB,eAAiB,CAClBpd,MAAO,CACHoe,KAAM,CAAC,EACP4F,SAAU,CAAC,EACXi2B,SAAU,CAAC,EACXjiB,MAAO,CAAC,IAIhB,MAAM4kB,EAAeziD,OAAOyiD,aAG5B,GAFA9jD,KAAKm+C,qBAAuB2F,GAAiC,qBAAjBA,GAAwD,OAAjBA,EAE9Ej0B,GAAMqP,MAuHJ,CACH,MAAMn1B,EAAQ0zC,GAAIyE,cAClBliD,KAAKoG,MAAQ,CACT84B,OAAO,EACPn1B,QACAF,UAAW4zC,GAAIsG,aAAah6C,GAC5BD,UAAW2zC,GAAI0E,aAAap4C,GAEpC,KA/HkB,CACd,MAAMi6C,GAAkB3iD,OAAO6S,eAAiB7S,OAAO8S,cAAcC,QAAQ,mBAC7E,IAAI6vC,EAEAA,EADAD,EACc36C,SAAS26C,EAAgB,IAEJ,OAArBhkD,KAAKgG,MAAMlB,MAAkBg+C,GAA6BA,GAG5E,MAAM/4C,EAAQ0zC,GAAIyE,cAGlBjhD,OAAOijD,eAAe7iD,OAAQ,iBAAkB,CAC5C8iD,IAAKA,IAAMnkD,KAAKoG,MAAMg+C,eACtBvgB,IAAKugB,IACD,MAAM1B,GAAa0B,EACf1B,IAAc1iD,KAAKoG,MAAMs8C,WACzB1iD,KAAKuD,SAAS,CAAEm/C,aACpB,EAEJ2B,cAAc,IAGlBrkD,KAAKoG,MAAQ,CACT1G,WAAW,EACXsoC,SAAU,EACVjzB,OAAO,EACPmO,KAAM,KAEN2C,SAAUxkB,OAAOuR,SAASiT,SAE1BwgB,YAAY,EAEZrjC,MAAO,GACPkiC,YAAa,GACbof,gBAAiB,GACjBC,QAAS,GACTt/B,WAAY0Q,EAAAA,OAAOmsB,cACnBj+B,aAAc,KACd2gC,KAAM,KAENvhD,WAAY,CAAC,EACbC,UAAW,CAAC,EAEZuhD,gBAAgB,EAChBvuC,KAAM,KACN0tB,OAAQ,CAAC,EAET8gB,cAAc,EAEd36C,QACAF,UAAW4zC,GAAIsG,aAAah6C,GAC5BD,UAAW2zC,GAAI0E,aAAap4C,GAE5BzI,OAAO,EACPqjD,UAAW,OACXC,aAAc,GACdX,cACAtqC,cAAc,EAEd5C,IAAK,KACL2rC,WAAW,EACXC,qBAAqB,EACrBC,iBAAkB,KAElBiC,oBAAoB,EACpBC,qBAAqB,EACrBC,sBAAsB,EAEtB3vC,IAAK,KACL4vC,WAAW,EACXC,YAAa,KACbjwC,cAAc,EACdkwC,gBAAgB,EAEhBC,QAAQ,EACRjwC,WAAW,EAEX4qC,gBAAgB,EAEhBsF,cAAeC,GAAAA,EAAiCC,mBAChDC,2BAA2B,EAG3BC,mBAAmB,EAEnB3gC,aAAc,GAEd4gC,oBAAqB,EAErBnG,cAA8F,WAA9Ej+C,OAAO6S,eAAiB7S,OAAO8S,cAAcC,QAAQ,qBAErEsxC,mBAAmB,EACnBC,eAAgB,EAEhBC,aAAc,GACdC,kBAAmB,EAEnBC,qBAAsB,EAEtBC,UAAU,EAEVC,qBAAqB,EAErBx4C,cAAe,CAAC,EAEhB0yC,gBAAiB,CACb1/B,QAAS,EACTC,MAAO,GAGX2jC,gBAAgB,EAChBllB,OAAO,EACPmhB,gBAAiB,KACjBc,SAAU,CAAC,GAEfnhD,KAAKiiB,WAAa,KAClBjiB,KAAK+hB,gBAAkB,KACvB/hB,KAAKigB,YAAc,IACvB,CASJ,CAEA,+BAAOgmC,CAAyB/8C,GAI5B,MAAO,CAAEg9C,eAAgBh9C,EAC7B,CAEAi9C,iBAAAA,CAAkBj9C,GACdlJ,KAAKuD,SAAS,CAAE2iD,eAAgBh9C,GACpC,CAEAk9C,cAAAA,CAAeC,GACPA,IAAmBrmD,KAAKoG,MAAM0+C,qBAC9B9kD,KAAKuD,SAAS,CAAEuhD,oBAAqBuB,GAE7C,CAGAC,oBAAAA,CAAqBjhD,GACjB,IAAKA,EACD,OAAO,EAEX,MAAMkhD,EAAgBh+C,EAAAA,MAAM6Q,YAAY/T,GAAO,GAC/C,MAAsB,YAAlBkhD,GAAwD,SAAzBvmD,KAAKoG,MAAM0D,WAIrB,YAAlBy8C,GAAwD,UAAzBvmD,KAAKoG,MAAM0D,SACrD,CA2CAg1C,gBAAAA,GACQ9+C,KAAKw+C,mBACLniC,aAAarc,KAAKw+C,mBAEtBx+C,KAAKw+C,kBAAoB9rC,YAAWqO,UAChC/gB,KAAKw+C,kBAAoB,WACnBx+C,KAAKX,OAAOo2B,UAAU,kBAAkBz1B,KAAK8lB,4BAA6B9lB,KAAKu+C,YAAY,GAClG,IACP,CAUA,oBAAMiI,GAAiC,IAADC,EAClC,IAAI1mD,EAqBAqG,EAnBJ,GAAKpG,KAAK8lB,cAAV,CAIA,IACI/lB,QAAYC,KAAKX,OAAO8rB,UAAU,kBAAkBnrB,KAAK8lB,4BAC7D,CAAE,MAAO1kB,GACL2kB,QAAQtM,KAAK,iCAAiCzZ,KAAK8lB,+BAA+B1kB,EAAEuD,UACxF,CAEA,IAAK5E,EAAK,CACNA,EAAMO,KAAKoH,MAAMpH,KAAKC,UAAU+8C,KAChC,UACUt9C,KAAKX,OAAOo2B,UAAU,kBAAkBz1B,KAAK8lB,4BAA6B/lB,EACpF,CAAE,MAAOqB,GACL2kB,QAAQtM,KAAK,oCAAoCzZ,KAAK8lB,+BAA+B1kB,IACzF,CACJ,CAGA,IACIgF,QAAcpG,KAAKX,OAAO+H,SAAS,kBAAkBpH,KAAK8lB,4BAC9D,CAAE,MACE1f,EAAQ,CAAEG,KAAK,EACnB,CACA,GAAS,QAATkgD,EAAIrgD,SAAK,IAAAqgD,GAALA,EAAOlgD,IAAK,CACZvG,KAAKu+C,YAAcx+C,EACnBC,KAAKu+C,YAAYjqB,OAASt0B,KAAKu+C,YAAYjqB,QAAU,CAAEngB,aAAc,CAAC,EAAG01B,eAAgB,CAAC,GACrF7pC,KAAKu+C,YAAYjqB,OAAOngB,eACzBnU,KAAKu+C,YAAYjqB,OAAS,CAAEngB,aAAcnU,KAAKu+C,YAAYjqB,OAAQuV,eAAgB,CAAC,IAIxFxoC,OAAO6S,cAAgB,CACnBE,QAASpU,KAAK2+C,oBACd/oC,QAAS5V,KAAK4+C,oBACd8H,WAAY1mD,KAAK6+C,wBAGrBx9C,OAAOuoC,gBAAkB,CACrBx1B,QAASpU,KAAKk/C,sBACdtpC,QAAS5V,KAAKm/C,sBACduH,WAAY1mD,KAAKo/C,0BAIrB,MAAM4E,GAAkB3iD,OAAO6S,eAAiB7S,OAAO8S,cAAcC,QAAQ,mBAC7E,IAAI6vC,EAEAA,EADAD,EACc36C,SAAS26C,EAAgB,IAEJ,OAArBhkD,KAAKgG,MAAMlB,MAAkBg+C,GAA6BA,GAE5E,MAAMxD,EAC6E,WAA9Ej+C,OAAO6S,eAAiB7S,OAAO8S,cAAcC,QAAQ,qBAE1DpU,KAAKuD,SAAS,CAAEg7C,aAAa,EAAM0F,cAAa3E,kBAAiB,KACzD/2C,EAAAA,MAAMw7C,iBAAmB/jD,KAAKoG,MAAM2D,MAAM+E,MAC1C9O,KAAKi2B,YAAY1tB,EAAAA,MAAMw7C,eAC3B,GAER,MAAW/jD,KAAKoG,MAAMm4C,cAClBl9C,OAAO6S,cAAgB,KACvB7S,OAAOuoC,gBAAkB,KAEzB5pC,KAAKuD,SAAS,CAAEg7C,aAAa,IA/DjC,CAiEJ,CAEAoI,iBAAAA,CAAkBC,EAAkBC,GAC5BD,IAAY5mD,KAAKu+C,YACZv+C,KAAKX,OAAO8rB,UAAU,kBAAkBnrB,KAAK8lB,6BAA6B/kB,MAAKggB,UAChF/gB,KAAKu+C,YAAcx+C,GAAOO,KAAKoH,MAAMpH,KAAKC,UAAU+8C,MAEhDuJ,GAAgB7mD,KAAKu+C,YAAYjqB,QAAWrzB,OAAOC,KAAKlB,KAAKu+C,YAAYjqB,QAAQzzB,cAiC3Eb,KAAKX,OAAOkE,SAAS,kBAAkBvD,KAAK8lB,4BAA6B,CAC3Evf,KAAK,EACLyyC,KAAK,IAET33C,OAAOuR,SAAS2zB,WApChBvmC,KAAKu+C,YAAYjqB,OAAS,CAAEngB,aAAc,CAAC,EAAG01B,eAAgB,CAAC,GAC/D5oC,OAAOC,KAAKG,OAAO8S,cAAc1T,SAAQqO,IAExB,YAATA,GACS,YAATA,GACS,eAATA,GACS,UAATA,GACS,QAATA,GACS,WAATA,IAEA9O,KAAKu+C,YAAYjqB,OAAOngB,aAAarF,GAAQzN,OAAO8S,aAAaC,QAAQtF,GAC7E,IAGJ7N,OAAOC,KAAKG,OAAOwoC,gBAAgBppC,SAAQqO,IAE1B,YAATA,GACS,YAATA,GACS,eAATA,GACS,UAATA,GACS,QAATA,GACS,WAATA,IAEA9O,KAAKu+C,YAAYjqB,OAAOuV,eAAe/6B,GAAQzN,OAAOwoC,eAAez1B,QAAQtF,GACjF,UAEE9O,KAAKX,OAAOo2B,UAAU,kBAAkBz1B,KAAK8lB,4BAA6B9lB,KAAKu+C,mBAC/Ev+C,KAAKX,OAAOkE,SAAS,kBAAkBvD,KAAK8lB,4BAA6B,CAC3Evf,KAAK,EACLyyC,KAAK,WAUPh5C,KAAKwmD,gBAAgB,KAEvBI,GAAW5mD,KAAKu+C,aACnBv+C,KAAKX,OAAO8rB,UAAU,kBAAkBnrB,KAAK8lB,6BAA6B/kB,MAAKggB,UAChF,IAAKhhB,EACD,UAEUC,KAAKX,OAAOo2B,UACd,kBAAkBz1B,KAAK8lB,4BACvBw3B,GAER,CAAE,MAAOl8C,GACL2kB,QAAQ7c,MAAM,gCAAgClJ,KAAK8lB,+BAA+B1kB,IACtF,CAEJC,OAAO6S,cAAgB,KACvB7S,OAAOuoC,gBAAkB,KAGzB3oC,OAAOC,KAAKG,OAAO8S,cAAc1T,SAAQiP,GAAOrO,OAAO8S,aAAauyC,WAAWh3C,KAC/EzO,OAAOC,KAAKG,OAAOwoC,gBAAgBppC,SAAQiP,GAAOrO,OAAOwoC,eAAe6c,WAAWh3C,KAEnFzO,OAAOC,KAAKlB,KAAKu+C,YAAYjqB,OAAOngB,cAAc1T,SAAQqO,GACtDzN,OAAO8S,aAAayB,QAAQ9G,EAAM9O,KAAKu+C,YAAYjqB,OAAOngB,aAAarF,MAE3E7N,OAAOC,KAAKlB,KAAKu+C,YAAYjqB,OAAOuV,gBAAgBppC,SAAQqO,GACxDzN,OAAOwoC,eAAej0B,QAAQ9G,EAAM9O,KAAKu+C,YAAYjqB,OAAOuV,eAAe/6B,MAG/E9O,KAAKu+C,YAAc,KAEnB,UACUv+C,KAAKX,OAAOkE,SAAS,kBAAkBvD,KAAK8lB,4BAA6B,CAC3Evf,KAAK,EACLyyC,KAAK,GAEb,CAAE,MAAO53C,GACLC,OAAOC,MAAM,4BAA4BF,IAC7C,CACApB,KAAKuD,SAAS,CAAEg7C,aAAa,GAAQ,GAGjD,CAEAz3C,iBAAAA,GACS9G,KAAKoG,MAAM84B,QACZ79B,OAAOylD,iBAAiB,aAAc9mD,KAAK6hD,eAAe,GAErD7hD,KAAKoG,MAAM6e,WAAWlO,IAGvB/W,KAAK+iD,SAAS/iD,KAAKoG,MAAM6e,WAAWlO,IAAIlP,QAAQ,OAAQ,KAFxD7H,KAAKokB,iBAAiB,aAK1BpkB,KAAKX,OAAS,IAAI0nD,EAAAA,GAAW,CACzBj0C,SAAUzR,OAAOuR,SAASE,SAC1B7D,KAAM5N,OAAOuR,SAASiT,SAEtB/W,KAAM,QACNk4C,YAAY,EACZxe,KAAMiV,GAAIwJ,UACVC,eAAgB,CAAC,oBACjBC,kBAAkB,EAClBC,WAAYpf,IACJA,IAAaqf,EAAAA,GAASC,WACtBtnD,KAAKuD,SAAS,CACV7D,WAAW,IAERsoC,IAAaqf,EAAAA,GAASE,MAE7BvnD,KAAKX,OACAmoD,aACAzmD,MAAKggB,UACFgF,QAAQC,IACJ,mBAAmBhmB,KAAKoG,MAAMye,8BAA8B4iC,EAAY3jD,WAExE9D,KAAKoG,MAAMye,cAAgB7kB,KAAKoG,MAAMye,eAAiB4iC,EAAY3jD,UACnEzC,OAAOC,MAAM,8CACboR,YAAW,IAAMrR,OAAOuR,SAAS2zB,UAAU,MAE1CvmC,KAAK8lB,gBACN9lB,KAAK8lB,oBAAsB9lB,KAAKX,OAAO4rB,4BAIrCjrB,KAAKwmD,iBAEX,MAAM9gB,EAA8B,CAChChmC,WAAW,EACXsoC,SAAU,IACVnjB,aAAc4iC,EAAY3jD,SAG9B,GAAI9D,KAAKoG,MAAMgP,KAAOpV,KAAKoG,MAAMgP,IAAI4N,MAAM,sBAEvC0iB,EAASwf,gBAAiB,EAC1Bxf,EAAS+f,oBAAsBzlD,KAAKoG,MAAMq/C,oBAAsB,EAEhEzlD,KAAK0nD,gBAAe,KAChB1nD,KAAKuD,SAASmiC,GACdrkC,OAAOuR,SAAS2zB,QAAQ,QAEzB,CACH,IAAK,IAADohB,EACA,MAAMC,QAAiB5nD,KAAKX,OAAO8rB,UAC/B,kBAAkBnrB,KAAK8lB,iBAGf,OAAR8hC,QAAQ,IAARA,GAAgB,QAARD,EAARC,EAAUtzB,cAAM,IAAAqzB,GAAhBA,EAAkBhzB,SACdizB,EAAStzB,OAAOK,WAAajsB,EAAAA,KAAK0I,gBAClC2U,QAAQC,IAAI,uBAAuB4hC,EAAStzB,OAAOK,YACnDjsB,EAAAA,KAAKyjB,YAAYy7B,EAAStzB,OAAOK,UAC7B30B,KAAKy+C,YACLp9C,OAAOuR,SAAS2zB,SAEhBvmC,KAAKy+C,aAAc,GAGpBz+C,KAAKX,OAAO8I,aAAeO,EAAAA,KAAK0I,gBACvC2U,QAAQC,IAAI,uBAAuBhmB,KAAKX,OAAO8I,cAC/CO,EAAAA,KAAKyjB,YAAYnsB,KAAKX,OAAO8I,YACzBnI,KAAKy+C,YACLp9C,OAAOuR,SAAS2zB,SAEhBvmC,KAAKy+C,aAAc,EAG/B,CAAE,MAAOr9C,GACL2kB,QAAQ7c,MAAM,+BAA+B9H,IACjD,CAEApB,KAAKuD,SAASmiC,EAClB,KAEHvkC,OAAMgwC,IACHprB,QAAQ7c,MAAM,wBAAwBioC,KAC1B,8BAARA,IACA0W,aAAY,KACJ7nD,KAAKoG,MAAMu/C,eAAiB,EAC5B3lD,KAAKuD,SAAS,CAAEoiD,eAAgB3lD,KAAKoG,MAAMu/C,eAAiB,IAE5DtkD,OAAOuR,SAAS2zB,QACpB,GACD,KAEHvmC,KAAKuD,SAAS,CACVmiD,mBAAmB,EACnBC,eAAgB,KAExB,IAGR3lD,KAAKuD,SAAS,CACV7D,WAAW,EACXsoC,SAAU/sB,KAAKC,MAAOmsC,EAAAA,GAASE,MAAQvf,EAAY,MAE3D,EAEJ8f,QAAS/mC,UAAa,IAADgnC,EAEjB/nD,KAAKskB,eAAiB,CAClBpd,MAAO,CACHoe,KAAM,CAAC,EACP4F,SAAU,CAAC,EACXi2B,SAAU,CAAC,EACXjiB,MAAO,CAAC,MAEsB,QAAlC6oB,EAAG/nD,KAAKX,OAAOwkB,aAAayQ,cAAM,IAAAyzB,OAAA,EAA/BA,EAAiChc,QAExC/rC,KAAKskB,eAAepd,MAAMoe,KAAOtlB,KAAKskB,eAAepd,MAAMoe,MAAQ,CAAC,EACpEtlB,KAAKskB,eAAepd,MAAMgkB,SAAWlrB,KAAKskB,eAAepd,MAAMgkB,UAAY,CAAC,EAC5ElrB,KAAKskB,eAAepd,MAAMi6C,SAAWnhD,KAAKskB,eAAepd,MAAMi6C,UAAY,CAAC,EAC5EnhD,KAAKskB,eAAepd,MAAMg4B,MAAQl/B,KAAKskB,eAAepd,MAAMg4B,OAAS,CAAC,EAEtE,IAAK,IAAD8oB,EAAAC,EACKjoD,KAAK8lB,gBACN9lB,KAAK8lB,oBAAsB9lB,KAAKX,OAAO4rB,sBAEtCjrB,KAAK8lB,eACNC,QAAQ7c,MAAM,+BAElB,MAAM0+C,QAAiB5nD,KAAKX,OAAO8rB,UAAU,kBAAkBnrB,KAAK8lB,iBAExD,OAAR8hC,QAAQ,IAARA,GAAgB,QAARI,EAARJ,EAAUtzB,cAAM,IAAA0zB,GAAhBA,EAAkBrzB,SAClBjsB,EAAAA,KAAKyjB,YAAYy7B,EAAStzB,OAAOK,UAEjCjsB,EAAAA,KAAKyjB,YAAYnsB,KAAKX,OAAO8I,YAGjCnI,KAAKy+C,aAAc,EACnB,MAAMyJ,QAAiBloD,KAAKX,OAAO8oD,sBAInC,SAFMnoD,KAAKwmD,iBAEP0B,EAAU,CACV,MAAMtkB,QAAe5jC,KAAKX,OAAO+oD,cAOjC,YANApoD,KAAKuD,SAAS,CACV2f,KAAMljB,KAAKX,OAAO8I,WAClB4M,OAAO,EACPszC,gBAAgB,EAChBC,gBAAiB1kB,EAAO2kB,SAGhC,CAGAvoD,KAAKiiB,WAAajiB,KAAKiiB,YAAc,IAAI4oB,GAAW7qC,KAAKX,OAAQ,KACjEW,KAAK+hB,gBAAkB/hB,KAAK+hB,iBAAmB,IAAIurB,GAAgBttC,KAAKX,QACxEW,KAAKigB,YAAcjgB,KAAKigB,aAAe,IAAIstB,GAAYvtC,KAAKX,QAC5DW,KAAKq+C,eAAiBr+C,KAAKq+C,gBAAkB,IAAI1P,GAAe3uC,KAAKX,QACrEW,KAAKs+C,cAAgBt+C,KAAKs+C,eAAiB,IAAInP,GAAcnvC,KAAKX,QAElE,MAAMqmC,EAA8B,CAChCxiB,KAAMljB,KAAKX,OAAO8I,WAClB4M,OAAO,GAGX,IACI2wB,EAAS7hB,mBAAqB7jB,KAAKX,OAAOukB,yBAC1C8hB,EAASyf,QAAUzf,EAAS7hB,aAAa3f,OAAOswB,uBAC1Cx0B,KAAKwoD,gBAAgB9iB,SACrB1lC,KAAK0/C,yBAAyBha,EAASR,YAAaQ,EAAS1iC,MACvE,CAAE,MAAO5B,GACL2kB,QAAQC,IAAI,kCAAkC5kB,EAAEqgD,QACpD,CAEAzhD,KAAKq+C,eAAepP,0BAA0BjvC,KAAK8uC,mBACnD9uC,KAAKq+C,eAAep8C,gBAAgBjC,KAAK2/C,uBACzC3/C,KAAKigB,YAAYhe,gBAAgBjC,KAAKu/C,aACtCv/C,KAAKigB,YAAY+B,4BAA4BhiB,KAAKigD,wBAElD,MAAMwI,GAAoBpnD,OAAOuoC,iBAAmBvoC,OAAOwoC,gBAAgBz1B,QACvE,kBAOJ,GALAsxB,EAASW,WAAaoiB,EACK,SAArBA,IACE/iB,EAAS7hB,aAAa3f,OAAOmiC,WAGjCrmC,KAAKX,OAAOglB,UAA2C,QAAnC4jC,EAAIjoD,KAAKX,OAAOwkB,aAAayQ,cAAM,IAAA2zB,GAA/BA,EAAiClc,OACzD,IAAK,IAAD2c,EACA,MAAMlE,QAAaxkD,KAAKX,OAAOspD,iBAEzBC,QAAgB5oD,KAAKX,OAAO8rB,UAAU,eAAeq5B,KAEzC,QAAlBkE,EAAIE,EAAQt0B,cAAM,IAAAo0B,GAAdA,EAAgB3c,QAChB9qC,OAAO+zB,OAAOh1B,KAAKskB,eAAgBskC,EAAQt0B,OAAOyX,QAGlD/rC,KAAKX,OAAOglB,WACZrkB,KAAKuD,SAAS,CACVihD,KAAM,CACF1kD,GAAI8oD,EAAQlnD,IACZoN,KAAMvG,EAAAA,MAAMsgD,qBAAqBD,EAAS5oD,KAAKX,OAAO8I,YACtD9C,MAAOujD,EAAQ1kD,OAAOmB,MACtBgM,KAAMu3C,EAAQ1kD,OAAOmN,KACrBy3C,iBAAkB9oD,KAAKsmD,qBAAqBsC,EAAQ1kD,OAAOmB,UAK9DrF,KAAK+oD,eAElB,CAAE,MAAO3nD,GACL2kB,QAAQ7c,MAAM,qCAAqC9H,EAAEqR,eAAerR,EAAEqgD,SACtEzhD,KAAK0hD,UAAUtgD,EAAEqR,WAAY,QACjC,CAGJzS,KAAKuD,SAASmiC,GAAsB,IAAM1lC,KAAK+hD,uBAE1C/hD,KAAKX,OAAOgI,eAAe,mCAAoCrH,KAAK4/C,kBAGzEltC,YAAW,IAAM1S,KAAK2hD,kBAAkB3hD,KAAKoG,MAAM8+B,cAAc,KAEjExyB,YACI,IACI1S,KAAKgpD,mBAAmBjoD,MAAK+H,IACzB9I,KAAK0+C,aAAe51C,EACf9I,KAAKX,OAAOgI,eAAe,SAASyB,kBAA0B9I,KAAKsgD,OAAO,KAEvF,KAGJ5tC,YAAWqO,UACP,MAAMvT,QAAsBxN,KAAKigB,YAAYC,iBAAiBwlB,EAASR,mBACjEllC,KAAKigD,uBAAuBzyC,EAAc,GACjD,IACP,CAAE,MAAOpM,GACL2kB,QAAQ7c,MAAM,qBAAqB9H,EAAEqgD,SACrCzhD,KAAK0hD,UAAU,qBAAqBtgD,EAAEqgD,QAAS,QACnD,GAEJn4C,QAAUJ,IAEN,IAAI+/C,EADJljC,QAAQ7c,MAAMA,GAGV+/C,EADA//C,aAAiBggD,OACNhgD,EAAMvE,SAENuE,EAAMuJ,WAEJ,8BAAbw2C,EACKjpD,KAAKoG,MAAMs/C,oBACZ1lD,KAAK0hD,UAAUh5C,EAAAA,KAAKC,EAAEsgD,GAAW,SACjCpB,aAAY,KACJ7nD,KAAKoG,MAAMu/C,eAAiB,EAC5B3lD,KAAKuD,SAAS,CAAEoiD,eAAgB3lD,KAAKoG,MAAMu/C,eAAiB,IAE5DtkD,OAAOuR,SAAS2zB,QACpB,GACD,KAEHvmC,KAAKuD,SAAS,CACVmiD,mBAAmB,EACnBC,eAAgB,MAIxB3lD,KAAK0hD,UAAUuH,EAAU,QAC7B,IAIhB,CAEA7mC,oBAAAA,GAA8B,IAAD+mC,EAAAC,EAAAC,EAAAC,EACzBjoD,OAAOkoD,oBAAoB,aAAcvpD,KAAK6hD,eAAe,GAClD,QAAXsH,EAAAnpD,KAAKX,cAAM,IAAA8pD,GAAXA,EAAa9a,iBAAiB,mCAAoCruC,KAAK4/C,kBAEpD,QAAnBwJ,EAAAppD,KAAKq+C,sBAAc,IAAA+K,GAAnBA,EAAqBla,4BAA4BlvC,KAAK8uC,mBACnC,QAAnBua,EAAArpD,KAAKq+C,sBAAc,IAAAgL,GAAnBA,EAAqBhnD,kBAAkBrC,KAAK2/C,uBAC5B,QAAhB2J,EAAAtpD,KAAKigB,mBAAW,IAAAqpC,GAAhBA,EAAkBjnD,kBAAkBrC,KAAKu/C,aAErCv/C,KAAKi+C,WACL5hC,aAAarc,KAAKi+C,UAClBj+C,KAAKi+C,SAAW,MAEhBj+C,KAAKk+C,sBACLsL,cAAcxpD,KAAKk+C,qBACnBl+C,KAAKk+C,oBAAsB,MAG3B78C,OAAO6S,gBACP7S,OAAO6S,cAAgB,KACvB7S,OAAOuoC,gBAAkB,KAEjC,CAiEA,qBAAM4e,CAAgB9iB,GAGlB,GAFAA,EAAS1iC,YAAchD,KAAKX,OAAOmvC,mBAE9BxuC,KAAKoG,MAAM8+B,YAAa,CACzB,MAAMA,GAAe7jC,OAAO6S,eAAiB7S,OAAO8S,cAAcC,QAAQ,mBAEpEq1C,EAAW/jB,EAAS1iC,MAAM6L,MAAKI,GAAQA,EAAKvN,MAAQwjC,IAE5B,IAADwkB,EAGtBC,EAHP,GAAIzkB,GAAeukB,EACf/jB,EAASR,YAAcukB,EAAS/nD,IAChCgkC,EAAS4e,iBAAiC,QAAfoF,EAAAD,EAASvlD,cAAM,IAAAwlD,OAAA,EAAfA,EAAiB56C,OAAQ26C,EAAS/nD,IAAImG,QAAQ,eAAgB,SAEzF69B,EAASR,YAAcQ,EAAS1iC,MAAM,GAAGtB,IACzCgkC,EAAS4e,iBACmB,QAAxBqF,EAAAjkB,EAAS1iC,MAAM,GAAGkB,cAAM,IAAAylD,OAAA,EAAxBA,EAA0B76C,OAAQ42B,EAAS1iC,MAAM,GAAGtB,IAAImG,QAAQ,eAAgB,GAE5F,CAKA,IAAIvB,EAHJo/B,EAAS6e,QAAU7e,EAASR,YAI5B,IACI5+B,QAActG,KAAKX,OAAO+H,SAAS,GAAGs+B,EAASR,oBACnD,CAAE,MAAO9jC,GACLkF,EAAQ,KACRyf,QAAQtM,KAAK,oBAAoBisB,EAASR,sBAAsB9jC,IACpE,CAEA,IAAKkF,IAAUA,EAAMC,IAEjB,IAAK,IAAIqjD,EAAI,EAAGA,EAAIlkB,EAAS1iC,MAAMnC,OAAQ+oD,IACvCtjD,QAActG,KAAKX,OAAO+H,SAAS,GAAGs+B,EAAS1iC,MAAM4mD,GAAGloD,aACpD4E,GAASA,EAAMC,MACfm/B,EAASR,YAAcQ,EAAS1iC,MAAM4mD,GAAGloD,IACzCgkC,EAAS4e,gBAAkB5e,EAAS1iC,MAAM4mD,GAAG1lD,OAAO4K,KAIpE,CAEA+6C,cAAAA,GACI,MAAMpjD,EAAMD,KAAKC,MACjBzG,KAAK+9C,YAAc/9C,KAAK+9C,YAAc,EAAI/9C,KAAK+9C,aAAet3C,EAAMzG,KAAKg+C,eAAiB,IAAQ,EAElG,MAAMjjB,EAAOxyB,EAAAA,MAAMuhD,WAAW9pD,KAAK+9C,aAC/B/9C,KAAK69C,QAAQjmC,UACb5X,KAAK69C,QAAQjmC,QAAQzH,MAAQnQ,KAAKo+C,WAAWv2C,QAAQ,KAAMkzB,IAE3D/6B,KAAK+9C,YAAc/9C,KAAK29C,0BAA4B39C,KAAK89C,WAAWlmC,SACpE5X,KAAK89C,WAAWlmC,QAAQmyC,UAAYhvB,EAE/B/6B,KAAKoG,MAAMo/C,mBACZxlD,KAAKuD,SAAS,CAAEiiD,mBAAmB,KAEhCxlD,KAAKoG,MAAMo/C,oBAClBxlD,KAAK89C,WAAWlmC,QAAQmyC,UAAY/pD,KAAKoG,MAAMo+C,KAAK11C,KACpD9O,KAAKuD,SAAS,CAAEiiD,mBAAmB,KAGnCxlD,KAAK+9C,aAAe,IACpB18C,OAAOC,MAAM,mBAEboR,YAAW,IAAMrR,OAAOuR,SAAS2zB,UAAU,MAG/CvmC,KAAKg+C,cAAgBv3C,CACzB,CAKA,kBAAMsiD,GACE/oD,KAAKi+C,WACL5hC,aAAarc,KAAKi+C,UAClBj+C,KAAKi+C,SAAW,MAGpB,IACI,MAAMt3C,QAAa3G,KAAKX,OAAO2qD,oBAE3BrjD,IACK3G,KAAKk+C,sBACNl+C,KAAKk+C,oBAAsB2J,aAAY,IAAM7nD,KAAK6pD,kBAAkB,MAExE7pD,KAAK+9C,YAAcp3C,EAAKo3C,YACxB/9C,KAAKg+C,cAAgBx3C,KAAKC,MAC1BzG,KAAK6pD,iBAEb,CAAE,MAAOzoD,GACLC,OAAOC,MAAM,oBAAoBF,KAEjCsR,YAAW,IAAMrR,OAAOuR,SAAS2zB,UAAU,IAC/C,CACJ,CAuBA,sBAAMyiB,GAEF,IAAK,IAAIlgD,EAAW,EAAGA,EADN,IAC2BA,IACxC,IACI,MAAMmhD,QAAmBjqD,KAAKX,OAAO+H,SAAS,wBAAwB0B,WACtE,GAAc,OAAVmhD,QAAU,IAAVA,GAAAA,EAAY1jD,IACZ,OAAOuC,CAEf,CAAE,MAAO1H,GACL2kB,QAAQ7c,MAAM,8BAA8B9H,EAAEqgD,SAC9CzhD,KAAK0hD,UAAU,8BAA8BtgD,EAAEqgD,QAAS,QAC5D,CAEJ,OAAO,CACX,CAKAyI,yBAAAA,GAAiD,IAADC,EAAAC,EAC5C,OAAKpqD,KAAKoG,MAAM4/C,qBAKZzhD,EAAAA,EAAAA,KAAC8lD,EAAmB,CAChB78C,eAAuC,QAAxB28C,EAAAnqD,KAAKoG,MAAMoH,qBAAa,IAAA28C,OAAA,EAAxBA,EAA0B38C,gBAAiB,CAAC,EAC3DG,WAAmC,QAAxBy8C,EAAApqD,KAAKoG,MAAMoH,qBAAa,IAAA48C,OAAA,EAAxBA,EAA0Bz8C,YAAa,CAAC,EACnDF,QAASA,IAAMzN,KAAKuD,SAAS,CAAEyiD,qBAAqB,IACpDt4C,YAAaA,CAACuB,EAAMH,IAAS9O,KAAKX,OAAOirD,mBAAmBr7C,EAAMH,GAClE7E,WAAYjK,KAAKoG,MAAMyd,aAAa3f,OAAO+F,WAC3CD,aAAchK,KAAKoG,MAAMyd,aAAa3f,OAAO8F,aAC7CF,UAAW9J,KAAKoG,MAAM0D,UACtBD,UAAW7J,KAAKoG,MAAMyD,UACtBE,MAAO/J,KAAKoG,MAAM2D,MAClB1K,OAAQW,KAAKX,SAdV,IAiBf,CAEAkrD,uBAAAA,GACI,OAAKvqD,KAAKoG,MAAMi6C,iBAKZ97C,EAAAA,EAAAA,KAACimD,GAAiB,CACd78C,UAAW3N,KAAKoG,MAAMi6C,gBAAgB1yC,UACtCS,SAAUpO,KAAKoG,MAAMi6C,gBAAgBv4C,OAAO8Y,OAAOpR,WACnDvF,WAAYjK,KAAKoG,MAAMyd,aAAa3f,OAAO+F,WAC3CH,UAAW9J,KAAKoG,MAAM0D,UACtB4D,YAAaoB,GAAQ9O,KAAKX,OAAOirD,mBAAmBtqD,KAAKoG,MAAMi6C,gBAAgBpxC,KAAMH,GACrFrB,QAASA,IAAMzN,KAAKuD,SAAS,CAAE88C,gBAAiB,SAV7C,IAaf,CA6HAoK,gBAAAA,GACI,OAAKzqD,KAAKoG,MAAMo7C,UAIZj9C,EAAAA,EAAAA,KAACmmD,GAAAA,EAAe,CACZC,QAAS3qD,KAAKoG,MAAMo7C,SAASP,UAC7BrpC,QAAS5X,KAAKoG,MAAMo7C,SAAShB,WAC7BoK,gBAAiB7pC,UACTjhB,SACME,KAAKX,OAAOkE,SAAS,SAASvD,KAAK0+C,+BAAgC,CACrEn4C,IAAKzG,EACLk5C,KAAK,IAGbh5C,KAAKuD,SAAS,CAAEi+C,SAAU,MAAO,IAblC,IAiBf,CAEAqJ,2BAAAA,GACI,OAAK7qD,KAAKoG,MAAMm/C,2BAKZhhD,EAAAA,EAAAA,KAACumD,GAAAA,EAA2B,CACxB1F,cAAeplD,KAAKoG,MAAMg/C,cAC1Bz8C,EAAGD,EAAAA,KAAKC,EACR8E,QAAS23C,IACDA,EACAplD,KAAKuD,SAAS,CAAEgiD,2BAA2B,EAAOH,kBAAiB,IAC/DplD,KAAK0/C,yBAAyB1/C,KAAKoG,MAAM8+B,eAG7CllC,KAAKuD,SAAS,CAAEgiD,2BAA2B,GAC/C,IAdD,IAkBf,CAEA,8BAAM7F,CAAyBxa,EAAqBliC,EAA8BnB,GAC9EmB,EAAQA,GAAShD,KAAKoG,MAAMpD,MAE5B,MAAMC,QAAsCjD,KAAKX,OAC5C0rD,qBAAqB7lB,EAAarjC,EAAQ7B,KAAKoG,MAAMg/C,eACrDjkD,OAAMC,IACHC,OAAOC,MAAM,gCAAgCF,KACzCA,EAAEqR,WAAWtQ,SAAS,YACtBnC,KAAKuD,SAAS,CAAEgiD,2BAA2B,IAExC,CAAC,KAGVriD,QAAwClD,KAAKX,OAC9C2rD,oBAAoB9lB,EAAarjC,EAAQ7B,KAAKoG,MAAMg/C,eACpDjkD,OAAMC,IACHC,OAAOC,MAAM,wBAAwBF,KACjCA,EAAEqR,WAAWtQ,SAAS,YACtBnC,KAAKuD,SAAS,CAAEgiD,2BAA2B,IAExC,CAAC,KAGVpE,QAAqDnhD,KAAKX,OAAO4rD,mBAAmBppD,GAAQV,OAAMC,IACpGC,OAAOC,MAAM,yBAAyBF,KAC/B,CAAC,KAGR8B,GAAai+C,GACblgD,OAAOC,KAAKigD,GAAU1gD,SAAQX,IACtBoD,EAAUpD,IAAOqhD,EAASrhD,GAAIorD,KAC9BhoD,EAAUpD,GAAIwE,cAAgB68C,EAASrhD,GAAIorD,GAC/C,IAIRlrD,KAAKuD,SAAS,CACVN,aACAC,YACAF,QACAm+C,YAER,CAgBA,cAAO8F,GACH,IAAIze,EAAOn/B,SAAShI,OAAOuR,SAAS41B,KAAM,IAE1C,GAAI2iB,OAAOC,MAAM5iB,GACb,OAAQiV,GAAI4N,eACR,IAAK,SACD7iB,EAAO,IACP,MACJ,IAAK,QACDA,EAAO,GAWnB,OAJKA,GAAiB,MAATA,IACTA,EAAO,MAGJA,CACX,CAKA,kBAAe6iB,GACX,OAAOhqD,OAAOuR,SAASE,QAC3B,CAKA,kBAAeovC,CAAYpzC,GACvB,OAAOw8C,EAAAA,EAAAA,OAAM/iD,EAAAA,MAAMw7C,aAAaj1C,GACpC,CAKA,mBAAei1C,CAAah6C,GACxB,OAAOA,EAAM+E,IACjB,CAKA,mBAAeqzC,CAAap4C,GACxB,OAAOA,EAAMS,QAAQe,IACzB,CAsBAw2C,kBAAAA,GACI/hD,KAAK+iD,SAAS/iD,KAAKoG,MAAM6e,WAAWlO,IAAIlP,QAAQ,OAAQ,IAC5D,CAEAk7C,QAAAA,CAAS5yC,GACLgZ,SAAShZ,MAAQ,GAAGA,OAAWnQ,KAAKoG,MAAMk+C,iBAAmB,YACjE,CAEAiH,aAAAA,GACI,GAAIvrD,KAAKoG,OAASpG,KAAKoG,MAAM6e,YAAcjlB,KAAKoG,MAAM6e,WAAWlO,IAAK,CAClE,GAAkC,iBAA9B/W,KAAKoG,MAAM6e,WAAWlO,IAAwB,CAC9C,MAAMy0C,EAA6B,OAArBxrD,KAAKgG,MAAMlB,OAAuC,OAArB9E,KAAKgG,MAAMlB,MAChD2mD,GAAUD,GAASxrD,KAAKoG,MAAM69C,cAAgBnB,GAC9C4I,EAASF,GAASxrD,KAAKoG,MAAM69C,cAAgBnB,GAEnD,OACIv+C,EAAAA,EAAAA,KAAConD,EAAAA,SAAQ,CAACC,UAAUrnD,EAAAA,EAAAA,KAACsnD,GAAU,IAAIxoD,UAC/BkB,EAAAA,EAAAA,KAACm2C,GAAQ,CACL3wC,MAAO/J,KAAKoG,MAAM2D,MAClB+hD,cAAe9rD,KAAKoG,MAAM0/C,qBAE1BL,oBAAqBzlD,KAAKoG,MAAMq/C,oBAChCpH,eAAgBr+C,KAAKq+C,eACrBt8B,gBAAiB/hB,KAAK+hB,gBACtBjY,UAAW9J,KAAKoG,MAAM0D,UACtB+Z,aAAc7jB,KAAKoG,MAAMyd,aACzBxkB,OAAQW,KAAKX,OACb0sD,UAAW/rD,KAAKoG,MAAMm+C,QACtBtkC,YAAajgB,KAAKigB,YAClBilB,YAAallC,KAAKoG,MAAM8+B,YACxBnwB,MAAO/U,KAAKoG,MAAM2O,MAClBpM,EAAGD,EAAAA,KAAKC,EACRua,KAAMxa,EAAAA,KAAK0I,cACXi1B,WAAYrmC,KAAKoG,MAAMigC,WACvB9T,eAAgBA,CAACnd,EAAanG,EAAekG,IACzCnV,KAAKuyB,eAAend,EAAKnG,EAAMkG,GAEnC+vC,eAAgBllD,KAAKoG,MAAM8+C,eAC3B5vC,oBAAqB4vC,GAAkBllD,KAAKuD,SAAS,CAAE2hD,mBACvD8G,WAAYP,EACZQ,WAAYP,EACZpnC,eAAgBtkB,KAAKskB,eACrB+6B,kBAAmBr/C,KAAKq/C,kBACxBC,cAAet/C,KAAKoG,MAAMk5C,cAC1Bx5B,cAAe9lB,KAAK8lB,cACpBomC,oBAAqBlsD,KAAKoG,MAAMye,aAChCsnC,WAAYpG,GAAY/lD,KAAKuD,SAAS,CAAEwiD,cA1BpC,aA8BpB,CACA,GAAkC,kBAA9B/lD,KAAKoG,MAAM6e,WAAWlO,IACtB,OACIxS,EAAAA,EAAAA,KAAConD,EAAAA,SAAQ,CAACC,UAAUrnD,EAAAA,EAAAA,KAACsnD,GAAU,IAAIxoD,UAC/BkB,EAAAA,EAAAA,KAACo2C,GAAS,CAENyR,YACIpsD,KAAKoG,MAAM69C,cAAgBnB,GACrB,EACA9iD,KAAKoG,MAAM69C,cAAgBnB,GACzB9iD,KAAKoG,MAAMuT,aACPsD,GACAD,G/BlyDR,G+BqyDR3d,OAAQW,KAAKX,OACb0iB,gBAAiB/hB,KAAK+hB,gBACtBmB,KAAMxa,EAAAA,KAAK0I,cACXyU,SAAU7lB,KAAKoG,MAAMyf,SACrBC,cAAe9lB,KAAK8lB,cACpB7iB,WAAYjD,KAAKoG,MAAMnD,WACvBD,MAAOhD,KAAKoG,MAAMpD,MAClB6G,UAAW7J,KAAKoG,MAAMyD,UACtBC,UAAW9J,KAAKoG,MAAM0D,UACtBC,MAAO/J,KAAKoG,MAAM2D,MAClBs8B,WAAYrmC,KAAKoG,MAAMigC,WACvBnB,YAAallC,KAAKoG,MAAM8+B,YACxBof,gBAAiBtkD,KAAKoG,MAAMk+C,gBAC5B37C,EAAGD,EAAAA,KAAKC,EACRsB,WAAYjK,KAAKoG,MAAMyd,aAAa3f,OAAO+F,WAC3CD,aAAchK,KAAKoG,MAAMyd,aAAa3f,OAAO8F,aAC7ClF,MAAO9E,KAAKgG,MAAMlB,MAClBunD,aAAe5nD,GAAmBzE,KAAK0iD,UAAUj+C,GACjD8tB,eAAgBA,CAACnd,EAAanG,EAAekG,IACzCnV,KAAKuyB,eAAend,EAAKnG,EAAMkG,GAEnCm3C,oBAAqBtsD,KAAKoG,MAAM4O,cAAgBhV,KAAKoG,MAAM8O,UAC3Dq3C,oBAAsBv1C,GAA4BhX,KAAK49C,gBAAkB5mC,EACzEw1C,sBAAwBx1C,IAChBhX,KAAK49C,kBAAoB5mC,IACzBhX,KAAK49C,gBAAkB,KAC3B,EAEJx5B,iBAAkBpkB,KAAKokB,kBAtCnB,eA2CpB,GAAkC,cAA9BpkB,KAAKoG,MAAM6e,WAAWlO,IACtB,OACIxS,EAAAA,EAAAA,KAAConD,EAAAA,SAAQ,CAACC,UAAUrnD,EAAAA,EAAAA,KAACsnD,GAAU,IAAIxoD,UAC/BkB,EAAAA,EAAAA,KAACq2C,GAAK,CAEF/0B,SAAU7lB,KAAKoG,MAAMyf,SACrBC,cAAe9lB,KAAK8lB,cACpB/D,gBAAiB/hB,KAAK+hB,gBACtB9B,YAAajgB,KAAKigB,YAClByhC,UAAWA,CAAC/8C,EAAiBzE,IACzBF,KAAK0hD,UAAU/8C,EAASzE,GAE5Bb,OAAQW,KAAKX,OACbsJ,EAAGD,EAAAA,KAAKC,EACRua,KAAMxa,EAAAA,KAAK0I,cACXrH,MAAO/J,KAAKoG,MAAM2D,OAXd,WAgBpB,GAAkC,aAA9B/J,KAAKoG,MAAM6e,WAAWlO,IACtB,OACIxS,EAAAA,EAAAA,KAAConD,EAAAA,SAAQ,CAACC,UAAUrnD,EAAAA,EAAAA,KAACsnD,GAAU,IAAIxoD,UAC/BkB,EAAAA,EAAAA,KAACs2C,GAAI,CAEDlyC,EAAGD,EAAAA,KAAKC,EACR7D,MAAO9E,KAAKgG,MAAMlB,MAClBoe,KAAMljB,KAAKoG,MAAM8c,KACjB7jB,OAAQW,KAAKX,OACbyK,UAAW9J,KAAKoG,MAAM0D,UACtBC,MAAO/J,KAAKoG,MAAM2D,MAClBgL,MAAO/U,KAAKoG,MAAM2O,MAClBkN,WAAYjiB,KAAKiiB,WACjBokB,WAAYrmC,KAAKoG,MAAMigC,WACvBnB,YAAallC,KAAKoG,MAAM8+B,YACxBjlB,YAAajgB,KAAKigB,YAClBwsC,YAAaA,IAAMzsD,KAAK0sD,kBAZpB,UAiBpB,GAAkC,cAA9B1sD,KAAKoG,MAAM6e,WAAWlO,IACtB,OACIxS,EAAAA,EAAAA,KAAConD,EAAAA,SAAQ,CAACC,UAAUrnD,EAAAA,EAAAA,KAACsnD,GAAU,IAAIxoD,UAC/BkB,EAAAA,EAAAA,KAACu2C,GAAK,CAEF/lC,MAAO/U,KAAKoG,MAAM2O,MAClBpM,EAAGD,EAAAA,KAAKC,EACR09B,WAAYrmC,KAAKoG,MAAMigC,WACvBnjB,KAAMxa,EAAAA,KAAK0I,cACX/R,OAAQW,KAAKX,OACbyK,UAAW9J,KAAKoG,MAAM0D,UACtBC,MAAO/J,KAAKoG,MAAM2D,OAPd,WAYpB,GAAkC,cAA9B/J,KAAKoG,MAAM6e,WAAWlO,IACtB,OACIxS,EAAAA,EAAAA,KAAConD,EAAAA,SAAQ,CAACC,UAAUrnD,EAAAA,EAAAA,KAACsnD,GAAU,IAAIxoD,UAC/BkB,EAAAA,EAAAA,KAACy2C,GAAK,CAEFjmC,MAAO/U,KAAKoG,MAAM2O,MAClBpM,EAAGD,EAAAA,KAAKC,EACR09B,WAAYrmC,KAAKoG,MAAMigC,WACvBnjB,KAAMxa,EAAAA,KAAK0I,cACX/R,OAAQW,KAAKX,OACbyK,UAAW9J,KAAKoG,MAAM0D,UACtBC,MAAO/J,KAAKoG,MAAM2D,OAPd,WAYpB,GAAkC,cAA9B/J,KAAKoG,MAAM6e,WAAWlO,IACtB,OACIxS,EAAAA,EAAAA,KAAConD,EAAAA,SAAQ,CAACC,UAAUrnD,EAAAA,EAAAA,KAACsnD,GAAU,IAAIxoD,UAC/BkB,EAAAA,EAAAA,KAAC02C,GAAK,CAEFtyC,EAAGD,EAAAA,KAAKC,EACRua,KAAMxa,EAAAA,KAAK0I,cACX/R,OAAQW,KAAKX,OACbyK,UAAW9J,KAAKoG,MAAM0D,UACtBC,MAAO/J,KAAKoG,MAAM2D,OALd,WAUpB,GAAkC,gBAA9B/J,KAAKoG,MAAM6e,WAAWlO,IACtB,OACIxS,EAAAA,EAAAA,KAAConD,EAAAA,SAAQ,CACLC,UAAUrnD,EAAAA,EAAAA,KAACsnD,GAAU,IAAIxoD,UAGzBkB,EAAAA,EAAAA,KAACw2C,GAAO,CACJpyC,EAAGD,EAAAA,KAAKC,EACRoB,MAAO/J,KAAKoG,MAAM2D,MAClBF,UAAW7J,KAAKoG,MAAMyD,UACtBC,UAAW9J,KAAKoG,MAAM0D,UACtBu8B,WAAYrmC,KAAKoG,MAAMigC,WACvBiY,cAAet+C,KAAKs+C,cACpBp7B,KAAMxa,EAAAA,KAAK0I,cACX/R,OAAQW,KAAKX,OACb4K,WAAYjK,KAAKoG,MAAMyd,aAAa3f,OAAO+F,WAC3CD,aAAchK,KAAKoG,MAAMyd,aAAa3f,OAAO8F,gBAZ7C,WAiBhB,GAAkC,cAA9BhK,KAAKoG,MAAM6e,WAAWlO,IACtB,OACIxS,EAAAA,EAAAA,KAAConD,EAAAA,SAAQ,CAACC,UAAUrnD,EAAAA,EAAAA,KAACsnD,GAAU,IAAIxoD,UAC/BkB,EAAAA,EAAAA,KAAC42C,GAAK,CACF97C,OAAQW,KAAKX,OACb6jB,KAAMxa,EAAAA,KAAK0I,cACX6O,YAAajgB,KAAKigB,YAClBo/B,kBAAmBr/C,KAAKq/C,kBACxBC,cAAet/C,KAAKoG,MAAMk5C,cAC1Bx1C,UAAW9J,KAAKoG,MAAM0D,UACtBC,MAAO/J,KAAKoG,MAAM2D,MAClBs8B,WAAYrmC,KAAKoG,MAAMigC,WACvB19B,EAAGD,EAAAA,KAAKC,EACRgkD,SAAUh3B,EAAAA,OAAOC,WACjBsP,YAAallC,KAAKoG,MAAM8+B,YACxB3S,eAAgBA,CAACnd,EAAanG,EAAekG,IACzCnV,KAAKuyB,eAAend,EAAKnG,EAAMkG,GAEnC0O,aAAc7jB,KAAKoG,MAAMyd,aACzBu8B,oBAAqBpgD,KAAKogD,oBAC1Bt6B,cAAe9lB,KAAK8lB,cACpBqmC,WAAapG,GAAsB/lD,KAAKuD,SAAS,CAAEwiD,aACnDhkC,gBAAiB/hB,KAAK+hB,oBAMtC,GADU/hB,KAAKoG,MAAM6e,WAAWlO,IAAIiM,MAAM,yBAGtC,OACIze,EAAAA,EAAAA,KAAConD,EAAAA,SAAQ,CAACC,UAAUrnD,EAAAA,EAAAA,KAACsnD,GAAU,IAAIxoD,UAC/BkB,EAAAA,EAAAA,KAAC22C,GAAS,CAENvyC,EAAGD,EAAAA,KAAKC,EACRkd,SAAU7lB,KAAKoG,MAAMyf,SACrBC,cAAe9lB,KAAK8lB,cACpB9iB,MAAOhD,KAAKoG,MAAMpD,MAClB+e,gBAAiB/hB,KAAK+hB,gBACtBhL,IAAK/W,KAAKoG,MAAM6e,WAAWlO,IAC3BlN,UAAW7J,KAAKoG,MAAMyD,UACtBw8B,WAAYrmC,KAAKoG,MAAMigC,WACvBnjB,KAAMxa,EAAAA,KAAK0I,cACXm7C,oBAAsBv1C,GAA4BhX,KAAK49C,gBAAkB5mC,EACzEw1C,sBAAwBx1C,IAChBhX,KAAK49C,kBAAoB5mC,IACzBhX,KAAK49C,gBAAkB,KAC3B,GAdC59C,KAAKoG,MAAM6e,WAAWlO,MAoB/C,CAEA,OAAO,IACX,CAEA21C,cAAAA,GACI1sD,KAAKiiB,WAAWqqB,cAChBtsC,KAAKiiB,WAAWsqB,eACpB,CAEAqgB,gBAAAA,GACI,GAAI5sD,KAAKoG,OAASpG,KAAKoG,MAAM6e,YAAcjlB,KAAKoG,MAAM6e,WAAWkO,OAAQ,CACrE,GAAqC,WAAjCnzB,KAAKoG,MAAM6e,WAAWkO,OACtB,OAAOnzB,KAAK6sD,0BAEhB,GAAqC,cAAjC7sD,KAAKoG,MAAM6e,WAAWkO,OACtB,OAAOnzB,KAAK+/C,mBAEpB,CAEA,OAAO,IACX,CAEA8M,uBAAAA,GACI,OACItoD,EAAAA,EAAAA,KAACqgC,GAAoB,CACjBtgB,eAAgBtkB,KAAKskB,eACrBxf,MAAO9E,KAAKgG,MAAMlB,MAClBogC,YAAallC,KAAKoG,MAAM8+B,YACxBr7B,UAAW7J,KAAKoG,MAAMyD,UACtBC,UAAW9J,KAAKoG,MAAM0D,UACtBC,MAAO/J,KAAKoG,MAAM2D,MAElB0D,QAASsT,UACL4U,EAAAA,OAAOC,WAAW,MAElB,MAAM/R,QAAqB7jB,KAAKX,OAAO8rB,UAAU,iBAE7C+a,EACAlmC,KAAKuD,SAAS,CAAEuiD,qBAAsB9lD,KAAKoG,MAAM0/C,qBAAuB,EAAGjiC,iBAE3E7jB,KAAKuD,SAAS,CAAEsgB,gBACpB,EAEJX,KAAMljB,KAAKoG,MAAM8c,KACjB7jB,OAAQW,KAAKX,OACb4lB,WAAYjlB,KAAKoG,MAAM6e,WACvBqhB,eAAiB7hC,KACZpD,OAAOuoC,iBAAmBvoC,OAAOwoC,gBAAgB6c,WAAW,kBAC7D,MAAM7iC,EAAevjB,KAAKoH,MAAMpH,KAAKC,UAAUP,KAAKoG,MAAMyd,eAC1DA,EAAa3f,OAAOmiC,WAAa5hC,EACjCzE,KAAKuD,SAAS,CAAE8iC,WAAY5hC,EAAOof,gBAAe,EAEtDlb,EAAGD,EAAAA,KAAKC,GArBJ,iBAwBhB,CAEAmkD,gBAAAA,CAAiB/zC,EAAgBuuB,GACd,cAAXA,GAIJtnC,KAAKuD,SAAS,CAAEjC,OAAO,GAC3B,CAEAogD,SAAAA,CAAUkD,EAA8BD,GAIpC,IAAIoI,EAHc,UAAdpI,GAAuC,YAAdA,GAAyC,SAAdA,GAAsC,YAAdA,IAC5EA,EAAY,QAKRoI,EAFoB,kBAAjBnI,EACHA,aAAwBsE,MACNtE,EAAajgD,SAAWigD,EAAanyC,WAC/B,OAAjBmyC,QAA0CtzC,IAAjBszC,EACd,OAECA,EAAuBnyC,WAG5BmyC,EAGtB5kD,KAAKuD,SAAS,CACVjC,OAAO,EACPqjD,YACAC,aAAcmI,GAEtB,CAEAlK,iBAAAA,CAAkBz8C,IACb/E,OAAO6S,eAAiB7S,OAAO8S,cAAcyB,QAAQ,kBAAmBxP,EAAMqM,YAC/EzS,KAAKuD,SAAS,CACV0gD,YAAa79C,GAErB,CAEA,aAAO4mD,GAC0B,SAAzB3rD,OAAOuR,SAAS41B,KAChBnnC,OAAOuR,SAASG,KAAO,GAAG1R,OAAOuR,SAASE,aAAazR,OAAOuR,SAASiT,2BAEvExkB,OAAOuR,SAASG,KAAO,mBAAmB1R,OAAOuR,SAASK,UAElE,CAyBAyvC,SAAAA,CAAUj+C,GACNzE,KAAKuD,SAAS,CACVm/C,UAAWj+C,GAEnB,CAEAwoD,wBAAAA,GACIjtD,KAAKuD,SAAS,CAAEo/C,qBAAqB,GACzC,CAEAuK,oBAAAA,GACIltD,KAAKuD,SACD,CACIo/C,qBAAqB,EACrBD,WAAW,IAEf,SAAAyK,EAAAC,EAAAC,EAAA,OACIrtD,KAAKokB,iBAC0B,QADV+oC,EACjBntD,KAAKoG,MAAMw8C,wBAAgB,IAAAuK,OAAA,EAA3BA,EAA6Bp2C,IACF,QADKq2C,EAChCptD,KAAKoG,MAAMw8C,wBAAgB,IAAAwK,OAAA,EAA3BA,EAA6B5K,OACF,QADQ6K,EACnCrtD,KAAKoG,MAAMw8C,wBAAgB,IAAAyK,OAAA,EAA3BA,EAA6B5K,MAChC,GAEb,CAEAlwB,cAAAA,CAAend,EAAanG,EAAekG,GACnB,mBAATlG,IACPkG,EAAWlG,EACXA,EAAO,MAGPjP,KAAKoG,MAAM8O,WAAalV,KAAKoG,MAAM4O,aACnChV,KAAKuD,SACD,CACI6R,IAAK,KACL4vC,WAAW,EACXhwC,cAAc,EACdE,WAAW,EACXC,SAAU,KACV8vC,YAAa,OAEjB,IACIjlD,KAAKuD,SAAS,CACV6R,MACA4vC,WAAW,EACX7vC,gBAKhB4Q,QAAQC,IAAI,YAAY5Q,KAExBpV,KAAKuD,SAAS,CACV6R,MACA4vC,WAAW,EACX7vC,WACA8vC,YAAah2C,GAAQjP,KAAKoG,MAAM8+B,cAExC,CAEAwiB,cAAAA,CAAehnD,GACXV,KAAKuD,SACD,CACI6R,IAAK,KACL4vC,WAAW,EACXhwC,cAAc,EACdE,WAAW,EACXC,SAAU,KACV8vC,YAAa,OAEjB,IAAMvkD,GAAMA,KAEpB,CAEA4sD,kBAAAA,GACI,OAAIttD,KAAKoG,MAAM++C,QAEP5gD,EAAAA,EAAAA,KAAC4vB,GAAY,CACT5B,eAAgBA,CAACnd,EAAanG,EAAekG,IACzCnV,KAAKuyB,eAAend,EAAKnG,EAAMkG,GAEnClG,KAAMjP,KAAKoG,MAAM8+B,YACjB7lC,OAAQW,KAAKX,OACbwK,UAAW7J,KAAKoG,MAAMyD,UACtBC,UAAW9J,KAAKoG,MAAM0D,UACtBmsB,YAAaj2B,KAAKi2B,YAClB/S,KAAMxa,EAAAA,KAAK0I,cACX3D,QAAUioB,IACN11B,KAAKuD,SAAS,CAAE4hD,QAAQ,EAAOS,aAAclwB,EAAUmwB,kBAAmB,KAAM,KACxE7lD,KAAKoG,MAAMw/C,cACXiC,aAAY,KACJ7nD,KAAKoG,MAAMy/C,kBAAoB,EAC/B7lD,KAAKuD,SAAS,CAAEsiD,kBAAmB7lD,KAAKoG,MAAMy/C,kBAAoB,IAElExkD,OAAOuR,SAASG,KAAO/S,KAAKoG,MAAMw/C,YACtC,GACD,IACP,GACF,IAKX,IACX,CAEA2H,kBAAAA,GACkC,IAADC,EAA7B,OAAIxtD,KAAKoG,MAAMw/C,cAEP58C,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACHC,MAAM,EACNtC,QAASA,OAEPpK,SAAA,EAEFkB,EAAAA,EAAAA,KAACmQ,EAAAA,YAAW,CAAArR,SAAEqF,EAAAA,KAAKC,EAAE,mCACrBpE,EAAAA,EAAAA,KAACgM,EAAAA,cAAa,CAAAlN,UACVkB,EAAAA,EAAAA,KAACmnB,EAAAA,kBAAiB,CAAAroB,SACbqF,EAAAA,KAAKC,EAAE,2BAA4B3I,KAAKoG,MAAMy/C,wBAGvD78C,EAAAA,EAAAA,MAACkK,EAAAA,cAAa,CAAA7P,SAAA,CACThC,OAAOosD,SACPpsD,OAAOqsD,OAASrsD,OAAOssD,OAEvBtsD,OAAO8nB,SAASulB,KAAsB,QAAnB8e,EAAInsD,OAAOusD,gBAAQ,IAAAJ,GAAfA,EAAiBK,aACrCtpD,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHE,QAASA,KACL,GAAIhS,OAAOosD,QAEPpsD,OAAOosD,QAAQK,SAAS,iBAAkB9tD,KAAKoG,MAAMw/C,aAAc,SAChE,GAAIvkD,OAAOqsD,OAASrsD,OAAOssD,MAAO,CAErC,MAAM/2B,EAAOzN,SAAS4kC,cAAc,KACpCn3B,EAAKo3B,aAAa,OAAQhuD,KAAKoG,MAAMw/C,cACrChvB,EAAKo3B,aAAa,QAAS,kBAC3Bp3B,EAAKo3B,aAAa,MAAO,WACzBp3B,EAAKq3B,OACT,MAAW9kC,SAASulB,KAGhBrtC,OAAOusD,SAASC,YAAY7tD,KAAKoG,MAAMw/C,aAAc,iBACzD,EACFviD,SAEDqF,EAAAA,KAAKC,EAAE,oBAEZ,KACH3I,KAAKoG,MAAMy/C,mBACRthD,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHtC,QAAQ,YACRwC,QAASA,IAAOhS,OAAOuR,SAASG,KAAO/S,KAAKoG,MAAMw/C,aAAcviD,SAE/DqF,EAAAA,KAAKC,EAAE,qBAEZ,WAKb,IACX,CAEAulD,mBAAAA,GACI,OAAOluD,KAAKoG,MAAMgP,KACd7Q,EAAAA,EAAAA,KAACuP,EAAa,CACVwB,oBAAsB4vC,GAA4BllD,KAAKuD,SAAS,CAAE2hD,mBAClEz3C,QAASA,IAAMzN,KAAK0nD,gBAAe,IAAM1nD,KAAKuD,SAAS,CAAE2hD,gBAAgB,MACzE3wC,QAASvU,KAAKoG,MAAM4+C,UACpB7vC,SAAUnV,KAAKoG,MAAM+O,SACrBV,eAAgBA,IAAMzU,KAAKuD,SAAS,CAAEyhD,WAAW,IACjD5vC,IAAKpV,KAAKoG,MAAMgP,IAChBH,UAAWA,IAAMjV,KAAKuD,SAAS,CAAEyR,cAAc,IAC/CE,UAAWA,IAAMlV,KAAKuD,SAAS,CAAE2R,WAAW,IAC5CV,aAAcxU,KAAKoG,MAAM4O,cAAgBhV,KAAKoG,MAAM8O,UACpDF,aAAchV,KAAKoG,MAAM4O,aACzB3V,OAAQW,KAAKX,OACb4P,KAAMjP,KAAKoG,MAAM6+C,aAAejlD,KAAKoG,MAAM8+B,YAC3CnwB,MAAO/U,KAAKoG,MAAM2O,MAClBpM,EAAGD,EAAAA,KAAKC,IAEZ,IACR,CAEAwlD,gBAAAA,GACoF,IAADC,EAA/E,OAAIpuD,KAAKoG,MAAMo+C,MAA6B,OAArBxkD,KAAKgG,MAAMlB,OAAuC,OAArB9E,KAAKgG,MAAMlB,OAEvDkE,EAAAA,EAAAA,MAAA,OAAA3F,SAAA,CAGQrD,KAAKoG,MAAMyd,aAAa3f,OAAO80B,UAE3Bz0B,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOs0B,SAAS31B,SAAErD,KAAKoG,MAAMyd,aAAa3f,OAAO80B,WAC7D,MAGRhwB,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACV+F,MAAOnQ,KAAKoG,MAAMo+C,KAAK1kD,GACvBwI,GAAI,IACG5D,GAAOs4C,aACNh9C,KAAKoG,MAAMo+C,KAAKsE,iBAAmBpkD,GAAOy4C,oBAAiB7rC,GAEnE0F,IAAKhX,KAAK69C,QAAQx6C,SAAA,CAEjBrD,KAAKoG,MAAMo+C,KAAKnzC,MACb9M,EAAAA,EAAAA,KAACihB,EAAAA,KAAI,CACDhB,IAAKxkB,KAAKoG,MAAMo+C,KAAKnzC,KACrBlI,MAAOzE,GAAOu4C,YAGlB14C,EAAAA,EAAAA,KAAC8pD,EAAAA,OAAQ,CAACllD,MAAOzE,GAAOu4C,YAE5B14C,EAAAA,EAAAA,KAAA,OACIyS,IAAKhX,KAAK89C,WACV30C,MAAO,IACAzE,GAAOw4C,SACV73C,MAAOrF,KAAKoG,MAAMo/C,kBAAoB,QAAwB,QAAf4I,EAAApuD,KAAKoG,MAAMo+C,YAAI,IAAA4J,OAAA,EAAfA,EAAiB/oD,aAASiM,GAC3EjO,SAEDrD,KAAKoG,MAAMo+C,KAAK11C,OAGpB9O,KAAKoG,MAAMo/C,mBACRjhD,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPtB,QAAS0N,gBACC/gB,KAAKX,OAAO2qD,0BACZhqD,KAAK+oD,cAAc,EAC3B1lD,UAEFkB,EAAAA,EAAAA,KAACylC,EAAAA,OAAU,MAEf,WAMK,OAArBhqC,KAAKgG,MAAMlB,OAAuC,OAArB9E,KAAKgG,MAAMlB,OAAkB9E,KAAKoG,MAAMyd,aAAa3f,OAAO80B,UAElFz0B,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAOs0B,SAAS31B,SAAErD,KAAKoG,MAAMyd,aAAa3f,OAAO80B,WAEjE,IACX,CAEAs1B,mBAAAA,GACI,OACI/pD,EAAAA,EAAAA,KAACgqD,EAAAA,SAAQ,CACLplD,MAAOzE,GAAO,SAAS1E,KAAKoG,MAAMu+C,aAClC50C,KAAM/P,KAAKoG,MAAM9E,MACjBktD,iBAAkB,IAClB/gD,QAASA,IAAMzN,KAAK8sD,mBACpBnoD,QAAS3E,KAAKoG,MAAMw+C,cAGhC,CAEAjsB,mBAAAA,GAUI,OAAO34B,KAAKoG,MAAMu8C,qBACdp+C,EAAAA,EAAAA,KAACq0B,EAAAA,cAAa,CACVzoB,MAAOzH,EAAAA,KAAKC,EAAE,kBACdT,KAAMQ,EAAAA,KAAKC,EAAE,sCACb8lD,GAAI/lD,EAAAA,KAAKC,EAAE,MACX+lD,OAAQhmD,EAAAA,KAAKC,EAAE,UACf8E,QAAUkhD,GAAoBA,EAAQ3uD,KAAKktD,uBAAyBltD,KAAKitD,6BAE7E,IACR,CAEA2B,kBAAAA,GACI,OAAK5uD,KAAKoG,MAAMyoD,kBAIZtqD,EAAAA,EAAAA,KAACuqD,GAAgB,CACbrhD,QAAS3F,IACL,GAAe,iBAAXA,EACA6tB,EAAAA,OAAOC,WAAW,KAAM,eACrB,GAAI9tB,EAAQ,CAAC,IAADinD,EAAAC,GACd3tD,OAAOuoC,iBAAmBvoC,OAAOwoC,gBAAgBj0B,QAC9C,iBACA5V,KAAKoG,MAAMigC,WAAa,QAAU,QAElB,QAApB0oB,EAAA/uD,KAAK49C,uBAAe,IAAAmR,GAAe,QAAfC,EAApBD,EAAsBzM,qBAAa,IAAA0M,GAAnCA,EAAqCzM,YAAY,mBAAoB,KACrEviD,KAAKuD,SAAS,CAAEsrD,kBAAkB,EAAOxoB,YAAarmC,KAAKoG,MAAMigC,YACrE,MAAWrmC,KAAKoG,MAAMyoD,kBAClB7uD,KAAKuD,SAAS,CAAEsrD,kBAAkB,GACtC,EAEJxoB,WAAYrmC,KAAKoG,MAAMigC,aAlBpB,IAqBf,CAEA4oB,qBAAAA,GACI,OAAOjvD,KAAKoG,MAAM8oD,iBACdlmD,EAAAA,EAAAA,MAACmmD,EAAAA,KAAI,CACDrzC,SAAU9b,KAAKoG,MAAM8oD,gBACrBn/C,MAAM,EACNtC,QAASA,IAAMzN,KAAKuD,SAAS,CAAE2rD,gBAAiB,OAAQ7rD,SAAA,EAExDkB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CACL/Y,QAASA,KACLrT,KAAKuD,SAAS,CAAE2rD,gBAAiB,OACjClvD,KAAK2mD,mBAAkB,EAAK,EAC9BtjD,SAEDqF,EAAAA,KAAKC,EAAE,qCAEZpE,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CACL/Y,QAASA,KACLrT,KAAKuD,SAAS,CAAE2rD,gBAAiB,OACjClvD,KAAK2mD,mBAAkB,GAAM,EAAK,EACpCtjD,SAEDqF,EAAAA,KAAKC,EAAE,mCAEZK,EAAAA,EAAAA,MAACojB,EAAAA,SAAQ,CAAC/Y,QAASA,IAAMrT,KAAKuD,SAAS,CAAE2rD,gBAAiB,OAAQ7rD,SAAA,EAC9DkB,EAAAA,EAAAA,KAACgW,EAAAA,aAAY,CAAAlX,UACTkB,EAAAA,EAAAA,KAAC8lC,EAAAA,MAAU,CAAC7kC,SAAS,aAEzBjB,EAAAA,EAAAA,KAACmW,EAAAA,aAAY,CAAArX,SAAEqF,EAAAA,KAAKC,EAAE,kBAG9B,IACR,CAEAymD,aAAAA,CAAc5D,GACV,MAAM/C,GAAoBpnD,OAAOuoC,iBAAmBvoC,OAAOwoC,gBAAgBz1B,QAAQ,kBAC7Ei7C,GACD5G,GAA0C,SAArBA,MAAmCzoD,KAAKoG,MAAMyd,aAAa3f,OAAOmiC,WAEtFipB,EAAiB/mD,EAAAA,MAAM4R,SAASna,KAAKoG,MAAM2D,MAAOrF,GAAOwQ,WACzDq6C,EAAkBvvD,KAAKoG,MAAM85C,gBAAgB1/B,QAAUxgB,KAAKoG,MAAM85C,gBAAgBz/B,MAExF,OACIzX,EAAAA,EAAAA,MAACugB,EAAAA,QAAO,CAAAlmB,SAAA,EACJkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACL6yB,KAAK,QACLt+B,MAAO,IACAzE,GAAOo3C,cACL0P,GAASxrD,KAAKoG,MAAM69C,cAAgBnB,QAAoCxxC,EAAd5M,GAAOq3C,MAE1E1oC,QAASA,IAAMrT,KAAK6iD,kBAAkBC,IAA0Bz/C,UAEhEkB,EAAAA,EAAAA,KAACirD,EAAAA,KAAQ,OAEbxmD,EAAAA,EAAAA,MAAA,OAAKG,MAAOzE,GAAOq4C,eAAe15C,SAAA,EAC9BkB,EAAAA,EAAAA,KAAC2L,EAAAA,QAAO,CACJC,MAAOzH,EAAAA,KAAKC,EAAE,iBACdyH,UAAW,CAAEC,OAAQ,CAAE/H,GAAI5D,GAAOm1B,UAAYx2B,UAE9CkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACL66C,eAAgBF,EAChBpmD,MAAO,CAAEjE,QAASqqD,EAAkB,EAAI,IACxCl8C,QAASk8C,EAAkB,IAAMvvD,KAAKuD,SAAS,CAAEyiD,qBAAqB,IAAU,KAAK3iD,UAErFkB,EAAAA,EAAAA,KAACkW,EAAAA,MAAK,CACF5D,aAAc7W,KAAKoG,MAAM85C,gBAAgBz/B,MAAQzgB,KAAKoG,MAAM85C,gBAAgB1/B,QAC5Enb,MAAOrF,KAAKoG,MAAM85C,gBAAgB1/B,QAAU,EAAI,QAAU,YAC1DkvC,IAAK,GAAGrsD,UAERkB,EAAAA,EAAAA,KAACorD,EAAAA,cAAiB,WAI9BprD,EAAAA,EAAAA,KAACs5B,GAAAA,EAAS,CACN/uB,KAAK,yBACL80B,OAAQ5jC,KAAKskB,eAAejhB,SAE3BrD,KAAKoG,MAAM05C,iBACRv7C,EAAAA,EAAAA,KAAC2L,EAAAA,QAAO,CACJC,MAAOzH,EAAAA,KAAKC,EAAE,qBACdyH,UAAW,CAAEC,OAAQ,CAAE/H,GAAI5D,GAAOm1B,UAAYx2B,UAE9CkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMsiB,EAAAA,OAAOC,WAAW,KAAM,aAAavyB,UAEpDkB,EAAAA,EAAAA,KAAC8zC,EAAAA,WAAc,WAK/B9zC,EAAAA,EAAAA,KAACs5B,GAAAA,EAAS,CACN/uB,KAAK,8BACL80B,OAAQ5jC,KAAKskB,eAAejhB,UAE5BkB,EAAAA,EAAAA,KAAC2L,EAAAA,QAAO,CACJC,MAAOzH,EAAAA,KAAKC,EAAE,mBACdyH,UAAW,CAAEC,OAAQ,CAAE/H,GAAI5D,GAAOm1B,UAAYx2B,UAE9CkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMsiB,EAAAA,OAAOC,WAAW,KAAM,UAAUvyB,UAEjDkB,EAAAA,EAAAA,KAAColC,EAAAA,MAAS,UAIrB3pC,KAAKm+C,qBACF55C,EAAAA,EAAAA,KAACs5B,GAAAA,EAAS,CACN/uB,KAAK,2BACL80B,OAAQ5jC,KAAKskB,eAAejhB,UAE5BkB,EAAAA,EAAAA,KAACyxB,EAAAA,gBAAe,CACZphB,KAAK,QACLqhB,YAAaj2B,KAAKi2B,YAClBpsB,UAAW7J,KAAKoG,MAAMyD,UACtBlB,EAAGD,EAAAA,KAAKC,MAGhB,MACJpE,EAAAA,EAAAA,KAACs5B,GAAAA,EAAS,CACN/uB,KAAK,0BACL80B,OAAQ5jC,KAAKskB,eAAejhB,UAE5BkB,EAAAA,EAAAA,KAAC2L,EAAAA,QAAO,CACJC,MAAO,GAAGzH,EAAAA,KAAKC,EAAE,yBACb0mD,EAAsB,GAAK,KAAK3mD,EAAAA,KAAKC,EAAE,qCAE3CyH,UAAW,CAAEC,OAAQ,CAAE/H,GAAI5D,GAAOm1B,UAAYx2B,UAE9CkB,EAAAA,EAAAA,KAACkW,EAAAA,MAAK,CACFpV,MAAM,YACNwL,QAAQ,MACRvI,GAAI,CAAE,oBAAqB5D,GAAO24C,aAClCuS,UAAWP,EAAoBhsD,UAE/BkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,KACwE,IAADw8C,EAAAC,EAA5E,KAAM9vD,KAAKoG,MAAMyd,aAAa3f,OAAOmiC,cAAgBrmC,KAAKoG,MAAMigC,YAC3DhlC,OAAOuoC,iBAAmBvoC,OAAOwoC,gBAAgBj0B,QAC9C,iBACA5V,KAAKoG,MAAMigC,WAAa,QAAU,QAEtCrmC,KAAKuD,SAAS,CAAE8iC,YAAarmC,KAAKoG,MAAMigC,aACpB,QAApBwpB,EAAA7vD,KAAK49C,uBAAe,IAAAiS,GAAe,QAAfC,EAApBD,EAAsBvN,qBAAa,IAAAwN,GAAnCA,EAAqCvN,YAAY,mBAAoB,UAClE,GAGG,UAFLlhD,OAAOuoC,iBAAmBvoC,OAAOwoC,gBAAgBz1B,QAC9C,6BAEN,CAAC,IAAD27C,EAAAC,GACG3uD,OAAOuoC,iBAAmBvoC,OAAOwoC,gBAAgBj0B,QAC9C,iBACA5V,KAAKoG,MAAMigC,WAAa,QAAU,QAEtCrmC,KAAKuD,SAAS,CAAE8iC,YAAarmC,KAAKoG,MAAMigC,aACpB,QAApB0pB,EAAA/vD,KAAK49C,uBAAe,IAAAmS,GAAe,QAAfC,EAApBD,EAAsBzN,qBAAa,IAAA0N,GAAnCA,EAAqCzN,YAAY,mBAAoB,IACzE,MACIviD,KAAKuD,SAAS,CAAEsrD,kBAAkB,GACtC,EAEJ1lD,MAAO,CACH9D,MAAOrF,KAAKoG,MAAMigC,WAAarmC,KAAKoG,MAAM2D,MAAMS,QAAQylD,YAAS3+C,GAErEjM,MAAM,UAAShC,UAEfkB,EAAAA,EAAAA,KAACmlC,EAAAA,WAEG,CACAvgC,MAAO,IACAzE,GAAO83C,cACNx8C,KAAKoG,MAAMigC,WAAa3hC,GAAO+3C,sBAAmBnrC,aAO7EtR,KAAKoG,MAAMigC,YACR9hC,EAAAA,EAAAA,KAAC2L,EAAAA,QAAO,CACJC,MAAOzH,EAAAA,KAAKC,EAAE,iEACdyH,UAAW,CAAEC,OAAQ,CAAE/H,GAAI5D,GAAOm1B,UAAYx2B,UAE9CkB,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASjS,GACLpB,KAAKoG,MAAMm4C,YACLv+C,KAAK2mD,mBAAkB,GACvB3mD,KAAKuD,SAAS,CAAE2rD,gBAAiB9tD,EAAEmR,SAE7CpJ,MAAO,CACH9D,MAAOrF,KAAKoG,MAAMm4C,YAAcv+C,KAAKoG,MAAM2D,MAAMS,QAAQylD,YAAS3+C,GACpEjO,SAEDrD,KAAKoG,MAAMm4C,aAAch6C,EAAAA,EAAAA,KAAC2rD,EAAAA,UAAQ,KAAM3rD,EAAAA,EAAAA,KAAC4rD,EAAAA,aAAgB,QAGlE,MACJ5rD,EAAAA,EAAAA,KAACs5B,GAAAA,EAAS,CACN/uB,KAAK,4BACL80B,OAAQ5jC,KAAKskB,eAAejhB,UAE5BkB,EAAAA,EAAAA,KAAC6rD,GAAAA,EAAa,CACVv2B,QACkC,kBAA9B75B,KAAKoG,MAAM6e,WAAWlO,KACQ,iBAA9B/W,KAAKoG,MAAM6e,WAAWlO,KACQ,aAA9B/W,KAAKoG,MAAM6e,WAAWlO,IAChBrO,EAAAA,KAAKC,EAAE,iEACP2I,EAEVxH,UAAW9J,KAAKoG,MAAM0D,UACtBu8B,WAAYrmC,KAAKoG,MAAMigC,WACvBhnC,OAAQW,KAAKX,OACb4gB,YAAajgB,KAAKigB,YAClBilB,YAAallC,KAAKoG,MAAM8+B,YACxBgH,eAAgBA,CAACmkB,EAAUphD,KACvBjP,KAAKuD,SACD,CACI+gD,gBAAiB+L,EACjBnrB,YAAaj2B,IAEjB8R,UACI/gB,KAAK2hD,kBAAkB1yC,IACtB5N,OAAO6S,eAAiB7S,OAAO8S,cAAcyB,QAAQ,kBAAmB3G,SACnEjP,KAAK0/C,yBAAyBzwC,EAAMjP,KAAKoG,MAAMpD,OAErD,MAAMwK,QAAsBxN,KAAKigB,YAAYC,iBAAiBjR,SACxDjP,KAAKigD,uBAAuBzyC,EAAc,GAEvD,EAELM,SACkC,kBAA9B9N,KAAKoG,MAAM6e,WAAWlO,KACQ,iBAA9B/W,KAAKoG,MAAM6e,WAAWlO,KACQ,aAA9B/W,KAAKoG,MAAM6e,WAAWlO,SAIlCxS,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,GAAO+O,WAClBzT,KAAKoG,MAAMgP,MAAQpV,KAAKoG,MAAM4+C,YAC3BzgD,EAAAA,EAAAA,KAACoQ,EAAAA,WAAU,CACPC,KAAK,QACLvB,QAASA,IAAMrT,KAAKuD,SAAS,CAAEyhD,WAAW,IAAQ3hD,UAElDkB,EAAAA,EAAAA,KAAC+rD,EAAAA,oBAAuB,CACpBnnD,MACInJ,KAAKoG,MAAM4O,aACLtQ,GAAOo4C,SACP98C,KAAKoG,MAAM8O,UACTo6C,EACA5qD,GAAO0Q,WAOlCpV,KAAKmuD,mBAELnuD,KAAKoG,MAAM69C,cAAgBnB,KACvB9iD,KAAKoG,MAAMigC,YACZhlC,OAAOkvD,WAAa,MAChBvnD,EAAAA,EAAAA,MAACwnD,EAAAA,MAAI,CACDn2C,WAAS,EACTlR,MAAO,IACCnJ,KAAKoG,MAAM69C,cAAgBnB,GAAsBp+C,GAAO8Z,mBAAgBlN,KACzE5M,GAAO6Z,kBAEdjE,QAAS,EACTrV,WAAW,SAAQ5B,SAAA,GAEhBrD,KAAKoG,MAAMo+C,MAA6B,OAArBxkD,KAAKgG,MAAMlB,OAAuC,OAArB9E,KAAKgG,MAAMlB,SAC1DkE,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACVjB,MAAOzE,GAAO04C,YACd90C,GAAI,CAAEzD,QAAS,CAAEk0B,GAAI,eAAgBP,GAAI,SAAWn1B,SAAA,EAEpDkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CAAApF,SAAC,WACVrD,KAAKskB,eAAejT,MAAQrR,KAAKoG,MAAMye,eACrC7b,EAAAA,EAAAA,MAACP,EAAAA,WAAU,CACPU,MAAO,IACAzE,GAAO+Z,aACVpZ,MAAgC,SAAzBrF,KAAKoG,MAAM0D,UAAuB,YAAc,aACzDzG,SAAA,CACL,IACKrD,KAAKoG,MAAMye,oBAK7BtgB,EAAAA,EAAAA,KAACisD,EAAAA,MAAI,CAAAntD,UACDkB,EAAAA,EAAAA,KAAA,KACIwO,KAAK,SACLM,QAAS0F,GAASA,EAAMC,iBACxB7P,MAAO,CAAE9D,MAAO,UAAW4T,eAAgB,QAAS5V,SAEnDrD,KAAKskB,eAAejT,MACjB9M,EAAAA,EAAAA,KAAA,OACI4E,MAAO,CACHwB,OAAQ,GACR7F,MAAO,IACPyf,WAAY,OACZ9Z,WAAY,QACZG,aAAc,EACdmS,QAAS,GACX1Z,UAEFkB,EAAAA,EAAAA,KAAA,OACIigB,IAAKxkB,KAAKskB,eAAejT,KACzBoT,IAAI,OACJtb,MAAO,CAAE2B,SAAU,OAAQ4Z,UAAW,aAI9CngB,EAAAA,EAAAA,KAACqgB,EAAAA,OAAM,CACHvR,QAASA,IAAMrT,KAAKokB,iBAAiB,QACrCjb,MAC6B,YAAzBnJ,KAAKoG,MAAMyD,WAAoD,SAAzB7J,KAAKoG,MAAMyD,UAC3CnF,GAAO+2C,eACPnqC,EAEVmT,IAAI,WACJD,IAAI,8BAS5C,CAEAisC,iBAAAA,GACI,MAAM9rD,EAAU3E,KAAKoG,MAAM8/C,eAAevhD,QACpC88C,EAAQzhD,KAAKoG,MAAM8/C,eAAezE,MAExC,OACIz4C,EAAAA,EAAAA,MAAA,OACIG,MAAO,CACH8gB,UAAW,SACXzkB,SAAU,GACV6Y,UAAW,GACX1T,OAAQ,oBACRM,SAAU,QACZ5H,SAAA,EAEFkB,EAAAA,EAAAA,KAAA,MAAI4E,MAAO,CAAE9D,MAAO,QAAShC,SAAC,kBAAkB,4FAC0C,KAC1FkB,EAAAA,EAAAA,KAAA,KACIwO,KAAK,oDACLR,OAAO,SACP62B,IAAI,aAAY/lC,SACnB,YAGDkB,EAAAA,EAAAA,KAAA,SAAM,qEAENA,EAAAA,EAAAA,KAAA,SAAM,yBACeA,EAAAA,EAAAA,KAAA,UACrBA,EAAAA,EAAAA,KAAA,OACIigB,IAAI,uBACJC,IAAI,WAERlgB,EAAAA,EAAAA,KAAA,SAAM,qCAC6B,KACnCA,EAAAA,EAAAA,KAAA,QACI4E,MAAO,CACH9D,MAAO,OACPK,WAAY,YACZF,SAAU,IACZnC,SACL,2CAEO,IAAI,iCAEZkB,EAAAA,EAAAA,KAAA,SAAM,sLAGNA,EAAAA,EAAAA,KAAA,OAAK4E,MAAO,CAAE9D,MAAO,OAAQG,SAAU,GAAI6Y,UAAW,IAAKhb,SAAEsB,KAC7DJ,EAAAA,EAAAA,KAAA,OACI4E,MAAO,CACH9D,MAAO,OACPG,SAAU,GACVE,WAAY,YACZukB,UAAW,OACX5L,UAAW,GACXtB,QAAS,IACX1Z,UAEAo+C,GAAS,IACNhvC,WACA1J,MAAM,MACN0G,KAAI,CAACqc,EAAczZ,KAChBrJ,EAAAA,EAAAA,MAAA,OAAA3F,SAAA,CACKyoB,GACDvnB,EAAAA,EAAAA,KAAA,WAFM8N,SAQlC,CAEAq+C,cAAAA,GAA+B,IAADC,EAAAC,EAC1B,OACIrsD,EAAAA,EAAAA,KAACssD,EAAAA,EAAoB,CAACC,aAAW,EAAAztD,UAC7BkB,EAAAA,EAAAA,KAAC6zC,EAAAA,EAAa,CAACruC,MAAO/J,KAAKoG,MAAM2D,MAAM1G,UACnC2F,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAEwB,OAAQ,QAAStH,SAAA,EACzBrD,KAAKoG,MAAM1G,YAAa6E,EAAAA,EAAAA,KAACsnD,GAAU,KACrCtnD,EAAAA,EAAAA,KAAConD,EAAAA,SAAQ,CAACC,UAAUrnD,EAAAA,EAAAA,KAACsnD,GAAU,IAAIxoD,UAC/BkB,EAAAA,EAAAA,KAAC62C,GAAQ,CACLuR,SAAUh3B,EAAAA,OAAOC,WACjBksB,YAAansB,EAAAA,OAAOmsB,YACpBlvC,SAAU5S,KAAKoG,MAAM6e,WACrBgR,YAAaj2B,KAAKi2B,YAClBpsB,UAAW7J,KAAKoG,MAAMyD,UACtBC,UAAW9J,KAAKoG,MAAM0D,UACtBC,MAAO/J,KAAKoG,MAAM2D,MAClBjF,MAAO9E,KAAKgG,MAAMlB,MAClBghB,cAAe9lB,KAAK8lB,cACpByiC,QAASvoD,KAAKoG,MAAMkiD,gBACpBjpD,OAAQW,KAAKX,OACbgtD,aAAc5nD,GAASzE,KAAK0iD,UAAUj+C,GACtCuF,aAAqC,QAAzB2mD,EAAE3wD,KAAKoG,MAAMyd,oBAAY,IAAA8sC,OAAA,EAAvBA,EAAyBzsD,OAAO8F,aAC9CC,WAAmC,QAAzB2mD,EAAE5wD,KAAKoG,MAAMyd,oBAAY,IAAA+sC,OAAA,EAAvBA,EAAyB1sD,OAAO+F,WAC5CtB,EAAGD,EAAAA,KAAKC,EACRua,KAAMxa,EAAAA,KAAK0I,cACXm7C,oBAAqBv1C,GAAQhX,KAAK49C,gBAAkB5mC,EACpDw1C,sBAAuBx1C,IACfhX,KAAK49C,kBAAoB5mC,IACzBhX,KAAK49C,gBAAkB,KAC3B,EAEJx5B,iBAAkBpkB,KAAKokB,2BAOnD,CAEAja,MAAAA,GACI,MAAMqhD,EAA6B,OAArBxrD,KAAKgG,MAAMlB,OAAuC,OAArB9E,KAAKgG,MAAMlB,MAEtD,OAAI9E,KAAKoG,MAAMs/C,mBAEPnhD,EAAAA,EAAAA,KAACssD,EAAAA,EAAoB,CAACC,aAAW,EAAAztD,UAC7B2F,EAAAA,EAAAA,MAACovC,EAAAA,EAAa,CAACruC,MAAO/J,KAAKoG,MAAM2D,MAAM1G,SAAA,EACnCkB,EAAAA,EAAAA,KAAA,OACI4E,MAAO,CACHrE,MAAO,OACP6F,OAAQ,OACRsf,UAAW,SACXplB,QAAS,OACTI,WAAY,SACZD,eAAgB,SAChBuF,gBAA0C,SAAzBvK,KAAKoG,MAAM0D,UAAuB,UAAY,UAC/DzE,MAAgC,SAAzBrF,KAAKoG,MAAM0D,UAAuB,UAAY,WACvDzG,UAEF2F,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAErE,MAAO,IAAK6F,OAAQ,KAAMtH,SAAA,EACpCkB,EAAAA,EAAAA,KAAC0kC,EAAAA,iBAAgB,KACjBjgC,EAAAA,EAAAA,MAAA,OAAKG,MAAO,CAAE3D,SAAU,IAAKnC,SAAA,CACxBqF,EAAAA,KAAKC,EAAE,yCAA0C,KAClDpE,EAAAA,EAAAA,KAAA,QAAM4E,MAAO,CAAE3D,SAAU,IAAKnC,SAAErD,KAAKoG,MAAMu/C,yBAItD3lD,KAAKsuD,2BAMlBtuD,KAAKoG,MAAM8/C,eACJlmD,KAAKywD,oBAGZzwD,KAAKoG,MAAM84B,OAEP36B,EAAAA,EAAAA,KAACssD,EAAAA,EAAoB,CAACC,aAAW,EAAAztD,UAC7B2F,EAAAA,EAAAA,MAACovC,EAAAA,EAAa,CAACruC,MAAO/J,KAAKoG,MAAM2D,MAAM1G,SAAA,EACnCkB,EAAAA,EAAAA,KAAC0jC,GAAK,CAACt/B,EAAGD,EAAAA,KAAKC,IACd3I,KAAKsuD,2BAKjBtuD,KAAKoG,MAAM2O,OAAU/U,KAAKoG,MAAM2/C,SAoBjC/lD,KAAKoG,MAAMiiD,gBAAgD,SAA9BroD,KAAKoG,MAAM6e,WAAWlO,IAC5C/W,KAAK0wD,kBAIZnsD,EAAAA,EAAAA,KAACssD,EAAAA,EAAoB,CAACC,aAAW,EAAAztD,UAC7B2F,EAAAA,EAAAA,MAACovC,EAAAA,EAAa,CAACruC,MAAO/J,KAAKoG,MAAM2D,MAAM1G,SAAA,EACnCkB,EAAAA,EAAAA,KAAA,SAAAlB,SACK,6vBAsBL2F,EAAAA,EAAAA,MAAC8T,EAAAA,MAAK,CACFi0C,UAAW,EACX5nD,MAAOzE,GAAOpF,KAAK+D,SAAA,EAEnBkB,EAAAA,EAAAA,KAACkM,EAAAA,OAAM,CACHpL,MAAM,UACNT,SAAS,QACT0D,GAAIC,EAAAA,MAAM4R,SACNna,KAAKoG,MAAM2D,MACXrF,GAAO42C,QACNkQ,GACGxrD,KAAKoG,MAAM69C,cAAgBnB,KAC1B9iD,KAAKoG,MAAMuT,cACZjV,GAAOg3C,aACV8P,GACGxrD,KAAKoG,MAAM69C,cAAgBnB,IAC3B9iD,KAAKoG,MAAMuT,cACXjV,GAAOi3C,iBACV6P,GAASxrD,KAAKoG,MAAM69C,cAAgBnB,IAAwBp+C,GAAOk3C,oBACtEv4C,SAEDrD,KAAKovD,cAAc5D,MAExBjnD,EAAAA,EAAAA,KAACysD,EAAAA,EAAW,CAACC,QAAUzF,EAAuB0F,EAAAA,GAAfC,EAAAA,GAA4B9tD,UACvDkB,EAAAA,EAAAA,KAACob,GAAM,CACH2E,eAAgBtkB,KAAKskB,eACrBle,MAAOpG,KAAKoG,MAAM69C,YAClBtqC,aAAc3Z,KAAKoG,MAAMuT,aACzB+I,gBAAkB/I,GAA0B3Z,KAAKuD,SAAS,CAAEoW,iBAC5DkK,aAAc7jB,KAAKoG,MAAMyd,aACzBO,iBAAkBpkB,KAAKokB,iBACvBU,cAAgB1e,GAAqBpG,KAAK6iD,kBAAkBz8C,GAC5DmgB,SAAUA,IAAMk3B,GAAIuP,SACpB/nC,WAAYjlB,KAAKoG,MAAM6e,YAAcjlB,KAAKoG,MAAM6e,WAAWlO,IAC3DgL,gBAAiB/hB,KAAK+hB,gBACtB9B,YAAajgB,KAAKigB,YAClBgC,WAAYjiB,KAAKiiB,WACjBmvC,YAAa1oD,EAAAA,KAAKC,EAAE,UACpB0b,SAAUrkB,KAAKX,OAAOglB,SACtBQ,aAAc7kB,KAAKoG,MAAMye,aACzBlc,EAAGD,EAAAA,KAAKC,EACRua,KAAMxa,EAAAA,KAAK0I,cACX/R,OAAQW,KAAKX,OACbgnC,WAAYrmC,KAAKoG,MAAMigC,WACvBtxB,MAAO/U,KAAKoG,MAAM2O,MAClBlL,UAAW7J,KAAKoG,MAAMyD,UACtBC,UAAW9J,KAAKoG,MAAM0D,UACtB+b,SAAU7lB,KAAKoG,MAAMyf,SACrBC,cAAe9lB,KAAK8lB,cACpB9iB,MAAOhD,KAAKoG,MAAMpD,MAClBC,WAAYjD,KAAKoG,MAAMnD,WACvBC,UAAWlD,KAAKoG,MAAMlD,UACtB6G,MAAO/J,KAAKoG,MAAM2D,WAG1BxF,EAAAA,EAAAA,KAACuY,EAAAA,MAAK,CACFi0C,UAAW,EACXM,QAAM,EACNvxD,GAAG,YACHwI,GAAIC,EAAAA,MAAM4R,SACNna,KAAKoG,MAAM2D,MACXrF,GAAOuH,SACNu/C,GACGxrD,KAAKoG,MAAM69C,cAAgBnB,KAC1B9iD,KAAKoG,MAAMuT,cACZjV,GAAO03C,eACVoP,GACGxrD,KAAKoG,MAAM69C,cAAgBnB,IAC3B9iD,KAAKoG,MAAMuT,cACXjV,GAAO23C,mBACVmP,GAASxrD,KAAKoG,MAAM69C,cAAgBnB,IAAuBp+C,GAAO43C,sBAClEkP,GAASxrD,KAAKoG,MAAM69C,cAAgBnB,IAAuBp+C,GAAO63C,cACrEl5C,SAEDrD,KAAKurD,kBAETvrD,KAAKsuD,yBAETtuD,KAAK4uD,qBACL5uD,KAAK4sD,mBACL5sD,KAAK24B,sBACL34B,KAAKkuD,sBACLluD,KAAKstD,qBACLttD,KAAKutD,qBACLvtD,KAAK6qD,8BACL7qD,KAAKyqD,mBACLzqD,KAAKuqD,0BACLvqD,KAAKkqD,4BACJlqD,KAAKoG,MAAM1G,WAAcM,KAAKoG,MAAMy/C,mBAAsB7lD,KAAKoG,MAAM2/C,SAEnE,MADAxhD,EAAAA,EAAAA,KAACsnD,GAAU,IAEd7rD,KAAKivD,8BA3IV1qD,EAAAA,EAAAA,KAACssD,EAAAA,EAAoB,CAACC,aAAW,EAAAztD,UAC7B2F,EAAAA,EAAAA,MAACovC,EAAAA,EAAa,CAACruC,MAAO/J,KAAKoG,MAAM2D,MAAM1G,SAAA,CACV,OAAxBhC,OAAOyiD,cAAwBv/C,EAAAA,EAAAA,KAAC+sD,EAAAA,SAAQ,CAACxnD,UAAW9J,KAAKoG,MAAM0D,YAAgB,KACvD,OAAxBzI,OAAOyiD,cAAwBv/C,EAAAA,EAAAA,KAACgtD,EAAAA,SAAQ,CAACznD,UAAW9J,KAAKoG,MAAM0D,YAAgB,KAC/EzI,OAAOyiD,cACgB,OAAxBziD,OAAOyiD,cACiB,OAAxBziD,OAAOyiD,cACiB,qBAAxBziD,OAAOyiD,cACHv/C,EAAAA,EAAAA,KAACitD,EAAAA,aAAY,CAAC1nD,UAAW9J,KAAKoG,MAAM0D,YACpC,KACFzI,OAAOyiD,cAAwC,qBAAxBziD,OAAOyiD,aAE5B,MADAv/C,EAAAA,EAAAA,KAACktD,EAAAA,OAAM,CAAC3nD,UAAW9J,KAAKoG,MAAM0D,YAEjC9J,KAAKsuD,0BAkI1B,EAGJ,UAAevnC,EAAAA,EAAAA,YAAf,CAA2B02B,ICjjG3Bp8C,OAAOwH,YAAc,QAErBkd,QAAQC,IAAI,YAAY3kB,OAAOwH,eAAe/E,KAE9C,MAAM4tD,GAAiB,CACnB,iBACA,cACA,gBAGEC,GAAe,CACjB,cACA,gBACA,WACA,mBACA,iBACA,gBACA,oBACA,gBACA,iBACA,oBACA,cACA,6BACA,0DACA,gCACA,0BACA,gCACA,iBAIEtwD,OAAOuwD,sBAAwD,6BAAhCvwD,OAAOuwD,sBACf,SAAzBvwD,OAAOuR,SAAS41B,MAiBhBnnC,OAAOwwD,QAAU,CAAC94C,EAAuB+4C,EAAiBC,EAAiBC,EAAgB9oD,KACvF,MAAM+oD,EAAU/oD,EAAMuJ,WACtB,GAAqB,kBAAVvJ,GAAsB+oD,GAAWP,GAAe7iD,MAAKzN,GAAK6wD,EAAQ9vD,SAASf,KAAK,CACvF,MAAMuD,EAAUuE,EAAMvE,QAChB88C,EAAQv4C,EAAMu4C,MAKpB,OAJA17B,QAAQ7c,MAAM,uCACd6c,QAAQ7c,MAAMvE,GACdohB,QAAQ7c,MAAM5I,KAAKC,UAAUkhD,EAAO,KAAM,SAC1CpgD,OAAOuR,SAAS2zB,QAEpB,CACA,MAAMr9B,CAAK,EAEf7H,OAAO6wD,qBAAwBn5C,IAE3B,MAAMk5C,EAAUl5C,EAAMtG,WACtB,GAAqB,kBAAVsG,GAAsBk5C,GAAWP,GAAe7iD,MAAKzN,GAAK6wD,EAAQ9vD,SAASf,KAGlF,OAFA2kB,QAAQ7c,MAAM,uCAAuC6P,EAAMuuB,eAC3DjmC,OAAOuR,SAAS2zB,SAGpB,MAAIxtB,aAAiBmwC,MACXnwC,EAGA,IAAImwC,MAAMnwC,EAAMtG,WAC1B,GAzCJ0/C,EAAAA,GAAY,CACRC,IAAK,kEACLC,QAAS,YAAYhxD,OAAOwH,eAAe/E,IAC3CwuD,aAAc,CAACH,EAAAA,KACfI,UAAAA,CAAWx5C,GAEP,GAAS,OAALA,QAAK,IAALA,GAAAA,EAAOpU,SAAW+sD,GAAe7iD,MAAK3F,GAAS6P,EAAMpU,QAAQxC,SAAS+G,KACtE7H,OAAOuR,SAAS2zB,cACb,GAAS,OAALxtB,QAAK,IAALA,GAAAA,EAAOpU,SAAWgtD,GAAa9iD,MAAK3F,GAAS6P,EAAMpU,QAAQxC,SAAS+G,KAC3E,OAAO,KAEX,OAAO6P,CACX,IAiCR,MAAMsB,GAAY8O,SAASC,eAAe,SAC7BopC,EAAAA,EAAAA,GAAWn4C,IAEnBlQ,QACD5F,EAAAA,EAAAA,KAACkuD,EAAAA,qBAAoB,CAACC,YAAaC,EAAAA,EAAetvD,UAC9CkB,EAAAA,EAAAA,KAACpB,EAAsB,CAAAE,UACnBkB,EAAAA,EAAAA,KAACk5C,GAAG,Q,wIC9FhB,MAAM/4C,EAA8C,CAChDshB,IAAK,CACDrb,OAAQ,IACR7F,MAAO,IACPiY,QAAS,EACT5R,UAAW,QAEfynD,aAAc,CACVjoD,OAAQ,OACR7F,MAAO,mBACPkL,WAAY,EACZ+M,QAAS,EACT5R,UAAW,QAEfjC,MAAO,CACH7D,MAAOwtD,EAAAA,EAAI,MAEfjS,KAAM,CACFv7C,MAAOytD,EAAAA,EAAK,MAEhBr5C,KAAM,CACFpU,MAAOqU,EAAAA,EAAM,OAkCrB,MAAM7E,UAAgB9O,EAAAA,UAOlB3G,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAPA+sD,YAAM,OAINC,YAAM,EAKnBhzD,KAAKoG,MAAQ,CACT4f,IAAK,CAAC,cAAchgB,EAAMoP,KAAO,MACjC69C,MAAM,EACNvD,IAAK,KACLjrD,MAAO,KAEPyuD,aAAa,EACbC,SAAS,GAGbnzD,KAAK+yD,OAAS/2C,IAAAA,YAEdhc,KAAKgzD,OAAS,IAAII,OAAOv+C,EAAQw+C,QAAQ9xB,KAAK,KAAM,IACxD,CAEAz6B,iBAAAA,GACQ9G,KAAKgG,MAAM+O,OAAS/U,KAAKgG,MAAMoP,MAC/B2Q,QAAQC,IAAI,YAAYhmB,KAAKgG,MAAMoP,OACnCpV,KAAKuyB,iBAQb,CAEA/P,kBAAAA,GAA4B,IAAD8wC,GAClBtzD,KAAKoG,MAAM6sD,MAAQjzD,KAAKgG,MAAM+O,OAAS/U,KAAKgG,MAAMoP,KACnDpV,KAAKuyB,iBAELvyB,KAAKgG,MAAM6zC,UAAYv5C,KAAKC,UAAUP,KAAKgG,MAAM6zC,YAAcv5C,KAAKC,UAAUP,KAAKoG,MAAM4f,MACzFhmB,KAAKuD,SAAS,CAAEyiB,IAAKhmB,KAAKgG,MAAM6zC,WAEjB,QAAnByZ,EAAAtzD,KAAK+yD,OAAOn7C,eAAO,IAAA07C,GAAnBA,EAAqBC,gBACzB,CAEAhhC,cAAAA,GACIvyB,KAAKuD,SAAS,CAAE0vD,MAAM,IAAQ,IAAMjzD,KAAKgG,MAAMsP,qBAAuBtV,KAAKgG,MAAMsP,qBAAoB,KAErGtV,KAAKgG,MAAM3G,OAAOm0D,yBAAyBxzD,KAAKyzD,iBAAiBC,KAAK1zD,OACtEA,KAAKgG,MAAM3G,OAAOs0D,yBAAyB3zD,KAAK4zD,iBAAiBF,KAAK1zD,OACtEA,KAAKgG,MAAM3G,OAAOw0D,uBAAuB7zD,KAAK8zD,eAAeJ,KAAK1zD,OAElE,MAAM+zD,EAAc94C,KAAK+4C,MAAsB,UAAhB/4C,KAAKg5C,UAAwB,EAE5Dj0D,KAAKuD,SAAS,CAAEwwD,gBAEhB/zD,KAAKgG,MAAM3G,OACN60D,QACGl0D,KAAKgG,MAAMiJ,KAAKxN,WAAW,gBAAkBzB,KAAKgG,MAAMiJ,KAAO,eAAejP,KAAKgG,MAAMiJ,OACzFjP,KAAKgG,MAAMoP,IACX2+C,GAEH5yD,OAAM+H,GAAS6c,QAAQC,IAAI9c,IACpC,CAEAuqD,gBAAAA,CAAiB3zD,EAAYoI,GACzB,GAAIlI,KAAKoG,MAAM2tD,aAAe/zD,KAAKoG,MAAM2tD,cAAgBj0D,EAAI,CACzD,MAAMkmB,EAAMhmB,KAAKoG,MAAM4f,IAAIwzB,QAC3BxzB,EAAI5jB,KAAK8F,GAET,MAAMisD,EAASjsD,EAAK8a,MAAM,oBACpBoxC,EAAYD,EAAqD,KAA5CjsD,EAAK8a,MAAM,+BAChCqxC,EAAUD,EAAqD,KAA1ClsD,EAAK8a,MAAM,6BAEtC,IAAI0sC,EAAM1vD,KAAKoG,MAAMspD,IACjBjrD,EAAQ,KAGR0vD,GACAzE,EAAMA,GAAOrmD,SAAS8qD,EAAO,GAAI,IACjC1vD,EAAQ4E,SAAS8qD,EAAO,GAAI,MACrBC,GAIAC,KADP3E,EAAM,MAOV1vD,KAAKuD,SAAS,CACVyiB,MACA0pC,MACAjrD,UAIJshB,QAAQC,IAAI,YAChB,CACJ,CAEA4tC,gBAAAA,CAAiB9zD,EAAYoI,GACzB,GAAIlI,KAAKoG,MAAM2tD,aAAe/zD,KAAKoG,MAAM2tD,cAAgBj0D,EAAI,CACzD,MAAMkmB,EAAMhmB,KAAKoG,MAAM4f,IAAIwzB,QAC3BxzB,EAAI5jB,KAAK8F,GAETlI,KAAKuD,SAAS,CAAEyiB,QAEhBD,QAAQC,IAAI,aACZD,QAAQC,IAAIlmB,GACZimB,QAAQC,IAAI9d,EAChB,CACJ,CAEA4rD,cAAAA,CAAeh0D,EAAYw0D,GACvB,GAAIt0D,KAAKoG,MAAM2tD,aAAe/zD,KAAKoG,MAAM2tD,cAAgBj0D,EAAI,CACzD,MAAMkmB,EAAMhmB,KAAKoG,MAAM4f,IAAIwzB,QAC3B,IACKn4C,OAAO8nB,SAASqhB,QACJ,IAAb8pB,GACAtuC,EAAInlB,QACJmlB,EAAIA,EAAInlB,OAAS,GAAGktC,SAAS,YAC7B/tC,KAAKgG,MAAMmP,SACb,CACE,MACM9Q,EADS2hB,EAAIA,EAAInlB,OAAS,GAAGkI,MAAM,KAClB8F,MAAKuN,GAAMA,EAAG3a,WAAW,YAC5C4C,GAEAqO,YACI6hD,IACSv0D,KAAKgG,MAAM3G,OAAO8rB,UAAUopC,GAAUxzD,MAAKhB,IAAQ,IAADy0D,EAAAC,EACnDr0D,EAAAA,EAAWC,WAAWN,GAClBA,GAAuC,UAAtB,QAAVy0D,EAAAz0D,EAAImE,cAAM,IAAAswD,GAAS,QAATC,EAAVD,EAAYE,eAAO,IAAAD,OAAT,EAAVA,EAAqB7wB,SAC5BjO,EAAAA,OAAOC,WAAW,gBAAiB,SAAU2+B,EACjD,GACF,GAEN,IACAlwD,EAGZ,CACA2hB,EAAI5jB,KAAK,GAAgB,IAAbkyD,EAAiB,UAAY,8BAA8BA,KAEvEt0D,KAAKuD,SAAS,CAAEyiB,MAAKmtC,SAAS,IAAQ,KAC9BnzD,KAAKgG,MAAMsP,qBACXtV,KAAKgG,MAAMsP,qBAAoB,GAElB,IAAbg/C,GAAkBt0D,KAAKoG,MAAM4f,IAAIhmB,KAAKoG,MAAM4f,IAAInlB,OAAS,GAAG2iB,cAAcrhB,SAAS,SAC/EnC,KAAKgG,MAAMiP,WACXjV,KAAKgG,MAAMiP,UAAUq/C,EAAUt0D,KAAKoG,MAAM4f,MAG1ChmB,KAAKgG,MAAMkP,WACXlV,KAAKgG,MAAMkP,YAEflV,KAAKgG,MAAMqP,WAAWi/C,EAAUt0D,KAAKoG,MAAM4f,MAE/CD,QAAQC,IAAI,WACZD,QAAQC,IAAIlmB,GACZimB,QAAQC,IAAIsuC,GAEuB,oBAAxBt0D,KAAKgG,MAAMmP,UAClBnV,KAAKgG,MAAMmP,SAASm/C,EACxB,GAER,CACJ,CAEAK,QAAAA,CAASzsD,EAAc0sD,GAKnB,GAJIA,IACA1sD,EAAOA,EAAKob,UAAU,EAAGsxC,KAGK,IAA9B1sD,EAAK0nB,OAAO5vB,KAAKgzD,QAAgB,CACjC,MAAMlrD,EAAS,GAEf,KAAOI,EAAK0nB,OAAO5vB,KAAKgzD,SAAW,GAAG,CAClC,MAAOhwC,GAAS9a,EAAK8a,MAAMhjB,KAAKgzD,QAC1B1wD,EAAM4F,EAAK0nB,OAAO5vB,KAAKgzD,QAE7B,GAAI1wD,EAAM,EAAG,CACT,MAAMuyD,EAAO3sD,EAAKob,UAAU,EAAGhhB,GACzBqC,EAAUvE,EAAAA,EAAWwsC,kBAAkBioB,GAC7C/sD,EAAO1F,MACHmC,EAAAA,EAAAA,KAAA,QAAAlB,SACwB,kBAAZsB,EACFA,EAAQ87B,MAAMhxB,KAAI,CAACkJ,EAAMtG,KACrB9N,EAAAA,EAAAA,KAAA,QAEI4E,MAAOwP,EAAKxP,MAAM9F,SAEjBsV,EAAKzQ,MAHDmK,KAMb1N,GAVCmD,EAAOjH,SAatBqH,EAAOA,EAAKL,QAAQgtD,EAAM,GAC9B,CAEA,MAAMA,EAAO3sD,EAAKob,UAAU,EAAGN,EAAMniB,QACrC,GAAIg0D,EAAM,CACN,MAAMlwD,EAAUvE,EAAAA,EAAWwsC,kBAAkBioB,GAC7C/sD,EAAO1F,MACHmC,EAAAA,EAAAA,KAAA,QAEI4E,MAAOzE,EAAOse,EAAMQ,eAAengB,SAEf,kBAAZsB,EACFA,EAAQ87B,MAAMhxB,KAAI,CAACkJ,EAAMtG,KACrB9N,EAAAA,EAAAA,KAAA,QAEI4E,MAAOwP,EAAKxP,MAAM9F,SAEjBsV,EAAKzQ,MAHDmK,KAMb1N,GAZDmD,EAAOjH,SAepBqH,EAAOA,EAAKL,QAAQgtD,EAAM,GAC9B,CACJ,CAEA,GAAI3sD,EAAM,CACN,MAAMvD,EAAUvE,EAAAA,EAAWwsC,kBAAkB1kC,GAC7CJ,EAAO1F,MACHmC,EAAAA,EAAAA,KAAA,QAAAlB,SACwB,kBAAZsB,EACDA,EAA0E87B,MAAMhxB,KAC7E,CAACkJ,EAAMtG,KACH9N,EAAAA,EAAAA,KAAA,QAEI4E,MAAOwP,EAAKxP,MAAM9F,SAEjBsV,EAAKzQ,MAHDmK,KAOjB1N,GAZCmD,EAAOjH,QAe1B,CAEA,OAAOiH,CACX,CAEA,OAAOI,CACX,CAEA4sD,MAAAA,GACI,OAAO90D,KAAKoG,MAAM4f,IAAIvW,KAAI,CAAChL,EAAO2I,KAC9B7I,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPuO,IAAK5J,IAAUpN,KAAKoG,MAAM4f,IAAInlB,OAAS,EAAIb,KAAK+yD,YAASzhD,EAEzDlH,UAAU,IACVyG,QAAQ,QAAOxN,SAEdrD,KAAK20D,SAASlwD,IAJV2I,IAOjB,CAEAjD,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFjR,MAAOnJ,KAAKgG,MAAM8O,UAAY,CAAEnK,OAAQ,OAAQ7F,MAAO,QAAW,CAAC,EACnEuV,WAAS,EACTwO,UAAU,SACVvO,QAASta,KAAKgG,MAAM8O,UAAY,EAAI,EAAEzR,SAAA,MAEViO,IAA3BtR,KAAKgG,MAAM8zC,cAAwD,IAA3B95C,KAAKgG,MAAM8zC,aAChDv1C,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACArD,KAAKoG,MAAM+sD,UACT5uD,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,CACXO,MAAOnJ,KAAKgG,MAAMgP,aAAe,CAAEzK,gBAAiB,WAAc,KAClEsG,QAAS7Q,KAAKgG,MAAMwO,aAAe,cAAgB,gBACnD/P,MACIzE,KAAKoG,MAAMspD,KAAO1vD,KAAKoG,MAAM3B,MACvB,IAAMwW,KAAKC,MAAOlb,KAAKoG,MAAM3B,MAAQzE,KAAKoG,MAAMspD,IAAO,KACvD1vD,KAAKgG,MAAMgP,aACT,EACA,QAKxB,MACJhM,EAAAA,EAAAA,MAAA,OACIG,MAAO,CACHrE,MAAO,OACPD,QAAS,OACTI,WAAY,SACZD,eAAgBhF,KAAKgG,MAAMwO,aAAe,gBAAkB,YAC9DnR,SAAA,EAEFkB,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACPU,MACInJ,KAAKgG,MAAMwO,aACL,CACI1P,MAAO,qBACPmG,SAAU,SACVwB,aAAc,WACd5G,WAAY,UAEhB,CAAEhB,QAAS,QAErBuF,UAAU,MAAK/G,SAEdrD,KAAK20D,SAAS30D,KAAKoG,MAAM4f,IAAIhmB,KAAKoG,MAAM4f,IAAInlB,OAAS,WAE9ByQ,IAA3BtR,KAAKgG,MAAM8zC,cAAwD,IAA3B95C,KAAKgG,MAAM8zC,aAChDv1C,EAAAA,EAAAA,KAACkE,EAAAA,WAAU,CACP2B,UAAU,MACVjB,MAAO,CAAErE,MAAO,KAAMzB,UAEtB2F,EAAAA,EAAAA,MAACoR,EAAAA,MAAK,CACFhQ,UAAU,QACViQ,WAAS,EACTpV,WAAW,SACXqV,QAAS,EAAEjX,SAAA,EAEXkB,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,SAAErD,KAAKgG,MAAM2C,EAAE,WACrBpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,UACFkB,EAAAA,EAAAA,KAACk0C,EAAAA,OAAM,CACH9iC,QAAS3V,KAAKoG,MAAM8sD,YACpB3pD,SAAUwP,GAAS/Y,KAAKuD,SAAS,CAAE2vD,YAAan6C,EAAMxG,OAAOoD,UAC7DtQ,MAAM,eAGdd,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAAA/W,SAAErD,KAAKgG,MAAM2C,EAAE,eAG7B,SAERpE,EAAAA,EAAAA,KAAC6V,EAAAA,MAAK,CAACjR,MAAOnJ,KAAKgG,MAAM8O,UAAY,CAAEnK,OAAQ,oBAAqB7F,MAAO,QAAW,CAAC,EAAEzB,SACpFrD,KAAKoG,MAAM8sD,cACR3uD,EAAAA,EAAAA,KAACuY,EAAAA,MAAK,CAAC3T,MAAOnJ,KAAKgG,MAAM8O,UAAYpQ,EAAOkuD,aAAeluD,EAAOshB,IAAI3iB,SAAErD,KAAK80D,eAKjG,EA3VEjgD,EAGaw+C,QAAU,CAAC,QAAS,OAAQ,QA2V/C,S,qLChYA,MAAM/nC,UAAevlB,EAAAA,UACjBoE,MAAAA,GACI,OACI5F,EAAAA,EAAAA,KAACwwD,IAAS,CACN5rD,MAAO,CACHiwB,OAAQ,YACR1G,YAAa1yB,KAAKgG,MAAMkD,MAAQ,MAAQ,YACxCw7B,UAAW,OACR1kC,KAAKgG,MAAMmD,OAElBoC,KAAMvL,KAAKgG,MAAMuF,MAAQ,OACzBzG,MAAM,OACN6F,OAAO,OACPqqD,gBAAiBh1D,KAAKgG,MAAMulB,cAC5B0pC,WAAYj1D,KAAKgG,MAAMulB,cACvB2pC,oBAAqBl1D,KAAKgG,MAAMulB,cAChC8lB,aAAcrxC,KAAKgG,MAAMqrC,aACzBtnC,MAAgC,SAAzB/J,KAAKgG,MAAM8D,UAAuB,kBAAoB,SAC7DrF,MAAOzE,KAAKgG,MAAMvB,MAClBskB,UAAW/oB,KAAKgG,MAAMuD,SACtBA,SAAUqH,GAAY5Q,KAAKgG,MAAMuD,SAASqH,GAC1C9B,KAAM9O,KAAKgG,MAAM8I,MAAQ,oBACzBtJ,SAAUxF,KAAKgG,MAAMR,UAAY,GACjC2vD,WAAY,CACRC,2BAA2B,EAC3BC,0BAA0B,EAC1BC,gBAAgB,EAEhBC,gBAAiBv1D,KAAKgG,MAAMulB,cAC5BiqC,QAASx1D,KAAKgG,MAAMulB,cAAgB,OAAIja,GAE5CmkD,YAAa,CAAEC,iBAAiB,IAG5C,EAGJ,S,mFC3DA,MAAMhxD,EAA8B,CAChCixD,OAAQ,CACJ,cAAe,CACX1pD,QAAS,KACTrH,SAAU,WACVkH,OAAQ,EACRxG,IAAK,EACL4G,KAAM,EACNpH,MAAO,OACP6F,OAAQ,OACRF,WAAY,8CACZ0B,eAAgB,QAChB5B,gBAAiB,QAErB,cAAe,CACX0B,QAAS,KACTrH,SAAU,WACVkH,OAAQ,EACRxG,IAAK,EACL4G,KAAM,EACNpH,MAAO,OACP6F,OAAQ,OACRF,WAAY,8CACZ0B,eAAgB,QAChB5B,gBAAiB,QAErB,uCAAwC,CACpC,YAAa,CACT0F,YAAa,KAIzB2lD,IAAK,CACD9wD,MAAO,GACP6F,OAAQ,GACRc,OAAQ,SACR7G,SAAU,WACVqL,YAAa,GACbrF,aAAc,EACdH,WAAY,UACZsS,QAAS,GAEb84C,SAAU,CACN3wD,QAAS,IAEbwG,OAAQ,CACJZ,SAAU,KAEdgE,KAAM,CACFjJ,WAAY,SACZoF,SAAU,SACVwB,aAAc,WACd,uCAAwC,CACpC5H,QAAS,SAGjBC,MAAO,CACHA,MAAO,OACP,uCAAwC,CACpCA,MAAO,SAGfgxD,SAAU,CACNhxD,MAAO,GACPD,QAAS,gBAEbg1B,QAAS,CACLvpB,cAAe,SAqBvB,MAAM8/C,UAAsBrqD,EAAAA,UACxB3G,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KA2DjBG,eAAkBq5C,IACd,MAAMl5C,EAAiChG,KAAKoH,MAAMpH,KAAKC,UAAUP,KAAKoG,MAAME,QAC5E,IAAI6gC,GAAU,EACdqY,EAAO/+C,SAAQsY,IACQ,YAAfA,EAAM7Y,UACkBoR,IAApBhL,EAAMyS,EAAMjZ,aACLwG,EAAMyS,EAAMjZ,IACnBqnC,GAAU,KAEL7gC,EAAMyS,EAAMjZ,QAAUiZ,EAAMzS,QACrCA,EAAMyS,EAAMjZ,IAAMiZ,EAAMzS,MACxB6gC,GAAU,EACd,IAGAA,GACAnnC,KAAKuD,SAAS,CAAE+C,UAAS,KACrB,IAAKA,EAAMtG,KAAKgG,MAAMk/B,aAAc,CAChC,MAAM6wB,EAAY90D,OAAOC,KAAKoF,GAAOuI,MAAK/O,GAAMwG,EAAMxG,KACtD,GAAIi2D,EAAW,CACX,MAAMh2D,EAAMC,KAAKoG,MAAMpD,MAAM6L,MAAK2oC,GAAMA,EAAG91C,MAAQq0D,IACzC,IAADvB,EAAT,GAAIz0D,EACAC,KAAKgG,MAAMkmC,gBACG,QAAVsoB,EAAAz0D,EAAImE,cAAM,IAAAswD,OAAA,EAAVA,EAAY1lD,OAAQinD,EAAUluD,QAAQ,eAAgB,IACtDkuD,QAGJ/1D,KAAKgG,MAAMkmC,eAAe6pB,EAAUluD,QAAQ,eAAgB,IAAKkuD,EAEzE,CACJ,IAER,EACF,KAEFC,oBAAuBxW,IACnB,MAAMx8C,EAAuB1C,KAAKoH,MAAMpH,KAAKC,UAAUP,KAAKoG,MAAMpD,QAC5DsD,EAAiChG,KAAKoH,MAAMpH,KAAKC,UAAUP,KAAKoG,MAAME,QAC5E,IAAI6gC,GAAU,EAETrlC,QAAQ4sC,IACT8Q,EAAO/vC,KAAIsR,UACP,MAAM9R,EAAOjM,EAAM6L,MAAKiV,GAAMA,EAAGpiB,MAAQqX,EAAMjZ,KAE/C,GAAmB,YAAfiZ,EAAM7Y,MAAuB6Y,EAAMhZ,IAShC,GAAIkP,EAAM,CAAC,IAADgnD,EAAAC,EAAAC,EACoCC,EAIEC,EAIFC,EARjD,GAAIrnD,EAAK/K,OAAO4K,QAAyB,QAArBmnD,EAAKl9C,EAAMhZ,IAAImE,cAAM,IAAA+xD,OAAA,EAAhBA,EAAkBnnD,MACvCG,EAAK/K,OAAO4K,MAAuB,QAAhBsnD,EAAAr9C,EAAMhZ,IAAImE,cAAM,IAAAkyD,OAAA,EAAhBA,EAAkBtnD,OAAQ,GAC7Cq4B,GAAU,EAEd,GAAIl4B,EAAK/K,OAAOmB,SAA0B,QAArB6wD,EAAKn9C,EAAMhZ,IAAImE,cAAM,IAAAgyD,OAAA,EAAhBA,EAAkB7wD,OACxC4J,EAAK/K,OAAOmB,OAAwB,QAAhBgxD,EAAAt9C,EAAMhZ,IAAImE,cAAM,IAAAmyD,OAAA,EAAhBA,EAAkBhxD,QAAS,GAC/C8hC,GAAU,EAEd,GAAIl4B,EAAK/K,OAAOmN,QAAyB,QAArB8kD,EAAKp9C,EAAMhZ,IAAImE,cAAM,IAAAiyD,OAAA,EAAhBA,EAAkB9kD,MACvCpC,EAAK/K,OAAOmN,MAAuB,QAAhBilD,EAAAv9C,EAAMhZ,IAAImE,cAAM,IAAAoyD,OAAA,EAAhBA,EAAkBjlD,OAAQ,GAC7C81B,GAAU,CAElB,KAAO,CAAC,IAADovB,EAAAC,EAAAC,EAEHtvB,GAAU,EACVnkC,EAAMZ,KAAK,CACPV,IAAKqX,EAAMjZ,GACXoE,OAAQ,CACJ4K,MAAsB,QAAhBynD,EAAAx9C,EAAMhZ,IAAImE,cAAM,IAAAqyD,OAAA,EAAhBA,EAAkBznD,OAAQ,GAChCzJ,OAAuB,QAAhBmxD,EAAAz9C,EAAMhZ,IAAImE,cAAM,IAAAsyD,OAAA,EAAhBA,EAAkBnxD,QAAS,GAClCgM,MAAsB,QAAhBolD,EAAA19C,EAAMhZ,IAAImE,cAAM,IAAAuyD,OAAA,EAAhBA,EAAkBplD,OAAQ,GAChClN,iBAAkB,WAEtBmwB,OAAQ,CACJoiC,SAAU,CACNC,kBAAmB,CAAC,MAKhC,MAAMvwD,QAAcpG,KAAKgG,MAAM3G,OAAO+H,SAAS,GAAG2R,EAAMjZ,YACxDwG,EAAMyS,EAAMjZ,MAAa,OAALsG,QAAK,IAALA,IAAAA,EAAOG,IAC/B,MAzCI,GAAI0I,EAAM,CACN,MAAM3M,EAAMU,EAAMT,QAAQ0M,IACb,IAAT3M,WACOgE,EAAMyS,EAAMjZ,IACnBkD,EAAMR,OAAOF,GACb6kC,GAAU,EAElB,CAkCJ,KAENpmC,MAAK,KACComC,GACAnnC,KAAKuD,SAAS,CAAEP,QAAOsD,UAAS,KAC5B,IAAKA,EAAMtG,KAAKgG,MAAMk/B,aAAc,CAChC,MAAM6wB,EAAY90D,OAAOC,KAAKoF,GAAOuI,MAAK/O,GAAMwG,EAAMxG,KACtD,GAAIi2D,EAAW,CACX,MAAMh2D,EAAMC,KAAKoG,MAAMpD,MAAM6L,MAAK2oC,GAAMA,EAAG91C,MAAQq0D,IACzC,IAADa,EAAT,GAAI72D,EACAC,KAAKgG,MAAMkmC,gBACG,QAAV0qB,EAAA72D,EAAImE,cAAM,IAAA0yD,OAAA,EAAVA,EAAY9nD,OAAQinD,EAAUluD,QAAQ,eAAgB,IACtDkuD,QAGJ/1D,KAAKgG,MAAMkmC,eAAe6pB,EAAUluD,QAAQ,eAAgB,IAAKkuD,EAEzE,CACJ,IAER,GACF,EApKF/1D,KAAKoG,MAAQ,CACT0V,SAAU,KACVxV,MAAO,CAAC,EACRtD,MAAO,GAEf,CAEA8D,iBAAAA,GACI9G,KAAKgG,MAAM3G,OACNmvC,iBAAgB,GAChBztC,MAAMiC,IACHhD,KAAKuD,SAAS,CAAEP,UAAS+d,UAErB,MAAMza,EAAiC,CAAC,EACxC,IAAK,IAAIsjD,EAAI,EAAGA,EAAI5mD,EAAMnC,OAAQ+oD,IAAK,CACnC,MAAMxjD,QAAcpG,KAAKgG,MAAM3G,OAAO+H,SAAS,GAAGpE,EAAM4mD,GAAGloD,aAEvD4E,EAAMtD,EAAM4mD,GAAGloD,OADf0E,KACwBA,EAAMG,GAItC,CAGA,IAAKD,EAAMtG,KAAKgG,MAAMk/B,aAAc,CAChC,MAAM6wB,EAAY90D,OAAOC,KAAKoF,GAAOuI,MAAK/O,GAAMwG,EAAMxG,KAClDi2D,GACArjD,YAAW,KACP,MAAM3S,EAAMC,KAAKoG,MAAMpD,MAAM6L,MAAK2oC,GAAMA,EAAG91C,MAAQq0D,IACzC,IAADc,EAAL92D,EACAC,KAAKgG,MAAMkmC,gBACG,QAAV2qB,EAAA92D,EAAImE,cAAM,IAAA2yD,OAAA,EAAVA,EAAY/nD,OAAQinD,EAAUluD,QAAQ,eAAgB,IACtDkuD,GAGJ/1D,KAAKgG,MAAMkmC,eAAe6pB,EAAUluD,QAAQ,eAAgB,IAAKkuD,EACrE,GACD,IAEX,CAEA/1D,KAAKuD,SAAS,CAAE+C,UAAS,KACrBtG,KAAKgG,MAAMia,YAAYhe,gBAAgBjC,KAAKg2D,qBAC5Ch2D,KAAKgG,MAAMia,YAAYkuB,qBAAqBnuC,KAAKmG,eAAe,GAClE,GACJ,IAELhF,OAAOC,IACJC,OAAOC,MAAM,qBAAqBF,IAAI,GAElD,CAEAghB,oBAAAA,GACIpiB,KAAKgG,MAAMia,YAAY5d,kBAAkBrC,KAAKg2D,qBAC9Ch2D,KAAKgG,MAAMia,YAAYmuB,uBAAuBpuC,KAAKmG,eACvD,CAgHAgE,MAAAA,GAA8B,IAAD2sD,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACzB,IAAKv3D,KAAKgG,MAAMqgC,YAAcrmC,KAAKoG,MAAMpD,MAAMnC,OAAS,EACpD,OAAO,KAEX,IAAI22D,EAOJ,OANIx3D,KAAKoG,MAAMpD,MAAMnC,SACjB22D,EAAkBx3D,KAAKoG,MAAMpD,MAAM6L,MAC/BI,GAAQA,EAAKvN,MAAQ1B,KAAKgG,MAAMk/B,aAAej2B,EAAKvN,MAAQ,eAAe1B,KAAKgG,MAAMk/B,kBAK1Fl8B,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CAAAhF,SAAA,EACAkB,EAAAA,EAAAA,KAAC2L,EAAAA,QAAO,CACJC,MAAOnQ,KAAKgG,MAAM6zB,SAAWnxB,EAAAA,KAAKC,EAAE,uBACpCyH,UAAW,CAAEC,OAAQ,CAAE/H,GAAI5D,EAAOm1B,UAAYx2B,UAE9CkB,EAAAA,EAAAA,KAAA,QAAAlB,UACIkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACH9N,MAAgC,SAAzBrF,KAAKgG,MAAM8D,UAAuB,UAAY,YACrDX,MAAO,IACAzE,EAAOgH,OACVjB,YAA2B,QAAfqsD,EAAAU,SAAe,IAAAV,GAAQ,QAARC,EAAfD,EAAiB5yD,cAAM,IAAA6yD,OAAR,EAAfA,EAAyB1xD,QAAS,OAC9CqtB,YAA4B,QAAfskC,EAAAQ,SAAe,IAAAR,GAAQ,QAARC,EAAfD,EAAiB9yD,cAAM,IAAA+yD,GAAvBA,EAAyB5xD,MAChCkD,EAAAA,MAAM6Q,YAAYo+C,EAAgBtzD,OAAOmB,OAAO,GAChD,QAEVwL,QAAS7Q,KAAKgG,MAAM8H,UAAY9N,KAAKoG,MAAMpD,MAAMnC,OAAS,EAAI,OAAS,WACvEiN,WAAY9N,KAAKgG,MAAM8H,UAAY9N,KAAKoG,MAAMpD,MAAMnC,OAAS,EAC7D,gBAAc,OACdwS,QAASjS,GAAKpB,KAAKuD,SAAS,CAAEuY,SAAU1a,EAAEkb,gBAAiBjZ,UAE3D2F,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI,IACG5D,EAAOI,SACL9E,KAAKoG,MAAME,MAAMtG,KAAKgG,MAAMk/B,kBAAiC5zB,EAAlB5M,EAAOmxD,YACpDnxD,EAAOixD,QAEdxsD,MAAO,CACHtE,QAAS,OACTQ,MAAsB,QAAf6xD,EAAAM,SAAe,IAAAN,GAAQ,QAARC,EAAfD,EAAiBhzD,cAAM,IAAAizD,GAAvBA,EAAyB9xD,MAC1BkD,EAAAA,MAAM6Q,YAAYo+C,EAAgBtzD,OAAOmB,OAAO,GAChD,OACNJ,WAAY,UACd5B,SAAA,EAEFkB,EAAAA,EAAAA,KAACihB,EAAAA,KAAI,CACDrc,MAAOzE,EAAOkxD,IACdpxC,KAAoB,QAAf4yC,EAAAI,SAAe,IAAAJ,GAAQ,QAARC,EAAfD,EAAiBlzD,cAAM,IAAAmzD,OAAR,EAAfA,EAAyBhmD,OAAQ,sBAE1C9M,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAOoK,KAAKzL,SAEA,QAFAi0D,EAEfE,SAAe,IAAAF,GAAQ,QAARC,EAAfD,EAAiBpzD,cAAM,IAAAqzD,OAAR,EAAfA,EAAyBzoD,iBAM9CvK,EAAAA,EAAAA,KAAC4qD,EAAAA,KAAI,CACDrzC,SAAU9b,KAAKoG,MAAM0V,SACrB27C,aAAW,EACX1nD,OAAQ/P,KAAKoG,MAAM0V,SACnBrO,QAASA,IAAMzN,KAAKuD,SAAS,CAAEuY,SAAU,OAAQzY,SAEhDrD,KAAKoG,MAAMpD,MAAMyM,KAAI,CAAArM,EAAyC6N,KAAG,IAA3C,IAAEvP,EAAKwC,QAAQ,KAAE4K,EAAI,KAAEuC,EAAI,MAAEhM,IAASjC,EAAA,OACzDmB,EAAAA,EAAAA,KAAC6nB,EAAAA,SAAQ,CAGLte,UAAW9N,KAAKoG,MAAME,MAAM5E,GAC5BiV,SAAUjV,IAAQ1B,KAAKgG,MAAMk/B,YAC7B/7B,MAAO,CAAEsB,WAAYpF,GAAS,WAC9BgO,QAASA,KACDrT,KAAKgG,MAAMk/B,cAAgBllC,KAAKoG,MAAMpD,MAAMiO,GAAKvP,KACjD1B,KAAKgG,MAAMkmC,eACPlsC,KAAKoG,MAAMpD,MAAMiO,GAAK/M,OAAO4K,KAC7B9O,KAAKoG,MAAMpD,MAAMiO,GAAKvP,KAG9B1B,KAAKuD,SAAS,CAAEuY,SAAU,MAAO,EACnCzY,UAEF2F,EAAAA,EAAAA,MAACX,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAOixD,OACXxsD,MAAO,CACHtE,QAAS,OACTQ,MAAQA,GAASkD,EAAAA,MAAM6Q,YAAY/T,GAAO,IAAU,UACpDJ,WAAY,UACd5B,SAAA,EAEFkB,EAAAA,EAAAA,KAAA,OAAK4E,MAAOzE,EAAOoxD,SAASzyD,SAAE3B,IAAQ1B,KAAKgG,MAAMk/B,YAAc,SAAM,MACrE3gC,EAAAA,EAAAA,KAACihB,EAAAA,KAAI,CACDrc,MAAOzE,EAAOkxD,IACdpxC,IAAKnT,GAAQ,qBAEhBvC,MA7BApN,EA+BE,QAK/B,EAGJ,S,kBCtXA,SAASg2D,EAAQ33D,EAAuB8vC,GACpC,IAAK9vC,EACD,OAAO,KAES,kBAAT8vC,IACPA,EAAOA,EAAK9mC,MAAM,MAEtB,MACMxC,EAAMxG,EADA8vC,EAAK9C,SAEjB,OAAK8C,EAAKhvC,OAGS,kBAAR0F,EACAmxD,EAAQnxD,EAAKspC,GAEjB,KALItpC,CAMf,C,iBAwBA,QAfA,SAAmBP,GACf,MAAM,OAAE49B,EAAM,SAAEvgC,EAAQ,KAAEyL,EAAI,MAAErK,GAAUuB,EAE1C,YAAcsL,IAAV7M,GACiB,IAAVA,EAAkB,KAAQpB,EAEhCugC,GAGyB,IAA1B8zB,EAAQ9zB,EAAQ90B,GACTzL,EAEJ,KALIA,CAMf,C,kHC/BA,MAAMqB,EAA8B,CAChCpF,KAAM,CACFiL,gBAAiB,mBACjBzF,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT,cAAe,CACX4G,OAAQ,EACRc,EAAG,OACHzH,MAAO,OACP6F,OAAQ,OACRM,SAAU,SAGlBP,MAAO,CACHI,SAAU,KAEdE,eAAgB,CACZnG,QAAS,OACToG,SAAU,UAEdo+B,IAAK,CACDp+B,SAAU,OACVpF,WAAY,WACZ4F,OAAQ,EACRsR,QAAS,GACTjY,MAAO,QAEX6yD,QAAS,CACLptD,gBAAiB,eACjBlF,MAAO,uBACPuF,aAAc,MACd2O,GAAI,EACJq+C,GAAI,EACJC,GAAI,OAERC,QAAS,CACLvtD,gBAAiB,iBACjBlF,MAAO,yBACPuF,aAAc,MACd2O,GAAI,EACJq+C,GAAI,EACJC,GAAI,QA+MZ,QAlMA,SAAsBz0D,GAAkE,IAAjE,IAAEoP,EAAG,QAAE/E,EAAO,YAAEyqC,GAAiC90C,EACpE,MAAO8E,EAAM6vD,IAAWv0D,EAAAA,EAAAA,UAAS,KAC1B2hC,EAAS6yB,IAAcx0D,EAAAA,EAAAA,WAAS,IAChCy0D,EAAUC,IAAe10D,EAAAA,EAAAA,WAAS,GACnC20D,EAASn8C,IAAAA,OAA6B,MACtCo8C,EAASp8C,IAAAA,OAA6B,MACtCq8C,EAAer8C,IAAAA,YAAgE1K,GAwFrF,IAAIrF,EAmDJ,OAzIArI,EAAAA,EAAAA,YAAU,KACNo0D,GAAW,GACXD,EAAQ,IACR,IAAIplD,EAAOH,EACPG,EAAKlR,WAAW,yBAChBkR,EAAOA,EAAK9K,QAAQ,sBAAuB,sCAAsCA,QAAQ,SAAU,MAGvGywD,MAAM3lD,GACD5R,MAAKqb,GAAMA,EAAGlU,SACdnH,MAAKw3D,IACFR,EAAQQ,GACRP,GAAW,EAAM,IAEpB72D,OAAM,IAAM62D,GAAW,IAAO,GACpC,CAACxlD,KAEJ5O,EAAAA,EAAAA,YAAU,KACN,MAAM40D,EAAkBA,KAAgB,IAADC,EACnC,MAAMC,EAAmD,QAAjBD,EAAGL,EAAOxgD,eAAO,IAAA6gD,OAAA,EAAdA,EAAgBE,cAAc,aACzE,QAAID,IAEIA,EAAYE,cAAgBF,EAAYG,eAIxCR,EAAazgD,UACb4xC,cAAc6O,EAAazgD,SAC3BygD,EAAazgD,QAAU,MAE3B8gD,EAAYI,SAAY//C,IACpB,MAAMggD,EAAsBhgD,EAAMxG,OAE5BymD,EAAYD,EAAIE,UAAYF,EAAIF,cAAgBE,EAAIH,aAAe,IACpEX,GAAYe,GACbd,EAAYc,EAChB,IAbO,EAiBH,EA4BhB,OAzBK7zB,GAAWj9B,IACRA,EAAKzG,WAAW,KACX+2D,MACDH,EAAazgD,QAAUygD,EAAazgD,SAAWiwC,aAAY,IAAM2Q,KAAmB,MAEjFL,EAAOvgD,QAEVugD,EAAOvgD,QAAQghD,aAAe,IAAMT,EAAOvgD,QAAQihD,cACnDX,GAAY,GAIhBxlD,YAAW,KACHylD,EAAOvgD,QAEHugD,EAAOvgD,QAAQghD,aAAe,IAAMT,EAAOvgD,QAAQihD,cACnDX,GAAY,GAGhBA,GAAY,EAChB,GACD,MAIJ,KACCG,EAAazgD,UACb4xC,cAAc6O,EAAazgD,SAC3BygD,EAAazgD,QAAU,MAI3B,MAAMshD,EAAiCf,EAAOvgD,QAE9C,GAAIshD,EAAS,CACT,MAAMC,EAAsCD,EAAQP,cAAc,aAC9DQ,IACAA,EAAaL,SAAW,KAEhC,EACH,GACF,CAAC3zB,EAAS8yB,EAAU/vD,KAGlBi9B,GAAWj9B,IAER+D,EADA/D,EAAKzG,WAAW,MAEZ8C,EAAAA,EAAAA,KAAC60D,EAAAA,EAAQ,CACL78B,UAAU,WACV88B,WAAY,CACRC,GAAIC,IACAh1D,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,KACV9B,GAAI5D,EAAOizD,QAAQt0D,SAElBk2D,EAAQl2D,WAGjBm2D,GAAIC,IACAl1D,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,KACV9B,GAAI5D,EAAOozD,QAAQz0D,SAElBo2D,EAAQp2D,YAGnBA,SAED6E,KAKL3D,EAAAA,EAAAA,KAAA,OACI4E,MAAOzE,EAAO2kC,IACdryB,IAAKmhD,EACLuB,SAAUA,KACN,GAAIvB,EAAOvgD,QAAS,CAEhB,MAAMohD,EACFb,EAAOvgD,QAAQqhD,UAAYd,EAAOvgD,QAAQihD,cAC1CV,EAAOvgD,QAAQghD,aAAe,IAC7BX,GAAYe,GACbd,EAAYc,EAEpB,GACF31D,SAED6E,MAObc,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACHrC,QAASA,IAAMA,IACfsC,MAAM,EACNjF,SAAS,KACTwJ,WAAS,EACThM,GAAI,CAAE,qBAAsB5D,EAAOgG,OAAQrH,SAAA,EAE3C2F,EAAAA,EAAAA,MAAC0L,EAAAA,YAAW,CAAArR,SAAA,CACPqF,EAAAA,KAAKC,EAAE,qBAAqB,KAACpE,EAAAA,EAAAA,KAAA,QAAM4E,MAAO,CAAE6G,WAAY,GAAI1E,WAAY,QAASjI,SAAE60C,QAExF3zC,EAAAA,EAAAA,KAACgM,EAAAA,cAAa,CACVpH,MAAOzE,EAAOsG,eACdwF,UAAQ,EAAAnN,UAERkB,EAAAA,EAAAA,KAAC8D,EAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,EAAOpF,KACX0X,IAAKohD,EAAO/0D,SAEX8hC,GAAU5gC,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,IAAMqD,OAGxCjD,EAAAA,EAAAA,MAACkK,EAAAA,cAAa,CAAA7P,SAAA,EACVkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHrT,GAAG,wBACH+Q,QAAQ,YACR/C,SAAUq3B,IAAY8yB,EACtB7kD,WAAS,EACTC,QAASA,IAAM5F,GAAQ,GACvB6F,UAAW2kD,GAAW1zD,EAAAA,EAAAA,KAACilB,EAAAA,MAAS,KAAMjlB,EAAAA,EAAAA,KAACo1D,EAAAA,cAAiB,IACxDt0D,MAAM,UAAShC,SAEb40D,EAAkDvvD,EAAAA,KAAKC,EAAE,UAA9CD,EAAAA,KAAKC,EAAE,iCAExBpE,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHrT,GAAG,uBACH+Q,QAAQ,YACRwC,QAASA,IAAM5F,IACf6F,WAAW/O,EAAAA,EAAAA,KAACq1D,EAAAA,MAAS,IACrBv0D,MAAM,OAAMhC,SAEXqF,EAAAA,KAAKC,EAAE,gBAK5B,C,+qCChPA,MAAMjE,OAA8B,CAChCpF,KAAOyK,IAAe,CAClBQ,gBAAiBR,EAAMS,QAAQC,WAAWC,MAC1C5F,MAAO,OACP6F,OAAQ,OACR9F,QAAS,OACT+F,aAAc,QAElBF,MAAO,CACHI,SAAU,IACVhG,MAAO,QAEXkG,eAAgB,CACZnG,QAAS,QAEbwkC,IAAK,CACDp+B,SAAU,OACV0B,EAAG,OACH,MAAO,CACHnH,SAAU,KAGlBq0D,UAAW,CACPt0D,MAAO,GACPD,IAAK,GACLV,SAAU,WACVC,QAAS,OACTI,WAAY,SACZI,MAAO,UAEXuwD,IAAK,CACD,2BAA4B,CACxB5lD,WAAY,GACZlL,MAAO,GACP6F,OAAQ,GACRc,OAAQ,SACR7G,SAAU,WACV,UAAW,CACPqH,QAAS,KACTrH,SAAU,WACVkH,OAAQ,EACRxG,IAAK,EACL4G,KAAM,EACNpH,MAAO,OACP6F,OAAQ,OACRF,WAAY,8CACZ0B,eAAgB,QAChB5B,gBAAiB,UAI7BwB,KAAM,CACFjH,MAAO,GACP6F,OAAQ,GACRgC,EAAG,SACH/B,aAAc,MACdhG,SAAU,WACV,UAAW,CACPqH,QAAS,KACTrH,SAAU,WACVkH,OAAQ,EACRxG,IAAK,EACL4G,KAAM,EACNpH,MAAO,OACP6F,OAAQ,OACRF,WAAY,8CACZ0B,eAAgB,QAChB5B,gBAAiB,SAGzByvB,KAAM,CACFvuB,OAAQ,WAIVmB,OAASxJ,IAA8C,IAA7C,KAAE0L,GAAwB1L,EACtC,OAAQ0L,GACJ,IAAK,UACD,OACIvK,EAAAA,+CAAAA,KAAC0I,iDAAAA,QAAW,CACRsvB,UAAU,wBACVpzB,MAAO,CAAE9D,MAAO,aAG5B,IAAK,OAcL,QACI,OACId,EAAAA,+CAAAA,KAACyI,iDAAAA,KAAQ,CACLuvB,UAAU,wBACVpzB,MAAO,CAAE9D,MAAO,aAX5B,IAAK,SACD,OACId,EAAAA,+CAAAA,KAAC8lC,iDAAAA,OAAU,CACP9N,UAAU,wBACVpzB,MAAO,CAAE9D,MAAO,aAUhC,EAGJ,SAASy0D,YAAYjxD,EAAqB8E,GACtC,QAAS1M,OAAOC,KAAKyM,GAChByV,QAAOtjB,GAAMA,EAAG2B,WAAW,kBAAkBoH,QAC7CgG,MAAK/O,GAAM6N,EAAU7N,GAAI8mD,SAClC,CAEA,SAASmT,gBAAgBC,EAAmB71D,GACxC,GAAI61D,EAAUv4D,WAAW,UAAW,CAEhC,OAAO0C,IADM61D,EAAU12C,UAAU,EAAG02C,EAAUn5D,OAAS,GAAGo5D,MAE9D,CACA,GAAID,EAAUv4D,WAAW,WAAau4D,EAAUv4D,WAAW,WAAY,CACnE,MAAMy4D,EAAOF,EAAU12C,UAAU,EAAG02C,EAAUn5D,OAAS,GAAGo5D,OAC1D,IACI,OAAOE,8CAAAA,GAAUD,EAAM/1D,EAC3B,CAAE,MACE,OAAO,CACX,CACJ,CACA,GAAI61D,EAAUv4D,WAAW,WAAY,CACjC,MAAMy4D,EAAOF,EAAU12C,UAAU,EAAG02C,EAAUn5D,OAAS,GAAGo5D,OAC1D,IACI,OAAOE,8CAAAA,GAAUh2D,EAAkB+1D,EACvC,CAAE,MACE,OAAO,CACX,CACJ,CACA,GAAIF,EAAUv4D,WAAW,WAAY,CACjC,MAAM24D,EAAQJ,EAAU12C,UAAU,EAAG02C,EAAUz3D,QAAQ,MAAM03D,OACvDI,EAAQL,EAAU12C,UAAU02C,EAAUz3D,QAAQ,KAAO,EAAGy3D,EAAUn5D,OAAS,GAAGo5D,OACpF,IACI,OAAOE,8CAAAA,IAAWh2D,EAAkBi2D,IAAUD,8CAAAA,IAAWh2D,EAAkBk2D,EAC/E,CAAE,MACE,OAAO,CACX,CACJ,CACA,OAAO,CACX,CA6DO,MAAMnZ,cAAgBA,CAAC9yC,SAAqBksD,cAAuBC,WACtE,MAAMC,eAAgC,GAEtC,IACI,MAAMC,MAAQj0D,KAAKC,MACnB,IAAK,MAAM9B,WAAWyJ,SAAU,CAC5B,IAAKzJ,QACD,SAGJ,GAAIA,QAAQ7E,KAAOw6D,cACf,MAEJ,IAAII,QAAS,EAETA,QAAU/1D,QAAQ,eAAiB,IAAI6B,KAAK7B,QAAQ,eAAe+nC,UAAY+tB,OAExEC,QAAU/1D,QAAQ,aAAe,IAAI6B,KAAK7B,QAAQ,aAAa+nC,UAAY+tB,MADlFC,QAAS,EAGFA,QAAU/1D,QAAQg2D,YAAc15D,OAAOC,KAAKyD,QAAQg2D,YAAY95D,OAAS,GAChFI,OAAOC,KAAKyD,QAAQg2D,YAAYl6D,SAAQiP,IACpC,GAAIgrD,OAAQ,CACR,MAAMr2D,EAAUk2D,QAAQpZ,SAASzxC,GAC3BsqD,EAAYr1D,QAAQg2D,WAAWjrD,GAEhCrL,GAAyB,eAAd21D,EAEL31D,GAAyB,eAAd21D,EAClBU,QAAS,EACFr2D,GAAyB,WAAd21D,EAClBU,OAASZ,YAAYpqD,EAAK6qD,QAAQ5sD,WAC3BtJ,GAAyB,YAAd21D,EAClBU,QAAUZ,YAAYpqD,EAAK6qD,QAAQ5sD,WAC5BtJ,IACPq2D,OAASX,gBAAgBC,EAAW31D,EAAQu2D,IAR5CF,QAAS,CAUjB,KAIJA,QAAU/1D,QAAQ,iBAAmB41D,QAAQnZ,cAC7CsZ,OAASX,gBAAgBp1D,QAAQ,gBAAiB41D,QAAQnZ,cAE1DsZ,QAAU/1D,QAAQ,gBAAkB41D,QAAQlZ,aAC5CqZ,OAASX,gBAAgBp1D,QAAQ,eAAgB41D,QAAQlZ,aAEzDqZ,QAAU/1D,QAAQ48C,IAAMgZ,QAAQhZ,KAChCmZ,OAASH,QAAQhZ,KAAO58C,QAAQ48C,IAEhCmZ,QAAU/1D,QAAQytB,OAGdsoC,OADAjqB,MAAMC,QAAQ6pB,QAAQloC,YACbkoC,QAAQloC,WAAWlwB,SAASwC,QAAQytB,MAEpCmoC,QAAQloC,aAAe1tB,QAAQytB,MAG5CsoC,QAAU/1D,QAAQq6B,OAEd07B,OADAjqB,MAAMC,QAAQ/rC,QAAQq6B,MACbu7B,QAAQv7B,MAAQr6B,QAAQq6B,KAAKnwB,MAAKmwB,GAAQu7B,QAAQv7B,OAASA,OAExDu7B,QAAQv7B,MAAQu7B,QAAQv7B,OAASr6B,QAAQq6B,OAIzD07B,QAAU/1D,QAAQ,uBAElB+1D,OAASG,KAAK,GAAGN,QAAQvZ,aAAar8C,QAAQ,yBAG9C+1D,QAAU/1D,QAAQ,qBACbA,QAAQ,mBAAmBxC,SAASo4D,QAAQzZ,iBAC7C4Z,QAAS,IAIbA,QACAF,eAAep4D,KAAK,CAChBtC,GAAI6E,QAAQ7E,GACZqQ,MAAOxL,QAAQwL,MAAMoqD,QAAQr3C,OAASve,QAAQwL,MAAM/H,GACpD6D,QAAStH,QAAQsH,QAAQsuD,QAAQr3C,OAASve,QAAQsH,QAAQ7D,GAC1D0yD,MAAOn2D,QAAQm2D,MACfzpD,KAAM1M,QAAQ0M,KACd0pD,QAASp2D,QAAQo2D,QACjB/gC,KAAMr1B,QAAQq1B,KACdghC,UACiC,kBAAtBr2D,QAAQq2D,UACTr2D,QAAQq2D,UAAUT,QAAQr3C,OAASve,QAAQq2D,UAAU5yD,GACrDzD,QAAQq2D,UAClBpF,IAAKjxD,QAAQixD,KAGzB,CACJ,CAAE,MACE,CAGJ,OAAO4E,cAAc,EAGzB,SAAS9P,gBAAev9C,GAQP,IAAD8tD,EAAAC,EAAA,IARS,QACrBvQ,EAAO,QACP/yC,EAAO,gBACPgzC,GAKHz9C,EACG,MAAOrN,EAAIq7D,IAAS33D,EAAAA,mCAAAA,UAASoU,IACtBwjD,EAAMC,IAAW73D,EAAAA,mCAAAA,WAAS,IAC1B83D,EAAUC,IAAe/3D,EAAAA,mCAAAA,UAAS,IAEzCI,EAAAA,mCAAAA,YAAU,KACN,MAAM+U,EAAOgyC,EAAQ97C,MAAKuN,GAAMA,EAAGtc,KAAOA,IAC1C,GAAI6Y,EAAM,CACN,MAAMvL,EAAQu9C,EAAQpoD,QAAQoW,GAC9B,GAAIvL,EAAQ,EAAIu9C,EAAQ9pD,OAAQ,CAC5B,MAAM26D,EAAQ7Q,EAAQv9C,EAAQ,GAAGtN,GAC7B07D,IACAL,EAAMK,GACND,EAAYnuD,EAAQ,GAE5B,MACIw9C,GAER,MACIuQ,EAAMxQ,EAAQ,GAAG7qD,GACrB,GAED,CAACs7D,IAEJ,MAAM3tD,EAAUA,KAEZ4tD,GAASD,GACTxQ,EAAgB9qD,EAAG,EAGjBojB,EAAOxa,wDAAAA,KAAK0I,cACZnF,EAAU0+C,EAAQ2Q,GAAUrvD,QAAQpE,QAAQ,cAAe,SAC3DsI,EAAQw6C,EAAQ2Q,GAAUnrD,MAE1B6pB,EAAO2wB,EAAQ2Q,GAAUthC,KACzBghC,EAAYrQ,EAAQ2Q,GAAUN,UACpC,OACIhyD,EAAAA,+CAAAA,MAAC8G,2CAAAA,OAAM,CACHrC,QAASA,EACTsC,MAAM,EACNzH,GAAI,CAAE,qBAAsB5D,OAAOgG,OAAQrH,SAAA,EAE3C2F,EAAAA,+CAAAA,MAACX,2CAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI,IAAK5D,OAAOm1D,aAAcn1D,OAAOkxD,KAAMvyD,SAAA,CAE1C,IAAImD,KAAKmkD,EAAQ2Q,GAAUP,SAASt7B,mBAAmBvc,IACxD3e,EAAAA,+CAAAA,KAACqI,OAAM,CAACkC,KAAM67C,EAAQ2Q,GAAUR,YAEpCv2D,EAAAA,+CAAAA,KAACmQ,2CAAAA,YAAW,CAAArR,SAAEqF,wDAAAA,KAAKC,EAAE,4BACrBpE,EAAAA,+CAAAA,KAACmQ,2CAAAA,YAAW,CAAArR,SAAE8M,KACd5L,EAAAA,+CAAAA,KAACgM,2CAAAA,cAAa,CACVpH,MAAOzE,OAAOsG,eACdwF,UAAQ,EAAAnN,UAERkB,EAAAA,+CAAAA,KAAC8D,2CAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,OAAOpF,KAAK+D,UAEhB2F,EAAAA,+CAAAA,MAACX,2CAAAA,IAAG,CACA+B,UAAU,MACV9B,GAAI5D,OAAO2kC,IAAIhmC,SAAA,EAEG,QAAjB43D,EAAAtQ,EAAQ2Q,UAAS,IAAAL,OAAA,EAAjBA,EAAmBrF,OAChBrxD,EAAAA,+CAAAA,KAAC0N,2CAAAA,UAAS,CACN3J,GAAI5D,OAAOqH,KACX3B,UAAU,MACV8H,MAAOy4C,EAAQ2Q,GAAU1F,OAGjCrxD,EAAAA,+CAAAA,KAACkE,2CAAAA,WAAU,CACPoI,QAAQ,QACRzG,UAAU,IAAG/G,SAEZkF,wDAAAA,MAAMC,gBAAgByD,EAAQpE,QAAQ,MAAO,cAEhC,QAAjBqzD,EAAAvQ,EAAQ2Q,UAAS,IAAAJ,OAAA,EAAjBA,EAAmBlhC,QAChBz1B,EAAAA,+CAAAA,KAAC4O,2CAAAA,OAAM,CACHtC,QAAQ,YACR1H,MAAOzE,OAAOs1B,KACd3mB,QAASA,IAAMhS,OAAO0O,KAAK46C,EAAQ2Q,GAAUthC,KAAM,UACnD30B,MAAM,UAAShC,SAEd23D,GAAatyD,wDAAAA,KAAKC,EAAE,kBAMzCK,EAAAA,+CAAAA,MAACkK,2CAAAA,cAAa,CAAA7P,SAAA,CACT22B,GACGz1B,EAAAA,+CAAAA,KAAC4O,2CAAAA,OAAM,CACHrT,GAAG,8BACH+Q,QAAQ,YACRwC,QAASA,KACL,MAAMooD,EAAQp6D,OAAO0O,KAAKiqB,EAAM,UAC3B,OAALyhC,QAAK,IAALA,GAAAA,EAAOx1C,OAAO,EAElB5gB,MAAM,YACNiO,WAAW/O,EAAAA,+CAAAA,KAACm3D,iDAAAA,OAAS,IAAIr4D,SAExB23D,GAAatyD,wDAAAA,KAAKC,EAAE,oBAEzB,MACJpE,EAAAA,+CAAAA,KAAC4O,2CAAAA,OAAM,CACHrT,GAAG,gCACH+Q,QAAQ,YACRuC,WAAS,EACTC,QAAS5F,EACTpI,MAAM,UACNiO,WAAW/O,EAAAA,+CAAAA,KAACgP,iDAAAA,MAAS,IAAIlQ,SAExBqF,wDAAAA,KAAKC,EAAE,sBAK5B,CAEA,gD,iHCxbA,MAAMjE,EAA8C,CAChDi3D,YAAa,CACT91D,WAAY,UAEhBoiB,MAAO,CACHzN,SAAU,MAcX,MAAM6qC,UAAyCt/C,EAAAA,UAMlD3G,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KAHA41D,YAAM,EAKnB57D,KAAKoG,MAAQ,CACTy1D,eAAgB5gD,KAAKC,OAChBlV,EAAMo/C,eAAiBC,EAAiCC,oBAAsB,MAIvFtlD,KAAK47D,OAASv6D,OAAOkvD,WAAauL,EAAAA,CACtC,CAEA,uBAAOxW,GACH,OACIj8C,UAAWhI,OAAe6S,eAAiB7S,OAAO8S,cAAcC,QAAQ,qBAAsB,MAC7F2nD,EAAAA,gBAAgBC,UAAY,IAAS,KAE9C,CAEA,wBAAOC,CAAkB7W,GACrB,OAAIA,GACS/jD,OAAe6S,eAAiB7S,OAAO8S,cAAcyB,QAC1D,oBACAwvC,EAAc3yC,aAGbpR,OAAe6S,eAAiB7S,OAAO8S,cAAcuyC,WAAW,oBAC7E,CAEAv8C,MAAAA,GACI,OACInB,EAAAA,EAAAA,MAAC8G,EAAAA,OAAM,CACHC,MAAM,EACNjF,SAAS,KACT2C,QAASA,IAAMzN,KAAKgG,MAAMyH,UAAUpK,SAAA,EAEpCkB,EAAAA,EAAAA,KAACmQ,EAAAA,YAAW,CAAArR,SAAErD,KAAKgG,MAAM2C,EAAE,gCAC3BK,EAAAA,EAAAA,MAACuH,EAAAA,cAAa,CAAAlN,SAAA,EACVkB,EAAAA,EAAAA,KAACmnB,EAAAA,kBAAiB,CAAAroB,SACbrD,KAAKgG,MAAM2C,EAAE,qFAElBpE,EAAAA,EAAAA,KAACukB,EAAAA,UAAS,CACNjY,QAAQ,WACR1H,MAAOzE,EAAOujB,MACd9W,MAAOnR,KAAKgG,MAAM2C,EAAE,gBACpBlE,MAAOzE,KAAKoG,MAAMy1D,eAClBtyD,SAAUnI,GAAKpB,KAAKuD,SAAS,CAAEs4D,eAAgBz6D,EAAEmR,OAAO9N,QACxDvE,KAAK,SACLkQ,UAAW,CAAE6Y,UAAW,CAAEizC,IAAK,EAAGxM,IAAK,MACvC1mC,WAAYhpB,KAAKgG,MAAM2C,EAAE,oBAGjCK,EAAAA,EAAAA,MAACkK,EAAAA,cAAa,CAAA7P,SAAA,EACVkB,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHrT,GAAG,gCACHy8B,UAAU,yBACVpzB,MAAOzE,EAAOi3D,YACd9qD,QAAQ,YACRwC,QAASA,KACLgyC,EAAiC4W,kBAAkB,KACnDj8D,KAAKgG,MAAMyH,QAAQ,IAAM,EAE7B6F,WAAW/O,EAAAA,EAAAA,KAAC43D,EAAAA,WAAQ,IACpB92D,MAAM,OAAMhC,SAEXrD,KAAK47D,OAAS57D,KAAKgG,MAAM2C,EAAE,YAAc3I,KAAKgG,MAAM2C,EAAE,8BAE3DpE,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHrT,GAAG,4BACHy8B,UAAU,qBACV1rB,QAAQ,YACRuC,WAAS,EACT/N,MAAM,UACNyI,UAAWzE,SAASrJ,KAAKoG,MAAMy1D,eAA0B,IACzDxoD,QAASA,KACL,MAAM+xC,EAAoE,IAApD/7C,SAASrJ,KAAKoG,MAAMy1D,eAA0B,IACpExW,EAAiC4W,kBAAkB7W,GACnDplD,KAAKgG,MAAMyH,QAAQ23C,EAAc,EAErC9xC,WAAW/O,EAAAA,EAAAA,KAACgP,EAAAA,MAAS,IAAIlQ,SAExBrD,KAAK47D,OAAS,KAAO57D,KAAKgG,MAAM2C,EAAE,YAEvCpE,EAAAA,EAAAA,KAAC4O,EAAAA,OAAM,CACHrT,GAAG,+BACHy8B,UAAU,yBACV1rB,QAAQ,YACRwC,QAASA,IAAMrT,KAAKgG,MAAMyH,UAC1BpI,MAAM,OACNiO,WAAW/O,EAAAA,EAAAA,KAACiP,EAAAA,MAAS,IAAInQ,SAExBrD,KAAK47D,OAAS,KAAO57D,KAAKgG,MAAM2C,EAAE,iBAKvD,EAGJ,S,2DC5HA,MAYMyzD,EAAgC,CAClC,GAAI,CAAE/2D,MAAO,SACb,GAAI,CAAEA,MAAO,OACb,GAAI,CAAEA,MAAO,SACb,GAAI,CAAEA,MAAO,UACb,GAAI,CAAEA,MAAO,QACb,GAAI,CAAEA,MAAO,UACb,GAAI,CAAEA,MAAO,QACb,GAAI,CAAEA,MAAO,SAEb,GAAI,CAAEA,MAAO,QACb,GAAI,CAAEA,MAAO,YACb,GAAI,CAAEA,MAAO,cACb,GAAI,CAAEA,MAAO,eACb,GAAI,CAAEA,MAAO,aACb,GAAI,CAAEA,MAAO,eACb,GAAI,CAAEA,MAAO,aACb,GAAI,CAAEA,MAAO,SAEb,GAAI,CAAEkF,gBAAiB,SACvB,GAAI,CAAEA,gBAAiB,OACvB,GAAI,CAAEA,gBAAiB,SACvB,GAAI,CAAEA,gBAAiB,UACvB,GAAI,CAAEA,gBAAiB,QACvB,GAAI,CAAEA,gBAAiB,UACvB,GAAI,CAAEA,gBAAiB,QACvB,GAAI,CAAEA,gBAAiB,SAEvB,IAAK,CAAEA,gBAAiB,QACxB,IAAK,CAAEA,gBAAiB,YACxB,IAAK,CAAEA,gBAAiB,cACxB,IAAK,CAAEA,gBAAiB,eACxB,IAAK,CAAEA,gBAAiB,aACxB,IAAK,CAAEA,gBAAiB,eACxB,IAAK,CAAEA,gBAAiB,aACxB,IAAK,CAAEA,gBAAiB,UAG5B,MAAMnK,EAMF,gBAAOi8D,CAAyCt8D,GAC5C,OAAOO,KAAKoH,MAAMpH,KAAKC,UAAUR,GACrC,CAOA,gBAAOu8D,CAAUC,GACb,MAAMC,EAAKvhD,KAAK+4C,MAAOuI,EAAK,WAA2B,IAAM,GAC7DA,GAAS,WACT,MAAME,EAAKxhD,KAAK+4C,MAAOuI,EAAK,QAAoB,IAAM,GACtD,IAAIr0D,EAAO,GAQX,OALIA,GADAs0D,EAAK,EACG,GAAGA,OAEH,GAAGC,OAGRv0D,CACX,CAEA,oBAAOw0D,GACH,MAAO,iBAAkBr7D,QAAUA,OAAOguB,UAAUstC,eAAiB,GAAKt7D,OAAOguB,UAAUutC,iBAAmB,CAClH,CAEA,kBAAOC,CAAYC,GACf,MAAO,GAAGA,OACd,CAEA,kBAAOC,CAAYR,GACf,GAAIthD,KAAK+hD,IAAIT,GAAS,KAClB,MAAO,GAAGA,MAGd,MAAMU,EAAQ,CAAC,KAAM,KAAM,MAE3B,IAAIC,GAAK,EAET,GACIX,GAAS,OACPW,QACGjiD,KAAK+hD,IAAIT,IAAU,MAAQW,EAAID,EAAMp8D,OAAS,GAEvD,MAAO,GAAG07D,EAAMptC,QAAQ,MAAM8tC,EAAMC,IACxC,CAEA,uBAAOC,CAAiBC,GACpB,MAAM96D,EAAM86D,EAASC,YAAY,KACjC,OAAa,IAAT/6D,EACO86D,EAAS95C,UAAUhhB,EAAM,GAAGkhB,cAEhC,IACX,CAGA,kBAAOpK,CAAYkkD,EAAaC,GAC5B,QAAYjsD,IAARgsD,GAA6B,OAARA,GAAwB,KAARA,GAA6B,kBAARA,EAC1D,MAAO,GASX,GAPyB,IAArBA,EAAI/6D,QAAQ,OACZ+6D,EAAMA,EAAI9jB,MAAM,IAGD,IAAf8jB,EAAIz8D,SACJy8D,EAAMA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAKA,EAAI,GAAKA,EAAI,IAExC,IAAfA,EAAIz8D,OACJ,MAAM,IAAIqoD,MAAM,sBAEpB,MAAMphC,EAAIze,SAASi0D,EAAI9jB,MAAM,EAAG,GAAI,IAC9BgkB,EAAIn0D,SAASi0D,EAAI9jB,MAAM,EAAG,GAAI,IAC9B71B,EAAIta,SAASi0D,EAAI9jB,MAAM,EAAG,GAAI,IAEpC,GAAI+jB,EAEA,MAAW,KAAJz1C,EAAgB,KAAJ01C,EAAgB,KAAJ75C,EAAY,IAAM,UAAY,UAGjE,MAAM85C,GAAU,IAAM31C,GAAGrV,SAAS,IAC5BirD,GAAU,IAAMF,GAAG/qD,SAAS,IAC5BkrD,GAAU,IAAMh6C,GAAGlR,SAAS,IAElC,MAAO,IAAIgrD,EAAOG,SAAS,EAAG,OAAOF,EAAOE,SAAS,EAAG,OAAOD,EAAOC,SAAS,EAAG,MACtF,CAQA,oBAAOC,CAAcC,EAAiBn1D,GAClC,MAAMo1D,EAAO9iD,KAAK+4C,MAAM8J,EAAO,OAC/B,IAAIE,EACAC,EACAC,EAEJJ,GAAW,MACX,MAAMK,EAAQljD,KAAK+4C,MAAM8J,EAAU,MAG/BI,EADAC,EAAQ,GACG,IAAIA,IAEJA,EAAM1rD,WAErBqrD,GAAW,KACX,MAAMM,EAAUnjD,KAAK+4C,MAAM8J,EAAU,IAEjCE,EADAI,EAAU,GACG,IAAIA,IAEJA,EAAQ3rD,WAGzBqrD,GAAW,GAGPG,GAFJH,EAAU7iD,KAAK+4C,MAAM8J,IACP,GACG,IAAIA,IAEJA,EAAQrrD,WAGzB,IAAIvK,EAAO,GAMX,OALI61D,IACA71D,GAAQ,GAAG61D,KAAQp1D,EAAE,qBAEzBT,GAAQ,GAAGg2D,KAAYF,KAAcC,IAE9B/1D,CACX,CAEA,gBAAO8vB,CACH4N,EACAzwB,GAEA,MAAMrN,EAAmB,GACzB,IAAK,MAAM4H,KAAOk2B,EACd99B,EAAO1F,KAAK+S,EAASywB,EAAOl2B,GAAMA,IAEtC,OAAO5H,CACX,CAEA,iBAAOzH,CAAWN,GACd,GAAO,OAAHA,QAAG,IAAHA,GAAAA,EAAKmE,OACL,GAAKnE,EAAImE,OAAOwwD,QAoCT,CACH,IAAIvtB,GAAU,EACVpnC,EAAImE,OAAOm6D,gBAAkBt+D,EAAImE,OAAO2e,SACT,gBAA3B9iB,EAAImE,OAAOwwD,QAAQ39C,MACnBhX,EAAImE,OAAOwwD,QAAQ39C,IAAM,cACzBowB,GAAU,GAEPpnC,EAAImE,OAAO2e,UACa,SAA3B9iB,EAAImE,OAAOwwD,QAAQ39C,KAA6C,gBAA3BhX,EAAImE,OAAOwwD,QAAQ39C,MACxDhX,EAAImE,OAAOwwD,QAAQ39C,IAAM,OACzBowB,GAAU,IAIdpnC,EAAImE,OAAOo6D,YAAcv+D,EAAImE,OAAOq6D,iBACF,SAA9Bx+D,EAAImE,OAAOwwD,QAAQnlB,SACnBxvC,EAAImE,OAAOwwD,QAAQnlB,OAAS,OAC5BpI,GAAU,GAIdpnC,EAAImE,OAAOs6D,SACuB,SAA9Bz+D,EAAImE,OAAOwwD,QAAQ9wB,SACnB7jC,EAAImE,OAAOwwD,QAAQ9wB,OAAS,OAC5BuD,GAAU,GAEPpnC,EAAImE,OAAOu6D,YACgB,SAA9B1+D,EAAImE,OAAOwwD,QAAQ9wB,SACnB7jC,EAAImE,OAAOwwD,QAAQ9wB,OAAS,OAC5BuD,GAAU,GAEdpnC,EAAImE,OAAOwwD,QAAQ9wB,OAAS,QACrB7jC,EAAImE,OAAOw6D,YACgB,gBAA9B3+D,EAAImE,OAAOwwD,QAAQ9wB,SACd7jC,EAAImE,OAAOwwD,QAAQ9wB,SACpB7jC,EAAImE,OAAOwwD,QAAQ9wB,OAAS,cAC5BuD,GAAU,IAGVpnC,EAAImE,OAAOwwD,QAAQ9wB,SAC3B7jC,EAAImE,OAAOwwD,QAAQ9wB,OAAS,OAC5BuD,GAAU,GAEVA,GACAphB,QAAQtM,KACJ,kBAAkB1Z,EAAI2B,IAAImG,QAAQ,SAAU,uBAAuBvH,KAAKC,UAAUR,EAAImE,OAAOwwD,WAGzG,MAnFQ30D,EAAImE,OAAOs6D,UACXz+D,EAAImE,OAAOwwD,QAAU30D,EAAImE,OAAOwwD,SAAW,CAAC,EAC5C30D,EAAImE,OAAOwwD,QAAQ9wB,OAAS,QACrB7jC,EAAImE,OAAOu6D,YAClB1+D,EAAImE,OAAOwwD,QAAU30D,EAAImE,OAAOwwD,SAAW,CAAC,EAC5C30D,EAAImE,OAAOwwD,QAAQ9wB,OAAS,QACrB7jC,EAAImE,OAAOw6D,aAClB3+D,EAAImE,OAAOwwD,QAAU30D,EAAImE,OAAOwwD,SAAW,CAAC,EAC5C30D,EAAImE,OAAOwwD,QAAQ9wB,OAAS,gBAE5B7jC,EAAImE,OAAOwwD,QAAU30D,EAAImE,OAAOwwD,SAAW,CAAC,EAC5C30D,EAAImE,OAAOwwD,QAAQ9wB,OAAS,SAG5B7jC,EAAImE,OAAOo6D,YAGJv+D,EAAImE,OAAOq6D,kBAFlBx+D,EAAImE,OAAOwwD,QAAU30D,EAAImE,OAAOwwD,SAAW,CAAC,EAC5C30D,EAAImE,OAAOwwD,QAAQnlB,OAAS,QAM5BxvC,EAAImE,OAAOm6D,gBAAkBt+D,EAAImE,OAAO2e,UACxC9iB,EAAImE,OAAOwwD,QAAU30D,EAAImE,OAAOwwD,SAAW,CAAC,EAC5C30D,EAAImE,OAAOwwD,QAAQ39C,IAAM,eAClBhX,EAAImE,OAAO2e,WAClB9iB,EAAImE,OAAOwwD,QAAU30D,EAAImE,OAAOwwD,SAAW,CAAC,EAC5C30D,EAAImE,OAAOwwD,QAAQ39C,IAAM,QAGzBhX,EAAImE,OAAOwwD,SACX3uC,QAAQtM,KACJ,kBAAkB1Z,EAAI2B,IAAImG,QAAQ,SAAU,uBAAuBvH,KAAKC,UAAUR,EAAImE,OAAOwwD,WAqDjH,CAEA,wBAAO9nB,CAAkB1kC,GACrB,GAAIA,IAASA,EAAK/F,SAAS,UAAc+F,EAAK/F,SAAS,UAAa,CAEhE,IAAIwK,EAAIzE,EAAK8a,MAAM,kBACnB,GAAIrW,EAAG,CACH,MAAMkgC,EAAW3kC,EACXJ,EAAS,GACf,IAAIqB,EAAe,CAAC,EACpB,IAAK,IAAIkJ,EAAI,EAAGA,EAAI1F,EAAE9L,OAAQwR,IAAK,CAC/B,MAAM/P,EAAM4F,EAAK3F,QAAQoK,EAAE0F,IACvB/P,GACAwF,EAAO1F,KAAK,CAAE8F,KAAMA,EAAKob,UAAU,EAAGhhB,GAAM6G,MAAO,IAAKA,KAE5D,MAAMw1D,EAAOt1D,SAASsD,EAAE0F,GAAGiR,UAAU,GAAI,IACrC84C,EAAOuC,GACP19D,OAAO+zB,OAAO7rB,EAAOizD,EAAOuC,IAhT3B,KAiT2BA,SACrBx1D,EAAM9D,MAjTT,KAkT2Bs5D,SACxBx1D,EAAMoB,gBAjTb,KAkT2Bo0D,SACpBx1D,EAAMmC,WApTnB,IAqT2BqzD,EACrBx1D,EAAMmC,WAAa,OAzTxB,IA0T2BqzD,IACtBx1D,EAAQ,CAAC,GAEbjB,EAAOA,EAAKob,UAAU3W,EAAE0F,GAAGxR,OAASyB,EACxC,CAKA,OAJI4F,GACAJ,EAAO1F,KAAK,CAAE8F,OAAMiB,MAAO,IAAKA,KAG7B,CAAE0jC,WAAUpM,MAAO34B,EAC9B,CACA,OAAOI,CACX,CACA,OAAOA,CACX,CAcA,oBAAOmhB,CAAchB,EAAkBC,GAGnC,OADAA,EAAiBA,GAAkB,IADnCD,EAAWA,GAAY,KAInBC,GACAD,IAAajoB,EAAWw+D,cACxBt2C,IAAmBloB,EAAWw+D,aAE1Bv2C,EAASxnB,OAAS,IAAMwnB,EAASrF,MAAM,QAAUqF,EAASrF,MAAM,WAAaqF,EAASrF,MAAM,SACrF5iB,EAAWy+D,sBAElBx2C,IAAaC,GACNloB,EAAW0+D,yBAItBz2C,GAAYA,IAAajoB,EAAWw+D,cAChCv2C,EAASxnB,OAAS,IAAMwnB,EAASrF,MAAM,QAAUqF,EAASrF,MAAM,WAAaqF,EAASrF,MAAM,WACrF5iB,EAAWy+D,sBAItBv2C,GAAkBA,IAAmBloB,EAAWw+D,cAE5Ct2C,EAAeznB,OAAS,IACvBynB,EAAetF,MAAM,QACrBsF,EAAetF,MAAM,WACrBsF,EAAetF,MAAM,WAEf5iB,EAAWy+D,sBAItBx2C,IAAajoB,EAAWw+D,cAAgBt2C,IAAmBloB,EAAWw+D,cAGnEx+D,EAAW2+D,oBACtB,CASA,4BAAOC,CAAsB/uC,GACzB,MAAM,YAAEpnB,GAAgBonB,EACxB,IAAI,KAAE/M,GAAS+M,EAMf,OAJK7vB,EAAW6+D,wBAAwB98D,SAAS+gB,KAC7CA,EAAO,MAGJ,6BAA6BA,kCAAqCra,aAC7E,CAEA,sBAAO5E,CAAgBi7D,EAAoBC,GACvC,IACI,OAA6C,IAAtChF,IAAAA,GAAUgF,EAAYD,EACjC,CAAE,MAEE,OADAn5C,QAAQtM,KAAK,8BAA8B0lD,WAAoBD,OACxD,CACX,CACJ,CAEA,cAAOE,CAAQC,EAAmCn8C,GAC9C,MAAoB,kBAATm8C,EACFA,GAGGA,EAAKn8C,IAASm8C,EAAKj3D,IAAM,IAAIqK,WAF1B,GAKR4sD,EAAOA,EAAK5sD,WAAa,EACpC,CAEA,YAAOglB,CAAS13B,GACZ,OAAOO,KAAKoH,MAAMpH,KAAKC,UAAUR,GACrC,EApXEK,EAwRKy+D,sBACH,6FAzRFz+D,EA2RK0+D,yBAA2B,6CA3RhC1+D,EA6RK2+D,qBAAuB,gCA7R5B3+D,EA+RKw+D,aAAe,cA/RpBx+D,EAkSK6+D,wBAAgD,CAAC,KAAM,KAAM,KAAM,SAqF9E,S,qEChbO,MAAMnD,EAAe,IAM5B,MAAMwD,UAAmFv5D,EAAAA,UAA0B3G,WAAAA,GAAA,SAAA8kC,WAAA,KACvGq7B,6BAAuB,OAEvBC,eAAgD,KAAK,KA0B7DC,WAAa,KACLz/D,KAAKw/D,gBACLnjD,aAAarc,KAAKw/D,gBAEtBx/D,KAAKw/D,eAAiB9sD,YAAW,KAC7B1S,KAAKw/D,eAAiB,KAClBx/D,KAAKoG,MAAMw1D,SAAW0D,EAAaI,YACnC1/D,KAAKuD,SAAS,CAAEq4D,OAAQ0D,EAAaI,YACzC,GACD,IAAI,CACT,CAlCF,eAAOA,GACH,OAAOr+D,OAAOkvD,WAAauL,CAC/B,CAEAh1D,iBAAAA,GACQ9G,KAAKoG,MAAMw1D,SAAW0D,EAAaI,YACnC1/D,KAAKuD,SAAS,CAAEq4D,OAAQ0D,EAAaI,aAEpC1/D,KAAKu/D,0BACNv/D,KAAKu/D,yBAA0B,EAC/Bl+D,OAAOylD,iBAAiB,SAAU9mD,KAAKy/D,YAAY,GAE3D,CAEAr9C,oBAAAA,GACQpiB,KAAKw/D,iBACLnjD,aAAarc,KAAKw/D,gBAClBx/D,KAAKw/D,eAAiB,MAEtBx/D,KAAKu/D,yBACLl+D,OAAOkoD,oBAAoB,SAAUvpD,KAAKy/D,YAAY,EAE9D,CAeAE,cAAAA,CAAetuD,EAAmBnJ,EAAc03D,GAC5C,OAAIvuD,GAAQnJ,EACJlI,KAAKoG,MAAMw1D,OACPgE,GAEI52D,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA5F,SAAA,CACKgO,EAAK,MAAIuuD,KAIfvuD,GAGPrI,EAAAA,EAAAA,MAAAC,EAAAA,SAAA,CAAA5F,SAAA,CACKgO,GACD9M,EAAAA,EAAAA,KAAA,QAAM4E,MAAO,CAAE6G,WAAY,GAAI3M,SAAE6E,OAIzCmJ,IAGAnJ,GAGG,KACX,EAGJ,S,+DC9EO,MAAM23D,EAA2B,8EAG3BliC,EAAsD,CAAC,OAAQ,QAAS,QAAS,SAGjFC,EAA2E,CACpFkiC,KAAM,OACNC,MAAO,QACPC,MAAO,gBACPC,MAAO,wBAGX,SAASC,EAAOC,GACZ,OAAOA,EAAGp3D,MAAM,KAAKq3D,QAAO,CAACC,EAAOC,KAAWD,GAAS,GAAKh3D,SAASi3D,EAAO,KAAK,KAAO,CAC7F,CAmFA,SAASC,EACLjpB,EACA33C,EACAqD,EACAw9D,EACA16C,GACO,IAAD26C,EAAAC,EACN,IAAKppB,IAAgBA,EAAYpzC,OAC7B,OAAO,KAGX,IAAI2hB,EAEJ,MAAMkmC,EAAsD,QAA7C0U,EAAG9gE,EAAQ,kBAAkBmmB,YAAgB,IAAA26C,GAAQ,QAARC,EAA1CD,EAA4Cv8D,cAAM,IAAAw8D,OAAR,EAA1CA,EAAoDzxD,KACtE,GAAIqoC,EAAYpzC,OAAO+K,OAAS88C,EAAW,CAEvC,MAAM98C,EAAOjM,EAAM,eAAes0C,EAAYpzC,OAAO+K,QACrD,IAAIA,EAUA,OADA8W,QAAQtM,KAAK,oBAAoB69B,EAAYpzC,OAAO+K,YAAYqoC,EAAY51C,OACrE,KAVD,CACN,MAAMy+D,EAnGlB,SAAkCpgE,EAA0B4gE,GAAiC,IAADC,EAAAC,EACxF,MAAMlK,EAAuB,OAAH52D,QAAG,IAAHA,GAAW,QAAR6gE,EAAH7gE,EAAKu0B,cAAM,IAAAssC,GAAU,QAAVC,EAAXD,EAAalK,gBAAQ,IAAAmK,OAAlB,EAAHA,EAAuBlK,kBACjD,IAAKA,EACD,OAAO,KAGX,IAAImK,EACJ,IAAK,MAAMC,KAAoB9/D,OAAO2N,OAAO+nD,GACzC,GAAKoK,EAGL,IAAK,IAAI1uD,EAAI,EAAGA,EAAI0uD,EAAiBlgE,OAAQwR,IAAK,CAC9C,MAAM8tD,EAAKY,EAAiB1uD,GAC5B,GAAI8tD,EAAGa,SACH,OAEJ,GAAIL,EAAQx+D,SAAS,MAAsB,SAAdg+D,EAAGc,OAC5B,OAEJ,GAAIN,EAAQx+D,SAAS,OAASw+D,EAAQ39C,MAAM,WAA2B,SAAdm9C,EAAGc,OACxD,OAEY,cAAZN,GAAuC,cAAZA,GAA2BA,EAAQ39C,MAAM,WAItD,SAAdm9C,EAAGc,QACHN,EAAQx+D,SAAS,OAChB+9D,EAAOS,GAAWT,EAAOC,EAAGe,SAAehB,EAAOC,EAAGzxC,SAAWwxC,EAAOC,EAAGe,UAJ3EJ,EAASX,EAAGzxC,OAUpB,CAGJ,IAAKoyC,EACD,IAAK,MAAMC,KAAoB9/D,OAAO2N,OAAO+nD,GACzC,GAAKoK,EAGL,IAAK,IAAI1uD,EAAI,EAAGA,EAAI0uD,EAAiBlgE,OAAQwR,IAAK,CAC9C,MAAM8tD,EAAKY,EAAiB1uD,GAC5B,GAAI8tD,EAAGa,SACH,OAEJ,GAAIL,EAAQx+D,SAAS,MAAsB,SAAdg+D,EAAGc,OAC5B,OAEJ,GAAIN,EAAQx+D,SAAS,OAASw+D,EAAQ39C,MAAM,WAA2B,SAAdm9C,EAAGc,OACxD,OAEY,cAAZN,GAAuC,cAAZA,GAA2BA,EAAQ39C,MAAM,UAEpE89C,EAASX,EAAGzxC,OAIpB,CAIR,IAAKoyC,EACD,IAAK,MAAMC,KAAoB9/D,OAAO2N,OAAO+nD,GACzC,GAAKoK,EAGL,IAAK,IAAI1uD,EAAI,EAAGA,EAAI0uD,EAAiBlgE,OAAQwR,IAAK,CAC9C,MAAM8tD,EAAKY,EAAiB1uD,GAC5B,GAAI8tD,EAAGa,SACH,OAEJF,EAASX,EAAGzxC,OAChB,CAIR,OAAOoyC,CACX,CAoBuBK,CAAyBlyD,EAAMuxD,GAC1C,IAAIL,EAIA,OADAp6C,QAAQtM,KAAK,mCAAmC69B,EAAYpzC,OAAO+K,YAAYqoC,EAAY51C,OACpF,KAHPmkB,EAAWs6C,CAKnB,CAIJ,MACIt6C,EAAW26C,EAGf,OAAO36C,CACX,CAGA,SAASu7C,EACLpnC,EACAr6B,EACA0hE,EACAxxB,EACAyxB,EACAt+D,EACA6iB,EACAC,GAEa,aAAT+pB,IACAA,EAAO,UAGX,IACI,MAAMjK,EAASjmC,EAAQ,kBAAkB0hE,KAEzC,GAAIrnC,GAAQ4L,EACR,GAAa,WAATiK,EACA7V,EAAOA,EAAKnyB,QAAQ,IAAIy5D,KAAgB17B,EAAOtR,OAAOub,GAAQ,QAAU,YACrE,CACH,IAAIprC,EAAQmhC,EAAOtR,OAAOub,GAU1B,GARc,qBAATA,GAAwC,SAATA,GAAsBprC,GAAmB,MAAVA,IAE3DA,GADyB,IAAzBmhC,EAAOtR,OAAO7C,OACN,IAEA,IAIH,SAAToe,GAA4B,OAATA,EAAe,CAClC,IAAIswB,EAAKv6B,EAAOtR,OAAOo/B,MAAQ9tB,EAAOtR,OAAO6rC,GAClC,YAAPA,IACAA,EAAKI,EAAY36B,EAAQjmC,EAASqD,EAAO6iB,EAAUC,IAKnDkU,EAHCA,EAAK73B,SAAS,IAAIm/D,MAGZtnC,EAAKnyB,QAAQ,IAAIy5D,KAAgBnB,GAAM,IAFvCnmC,EAAKnyB,QAAQ,WAAWy5D,KAAgBnB,GAAM,GAI7D,MAGInmC,EAHQA,EAAK73B,SAAS,IAAIm/D,MAGnBtnC,EAAKnyB,QAAQ,IAAIy5D,KAAgB78D,GAFjCu1B,EAAKnyB,QAAQ,WAAWy5D,KAAgB78D,EAIvD,MAEAshB,QAAQC,IAAI,mBAAmB6pB,KAC/B7V,EAAOA,EAAKnyB,QAAQ,IAAIy5D,KAAgB,GAEhD,CAAE,MAAOp4D,GACL6c,QAAQC,IAAI9c,EAChB,CACA,OAAO8wB,CACX,CAsBO,SAASunC,EACZvnC,EACA31B,EACAyE,EACAyxD,GAWA,MAAMiH,EAIA,GACN,IAAIh5B,EAEJ,GAAIxO,EAAM,CACN,MAAMsd,EAAcijB,EAAQ5sD,UAAU,kBAAkBtJ,KAAWyE,KAC7DwrB,GAAoB,OAAXgjB,QAAW,IAAXA,OAAW,EAAXA,EAAahjB,SAAU,CAAC,EAEjCmtC,EAAeznC,EAAKhX,MAAM,YAEhC,GAAIy+C,EACA,IAAK,IAAIl1D,EAAI,EAAGA,EAAIk1D,EAAa5gE,OAAQ0L,IAAK,CAC1C,IAAI+0D,EAAcG,EAAal1D,GAE/B,GAAoB,SAAhB+0D,EAAwB,CACxB,IAAInB,EAAc7rC,EAAOo/B,MAAQp/B,EAAO6rC,GACnCA,GAAa,YAAPA,IAEPA,EAAKI,EACDjpB,EACAijB,EAAQ5sD,UACR4sD,EAAQv3D,MACRu3D,EAAQ10C,SACR00C,EAAQz0C,gBAIZ07C,EAAM3gE,OACN2gE,EAAM/gE,SAAQkY,GAASA,EAAKnG,IAAMmG,EAAKnG,IAAI3K,QAAQ,OAAQs4D,KAE3DnmC,EAAOA,EAAKnyB,QAAQ,OAAQs4D,GAAM,GAE1C,MAAO,GAAoB,eAAhBmB,EAA8B,CACrC,MAAMI,OAAkDpwD,IAAlBgjB,EAAO7C,OAAuB6C,EAAOxhB,SAAWwhB,EAAO7C,OAC7F,IAAI3e,EAEAA,GADgB,IAAhB4uD,GAAwC,SAAhBA,EACb,SACY,IAAhBA,GAAyC,UAAhBA,GAA4BA,EAGjDA,EAAYjvD,WAAW5K,QAAQ,KAAM,IAFrC,OAKX25D,EAAM3gE,OACN2gE,EAAM/gE,SAAQkY,GAASA,EAAKnG,IAAMmG,EAAKnG,IAAI3K,QAAQ,aAAciL,KAEjEknB,EAAOA,EAAKnyB,QAAQ,aAAciL,EAE1C,MAAO,GAAoB,QAAhBwuD,EAAuB,CAC9B,MAAMI,OAAkDpwD,IAAlBgjB,EAAO7C,OAAuB6C,EAAOxhB,SAAWwhB,EAAO7C,OAC7F,IAAI3e,EAEAA,GADgB,IAAhB4uD,GAAwC,SAAhBA,EACb,KACY,IAAhBA,GAAyC,UAAhBA,GAA4BA,EAGjDA,EAAYjvD,WAAW5K,QAAQ,KAAM,IAFrC,GAKX25D,EAAM3gE,OACN2gE,EAAM/gE,SAAQkY,GAASA,EAAKnG,IAAMmG,EAAKnG,IAAI3K,QAAQ,MAAOiL,KAE1DknB,EAAOA,EAAKnyB,QAAQ,MAAOiL,EAEnC,MAAO,GAAoB,eAAhBwuD,EACPtnC,EAAOA,EAAKnyB,QAAQ,aAAciB,EAAS2J,YACvC+uD,EAAM3gE,OACN2gE,EAAM/gE,SAAQkY,GAASA,EAAKnG,IAAMmG,EAAKnG,IAAI3K,QAAQ,aAAciB,EAAS2J,cAE1EunB,EAAOA,EAAKnyB,QAAQ,aAAciB,EAAS2J,iBAW/C,GAPA6uD,EAAcA,EAAYz5D,QAAQ,KAAM,IAEpCy5D,EAAY7/D,WAAW,aACvB6/D,EAAcA,EAAYh+C,UAAU,IAInCg+C,EAAYn/D,SAAS,KA8BnB,CACH,MAAOk/D,EAAiBxxB,GAAQyxB,EAAYv4D,MAAM,KAGlD,GAAKs4D,EAAgBr+C,MAAM,aAuEpB,CAAC,IAAD2+C,EAAAC,EACH5nC,EAAOonC,EACHpnC,EACAugC,EAAQ5sD,UACR0zD,EACAxxB,EACAyxB,EACA/G,EAAQv3D,MACRu3D,EAAQ10C,SACR00C,EAAQz0C,eAGZ0iB,EAA6D,QAAzDm5B,EAAGpH,EAAQ5sD,UAAU,kBAAkB0zD,YAAkB,IAAAM,GAAQ,QAARC,EAAtDD,EAAwDrtC,cAAM,IAAAstC,OAAR,EAAtDA,EAAgEp5B,IAC3E,KApFyC,CAErC,IAAIq5B,EACAx9D,IAAYg9D,EAEZQ,EAAM,CAAC,GAAGx9D,KAAWyE,MAErB+4D,EAAM5gE,OAAOC,KAAKq5D,EAAQ5sD,WACrByV,QACGtjB,GACIA,EAAG2B,WAAW,kBAAkB4/D,OAChC9G,EAAQ5sD,UAAU7N,GAAIoE,OAAO0iD,UAEpCn3C,KAAI3P,GAAMA,EAAGwjB,UAAU,MAGvBu+C,EAAIhhE,SACLghE,EAAM5gE,OAAOC,KAAKq5D,EAAQ5sD,WACrByV,QAAOtjB,GAAMA,EAAG2B,WAAW,kBAAkB4/D,QAC7C5xD,KAAI3P,GAAMA,EAAGwjB,UAAU,QAIpC,IAAK,MAAMxjB,KAAM+hE,EACb,GAAIL,EAAM3gE,OAAQ,CACd,MAAM8X,EAAO6oD,EAAM3yD,MAAKlG,GAAKA,EAAEG,WAAahJ,IAC5C,GAAI6Y,EACAA,EAAKnG,IAAM4uD,EACPzoD,EAAKnG,IACL+nD,EAAQ5sD,UACR7N,EACA+vC,EACAyxB,EACA/G,EAAQv3D,MACRu3D,EAAQ10C,SACR00C,EAAQz0C,mBAET,CAAC,IAADg8C,EAAAC,EAEH,MAAMC,EAAQZ,EACVpnC,EACAugC,EAAQ5sD,UACR7N,EACA+vC,EACAyxB,EACA/G,EAAQv3D,MACRu3D,EAAQ10C,SACR00C,EAAQz0C,eAENm8C,EAAyD,QAA5CH,EAAGvH,EAAQ5sD,UAAU,kBAAkB7N,YAAK,IAAAgiE,GAAQ,QAARC,EAAzCD,EAA2CxtC,cAAM,IAAAytC,OAAR,EAAzCA,EAChBv5B,KAENg5B,EAAMp/D,KAAK,CAAEoQ,IAAKwvD,EAAOx5B,KAAMy5B,EAAOn5D,SAAUhJ,GACpD,CACJ,KAAO,CAAC,IAADoiE,EAAAC,EACH,MAAMH,EAAQZ,EACVpnC,EACAugC,EAAQ5sD,UACR7N,EACA+vC,EACAyxB,EACA/G,EAAQv3D,MACRu3D,EAAQ10C,SACR00C,EAAQz0C,eAGNm8C,EAAyD,QAA5CC,EAAG3H,EAAQ5sD,UAAU,kBAAkB7N,YAAK,IAAAoiE,GAAQ,QAARC,EAAzCD,EAA2C5tC,cAAM,IAAA6tC,OAAR,EAAzCA,EAChB35B,KACNg5B,EAAMp/D,KAAK,CAAEoQ,IAAKwvD,EAAOx5B,KAAMy5B,EAAOn5D,SAAUhJ,GACpD,CAER,CAcJ,KAvHgC,CAE5B,MAAMuhE,EAAkB,GAAGh9D,KAAWyE,IAe9B,IAADs5D,EAAAC,EAdP,GAAIb,EAAM3gE,OACN2gE,EAAM/gE,SACFkY,GACKA,EAAKnG,IAAM4uD,EACRzoD,EAAKnG,IACL+nD,EAAQ5sD,UACR0zD,EACAC,EACAA,EACA/G,EAAQv3D,MACRu3D,EAAQ10C,SACR00C,EAAQz0C,sBAIpBkU,EAAOonC,EACHpnC,EACAugC,EAAQ5sD,UACR0zD,EACAC,EACAA,EACA/G,EAAQv3D,MACRu3D,EAAQ10C,SACR00C,EAAQz0C,eAEZ0iB,EAA6D,QAAzD45B,EAAG7H,EAAQ5sD,UAAU,kBAAkB0zD,YAAkB,IAAAe,GAAQ,QAARC,EAAtDD,EAAwD9tC,cAAM,IAAA+tC,OAAR,EAAtDA,EAAgE75B,IAE/E,CA2FR,CAER,CAEA,OAAIg5B,EAAM3gE,OACC2gE,EAEJ,CAAC,CAAEhvD,IAAKwnB,EAAMwO,QACzB,C,oIC/aA,MAAM9jC,EAA8C,CAChDpF,KAAM,CAEFuF,QAAS,QACTqH,KAAM,EACN5G,IAAK,EACLR,MAAO,OACP6F,OAAQ,OAERtF,MAAO,QACPuF,aAAc,EACd88B,UACI,wGACJtO,OAAQ,mBAITrY,eAAe6E,EAClB7D,EACAhL,EACA8O,EACA7iB,EACA8iB,EACAhc,GAEA,MAAM6D,QAAkBoU,EAAgB/gB,aACxC,IAAIqD,EAAU0S,EAAIlP,QAAQ,QAAS,IACnC,MAAM8E,EAAItI,EAAQ2e,MAAM,WAClBD,EAAyBpW,EAAItD,SAASsD,EAAE,GAAI,IAAM,KACxD,IAAI7D,EACJ,GAAI6E,EACA,GAAgB,OAAZoV,EAAkB,CAClB1e,EAAUA,EAAQwD,QAAQ,UAAW,IACrC,MAAMiH,EAAO,kBAAkBzK,KAAW0e,IAC1Cja,EAAW7H,OAAOC,KAAKyM,GAAWkB,MAAK/O,GAAMA,IAAOgP,GACxD,KAAO,CACH,MAAMA,EAAO,kBAAkBzK,KAE/ByE,EAAW6E,GAAa1M,OAAOC,KAAKyM,GAAWkB,MAAK/O,GAAMA,EAAG2B,WAAWqN,IAC5E,CAIJ,GAFAhG,EAAW6E,GAAaA,EAAU7E,GAClC1I,EAAAA,EAAWC,WAAWyI,IACjBA,IAAaA,EAAS5E,SAAW4E,EAAS5E,OAAO2e,SAGlD,OAFAkD,QAAQ7c,MAAM,wBAAwB6N,KAE/B,GAIX,IAAIhE,EAAOjK,EAAS5E,OAAO2e,SAASmX,KACxB,IAADsoC,EAANvvD,IAEGA,EADiC,iBAAV,QAAvBuvD,EAAAx5D,EAAS5E,OAAOwwD,eAAO,IAAA4N,OAAA,EAAvBA,EAAyBvrD,KAClB,WAAW1S,eAAiC,OAAZ0e,QAAgCzR,IAAZyR,EAAwB,IAAIA,IAAY,KAE5F,WAAW1e,aAA+B,OAAZ0e,QAAgCzR,IAAZyR,EAAwB,IAAIA,IAAY,MAMzG,GAHKja,EAAS5E,OAAO2e,SAASC,WAAyB,OAAZC,QAAgCzR,IAAZyR,IAC3DhQ,GAAQ,GAAGA,EAAK5Q,SAAS,KAAO,IAAM,eAAe4gB,KAErDhQ,EAAK5Q,SAAS,KAAM,CAAC,IAADogE,EACpB,IAAIC,EAGAA,EADY,OAAZz/C,EACW1Z,SAASP,EAASpH,IAAIqH,MAAM,KAAKqkC,MAAO,IAExCrqB,EAIf,MAAM0/C,GAAQlB,EAAAA,EAAAA,IAAYxuD,EAAM1O,EAASm+D,EAAU,CAC/C38C,WAEAlY,UAAWA,EACX3K,QACA8iB,kBAGJ/S,EAAO0vD,EAAgB,QAAXF,EAAGE,EAAM,UAAE,IAAAF,OAAA,EAARA,EAAU/vD,IAAM,EACnC,CAGA,OADAO,GAAQ,GAAGA,EAAK5Q,SAAS,KAAO,IAAM,mBAA+B,OAAZ4gB,QAAgCzR,IAAZyR,EAAwB,IAAIA,IAAY,YAAYjZ,IAC1HiJ,CACX,CAiBA,MAAMmoC,UAAkBn1C,EAAAA,UAKpB3G,WAAAA,CAAY4G,GACRC,MAAMD,GAAO,KALT08D,UAAsC,KAAK,KAE3CC,YAAsB,EA4D9B,KACAC,UAAa7pD,IACT,GAAIA,EAAM8pD,SAAWxhE,OAAOuR,SAASiwD,OAGrC,GAAmB,UAAf9pD,EAAMpS,MAAsC,UAAlBoS,EAAMpU,QAChCgxB,EAAAA,OAAOC,WAAW,sBACf,GAAmB,WAAf7c,EAAMpS,MAAuC,WAAlBoS,EAAMpU,QAExCohB,QAAQtM,KAAK,wEACV,GAAmB,aAAfV,EAAMpS,MAAyC,aAAlBoS,EAAMpU,QAE1CohB,QAAQtM,KAAK,0EACV,GACoB,kBAAfV,EAAMpS,MAAqBoS,EAAMpS,KAAKlF,WAAW,UAC/B,kBAAlBsX,EAAMpU,SAAwBoU,EAAMpU,QAAQlD,WAAW,SACjE,CACE,MAAO,CAAE+Q,IAAQuG,EAAMpS,MAAQoS,EAAMpU,SAASoE,MAAM,MAC7CgO,EAAKyrC,EAAQsgB,GAAatwD,EAAIzJ,MAAM,KAC3C4sB,EAAAA,OAAOC,WAAW7e,EAAKyrC,EAAQsgB,EACnC,GA5EA9iE,KAAKoG,MAAQ,CACT2M,KAAM,IAGV,MAAM/P,EAA6C,CAAC,EACpD,IAAK,MAAMiM,KAAQjJ,EAAMhD,MACrBA,EAAMiM,EAAKvN,KAAOuN,EAGjB2W,EACD5lB,KAAKgG,MAAM+b,gBACX/hB,KAAKgG,MAAM+Q,IACX/W,KAAKgG,MAAM6f,SACX7iB,EACAhD,KAAKgG,MAAM8f,cACX9lB,KAAKgG,MAAM6D,WACb9I,MAAKgS,IACH/S,KAAKuD,SAAS,CAAEwP,QAAO,GAM/B,CAEAqP,oBAAAA,GACQpiB,KAAK2iE,aACL3iE,KAAKgG,MAAMwmD,sBAAsBxsD,KAAK0iE,WACtC1iE,KAAK2iE,YAAa,IAErBthE,OAAOkoD,qBAAuBloD,OAAO0hE,aAClC1hE,OAAOkoD,oBAAsB,UAAY,YACzCvpD,KAAK4iE,WACL,EAER,CAEA97D,iBAAAA,GAA2B,IAADk8D,GACjBhjE,KAAK2iE,YAA4B,QAAlBK,EAAIhjE,KAAK0iE,iBAAS,IAAAM,GAAdA,EAAgB1gB,gBACpCtiD,KAAK2iE,YAAa,EAClB3iE,KAAKgG,MAAMumD,oBAAoBvsD,KAAK0iE,aAEvCrhE,OAAOylD,kBAAoBzlD,OAAO4hE,aAC/B5hE,OAAOylD,iBAAmB,UAAY,YACtC9mD,KAAK4iE,WACL,EAER,CAEApgD,kBAAAA,GAAgE,IAAD0gD,GACtDljE,KAAK2iE,YAA4B,QAAlBO,EAAIljE,KAAK0iE,iBAAS,IAAAQ,GAAdA,EAAgB5gB,gBACpCtiD,KAAK2iE,YAAa,EAClB3iE,KAAKgG,MAAMumD,oBAAoBvsD,KAAK0iE,WAE5C,CAyBAv4D,MAAAA,GACI,OAAKnK,KAAKoG,MAAM2M,MAKZxO,EAAAA,EAAAA,KAAA,UACIyS,IAAKoF,GAAOpc,KAAK0iE,UAAYtmD,EAC7BjM,MAAOnQ,KAAKgG,MAAM+Q,IAClB5N,MAAOzE,EAAOpF,KACdklB,IAAKxkB,KAAKoG,MAAM2M,KAChBzJ,QAASlI,IACJA,EAAEmR,OAA6Bs/C,QAAU,KAC1C7xD,KAAKuD,SAAS,CAAEwP,KAAM/S,KAAKoG,MAAM2M,KAAKlL,QAAQ,aAAc,aAAc,KAX3EtD,EAAAA,EAAAA,KAACqE,EAAAA,eAAc,GAe9B,EAGJ,SAAeme,EAAAA,EAAAA,YAAf,CAA2Bm0B,E","sources":["Workers/GenericWorker.tsx","components/ContextWrapper.tsx","components/NotificationMessage.tsx","dialogs/NotificationsDialog.tsx","dialogs/CommandDialog.tsx","helpers/cardSort.tsx","components/DragWrapper.tsx","components/DrawerItem.tsx","components/CustomDragLayer.tsx","components/CustomPopper.tsx","components/Drawer.tsx","components/Connecting.tsx","components/Wizard/WizardPasswordTab.tsx","components/LicenseTexts.tsx","components/Wizard/WizardLicenseTab.tsx","assets/longLogo.svg","components/Wizard/WizardSettingsTab.tsx","components/Wizard/WizardAuthSSLTab.tsx","components/Wizard/WizardPortForwarding.tsx","components/Wizard/WizardAdaptersTab.tsx","dialogs/WizardDialog.tsx","dialogs/SystemSettingsTabs/BaseSystemSettingsDialog.tsx","dialogs/SystemSettingsTabs/MainSettingsDialog.tsx","dialogs/SystemSettingsTabs/RepositoriesDialog.tsx","dialogs/SystemSettingsTabs/LicensesDialog.tsx","dialogs/SystemSettingsTabs/CertificatesDialog.tsx","dialogs/SystemSettingsTabs/SSLDialog.tsx","dialogs/SystemSettingsTabs/ACLDialog.tsx","dialogs/SystemSettingsTabs/StatisticsDialog.tsx","dialogs/SystemSettingsDialog.tsx","login/Login.tsx","dialogs/ExpertModeDialog.tsx","dialogs/HostWarningDialog.tsx","Workers/LogsWorker.tsx","Workers/InstancesWorker.tsx","Workers/HostsWorker.tsx","Workers/AdaptersWorker.tsx","Workers/ObjectsWorker.tsx","dialogs/GenerateInputsModal.tsx","helpers/hooks/useStateLocal.tsx","dialogs/DiscoveryDialog.tsx","App.tsx","bootstrap.tsx","components/Command.tsx","components/Editor.tsx","components/HostSelectors.tsx","components/IsVisible.tsx","dialogs/LicenseDialog.tsx","dialogs/NewsAdminDialog.tsx","dialogs/SlowConnectionWarningDialog.tsx","helpers/AdminUtils.tsx","helpers/MobileDialog.tsx","helpers/utils.ts","tabs/CustomTab.tsx"],"sourcesContent":["import type { AdminConnection } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '@/helpers/AdminUtils';\n\nexport type EventType = 'new' | 'changed' | 'deleted';\n\nexport type GetObjectFromType<T extends ioBroker.ObjectType> = T extends 'host'\n ? ioBroker.HostObject\n : T extends 'adapter'\n ? ioBroker.AdapterObject\n : T extends 'instance'\n ? ioBroker.InstanceObject\n : T extends 'meta'\n ? ioBroker.MetaObject\n : T extends 'device'\n ? ioBroker.DeviceObject\n : T extends 'channel'\n ? ioBroker.ChannelObject\n : T extends 'state'\n ? ioBroker.StateObject\n : T extends 'folder'\n ? ioBroker.FolderObject\n : T extends 'enum'\n ? ioBroker.EnumObject\n : T extends 'script'\n ? ioBroker.ScriptObject\n : T extends 'group'\n ? ioBroker.GroupObject\n : T extends 'user'\n ? ioBroker.UserObject\n : T extends 'chart'\n ? ioBroker.ChartObject\n : T extends 'schedule'\n ? ioBroker.ScheduleObject\n : ioBroker.Object;\n\ntype GetRootFromType<T extends ioBroker.ObjectType> = T extends 'host'\n ? `system.host.${string}`\n : T extends 'adapter'\n ? `system.adapter.${string}` | `system.host.${string}.adapter.${string}`\n : T extends 'instance'\n ? `system.adapter.${string}.${number}`\n : T extends 'enum'\n ? `system.enum.${string}`\n : T extends 'script'\n ? `script.js.${string}`\n : T extends 'group'\n ? `system.group.${string}`\n : T extends 'user'\n ? `system.user.${string}`\n : string;\n\nexport type GenericEvent<T extends ioBroker.ObjectType> = {\n id: GetRootFromType<T>;\n obj?: GetObjectFromType<T>;\n type: EventType;\n oldObj?: GetObjectFromType<T>;\n};\n\nexport default class GenericWorker<T extends ioBroker.ObjectType> {\n protected readonly socket: AdminConnection;\n\n protected readonly handlers: ((events: GenericEvent<T>[]) => void)[] = [];\n\n private promise: Promise<null | Record<string, GetObjectFromType<T>>> | null = null;\n\n protected connected: boolean;\n\n protected objects: Record<string, GetObjectFromType<T>> | null = null;\n\n private readonly root: string;\n\n protected readonly objectType: ioBroker.ObjectType;\n\n private forceUpdate: boolean = false;\n\n protected constructor(socket: AdminConnection, root: string, objectType: ioBroker.ObjectType) {\n this.socket = socket;\n this.root = root;\n this.objectType = objectType;\n\n socket.registerConnectionHandler(this.connectionHandler);\n\n this.connected = this.socket.isConnected();\n if (this.connected) {\n this.connectionHandler(true);\n }\n }\n\n protected checkObjectId(id: string, obj: GetObjectFromType<T> | null | undefined): boolean {\n return id.startsWith(`${this.root}.`) && (!obj || obj.type === this.objectType);\n }\n\n // eslint-disable-next-line class-methods-use-this\n protected postProcessing(_id: string, _obj: GetObjectFromType<T> | null | undefined): void {\n // can be overridden in the child class\n }\n\n isForceUpdate(): boolean {\n return this.forceUpdate;\n }\n\n objectChangeHandler = (id: GetRootFromType<T>, obj: GetObjectFromType<T> | null | undefined): void => {\n this.objects = this.objects || {};\n\n // if our object\n if (this.checkObjectId(id, obj)) {\n let type: EventType;\n let oldObj: GetObjectFromType<T> | undefined;\n if (obj) {\n if (this.objectType === 'adapter' || this.objectType === 'instance') {\n AdminUtils.fixAdminUI(obj);\n }\n if (this.objects[id]) {\n if (JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n type = 'changed';\n this.objects[id] = obj;\n } else {\n // no changes\n return;\n }\n } else {\n type = 'new';\n this.objects[id] = obj;\n }\n } else if (this.objects[id]) {\n type = 'deleted';\n oldObj = this.objects[id];\n delete this.objects[id];\n } else {\n // deleted unknown object\n return;\n }\n\n this.forceUpdate = true;\n\n this.postProcessing(id, obj);\n\n this.handlers.forEach(cb =>\n cb([\n {\n id,\n obj,\n type,\n oldObj,\n },\n ]),\n );\n }\n };\n\n getObjects(update?: boolean): Promise<null | Record<string, GetObjectFromType<T>>> {\n update = update || this.forceUpdate;\n this.forceUpdate = false;\n\n if (!update && this.promise instanceof Promise) {\n return this.promise;\n }\n\n this.promise = this.socket\n .getObjectViewSystem(\n this.objectType,\n this.root ? `${this.root}.` : '',\n this.root ? `${this.root}.\\u9999` : '\\u9999',\n )\n .then(objects => {\n this.objects = objects as Record<string, GetObjectFromType<T>>;\n if (this.objectType === 'adapter' || this.objectType === 'instance') {\n Object.keys(this.objects).forEach(id => AdminUtils.fixAdminUI(this.objects[id]));\n }\n\n return this.objects;\n })\n .catch(e => {\n window.alert(`Cannot get objects of type ${this.objectType}, with root \"${this.root}\": ${e}`);\n return null;\n });\n\n return this.promise;\n }\n\n // eslint-disable-next-line class-methods-use-this\n protected connectionPostHandler(_isConnected: boolean): void {}\n\n connectionHandler = (isConnected: boolean): void => {\n if (isConnected && !this.connected) {\n this.connected = true;\n\n if (this.handlers.length) {\n this.socket\n .subscribeObject(this.root ? `${this.root}.*` : '*', this.objectChangeHandler)\n .then(() => {\n // read all hosts anew and inform about it\n void this.getObjects(true).then(objects => {\n if (objects) {\n Object.keys(objects).forEach(id =>\n this.objectChangeHandler(id as GetRootFromType<T>, objects[id]),\n );\n }\n });\n })\n .catch(e => window.alert(`Cannot subscribe on object \"${this.root}\": ${e}`));\n }\n this.connectionPostHandler(true);\n } else if (!isConnected && this.connected) {\n this.connected = false;\n this.connectionPostHandler(false);\n }\n };\n\n registerHandler(cb: (events: GenericEvent<T>[]) => void, doNotRequestObjects?: boolean): void {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n\n if (this.handlers.length === 1 && this.connected) {\n this.socket\n .subscribeObject(this.root ? `${this.root}.*` : '*', this.objectChangeHandler)\n .then(() => {\n if (!doNotRequestObjects) {\n // read all hosts anew and inform about it\n void this.getObjects(true).then(objects => {\n if (objects) {\n Object.keys(objects).forEach(id =>\n this.objectChangeHandler(id as GetRootFromType<T>, objects[id]),\n );\n }\n });\n }\n })\n .catch(e => window.alert(`Cannot subscribe on objects \"${this.root}\": ${e}`));\n }\n }\n }\n\n unregisterHandler(cb: (events: GenericEvent<T>[]) => void): void {\n const pos = this.handlers.indexOf(cb);\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n if (!this.handlers.length && this.connected) {\n this.socket\n .unsubscribeObject(this.root ? `${this.root}.*` : '*', this.objectChangeHandler)\n .catch(e => window.alert(`Cannot unsubscribe from objects \"${this.root}\": ${e}`));\n }\n }\n }\n\n destroy(): void {\n this.handlers.forEach(cb => this.unregisterHandler(cb));\n this.socket.unregisterConnectionHandler(this.connectionHandler);\n }\n}\n","import React, { createContext, useEffect, useMemo, useState, type JSX } from 'react';\n\nimport AdminUtils from '@/helpers/AdminUtils';\n\ntype MyContext = {\n hostsUpdate: number;\n adaptersUpdate: number;\n\n hosts: ioBroker.HostObject[] | null;\n repository: { [adapterName: string]: { icon: string; version: string } } | null;\n installed: { [adapterName: string]: { version: string; ignoreVersion?: string } } | null;\n};\n\nexport const ContextWrapper = createContext<MyContext>({\n hostsUpdate: 0,\n adaptersUpdate: 0,\n\n hosts: null,\n repository: null,\n installed: null,\n});\n\nexport function ContextWrapperProvider({ children }: { children: JSX.Element[] | JSX.Element }): JSX.Element {\n const [stateContext, setState] = useState<MyContext>({\n hostsUpdate: 0,\n adaptersUpdate: 0,\n\n hosts: null,\n repository: null,\n installed: null,\n });\n\n const setStateContext = useMemo(\n () => (obj: any) => {\n setState(prevState =>\n // If a full object is passed, replace it\n Object.keys(prevState).length === Object.keys(obj).length\n ? { ...obj }\n : // else merge the new object with the old one\n { ...prevState, ...obj },\n );\n },\n [setState],\n );\n\n useEffect(() => {\n if (stateContext.hosts) {\n const jsControllerVersion = stateContext.repository['js-controller'].version;\n let count = 0;\n stateContext.hosts.forEach(element => {\n if (AdminUtils.updateAvailable(element.common.installedVersion, jsControllerVersion)) {\n count++;\n }\n });\n setStateContext({ hostsUpdate: count });\n }\n\n if (stateContext.installed) {\n let count = 0;\n Object.keys(stateContext.installed).forEach(element => {\n const _installed = stateContext.installed[element];\n const adapter = stateContext.repository[element];\n if (\n element !== 'js-controller' &&\n element !== 'hosts' &&\n _installed?.version &&\n adapter?.version &&\n _installed.ignoreVersion !== adapter.version &&\n AdminUtils.updateAvailable(_installed.version, adapter.version)\n ) {\n count++;\n }\n });\n\n setStateContext({ adaptersUpdate: count });\n }\n }, [setStateContext, stateContext.hosts, stateContext.installed, stateContext.repository]);\n\n return <ContextWrapper.Provider value={stateContext}>{children}</ContextWrapper.Provider>;\n}\n","import React, { Component, type JSX } from 'react';\n\nimport { Box, LinearProgress, Typography } from '@mui/material';\n\nimport {\n type AdminConnection,\n I18n,\n type IobTheme,\n type ThemeName,\n type ThemeType,\n Utils,\n} from '@iobroker/adapter-react-v5';\nimport {\n type BackEndCommand,\n type BackEndCommandOpenLink,\n type ConfigItemPanel,\n JsonConfigComponent,\n} from '@iobroker/json-config';\n\nconst styles: Record<string, any> = {\n message: {\n position: 'relative',\n // justifyContent: 'space-between',\n display: 'block',\n width: '100%',\n // alignItems: 'center',\n // '@media screen and (max-width: 550px)': {\n // flexWrap: 'wrap',\n // },\n },\n offline: {\n position: 'relative',\n justifyContent: 'space-between',\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n opacity: 0.7,\n '@media screen and (max-width: 550px)': {\n flexWrap: 'wrap',\n },\n },\n timestamp: {\n color: 'text.secondary',\n position: 'absolute',\n top: 5,\n right: 25,\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n simpleMessage: {\n fontFamily: 'monospace',\n fontSize: 14,\n ml: '20px',\n mb: '10px',\n width: '100%',\n display: 'block',\n whiteSpace: 'pre-wrap',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n ml: 0,\n },\n },\n};\n\nexport interface InstanceMessage {\n messages: {\n message: string;\n ts: number;\n }[];\n}\n/** Possible message severities */\nexport type Severity = 'notify' | 'info' | 'alert';\n\nexport interface Message {\n name: ioBroker.Translated;\n severity: Severity;\n description: ioBroker.Translated;\n /** Show button, that leads to this link */\n link?: {\n /**\n * - empty - URL = http://IP:8081/#tab-instances/config/system.adapter.ADAPTER.N\n * - `simpleText` - URL = http://IP:8081/#tab-instances/config/system.adapter.ADAPTER.N/<>simpleText>\n * - `#url` - URL = http://IP:8081/#url\n * - `http[s]://...` - URL = http[s]://...\n */\n url?: string;\n /** Button text. Default is \"open\" */\n text?: ioBroker.Translated;\n /** Target */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n target?: '_blank' | '_self' | string;\n /** base64 icon */\n icon?: string;\n /** CSS style of the button */\n style?: Record<string, string>;\n /** Button style. Default is `contained` */\n variant?: 'outlined' | 'text' | 'contained';\n };\n instances: Record<string, InstanceMessage>;\n}\n\n/* TODO: Replace it later with ioBroker.NotificationAction */\n/** Structure for notification actions */\ninterface NotificationAction {\n /** This message will be shown if instance is offline */\n offlineMessage?: ioBroker.StringOrTranslated;\n /** any other data required for instance to show the dynamic GUI in the notification */\n [other: string]: any;\n}\n\ninterface NotificationMessageProps {\n // entry: Message;\n instanceId: string;\n message: { message: string; ts: number; contextData?: NotificationAction };\n // onClose: () => void;\n onLink: (linkCommand: BackEndCommandOpenLink) => void;\n dateFormat: string;\n socket: AdminConnection;\n themeType: ThemeType;\n themeName: ThemeName;\n theme: IobTheme;\n isFloatComma: boolean;\n}\n\ninterface NotificationMessageState {\n alive: boolean;\n data: Record<string, any> | null;\n schema: ConfigItemPanel | null;\n error?: boolean;\n updateData: number;\n}\n\nclass NotificationMessage extends Component<NotificationMessageProps, NotificationMessageState> {\n private lastAlive: number = 0;\n\n constructor(props: NotificationMessageProps) {\n super(props);\n\n this.state = {\n alive: false,\n data: {},\n schema: null,\n updateData: 0,\n };\n }\n\n async componentDidMount(): Promise<void> {\n if (this.props.message.contextData?.admin?.notification) {\n // request GUI for this notification\n const alive = await this.props.socket.getState(`${this.props.instanceId}.alive`);\n this.lastAlive = alive?.val ? Date.now() : 0;\n this.setState({ alive: !!alive?.val }, () => this.getGui());\n await this.props.socket.subscribeState(`${this.props.instanceId}.alive`, this.onAliveChanged);\n }\n }\n\n getGui(): void {\n if (this.state.alive && this.props.message.contextData?.admin?.notification) {\n const notification: NotificationAction = JSON.parse(\n JSON.stringify(this.props.message.contextData?.admin?.notification),\n );\n /** remove the offline message from contextData */\n if (notification.offlineMessage) {\n delete notification.offlineMessage;\n }\n // request GUI for this notification\n void this.props.socket\n .sendTo(\n this.props.instanceId.replace('system.adapter.', ''),\n 'admin:getNotificationSchema',\n notification,\n )\n .then((result: { data: Record<string, any> | null; schema: ConfigItemPanel | null }) => {\n if (result) {\n this.setState({\n schema: result.schema,\n data: result.data || this.state.data,\n updateData: this.state.updateData + 1,\n });\n }\n });\n }\n }\n\n onAliveChanged = (id: string, state: ioBroker.State): void => {\n if (id === `${this.props.instanceId}.alive` && state && this.state.alive !== !!state.val) {\n if (state.val) {\n if (this.lastAlive && Date.now() - this.lastAlive < 500) {\n // ignore too fast changes\n return;\n }\n this.lastAlive = Date.now();\n }\n this.setState({ alive: !!state.val }, () => this.getGui());\n }\n };\n\n renderCustomGui(): JSX.Element | null {\n if (!this.state.schema || !this.state.data || !this.state.alive) {\n const notification: NotificationAction | undefined = this.props.message.contextData?.admin?.notification;\n if (notification) {\n if (!this.state.alive) {\n const offlineMessage: ioBroker.StringOrTranslated | undefined = notification.offlineMessage;\n if (offlineMessage) {\n const text =\n typeof offlineMessage === 'string'\n ? offlineMessage\n : offlineMessage[this.props.socket.systemLang] || offlineMessage.en;\n\n return <Box sx={styles.offline}>{Utils.renderTextWithA(text)}</Box>;\n }\n return <Typography>{I18n.t('Instance is not alive')}</Typography>;\n }\n return <LinearProgress />;\n }\n\n return null;\n }\n\n const [, , adapterName, instance] = this.props.instanceId.split('.');\n\n return (\n <>\n {this.state.error && <div style={{ color: 'red' }}>{this.state.error}</div>}\n <JsonConfigComponent\n style={{ width: '100%' }}\n updateData={this.state.updateData}\n socket={this.props.socket}\n adapterName={adapterName}\n instance={parseInt(instance, 10)}\n schema={this.state.schema}\n data={this.state.data}\n onError={(error?: boolean) => this.setState({ error })}\n onChange={(data: Record<string, any>) => this.setState({ data })}\n onBackEndCommand={(command?: BackEndCommand) => {\n if (command.schema) {\n this.setState({ schema: command.schema, data: command.data || this.state.data });\n }\n\n if (command.command === 'refresh' || command.refresh) {\n this.getGui();\n }\n if (command.command === 'link') {\n this.props.onLink(command);\n }\n }}\n embedded\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n theme={this.props.theme}\n isFloatComma={this.props.isFloatComma}\n dateFormat={this.props.dateFormat}\n />\n </>\n );\n }\n\n renderSimpleMessage(): JSX.Element | null {\n return this.props.message.message ? (\n <Box sx={styles.simpleMessage}>{Utils.renderTextWithA(this.props.message.message)}</Box>\n ) : null;\n }\n\n render(): JSX.Element {\n return (\n <Typography\n component=\"div\"\n sx={styles.message}\n >\n <Box sx={styles.timestamp}>{new Date(this.props.message.ts).toLocaleString()}</Box>\n {this.renderSimpleMessage()}\n {this.renderCustomGui()}\n </Typography>\n );\n }\n}\n\nexport default NotificationMessage;\n","import React, { useState, type JSX, useEffect } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Accordion,\n AccordionDetails,\n AccordionSummary,\n AppBar,\n Box,\n CardMedia,\n Tab,\n Tabs,\n Typography,\n Tooltip,\n} from '@mui/material';\n\nimport {\n Warning as WarningIcon,\n Notifications as BellIcon,\n Info as InfoIcon,\n ExpandMore as ExpandMoreIcon,\n Check as CheckIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport { I18n, type ThemeType, type IobTheme, type AdminConnection, type ThemeName } from '@iobroker/adapter-react-v5';\n\nimport NotificationMessage, { type Message, type Severity } from '../components/NotificationMessage';\nimport type { BackEndCommandGeneric } from '#JC/types';\n\nexport interface BackEndCommandOpenLink extends BackEndCommandGeneric {\n command: 'link';\n /** Link url. Could be relative ('#blabla') or absolute ('https://blabla') */\n url: string;\n /** Target of the link. Default is `_self` for relative and '_blank' for absolute links */\n // eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\n target?: '_self' | '_blank' | string;\n /** If GUI should be closed after the link was opened (Only for target='_self') */\n close?: boolean;\n}\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: '4px',\n flexDirection: 'column',\n }),\n paper: {\n maxWidth: 1000,\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden',\n },\n overflowAuto: {\n overflowY: 'auto',\n },\n column: {\n flexDirection: 'column',\n },\n headerText: (theme: IobTheme) => ({\n fontWeight: 'bold',\n fontSize: 20,\n color: theme.palette.mode === 'dark' ? '#DDD' : '#111',\n }),\n descriptionHeaderText: (theme: IobTheme) => ({\n margin: '18px 0',\n color: theme.palette.mode === 'dark' ? '#CCC' : '#222',\n }),\n button: {\n paddingTop: 5,\n paddingBottom: 5,\n position: 'sticky',\n bottom: 0,\n // background: 'white',\n zIndex: 3,\n },\n img2: {\n width: 25,\n height: 25,\n margin: 'auto 0',\n mr: '10px',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n width: '100%',\n },\n headingTop: {\n display: 'flex',\n alignItems: 'center',\n },\n classNameBox: {\n p: '8px',\n '@media screen and (max-width: 550px)': {\n p: '4px',\n },\n },\n textStyle: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n content: {\n overflow: 'hidden',\n },\n buttonStyle: {\n m: '3px',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n};\n\ninterface StatusOptions {\n /** Severity of the message */\n severity?: Severity;\n /** If dark mode enabled */\n isDark: boolean;\n}\n\nfunction Status({ severity, isDark, ...props }: StatusOptions): JSX.Element {\n if (severity === 'notify') {\n return (\n <BellIcon\n color={isDark ? 'primary' : 'secondary'}\n {...props}\n />\n );\n }\n\n if (severity === 'info') {\n return (\n <InfoIcon\n color=\"info\"\n {...props}\n />\n );\n }\n\n return (\n <WarningIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n}\n\nfunction a11yProps(index: number): { id: string; 'aria-controls': string } {\n return {\n id: `scrollable-force-tab-${index}`,\n 'aria-controls': `scrollable-force-tabpanel-${index}`,\n };\n}\n\ninterface TabPanelOptions {\n index: string;\n style: React.CSSProperties;\n sxBox: Record<string, any>;\n children: JSX.Element[];\n}\n\nconst TabPanel = ({ children, index, sxBox, style }: TabPanelOptions): JSX.Element => (\n <div\n role=\"tabpanel\"\n id={`scrollable-force-tabpanel-${index}`}\n aria-labelledby={`scrollable-force-tab-${index}`}\n style={style}\n >\n <Box sx={sxBox}>\n <Typography component=\"div\">{children}</Typography>\n </Box>\n </div>\n);\n\ninterface NotificationDialogOptions {\n notifications: {\n [host: string]: {\n result: {\n [scope: string]: {\n categories: {\n [category: string]: Message;\n };\n description: ioBroker.Translated;\n name: ioBroker.Translated;\n };\n };\n };\n };\n onClose: () => void;\n ackCallback: (host: string, name: string) => void;\n dateFormat: string;\n isFloatComma: boolean;\n themeType: ThemeType;\n themeName: ThemeName;\n theme: IobTheme;\n instances: Record<string, ioBroker.InstanceObject>;\n socket: AdminConnection;\n}\n\ninterface MessagesPerScope {\n [scope: string]: Record<string, Message & { host: string }>;\n}\n\nfunction onLink(linkCommand: BackEndCommandOpenLink, instanceId: string, onClose: () => void): void {\n let target;\n let url = '';\n if (!linkCommand.url) {\n url = `#tab-instances/config/${instanceId}`;\n target = linkCommand.target || '_self';\n } else if (linkCommand.url.toString().startsWith('#')) {\n target = linkCommand.target || '_self';\n url = linkCommand.url;\n } else if (linkCommand.url.toString().startsWith('/')) {\n target = linkCommand.target || '_self';\n url = linkCommand.url;\n } else if (linkCommand.url.startsWith('http://') || linkCommand.url.startsWith('https://')) {\n target = linkCommand.target || '_blank';\n url = linkCommand.url;\n } else {\n url = `#tab-instances/config/${instanceId}/${linkCommand.url}`;\n target = linkCommand.target || '_self';\n }\n if (target === '_self') {\n // close dialog\n setTimeout(\n (_url: string) => {\n if (_url.startsWith('#')) {\n window.location.hash = _url;\n } else if (_url.startsWith('/')) {\n url = `${window.location.protocol}:${window.location.host}${url}`;\n } else if (_url.startsWith('http://') || _url.startsWith('https://')) {\n window.location.href = _url;\n }\n },\n 100,\n url,\n );\n\n if (linkCommand.close && typeof onClose === 'function') {\n onClose();\n }\n } else {\n if (url.startsWith('#')) {\n url = `${window.location.protocol}:${window.location.host}${window.location.pathname}${url}`;\n } else if (url.startsWith('/')) {\n url = `${window.location.protocol}:${window.location.host}${url}`;\n }\n\n window.open(url, target);\n }\n}\n\nconst NotificationsDialog = ({\n notifications,\n onClose,\n ackCallback,\n dateFormat,\n themeType,\n instances,\n themeName,\n theme,\n isFloatComma,\n socket,\n}: NotificationDialogOptions): JSX.Element => {\n const [panel, setPanel] = useState('');\n const [disabled, setDisabled] = useState<string[]>([]);\n const [expanded, setExpanded] = useState('');\n const [autoCollapse, setAutoCollapse] = useState(true);\n const [messages, setMessages] = useState<MessagesPerScope>({});\n\n const handleChange = (_event: React.SyntheticEvent, newValue: string): void => {\n setAutoCollapse(true);\n setPanel(newValue);\n setExpanded('');\n };\n\n const handleChangeAccordion = (panelName: string) => (_event: unknown, isExpanded: boolean) =>\n setExpanded(isExpanded ? panelName : '');\n\n const black = themeType === 'dark';\n\n const notificationManagerInstalled = !!Object.values(instances).find(\n instance => instance.common.name === 'notification-manager',\n );\n\n useEffect(() => {\n const _messages: MessagesPerScope = {};\n let firstKey = '';\n\n for (const [host, hostDetails] of Object.entries(notifications)) {\n for (const [scope, scopeDetails] of Object.entries(hostDetails.result)) {\n if (scope === 'system') {\n continue;\n }\n\n for (const [category, categoryDetails] of Object.entries(scopeDetails.categories)) {\n _messages[scope] = _messages[scope] || {};\n _messages[scope][category] = { ...categoryDetails, host };\n }\n }\n }\n\n Object.keys(_messages).map(scope =>\n Object.keys(_messages[scope]).map(name => (firstKey = firstKey || `${scope}--${name}`)),\n );\n\n // if a panel does not exist, set it to the first one\n if (panel) {\n const [scope, name] = panel.split('--');\n if (!_messages[scope]) {\n setPanel(firstKey);\n } else if (!_messages[scope][name]) {\n // take the first message in this scope\n const key = Object.keys(_messages[scope])[0];\n if (key) {\n setPanel(`${scope}--${key}`);\n } else {\n setPanel(firstKey);\n }\n }\n } else {\n setPanel(firstKey);\n }\n setMessages(_messages);\n }, [instances, notifications, panel]);\n\n const [currentScope, currentName] = panel.split('--');\n const entry: (Message & { host: string }) | null =\n currentScope && currentName ? messages[currentScope][currentName] : null;\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <h2 style={styles.headingTop}>\n <BellIcon\n sx={{ color: 'primary.main' }}\n style={{\n fontSize: 36,\n marginLeft: 25,\n marginRight: 10,\n }}\n />\n {I18n.t('Notifications')}\n\n {!notificationManagerInstalled ? (\n <Tooltip\n sx={{ position: 'absolute', right: 24, color: 'text.primary' }}\n title={I18n.t(\n 'Tip: Use the \"notification-manager\" adapter to receive notifications automatically via messaging adapters.',\n )}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <InfoIcon />\n </Tooltip>\n ) : null}\n </h2>\n <DialogContent\n style={{ ...styles.flex, ...styles.overflowHidden }}\n dividers\n >\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <Tabs\n value={panel}\n onChange={handleChange}\n variant=\"scrollable\"\n scrollButtons\n indicatorColor={black ? 'primary' : 'secondary'}\n textColor={black ? 'primary' : 'secondary'}\n >\n {Object.keys(messages).map(scope =>\n Object.keys(messages[scope]).map((name, idx) => {\n const entry = messages[scope][name];\n const key = `${scope}--${name}`;\n\n return (\n <Tab\n disabled={disabled.includes(key)}\n key={key}\n value={key}\n label={`${entry.name[I18n.getLanguage()]}`}\n icon={\n <Status\n severity={entry.severity}\n isDark={black}\n />\n }\n {...a11yProps(idx)}\n />\n );\n }),\n )}\n </Tabs>\n </AppBar>\n {entry ? (\n <TabPanel\n sxBox={styles.classNameBox}\n key={`tabPanel-${currentName}`}\n style={{ ...styles.overflowAuto, color: black ? 'black' : undefined }}\n index={panel}\n >\n <Box\n component=\"div\"\n sx={styles.headerText}\n style={{ fontWeight: 'bold' }}\n >\n {entry.name[I18n.getLanguage()]}\n </Box>\n <Box\n component=\"div\"\n sx={styles.descriptionHeaderText}\n >\n {entry.description[I18n.getLanguage()]}\n </Box>\n <div>\n {entry.instances\n ? Object.keys(entry.instances).map(nameInst => {\n const accKey = `${panel}--${nameInst}`;\n if (autoCollapse) {\n handleChangeAccordion(accKey)('', true);\n setAutoCollapse(false);\n }\n\n const currentInstance = instances && instances[nameInst];\n let icon = 'img/no-image.png';\n if (currentInstance?.common?.icon && currentInstance?.common?.name) {\n icon = `adapter/${currentInstance.common.name}/${currentInstance.common.icon}`;\n }\n\n return (\n <Accordion\n style={black ? undefined : { backgroundColor: '#c0c0c052' }}\n key={accKey}\n expanded={expanded === accKey}\n onChange={handleChangeAccordion(accKey)}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n sx={{\n '& .MuiAccordionSummary-content': styles.content,\n }}\n aria-controls=\"panel1bh-content\"\n id=\"panel1bh-header\"\n >\n <Typography style={styles.heading}>\n <CardMedia\n sx={styles.img2}\n component=\"img\"\n image={icon}\n />\n <Box\n component=\"div\"\n sx={styles.textStyle}\n >\n {nameInst.replace(/^system\\.adapter\\./, '')}\n </Box>\n </Typography>\n </AccordionSummary>\n <AccordionDetails style={styles.column}>\n {entry.instances[nameInst].messages.map((msg, i) => (\n <NotificationMessage\n key={i}\n message={msg}\n dateFormat={dateFormat}\n // entry={entry}\n instanceId={nameInst}\n socket={socket}\n themeType={themeType}\n themeName={themeName}\n theme={theme}\n isFloatComma={isFloatComma}\n // onClose={onClose}\n onLink={(linkCommand: BackEndCommandOpenLink) =>\n onLink(linkCommand, nameInst, onClose)\n }\n />\n ))}\n </AccordionDetails>\n </Accordion>\n );\n })\n : null}\n </div>\n </TabPanel>\n ) : null}\n </Box>\n </DialogContent>\n <DialogActions>\n {currentScope && currentName ? (\n <Button\n variant=\"contained\"\n autoFocus={Object.keys(messages[currentScope]).length !== 1}\n disabled={disabled.includes(currentName)}\n style={disabled.includes(currentName) ? { backgroundColor: 'silver' } : undefined}\n sx={styles.buttonStyle}\n onClick={() => {\n ackCallback(messages[currentScope][currentName].host, currentName);\n setDisabled([...disabled, currentName]);\n }}\n color={Object.keys(messages[currentScope]).length !== 1 ? 'primary' : 'grey'}\n startIcon={<CheckIcon />}\n >\n {I18n.t('Acknowledge')}\n </Button>\n ) : null}\n {currentScope && currentName && Object.keys(messages[currentScope]).length === 1 && (\n <Button\n variant=\"contained\"\n disabled={disabled.includes(currentName)}\n sx={styles.buttonStyle}\n style={disabled.includes(currentName) ? { backgroundColor: 'silver' } : undefined}\n onClick={() => {\n setDisabled([...disabled, currentName]);\n ackCallback(messages[currentScope][currentName].host, currentName);\n onClose();\n }}\n startIcon={\n <>\n <CheckIcon />\n <CloseIcon />\n </>\n }\n color=\"primary\"\n >\n {I18n.t('Acknowledge & close')}\n </Button>\n )}\n <div style={{ flexGrow: 1 }} />\n <Button\n id=\"notifications-dialog-close\"\n variant=\"contained\"\n onClick={() => onClose()}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default NotificationsDialog;\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Button,\n Checkbox,\n Dialog,\n DialogActions,\n DialogContent,\n DialogTitle,\n FormControlLabel,\n IconButton,\n} from '@mui/material';\n\nimport { Close as CloseIcon, OpenInBrowser as OpenInBrowserIcon } from '@mui/icons-material';\n\nimport type { IobTheme, Translate, AdminConnection } from '@iobroker/adapter-react-v5';\nimport Command from '../components/Command';\n\nconst styles: Record<string, any> = {\n closeButton: (theme: IobTheme) => ({\n position: 'absolute',\n right: 8,\n top: 8,\n color: theme.palette.grey[500],\n }),\n hiddenDialog: {\n display: 'none',\n },\n dialogRoot: {\n height: 'calc(100% - 64px)',\n },\n};\n\ninterface CommandDialogProps {\n t: Translate;\n confirmText?: string;\n onClose: () => void;\n callback: () => void;\n onInBackground: () => void;\n visible: boolean;\n ready: boolean;\n onSetCommandRunning: (running: boolean) => void;\n cmd: string;\n errorFunc: () => void;\n performed: () => void;\n inBackground: boolean;\n commandError: boolean;\n socket: AdminConnection;\n host: string;\n}\n\ninterface CommandDialogState {\n progressText: string;\n closeOnReady: boolean;\n isError: boolean;\n}\n\nclass CommandDialog extends Component<CommandDialogProps, CommandDialogState> {\n constructor(props: CommandDialogProps) {\n super(props);\n\n this.state = {\n progressText: '',\n isError: false,\n closeOnReady:\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n 'CommandDialog.closeOnReady',\n ) === 'true',\n };\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n scroll=\"paper\"\n fullWidth\n sx={{\n '&.MuiDialog-root': !this.props.visible ? styles.hiddenDialog : undefined,\n '& .MuiDialog-paper': styles.dialogRoot,\n }}\n onClose={this.props.inBackground ? this.props.onClose : this.props.onInBackground}\n open={!0}\n maxWidth=\"md\"\n >\n <DialogTitle>\n {this.state.progressText || this.props.t('Running command')}\n <IconButton\n size=\"large\"\n sx={styles.closeButton}\n onClick={this.props.onClose}\n disabled={this.props.inBackground}\n >\n <CloseIcon />\n </IconButton>\n </DialogTitle>\n <DialogContent\n dividers\n style={{ height: '100%' }}\n >\n <Command\n noSpacing\n key=\"command\"\n ready={this.props.ready}\n host={this.props.host}\n socket={this.props.socket}\n t={this.props.t}\n inBackground={this.props.inBackground}\n commandError={this.props.commandError}\n errorFunc={() => {\n this.setState({ isError: true });\n this.props.errorFunc();\n }}\n performed={this.props.performed}\n callback={this.props.callback}\n cmd={this.props.cmd}\n onFinished={() => this.state.closeOnReady && this.props.onClose()}\n onSetCommandRunning={(running: boolean) => this.props.onSetCommandRunning(running)}\n />\n </DialogContent>\n <DialogActions style={{ justifyContent: 'space-between' }}>\n <FormControlLabel\n style={{ marginLeft: 16 }}\n control={\n <Checkbox\n disabled={this.props.inBackground}\n checked={this.state.closeOnReady}\n onChange={e => {\n this.setState({ closeOnReady: e.target.checked });\n (((window as any)._localStorage as Storage) || window.localStorage).setItem(\n 'CommandDialog.closeOnReady',\n e.target.checked ? 'true' : 'false',\n );\n }}\n />\n }\n label={this.props.t('close on ready')}\n />\n <div>\n <Button\n variant=\"contained\"\n autoFocus\n disabled={this.props.inBackground}\n onClick={this.props.onInBackground}\n startIcon={<OpenInBrowserIcon />}\n color=\"primary\"\n style={{\n marginRight: 8,\n }}\n >\n {this.props.confirmText || this.props.t('In background')}\n </Button>\n <Button\n variant=\"contained\"\n disabled={!this.props.inBackground}\n onClick={this.props.onClose}\n color=\"grey\"\n style={{\n backgroundColor: this.state.isError ? '#834141' : undefined,\n color: this.state.isError ? '#fff' : undefined,\n }}\n startIcon={<CloseIcon />}\n >\n {this.props.t('Close')}\n </Button>\n </div>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default CommandDialog;\n","import _ from 'lodash';\n\nconst funcSet = _.throttle((setTabs, tabs) => setTabs(tabs), 200);\n\nconst findCard = (id: string, cards: { name: string }[]): { card: { name: string }; index: number } => {\n const card = cards.find(c => c.name === id);\n return {\n card,\n index: cards.indexOf(card),\n };\n};\n\nconst moveCard = (\n id: string,\n atIndex: number, // index of the card being dragged\n tabs: { name: string }[],\n setTabs: (newTabs: { name: string }[]) => void,\n hoverClientY: number,\n hoverMiddleY: number,\n): void => {\n const { card, index } = findCard(id, tabs);\n if (index === atIndex) {\n return;\n }\n if (index < atIndex && hoverClientY < hoverMiddleY) {\n return;\n }\n if (index > atIndex && hoverClientY > hoverMiddleY) {\n return;\n }\n if (card && index !== atIndex) {\n const copyCard = JSON.parse(JSON.stringify(tabs));\n copyCard.splice(index, 1);\n copyCard.splice(atIndex, 0, card);\n funcSet(setTabs, copyCard);\n }\n};\n\nexport { moveCard, findCard };\n","import React, { useEffect, useRef, type JSX } from 'react';\nimport { useDrag, useDrop } from 'react-dnd';\nimport { getEmptyImage } from 'react-dnd-html5-backend';\nimport { findCard, moveCard } from '@/helpers/cardSort';\n\nconst styles: React.CSSProperties = {\n cursor: 'move',\n};\n\ninterface DragWrapperProps {\n canDrag: boolean;\n setEndDrag: () => void;\n iconJSX: JSX.Element;\n selected: boolean;\n compact: boolean;\n badgeContent: number;\n badgeColor: string;\n tab: { name: string };\n tabs: { name: string }[];\n setTabs: (newTabs: { name: string }[]) => void;\n _id: string;\n children: any;\n name: string;\n}\n\nconst DragWrapper = ({\n canDrag,\n setEndDrag,\n iconJSX,\n selected,\n compact,\n badgeContent,\n badgeColor,\n tab,\n tabs,\n setTabs,\n _id,\n children,\n name,\n}: DragWrapperProps): JSX.Element => {\n const ref = useRef(null);\n const [{ handlerId }, drop] = useDrop({\n accept: 'box',\n collect(monitor) {\n return {\n handlerId: monitor.getHandlerId(),\n };\n },\n // canDrop: () => false,\n hover({ _id: draggedId }, monitor) {\n if (!ref.current) {\n return;\n }\n const { index: overIndexActions } = findCard(_id, tabs);\n const hoverBoundingRect = ref.current?.getBoundingClientRect();\n const hoverMiddleY = (hoverBoundingRect.bottom - hoverBoundingRect.top) / 2;\n const clientOffset = monitor.getClientOffset();\n const hoverClientY = clientOffset.y - hoverBoundingRect.top;\n moveCard(draggedId, overIndexActions, tabs, setTabs, hoverClientY, hoverMiddleY);\n },\n });\n\n const [{ isDragging }, drag, preview] = useDrag({\n type: 'box',\n item: {\n _id: tab.name,\n ...tab,\n iconJSX,\n selected,\n compact,\n badgeContent,\n badgeColor,\n },\n canDrag: () => canDrag,\n end: () => setEndDrag(),\n collect: monitor => ({ isDragging: monitor.isDragging() }),\n });\n\n useEffect(() => {\n preview(getEmptyImage(), { captureDraggingState: true });\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n const opacity = isDragging ? 0 : 1;\n drag(drop(ref));\n\n return (\n <div\n ref={ref}\n style={{ ...styles, opacity }}\n data-handler-id={handlerId}\n >\n <a\n type=\"box\"\n data-handler-id={handlerId}\n onClick={event => event.preventDefault()}\n href={`/#${name}`}\n style={{\n ...styles,\n opacity,\n color: 'inherit',\n textDecoration: 'none',\n }}\n >\n {children}\n </a>\n </div>\n );\n};\n\nexport default DragWrapper;\n","import React, { type JSX } from 'react';\n\nimport { Badge, Grid2, ListItemButton, ListItemIcon, ListItemText, Tooltip, Checkbox } from '@mui/material';\nimport { DragHandle } from '@mui/icons-material';\n\nimport { amber } from '@mui/material/colors';\n\nimport { Utils, ColorPicker, type IobTheme } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '../helpers/AdminUtils';\n\nconst styles: Record<string, any> = {\n selected: (theme: IobTheme) => ({\n background: theme.palette.primary.main,\n color: theme.palette.mode === 'light' ? 'white' : AdminUtils.invertColor(theme.palette.primary.main, true),\n '&:hover': {\n background: theme.palette.primary.main,\n color: theme.palette.mode === 'light' ? 'white' : AdminUtils.invertColor(theme.palette.primary.main, true),\n '& $selectedIcon': {\n color:\n theme.palette.mode === 'light' ? 'white' : AdminUtils.invertColor(theme.palette.primary.main, true),\n },\n },\n }),\n selectedIcon: (theme: IobTheme) => ({\n color: theme.palette.mode === 'light' ? 'white' : AdminUtils.invertColor(theme.palette.primary.main, true),\n }),\n compactBadge: {\n pl: '12px',\n },\n noWrap: {\n flexWrap: 'nowrap',\n height: 40,\n },\n warn: {\n backgroundColor: amber[500],\n },\n};\n\ninterface DrawerItemProps {\n badgeColor?: 'error' | 'warn' | 'primary' | '';\n badgeContent?: number;\n compact?: boolean;\n icon: JSX.Element;\n onClick?: (e?: React.MouseEvent) => void;\n selected?: boolean;\n text: string;\n editMenuList?: boolean;\n visible?: boolean;\n color?: string;\n editListFunc?: (visible: boolean, color?: string | null) => void;\n badgeAdditionalContent?: number;\n badgeAdditionalColor?: 'error' | '' | 'warn' | 'secondary';\n style?: Record<string, any>;\n theme: IobTheme;\n}\n\nconst DrawerItem = (props: DrawerItemProps): JSX.Element => {\n const {\n badgeColor,\n badgeContent,\n compact,\n icon,\n onClick,\n selected,\n text,\n editMenuList,\n visible,\n color,\n editListFunc,\n badgeAdditionalContent,\n badgeAdditionalColor,\n style,\n } = props;\n\n let content = text ? text.replace('>', '>') : '';\n\n if (content === 'Text->Kommandos') {\n content = 'Text→Cmd';\n } else if (content === 'Text->Commands') {\n content = 'Text→Cmd';\n }\n\n return (\n <div style={{ display: 'flex', alignItems: 'center', ...(style || {}) }}>\n {!!editMenuList && <DragHandle />}\n {!!editMenuList && (\n <Checkbox\n checked={visible}\n onClick={() => editListFunc(true)}\n />\n )}\n {!!editMenuList && (\n <ColorPicker\n value={color}\n noInputField\n onChange={value => editListFunc(false, value || null)}\n />\n )}\n <ListItemButton\n sx={Utils.getStyle(props.theme, selected && styles.selected, compact && styles.compactBadge)}\n onClick={onClick}\n >\n <Tooltip\n title={compact ? content : ''}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <Grid2\n container\n spacing={1}\n alignItems=\"center\"\n style={styles.noWrap}\n >\n <Grid2>\n <ListItemIcon\n style={{ minWidth: 0, color }}\n sx={selected ? styles.selectedIcon : undefined}\n >\n <Badge\n badgeContent={badgeContent || 0}\n color={(badgeColor === 'warn' ? 'default' : badgeColor) || 'primary'}\n sx={badgeColor === 'warn' ? { '& .MuiBadge-badge': styles.warn } : undefined}\n >\n {icon}\n </Badge>\n </ListItemIcon>\n </Grid2>\n {!compact && (\n <Grid2>\n <ListItemText style={{ color }}>\n <Badge\n badgeContent={badgeAdditionalContent || 0}\n color={\n (badgeAdditionalColor === 'warn' ? 'default' : badgeAdditionalColor) ||\n 'primary'\n }\n sx={\n badgeAdditionalColor === 'warn'\n ? { '& .MuiBadge-badge': styles.warn }\n : undefined\n }\n >\n {content}\n </Badge>\n </ListItemText>\n </Grid2>\n )}\n </Grid2>\n </Tooltip>\n </ListItemButton>\n </div>\n );\n};\n\nexport default DrawerItem;\n","import React, { type JSX } from 'react';\nimport { useDragLayer } from 'react-dnd';\n\nimport { Box } from '@mui/material';\n\nimport type { IobTheme } from '@iobroker/adapter-react-v5';\n\nimport DrawerItem from './DrawerItem';\n\nconst layerStyles: React.CSSProperties = {\n position: 'fixed',\n pointerEvents: 'none',\n zIndex: 100,\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n};\n\nfunction snapToGrid(x: number, y: number): [number, number] {\n const snappedX = Math.round(x / 32) * 32;\n const snappedY = Math.round(y / 32) * 32;\n return [snappedX, snappedY];\n}\n\nfunction getItemStyles(\n initialOffset: { x: number; y: number },\n currentOffset: { x: number; y: number },\n isSnapToGrid?: boolean,\n): React.CSSProperties {\n if (!initialOffset || !currentOffset) {\n return {\n display: 'none',\n };\n }\n let { x, y } = currentOffset;\n if (isSnapToGrid) {\n x -= initialOffset.x;\n y -= initialOffset.y;\n [x, y] = snapToGrid(x, y);\n x += initialOffset.x;\n y += initialOffset.y;\n }\n const transform = `translate(${x}px, ${y}px)`;\n return {\n transform,\n WebkitTransform: transform,\n };\n}\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n background: theme.palette.background.default,\n }),\n};\n\nfunction CustomDragLayer(props: { theme: IobTheme }): JSX.Element {\n const {\n itemType,\n isDragging,\n item,\n initialOffset,\n currentOffset,\n // targetIds\n } = useDragLayer(monitor => ({\n item: monitor.getItem(),\n itemType: monitor.getItemType(),\n initialOffset: monitor.getInitialSourceClientOffset(),\n currentOffset: monitor.getSourceClientOffset(),\n isDragging: monitor.isDragging(),\n // targetIds: monitor.getTargetIds(),\n }));\n\n function renderItem(): JSX.Element | null {\n if (itemType === 'box') {\n return (\n <Box\n component=\"div\"\n sx={styles.root}\n style={{ width: 179 }}\n >\n <DrawerItem\n key={item.name}\n visible={item.visible}\n editListFunc={() => undefined}\n compact={item.compact}\n icon={item.iconJSX}\n text={item.title}\n selected={item.selected}\n badgeContent={item.badgeContent}\n badgeColor={item.badgeColor}\n theme={props.theme}\n />\n </Box>\n );\n }\n return null;\n }\n\n if (!isDragging) {\n return null;\n }\n\n return (\n <div style={layerStyles}>\n <div style={getItemStyles(initialOffset, currentOffset)}>{renderItem()}</div>\n </div>\n );\n}\n\nexport default CustomDragLayer;\n","import React, { type JSX } from 'react';\n\nimport { Popper, Typography, Fade, Paper, IconButton } from '@mui/material';\n\nimport { Edit as EditIcon } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nlet timer: ReturnType<typeof setTimeout>;\n\ninterface CustomPopperProps {\n editMenuList: boolean;\n onClick: () => void;\n size?: 'small' | 'medium' | 'large';\n}\n\nconst CustomPopper = ({ editMenuList, onClick, size }: CustomPopperProps): JSX.Element => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const [open, setOpen] = React.useState(false);\n const [placement, setPlacement] = React.useState<'right' | null>(null);\n\n return (\n <>\n <IconButton\n size={size || 'large'}\n style={editMenuList ? { color: 'red' } : null}\n onClick={el => {\n onClick();\n if (!editMenuList) {\n setAnchorEl(el.currentTarget);\n setOpen(prev => placement !== 'right' || !prev);\n setPlacement('right');\n\n timer = setTimeout(() => setOpen(false), 3000);\n } else {\n setOpen(false);\n clearTimeout(timer);\n }\n }}\n title={I18n.t('show/hide item')}\n >\n <EditIcon />\n </IconButton>\n <Popper\n style={{ zIndex: 2222 }}\n open={open}\n anchorEl={anchorEl}\n placement={placement}\n transition\n >\n {({ TransitionProps }) => (\n <Fade\n {...TransitionProps}\n timeout={350}\n >\n <Paper>\n <Typography\n style={{\n padding: 16,\n }}\n >\n {I18n.t('You can drag and drop list items for reorder')}\n </Typography>\n </Paper>\n </Fade>\n )}\n </Popper>\n </>\n );\n};\n\nexport default CustomPopper;\n","import React, { Component, type RefObject, type JSX } from 'react';\n\nimport { Avatar, Drawer as MaterialDrawer, IconButton, List, Typography, SwipeableDrawer, Box } from '@mui/material';\n\nimport {\n ChevronLeft as ChevronLeftIcon,\n Apps as AppsIcon,\n Info as InfoIcon,\n Store as StoreIcon,\n Subtitles as SubtitlesIcon,\n ViewList as ViewListIcon,\n ArtTrack as ArtTrackIcon,\n Dvr as DvrIcon,\n ViewHeadline as ViewHeadlineIcon,\n Subscriptions as SubscriptionsIcon,\n FlashOn as FlashOnIcon,\n PersonOutline as PersonOutlineIcon,\n Storage as StorageIcon,\n FileCopy as FilesIcon,\n} from '@mui/icons-material';\n\nimport {\n Utils,\n I18n,\n Icon,\n withWidth,\n IconLogout as LogoutIcon,\n type AdminConnection,\n type IobTheme,\n type ThemeType,\n type Translate,\n} from '@iobroker/adapter-react-v5';\n\nimport { getHref } from '@/tabs/CustomTab';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport type InstancesWorker from '@/Workers/InstancesWorker';\nimport type HostsWorker from '@/Workers/HostsWorker';\nimport { type NotificationAnswer } from '@/Workers/HostsWorker';\nimport type LogsWorker from '@/Workers/LogsWorker';\nimport type { NotificationsCount } from '@/types';\nimport DragWrapper from './DragWrapper';\nimport CustomDragLayer from './CustomDragLayer';\nimport { ContextWrapper } from './ContextWrapper';\nimport CustomPopper from './CustomPopper';\nimport DrawerItem from './DrawerItem';\n\nexport const DRAWER_FULL_WIDTH = 180;\nexport const DRAWER_COMPACT_WIDTH = 50;\nexport const DRAWER_EDIT_WIDTH = 250;\n\nfunction ucFirst(str: string): string {\n return str.substring(0, 1).toUpperCase() + str.substring(1).toLowerCase();\n}\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n flexShrink: 0,\n transition: theme.transitions.create('width', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n display: 'flex',\n flexDirection: 'column',\n }),\n rootFullWidth: {\n width: DRAWER_FULL_WIDTH,\n },\n rootEditWidth: {\n width: DRAWER_EDIT_WIDTH,\n },\n rootCompactWidth: {\n width: DRAWER_COMPACT_WIDTH,\n },\n paper: {\n width: 'inherit',\n overflowX: 'hidden',\n },\n header: (theme: IobTheme) => ({\n display: 'flex',\n flexDirection: 'row',\n alignItems: 'center',\n padding: '0 8px 0 8px',\n ...theme.mixins.toolbar,\n justifyContent: 'flex-end',\n position: 'sticky',\n top: 0,\n zIndex: 2,\n background: theme.palette.background.default,\n }),\n headerCompact: {\n padding: 0,\n },\n headerLogout: {\n justifyContent: 'space-between',\n },\n list: {\n paddingTop: 0,\n flex: '1 0 auto',\n },\n icon: {\n width: 20,\n height: 20,\n },\n logoSize: {\n width: 50,\n height: 50,\n },\n avatarBlock: {\n width: '100%',\n display: 'flex',\n // justifyContent: 'center',\n // marginLeft: 48,\n marginTop: 5,\n marginBottom: 5,\n },\n avatarNotVisible: {\n opacity: 0,\n transition: 'opacity 0.3s',\n },\n avatarVisible: {\n opacity: 1,\n },\n styleVersion: (theme: IobTheme) => ({\n fontSize: 10,\n color: theme.palette.mode === 'dark' ? '#ffffff5e' : '#0000005e',\n alignSelf: 'center',\n ml: '5px',\n }),\n editButton: {\n position: 'sticky',\n bottom: 0,\n right: 0,\n width: 'fit-content',\n marginLeft: 'auto',\n marginTop: 'auto',\n transition: 'opacity 0.5s',\n },\n};\n\nexport const STATES = {\n opened: 0,\n closed: 1,\n compact: 2,\n};\n\nconst tabsInfo: Record<string, { order: number; icon?: JSX.Element; host?: boolean; instance?: number }> = {\n 'tab-intro': { order: 1, icon: <AppsIcon /> },\n 'tab-info': { order: 5, icon: <InfoIcon />, host: true },\n 'tab-adapters': { order: 10, icon: <StoreIcon />, host: true },\n 'tab-instances': { order: 15, icon: <SubtitlesIcon />, host: true },\n 'tab-objects': { order: 20, icon: <ViewListIcon /> },\n 'tab-enums': { order: 25, icon: <ArtTrackIcon /> },\n 'tab-devices': { order: 27, icon: <DvrIcon />, host: true },\n 'tab-logs': { order: 30, icon: <ViewHeadlineIcon />, host: true },\n 'tab-scenes': { order: 35, icon: <SubscriptionsIcon /> },\n 'tab-events': { order: 40, icon: <FlashOnIcon /> },\n 'tab-users': { order: 45, icon: <PersonOutlineIcon /> },\n 'tab-javascript': { order: 50 },\n 'tab-text2command-0': { order: 55, instance: 0 },\n 'tab-text2command-1': { order: 56, instance: 1 },\n 'tab-text2command-2': { order: 57, instance: 2 },\n 'tab-node-red-0': { order: 60, instance: 0 },\n 'tab-node-red-1': { order: 61, instance: 1 },\n 'tab-node-red-2': { order: 62, instance: 2 },\n 'tab-fullcalendar-0': { order: 65, instance: 0 },\n 'tab-fullcalendar-1': { order: 66, instance: 1 },\n 'tab-fullcalendar-2': { order: 67, instance: 2 },\n 'tab-echarts': { order: 70, instance: 2 },\n 'tab-eventlist-0': { order: 80, instance: 0 },\n 'tab-eventlist-1': { order: 81, instance: 1 },\n 'tab-eventlist-2': { order: 82, instance: 2 },\n 'tab-hosts': { order: 100, icon: <StorageIcon /> },\n 'tab-files': { order: 110, icon: <FilesIcon /> },\n};\n\ninterface AdminTab {\n name: string;\n order: number;\n icon?: string | JSX.Element;\n title?: string;\n visible?: boolean;\n color?: string;\n}\n\ninterface DrawerProps {\n t: Translate;\n lang: ioBroker.Languages;\n state: 0 | 1 | 2;\n adminGuiConfig: Record<string, any>;\n onStateChange: (state: 0 | 1 | 2) => void;\n onLogout: () => void;\n isSecure: boolean;\n currentTab: string;\n themeType: ThemeType;\n socket: AdminConnection;\n versionAdmin: string;\n handleNavigation: (tab: string) => void;\n editMenuList: boolean;\n setEditMenuList: (editMenuList: boolean) => void;\n\n instancesWorker: InstancesWorker;\n hostsWorker: HostsWorker;\n logsWorker: LogsWorker;\n\n hostname: string;\n adminInstance: string;\n installed: Record<string, { version: string; ignoreVersion?: string }>;\n hosts: ioBroker.HostObject[];\n repository: Record<string, { icon: string; version: string }>;\n width: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n theme: IobTheme;\n}\n\ninterface DrawerState {\n tabs: AdminTab[];\n logErrors: number;\n logWarnings: number;\n hostNotifications: NotificationsCount;\n hostsUpdate: number;\n adaptersUpdate: number;\n}\n\nclass Drawer extends Component<DrawerProps, DrawerState> {\n private logsHandlerRegistered: boolean;\n\n private readonly refEditButton: RefObject<HTMLDivElement>;\n\n constructor(props: DrawerProps) {\n super(props);\n\n this.state = {\n tabs: [],\n logErrors: 0,\n logWarnings: 0,\n hostNotifications: { other: 0, warning: 0 },\n hostsUpdate: Drawer.calculateHostUpdates(this.props.hosts, this.props.repository),\n adaptersUpdate: Drawer.calculateAdapterUpdates(this.props.installed, this.props.repository),\n };\n\n this.refEditButton = React.createRef();\n\n this.getTabs().catch(e => window.alert(`Cannot get tabs: ${e}`));\n }\n\n static getDerivedStateFromProps(props: DrawerProps, state: DrawerState): Partial<DrawerState> | null {\n const hostsUpdate = Drawer.calculateHostUpdates(props.hosts, props.repository);\n const adaptersUpdate = Drawer.calculateAdapterUpdates(props.installed, props.repository);\n if (hostsUpdate !== state.hostsUpdate || adaptersUpdate !== state.adaptersUpdate) {\n return { hostsUpdate, adaptersUpdate };\n }\n return null;\n }\n\n static calculateHostUpdates(\n hosts: ioBroker.HostObject[],\n repository: Record<string, { icon: string; version: string }>,\n ): number {\n if (hosts && repository) {\n const jsControllerVersion = repository['js-controller']?.version || '';\n let count = 0;\n hosts.forEach(element => {\n if (AdminUtils.updateAvailable(element.common.installedVersion, jsControllerVersion)) {\n count++;\n }\n });\n return count;\n }\n return 0;\n }\n\n static calculateAdapterUpdates(\n installed: Record<string, { version: string; ignoreVersion?: string }>,\n repository: Record<string, { icon: string; version: string }>,\n ): number {\n if (installed) {\n let count = 0;\n\n Object.keys(installed)\n .sort()\n .forEach(element => {\n const _installed = installed[element];\n const adapter = repository && repository[element];\n if (\n element !== 'js-controller' &&\n element !== 'hosts' &&\n _installed?.version &&\n adapter?.version &&\n _installed.ignoreVersion !== adapter.version &&\n AdminUtils.updateAvailable(_installed.version, adapter.version)\n ) {\n count++;\n }\n });\n\n return count;\n }\n return 0;\n }\n\n instanceChangedHandler = (): Promise<void> => this.getTabs(true);\n\n componentDidMount(): void {\n this.props.instancesWorker.registerHandler(this.instanceChangedHandler, true);\n\n void this.onNotificationsHandler().then(() => {\n this.props.hostsWorker.registerNotificationHandler(this.onNotificationsHandler);\n\n if (!this.logsHandlerRegistered) {\n this.logsHandlerRegistered = true;\n this.props.logsWorker.registerErrorCountHandler(this.onErrorsUpdates);\n this.props.logsWorker.registerWarningCountHandler(this.onWarningsUpdates);\n }\n });\n }\n\n onNotificationsHandler = (): Promise<void> =>\n this.props.hostsWorker\n .getNotifications()\n .then(notifications => this.calculateWarning(notifications))\n .catch(error => window.alert(`Cannot get notifications: ${error}`));\n\n onErrorsUpdates = (logErrors: number): void => {\n this.setState({ logErrors });\n };\n\n onWarningsUpdates = (logWarnings: number): void => {\n this.setState({ logWarnings });\n };\n\n calculateWarning = (notifications: Record<string, NotificationAnswer | null>): void => {\n if (!notifications) {\n return;\n }\n\n const count: NotificationsCount = { warning: 0, other: 0 };\n\n Object.keys(notifications).forEach(host => {\n if (!notifications[host]?.result?.system) {\n return;\n }\n\n if (Object.keys(notifications[host].result.system.categories).length) {\n const obj = notifications[host].result.system.categories;\n\n for (const category of Object.values(obj)) {\n Object.keys(category.instances).forEach(() =>\n category.severity === 'alert' ? count.warning++ : count.other++,\n );\n }\n }\n });\n\n this.setState({ hostNotifications: count });\n };\n\n componentWillUnmount(): void {\n this.props.instancesWorker.unregisterHandler(this.instanceChangedHandler);\n this.props.hostsWorker.unregisterNotificationHandler(this.onNotificationsHandler);\n\n if (this.logsHandlerRegistered) {\n this.logsHandlerRegistered = false;\n this.props.logsWorker.unregisterErrorCountHandler(this.onErrorsUpdates);\n this.props.logsWorker.unregisterWarningCountHandler(this.onWarningsUpdates);\n }\n }\n\n componentDidUpdate(): void {\n if (!this.isSwipeable() && this.props.state !== STATES.opened && this.props.editMenuList) {\n setTimeout(() => this.props.setEditMenuList(false));\n }\n }\n\n async getTabs(update?: boolean): Promise<void> {\n try {\n const _instances = await this.props.socket.getCompactInstances(update);\n const instances = _instances as any as Record<string, ioBroker.AdapterCommon>;\n const dynamicTabs: AdminTab[] = [];\n if (instances) {\n Object.keys(instances).forEach(id => {\n const instance = instances[id];\n\n if (!instance?.adminTab) {\n return;\n }\n\n let tab = `tab-${id.replace('system.adapter.', '').replace(/\\.\\d+$/, '')}`;\n\n const singleton = instance.adminTab.singleton;\n let instNum;\n if (!singleton) {\n const m = id.match(/\\.(\\d+)$/);\n if (m) {\n instNum = parseInt(m[1], 10);\n tab += `-${instNum}`;\n }\n }\n\n if (dynamicTabs.find(item => item.name === tab)) {\n return;\n }\n\n let title;\n\n if (instance.adminTab.name) {\n if (typeof instance.adminTab.name === 'object') {\n if (instance.adminTab.name && instance.adminTab.name[this.props.lang]) {\n title = instance.adminTab.name[this.props.lang];\n } else if (instance.adminTab.name?.en) {\n title = this.props.t(instance.adminTab.name.en);\n } else {\n title = this.props.t(instance.name);\n }\n } else {\n title = this.props.t(instance.adminTab.name);\n }\n } else {\n title = this.props.t(instance.name);\n }\n\n let obj: AdminTab;\n if (tabsInfo[tab]) {\n obj = { name: tab, ...tabsInfo[tab] };\n } else {\n obj = {\n name: tab,\n order: instance.adminTab.order !== undefined ? instance.adminTab.order : 200,\n icon: instance.adminTab.icon,\n };\n }\n\n if (!obj.icon) {\n obj.icon = `adapter/${instance.name}/${instance.icon}`;\n } else if (\n typeof obj.icon !== 'object' &&\n !obj.icon.startsWith('data:image') &&\n !obj.icon.includes('/')\n ) {\n obj.icon = `adapter/${instance.name}/${obj.icon}`;\n }\n\n obj.title = title;\n\n if (!singleton) {\n // obj.instance = instance;\n if (instNum) {\n obj.title += ` ${instNum}`;\n }\n }\n dynamicTabs.push(obj);\n });\n }\n\n const READY_TO_USE = [\n 'tab-intro',\n 'tab-adapters',\n 'tab-instances',\n 'tab-logs',\n 'tab-files',\n 'tab-objects',\n 'tab-hosts',\n 'tab-users',\n 'tab-enums',\n ];\n // DEV ONLY\n const tabNames = Object.keys(tabsInfo).filter(name => READY_TO_USE.includes(name));\n\n let tabs: AdminTab[] = tabNames.map(name => {\n const obj: AdminTab = { name, ...tabsInfo[name] };\n obj.title = I18n.t(\n ucFirst(\n name\n .replace('tab-', '')\n .replace('-0', '')\n .replace(/-(\\d+)$/, ' $1'),\n ),\n );\n obj.visible = true;\n return obj;\n });\n\n // add dynamic tabs\n tabs = tabs.concat(dynamicTabs);\n\n tabs = tabs.filter(obj => obj);\n tabs.forEach(obj => (obj.visible = true));\n\n tabs.sort((a, b) => {\n if (a.order && b.order) {\n return a.order - b.order;\n }\n if (a.order) {\n return -1;\n }\n if (b.order) {\n return 1;\n }\n return a.name > b.name ? -1 : a.name > b.name ? 1 : 0;\n });\n\n // Convert\n void this.props.socket.getCompactSystemConfig().then(systemConfig => {\n const tabsVisible: { name: string; visible: boolean; color?: string }[] =\n systemConfig.common.tabsVisible || [];\n\n tabs.forEach(tab => {\n const it = tabsVisible.find(el => el.name === tab.name);\n if (it) {\n tab.visible = it.visible;\n tab.color = it.color;\n }\n });\n\n const map: Record<string, number> = {};\n tabsVisible.forEach((item, i) => (map[item.name] = i));\n\n tabs.sort((a, b) => {\n const aa = map[a.name];\n const bb = map[b.name];\n if (aa !== undefined && bb !== undefined) {\n return aa - bb;\n }\n if (aa) {\n return -1;\n }\n if (bb) {\n return 1;\n }\n return 0;\n });\n\n this.setState({ tabs }, () => {\n const newTabsVisible = tabs.map(({ name, visible, color }) => ({ name, visible, color }));\n\n if (JSON.stringify(newTabsVisible) !== JSON.stringify(tabsVisible)) {\n void this.props.socket.getSystemConfig(true).then(_systemConfig => {\n _systemConfig.common.tabsVisible = tabsVisible;\n\n return this.props.socket\n .setSystemConfig(_systemConfig)\n .catch(e => window.alert(`Cannot set system config: ${e}`));\n });\n }\n });\n });\n } catch (error) {\n window.alert(`Cannot get instances: ${error}`);\n }\n }\n\n getHeader(): JSX.Element {\n const { state, handleNavigation } = this.props;\n\n return (\n <Box\n component=\"div\"\n sx={Utils.getStyle(\n this.props.theme,\n styles.header,\n this.props.state === STATES.opened && this.props.isSecure && styles.headerLogout,\n !this.isSwipeable() && this.props.state !== STATES.opened && styles.headerCompact,\n )}\n >\n <div\n style={{\n ...styles.avatarBlock,\n ...styles.avatarNotVisible,\n ...(state === 0 ? styles.avatarVisible : { display: 'none' }),\n }}\n >\n <a\n href=\"/#easy\"\n onClick={event => event.preventDefault()}\n style={{ color: 'inherit', textDecoration: 'none' }}\n >\n {this.props.adminGuiConfig.icon ? (\n <div style={{ height: 50, width: 102, lineHeight: '50px' }}>\n <img\n src={this.props.adminGuiConfig.icon}\n alt=\"logo\"\n style={{ maxWidth: '100%', maxHeight: '100%', verticalAlign: 'middle' }}\n />\n </div>\n ) : (\n <Avatar\n onClick={() => handleNavigation('easy')}\n style={styles.logoSize}\n alt=\"ioBroker\"\n src=\"img/no-image.png\"\n />\n )}\n </a>\n {!this.props.adminGuiConfig.icon && this.props.versionAdmin && (\n <Typography sx={styles.styleVersion}>v{this.props.versionAdmin}</Typography>\n )}\n </div>\n <IconButton\n size=\"large\"\n onClick={() => {\n if (this.isSwipeable() || this.props.state === STATES.compact) {\n this.props.onStateChange(STATES.closed as 1);\n } else {\n this.props.onStateChange(STATES.compact as 2);\n }\n }}\n >\n <ChevronLeftIcon />\n </IconButton>\n </Box>\n );\n }\n\n isSwipeable(): boolean {\n return this.props.width === 'xs' || this.props.width === 'sm';\n }\n\n tabsEditSystemConfig = async (idx?: number, isVisibility?: boolean, newColor?: string): Promise<void> => {\n const { tabs } = this.state;\n const { socket } = this.props;\n const newTabs: AdminTab[] = JSON.parse(JSON.stringify(tabs)) as AdminTab[];\n if (isVisibility) {\n newTabs[idx].visible = !newTabs[idx].visible;\n }\n if (newColor !== undefined) {\n if (newColor === null) {\n delete newTabs[idx].color;\n } else {\n newTabs[idx].color = newColor;\n }\n }\n const newObjCopy = await this.props.socket.getSystemConfig(true);\n newObjCopy.common.tabsVisible = newTabs.map(({ name, visible, color }) => ({ name, visible, color }));\n\n if (isVisibility || newColor !== undefined) {\n this.setState({ tabs: newTabs }, () =>\n socket.setSystemConfig(newObjCopy).catch(e => window.alert(`Cannot set system config: ${e}`)),\n );\n } else {\n try {\n await socket.setSystemConfig(newObjCopy);\n } catch (e) {\n window.alert(`Cannot set system config: ${e}`);\n }\n }\n };\n\n getNavigationItems(): JSX.Element[] {\n const { tabs, logErrors, logWarnings } = this.state;\n const { currentTab, state, handleNavigation } = this.props;\n\n const hosts: Record<string, ioBroker.HostObject> = {};\n this.props.hosts.forEach(host => (hosts[host._id] = host));\n\n return tabs.map((tab, idx) => {\n if (!this.props.editMenuList && !tab.visible) {\n return null;\n }\n\n if (this.props.adminGuiConfig.admin.menu && this.props.adminGuiConfig.admin.menu[tab.name] === false) {\n return null;\n }\n\n return (\n <DragWrapper\n key={tab.name}\n canDrag={this.props.editMenuList}\n name={tab.name}\n iconJSX={\n tabsInfo[tab.name]?.icon ? (\n tabsInfo[tab.name].icon\n ) : (\n <Icon\n style={styles.icon}\n src={tab.icon}\n />\n )\n }\n _id={tab.name}\n selected={currentTab === tab.name}\n tab={tab}\n compact={!this.isSwipeable() && state !== STATES.opened}\n badgeContent={logErrors || logWarnings || 0}\n badgeColor={logErrors ? 'error' : logWarnings ? 'warn' : ''}\n tabs={tabs}\n setEndDrag={() => this.tabsEditSystemConfig()}\n setTabs={(newObj: AdminTab[]) => this.setState({ tabs: newObj })}\n >\n <DrawerItem\n key={tab.name}\n editMenuList={this.props.editMenuList}\n visible={tab.visible}\n color={tab.color}\n editListFunc={(isVisibility, color) => this.tabsEditSystemConfig(idx, isVisibility, color)}\n compact={!this.isSwipeable() && state !== STATES.opened}\n onClick={e => {\n if (e.ctrlKey || e.shiftKey) {\n void getHref(\n this.props.instancesWorker,\n tab.name,\n this.props.hostname,\n hosts,\n this.props.adminInstance,\n this.props.themeType,\n ).then(href => {\n if (href) {\n console.log(href);\n // Open in new tab\n window\n .open(\n `${window.location.protocol}//${window.location.host}/${href}`,\n tab.name,\n )\n .focus();\n } else {\n handleNavigation(tab.name);\n }\n });\n } else {\n handleNavigation(tab.name);\n }\n }}\n icon={\n tabsInfo[tab.name]?.icon ? (\n tabsInfo[tab.name].icon\n ) : (\n <Icon\n src={tab.icon}\n style={styles.icon}\n />\n )\n }\n text={tab.title}\n selected={currentTab === tab.name}\n badgeContent={this.badge(tab).content}\n badgeColor={this.badge(tab).color}\n badgeAdditionalContent={this.badge(tab)?.additionalContent}\n badgeAdditionalColor={this.badge(tab)?.additionalColor}\n theme={this.props.theme}\n />\n </DragWrapper>\n );\n });\n }\n\n badge = (\n tab: AdminTab,\n ): {\n content: number;\n color: 'error' | 'warn' | 'primary' | '';\n additionalContent?: number;\n additionalColor?: 'error' | 'secondary' | '';\n } => {\n switch (tab.name) {\n case 'tab-logs': {\n const { logErrors, logWarnings } = this.state;\n return { content: logErrors || logWarnings || 0, color: logErrors ? 'error' : 'warn' };\n }\n\n case 'tab-adapters':\n return { content: this.state.adaptersUpdate || 0, color: 'primary' };\n\n case 'tab-hosts':\n return {\n content: this.state.hostsUpdate || 0,\n color: 'primary',\n additionalContent: this.state.hostNotifications.warning + this.state.hostNotifications.other,\n additionalColor: this.state.hostNotifications.warning > 0 ? 'error' : 'secondary',\n };\n\n default:\n return {\n content: 0,\n color: '',\n additionalContent: 0,\n additionalColor: '',\n };\n }\n };\n\n render(): JSX.Element {\n if (this.isSwipeable()) {\n return (\n <SwipeableDrawer\n sx={Utils.getStyle(this.props.theme, styles.root, { '&.MuiSwipeableDrawer-paper': styles.paper })}\n anchor=\"left\"\n open={this.props.state !== STATES.closed}\n onClose={() => this.props.onStateChange(STATES.closed as 1)}\n onOpen={() => this.props.onStateChange(STATES.opened as 0)}\n >\n <CustomDragLayer theme={this.props.theme} />\n\n {this.getHeader()}\n\n <List>{this.getNavigationItems()}</List>\n {this.props.isSecure && (\n <DrawerItem\n theme={this.props.theme}\n compact={!this.isSwipeable() && this.props.state !== STATES.opened}\n onClick={this.props.onLogout}\n text={this.props.t('Logout')}\n icon={<LogoutIcon />}\n />\n )}\n {this.props.adminGuiConfig.admin.menu.editable !== false && this.props.state === STATES.opened && (\n <div style={styles.editButton}>\n <CustomPopper\n editMenuList={this.props.editMenuList}\n onClick={() => this.props.setEditMenuList(!this.props.editMenuList)}\n />\n </div>\n )}\n </SwipeableDrawer>\n );\n }\n\n return (\n <MaterialDrawer\n sx={Utils.getStyle(\n this.props.theme,\n styles.root,\n this.props.state !== STATES.opened\n ? styles.rootCompactWidth\n : this.props.editMenuList\n ? styles.rootEditWidth\n : styles.rootFullWidth,\n {\n '& .MuiDrawer-paper': styles.paper,\n },\n )}\n variant=\"persistent\"\n anchor=\"left\"\n open={this.props.state !== STATES.closed}\n onMouseEnter={() => this.refEditButton.current && (this.refEditButton.current.style.opacity = '1')}\n onMouseLeave={() => this.refEditButton.current && (this.refEditButton.current.style.opacity = '0')}\n >\n <CustomDragLayer theme={this.props.theme} />\n {this.getHeader()}\n <List style={styles.list}>{this.getNavigationItems()}</List>\n {this.props.isSecure && (\n <DrawerItem\n theme={this.props.theme}\n style={{ flexShrink: 0 }}\n compact={!this.isSwipeable() && this.props.state !== STATES.opened}\n onClick={this.props.onLogout}\n text={this.props.t('Logout')}\n icon={<LogoutIcon />}\n />\n )}\n {this.props.adminGuiConfig.admin.menu.editable !== false && this.props.state === STATES.opened && (\n <div\n style={{ ...styles.editButton, opacity: 0 }}\n ref={this.refEditButton}\n >\n <CustomPopper\n size=\"small\"\n editMenuList={this.props.editMenuList}\n onClick={() => this.props.setEditMenuList(!this.props.editMenuList)}\n />\n </div>\n )}\n </MaterialDrawer>\n );\n }\n}\n\nDrawer.contextType = ContextWrapper;\nexport default withWidth()(Drawer);\n","import React, { type JSX } from 'react';\n\nconst offset = 187;\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n position: 'fixed',\n background: 'rgba(0, 0, 0, .3)',\n zIndex: 20000,\n },\n connecting: {\n left: '40%',\n top: '40%',\n width: '20%',\n height: '20%',\n position: 'absolute',\n },\n spinner: {\n animation: 'admin-connecting-rotator 1.4s linear infinite',\n },\n path: {\n strokeDasharray: 187,\n strokeDashoffset: 0,\n transformOrigin: 'center',\n animation: 'admin-connecting-dash 1.4s ease-in-out infinite, $colors 5.6s ease-in-out infinite',\n },\n};\n\nfunction Connecting(): JSX.Element {\n return (\n <div style={styles.root}>\n <style>\n {`\n' @keyframes admin-connecting-colors {\n 0% {\n stroke: #4285F4;\n }\n 25% {\n stroke: #DE3E35;\n }\n 50% {\n stroke: #F7C223;\n }\n 75% {\n stroke: #1B9A59;\n }\n 100% {\n stroke: #4285F4;\n }\n }\n @keyframes admin-connecting-dash {\n 0% {\n stroke-dashoffset: ${offset};\n }\n 50% {\n stroke-dashoffset: ${offset / 4};\n transform: rotate(135deg);\n }\n 100% {\n stroke-dashoffset: ${offset};\n transform: 'rotate(450deg);\n }\n }\n @keyframes admin-connecting-rotator {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(270deg);\n }\n }\n`}\n </style>\n <div style={styles.connecting}>\n <svg\n style={styles.spinner}\n width=\"100%\"\n height=\"100%\"\n viewBox=\"0 0 66 66\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n style={styles.path}\n fill=\"none\"\n strokeWidth=\"6\"\n strokeLinecap=\"round\"\n cx=\"33\"\n cy=\"33\"\n r=\"30\"\n />\n </svg>\n </div>\n </div>\n );\n}\n\nexport default Connecting;\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport { TextField, Grid2, Toolbar, Button, Paper, Box } from '@mui/material';\n\nimport { Check as IconCheck } from '@mui/icons-material';\n\nimport { type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils from '../../helpers/AdminUtils';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: (theme: IobTheme) => ({\n color: theme.palette.secondary.main,\n }),\n form: {\n height: `calc(100% - ${TOOLBAR_HEIGHT + 8}px)`,\n overflow: 'auto',\n },\n input: {\n width: 400,\n marginBottom: 16,\n },\n grow: {\n flexGrow: 1,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n};\n\ninterface WizardPasswordTabProps {\n t: Translate;\n onDone: (password: string) => void;\n}\n\ninterface WizardPasswordTabState {\n password: string;\n passwordRepeat: string;\n errorPassword: boolean | string;\n errorPasswordRepeat: boolean | string;\n}\n\nclass WizardPasswordTab extends Component<WizardPasswordTabProps, WizardPasswordTabState> {\n private readonly focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: WizardPasswordTabProps) {\n super(props);\n\n this.state = {\n password: '',\n passwordRepeat: '',\n errorPassword: true,\n errorPasswordRepeat: false,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <form\n style={styles.form}\n noValidate\n autoComplete=\"off\"\n >\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Box\n component=\"h2\"\n sx={styles.title}\n >\n {this.props.t('You must set the administrator password')}\n </Box>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n disabled\n style={styles.input}\n label={this.props.t('Administrator name')}\n value=\"admin\"\n slotProps={{\n input: { readOnly: true },\n }}\n helperText={this.props.t('Administrator name cannot be changed')}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n onKeyDown={e => {\n if (e.key === 'Enter' && this.state.password && !this.state.errorPassword) {\n const el = window.document.getElementById('admin_password');\n if (el) {\n el.focus();\n }\n }\n }}\n autoComplete=\"off\"\n style={styles.input}\n ref={this.focusRef}\n label={this.props.t('Administrator password')}\n type=\"password\"\n value={this.state.password}\n error={!!this.state.errorPassword}\n onChange={e => {\n const errorPassword = AdminUtils.checkPassword(e.target.value);\n const errorPasswordRepeat = AdminUtils.checkPassword(\n e.target.value,\n this.state.passwordRepeat,\n );\n this.setState({\n password: e.target.value,\n errorPassword: errorPassword ? this.props.t(errorPassword) : false,\n errorPasswordRepeat: errorPasswordRepeat\n ? this.props.t(errorPasswordRepeat)\n : false,\n });\n }}\n helperText={this.props.t(\n 'Password must be at least 8 characters long and have numbers, upper and lower case letters',\n )}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n id: 'admin_password',\n },\n }}\n onKeyDown={e => {\n if (\n e.key === 'Enter' &&\n this.state.password &&\n !this.state.errorPassword &&\n !this.state.errorPasswordRepeat\n ) {\n this.props.onDone(this.state.password);\n }\n }}\n autoComplete=\"off\"\n style={styles.input}\n label={this.props.t('Repeat administrator password')}\n value={this.state.passwordRepeat}\n type=\"password\"\n error={!!this.state.errorPasswordRepeat}\n onChange={e => {\n const errorPasswordRepeat = AdminUtils.checkPassword(\n this.state.password,\n e.target.value,\n );\n this.setState({\n passwordRepeat: e.target.value,\n errorPasswordRepeat: errorPasswordRepeat\n ? this.props.t(errorPasswordRepeat)\n : false,\n });\n }}\n helperText={this.state.errorPasswordRepeat || ''}\n />\n </Grid2>\n </Grid2>\n </form>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => this.props.onDone(this.state.password)}\n disabled={\n !this.state.passwordRepeat || !!this.state.errorPasswordRepeat || !!this.state.errorPassword\n }\n startIcon={<IconCheck />}\n >\n {this.props.t('Set administrator password')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardPasswordTab);\n","const license: Record<ioBroker.Languages, string> = {\n en:\n 'The MIT License (MIT)\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n de:\n 'MIT-Lizenz (MIT)\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die \"Software\") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu benutzen, inklusive und ohne Ausnahme dem Recht, sie zu verwenden, kopieren, ändern, fusionieren, verlegen, verbreiten, unterlizenzieren und/oder zu verkaufen, und Personen, die diese Software erhalten, diese Rechte zu geben, unter den folgenden Bedingungen:\\n' +\n 'Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien der Software beizulegen.\\n' +\n 'DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIESSLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN.',\n\n ru:\n 'Лицензия MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Данная лицензия разрешает лицам, получившим копию данного программного обеспечения и сопутствующей документации (в дальнейшем именуемыми «Программное Обеспечение»), безвозмездно использовать Программное Обеспечение без ограничений, включая неограниченное право на использование, копирование, изменение, добавление, публикацию, распространение, сублицензирование и/или продажу копий Программного Обеспечения, также как и лицам, которым предоставляется данное Программное Обеспечение, при соблюдении следующих условий:\\n' +\n 'Указанное выше уведомление об авторском праве и данные условия должны быть включены во все копии или значимые части данного Программного Обеспечения.\\n' +\n 'ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК ЕСТЬ», БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ, СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ НЕСУТ ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ ИЛИ ДРУГИХ ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ ИНОМУ, ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ.',\n\n it:\n 'Licenza MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Si concede gratuitamente l\\'autorizzazione, a chiunque ottenga una copia di questo software e dei file di documentazione associati (il \"Software\"), di dare opera al Software senza restrizioni, compresi senza limitazione i diritti di utilizzare, copiare, modificare, unire, pubblicare, distribuire, concedere in sublicenza ovvero vendere copie del Software, e di consentire alle persone a cui il Software è fornito di fare altrettanto, posto che siano rispettate le seguenti condizioni:\\n' +\n \"l'avviso di copyright unitamente a questo avviso di licenza devono essere sempre inclusi in tutte le copie o parti sostanziali del Software.\\n\" +\n 'IL SOFTWARE VIENE FORNITO \"COSÌ COM\\'È\" SENZA GARANZIE DI ALCUN TIPO, ESPLICITE O IMPLICITE, COMPRESE, MA NON SOLO, LE GARANZIE DI COMMERCIABILITÀ, IDONEITÀ AD UN PARTICOLARE SCOPO E NON VIOLAZIONE DI DIRITTI ALTRUI. IN NESSUN CASO GLI AUTORI DEL SOFTWARE O I TITOLARI DEL COPYRIGHT POTRANNO ESSERE RITENUTI RESPONSABILI DI RECLAMI, DANNI O ALTRE RESPONSABILITÀ, DERIVANTI DA O COLLEGATI A CONTRATTO, ILLECITO CIVILE O IN ALTRA RELAZIONE CON IL SOFTWARE O CON IL SUO UTILIZZO O CON ALTRE OPERAZIONI DEL SOFTWARE.',\n\n fr:\n 'Licence MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n pt:\n 'Licença MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n nl:\n 'MIT-licentie\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n es:\n 'Licencia MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Se concede permiso, de forma gratuita, a cualquier persona que obtenga una copia de este software y de los archivos de documentación asociados (el \"Software\"), para utilizar el Software sin restricción, incluyendo sin limitación los derechos a usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar, y/o vender copias del Software, y a permitir a las personas a las que se les proporcione el Software a hacer lo mismo, sujeto a las siguientes condiciones:\\n' +\n 'El aviso de copyright anterior y este aviso de permiso se incluirán en todas las copias o partes sustanciales del Software.\\n' +\n 'EL SOFTWARE SE PROPORCIONA \"TAL CUAL\", SIN GARANTÍA DE NINGÚN TIPO, EXPRESA O IMPLÍCITA, INCLUYENDO PERO NO LIMITADO A GARANTÍAS DE COMERCIALIZACIÓN, IDONEIDAD PARA UN PROPÓSITO PARTICULAR Y NO INFRACCIÓN. EN NINGÚN CASO LOS AUTORES O TITULARES DEL COPYRIGHT SERÁN RESPONSABLES DE NINGUNA RECLAMACIÓN, DAÑOS U OTRAS RESPONSABILIDADES, YA SEA EN UNA ACCIÓN DE CONTRATO, AGRAVIO O CUALQUIER OTRO MOTIVO, QUE SURJA DE O EN CONEXIÓN CON EL SOFTWARE O EL USO U OTRO TIPO DE ACCIONES EN EL SOFTWARE.',\n\n pl:\n 'Licencja MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n uk:\n 'Ліцензія MIT\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n 'Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\\n' +\n 'The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\\n' +\n 'THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n',\n\n 'zh-cn':\n 'MIT许可证\\n' +\n '\\n' +\n 'Copyright © 2014-2024 Denis Haev, 2014 hobbyquaker\\n' +\n '\\n' +\n '特此向任何得到本软件副本或相关文档的人授权:被授权人有权使用、复制、修改、 合并、出版、发布、散布、再授权和/或贩售软件及软件的副本,及授予被供应人 同等权利,只需服从以下义务:\\n' +\n '在软件和软件的所有副本中都必须包含以上版权声明和本许可声明。\\n' +\n '该软件是\"按原样\"提供的,没有任何形式的明示或暗示,包括但不限于为特定目的和 不侵权的适销性和适用性的保证担保。在任何情况下,作者或版权持有人,都无权要求 任何索赔,或有关损害赔偿的其他责任。无论在本软件的使用上或其他买卖交易中, 是否涉及合同,侵权或其他行为。\\n',\n};\n\nexport default license;\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport {\n Toolbar,\n MenuItem,\n Grid2,\n Select,\n FormControlLabel,\n Checkbox,\n Button,\n FormControl,\n InputLabel,\n Paper,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n LinearProgress,\n} from '@mui/material';\n\nimport { Language as IconWorld, Close as IconCancel, Check as IconCheck, Close } from '@mui/icons-material';\n\nimport { type AdminConnection, I18n, type ThemeType, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nimport Editor from '@/components/Editor';\nimport LicenseTexts from '../LicenseTexts';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n gridDiv: {\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\n width: '100%',\n overflow: 'hidden',\n padding: 16,\n textAlign: 'center',\n },\n languageSelect: {\n minWidth: 200,\n marginRight: 24,\n },\n licenseDiv: {\n width: '100%',\n height: `calc(100% - ${65 + 88}px)`,\n overflow: 'auto',\n },\n grow: {\n flexGrow: 1,\n },\n statAccept: {\n marginTop: 10,\n color: '#ff636e',\n },\n statAcceptDiv: {\n display: 'inline-block',\n },\n statAcceptNote: {\n textAlign: 'left',\n marginLeft: 32,\n },\n greenButton: {\n marginLeft: 8,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n licenseTextDiv: {\n width: '100%',\n maxWidth: 600,\n textAlign: 'left',\n margin: 'auto',\n },\n licenseText: {\n marginBottom: 15,\n },\n};\n\ninterface WizardLicenseTabProps {\n t: Translate;\n onDone: (config: { lang: ioBroker.Languages }) => void;\n lang?: ioBroker.Languages;\n socket: AdminConnection;\n themeType: ThemeType;\n}\n\ninterface WizardLicenseTabState {\n statisticsAccepted: boolean;\n lang: ioBroker.Languages;\n notAgree: boolean;\n showStatisticsDialog: boolean;\n requesting: boolean;\n diagData: Record<string, any> | null;\n}\n\nclass WizardLicenseTab extends Component<WizardLicenseTabProps, WizardLicenseTabState> {\n private readonly focusRef: React.RefObject<HTMLButtonElement>;\n\n constructor(props: WizardLicenseTabProps) {\n super(props);\n\n this.state = {\n statisticsAccepted: false,\n lang: this.props.lang || I18n.getLanguage(),\n notAgree: false,\n diagData: null,\n requesting: false,\n showStatisticsDialog: false,\n };\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n async readStatistics(): Promise<void> {\n // Get current host\n const instance = await this.props.socket.getCurrentInstance();\n // read settings of current instance\n const settings: ioBroker.InstanceObject = (await this.props.socket.getObject(\n `system.adapter.${instance}`,\n )) as any as ioBroker.InstanceObject;\n\n const diagData = await this.props.socket.getDiagData(settings.common.host, 'extended');\n\n this.setState({ diagData, requesting: false });\n }\n\n renderStatisticsDialog(): JSX.Element | null {\n if (!this.state.showStatisticsDialog) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n maxWidth=\"lg\"\n fullWidth\n sx={{ '& .MuiDialog-paper': { maxHeight: 'calc(100% - 96px)', height: 'calc(100% - 96px)' } }}\n onClose={() => this.setState({ showStatisticsDialog: false })}\n >\n <DialogTitle>{this.props.t('Sent data:')}</DialogTitle>\n <DialogContent>\n {this.state.requesting && <LinearProgress />}\n {this.state.requesting && <div>{this.props.t('Requesting data...')}</div>}\n {!this.state.requesting && (\n <div style={{ fontSize: 14, marginBottom: 8 }}>\n {this.props.t(\n 'The sent data will only be processed by ioBroker GmbH for statistical purposes and will not be shared with any third parties.',\n )}\n </div>\n )}\n {!this.state.requesting && (\n <Editor\n style={{ height: 'calc(100% - 41px)' }}\n editValueMode\n themeType={this.props.themeType}\n value={JSON.stringify(this.state.diagData, null, 2)}\n />\n )}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ showStatisticsDialog: false })}\n color=\"primary\"\n autoFocus\n startIcon={<Close />}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n renderNotAgree(): JSX.Element | null {\n if (!this.state.notAgree) {\n return null;\n }\n return (\n <Dialog\n open={!0}\n onClose={() => this.setState({ notAgree: false })}\n >\n <DialogTitle>{this.props.t('Message')}</DialogTitle>\n <DialogContent>\n <DialogContentText id=\"alert-dialog-description\">\n <span\n role=\"img\"\n aria-label=\"unhappy\"\n >\n 😒\n </span>{' '}\n {this.props.t('Sorry, you cannot use ioBroker.')}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n onClick={() => this.setState({ notAgree: false })}\n color=\"primary\"\n startIcon={<IconCheck />}\n >\n {I18n.t('Understand')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n\n static renderLicenseText(): JSX.Element {\n const text = LicenseTexts[I18n.getLanguage()] || LicenseTexts.en;\n const lines = text.split('\\n');\n return (\n <div style={styles.licenseTextDiv}>\n {lines.map((line, i) => (\n <div\n style={styles.licenseText}\n key={i}\n >\n {line}\n </div>\n ))}\n </div>\n );\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <Grid2\n container\n style={styles.gridDiv}\n direction=\"column\"\n >\n <Grid2>\n <FormControl\n variant=\"standard\"\n style={styles.languageSelect}\n >\n <InputLabel>\n <IconWorld />\n {this.props.t('Language')}\n </InputLabel>\n <Select\n variant=\"standard\"\n value={I18n.getLanguage()}\n onChange={e => {\n I18n.setLanguage(e.target.value as ioBroker.Languages);\n this.setState({ lang: e.target.value as ioBroker.Languages });\n }}\n >\n <MenuItem value=\"en\">English</MenuItem>\n <MenuItem value=\"de\">Deutsch</MenuItem>\n <MenuItem value=\"ru\">русский</MenuItem>\n <MenuItem value=\"pt\">Portugues</MenuItem>\n <MenuItem value=\"nl\">Nederlands</MenuItem>\n <MenuItem value=\"fr\">français</MenuItem>\n <MenuItem value=\"it\">Italiano</MenuItem>\n <MenuItem value=\"es\">Espanol</MenuItem>\n <MenuItem value=\"pl\">Polski</MenuItem>\n <MenuItem value=\"uk\">Українська</MenuItem>\n <MenuItem value=\"zh-cn\">简体中文</MenuItem>\n </Select>\n </FormControl>\n <div style={styles.statAcceptDiv}>\n <FormControlLabel\n style={styles.statAccept}\n control={\n <Checkbox\n ref={this.focusRef}\n checked={this.state.statisticsAccepted}\n onChange={e => this.setState({ statisticsAccepted: e.target.checked })}\n />\n }\n label={this.props.t('I agree with the collection of anonymous statistics.')}\n />\n <div style={styles.statAcceptNote}>\n {this.props.t('(This can be disabled later in settings)')}\n <Button\n variant=\"outlined\"\n style={{ marginLeft: 16 }}\n onClick={() =>\n this.setState({ showStatisticsDialog: true, requesting: true }, () =>\n this.readStatistics(),\n )\n }\n >\n {this.props.t('Show sent statistics data')}\n </Button>\n </div>\n </div>\n </Grid2>\n <Grid2>\n <h1>{this.props.t('License terms')}</h1>\n </Grid2>\n <Grid2 style={styles.licenseDiv}>{WizardLicenseTab.renderLicenseText()}</Grid2>\n </Grid2>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n variant=\"contained\"\n color=\"grey\"\n onClick={() => this.setState({ notAgree: true })}\n startIcon={<IconCancel />}\n >\n {this.props.t('Not agree')}\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n style={styles.greenButton}\n disabled={!this.state.statisticsAccepted}\n onClick={() => this.props.onDone({ lang: this.state.lang })}\n startIcon={<IconCheck />}\n >\n {this.props.t('Agree')}\n </Button>\n <div style={styles.grow} />\n </Toolbar>\n {this.renderNotAgree()}\n {this.renderStatisticsDialog()}\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardLicenseTab);\n","var _style, _g, _path, _path2, _path3, _path4, _path5, _path6, _path7, _path8, _g2, _path9, _path10;\nfunction _extends() { return _extends = Object.assign ? Object.assign.bind() : function (n) { for (var e = 1; e < arguments.length; e++) { var t = arguments[e]; for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]); } return n; }, _extends.apply(null, arguments); }\nimport * as React from \"react\";\nfunction SvgLongLogo(_ref, svgRef) {\n let {\n title,\n titleId,\n ...props\n } = _ref;\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 550 370\",\n ref: svgRef,\n \"aria-labelledby\": titleId\n }, props), title ? /*#__PURE__*/React.createElement(\"title\", {\n id: titleId\n }, title) : null, _style || (_style = /*#__PURE__*/React.createElement(\"style\", {\n type: \"text/css\"\n }, \"\\n\\t.st0{fill:#144578;}\\n\\t.st1{fill:#3499CC;}\\n\")), _g || (_g = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M293.2,244.1h-2.4v-3.2h-8.3v3.2h-2.4v-6.5c0-1,0.2-1.8,0.5-2.6s0.8-1.5,1.4-2.1c0.6-0.6,1.3-1,2.1-1.3 c0.8-0.3,1.7-0.5,2.6-0.5h5.3c0.2,0,0.3,0,0.5,0.1c0.1,0.1,0.3,0.1,0.4,0.3c0.1,0.1,0.2,0.2,0.3,0.4c0.1,0.1,0.1,0.3,0.1,0.5V244.1 z M282.6,238.5h8.3v-5.1h-4.1c-0.1,0-0.2,0-0.5,0c-0.2,0-0.5,0.1-0.8,0.2c-0.3,0.1-0.6,0.2-1,0.4s-0.7,0.4-0.9,0.7 s-0.5,0.7-0.7,1.2s-0.3,1-0.3,1.7V238.5z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M306.4,242.9c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.1,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3 c-0.1,0.1-0.3,0.1-0.5,0.1h-5.3c-0.3,0-0.6,0-0.9-0.1c-0.3-0.1-0.7-0.2-1-0.3s-0.6-0.3-0.9-0.6c-0.3-0.2-0.6-0.5-0.8-0.8 c-0.2-0.3-0.4-0.7-0.5-1.1c-0.1-0.4-0.2-0.9-0.2-1.4v-5.4h2.4v5.4c0,0.3,0.1,0.6,0.2,0.8c0.1,0.2,0.3,0.5,0.4,0.6s0.4,0.3,0.6,0.4 s0.5,0.1,0.8,0.1h4.1v-7.5h2.4V242.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M317.5,236.6h-4.1v7.5H311v-7.5H308v-2.4h3.1v-3.2h2.4v3.2h4.1V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M329.7,240.8c0,0.4-0.1,0.8-0.2,1.1c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.5-0.6,0.6 c-0.2,0.2-0.5,0.3-0.7,0.4c-0.2,0.1-0.5,0.2-0.7,0.2s-0.5,0.1-0.7,0.1h-4.3c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6 c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5v-3.2c0-0.6,0.1-1.1,0.3-1.5s0.5-0.8,0.8-1c0.3-0.3,0.7-0.5,1.1-0.6 c0.4-0.1,0.7-0.2,1.1-0.2h4.3c0.6,0,1.1,0.1,1.5,0.3c0.4,0.2,0.8,0.5,1,0.8c0.3,0.3,0.5,0.7,0.6,1.1c0.1,0.4,0.2,0.7,0.2,1.1V240.8 z M327.4,237.6c0-0.3-0.1-0.6-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-4.2c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v3.2 c0,0.3,0.1,0.5,0.2,0.7c0.2,0.2,0.4,0.2,0.7,0.2h4.2c0.3,0,0.6-0.1,0.7-0.2c0.2-0.2,0.2-0.4,0.2-0.7V237.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M340.5,244.1h-2.4v-6.5c0-0.3-0.1-0.5-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-3.1v7.5h-2.4v-8.6 c0-0.2,0-0.3,0.1-0.5c0.1-0.1,0.1-0.3,0.3-0.4c0.1-0.1,0.2-0.2,0.4-0.2s0.3-0.1,0.5-0.1h4.3c0.3,0,0.7,0.1,1.1,0.2 c0.4,0.1,0.7,0.3,1.1,0.6v-0.7h3.2c0.2,0,0.5,0,0.7,0.1c0.2,0.1,0.5,0.1,0.7,0.2c0.2,0.1,0.5,0.3,0.7,0.4c0.2,0.2,0.4,0.4,0.6,0.6 c0.2,0.2,0.3,0.5,0.4,0.8c0.1,0.3,0.2,0.7,0.2,1.1v6.5h-2.4v-6.5c0-0.3-0.1-0.5-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-2.1 c0.1,0.3,0.1,0.6,0.1,0.9V244.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M358.1,240.8c0,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.3,0.7-0.6,1.1c-0.3,0.3-0.6,0.6-1,0.8 c-0.4,0.2-0.9,0.3-1.5,0.3h-4.3c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5 c0-0.3,0.1-0.7,0.2-1.1c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.8c0.4-0.2,0.9-0.3,1.5-0.3h4.3v2.3h-4.3 c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h4.2c0.3,0,0.6-0.1,0.7-0.3 c0.2-0.2,0.3-0.4,0.3-0.7v-3.3c0-0.3-0.1-0.6-0.3-0.7c-0.2-0.2-0.4-0.3-0.7-0.3h-5.2v-2.2h5.2c0.3,0,0.7,0.1,1.1,0.2 c0.4,0.1,0.7,0.3,1.1,0.6c0.3,0.3,0.6,0.6,0.8,1c0.2,0.4,0.3,0.9,0.3,1.5V240.8z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M369,236.6h-4.1v7.5h-2.4v-7.5h-3.1v-2.4h3.1v-3.2h2.4v3.2h4.1V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M381.1,237.5c0,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.3,0.7-0.6,1.1c-0.3,0.3-0.6,0.6-1,0.8 c-0.4,0.2-0.9,0.3-1.5,0.3h-4.3v-2.2h4.3c0.3,0,0.6-0.1,0.7-0.3s0.3-0.4,0.3-0.7c0-0.3-0.1-0.6-0.3-0.7c-0.2-0.2-0.4-0.3-0.7-0.3 h-4.3c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7v3.3c0,0.3,0.1,0.6,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h4.2v2.3h-4.3 c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5v-3.3c0-0.3,0.1-0.7,0.2-1.1 c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.8c0.4-0.2,0.9-0.3,1.5-0.3h4.3c0.3,0,0.7,0.1,1.1,0.2c0.4,0.1,0.7,0.3,1.1,0.6 c0.3,0.3,0.6,0.6,0.8,1C381,236.4,381.1,236.9,381.1,237.5z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M396.2,244.1H392c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5 v-6.5h2.4v6.5c0,0.3,0.1,0.5,0.2,0.7c0.2,0.2,0.4,0.2,0.7,0.2h4.2V244.1z M399.5,245c0,0.4-0.1,0.8-0.2,1.1 c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.5-0.6,0.6c-0.2,0.2-0.5,0.3-0.7,0.4s-0.5,0.2-0.7,0.2c-0.2,0.1-0.5,0.1-0.7,0.1H392V246 h4.3c0.3,0,0.6-0.1,0.7-0.2c0.2-0.2,0.2-0.4,0.2-0.7v-10.8h2.4V245z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M412.5,240.8c0,0.4-0.1,0.8-0.2,1.1c-0.1,0.3-0.2,0.6-0.4,0.9c-0.2,0.2-0.4,0.5-0.6,0.6 c-0.2,0.2-0.5,0.3-0.7,0.4c-0.2,0.1-0.5,0.2-0.7,0.2s-0.5,0.1-0.7,0.1h-4.3c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6 c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5v-3.2c0-0.6,0.1-1.1,0.3-1.5s0.5-0.8,0.8-1c0.3-0.3,0.7-0.5,1.1-0.6 c0.4-0.1,0.7-0.2,1.1-0.2h4.3c0.6,0,1.1,0.1,1.5,0.3c0.4,0.2,0.8,0.5,1,0.8c0.3,0.3,0.5,0.7,0.6,1.1c0.1,0.4,0.2,0.7,0.2,1.1V240.8 z M410.1,237.6c0-0.3-0.1-0.6-0.2-0.7c-0.2-0.2-0.4-0.2-0.7-0.2h-4.2c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v3.2 c0,0.3,0.1,0.5,0.2,0.7c0.2,0.2,0.4,0.2,0.7,0.2h4.2c0.3,0,0.6-0.1,0.7-0.2c0.2-0.2,0.2-0.4,0.2-0.7V237.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M425.2,242.9c0,0.2,0,0.3-0.1,0.5c-0.1,0.1-0.1,0.3-0.3,0.4c-0.1,0.1-0.2,0.2-0.4,0.3 c-0.1,0.1-0.3,0.1-0.5,0.1h-5.3c-0.3,0-0.6,0-0.9-0.1c-0.3-0.1-0.7-0.2-1-0.3s-0.6-0.3-0.9-0.6c-0.3-0.2-0.6-0.5-0.8-0.8 c-0.2-0.3-0.4-0.7-0.5-1.1c-0.1-0.4-0.2-0.9-0.2-1.4v-5.4h2.4v5.4c0,0.3,0.1,0.6,0.2,0.8c0.1,0.2,0.3,0.5,0.4,0.6s0.4,0.3,0.6,0.4 s0.5,0.1,0.8,0.1h4.1v-7.5h2.4V242.9z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M436,236.6h-5.3c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v6.5h-2.4v-6.5c0-0.4,0.1-0.8,0.2-1.1 c0.1-0.3,0.2-0.6,0.4-0.8c0.2-0.2,0.4-0.5,0.6-0.6c0.2-0.2,0.5-0.3,0.7-0.4c0.2-0.1,0.5-0.2,0.7-0.2c0.3-0.1,0.5-0.1,0.7-0.1h5.3 V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M447.8,244.1h-1.1c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1s-0.3-0.9-0.3-1.5 v-10.7h2.4v10.7c0,0.3,0.1,0.5,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h1.1V244.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M451.7,232.2h-2.4v-2.1h2.4V232.2z M451.7,244.1h-2.4v-9.8h2.4V244.1z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M462.6,232.4h-5.3c-0.3,0-0.6,0.1-0.7,0.2c-0.2,0.2-0.2,0.4-0.2,0.7v10.8H454v-10.8c0-0.4,0.1-0.8,0.2-1.1 c0.1-0.3,0.2-0.6,0.4-0.8c0.2-0.2,0.4-0.5,0.6-0.6c0.2-0.2,0.5-0.3,0.7-0.4c0.2-0.1,0.5-0.2,0.7-0.2c0.2-0.1,0.5-0.1,0.7-0.1h5.3 V232.4z M462.6,236.6h-5.3v-2.4h5.3V236.6z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M474.7,237.5c0,0.3-0.1,0.7-0.2,1.1c-0.1,0.4-0.3,0.7-0.6,1.1c-0.3,0.3-0.6,0.6-1,0.8 c-0.4,0.2-0.9,0.3-1.5,0.3h-4.3v-2.2h4.3c0.3,0,0.6-0.1,0.7-0.3s0.3-0.4,0.3-0.7c0-0.3-0.1-0.6-0.3-0.7c-0.2-0.2-0.4-0.3-0.7-0.3 h-4.3c-0.3,0-0.6,0.1-0.7,0.3c-0.2,0.2-0.3,0.4-0.3,0.7v3.3c0,0.3,0.1,0.6,0.3,0.7c0.2,0.2,0.4,0.3,0.7,0.3h4.2v2.3h-4.3 c-0.3,0-0.7-0.1-1.1-0.2c-0.4-0.1-0.7-0.3-1.1-0.6c-0.3-0.3-0.6-0.6-0.8-1c-0.2-0.4-0.3-0.9-0.3-1.5v-3.3c0-0.3,0.1-0.7,0.2-1.1 c0.1-0.4,0.3-0.7,0.6-1.1c0.3-0.3,0.6-0.6,1-0.8c0.4-0.2,0.9-0.3,1.5-0.3h4.3c0.3,0,0.7,0.1,1.1,0.2c0.4,0.1,0.7,0.3,1.1,0.6 c0.3,0.3,0.6,0.6,0.8,1C474.6,236.4,474.7,236.9,474.7,237.5z\"\n }))), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M221.6,211.5c0,1.3-0.2,2.6-0.6,4c-0.4,1.4-1.1,2.8-2.1,4c-1,1.2-2.3,2.3-3.8,3.1c-1.6,0.8-3.5,1.2-5.8,1.2 h-38.6c-0.7,0-1.4-0.1-2-0.4c-0.6-0.3-1.2-0.6-1.6-1.1c-0.5-0.5-0.8-1-1.1-1.6c-0.3-0.6-0.4-1.3-0.4-2v-45.9c0-0.7,0.1-1.4,0.4-2 c0.3-0.6,0.6-1.2,1.1-1.6c0.5-0.5,1-0.8,1.6-1.1c0.6-0.3,1.3-0.4,2-0.4h34c1.3,0,2.6,0.2,4,0.7c1.4,0.4,2.8,1.2,4,2.1 c1.2,1,2.3,2.3,3.1,3.8c0.8,1.6,1.2,3.5,1.2,5.8v1.9c0,1.8-0.3,3.7-0.9,5.8c-0.6,2.1-1.6,4-2.9,5.9c1.1,0.7,2.2,1.6,3.2,2.5 c1,1,1.9,2.1,2.6,3.4c0.8,1.3,1.4,2.8,1.8,4.4c0.4,1.6,0.7,3.5,0.7,5.4V211.5z M211.4,209.5c0-1.3-0.2-2.5-0.6-3.6 c-0.4-1.1-1-2-1.8-2.7c-0.8-0.8-1.7-1.3-2.7-1.7c-1.1-0.4-2.3-0.6-3.6-0.6h-22.9v-10.3h18.4c1.3,0,2.5-0.2,3.6-0.6 c1.1-0.4,2-1,2.7-1.7c0.8-0.8,1.3-1.7,1.7-2.7c0.4-1.1,0.6-2.3,0.6-3.6V180c0-1.5-0.7-2.2-2.1-2.2h-29v35.8h33.6c0.2,0,0.4,0,0.7,0 c0.3,0,0.5-0.1,0.7-0.2c0.2-0.1,0.4-0.4,0.5-0.7c0.2-0.3,0.2-0.7,0.2-1.3V209.5z\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M266.9,191.7H244c-1.4,0-2.4,0.3-3.1,1c-0.7,0.7-1.1,1.7-1.1,3v28.1h-10.2v-28.1c0-1.7,0.2-3.3,0.7-4.7 c0.4-1.4,1-2.6,1.8-3.7c0.7-1.1,1.6-2,2.6-2.7c1-0.7,2-1.4,3-1.8c1.1-0.5,2.1-0.8,3.2-1c1.1-0.2,2.1-0.3,3-0.3h23V191.7z\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M320.1,209.5c0,1.7-0.2,3.3-0.7,4.7c-0.4,1.4-1,2.6-1.8,3.7c-0.7,1.1-1.6,2-2.5,2.7c-1,0.7-2,1.4-3,1.8 c-1.1,0.5-2.1,0.8-3.2,1c-1.1,0.2-2.1,0.3-3.1,0.3h-18.4c-1.4,0-2.9-0.2-4.6-0.7c-1.7-0.5-3.2-1.3-4.6-2.4c-1.4-1.1-2.6-2.6-3.6-4.4 c-1-1.8-1.4-4-1.4-6.7v-13.8c0-2.6,0.5-4.8,1.4-6.6c1-1.8,2.1-3.3,3.6-4.4c1.4-1.1,3-2,4.6-2.4c1.7-0.5,3.2-0.7,4.6-0.7h18.4 c2.6,0,4.8,0.5,6.7,1.4c1.8,0.9,3.3,2.1,4.4,3.5c1.1,1.4,1.9,3,2.4,4.6c0.5,1.7,0.8,3.2,0.8,4.7V209.5z M310,195.8 c0-1.4-0.4-2.5-1.1-3.1c-0.7-0.7-1.7-1-3.1-1h-18.3c-1.4,0-2.4,0.3-3.1,1c-0.7,0.7-1.1,1.7-1.1,3v13.8c0,1.3,0.4,2.3,1.1,3.1 c0.7,0.7,1.7,1.1,3.1,1.1h18.3c1.4,0,2.4-0.4,3.1-1.1c0.7-0.7,1-1.7,1-3.1V195.8z\"\n })), _path4 || (_path4 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M339.8,167.6h-10.2v2.5c3.4,0,6.8-0.1,10.2-0.2V167.6z\"\n })), _path5 || (_path5 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M329.6,170.1v53.7h10.2v-54.3C336.4,169.7,333,170,329.6,170.1z\"\n })), _path6 || (_path6 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M379.1,181.4h-16.3l-18.6,15c-0.6,0.4-1,1-1.4,1.6c-0.3,0.6-0.5,1.3-0.6,2.1c-0.1,1.6,0.5,2.9,1.6,3.9 l20.5,19.8h14.7l-24-23.1L379.1,181.4z\"\n })), _path7 || (_path7 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M429.6,195.5c0,1.4-0.2,2.9-0.7,4.6c-0.5,1.6-1.3,3.1-2.4,4.5c-1.1,1.4-2.6,2.6-4.3,3.5c-1.8,0.9-4,1.4-6.5,1.4 h-18.4v-9.7h18.4c1.4,0,2.5-0.4,3.2-1.3c0.8-0.8,1.1-1.9,1.1-3.2c0-1.3-0.4-2.4-1.3-3.1c-0.8-0.8-1.9-1.1-3.1-1.1h-18.4 c-1.4,0-2.5,0.4-3.2,1.3c-0.8,0.8-1.1,1.9-1.1,3.2v14.2c0,1.4,0.4,2.4,1.3,3.2s1.9,1.1,3.2,1.1h18.3v9.7h-18.4 c-1.4,0-2.9-0.2-4.6-0.7c-1.6-0.5-3.1-1.3-4.5-2.4c-1.4-1.1-2.6-2.6-3.5-4.3c-0.9-1.8-1.4-4-1.4-6.5v-14.3c0-1.4,0.2-2.9,0.7-4.6 c0.5-1.6,1.3-3.1,2.4-4.5c1.1-1.4,2.6-2.6,4.3-3.5c1.8-0.9,4-1.4,6.5-1.4h18.4c1.4,0,2.9,0.2,4.6,0.7c1.6,0.5,3.1,1.3,4.5,2.4 c1.4,1.1,2.6,2.6,3.5,4.3C429.2,190.8,429.6,192.9,429.6,195.5z\"\n })), _path8 || (_path8 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M474.1,191.7h-22.9c-1.4,0-2.4,0.3-3.1,1c-0.7,0.7-1.1,1.7-1.1,3v28.1h-10.2v-28.1c0-1.7,0.2-3.3,0.7-4.7 c0.4-1.4,1-2.6,1.8-3.7c0.7-1.1,1.6-2,2.6-2.7s2-1.4,3-1.8c1.1-0.5,2.1-0.8,3.2-1c1.1-0.2,2.1-0.3,3-0.3h23V191.7z\"\n })), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", null, /*#__PURE__*/React.createElement(\"path\", {\n className: \"st0\",\n d: \"M126.3,168.8l0,10.8c11.4,3.5,18.9,13.9,18.9,26.4c0,15.4-12.6,27.9-28.1,27.9S89.1,221.4,89.1,206 c0-12.5,7.5-22.8,18.9-26.4v-10.8c-16.9,3.8-28.7,18.9-28.7,37.1c0,21.1,16.9,38.3,37.9,38.3S155,227.1,155,206 C155,187.8,143.2,172.6,126.3,168.8z\"\n }))), _path9 || (_path9 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M117.2,178.1c1.9,0,3.8,0.2,5.7,0.6v-10.3c-1.9-0.3-3.8-0.4-5.7-0.4s-3.8,0.1-5.7,0.4v10.3 C113.3,178.3,115.2,178.1,117.2,178.1z\"\n })), _path10 || (_path10 = /*#__PURE__*/React.createElement(\"path\", {\n className: \"st1\",\n d: \"M112,182c1.4-0.3,3.2-0.5,5.3-0.5c2.1,0,4,0.2,5.4,0.5c0,15.9,0,31.9,0,47.8c-3.6,0.8-7.1,0.8-10.7,0 C112,214,112,198,112,182z\"\n })));\n}\nconst ForwardRef = /*#__PURE__*/React.forwardRef(SvgLongLogo);\nexport default __webpack_public_path__ + \"static/media/longLogo.d88c527f6b93b57693fe78d036047c6b.svg\";\nexport { ForwardRef as ReactComponent };","import React, { Component, type JSX } from 'react';\n\nimport { MapContainer, TileLayer, useMap } from 'react-leaflet';\nimport { Marker } from 'leaflet';\nimport type { DragEndEvent, LatLngTuple, Map } from 'leaflet';\nimport { OpenStreetMapProvider } from 'leaflet-geosearch';\n\nimport {\n Grid2,\n Toolbar,\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n TextField,\n Fab,\n Button,\n Paper,\n InputAdornment,\n IconButton,\n Autocomplete,\n Box,\n} from '@mui/material';\n\nimport { Close as CloseIcon, Check as IconCheck, GpsFixed } from '@mui/icons-material';\n\nimport { type AdminConnection, I18n, type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nconst MyMapComponent: React.FC<{ addMap: (map: any) => any }> = props => {\n const map = useMap();\n if (props.addMap) {\n props.addMap(map);\n }\n return null;\n};\n\nconst TOOLBAR_HEIGHT = 64;\nconst SETTINGS_WIDTH = 300;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: (theme: IobTheme) => ({\n color: theme.palette.secondary.main,\n }),\n mainGrid: {\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\n overflow: 'auto',\n },\n grow: {\n flexGrow: 1,\n },\n mapGrid: {\n height: '100%',\n width: `calc(100% - ${SETTINGS_WIDTH + 32}px)`,\n overflow: 'hidden',\n },\n map: {\n height: '100%',\n width: '100%',\n overflow: 'hidden',\n },\n controlItem: {\n width: SETTINGS_WIDTH,\n marginBottom: 8,\n },\n controlItemAddress: {\n width: SETTINGS_WIDTH - 40,\n marginBottom: 8,\n },\n gridSettings: {\n width: SETTINGS_WIDTH + 16,\n marginRight: 8,\n marginLeft: 8,\n textAlign: 'left',\n height: '100%',\n overflow: 'auto',\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n settingsGrid: {\n width: '100%',\n height: 'calc(100% - 54px)',\n },\n};\n\nconst CURRENCY: { id: string; title: string }[] = [\n {\n id: '€',\n title: '€',\n },\n {\n id: '$',\n title: '$',\n },\n {\n id: '₽',\n title: '₽',\n },\n {\n id: '₤',\n title: '₤',\n },\n {\n id: 'CHF',\n title: 'CHF',\n },\n];\n\ninterface WizardSettingsTabProps {\n t: Translate;\n socket: AdminConnection;\n theme: IobTheme;\n onDone: (settings: {\n tempUnit: '°C' | '°F';\n currency: string;\n dateFormat: string;\n isFloatComma: boolean;\n country: string;\n city: string;\n address: string;\n longitude: number;\n latitude: number;\n firstDayOfWeek: 'sunday' | 'monday';\n }) => void;\n}\n\ninterface WizardSettingsTabState {\n tempUnit: '°C' | '°F';\n currency: string;\n dateFormat: string;\n isFloatComma: boolean;\n country: string;\n city: string;\n address: string;\n longitude: number | string;\n latitude: number | string;\n firstDayOfWeek: 'sunday' | 'monday';\n zoom: number;\n}\n\nclass WizardSettingsTab extends Component<WizardSettingsTabProps, WizardSettingsTabState> {\n /*private OSM: {\n markerSource?: VectorSource;\n markerStyle?: Style;\n oMap?: Map;\n marker?: Feature;\n } | null = null;*/\n\n private marker: Marker;\n\n private map: Map;\n\n private cityTimer: ReturnType<typeof setTimeout>;\n\n private latLongTimer: ReturnType<typeof setTimeout>;\n\n constructor(props: WizardSettingsTabProps) {\n super(props);\n\n this.state = {\n tempUnit: '°C',\n currency: '€',\n dateFormat: 'DD.MM.YYYY',\n isFloatComma: true,\n country: '',\n city: '',\n address: '',\n longitude: 0,\n latitude: 0,\n firstDayOfWeek: 'monday',\n zoom: 14,\n };\n }\n\n positionReady(position: { coords: { latitude: number; longitude: number } }): void {\n this.setState(\n {\n latitude: parseFloat(position.coords.latitude.toFixed(8)),\n longitude: parseFloat(position.coords.longitude.toFixed(8)),\n },\n () => this.changeMapPosition(),\n );\n }\n\n getBrowserCoordinates(): void {\n if (window.navigator.geolocation && (!this.state.longitude || !this.state.latitude)) {\n window.navigator.geolocation.getCurrentPosition(position => this.positionReady(position));\n } else {\n this.changeMapPosition();\n }\n }\n\n async componentDidMount(): Promise<void> {\n const systemConfig = await this.props.socket.getCompactSystemConfig(true);\n this.setState(\n {\n tempUnit: systemConfig.common.tempUnit,\n currency: systemConfig.common.currency,\n dateFormat: systemConfig.common.dateFormat,\n isFloatComma: systemConfig.common.isFloatComma,\n country: systemConfig.common.country,\n city: systemConfig.common.city,\n address: '',\n longitude: systemConfig.common.longitude,\n latitude: systemConfig.common.latitude,\n firstDayOfWeek: systemConfig.common.firstDayOfWeek || 'monday',\n },\n () => this.getBrowserCoordinates(),\n );\n }\n\n onMap = (map: Map): void => {\n if (!this.map || this.map !== map) {\n this.map = map;\n const center: LatLngTuple = [\n parseFloat(this.state.latitude !== undefined ? (this.state.latitude as any as string) : '50') || 0,\n parseFloat(this.state.longitude !== undefined ? (this.state.longitude as any as string) : '10') || 0,\n ];\n\n this.marker = new Marker(center, {\n draggable: true,\n title: I18n.t('Resource location'),\n alt: I18n.t('Resource Location'),\n riseOnHover: true,\n })\n .addTo(map)\n .bindPopup('Popup for any custom information.')\n .on({ dragend: (evt: DragEndEvent) => this.onMarkerDragend(evt) });\n }\n };\n\n onMarkerDragend = (evt: DragEndEvent): void => {\n // ignore changes during saving\n this.setState({ latitude: evt.target._latlng.lat, longitude: evt.target._latlng.lng });\n };\n\n changeMapPosition(noWait?: boolean): void {\n if (this.latLongTimer) {\n clearTimeout(this.latLongTimer);\n }\n this.latLongTimer = setTimeout(\n () => {\n this.latLongTimer = null;\n this.map.flyTo([\n parseFloat(this.state.latitude as any as string),\n parseFloat(this.state.longitude as any as string),\n ]);\n this.marker.setLatLng([\n parseFloat(this.state.latitude as any as string),\n parseFloat(this.state.longitude as any as string),\n ]);\n },\n noWait ? 0 : 500,\n );\n }\n\n onChangePosition = (evt: { target: { value: string } }, id: string): void => {\n const value = evt.target.value;\n if (id === 'latitude') {\n this.setState({ latitude: value });\n } else {\n this.setState({ longitude: value });\n }\n\n this.changeMapPosition();\n };\n\n addressToPosition(): void {\n if (this.cityTimer) {\n clearTimeout(this.cityTimer);\n }\n\n this.cityTimer = setTimeout(() => {\n this.cityTimer = null;\n const provider = new OpenStreetMapProvider();\n\n void provider\n .search({ query: `${this.state.country} ${this.state.city}, ${this.state.address}` })\n .then(results => {\n if (results[0]) {\n setTimeout(\n () =>\n this.setState({ latitude: results[0].y, longitude: results[0].x, zoom: 23 }, () =>\n this.changeMapPosition(true),\n ),\n 1200,\n );\n }\n });\n }, 500);\n }\n\n onChangeAddress = (evt: { target: { value: string } }, id: 'city' | 'address' | 'country'): void => {\n if (id === 'city') {\n this.setState({ city: evt.target.value });\n } else if (id === 'address') {\n this.setState({ address: evt.target.value });\n } else {\n this.setState({ country: evt.target.value });\n }\n\n this.addressToPosition();\n };\n\n render(): JSX.Element {\n const center: LatLngTuple = [\n parseFloat(this.state.longitude !== undefined ? (this.state.longitude as any as string) : '50') || 0,\n parseFloat(this.state.longitude !== undefined ? (this.state.longitude as any as string) : '10') || 0,\n ];\n\n const { zoom } = this.state;\n\n return (\n <Paper style={styles.paper}>\n <Grid2\n container\n direction=\"column\"\n style={styles.mainGrid}\n >\n <Grid2 style={styles.gridSettings}>\n <Grid2\n container\n direction=\"column\"\n style={{ width: 'calc(100% - 16px)' }}\n >\n <Grid2>\n <Box\n component=\"h2\"\n sx={styles.title}\n >\n {this.props.t('Important main settings')}\n </Box>\n </Grid2>\n <Grid2\n container\n direction=\"column\"\n style={styles.settingsGrid}\n >\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Temperature unit')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.tempUnit}\n onChange={e => this.setState({ tempUnit: e.target.value as '°C' | '°F' })}\n >\n <MenuItem value=\"°C\">°C</MenuItem>\n <MenuItem value=\"°F\">°F</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2>\n <Autocomplete\n freeSolo\n options={CURRENCY}\n inputValue={this.state.currency}\n onChange={(_event, newValue: { id: string; title: string }) =>\n this.setState({ currency: newValue ? newValue.id : '' })\n }\n onInputChange={(_event, currency) => this.setState({ currency })}\n getOptionLabel={(option: { id: string; title: string }) => option.title}\n renderOption={(props, option: { id: string; title: string }) => (\n <li {...props}>{option.title}</li>\n )}\n renderInput={params => (\n <TextField\n {...params}\n variant=\"standard\"\n label={this.props.t('Currency')}\n />\n )}\n />\n </Grid2>\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Date format')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.dateFormat}\n onChange={e => this.setState({ dateFormat: e.target.value })}\n >\n <MenuItem value=\"DD.MM.YYYY\">DD.MM.YYYY</MenuItem>\n <MenuItem value=\"YYYY.MM.DD\">YYYY.MM.DD</MenuItem>\n <MenuItem value=\"MM/DD/YYYY\">MM/DD/YYYY</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Float divider')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.isFloatComma ? 'true' : 'false'}\n onChange={e => this.setState({ isFloatComma: e.target.value === 'true' })}\n >\n <MenuItem value=\"true\">\n {this.props.t('comma')}\n <span style={{ marginLeft: 5 }}>- 3,14</span>\n </MenuItem>\n <MenuItem value=\"false\">\n {this.props.t('point')}\n <span style={{ marginLeft: 5 }}>- 3.14</span>\n </MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Country')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.country || ''}\n onChange={e => this.onChangeAddress(e, 'country')}\n >\n <MenuItem value=\"\">{this.props.t('Please select country')}</MenuItem>\n <MenuItem value=\"Germany\">{this.props.t('Germany')}</MenuItem>\n <MenuItem value=\"Austria\">{this.props.t('Austria')}</MenuItem>\n <MenuItem value=\"Switzerland\">{this.props.t('Switzerland')}</MenuItem>\n <MenuItem value=\"Russian Federation\">\n {this.props.t('Russian Federation')}\n </MenuItem>\n <MenuItem value=\"France\">{this.props.t('France')}</MenuItem>\n <MenuItem value=\"Netherlands\">{this.props.t('Netherlands')}</MenuItem>\n <MenuItem value=\"Italy\">{this.props.t('Italy')}</MenuItem>\n <MenuItem value=\"United Kingdom\">{this.props.t('United Kingdom')}</MenuItem>\n <MenuItem value=\"United States\">{this.props.t('United States')}</MenuItem>\n <MenuItem value=\"China\">{this.props.t('China')}</MenuItem>\n\n <MenuItem value=\"Afghanistan\">{this.props.t('Afghanistan')}</MenuItem>\n <MenuItem value=\"Albania\">{this.props.t('Albania')}</MenuItem>\n <MenuItem value=\"Algeria\">{this.props.t('Algeria')}</MenuItem>\n <MenuItem value=\"American Samoa\">{this.props.t('American Samoa')}</MenuItem>\n <MenuItem value=\"Andorra\">{this.props.t('Andorra')}</MenuItem>\n <MenuItem value=\"Angola\">{this.props.t('Angola')}</MenuItem>\n <MenuItem value=\"Anguilla\">{this.props.t('Anguilla')}</MenuItem>\n <MenuItem value=\"Antarctica\">{this.props.t('Antarctica')}</MenuItem>\n <MenuItem value=\"Antigua and Barbuda\">\n {this.props.t('Antigua and Barbuda')}\n </MenuItem>\n <MenuItem value=\"Argentina\">{this.props.t('Argentina')}</MenuItem>\n <MenuItem value=\"Armenia\">{this.props.t('Armenia')}</MenuItem>\n <MenuItem value=\"Aruba\">{this.props.t('Aruba')}</MenuItem>\n <MenuItem value=\"Australia\">{this.props.t('Australia')}</MenuItem>\n <MenuItem value=\"Azerbaijan\">{this.props.t('Azerbaijan')}</MenuItem>\n <MenuItem value=\"Bahamas\">{this.props.t('Bahamas')}</MenuItem>\n <MenuItem value=\"Bahrain\">{this.props.t('Bahrain')}</MenuItem>\n <MenuItem value=\"Bangladesh\">{this.props.t('Bangladesh')}</MenuItem>\n <MenuItem value=\"Barbados\">{this.props.t('Barbados')}</MenuItem>\n <MenuItem value=\"Belarus\">{this.props.t('Belarus')}</MenuItem>\n <MenuItem value=\"Belgium\">{this.props.t('Belgium')}</MenuItem>\n <MenuItem value=\"Belize\">{this.props.t('Belize')}</MenuItem>\n <MenuItem value=\"Benin\">{this.props.t('Benin')}</MenuItem>\n <MenuItem value=\"Bermuda\">{this.props.t('Bermuda')}</MenuItem>\n <MenuItem value=\"Bhutan\">{this.props.t('Bhutan')}</MenuItem>\n <MenuItem value=\"Bolivia\">{this.props.t('Bolivia')}</MenuItem>\n <MenuItem value=\"Bosnia and Herzegovina\">\n {this.props.t('Bosnia and Herzegovina')}\n </MenuItem>\n <MenuItem value=\"Botswana\">{this.props.t('Botswana')}</MenuItem>\n <MenuItem value=\"Bouvet Island\">{this.props.t('Bouvet Island')}</MenuItem>\n <MenuItem value=\"Brazil\">{this.props.t('Brazil')}</MenuItem>\n <MenuItem value=\"British Indian Ocean Territory\">\n {this.props.t('British Indian Ocean Territory')}\n </MenuItem>\n <MenuItem value=\"Brunei Darussalam\">\n {this.props.t('Brunei Darussalam')}\n </MenuItem>\n <MenuItem value=\"Bulgaria\">{this.props.t('Bulgaria')}</MenuItem>\n <MenuItem value=\"Burkina Faso\">{this.props.t('Burkina Faso')}</MenuItem>\n <MenuItem value=\"Burundi\">{this.props.t('Burundi')}</MenuItem>\n <MenuItem value=\"Cambodia\">{this.props.t('Cambodia')}</MenuItem>\n <MenuItem value=\"Cameroon\">{this.props.t('Cameroon')}</MenuItem>\n <MenuItem value=\"Canada\">{this.props.t('Canada')}</MenuItem>\n <MenuItem value=\"Cape Verde\">{this.props.t('Cape Verde')}</MenuItem>\n <MenuItem value=\"Cayman Islands\">{this.props.t('Cayman Islands')}</MenuItem>\n <MenuItem value=\"Central African Republic\">\n {this.props.t('Central African Republic')}\n </MenuItem>\n <MenuItem value=\"Chad\">{this.props.t('Chad')}</MenuItem>\n <MenuItem value=\"Chile\">{this.props.t('Chile')}</MenuItem>\n <MenuItem value=\"Christmas Island\">\n {this.props.t('Christmas Island')}\n </MenuItem>\n <MenuItem value=\"Cocos Islands\">{this.props.t('Cocos Islands')}</MenuItem>\n <MenuItem value=\"Colombia\">{this.props.t('Colombia')}</MenuItem>\n <MenuItem value=\"Comoros\">{this.props.t('Comoros')}</MenuItem>\n <MenuItem value=\"Congo\">{this.props.t('Congo')}</MenuItem>\n <MenuItem value=\"Cook Islands\">{this.props.t('Cook Islands')}</MenuItem>\n <MenuItem value=\"Costa Rica\">{this.props.t('Costa Rica')}</MenuItem>\n <MenuItem value=\"Croatia\">{this.props.t('Croatia')}</MenuItem>\n <MenuItem value=\"Cuba\">{this.props.t('Cuba')}</MenuItem>\n <MenuItem value=\"Cyprus\">{this.props.t('Cyprus')}</MenuItem>\n <MenuItem value=\"Czech Republic\">{this.props.t('Czech Republic')}</MenuItem>\n <MenuItem value=\"Denmark\">{this.props.t('Denmark')}</MenuItem>\n <MenuItem value=\"Djibouti\">{this.props.t('Djibouti')}</MenuItem>\n <MenuItem value=\"Dominica\">{this.props.t('Dominica')}</MenuItem>\n <MenuItem value=\"Dominican Republic\">\n {this.props.t('Dominican Republic')}\n </MenuItem>\n <MenuItem value=\"East Timor\">{this.props.t('East Timor')}</MenuItem>\n <MenuItem value=\"Ecuador\">{this.props.t('Ecuador')}</MenuItem>\n <MenuItem value=\"Egypt\">{this.props.t('Egypt')}</MenuItem>\n <MenuItem value=\"El Salvador\">{this.props.t('El Salvador')}</MenuItem>\n <MenuItem value=\"Equatorial Guinea\">\n {this.props.t('Equatorial Guinea')}\n </MenuItem>\n <MenuItem value=\"Eritrea\">{this.props.t('Eritrea')}</MenuItem>\n <MenuItem value=\"Estonia\">{this.props.t('Estonia')}</MenuItem>\n <MenuItem value=\"Ethiopia\">{this.props.t('Ethiopia')}</MenuItem>\n <MenuItem value=\"Falkland Islands (Malvinas)\">\n {this.props.t('Falkland Islands (Malvinas)')}\n </MenuItem>\n <MenuItem value=\"Faroe Islands\">{this.props.t('Faroe Islands')}</MenuItem>\n <MenuItem value=\"Fiji\">{this.props.t('Fiji')}</MenuItem>\n <MenuItem value=\"Finland\">{this.props.t('Finland')}</MenuItem>\n <MenuItem value=\"French Guiana\">{this.props.t('French Guiana')}</MenuItem>\n <MenuItem value=\"French Polynesia\">\n {this.props.t('French Polynesia')}\n </MenuItem>\n <MenuItem value=\"French Southern Territories\">\n {this.props.t('French Southern Territories')}\n </MenuItem>\n <MenuItem value=\"Gabon\">{this.props.t('Gabon')}</MenuItem>\n <MenuItem value=\"Gambia\">{this.props.t('Gambia')}</MenuItem>\n <MenuItem value=\"Georgia\">{this.props.t('Georgia')}</MenuItem>\n <MenuItem value=\"Ghana\">{this.props.t('Ghana')}</MenuItem>\n <MenuItem value=\"Gibraltar\">{this.props.t('Gibraltar')}</MenuItem>\n <MenuItem value=\"Guernsey\">{this.props.t('Guernsey')}</MenuItem>\n <MenuItem value=\"Greece\">{this.props.t('Greece')}</MenuItem>\n <MenuItem value=\"Greenland\">{this.props.t('Greenland')}</MenuItem>\n <MenuItem value=\"Grenada\">{this.props.t('Grenada')}</MenuItem>\n <MenuItem value=\"Guadeloupe\">{this.props.t('Guadeloupe')}</MenuItem>\n <MenuItem value=\"Guam\">{this.props.t('Guam')}</MenuItem>\n <MenuItem value=\"Guatemala\">{this.props.t('Guatemala')}</MenuItem>\n <MenuItem value=\"Guinea\">{this.props.t('Guinea')}</MenuItem>\n <MenuItem value=\"Guinea-Bissau\">{this.props.t('Guinea-Bissau')}</MenuItem>\n <MenuItem value=\"Guyana\">{this.props.t('Guyana')}</MenuItem>\n <MenuItem value=\"Haiti\">{this.props.t('Haiti')}</MenuItem>\n <MenuItem value=\"Heard and Mc Donald Islands\">\n {this.props.t('Heard and Mc Donald Islands')}\n </MenuItem>\n <MenuItem value=\"Honduras\">{this.props.t('Honduras')}</MenuItem>\n <MenuItem value=\"Hong Kong\">{this.props.t('Hong Kong')}</MenuItem>\n <MenuItem value=\"Hungary\">{this.props.t('Hungary')}</MenuItem>\n <MenuItem value=\"Iceland\">{this.props.t('Iceland')}</MenuItem>\n <MenuItem value=\"India\">{this.props.t('India')}</MenuItem>\n <MenuItem value=\"Isle of Man\">{this.props.t('Isle of Man')}</MenuItem>\n <MenuItem value=\"Indonesia\">{this.props.t('Indonesia')}</MenuItem>\n <MenuItem value=\"Iran\">{this.props.t('Iran')}</MenuItem>\n <MenuItem value=\"Iraq\">{this.props.t('Iraq')}</MenuItem>\n <MenuItem value=\"Ireland\">{this.props.t('Ireland')}</MenuItem>\n <MenuItem value=\"Israel\">{this.props.t('Israel')}</MenuItem>\n <MenuItem value=\"Ivory Coast\">{this.props.t('Ivory Coast')}</MenuItem>\n <MenuItem value=\"Jersey\">{this.props.t('Jersey')}</MenuItem>\n <MenuItem value=\"Jamaica\">{this.props.t('Jamaica')}</MenuItem>\n <MenuItem value=\"Japan\">{this.props.t('Japan')}</MenuItem>\n <MenuItem value=\"Jordan\">{this.props.t('Jordan')}</MenuItem>\n <MenuItem value=\"Kazakhstan\">{this.props.t('Kazakhstan')}</MenuItem>\n <MenuItem value=\"Kenya\">{this.props.t('Kenya')}</MenuItem>\n <MenuItem value=\"Kiribati\">{this.props.t('Kiribati')}</MenuItem>\n <MenuItem value=\"Korea\">{this.props.t('Korea')}</MenuItem>\n <MenuItem value=\"Kosovo\">{this.props.t('Kosovo')}</MenuItem>\n <MenuItem value=\"Kuwait\">{this.props.t('Kuwait')}</MenuItem>\n <MenuItem value=\"Kyrgyzstan\">{this.props.t('Kyrgyzstan')}</MenuItem>\n <MenuItem value=\"Lao People's Democratic Republic\">\n {this.props.t(\"Lao People's Democratic Republic\")}\n </MenuItem>\n <MenuItem value=\"Latvia\">{this.props.t('Latvia')}</MenuItem>\n <MenuItem value=\"Lebanon\">{this.props.t('Lebanon')}</MenuItem>\n <MenuItem value=\"Lesotho\">{this.props.t('Lesotho')}</MenuItem>\n <MenuItem value=\"Liberia\">{this.props.t('Liberia')}</MenuItem>\n <MenuItem value=\"Libyan Arab Jamahiriya\">\n {this.props.t('Libyan Arab Jamahiriya')}\n </MenuItem>\n <MenuItem value=\"Liechtenstein\">{this.props.t('Liechtenstein')}</MenuItem>\n <MenuItem value=\"Lithuania\">{this.props.t('Lithuania')}</MenuItem>\n <MenuItem value=\"Luxembourg\">{this.props.t('Luxembourg')}</MenuItem>\n <MenuItem value=\"Macau\">{this.props.t('Macau')}</MenuItem>\n <MenuItem value=\"Macedonia\">{this.props.t('Macedonia')}</MenuItem>\n <MenuItem value=\"Madagascar\">{this.props.t('Madagascar')}</MenuItem>\n <MenuItem value=\"Malawi\">{this.props.t('Malawi')}</MenuItem>\n <MenuItem value=\"Malaysia\">{this.props.t('Malaysia')}</MenuItem>\n <MenuItem value=\"Maldives\">{this.props.t('Maldives')}</MenuItem>\n <MenuItem value=\"Mali\">{this.props.t('Mali')}</MenuItem>\n <MenuItem value=\"Malta\">{this.props.t('Malta')}</MenuItem>\n <MenuItem value=\"Marshall Islands\">\n {this.props.t('Marshall Islands')}\n </MenuItem>\n <MenuItem value=\"Martinique\">{this.props.t('Martinique')}</MenuItem>\n <MenuItem value=\"Mauritania\">{this.props.t('Mauritania')}</MenuItem>\n <MenuItem value=\"Mauritius\">{this.props.t('Mauritius')}</MenuItem>\n <MenuItem value=\"Mayotte\">{this.props.t('Mayotte')}</MenuItem>\n <MenuItem value=\"Mexico\">{this.props.t('Mexico')}</MenuItem>\n <MenuItem value=\"Micronesia\">{this.props.t('Micronesia')}</MenuItem>\n <MenuItem value=\"Moldova\">{this.props.t('Moldova')}</MenuItem>\n <MenuItem value=\"Monaco\">{this.props.t('Monaco')}</MenuItem>\n <MenuItem value=\"Mongolia\">{this.props.t('Mongolia')}</MenuItem>\n <MenuItem value=\"Montenegro\">{this.props.t('Montenegro')}</MenuItem>\n <MenuItem value=\"Montserrat\">{this.props.t('Montserrat')}</MenuItem>\n <MenuItem value=\"Morocco\">{this.props.t('Morocco')}</MenuItem>\n <MenuItem value=\"Mozambique\">{this.props.t('Mozambique')}</MenuItem>\n <MenuItem value=\"Myanmar\">{this.props.t('Myanmar')}</MenuItem>\n <MenuItem value=\"Namibia\">{this.props.t('Namibia')}</MenuItem>\n <MenuItem value=\"Nauru\">{this.props.t('Nauru')}</MenuItem>\n <MenuItem value=\"Nepal\">{this.props.t('Nepal')}</MenuItem>\n <MenuItem value=\"Netherlands Antilles\">\n {this.props.t('Netherlands Antilles')}\n </MenuItem>\n <MenuItem value=\"New Caledonia\">{this.props.t('New Caledonia')}</MenuItem>\n <MenuItem value=\"New Zealand\">{this.props.t('New Zealand')}</MenuItem>\n <MenuItem value=\"Nicaragua\">{this.props.t('Nicaragua')}</MenuItem>\n <MenuItem value=\"Niger\">{this.props.t('Niger')}</MenuItem>\n <MenuItem value=\"Nigeria\">{this.props.t('Nigeria')}</MenuItem>\n <MenuItem value=\"Niue\">{this.props.t('Niue')}</MenuItem>\n <MenuItem value=\"Norfolk Island\">{this.props.t('Norfolk Island')}</MenuItem>\n <MenuItem value=\"Northern Mariana Islands\">\n {this.props.t('Northern Mariana Islands')}\n </MenuItem>\n <MenuItem value=\"Norway\">{this.props.t('Norway')}</MenuItem>\n <MenuItem value=\"Oman\">{this.props.t('Oman')}</MenuItem>\n <MenuItem value=\"Pakistan\">{this.props.t('Pakistan')}</MenuItem>\n <MenuItem value=\"Palau\">{this.props.t('Palau')}</MenuItem>\n <MenuItem value=\"Palestine\">{this.props.t('Palestine')}</MenuItem>\n <MenuItem value=\"Panama\">{this.props.t('Panama')}</MenuItem>\n <MenuItem value=\"Papua New Guinea\">\n {this.props.t('Papua New Guinea')}\n </MenuItem>\n <MenuItem value=\"Paraguay\">{this.props.t('Paraguay')}</MenuItem>\n <MenuItem value=\"Peru\">{this.props.t('Peru')}</MenuItem>\n <MenuItem value=\"Philippines\">{this.props.t('Philippines')}</MenuItem>\n <MenuItem value=\"Pitcairn\">{this.props.t('Pitcairn')}</MenuItem>\n <MenuItem value=\"Poland\">{this.props.t('Poland')}</MenuItem>\n <MenuItem value=\"Portugal\">{this.props.t('Portugal')}</MenuItem>\n <MenuItem value=\"Puerto Rico\">{this.props.t('Puerto Rico')}</MenuItem>\n <MenuItem value=\"Qatar\">{this.props.t('Qatar')}</MenuItem>\n <MenuItem value=\"Reunion\">{this.props.t('Reunion')}</MenuItem>\n <MenuItem value=\"Romania\">{this.props.t('Romania')}</MenuItem>\n <MenuItem value=\"Rwanda\">{this.props.t('Rwanda')}</MenuItem>\n <MenuItem value=\"Saint Kitts and Nevis\">\n {this.props.t('Saint Kitts and Nevis')}\n </MenuItem>\n <MenuItem value=\"Saint Lucia\">{this.props.t('Saint Lucia')}</MenuItem>\n <MenuItem value=\"Saint Vincent and the Grenadines\">\n {this.props.t('Saint Vincent and the Grenadines')}\n </MenuItem>\n <MenuItem value=\"Samoa\">{this.props.t('Samoa')}</MenuItem>\n <MenuItem value=\"San Marino\">{this.props.t('San Marino')}</MenuItem>\n <MenuItem value=\"Sao Tome and Principe\">\n {this.props.t('Sao Tome and Principe')}\n </MenuItem>\n <MenuItem value=\"Saudi Arabia\">{this.props.t('Saudi Arabia')}</MenuItem>\n <MenuItem value=\"Senegal\">{this.props.t('Senegal')}</MenuItem>\n <MenuItem value=\"Serbia\">{this.props.t('Serbia')}</MenuItem>\n <MenuItem value=\"Seychelles\">{this.props.t('Seychelles')}</MenuItem>\n <MenuItem value=\"Sierra Leone\">{this.props.t('Sierra Leone')}</MenuItem>\n <MenuItem value=\"Singapore\">{this.props.t('Singapore')}</MenuItem>\n <MenuItem value=\"Slovakia\">{this.props.t('Slovakia')}</MenuItem>\n <MenuItem value=\"Slovenia\">{this.props.t('Slovenia')}</MenuItem>\n <MenuItem value=\"Solomon Islands\">\n {this.props.t('Solomon Islands')}\n </MenuItem>\n <MenuItem value=\"Somalia\">{this.props.t('Somalia')}</MenuItem>\n <MenuItem value=\"South Africa\">{this.props.t('South Africa')}</MenuItem>\n <MenuItem value=\"South Georgia South Sandwich Islands\">\n {this.props.t('South Georgia South Sandwich Islands')}\n </MenuItem>\n <MenuItem value=\"Spain\">{this.props.t('Spain')}</MenuItem>\n <MenuItem value=\"Sri Lanka\">{this.props.t('Sri Lanka')}</MenuItem>\n <MenuItem value=\"St. Helena\">{this.props.t('St. Helena')}</MenuItem>\n <MenuItem value=\"St. Pierre and Miquelon\">\n {this.props.t('St. Pierre and Miquelon')}\n </MenuItem>\n <MenuItem value=\"Sudan\">{this.props.t('Sudan')}</MenuItem>\n <MenuItem value=\"Suriname\">{this.props.t('Suriname')}</MenuItem>\n <MenuItem value=\"Svalbard and Jan Mayen Islands\">\n {this.props.t('Svalbard and Jan Mayen Islands')}\n </MenuItem>\n <MenuItem value=\"Swaziland\">{this.props.t('Swaziland')}</MenuItem>\n <MenuItem value=\"Sweden\">{this.props.t('Sweden')}</MenuItem>\n <MenuItem value=\"Syrian Arab Republic\">\n {this.props.t('Syrian Arab Republic')}\n </MenuItem>\n <MenuItem value=\"Taiwan\">{this.props.t('Taiwan')}</MenuItem>\n <MenuItem value=\"Tajikistan\">{this.props.t('Tajikistan')}</MenuItem>\n <MenuItem value=\"Tanzania\">{this.props.t('Tanzania')}</MenuItem>\n <MenuItem value=\"Thailand\">{this.props.t('Thailand')}</MenuItem>\n <MenuItem value=\"Togo\">{this.props.t('Togo')}</MenuItem>\n <MenuItem value=\"Tokelau\">{this.props.t('Tokelau')}</MenuItem>\n <MenuItem value=\"Tonga\">{this.props.t('Tonga')}</MenuItem>\n <MenuItem value=\"Trinidad and Tobago\">\n {this.props.t('Trinidad and Tobago')}\n </MenuItem>\n <MenuItem value=\"Tunisia\">{this.props.t('Tunisia')}</MenuItem>\n <MenuItem value=\"Turkey\">{this.props.t('Turkey')}</MenuItem>\n <MenuItem value=\"Turkmenistan\">{this.props.t('Turkmenistan')}</MenuItem>\n <MenuItem value=\"Turks and Caicos Islands\">\n {this.props.t('Turks and Caicos Islands')}\n </MenuItem>\n <MenuItem value=\"Tuvalu\">{this.props.t('Tuvalu')}</MenuItem>\n <MenuItem value=\"Uganda\">{this.props.t('Uganda')}</MenuItem>\n <MenuItem value=\"Ukraine\">{this.props.t('Ukraine')}</MenuItem>\n <MenuItem value=\"United Arab Emirates\">\n {this.props.t('United Arab Emirates')}\n </MenuItem>\n <MenuItem value=\"United States minor outlying islands\">\n {this.props.t('United States minor outlying islands')}\n </MenuItem>\n <MenuItem value=\"Uruguay\">{this.props.t('Uruguay')}</MenuItem>\n <MenuItem value=\"Uzbekistan\">{this.props.t('Uzbekistan')}</MenuItem>\n <MenuItem value=\"Vanuatu\">{this.props.t('Vanuatu')}</MenuItem>\n <MenuItem value=\"Vatican City State\">\n {this.props.t('Vatican City State')}\n </MenuItem>\n <MenuItem value=\"Venezuela\">{this.props.t('Venezuela')}</MenuItem>\n <MenuItem value=\"Vietnam\">{this.props.t('Vietnam')}</MenuItem>\n <MenuItem value=\"Virgin Islands (British)\">\n {this.props.t('Virgin Islands (British)')}\n </MenuItem>\n <MenuItem value=\"Virgin Islands (U.S.)\">\n {this.props.t('Virgin Islands (U.S.)')}\n </MenuItem>\n <MenuItem value=\"Wallis and Futuna Islands\">\n {this.props.t('Wallis and Futuna Islands')}\n </MenuItem>\n <MenuItem value=\"Western Sahara\">{this.props.t('Western Sahara')}</MenuItem>\n <MenuItem value=\"Yemen\">{this.props.t('Yemen')}</MenuItem>\n <MenuItem value=\"Zaire\">{this.props.t('Zaire')}</MenuItem>\n <MenuItem value=\"Zambia\">{this.props.t('Zambia')}</MenuItem>\n <MenuItem value=\"Zimbabwe\">{this.props.t('Zimbabwe')}</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('City')}\n style={styles.controlItem}\n value={this.state.city}\n onChange={e => this.onChangeAddress(e, 'city')}\n slotProps={{\n input: {\n endAdornment: this.state.city ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ city: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Address')}\n style={styles.controlItemAddress}\n value={this.state.address}\n onChange={e => this.onChangeAddress(e, 'address')}\n helperText={this.props.t('Used only to calculate position.')}\n slotProps={{\n input: {\n endAdornment: this.state.address ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ address: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n <Fab\n size=\"small\"\n onClick={() => this.addressToPosition()}\n >\n <GpsFixed />\n </Fab>\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Longitude')}\n style={styles.controlItem}\n value={this.state.longitude}\n onChange={e => this.onChangePosition(e, 'longitude')}\n slotProps={{\n input: {\n endAdornment: this.state.longitude ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ longitude: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Grid2>\n <Grid2>\n <TextField\n variant=\"standard\"\n label={this.props.t('Latitude')}\n style={styles.controlItem}\n value={this.state.latitude}\n onChange={e => this.onChangePosition(e, 'latitude')}\n slotProps={{\n input: {\n endAdornment: this.state.latitude ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.setState({ latitude: '' })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Grid2>\n <Grid2 style={{ textAlign: 'left' }}>\n <FormControl\n variant=\"standard\"\n style={styles.controlItem}\n >\n <InputLabel>{this.props.t('Week starts with')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.firstDayOfWeek}\n onChange={e =>\n this.setState({ firstDayOfWeek: e.target.value as 'sunday' | 'monday' })\n }\n >\n <MenuItem value=\"monday\">{this.props.t('monday')}</MenuItem>\n <MenuItem value=\"sunday\">{this.props.t('sunday')}</MenuItem>\n </Select>\n </FormControl>\n </Grid2>\n </Grid2>\n </Grid2>\n </Grid2>\n <Grid2 style={styles.mapGrid}>\n <MapContainer\n style={styles.map}\n center={center}\n zoom={zoom}\n maxZoom={18}\n attributionControl\n zoomControl\n doubleClickZoom\n scrollWheelZoom\n dragging\n // animate\n easeLinearity={0.35}\n >\n <TileLayer url=\"https://{s}.tile.osm.org/{z}/{x}/{y}.png\" />\n <MyMapComponent addMap={map => this.onMap(map)} />\n </MapContainer>\n </Grid2>\n </Grid2>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() =>\n this.props.onDone({\n tempUnit: this.state.tempUnit,\n currency: this.state.currency,\n dateFormat: this.state.dateFormat,\n isFloatComma: this.state.isFloatComma,\n address: this.state.address,\n firstDayOfWeek: this.state.firstDayOfWeek,\n country: this.state.country,\n city: this.state.city,\n longitude: parseFloat(this.state.longitude as string),\n latitude: parseFloat(this.state.latitude as string),\n })\n }\n startIcon={<IconCheck />}\n >\n {this.props.t('Save')}\n </Button>\n <div style={styles.grow} />\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardSettingsTab);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Grid2,\n Toolbar,\n FormControlLabel,\n Checkbox,\n Button,\n Paper,\n InputLabel,\n MenuItem,\n FormHelperText,\n FormControl,\n Select,\n FormGroup,\n Box,\n} from '@mui/material';\n\nimport { Check as IconCheck } from '@mui/icons-material';\n\nimport { type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: (theme: IobTheme) => ({\n color: theme.palette.secondary.main,\n }),\n form: {\n height: `calc(100% - ${TOOLBAR_HEIGHT + 8}px)`,\n overflow: 'auto',\n },\n input: {\n width: 400,\n textAlign: 'left',\n },\n inputLine: {\n width: 400,\n margin: 'auto',\n marginBottom: 50,\n },\n grow: {\n flexGrow: 1,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n};\n\ninterface WizardAuthSSLTabProps {\n auth: boolean;\n secure: boolean;\n t: Translate;\n onDone: (config: { auth: boolean; secure: boolean }) => void;\n}\n\ninterface WizardAuthSSLTabState {\n auth: boolean;\n secure: boolean;\n}\n\nclass WizardAuthSSLTab extends Component<WizardAuthSSLTabProps, WizardAuthSSLTabState> {\n constructor(props: WizardAuthSSLTabProps) {\n super(props);\n\n this.state = {\n auth: !!this.props.auth,\n secure: !!this.props.secure,\n };\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <form\n style={styles.form}\n noValidate\n autoComplete=\"off\"\n >\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Box\n component=\"h2\"\n sx={styles.title}\n >\n {this.props.t('It is suggested to enable the authentication in admin')}\n </Box>\n </Grid2>\n <Grid2 style={styles.inputLine}>\n <FormGroup>\n <FormControlLabel\n style={styles.input}\n control={\n <Checkbox\n checked={this.state.auth}\n onChange={() => this.setState({ auth: !this.state.auth })}\n />\n }\n label={this.props.t('Authentication in Admin')}\n />\n <FormHelperText>\n {this.props.t(\n 'Activate the check of password in admin if you plan to access your ioBroker is not in \"Demilitarized Zone\"',\n )}\n </FormHelperText>\n </FormGroup>\n </Grid2>\n <Grid2>\n <FormControl\n variant=\"standard\"\n style={styles.input}\n >\n <InputLabel>{this.props.t('Certificates')}</InputLabel>\n <Select\n variant=\"standard\"\n value={this.state.secure ? 'true' : 'false'}\n onChange={e => this.setState({ secure: e.target.value === 'true' })}\n >\n <MenuItem value=\"false\">{this.props.t('No SSL')}</MenuItem>\n <MenuItem value=\"true\">{this.props.t('Use self signed certificates')}</MenuItem>\n </Select>\n <FormHelperText>\n {this.state.secure\n ? this.props.t(\n 'Browsers will inform you about the problem with self-signed certificates, but the communication is encrypted.',\n )\n : this.props.t('Your communication with admin is not encrypted')}\n </FormHelperText>\n </FormControl>\n </Grid2>\n </Grid2>\n </form>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => this.props.onDone({ auth: this.state.auth, secure: this.state.secure })}\n startIcon={<IconCheck />}\n >\n {this.props.t('Apply')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardAuthSSLTab);\n","import React, { createRef, Component, type JSX } from 'react';\n\nimport { Grid2, Toolbar, Button, Paper, Box } from '@mui/material';\n\nimport { Public as IconCloud, Language as IconCloudPro, Check as IconCheck } from '@mui/icons-material';\n\nimport { withWidth, type IobTheme, type Translate } from '@iobroker/adapter-react-v5';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, any> = {\n paper: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n },\n title: (theme: IobTheme) => ({\n color: theme.palette.secondary.main,\n }),\n form: {\n height: `calc(100% - ${TOOLBAR_HEIGHT + 8}px)`,\n overflow: 'auto',\n },\n input: {\n width: 400,\n marginBottom: 16,\n },\n grow: {\n flexGrow: 1,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n lineHeight: `${TOOLBAR_HEIGHT}px`,\n },\n text: {\n fontSize: 16,\n },\n\n error: {\n fontSize: 24,\n color: '#c61f1f',\n },\n warning: {\n fontSize: 20,\n color: '#c6891f',\n },\n information: {\n fontSize: 18,\n color: '#429c1b',\n },\n button: {\n marginRight: 16,\n },\n};\n\ninterface WizardPortForwardingProps {\n auth: boolean;\n secure: boolean;\n t: Translate;\n onDone: () => void;\n}\n\ninterface WizardPortForwardingState {\n auth: boolean;\n secure: boolean;\n}\n\nclass WizardPortForwarding extends Component<WizardPortForwardingProps, WizardPortForwardingState> {\n private readonly focusRef: React.RefObject<HTMLInputElement>;\n\n constructor(props: WizardPortForwardingProps) {\n super(props);\n\n this.focusRef = createRef();\n }\n\n componentDidMount(): void {\n this.focusRef.current?.focus();\n }\n\n render(): JSX.Element {\n return (\n <Paper style={styles.paper}>\n <form\n style={styles.form}\n noValidate\n autoComplete=\"off\"\n >\n <Grid2\n container\n direction=\"column\"\n >\n <Grid2>\n <Box\n component=\"h2\"\n sx={styles.title}\n >\n {this.props.t('Important information about port forwarding')}\n </Box>\n </Grid2>\n <Grid2>\n {!this.props.auth ? <div style={styles.error}>{this.props.t('Warning!')}</div> : null}\n {this.props.auth && !this.props.secure ? (\n <div style={styles.warning}>{this.props.t('Be aware!')}</div>\n ) : null}\n {this.props.auth && this.props.secure ? (\n <div style={styles.information}>{this.props.t('Information')}</div>\n ) : null}\n\n <div style={styles.text}>\n {this.props.t(\n 'Do not expose iobroker Admin or Web interfaces to the internet directly via the port forwarding!',\n )}\n </div>\n </Grid2>\n <Grid2 style={{ marginTop: 16 }}>\n <div style={styles.text}>\n {this.props.t(\n 'The Cloud services from iobroker.net/pro can help here to do that securely:',\n )}\n </div>\n </Grid2>\n <Grid2 style={{ marginTop: 16 }}>\n <Button\n style={styles.button}\n color=\"secondary\"\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.pro', 'help')}\n startIcon={<IconCloudPro />}\n >\n ioBroker.pro\n </Button>\n <Button\n color=\"secondary\"\n variant=\"contained\"\n onClick={() => window.open('https://iobroker.net', 'help')}\n startIcon={<IconCloud />}\n >\n ioBroker.net\n </Button>\n </Grid2>\n </Grid2>\n </form>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => this.props.onDone()}\n startIcon={<IconCheck />}\n >\n {this.props.t('Understand')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(WizardPortForwarding);\n","import React, { type JSX } from 'react';\nimport {\n Paper,\n Toolbar,\n Button,\n Accordion,\n Box,\n AccordionSummary,\n AccordionDetails,\n Checkbox,\n Typography,\n LinearProgress,\n} from '@mui/material';\nimport { Check as IconCheck, ExpandMore as ExpandMoreIcon, ArrowForward as IconNext } from '@mui/icons-material';\nimport { type AdminConnection, I18n } from '@iobroker/adapter-react-v5';\nimport type { Repository } from '@/types';\n\ninterface WizardAdaptersTabProps {\n /** Function to call if wizard step finishes */\n onDone: () => void;\n /** The socket connection */\n socket: AdminConnection;\n /** The host name */\n host: string;\n /** Execute command on given host */\n executeCommand: (cmd: string, host: string, cb: () => void) => void;\n}\n\ninterface WizardAdaptersTabState {\n /** The repository */\n repository: Repository;\n /** Adapters which should be installed */\n selectedAdapters: string[];\n}\n\ninterface AdapterOptions {\n /** Adapter name */\n name: string;\n /** Adapter description */\n description: string;\n}\n\nexport default class WizardAdaptersTab extends React.Component<WizardAdaptersTabProps, WizardAdaptersTabState> {\n /** Height of the toolbar */\n private readonly TOOLBAR_HEIGHT = 64;\n\n constructor(props: WizardAdaptersTabProps) {\n super(props);\n\n this.state = {\n repository: {},\n selectedAdapters: [],\n };\n }\n\n /**\n * Lifecycle hook called if component is mounted\n */\n async componentDidMount(): Promise<void> {\n try {\n const repository = await this.props.socket.getRepository(this.props.host, {\n repo: this.props.socket.systemConfig.common.activeRepo,\n });\n\n this.setState({ repository });\n } catch (e) {\n console.error(`Could not read repository: ${e.message}`);\n }\n }\n\n /**\n * Install adapters if the next button is called\n */\n async onDone(): Promise<void> {\n const { selectedAdapters } = this.state;\n\n this.props.onDone();\n\n // after calling onDone we install in the background\n for (const adapter of selectedAdapters) {\n await new Promise<void>(resolve => {\n this.props.executeCommand(`add ${adapter}`, this.props.host, resolve);\n });\n }\n }\n\n /**\n * Render Accordion for given adapter\n *\n * @param options Adapter specific information\n */\n renderAdapterAccordion(options: AdapterOptions): JSX.Element | null {\n const { name, description } = options;\n\n const adapter = this.state.repository[name];\n\n if (!adapter) {\n return null;\n }\n\n const lang = this.props.socket.systemLang;\n\n const title = adapter.titleLang[lang] || adapter.titleLang.en;\n\n return (\n <Box sx={{ display: 'flex', alignItems: 'flex-start' }}>\n <Accordion\n style={{\n borderColor: 'rgba(0, 0, 0, 0.2)',\n borderWidth: '1px',\n borderStyle: 'solid',\n width: '100%',\n }}\n >\n <AccordionSummary\n style={{\n backgroundColor: 'primary.main',\n fontWeight: 'bold',\n height: 52,\n }}\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"panel1-content\"\n id=\"panel1-header\"\n >\n <Box style={{ display: 'flex', alignItems: 'center', gap: 1 }}>\n <Checkbox\n sx={{ color: 'text.primary', '&.Mui-checked': { color: 'text.primary' } }}\n onClick={e => e.stopPropagation()}\n onChange={() => {\n const { selectedAdapters } = this.state;\n\n if (selectedAdapters.includes(name)) {\n const idx = selectedAdapters.indexOf(name);\n selectedAdapters.splice(idx, 1);\n } else {\n selectedAdapters.push(name);\n }\n\n this.setState({ selectedAdapters });\n }}\n />\n <img\n alt={title}\n src={adapter.extIcon}\n style={{ width: 45, height: 45 }}\n />\n {title}\n </Box>\n </AccordionSummary>\n <AccordionDetails\n style={{\n backgroundColor: 'background.appbar',\n whiteSpace: 'pre-wrap',\n fontSize: 16,\n textAlign: 'left',\n }}\n >\n <Typography>{description}</Typography>\n </AccordionDetails>\n </Accordion>\n </Box>\n );\n }\n\n /**\n * Render the actual content\n */\n renderContent(): JSX.Element {\n return (\n <Box sx={{ display: 'flex', gap: 1, flexDirection: 'column' }}>\n <Typography sx={{ paddingTop: 2 }}>{I18n.t('wizard adapter general description')}</Typography>\n <h2>{I18n.t('Cloud')}</h2>\n <Typography>{I18n.t('cloud wizard category')}</Typography>\n {this.renderAdapterAccordion({\n name: 'iot',\n description: I18n.t('iot wizard description'),\n })}\n {this.renderAdapterAccordion({ name: 'cloud', description: I18n.t('cloud wizard description') })}\n\n <h2>{I18n.t('Logic')}</h2>\n <Typography>{I18n.t('logic wizard category')}</Typography>\n {this.renderAdapterAccordion({\n name: 'javascript',\n description: I18n.t('javascript wizard description'),\n })}\n {this.renderAdapterAccordion({ name: 'scenes', description: I18n.t('scenes wizard description') })}\n\n <h2>{I18n.t('Notifications')}</h2>\n <Typography>{I18n.t('notifications wizard category')}</Typography>\n {this.renderAdapterAccordion({\n name: 'notification-manager',\n description: I18n.t('notification-manager wizard description'),\n })}\n {this.renderAdapterAccordion({ name: 'telegram', description: I18n.t('telegram wizard description') })}\n {this.renderAdapterAccordion({ name: 'email', description: I18n.t('email wizard description') })}\n {this.renderAdapterAccordion({ name: 'pushover', description: I18n.t('pushover wizard description') })}\n {this.renderAdapterAccordion({\n name: 'signal-cmb',\n description: I18n.t('signal-cmb wizard description'),\n })}\n\n <h2>{I18n.t('History data')}</h2>\n <Typography>{I18n.t('history wizard category')}</Typography>\n {this.renderAdapterAccordion({ name: 'history', description: I18n.t('history wizard description') })}\n {this.renderAdapterAccordion({ name: 'sql', description: I18n.t('sql wizard description') })}\n\n <h2>{I18n.t('Weather')}</h2>\n <Typography>{I18n.t('weather wizard category')}</Typography>\n {this.renderAdapterAccordion({\n name: 'weatherunderground',\n description: I18n.t('weatherunderground wizard description'),\n })}\n\n <h2>{I18n.t('Visualization')}</h2>\n <Typography>{I18n.t('visualization wizard category')}</Typography>\n {this.renderAdapterAccordion({ name: 'vis-2', description: I18n.t('vis-2 wizard description') })}\n </Box>\n );\n }\n\n /**\n * Render the component\n */\n render(): JSX.Element {\n const repositoryReceived = Object.keys(this.state.repository).length > 0;\n\n return (\n <Paper\n sx={{\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n overflow: 'hidden',\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n >\n <Box\n sx={{\n height: `calc(100% - ${this.TOOLBAR_HEIGHT}px)`,\n width: '90%',\n maxWidth: '800px',\n overflow: 'auto',\n '-ms-overflow-style': 'none',\n 'scrollbar-width': 'none',\n '&::-webkit-scrollbar': {\n display: 'none',\n },\n }}\n >\n {repositoryReceived ? this.renderContent() : <LinearProgress />}\n </Box>\n <Toolbar\n sx={{\n height: this.TOOLBAR_HEIGHT,\n lineHeight: `${this.TOOLBAR_HEIGHT}px`,\n width: '100%',\n }}\n >\n <div style={{ flexGrow: 1 }} />\n <Button\n color=\"primary\"\n variant=\"contained\"\n onClick={() => this.onDone()}\n startIcon={this.state.selectedAdapters.length ? <IconCheck /> : <IconNext />}\n >\n {this.state.selectedAdapters.length ? I18n.t('Install selected adapters') : I18n.t('Next')}\n </Button>\n </Toolbar>\n </Paper>\n );\n }\n}\n","import React, { Component, type JSX } from 'react';\n\nimport { Button, Dialog, DialogContent, DialogTitle, AppBar, Toolbar, Stepper, Step, StepLabel } from '@mui/material';\n\n// Icons\nimport { PlayArrow as PlayArrowIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport {\n withWidth,\n Router,\n ToggleThemeMenu,\n I18n,\n type AdminConnection,\n type ThemeName,\n type ThemeType,\n} from '@iobroker/adapter-react-v5';\n\nimport WizardPasswordTab from '@/components/Wizard/WizardPasswordTab';\nimport WizardLicenseTab from '@/components/Wizard/WizardLicenseTab';\nimport WizardFinishImage from '@/assets/wizard-finish.jpg';\nimport WizardWelcomeImage from '@/assets/wizard-welcome.jpg';\nimport Logo from '@/assets/logo.png';\nimport LongLogo from '@/assets/longLogo.svg';\nimport WizardSettingsTab from '@/components/Wizard/WizardSettingsTab';\nimport WizardAuthSSLTab from '@/components/Wizard/WizardAuthSSLTab';\nimport WizardPortForwarding from '@/components/Wizard/WizardPortForwarding';\nimport WizardAdaptersTab from '@/components/Wizard/WizardAdaptersTab';\n\nconst TOOLBAR_HEIGHT = 64;\n\nconst styles: Record<string, React.CSSProperties> = {\n dialog: {\n height: '100%',\n maxHeight: '100%',\n maxWidth: '100%',\n },\n paper: {\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n },\n content: {\n textAlign: 'center',\n },\n tabPanel: {\n width: '100%',\n overflow: 'hidden',\n height: 'calc(100% - 72px)',\n },\n fullHeightWithoutToolbar: {\n height: `calc(100% - ${TOOLBAR_HEIGHT}px)`,\n width: '100%',\n overflow: 'auto',\n },\n finishBackground: {\n backgroundImage: `url(${WizardFinishImage})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n },\n welcomeBackground: {\n backgroundImage: `url(${WizardWelcomeImage})`,\n backgroundRepeat: 'no-repeat',\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n },\n grow: {\n flexGrow: 1,\n },\n playIcon: {\n marginLeft: 8,\n },\n toolbar: {\n height: TOOLBAR_HEIGHT,\n },\n logo: {\n width: 32,\n height: 32,\n borderRadius: '50%',\n background: 'white',\n marginRight: 8,\n verticalAlign: 'middle',\n },\n themeButton: {\n float: 'right',\n display: 'inline-block',\n marginTop: -1,\n marginRight: 8,\n },\n\n finalText: {\n fontSize: 48,\n marginTop: 80,\n color: '#265063',\n fontWeight: 'bold',\n },\n finalLongLogo: {\n width: 500,\n },\n};\n\ninterface WizardDialogProps {\n socket: AdminConnection;\n onClose: (redirect?: string) => void;\n toggleTheme: () => void;\n themeName: ThemeName;\n themeType: ThemeType;\n /** Active host name */\n host: string;\n /** Execute command on given host */\n executeCommand: (cmd: string, host: string, cb: () => void) => void;\n}\n\ninterface WizardDialogState {\n activeStep: number;\n auth: boolean;\n secure: boolean;\n}\n\nclass WizardDialog extends Component<WizardDialogProps, WizardDialogState> {\n private adminInstance: null | ioBroker.AdapterObject = null;\n\n constructor(props: WizardDialogProps) {\n super(props);\n\n this.state = {\n activeStep: 0,\n auth: false,\n secure: false,\n };\n }\n\n componentDidMount(): void {\n void this.props.socket.getCurrentInstance().then((namespace: string) =>\n this.props.socket.getObject(`system.adapter.${namespace}`).then(obj => {\n this.adminInstance = obj;\n this.setState({ auth: obj.native.auth, secure: obj.native.secure });\n }),\n );\n }\n\n renderWelcome(): JSX.Element {\n // shutterstock Standard commercial license on ioBroker GmbH: https://www.shutterstock.com/de/image-vector/welcome-neon-text-vector-sign-design-1186433386\n return (\n <div style={{ ...styles.paper, ...styles.welcomeBackground }}>\n <div style={styles.fullHeightWithoutToolbar}></div>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() =>\n this.props.socket.getCompactSystemConfig(true).then(obj =>\n this.setState({\n activeStep: this.state.activeStep + 1 + (obj.common.licenseConfirmed ? 0 : 0),\n }),\n )\n }\n >\n {I18n.t('Start wizard')} <PlayArrowIcon style={styles.playIcon} />\n </Button>\n <div style={styles.grow} />\n </Toolbar>\n </div>\n );\n }\n\n renderLicense(): JSX.Element {\n return (\n <WizardLicenseTab\n t={I18n.t}\n socket={this.props.socket}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n onDone={async (settings?: { lang: ioBroker.Languages }) => {\n const obj = await this.props.socket.getSystemConfig(true);\n obj.common.licenseConfirmed = true;\n if (settings?.lang) {\n obj.common.language = settings.lang;\n await this.props.socket.setSystemConfig(obj);\n }\n this.setState({ activeStep: this.state.activeStep + 1 });\n }}\n />\n );\n }\n\n renderPassword(): JSX.Element {\n return (\n <WizardPasswordTab\n t={I18n.t}\n socket={this.props.socket}\n themeName={this.props.themeName}\n onDone={(pass: string) =>\n this.props.socket\n .changePassword('admin', pass)\n .then(() => this.setState({ activeStep: this.state.activeStep + 1 }))\n }\n />\n );\n }\n\n renderSettings(): JSX.Element {\n return (\n <WizardSettingsTab\n t={I18n.t}\n socket={this.props.socket}\n themeName={this.props.themeName}\n onDone={(settings: {\n tempUnit: '°C' | '°F';\n currency: string;\n dateFormat: string;\n isFloatComma: boolean;\n country: string;\n city: string;\n address: string;\n longitude: number;\n latitude: number;\n firstDayOfWeek: 'sunday' | 'monday';\n }) =>\n this.props.socket\n .getSystemConfig(true)\n .then(obj => {\n Object.assign(obj.common, settings);\n return this.props.socket.setSystemConfig(obj);\n })\n .then(() => this.setState({ activeStep: this.state.activeStep + 1 }))\n }\n />\n );\n }\n\n renderAuthentication(): JSX.Element {\n return (\n <WizardAuthSSLTab\n t={I18n.t}\n auth={this.state.auth}\n secure={this.state.secure}\n socket={this.props.socket}\n themeName={this.props.themeName}\n onDone={(settings: any) =>\n this.setState(settings, () => this.setState({ activeStep: this.state.activeStep + 1 }))\n }\n />\n );\n }\n\n renderPortForwarding(): JSX.Element {\n return (\n <WizardPortForwarding\n t={I18n.t}\n socket={this.props.socket}\n themeName={this.props.themeName}\n auth={this.state.auth}\n secure={this.state.secure}\n onDone={() => this.setState({ activeStep: this.state.activeStep + 1 })}\n />\n );\n }\n\n /**\n * Render the adapter selection wizard tab\n */\n renderAdapters(): JSX.Element {\n return (\n <WizardAdaptersTab\n host={this.props.host}\n socket={this.props.socket}\n executeCommand={this.props.executeCommand}\n onDone={() => this.setState({ activeStep: this.state.activeStep + 1 })}\n />\n );\n }\n\n async onClose(): Promise<void> {\n // read if discovery is available\n const discovery = await this.props.socket.getState('system.adapter.discovery.0.alive');\n\n if (this.adminInstance) {\n let certPublic;\n let certPrivate;\n if (\n this.adminInstance.native.secure !== this.state.secure ||\n this.adminInstance.native.auth !== this.state.auth\n ) {\n if (\n this.state.secure &&\n (!this.adminInstance.native.certPublic || !!this.adminInstance.native.certPrivate)\n ) {\n // get certificates\n try {\n const certs = await this.props.socket.getCertificates();\n certPublic = certs && certs.find(c => c.type === 'public');\n certPrivate = certs && certs.find(c => c.type === 'private');\n } catch (e) {\n window.alert(`Cannot read certificates: ${e}`);\n }\n }\n this.adminInstance.native.auth = this.state.auth;\n\n if (this.state.secure) {\n if (\n !(this.adminInstance.native.certPublic || certPublic) ||\n !(this.adminInstance.native.certPrivate || certPrivate)\n ) {\n window.alert(I18n.t('Cannot enable authentication as no certificates found!'));\n this.adminInstance.native.secure = false;\n\n await this.props.socket.setObject(this.adminInstance._id, this.adminInstance);\n setTimeout(\n () =>\n (window.location.href = `http://${window.location.host}/#tab-adapters${discovery?.val ? '/discovery' : ''}`),\n 1000,\n );\n this.props.onClose();\n return;\n }\n this.adminInstance.native.secure = this.state.secure;\n this.adminInstance.native.certPublic = this.adminInstance.native.certPublic || certPublic.name;\n this.adminInstance.native.certPrivate = this.adminInstance.native.certPrivate || certPrivate.name;\n }\n\n await this.props.socket.setObject(this.adminInstance._id, this.adminInstance);\n\n // redirect to https or http\n let redirect;\n if (this.adminInstance.native.secure) {\n redirect = `https://${window.location.host}/#tab-adapters${discovery?.val ? '/discovery' : ''}`;\n } else {\n redirect = `http://${window.location.host}/#tab-adapters${discovery?.val ? '/discovery' : ''}`;\n }\n\n this.props.onClose(redirect);\n } else {\n Router.doNavigate('tab-adapters', discovery?.val ? 'discovery' : undefined);\n this.props.onClose();\n }\n } else {\n Router.doNavigate('tab-adapters', discovery?.val ? 'discovery' : undefined);\n this.props.onClose();\n }\n }\n\n renderFinish(): JSX.Element {\n // Free Image license: https://pixabay.com/illustrations/road-sky-mountains-clouds-black-908176/\n return (\n <div style={{ ...styles.paper, ...styles.finishBackground }}>\n <div style={styles.fullHeightWithoutToolbar}>\n <div style={styles.finalText}>{I18n.t('Have fun automating your home with')}</div>\n <img\n src={LongLogo}\n alt=\"ioBroker\"\n style={styles.finalLongLogo}\n />\n </div>\n <Toolbar style={styles.toolbar}>\n <div style={styles.grow} />\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => this.onClose()}\n startIcon={<CheckIcon />}\n >\n {I18n.t('Finish')}\n </Button>\n <div style={styles.grow} />\n </Toolbar>\n </div>\n );\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n style={styles.dialog}\n open={!0}\n onClose={() => {\n // ignore\n // This dialog can be closed only by button\n }}\n fullWidth\n fullScreen\n aria-labelledby=\"wizard-dialog-title\"\n >\n <DialogTitle id=\"wizard-dialog-title\">\n <img\n src={Logo}\n style={styles.logo}\n alt=\"logo\"\n />\n {I18n.t('Initial ioBroker setup')}{' '}\n <ToggleThemeMenu\n style={styles.themeButton}\n t={I18n.t}\n toggleTheme={this.props.toggleTheme}\n themeName={this.props.themeName as any}\n size=\"small\"\n />\n </DialogTitle>\n <DialogContent style={styles.content}>\n <AppBar position=\"static\">\n <Toolbar>\n <Stepper activeStep={this.state.activeStep}>\n <Step>\n <StepLabel>{I18n.t('Welcome')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('License agreement')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Password')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Authentication')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Port forwarding')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Settings')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Adapters')}</StepLabel>\n </Step>\n <Step>\n <StepLabel>{I18n.t('Finish')}</StepLabel>\n </Step>\n </Stepper>\n </Toolbar>\n </AppBar>\n {this.state.activeStep === 0 ? <div style={styles.tabPanel}>{this.renderWelcome()}</div> : null}\n {this.state.activeStep === 1 ? <div style={styles.tabPanel}>{this.renderLicense()}</div> : null}\n {this.state.activeStep === 2 ? <div style={styles.tabPanel}>{this.renderPassword()}</div> : null}\n {this.state.activeStep === 3 ? (\n <div style={styles.tabPanel}>{this.renderAuthentication()}</div>\n ) : null}\n {this.state.activeStep === 4 ? (\n <div style={styles.tabPanel}>{this.renderPortForwarding()}</div>\n ) : null}\n {this.state.activeStep === 5 ? <div style={styles.tabPanel}>{this.renderSettings()}</div> : null}\n {this.state.activeStep === 6 ? <div style={styles.tabPanel}>{this.renderAdapters()}</div> : null}\n {this.state.activeStep === 7 ? <div style={styles.tabPanel}>{this.renderFinish()}</div> : null}\n </DialogContent>\n </Dialog>\n );\n }\n}\n\nexport default withWidth()(WizardDialog);\n","import React from 'react';\n\nimport { type AdminConnection, type Translate, type ThemeType, type ThemeName } from '@iobroker/adapter-react-v5';\n\nimport type { AdminGuiConfig } from '@/types';\n\nexport interface BaseSystemSettingsDialogProps {\n adminGuiConfig: AdminGuiConfig;\n onChange: (data: any, dataAux: any, cb: () => void) => void;\n data: any;\n dataAux: any;\n handle: (type: 'none' | 'extended' | 'no-city') => void;\n users: ioBroker.UserObject[];\n groups: ioBroker.GroupObject[];\n multipleRepos: boolean;\n activeRepo: string[];\n repoInfo: Record<string, ioBroker.RepoInfo>;\n histories: string[];\n themeName: ThemeName;\n themeType: ThemeType;\n host: string;\n t: Translate;\n socket: AdminConnection;\n saving: boolean;\n}\n\nabstract class BaseSystemSettingsDialog<P = undefined, S extends object = object> extends React.Component<\n P extends undefined ? BaseSystemSettingsDialogProps : P,\n S\n> {}\n\nexport default BaseSystemSettingsDialog;\n","import React, { type JSX } from 'react';\n\nimport { MapContainer, TileLayer, useMap } from 'react-leaflet';\nimport { OpenStreetMapProvider } from 'leaflet-geosearch';\n\nimport {\n Grid2,\n InputLabel,\n MenuItem,\n FormControl,\n Select,\n TextField,\n Autocomplete,\n FormHelperText,\n InputAdornment,\n IconButton,\n type SelectChangeEvent,\n} from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { Marker } from 'leaflet';\nimport type { DragEndEvent, LatLngTuple, Map } from 'leaflet';\n\nimport { DialogConfirm, withWidth, I18n, type Translate } from '@iobroker/adapter-react-v5';\nimport { type AdminGuiConfig } from '@/types';\n\nimport AdminUtils from '../../helpers/AdminUtils';\nimport countries from '../../assets/json/countries.json';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n formControl: {\n marginRight: 8,\n minWidth: '100%',\n },\n selectEmpty: {\n marginTop: 16,\n },\n map: {\n borderRadius: 5,\n },\n};\n\nconst MyMapComponent: React.FC<{ addMap: (map: any) => any }> = props => {\n const map = useMap();\n if (props.addMap) {\n props.addMap(map);\n }\n return null;\n};\n\ninterface Setting {\n id: string;\n title: string;\n translate?: boolean;\n values: { id: string | boolean; title: string }[];\n allowText?: boolean;\n autocomplete?: boolean;\n help?: string;\n}\n\ninterface Props {\n t: Translate;\n data: ioBroker.SystemConfigObject;\n dataAux: ioBroker.SystemConfigObject;\n adminGuiConfig: AdminGuiConfig;\n saving: boolean;\n onChange: (data: any, dataAux: any, cb?: () => void) => void;\n histories: string[];\n multipleRepos: boolean;\n}\n\ninterface State {\n zoom: number;\n confirm: boolean;\n confirmValue: string;\n}\n\nclass MainSettingsDialog extends BaseSystemSettingsDialog<Props, State> {\n constructor(props: Props) {\n super(props);\n this.state = {\n zoom: 14,\n confirm: false,\n confirmValue: '',\n };\n }\n\n marker: Marker;\n\n map: Map;\n\n cityTimer: ReturnType<typeof setTimeout>;\n\n latLongTimer: ReturnType<typeof setTimeout>;\n\n getSettings(): Setting[] {\n return [\n {\n id: 'language',\n title: 'System language:',\n translate: false,\n values: [\n {\n id: 'en',\n title: 'English',\n },\n {\n id: 'de',\n title: 'Deutsch',\n },\n {\n id: 'ru',\n title: 'русский',\n },\n {\n id: 'uk',\n title: 'український',\n },\n {\n id: 'pt',\n title: 'Portugues',\n },\n {\n id: 'nl',\n title: 'Nederlands',\n },\n {\n id: 'fr',\n title: 'français',\n },\n {\n id: 'it',\n title: 'Italiano',\n },\n {\n id: 'es',\n title: 'Espanol',\n },\n {\n id: 'pl',\n title: 'Polski',\n },\n {\n id: 'zh-ch',\n title: '简体中文',\n },\n ],\n },\n {\n id: 'tempUnit',\n title: 'Temperature units',\n translate: false,\n values: [\n {\n id: '°C',\n title: '°C',\n },\n {\n id: '°F',\n title: '°F',\n },\n ],\n },\n {\n id: 'currency',\n title: 'Currency sign',\n translate: false,\n allowText: true,\n autocomplete: true,\n values: [\n {\n id: '€',\n title: '€',\n },\n {\n id: '$',\n title: '$',\n },\n {\n id: '₽',\n title: '₽',\n },\n {\n id: '₤',\n title: '₤',\n },\n {\n id: 'CHF',\n title: 'CHF',\n },\n ],\n },\n {\n id: 'dateFormat',\n title: 'Date format',\n translate: true,\n values: [\n {\n id: 'DD.MM.YYYY',\n title: 'DD.MM.YYYY',\n },\n {\n id: 'YYYY.MM.DD',\n title: 'YYYY.MM.DD',\n },\n {\n id: 'MM/DD/YYYY',\n title: 'MM/DD/YYYY',\n },\n ],\n },\n {\n id: 'isFloatComma',\n title: 'Float divider sign',\n translate: true,\n values: [\n {\n id: true,\n title: 'comma',\n },\n {\n id: false,\n title: 'point',\n },\n ],\n },\n {\n id: 'defaultHistory',\n title: 'Default History',\n values: [\n { id: '', title: this.props.t('None') },\n ...this.props.histories.map(history => ({\n id: history,\n title: history,\n })),\n ],\n },\n {\n id: 'activeRepo',\n title: 'Default Repository',\n translate: false,\n values: AdminUtils.objectMap(this.props.dataAux.native.repositories, (_repo, name) => ({\n id: name,\n title: name,\n })),\n },\n {\n id: 'expertMode',\n title: 'Expert mode',\n values: [\n { id: true, title: 'on' },\n { id: false, title: 'off (default)' },\n ],\n },\n {\n id: 'defaultLogLevel',\n title: 'Default log level',\n help: 'for new instances',\n translate: false,\n values: [\n { id: 'debug', title: 'debug' },\n { id: 'info', title: 'info' },\n { id: 'warn', title: 'warn' },\n { id: 'error', title: 'error' },\n ],\n },\n {\n id: 'firstDayOfWeek',\n title: 'First day of week',\n translate: true,\n values: [\n { id: 'monday', title: 'Monday' },\n { id: 'sunday', title: 'Sunday' },\n ],\n },\n ];\n }\n\n onMap = (map: Map): void => {\n if (this.props.saving) {\n return;\n }\n if (!this.map || this.map !== map) {\n this.map = map;\n const center: LatLngTuple = [\n parseFloat(\n this.props.data.common.latitude !== undefined\n ? (this.props.data.common.latitude as any as string)\n : '50',\n ) || 0,\n parseFloat(\n this.props.data.common.longitude !== undefined\n ? (this.props.data.common.longitude as any as string)\n : '10',\n ) || 0,\n ];\n\n this.marker = new Marker(center, {\n draggable: true,\n title: I18n.t('Resource location'),\n alt: I18n.t('Resource Location'),\n riseOnHover: true,\n })\n .addTo(map)\n .bindPopup('Popup for any custom information.')\n .on({ dragend: (evt: DragEndEvent) => this.onMarkerDragend(evt) });\n }\n };\n\n getSelect(e: Setting, i: number): JSX.Element | null {\n let value = (this.props.data.common as Record<string, any>)[e.id];\n\n if (e.id === 'defaultLogLevel' && !value) {\n value = 'info';\n }\n\n if (e.id === 'activeRepo' && this.props.multipleRepos) {\n return null;\n }\n\n // if disabled by vendor settings\n if (this.props.adminGuiConfig.admin.settings && this.props.adminGuiConfig.admin.settings[e.id] === false) {\n return null;\n }\n\n if (e.autocomplete && e.values) {\n return (\n <Grid2\n size={{ sm: 6, xs: 12 }}\n key={i}\n >\n <Autocomplete<Setting['values'][0], false, false, true>\n // variant=\"standard\"\n freeSolo\n disabled={this.props.saving}\n options={e.values}\n inputValue={value.toString()}\n onChange={(_evt, newValue) => {\n const id = this.getSettings()[i].id;\n if (typeof newValue === 'string') {\n this.doChange(id, newValue);\n return;\n }\n this.doChange(id, newValue ? newValue.id : '');\n }}\n onInputChange={(_event, newValue) => {\n const id = this.getSettings()[i].id;\n this.doChange(id, newValue);\n }}\n getOptionLabel={option => {\n if (typeof option === 'string') {\n return option;\n }\n if (e.translate) {\n return this.props.t(option.title || option.id.toString());\n }\n return option.title || option.id.toString();\n }}\n renderOption={(props, option) => (\n <li {...props}>\n {e.translate\n ? this.props.t(option.title || option.id.toString())\n : option.title || option.id}\n </li>\n )}\n renderInput={params => (\n <TextField\n {...params}\n variant=\"standard\"\n label={this.props.t(e.title)}\n />\n )}\n />\n </Grid2>\n );\n }\n\n // If value is not in known values, show text input\n if (e.allowText && value && !e.values.find(elem => elem.id === value)) {\n return (\n <Grid2\n size={{ sm: 6, xs: 12 }}\n key={i}\n >\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id={`${e.id}-label`}\n >\n {this.props.t(e.title)}\n </InputLabel>\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id={e.id}\n value={value.toString()}\n onChange={evt => this.handleChange(evt, i)}\n helperText={e.help ? this.props.t(e.help) : ''}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: value.toString() ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.handleChange({ target: { value: '' } }, i)}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n );\n }\n\n const items = e.values.map((elem, index) => (\n <MenuItem\n value={elem.id as string}\n key={index}\n >\n {e.translate ? this.props.t(elem.title || elem.id.toString()) : elem.title || elem.id}\n </MenuItem>\n ));\n\n return (\n <Grid2\n size={{ sm: 6, xs: 12 }}\n key={i}\n >\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id={`${e.id}-label`}\n >\n {this.props.t(e.title)}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id={e.id}\n value={value === undefined ? false : value}\n onChange={evt => this.handleChange(evt, i)}\n displayEmpty\n >\n {items}\n </Select>\n {e.help ? <FormHelperText>{this.props.t(e.help)}</FormHelperText> : null}\n </FormControl>\n </Grid2>\n );\n }\n\n renderDialogConfirm(): JSX.Element | null {\n if (this.state.confirm) {\n return (\n <DialogConfirm\n text={this.props.t('confirm_change_repo')}\n onClose={result => {\n const value = this.state.confirmValue;\n this.setState({ confirm: false, confirmValue: null }, () => {\n if (result) {\n this.doChange('activeRepo', value);\n }\n });\n }}\n />\n );\n }\n\n return null;\n }\n\n getCounters = (): JSX.Element => {\n const items = countries.map((elem, index) => (\n <MenuItem\n value={elem.name}\n key={index}\n >\n {this.props.t(elem.name)}\n </MenuItem>\n ));\n\n return (\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id=\"country-label\"\n >\n {this.props.t('Country:')}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id=\"country\"\n value={this.props.data.common.country}\n onChange={this.handleChangeCountry}\n displayEmpty\n >\n {items}\n </Select>\n </FormControl>\n );\n };\n\n handleChangeCountry = (evt: SelectChangeEvent<string>): void => {\n const value = evt.target.value;\n const id = 'country';\n this.doChange(id, value);\n };\n\n onChangeText = (evt: { target: { value: string } }, id: string): void => {\n const value = evt.target.value;\n this.onChangeInput(value, id);\n\n if (id === 'longitude' || id === 'latitude') {\n if (this.latLongTimer) {\n clearTimeout(this.latLongTimer);\n }\n this.latLongTimer = setTimeout(() => {\n this.latLongTimer = null;\n this.map.flyTo([\n parseFloat(this.props.data.common.latitude as any as string),\n parseFloat(this.props.data.common.longitude as any as string),\n ]);\n this.marker.setLatLng([\n parseFloat(this.props.data.common.latitude as any as string),\n parseFloat(this.props.data.common.longitude as any as string),\n ]);\n }, 500);\n }\n };\n\n onChangeInput = (value: any, id: string, cb?: () => void): void => this.doChange(id, value, cb);\n\n onChangeCity = (evt: { target: { value: string } }): void => {\n this.onChangeText(evt, 'city');\n\n if (this.cityTimer) {\n clearTimeout(this.cityTimer);\n }\n\n this.cityTimer = setTimeout(() => {\n this.cityTimer = null;\n const provider = new OpenStreetMapProvider();\n\n void provider.search({ query: evt.target.value }).then(results => {\n if (results[0]) {\n setTimeout(\n () =>\n this.onChangeInput(results[0].y, 'latitude', () =>\n this.onChangeInput(results[0].x, 'longitude', () =>\n this.onChangeInput(23, 'zoom', () => {\n this.map.flyTo([results[0].y, results[0].x]);\n this.marker.setLatLng([results[0].y, results[0].x]);\n }),\n ),\n ),\n 1200,\n );\n }\n });\n }, 500);\n };\n\n handleChange = (evt: { target: { value: string } }, selectId: number): void => {\n const value = evt.target.value;\n const id = this.getSettings()[selectId].id;\n\n if (\n id === 'activeRepo' &&\n !value.toLowerCase().startsWith('stable') &&\n !value.toLowerCase().includes('default')\n ) {\n this.setState({ confirm: true, confirmValue: value });\n } else {\n this.doChange(id, value);\n }\n };\n\n doChange = (name: string, value: any, cb?: () => void): void => {\n const newData = AdminUtils.clone(this.props.data);\n (newData.common as Record<string, any>)[name] = value;\n this.props.onChange(newData, null, () => cb && cb());\n };\n\n onMarkerDragend = (evt: DragEndEvent): void => {\n // ignore changes during saving\n if (!this.props.saving) {\n const ll = JSON.parse(JSON.stringify(evt.target._latlng));\n this.doChange('latitude', ll.lat, () => this.doChange('longitude', ll.lng));\n }\n };\n\n render(): JSX.Element {\n const selectors = this.getSettings().map((e, i) => this.getSelect(e, i));\n\n const center: LatLngTuple = [\n parseFloat(\n this.props.data.common.latitude !== undefined\n ? (this.props.data.common.latitude as any as string)\n : '50',\n ) || 0,\n parseFloat(\n this.props.data.common.longitude !== undefined\n ? (this.props.data.common.longitude as any as string)\n : '10',\n ) || 0,\n ];\n\n const { zoom } = this.state;\n\n return (\n <div style={styles.tabPanel}>\n {this.renderDialogConfirm()}\n <Grid2\n container\n spacing={3}\n >\n <Grid2 size={{ lg: 6, md: 12 }}>\n <Grid2\n container\n spacing={3}\n >\n <Grid2 size={{ xs: 12 }}>\n <TextField\n disabled={this.props.saving}\n fullWidth\n variant=\"standard\"\n id=\"siteName\"\n label={this.props.t('Site name')}\n // @ts-expect-error Fixed in js-controller 7\n value={this.props.data.common.siteName || ''}\n onChange={e => this.doChange('siteName', e.target.value)}\n helperText={this.props.t(\n \"This name will be shown in admin's header. Just to identify the whole installation\",\n )}\n slotProps={{\n input: {\n // @ts-expect-error Fixed in js-controller 7\n endAdornment: this.props.data.common.siteName ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.doChange('siteName', '')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </Grid2>\n {selectors}\n </Grid2>\n </Grid2>\n <Grid2 size={{ lg: 6, md: 12 }}>\n <MapContainer\n style={styles.map}\n center={center}\n zoom={zoom}\n maxZoom={18}\n attributionControl={!this.props.saving}\n zoomControl={!this.props.saving}\n doubleClickZoom={!this.props.saving}\n scrollWheelZoom={!this.props.saving}\n dragging={!this.props.saving}\n // animate\n easeLinearity={0.35}\n >\n <TileLayer url=\"https://{s}.tile.osm.org/{z}/{x}/{y}.png\" />\n <MyMapComponent addMap={map => this.onMap(map)} />\n </MapContainer>\n </Grid2>\n </Grid2>\n <Grid2\n container\n spacing={6}\n >\n <Grid2 size={{ sm: 6, xs: 12, md: 3 }}>{this.getCounters()}</Grid2>\n <Grid2 size={{ sm: 6, xs: 12, md: 3 }}>\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id=\"city-label\"\n >\n {this.props.t('City:')}\n </InputLabel>\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id=\"city\"\n label={this.props.t('City:')}\n value={this.props.data.common.city}\n onChange={evt => this.onChangeCity(evt)}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: this.props.data.common.city ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onChangeCity({ target: { value: '' } })}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ sm: 6, xs: 12, md: 3 }}>\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id=\"latitude-label\"\n >\n {this.props.t('Latitude:')}\n </InputLabel>\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id=\"latitude\"\n label={this.props.t('Latitude:')}\n value={this.props.data.common.latitude || 0}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n },\n }}\n onChange={evt => this.onChangeText(evt, 'latitude')}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ sm: 6, xs: 12, md: 3 }}>\n <FormControl\n style={styles.formControl}\n variant=\"standard\"\n >\n <InputLabel\n shrink\n id=\"longitude-label\"\n >\n {this.props.t('Longitude:')}\n </InputLabel>\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id=\"longitude\"\n label={this.props.t('Longitude:')}\n value={this.props.data.common.longitude || 0}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n },\n }}\n onChange={evt => this.onChangeText(evt, 'longitude')}\n />\n </FormControl>\n </Grid2>\n </Grid2>\n </div>\n );\n }\n}\n\nexport default withWidth()(MainSettingsDialog);\n","import React from 'react';\nimport { SortableContainer, SortableElement, SortableHandle } from 'react-sortable-hoc';\n\nimport {\n Checkbox,\n Fab,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TextField,\n Tooltip,\n InputAdornment,\n IconButton,\n Select,\n MenuItem,\n Typography,\n} from '@mui/material';\n\nimport {\n Add as AddIcon,\n Delete as DeleteIcon,\n Menu as DragHandleIcon,\n SettingsBackupRestore as RestoreIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport { I18n, withWidth, DialogConfirm, type Translate, type ThemeType } from '@iobroker/adapter-react-v5';\nimport { InfoBox } from '@foxriver76/iob-component-lib';\n\nimport type { AdminGuiConfig, ioBrokerObject } from '@/types';\nimport IsVisible from '@/components/IsVisible';\nimport { AUTO_UPGRADE_OPTIONS_MAPPING, AUTO_UPGRADE_SETTINGS } from '@/helpers/utils';\nimport AdminUtils from '../../helpers/AdminUtils';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, any> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n table: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n buttonPanel: {\n paddingBottom: 20,\n display: 'flex',\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n marginLeft: 40,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n },\n dragColumn: {\n width: 32,\n },\n enableColumn: {\n width: 110,\n },\n stableColumn: {\n width: 80,\n },\n upgradePolicyColumn: {\n width: 190,\n textAlign: 'center',\n },\n buttonColumn: {\n width: 80,\n },\n nameRow: {\n width: 220,\n },\n input: {\n width: '100%',\n },\n checkboxError: {\n '& span:first-child': {\n border: '2px solid #FF0000',\n borderRadius: 4,\n },\n },\n fabButton: {\n marginRight: 8,\n width: 44,\n height: 44,\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\n// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents\nexport type Repository = Record<string, ioBroker.RepositoryInformation>;\n\ntype RepositoryArray = Array<{ title: string; link: string }>;\n\nfunction repoToArray(repos: Repository): RepositoryArray {\n return AdminUtils.objectMap(repos, (repo, name) => ({\n title: name,\n link: repo.link,\n }));\n}\n\nfunction arrayToRepo(array: RepositoryArray): Repository {\n const result: Repository = {};\n for (const item of array) {\n // @ts-expect-error will be fixed in js-controller\n result[item.title] = { link: item.link };\n }\n\n return result;\n}\n\nconst DragHandle = SortableHandle(() => <DragHandleIcon style={{ marginTop: 8, marginRight: 0, cursor: 'handle' }} />);\n\ninterface RepositoriesDialogProps {\n t: Translate;\n data: ioBrokerObject<{ repositories: Repository }>;\n dataAux: ioBrokerObject<object, { activeRepo: string | string[] }>;\n multipleRepos: boolean;\n repoInfo: Repository;\n saving: boolean;\n onChange: (\n data: ioBrokerObject<{ repositories: Repository }>,\n dataAux?: ioBrokerObject<object, { activeRepo: string | string[] }>,\n ) => void;\n adminGuiConfig: AdminGuiConfig;\n themeType: ThemeType;\n}\n\ninterface RepositoriesDialogState {\n error: boolean;\n confirm: boolean;\n confirmValue: {\n newData: ioBrokerObject<object, { activeRepo: string | string[] }>;\n error: boolean;\n } | null;\n}\n\nconst SortableList = SortableContainer<{ value: any }>(({ value }: { value: any }) => value);\nconst SortableItem = SortableElement<{ value: any }>(({ value }: { value: any }) => value);\n\nclass RepositoriesDialog extends BaseSystemSettingsDialog<RepositoriesDialogProps, RepositoriesDialogState> {\n constructor(props: RepositoriesDialogProps) {\n super(props);\n const repos = (\n typeof this.props.dataAux.common.activeRepo === 'string'\n ? [this.props.dataAux.common.activeRepo]\n : this.props.dataAux.common.activeRepo\n ).filter(r => r);\n\n this.state = {\n error: !repos.length,\n confirm: false,\n confirmValue: null,\n };\n }\n\n onValueChanged(value: any, id: string, name: 'title' | 'link'): void {\n const newData = AdminUtils.clone(this.props.data);\n const array = repoToArray(newData.native.repositories);\n const item = array.find(element => element.title === id);\n const oldTitle = item.title;\n item[name] = value;\n newData.native.repositories = arrayToRepo(array);\n\n let newConfig;\n if (\n ((typeof this.props.dataAux.common.activeRepo === 'string' &&\n this.props.dataAux.common.activeRepo === id) ||\n (typeof this.props.dataAux.common.activeRepo !== 'string' &&\n this.props.dataAux.common.activeRepo.includes(id))) &&\n name === 'title'\n ) {\n newConfig = this.getUpdateDefaultRepo(value, newData, oldTitle, value);\n }\n\n this.props.onChange(newData, newConfig);\n }\n\n onDelete(id: string): void {\n const newData = AdminUtils.clone(this.props.data);\n const array = repoToArray(newData.native.repositories);\n const index = array.findIndex(element => element.title === id);\n array.splice(index, 1);\n newData.native.repositories = arrayToRepo(array);\n if (this.props.dataAux.common.activeRepo === id) {\n if (Object.keys(newData.native.repositories).length) {\n // set first repo as active\n this.props.onChange(newData, this.getUpdateDefaultRepo(Object.keys(newData.native.repositories)[0]));\n } else {\n this.props.onChange(newData, this.getUpdateDefaultRepo(''));\n }\n } else {\n this.props.onChange(newData);\n }\n }\n\n onAdd = (): void => {\n const newData = AdminUtils.clone(this.props.data);\n const array = repoToArray(newData.native.repositories);\n array.push({\n title: '__',\n link: '',\n });\n newData.native.repositories = arrayToRepo(array);\n this.props.onChange(newData);\n };\n\n onRestore = (): void => {\n const newData = AdminUtils.clone(this.props.data);\n newData.native.repositories = {\n // @ts-expect-error will be fixed in js-controller\n stable: {\n link: 'http://download.iobroker.net/sources-dist.json',\n },\n // @ts-expect-error will be fixed in js-controller\n beta: {\n link: 'http://download.iobroker.net/sources-dist-latest.json',\n },\n };\n // Store old information if already read\n const oldStable = Object.keys(this.props.data.native.repositories).find(\n name => this.props.data.native.repositories[name].link === newData.native.repositories.stable.link,\n );\n if (oldStable) {\n if (newData.native.repositories.stable.json) {\n newData.native.repositories.stable.json = this.props.data.native.repositories[oldStable].json;\n }\n if (newData.native.repositories.stable.hash) {\n newData.native.repositories.stable.hash = this.props.data.native.repositories[oldStable].hash;\n }\n if (newData.native.repositories.stable.time) {\n newData.native.repositories.stable.time = this.props.data.native.repositories[oldStable].time;\n }\n }\n const oldBeta = Object.keys(this.props.data.native.repositories).find(\n name => this.props.data.native.repositories[name].link === newData.native.repositories.beta.link,\n );\n if (oldBeta) {\n if (newData.native.repositories.beta.json) {\n newData.native.repositories.beta.json = this.props.data.native.repositories[oldBeta].json;\n }\n if (newData.native.repositories.beta.hash) {\n newData.native.repositories.beta.hash = this.props.data.native.repositories[oldBeta].hash;\n }\n if (newData.native.repositories.beta.time) {\n newData.native.repositories.beta.time = this.props.data.native.repositories[oldBeta].time;\n }\n }\n\n const newConfig: ioBrokerObject<Record<string, unknown>, { activeRepo: string | string[] }> = AdminUtils.clone(\n this.props.dataAux,\n );\n if (!this.props.multipleRepos) {\n newConfig.common.activeRepo = 'stable';\n this.props.onChange(newData, newConfig);\n return;\n }\n newConfig.common.activeRepo = ['stable'];\n newConfig.common.adapterAutoUpgrade = { repositories: {}, defaultPolicy: 'none' };\n\n this.props.onChange(newData, newConfig);\n return null;\n };\n\n getUpdateDefaultRepo = (\n newRepo: string,\n newData?: ioBrokerObject<{ repositories: Repository }>,\n oldTitle?: string,\n newTitle?: string,\n ): ioBrokerObject<object, { activeRepo: string | string[] }> => {\n const newConfig = AdminUtils.clone(this.props.dataAux);\n if (!this.props.multipleRepos) {\n newConfig.common.activeRepo = newRepo;\n return newConfig;\n }\n newData = newData || AdminUtils.clone(this.props.data);\n if (oldTitle !== undefined && typeof newConfig.common.activeRepo !== 'string') {\n const pos = newConfig.common.activeRepo.indexOf(oldTitle);\n if (pos !== -1) {\n newConfig.common.activeRepo[pos] = newTitle;\n }\n }\n\n if (typeof newConfig.common.activeRepo === 'string' && newConfig.common.activeRepo) {\n newConfig.common.activeRepo = [newConfig.common.activeRepo];\n }\n newConfig.common.activeRepo = newConfig.common.activeRepo || [];\n if (typeof newConfig.common.activeRepo !== 'string') {\n if (!newConfig.common.activeRepo.includes(newRepo)) {\n // sort activeRepo anew\n const items = repoToArray(newData.native.repositories);\n newConfig.common.activeRepo.sort((a, b) => {\n const indexA = items.findIndex(item => item.title === a);\n const indexB = items.findIndex(item => item.title === b);\n return indexA - indexB;\n });\n }\n }\n\n return newConfig;\n };\n\n onSortEnd = ({ oldIndex, newIndex }: { oldIndex: number; newIndex: number }): void => {\n console.log(oldIndex, newIndex);\n const newData = AdminUtils.clone(this.props.data);\n const items = repoToArray(newData.native.repositories);\n const item = items[oldIndex];\n items.splice(oldIndex, 1);\n items.splice(newIndex, 0, item);\n newData.native.repositories = arrayToRepo(items);\n\n const newConfig = AdminUtils.clone(this.props.dataAux);\n\n if (typeof newConfig.common.activeRepo === 'string') {\n newConfig.common.activeRepo = [newConfig.common.activeRepo];\n }\n\n // sort activeRepo anew\n newConfig.common.activeRepo.sort((a, b) => {\n const indexA = items.findIndex(it => it.title === a);\n const indexB = items.findIndex(it => it.title === b);\n return indexA - indexB;\n });\n\n this.props.onChange(newData, newConfig);\n };\n\n onChangeActiveRepo(\n newData: ioBrokerObject<object, { activeRepo: string | string[] }>,\n error: boolean,\n showWarning: boolean,\n ): void {\n if (showWarning) {\n this.setState({ confirm: true, confirmValue: { newData, error } });\n } else {\n this.setState({ error }, () => this.props.onChange(null, newData));\n }\n }\n\n renderDialogConfirm(): React.JSX.Element {\n if (this.state.confirm) {\n return (\n <DialogConfirm\n text={this.props.t('confirm_change_repo')}\n onClose={result => {\n const value = this.state.confirmValue;\n this.setState({ confirm: false, confirmValue: null }, () => {\n if (result) {\n this.setState({ error: value.error }, () => this.props.onChange(null, value.newData));\n }\n });\n }}\n />\n );\n }\n return null;\n }\n\n renderSortableItem(item: RepositoryArray[number], index: number): React.JSX.Element {\n const errorName =\n !item.title ||\n item.title.trimStart() !== item.title ||\n (item.title.length < 3 && !!item.title.match(/^\\d+$/));\n\n const result = (\n <TableRow className=\"float_row\">\n <TableCell\n style={styles.dragColumn}\n className=\"float_cell\"\n title={this.props.t('Drag and drop to reorder')}\n >\n <DragHandle />\n </TableCell>\n <TableCell\n style={styles.enableColumn}\n className=\"float_cell\"\n >\n {index + 1}\n {this.props.multipleRepos ? (\n <Checkbox\n disabled={\n this.props.adminGuiConfig.admin.settings.activeRepo === false || this.props.saving\n }\n sx={this.state.error ? styles.checkboxError : undefined}\n title={this.state.error ? I18n.t('At least one repo must be selected') : ''}\n checked={\n typeof this.props.dataAux.common.activeRepo === 'string'\n ? this.props.dataAux.common.activeRepo === item.title\n : this.props.dataAux.common.activeRepo.includes(item.title)\n }\n onChange={() => {\n let showWarning = false;\n const newData = AdminUtils.clone(this.props.dataAux);\n if (typeof newData.common.activeRepo === 'string') {\n newData.common.activeRepo = [newData.common.activeRepo];\n }\n let pos = newData.common.activeRepo.indexOf(item.title);\n if (pos === -1) {\n newData.common.activeRepo.push(item.title);\n // newData.common.activeRepo.sort();\n // sort repos according to order of repos\n const arr = repoToArray(this.props.data.native.repositories);\n newData.common.activeRepo.sort((a, b) => {\n const indexA = arr.findIndex(it => it.title === a);\n const indexB = arr.findIndex(it => it.title === b);\n return indexA - indexB;\n });\n\n showWarning = item.title.toLowerCase().startsWith('beta');\n } else {\n newData.common.activeRepo.splice(pos, 1);\n }\n\n if (\n item.title.toLowerCase().startsWith('beta') &&\n newData.common.activeRepo.find(r => r.toLowerCase().startsWith('stable'))\n ) {\n pos = newData.common.activeRepo.findIndex(r =>\n r.toLowerCase().startsWith('stable'),\n );\n newData.common.activeRepo.splice(pos, 1);\n } else if (\n item.title.toLowerCase().startsWith('stable') &&\n newData.common.activeRepo.find(r => r.toLowerCase().startsWith('beta'))\n ) {\n pos = newData.common.activeRepo.findIndex(r => r.toLowerCase().startsWith('beta'));\n newData.common.activeRepo.splice(pos, 1);\n }\n\n const _error = !newData.common.activeRepo.length;\n this.onChangeActiveRepo(newData, _error, showWarning);\n }}\n />\n ) : null}\n </TableCell>\n <TableCell\n style={styles.stableColumn}\n className=\"float_cell\"\n >\n <Tooltip\n title={I18n.t(\n 'Flag will be automatically detected as repository will be read for the first time',\n )}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <span>\n <Checkbox\n disabled\n // @ts-expect-error will be fixed in js-controller 7\n checked={this.props.repoInfo[item.title]?.stable}\n indeterminate={!this.props.repoInfo[item.title]}\n />\n </span>\n </Tooltip>\n </TableCell>\n <TableCell\n style={styles.upgradePolicyColumn}\n className=\"float_cell\"\n >\n <Tooltip\n title={I18n.t('Allow automatic adapter upgrades for this repository')}\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n >\n <span>\n <Checkbox\n disabled={this.props.saving}\n checked={this.props.dataAux.common?.adapterAutoUpgrade?.repositories[item.title]}\n onChange={e => {\n const sysConfig = AdminUtils.clone(this.props.dataAux);\n\n if (!sysConfig.common.adapterAutoUpgrade) {\n sysConfig.common.adapterAutoUpgrade = {\n repositories: {},\n defaultPolicy: 'none',\n };\n }\n\n sysConfig.common.adapterAutoUpgrade.repositories[item.title] = e.target.checked;\n\n this.props.onChange(this.props.data, sysConfig);\n }}\n />\n </span>\n </Tooltip>\n </TableCell>\n <TableCell\n style={styles.nameRow}\n className=\"float_cell\"\n >\n <TextField\n variant=\"standard\"\n disabled={this.props.saving}\n value={item.title}\n style={styles.input}\n className=\"xs-centered\"\n onChange={evt => this.onValueChanged(evt.target.value, item.title, 'title')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n endAdornment: item.title ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onValueChanged('', item.title, 'title')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n error={errorName}\n helperText={errorName ? I18n.t('Invalid name') : undefined}\n />\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id={`default_${index}`}\n value={item.link}\n style={styles.input}\n className=\"xs-centered\"\n onChange={evt => this.onValueChanged(evt.target.value, item.title, 'link')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: item.link ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onValueChanged('', item.title, 'link')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </TableCell>\n <TableCell\n style={styles.buttonColumn}\n className=\"float_cell\"\n >\n <Fab\n disabled={this.props.saving}\n size=\"small\"\n color=\"secondary\"\n aria-label=\"add\"\n onClick={() => this.onDelete(item.title)}\n >\n <DeleteIcon />\n </Fab>\n </TableCell>\n </TableRow>\n );\n\n return (\n <SortableItem\n key={index}\n index={index}\n value={result}\n />\n );\n }\n\n renderSortableList(items: RepositoryArray): React.JSX.Element {\n const result = (\n <Table style={styles.table}>\n <TableHead>\n <TableRow className=\"float_row\">\n <TableCell\n style={styles.dragColumn}\n className=\"float_cell\"\n />\n <TableCell\n style={styles.enableColumn}\n className=\"float_cell\"\n >\n {this.props.multipleRepos ? I18n.t('Active') : ''}\n </TableCell>\n <TableCell\n style={styles.stableColumn}\n className=\"float_cell\"\n >\n {I18n.t('Stable')}\n </TableCell>\n <TableCell\n style={styles.upgradePolicyColumn}\n className=\"float_cell\"\n >\n {I18n.t('Auto-Upgrade')}\n </TableCell>\n <TableCell\n style={styles.nameRow}\n className=\"float_cell\"\n >\n {this.props.t('name')}\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">{this.props.t('link')}</TableCell>\n <TableCell\n style={styles.buttonColumn}\n className=\"float_cell\"\n >\n {' '}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{items.map((item, index) => this.renderSortableItem(item, index))}</TableBody>\n </Table>\n );\n\n return (\n <SortableList\n helperClass=\"draggable-item\"\n useDragHandle\n lockAxis=\"y\"\n onSortEnd={this.onSortEnd}\n value={result}\n />\n );\n }\n\n /**\n * Render the auto upgrade policy\n */\n renderAutoUpgradePolicy(): React.JSX.Element {\n const policy: ioBroker.AutoUpgradePolicy =\n this.props.dataAux.common.adapterAutoUpgrade?.defaultPolicy || 'none';\n const activatedRepos = this.props.dataAux.common.adapterAutoUpgrade?.repositories || {};\n\n return (\n <div style={{ display: 'flex', marginLeft: 20, flexDirection: 'column' }}>\n <div style={{ display: 'flex', alignItems: 'center' }}>\n <Typography>\n {I18n.t('Allow only the following upgrades to be performed automatically:')}\n </Typography>\n <Select\n variant=\"standard\"\n sx={{ marginLeft: 1, marginBottom: 1 }}\n value={policy}\n onChange={e => {\n const sysConfig = AdminUtils.clone(this.props.dataAux);\n\n if (!sysConfig.common.adapterAutoUpgrade) {\n sysConfig.common.adapterAutoUpgrade = { repositories: {}, defaultPolicy: 'none' };\n }\n\n sysConfig.common.adapterAutoUpgrade.defaultPolicy = e.target.value;\n\n this.props.onChange(this.props.data, sysConfig);\n }}\n >\n {AUTO_UPGRADE_SETTINGS.map(option => (\n <MenuItem\n value={option}\n key={option}\n >\n {AUTO_UPGRADE_OPTIONS_MAPPING[option]}\n </MenuItem>\n ))}\n </Select>\n </div>\n <IsVisible value={!!(activatedRepos.beta || activatedRepos['Beta (latest)']) && policy !== 'none'}>\n <InfoBox type=\"warning\">{I18n.t('repo_update_hint')}</InfoBox>\n </IsVisible>\n <IsVisible value={policy === 'major'}>\n <InfoBox type=\"warning\">\n {I18n.t(\n 'The current selected configuration will allow to automatically pull in incompatible changes of this adapter!',\n )}\n </InfoBox>\n </IsVisible>\n </div>\n );\n }\n\n render(): React.JSX.Element {\n const items = repoToArray(this.props.data.native.repositories);\n\n return (\n <div style={styles.tabPanel}>\n {this.renderDialogConfirm()}\n <div style={styles.buttonPanel}>\n <Fab\n size=\"small\"\n color=\"primary\"\n disabled={this.props.saving}\n aria-label=\"add\"\n onClick={this.onAdd}\n style={styles.fabButton}\n title={this.props.t('Add new line to the repository list')}\n >\n <AddIcon />\n </Fab>\n <Fab\n size=\"small\"\n disabled={this.props.saving}\n onClick={this.onRestore}\n style={styles.fabButton}\n title={this.props.t('Restore repository list to default')}\n >\n <RestoreIcon />\n </Fab>\n {this.renderAutoUpgradePolicy()}\n </div>\n <TableContainer>{this.renderSortableList(items)}</TableContainer>\n </div>\n );\n }\n}\n\nexport default withWidth()(RepositoriesDialog);\n","import React, { type JSX } from 'react';\n\nimport { Button, Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TextField } from '@mui/material';\n\nimport { Refresh as IconRefresh } from '@mui/icons-material';\n\nimport { withWidth, Utils, type AdminConnection, type Translate } from '@iobroker/adapter-react-v5';\n\nimport { type ioBrokerObject } from '@/types';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n table: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n input: {\n width: 250,\n marginRight: 16,\n },\n button: {\n marginTop: 16,\n },\n uuidGreen: {\n color: 'green',\n },\n uuidGrey: {\n color: 'grey',\n },\n tableName: {\n width: 200,\n },\n tableDate: {\n width: 150,\n textAlign: 'right',\n },\n tableUuid: {\n width: 300,\n },\n tableValid: {\n width: 100,\n },\n tableVersion: {\n width: 50,\n },\n tableUsedIn: {\n width: 100,\n },\n tableDiv: {\n overflow: 'auto',\n height: 'calc(100% - 75px)',\n },\n tableCommercial: {\n width: 100,\n },\n licenseId: {\n fontSize: 10,\n opacity: 0.5,\n fontStyle: 'italic',\n },\n};\n\ninterface License {\n id: string;\n product: string;\n time: number;\n uuid: string;\n validTill: string;\n version: string;\n usedBy: string;\n invoice: string;\n}\n\n// Todo: implement license object in js-controller - 'system.licenses'\ntype LicenseObject = ioBrokerObject<{\n licenses: License[];\n login: string;\n password: string;\n}>;\n\ninterface LicensesDialogProps {\n t: Translate;\n data: LicenseObject;\n host: string;\n saving: boolean;\n socket: AdminConnection;\n onChange: (data: LicenseObject) => void;\n}\n\ninterface LicensesDialogState {\n uuid: string;\n requesting: boolean;\n licenses: License[];\n // readTime: number;\n}\n\nclass LicensesDialog extends BaseSystemSettingsDialog<LicensesDialogProps, LicensesDialogState> {\n constructor(props: LicensesDialogProps) {\n super(props);\n\n this.state = {\n uuid: '',\n requesting: false,\n licenses: this.props.data.native.licenses || [],\n // readTime: this.props.data.native.readTime || 0,\n };\n }\n\n onLicensesChanged = (id: string, obj: ioBroker.Object | null | undefined): void => {\n if (id === 'system.licenses') {\n obj = obj || ({} as ioBroker.Object);\n obj.native = obj.native || {};\n obj.native.licenses = obj.native.licenses || [];\n\n // if licenses changed\n if (JSON.stringify(obj.native.licenses) !== JSON.stringify(this.state.licenses)) {\n window.alert(this.props.t('New licenses were stored'));\n this.setState({ licenses: obj.native.licenses /* , readTime: obj.native.licenses.readTime || 0 */ });\n } else {\n window.alert(this.props.t('Licenses have not changed'));\n }\n }\n };\n\n componentDidMount(): void {\n void this.props.socket.getObject('system.meta.uuid').then(obj => {\n this.props.socket\n .subscribeObject('system.licenses', this.onLicensesChanged)\n .catch(e => window.alert(`Cannot subscribe on system.licenses: ${e}`));\n this.setState({ uuid: obj.native.uuid });\n });\n }\n\n componentWillUnmount(): void {\n void this.props.socket.unsubscribeObject('system.licenses', this.onLicensesChanged);\n }\n\n doChange(name: 'login' | 'password', value: string): void {\n const newData: LicenseObject = Utils.clone(this.props.data) as LicenseObject;\n newData.native[name] = value;\n this.props.onChange(newData);\n }\n\n async requestLicenses(): Promise<void> {\n this.setState({ requesting: true });\n try {\n let password = this.props.data.native.password;\n // if the password was not changed\n if (password === '__SOME_PASSWORD__') {\n const obj = await this.props.socket.getObject('system.licenses');\n // if login was changed\n if (obj.native.login !== this.props.data.native.login) {\n password = await this.props.socket.decrypt(obj.native.password);\n } else {\n password = null;\n }\n }\n\n const licenses = await this.props.socket.updateLicenses(\n password ? this.props.data.native.login : null,\n password,\n );\n\n if (licenses !== null && licenses !== undefined) {\n if (password) {\n window.alert(\n this.props.t('Licenses were not stored. They will be stored after the settings will be saved'),\n );\n }\n\n this.setState({ licenses, requesting: false });\n } else {\n this.setState({ requesting: false });\n }\n } catch (error) {\n this.setState({ requesting: false });\n if (error === 'permissionError') {\n window.alert(this.props.t('May not trigger \"updateLicenses\"'));\n } else if (error === 'Authentication required') {\n window.alert(this.props.t('Cannot update licenses: %s', this.props.t('Authentication required')));\n } else {\n window.alert(this.props.t('Cannot update licenses: %s', error));\n }\n }\n }\n\n renderLicenses(): JSX.Element {\n return (\n <div style={styles.tableDiv}>\n <TableContainer>\n <Table\n stickyHeader\n size=\"small\"\n >\n <TableHead>\n <TableRow>\n <TableCell style={styles.tableName}>{this.props.t('Product')}</TableCell>\n <TableCell style={styles.tableDate}>{this.props.t('Ordered at')}</TableCell>\n <TableCell style={styles.tableUuid}>{this.props.t('UUID')}</TableCell>\n <TableCell style={styles.tableValid}>{this.props.t('Valid till')}</TableCell>\n <TableCell style={styles.tableVersion}>{this.props.t('V')}</TableCell>\n <TableCell style={styles.tableUsedIn}>{this.props.t('Used by')}</TableCell>\n <TableCell style={styles.tableCommercial}>{this.props.t('Invoice number')}</TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n {this.state.licenses &&\n this.state.licenses.map(license => (\n <TableRow key={license.id}>\n <TableCell style={styles.tableName}>\n <div>{license.product}</div>\n <div style={styles.licenseId}>{license.id}</div>\n </TableCell>\n <TableCell style={styles.tableDate}>\n {new Date(license.time).toLocaleDateString()}\n </TableCell>\n <TableCell\n style={{\n ...styles.tableUuid,\n ...(license.uuid && this.state.uuid === license.uuid\n ? styles.uuidGreen\n : license.uuid\n ? styles.uuidGrey\n : undefined),\n }}\n >\n {license.uuid || ''}\n </TableCell>\n <TableCell style={styles.tableValid}>\n {license.validTill === '0000-00-00 00:00:00' ? '' : license.validTill || ''}\n </TableCell>\n <TableCell style={styles.tableVersion}>{license.version || ''}</TableCell>\n <TableCell style={styles.tableUsedIn}>{license.usedBy || ''}</TableCell>\n <TableCell style={styles.tableCommercial}>\n {license.invoice !== 'free'\n ? license.invoice === 'MANUALLY_CREATED'\n ? '✓'\n : license.invoice\n : '-'}\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </div>\n );\n }\n\n render(): JSX.Element {\n return (\n <div style={styles.tabPanel}>\n <TextField\n variant=\"standard\"\n style={styles.input}\n disabled={this.props.saving || this.state.requesting}\n value={this.props.data.native.login}\n helperText={this.props.t('for ioBroker.net portal')}\n label={this.props.t('Login/Email')}\n onChange={e => this.doChange('login', e.target.value)}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n />\n <TextField\n variant=\"standard\"\n disabled={this.props.saving || this.state.requesting}\n style={styles.input}\n type=\"password\"\n value={this.props.data.native.password}\n helperText={this.props.t('for ioBroker.net portal')}\n label={this.props.t('Password')}\n onChange={e => this.doChange('password', e.target.value)}\n slotProps={{\n input: {\n autoComplete: 'new-password',\n },\n htmlInput: {\n autoComplete: 'off',\n },\n }}\n />\n <Button\n variant=\"contained\"\n startIcon={<IconRefresh />}\n disabled={\n this.state.requesting ||\n this.props.saving ||\n !this.props.host ||\n !this.props.data.native.password ||\n !this.props.data.native.login\n }\n onClick={() => this.requestLicenses()}\n style={styles.button}\n color=\"grey\"\n >\n {this.props.t('Check')}\n </Button>\n {this.renderLicenses()}\n </div>\n );\n }\n}\n\nexport default withWidth()(LicensesDialog);\n","import React, { type JSX } from 'react';\nimport Dropzone from 'react-dropzone';\n\nimport {\n Fab,\n IconButton,\n InputAdornment,\n Paper,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TextField,\n} from '@mui/material';\n\nimport { Add as AddIcon, Delete as DeleteIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport { withWidth, I18n, type Translate } from '@iobroker/adapter-react-v5';\n\nimport { type ioBrokerObject } from '@/types';\nimport AdminUtils from '../../helpers/AdminUtils';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\n// icons\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n position: 'relative',\n },\n tableContainer: {\n zIndex: 100,\n },\n table: {\n display: 'flex',\n flexDirection: 'column',\n width: '100%',\n },\n buttonPanel: {\n paddingBottom: 20,\n display: 'flex',\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n marginLeft: 40,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n },\n littleRow: {\n width: 110,\n },\n nameRow: {\n width: 220,\n },\n input: {\n width: '100%',\n },\n};\n\ntype CertificateArray = {\n title: string;\n data: string;\n}[];\n\ntype Certificate = Record<string, string>;\n\ninterface CertificatesDialogProps {\n t: Translate;\n // TODO: implement certificates in js-controller - 'system.certificates'\n data: ioBrokerObject<CertificateArray>;\n onChange: (data: ioBrokerObject<CertificateArray>) => void;\n saving: boolean;\n width: string;\n}\n\ninterface CertificatesDialogState {\n chClass: boolean;\n}\n\nclass CertificatesDialog extends BaseSystemSettingsDialog<CertificatesDialogProps, CertificatesDialogState> {\n constructor(props: CertificatesDialogProps) {\n super(props);\n\n this.state = {\n chClass: false,\n };\n }\n\n static certToArray(certs: Certificate): CertificateArray {\n return AdminUtils.objectMap(certs, (cert, name: string) => ({\n title: name,\n data: cert,\n }));\n }\n\n static arrayToCert(array: CertificateArray): Certificate {\n const result: Record<string, string> = {};\n array.forEach(e => {\n result[e.title] = e.data;\n });\n\n return result;\n }\n\n static detectType(name: string): string {\n name = name.toLowerCase();\n\n if (name.includes('public') || name.includes('cert')) {\n return 'public';\n }\n if (name.includes('priv') || name.includes('key')) {\n return 'private';\n }\n if (name.includes('chain') || name.includes('ca')) {\n return 'chained';\n }\n return '';\n }\n\n render(): JSX.Element {\n const arr = CertificatesDialog.certToArray(this.props.data.native.certificates);\n\n const rows = arr.map((e, i) => {\n const type = CertificatesDialog.detectType(e.title);\n\n return (\n <TableRow\n key={i}\n className=\"float_row\"\n >\n <TableCell\n style={styles.littleRow}\n className=\"float_cell\"\n >\n {i + 1}\n </TableCell>\n <TableCell\n style={styles.nameRow}\n className=\"float_cell\"\n >\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n value={e.title}\n style={styles.input}\n className=\"xs-centered\"\n onChange={evt => this.onChangeText(evt.target.value, e.title, 'title')}\n error={!type}\n helperText={\n type ||\n I18n.t(\n 'Unknown type: use in name \"private\", \"public\" or \"chained\" to define the certificate type',\n )\n }\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: e.title ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onChangeText('', e.title, 'title')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id={`default_${i}`}\n value={e.data}\n style={styles.input}\n className=\"xs-centered\"\n onChange={evt => {\n let value = evt.target.value.replace(/\\r/g, '').replace(/\\n/g, '');\n if (value.startsWith('--')) {\n const parts = value.split('-----');\n parts[2] = parts[2].replace(/\\s/g, '');\n value = `-----${parts[1]}-----\\r\\n${parts[2]}\\r\\n-----${parts[3]}-----`;\n }\n\n this.onChangeText(value, e.title, 'data');\n }}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: e.data ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onChangeText('', e.title, 'data')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </TableCell>\n <TableCell\n style={styles.littleRow}\n className=\"float_cell\"\n >\n <Fab\n disabled={this.props.saving}\n size=\"small\"\n color=\"secondary\"\n aria-label=\"add\"\n onClick={() => this.onDelete(e.title)}\n >\n <DeleteIcon />\n </Fab>\n </TableCell>\n </TableRow>\n );\n });\n return (\n <div style={styles.tabPanel}>\n <Dropzone noClick>\n {({ getRootProps, getInputProps, acceptedFiles, fileRejections }) => (\n <div\n {...getRootProps({\n className: this.state.chClass ? 'drop-container drop-dop' : 'drop-container',\n onDragEnter: () => this.setState({ chClass: true }),\n onDragLeave: () => this.setState({ chClass: false }),\n onDrop: () => {\n if (this.props.saving) {\n // ignore\n return;\n }\n if (fileRejections.length) {\n const msg: string[] = [];\n fileRejections.forEach(e => {\n const m = `${e.file.name}: `;\n const mm: string[] = [];\n e.errors.forEach(ee => mm.push(ee.message));\n msg.push(m + mm.join(','));\n });\n\n alert(msg.join(', '));\n }\n\n if (acceptedFiles.length) {\n acceptedFiles.forEach(file => {\n const reader = new FileReader();\n reader.onload = e => this.onAdd(file.name, e.target.result as string);\n reader.readAsText(file);\n });\n } else if (!fileRejections.length) {\n alert(this.props.t('No files exists'));\n }\n\n this.setState({ chClass: false });\n },\n })}\n >\n <input {...getInputProps()} />\n </div>\n )}\n </Dropzone>\n <div style={styles.buttonPanel}>\n <Fab\n disabled={this.props.saving}\n size=\"small\"\n className=\"small_size\"\n color=\"primary\"\n aria-label=\"add\"\n onClick={() => this.onAdd()}\n >\n <AddIcon />\n </Fab>\n <Paper\n variant=\"outlined\"\n style={styles.descriptionPanel}\n >\n {this.props.t('certs_hint')}\n </Paper>\n </div>\n <TableContainer style={styles.tableContainer}>\n <Table\n style={styles.table}\n aria-label=\"customized table\"\n >\n <TableHead>\n <TableRow className=\"float_row\">\n <TableCell\n style={styles.littleRow}\n className=\"float_cell\"\n >\n {' '}\n </TableCell>\n <TableCell\n style={styles.nameRow}\n className=\"float_cell\"\n >\n {this.props.t('name')}\n </TableCell>\n <TableCell className=\"grow_cell float_cell\">{this.props.t('Certificate')}</TableCell>\n <TableCell\n style={styles.littleRow}\n className=\"float_cell\"\n >\n {' '}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>{rows}</TableBody>\n </Table>\n </TableContainer>\n </div>\n );\n }\n\n onChangeText = (value: string, id: string, name: 'title' | 'data'): void => {\n const newData = AdminUtils.clone(this.props.data);\n const array = CertificatesDialog.certToArray(newData.native.certificates);\n array.find(element => element.title === id)[name] = value;\n newData.native.certificates = CertificatesDialog.arrayToCert(array);\n this.props.onChange(newData);\n };\n\n onDelete = (id: string): void => {\n const newData = AdminUtils.clone(this.props.data);\n const array = CertificatesDialog.certToArray(newData.native.certificates);\n const index = array.findIndex(element => element.title === id);\n array.splice(index, 1);\n newData.native.certificates = CertificatesDialog.arrayToCert(array);\n this.props.onChange(newData);\n };\n\n onAdd = (title?: string, data?: string): void => {\n const newData = AdminUtils.clone(this.props.data);\n const array = CertificatesDialog.certToArray(newData.native.certificates);\n const certText = this.props.t('certificate');\n if (!title) {\n for (let i = 1; ; i++) {\n if (!array.find(item => item.title === `${certText}_${i}`)) {\n title = `${certText}_${i}`;\n break;\n }\n }\n }\n\n array.push({\n title: title || '__',\n data: data || '',\n });\n newData.native.certificates = CertificatesDialog.arrayToCert(array);\n this.props.onChange(newData);\n };\n}\n\nexport default withWidth()(CertificatesDialog);\n","import React, { type JSX } from 'react';\n\nimport { Grid2, FormControl, TextField, Paper, InputAdornment, IconButton } from '@mui/material';\n\nimport { Close as CloseIcon } from '@mui/icons-material';\n\nimport { withWidth, type Translate, type IobTheme } from '@iobroker/adapter-react-v5';\nimport type { ioBrokerObject } from '@/types';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, any> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n buttonPanel: {\n paddingBottom: 50,\n display: 'flex',\n },\n descriptionPanel: (theme: IobTheme) => ({\n width: '100%',\n backgroundColor: 'transparent',\n marginLeft: 40,\n border: 'none',\n display: 'flex',\n alignItems: 'center',\n '& a': {\n paddingLeft: 3,\n color: theme.palette.mode === 'dark' ? '#EEE' : '#111',\n },\n }),\n formControl: {\n margin: 8,\n minWidth: '100%',\n },\n};\n\ninterface SSLDialogProps {\n t: Translate;\n data: ioBrokerObject<{ letsEncrypt: { email?: string; domains?: string; path?: string } }>;\n onChange: (data: Record<string, any>) => void;\n saving: boolean;\n}\n\nclass SSLDialog extends BaseSystemSettingsDialog<SSLDialogProps> {\n render(): JSX.Element {\n const { data } = this.props;\n const { letsEncrypt } = data.native || {};\n return (\n <div style={styles.tabPanel}>\n <div\n style={{\n width: '100%',\n // height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n fontSize: 20,\n color: '#ff4949',\n }}\n >\n {this.props.t('ra_Use iobroker.acme adapter for letsencrypt certificates')}\n </div>\n <div style={styles.buttonPanel}>\n <Paper\n variant=\"outlined\"\n sx={styles.descriptionPanel}\n dangerouslySetInnerHTML={{ __html: this.props.t('letsnecrypt_help') }}\n />\n </div>\n <Grid2\n container\n spacing={6}\n >\n <Grid2 size={{ md: 3, xs: 12 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <TextField\n variant=\"standard\"\n id=\"email\"\n disabled={this.props.saving}\n label={this.props.t('Email for account:')}\n value={letsEncrypt?.email || ''}\n onChange={evt => this.onChangeText(evt, 'email')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: letsEncrypt?.email ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() =>\n this.onChangeText({ target: { value: '' } }, 'email')\n }\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ md: 3, xs: 12 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <TextField\n disabled={this.props.saving}\n variant=\"standard\"\n id=\"domains\"\n label={this.props.t('Domains:')}\n value={letsEncrypt?.domains || ''}\n onChange={evt => this.onChangeText(evt, 'domains')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: letsEncrypt?.domains ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() =>\n this.onChangeText({ target: { value: '' } }, 'domains')\n }\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n <Grid2 size={{ md: 3, xs: 12 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <TextField\n variant=\"standard\"\n id=\"path\"\n disabled={this.props.saving}\n label={this.props.t('Path to storage:')}\n value={letsEncrypt?.path || ''}\n onChange={evt => this.onChangeText(evt, 'path')}\n slotProps={{\n inputLabel: {\n shrink: true,\n },\n input: {\n readOnly: false,\n endAdornment: letsEncrypt?.path ? (\n <InputAdornment position=\"end\">\n <IconButton\n size=\"small\"\n onClick={() => this.onChangeText({ target: { value: '' } }, 'path')}\n >\n <CloseIcon />\n </IconButton>\n </InputAdornment>\n ) : null,\n },\n }}\n />\n </FormControl>\n </Grid2>\n </Grid2>\n </div>\n );\n }\n\n onChangeText(evt: { target: { value: string } }, id: 'email' | 'domains' | 'path'): void {\n const value = evt.target.value;\n this.doChange(id, value);\n }\n\n doChange(name: 'email' | 'domains' | 'path', value: string): void {\n const newData = AdminUtils.clone(this.props.data);\n newData.native.letsEncrypt = newData.native.letsEncrypt || {};\n newData.native.letsEncrypt[name] = value;\n this.props.onChange(newData);\n }\n}\n\nexport default withWidth()(SSLDialog);\n","import React, { Fragment, type JSX } from 'react';\n\nimport {\n Grid2,\n Typography,\n FormControl,\n Checkbox,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n MenuItem,\n Select,\n InputLabel,\n} from '@mui/material';\n\nimport { I18n, withWidth, type Translate } from '@iobroker/adapter-react-v5';\n\nimport { type ioBrokerObject } from '@/types';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n overflowX: 'hidden',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n buttonPanel: {\n paddingBottom: 40,\n display: 'flex',\n },\n formControl: {\n margin: 8,\n minWidth: '100%',\n },\n tableCell: {\n textAlign: 'center',\n border: '1px solid #AAA',\n paddingLeft: 0,\n paddingRight: 0,\n },\n};\n\ntype ACLOwners = {\n owner: ioBroker.ObjectIDs.User;\n ownerGroup: ioBroker.ObjectIDs.Group;\n};\n\ntype ACLRights = {\n object: number;\n state: number;\n file: number;\n};\n\ntype ACLObject = ioBrokerObject<object, { defaultNewAcl: ACLOwners & ACLRights }>;\n\ntype ACLObjectProps = {\n t: Translate;\n data: ACLObject;\n users: ioBroker.Object[];\n groups: ioBroker.Object[];\n onChange: (data: ACLObject) => void;\n saving: boolean;\n};\n\nclass ACLDialog extends BaseSystemSettingsDialog<ACLObjectProps> {\n private static permBits: [number, number][] = [\n [0x400, 0x200],\n [0x40, 0x20],\n [0x4, 0x2],\n ];\n\n static getTypes(): { type: keyof ACLRights; title: string }[] {\n return [\n {\n type: 'object',\n title: 'Object rights',\n },\n {\n type: 'state',\n title: 'States rights',\n },\n {\n type: 'file',\n title: 'File rights',\n },\n ];\n }\n\n getRights(type: keyof ACLRights): number[][] {\n const rts = this.props.data.common.defaultNewAcl[type];\n return ACLDialog.permBits.map(bitGroup => bitGroup.map(bit => rts & bit));\n }\n\n getTable(owner: keyof ACLRights): JSX.Element {\n const checks = this.getRights(owner);\n const checkboxes = checks.map((elem, index) => (\n <Fragment key={index}>\n <TableCell style={styles.tableCell}>\n <Checkbox\n disabled={this.props.saving}\n checked={!!elem[0]}\n color=\"primary\"\n onChange={() => this.handleCheck(owner, index, 0)}\n />\n </TableCell>\n <TableCell style={styles.tableCell}>\n <Checkbox\n disabled={this.props.saving}\n checked={!!elem[1]}\n color=\"primary\"\n onChange={() => this.handleCheck(owner, index, 1)}\n />\n </TableCell>\n </Fragment>\n ));\n\n return (\n <TableContainer>\n <Table\n style={styles.table}\n aria-label=\"customized table\"\n >\n <TableHead>\n <TableRow>\n <TableCell\n colSpan={2}\n style={styles.tableCell}\n >\n {this.props.t('Owner')}\n </TableCell>\n <TableCell\n colSpan={2}\n style={styles.tableCell}\n >\n {this.props.t('Group')}\n </TableCell>\n <TableCell\n colSpan={2}\n style={styles.tableCell}\n >\n {this.props.t('Everyone')}\n </TableCell>\n </TableRow>\n </TableHead>\n <TableBody>\n <TableRow>\n <TableCell style={styles.tableCell}>{this.props.t('read')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('write')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('read')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('write')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('read')}</TableCell>\n <TableCell style={styles.tableCell}>{this.props.t('write')}</TableCell>\n </TableRow>\n <TableRow>{checkboxes}</TableRow>\n </TableBody>\n </Table>\n </TableContainer>\n );\n }\n\n doChange(name: keyof ACLOwners, value: string): void {\n const newData = AdminUtils.clone(this.props.data);\n if (name === 'owner') {\n newData.common.defaultNewAcl.owner = value as ioBroker.ObjectIDs.User;\n } else if (name === 'ownerGroup') {\n newData.common.defaultNewAcl.ownerGroup = value as ioBroker.ObjectIDs.Group;\n }\n this.props.onChange(newData);\n }\n\n handleCheck(ownerType: keyof ACLRights, elemNum: number, num: number): void {\n const newData = AdminUtils.clone(this.props.data);\n newData.common.defaultNewAcl[ownerType] ^= ACLDialog.permBits[elemNum][num];\n this.props.onChange(newData);\n }\n\n render(): JSX.Element {\n const lang = I18n.getLanguage();\n const users = this.props.users.map((elem, index) => (\n <MenuItem\n value={elem._id}\n key={index}\n >\n {typeof elem.common.name === 'object'\n ? elem.common.name[lang] || elem.common.name.en\n : elem.common.name}\n </MenuItem>\n ));\n\n const groups = this.props.groups.map((elem, index) => (\n <MenuItem\n value={elem._id}\n key={index}\n >\n {typeof elem.common.name === 'object'\n ? elem.common.name[lang] || elem.common.name.en\n : elem.common.name}\n </MenuItem>\n ));\n\n const objectRights = ACLDialog.getTypes().map((ee, ii) => (\n <Grid2\n size={{ lg: 4, xs: 12, md: 6 }}\n key={ii}\n >\n <Typography\n variant=\"h6\"\n component=\"div\"\n >\n {this.props.t(ee.title)}\n </Typography>\n {this.getTable(ee.type)}\n </Grid2>\n ));\n\n return (\n <div style={styles.tabPanel}>\n <Typography\n variant=\"h5\"\n component=\"div\"\n >\n {this.props.t('Access control list')}\n </Typography>\n <Grid2\n container\n spacing={3}\n >\n <Grid2 size={{ lg: 3, xs: 12, md: 6 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <InputLabel\n shrink\n id=\"owner-label\"\n >\n {this.props.t('Owner user')}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id=\"owner\"\n value={this.props.data.common.defaultNewAcl.owner}\n onChange={evt => this.doChange('owner', evt.target.value)}\n displayEmpty\n inputProps={{ 'aria-label': 'users' }}\n >\n {users}\n </Select>\n </FormControl>\n </Grid2>\n <Grid2 size={{ lg: 3, xs: 12, md: 6 }}>\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <InputLabel\n shrink\n id=\"ownerGroup-label\"\n >\n {this.props.t('Owner group')}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id=\"ownerGroup\"\n value={this.props.data.common.defaultNewAcl.ownerGroup}\n onChange={evt => this.doChange('ownerGroup', evt.target.value)}\n displayEmpty\n inputProps={{ 'aria-label': 'ownerGroup' }}\n >\n {groups}\n </Select>\n </FormControl>\n </Grid2>\n </Grid2>\n <Grid2\n container\n spacing={3}\n >\n {objectRights}\n </Grid2>\n </div>\n );\n }\n}\n\nexport default withWidth()(ACLDialog);\n","import React, { type JSX } from 'react';\n\nimport {\n Grid2,\n Paper,\n Card,\n Typography,\n MenuItem,\n FormControl,\n Select,\n InputLabel,\n type SelectChangeEvent,\n} from '@mui/material';\n\nimport blueGrey from '@mui/material/colors/blueGrey';\n\nimport { withWidth, type Translate, type ThemeType } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport Editor from '../../components/Editor';\nimport BaseSystemSettingsDialog from './BaseSystemSettingsDialog';\n\n(window as any).ace.config.set('basePath', 'lib/js/ace');\n\nconst styles: Record<string, React.CSSProperties> = {\n tabPanel: {\n width: '100%',\n height: '100% ',\n overflow: 'auto',\n padding: 15,\n // backgroundColor: blueGrey[ 50 ]\n },\n note: {\n padding: 15,\n backgroundColor: blueGrey[500],\n color: '#FFF',\n overflow: 'auto',\n flex: 'none',\n },\n sentData: {\n padding: 15,\n },\n formControl: {\n margin: 8,\n minWidth: '100%',\n },\n descriptionPanel: {\n width: '100%',\n backgroundColor: 'transparent',\n border: 'none',\n overflow: 'auto',\n },\n selectEmpty: {\n marginTop: 16,\n },\n};\n\ninterface StatisticsDialogProps {\n t: Translate;\n data: ioBroker.SystemConfigObject;\n dataAux: Record<string, any> | null;\n themeType: ThemeType;\n onChange: (data: ioBroker.SystemConfigObject) => void;\n saving: boolean;\n handle: (type: string) => void;\n}\n\nclass StatisticsDialog extends BaseSystemSettingsDialog<StatisticsDialogProps> {\n static getTypes(): { id: string; title: string }[] {\n return [\n {\n id: 'none',\n title: 'none',\n },\n {\n id: 'normal',\n title: 'normal',\n },\n {\n id: 'no-city',\n title: 'no-city',\n },\n {\n id: 'extended',\n title: 'extended',\n },\n ];\n }\n\n getTypesSelector(): JSX.Element {\n const { common } = this.props.data;\n\n const items = StatisticsDialog.getTypes().map((elem, index) => (\n <MenuItem\n value={elem.title}\n key={index}\n >\n {this.props.t(elem.title)}\n </MenuItem>\n ));\n\n return (\n <FormControl\n variant=\"standard\"\n style={styles.formControl}\n >\n <InputLabel\n shrink\n id=\"statistics-label\"\n >\n {this.props.t('Statistics')}\n </InputLabel>\n <Select\n disabled={this.props.saving}\n variant=\"standard\"\n style={styles.formControl}\n id=\"statistics\"\n value={common.diag}\n displayEmpty\n onChange={(e: SelectChangeEvent<'none' | 'normal' | 'no-city' | 'extended'>) =>\n this.handleChangeType(e.target.value as 'none' | 'normal' | 'no-city' | 'extended')\n }\n >\n {items}\n </Select>\n </FormControl>\n );\n }\n\n doChange(name: string, value: string): void {\n const newData = AdminUtils.clone(this.props.data);\n (newData.common as Record<string, any>)[name] = value;\n this.props.onChange(newData);\n }\n\n handleChangeType = (value: 'none' | 'normal' | 'no-city' | 'extended'): void => {\n this.doChange('diag', value);\n if (this.props.handle) {\n this.props.handle(value);\n }\n };\n\n render(): JSX.Element {\n return (\n <div style={{ ...styles.tabPanel, height: '100%' }}>\n <Grid2\n container\n spacing={3}\n className=\"sendData-grid\"\n style={{ height: '100%' }}\n >\n <Grid2\n size={{ lg: 4, md: 4, xs: 12 }}\n style={{ display: 'flex', flexDirection: 'column' }}\n >\n <Card style={styles.note}>\n <Typography\n gutterBottom\n variant=\"h6\"\n component=\"div\"\n >\n {this.props.t('Note:')}\n </Typography>\n <Typography\n variant=\"body2\"\n component=\"div\"\n dangerouslySetInnerHTML={{ __html: this.props.t('diag-note') }}\n />\n </Card>\n {this.getTypesSelector()}\n {this.props.dataAux ? (\n <Paper\n variant=\"outlined\"\n style={styles.descriptionPanel}\n >\n <ul>\n {Object.keys(this.props.dataAux).map(key => (\n <li key={key}>{key}</li>\n ))}\n </ul>\n </Paper>\n ) : null}\n </Grid2>\n <Grid2\n size={{ lg: 8, md: 4, xs: 12 }}\n className=\"sendData-grid\"\n style={{ height: '100%', display: 'flex', flexDirection: 'column' }}\n >\n <Paper style={styles.sentData}>\n <Typography\n gutterBottom\n variant=\"h6\"\n component=\"div\"\n >\n {this.props.t('Sent data:')}\n </Typography>\n </Paper>\n <Editor\n editValueMode\n themeType={this.props.themeType}\n value={JSON.stringify(this.props.dataAux, null, 2)}\n />\n </Grid2>\n </Grid2>\n </div>\n );\n }\n}\n\nexport default withWidth()(StatisticsDialog);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Dialog,\n DialogActions,\n DialogContent,\n AppBar,\n Tab,\n Tabs,\n Typography,\n Button,\n LinearProgress,\n IconButton,\n Box,\n} from '@mui/material';\n\nimport { Check as CheckIcon, Close as CloseIcon } from '@mui/icons-material';\n\nimport {\n DialogConfirm,\n withWidth,\n type IobTheme,\n type Translate,\n Router,\n type AdminConnection,\n type ThemeType,\n type ThemeName,\n} from '@iobroker/adapter-react-v5';\n\nimport type { AdminGuiConfig, ioBrokerObject } from '@/types';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport MainSettingsDialog from './SystemSettingsTabs/MainSettingsDialog';\nimport RepositoriesDialog, { type Repository } from './SystemSettingsTabs/RepositoriesDialog';\nimport LicensesDialog from './SystemSettingsTabs/LicensesDialog';\nimport CertificatesDialog from './SystemSettingsTabs/CertificatesDialog';\nimport SSLDialog from './SystemSettingsTabs/SSLDialog';\nimport ACLDialog from './SystemSettingsTabs/ACLDialog';\nimport StatisticsDialog from './SystemSettingsTabs/StatisticsDialog';\nimport type { BaseSystemSettingsDialogProps } from './SystemSettingsTabs/BaseSystemSettingsDialog';\n// icons\n\n// style\nimport '../assets/css/style.css';\n\nconst SOME_PASSWORD = '__SOME_PASSWORD__';\n\nconst styles: Record<string, any> = {\n tabPanel: (theme: IobTheme) => ({\n width: '100%',\n height: `calc(100% - ${theme.mixins.toolbar.minHeight}px)`,\n overflow: 'hidden',\n }),\n tab: {\n // backgroundColor:'#FFF',\n // color:lightBlue[500]\n },\n dialogTitle: {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding: '0 0 0 20px',\n },\n dialog: {\n width: '100%',\n height: '100%',\n maxWidth: '100%',\n },\n content: {\n padding: '0 !important',\n },\n selected: (theme: IobTheme) => ({\n color: theme.palette.mode === 'dark' ? '#FFF !important' : '#222 !important',\n }),\n};\n\ntype SystemLicenseObject = ioBroker.Object & {\n name: string;\n};\n\ninterface SystemSettingsDialogProps {\n t: Translate;\n socket: AdminConnection;\n themeName: ThemeName;\n themeType: ThemeType;\n onClose: (repoChanged?: boolean) => void;\n currentTab: { id: string };\n width: string;\n adminGuiConfig: AdminGuiConfig;\n expertModeFunc: (value: boolean) => void;\n currentHost: string;\n}\n\ninterface SystemSettingsDialogState {\n loading: boolean;\n confirmExit: boolean;\n systemConfig: ioBroker.SystemConfigObject;\n systemCertificates: ioBroker.Object;\n systemRepositories: ioBroker.RepositoryObject;\n systemLicenses: ioBroker.Object;\n multipleRepos: boolean;\n licenseManager: boolean;\n host: string;\n repoInfo: Record<string, ioBroker.RepoInfo>;\n users?: ioBroker.UserObject[];\n groups?: ioBroker.GroupObject[];\n histories?: string[];\n diagData?: any;\n saving?: boolean;\n}\n\ninterface SystemSettingsDialogTab {\n id: number;\n title: string;\n component: React.FC<BaseSystemSettingsDialogProps>;\n data: string;\n name: string;\n dataAux: string;\n handle?: (type: 'none' | 'extended' | 'no-city') => void;\n socket?: AdminConnection;\n}\n\nclass SystemSettingsDialog extends Component<SystemSettingsDialogProps, SystemSettingsDialogState> {\n originalCertificates: string;\n\n originalConfig: string;\n\n originalRepositories: string;\n\n originalLicenses: string;\n\n constructor(props: SystemSettingsDialogProps) {\n super(props);\n this.state = {\n loading: true,\n confirmExit: false,\n systemConfig: null,\n systemCertificates: null,\n systemRepositories: null,\n systemLicenses: null,\n multipleRepos: false,\n licenseManager: false,\n host: '',\n repoInfo: {},\n };\n this.getSettings(/* this.state.currentHost */).catch(e => window.alert(`Cannot read settings: ${e}`));\n }\n\n async componentDidMount(): Promise<void> {\n const multipleRepos = await this.props.socket.checkFeatureSupported('CONTROLLER_MULTI_REPO');\n const licenseManager = await this.props.socket.checkFeatureSupported('CONTROLLER_LICENSE_MANAGER');\n const namespace = await this.props.socket.getCurrentInstance();\n const obj = (await this.props.socket.getObject(\n `system.adapter.${namespace}`,\n )) as any as ioBroker.InstanceObject;\n this.setState({ host: obj.common.host, multipleRepos, licenseManager });\n }\n\n async getSettings(): Promise<void> {\n const newState: Partial<SystemSettingsDialogState> = { loading: false };\n try {\n let systemRepositories = await this.props.socket.getObject('system.repositories');\n systemRepositories = AdminUtils.clone(systemRepositories);\n systemRepositories = (systemRepositories || {}) as ioBroker.RepositoryObject;\n systemRepositories.native = (systemRepositories.native || {}) as ioBroker.RepositoryObject['native'];\n systemRepositories.native.repositories = systemRepositories.native.repositories || {};\n newState.repoInfo = {};\n\n Object.keys(systemRepositories.native.repositories).forEach(repo => {\n if (systemRepositories.native.repositories[repo]) {\n if (systemRepositories.native.repositories[repo].json) {\n newState.repoInfo[repo] = systemRepositories.native.repositories[repo].json._repoInfo;\n delete systemRepositories.native.repositories[repo].json;\n }\n if (systemRepositories.native.repositories[repo].hash) {\n delete systemRepositories.native.repositories[repo].hash;\n }\n if (systemRepositories.native.repositories[repo].time) {\n delete systemRepositories.native.repositories[repo].time;\n }\n }\n });\n\n this.originalRepositories = JSON.stringify(systemRepositories);\n newState.systemRepositories = systemRepositories;\n const systemConfig = await this.props.socket.getSystemConfig(true);\n this.originalConfig = JSON.stringify(systemConfig || {});\n newState.systemConfig = systemConfig || ({} as ioBroker.SystemConfigObject);\n systemConfig.common = systemConfig.common || ({} as ioBroker.SystemConfigCommon);\n systemConfig.native = systemConfig.native || ({} as ioBroker.SystemConfigObject['native']);\n\n systemConfig.common.defaultNewAcl = systemConfig.common.defaultNewAcl || {\n object: 1636,\n state: 1636,\n file: 1632,\n owner: 'system.user.admin',\n ownerGroup: 'system.group.administrator',\n };\n\n systemConfig.common.firstDayOfWeek = systemConfig.common.firstDayOfWeek || 'monday';\n\n newState.diagData = await this.props.socket.getDiagData(this.props.currentHost, systemConfig.common.diag);\n newState.users = await this.props.socket.getUsers();\n newState.groups = await this.props.socket.getGroups();\n const instances = await this.props.socket.getAdapterInstances(true);\n newState.histories = Object.values(instances)\n .filter(instance => instance.common.getHistory)\n .map(instance => {\n const id = instance._id.split('.');\n return `${id[id.length - 2]}.${id[id.length - 1]}`;\n });\n\n const systemCertificates = await this.props.socket.getObject('system.certificates');\n this.originalCertificates = JSON.stringify(systemCertificates);\n newState.systemCertificates = systemCertificates;\n let systemLicenses: ioBroker.Object = await this.props.socket.getObject('system.licenses');\n systemLicenses =\n systemLicenses ||\n ({\n common: {\n name: 'Licenses from iobroker.net',\n },\n native: {\n login: '',\n password: '',\n licenses: [],\n },\n type: 'config',\n } as unknown as ioBroker.Object);\n if (systemLicenses.native.password) {\n systemLicenses.native.password = SOME_PASSWORD;\n }\n\n this.originalLicenses = JSON.stringify({\n login: systemLicenses.native.login,\n password: systemLicenses.native.password,\n });\n newState.systemLicenses = systemLicenses;\n this.setState(newState as SystemSettingsDialogState);\n } catch (e) {\n window.alert(`Cannot read settings: ${e}`);\n }\n }\n\n renderDialogConfirm(): JSX.Element | null {\n if (this.state.confirmExit) {\n return (\n <DialogConfirm\n text={this.props.t('Discard unsaved changes?')}\n onClose={result => this.setState({ confirmExit: false }, () => result && this.props.onClose())}\n />\n );\n }\n return null;\n }\n\n onSave(): void {\n let repoChanged = false;\n this.setState({ saving: true }, async () => {\n try {\n let systemConfig = await this.props.socket.getSystemConfig(true);\n systemConfig = systemConfig || ({} as ioBroker.SystemConfigObject);\n if (JSON.stringify(systemConfig.common) !== JSON.stringify(this.state.systemConfig.common)) {\n await this.props.socket.setSystemConfig(this.state.systemConfig);\n }\n await this.props.socket.setObject('system.certificates', this.state.systemCertificates);\n\n let systemRepositories = await this.props.socket.getObject('system.repositories');\n systemRepositories = systemRepositories || ({} as ioBroker.RepositoryObject);\n systemRepositories.native = systemRepositories.native || ({} as ioBroker.RepositoryObject['native']);\n systemRepositories.native.repositories = systemRepositories.native.repositories || {};\n const newRepo = JSON.parse(JSON.stringify(this.state.systemRepositories.native.repositories));\n\n // merge new and existing info\n Object.keys(newRepo).forEach(repo => {\n if (systemRepositories.native.repositories[repo]) {\n if (systemRepositories.native.repositories[repo].json) {\n newRepo[repo].json = systemRepositories.native.repositories[repo].json;\n }\n if (systemRepositories.native.repositories[repo].hash) {\n newRepo[repo].hash = systemRepositories.native.repositories[repo].hash;\n }\n if (systemRepositories.native.repositories[repo].time) {\n newRepo[repo].time = systemRepositories.native.repositories[repo].time;\n }\n }\n });\n if (JSON.stringify(this.state.systemRepositories.native.repositories) !== JSON.stringify(newRepo)) {\n systemRepositories.native.repositories = newRepo;\n repoChanged = true;\n await this.props.socket.setObject('system.repositories', systemRepositories);\n }\n\n let systemLicenses = (await this.props.socket.getObject('system.licenses')) as SystemLicenseObject;\n systemLicenses = systemLicenses || ({} as SystemLicenseObject);\n systemLicenses.type = systemLicenses.type || 'config';\n systemLicenses.name = systemLicenses.name || 'Licenses from iobroker.net';\n systemLicenses.common = systemLicenses.common || ({} as SystemLicenseObject['common']);\n systemLicenses.native = systemLicenses.native || ({} as SystemLicenseObject['native']);\n systemLicenses.native.licenses = systemLicenses.native.licenses || [];\n systemLicenses.native.password = systemLicenses.native.password || '';\n systemLicenses.native.login = systemLicenses.native.login || '';\n\n const currentPassword = systemLicenses.native.password ? SOME_PASSWORD : '';\n\n if (\n this.state.systemLicenses.native.password !== currentPassword ||\n systemLicenses.native.login !== this.state.systemLicenses.native.login\n ) {\n systemLicenses.native.login = this.state.systemLicenses.native.login;\n\n if (\n this.state.systemLicenses.native.password !== SOME_PASSWORD &&\n this.state.systemLicenses.native.password\n ) {\n // encode it\n try {\n systemLicenses.native.password = await this.props.socket.encrypt(\n this.state.systemLicenses.native.password,\n );\n } catch (error) {\n window.alert(this.props.t('Cannot update licenses: %s', error));\n }\n } else if (!this.state.systemLicenses.native.password) {\n systemLicenses.native.password = '';\n }\n try {\n await this.props.socket.setObject('system.licenses', systemLicenses);\n await this.props.socket.updateLicenses(null, null);\n } catch (error) {\n window.alert(this.props.t('Cannot update licenses: %s', error));\n }\n }\n\n // this.getSettings();\n alert(this.props.t('Settings saved'));\n this.props.onClose(repoChanged);\n if (this.state.systemConfig.common.expertMode !== JSON.parse(this.originalConfig).common.expertMode) {\n this.props.expertModeFunc(this.state.systemConfig.common.expertMode);\n }\n if (\n this.state.systemConfig.common.language !== JSON.parse(this.originalConfig).common.language ||\n JSON.stringify(this.state.systemConfig.common.activeRepo) !==\n JSON.stringify(JSON.parse(this.originalConfig).common.activeRepo)\n ) {\n window.location.reload();\n }\n this.setState({ saving: false });\n } catch (e) {\n window.alert(`Cannot save system configuration: ${e}`);\n }\n });\n }\n\n getTabs(): SystemSettingsDialogTab[] {\n return [\n {\n id: 0,\n title: 'System settings',\n component: MainSettingsDialog,\n data: 'systemConfig',\n name: 'tabConfig',\n dataAux: 'systemRepositories',\n handle: null,\n },\n {\n id: 1,\n title: 'Repositories',\n component: RepositoriesDialog,\n data: 'systemRepositories',\n name: 'tabRepositories',\n dataAux: 'systemConfig',\n handle: null,\n socket: this.props.socket,\n },\n {\n id: 2,\n title: 'Licenses',\n component: LicensesDialog,\n data: 'systemLicenses',\n name: 'tabLicenses',\n dataAux: null,\n handle: null,\n socket: this.props.socket,\n },\n {\n id: 3,\n title: 'Certificates',\n component: CertificatesDialog,\n data: 'systemCertificates',\n name: 'tabCertificates',\n dataAux: null,\n handle: null,\n },\n {\n id: 4,\n title: \"Let's encrypt SSL\",\n component: SSLDialog,\n data: 'systemCertificates',\n name: 'tabLetsEncrypt',\n dataAux: null,\n handle: null,\n },\n {\n id: 5,\n title: 'Default ACL',\n component: ACLDialog,\n data: 'systemConfig',\n name: 'tabDefaultACL',\n dataAux: null,\n handle: null,\n },\n {\n id: 6,\n title: 'Statistics',\n component: StatisticsDialog,\n data: 'systemConfig',\n dataAux: 'diagData',\n name: 'tabStatistics',\n handle: type => this.onChangeDiagType(type),\n },\n ];\n }\n\n onChangeDiagType = (type: 'none' | 'extended' | 'no-city'): void => {\n void this.props.socket.getDiagData(this.props.currentHost, type).then(diagData =>\n this.setState({\n diagData,\n systemConfig: {\n ...this.state.systemConfig,\n common: {\n ...this.state.systemConfig.common,\n diag: type,\n },\n },\n }),\n );\n };\n\n getDialogContent(tabsList: SystemSettingsDialogTab[]): JSX.Element {\n if (this.state.loading) {\n return <LinearProgress />;\n }\n\n const tab = tabsList.find(t => t.name === this.props.currentTab.id) || tabsList[0];\n\n const MyComponent: React.FC<BaseSystemSettingsDialogProps> = tab.component;\n const { groups, users, histories } = this.state;\n return (\n <Box\n component=\"div\"\n sx={styles.tabPanel}\n >\n <MyComponent\n adminGuiConfig={this.props.adminGuiConfig}\n onChange={(data: any, dataAux: any, cb: () => void) =>\n this.onChangedTab(tab.data, data, tab.dataAux, dataAux, cb)\n }\n data={this.state[tab.data as keyof SystemSettingsDialogState]}\n dataAux={this.state[tab.dataAux as keyof SystemSettingsDialogState]}\n handle={tab.handle}\n users={users}\n groups={groups}\n multipleRepos={this.state.multipleRepos}\n activeRepo={this.state.systemConfig.common.activeRepo}\n repoInfo={this.state.repoInfo}\n histories={histories}\n themeName={this.props.themeName}\n themeType={this.props.themeType}\n host={this.state.host}\n t={this.props.t}\n socket={this.props.socket}\n saving={this.state.saving}\n />\n </Box>\n );\n }\n\n static onTabChanged = (newTab: string): void => {\n Router.doNavigate(null, 'system', newTab);\n };\n\n onChangedTab(id: any, data: any, idAux: any, dataAux: any, cb: () => void): void {\n if (data || dataAux) {\n const state: SystemSettingsDialogState = { ...this.state };\n if (data) {\n (state as any)[id] = data;\n }\n if (dataAux) {\n (state as any)[idAux] = dataAux;\n }\n this.setState(state, () => cb && cb());\n }\n }\n\n static ifRepoError(data: ioBrokerObject<{ repositories: Repository }>): boolean {\n if (!data?.native?.repositories) {\n return false;\n }\n const invalidKey = Object.keys(data.native.repositories).find((key: string) => {\n return !key || key.trimStart() !== key || (key.length < 3 && !!key.match(/^\\d+$/));\n });\n return invalidKey !== undefined;\n }\n\n render(): JSX.Element {\n const changed = !(\n JSON.stringify(this.state.systemRepositories) === this.originalRepositories &&\n JSON.stringify(this.state.systemConfig) === this.originalConfig &&\n JSON.stringify(this.state.systemCertificates) === this.originalCertificates &&\n JSON.stringify({\n login: this.state.systemLicenses.native.login,\n password: this.state.systemLicenses.native.password,\n }) === this.originalLicenses\n );\n\n let tabError = false;\n if (this.props.currentTab.id === 'tabRepositories') {\n tabError = SystemSettingsDialog.ifRepoError(this.state.systemRepositories);\n }\n\n const tabsList = this.getTabs().filter(tab => {\n if (!this.state.licenseManager && tab.name === 'tabLicenses') {\n return false;\n }\n return this.props.adminGuiConfig.admin.settings[tab.name] !== false;\n });\n\n console.log(`get state: ${tabError}`);\n const tabs = tabsList.map(tab => (\n <Tab\n key={tab.title}\n label={this.props.t(tab.title)}\n value={tab.name}\n disabled={tabError && tab.name !== (this.props.currentTab.id || 'tabConfig')}\n sx={{ '&.Mui-selected': styles.selected }}\n />\n ));\n\n return (\n <Dialog\n sx={{\n '&.MuiDialog-root': styles.dialog,\n '& .MuiDialog-paper': {\n height: 'calc(100% - 64px)',\n width: 'calc(100% - 64px)',\n maxWidth: 'calc(100% - 64px)',\n },\n }}\n open={!0}\n onClose={(_e, reason) => {\n if (reason !== 'backdropClick' && reason !== 'escapeKeyDown') {\n if (changed) {\n this.setState({ confirmExit: true });\n } else {\n this.props.onClose();\n }\n }\n }}\n fullWidth\n fullScreen={false}\n aria-labelledby=\"system-settings-dialog-title\"\n >\n <DialogContent style={styles.content}>\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <div style={styles.dialogTitle}>\n {this.props.width !== 'xs' && this.props.width !== 'sm' && (\n <Typography className=\"dialogName\">{this.props.t('Base settings')}</Typography>\n )}\n <Tabs\n style={styles.tab}\n indicatorColor=\"secondary\"\n value={this.props.currentTab.id || 'tabConfig'}\n onChange={(_event, newTab: string) => SystemSettingsDialog.onTabChanged(newTab)}\n variant=\"scrollable\"\n scrollButtons=\"auto\"\n >\n {tabs}\n </Tabs>\n <IconButton\n size=\"large\"\n disabled={this.state.saving}\n edge=\"start\"\n color=\"inherit\"\n onClick={() => (changed ? this.setState({ confirmExit: true }) : this.props.onClose())}\n aria-label=\"close\"\n >\n <CloseIcon />\n </IconButton>\n </div>\n </AppBar>\n {this.getDialogContent(tabsList)}\n {this.renderDialogConfirm()}\n </DialogContent>\n <DialogActions>\n <Button\n variant=\"contained\"\n disabled={!changed || this.state.saving || tabError}\n onClick={() => this.onSave()}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {this.props.t('Save & Close')}\n </Button>\n <Button\n variant=\"contained\"\n disabled={this.state.saving}\n onClick={() => (changed ? this.setState({ confirmExit: true }) : this.props.onClose())}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {changed ? this.props.t('Cancel') : this.props.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default withWidth()(SystemSettingsDialog);\n","import React, { Component, type JSX } from 'react';\n\nimport {\n Avatar,\n Box,\n Button,\n Checkbox,\n CircularProgress,\n FormControlLabel,\n Grid2,\n Link,\n Paper,\n TextField,\n Typography,\n} from '@mui/material';\n\nimport { type IobTheme, type Translate, withWidth } from '@iobroker/adapter-react-v5';\n\nconst boxShadow = '0 4px 7px 5px rgb(0 0 0 / 14%), 0 3px 1px 1px rgb(0 0 0 / 12%), 0 1px 5px 0 rgb(0 0 0 / 20%)';\n\nconst styles: Record<string, any> = {\n root: {\n padding: 10,\n margin: 'auto',\n display: 'flex',\n height: '100%',\n alignItems: 'center',\n borderRadius: 0,\n justifyContent: 'center',\n },\n paper: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper + (theme.palette.background.paper.length < 7 ? 'd' : 'dd'),\n p: '24px',\n overflowY: 'auto',\n display: 'flex',\n flexDirection: 'column',\n height: '100%',\n maxHeight: 500,\n maxWidth: 380,\n boxShadow,\n }),\n avatar: {\n margin: 8,\n backgroundColor: '#fff',\n width: 100,\n height: 100,\n },\n avatarImg: {\n width: 'calc(100% - 4px)',\n height: 'calc(100% - 4px)',\n padding: 2,\n },\n form: {\n width: '100%', // Fix IE 11 issue.\n marginTop: 8,\n },\n submit: {\n margin: 8,\n },\n alert: {\n marginTop: 16,\n backgroundColor: '#f44336',\n padding: 8,\n color: '#fff',\n borderRadius: 4,\n fontSize: 16,\n },\n ioBrokerLink: {\n textTransform: 'inherit',\n },\n marginTop: {\n marginTop: 'auto',\n },\n progress: {\n textAlign: 'center',\n },\n};\n\ndeclare global {\n interface Window {\n loginBackgroundColor: string;\n loginBackgroundImage: string;\n loginLink: string;\n loginMotto: string;\n login: string;\n loginLogo: string;\n loginHideLogo: string;\n loginTitle: string;\n }\n}\n\ninterface LoginProps {\n t: Translate;\n}\n\ninterface LoginState {\n inProcess: boolean;\n}\n\nclass Login extends Component<LoginProps, LoginState> {\n private readonly formRef: React.RefObject<HTMLFormElement>;\n\n constructor(props: LoginProps) {\n super(props);\n\n this.state = {\n inProcess: false,\n };\n\n this.formRef = React.createRef();\n\n // apply image\n const body = window.document.body;\n body.style.backgroundColor = window.loginBackgroundColor;\n body.style.backgroundImage = window.loginBackgroundImage;\n body.style.backgroundSize = 'cover';\n }\n\n render(): JSX.Element {\n const action = `${window.location.port === '3000' ? `${window.location.protocol}//${window.location.hostname}:8081/` : ''}login?${window.location.port === '3000' ? 'dev&' : ''}href=${window.location.hash}`;\n\n const link =\n window.loginLink && window.loginLink !== '@@loginLink@@' ? window.loginLink : 'https://www.iobroker.net/';\n const motto =\n window.loginMotto && window.loginMotto !== '@@loginMotto@@' ? window.loginMotto : 'Discover awesome. ';\n\n if (window.login !== 'true') {\n // eslint-disable-next-line no-debugger\n debugger;\n window.location.href = `${window.location.protocol}//${window.location.host}${window.location.pathname}`;\n }\n const style =\n (window.loginBackgroundColor && window.loginBackgroundColor !== 'inherit') || window.loginBackgroundImage\n ? { background: '#00000000' }\n : {};\n\n return (\n <Paper\n component=\"main\"\n style={{ ...styles.root, ...style }}\n >\n <Paper sx={styles.paper}>\n <Grid2\n container\n direction=\"column\"\n alignItems=\"center\"\n >\n {window.loginLogo && window.loginLogo !== '@@loginLogo@@' ? (\n <div\n style={{\n height: 50,\n width: 102,\n lineHeight: '50px',\n background: 'white',\n borderRadius: 5,\n padding: 5,\n }}\n >\n <img\n src={window.loginLogo}\n alt=\"logo\"\n style={{ maxWidth: '100%', maxHeight: '100%' }}\n />\n </div>\n ) : (\n window.loginHideLogo === 'false' && (\n <Avatar\n style={styles.avatar}\n src=\"img/logo.png\"\n sx={{ '& .MuiAvatar-img': styles.avatarImg }}\n />\n )\n )}\n <Typography\n component=\"h1\"\n variant=\"h5\"\n >\n {window.loginTitle && window.loginTitle !== '@@loginTitle@@'\n ? window.loginTitle\n : this.props.t('loginTitle')}\n </Typography>\n {window.location.search.includes('error') && (\n <div style={styles.alert}>{this.props.t('wrongPassword')}</div>\n )}\n <form\n ref={this.formRef}\n style={styles.form}\n action={action}\n method=\"post\"\n >\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n disabled={this.state.inProcess}\n required\n fullWidth\n size=\"small\"\n id=\"username\"\n label={this.props.t('enterLogin')}\n name=\"username\"\n autoComplete=\"username\"\n autoFocus\n />\n <TextField\n variant=\"outlined\"\n margin=\"normal\"\n disabled={this.state.inProcess}\n required\n fullWidth\n size=\"small\"\n name=\"password\"\n label={this.props.t('enterPassword')}\n type=\"password\"\n id=\"password\"\n autoComplete=\"current-password\"\n />\n <FormControlLabel\n control={\n <Checkbox\n id=\"stayloggedin\"\n name=\"stayloggedin\"\n value=\"on\"\n color=\"primary\"\n disabled={this.state.inProcess}\n />\n }\n label={this.props.t('Stay signed in')}\n />\n <input\n id=\"origin\"\n type=\"hidden\"\n name=\"origin\"\n value={window.location.pathname + window.location.search.replace('&error', '')}\n />\n {\n <Button\n type=\"submit\"\n disabled={this.state.inProcess}\n onClick={() => {\n this.formRef.current.submit();\n // give time to firefox to send the data\n setTimeout(() => this.setState({ inProcess: true }), 50);\n }}\n fullWidth\n variant=\"contained\"\n color=\"primary\"\n style={styles.submit}\n >\n {this.state.inProcess ? <CircularProgress size={24} /> : this.props.t('login')}\n </Button>\n }\n </form>\n </Grid2>\n <Box style={styles.marginTop}>\n <Typography\n variant=\"body2\"\n color=\"textSecondary\"\n align=\"center\"\n >\n {window.loginLink && window.loginLink !== '@@loginLink@@' ? (\n <Link\n style={styles.ioBrokerLink}\n color=\"inherit\"\n href={link}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n {motto}\n </Link>\n ) : null}\n {!window.loginLink || window.loginLink === '@@loginLink@@' ? motto : null}\n {!window.loginLink || window.loginLink === '@@loginLink@@' ? (\n <Link\n style={styles.ioBrokerLink}\n color=\"inherit\"\n href={link}\n rel=\"noopener noreferrer\"\n target=\"_blank\"\n >\n ioBroker\n </Link>\n ) : null}\n </Typography>\n </Box>\n </Paper>\n </Paper>\n );\n }\n}\n\nexport default withWidth()(Login);\n","import React, { useState, type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n FormControlLabel,\n Checkbox,\n Grid2,\n DialogTitle,\n IconButton,\n Typography,\n Box,\n} from '@mui/material';\nimport { Build as BuildIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport { I18n, IconExpert, type IobTheme } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n fontSize: 16,\n fontFamily: '\"Roboto\", \"Helvetica\", \"Arial\", sans-serif',\n }),\n paper: {\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n },\n pre: {\n overflow: 'auto',\n margin: 20,\n },\n text: {\n fontSize: 16,\n },\n textBold: {\n fontSize: 16,\n fontWeight: 'bold',\n },\n width100: {\n width: '100%',\n },\n};\n\ninterface ExpertModeDialogProps {\n expertMode: boolean;\n onClose: (result?: string | boolean) => void;\n}\n\nconst ExpertModeDialog: React.FC<ExpertModeDialogProps> = ({\n expertMode,\n onClose,\n}: ExpertModeDialogProps): JSX.Element => {\n const [doNotShow, setDoNotShow] = useState(false);\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <DialogTitle>\n <IconExpert style={{ marginRight: 8 }} />\n {I18n.t('Expert mode')}\n </DialogTitle>\n <DialogContent\n style={styles.overflowHidden}\n dividers\n >\n <Grid2 container>\n <Grid2 style={styles.width100}>\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <div style={styles.pre}>\n <Typography\n style={styles.text}\n variant=\"body2\"\n component=\"p\"\n >\n {expertMode\n ? I18n.t(\n 'Now the expert mode will be deactivated only during this browser session.',\n )\n : I18n.t(\n 'Now the expert mode will be active only during this browser session.',\n )}\n </Typography>\n {!expertMode ? (\n <Typography\n style={styles.textBold}\n variant=\"body2\"\n component=\"p\"\n >\n {I18n.t('The expert mode allows you to view and edit system internal details.')}\n </Typography>\n ) : null}\n {!expertMode ? (\n <Typography\n style={styles.textBold}\n variant=\"body2\"\n component=\"p\"\n >\n {I18n.t('Please make sure you know what you are doing!')}\n </Typography>\n ) : null}\n <Typography\n style={styles.text}\n variant=\"body2\"\n component=\"p\"\n >\n {I18n.t(\n 'If you need to save the mode all the time, you can do this in the system settings.',\n )}\n </Typography>\n {I18n.t('Use this button:')}\n <IconButton\n color=\"primary\"\n size=\"small\"\n onClick={() => onClose('openSettings')}\n >\n <BuildIcon />\n </IconButton>\n </div>\n </Box>\n </Grid2>\n <Grid2>\n <FormControlLabel\n control={\n <Checkbox\n id=\"expert-mode-do-not-show\"\n checked={doNotShow}\n onChange={e => setDoNotShow(e.target.checked)}\n />\n }\n label={I18n.t('Do not show this dialog in this browser session any more')}\n />\n </Grid2>\n </Grid2>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"expert-mode-dialog-ok\"\n variant=\"contained\"\n autoFocus\n onClick={() => {\n if (doNotShow) {\n (((window as any)._sessionStorage as Storage) || window.sessionStorage).setItem(\n 'App.doNotShowExpertDialog',\n 'true',\n );\n }\n onClose(true);\n }}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {I18n.t('Ok')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default ExpertModeDialog;\n","import React, { useState, type JSX } from 'react';\n\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n Accordion,\n AccordionDetails,\n AccordionSummary,\n AppBar,\n Box,\n CardMedia,\n Tab,\n Tabs,\n Typography,\n} from '@mui/material';\n\nimport {\n Update as UpdateIcon,\n SettingsRemote as SettingsRemoteIcon,\n Cancel as CancelIcon,\n CancelPresentation as CancelPresentationIcon,\n PermDeviceInformation as PermDeviceInformationIcon,\n ImportExport as ImportExportIcon,\n Warning as WarningIcon,\n Notifications as BellIcon,\n Info as InfoIcon,\n Memory as MemoryIcon,\n ExpandMore as ExpandMoreIcon,\n Check as CheckIcon,\n Close as CloseIcon,\n} from '@mui/icons-material';\n\nimport { I18n, Utils, type ThemeType, type IobTheme } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: '4px',\n flexDirection: 'column',\n }),\n paper: {\n maxWidth: 1000,\n width: '100%',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden',\n },\n overflowAuto: {\n overflowY: 'auto',\n },\n message: {\n justifyContent: 'space-between',\n display: 'flex',\n width: '100%',\n alignItems: 'center',\n '@media screen and (max-width: 550px)': {\n flexWrap: 'wrap',\n },\n },\n column: {\n flexDirection: 'column',\n },\n headerText: (theme: IobTheme) => ({\n fontWeight: 'bold',\n fontSize: 20,\n color: theme.palette.mode === 'dark' ? '#DDD' : '#111',\n }),\n descriptionHeaderText: (theme: IobTheme) => ({\n margin: '18px 0',\n color: theme.palette.mode === 'dark' ? '#CCC' : '#222',\n }),\n silver: {\n color: 'silver',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n button: {\n paddingTop: 18,\n paddingBottom: 5,\n position: 'sticky',\n bottom: 0,\n background: 'white',\n zIndex: 3,\n },\n terminal: {\n fontFamily: 'monospace',\n fontSize: 14,\n ml: '20px',\n whiteSpace: 'pre-wrap',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n marginLeft: 0,\n },\n },\n img2: {\n width: 25,\n height: 25,\n mr: '10px',\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n overflow: 'hidden',\n },\n headingTop: {\n display: 'flex',\n alignItems: 'center',\n },\n classNameBox: {\n margin: 8,\n p: '24px',\n '@media screen and (max-width: 550px)': {\n p: '10px',\n },\n },\n textStyle: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n content: {\n overflow: 'hidden',\n },\n buttonStyle: {\n margin: '3px',\n '@media screen and (max-width: 550px)': {\n fontSize: '2.9vw',\n },\n },\n};\n\n/** Possible message severities */\ntype Severity = 'notify' | 'info' | 'alert';\n\ninterface StatusOptions {\n /** Id of the message */\n name: string;\n /** Severity of the message */\n severity?: Severity;\n}\n\nconst Status = ({ name, severity, ...props }: StatusOptions): JSX.Element => {\n switch (name) {\n case 'restartLoop':\n return (\n <UpdateIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'memIssues':\n return (\n <MemoryIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'fsIoErrors':\n return (\n <ImportExportIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'noDiskSpace':\n return (\n <PermDeviceInformationIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'accessErrors':\n return (\n <CancelPresentationIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'nonExistingFileErrors':\n return (\n <CancelIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'remoteHostErrors':\n return (\n <SettingsRemoteIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n case 'heading':\n return (\n <BellIcon\n sx={{\n fontSize: 36,\n marginLeft: 4,\n marginRight: 2,\n }}\n {...props}\n />\n );\n\n default:\n if (severity === 'notify') {\n return (\n <BellIcon\n color=\"primary\"\n {...props}\n />\n );\n }\n\n if (severity === 'info') {\n return (\n <InfoIcon\n color=\"info\"\n {...props}\n />\n );\n }\n\n return (\n <WarningIcon\n style={{ color: '#ffca00' }}\n {...props}\n />\n );\n }\n};\n\nfunction a11yProps(index: number): { id: string; 'aria-controls': string } {\n return {\n id: `scrollable-force-tab-${index}`,\n 'aria-controls': `scrollable-force-tabpanel-${index}`,\n };\n}\n\ninterface TabPanelOptions {\n value: number;\n index: number;\n styleDiv: React.CSSProperties;\n sxBox: Record<string, any>;\n children: JSX.Element;\n}\n\nconst TabPanel = ({ children, value, index, styleDiv, sxBox, ...other }: TabPanelOptions): JSX.Element => (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`scrollable-force-tabpanel-${index}`}\n aria-labelledby={`scrollable-force-tab-${index}`}\n style={styleDiv}\n {...other}\n >\n {value === index && (\n <Box style={sxBox}>\n <Typography component=\"div\">{children}</Typography>\n </Box>\n )}\n </div>\n);\n\ninterface InstanceMessage {\n messages: {\n message: string;\n ts: number;\n }[];\n}\n\ninterface Message {\n name: ioBroker.Translated;\n severity: Severity;\n description: ioBroker.Translated;\n instances: Record<string, InstanceMessage>;\n}\n\ninterface HostWarningDialogOptions {\n messages: Record<string, Message>;\n onClose: () => void;\n ackCallback: (name: string) => void;\n dateFormat: string;\n themeType: ThemeType;\n instances: any;\n}\n\nconst HostWarningDialog = ({\n messages,\n onClose,\n ackCallback,\n dateFormat,\n themeType,\n instances,\n}: HostWarningDialogOptions): JSX.Element => {\n const [value, setValue] = useState(0);\n const [disabled, setDisabled] = useState<string[]>([]);\n const [expanded, setExpanded] = useState('');\n const [autoCollapse, setAutoCollapse] = useState(true);\n\n const handleChange = (event: unknown, newValue: number): void => {\n setAutoCollapse(true);\n setValue(newValue);\n setExpanded('');\n };\n\n const handleChangeAccordion =\n (panel: string) =>\n (_event: unknown, isExpanded: boolean): void =>\n setExpanded(isExpanded ? panel : '');\n\n const dark = themeType === 'dark';\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <h2 style={styles.headingTop}>\n <Status name=\"heading\" />\n {I18n.t('Host-specific notifications')}\n </h2>\n <DialogContent\n style={{ ...styles.flex, ...styles.overflowHidden }}\n dividers\n >\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <Tabs\n value={value}\n onChange={handleChange}\n variant=\"scrollable\"\n scrollButtons\n indicatorColor={dark ? 'primary' : 'secondary'}\n textColor=\"primary\"\n >\n {Object.entries(messages).map(([name, entry], idx) => (\n <Tab\n style={dark ? { color: 'white' } : { color: 'black' }}\n disabled={disabled.includes(name)}\n key={name}\n label={entry.name[I18n.getLanguage()]}\n icon={\n <Status\n name={name}\n severity={entry.severity}\n />\n }\n {...a11yProps(idx)}\n />\n ))}\n </Tabs>\n </AppBar>\n {Object.keys(messages).map((name, idx) => (\n <TabPanel\n sxBox={styles.classNameBox}\n key={`tabPanel-${name}`}\n styleDiv={{ ...styles.overflowAuto, color: dark ? 'black' : undefined }}\n value={value}\n index={idx}\n >\n <div>\n <Box\n component=\"div\"\n sx={styles.headerText}\n style={{ fontWeight: 'bold' }}\n >\n {messages[name].name[I18n.getLanguage()]}\n </Box>\n <Box\n component=\"div\"\n sx={styles.descriptionHeaderText}\n >\n {messages[name].description[I18n.getLanguage()]}\n </Box>\n <div>\n {messages[name].instances\n ? Object.keys(messages[name].instances).map(nameInst => {\n const index = Object.keys(messages).indexOf(name);\n\n if (autoCollapse && value === index) {\n handleChangeAccordion(`${name}-${nameInst}`)('', true);\n setAutoCollapse(false);\n }\n\n const currentInstance = instances && instances[nameInst];\n let icon = 'img/no-image.png';\n if (currentInstance?.common?.icon && currentInstance?.common?.name) {\n icon = `adapter/${currentInstance.common.name}/${currentInstance.common.icon}`;\n }\n return (\n <Accordion\n style={dark ? undefined : { background: '#c0c0c052' }}\n key={nameInst}\n expanded={expanded === `${name}-${nameInst}`}\n onChange={handleChangeAccordion(`${name}-${nameInst}`)}\n >\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n sx={{ '& .MuiAccordionSummary-content': styles.content }}\n aria-controls=\"panel1bh-content\"\n id=\"panel1bh-header\"\n >\n <Typography style={styles.heading}>\n <CardMedia\n sx={styles.img2}\n component=\"img\"\n image={icon}\n />\n <Box\n component=\"div\"\n sx={styles.textStyle}\n >\n {nameInst.replace(/^system\\.adapter\\./, '')}\n </Box>\n </Typography>\n </AccordionSummary>\n <AccordionDetails style={styles.column}>\n {messages[name].instances[nameInst].messages.map(msg => (\n <Typography\n key={msg.ts}\n component=\"div\"\n sx={styles.message}\n >\n <Box\n component=\"div\"\n sx={styles.terminal}\n >\n {Utils.renderTextWithA(msg.message)}\n </Box>\n <Box\n component=\"div\"\n sx={styles.silver}\n >\n {Utils.formatDate(new Date(msg.ts), dateFormat)}\n </Box>\n </Typography>\n ))}\n </AccordionDetails>\n </Accordion>\n );\n })\n : null}\n </div>\n <div style={styles.button}>\n <Button\n variant=\"contained\"\n autoFocus={Object.keys(messages).length !== 1}\n disabled={disabled.includes(name)}\n style={disabled.includes(name) ? { background: 'silver' } : undefined}\n sx={styles.buttonStyle}\n onClick={() => {\n ackCallback(name);\n setDisabled([...disabled, name]);\n }}\n color={Object.keys(messages).length !== 1 ? 'primary' : 'grey'}\n startIcon={<CheckIcon />}\n >\n {I18n.t('Acknowledge')}\n </Button>\n {Object.keys(messages).length === 1 && (\n <Button\n variant=\"contained\"\n disabled={disabled.includes(name)}\n sx={styles.buttonStyle}\n style={disabled.includes(name) ? { background: 'silver' } : undefined}\n onClick={() => {\n setDisabled([...disabled, name]);\n ackCallback(name);\n onClose();\n }}\n startIcon={\n <>\n <CheckIcon />\n <CloseIcon />\n </>\n }\n color=\"primary\"\n >\n {I18n.t('Acknowledge & close')}\n </Button>\n )}\n </div>\n </div>\n </TabPanel>\n ))}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"host-warning-dialog-ok\"\n variant=\"contained\"\n onClick={() => onClose()}\n startIcon={<CloseIcon />}\n color=\"grey\"\n >\n {I18n.t('Ok')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default HostWarningDialog;\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport AdminUtils, { type Style } from '../helpers/AdminUtils';\n\ninterface LogLine {\n severity: string;\n ts: number;\n message: string | { original: string; parts: { text: string; style: Style }[] };\n from: string;\n _id: number;\n}\n\nexport interface LogLineSaved extends LogLine {\n key?: number;\n}\n\nexport default class LogsWorker {\n private readonly socket: AdminConnection;\n\n private readonly handlers: ((events: LogLineSaved[], messageSize: number) => void)[];\n\n private promise: Promise<{ logs: LogLineSaved[]; logSize: number }> | null;\n\n private connected: boolean;\n\n private logs: LogLineSaved[] | null;\n\n private newLogs: LogLineSaved[] | null;\n\n private errorCountHandlers: ((errors: number) => void)[];\n\n private warningCountHandlers: ((warnings: number) => void)[];\n\n private countErrors: boolean;\n\n private countWarnings: boolean;\n\n private errors: number;\n\n private warnings: number;\n\n private currentHost: string;\n\n private readonly maxLogs: number;\n\n private readonly isSafari: boolean;\n\n private logTimeout: ReturnType<typeof setTimeout> | null;\n\n private logSize: number;\n\n constructor(socket: AdminConnection, maxLogs?: number) {\n this.socket = socket;\n this.handlers = [];\n this.promise = null;\n\n this.errorCountHandlers = [];\n this.warningCountHandlers = [];\n this.countErrors = true;\n this.countWarnings = true;\n this.errors = 0;\n this.warnings = 0;\n this.currentHost = '';\n this.connected = this.socket.isConnected();\n this.maxLogs = maxLogs || 1000;\n this.logs = null;\n this.isSafari =\n navigator.vendor &&\n navigator.vendor.includes('Apple') &&\n navigator.userAgent &&\n !navigator.userAgent.includes('CriOS') &&\n !navigator.userAgent.includes('FxiOS');\n\n socket.registerLogHandler(this.logHandler);\n socket.registerConnectionHandler(this.connectionHandler);\n }\n\n setCurrentHost(currentHost: string): void {\n if (currentHost !== this.currentHost) {\n this.currentHost = currentHost;\n void this.getLogs(true);\n }\n }\n\n enableCountErrors(isEnabled: boolean): void {\n if (this.countErrors !== isEnabled) {\n this.countErrors = isEnabled;\n if (!this.countErrors) {\n const errors = this.errors;\n this.errors = 0;\n if (errors) {\n this.errorCountHandlers.forEach(handler => handler && handler(errors));\n }\n }\n }\n }\n\n enableCountWarnings(isEnabled: boolean): void {\n if (this.countWarnings !== isEnabled) {\n this.countWarnings = isEnabled;\n if (!this.countWarnings) {\n const warnings = this.warnings;\n this.warnings = 0;\n if (warnings) {\n this.warningCountHandlers.forEach(handler => handler && handler(warnings));\n }\n }\n }\n }\n\n resetErrors(): void {\n if (this.errors) {\n this.errors = 0;\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n }\n }\n\n resetWarnings(): void {\n if (this.warnings) {\n this.warnings = 0;\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n }\n\n logHandler = (line: LogLine | string): void => {\n const result = this._processLine(line);\n\n if (result?.objLine) {\n this.newLogs = this.newLogs || [];\n this.newLogs.push(result.objLine);\n\n if (!this.logTimeout) {\n this.logTimeout = setTimeout(() => {\n this.logTimeout = null;\n const newLogs = this.newLogs;\n this.newLogs = null;\n\n this.handlers.forEach(handler => handler && handler(newLogs, JSON.stringify(line).length - 65));\n }, 200);\n }\n\n if (result.isNew) {\n if (result.objLine.severity === 'error' && this.countErrors) {\n this.errors++;\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n } else if (result.objLine.severity === 'warn' && this.countWarnings) {\n this.warnings++;\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n }\n }\n };\n\n connectionHandler = (isConnected: boolean): void => {\n if (isConnected && !this.connected) {\n this.connected = true;\n void this.getLogs(true);\n } else if (!isConnected && this.connected) {\n this.connected = false;\n }\n };\n\n registerHandler(cb: (events: LogLineSaved[], messageSize: number) => void): void {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n }\n }\n\n unregisterHandler(cb: (events: LogLineSaved[], messageSize: number) => void): void {\n const pos = this.handlers.indexOf(cb);\n\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n }\n }\n\n registerErrorCountHandler(cb: (errors: number) => void): void {\n if (!this.errorCountHandlers.includes(cb)) {\n this.errorCountHandlers.push(cb);\n }\n }\n\n unregisterErrorCountHandler(cb: (errors: number) => void): void {\n const pos = this.errorCountHandlers.indexOf(cb);\n\n if (pos !== -1) {\n this.errorCountHandlers.splice(pos, 1);\n }\n }\n\n registerWarningCountHandler(cb: (warnings: number) => void): void {\n if (!this.warningCountHandlers.includes(cb)) {\n this.warningCountHandlers.push(cb);\n }\n }\n\n unregisterWarningCountHandler(cb: (warnings: number) => void): void {\n const pos = this.warningCountHandlers.indexOf(cb);\n\n if (pos !== -1) {\n this.warningCountHandlers.splice(pos, 1);\n }\n }\n\n _processLine(line: LogLine | string, lastKey?: number): { objLine: LogLineSaved; isNew: boolean } | null {\n // do not update logs before the first logs from host received\n if (!this.logs) {\n return null;\n }\n if (!line) {\n return null;\n }\n /* const line = {\n \"severity\": \"error\",\n \"ts\": 1588162801514,\n \"message\": \"host.DESKTOP-PLLTPO1 Invalid request getLogs. \\\"callback\\\" or \\\"from\\\" is null\",\n \"from\": \"host.DESKTOP-PLLTPO1\",\n \"_id\": 48358425\n }; */\n\n let objLine: LogLineSaved;\n let isNew = true;\n const length = this.logs.length;\n lastKey = lastKey || (length && this.logs[this.logs.length - 1].key) || 0;\n\n if (typeof line === 'object') {\n objLine = line as LogLineSaved;\n if (lastKey && lastKey <= objLine.ts) {\n objLine.key = lastKey + 1;\n } else {\n objLine.key = objLine.ts;\n }\n } else {\n // parse string\n const time = line.match(/^\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2}\\.\\d{3}/);\n\n if (time && time.length > 0) {\n let ts;\n // Safari sucks. It is a very idiotic browser, and because of it, we must parse every number apart\n if (this.isSafari) {\n // parse every number\n const tt = line.match(/^(\\d{4})-(\\d{2})-(\\d{2}) (\\d{2}):(\\d{2}):(\\d{2})\\.(\\d{3})/);\n ts = new Date(\n parseInt(tt[1], 10),\n parseInt(tt[2], 10) - 1,\n parseInt(tt[3], 10),\n parseInt(tt[4], 10),\n parseInt(tt[5], 10),\n parseInt(tt[6], 10),\n parseInt(tt[7], 10),\n ).getTime();\n } else {\n const tt = time[0].split(' ');\n ts = new Date(`${tt[0]}T${tt[1]}`).getTime();\n }\n let key = ts;\n\n if (lastKey && lastKey <= ts) {\n key = lastKey + 1;\n }\n\n // detect from\n const from = line.match(/: (host\\..+? |[-\\w]+\\.\\d+ \\()/);\n\n objLine = {\n key,\n from: from ? from[0].replace(/[ :(]/g, '') : '',\n message: line.split(/\\[\\d+m: /)[1],\n severity: line.match(/\\d+m(silly|debug|info|warn|error)/)[0].replace(/[\\dm]/g, ''),\n ts,\n } as LogLineSaved;\n } else {\n isNew = false;\n // if no time found\n if (length) {\n objLine = this.logs[length - 1];\n if (objLine) {\n if (typeof objLine.message === 'object') {\n objLine.message = AdminUtils.parseColorMessage(objLine.message.original + line);\n } else {\n objLine.message += line;\n }\n }\n }\n }\n }\n\n if (!objLine) {\n return null;\n }\n\n if (typeof objLine.message !== 'object') {\n objLine.message = AdminUtils.parseColorMessage(objLine.message);\n }\n\n if (isNew) {\n // if new message time is less than last message in log\n if (length && this.logs[length - 1].key > objLine.key) {\n let i;\n // find the place\n for (i = length - 1; i >= 0; i--) {\n if (this.logs[i].key < objLine.key) {\n break;\n }\n }\n if (i === -1) {\n this.logs.unshift(objLine);\n } else {\n this.logs.splice(i + 1, 0, objLine);\n }\n } else {\n this.logs.push(objLine);\n }\n\n if (length + 1 === this.maxLogs) {\n this.logs.shift();\n }\n }\n\n return { objLine, isNew };\n }\n\n getLogs(update?: boolean): Promise<{ logs: LogLineSaved[]; logSize: number }> {\n if (!this.currentHost) {\n return Promise.resolve({ logs: [], logSize: 0 });\n }\n\n if (!update && this.promise instanceof Promise) {\n return this.promise;\n }\n\n const oldErrors = this.errors;\n const oldWarnings = this.warnings;\n this.errors = 0;\n this.warnings = 0;\n\n this.promise = this.socket\n .getLogs(this.currentHost, 200)\n .then(lines => {\n // @ts-expect-error it can return error string or error object { error: 'permissionError' }\n if ((lines as string) === 'permissionError' || lines?.error !== undefined) {\n this.logs = [];\n\n window.alert('Cannot get logs: no permission');\n\n return { logs: this.logs, logSize: 0 };\n }\n\n const logSizeStr: string | null = lines ? (lines as string[]).pop() : null;\n let logSize = 0;\n\n if (typeof logSizeStr === 'string') {\n logSize = parseInt(logSizeStr, 10);\n }\n\n this.logs = [];\n let lastKey: number;\n\n (lines as string[]).forEach(line => {\n const result = this._processLine(line, lastKey);\n if (result?.objLine) {\n lastKey = result.objLine.key;\n if (result.isNew && result.objLine.severity === 'error' && this.countErrors) {\n this.errors++;\n }\n\n if (result.isNew && result.objLine.severity === 'warn' && this.countWarnings) {\n this.warnings++;\n }\n }\n });\n\n if (this.logs?.length && this.logs[0].ts) {\n this.logs.sort((a, b) => (a.ts > b.ts ? 1 : a.ts < b.ts ? -1 : 0));\n }\n\n this.logSize = logSize;\n\n // inform subscribes about each line\n this.handlers.forEach(cb => cb && cb(this.logs, logSize));\n\n if (oldErrors !== this.errors) {\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n }\n if (oldWarnings !== this.warnings) {\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n\n return { logs: this.logs, logSize };\n })\n .catch(e => {\n window.alert(`Cannot get logs: ${e}`);\n return { logs: this.logs, logSize: 0 };\n });\n\n return this.promise;\n }\n\n clearLines(): void {\n this.logs = [];\n this.logSize = 0;\n\n if (this.errors) {\n this.errors = 0;\n this.errorCountHandlers.forEach(handler => handler && handler(this.errors));\n }\n\n if (this.warnings) {\n this.warnings = 0;\n this.warningCountHandlers.forEach(handler => handler && handler(this.warnings));\n }\n }\n}\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport GenericWorker, { type EventType, type GenericEvent } from './GenericWorker';\n\nexport type InstanceEventType = EventType;\n\nexport type InstanceEvent = GenericEvent<'instance'>;\n\nexport default class InstancesWorker extends GenericWorker<'instance'> {\n constructor(socket: AdminConnection) {\n super(socket, 'system.adapter', 'instance');\n }\n}\n","import type { AdminConnection } from '@iobroker/adapter-react-v5';\nimport type { FilteredNotificationInformation } from '@iobroker/socket-client';\nimport GenericWorker, { type EventType, type GenericEvent } from './GenericWorker';\n\nexport type HostEventType = EventType;\n\nexport type NotificationAnswer = { result: FilteredNotificationInformation } | null;\n\nexport type HostEvent = GenericEvent<'host'>;\n\nexport interface HostAliveEvent {\n id: `system.host.${string}`;\n alive: boolean;\n type: HostEventType;\n}\n\nexport default class HostsWorker extends GenericWorker<'host'> {\n private readonly aliveHandlers: (((events: HostAliveEvent[]) => void) | false)[] = [];\n\n private readonly notificationsHandlers: ((notifications: Record<string, NotificationAnswer>) => void)[] = [];\n\n private readonly aliveStates: Record<string, boolean> = {};\n\n private readonly notificationPromises: Record<string, Promise<Record<string, NotificationAnswer | null>>> = {};\n\n private notificationTimer: ReturnType<typeof setTimeout> | null = null;\n\n private subscribeTs: number | undefined;\n\n constructor(socket: AdminConnection) {\n super(socket, 'system.host', 'host');\n this.aliveHandlers = [];\n this.notificationsHandlers = [];\n this.notificationPromises = {};\n this.aliveStates = {};\n }\n\n aliveChangeHandler = (id: string, state: ioBroker.State): void => {\n // if instance\n if (id.startsWith('system.host.') && id.endsWith('.alive')) {\n let type: HostEventType;\n id = id.replace(/\\.alive$/, '');\n if (state) {\n if (this.aliveStates[id] !== undefined) {\n if (!!this.aliveStates[id] !== !!state?.val) {\n type = 'changed';\n this.aliveStates[id] = !!state?.val;\n } else {\n // no changes\n return;\n }\n } else {\n type = 'new';\n this.aliveStates[id] = !!state?.val;\n }\n } else if (this.aliveStates[id]) {\n type = 'deleted';\n delete this.aliveStates[id];\n } else {\n // deleted unknown instance\n return;\n }\n this.aliveHandlers.forEach(\n cb =>\n cb &&\n cb([\n {\n id: id as `system.host.${string}`,\n alive: this.aliveStates[id],\n type,\n },\n ]),\n );\n }\n };\n\n connectionPostHandler(isConnected: boolean): void {\n if (isConnected) {\n if (this.aliveHandlers.length) {\n void this.socket.subscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n } else {\n Object.keys(this.aliveStates).forEach((id: string) => (this.aliveStates[id] = false));\n }\n }\n\n registerAliveHandler(cb: (events: HostAliveEvent[]) => void): void {\n if (!this.aliveHandlers.includes(cb)) {\n this.aliveHandlers.push(cb);\n\n if (this.aliveHandlers.length === 1 && this.connected) {\n void this.socket.subscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n }\n }\n\n unregisterAliveHandler(cb: (events: HostAliveEvent[]) => void): void {\n const pos = this.aliveHandlers.indexOf(cb);\n if (pos !== -1) {\n this.aliveHandlers.splice(pos, 1);\n if (!this.aliveHandlers.length && this.connected) {\n this.socket.unsubscribeState('system.host.*.alive', this.aliveChangeHandler);\n }\n }\n }\n\n onNotificationHandler = (id: string /* , state */): void => {\n const host = id.replace(/\\.notifications\\..+$/, '');\n\n // ignore subscribe events\n if (!this.subscribeTs || Date.now() - this.subscribeTs > 500) {\n if (this.notificationTimer) {\n clearTimeout(this.notificationTimer);\n }\n\n this.notificationTimer = setTimeout(\n host_ => {\n this.notificationTimer = null;\n this.notificationPromises[host_] = this._getNotificationsFromHosts(host_, true);\n\n void this.notificationPromises[host_].then(\n notifications => notifications && this.notificationsHandlers.forEach(cb => cb(notifications)),\n );\n },\n 300,\n host,\n );\n }\n };\n\n _getNotificationsFromHosts(hostId: string, update?: boolean): Promise<Record<string, NotificationAnswer | null>> {\n if (!update && this.notificationPromises[hostId] instanceof Promise) {\n return this.notificationPromises[hostId];\n }\n\n this.notificationPromises[hostId] = this.socket.getState(`${hostId}.alive`).then(state => {\n if (state?.val) {\n return this.socket\n .getNotifications(hostId, '')\n .then((notifications: NotificationAnswer) => ({ [hostId]: notifications || null }))\n .catch(e => {\n console.warn(`Cannot read notifications from \"${hostId}\": ${e}`);\n return { [hostId]: null };\n });\n }\n return { [hostId]: null };\n });\n\n return this.notificationPromises[hostId];\n }\n\n async getNotifications(hostId?: string, update?: boolean): Promise<Record<string, NotificationAnswer | null>> {\n if (hostId) {\n return this._getNotificationsFromHosts(hostId, update);\n }\n\n // get from all hosts\n const hosts = await this.socket.getCompactHosts(update);\n const promises = hosts.map(host => this._getNotificationsFromHosts(host._id, update));\n const pResults = await Promise.all(promises);\n const result: Record<string, NotificationAnswer | null> = {};\n pResults.forEach(r => Object.assign(result, r));\n return result;\n }\n\n registerNotificationHandler(cb: (notifications: Record<string, NotificationAnswer>) => void): void {\n if (!this.notificationsHandlers.includes(cb)) {\n this.notificationsHandlers.push(cb);\n\n if (this.notificationsHandlers.length === 1 && this.connected) {\n this.subscribeTs = Date.now();\n void this.socket.subscribeState('system.host.*.notifications.*', this.onNotificationHandler);\n }\n }\n }\n\n unregisterNotificationHandler(cb: (notifications: Record<string, NotificationAnswer>) => void): void {\n const pos = this.notificationsHandlers.indexOf(cb);\n\n if (pos !== -1) {\n this.notificationsHandlers.splice(pos, 1);\n if (!this.notificationsHandlers.length && this.connected) {\n this.socket.unsubscribeState('system.host.*.notifications.*', this.onNotificationHandler);\n }\n }\n }\n}\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport GenericWorker, { type EventType, type GenericEvent } from './GenericWorker';\n\nexport type AdapterEventType = EventType;\n\nexport type AdapterEvent = GenericEvent<'adapter'>;\n\nexport default class AdaptersWorker extends GenericWorker<'adapter'> {\n private readonly repositoryHandlers: (() => void)[];\n\n private repoTimer: ReturnType<typeof setTimeout> | null;\n\n constructor(socket: AdminConnection) {\n super(socket, 'system.adapter', 'adapter');\n this.repositoryHandlers = [];\n }\n\n protected checkObjectId(id: string, obj: ioBroker.AdapterObject | null | undefined): boolean {\n return id.match(/^system\\.adapter\\.[^.]+$/) && (!obj || obj.type === this.objectType);\n }\n\n protected postProcessing(_id: string, _obj: ioBroker.AdapterObject | null | undefined): void {\n this.socket.getAdaptersResetCache();\n this.socket.getInstalledResetCache('');\n }\n\n repoChangeHandler = (/* id, obj */): void => {\n if (this.repoTimer) {\n clearTimeout(this.repoTimer);\n }\n this.repoTimer = setTimeout(() => {\n this.repoTimer = null;\n this.repositoryHandlers.forEach(cb => cb());\n }, 500);\n };\n\n registerRepositoryHandler(cb: () => void): void {\n if (!this.repositoryHandlers.includes(cb)) {\n this.repositoryHandlers.push(cb);\n\n if (this.repositoryHandlers.length === 1 && this.connected) {\n this.socket\n .subscribeObject('system.repositories', this.repoChangeHandler)\n .catch(e => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterRepositoryHandler(cb: () => void): void {\n const pos = this.repositoryHandlers.indexOf(cb);\n if (pos !== -1) {\n this.repositoryHandlers.splice(pos, 1);\n }\n\n if (!this.repositoryHandlers.length && this.connected) {\n this.socket\n .unsubscribeObject('system.repositories', this.repoChangeHandler)\n .catch(e => window.alert(`Cannot unsubscribe on object: ${e}`));\n }\n }\n}\n","import { type AdminConnection } from '@iobroker/adapter-react-v5';\nimport AdminUtils from '../helpers/AdminUtils';\n\nexport type ObjectEventType = 'new' | 'changed' | 'deleted';\n\nexport interface ObjectEvent {\n id: string;\n obj?: ioBroker.Object;\n type: ObjectEventType;\n oldObj?: ioBroker.Object;\n}\n\nexport default class ObjectsWorker {\n private readonly socket: AdminConnection;\n\n private readonly handlers: ((events: ObjectEvent[]) => void)[];\n\n private promise: Promise<void | Record<string, ioBroker.Object>> | null;\n\n private connected: boolean;\n\n private objects: Record<string, ioBroker.Object> | null;\n\n constructor(socket: AdminConnection) {\n this.socket = socket;\n this.handlers = [];\n this.promise = null;\n\n socket.registerConnectionHandler(this.connectionHandler);\n\n this.connected = this.socket.isConnected();\n\n this.objects = null;\n }\n\n objectChangeHandler = (id: string, obj: ioBroker.Object | null): void => {\n this.objects = this.objects || {};\n // if instance\n let oldObj: ioBroker.Object | undefined;\n let type: ObjectEventType;\n\n if (obj) {\n if (obj.type === 'instance' || obj.type === 'adapter') {\n AdminUtils.fixAdminUI(obj);\n }\n\n if (this.objects[id]) {\n oldObj = this.objects[id];\n if (JSON.stringify(this.objects[id]) !== JSON.stringify(obj)) {\n type = 'changed';\n this.objects[id] = obj;\n } else {\n // no changes\n type = 'changed';\n }\n } else {\n type = 'new';\n this.objects[id] = obj;\n }\n } else if (this.objects[id]) {\n oldObj = this.objects[id];\n type = 'deleted';\n delete this.objects[id];\n } else {\n // deleted unknown instance\n type = 'deleted';\n }\n\n this.handlers.forEach(cb =>\n cb([\n {\n id,\n obj,\n type,\n oldObj,\n },\n ]),\n );\n };\n\n // be careful with this object. Do not change them.\n getObjects(update?: boolean): Promise<void | Record<string, ioBroker.Object>> {\n if (!update && this.promise instanceof Promise) {\n return this.promise;\n }\n\n this.promise = this.socket\n .getObjects(update, true)\n .then((objects: Record<string, ioBroker.Object>) => {\n this.objects = objects;\n return this.objects;\n })\n .catch((e: any) => window.alert(`Cannot get objects: ${e}`));\n\n return this.promise;\n }\n\n connectionHandler = (isConnected: boolean): void => {\n if (isConnected && !this.connected) {\n this.connected = true;\n\n if (this.handlers.length) {\n this.socket\n .subscribeObject('*', this.objectChangeHandler)\n .catch((e: any) => window.alert(`Cannot subscribe on objects: ${e}`));\n\n void this.getObjects(true).then(\n objects => objects && Object.keys(objects).forEach(id => this.objectChangeHandler(id, objects[id])),\n );\n }\n } else if (!isConnected && this.connected) {\n this.connected = false;\n }\n };\n\n registerHandler(cb: (events: ObjectEvent[]) => void): void {\n if (!this.handlers.includes(cb)) {\n this.handlers.push(cb);\n\n if (this.handlers.length === 1 && this.connected) {\n this.socket\n .subscribeObject('*', this.objectChangeHandler)\n .catch((e: any) => window.alert(`Cannot subscribe on object: ${e}`));\n }\n }\n }\n\n unregisterHandler(cb: (events: ObjectEvent[]) => void, doNotUnsubscribe?: boolean): void {\n const pos = this.handlers.indexOf(cb);\n if (pos !== -1) {\n this.handlers.splice(pos, 1);\n }\n\n if (!this.handlers.length && this.connected && !doNotUnsubscribe) {\n this.socket\n .unsubscribeObject('*', this.objectChangeHandler)\n .catch((e: any) => window.alert(`Cannot unsubscribe on object: ${e as Error}`));\n }\n }\n}\n","import React, { useEffect, useState } from 'react';\n\nimport { Button, Dialog, DialogActions, DialogContent, Paper, Typography, Box, AppBar } from '@mui/material';\n\nimport { Settings as SettingsIcon, Close as CloseIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport { I18n, type AdminConnection, type ThemeName, type ThemeType, type IobTheme } from '@iobroker/adapter-react-v5';\n\nimport { type ConfigItemPanel, ConfigPanel } from '@iobroker/json-config';\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n // backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n flexDirection: 'column',\n },\n paper: {\n maxWidth: 1000,\n width: '100%',\n maxHeight: 800,\n height: 'calc(100% - 32px)',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden',\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n },\n headerBlock: {\n backgroundColor: '#272727',\n padding: 13,\n fontSize: 16,\n },\n paperTable: {\n width: '100%',\n marginBottom: 16,\n },\n};\n\ninterface TabPanelProps {\n children: JSX.Element;\n value: number;\n index: number;\n title: string;\n custom?: boolean;\n}\n\nconst TabPanel: React.FC<TabPanelProps> = ({ children, value, index, title, custom, ...props }) => {\n if (custom) {\n return <div {...props}>{value === index && children}</div>;\n }\n\n return (\n <div {...props}>\n {value === index && (\n <>\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <div style={styles.headerBlock}>{title}</div>\n </AppBar>\n <Box p={3}>\n <Typography component=\"div\">{children}</Typography>\n </Box>\n </>\n )}\n </div>\n );\n};\ntype InputType = 'password' | 'checkbox' | 'select' | 'link' | 'comment' | 'text' | 'name' | 'title';\ntype InputControlType = 'password' | 'checkbox' | 'select' | 'text' | 'staticText' | 'header';\n\nconst types: Record<InputType, InputControlType> = {\n password: 'password',\n checkbox: 'checkbox',\n select: 'select',\n link: 'staticText',\n comment: 'staticText',\n text: 'text',\n name: 'staticText',\n title: 'staticText',\n};\n\ninterface DiscoveryInstanceCommentInput {\n /** Link to attribute, like: 'native.user' */\n name: string;\n def: string | boolean | number;\n type: InputType;\n title: string;\n options: Record<string, string | boolean | number>;\n}\n\nexport interface DiscoveryInstanceComment {\n add?: boolean | string | number | string[];\n changed?: boolean | string | number | string[];\n extended?: boolean | string | number | string[];\n text?: string;\n ack?: boolean;\n inputs?: DiscoveryInstanceCommentInput[];\n license?: string;\n}\n\nexport interface DiscoveryInstance {\n /** Adapter instance ID, like system.adapter.tr-064.0 */\n _id: `system.adapter.${string}.${number}`;\n common: {\n name: string;\n title?: string;\n licenseUrl?: ioBroker.StringOrTranslated;\n };\n comment: DiscoveryInstanceComment;\n native: Record<string, any>;\n}\n\ninterface DiscoveryDevice {\n _addr: string;\n _name: string;\n _ping: {\n alive: boolean;\n ms: number;\n };\n _source: 'ping';\n _type: 'ip' | 'once';\n _dns?: {\n /** \"fritz.box\", \"www.fritz.box\" */\n hostnames: string[];\n };\n}\n\nexport interface DiscoveryObject {\n _id: 'system.discovery';\n common: {\n name: ioBroker.StringOrTranslated;\n };\n type: 'config';\n native: {\n lastScan: string;\n newInstances: DiscoveryInstance[];\n devices: DiscoveryDevice[];\n };\n}\n\nfunction _setValueInObj(obj: Record<string, any>, path: string[], value: string | number | boolean): void {\n const attr = path.unshift();\n if (!path.length) {\n obj[attr] = value;\n } else {\n obj[attr] = obj[attr] || {};\n _setValueInObj(obj[attr], path, value);\n }\n}\n\nfunction setValueInObj(obj: Record<string, any>, path: string, value: string | number | boolean): void {\n const pathArray = path.split('.');\n\n _setValueInObj(obj, pathArray, value);\n}\n\ninterface SchemaItem {\n type: InputControlType;\n label: string;\n text: string;\n href: string;\n sm: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12;\n newLine: boolean;\n button: boolean;\n variant: 'contained';\n icon: string;\n repeat: boolean;\n required: boolean;\n name: string;\n}\n\ninterface GenerateInputsModalProps {\n themeType: ThemeType;\n themeName: ThemeName;\n theme: IobTheme;\n socket: AdminConnection;\n newInstance: DiscoveryInstance;\n /** The result looks like { native: { attr1: value }} */\n onClose: (obj?: { native: Record<string, any> }) => void;\n}\n\nconst GenerateInputsModal: React.FC<GenerateInputsModalProps> = ({\n theme,\n themeType,\n themeName,\n socket,\n newInstance,\n onClose,\n}) => {\n const [error, setError] = useState<Record<string, string>>({});\n\n const [schema, setSchema] = useState<{ type: 'panel'; items: Record<string, Partial<SchemaItem>> }>({\n type: 'panel',\n items: {},\n });\n\n const [schemaData, setSchemaData] = useState<Record<string, string | boolean | number>>({});\n\n useEffect(() => {\n const objSchema: {\n [key: string]: Partial<SchemaItem>;\n } = {};\n const objValue: {\n [key: string]: string | boolean | number;\n } = {};\n if (newInstance?.comment?.add && Array.isArray(newInstance?.comment?.add)) {\n newInstance.comment.add.forEach((text: string, idx: number) => (objSchema[idx] = { type: 'header', text }));\n\n newInstance.comment.inputs.forEach((el, idx) => {\n objSchema[idx + 1] = {\n ...el,\n type: types[el.type],\n label: el.title,\n text: el.def ? el.def.toString() : '',\n href: el.def ? el.def.toString() : '',\n sm: 6,\n newLine: true,\n };\n\n if (el.type === 'link') {\n objSchema[idx + 1].button = true;\n objSchema[idx + 1].variant = 'contained';\n objSchema[idx + 1].href = el.def ? el.def.toString() : '';\n objSchema[idx + 1].text = el.title;\n objSchema[idx + 1].icon =\n 'data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIgZD0iTTExLjk5IDJDNi40NyAyIDIgNi40OCAyIDEyczQuNDcgMTAgOS45OSAxMEMxNy41MiAyMiAyMiAxNy41MiAyMiAxMlMxNy41MiAyIDExLjk5IDJ6bTYuOTMgNmgtMi45NWMtLjMyLTEuMjUtLjc4LTIuNDUtMS4zOC0zLjU2IDEuODQuNjMgMy4zNyAxLjkxIDQuMzMgMy41NnpNMTIgNC4wNGMuODMgMS4yIDEuNDggMi41MyAxLjkxIDMuOTZoLTMuODJjLjQzLTEuNDMgMS4wOC0yLjc2IDEuOTEtMy45NnpNNC4yNiAxNEM0LjEgMTMuMzYgNCAxMi42OSA0IDEycy4xLTEuMzYuMjYtMmgzLjM4Yy0uMDguNjYtLjE0IDEuMzItLjE0IDIgMCAuNjguMDYgMS4zNC4xNCAySDQuMjZ6bS44MiAyaDIuOTVjLjMyIDEuMjUuNzggMi40NSAxLjM4IDMuNTYtMS44NC0uNjMtMy4zNy0xLjktNC4zMy0zLjU2em0yLjk1LThINS4wOGMuOTYtMS42NiAyLjQ5LTIuOTMgNC4zMy0zLjU2QzguODEgNS41NSA4LjM1IDYuNzUgOC4wMyA4ek0xMiAxOS45NmMtLjgzLTEuMi0xLjQ4LTIuNTMtMS45MS0zLjk2aDMuODJjLS40MyAxLjQzLTEuMDggMi43Ni0xLjkxIDMuOTZ6TTE0LjM0IDE0SDkuNjZjLS4wOS0uNjYtLjE2LTEuMzItLjE2LTIgMC0uNjguMDctMS4zNS4xNi0yaDQuNjhjLjA5LjY1LjE2IDEuMzIuMTYgMiAwIC42OC0uMDcgMS4zNC0uMTYgMnptLjI1IDUuNTZjLjYtMS4xMSAxLjA2LTIuMzEgMS4zOC0zLjU2aDIuOTVjLS45NiAxLjY1LTIuNDkgMi45My00LjMzIDMuNTZ6TTE2LjM2IDE0Yy4wOC0uNjYuMTQtMS4zMi4xNC0yIDAtLjY4LS4wNi0xLjM0LS4xNC0yaDMuMzhjLjE2LjY0LjI2IDEuMzEuMjYgMnMtLjEgMS4zNi0uMjYgMmgtMy4zOHoiPjwvcGF0aD48L3N2Zz4=';\n }\n\n if (el.type === 'password') {\n objSchema[idx + 1].repeat = true;\n }\n\n if (el.def !== undefined) {\n objValue[idx + 1] = '';\n }\n\n if (el.type === 'checkbox') {\n objValue[idx + 1] = false;\n }\n });\n setSchemaData(objValue);\n setSchema({ type: 'panel', items: objSchema });\n }\n }, [newInstance]);\n\n return (\n <Dialog\n onClose={onClose}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <h2 style={styles.heading}>\n <SettingsIcon\n style={{\n color: 'rgb(77 171 245)',\n fontSize: 36,\n marginLeft: 25,\n marginRight: 10,\n }}\n />\n {I18n.t('Instance parameters for %s', newInstance._id.replace('system.adapter.', ''))}\n </h2>\n <DialogContent\n style={{ ...styles.flex, ...styles.overflowHidden }}\n dividers\n >\n <div style={styles.root}>\n <TabPanel\n value={1}\n index={1}\n custom\n title={I18n.t('Test')}\n >\n <Paper style={styles.paperTable}>\n <ConfigPanel\n data={schemaData}\n socket={socket}\n themeType={themeType}\n themeName={themeName}\n theme={theme}\n onChange={setSchemaData}\n schema={schema as unknown as ConfigItemPanel}\n onError={(attr: string, _error?: string): void =>\n setError({ ...error, [attr]: _error })\n }\n // all unused properties\n isFloatComma\n instance={0}\n alive\n dateFormat=\"YYYY.MM.DD\"\n forceUpdate={() => {}}\n onCommandRunning={() => {}}\n changed={false}\n adapterName=\"dummy\"\n originalData={schemaData}\n common={{}}\n />\n </Paper>\n </TabPanel>\n </div>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"inputs-modal-dialog-apply\"\n variant=\"contained\"\n autoFocus\n disabled={!!Object.keys(error).find(attr => error[attr])}\n onClick={() => {\n const obj: { native: Record<string, any> } = { native: {} };\n let err = false;\n Object.keys(schema.items).forEach((key: string) => {\n if (schema.items[key].required) {\n if (!schemaData[key] && schema.items[key].type !== 'checkbox') {\n err = true;\n alert(`no data ${schema.items[key].label}`);\n } else {\n setValueInObj(obj, schema.items[key].name, schemaData[key]);\n }\n } else if (schema.items[key].name) {\n err = false;\n setValueInObj(obj, schema.items[key].name, schemaData[key]);\n }\n });\n if (!err) {\n onClose(obj);\n }\n }}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {I18n.t('Apply')}\n </Button>\n <Button\n id=\"inputs-modal-dialog-close\"\n variant=\"contained\"\n onClick={() => onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n};\n\nexport default GenerateInputsModal;\n","import { useState } from 'react';\n\nexport default function useStateLocal(defaultValue: any, key: string): [any, (newValue: any) => void, boolean] {\n const data = (window._localStorage || window.localStorage).getItem(key);\n if (data) {\n try {\n defaultValue = JSON.parse(data);\n } catch {\n // ignore\n }\n }\n\n const [state, setState] = useState(defaultValue);\n\n const eventsToInstall = (newValue: any): void => {\n (window._localStorage || window.localStorage).setItem(key, JSON.stringify(newValue));\n setState(newValue);\n };\n\n return [state, eventsToInstall, !!(window._localStorage || window.localStorage).getItem(key)];\n}\n","import React, { useEffect, useState } from 'react';\n\nimport {\n DialogActions,\n DialogContent,\n Button,\n Dialog,\n Tooltip,\n AppBar,\n Avatar,\n Box,\n Checkbox,\n CircularProgress,\n LinearProgress,\n Paper,\n Step,\n StepLabel,\n Stepper,\n Switch,\n Table,\n TableBody,\n TableCell,\n TableContainer,\n TableHead,\n TableRow,\n TableSortLabel,\n Typography,\n} from '@mui/material';\nimport { ThemeProvider } from '@mui/material/styles';\n\nimport {\n Visibility as VisibilityIcon,\n NavigateNext as NavigateNextIcon,\n NavigateBefore as NavigateBeforeIcon,\n Search as SearchIcon,\n Close as CloseIcon,\n LibraryAdd as LibraryAddIcon,\n AssignmentTurnedIn as AssignmentTurnedInIcon,\n ReportProblem as ReportProblemIcon,\n} from '@mui/icons-material';\n\nimport {\n I18n,\n Utils,\n SelectWithIcon,\n type IobTheme,\n type AdminConnection,\n type ThemeType,\n type ThemeName,\n} from '@iobroker/adapter-react-v5';\nimport type { CompactHost } from '@/types';\n\nimport Command from '../components/Command';\nimport LicenseDialog from './LicenseDialog';\nimport GenerateInputsModal, {\n type DiscoveryInstance,\n type DiscoveryInstanceComment,\n type DiscoveryObject,\n} from './GenerateInputsModal';\nimport useStateLocal from '../helpers/hooks/useStateLocal';\n\nconst styles: Record<string, any> = {\n root: {\n // backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: 4,\n flexDirection: 'column',\n },\n paper: {\n maxWidth: 1000,\n width: '100%',\n maxHeight: 800,\n height: 'calc(100% - 32px)',\n },\n flex: {\n display: 'flex',\n },\n overflowHidden: {\n overflow: 'hidden',\n },\n overflowAuto: {\n overflowY: 'auto',\n },\n headerText: {\n fontWeight: 'bold',\n fontSize: 15,\n },\n descriptionHeaderText: {\n margin: '10px 0',\n },\n heading: {\n display: 'flex',\n alignItems: 'center',\n },\n headerBlock: {\n backgroundColor: '#272727',\n padding: 13,\n fontSize: 16,\n },\n headerBlockDisplayItem: {\n p: '5px',\n fontSize: 16,\n display: 'flex',\n m: '2px',\n border: '1px solid #c0c0c045',\n borderRadius: '4px',\n alignItems: 'center',\n transition: 'background .5s, color .5s',\n },\n activeBlock: {\n backgroundColor: '#c0c0c021',\n border: '1px solid #4dabf5',\n },\n pointer: {\n cursor: 'pointer',\n },\n hover: {\n '&:hover': {\n backgroundColor: '#c0c0c021',\n },\n },\n installSuccess: {\n opacity: 0.7,\n color: '#5ef05e',\n },\n installError: {\n opacity: 0.7,\n color: '#ffc14f',\n },\n width200: {\n width: 200,\n },\n table: {\n // '& *': {\n // color: 'black'\n // }\n },\n paperTable: {\n width: '100%',\n marginBottom: 16,\n },\n wrapperSwitch: {\n display: 'flex',\n margin: 10,\n marginTop: 0,\n },\n divSwitch: {\n display: 'flex',\n // margin: 10,\n alignItems: 'center',\n fontSize: 10,\n marginLeft: 0,\n color: 'silver',\n },\n marginLeft: {\n marginLeft: 40,\n },\n stepper: {\n padding: 0,\n background: 'inherit',\n },\n instanceIcon: {\n width: 30,\n height: 30,\n margin: 3,\n },\n instanceId: {\n marginLeft: 10,\n },\n instanceWrapper: {\n display: 'flex',\n alignItems: 'center',\n },\n};\n\ntype CompactRepository = Record<\n string,\n {\n icon: ioBroker.AdapterCommon['icon'];\n version: string;\n }\n>;\n\ninterface TabPanelProps {\n children: JSX.Element | JSX.Element[];\n value: number;\n index: number;\n title: string;\n custom?: boolean;\n boxHeight?: boolean;\n black?: boolean;\n [other: string]: unknown;\n}\n\nfunction TabPanel({\n style,\n children,\n value,\n index,\n title,\n custom,\n boxHeight,\n black,\n ...props\n}: TabPanelProps): JSX.Element | null {\n if (custom) {\n return <div {...props}>{value === index && children}</div>;\n }\n if (value === index) {\n return (\n <div\n {...props}\n style={style}\n >\n <AppBar\n position=\"static\"\n color=\"default\"\n >\n <div style={{ ...styles.headerBlock, color: !black ? 'white' : undefined }}>{title}</div>\n </AppBar>\n <Box\n style={boxHeight ? { height: 'calc(100% - 45px)' } : undefined}\n p={3}\n >\n <Typography\n style={boxHeight ? { height: '100%' } : undefined}\n component=\"div\"\n >\n {children}\n </Typography>\n </Box>\n </div>\n );\n }\n return null;\n}\n\nconst headCells = [\n {\n id: 'instance',\n numeric: false,\n disablePadding: true,\n label: 'Instance',\n },\n {\n id: 'host',\n numeric: false,\n disablePadding: false,\n label: 'Host',\n },\n {\n id: 'description',\n numeric: false,\n disablePadding: false,\n label: 'Description',\n },\n {\n id: 'ignore',\n numeric: true,\n disablePadding: false,\n label: 'Ignore',\n },\n];\n\ninterface EnhancedTableHeadProps {\n numSelected: number;\n onSelectAllClick: (event: React.ChangeEvent) => void;\n rowCount: number;\n}\n\nfunction EnhancedTableHead(props: EnhancedTableHeadProps): JSX.Element {\n const { numSelected, rowCount, onSelectAllClick } = props;\n\n return (\n <TableHead>\n <TableRow>\n <TableCell padding=\"checkbox\">\n <Checkbox\n indeterminate={numSelected > 0 && numSelected < rowCount}\n checked={rowCount > 0 && numSelected === rowCount}\n onChange={(event: React.ChangeEvent) => onSelectAllClick(event)}\n inputProps={{ 'aria-label': 'select all desserts' }}\n />\n </TableCell>\n {headCells.map(headCell => (\n <TableCell\n key={headCell.id}\n align={headCell.numeric ? 'right' : 'left'}\n padding={headCell.disablePadding ? 'none' : 'normal'}\n >\n <TableSortLabel>{headCell.label}</TableSortLabel>\n </TableCell>\n ))}\n </TableRow>\n </TableHead>\n );\n}\n\nfunction buildComment(comment: DiscoveryInstanceComment): string {\n if (!comment) {\n return 'new';\n }\n if (typeof comment === 'string') {\n return comment;\n }\n let text = '';\n\n if (comment.add) {\n text += I18n.t('new');\n if (Array.isArray(comment.add) && comment.add.length) {\n text += ': ';\n if (comment.add.length <= 5) {\n text += comment.add.join(', ');\n } else {\n text += I18n.t('%s devices', comment.add.length);\n }\n } else if (typeof comment.add === 'string' || typeof comment.add === 'number') {\n text += ': ';\n text += comment.add;\n }\n }\n\n if (comment.changed) {\n text += (text ? ', ' : '') + I18n.t('changed');\n if (Array.isArray(comment.changed) && comment.changed.length) {\n text += ': ';\n if (comment.changed.length <= 5) {\n text += comment.changed.join(', ');\n } else {\n text += I18n.t('%s devices', comment.changed.length);\n }\n } else if (typeof comment.changed === 'string' || typeof comment.changed === 'number') {\n text += ': ';\n text += comment.changed;\n }\n }\n\n if (comment.extended) {\n text += (text ? ', ' : '') + I18n.t('extended');\n if (Array.isArray(comment.extended) && comment.extended.length) {\n text += ': ';\n if (comment.extended.length <= 5) {\n text += comment.extended.join(', ');\n } else {\n text += I18n.t('%s devices', comment.extended.length);\n }\n } else if (typeof comment.extended === 'string' || typeof comment.extended === 'number') {\n text += ': ';\n text += comment.extended;\n }\n }\n\n if (comment.text) {\n text += (text ? ', ' : '') + comment.text;\n }\n return text;\n}\n\ninterface DiscoveryDialogProps {\n themeType: ThemeType;\n themeName: ThemeName;\n socket: AdminConnection;\n dateFormat: string;\n currentHost: string;\n defaultLogLevel: ioBroker.LogLevel;\n repository: CompactRepository;\n hosts: CompactHost[];\n onClose: () => void;\n theme: IobTheme;\n}\n\nfunction DiscoveryDialog({\n themeType,\n themeName,\n socket,\n dateFormat,\n currentHost,\n defaultLogLevel,\n repository,\n hosts,\n onClose,\n theme,\n}: DiscoveryDialogProps): JSX.Element {\n const [step, setStep] = useState<number>(0);\n const [listMethods, setListMethods] = useState<Record<string, { type: string; source: string; timeout?: number }>>(\n {},\n );\n const [checkboxChecked, setCheckboxChecked] = useState<Record<string, boolean>>({});\n const [disableScanner, setDisableScanner] = useState<boolean>(false);\n const [discoveryData, setDiscoveryData] = useState<DiscoveryObject | null>(null);\n\n useEffect(() => {\n async function fetchData(): Promise<void> {\n const resultList: Record<string, { type: string; source: string; timeout?: number }> = await socket.sendTo(\n 'system.adapter.discovery.0',\n 'listMethods',\n null,\n );\n const listChecked: Record<string, boolean> = {};\n const lastSelectionStr =\n (((window as any)._localStorage as Storage) || window.localStorage).getItem(\n 'App.discoveryLastSelection',\n ) || null;\n let lastSelection: null | Record<string, boolean>;\n if (lastSelectionStr) {\n try {\n lastSelection = JSON.parse(lastSelectionStr) as Record<string, boolean>;\n } catch {\n lastSelection = null;\n }\n }\n\n Object.keys(resultList).forEach(key => {\n if (lastSelection) {\n listChecked[key] = lastSelection[key];\n } else {\n listChecked[key] = key !== 'serial';\n }\n });\n\n setCheckboxChecked(listChecked);\n setListMethods(resultList);\n }\n\n void fetchData().catch(e => console.warn(`Cannot read listMethods: ${e}`));\n }, [socket]);\n\n useEffect(() => {\n async function readOldData(): Promise<void> {\n const dataDiscovery = await socket.getObject('system.discovery');\n if (dataDiscovery !== undefined) {\n setDiscoveryData(dataDiscovery as unknown as DiscoveryObject);\n }\n }\n\n readOldData().catch(e => console.warn(`Cannot read system.discovery: ${e}`));\n }, [socket]);\n\n const [aliveHosts, setAliveHosts] = useState<Record<string, boolean>>({});\n const [checkSelectHosts, setCheckSelectHosts] = useState(false);\n const [hostInstances, setHostInstances] = useState<Record<string, string>>({});\n\n useEffect(() => {\n hosts.forEach(async ({ _id }: { _id: string }) => {\n const aliveValue = await socket.getState(`${_id}.alive`);\n\n setAliveHosts(prev => ({\n ...prev,\n [_id]: !aliveValue || aliveValue.val === null ? false : !!aliveValue.val,\n }));\n });\n\n if (Object.keys(aliveHosts).filter(key => aliveHosts[key]).length > 1) {\n setCheckSelectHosts(true);\n }\n }, [hosts, socket, aliveHosts]);\n\n const [devicesFound, setDevicesFound] = useState(0);\n const [devicesProgress, setDevicesProgress] = useState(0);\n const [instancesFound, setInstancesFound] = useState(0);\n const [scanRunning, setScanRunning] = useState(false);\n const [servicesProgress, setServicesProgress] = useState(0);\n const [selected, setSelected] = useState<string[]>([]);\n const [installProgress, setInstallProgress] = useState(false);\n const [currentInstall, setCurrentInstall] = useState(1);\n const [installStatus, setInstallStatus] = useState<Record<string, 'error' | 'success'>>({});\n const [cmdName, setCmdName] = useState('install');\n const [suggested, setSuggested] = useStateLocal(true, 'discovery.suggested');\n const [showAll, setShowAll] = useStateLocal(true, 'discovery.showAll');\n const [showLicenseDialog, setShowLicenseDialog] = useState<{ obj: DiscoveryInstance; cb: () => void } | null>(null);\n const [showInputsDialog, setShowInputsDialog] = useState<{ obj: DiscoveryInstance; cb: () => void } | null>(null);\n\n const black = themeType === 'dark';\n\n const [instancesInputsParams, setInstancesInputsParams] = useState<{ native: Record<string, any> }>({ native: {} });\n const steps = ['Select methods', 'Create instances', 'Installation process'];\n const [logs, setLogs] = useState<Record<string, any>>({});\n const [finishInstall, setFinishInstall] = useState(false);\n const [selectLogsIndex, setSelectLogsIndex] = useState(1);\n\n const handlerInstall = (name: string, value: ioBroker.State | null | undefined): void => {\n if (!value) {\n return;\n }\n switch (name) {\n case 'discovery.0.devicesFound':\n setDevicesFound(value.val as number);\n break;\n case 'discovery.0.devicesProgress':\n setDevicesProgress(value.val as number);\n break;\n case 'discovery.0.instancesFound':\n setInstancesFound(value.val as number);\n break;\n case 'discovery.0.scanRunning':\n setScanRunning(value.val as boolean);\n break;\n case 'discovery.0.servicesProgress':\n setServicesProgress(value.val as number);\n break;\n default:\n break;\n }\n };\n const onSystemDiscoveryChanged = (id: string, obj: ioBroker.Object | null | undefined): void => {\n if (!obj) {\n return;\n }\n if (id === 'system.discovery') {\n setDiscoveryData(obj as unknown as DiscoveryObject);\n }\n };\n useEffect(() => {\n void socket.subscribeObject('system.discovery', onSystemDiscoveryChanged);\n void socket.subscribeState('discovery.0.devicesFound', handlerInstall);\n void socket.subscribeState('discovery.0.devicesProgress', handlerInstall);\n void socket.subscribeState('discovery.0.instancesFound', handlerInstall);\n void socket.subscribeState('discovery.0.scanRunning', handlerInstall);\n void socket.subscribeState('discovery.0.servicesProgress', handlerInstall);\n\n return () => {\n void socket.unsubscribeObject('system.discovery', onSystemDiscoveryChanged);\n void socket.unsubscribeState('discovery.0.devicesFound', handlerInstall);\n void socket.unsubscribeState('discovery.0.devicesProgress', handlerInstall);\n void socket.unsubscribeState('discovery.0.instancesFound', handlerInstall);\n void socket.unsubscribeState('discovery.0.scanRunning', handlerInstall);\n void socket.unsubscribeState('discovery.0.servicesProgress', handlerInstall);\n };\n }, [socket]);\n\n const stepUp = (): void => setStep(step + 1);\n\n const stepDown = (): void => setStep(step - 1);\n\n const extendObject = (id: string, data: Record<string, any>): Promise<void> =>\n socket.extendObject(id, data).catch((error: any) => window.alert(error));\n\n const discoverScanner = async (): Promise<void> => {\n setDisableScanner(true);\n const dataArray = Object.keys(checkboxChecked).filter(key => checkboxChecked[key]);\n const resultList = await socket.sendTo('system.adapter.discovery.0', 'browse', dataArray);\n setDisableScanner(false);\n if (resultList.error) {\n window.alert(resultList.error);\n } else {\n setStep(1);\n }\n };\n\n const handleSelectAllClick = (event: any): void => {\n if (event.target.checked) {\n const newSelected = discoveryData?.native?.newInstances?.map(n => n._id);\n setSelected(newSelected);\n return;\n }\n setSelected([]);\n };\n\n const isSelected = (name: string, arr: string[]): boolean => arr.includes(name);\n\n const handleClick = (_event: any, name: string, arr: string[], func: (newSelected: any) => void): void => {\n const selectedIndex = arr.indexOf(name);\n let newSelected: string[] = [];\n\n if (selectedIndex === -1) {\n newSelected = newSelected.concat(arr, name);\n } else if (selectedIndex === 0) {\n newSelected = newSelected.concat(arr.slice(1));\n } else if (selectedIndex === arr.length - 1) {\n newSelected = newSelected.concat(arr.slice(0, -1));\n } else if (selectedIndex > 0) {\n newSelected = newSelected.concat(arr.slice(0, selectedIndex), arr.slice(selectedIndex + 1));\n }\n\n func(newSelected);\n };\n\n const checkLicenseAndInputs = (objName: string, cb: () => void): void => {\n const instanceObj: DiscoveryInstance | null = discoveryData?.native?.newInstances.find(\n ob => ob._id === objName,\n );\n const obj: DiscoveryInstance | null = instanceObj ? JSON.parse(JSON.stringify(instanceObj)) : null;\n let license = true;\n if (obj?.comment?.license && obj.comment.license !== 'MIT') {\n license = false;\n if (!obj.common.licenseUrl) {\n obj.common.licenseUrl = `https://raw.githubusercontent.com/ioBroker/ioBroker.${obj.common.name}/master/LICENSE`;\n }\n if (obj.common.licenseUrl && typeof obj.common.licenseUrl === 'object') {\n obj.common.licenseUrl = obj.common.licenseUrl[I18n.getLanguage()] || obj.common.licenseUrl.en;\n }\n if ((obj.common.licenseUrl as string).includes('github.com')) {\n obj.common.licenseUrl = (obj.common.licenseUrl as string)\n .replace('github.com', 'raw.githubusercontent.com')\n .replace('/blob/', '/');\n }\n }\n\n if (license) {\n if (obj.comment?.inputs) {\n setShowInputsDialog({ cb, obj });\n } else {\n cb();\n }\n } else {\n setShowLicenseDialog({ cb, obj });\n }\n };\n\n const goToNextInstance = (id: string, reason: string): void => {\n const index = selected.indexOf(id) + 1;\n setInstallStatus(status => ({ ...status, [index]: 'error' }));\n\n if (reason) {\n setLogs(logsEl => ({ ...logsEl, [selected[index - 1]]: [I18n.t(reason)] }));\n }\n\n if (selected.length > index) {\n setTimeout(\n () =>\n checkLicenseAndInputs(selected[index], () => {\n setCurrentInstall(index + 1);\n setCmdName('install');\n setInstallProgress(true);\n }),\n 100,\n );\n } else {\n setFinishInstall(true);\n }\n };\n\n const inputsDialog = showInputsDialog ? (\n <GenerateInputsModal\n socket={socket}\n theme={theme}\n themeType={themeType}\n themeName={themeName}\n newInstance={showInputsDialog.obj}\n onClose={params => {\n const { cb } = showInputsDialog;\n const { obj } = showInputsDialog;\n setShowInputsDialog(null);\n\n if (params) {\n setInstancesInputsParams(params);\n cb();\n } else {\n goToNextInstance(obj._id, 'Error: configuration dialog canceled');\n }\n }}\n />\n ) : null;\n\n const resetStateBack = (): void => {\n setSelected([]);\n setInstallProgress(false);\n setFinishInstall(false);\n setCurrentInstall(1);\n setCmdName('install');\n setInstallStatus({});\n };\n\n const checkInstall = (): void => {\n checkLicenseAndInputs(selected[0], () => {\n setCurrentInstall(1);\n setInstallProgress(true);\n });\n };\n\n const licenseDialog = showLicenseDialog ? (\n <LicenseDialog\n licenseType={showLicenseDialog.obj.comment.license}\n url={showLicenseDialog.obj.common.licenseUrl as string}\n onClose={result => {\n const { cb, obj } = showLicenseDialog;\n setShowLicenseDialog(null);\n if (!result) {\n // license isn't accepted, go to the next instance\n goToNextInstance(obj._id, 'Error: license not accepted');\n } else if (obj.comment?.inputs) {\n setShowInputsDialog({ cb, obj });\n } else {\n cb();\n }\n }}\n />\n ) : null;\n\n return (\n <ThemeProvider theme={theme}>\n {licenseDialog}\n {inputsDialog}\n <Dialog\n onClose={(event, reason) => {\n if (reason !== 'backdropClick' && reason !== 'escapeKeyDown') {\n onClose();\n }\n }}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <h2 style={styles.heading}>\n <VisibilityIcon\n style={{\n color: 'rgb(77 171 245)',\n fontSize: 36,\n marginLeft: 25,\n marginRight: 10,\n }}\n />\n {I18n.t('Find devices and services')}\n </h2>\n <Stepper\n style={styles.stepper}\n alternativeLabel\n activeStep={step}\n >\n {steps.map(label => (\n <Step key={label}>\n <StepLabel>{I18n.t(label)}</StepLabel>\n </Step>\n ))}\n </Stepper>\n <DialogContent\n style={{ ...styles.flex, ...styles.overflowHidden }}\n dividers\n >\n <div style={styles.root}>\n <TabPanel\n style={{ ...styles.overflowAuto, color: black ? 'white' : undefined }}\n value={step}\n index={0}\n black={black}\n title={I18n.t('Discover all possible devices')}\n >\n {!disableScanner ? (\n <>\n {' '}\n <div style={styles.headerText}>{I18n.t('press_discover')}</div>\n {discoveryData?.native?.lastScan && (\n <div style={styles.descriptionHeaderText}>\n {I18n.t(\n 'Last scan on %s',\n Utils.formatDate(new Date(discoveryData.native.lastScan), dateFormat),\n )}\n </div>\n )}\n <div style={{ ...styles.headerBlock, color: !black ? 'white' : undefined }}>\n {I18n.t('Use following methods:')}\n </div>\n {Object.keys(listMethods).map(key => (\n <div key={key}>\n <Checkbox\n checked={checkboxChecked[key]}\n disabled={disableScanner}\n onChange={(_, value) => {\n const newCheckboxChecked = JSON.parse(\n JSON.stringify(checkboxChecked),\n );\n newCheckboxChecked[key] = value;\n ((window as any)._localStorage || window.localStorage).setItem(\n 'App.discoveryLastSelection',\n JSON.stringify(newCheckboxChecked),\n );\n setCheckboxChecked(newCheckboxChecked);\n }}\n />\n {key}\n </div>\n ))}\n </>\n ) : (\n scanRunning && (\n <div>\n {devicesProgress >= 99\n ? `Lookup services - ${servicesProgress}%`\n : `Lookup devices - ${devicesProgress}%`}\n {disableScanner && (\n <LinearProgress\n variant=\"determinate\"\n value={devicesProgress >= 99 ? servicesProgress : devicesProgress}\n />\n )}\n {devicesProgress >= 99\n ? `${instancesFound} service(s) found`\n : `${devicesFound} device(s) found`}\n </div>\n )\n )}\n </TabPanel>\n <TabPanel\n style={styles.overflowAuto}\n value={step}\n index={1}\n title={\n discoveryData?.native?.lastScan\n ? I18n.t(\n 'Create instances automatically - Last scan on %s',\n Utils.formatDate(new Date(discoveryData.native.lastScan), dateFormat),\n )\n : I18n.t('Create instances automatically')\n }\n >\n <div style={styles.wrapperSwitch}>\n <div style={styles.divSwitch}>\n <div style={!showAll ? { color: 'green' } : undefined}>\n {I18n.t('hide ignored')}\n </div>\n <Switch\n checked={showAll}\n onChange={e => setShowAll(e.target.checked)}\n color=\"primary\"\n />\n <div style={showAll ? { color: 'green' } : undefined}>{I18n.t('show ignored')}</div>\n </div>\n <div style={{ ...styles.divSwitch, ...styles.marginLeft }}>\n <div style={!suggested ? { color: 'green' } : undefined}>\n {I18n.t('hide suggested')}\n </div>\n <Switch\n checked={suggested}\n onChange={e => setSuggested(e.target.checked)}\n color=\"primary\"\n />\n <div style={suggested ? { color: 'green' } : undefined}>\n {I18n.t('show suggested')}\n </div>\n </div>\n </div>\n <Paper style={styles.paperTable}>\n <TableContainer>\n <Table\n style={styles.table}\n size=\"small\"\n >\n <EnhancedTableHead\n numSelected={selected.length}\n onSelectAllClick={handleSelectAllClick}\n rowCount={discoveryData?.native?.newInstances?.length || 0}\n />\n <TableBody>\n {discoveryData?.native?.newInstances\n ?.filter((el: any) => {\n if (!suggested) {\n return !el.comment?.advice;\n }\n if (!showAll) {\n return !el?.comment?.ack;\n }\n return true;\n })\n .map((obj: any, idx: number) => (\n <TableRow\n hover\n role=\"checkbox\"\n key={obj._id}\n selected={obj.comment?.advice}\n >\n <TableCell padding=\"checkbox\">\n <Checkbox\n checked={isSelected(obj._id, selected)}\n onClick={e =>\n handleClick(e, obj._id, selected, setSelected)\n }\n />\n </TableCell>\n <TableCell\n component=\"th\"\n scope=\"row\"\n padding=\"none\"\n >\n <div style={styles.instanceWrapper}>\n <Avatar\n variant=\"square\"\n alt={obj._id.replace('system.adapter.', '')}\n src={repository[obj.common.name]?.icon}\n style={styles.instanceIcon}\n />\n <div style={styles.instanceId}>\n {obj._id.replace('system.adapter.', '')}\n </div>\n </div>\n </TableCell>\n <TableCell align=\"left\">\n {checkSelectHosts ? (\n <SelectWithIcon\n fullWidth\n lang={I18n.getLanguage()}\n list={hosts as ioBroker.Object[]}\n t={I18n.t}\n value={hostInstances[obj._id] || currentHost}\n themeType={themeType}\n onChange={val =>\n setHostInstances({\n ...hostInstances,\n [obj._id]: val,\n })\n }\n />\n ) : (\n '_'\n )}\n </TableCell>\n <TableCell align=\"left\">{buildComment(obj.comment)}</TableCell>\n <TableCell\n align=\"right\"\n padding=\"checkbox\"\n >\n <Checkbox\n checked={!!obj?.comment?.ack}\n onClick={() => {\n const newInstances = JSON.parse(\n JSON.stringify(\n discoveryData?.native.newInstances,\n ),\n );\n\n newInstances[idx].comment = {\n ...newInstances[idx].comment,\n ack: !newInstances[idx].comment.ack,\n };\n\n void extendObject('system.discovery', {\n native: { newInstances },\n });\n }}\n />\n </TableCell>\n </TableRow>\n ))}\n </TableBody>\n </Table>\n </TableContainer>\n </Paper>\n </TabPanel>\n <TabPanel\n value={step}\n index={2}\n style={{ ...styles.overflowAuto, height: '100%' }}\n boxHeight\n title={I18n.t('Install adapters')}\n >\n <div style={{ display: 'flex', height: '100%' }}>\n <div>\n {selected.map((el, idx) => (\n <Box\n component=\"div\"\n key={el}\n onClick={finishInstall ? () => setSelectLogsIndex(idx) : undefined}\n sx={{\n ...styles.headerBlockDisplayItem,\n ...(finishInstall ? styles.pointer : undefined),\n ...(finishInstall ? styles.hover : undefined),\n ...(finishInstall && selectLogsIndex === idx\n ? styles.activeBlock\n : undefined),\n }}\n >\n <div style={styles.width200}>\n <div style={styles.instanceWrapper}>\n <Avatar\n variant=\"square\"\n alt={el.replace('system.adapter.', '')}\n src={\n repository[el.replace('system.adapter.', '').split('.')[0]]\n ?.icon\n }\n style={styles.instanceIcon}\n />\n <div style={styles.instanceId}>\n {el.replace('system.adapter.', '')}\n </div>\n </div>\n </div>\n {currentInstall === idx + 1 && !installStatus[idx + 1] && (\n <CircularProgress size={20} />\n )}\n {installStatus[idx + 1] === 'error' ? (\n <ReportProblemIcon style={styles.installError} />\n ) : installStatus[idx + 1] === 'success' ? (\n <AssignmentTurnedInIcon style={styles.installSuccess} />\n ) : null}\n </Box>\n ))}\n </div>\n {currentInstall && (installProgress || finishInstall) && (\n <div style={{ overflow: 'hidden', width: 'calc(100% - 260px)' }}>\n <Command\n noSpacing\n key={`${currentInstall}-${cmdName}`}\n ready\n host={currentHost}\n logsRead={\n finishInstall ? logs[selected[selectLogsIndex]] || ['skipped'] : null\n }\n showElement={!finishInstall}\n socket={socket}\n t={I18n.t}\n cmd={\n finishInstall\n ? ''\n : `${cmdName} ${\n selected[currentInstall - 1]\n .replace('system.adapter.', '')\n .split('.')[0]\n }`\n }\n onFinished={(_, logsSuccess) => {\n let data = JSON.parse(\n JSON.stringify(\n discoveryData?.native.newInstances.find(\n (obj: any) => obj._id === selected[currentInstall - 1],\n ),\n ),\n );\n delete data.comment;\n\n let adapterId = data._id.split('.');\n adapterId.pop();\n adapterId = adapterId.join('.');\n void socket.getObject(adapterId).then((obj: ioBroker.AdapterObject) => {\n data = { ...obj, ...data };\n data.common = Object.assign(obj.common, data.common);\n data.native = Object.assign(obj.native, data.native);\n data.type = 'instance';\n\n // set log level\n if (defaultLogLevel) {\n data.common.logLevel = defaultLogLevel;\n }\n data.common.logLevel = data.common.logLevel || 'info';\n\n if (\n instancesInputsParams.native &&\n Object.keys(instancesInputsParams.native).length\n ) {\n Object.assign(data.native, instancesInputsParams.native);\n setInstancesInputsParams({ native: {} });\n }\n if (checkSelectHosts && hostInstances[data._id]) {\n data.common.host = hostInstances[data._id];\n }\n\n // write created instance\n void extendObject(data._id, data).then(() => {\n if (currentInstall < selected.length) {\n // install next\n checkLicenseAndInputs(selected[currentInstall], () => {\n setCurrentInstall(currentInstall + 1);\n setCmdName('install');\n });\n setLogs({\n ...logs,\n [selected[currentInstall - 1]]: logsSuccess,\n });\n setInstallStatus({\n ...installStatus,\n [currentInstall]: 'success',\n });\n } else {\n setLogs({\n ...logs,\n [selected[currentInstall - 1]]: logsSuccess,\n });\n setInstallStatus({\n ...installStatus,\n [currentInstall]: 'success',\n });\n setSelectLogsIndex(currentInstall - 1);\n const dataDiscovery = JSON.parse(\n JSON.stringify(discoveryData),\n );\n if (dataDiscovery) {\n dataDiscovery.native.newInstances =\n dataDiscovery.native.newInstances.filter(\n ({ _id }: { _id: string }) => {\n const find = selected.find(\n el => el === _id,\n );\n if (!find) {\n return true;\n }\n return (\n installStatus[\n selected.indexOf(find) + 1\n ] !== 'success'\n );\n },\n );\n void socket.setObject(\n 'system.discovery',\n dataDiscovery,\n );\n }\n setFinishInstall(true);\n window.alert(I18n.t('Finished'));\n }\n });\n });\n }}\n errorFunc={(el, logsError) => {\n if (el === 51 && cmdName === 'install') {\n setCmdName('upload');\n return;\n }\n if (selected.length > currentInstall && cmdName === 'upload') {\n checkLicenseAndInputs(selected[currentInstall], () =>\n setCurrentInstall(currentInstall + 1),\n );\n setInstallStatus({ ...installStatus, [currentInstall]: 'error' });\n } else {\n if (selected.length > currentInstall) {\n setInstallStatus({\n ...installStatus,\n [currentInstall]: 'error',\n });\n checkLicenseAndInputs(selected[currentInstall], () =>\n setCurrentInstall(currentInstall + 1),\n );\n setCmdName('install');\n setLogs({ ...logs, [selected[currentInstall - 1]]: logsError });\n } else {\n setInstallStatus({\n ...installStatus,\n [currentInstall]: 'error',\n });\n setLogs({ ...logs, [selected[currentInstall - 1]]: logsError });\n setFinishInstall(true);\n setSelectLogsIndex(currentInstall - 1);\n const dataDiscovery = JSON.parse(JSON.stringify(discoveryData));\n if (dataDiscovery) {\n dataDiscovery.native.newInstances =\n dataDiscovery.native.newInstances.filter(\n ({ _id }: { _id: string }) => {\n const find = selected.find(ele => ele === _id);\n if (!find) {\n return true;\n }\n return (\n installStatus[\n selected.indexOf(find) + 1\n ] !== 'success'\n );\n },\n );\n void socket.setObject('system.discovery', dataDiscovery);\n }\n }\n window.alert(`error ${selected[currentInstall - 1]}`);\n }\n }}\n />\n </div>\n )}\n </div>\n </TabPanel>\n </div>\n </DialogContent>\n <DialogActions>\n {step > 0 && step !== 4 && (\n <Button\n variant=\"contained\"\n disabled={step === 0}\n onClick={() => {\n if (step === 2) {\n resetStateBack();\n }\n stepDown();\n }}\n color=\"grey\"\n startIcon={<NavigateBeforeIcon />}\n >\n {I18n.t('Back')}\n </Button>\n )}\n {step === 0 && (\n <Button\n variant=\"contained\"\n autoFocus\n disabled={disableScanner}\n onClick={discoverScanner}\n color=\"primary\"\n startIcon={<SearchIcon />}\n >\n {I18n.t('Discover')}\n </Button>\n )}\n {step !== 2 && step !== 4 && (\n <Tooltip\n slotProps={{ popper: { sx: { pointerEvents: 'none' } } }}\n title={\n step === 0\n ? I18n.t('Skip discovery process and go to install with last scan results')\n : ''\n }\n >\n <span style={{ marginLeft: 8 }}>\n <Button\n variant=\"contained\"\n disabled={\n !discoveryData ||\n !discoveryData?.native?.lastScan ||\n step === 2 ||\n disableScanner ||\n (step === 1 && !selected.length)\n }\n onClick={() => {\n stepUp();\n if (step === 1) {\n checkInstall();\n }\n }}\n color={step === 1 ? 'primary' : 'grey'}\n startIcon={step === 1 ? <LibraryAddIcon /> : <NavigateNextIcon />}\n >\n {I18n.t(step === 1 ? 'Create instances' : 'Use last scan')}\n </Button>\n </span>\n </Tooltip>\n )}\n <Button\n variant=\"contained\"\n disabled={disableScanner}\n onClick={() => onClose()}\n color={step === 2 ? 'primary' : 'grey'}\n startIcon={<CloseIcon />}\n >\n {I18n.t(step === 2 ? 'Finish' : 'Close')}\n </Button>\n </DialogActions>\n </Dialog>\n </ThemeProvider>\n );\n}\n\nexport default DiscoveryDialog;\n","import React, { type RefObject, Suspense, type JSX } from 'react';\nimport { ThemeProvider, StyledEngineProvider } from '@mui/material/styles';\nimport { DndProvider } from 'react-dnd';\nimport { HTML5Backend } from 'react-dnd-html5-backend';\nimport { TouchBackend } from 'react-dnd-touch-backend';\n\n// @mui/material\nimport {\n AppBar,\n Avatar,\n Grid2 as Grid,\n IconButton,\n Paper,\n Snackbar,\n Toolbar,\n Typography,\n Tooltip,\n Badge,\n Menu,\n MenuItem,\n ListItemIcon,\n ListItemText,\n CircularProgress,\n Dialog,\n DialogTitle,\n Button,\n DialogContent,\n DialogContentText,\n DialogActions,\n Box,\n} from '@mui/material';\n\n// @mui/icons-material\nimport {\n Menu as MenuIcon,\n Build as BuildIcon,\n Update as UpdateIcon,\n Visibility as VisibilityIcon,\n PictureInPictureAlt as PictureInPictureAltIcon,\n Person as UserIcon,\n CloudSync as SyncIcon,\n SyncDisabled as SyncIconDisabled,\n Close as CancelIcon,\n Notifications as NotificationsIcon,\n} from '@mui/icons-material';\n\nimport { AdminConnection as Connection, type FilteredNotificationInformation, PROGRESS } from '@iobroker/socket-client';\n\nimport {\n LoaderPT,\n LoaderMV,\n LoaderVendor,\n Loader,\n I18n,\n Router,\n DialogConfirm,\n Icon,\n withWidth,\n Theme,\n IconExpert,\n ToggleThemeMenu,\n type IobTheme,\n type ThemeName,\n type AdminConnection,\n type ThemeType,\n Utils,\n dictionary,\n} from '@iobroker/adapter-react-v5';\n\nimport NotificationsDialog from '@/dialogs/NotificationsDialog';\nimport type { AdminGuiConfig, CompactAdapterInfo, CompactHost, NotificationsCount } from '@/types';\nimport type { InstanceConfig } from '@/tabs/EasyMode';\n\nimport CommandDialog from './dialogs/CommandDialog';\nimport Drawer, {\n STATES as DrawerStates,\n DRAWER_FULL_WIDTH,\n DRAWER_COMPACT_WIDTH,\n DRAWER_EDIT_WIDTH,\n} from './components/Drawer';\n\nimport Connecting from './components/Connecting';\n\nimport WizardDialog from './dialogs/WizardDialog';\nimport SystemSettingsDialog from './dialogs/SystemSettingsDialog';\nimport Login from './login/Login';\nimport HostSelectors from './components/HostSelectors';\nimport ExpertModeDialog from './dialogs/ExpertModeDialog';\nimport NewsAdminDialog, { checkMessages, type ShowMessage } from './dialogs/NewsAdminDialog';\nimport HostWarningDialog from './dialogs/HostWarningDialog';\nimport LogsWorker from './Workers/LogsWorker';\nimport InstancesWorker from './Workers/InstancesWorker';\nimport HostsWorker, { type HostEvent, type NotificationAnswer } from './Workers/HostsWorker';\nimport AdaptersWorker, { type AdapterEvent } from './Workers/AdaptersWorker';\nimport ObjectsWorker from './Workers/ObjectsWorker';\nimport DiscoveryDialog from './dialogs/DiscoveryDialog';\nimport SlowConnectionWarningDialog, { SlowConnectionWarningDialogClass } from './dialogs/SlowConnectionWarningDialog';\nimport IsVisible from './components/IsVisible';\n\nimport enLocal from './i18n/en.json';\nimport deLocal from './i18n/de.json';\nimport ruLocal from './i18n/ru.json';\nimport ptLocal from './i18n/pt.json';\nimport nlLocal from './i18n/nl.json';\nimport frLocal from './i18n/fr.json';\nimport itLocal from './i18n/it.json';\nimport esLocal from './i18n/es.json';\nimport plLocal from './i18n/pl.json';\nimport ukLocal from './i18n/uk.json';\nimport zhCNLocal from './i18n/zh-cn.json';\n\n// Tabs\nconst Adapters = React.lazy(() => import('./tabs/Adapters'));\nconst Instances = React.lazy(() => import('./tabs/Instances'));\nconst Intro = React.lazy(() => import('./tabs/Intro'));\nconst Logs = React.lazy(() => import('./tabs/Logs'));\nconst Files = React.lazy(() => import('./tabs/Files'));\nconst Objects = React.lazy(() => import('./tabs/Objects'));\nconst Users = React.lazy(() => import('./tabs/Users'));\nconst Enums = React.lazy(() => import('./tabs/Enums'));\nconst CustomTab = React.lazy(() => import('./tabs/CustomTab'));\nconst Hosts = React.lazy(() => import('./tabs/Hosts'));\nconst EasyMode = React.lazy(() => import('./tabs/EasyMode'));\n\ndeclare global {\n interface Window {\n _localStorage?: Storage;\n _sessionStorage?: Storage;\n\n sidebar?: {\n addPanel: (name: string, icon: string, element: React.ReactNode) => void;\n };\n opera: boolean;\n }\n interface Navigator {\n // @deprecated\n userLanguage: string;\n }\n}\n\nconst query: { login?: boolean } = {};\n\n(window.location.search || '')\n .replace(/^\\?/, '')\n .split('&')\n .forEach(attr => {\n const parts = attr.split('=');\n if (!parts[0]) {\n return;\n }\n (query as Record<string, boolean | string>)[parts[0]] =\n parts[1] === undefined ? true : decodeURIComponent(parts[1]);\n });\n\nconst styles: Record<string, any> = {\n root: {\n display: 'flex',\n height: '100%',\n },\n appBar: (theme: IobTheme) => ({\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n }),\n logoWhite: {\n backgroundColor: '#FFFFFF',\n },\n appBarShift: (theme: IobTheme) => ({\n width: `calc(100% - ${DRAWER_FULL_WIDTH}px)`,\n ml: DRAWER_FULL_WIDTH / 8,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n }),\n appBarShiftEdit: (theme: IobTheme) => ({\n width: `calc(100% - ${DRAWER_EDIT_WIDTH}px)`,\n ml: DRAWER_EDIT_WIDTH / 8,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n }),\n appBarShiftCompact: (theme: IobTheme) => ({\n width: `calc(100% - ${DRAWER_COMPACT_WIDTH}px)`,\n ml: DRAWER_COMPACT_WIDTH / 8,\n transition: theme.transitions.create(['margin', 'width'], {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n }),\n menuButton: {\n marginRight: 16,\n },\n hide: {\n display: 'none',\n },\n content: (theme: IobTheme) => ({\n flexGrow: 1,\n padding: 1,\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.sharp,\n duration: theme.transitions.duration.leavingScreen,\n }),\n overflowY: 'auto',\n mt: `${theme.mixins.toolbar?.minHeight}px`,\n '@media (min-width:0px) and (orientation: landscape)': {\n // @ts-expect-error must be defined\n mt: theme.mixins.toolbar['@media (min-width:0px) and (orientation: landscape)']?.minHeight\n ? // @ts-expect-error must be defined\n `${theme.mixins.toolbar['@media (min-width:0px) and (orientation: landscape)'].minHeight}px`\n : undefined,\n },\n '@media (min-width:600px)': {\n // @ts-expect-error must be defined\n mt: theme.mixins.toolbar['@media (min-width:600px)']?.minHeight\n ? // @ts-expect-error must be defined\n `${theme.mixins.toolbar['@media (min-width:600px)'].minHeight}px`\n : undefined,\n },\n }),\n contentMargin: {\n ml: -DRAWER_FULL_WIDTH / 8,\n },\n contentMarginEdit: {\n ml: -DRAWER_EDIT_WIDTH / 8,\n },\n contentMarginCompact: {\n ml: -DRAWER_COMPACT_WIDTH / 8,\n },\n contentShift: (theme: IobTheme) => ({\n transition: theme.transitions.create('margin', {\n easing: theme.transitions.easing.easeOut,\n duration: theme.transitions.duration.enteringScreen,\n }),\n ml: 0,\n }),\n expertIcon: {\n width: 22,\n height: 22,\n // color: theme.palette.text ? theme.palette.text.disabled : 'grey'\n },\n expertIconActive: {\n // color: theme.palette.action.active\n },\n baseSettingsButton: {\n color: 'red',\n },\n alert_info: {},\n alert_error: {\n backgroundColor: '#f44336',\n },\n alert_success: {\n backgroundColor: '#4caf50',\n },\n avatarNotVisible: {\n opacity: 0,\n marginLeft: 5,\n transition: 'opacity 0.3s',\n width: 'initial',\n },\n avatarVisible: {\n opacity: 1,\n },\n cmd: {\n animation: '1s linear infinite alternate $myEffect',\n opacity: 0.2,\n },\n errorCmd: {\n color: '#a90000',\n animation: '0.2s linear infinite alternate myEffect2',\n },\n performed: (theme: IobTheme) => ({\n color: theme.palette.mode === 'light' ? '#3bfd44' : '#388e3c',\n animation: '0.2s linear infinite alternate myEffect2',\n }),\n wrapperButtons: {\n display: 'flex',\n marginRight: 'auto',\n overflowY: 'auto',\n },\n\n flexGrow: {\n flexGrow: 2,\n },\n userBadge: {\n lineHeight: '48px',\n display: 'inline-block',\n },\n userIcon: {\n borderRadius: 4,\n width: 44,\n height: 44,\n verticalAlign: 'middle',\n marginLeft: 10,\n marginRight: 10,\n },\n userText: {\n verticalAlign: 'middle',\n fontSize: 16,\n maxWidth: 250,\n marginRight: 10,\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: 'inline-block',\n },\n userBackground: (theme: IobTheme) => ({\n borderRadius: 1,\n backgroundColor: theme.palette.mode === 'dark' ? '#EEE' : '#222',\n p: 0.5,\n }),\n styleVersion: {\n fontSize: 10,\n },\n wrapperName: {\n display: 'flex',\n flexDirection: 'column',\n marginRight: 10,\n },\n expertBadge: {\n mt: '11px',\n mr: '11px',\n },\n siteName: {\n lineHeight: '48px',\n fontSize: 24,\n marginLeft: 10,\n marginRight: 10,\n display: 'inline-block',\n verticalAlign: 'middle',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\ninterface ObjectGuiSettings extends ioBroker.StateObject {\n common: {\n name: ioBroker.StringOrTranslated;\n type: 'boolean';\n read: true;\n write: false;\n role: 'state';\n };\n native: {\n localStorage: Record<string, any>;\n sessionStorage: Record<string, any>;\n 'App.drawerState'?: string;\n };\n}\n\nconst DEFAULT_GUI_SETTINGS_OBJECT: ObjectGuiSettings = {\n _id: '',\n type: 'state',\n common: {\n name: 'Admin settings',\n type: 'boolean',\n read: true,\n write: false,\n role: 'state',\n },\n native: {\n localStorage: {},\n sessionStorage: {},\n },\n};\n\ninterface AppProps {\n width: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n}\n\ntype CompactRepository = Record<\n string,\n {\n icon: ioBroker.AdapterCommon['icon'];\n version: string;\n }\n>;\ntype CompactInstalledInfo = Record<\n string,\n {\n version: string;\n ignoreVersion?: string;\n }\n>;\n\ninterface AppState {\n connected: boolean;\n progress: number;\n ready: boolean;\n lang: ioBroker.Languages;\n expertMode: boolean;\n expertModeDialog?: boolean;\n showGuiSettings?: HTMLButtonElement | null;\n hosts: CompactHost[];\n currentHost: string;\n currentHostName: string;\n ownHost: string;\n currentTab: {\n tab: string;\n dialog?: string;\n id?: string;\n arg?: string;\n };\n systemConfig: ioBroker.SystemConfigObject;\n showHostWarning: {\n host: string;\n instances: Record<string, ioBroker.InstanceObject>;\n result: FilteredNotificationInformation;\n } | null;\n user: {\n id: string;\n name: string;\n color?: string;\n icon?: string;\n invertBackground: boolean;\n } | null;\n repository: CompactRepository;\n installed: CompactInstalledInfo;\n waitForRestart: boolean;\n tabs: any;\n config: Record<string, any>;\n stateChanged: boolean;\n theme: IobTheme;\n themeName: ThemeName;\n themeType: ThemeType;\n alert: boolean;\n alertType: 'error' | 'warning' | 'info' | 'success';\n alertMessage: string;\n drawerState: 0 | 1 | 2;\n editMenuList: boolean;\n tab: any;\n allStored: boolean;\n dataNotStoredDialog: boolean;\n dataNotStoredTab: {\n tab: string;\n subTab?: string;\n param?: string;\n } | null;\n baseSettingsOpened: boolean;\n unsavedDataInDialog: boolean;\n systemSettingsOpened: boolean;\n\n cmd: string | null;\n cmdDialog: boolean;\n commandHost: string | null;\n callback?: ((exitCode?: number) => void) | null;\n commandError: boolean;\n commandRunning: boolean;\n\n wizard: boolean;\n performed: boolean;\n discoveryAlive: boolean;\n readTimeoutMs: number;\n showSlowConnectionWarning: boolean;\n expireWarningMode: boolean;\n versionAdmin: string;\n forceUpdateAdapters: number;\n noTranslation: boolean;\n cloudNotConnected: boolean;\n cloudReconnect: number;\n showRedirect: string;\n redirectCountDown: number;\n triggerAdapterUpdate: number;\n updating: boolean;\n notificationsDialog: boolean;\n notifications: Record<string, any>;\n /** Number of active notifications */\n noNotifications: NotificationsCount;\n configNotSaved: boolean;\n login: boolean;\n hostname: string;\n hasGlobalError?: null | Error;\n guiSettings?: boolean;\n strictEasyMode?: boolean;\n easyModeConfigs?: InstanceConfig[];\n adapters: Record<string, CompactAdapterInfo>;\n showNews?: {\n checkNews: ShowMessage[];\n lastNewsId: string | undefined;\n } | null;\n}\n\nclass App extends Router<AppProps, AppState> {\n private readonly translations: Record<ioBroker.Languages, Record<string, string>>;\n\n /** Seconds before logout to show warning */\n private readonly EXPIRE_WARNING_THRESHOLD: number = 120;\n\n private refConfigIframe: HTMLIFrameElement | null = null;\n\n private readonly refUser: RefObject<HTMLDivElement>;\n\n private readonly refUserDiv: RefObject<HTMLDivElement>;\n\n private expireInSec: number | null = null;\n\n private lastExecution: number = 0;\n\n private pingAuth: ReturnType<typeof setTimeout> | null = null;\n\n private expireInSecInterval: ReturnType<typeof setTimeout> | null = null;\n\n private readonly toggleThemePossible: boolean;\n\n private readonly expireText: string = I18n.t('Session expire in %s', '%s');\n\n private adminGuiConfig: AdminGuiConfig;\n\n private logsWorker: LogsWorker | null;\n\n private instancesWorker: InstancesWorker | null;\n\n private hostsWorker: HostsWorker | null;\n\n private adaptersWorker: AdaptersWorker | null;\n\n private objectsWorker: ObjectsWorker | null;\n\n private guiSettings: ObjectGuiSettings;\n\n private localStorageTimer: ReturnType<typeof setTimeout> | null = null;\n\n private languageSet: boolean;\n\n private socket: AdminConnection;\n\n private adminInstance: string = '';\n\n private newsInstance: number = 0;\n\n constructor(props: AppProps) {\n super(props);\n\n try {\n window.alert = message => {\n if (message && message.toString().toLowerCase().includes('error')) {\n console.error(message);\n this.showAlert(message.toString(), 'error');\n } else {\n console.log(message);\n this.showAlert(message.toString(), 'info');\n }\n };\n } catch {\n // ignore. FF could not redefine alert\n }\n\n // init translations\n this.translations = dictionary;\n\n const translations: Record<ioBroker.Languages, Record<string, string>> = {\n en: enLocal,\n de: deLocal,\n ru: ruLocal,\n pt: ptLocal,\n nl: nlLocal,\n fr: frLocal,\n it: itLocal,\n es: esLocal,\n pl: plLocal,\n uk: ukLocal,\n 'zh-cn': zhCNLocal,\n };\n\n // merge together\n Object.keys(translations).forEach((lang: ioBroker.Languages) =>\n Object.assign(this.translations[lang], translations[lang]),\n );\n\n // init translations\n I18n.setTranslations(this.translations);\n I18n.setLanguage(\n (window.navigator.language || window.navigator.userLanguage || 'en')\n .substring(0, 2)\n .toLowerCase() as ioBroker.Languages,\n );\n\n this.refUser = React.createRef<HTMLDivElement>();\n this.refUserDiv = React.createRef<HTMLDivElement>();\n this.adminGuiConfig = {\n admin: {\n menu: {},\n settings: {},\n adapters: {},\n login: {},\n },\n };\n\n const vendorPrefix = window.vendorPrefix;\n this.toggleThemePossible = !vendorPrefix || vendorPrefix === '@@vendorPrefix@@' || vendorPrefix === 'MV';\n\n if (!query.login) {\n const drawerStateStr = (window._localStorage || window.localStorage).getItem('App.drawerState');\n let drawerState: 0 | 1 | 2;\n if (drawerStateStr) {\n drawerState = parseInt(drawerStateStr, 10) as 0 | 1 | 2;\n } else {\n drawerState = this.props.width === 'xs' ? (DrawerStates.closed as 1) : (DrawerStates.opened as 0);\n }\n\n const theme = App.createTheme();\n\n // install setter for configNotSaved (used in javascript)\n Object.defineProperty(window, 'configNotSaved', {\n get: () => this.state.configNotSaved,\n set: configNotSaved => {\n const allStored = !configNotSaved;\n if (allStored !== this.state.allStored) {\n this.setState({ allStored });\n }\n },\n configurable: true,\n });\n\n this.state = {\n connected: false,\n progress: 0,\n ready: false,\n lang: 'en',\n\n hostname: window.location.hostname,\n\n expertMode: false,\n\n hosts: [],\n currentHost: '',\n currentHostName: '',\n ownHost: '',\n currentTab: Router.getLocation(),\n systemConfig: null,\n user: null, // Logged in user\n\n repository: {},\n installed: {},\n\n waitForRestart: false,\n tabs: null,\n config: {},\n\n stateChanged: false,\n\n theme,\n themeName: App.getThemeName(theme),\n themeType: App.getThemeType(theme),\n\n alert: false,\n alertType: 'info',\n alertMessage: '',\n drawerState,\n editMenuList: false,\n\n tab: null,\n allStored: true,\n dataNotStoredDialog: false,\n dataNotStoredTab: null,\n\n baseSettingsOpened: false,\n unsavedDataInDialog: false,\n systemSettingsOpened: false,\n\n cmd: null,\n cmdDialog: false,\n commandHost: null,\n commandError: false,\n commandRunning: false,\n\n wizard: true,\n performed: false,\n\n discoveryAlive: false,\n\n readTimeoutMs: SlowConnectionWarningDialogClass.getReadTimeoutMs(),\n showSlowConnectionWarning: false,\n\n /** if true, shows the expiry warning (left time and update button) */\n expireWarningMode: false,\n\n versionAdmin: '',\n\n forceUpdateAdapters: 0,\n\n noTranslation: (window._localStorage || window.localStorage).getItem('App.noTranslation') !== 'false',\n\n cloudNotConnected: false,\n cloudReconnect: 0,\n\n showRedirect: '',\n redirectCountDown: 0,\n\n triggerAdapterUpdate: 0,\n\n updating: false, // js controller updating\n /** If the notification dialog should be shown */\n notificationsDialog: false,\n /** Notifications, excluding the system ones */\n notifications: {},\n /** Number of new notifications */\n noNotifications: {\n warning: 0,\n other: 0,\n },\n\n configNotSaved: false,\n login: false,\n showHostWarning: null,\n adapters: {},\n };\n this.logsWorker = null;\n this.instancesWorker = null;\n this.hostsWorker = null;\n } else {\n const theme = App.createTheme();\n this.state = {\n login: true,\n theme,\n themeName: App.getThemeName(theme),\n themeType: App.getThemeType(theme),\n } as AppState;\n }\n }\n\n static getDerivedStateFromError(error: null | { message: string; stack: any }): {\n hasGlobalError: null | { message: string; stack: any };\n } {\n // Update state so the next render will show the fallback UI.\n return { hasGlobalError: error };\n }\n\n componentDidCatch(error: Error): void {\n this.setState({ hasGlobalError: error });\n }\n\n setUnsavedData(hasUnsavedData: boolean): void {\n if (hasUnsavedData !== this.state.unsavedDataInDialog) {\n this.setState({ unsavedDataInDialog: hasUnsavedData });\n }\n }\n\n // If the background color must be inverted. Depends on the current theme.\n mustInvertBackground(color: string): boolean {\n if (!color) {\n return false;\n }\n const invertedColor = Utils.invertColor(color, true);\n if (invertedColor === '#FFFFFF' && this.state.themeType === 'dark') {\n return true;\n }\n\n return invertedColor === '#000000' && this.state.themeType === 'light';\n }\n\n localStorageGetItem = (name: string): any => this.guiSettings.native.localStorage[name];\n\n localStorageSetItem = (name: string, value: any): void => {\n if (value === null) {\n value = 'null';\n } else if (value === undefined) {\n this.localStorageRemoveItem(name);\n return;\n }\n this.guiSettings.native.localStorage[name] = value.toString();\n\n this.localStorageSave();\n };\n\n localStorageRemoveItem = (name: string): void => {\n if (Object.prototype.hasOwnProperty.call(this.guiSettings.native.localStorage, name)) {\n delete this.guiSettings.native.localStorage[name];\n this.localStorageSave();\n }\n };\n\n sessionStorageGetItem = (name: string): any => this.guiSettings.native.sessionStorage[name];\n\n sessionStorageSetItem = (name: string, value: any): void => {\n if (value === null) {\n value = 'null';\n } else if (value === undefined) {\n this.sessionStorageRemoveItem(name);\n return;\n }\n this.guiSettings.native.sessionStorage[name] = value.toString();\n this.localStorageSave();\n };\n\n sessionStorageRemoveItem = (name: string): void => {\n if (Object.prototype.hasOwnProperty.call(this.guiSettings.native.sessionStorage, name)) {\n delete this.guiSettings.native.sessionStorage[name];\n this.localStorageSave();\n }\n };\n\n localStorageSave(): void {\n if (this.localStorageTimer) {\n clearTimeout(this.localStorageTimer);\n }\n this.localStorageTimer = setTimeout(async () => {\n this.localStorageTimer = null;\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, this.guiSettings);\n }, 200);\n }\n\n toggleTranslation = (): void => {\n (window._localStorage || window.localStorage).setItem(\n 'App.noTranslation',\n this.state.noTranslation ? 'false' : 'true',\n );\n this.setState({ noTranslation: !this.state.noTranslation });\n };\n\n async getGUISettings(): Promise<void> {\n let obj;\n\n if (!this.adminInstance) {\n return;\n }\n\n try {\n obj = await this.socket.getObject(`system.adapter.${this.adminInstance}.guiSettings`);\n } catch (e) {\n console.warn(`Could not get \"system.adapter.${this.adminInstance}.guiSettings\": ${e.message}`);\n }\n\n if (!obj) {\n obj = JSON.parse(JSON.stringify(DEFAULT_GUI_SETTINGS_OBJECT));\n try {\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, obj);\n } catch (e) {\n console.warn(`Could not update \"system.adapter.${this.adminInstance}.guiSettings\": ${e}`);\n }\n }\n\n let state;\n try {\n state = await this.socket.getState(`system.adapter.${this.adminInstance}.guiSettings`);\n } catch {\n state = { val: false };\n }\n if (state?.val) {\n this.guiSettings = obj;\n this.guiSettings.native = this.guiSettings.native || { localStorage: {}, sessionStorage: {} };\n if (!this.guiSettings.native.localStorage) {\n this.guiSettings.native = { localStorage: this.guiSettings.native, sessionStorage: {} };\n }\n\n // @ts-expect-error it is not full implementation of storage\n window._localStorage = {\n getItem: this.localStorageGetItem,\n setItem: this.localStorageSetItem,\n removeItem: this.localStorageRemoveItem,\n };\n // @ts-expect-error it is not full implementation of storage\n window._sessionStorage = {\n getItem: this.sessionStorageGetItem,\n setItem: this.sessionStorageSetItem,\n removeItem: this.sessionStorageRemoveItem,\n };\n\n // this is only settings that initialized before the connection was established\n const drawerStateStr = (window._localStorage || window.localStorage).getItem('App.drawerState');\n let drawerState: 0 | 1 | 2;\n if (drawerStateStr) {\n drawerState = parseInt(drawerStateStr, 10) as 0 | 1 | 2;\n } else {\n drawerState = this.props.width === 'xs' ? (DrawerStates.closed as 1) : (DrawerStates.opened as 0);\n }\n const noTranslation =\n (window._localStorage || window.localStorage).getItem('App.noTranslation') !== 'false';\n\n this.setState({ guiSettings: true, drawerState, noTranslation }, () => {\n if (Utils.getThemeName() !== this.state.theme.name) {\n this.toggleTheme(Utils.getThemeName());\n }\n });\n } else if (this.state.guiSettings) {\n window._localStorage = null;\n window._sessionStorage = null;\n\n this.setState({ guiSettings: false });\n }\n }\n\n enableGuiSettings(enabled: boolean, ownSettings?: boolean): void {\n if (enabled && !this.guiSettings) {\n void this.socket.getObject(`system.adapter.${this.adminInstance}.guiSettings`).then(async obj => {\n this.guiSettings = obj || JSON.parse(JSON.stringify(DEFAULT_GUI_SETTINGS_OBJECT));\n\n if (ownSettings || !this.guiSettings.native || !Object.keys(this.guiSettings.native).length) {\n this.guiSettings.native = { localStorage: {}, sessionStorage: {} };\n Object.keys(window.localStorage).forEach(name => {\n if (\n name !== 'getItem' &&\n name !== 'setItem' &&\n name !== 'removeItem' &&\n name !== 'clear' &&\n name !== 'key' &&\n name !== 'length'\n ) {\n this.guiSettings.native.localStorage[name] = window.localStorage.getItem(name);\n }\n });\n\n Object.keys(window.sessionStorage).forEach(name => {\n if (\n name !== 'getItem' &&\n name !== 'setItem' &&\n name !== 'removeItem' &&\n name !== 'clear' &&\n name !== 'key' &&\n name !== 'length'\n ) {\n this.guiSettings.native.sessionStorage[name] = window.sessionStorage.getItem(name);\n }\n });\n await this.socket.setObject(`system.adapter.${this.adminInstance}.guiSettings`, this.guiSettings);\n await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, {\n val: true,\n ack: true,\n });\n } else {\n await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, {\n val: true,\n ack: true,\n });\n window.location.reload();\n }\n\n await this.getGUISettings();\n });\n } else if (!enabled && this.guiSettings) {\n void this.socket.getObject(`system.adapter.${this.adminInstance}.guiSettings`).then(async obj => {\n if (!obj) {\n try {\n // create an object if not exists\n await this.socket.setObject(\n `system.adapter.${this.adminInstance}.guiSettings`,\n DEFAULT_GUI_SETTINGS_OBJECT,\n );\n } catch (e) {\n console.error(`Cannot create system.adapter.${this.adminInstance}.guiSettings\": ${e}`);\n }\n }\n window._localStorage = null;\n window._sessionStorage = null;\n\n // clear localStorage\n Object.keys(window.localStorage).forEach(key => window.localStorage.removeItem(key));\n Object.keys(window.sessionStorage).forEach(key => window.sessionStorage.removeItem(key));\n\n Object.keys(this.guiSettings.native.localStorage).forEach(name =>\n window.localStorage.setItem(name, this.guiSettings.native.localStorage[name]),\n );\n Object.keys(this.guiSettings.native.sessionStorage).forEach(name =>\n window.sessionStorage.setItem(name, this.guiSettings.native.sessionStorage[name]),\n );\n\n this.guiSettings = null;\n\n try {\n await this.socket.setState(`system.adapter.${this.adminInstance}.guiSettings`, {\n val: false,\n ack: true,\n });\n } catch (e) {\n window.alert(`Cannot disable settings: ${e}`);\n }\n this.setState({ guiSettings: false });\n });\n }\n }\n\n componentDidMount(): void {\n if (!this.state.login) {\n window.addEventListener('hashchange', this.onHashChanged, false);\n\n if (!this.state.currentTab.tab) {\n this.handleNavigation('tab-intro');\n } else {\n this.setTitle(this.state.currentTab.tab.replace('tab-', ''));\n }\n\n this.socket = new Connection({\n protocol: window.location.protocol,\n host: window.location.hostname,\n\n name: 'admin',\n admin5only: true,\n port: App.getPort(),\n autoSubscribes: ['system.adapter.*'], // Do not subscribe on '*' and really we don't need a 'system.adapter.*' too. Every tab must subscribe itself to everything that it needs\n autoSubscribeLog: true,\n onProgress: progress => {\n if (progress === PROGRESS.CONNECTING) {\n this.setState({\n connected: false,\n });\n } else if (progress === PROGRESS.READY) {\n // BF: (2022.05.09) here must be this.socket.getVersion(true), but I have no Idea, why it does not work :(\n this.socket\n .getVersion()\n .then(async versionInfo => {\n console.log(\n `Stored version: ${this.state.versionAdmin}, new version: ${versionInfo.version}`,\n );\n if (this.state.versionAdmin && this.state.versionAdmin !== versionInfo.version) {\n window.alert('New adapter version detected. Reloading...');\n setTimeout(() => window.location.reload(), 500);\n }\n if (!this.adminInstance) {\n this.adminInstance = await this.socket.getCurrentInstance();\n }\n\n // read settings anew\n await this.getGUISettings();\n\n const newState: Partial<AppState> = {\n connected: true,\n progress: 100,\n versionAdmin: versionInfo.version,\n };\n\n if (this.state.cmd && this.state.cmd.match(/ admin(@[-.\\w]+)?$/)) {\n // close the command dialog after reconnecting (maybe admin was restarted, and update is now finished)\n newState.commandRunning = false;\n newState.forceUpdateAdapters = this.state.forceUpdateAdapters + 1;\n\n this.closeCmdDialog(() => {\n this.setState(newState as AppState);\n window.location.reload();\n });\n } else {\n try {\n const adminObj = await this.socket.getObject(\n `system.adapter.${this.adminInstance}`,\n );\n // use instance language\n if (adminObj?.native?.language) {\n if (adminObj.native.language !== I18n.getLanguage()) {\n console.log(`Language changed to ${adminObj.native.language}`);\n I18n.setLanguage(adminObj.native.language);\n if (this.languageSet) {\n window.location.reload();\n } else {\n this.languageSet = true;\n }\n }\n } else if (this.socket.systemLang !== I18n.getLanguage()) {\n console.log(`Language changed to ${this.socket.systemLang}`);\n I18n.setLanguage(this.socket.systemLang);\n if (this.languageSet) {\n window.location.reload();\n } else {\n this.languageSet = true;\n }\n }\n } catch (e) {\n console.error(`Cannot read admin settings: ${e}`);\n }\n\n this.setState(newState as AppState);\n }\n })\n .catch(err => {\n console.error(`Cannot read version: ${err}`);\n if (err === 'ioBroker is not connected') {\n setInterval(() => {\n if (this.state.cloudReconnect > 0) {\n this.setState({ cloudReconnect: this.state.cloudReconnect - 1 });\n } else {\n window.location.reload();\n }\n }, 1_000);\n\n this.setState({\n cloudNotConnected: true,\n cloudReconnect: 10,\n });\n }\n });\n } else {\n this.setState({\n connected: true,\n progress: Math.round((PROGRESS.READY / progress) * 100),\n });\n }\n },\n onReady: async () => {\n // Combine adminGuiConfig with user settings\n this.adminGuiConfig = {\n admin: {\n menu: {},\n settings: {},\n adapters: {},\n login: {},\n },\n ...this.socket.systemConfig.native?.vendor,\n };\n this.adminGuiConfig.admin.menu = this.adminGuiConfig.admin.menu || {};\n this.adminGuiConfig.admin.settings = this.adminGuiConfig.admin.settings || {};\n this.adminGuiConfig.admin.adapters = this.adminGuiConfig.admin.adapters || {};\n this.adminGuiConfig.admin.login = this.adminGuiConfig.admin.login || {};\n\n try {\n if (!this.adminInstance) {\n this.adminInstance = await this.socket.getCurrentInstance();\n }\n if (!this.adminInstance) {\n console.error('Cannot read admin instance!');\n }\n const adminObj = await this.socket.getObject(`system.adapter.${this.adminInstance}`);\n // use instance language\n if (adminObj?.native?.language) {\n I18n.setLanguage(adminObj.native.language);\n } else {\n I18n.setLanguage(this.socket.systemLang);\n }\n\n this.languageSet = true;\n const isStrict = await this.socket.getIsEasyModeStrict();\n\n await this.getGUISettings();\n\n if (isStrict) {\n const config = await this.socket.getEasyMode();\n this.setState({\n lang: this.socket.systemLang,\n ready: true,\n strictEasyMode: true,\n easyModeConfigs: config.configs,\n });\n return;\n }\n\n // create Workers\n this.logsWorker = this.logsWorker || new LogsWorker(this.socket, 1_000);\n this.instancesWorker = this.instancesWorker || new InstancesWorker(this.socket);\n this.hostsWorker = this.hostsWorker || new HostsWorker(this.socket);\n this.adaptersWorker = this.adaptersWorker || new AdaptersWorker(this.socket);\n this.objectsWorker = this.objectsWorker || new ObjectsWorker(this.socket);\n\n const newState: Partial<AppState> = {\n lang: this.socket.systemLang,\n ready: true,\n };\n\n try {\n newState.systemConfig = await this.socket.getCompactSystemConfig();\n newState.wizard = !newState.systemConfig.common.licenseConfirmed;\n await this.findCurrentHost(newState);\n await this.readRepoAndInstalledInfo(newState.currentHost, newState.hosts);\n } catch (e) {\n console.log(`Error reading repo in onReady: ${e.stack}`);\n }\n\n this.adaptersWorker.registerRepositoryHandler(this.repoChangeHandler);\n this.adaptersWorker.registerHandler(this.adaptersChangeHandler);\n this.hostsWorker.registerHandler(this.updateHosts);\n this.hostsWorker.registerNotificationHandler(this.handleNewNotifications);\n\n const storedExpertMode = (window._sessionStorage || window.sessionStorage).getItem(\n 'App.expertMode',\n );\n newState.expertMode = storedExpertMode\n ? storedExpertMode === 'true'\n : !!newState.systemConfig.common.expertMode;\n\n // Read user and show him\n if (this.socket.isSecure || this.socket.systemConfig.native?.vendor) {\n try {\n const user = await this.socket.getCurrentUser();\n\n const userObj = await this.socket.getObject(`system.user.${user}`);\n\n if (userObj.native?.vendor) {\n Object.assign(this.adminGuiConfig, userObj.native.vendor);\n }\n\n if (this.socket.isSecure) {\n this.setState({\n user: {\n id: userObj._id,\n name: Utils.getObjectNameFromObj(userObj, this.socket.systemLang),\n color: userObj.common.color,\n icon: userObj.common.icon,\n invertBackground: this.mustInvertBackground(userObj.common.color),\n },\n });\n\n // start ping interval\n void this.makePingAuth();\n }\n } catch (e) {\n console.error(`Could not determine user to show: ${e.toString()}, ${e.stack}`);\n this.showAlert(e.toString(), 'error');\n }\n }\n\n this.setState(newState as AppState, () => this.setCurrentTabTitle());\n\n void this.socket.subscribeState('system.adapter.discovery.0.alive', this.onDiscoveryAlive);\n\n // Give some time for communication\n setTimeout(() => this.logsWorkerChanged(this.state.currentHost), 1000);\n\n setTimeout(\n () =>\n this.findNewsInstance().then(instance => {\n this.newsInstance = instance;\n void this.socket.subscribeState(`admin.${instance}.info.newsFeed`, this.onNews);\n }),\n 5_000,\n );\n\n setTimeout(async () => {\n const notifications = await this.hostsWorker.getNotifications(newState.currentHost);\n await this.handleNewNotifications(notifications);\n }, 3_000);\n } catch (e) {\n console.error(`Error in onReady: ${e.stack}`);\n this.showAlert(`Error in onReady: ${e.stack}`, 'error');\n }\n },\n onError: (error: string | Error) => {\n console.error(error);\n let errorStr: string;\n if (error instanceof Error) {\n errorStr = error.message || error.toString();\n } else {\n errorStr = error.toString();\n }\n if (errorStr === 'ioBroker is not connected') {\n if (!this.state.cloudNotConnected) {\n this.showAlert(I18n.t(errorStr), 'error');\n setInterval(() => {\n if (this.state.cloudReconnect > 0) {\n this.setState({ cloudReconnect: this.state.cloudReconnect - 1 });\n } else {\n window.location.reload();\n }\n }, 1_000);\n\n this.setState({\n cloudNotConnected: true,\n cloudReconnect: 10,\n });\n }\n } else {\n this.showAlert(errorStr, 'error');\n }\n },\n });\n }\n }\n\n componentWillUnmount(): void {\n window.removeEventListener('hashchange', this.onHashChanged, false);\n this.socket?.unsubscribeState('system.adapter.discovery.0.alive', this.onDiscoveryAlive);\n\n this.adaptersWorker?.unregisterRepositoryHandler(this.repoChangeHandler);\n this.adaptersWorker?.unregisterHandler(this.adaptersChangeHandler);\n this.hostsWorker?.unregisterHandler(this.updateHosts);\n\n if (this.pingAuth) {\n clearTimeout(this.pingAuth);\n this.pingAuth = null;\n }\n if (this.expireInSecInterval) {\n clearInterval(this.expireInSecInterval);\n this.expireInSecInterval = null;\n }\n\n if (window._localStorage) {\n window._localStorage = null;\n window._sessionStorage = null;\n }\n }\n\n updateHosts = (events: HostEvent[]): void => {\n const hosts: CompactHost[] = JSON.parse(JSON.stringify(this.state.hosts));\n\n events.forEach((event: HostEvent): void => {\n const elementFind = hosts.find(host => host._id === event.id);\n if (elementFind) {\n const index = hosts.indexOf(elementFind);\n if (event.obj) {\n // updated\n hosts[index] = event.obj as CompactHost;\n } else {\n // deleted\n hosts.splice(index, 1);\n }\n } else {\n // new\n hosts.push(event.obj as CompactHost);\n }\n });\n\n this.setState({ hosts });\n };\n\n repoChangeHandler = (): void => {\n void this.readRepoAndInstalledInfo(this.state.currentHost, null, true).then(() => console.log('Repo updated!'));\n };\n\n adaptersChangeHandler = (events: AdapterEvent[]): void => {\n // update installed\n //\n const installed: CompactInstalledInfo = JSON.parse(JSON.stringify(this.state.installed));\n let changed = false;\n events.forEach(event => {\n const parts = event.id.split('.');\n const adapter = parts[2];\n if (event.type === 'deleted' || !event.obj) {\n if (installed[adapter]) {\n changed = true;\n delete installed[adapter];\n }\n } else if (installed[adapter]) {\n Object.keys(installed[adapter]).forEach(attr => {\n if (\n (installed[adapter] as Record<string, any>)[attr] !==\n (event.obj.common as Record<string, any>)[attr]\n ) {\n (installed[adapter] as Record<string, any>)[attr] = (event.obj.common as Record<string, any>)[\n attr\n ];\n changed = true;\n }\n });\n } else {\n installed[adapter] = { version: event.obj.common.version };\n changed = true;\n }\n });\n\n if (changed) {\n this.setState({ installed });\n }\n };\n\n async findCurrentHost(newState: Partial<AppState>): Promise<void> {\n newState.hosts = await this.socket.getCompactHosts();\n\n if (!this.state.currentHost) {\n const currentHost = (window._localStorage || window.localStorage).getItem('App.currentHost');\n\n const itemHost = newState.hosts.find(host => host._id === currentHost);\n\n if (currentHost && itemHost) {\n newState.currentHost = itemHost._id;\n newState.currentHostName = itemHost.common?.name || itemHost._id.replace('system.host.', '');\n } else {\n newState.currentHost = newState.hosts[0]._id;\n newState.currentHostName =\n newState.hosts[0].common?.name || newState.hosts[0]._id.replace('system.host.', '');\n }\n }\n\n newState.ownHost = newState.currentHost;\n\n // Check that host is alive\n let alive;\n try {\n alive = await this.socket.getState(`${newState.currentHost}.alive`);\n } catch (e) {\n alive = null;\n console.warn(`Cannot get state ${newState.currentHost}.alive: ${e}`);\n }\n\n if (!alive || !alive.val) {\n // find first the live host\n for (let h = 0; h < newState.hosts.length; h++) {\n alive = await this.socket.getState(`${newState.hosts[h]._id}.alive`);\n if (alive && alive.val) {\n newState.currentHost = newState.hosts[h]._id;\n newState.currentHostName = newState.hosts[h].common.name;\n }\n }\n }\n }\n\n updateExpireIn(): void {\n const now = Date.now();\n this.expireInSec = this.expireInSec > 0 ? this.expireInSec - (now - this.lastExecution) / 1_000 : 0;\n\n const time = Utils.formatTime(this.expireInSec);\n if (this.refUser.current) {\n this.refUser.current.title = this.expireText.replace('%s', time);\n }\n if (this.expireInSec < this.EXPIRE_WARNING_THRESHOLD && this.refUserDiv.current) {\n this.refUserDiv.current.innerHTML = time;\n\n if (!this.state.expireWarningMode) {\n this.setState({ expireWarningMode: true });\n }\n } else if (this.state.expireWarningMode) {\n this.refUserDiv.current.innerHTML = this.state.user.name;\n this.setState({ expireWarningMode: false });\n }\n\n if (this.expireInSec <= 0) {\n window.alert('Session expired');\n // reconnect\n setTimeout(() => window.location.reload(), 1_000);\n }\n\n this.lastExecution = now;\n }\n\n /**\n * Start interval to handle logout after the session expires, this also refreshes the session\n */\n async makePingAuth(): Promise<void> {\n if (this.pingAuth) {\n clearTimeout(this.pingAuth);\n this.pingAuth = null;\n }\n\n try {\n const data = await this.socket.getCurrentSession();\n\n if (data) {\n if (!this.expireInSecInterval) {\n this.expireInSecInterval = setInterval(() => this.updateExpireIn(), 1_000);\n }\n this.expireInSec = data.expireInSec;\n this.lastExecution = Date.now();\n this.updateExpireIn();\n }\n } catch (e) {\n window.alert(`Session timeout: ${e}`);\n // reconnect\n setTimeout(() => window.location.reload(), 1_000);\n }\n }\n\n onDiscoveryAlive = (_name: string, value?: ioBroker.State | null): void => {\n if (!!value?.val !== this.state.discoveryAlive) {\n this.setState({ discoveryAlive: !!value?.val });\n }\n };\n\n getDiscoveryModal = (): JSX.Element => (\n <DiscoveryDialog\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n theme={this.state.theme}\n socket={this.socket}\n dateFormat={this.state.systemConfig.common.dateFormat}\n currentHost={this.state.currentHost}\n defaultLogLevel={this.state.systemConfig.common.defaultLogLevel}\n repository={this.state.repository}\n hosts={this.state.hosts}\n onClose={() => Router.doNavigate(null)}\n />\n );\n\n async findNewsInstance(): Promise<number> {\n const maxCount = 200;\n for (let instance = 0; instance < maxCount; instance++) {\n try {\n const adminAlive = await this.socket.getState(`system.adapter.admin.${instance}.alive`);\n if (adminAlive?.val) {\n return instance;\n }\n } catch (e) {\n console.error(`Cannot find news instance: ${e.stack}`);\n this.showAlert(`Cannot find news instance: ${e.stack}`, 'error');\n }\n }\n return 0;\n }\n\n /**\n * Render the notification dialog\n */\n renderNotificationsDialog(): JSX.Element | null {\n if (!this.state.notificationsDialog) {\n return null;\n }\n\n return (\n <NotificationsDialog\n notifications={this.state.notifications?.notifications || {}}\n instances={this.state.notifications?.instances || {}}\n onClose={() => this.setState({ notificationsDialog: false })}\n ackCallback={(host, name) => this.socket.clearNotifications(host, name)}\n dateFormat={this.state.systemConfig.common.dateFormat}\n isFloatComma={this.state.systemConfig.common.isFloatComma}\n themeType={this.state.themeType}\n themeName={this.state.themeName}\n theme={this.state.theme}\n socket={this.socket}\n />\n );\n }\n\n renderHostWarningDialog(): JSX.Element | null {\n if (!this.state.showHostWarning) {\n return null;\n }\n\n return (\n <HostWarningDialog\n instances={this.state.showHostWarning.instances}\n messages={this.state.showHostWarning.result.system.categories}\n dateFormat={this.state.systemConfig.common.dateFormat}\n themeType={this.state.themeType}\n ackCallback={name => this.socket.clearNotifications(this.state.showHostWarning.host, name)}\n onClose={() => this.setState({ showHostWarning: null })}\n />\n );\n }\n\n /** Called when notifications detected, updates the notification indicator */\n handleNewNotifications = async (notifications: Record<string, NotificationAnswer>): Promise<void> => {\n const noNotifications: NotificationsCount = {\n warning: 0,\n other: 0,\n };\n\n // if host is offline it returns null\n if (!notifications) {\n this.setState({ noNotifications, notifications: {} });\n return;\n }\n\n for (const hostDetails of Object.values(notifications)) {\n if (!hostDetails?.result) {\n continue;\n }\n for (const [scope, scopeDetails] of Object.entries(hostDetails.result)) {\n if (scope === 'system') {\n continue;\n }\n\n for (const categoryDetails of Object.values(scopeDetails.categories)) {\n for (const instanceDetails of Object.values(categoryDetails.instances)) {\n const isWarning = categoryDetails.severity === 'alert';\n noNotifications[isWarning ? 'warning' : 'other'] += instanceDetails.messages.length;\n }\n }\n }\n }\n\n const instances = await this.instancesWorker.getObjects();\n\n this.setState({ noNotifications, notifications: { notifications, instances } });\n };\n\n /**\n * Shows notifications to the user\n *\n * @param notifications present notifications\n * @param host host to get notifications from\n */\n showAdaptersWarning = async (\n notifications: Record<string, NotificationAnswer | null>,\n host: string,\n ): Promise<void> => {\n if (!notifications || !notifications[host] || !notifications[host].result) {\n return;\n }\n\n const result = notifications[host].result;\n\n if (result?.system && Object.keys(result.system.categories).length) {\n await this.instancesWorker.getObjects().then(instances =>\n this.setState({\n showHostWarning: {\n host,\n instances,\n result,\n },\n }),\n );\n }\n };\n\n /**\n * Get news for specific adapter instance\n */\n onNews = async (_id: string, newsFeed: ioBroker.State): Promise<void> => {\n try {\n if (!this.state.systemConfig.common.licenseConfirmed) {\n return;\n }\n\n const lastNewsId = await this.socket.getState(`admin.${this.newsInstance}.info.newsLastId`);\n if (newsFeed?.val) {\n let news = null;\n try {\n news = JSON.parse(newsFeed.val as string);\n } catch {\n console.error(`Cannot parse news: ${newsFeed.val}`);\n }\n\n if (news?.length && news[0].id !== lastNewsId?.val) {\n const uuid: string = await this.socket.getUuid();\n const info = await this.socket.getHostInfo(this.state.currentHost).catch(() => null);\n\n const instances = await this.socket.getCompactInstances().catch(() => null);\n\n const objectsDbType = (await this.socket.getDiagData(this.state.currentHost, 'normal')).objectsType;\n\n const objects = await this.objectsWorker.getObjects(true);\n const noObjects = Object.keys(objects || {}).length;\n\n const checkNews = checkMessages(news, lastNewsId?.val as string, {\n lang: I18n.getLanguage(),\n adapters: this.state.adapters,\n instances: instances || [],\n nodeVersion: info ? info['Node.js'] || '?' : '?',\n npmVersion: info ? info.NPM || '?' : '?',\n os: info ? info.os || '?' : '?',\n activeRepo: this.state.systemConfig.common.activeRepo,\n uuid,\n objectsDbType,\n noObjects,\n });\n\n if (checkNews?.length) {\n this.setState({\n showNews: {\n checkNews,\n lastNewsId: lastNewsId?.val as string,\n },\n });\n }\n }\n }\n } catch (e) {\n console.error(`Could not process news: ${e.stack}`);\n this.showAlert(`Could not process news: ${e.stack}`, 'error');\n }\n };\n\n renderNewsDialog(): JSX.Element | null {\n if (!this.state.showNews) {\n return null;\n }\n return (\n <NewsAdminDialog\n newsArr={this.state.showNews.checkNews}\n current={this.state.showNews.lastNewsId}\n onSetLastNewsId={async id => {\n if (id) {\n await this.socket.setState(`admin.${this.newsInstance}.info.newsLastId`, {\n val: id,\n ack: true,\n });\n }\n this.setState({ showNews: null });\n }}\n />\n );\n }\n\n renderSlowConnectionWarning(): JSX.Element | null {\n if (!this.state.showSlowConnectionWarning) {\n return null;\n }\n\n return (\n <SlowConnectionWarningDialog\n readTimeoutMs={this.state.readTimeoutMs}\n t={I18n.t}\n onClose={readTimeoutMs => {\n if (readTimeoutMs) {\n this.setState({ showSlowConnectionWarning: false, readTimeoutMs }, () =>\n this.readRepoAndInstalledInfo(this.state.currentHost),\n );\n } else {\n this.setState({ showSlowConnectionWarning: false });\n }\n }}\n />\n );\n }\n\n async readRepoAndInstalledInfo(currentHost: string, hosts?: CompactHost[] | null, update?: boolean): Promise<void> {\n hosts = hosts || this.state.hosts;\n\n const repository: CompactRepository = await this.socket\n .getCompactRepository(currentHost, update, this.state.readTimeoutMs)\n .catch(e => {\n window.alert(`Cannot getRepositoryCompact: ${e}`);\n if (e.toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n return {};\n });\n\n const installed: CompactInstalledInfo = await this.socket\n .getCompactInstalled(currentHost, update, this.state.readTimeoutMs)\n .catch(e => {\n window.alert(`Cannot getInstalled: ${e}`);\n if (e.toString().includes('timeout')) {\n this.setState({ showSlowConnectionWarning: true });\n }\n return {};\n });\n\n const adapters: Record<string, CompactAdapterInfo> = await this.socket.getCompactAdapters(update).catch(e => {\n window.alert(`Cannot read adapters: ${e}`);\n return {} as Record<string, CompactAdapterInfo>;\n });\n\n if (installed && adapters) {\n Object.keys(adapters).forEach(id => {\n if (installed[id] && adapters[id].iv) {\n installed[id].ignoreVersion = adapters[id].iv;\n }\n });\n }\n\n this.setState({\n repository,\n installed,\n hosts,\n adapters,\n });\n }\n\n logsWorkerChanged = (currentHost: string): void => {\n this.logsWorker?.setCurrentHost(currentHost);\n };\n\n /**\n * Updates the current currentTab in the states\n */\n onHashChanged = (): void => {\n this.setState({ currentTab: Router.getLocation() }, () => this.setCurrentTabTitle());\n };\n\n /**\n * Get the used port\n */\n static getPort(): number {\n let port = parseInt(window.location.port, 10);\n\n if (Number.isNaN(port)) {\n switch (App.getProtocol()) {\n case 'https:':\n port = 443;\n break;\n case 'http:':\n port = 80;\n break;\n default:\n break;\n }\n }\n\n if (!port || port === 3000) {\n port = 8081;\n }\n\n return port;\n }\n\n /**\n * Get the used protocol\n */\n private static getProtocol(): 'http:' | 'https:' {\n return window.location.protocol as 'http:' | 'https:';\n }\n\n /**\n * Get a theme\n */\n private static createTheme(name?: ThemeName): IobTheme {\n return Theme(Utils.getThemeName(name));\n }\n\n /**\n * Get the theme name\n */\n private static getThemeName(theme: IobTheme): ThemeName {\n return theme.name;\n }\n\n /**\n * Get the theme type\n */\n private static getThemeType(theme: IobTheme): ThemeType {\n return theme.palette.mode;\n }\n\n /** Changes the current theme */\n toggleTheme = (currentThemeName?: ThemeName): void => {\n const themeName = this.state.themeName;\n\n const newThemeName = currentThemeName || Utils.toggleTheme(themeName);\n\n const theme = App.createTheme(newThemeName);\n\n this.setState(\n {\n theme,\n themeName: newThemeName,\n themeType: App.getThemeType(theme),\n },\n () => {\n this.refConfigIframe?.contentWindow?.postMessage('updateTheme', '*');\n },\n );\n };\n\n setCurrentTabTitle(): void {\n this.setTitle(this.state.currentTab.tab.replace('tab-', ''));\n }\n\n setTitle(title: string): void {\n document.title = `${title} - ${this.state.currentHostName || 'ioBroker'}`;\n }\n\n getCurrentTab(): JSX.Element | null {\n if (this.state && this.state.currentTab && this.state.currentTab.tab) {\n if (this.state.currentTab.tab === 'tab-adapters') {\n const small = this.props.width === 'xs' || this.props.width === 'sm';\n const opened = !small && this.state.drawerState === DrawerStates.opened;\n const closed = small || this.state.drawerState === DrawerStates.closed;\n\n return (\n <Suspense fallback={<Connecting />}>\n <Adapters\n theme={this.state.theme}\n triggerUpdate={this.state.triggerAdapterUpdate}\n key=\"adapters\"\n forceUpdateAdapters={this.state.forceUpdateAdapters}\n adaptersWorker={this.adaptersWorker}\n instancesWorker={this.instancesWorker}\n themeType={this.state.themeType}\n systemConfig={this.state.systemConfig}\n socket={this.socket}\n adminHost={this.state.ownHost}\n hostsWorker={this.hostsWorker}\n currentHost={this.state.currentHost}\n ready={this.state.ready}\n t={I18n.t}\n lang={I18n.getLanguage()}\n expertMode={this.state.expertMode}\n executeCommand={(cmd: string, host?: string, callback?: (exitCode: number) => void) =>\n this.executeCommand(cmd, host, callback)\n }\n commandRunning={this.state.commandRunning}\n onSetCommandRunning={commandRunning => this.setState({ commandRunning })}\n menuOpened={opened}\n menuClosed={closed}\n adminGuiConfig={this.adminGuiConfig}\n toggleTranslation={this.toggleTranslation}\n noTranslation={this.state.noTranslation}\n adminInstance={this.adminInstance}\n currentAdminVersion={this.state.versionAdmin}\n onUpdating={updating => this.setState({ updating })}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-instances') {\n return (\n <Suspense fallback={<Connecting />}>\n <Instances\n key=\"instances\"\n menuPadding={\n this.state.drawerState === DrawerStates.closed\n ? 0\n : this.state.drawerState === DrawerStates.opened\n ? this.state.editMenuList\n ? DRAWER_EDIT_WIDTH\n : DRAWER_FULL_WIDTH\n : DRAWER_COMPACT_WIDTH\n }\n socket={this.socket}\n instancesWorker={this.instancesWorker}\n lang={I18n.getLanguage()}\n hostname={this.state.hostname}\n adminInstance={this.adminInstance}\n repository={this.state.repository}\n hosts={this.state.hosts}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n theme={this.state.theme}\n expertMode={this.state.expertMode}\n currentHost={this.state.currentHost}\n currentHostName={this.state.currentHostName}\n t={I18n.t}\n dateFormat={this.state.systemConfig.common.dateFormat}\n isFloatComma={this.state.systemConfig.common.isFloatComma}\n width={this.props.width}\n configStored={(value: boolean) => this.allStored(value)}\n executeCommand={(cmd: string, host?: string, callback?: (exitCode: number) => void) =>\n this.executeCommand(cmd, host, callback)\n }\n inBackgroundCommand={this.state.commandError || this.state.performed}\n onRegisterIframeRef={(ref: HTMLIFrameElement) => (this.refConfigIframe = ref)}\n onUnregisterIframeRef={(ref: HTMLIFrameElement) => {\n if (this.refConfigIframe === ref) {\n this.refConfigIframe = null;\n }\n }}\n handleNavigation={this.handleNavigation}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-intro') {\n return (\n <Suspense fallback={<Connecting />}>\n <Intro\n key=\"intro\"\n hostname={this.state.hostname}\n adminInstance={this.adminInstance}\n instancesWorker={this.instancesWorker}\n hostsWorker={this.hostsWorker}\n showAlert={(message: string, type?: 'error' | 'warning' | 'info' | 'success') =>\n this.showAlert(message, type)\n }\n socket={this.socket}\n t={I18n.t}\n lang={I18n.getLanguage()}\n theme={this.state.theme}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-logs') {\n return (\n <Suspense fallback={<Connecting />}>\n <Logs\n key=\"logs\"\n t={I18n.t}\n width={this.props.width}\n lang={this.state.lang}\n socket={this.socket}\n themeType={this.state.themeType}\n theme={this.state.theme}\n ready={this.state.ready}\n logsWorker={this.logsWorker}\n expertMode={this.state.expertMode}\n currentHost={this.state.currentHost}\n hostsWorker={this.hostsWorker}\n clearErrors={() => this.clearLogErrors()}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-files') {\n return (\n <Suspense fallback={<Connecting />}>\n <Files\n key=\"files\"\n ready={this.state.ready}\n t={I18n.t}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n socket={this.socket}\n themeType={this.state.themeType}\n theme={this.state.theme}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-users') {\n return (\n <Suspense fallback={<Connecting />}>\n <Users\n key=\"users\"\n ready={this.state.ready}\n t={I18n.t}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n socket={this.socket}\n themeType={this.state.themeType}\n theme={this.state.theme}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-enums') {\n return (\n <Suspense fallback={<Connecting />}>\n <Enums\n key=\"enums\"\n t={I18n.t}\n lang={I18n.getLanguage()}\n socket={this.socket}\n themeType={this.state.themeType}\n theme={this.state.theme}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-objects') {\n return (\n <Suspense\n fallback={<Connecting />}\n key=\"objects\"\n >\n <Objects\n t={I18n.t}\n theme={this.state.theme}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n expertMode={this.state.expertMode}\n objectsWorker={this.objectsWorker}\n lang={I18n.getLanguage()}\n socket={this.socket}\n dateFormat={this.state.systemConfig.common.dateFormat}\n isFloatComma={this.state.systemConfig.common.isFloatComma}\n />\n </Suspense>\n );\n }\n if (this.state.currentTab.tab === 'tab-hosts') {\n return (\n <Suspense fallback={<Connecting />}>\n <Hosts\n socket={this.socket}\n lang={I18n.getLanguage()}\n hostsWorker={this.hostsWorker}\n toggleTranslation={this.toggleTranslation}\n noTranslation={this.state.noTranslation}\n themeType={this.state.themeType}\n theme={this.state.theme}\n expertMode={this.state.expertMode}\n t={I18n.t}\n navigate={Router.doNavigate}\n currentHost={this.state.currentHost}\n executeCommand={(cmd: string, host?: string, callback?: (exitCode: number) => void) =>\n this.executeCommand(cmd, host, callback)\n }\n systemConfig={this.state.systemConfig}\n showAdaptersWarning={this.showAdaptersWarning}\n adminInstance={this.adminInstance}\n onUpdating={(updating: boolean) => this.setState({ updating })}\n instancesWorker={this.instancesWorker}\n />\n </Suspense>\n );\n }\n const m = this.state.currentTab.tab.match(/^tab-([-\\w]+)(-\\d+)?$/);\n if (m) {\n // /adapter/javascript/tab.html\n return (\n <Suspense fallback={<Connecting />}>\n <CustomTab\n key={this.state.currentTab.tab}\n t={I18n.t}\n hostname={this.state.hostname}\n adminInstance={this.adminInstance}\n hosts={this.state.hosts}\n instancesWorker={this.instancesWorker}\n tab={this.state.currentTab.tab}\n themeName={this.state.themeName}\n expertMode={this.state.expertMode}\n lang={I18n.getLanguage()}\n onRegisterIframeRef={(ref: HTMLIFrameElement) => (this.refConfigIframe = ref)}\n onUnregisterIframeRef={(ref: HTMLIFrameElement) => {\n if (this.refConfigIframe === ref) {\n this.refConfigIframe = null;\n }\n }}\n />\n </Suspense>\n );\n }\n }\n\n return null;\n }\n\n clearLogErrors(): void {\n this.logsWorker.resetErrors();\n this.logsWorker.resetWarnings();\n }\n\n getCurrentDialog(): JSX.Element | null {\n if (this.state && this.state.currentTab && this.state.currentTab.dialog) {\n if (this.state.currentTab.dialog === 'system') {\n return this.getSystemSettingsDialog();\n }\n if (this.state.currentTab.dialog === 'discovery') {\n return this.getDiscoveryModal();\n }\n }\n\n return null;\n }\n\n getSystemSettingsDialog(): JSX.Element {\n return (\n <SystemSettingsDialog\n adminGuiConfig={this.adminGuiConfig}\n width={this.props.width}\n currentHost={this.state.currentHost}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n theme={this.state.theme}\n key=\"systemSettings\"\n onClose={async (repoChanged?: boolean) => {\n Router.doNavigate(null);\n // read systemConfig anew\n const systemConfig = await this.socket.getObject('system.config');\n\n if (repoChanged) {\n this.setState({ triggerAdapterUpdate: this.state.triggerAdapterUpdate + 1, systemConfig });\n } else {\n this.setState({ systemConfig });\n }\n }}\n lang={this.state.lang}\n socket={this.socket}\n currentTab={this.state.currentTab}\n expertModeFunc={(value: boolean) => {\n (window._sessionStorage || window.sessionStorage).removeItem('App.expertMode');\n const systemConfig = JSON.parse(JSON.stringify(this.state.systemConfig));\n systemConfig.common.expertMode = value;\n this.setState({ expertMode: value, systemConfig });\n }}\n t={I18n.t}\n />\n );\n }\n\n handleAlertClose(event?: string, reason?: string): void {\n if (reason === 'clickaway') {\n return;\n }\n\n this.setState({ alert: false });\n }\n\n showAlert(alertMessage: string | Error, alertType?: 'error' | 'warning' | 'info' | 'success'): void {\n if (alertType !== 'error' && alertType !== 'warning' && alertType !== 'info' && alertType !== 'success') {\n alertType = 'info';\n }\n let alertMessageStr: string;\n if (typeof alertMessage !== 'string') {\n if (alertMessage instanceof Error) {\n alertMessageStr = alertMessage.message || alertMessage.toString();\n } else if (alertMessage === null || alertMessage === undefined) {\n alertMessageStr = 'null';\n } else {\n alertMessageStr = (alertMessage as Error).toString();\n }\n } else {\n alertMessageStr = alertMessage;\n }\n\n this.setState({\n alert: true,\n alertType,\n alertMessage: alertMessageStr,\n });\n }\n\n handleDrawerState(state: 0 | 1 | 2): void {\n (window._localStorage || window.localStorage).setItem('App.drawerState', state.toString());\n this.setState({\n drawerState: state,\n });\n }\n\n static logout(): void {\n if (window.location.port === '3000') {\n window.location.href = `${window.location.protocol}//${window.location.hostname}:8081/logout?dev`;\n } else {\n window.location.href = `./logout?origin=${window.location.pathname}`;\n }\n }\n\n handleNavigation = (tab: string, subTab?: string, param?: string): void => {\n if (tab) {\n if (this.state.allStored) {\n Router.doNavigate(tab, subTab, param);\n\n this.setState({ currentTab: Router.getLocation() });\n } else {\n this.setState({\n dataNotStoredDialog: true,\n dataNotStoredTab: { tab, subTab, param },\n });\n }\n }\n\n if (this.props.width === 'xs' || this.props.width === 'sm') {\n this.handleDrawerState(DrawerStates.closed as 1);\n }\n\n tab = tab || (this.state.currentTab && this.state.currentTab.tab) || '';\n\n this.setTitle(tab.replace('tab-', ''));\n };\n\n allStored(value: boolean): void {\n this.setState({\n allStored: value,\n });\n }\n\n closeDataNotStoredDialog(): void {\n this.setState({ dataNotStoredDialog: false });\n }\n\n confirmDataNotStored(): void {\n this.setState(\n {\n dataNotStoredDialog: false,\n allStored: true,\n },\n () =>\n this.handleNavigation(\n this.state.dataNotStoredTab?.tab,\n this.state.dataNotStoredTab?.subTab,\n this.state.dataNotStoredTab?.param,\n ),\n );\n }\n\n executeCommand(cmd: string, host?: string, callback?: (exitCode: number) => void): void {\n if (typeof host === 'boolean') {\n callback = host;\n host = null;\n }\n\n if (this.state.performed || this.state.commandError) {\n this.setState(\n {\n cmd: null,\n cmdDialog: false,\n commandError: false,\n performed: false,\n callback: null,\n commandHost: null,\n },\n () =>\n this.setState({\n cmd,\n cmdDialog: true,\n callback,\n }),\n );\n return;\n }\n console.log(`Execute: ${cmd}`);\n\n this.setState({\n cmd,\n cmdDialog: true,\n callback,\n commandHost: host || this.state.currentHost,\n });\n }\n\n closeCmdDialog(cb?: () => void): void {\n this.setState(\n {\n cmd: null,\n cmdDialog: false,\n commandError: false,\n performed: false,\n callback: null,\n commandHost: null,\n },\n () => cb && cb(),\n );\n }\n\n renderWizardDialog(): JSX.Element | null {\n if (this.state.wizard) {\n return (\n <WizardDialog\n executeCommand={(cmd: string, host?: string, callback?: (exitCode: number) => void) =>\n this.executeCommand(cmd, host, callback)\n }\n host={this.state.currentHost}\n socket={this.socket}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n toggleTheme={this.toggleTheme}\n lang={I18n.getLanguage()}\n onClose={(redirect?: string) => {\n this.setState({ wizard: false, showRedirect: redirect, redirectCountDown: 10 }, () => {\n if (this.state.showRedirect) {\n setInterval(() => {\n if (this.state.redirectCountDown > 0) {\n this.setState({ redirectCountDown: this.state.redirectCountDown - 1 });\n } else {\n window.location.href = this.state.showRedirect;\n }\n }, 1_000);\n }\n });\n }}\n />\n );\n }\n return null;\n }\n\n showRedirectDialog(): JSX.Element | null {\n if (this.state.showRedirect) {\n return (\n <Dialog\n open={!0}\n onClose={() => {\n // Ignore. It can be closed only by button\n }}\n >\n <DialogTitle>{I18n.t('Waiting for admin restart...')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {I18n.t('Redirect in %s second(s)', this.state.redirectCountDown)}\n </DialogContentText>\n </DialogContent>\n <DialogActions>\n {window.sidebar ||\n (window.opera && window.print) ||\n // @ts-expect-error ignore\n (window.document.all && window.external?.AddFavorite) ? (\n <Button\n onClick={() => {\n if (window.sidebar) {\n // Firefox\n window.sidebar.addPanel('ioBroker.admin', this.state.showRedirect, '');\n } else if (window.opera && window.print) {\n // Opera\n const elem = document.createElement('a');\n elem.setAttribute('href', this.state.showRedirect);\n elem.setAttribute('title', 'ioBroker.admin');\n elem.setAttribute('rel', 'sidebar');\n elem.click(); // this.title=document.title;\n } else if (document.all) {\n // ie\n // @ts-expect-error ignore\n window.external.AddFavorite(this.state.showRedirect, 'ioBroker.admin');\n }\n }}\n >\n {I18n.t('Bookmark admin')}\n </Button>\n ) : null}\n {this.state.redirectCountDown ? (\n <Button\n variant=\"contained\"\n onClick={() => (window.location.href = this.state.showRedirect)}\n >\n {I18n.t('Go to admin now')}\n </Button>\n ) : null}\n </DialogActions>\n </Dialog>\n );\n }\n return null;\n }\n\n renderCommandDialog(): JSX.Element | null {\n return this.state.cmd ? (\n <CommandDialog\n onSetCommandRunning={(commandRunning: boolean) => this.setState({ commandRunning })}\n onClose={() => this.closeCmdDialog(() => this.setState({ commandRunning: false }))}\n visible={this.state.cmdDialog}\n callback={this.state.callback}\n onInBackground={() => this.setState({ cmdDialog: false })}\n cmd={this.state.cmd}\n errorFunc={() => this.setState({ commandError: true })}\n performed={() => this.setState({ performed: true })}\n inBackground={this.state.commandError || this.state.performed}\n commandError={this.state.commandError}\n socket={this.socket}\n host={this.state.commandHost || this.state.currentHost}\n ready={this.state.ready}\n t={I18n.t}\n />\n ) : null;\n }\n\n renderLoggedUser(): JSX.Element | null {\n if (this.state.user && this.props.width !== 'xs' && this.props.width !== 'sm') {\n return (\n <div>\n {\n // @ts-expect-error fixed in js-controller 7\n this.state.systemConfig.common.siteName ? (\n // @ts-expect-error fixed in js-controller 7\n <div style={styles.siteName}>{this.state.systemConfig.common.siteName}</div>\n ) : null\n }\n\n <Box\n component=\"div\"\n title={this.state.user.id}\n sx={{\n ...styles.userBadge,\n ...(this.state.user.invertBackground ? styles.userBackground : undefined),\n }}\n ref={this.refUser}\n >\n {this.state.user.icon ? (\n <Icon\n src={this.state.user.icon}\n style={styles.userIcon}\n />\n ) : (\n <UserIcon style={styles.userIcon} />\n )}\n <div\n ref={this.refUserDiv}\n style={{\n ...styles.userText,\n color: this.state.expireWarningMode ? '#F44' : this.state.user?.color || undefined,\n }}\n >\n {this.state.user.name}\n </div>\n\n {this.state.expireWarningMode ? (\n <IconButton\n onClick={async () => {\n await this.socket.getCurrentSession();\n await this.makePingAuth();\n }}\n >\n <UpdateIcon />\n </IconButton>\n ) : null}\n </Box>\n </div>\n );\n }\n // @ts-expect-error fixed in js-controller 7\n if (this.props.width !== 'xs' && this.props.width !== 'sm' && this.state.systemConfig.common.siteName) {\n // @ts-expect-error fixed in js-controller 7\n return <div style={styles.siteName}>{this.state.systemConfig.common.siteName}</div>;\n }\n return null;\n }\n\n renderAlertSnackbar(): JSX.Element {\n return (\n <Snackbar\n style={styles[`alert_${this.state.alertType}`]}\n open={this.state.alert}\n autoHideDuration={6000}\n onClose={() => this.handleAlertClose()}\n message={this.state.alertMessage}\n />\n );\n }\n\n renderDialogConfirm(): JSX.Element | null {\n /* return <DialogConfirm\n onClose={() => this.closeDataNotStoredDialog()}\n open={this.state.dataNotStoredDialog}\n header={I18n.t('Please confirm')}\n onConfirm={() => this.confirmDataNotStored()}\n confirmText={I18n.t('Ok')}\n >\n {I18n.t('Some data are not stored. Discard?')}\n </DialogConfirm>; */\n return this.state.dataNotStoredDialog ? (\n <DialogConfirm\n title={I18n.t('Please confirm')}\n text={I18n.t('Some data are not stored. Discard?')}\n ok={I18n.t('Ok')}\n cancel={I18n.t('Cancel')}\n onClose={(isYes: boolean) => (isYes ? this.confirmDataNotStored() : this.closeDataNotStoredDialog())}\n />\n ) : null;\n }\n\n renderExpertDialog(): JSX.Element | null {\n if (!this.state.expertModeDialog) {\n return null;\n }\n return (\n <ExpertModeDialog\n onClose={result => {\n if (result === 'openSettings') {\n Router.doNavigate(null, 'system');\n } else if (result) {\n (window._sessionStorage || window.sessionStorage).setItem(\n 'App.expertMode',\n this.state.expertMode ? 'false' : 'true',\n );\n this.refConfigIframe?.contentWindow?.postMessage('updateExpertMode', '*');\n this.setState({ expertModeDialog: false, expertMode: !this.state.expertMode });\n } else if (this.state.expertModeDialog) {\n this.setState({ expertModeDialog: false });\n }\n }}\n expertMode={this.state.expertMode}\n />\n );\n }\n\n renderShowGuiSettings(): JSX.Element | null {\n return this.state.showGuiSettings ? (\n <Menu\n anchorEl={this.state.showGuiSettings}\n open={!0}\n onClose={() => this.setState({ showGuiSettings: null })}\n >\n <MenuItem\n onClick={() => {\n this.setState({ showGuiSettings: null });\n this.enableGuiSettings(true);\n }}\n >\n {I18n.t('Use settings of other browsers')}\n </MenuItem>\n <MenuItem\n onClick={() => {\n this.setState({ showGuiSettings: null });\n this.enableGuiSettings(true, true);\n }}\n >\n {I18n.t('Use settings of this browser')}\n </MenuItem>\n <MenuItem onClick={() => this.setState({ showGuiSettings: null })}>\n <ListItemIcon>\n <CancelIcon fontSize=\"small\" />\n </ListItemIcon>\n <ListItemText>{I18n.t('Cancel')}</ListItemText>\n </MenuItem>\n </Menu>\n ) : null;\n }\n\n renderToolbar(small: boolean): JSX.Element {\n const storedExpertMode = (window._sessionStorage || window.sessionStorage).getItem('App.expertMode');\n const expertModePermanent =\n !storedExpertMode || (storedExpertMode === 'true') === !!this.state.systemConfig.common.expertMode;\n\n const performedStyle = Utils.getStyle(this.state.theme, styles.performed);\n const sumNotification = this.state.noNotifications.warning + this.state.noNotifications.other;\n\n return (\n <Toolbar>\n <IconButton\n size=\"large\"\n edge=\"start\"\n style={{\n ...styles.menuButton,\n ...(!small && this.state.drawerState !== DrawerStates.closed ? styles.hide : undefined),\n }}\n onClick={() => this.handleDrawerState(DrawerStates.opened as 0)}\n >\n <MenuIcon />\n </IconButton>\n <div style={styles.wrapperButtons}>\n <Tooltip\n title={I18n.t('Notifications')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n disableRipple={!sumNotification}\n style={{ opacity: sumNotification ? 1 : 0.3 }}\n onClick={sumNotification ? () => this.setState({ notificationsDialog: true }) : null}\n >\n <Badge\n badgeContent={this.state.noNotifications.other + this.state.noNotifications.warning}\n color={this.state.noNotifications.warning > 0 ? 'error' : 'secondary'}\n max={99}\n >\n <NotificationsIcon />\n </Badge>\n </IconButton>\n </Tooltip>\n <IsVisible\n name=\"admin.appBar.discovery\"\n config={this.adminGuiConfig}\n >\n {this.state.discoveryAlive && (\n <Tooltip\n title={I18n.t('Discovery devices')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => Router.doNavigate(null, 'discovery')}\n >\n <VisibilityIcon />\n </IconButton>\n </Tooltip>\n )}\n </IsVisible>\n <IsVisible\n name=\"admin.appBar.systemSettings\"\n config={this.adminGuiConfig}\n >\n <Tooltip\n title={I18n.t('System settings')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={() => Router.doNavigate(null, 'system')}\n >\n <BuildIcon />\n </IconButton>\n </Tooltip>\n </IsVisible>\n {this.toggleThemePossible ? (\n <IsVisible\n name=\"admin.appBar.toggleTheme\"\n config={this.adminGuiConfig}\n >\n <ToggleThemeMenu\n size=\"large\"\n toggleTheme={this.toggleTheme}\n themeName={this.state.themeName as 'dark' | 'light' | 'colored' | 'blue'}\n t={I18n.t}\n />\n </IsVisible>\n ) : null}\n <IsVisible\n name=\"admin.appBar.expertMode\"\n config={this.adminGuiConfig}\n >\n <Tooltip\n title={`${I18n.t('Toggle expert mode')} ${\n expertModePermanent ? '' : ` (${I18n.t('only in this browser session')})`\n }`}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <Badge\n color=\"secondary\"\n variant=\"dot\"\n sx={{ '& .MuiBadge-badge': styles.expertBadge }}\n invisible={expertModePermanent}\n >\n <IconButton\n size=\"large\"\n onClick={() => {\n if (!!this.state.systemConfig.common.expertMode === !this.state.expertMode) {\n (window._sessionStorage || window.sessionStorage).setItem(\n 'App.expertMode',\n this.state.expertMode ? 'false' : 'true',\n );\n this.setState({ expertMode: !this.state.expertMode });\n this.refConfigIframe?.contentWindow?.postMessage('updateExpertMode', '*');\n } else if (\n (window._sessionStorage || window.sessionStorage).getItem(\n 'App.doNotShowExpertDialog',\n ) === 'true'\n ) {\n (window._sessionStorage || window.sessionStorage).setItem(\n 'App.expertMode',\n this.state.expertMode ? 'false' : 'true',\n );\n this.setState({ expertMode: !this.state.expertMode });\n this.refConfigIframe?.contentWindow?.postMessage('updateExpertMode', '*');\n } else {\n this.setState({ expertModeDialog: true });\n }\n }}\n style={{\n color: this.state.expertMode ? this.state.theme.palette.expert : undefined,\n }}\n color=\"default\"\n >\n <IconExpert\n // glowColor={this.state.theme.palette.secondary.main}\n // active={this.state.expertMode}\n style={{\n ...styles.expertIcon,\n ...(this.state.expertMode ? styles.expertIconActive : undefined),\n }}\n />\n </IconButton>\n </Badge>\n </Tooltip>\n </IsVisible>\n {this.state.expertMode ? (\n <Tooltip\n title={I18n.t('Synchronize admin settings between all opened browser windows')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <IconButton\n size=\"large\"\n onClick={e =>\n this.state.guiSettings\n ? this.enableGuiSettings(false)\n : this.setState({ showGuiSettings: e.target as HTMLButtonElement })\n }\n style={{\n color: this.state.guiSettings ? this.state.theme.palette.expert : undefined,\n }}\n >\n {this.state.guiSettings ? <SyncIcon /> : <SyncIconDisabled />}\n </IconButton>\n </Tooltip>\n ) : null}\n <IsVisible\n name=\"admin.appBar.hostSelector\"\n config={this.adminGuiConfig}\n >\n <HostSelectors\n tooltip={\n this.state.currentTab.tab !== 'tab-instances' &&\n this.state.currentTab.tab !== 'tab-adapters' &&\n this.state.currentTab.tab !== 'tab-logs'\n ? I18n.t('You can change host on Instances, Adapters or Logs pages')\n : undefined\n }\n themeType={this.state.themeType}\n expertMode={this.state.expertMode}\n socket={this.socket}\n hostsWorker={this.hostsWorker}\n currentHost={this.state.currentHost}\n setCurrentHost={(hostName, host) => {\n this.setState(\n {\n currentHostName: hostName,\n currentHost: host,\n },\n async () => {\n this.logsWorkerChanged(host);\n (window._localStorage || window.localStorage).setItem('App.currentHost', host);\n await this.readRepoAndInstalledInfo(host, this.state.hosts);\n // read notifications from host\n const notifications = await this.hostsWorker.getNotifications(host);\n await this.handleNewNotifications(notifications);\n },\n );\n }}\n disabled={\n this.state.currentTab.tab !== 'tab-instances' &&\n this.state.currentTab.tab !== 'tab-adapters' &&\n this.state.currentTab.tab !== 'tab-logs'\n }\n />\n </IsVisible>\n <div style={styles.flexGrow} />\n {this.state.cmd && !this.state.cmdDialog && (\n <IconButton\n size=\"large\"\n onClick={() => this.setState({ cmdDialog: true })}\n >\n <PictureInPictureAltIcon\n style={\n this.state.commandError\n ? styles.errorCmd\n : this.state.performed\n ? performedStyle\n : styles.cmd\n }\n />\n </IconButton>\n )}\n </div>\n\n {this.renderLoggedUser()}\n\n {this.state.drawerState !== DrawerStates.opened &&\n !this.state.expertMode &&\n window.innerWidth > 400 && (\n <Grid\n container\n style={{\n ...(this.state.drawerState !== DrawerStates.opened ? styles.avatarVisible : undefined),\n ...styles.avatarNotVisible,\n }}\n spacing={1}\n alignItems=\"center\"\n >\n {(!this.state.user || this.props.width === 'xs' || this.props.width === 'sm') && (\n <Box\n component=\"div\"\n style={styles.wrapperName}\n sx={{ display: { md: 'inline-block', xs: 'none' } }}\n >\n <Typography>admin</Typography>\n {!this.adminGuiConfig.icon && this.state.versionAdmin && (\n <Typography\n style={{\n ...styles.styleVersion,\n color: this.state.themeType === 'dark' ? '#ffffff80' : '#00000080',\n }}\n >\n v{this.state.versionAdmin}\n </Typography>\n )}\n </Box>\n )}\n <Grid>\n <a\n href=\"/#easy\"\n onClick={event => event.preventDefault()}\n style={{ color: 'inherit', textDecoration: 'none' }}\n >\n {this.adminGuiConfig.icon ? (\n <div\n style={{\n height: 50,\n width: 102,\n lineHeight: '50px',\n background: 'white',\n borderRadius: 5,\n padding: 5,\n }}\n >\n <img\n src={this.adminGuiConfig.icon}\n alt=\"logo\"\n style={{ maxWidth: '100%', maxHeight: '100%' }}\n />\n </div>\n ) : (\n <Avatar\n onClick={() => this.handleNavigation('easy')}\n style={\n this.state.themeName === 'colored' || this.state.themeName === 'blue'\n ? styles.logoWhite\n : undefined\n }\n alt=\"ioBroker\"\n src=\"img/no-image.png\"\n />\n )}\n </a>\n </Grid>\n </Grid>\n )}\n </Toolbar>\n );\n }\n\n renderSampleError(): JSX.Element {\n const message = this.state.hasGlobalError.message;\n const stack = this.state.hasGlobalError.stack;\n\n return (\n <div\n style={{\n textAlign: 'center',\n fontSize: 22,\n marginTop: 50,\n height: 'calc(100% - 50px)',\n overflow: 'auto',\n }}\n >\n <h1 style={{ color: '#F00' }}>Error in GUI!</h1>\n Please open the browser console (F12), copy error text from there and create the issue on{' '}\n <a\n href=\"https://github.com/ioBroker/ioBroker.admin/issues\"\n target=\"_blank\"\n rel=\"noreferrer\"\n >\n github\n </a>\n <br />\n Without this information it is not possible to analyse the error.\n <br />\n It should looks like <br />\n <img\n src=\"img/browserError.png\"\n alt=\"error\"\n />\n <br />\n If in the second line you will see{' '}\n <code\n style={{\n color: '#888',\n fontFamily: 'monospace',\n fontSize: 16,\n }}\n >\n at :3000/static/js/main.chunk.js:36903\n </code>{' '}\n and not the normal file name,\n <br />\n please try to reproduce an error with opened browser console. In this case the special "map"\n files will be loaded and the developers can see the real name of functions and files.\n <div style={{ color: '#F88', fontSize: 14, marginTop: 20 }}>{message}</div>\n <pre\n style={{\n color: '#F88',\n fontSize: 12,\n fontFamily: 'monospace',\n textAlign: 'left',\n marginTop: 20,\n padding: 20,\n }}\n >\n {(stack || '')\n .toString()\n .split('\\n')\n .map((line: string, i: number) => (\n <div key={i}>\n {line}\n <br />\n </div>\n ))}\n </pre>\n </div>\n );\n }\n\n renderEasyMode(): JSX.Element {\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <div style={{ height: '100%' }}>\n {!this.state.connected && <Connecting />}\n <Suspense fallback={<Connecting />}>\n <EasyMode\n navigate={Router.doNavigate}\n getLocation={Router.getLocation}\n location={this.state.currentTab}\n toggleTheme={this.toggleTheme}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n theme={this.state.theme}\n width={this.props.width}\n adminInstance={this.adminInstance}\n configs={this.state.easyModeConfigs}\n socket={this.socket}\n configStored={value => this.allStored(value)}\n isFloatComma={this.state.systemConfig?.common.isFloatComma}\n dateFormat={this.state.systemConfig?.common.dateFormat}\n t={I18n.t}\n lang={I18n.getLanguage()}\n onRegisterIframeRef={ref => (this.refConfigIframe = ref)}\n onUnregisterIframeRef={ref => {\n if (this.refConfigIframe === ref) {\n this.refConfigIframe = null;\n }\n }}\n handleNavigation={this.handleNavigation}\n />\n </Suspense>\n </div>\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n\n render(): JSX.Element {\n const small = this.props.width === 'xs' || this.props.width === 'sm';\n\n if (this.state.cloudNotConnected) {\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <div\n style={{\n width: '100%',\n height: '100%',\n textAlign: 'center',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor: this.state.themeType === 'dark' ? '#1a1a1a' : '#fafafa',\n color: this.state.themeType === 'dark' ? '#fafafa' : '#1a1a1a',\n }}\n >\n <div style={{ width: 300, height: 100 }}>\n <CircularProgress />\n <div style={{ fontSize: 16 }}>\n {I18n.t('Waiting for connection of ioBroker...')}{' '}\n <span style={{ fontSize: 18 }}>{this.state.cloudReconnect}</span>\n </div>\n </div>\n </div>\n {this.renderAlertSnackbar()}\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n\n if (this.state.hasGlobalError) {\n return this.renderSampleError();\n }\n\n if (this.state.login) {\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <Login t={I18n.t} />\n {this.renderAlertSnackbar()}\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n if (!this.state.ready && !this.state.updating) {\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n {window.vendorPrefix === 'PT' ? <LoaderPT themeType={this.state.themeType} /> : null}\n {window.vendorPrefix === 'MV' ? <LoaderMV themeType={this.state.themeType} /> : null}\n {window.vendorPrefix &&\n window.vendorPrefix !== 'PT' &&\n window.vendorPrefix !== 'MV' &&\n window.vendorPrefix !== '@@vendorPrefix@@' ? (\n <LoaderVendor themeType={this.state.themeType} />\n ) : null}\n {!window.vendorPrefix || window.vendorPrefix === '@@vendorPrefix@@' ? (\n <Loader themeType={this.state.themeType} />\n ) : null}\n {this.renderAlertSnackbar()}\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n if (this.state.strictEasyMode || this.state.currentTab.tab === 'easy') {\n return this.renderEasyMode();\n }\n\n return (\n <StyledEngineProvider injectFirst>\n <ThemeProvider theme={this.state.theme}>\n <style>\n {`@keyframes myEffect2 {\n 0% {\n opacity: 1;\n transform: translateX(0);\n }\n 100% {\n opacity: 0.7;\n transform: translateX(-2%);\n }\n }\n @keyframes myEffect: {\n 0% {\n opacity: 0.2;\n transform: translateY(0);\n }\n 100% {\n opacity: 1;\n transform: translateY(-10%);\n }\n }\n `}\n </style>\n <Paper\n elevation={0}\n style={styles.root}\n >\n <AppBar\n color=\"default\"\n position=\"fixed\"\n sx={Utils.getStyle(\n this.state.theme,\n styles.appBar,\n !small &&\n this.state.drawerState === DrawerStates.opened &&\n !this.state.editMenuList &&\n styles.appBarShift,\n !small &&\n this.state.drawerState === DrawerStates.opened &&\n this.state.editMenuList &&\n styles.appBarShiftEdit,\n !small && this.state.drawerState === DrawerStates.compact && styles.appBarShiftCompact,\n )}\n >\n {this.renderToolbar(small)}\n </AppBar>\n <DndProvider backend={!small ? HTML5Backend : TouchBackend}>\n <Drawer\n adminGuiConfig={this.adminGuiConfig}\n state={this.state.drawerState}\n editMenuList={this.state.editMenuList}\n setEditMenuList={(editMenuList: boolean) => this.setState({ editMenuList })}\n systemConfig={this.state.systemConfig}\n handleNavigation={this.handleNavigation}\n onStateChange={(state: 0 | 1 | 2) => this.handleDrawerState(state)}\n onLogout={() => App.logout()}\n currentTab={this.state.currentTab && this.state.currentTab.tab}\n instancesWorker={this.instancesWorker}\n hostsWorker={this.hostsWorker}\n logsWorker={this.logsWorker}\n logoutTitle={I18n.t('Logout')}\n isSecure={this.socket.isSecure}\n versionAdmin={this.state.versionAdmin}\n t={I18n.t}\n lang={I18n.getLanguage()}\n socket={this.socket}\n expertMode={this.state.expertMode}\n ready={this.state.ready}\n themeName={this.state.themeName}\n themeType={this.state.themeType}\n hostname={this.state.hostname}\n adminInstance={this.adminInstance}\n hosts={this.state.hosts}\n repository={this.state.repository}\n installed={this.state.installed}\n theme={this.state.theme}\n />\n </DndProvider>\n <Paper\n elevation={0}\n square\n id=\"app-paper\"\n sx={Utils.getStyle(\n this.state.theme,\n styles.content,\n !small &&\n this.state.drawerState !== DrawerStates.compact &&\n !this.state.editMenuList &&\n styles.contentMargin,\n !small &&\n this.state.drawerState !== DrawerStates.compact &&\n this.state.editMenuList &&\n styles.contentMarginEdit,\n !small && this.state.drawerState !== DrawerStates.opened && styles.contentMarginCompact,\n !small && this.state.drawerState !== DrawerStates.closed && styles.contentShift,\n )}\n >\n {this.getCurrentTab()}\n </Paper>\n {this.renderAlertSnackbar()}\n </Paper>\n {this.renderExpertDialog()}\n {this.getCurrentDialog()}\n {this.renderDialogConfirm()}\n {this.renderCommandDialog()}\n {this.renderWizardDialog()}\n {this.showRedirectDialog()}\n {this.renderSlowConnectionWarning()}\n {this.renderNewsDialog()}\n {this.renderHostWarningDialog()}\n {this.renderNotificationsDialog()}\n {!this.state.connected && !this.state.redirectCountDown && !this.state.updating ? (\n <Connecting />\n ) : null}\n {this.renderShowGuiSettings()}\n </ThemeProvider>\n </StyledEngineProvider>\n );\n }\n}\n\nexport default withWidth()(App);\n","import React from 'react';\nimport { createRoot } from 'react-dom/client';\nimport * as Sentry from '@sentry/browser';\n\nimport './index.css';\nimport { AdapterDateFns } from '@mui/x-date-pickers/AdapterDateFnsV3';\nimport { LocalizationProvider } from '@mui/x-date-pickers';\n\nimport version from './version.json';\nimport { ContextWrapperProvider } from './components/ContextWrapper';\nimport App from './App';\n\ndeclare global {\n interface Window {\n adapterName: string;\n disableDataReporting: boolean | string;\n }\n}\n\nwindow.adapterName = 'admin';\n\nconsole.log(`iobroker.${window.adapterName}@${version.version}`);\n\nconst versionChanged = [\n 'ChunkLoadError', // version was changed\n 'removeChild', // version was changed\n 'DOMException', // version was changed\n];\n\nconst ignoreErrors = [\n 'removeChild', // ignore errors that happen by changing the version\n 'Loading chunk', // ignore errors that happen by changing the version\n 'getWidth', // echarts error\n 'safari-extension', // ignore safari extension errors\n 'this.animation', // echarts error\n 'No connection', // Ignore no connection errors\n 'notConnectedError', // Ignore no connection errors\n 'has no target', // Alias has no target\n 'ResizeObserver', // echarts error\n 'WorkerGlobalScope', // worker error\n 'generateKey', // ignore safari extension errors\n 'The operation is insecure.', // http => https access\n 'SyntaxError: An invalid or illegal string was specified', // No stack and no possibility to detect\n \"Can't find variable: servConn\", // Error from info adapter\n 'LPContentScriptFeatures', // ignore safari extension errors\n 'window.webkit.messageHandlers', // ignore safari extension errors\n 'has no target', // ignore alias errors\n];\n\nif (\n (!window.disableDataReporting || window.disableDataReporting === '@@disableDataReporting@@') &&\n window.location.port !== '3000'\n) {\n Sentry.init({\n dsn: 'https://43643152dab3481db69950ba866ee9d6@sentry.iobroker.net/58',\n release: `iobroker.${window.adapterName}@${version.version}`,\n integrations: [Sentry.dedupeIntegration()],\n beforeSend(event: Sentry.ErrorEvent) {\n // Modify the event here\n if (event?.message && versionChanged.find(error => event.message.includes(error))) {\n window.location.reload();\n } else if (event?.message && ignoreErrors.find(error => event.message.includes(error))) {\n return null;\n }\n return event;\n },\n });\n} else {\n window.onerror = (event: Event | string, source?: string, lineno?: number, colno?: number, error?: Error) => {\n const errText = error.toString();\n if (typeof error === 'object' && errText && versionChanged.find(e => errText.includes(e))) {\n const message = error.message;\n const stack = error.stack;\n console.error('Try to detect admin version change:');\n console.error(message);\n console.error(JSON.stringify(stack, null, 2));\n window.location.reload();\n return;\n }\n throw error;\n };\n window.onunhandledrejection = (event: PromiseRejectionEvent) => {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n const errText = event.toString();\n if (typeof event === 'object' && errText && versionChanged.find(e => errText.includes(e))) {\n console.error(`Try to detect admin version change: ${event.reason}`);\n window.location.reload();\n return;\n }\n if (event instanceof Error) {\n throw event;\n } else {\n // eslint-disable-next-line @typescript-eslint/no-base-to-string\n throw new Error(event.toString());\n }\n };\n}\n\nconst container = document.getElementById('root');\nconst root = createRoot(container);\n\nroot.render(\n <LocalizationProvider dateAdapter={AdapterDateFns}>\n <ContextWrapperProvider>\n <App />\n </ContextWrapperProvider>\n </LocalizationProvider>,\n);\n","import React, { Component, type JSX } from 'react';\n\nimport { amber, blue, red } from '@mui/material/colors';\n\nimport { Grid2, LinearProgress, Paper, Switch, Typography } from '@mui/material';\n\nimport { Router, type AdminConnection, type Translate } from '@iobroker/adapter-react-v5';\n\nimport AdminUtils, { type Style } from '../helpers/AdminUtils';\n\nconst styles: Record<string, React.CSSProperties> = {\n log: {\n height: 400,\n width: 860,\n padding: 8,\n overflowY: 'auto',\n },\n logNoSpacing: {\n height: '100%',\n width: 'calc(100% - 8px)',\n marginLeft: 8,\n padding: 8,\n overflowY: 'auto',\n },\n error: {\n color: red[500],\n },\n info: {\n color: blue[500],\n },\n warn: {\n color: amber[500],\n },\n};\n\ninterface CommandProps {\n noSpacing?: boolean;\n host: string;\n callback?: (exitCode: number) => void;\n socket: AdminConnection;\n onFinished: (exitCode: number, log: string[]) => void;\n ready: boolean;\n t: Translate;\n inBackground?: boolean;\n commandError?: boolean;\n errorFunc?: (exitCode: number, log: string[]) => void;\n performed?: () => void;\n cmd: string;\n onSetCommandRunning?: (running: boolean) => void;\n showElement?: boolean;\n logsRead?: string[];\n}\n\ninterface CommandState {\n log: string[];\n init: boolean;\n max: number | null;\n value: number | null;\n // progressText: string;\n moreChecked: boolean;\n stopped: boolean;\n activeCmdId?: number;\n // closeOnReady: boolean;\n}\n\nclass Command extends Component<CommandProps, CommandState> {\n private readonly logRef: React.RefObject<HTMLDivElement>;\n\n private static pattern = ['error', 'warn', 'info'];\n\n private readonly regExp: RegExp;\n\n constructor(props: CommandProps) {\n super(props);\n\n this.state = {\n log: [`$ iobroker ${props.cmd || ''}`],\n init: false,\n max: null,\n value: null,\n // progressText: '',\n moreChecked: true,\n stopped: false,\n };\n\n this.logRef = React.createRef();\n\n this.regExp = new RegExp(Command.pattern.join('|'), 'i');\n }\n\n componentDidMount(): void {\n if (this.props.ready && this.props.cmd) {\n console.log(`STARTED: ${this.props.cmd}`);\n this.executeCommand();\n }\n // try {\n // const closeOnReady = JSON.parse((window._localStorage || window.localStorage).getItem('CommandDialog.closeOnReady')) || false;\n // this.setState({ closeOnReady });\n // } catch (error) {\n // this.setState({ closeOnReady: false });\n // }\n }\n\n componentDidUpdate(): void {\n if (!this.state.init && this.props.ready && this.props.cmd) {\n this.executeCommand();\n }\n if (this.props.logsRead && JSON.stringify(this.props.logsRead) !== JSON.stringify(this.state.log)) {\n this.setState({ log: this.props.logsRead });\n }\n this.logRef.current?.scrollIntoView();\n }\n\n executeCommand(): void {\n this.setState({ init: true }, () => this.props.onSetCommandRunning && this.props.onSetCommandRunning(true));\n\n this.props.socket.registerCmdStdoutHandler(this.cmdStdoutHandler.bind(this));\n this.props.socket.registerCmdStderrHandler(this.cmdStderrHandler.bind(this));\n this.props.socket.registerCmdExitHandler(this.cmdExitHandler.bind(this));\n\n const activeCmdId = Math.floor(Math.random() * 0xffffffe) + 1;\n\n this.setState({ activeCmdId });\n\n this.props.socket\n .cmdExec(\n this.props.host.startsWith('system.host.') ? this.props.host : `system.host.${this.props.host}`,\n this.props.cmd,\n activeCmdId,\n )\n .catch(error => console.log(error));\n }\n\n cmdStdoutHandler(id: number, text: string): void {\n if (this.state.activeCmdId && this.state.activeCmdId === id) {\n const log = this.state.log.slice();\n log.push(text);\n\n const upload = text.match(/^upload \\[(\\d+)]/);\n const gotAdmin = !upload ? text.match(/^got [-_:/\\\\.\\w\\d]+\\/admin$/) : null;\n const gotWww = !gotAdmin ? text.match(/^got [-_:/\\\\.\\w\\d]+\\/www$/) : null;\n\n let max = this.state.max;\n let value = null;\n // let progressText = '';\n\n if (upload) {\n max = max || parseInt(upload[1], 10);\n value = parseInt(upload[1], 10);\n } else if (gotAdmin) {\n // upload of admin\n // progressText = this.t('Upload admin started');\n max = null;\n } else if (gotWww) {\n // upload of www\n // progressText = this.t('Upload www started');\n max = null;\n }\n\n this.setState({\n log,\n max,\n value,\n // progressText,\n });\n\n console.log('cmdStdout');\n }\n }\n\n cmdStderrHandler(id: number, text: string): void {\n if (this.state.activeCmdId && this.state.activeCmdId === id) {\n const log = this.state.log.slice();\n log.push(text);\n\n this.setState({ log });\n\n console.log('cmdStderr');\n console.log(id);\n console.log(text);\n }\n }\n\n cmdExitHandler(id: number, exitCode: number): void {\n if (this.state.activeCmdId && this.state.activeCmdId === id) {\n const log = this.state.log.slice();\n if (\n !window.document.hidden &&\n exitCode === 0 &&\n log.length &&\n log[log.length - 1].endsWith('created') &&\n this.props.callback\n ) {\n const newArr = log[log.length - 1].split(' ');\n const adapter = newArr.find(el => el.startsWith('system'));\n if (adapter) {\n // it takes some time to creat the object\n setTimeout(\n _adapter => {\n void this.props.socket.getObject(_adapter).then(obj => {\n AdminUtils.fixAdminUI(obj);\n if (obj && obj.common?.adminUI?.config !== 'none') {\n Router.doNavigate('tab-instances', 'config', _adapter);\n }\n });\n },\n 1000,\n adapter,\n );\n }\n }\n log.push(`${exitCode !== 0 ? 'ERROR: ' : ''}Process exited with code ${exitCode}`);\n\n this.setState({ log, stopped: true }, () => {\n if (this.props.onSetCommandRunning) {\n this.props.onSetCommandRunning(false);\n }\n if (exitCode !== 0 || this.state.log[this.state.log.length - 1].toLowerCase().includes('error')) {\n if (this.props.errorFunc) {\n this.props.errorFunc(exitCode, this.state.log);\n }\n } else {\n if (this.props.performed) {\n this.props.performed();\n }\n this.props.onFinished(exitCode, this.state.log);\n }\n console.log('cmdExit');\n console.log(id);\n console.log(exitCode);\n\n if (typeof this.props.callback === 'function') {\n this.props.callback(exitCode);\n }\n });\n }\n }\n\n colorize(text: string, maxLength?: number): JSX.Element[] | string {\n if (maxLength) {\n text = text.substring(0, maxLength);\n }\n\n if (text.search(this.regExp) !== -1) {\n const result = [];\n\n while (text.search(this.regExp) >= 0) {\n const [match] = text.match(this.regExp);\n const pos = text.search(this.regExp);\n\n if (pos > 0) {\n const part = text.substring(0, pos);\n const message = AdminUtils.parseColorMessage(part);\n result.push(\n <span key={result.length}>\n {typeof message === 'object'\n ? message.parts.map((item, i) => (\n <span\n key={i}\n style={item.style}\n >\n {item.text}\n </span>\n ))\n : message}\n </span>,\n );\n text = text.replace(part, '');\n }\n\n const part = text.substring(0, match.length);\n if (part) {\n const message = AdminUtils.parseColorMessage(part);\n result.push(\n <span\n key={result.length}\n style={styles[match.toLowerCase()]}\n >\n {typeof message === 'object'\n ? message.parts.map((item, i) => (\n <span\n key={i}\n style={item.style}\n >\n {item.text}\n </span>\n ))\n : message}\n </span>,\n );\n text = text.replace(part, '');\n }\n }\n\n if (text) {\n const message = AdminUtils.parseColorMessage(text);\n result.push(\n <span key={result.length}>\n {typeof message === 'object'\n ? (message as { original: string; parts: { text: string; style: Style }[] }).parts.map(\n (item, i) => (\n <span\n key={i}\n style={item.style}\n >\n {item.text}\n </span>\n ),\n )\n : message}\n </span>,\n );\n }\n\n return result;\n }\n\n return text;\n }\n\n getLog(): JSX.Element[] {\n return this.state.log.map((value, index) => (\n <Typography\n ref={index === this.state.log.length - 1 ? this.logRef : undefined}\n key={index}\n component=\"p\"\n variant=\"body2\"\n >\n {this.colorize(value)}\n </Typography>\n ));\n }\n\n render(): JSX.Element {\n return (\n <Grid2\n style={this.props.noSpacing ? { height: '100%', width: '100%' } : {}}\n container\n direction=\"column\"\n spacing={this.props.noSpacing ? 0 : 2}\n >\n {this.props.showElement === undefined || this.props.showElement === true ? (\n <Grid2>\n {!this.state.stopped && (\n <LinearProgress\n style={this.props.commandError ? { backgroundColor: '#f44336' } : null}\n variant={this.props.inBackground ? 'determinate' : 'indeterminate'}\n value={\n this.state.max && this.state.value\n ? 100 - Math.round((this.state.value / this.state.max) * 100)\n : this.props.commandError\n ? 0\n : 100\n }\n />\n )}\n </Grid2>\n ) : null}\n <div\n style={{\n width: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: this.props.inBackground ? 'space-between' : 'flex-end',\n }}\n >\n <Typography\n style={\n this.props.inBackground\n ? {\n width: 'calc(100% - 180px)',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n whiteSpace: 'nowrap',\n }\n : { display: 'none' }\n }\n component=\"div\"\n >\n {this.colorize(this.state.log[this.state.log.length - 1])}\n </Typography>\n {this.props.showElement === undefined || this.props.showElement === true ? (\n <Typography\n component=\"div\"\n style={{ width: 250 }}\n >\n <Grid2\n component=\"label\"\n container\n alignItems=\"center\"\n spacing={1}\n >\n <Grid2>{this.props.t('less')}</Grid2>\n <Grid2>\n <Switch\n checked={this.state.moreChecked}\n onChange={event => this.setState({ moreChecked: event.target.checked })}\n color=\"primary\"\n />\n </Grid2>\n <Grid2>{this.props.t('more')}</Grid2>\n </Grid2>\n </Typography>\n ) : null}\n </div>\n <Grid2 style={this.props.noSpacing ? { height: 'calc(100% - 45px)', width: '100%' } : {}}>\n {this.state.moreChecked && (\n <Paper style={this.props.noSpacing ? styles.logNoSpacing : styles.log}>{this.getLog()}</Paper>\n )}\n </Grid2>\n </Grid2>\n );\n }\n}\n\nexport default Command;\n","import React, { Component, type JSX } from 'react';\n\nimport AceEditor from 'react-ace';\nimport 'ace-builds/src-min-noconflict/mode-json';\nimport 'ace-builds/src-min-noconflict/mode-json5';\nimport 'ace-builds/src-min-noconflict/mode-xml';\nimport 'ace-builds/src-min-noconflict/mode-html';\nimport 'ace-builds/src-min-noconflict/worker-json';\nimport 'ace-builds/src-min-noconflict/worker-javascript';\nimport 'ace-builds/src-min-noconflict/worker-xml';\nimport 'ace-builds/src-min-noconflict/worker-html';\nimport 'ace-builds/src-min-noconflict/theme-clouds_midnight';\nimport 'ace-builds/src-min-noconflict/theme-chrome';\nimport 'ace-builds/src-min-noconflict/ext-language_tools';\n\nimport type { ThemeType } from '@iobroker/adapter-react-v5';\n\nexport interface EditorProps {\n fontSize?: number;\n value?: string;\n defaultValue?: string;\n mode?: string;\n name?: string;\n onChange?: (newVal: string) => void;\n themeType: ThemeType;\n /** flag that indicates the \"value edit mode\" */\n editValueMode?: boolean;\n error?: boolean;\n style?: React.CSSProperties;\n}\n\nclass Editor extends Component<EditorProps> {\n render(): JSX.Element {\n return (\n <AceEditor\n style={{\n border: '1px solid',\n borderColor: this.props.error ? 'red' : '#00000000',\n minHeight: 200,\n ...this.props.style,\n }}\n mode={this.props.mode || 'json'}\n width=\"100%\"\n height=\"100%\"\n showPrintMargin={this.props.editValueMode}\n showGutter={this.props.editValueMode}\n highlightActiveLine={this.props.editValueMode}\n defaultValue={this.props.defaultValue}\n theme={this.props.themeType === 'dark' ? 'clouds_midnight' : 'chrome'}\n value={this.props.value}\n readOnly={!this.props.onChange}\n onChange={newValue => this.props.onChange(newValue)}\n name={this.props.name || 'UNIQUE_ID_OF_DIV1'}\n fontSize={this.props.fontSize || 14}\n setOptions={{\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n enableSnippets: true,\n\n showLineNumbers: this.props.editValueMode,\n tabSize: this.props.editValueMode ? 2 : undefined,\n }}\n editorProps={{ $blockScrolling: true }}\n />\n );\n }\n}\n\nexport default Editor;\n","import React, { Component, type JSX } from 'react';\n\nimport { Box, Button, Menu, MenuItem, Tooltip } from '@mui/material';\n\nimport { type AdminConnection, I18n, Icon, Utils } from '@iobroker/adapter-react-v5';\nimport type { CompactHost } from '@/types';\nimport type HostsWorker from '@/Workers/HostsWorker';\nimport { type HostEvent, type HostAliveEvent } from '@/Workers/HostsWorker';\n\nconst styles: Record<string, any> = {\n imgDiv: {\n '& svg:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n '& img:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n '@media screen and (max-width: 710px)': {\n '& img,svg': {\n marginRight: 0,\n },\n },\n },\n img: {\n width: 30,\n height: 30,\n margin: 'auto 0',\n position: 'relative',\n marginRight: 10,\n borderRadius: 3,\n background: '#FFFFFF',\n padding: 2,\n },\n notAlive: {\n opacity: 0.3,\n },\n button: {\n maxWidth: 300,\n },\n name: {\n whiteSpace: 'nowrap',\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n '@media screen and (max-width: 710px)': {\n display: 'none',\n },\n },\n width: {\n width: '100%',\n '@media screen and (max-width: 710px)': {\n width: 'auto',\n },\n },\n selector: {\n width: 15,\n display: 'inline-block',\n },\n tooltip: {\n pointerEvents: 'none',\n },\n};\n\ninterface HostSelectorsProps {\n disabled?: boolean;\n socket: AdminConnection;\n currentHost: string;\n hostsWorker: InstanceType<typeof HostsWorker>;\n expertMode: boolean;\n setCurrentHost: (hostname: string, aliveHost: string) => void;\n tooltip: string;\n themeType?: string;\n}\n\ninterface HostSelectorsState {\n anchorEl: any;\n alive: Record<string, boolean>;\n hosts: CompactHost[];\n}\n\nclass HostSelectors extends Component<HostSelectorsProps, HostSelectorsState> {\n constructor(props: HostSelectorsProps) {\n super(props);\n\n this.state = {\n anchorEl: null,\n alive: {},\n hosts: [],\n };\n }\n\n componentDidMount(): void {\n this.props.socket\n .getCompactHosts(true)\n .then((hosts: CompactHost[]) => {\n this.setState({ hosts }, async () => {\n // request for all host the \"alive\" status\n const alive: Record<string, boolean> = {};\n for (let h = 0; h < hosts.length; h++) {\n const state = await this.props.socket.getState(`${hosts[h]._id}.alive`);\n if (state) {\n alive[hosts[h]._id] = !!state.val;\n } else {\n alive[hosts[h]._id] = false;\n }\n }\n\n // if the current host is not alive, find the first alive host and set it as current\n if (!alive[this.props.currentHost]) {\n const aliveHost = Object.keys(alive).find(id => alive[id]);\n if (aliveHost) {\n setTimeout(() => {\n const obj = this.state.hosts.find(ob => ob._id === aliveHost);\n if (obj) {\n this.props.setCurrentHost(\n obj.common?.name || aliveHost.replace('system.host.', ''),\n aliveHost,\n );\n } else {\n this.props.setCurrentHost(aliveHost.replace('system.host.', ''), aliveHost);\n }\n }, 100);\n }\n }\n\n this.setState({ alive }, () => {\n this.props.hostsWorker.registerHandler(this.onHostsObjectChange);\n this.props.hostsWorker.registerAliveHandler(this.onAliveChanged);\n });\n });\n })\n .catch((e: any) => {\n window.alert(`Cannot get hosts: ${e}`);\n });\n }\n\n componentWillUnmount(): void {\n this.props.hostsWorker.unregisterHandler(this.onHostsObjectChange);\n this.props.hostsWorker.unregisterAliveHandler(this.onAliveChanged);\n }\n\n onAliveChanged = (events: HostAliveEvent[]): void => {\n const alive: Record<string, boolean> = JSON.parse(JSON.stringify(this.state.alive));\n let changed = false;\n events.forEach(event => {\n if (event.type === 'deleted') {\n if (alive[event.id] !== undefined) {\n delete alive[event.id];\n changed = true;\n }\n } else if (!!alive[event.id] !== !!event.alive) {\n alive[event.id] = event.alive;\n changed = true;\n }\n });\n\n if (changed) {\n this.setState({ alive }, () => {\n if (!alive[this.props.currentHost]) {\n const aliveHost = Object.keys(alive).find(id => alive[id]);\n if (aliveHost) {\n const obj = this.state.hosts.find(ob => ob._id === aliveHost);\n if (obj) {\n this.props.setCurrentHost(\n obj.common?.name || aliveHost.replace('system.host.', ''),\n aliveHost,\n );\n } else {\n this.props.setCurrentHost(aliveHost.replace('system.host.', ''), aliveHost);\n }\n }\n }\n });\n }\n };\n\n onHostsObjectChange = (events: HostEvent[]): void => {\n const hosts: CompactHost[] = JSON.parse(JSON.stringify(this.state.hosts));\n const alive: Record<string, boolean> = JSON.parse(JSON.stringify(this.state.alive));\n let changed = false;\n\n void Promise.all(\n events.map(async event => {\n const host = hosts.find(it => it._id === event.id);\n\n if (event.type === 'deleted' || !event.obj) {\n if (host) {\n const pos = hosts.indexOf(host);\n if (pos !== -1) {\n delete alive[event.id];\n hosts.splice(pos);\n changed = true;\n }\n }\n } else if (host) {\n if (host.common.name !== event.obj.common?.name) {\n host.common.name = event.obj.common?.name || '';\n changed = true;\n }\n if (host.common.color !== event.obj.common?.color) {\n host.common.color = event.obj.common?.color || '';\n changed = true;\n }\n if (host.common.icon !== event.obj.common?.icon) {\n host.common.icon = event.obj.common?.icon || '';\n changed = true;\n }\n } else {\n // new host detected\n changed = true;\n hosts.push({\n _id: event.id,\n common: {\n name: event.obj.common?.name || '',\n color: event.obj.common?.color || '',\n icon: event.obj.common?.icon || '',\n installedVersion: 'ignored',\n },\n native: {\n hardware: {\n networkInterfaces: {},\n },\n },\n });\n\n const state = await this.props.socket.getState(`${event.id}.alive`);\n alive[event.id] = !!state?.val;\n }\n }),\n ).then(() => {\n if (changed) {\n this.setState({ hosts, alive }, () => {\n if (!alive[this.props.currentHost]) {\n const aliveHost = Object.keys(alive).find(id => alive[id]);\n if (aliveHost) {\n const obj = this.state.hosts.find(ob => ob._id === aliveHost);\n if (obj) {\n this.props.setCurrentHost(\n obj.common?.name || aliveHost.replace('system.host.', ''),\n aliveHost,\n );\n } else {\n this.props.setCurrentHost(aliveHost.replace('system.host.', ''), aliveHost);\n }\n }\n }\n });\n }\n });\n };\n\n render(): JSX.Element | null {\n if (!this.props.expertMode && this.state.hosts.length < 2) {\n return null;\n }\n let selectedHostObj;\n if (this.state.hosts.length) {\n selectedHostObj = this.state.hosts.find(\n host => host._id === this.props.currentHost || host._id === `system.host.${this.props.currentHost}`,\n );\n }\n\n return (\n <Box>\n <Tooltip\n title={this.props.tooltip || I18n.t('Change current host')}\n slotProps={{ popper: { sx: styles.tooltip } }}\n >\n <span>\n <Button\n color={this.props.themeType === 'dark' ? 'primary' : 'secondary'}\n style={{\n ...styles.button,\n background: selectedHostObj?.common?.color || 'none',\n borderColor: selectedHostObj?.common?.color\n ? Utils.invertColor(selectedHostObj.common.color, false)\n : 'none',\n }}\n variant={this.props.disabled || this.state.hosts.length < 2 ? 'text' : 'outlined'}\n disabled={!!this.props.disabled || this.state.hosts.length < 2}\n aria-haspopup=\"true\"\n onClick={e => this.setState({ anchorEl: e.currentTarget })}\n >\n <Box\n component=\"div\"\n sx={{\n ...styles.width,\n ...(!this.state.alive[this.props.currentHost] ? styles.notAlive : undefined),\n ...styles.imgDiv,\n }}\n style={{\n display: 'flex',\n color: selectedHostObj?.common?.color\n ? Utils.invertColor(selectedHostObj.common.color, true)\n : 'none',\n alignItems: 'center',\n }}\n >\n <Icon\n style={styles.img}\n src={selectedHostObj?.common?.icon || 'img/no-image.png'}\n />\n <Box\n component=\"div\"\n sx={styles.name}\n >\n {selectedHostObj?.common?.name}\n </Box>\n </Box>\n </Button>\n </span>\n </Tooltip>\n <Menu\n anchorEl={this.state.anchorEl}\n keepMounted\n open={!!this.state.anchorEl}\n onClose={() => this.setState({ anchorEl: null })}\n >\n {this.state.hosts.map(({ _id, common: { name, icon, color } }, idx) => (\n <MenuItem\n key={_id}\n // button\n disabled={!this.state.alive[_id]}\n selected={_id === this.props.currentHost}\n style={{ background: color || 'inherit' }}\n onClick={() => {\n if (this.props.currentHost !== this.state.hosts[idx]._id) {\n this.props.setCurrentHost(\n this.state.hosts[idx].common.name,\n this.state.hosts[idx]._id,\n );\n }\n this.setState({ anchorEl: null });\n }}\n >\n <Box\n component=\"div\"\n sx={styles.imgDiv}\n style={{\n display: 'flex',\n color: (color && Utils.invertColor(color, true)) || 'inherit',\n alignItems: 'center',\n }}\n >\n <div style={styles.selector}>{_id === this.props.currentHost ? 'ᐅ' : ''}</div>\n <Icon\n style={styles.img}\n src={icon || 'img/no-image.png'}\n />\n {name}\n </Box>\n </MenuItem>\n ))}\n </Menu>\n </Box>\n );\n }\n}\n\nexport default HostSelectors;\n","import { type ReactElement, type JSX } from 'react';\n\nfunction getAttr(obj: Record<any, any>, attr: string | string[]): boolean {\n if (!obj) {\n return null;\n }\n if (typeof attr !== 'object') {\n attr = attr.split('.');\n }\n const att = attr.shift();\n const val = obj[att];\n if (!attr.length) {\n return val;\n }\n if (typeof val === 'object') {\n return getAttr(val, attr);\n }\n return null;\n}\n\ninterface IsVisibleProps {\n name?: string;\n config?: Record<string, any>;\n value?: boolean;\n children: JSX.Element | JSX.Element[];\n}\n\nfunction IsVisible(props: IsVisibleProps): ReactElement<any, any> {\n const { config, children, name, value } = props;\n\n if (value !== undefined) {\n return value === false ? null : (children as ReactElement<any, any>);\n }\n if (!config) {\n return children as ReactElement<any, any>;\n }\n if (getAttr(config, name) !== false) {\n return children as ReactElement<any, any>;\n }\n return null;\n}\n\nexport default IsVisible;\n","import React, { useEffect, useState, type JSX } from 'react';\nimport Markdown from 'react-markdown';\n\nimport { Box, Button, Dialog, DialogActions, DialogContent, DialogTitle, LinearProgress } from '@mui/material';\n\nimport { Close as IconClose, Check as IconCheck, ArrowDownward as IconArrowDownward } from '@mui/icons-material';\n\nimport { I18n } from '@iobroker/adapter-react-v5';\n\nconst styles: Record<string, any> = {\n root: {\n backgroundColor: 'background.paper',\n width: '100%',\n height: 'auto',\n display: 'flex',\n '& .markdown': {\n margin: 0,\n p: '10px',\n width: '100%',\n height: '100%',\n overflow: 'auto',\n },\n },\n paper: {\n maxWidth: 800,\n },\n overflowHidden: {\n display: 'flex',\n overflow: 'hidden',\n },\n pre: {\n overflow: 'auto',\n whiteSpace: 'pre-wrap',\n margin: 0,\n padding: 10,\n width: '100%',\n },\n header1: {\n backgroundColor: 'primary.main',\n color: 'primary.contrastText',\n borderRadius: '2px',\n pl: 1,\n pr: 1,\n pb: '4px',\n },\n header2: {\n backgroundColor: 'secondary.main',\n color: 'secondary.contrastText',\n borderRadius: '2px',\n pl: 1,\n pr: 1,\n pb: '4px',\n },\n};\n\ninterface LicenseDialogProps {\n /** URL to show license text from */\n url: string;\n /** License type: MIT, Apache, ... */\n licenseType: string;\n /** function called when dialog is closed */\n onClose: (accepted?: boolean) => void;\n}\n\nfunction LicenseDialog({ url, onClose, licenseType }: LicenseDialogProps): JSX.Element {\n const [text, setText] = useState('');\n const [loading, setLoading] = useState(true);\n const [scrolled, setScrolled] = useState(false);\n const preRef = React.useRef<HTMLPreElement>(null);\n const divRef = React.useRef<HTMLDivElement>(null);\n const installTimer = React.useRef<ReturnType<typeof setInterval> | null | undefined>(undefined);\n\n useEffect(() => {\n setLoading(true);\n setText('');\n let _url = url;\n if (_url.startsWith('https://github.com/')) {\n _url = _url.replace('https://github.com/', 'https://raw.githubusercontent.com/').replace('/blob/', '/');\n }\n\n fetch(_url)\n .then(el => el.text())\n .then(txt => {\n setText(txt);\n setLoading(false);\n })\n .catch(() => setLoading(false));\n }, [url]);\n\n useEffect(() => {\n const installOnscroll = (): boolean => {\n const divMarkdown: HTMLDivElement | null = divRef.current?.querySelector('.markdown');\n if (divMarkdown) {\n // install on scroll only if the scrollbar is visible\n if (divMarkdown.scrollHeight <= divMarkdown.clientHeight) {\n return true;\n }\n\n if (installTimer.current) {\n clearInterval(installTimer.current);\n installTimer.current = null;\n }\n divMarkdown.onscroll = (event: Event) => {\n const div: HTMLDivElement = event.target as HTMLDivElement;\n // give 10 pixels tolerance for MS-edge\n const _scrolled = div.scrollTop + div.clientHeight >= div.scrollHeight - 10;\n if (!scrolled && _scrolled) {\n setScrolled(_scrolled);\n }\n };\n return true;\n }\n return false;\n };\n\n if (!loading && text) {\n if (text.startsWith('#')) {\n if (!installOnscroll()) {\n installTimer.current = installTimer.current || setInterval(() => installOnscroll(), 100);\n }\n } else if (preRef.current) {\n // give 10 pixels tolerance for MS-edge\n if (preRef.current.scrollHeight - 10 <= preRef.current.clientHeight) {\n setScrolled(true);\n }\n } else {\n // check in 100 ms the existence of the preRef\n setTimeout(() => {\n if (preRef.current) {\n // give 10 pixels tolerance for MS-edge\n if (preRef.current.scrollHeight - 10 <= preRef.current.clientHeight) {\n setScrolled(true);\n }\n } else {\n setScrolled(true);\n }\n }, 100);\n }\n }\n\n return () => {\n if (installTimer.current) {\n clearInterval(installTimer.current);\n installTimer.current = null;\n }\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n const _preRef: HTMLPreElement | null = preRef.current;\n\n if (_preRef) {\n const _divMarkdown: HTMLDivElement | null = _preRef.querySelector('.markdown');\n if (_divMarkdown) {\n _divMarkdown.onscroll = null;\n }\n }\n };\n }, [loading, scrolled, text]);\n\n let content: JSX.Element;\n if (!loading && text) {\n if (text.startsWith('#')) {\n content = (\n <Markdown\n className=\"markdown\"\n components={{\n h1: h1Props => (\n <Box\n component=\"h1\"\n sx={styles.header1}\n >\n {h1Props.children}\n </Box>\n ),\n h2: h2Props => (\n <Box\n component=\"h2\"\n sx={styles.header2}\n >\n {h2Props.children}\n </Box>\n ),\n }}\n >\n {text}\n </Markdown>\n );\n } else {\n content = (\n <pre\n style={styles.pre}\n ref={preRef}\n onScroll={() => {\n if (preRef.current) {\n // give 10 pixels tolerance for MS-edge\n const _scrolled =\n preRef.current.scrollTop + preRef.current.clientHeight >=\n preRef.current.scrollHeight - 10;\n if (!scrolled && _scrolled) {\n setScrolled(_scrolled);\n }\n }\n }}\n >\n {text}\n </pre>\n );\n }\n }\n\n return (\n <Dialog\n onClose={() => onClose()}\n open={!0}\n maxWidth=\"lg\"\n fullWidth\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <DialogTitle>\n {I18n.t('License agreement')}:<span style={{ marginLeft: 16, fontWeight: 'bold' }}>{licenseType}</span>\n </DialogTitle>\n <DialogContent\n style={styles.overflowHidden}\n dividers\n >\n <Box\n component=\"div\"\n sx={styles.root}\n ref={divRef}\n >\n {loading ? <LinearProgress /> : content}\n </Box>\n </DialogContent>\n <DialogActions>\n <Button\n id=\"license-dialog-accept\"\n variant=\"contained\"\n disabled={loading || !scrolled}\n autoFocus\n onClick={() => onClose(true)}\n startIcon={scrolled ? <IconCheck /> : <IconArrowDownward />}\n color=\"primary\"\n >\n {!scrolled ? I18n.t('Read to the end for accept') : I18n.t('Accept')}\n </Button>\n <Button\n id=\"license-dialog-close\"\n variant=\"contained\"\n onClick={() => onClose()}\n startIcon={<IconClose />}\n color=\"grey\"\n >\n {I18n.t('Close')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nexport default LicenseDialog;\n","import React, { useEffect, useState, type JSX } from 'react';\nimport semver from 'semver';\n\nimport { Button, Dialog, DialogActions, DialogContent, DialogTitle, CardMedia, Typography, Box } from '@mui/material';\n\nimport {\n Info as InfoIcon,\n Warning as WarningIcon,\n Cancel as CancelIcon,\n Check as CheckIcon,\n Public as WorldIcon,\n} from '@mui/icons-material';\n\nimport { I18n, type IobTheme, Utils } from '@iobroker/adapter-react-v5';\nimport type { CompactAdapterInfo } from '@/types';\n\nconst styles: Record<string, any> = {\n root: (theme: IobTheme) => ({\n backgroundColor: theme.palette.background.paper,\n width: '100%',\n height: 'auto',\n display: 'flex',\n borderRadius: '4px',\n }),\n paper: {\n maxWidth: 1000,\n width: '100%',\n },\n overflowHidden: {\n display: 'flex',\n },\n pre: {\n overflow: 'auto',\n m: '20px',\n '& p': {\n fontSize: 18,\n },\n },\n blockInfo: {\n right: 20,\n top: 10,\n position: 'absolute',\n display: 'flex',\n alignItems: 'center',\n color: 'silver',\n },\n img: {\n '& .news-admin-dialog-img': {\n marginLeft: 10,\n width: 45,\n height: 45,\n margin: 'auto 0',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n },\n img2: {\n width: 70,\n height: 70,\n m: '10px 0',\n borderRadius: '4px',\n position: 'relative',\n '&:after': {\n content: '\"\"',\n position: 'absolute',\n zIndex: 2,\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: 'url(\"img/no-image.png\") 100% 100% no-repeat',\n backgroundSize: 'cover',\n backgroundColor: '#fff',\n },\n },\n link: {\n margin: '10px 0',\n },\n};\n\nconst Status = ({ name }: { name: string }): JSX.Element => {\n switch (name) {\n case 'warning':\n return (\n <WarningIcon\n className=\"news-admin-dialog-img\"\n style={{ color: '#ffca00' }}\n />\n );\n case 'info':\n return (\n <InfoIcon\n className=\"news-admin-dialog-img\"\n style={{ color: '#007cff' }}\n />\n );\n case 'danger':\n return (\n <CancelIcon\n className=\"news-admin-dialog-img\"\n style={{ color: '#ff2f2f' }}\n />\n );\n default:\n return (\n <InfoIcon\n className=\"news-admin-dialog-img\"\n style={{ color: '#007cff' }}\n />\n );\n }\n};\n\nfunction checkActive(adapterName: string, instances: Record<string, any>): boolean {\n return !!Object.keys(instances)\n .filter(id => id.startsWith(`adapter.system.${adapterName}.`))\n .find(id => instances[id].enabled);\n}\n\nfunction checkConditions(condition: string, installedVersion: string): boolean {\n if (condition.startsWith('equals')) {\n const vers = condition.substring(7, condition.length - 1).trim();\n return installedVersion === vers;\n }\n if (condition.startsWith('bigger') || condition.startsWith('greater')) {\n const vers = condition.substring(7, condition.length - 1).trim();\n try {\n return semver.gt(vers, installedVersion);\n } catch {\n return false;\n }\n }\n if (condition.startsWith('smaller')) {\n const vers = condition.substring(8, condition.length - 1).trim();\n try {\n return semver.lt(installedVersion, vers);\n } catch {\n return false;\n }\n }\n if (condition.startsWith('between')) {\n const vers1 = condition.substring(8, condition.indexOf(',')).trim();\n const vers2 = condition.substring(condition.indexOf(',') + 1, condition.length - 1).trim();\n try {\n return semver.gte(installedVersion, vers1) && semver.lte(installedVersion, vers2);\n } catch {\n return false;\n }\n }\n return true;\n}\n\ntype DbType = 'file' | 'jsonl' | 'redis';\n\ninterface Context {\n adapters: Record<string, CompactAdapterInfo>;\n instances: ioBroker.InstanceObject[];\n nodeVersion: string;\n npmVersion: string;\n os: string;\n activeRepo: string[] | string;\n uuid?: string;\n lang: ioBroker.Languages;\n /** Current configured database for objects */\n objectsDbType: DbType;\n /** Number of objects in the database */\n noObjects: number;\n}\n\ninterface Message {\n id: string;\n uuid: string;\n 'date-start'?: number | string;\n 'date-end'?: number | string;\n 'node-version'?: string;\n 'npm-version'?: string;\n os?: string;\n repo: string;\n conditions: {\n [adapter: string]: '!installed' | 'active' | '!active';\n };\n title: Record<ioBroker.Languages, string>;\n content: Record<ioBroker.Languages, string>;\n class: 'info' | 'warning' | 'danger';\n /** Name of the FA-icon */\n icon: string;\n created: string;\n /** Link destination */\n link?: string;\n /** Title of the link */\n linkTitle?: ioBroker.StringOrTranslated;\n /** E.g., a base64 encoded image like, data:image/png;base64,iVBORw0KG... */\n img?: 'string';\n /** e.g. >= 15000 to address installations with more than 15k objects */\n 'number-of-objects'?: string;\n /** All object db types which this message is valid for */\n 'objects-db-type'?: DbType[];\n}\n\nexport interface ShowMessage {\n id: string;\n title: string;\n content: string;\n class: 'info' | 'warning' | 'danger';\n icon: string;\n created: string;\n link?: string;\n linkTitle: string;\n img?: string;\n}\n\nexport const checkMessages = (messages: Message[], lastMessageId: string, context: Context): ShowMessage[] => {\n const messagesToShow: ShowMessage[] = [];\n\n try {\n const today = Date.now();\n for (const message of messages) {\n if (!message) {\n continue;\n }\n\n if (message.id === lastMessageId) {\n break;\n }\n let showIt = true;\n\n if (showIt && message['date-start'] && new Date(message['date-start']).getTime() > today) {\n showIt = false;\n } else if (showIt && message['date-end'] && new Date(message['date-end']).getTime() < today) {\n showIt = false;\n } else if (showIt && message.conditions && Object.keys(message.conditions).length > 0) {\n Object.keys(message.conditions).forEach(key => {\n if (showIt) {\n const adapter = context.adapters[key];\n const condition = message.conditions[key];\n\n if (!adapter && condition !== '!installed') {\n showIt = false;\n } else if (adapter && condition === '!installed') {\n showIt = false;\n } else if (adapter && condition === 'active') {\n showIt = checkActive(key, context.instances);\n } else if (adapter && condition === '!active') {\n showIt = !checkActive(key, context.instances);\n } else if (adapter) {\n showIt = checkConditions(condition, adapter.v);\n }\n }\n });\n }\n\n if (showIt && message['node-version'] && context.nodeVersion) {\n showIt = checkConditions(message['node-version'], context.nodeVersion);\n }\n if (showIt && message['npm-version'] && context.npmVersion) {\n showIt = checkConditions(message['npm-version'], context.npmVersion);\n }\n if (showIt && message.os && context.os) {\n showIt = context.os === message.os;\n }\n if (showIt && message.repo) {\n // If multi-repo\n if (Array.isArray(context.activeRepo)) {\n showIt = context.activeRepo.includes(message.repo);\n } else {\n showIt = context.activeRepo === message.repo;\n }\n }\n if (showIt && message.uuid) {\n if (Array.isArray(message.uuid)) {\n showIt = context.uuid && message.uuid.find(uuid => context.uuid === uuid);\n } else {\n showIt = !!(context.uuid && context.uuid === message.uuid);\n }\n }\n\n if (showIt && message['number-of-objects']) {\n // eslint-disable-next-line no-eval\n showIt = eval(`${context.noObjects} ${message['number-of-objects']}`);\n }\n\n if (showIt && message['objects-db-type']) {\n if (!message['objects-db-type'].includes(context.objectsDbType)) {\n showIt = false;\n }\n }\n\n if (showIt) {\n messagesToShow.push({\n id: message.id,\n title: message.title[context.lang] || message.title.en,\n content: message.content[context.lang] || message.content.en,\n class: message.class,\n icon: message.icon,\n created: message.created,\n link: message.link,\n linkTitle:\n typeof message.linkTitle === 'object'\n ? message.linkTitle[context.lang] || message.linkTitle.en\n : message.linkTitle,\n img: message.img,\n });\n }\n }\n } catch {\n // ignore\n }\n\n return messagesToShow;\n};\n\nfunction NewsAdminDialog({\n newsArr,\n current,\n onSetLastNewsId,\n}: {\n newsArr: ShowMessage[];\n current: string;\n onSetLastNewsId: (id?: string) => void;\n}): JSX.Element {\n const [id, setId] = useState(current);\n const [last, setLast] = useState(false);\n const [indexArr, setIndexArr] = useState(0);\n\n useEffect(() => {\n const item = newsArr.find(el => el.id === id);\n if (item) {\n const index = newsArr.indexOf(item);\n if (index + 1 < newsArr.length) {\n const newId = newsArr[index + 1].id;\n if (newId) {\n setId(newId);\n setIndexArr(index + 1);\n }\n } else {\n onSetLastNewsId();\n }\n } else {\n setId(newsArr[0].id);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [last]);\n\n const onClose = (): void => {\n // setOpen(false);\n setLast(!last);\n onSetLastNewsId(id);\n };\n\n const lang = I18n.getLanguage();\n const content = newsArr[indexArr].content.replace(/='([^']*)'/g, '=\"$1\"');\n const title = newsArr[indexArr].title;\n\n const link = newsArr[indexArr].link;\n const linkTitle = newsArr[indexArr].linkTitle;\n return (\n <Dialog\n onClose={onClose}\n open={!0}\n sx={{ '& .MuiDialog-paper': styles.paper }}\n >\n <Box\n component=\"div\"\n sx={{ ...styles.blockInfo, ...styles.img }}\n >\n {new Date(newsArr[indexArr].created).toLocaleDateString(lang)}\n <Status name={newsArr[indexArr].class} />\n </Box>\n <DialogTitle>{I18n.t('You have unread news!')}</DialogTitle>\n <DialogTitle>{title}</DialogTitle>\n <DialogContent\n style={styles.overflowHidden}\n dividers\n >\n <Box\n component=\"div\"\n sx={styles.root}\n >\n <Box\n component=\"div\"\n sx={styles.pre}\n >\n {newsArr[indexArr]?.img && (\n <CardMedia\n sx={styles.img2}\n component=\"img\"\n image={newsArr[indexArr].img}\n />\n )}\n <Typography\n variant=\"body2\"\n component=\"p\"\n >\n {Utils.renderTextWithA(content.replace(/\\n/g, '<br />'))}\n </Typography>\n {newsArr[indexArr]?.link && (\n <Button\n variant=\"contained\"\n style={styles.link}\n onClick={() => window.open(newsArr[indexArr].link, '_blank')}\n color=\"primary\"\n >\n {linkTitle || I18n.t('Link')}\n </Button>\n )}\n </Box>\n </Box>\n </DialogContent>\n <DialogActions>\n {link ? (\n <Button\n id=\"news-admin-dialog-more-info\"\n variant=\"contained\"\n onClick={() => {\n const frame = window.open(link, '_blank');\n frame?.focus();\n }}\n color=\"secondary\"\n startIcon={<WorldIcon />}\n >\n {linkTitle || I18n.t('Show more info')}\n </Button>\n ) : null}\n <Button\n id=\"news-admin-dialog-acknowledge\"\n variant=\"contained\"\n autoFocus\n onClick={onClose}\n color=\"primary\"\n startIcon={<CheckIcon />}\n >\n {I18n.t('Acknowledge')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n}\n\nexport default NewsAdminDialog;\n","import React, { Component, type JSX } from 'react';\n\nimport { Dialog, DialogContent, DialogActions, DialogTitle, DialogContentText, TextField, Button } from '@mui/material';\n\nimport { Close as CloseIcon, AccessTime as TimeIcon, Check as CheckIcon } from '@mui/icons-material';\n\nimport { AdminConnection, type Translate } from '@iobroker/adapter-react-v5';\nimport { MOBILE_WIDTH } from '@/helpers/MobileDialog';\n\nconst styles: Record<string, React.CSSProperties> = {\n buttonLabel: {\n whiteSpace: 'nowrap',\n },\n input: {\n minWidth: 150,\n },\n};\n\ninterface SlowConnectionWarningDialogProps {\n t: Translate;\n readTimeoutMs: number;\n onClose: (readTimeoutMs?: number) => void;\n}\n\ninterface SlowConnectionWarningDialogState {\n readTimeoutSec: number | string;\n}\n\nexport class SlowConnectionWarningDialogClass extends Component<\n SlowConnectionWarningDialogProps,\n SlowConnectionWarningDialogState\n> {\n private readonly mobile: boolean;\n\n constructor(props: SlowConnectionWarningDialogProps) {\n super(props);\n\n this.state = {\n readTimeoutSec: Math.round(\n (props.readTimeoutMs || SlowConnectionWarningDialogClass.getReadTimeoutMs()) / 1000,\n ),\n };\n\n this.mobile = window.innerWidth < MOBILE_WIDTH;\n }\n\n static getReadTimeoutMs(): number {\n return (\n parseInt(((window as any)._localStorage || window.localStorage).getItem('App.readTimeoutMs'), 10) ||\n (AdminConnection.isCloud() ? 40_000 : 15_000)\n );\n }\n\n static saveReadTimeoutMs(readTimeoutMs: number): number {\n if (readTimeoutMs) {\n return ((window as any)._localStorage || window.localStorage).setItem(\n 'App.readTimeoutMs',\n readTimeoutMs.toString(),\n );\n }\n return ((window as any)._localStorage || window.localStorage).removeItem('App.readTimeoutMs');\n }\n\n render(): JSX.Element {\n return (\n <Dialog\n open={!0}\n maxWidth=\"lg\"\n onClose={() => this.props.onClose()}\n >\n <DialogTitle>{this.props.t('Detected slow connection!')}</DialogTitle>\n <DialogContent>\n <DialogContentText>\n {this.props.t('Seems that you have slow connection. Do you want to increase timeout interval?')}\n </DialogContentText>\n <TextField\n variant=\"standard\"\n style={styles.input}\n label={this.props.t('Read timeout')}\n value={this.state.readTimeoutSec}\n onChange={e => this.setState({ readTimeoutSec: e.target.value })}\n type=\"number\"\n slotProps={{ htmlInput: { min: 5, max: 600 } }}\n helperText={this.props.t('in seconds')}\n />\n </DialogContent>\n <DialogActions>\n <Button\n id=\"slow-connection-dialog-minute\"\n className=\"slow-connection-minute\"\n style={styles.buttonLabel}\n variant=\"contained\"\n onClick={() => {\n SlowConnectionWarningDialogClass.saveReadTimeoutMs(60000);\n this.props.onClose(60000);\n }}\n startIcon={<TimeIcon />}\n color=\"grey\"\n >\n {this.mobile ? this.props.t('1 minute') : this.props.t('Set timeout to 1 minute')}\n </Button>\n <Button\n id=\"slow-connection-dialog-ok\"\n className=\"slow-connection-ok\"\n variant=\"contained\"\n autoFocus\n color=\"primary\"\n disabled={!parseInt(this.state.readTimeoutSec as string, 10)}\n onClick={() => {\n const readTimeoutMs = parseInt(this.state.readTimeoutSec as string, 10) * 1000;\n SlowConnectionWarningDialogClass.saveReadTimeoutMs(readTimeoutMs);\n this.props.onClose(readTimeoutMs);\n }}\n startIcon={<CheckIcon />}\n >\n {this.mobile ? null : this.props.t('Apply')}\n </Button>\n <Button\n id=\"slow-connection-dialog-close\"\n className=\"slow-connection-cancel\"\n variant=\"contained\"\n onClick={() => this.props.onClose()}\n color=\"grey\"\n startIcon={<CloseIcon />}\n >\n {this.mobile ? null : this.props.t('Cancel')}\n </Button>\n </DialogActions>\n </Dialog>\n );\n }\n}\n\nexport default SlowConnectionWarningDialogClass;\n","import semver from 'semver';\nimport { type Translate } from '@iobroker/adapter-react-v5';\n\ndeclare module '@mui/material/Button' {\n interface ButtonPropsColorOverrides {\n grey: true;\n }\n}\n\nconst ANSI_RESET = 0;\nconst ANSI_RESET_COLOR = 39;\nconst ANSI_RESET_BG_COLOR = 49;\nconst ANSI_BOLD = 1;\nconst ANSI_RESET_BOLD = 22;\n\nexport interface Style {\n color?: string;\n backgroundColor?: string;\n fontWeight?: string;\n}\n\nconst STYLES: Record<string, Style> = {\n 30: { color: 'black' }, // ANSI_BLACK\n 31: { color: 'red' }, // ANSI_RED\n 32: { color: 'green' }, // ANSI_GREEN\n 33: { color: 'yellow' }, // ANSI_YELLOW\n 34: { color: 'blue' }, // ANSI_BLUE\n 35: { color: 'purple' }, // ANSI_PURPLE\n 36: { color: 'cyan' }, // ANSI_CYAN\n 37: { color: 'white' }, // ANSI_WHITE\n\n 90: { color: 'grey' }, // ANSI_BRIGHT_BLACK\n 91: { color: 'lightred' }, // ANSI_BRIGHT_RED\n 92: { color: 'lightgreen' }, // ANSI_BRIGHT_GREEN\n 93: { color: 'lightyellow' }, // ANSI_BRIGHT_YELLOW\n 94: { color: 'lightblue' }, // ANSI_BRIGHT_BLUE\n 95: { color: 'lightpurple' }, // ANSI_BRIGHT_PURPLE\n 96: { color: 'lightcyan' }, // ANSI_BRIGHT_CYAN\n 97: { color: 'white' }, // ANSI_BRIGHT_WHITE\n\n 40: { backgroundColor: 'black' }, // ANSI_BG_BLACK\n 41: { backgroundColor: 'red' }, // ANSI_BG_RED\n 42: { backgroundColor: 'green' }, // ANSI_BG_GREEN\n 43: { backgroundColor: 'yellow' }, // ANSI_BG_YELLOW\n 44: { backgroundColor: 'blue' }, // ANSI_BG_BLUE\n 45: { backgroundColor: 'purple' }, // ANSI_BG_PURPLE\n 46: { backgroundColor: 'cyan' }, // ANSI_BG_CYAN\n 47: { backgroundColor: 'white' }, // ANSI_BG_WHITE\n\n 100: { backgroundColor: 'grey' }, // ANSI_BRIGHT_BG_BLACK\n 101: { backgroundColor: 'lightred' }, // ANSI_BRIGHT_BG_RED\n 102: { backgroundColor: 'lightgreen' }, // ANSI_BRIGHT_BG_GREEN\n 103: { backgroundColor: 'lightyellow' }, // ANSI_BRIGHT_BG_YELLOW\n 104: { backgroundColor: 'lightblue' }, // ANSI_BRIGHT_BG_BLUE\n 105: { backgroundColor: 'lightpurple' }, // ANSI_BRIGHT_BG_PURPLE\n 106: { backgroundColor: 'lightcyan' }, // ANSI_BRIGHT_BG_CYAN\n 107: { backgroundColor: 'white' }, // ANSI_BRIGHT_BG_WHITE\n};\n\nclass AdminUtils {\n /**\n * Perform JSON parse/stringify with type inference\n *\n * @param obj the object to clone\n */\n static deepClone<T extends Record<string, any>>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n }\n\n /**\n * Format bytes to MB or GB\n *\n * @param bytes the number of bytes\n */\n static formatRam(bytes: number): string {\n const GB = Math.floor((bytes / (1024 * 1024 * 1024)) * 10) / 10;\n bytes %= 1024 * 1024 * 1024;\n const MB = Math.floor((bytes / (1024 * 1024)) * 10) / 10;\n let text = '';\n\n if (GB > 1) {\n text += `${GB} GB`;\n } else {\n text += `${MB} MB`;\n }\n\n return text;\n }\n\n static isTouchDevice(): boolean {\n return 'ontouchstart' in window || window.navigator.maxTouchPoints > 0 || window.navigator.msMaxTouchPoints > 0;\n }\n\n static formatSpeed(mhz: number): string {\n return `${mhz} MHz`;\n }\n\n static formatBytes(bytes: number): string {\n if (Math.abs(bytes) < 1024) {\n return `${bytes} B`;\n }\n\n const units = ['KB', 'MB', 'GB'];\n // const units = ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB'];\n let u = -1;\n\n do {\n bytes /= 1024;\n ++u;\n } while (Math.abs(bytes) >= 1024 && u < units.length - 1);\n\n return `${bytes.toFixed(1)} ${units[u]}`;\n }\n\n static getFileExtension(fileName: string): string | null {\n const pos = fileName.lastIndexOf('.');\n if (pos !== -1) {\n return fileName.substring(pos + 1).toLowerCase();\n }\n return null;\n }\n\n // Big thanks to: https://stackoverflow.com/questions/35969656/how-can-i-generate-the-opposite-color-according-to-current-color\n static invertColor(hex: string, bw: boolean): string {\n if (hex === undefined || hex === null || hex === '' || typeof hex !== 'string') {\n return '';\n }\n if (hex.indexOf('#') === 0) {\n hex = hex.slice(1);\n }\n // convert 3-digit hex to 6-digits.\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n if (hex.length !== 6) {\n throw new Error('Invalid HEX color.');\n }\n const r = parseInt(hex.slice(0, 2), 16);\n const g = parseInt(hex.slice(2, 4), 16);\n const b = parseInt(hex.slice(4, 6), 16);\n\n if (bw) {\n // http://stackoverflow.com/a/3943023/112731\n return r * 0.299 + g * 0.587 + b * 0.114 > 186 ? '#000000' : '#FFFFFF';\n }\n // invert color components\n const finalR = (255 - r).toString(16);\n const finalG = (255 - g).toString(16);\n const finalB = (255 - b).toString(16);\n // pad each with zeros and return\n return `#${finalR.padStart(2, '0')}${finalG.padStart(2, '0')}${finalB.padStart(2, '0')}`;\n }\n\n /**\n * Format number in seconds to time text\n *\n * @param seconds the number of seconds\n * @param t i18n.t function\n */\n static formatSeconds(seconds: number, t: Translate): string {\n const days = Math.floor(seconds / (3600 * 24));\n let minutesRes: string;\n let secondsRes: string;\n let hoursRes: string;\n\n seconds %= 3600 * 24;\n const hours = Math.floor(seconds / 3600);\n\n if (hours < 10) {\n hoursRes = `0${hours}`;\n } else {\n hoursRes = hours.toString();\n }\n seconds %= 3600;\n const minutes = Math.floor(seconds / 60);\n if (minutes < 10) {\n minutesRes = `0${minutes}`;\n } else {\n minutesRes = minutes.toString();\n }\n\n seconds %= 60;\n seconds = Math.floor(seconds);\n if (seconds < 10) {\n secondsRes = `0${seconds}`;\n } else {\n secondsRes = seconds.toString();\n }\n\n let text = '';\n if (days) {\n text += `${days} ${t('daysShortText')} `;\n }\n text += `${hoursRes}:${minutesRes}:${secondsRes}`;\n\n return text;\n }\n\n static objectMap<Result = any, Value = any>(\n object: Record<string, Value>,\n callback: (res: Value, key: string) => Result,\n ): Result[] {\n const result: Result[] = [];\n for (const key in object) {\n result.push(callback(object[key], key));\n }\n return result;\n }\n\n static fixAdminUI(obj: Record<string, any>): void {\n if (obj?.common) {\n if (!obj.common.adminUI) {\n if (obj.common.noConfig) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'none';\n } else if (obj.common.jsonConfig) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'json';\n } else if (obj.common.materialize) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'materialize';\n } else {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.config = 'html';\n }\n\n if (obj.common.jsonCustom) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.custom = 'json';\n } else if (obj.common.supportCustoms) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.custom = 'json';\n }\n\n if (obj.common.materializeTab && obj.common.adminTab) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.tab = 'materialize';\n } else if (obj.common.adminTab) {\n obj.common.adminUI = obj.common.adminUI || {};\n obj.common.adminUI.tab = 'html';\n }\n\n if (obj.common.adminUI) {\n console.warn(\n `Please add to \"${obj._id.replace(/\\.\\d+$/, '')}\" common.adminUI=${JSON.stringify(obj.common.adminUI)}`,\n );\n }\n } else {\n let changed = false;\n if (obj.common.materializeTab && obj.common.adminTab) {\n if (obj.common.adminUI.tab !== 'materialize') {\n obj.common.adminUI.tab = 'materialize';\n changed = true;\n }\n } else if (obj.common.adminTab) {\n if (obj.common.adminUI.tab !== 'html' && obj.common.adminUI.tab !== 'materialize') {\n obj.common.adminUI.tab = 'html';\n changed = true;\n }\n }\n\n if (obj.common.jsonCustom || obj.common.supportCustoms) {\n if (obj.common.adminUI.custom !== 'json') {\n obj.common.adminUI.custom = 'json';\n changed = true;\n }\n }\n\n if (obj.common.noConfig) {\n if (obj.common.adminUI.config !== 'none') {\n obj.common.adminUI.config = 'none';\n changed = true;\n }\n } else if (obj.common.jsonConfig) {\n if (obj.common.adminUI.config !== 'json') {\n obj.common.adminUI.config = 'json';\n changed = true;\n }\n obj.common.adminUI.config = 'json';\n } else if (obj.common.materialize) {\n if (obj.common.adminUI.config !== 'materialize') {\n if (!obj.common.adminUI.config) {\n obj.common.adminUI.config = 'materialize';\n changed = true;\n }\n }\n } else if (!obj.common.adminUI.config) {\n obj.common.adminUI.config = 'html';\n changed = true;\n }\n if (changed) {\n console.warn(\n `Please modify \"${obj._id.replace(/\\.\\d+$/, '')}\" common.adminUI=${JSON.stringify(obj.common.adminUI)}`,\n );\n }\n }\n }\n }\n\n static parseColorMessage(text: string): string | { original: string; parts: { text: string; style: Style }[] } {\n if (text && (text.includes('\\u001b[') || text.includes('\\u001B['))) {\n // eslint-disable-next-line\n let m = text.match(/\\u001b\\[\\d+m/gi);\n if (m) {\n const original = text;\n const result = [];\n let style: Style = {};\n for (let i = 0; i < m.length; i++) {\n const pos = text.indexOf(m[i]);\n if (pos) {\n result.push({ text: text.substring(0, pos), style: { ...style } });\n }\n const code = parseInt(m[i].substring(2), 10);\n if (STYLES[code]) {\n Object.assign(style, STYLES[code]);\n } else if (ANSI_RESET_COLOR === code) {\n delete style.color;\n } else if (ANSI_RESET_BG_COLOR === code) {\n delete style.backgroundColor;\n } else if (ANSI_RESET_BOLD === code) {\n delete style.fontWeight;\n } else if (ANSI_BOLD === code) {\n style.fontWeight = 'bold';\n } else if (ANSI_RESET === code) {\n style = {};\n }\n text = text.substring(m[i].length + pos);\n }\n if (text) {\n result.push({ text, style: { ...style } });\n }\n\n return { original, parts: result };\n }\n return text;\n }\n return text;\n }\n\n static PASSWORD_ERROR_LENGTH =\n 'Password must be at least 8 characters long and have numbers, upper and lower case letters';\n\n static PASSWORD_ERROR_NOT_EQUAL = 'Repeat password is not equal with password';\n\n static PASSWORD_ERROR_EMPTY = 'Empty password is not allowed';\n\n static PASSWORD_SET = '***********';\n\n /** The languages for which docs are generated */\n static SUPPORTED_DOC_LANGUAGES: ioBroker.Languages[] = ['en', 'de', 'ru', 'zh-cn'];\n\n static checkPassword(password: string, passwordRepeat?: string): false | string {\n password = password || '';\n passwordRepeat = passwordRepeat || '';\n if (\n password &&\n passwordRepeat &&\n password !== AdminUtils.PASSWORD_SET &&\n passwordRepeat !== AdminUtils.PASSWORD_SET\n ) {\n if (password.length < 8 || !password.match(/\\d/) || !password.match(/[a-z]/) || !password.match(/[A-Z]/)) {\n return AdminUtils.PASSWORD_ERROR_LENGTH;\n }\n if (password !== passwordRepeat) {\n return AdminUtils.PASSWORD_ERROR_NOT_EQUAL;\n }\n return false;\n }\n if (password && password !== AdminUtils.PASSWORD_SET) {\n if (password.length < 8 || !password.match(/\\d/) || !password.match(/[a-z]/) || !password.match(/[A-Z]/)) {\n return AdminUtils.PASSWORD_ERROR_LENGTH;\n }\n return false;\n }\n if (passwordRepeat && passwordRepeat !== AdminUtils.PASSWORD_SET) {\n if (\n passwordRepeat.length < 8 ||\n !passwordRepeat.match(/\\d/) ||\n !passwordRepeat.match(/[a-z]/) ||\n !passwordRepeat.match(/[A-Z]/)\n ) {\n return AdminUtils.PASSWORD_ERROR_LENGTH;\n }\n return false;\n }\n if (password === AdminUtils.PASSWORD_SET || passwordRepeat === AdminUtils.PASSWORD_SET) {\n return false;\n }\n return AdminUtils.PASSWORD_ERROR_EMPTY;\n }\n\n /**\n * Get Link to adapter docs in given language\n *\n * @param options the adapter name without ioBroker. prefix and the language information\n * @param options.adapterName the adapter name without ioBroker. prefix\n * @param options.lang the language for the docs\n */\n static getDocsLinkForAdapter(options: { lang: ioBroker.Languages; adapterName: string }): string {\n const { adapterName } = options;\n let { lang } = options;\n\n if (!AdminUtils.SUPPORTED_DOC_LANGUAGES.includes(lang)) {\n lang = 'en';\n }\n\n return `https://www.iobroker.net/#${lang}/adapters/adapterref/iobroker.${adapterName}/README.md`;\n }\n\n static updateAvailable(oldVersion: string, newVersion: string): boolean {\n try {\n return semver.gt(newVersion, oldVersion) === true;\n } catch {\n console.warn(`[ADAPTERS] Cannot compare \"${newVersion}\" and \"${oldVersion}\"`);\n return false;\n }\n }\n\n static getText(word: ioBroker.StringOrTranslated, lang: ioBroker.Languages): string {\n if (typeof word === 'object') {\n if (!word) {\n return '';\n }\n return (word[lang] || word.en || '').toString();\n }\n\n return word ? word.toString() : '';\n }\n\n static clone<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj));\n }\n}\n\nexport default AdminUtils;\n","import React, { Component, type JSX } from 'react';\n\nexport const MOBILE_WIDTH = 800;\n\ninterface MobileDialogState {\n mobile: boolean;\n}\n\nclass MobileDialog<TProps, TState extends MobileDialogState = MobileDialogState> extends Component<TProps, TState> {\n private _resizeHandlerInstalled: boolean;\n\n private _timerOnResize: ReturnType<typeof setTimeout> = null;\n\n static isMobile(): boolean {\n return window.innerWidth < MOBILE_WIDTH;\n }\n\n componentDidMount(): void {\n if (this.state.mobile !== MobileDialog.isMobile()) {\n this.setState({ mobile: MobileDialog.isMobile() });\n }\n if (!this._resizeHandlerInstalled) {\n this._resizeHandlerInstalled = true;\n window.addEventListener('resize', this.__onResize, false);\n }\n }\n\n componentWillUnmount(): void {\n if (this._timerOnResize) {\n clearTimeout(this._timerOnResize);\n this._timerOnResize = null;\n }\n if (this._resizeHandlerInstalled) {\n window.removeEventListener('resize', this.__onResize, false);\n }\n }\n\n __onResize = (): void => {\n if (this._timerOnResize) {\n clearTimeout(this._timerOnResize);\n }\n this._timerOnResize = setTimeout(() => {\n this._timerOnResize = null;\n if (this.state.mobile !== MobileDialog.isMobile()) {\n this.setState({ mobile: MobileDialog.isMobile() });\n }\n }, 200);\n };\n\n // eslint-disable-next-line react/no-unused-class-component-methods\n getButtonTitle(icon: JSX.Element, text: string, moreMobileIcon?: JSX.Element): string | JSX.Element | null {\n if (icon && text) {\n if (this.state.mobile) {\n if (moreMobileIcon) {\n return (\n <>\n {icon} & {moreMobileIcon}\n </>\n );\n }\n return icon;\n }\n return (\n <>\n {icon}\n <span style={{ marginLeft: 4 }}>{text}</span>\n </>\n );\n }\n if (icon) {\n return icon;\n }\n if (text) {\n return text;\n }\n return null;\n }\n}\n\nexport default MobileDialog;\n","/** Url where controller changelog is reachable */\nexport const CONTROLLER_CHANGELOG_URL = 'https://github.com/ioBroker/ioBroker.js-controller/blob/master/CHANGELOG.md';\n\n/** All possible auto upgrade settings */\nexport const AUTO_UPGRADE_SETTINGS: ioBroker.AutoUpgradePolicy[] = ['none', 'patch', 'minor', 'major'];\n\n/** Mapping to make it more understandable which upgrades are allowed */\nexport const AUTO_UPGRADE_OPTIONS_MAPPING: Record<ioBroker.AutoUpgradePolicy, string> = {\n none: 'none',\n patch: 'patch',\n minor: 'patch & minor',\n major: 'patch, minor & major',\n};\n\nfunction ip2int(ip: string): number {\n return ip.split('.').reduce((ipInt, octet) => (ipInt << 8) + parseInt(octet, 10), 0) >>> 0;\n}\n\nfunction findNetworkAddressOfHost(obj: ioBroker.HostObject, localIp: string): null | string {\n const networkInterfaces = obj?.native?.hardware?.networkInterfaces;\n if (!networkInterfaces) {\n return null;\n }\n\n let hostIp;\n for (const networkInterface of Object.values(networkInterfaces)) {\n if (!networkInterface) {\n continue;\n }\n for (let i = 0; i < networkInterface.length; i++) {\n const ip = networkInterface[i];\n if (ip.internal) {\n return;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) {\n // if DNS name\n hostIp = ip.address;\n } else if (\n ip.family === 'IPv4' &&\n localIp.includes('.') &&\n (ip2int(localIp) & ip2int(ip.netmask)) === (ip2int(ip.address) & ip2int(ip.netmask))\n ) {\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n }\n }\n\n if (!hostIp) {\n for (const networkInterface of Object.values(networkInterfaces)) {\n if (!networkInterface) {\n continue;\n }\n for (let i = 0; i < networkInterface.length; i++) {\n const ip = networkInterface[i];\n if (ip.internal) {\n return;\n }\n if (localIp.includes(':') && ip.family !== 'IPv6') {\n return;\n }\n if (localIp.includes('.') && !localIp.match(/[^.\\d]/) && ip.family !== 'IPv4') {\n return;\n }\n if (localIp === '127.0.0.0' || localIp === 'localhost' || localIp.match(/[^.\\d]/)) {\n // if DNS name\n hostIp = ip.address;\n } else {\n hostIp = ip.address;\n }\n }\n }\n }\n\n if (!hostIp) {\n for (const networkInterface of Object.values(networkInterfaces)) {\n if (!networkInterface) {\n continue;\n }\n for (let i = 0; i < networkInterface.length; i++) {\n const ip = networkInterface[i];\n if (ip.internal) {\n return;\n }\n hostIp = ip.address;\n }\n }\n }\n\n return hostIp;\n}\n\nfunction getHostname(\n instanceObj: ioBroker.InstanceObject,\n objects: Record<string, ioBroker.InstanceObject>,\n hosts: Record<string, ioBroker.HostObject>,\n currentHostname: string,\n adminInstance: string,\n): string {\n if (!instanceObj || !instanceObj.common) {\n return null;\n }\n\n let hostname;\n // check if the adapter from the same host as admin\n const adminHost = objects[`system.adapter.${adminInstance}`]?.common?.host;\n if (instanceObj.common.host !== adminHost) {\n // find IP address\n const host = hosts[`system.host.${instanceObj.common.host}`];\n if (host) {\n const ip = findNetworkAddressOfHost(host, currentHostname);\n if (ip) {\n hostname = ip;\n } else {\n console.warn(`Cannot find suitable IP in host ${instanceObj.common.host} for ${instanceObj._id}`);\n return null;\n }\n } else {\n console.warn(`Cannot find host ${instanceObj.common.host} for ${instanceObj._id}`);\n return null;\n }\n } else {\n hostname = currentHostname;\n }\n\n return hostname;\n}\n\n// internal use\nfunction _replaceLink(\n link: string,\n objects: Record<string, ioBroker.InstanceObject>,\n adapterInstance: string,\n attr: string,\n placeholder: string,\n hosts: Record<string, ioBroker.HostObject>,\n hostname: string,\n adminInstance: string,\n): string {\n if (attr === 'protocol') {\n attr = 'secure';\n }\n\n try {\n const object = objects[`system.adapter.${adapterInstance}`];\n\n if (link && object) {\n if (attr === 'secure') {\n link = link.replace(`%${placeholder}%`, object.native[attr] ? 'https' : 'http');\n } else {\n let value = object.native[attr];\n // workaround for port\n if ((attr === 'webinterfacePort' || attr === 'port') && (!value || value === '0')) {\n if (object.native.secure === true) {\n value = 443;\n } else {\n value = 80;\n }\n }\n\n if (attr === 'bind' || attr === 'ip') {\n let ip = object.native.bind || object.native.ip;\n if (ip === '0.0.0.0') {\n ip = getHostname(object, objects, hosts, hostname, adminInstance);\n }\n if (!link.includes(`%${placeholder}%`)) {\n link = link.replace(`%native_${placeholder}%`, ip || '');\n } else {\n link = link.replace(`%${placeholder}%`, ip || '');\n }\n } else if (!link.includes(`%${placeholder}%`)) {\n link = link.replace(`%native_${placeholder}%`, value);\n } else {\n link = link.replace(`%${placeholder}%`, value);\n }\n }\n } else {\n console.log(`Cannot get link ${attr}`);\n link = link.replace(`%${placeholder}%`, '');\n }\n } catch (error) {\n console.log(error);\n }\n return link;\n}\n\n/**\n * Convert the template link to string\n *\n * Possible placeholders:\n * `%ip%` - `native.bind` or `native.ip` of this adapter. If it is '0.0.0.0', we are trying to find the host IP that is reachable from the current browser.\n * `%protocol%` - `native.protocol` or `native.secure` of this adapter. The result is 'http' or 'https'.\n * `%s%` - `native.protocol` or `native.secure` of this adapter. The result is '' or 's'. The idea is to use the pattern like \"http%s%://...\"\n * `%instance%` - instance number\n * `%adapterName_nativeAttr%` - Takes the native value `nativeAttr` of all instances of adapterName. This generates many links if more than one instance installed\n * `%adapterName.x_nativeAttr%` - Takes the native value `nativeAttr` of adapterName.x instance\n *\n * @param link pattern for link\n * @param adapter adapter name\n * @param instance adapter instance number\n * @param context Context object\n * @param context.instances Object with all instances\n * @param context.hostname Actual host name\n * @param context.adminInstance Actual admin instance\n * @param context.hosts Object with all hosts\n */\nexport function replaceLink(\n link: string,\n adapter: string,\n instance: number,\n context: {\n instances: Record<string, ioBroker.InstanceObject>;\n hostname: string;\n adminInstance: string;\n hosts: Record<string, ioBroker.HostObject>;\n },\n): {\n url: string;\n port: number;\n instance?: string;\n}[] {\n const _urls: {\n url: string;\n port: number;\n instance?: string;\n }[] = [];\n let port: number;\n\n if (link) {\n const instanceObj = context.instances[`system.adapter.${adapter}.${instance}`];\n const native = instanceObj?.native || {};\n\n const placeholders = link.match(/%(\\w+)%/g);\n\n if (placeholders) {\n for (let p = 0; p < placeholders.length; p++) {\n let placeholder = placeholders[p];\n\n if (placeholder === '%ip%') {\n let ip: string = (native.bind || native.ip) as string;\n if (!ip || ip === '0.0.0.0') {\n // Check host\n ip = getHostname(\n instanceObj,\n context.instances,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n }\n\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%ip%', ip)));\n } else {\n link = link.replace('%ip%', ip || '');\n }\n } else if (placeholder === '%protocol%') {\n const protocolVal: string | boolean = native.secure === undefined ? native.protocol : native.secure;\n let protocol: 'http' | 'https';\n if (protocolVal === true || protocolVal === 'true') {\n protocol = 'https';\n } else if (protocolVal === false || protocolVal === 'false' || !protocolVal) {\n protocol = 'http';\n } else {\n protocol = protocolVal.toString().replace(/:$/, '') as 'http' | 'https';\n }\n\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%protocol%', protocol)));\n } else {\n link = link.replace('%protocol%', protocol);\n }\n } else if (placeholder === '%s%') {\n const protocolVal: string | boolean = native.secure === undefined ? native.protocol : native.secure;\n let protocol: '' | 's';\n if (protocolVal === true || protocolVal === 'true') {\n protocol = 's';\n } else if (protocolVal === false || protocolVal === 'false' || !protocolVal) {\n protocol = '';\n } else {\n protocol = protocolVal.toString().replace(/:$/, '') as '' | 's';\n }\n\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%s%', protocol)));\n } else {\n link = link.replace('%s%', protocol);\n }\n } else if (placeholder === '%instance%') {\n link = link.replace('%instance%', instance.toString());\n if (_urls.length) {\n _urls.forEach(item => (item.url = item.url.replace('%instance%', instance.toString())));\n } else {\n link = link.replace('%instance%', instance.toString());\n }\n } else {\n // remove %%\n placeholder = placeholder.replace(/%/g, '');\n\n if (placeholder.startsWith('native_')) {\n placeholder = placeholder.substring(7);\n }\n\n // like web.0_port or web_protocol\n if (!placeholder.includes('_')) {\n // if only one instance\n const adapterInstance = `${adapter}.${instance}`;\n if (_urls.length) {\n _urls.forEach(\n item =>\n (item.url = _replaceLink(\n item.url,\n context.instances,\n adapterInstance,\n placeholder,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n )),\n );\n } else {\n link = _replaceLink(\n link,\n context.instances,\n adapterInstance,\n placeholder,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n port = context.instances[`system.adapter.${adapterInstance}`]?.native?.port;\n }\n } else {\n const [adapterInstance, attr] = placeholder.split('_');\n\n // if instance number not found\n if (!adapterInstance.match(/\\.[0-9]+$/)) {\n // list all possible instances\n let ids: string[];\n if (adapter === adapterInstance) {\n // take only this one instance and that's all\n ids = [`${adapter}.${instance}`];\n } else {\n ids = Object.keys(context.instances)\n .filter(\n id =>\n id.startsWith(`system.adapter.${adapterInstance}.`) &&\n context.instances[id].common.enabled,\n )\n .map(id => id.substring(15));\n\n // try to get disabled instances\n if (!ids.length) {\n ids = Object.keys(context.instances)\n .filter(id => id.startsWith(`system.adapter.${adapterInstance}.`))\n .map(id => id.substring(15));\n }\n }\n\n for (const id of ids) {\n if (_urls.length) {\n const item = _urls.find(t => t.instance === id);\n if (item) {\n item.url = _replaceLink(\n item.url,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n } else {\n // add new\n const _link = _replaceLink(\n link,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n const _port: number = context.instances[`system.adapter.${id}`]?.native\n ?.port as number;\n\n _urls.push({ url: _link, port: _port, instance: id });\n }\n } else {\n const _link = _replaceLink(\n link,\n context.instances,\n id,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n\n const _port: number = context.instances[`system.adapter.${id}`]?.native\n ?.port as number;\n _urls.push({ url: _link, port: _port, instance: id });\n }\n }\n } else {\n link = _replaceLink(\n link,\n context.instances,\n adapterInstance,\n attr,\n placeholder,\n context.hosts,\n context.hostname,\n context.adminInstance,\n );\n\n port = context.instances[`system.adapter.${adapterInstance}`]?.native?.port as number;\n }\n }\n }\n }\n }\n }\n\n if (_urls.length) {\n return _urls;\n }\n return [{ url: link, port }];\n}\n","import React, { Component, type JSX } from 'react';\nimport { LinearProgress } from '@mui/material';\n\nimport { withWidth, type ThemeType, Router } from '@iobroker/adapter-react-v5';\n\nimport type InstancesWorker from '@/Workers/InstancesWorker';\nimport AdminUtils from '@/helpers/AdminUtils';\nimport { replaceLink } from '@/helpers/utils';\n\nconst styles: Record<string, React.CSSProperties> = {\n root: {\n // border: '0 solid #FFF',\n display: 'block',\n left: 0,\n top: 0,\n width: '100%',\n height: '100%',\n // background: 'white',\n color: 'black',\n borderRadius: 4,\n boxShadow:\n '0px 2px 1px -1px rgb(0 0 0 / 20%), 0px 1px 1px 0px rgb(0 0 0 / 14%), 0px 1px 3px 0px rgb(0 0 0 / 12%)',\n border: '0px solid #888',\n },\n};\n\nexport async function getHref(\n instancesWorker: InstancesWorker,\n tab: string,\n hostname: string,\n hosts: Record<string, ioBroker.HostObject>,\n adminInstance: string,\n themeType: ThemeType,\n): Promise<string> {\n const instances = await instancesWorker.getObjects();\n let adapter = tab.replace(/^tab-/, '');\n const m = adapter.match(/-(\\d+)$/);\n const instNum: number | null = m ? parseInt(m[1], 10) : null;\n let instance;\n if (instances) {\n if (instNum !== null) {\n adapter = adapter.replace(/-(\\d+)$/, '');\n const name = `system.adapter.${adapter}.${instNum}`;\n instance = Object.keys(instances).find(id => id === name);\n } else {\n const name = `system.adapter.${adapter}.`;\n\n instance = instances && Object.keys(instances).find(id => id.startsWith(name));\n }\n }\n instance = instances && instances[instance];\n AdminUtils.fixAdminUI(instance);\n if (!instance || !instance.common || !instance.common.adminTab) {\n console.error(`Cannot find instance ${tab}`);\n\n return '';\n }\n\n // calculate href\n let href = instance.common.adminTab.link;\n if (!href) {\n if (instance.common.adminUI?.tab === 'materialize') {\n href = `adapter/${adapter}/tab_m.html${instNum !== null && instNum !== undefined ? `?${instNum}` : ''}`;\n } else {\n href = `adapter/${adapter}/tab.html${instNum !== null && instNum !== undefined ? `?${instNum}` : ''}`;\n }\n }\n if (!instance.common.adminTab.singleton && instNum !== null && instNum !== undefined) {\n href += `${href.includes('?') ? '&' : '?'}instance=${instNum}`;\n }\n if (href.includes('%')) {\n let _instNum: number;\n // fix for singletons\n if (instNum === null) {\n _instNum = parseInt(instance._id.split('.').pop(), 10);\n } else {\n _instNum = instNum;\n }\n\n // replace\n const hrefs = replaceLink(href, adapter, _instNum, {\n hostname,\n // it cannot be void\n instances: instances,\n hosts,\n adminInstance,\n });\n\n href = hrefs ? hrefs[0]?.url : '';\n }\n // add at the end the instance, as some adapters make bullshit like: window.location.search.slice(-1) || 0;\n href += `${href.includes('?') ? '&' : '?'}newReact=true${instNum !== null && instNum !== undefined ? `&${instNum}` : ''}&react=${themeType}`;\n return href;\n}\n\ninterface CustomTabProps {\n instancesWorker: InstancesWorker;\n tab: string;\n hostname: string;\n hosts: ioBroker.HostObject[];\n adminInstance: string;\n themeName: ThemeType;\n onRegisterIframeRef: (ref: HTMLIFrameElement) => void;\n onUnregisterIframeRef: (ref: HTMLIFrameElement) => void;\n}\n\ninterface CustomTabState {\n href: string;\n}\n\nclass CustomTab extends Component<CustomTabProps, CustomTabState> {\n private refIframe: HTMLIFrameElement | null = null;\n\n private registered: boolean = false;\n\n constructor(props: CustomTabProps) {\n super(props);\n this.state = {\n href: '',\n };\n\n const hosts: Record<string, ioBroker.HostObject> = {};\n for (const host of props.hosts) {\n hosts[host._id] = host;\n }\n\n void getHref(\n this.props.instancesWorker,\n this.props.tab,\n this.props.hostname,\n hosts,\n this.props.adminInstance,\n this.props.themeName,\n ).then(href => {\n this.setState({ href });\n // check if href exists\n // fetch(href)\n // .then(() => this.setState({ href }))\n // .catch(() => this.setState({ href: href.includes('tab_m.html') ? href.replace('tab_m.html', 'tab.html') : href.replace('tab.html', 'tab_m.html') }));\n });\n }\n\n componentWillUnmount(): void {\n if (this.registered) {\n this.props.onUnregisterIframeRef(this.refIframe);\n this.registered = false;\n }\n (window.removeEventListener || window.detachEvent)(\n window.removeEventListener ? 'message' : 'onmessage',\n this.onMessage,\n false,\n );\n }\n\n componentDidMount(): void {\n if (!this.registered && this.refIframe?.contentWindow) {\n this.registered = true;\n this.props.onRegisterIframeRef(this.refIframe);\n }\n (window.addEventListener || window.attachEvent)(\n window.addEventListener ? 'message' : 'onmessage',\n this.onMessage,\n false,\n );\n }\n\n componentDidUpdate(/* prevProps, prevState, snapshot */): void {\n if (!this.registered && this.refIframe?.contentWindow) {\n this.registered = true;\n this.props.onRegisterIframeRef(this.refIframe);\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n onMessage = (event: MessageEvent & { message: string }): void => {\n if (event.origin !== window.location.origin) {\n return;\n }\n if (event.data === 'close' || event.message === 'close') {\n Router.doNavigate('tab-instances');\n } else if (event.data === 'change' || event.message === 'change') {\n // this.props.configStored(false);\n console.warn('Application sends \"change\" message, but it is not processed yet');\n } else if (event.data === 'nochange' || event.message === 'nochange') {\n // this.props.configStored(true);\n console.warn('Application sends \"nochange\" message, but it is not processed yet');\n } else if (\n (typeof event.data === 'string' && event.data.startsWith('goto:')) ||\n (typeof event.message === 'string' && event.message.startsWith('goto:'))\n ) {\n const [, url] = (event.data || event.message).split(':');\n const [tab, subTab, parameter] = url.split('/');\n Router.doNavigate(tab, subTab, parameter);\n }\n };\n\n render(): JSX.Element {\n if (!this.state.href) {\n return <LinearProgress />;\n }\n\n return (\n <iframe\n ref={el => (this.refIframe = el)}\n title={this.props.tab}\n style={styles.root}\n src={this.state.href}\n onError={e => {\n (e.target as HTMLIFrameElement).onerror = null;\n this.setState({ href: this.state.href.replace('tab_m.html', 'tab.html') });\n }}\n />\n );\n }\n}\n\nexport default withWidth()(CustomTab);\n"],"names":["GenericWorker","constructor","socket","root","objectType","handlers","promise","connected","objects","forceUpdate","objectChangeHandler","id","obj","this","checkObjectId","type","oldObj","AdminUtils","fixAdminUI","JSON","stringify","postProcessing","forEach","cb","connectionHandler","isConnected","length","subscribeObject","then","getObjects","Object","keys","catch","e","window","alert","connectionPostHandler","registerConnectionHandler","startsWith","_id","_obj","isForceUpdate","update","Promise","getObjectViewSystem","_isConnected","registerHandler","doNotRequestObjects","includes","push","unregisterHandler","pos","indexOf","splice","unsubscribeObject","destroy","unregisterConnectionHandler","ContextWrapper","createContext","hostsUpdate","adaptersUpdate","hosts","repository","installed","ContextWrapperProvider","_ref","children","stateContext","setState","useState","setStateContext","useMemo","prevState","useEffect","jsControllerVersion","version","count","element","updateAvailable","common","installedVersion","_installed","adapter","ignoreVersion","_jsx","Provider","value","styles","message","position","display","width","offline","justifyContent","alignItems","opacity","flexWrap","timestamp","color","top","right","fontSize","simpleMessage","fontFamily","ml","mb","whiteSpace","NotificationMessage","Component","props","super","lastAlive","onAliveChanged","state","instanceId","alive","val","Date","now","getGui","data","schema","updateData","componentDidMount","_this$props$message$c","_this$props$message$c2","contextData","admin","notification","getState","subscribeState","_this$props$message$c3","_this$props$message$c4","_this$props$message$c5","_this$props$message$c6","parse","offlineMessage","sendTo","replace","result","renderCustomGui","_this$props$message$c7","_this$props$message$c8","text","systemLang","en","Box","sx","Utils","renderTextWithA","Typography","I18n","t","LinearProgress","adapterName","instance","split","_jsxs","_Fragment","error","style","JsonConfigComponent","parseInt","onError","onChange","onBackEndCommand","command","refresh","onLink","embedded","themeName","themeType","theme","isFloatComma","dateFormat","renderSimpleMessage","render","component","ts","toLocaleString","backgroundColor","palette","background","paper","height","borderRadius","flexDirection","maxWidth","flex","overflowHidden","overflow","overflowAuto","overflowY","column","headerText","fontWeight","mode","descriptionHeaderText","margin","button","paddingTop","paddingBottom","bottom","zIndex","img2","mr","content","left","backgroundSize","heading","headingTop","classNameBox","p","textStyle","textOverflow","buttonStyle","m","Status","severity","isDark","BellIcon","InfoIcon","WarningIcon","TabPanel","_ref2","index","sxBox","role","_ref3","notifications","onClose","ackCallback","instances","panel","setPanel","disabled","setDisabled","expanded","setExpanded","autoCollapse","setAutoCollapse","messages","setMessages","handleChangeAccordion","panelName","_event","isExpanded","black","notificationManagerInstalled","values","find","name","_messages","firstKey","host","hostDetails","entries","scope","scopeDetails","category","categoryDetails","categories","map","key","currentScope","currentName","entry","Dialog","open","marginLeft","marginRight","Tooltip","title","slotProps","popper","pointerEvents","DialogContent","dividers","AppBar","Tabs","handleChange","newValue","variant","scrollButtons","indicatorColor","textColor","idx","Tab","label","getLanguage","icon","undefined","description","nameInst","_currentInstance$comm","_currentInstance$comm2","accKey","currentInstance","Accordion","AccordionSummary","expandIcon","ExpandMoreIcon","CardMedia","image","AccordionDetails","msg","i","linkCommand","target","url","toString","setTimeout","_url","location","hash","protocol","href","close","pathname","DialogActions","Button","autoFocus","onClick","startIcon","CheckIcon","CloseIcon","flexGrow","closeButton","grey","hiddenDialog","dialogRoot","CommandDialog","progressText","isError","closeOnReady","_localStorage","localStorage","getItem","scroll","fullWidth","visible","inBackground","onInBackground","DialogTitle","IconButton","size","Command","noSpacing","ready","commandError","errorFunc","performed","callback","cmd","onFinished","onSetCommandRunning","running","FormControlLabel","control","Checkbox","checked","setItem","OpenInBrowserIcon","confirmText","funcSet","_","setTabs","tabs","findCard","cards","card","c","cursor","canDrag","setEndDrag","iconJSX","selected","compact","badgeContent","badgeColor","tab","ref","useRef","handlerId","drop","useDrop","accept","collect","monitor","getHandlerId","hover","_ref$current","draggedId","current","overIndexActions","hoverBoundingRect","getBoundingClientRect","hoverMiddleY","hoverClientY","getClientOffset","y","moveCard","atIndex","copyCard","isDragging","drag","preview","useDrag","item","end","getEmptyImage","captureDraggingState","event","preventDefault","textDecoration","primary","main","invertColor","selectedIcon","compactBadge","pl","noWrap","warn","amber","editMenuList","editListFunc","badgeAdditionalContent","badgeAdditionalColor","DragHandle","ColorPicker","noInputField","ListItemButton","getStyle","Grid2","container","spacing","ListItemIcon","minWidth","Badge","ListItemText","layerStyles","getItemStyles","initialOffset","currentOffset","isSnapToGrid","x","Math","round","snapToGrid","transform","WebkitTransform","default","itemType","useDragLayer","getItemType","getInitialSourceClientOffset","getSourceClientOffset","DrawerItem","timer","anchorEl","setAnchorEl","React","setOpen","placement","setPlacement","el","clearTimeout","currentTarget","prev","EditIcon","Popper","transition","TransitionProps","Fade","timeout","Paper","padding","DRAWER_FULL_WIDTH","DRAWER_EDIT_WIDTH","flexShrink","transitions","create","easing","easeOut","duration","enteringScreen","rootFullWidth","rootEditWidth","rootCompactWidth","overflowX","header","mixins","toolbar","headerCompact","headerLogout","list","logoSize","avatarBlock","marginTop","marginBottom","avatarNotVisible","avatarVisible","styleVersion","alignSelf","editButton","STATES","tabsInfo","order","AppsIcon","StoreIcon","SubtitlesIcon","ViewListIcon","ArtTrackIcon","DvrIcon","ViewHeadlineIcon","SubscriptionsIcon","FlashOnIcon","PersonOutlineIcon","StorageIcon","FilesIcon","Drawer","logsHandlerRegistered","refEditButton","instanceChangedHandler","getTabs","onNotificationsHandler","hostsWorker","getNotifications","calculateWarning","onErrorsUpdates","logErrors","onWarningsUpdates","logWarnings","warning","other","_notifications$host","_notifications$host$r","system","hostNotifications","tabsEditSystemConfig","async","isVisibility","newColor","newTabs","newObjCopy","getSystemConfig","tabsVisible","setSystemConfig","badge","additionalContent","additionalColor","calculateHostUpdates","calculateAdapterUpdates","getDerivedStateFromProps","_repository$jsContro","sort","instancesWorker","registerNotificationHandler","logsWorker","registerErrorCountHandler","registerWarningCountHandler","componentWillUnmount","unregisterNotificationHandler","unregisterErrorCountHandler","unregisterWarningCountHandler","componentDidUpdate","isSwipeable","setEditMenuList","getCompactInstances","dynamicTabs","adminTab","singleton","instNum","match","_instance$adminTab$na","lang","READY_TO_USE","filter","str","substring","toUpperCase","toLowerCase","concat","a","b","getCompactSystemConfig","systemConfig","it","aa","bb","newTabsVisible","_systemConfig","getHeader","handleNavigation","isSecure","adminGuiConfig","lineHeight","src","alt","maxHeight","verticalAlign","Avatar","versionAdmin","onStateChange","ChevronLeftIcon","getNavigationItems","currentTab","_tabsInfo$tab$name","_tabsInfo$tab$name2","_this$badge","_this$badge2","menu","DragWrapper","Icon","newObj","ctrlKey","shiftKey","getHref","hostname","adminInstance","console","log","focus","SwipeableDrawer","anchor","onOpen","CustomDragLayer","List","onLogout","LogoutIcon","editable","CustomPopper","MaterialDrawer","onMouseEnter","onMouseLeave","contextType","withWidth","connecting","spinner","animation","path","strokeDasharray","strokeDashoffset","transformOrigin","viewBox","xmlns","fill","strokeWidth","strokeLinecap","cx","cy","r","secondary","form","input","grow","WizardPasswordTab","focusRef","password","passwordRepeat","errorPassword","errorPasswordRepeat","createRef","_this$focusRef$curren","noValidate","autoComplete","direction","TextField","readOnly","helperText","htmlInput","onKeyDown","document","getElementById","checkPassword","onDone","Toolbar","IconCheck","de","ru","fr","pt","nl","es","uk","gridDiv","textAlign","languageSelect","licenseDiv","statAccept","statAcceptDiv","statAcceptNote","greenButton","licenseTextDiv","licenseText","WizardLicenseTab","statisticsAccepted","notAgree","diagData","requesting","showStatisticsDialog","readStatistics","getCurrentInstance","settings","getObject","getDiagData","renderStatisticsDialog","Editor","editValueMode","Close","renderNotAgree","DialogContentText","renderLicenseText","lines","LicenseTexts","line","FormControl","InputLabel","IconWorld","Select","setLanguage","MenuItem","IconCancel","MyMapComponent","useMap","addMap","SETTINGS_WIDTH","mainGrid","mapGrid","controlItem","controlItemAddress","gridSettings","settingsGrid","CURRENCY","WizardSettingsTab","marker","cityTimer","latLongTimer","onMap","center","parseFloat","latitude","longitude","Marker","draggable","riseOnHover","addTo","bindPopup","on","dragend","evt","onMarkerDragend","_latlng","lat","lng","onChangePosition","changeMapPosition","onChangeAddress","city","address","country","addressToPosition","tempUnit","currency","firstDayOfWeek","zoom","positionReady","coords","toFixed","getBrowserCoordinates","navigator","geolocation","getCurrentPosition","noWait","flyTo","setLatLng","OpenStreetMapProvider","search","query","results","Autocomplete","freeSolo","options","inputValue","onInputChange","getOptionLabel","option","renderOption","renderInput","params","endAdornment","InputAdornment","Fab","GpsFixed","MapContainer","maxZoom","attributionControl","zoomControl","doubleClickZoom","scrollWheelZoom","dragging","easeLinearity","TileLayer","inputLine","WizardAuthSSLTab","auth","secure","FormGroup","FormHelperText","information","WizardPortForwarding","IconCloudPro","IconCloud","WizardAdaptersTab","TOOLBAR_HEIGHT","selectedAdapters","getRepository","repo","activeRepo","resolve","executeCommand","renderAdapterAccordion","titleLang","borderColor","borderWidth","borderStyle","gap","stopPropagation","extIcon","renderContent","repositoryReceived","IconNext","dialog","tabPanel","fullHeightWithoutToolbar","finishBackground","backgroundImage","WizardFinishImage","backgroundRepeat","backgroundPosition","welcomeBackground","WizardWelcomeImage","playIcon","logo","themeButton","float","finalText","finalLongLogo","WizardDialog","activeStep","namespace","native","renderWelcome","licenseConfirmed","PlayArrowIcon","renderLicense","language","renderPassword","pass","changePassword","renderSettings","assign","renderAuthentication","renderPortForwarding","renderAdapters","discovery","certPublic","certPrivate","certs","getCertificates","setObject","redirect","Router","doNavigate","renderFinish","LongLogo","fullScreen","ToggleThemeMenu","toggleTheme","Stepper","Step","StepLabel","BaseSystemSettingsDialog","formControl","selectEmpty","saving","getCounters","items","countries","elem","shrink","handleChangeCountry","displayEmpty","doChange","onChangeText","onChangeInput","onChangeCity","selectId","getSettings","confirm","confirmValue","newData","clone","ll","translate","allowText","autocomplete","histories","history","objectMap","dataAux","repositories","_repo","help","getSelect","multipleRepos","sm","xs","_evt","inputLabel","renderDialogConfirm","DialogConfirm","selectors","lg","md","siteName","table","buttonPanel","descriptionPanel","border","dragColumn","enableColumn","stableColumn","upgradePolicyColumn","buttonColumn","nameRow","checkboxError","fabButton","tooltip","repoToArray","repos","link","arrayToRepo","array","SortableHandle","DragHandleIcon","SortableList","SortableContainer","SortableItem","SortableElement","onAdd","onRestore","stable","beta","oldStable","json","time","oldBeta","newConfig","adapterAutoUpgrade","defaultPolicy","getUpdateDefaultRepo","newRepo","oldTitle","newTitle","findIndex","onSortEnd","oldIndex","newIndex","onValueChanged","onDelete","onChangeActiveRepo","showWarning","renderSortableItem","_this$props$repoInfo$","_this$props$dataAux$c","_this$props$dataAux$c2","errorName","trimStart","TableRow","className","TableCell","arr","_error","repoInfo","indeterminate","sysConfig","DeleteIcon","renderSortableList","Table","TableHead","TableBody","helperClass","useDragHandle","lockAxis","renderAutoUpgradePolicy","_this$props$dataAux$c3","_this$props$dataAux$c4","policy","activatedRepos","AUTO_UPGRADE_SETTINGS","AUTO_UPGRADE_OPTIONS_MAPPING","IsVisible","InfoBox","AddIcon","RestoreIcon","TableContainer","uuidGreen","uuidGrey","tableName","tableDate","tableUuid","tableValid","tableVersion","tableUsedIn","tableDiv","tableCommercial","licenseId","fontStyle","onLicensesChanged","licenses","uuid","requestLicenses","login","decrypt","updateLicenses","renderLicenses","stickyHeader","license","product","toLocaleDateString","validTill","usedBy","invoice","IconRefresh","tableContainer","littleRow","CertificatesDialog","certToArray","certificates","arrayToCert","certText","chClass","cert","detectType","rows","parts","Dropzone","noClick","getRootProps","getInputProps","acceptedFiles","fileRejections","onDragEnter","onDragLeave","onDrop","file","mm","errors","ee","join","reader","FileReader","onload","readAsText","paddingLeft","letsEncrypt","dangerouslySetInnerHTML","__html","email","domains","tableCell","paddingRight","ACLDialog","getTypes","getRights","rts","defaultNewAcl","permBits","bitGroup","bit","getTable","owner","checkboxes","Fragment","handleCheck","colSpan","ownerGroup","ownerType","elemNum","num","users","groups","objectRights","ii","inputProps","ace","config","set","note","blueGrey","sentData","StatisticsDialog","arguments","handleChangeType","handle","getTypesSelector","diag","Card","gutterBottom","SOME_PASSWORD","minHeight","dialogTitle","SystemSettingsDialog","originalCertificates","originalConfig","originalRepositories","originalLicenses","onChangeDiagType","currentHost","loading","confirmExit","systemCertificates","systemRepositories","systemLicenses","licenseManager","checkFeatureSupported","newState","_repoInfo","object","getUsers","getGroups","getAdapterInstances","getHistory","onSave","repoChanged","currentPassword","encrypt","expertMode","expertModeFunc","reload","MainSettingsDialog","RepositoriesDialog","LicensesDialog","SSLDialog","getDialogContent","tabsList","MyComponent","onChangedTab","idAux","ifRepoError","_data$native","changed","tabError","_e","reason","newTab","onTabChanged","edge","boxShadow","avatar","avatarImg","submit","ioBrokerLink","textTransform","progress","Login","formRef","inProcess","body","loginBackgroundColor","loginBackgroundImage","action","port","loginLink","motto","loginMotto","loginLogo","loginHideLogo","loginTitle","method","required","CircularProgress","align","Link","rel","pre","textBold","width100","doNotShow","setDoNotShow","IconExpert","BuildIcon","_sessionStorage","sessionStorage","silver","terminal","UpdateIcon","MemoryIcon","ImportExportIcon","PermDeviceInformationIcon","CancelPresentationIcon","CancelIcon","SettingsRemoteIcon","styleDiv","hidden","setValue","dark","_ref4","formatDate","LogsWorker","maxLogs","logs","newLogs","errorCountHandlers","warningCountHandlers","countErrors","countWarnings","warnings","isSafari","logTimeout","logSize","logHandler","_processLine","objLine","handler","isNew","getLogs","vendor","userAgent","registerLogHandler","setCurrentHost","enableCountErrors","isEnabled","enableCountWarnings","resetErrors","resetWarnings","lastKey","tt","getTime","from","parseColorMessage","original","unshift","shift","oldErrors","oldWarnings","_this$logs","logSizeStr","pop","clearLines","InstancesWorker","HostsWorker","aliveHandlers","notificationsHandlers","aliveStates","notificationPromises","notificationTimer","subscribeTs","aliveChangeHandler","endsWith","onNotificationHandler","host_","_getNotificationsFromHosts","registerAliveHandler","unregisterAliveHandler","unsubscribeState","hostId","promises","getCompactHosts","pResults","all","AdaptersWorker","repositoryHandlers","repoTimer","repoChangeHandler","getAdaptersResetCache","getInstalledResetCache","registerRepositoryHandler","unregisterRepositoryHandler","ObjectsWorker","doNotUnsubscribe","headerBlock","paperTable","custom","types","checkbox","select","comment","_setValueInObj","attr","setValueInObj","newInstance","setError","setSchema","schemaData","setSchemaData","_newInstance$comment","_newInstance$comment2","objSchema","objValue","add","Array","isArray","inputs","def","newLine","repeat","SettingsIcon","ConfigPanel","onCommandRunning","originalData","err","useStateLocal","defaultValue","headerBlockDisplayItem","activeBlock","pointer","installSuccess","installError","width200","wrapperSwitch","divSwitch","stepper","instanceIcon","instanceWrapper","boxHeight","headCells","numeric","disablePadding","EnhancedTableHead","numSelected","rowCount","onSelectAllClick","headCell","TableSortLabel","buildComment","extended","_discoveryData$native4","_discoveryData$native5","_discoveryData$native6","_discoveryData$native7","_discoveryData$native8","_discoveryData$native9","_discoveryData$native10","defaultLogLevel","step","setStep","listMethods","setListMethods","checkboxChecked","setCheckboxChecked","disableScanner","setDisableScanner","discoveryData","setDiscoveryData","resultList","listChecked","lastSelectionStr","lastSelection","fetchData","dataDiscovery","readOldData","aliveHosts","setAliveHosts","checkSelectHosts","setCheckSelectHosts","hostInstances","setHostInstances","aliveValue","devicesFound","setDevicesFound","devicesProgress","setDevicesProgress","instancesFound","setInstancesFound","scanRunning","setScanRunning","servicesProgress","setServicesProgress","setSelected","installProgress","setInstallProgress","currentInstall","setCurrentInstall","installStatus","setInstallStatus","cmdName","setCmdName","suggested","setSuggested","showAll","setShowAll","showLicenseDialog","setShowLicenseDialog","showInputsDialog","setShowInputsDialog","instancesInputsParams","setInstancesInputsParams","setLogs","finishInstall","setFinishInstall","selectLogsIndex","setSelectLogsIndex","handlerInstall","onSystemDiscoveryChanged","extendObject","checkLicenseAndInputs","objName","_discoveryData$native3","_obj$comment","instanceObj","newInstances","ob","_obj$comment2","licenseUrl","goToNextInstance","status","logsEl","inputsDialog","GenerateInputsModal","licenseDialog","LicenseDialog","licenseType","_obj$comment3","ThemeProvider","VisibilityIcon","alternativeLabel","lastScan","newCheckboxChecked","Switch","_discoveryData$native","_discoveryData$native2","newSelected","n","_el$comment","_el$comment2","ack","advice","_obj$comment4","_repository$obj$commo","_obj$comment5","handleClick","func","selectedIndex","slice","SelectWithIcon","_repository$el$replac","ReportProblemIcon","AssignmentTurnedInIcon","logsRead","showElement","logsSuccess","adapterId","logLevel","logsError","_ref5","ele","NavigateBeforeIcon","dataArray","SearchIcon","LibraryAddIcon","NavigateNextIcon","Adapters","Instances","Intro","Logs","Files","Objects","Users","Enums","CustomTab","Hosts","EasyMode","decodeURIComponent","appBar","sharp","leavingScreen","logoWhite","appBarShift","appBarShiftEdit","appBarShiftCompact","DRAWER_COMPACT_WIDTH","menuButton","hide","_theme$mixins$toolbar","_theme$mixins$toolbar2","_theme$mixins$toolbar3","mt","contentMargin","contentMarginEdit","contentMarginCompact","contentShift","expertIcon","expertIconActive","baseSettingsButton","alert_info","alert_error","alert_success","errorCmd","wrapperButtons","userBadge","userIcon","userText","userBackground","wrapperName","expertBadge","DEFAULT_GUI_SETTINGS_OBJECT","read","write","App","translations","EXPIRE_WARNING_THRESHOLD","refConfigIframe","refUser","refUserDiv","expireInSec","lastExecution","pingAuth","expireInSecInterval","toggleThemePossible","expireText","adaptersWorker","objectsWorker","guiSettings","localStorageTimer","languageSet","newsInstance","localStorageGetItem","localStorageSetItem","localStorageRemoveItem","localStorageSave","prototype","hasOwnProperty","call","sessionStorageGetItem","sessionStorageSetItem","sessionStorageRemoveItem","toggleTranslation","noTranslation","updateHosts","events","elementFind","readRepoAndInstalledInfo","adaptersChangeHandler","onDiscoveryAlive","_name","discoveryAlive","getDiscoveryModal","DiscoveryDialog","handleNewNotifications","noNotifications","instanceDetails","showAdaptersWarning","showHostWarning","onNews","newsFeed","lastNewsId","_news","news","getUuid","info","getHostInfo","objectsDbType","objectsType","noObjects","checkNews","checkMessages","adapters","nodeVersion","npmVersion","NPM","os","showNews","stack","showAlert","logsWorkerChanged","_this$logsWorker","onHashChanged","getLocation","setCurrentTabTitle","currentThemeName","newThemeName","createTheme","getThemeType","_this$refConfigIframe","_this$refConfigIframe2","contentWindow","postMessage","subTab","param","allStored","dataNotStoredDialog","dataNotStoredTab","handleDrawerState","DrawerStates","setTitle","dictionary","enLocal","deLocal","ruLocal","ptLocal","nlLocal","frLocal","itLocal","esLocal","plLocal","ukLocal","zhCNLocal","setTranslations","userLanguage","vendorPrefix","getThemeName","drawerStateStr","drawerState","defineProperty","get","configNotSaved","configurable","currentHostName","ownHost","user","waitForRestart","stateChanged","alertType","alertMessage","baseSettingsOpened","unsavedDataInDialog","systemSettingsOpened","cmdDialog","commandHost","commandRunning","wizard","readTimeoutMs","SlowConnectionWarningDialogClass","getReadTimeoutMs","showSlowConnectionWarning","expireWarningMode","forceUpdateAdapters","cloudNotConnected","cloudReconnect","showRedirect","redirectCountDown","triggerAdapterUpdate","updating","notificationsDialog","getDerivedStateFromError","hasGlobalError","componentDidCatch","setUnsavedData","hasUnsavedData","mustInvertBackground","invertedColor","getGUISettings","_state","removeItem","enableGuiSettings","enabled","ownSettings","addEventListener","Connection","admin5only","getPort","autoSubscribes","autoSubscribeLog","onProgress","PROGRESS","CONNECTING","READY","getVersion","versionInfo","closeCmdDialog","_adminObj$native","adminObj","setInterval","onReady","_this$socket$systemCo","_adminObj$native2","_this$socket$systemCo2","isStrict","getIsEasyModeStrict","getEasyMode","strictEasyMode","easyModeConfigs","configs","findCurrentHost","storedExpertMode","_userObj$native","getCurrentUser","userObj","getObjectNameFromObj","invertBackground","makePingAuth","findNewsInstance","errorStr","Error","_this$socket","_this$adaptersWorker","_this$adaptersWorker2","_this$hostsWorker","removeEventListener","clearInterval","itemHost","_itemHost$common","_newState$hosts$0$com","h","updateExpireIn","formatTime","innerHTML","getCurrentSession","adminAlive","renderNotificationsDialog","_this$state$notificat","_this$state$notificat2","NotificationsDialog","clearNotifications","renderHostWarningDialog","HostWarningDialog","renderNewsDialog","NewsAdminDialog","newsArr","onSetLastNewsId","renderSlowConnectionWarning","SlowConnectionWarningDialog","getCompactRepository","getCompactInstalled","getCompactAdapters","iv","Number","isNaN","getProtocol","Theme","getCurrentTab","small","opened","closed","Suspense","fallback","Connecting","triggerUpdate","adminHost","menuOpened","menuClosed","currentAdminVersion","onUpdating","menuPadding","configStored","inBackgroundCommand","onRegisterIframeRef","onUnregisterIframeRef","clearErrors","clearLogErrors","navigate","getCurrentDialog","getSystemSettingsDialog","handleAlertClose","alertMessageStr","logout","closeDataNotStoredDialog","confirmDataNotStored","_this$state$dataNotSt","_this$state$dataNotSt2","_this$state$dataNotSt3","renderWizardDialog","showRedirectDialog","_window$external","sidebar","opera","print","external","AddFavorite","addPanel","createElement","setAttribute","click","renderCommandDialog","renderLoggedUser","_this$state$user","UserIcon","renderAlertSnackbar","Snackbar","autoHideDuration","ok","cancel","isYes","renderExpertDialog","expertModeDialog","ExpertModeDialog","_this$refConfigIframe3","_this$refConfigIframe4","renderShowGuiSettings","showGuiSettings","Menu","renderToolbar","expertModePermanent","performedStyle","sumNotification","MenuIcon","disableRipple","max","NotificationsIcon","invisible","_this$refConfigIframe5","_this$refConfigIframe6","_this$refConfigIframe7","_this$refConfigIframe8","expert","SyncIcon","SyncIconDisabled","HostSelectors","hostName","PictureInPictureAltIcon","innerWidth","Grid","renderSampleError","renderEasyMode","_this$state$systemCon","_this$state$systemCon2","StyledEngineProvider","injectFirst","elevation","DndProvider","backend","TouchBackend","HTML5Backend","logoutTitle","square","LoaderPT","LoaderMV","LoaderVendor","Loader","versionChanged","ignoreErrors","disableDataReporting","onerror","source","lineno","colno","errText","onunhandledrejection","Sentry","dsn","release","integrations","beforeSend","createRoot","LocalizationProvider","dateAdapter","AdapterDateFns","logNoSpacing","red","blue","logRef","regExp","init","moreChecked","stopped","RegExp","pattern","_this$logRef$current","scrollIntoView","registerCmdStdoutHandler","cmdStdoutHandler","bind","registerCmdStderrHandler","cmdStderrHandler","registerCmdExitHandler","cmdExitHandler","activeCmdId","floor","random","cmdExec","upload","gotAdmin","gotWww","exitCode","_adapter","_obj$common","_obj$common$adminUI","adminUI","colorize","maxLength","part","getLog","AceEditor","showPrintMargin","showGutter","highlightActiveLine","setOptions","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","showLineNumbers","tabSize","editorProps","$blockScrolling","imgDiv","img","notAlive","selector","aliveHost","onHostsObjectChange","_event$obj$common","_event$obj$common3","_event$obj$common5","_event$obj$common2","_event$obj$common4","_event$obj$common6","_event$obj$common7","_event$obj$common8","_event$obj$common9","hardware","networkInterfaces","_obj$common2","_obj$common3","_selectedHostObj","_selectedHostObj$comm","_selectedHostObj2","_selectedHostObj2$com","_selectedHostObj3","_selectedHostObj3$com","_selectedHostObj4","_selectedHostObj4$com","_selectedHostObj5","_selectedHostObj5$com","selectedHostObj","keepMounted","getAttr","header1","pr","pb","header2","setText","setLoading","scrolled","setScrolled","preRef","divRef","installTimer","fetch","txt","installOnscroll","_divRef$current","divMarkdown","querySelector","scrollHeight","clientHeight","onscroll","div","_scrolled","scrollTop","_preRef","_divMarkdown","Markdown","components","h1","h1Props","h2","h2Props","onScroll","IconArrowDownward","IconClose","blockInfo","checkActive","checkConditions","condition","trim","vers","semver","vers1","vers2","lastMessageId","context","messagesToShow","today","showIt","conditions","v","eval","class","created","linkTitle","_newsArr$indexArr","_newsArr$indexArr2","setId","last","setLast","indexArr","setIndexArr","newId","frame","WorldIcon","buttonLabel","mobile","readTimeoutSec","MOBILE_WIDTH","AdminConnection","isCloud","saveReadTimeoutMs","min","TimeIcon","STYLES","deepClone","formatRam","bytes","GB","MB","isTouchDevice","maxTouchPoints","msMaxTouchPoints","formatSpeed","mhz","formatBytes","abs","units","u","getFileExtension","fileName","lastIndexOf","hex","bw","g","finalR","finalG","finalB","padStart","formatSeconds","seconds","days","minutesRes","secondsRes","hoursRes","hours","minutes","materializeTab","jsonCustom","supportCustoms","noConfig","jsonConfig","materialize","code","PASSWORD_SET","PASSWORD_ERROR_LENGTH","PASSWORD_ERROR_NOT_EQUAL","PASSWORD_ERROR_EMPTY","getDocsLinkForAdapter","SUPPORTED_DOC_LANGUAGES","oldVersion","newVersion","getText","word","MobileDialog","_resizeHandlerInstalled","_timerOnResize","__onResize","isMobile","getButtonTitle","moreMobileIcon","CONTROLLER_CHANGELOG_URL","none","patch","minor","major","ip2int","ip","reduce","ipInt","octet","getHostname","currentHostname","_objects","_objects$common","localIp","_obj$native","_obj$native$hardware","hostIp","networkInterface","internal","family","netmask","findNetworkAddressOfHost","_replaceLink","adapterInstance","placeholder","replaceLink","_urls","placeholders","protocolVal","_context$instances4","_context$instances4$n","ids","_context$instances2","_context$instances2$n","_link","_port","_context$instances3","_context$instances3$n","_context$instances","_context$instances$na","_instance$common$admi","_hrefs$","_instNum","hrefs","refIframe","registered","onMessage","origin","parameter","detachEvent","_this$refIframe","attachEvent","_this$refIframe2"],"sourceRoot":""}
|