{"version":3,"file":"assets/chunk.b7b9808296a9978e5ef9.js","mappings":"8MACA,SAAAA,E,SAAAA,uBAAA,83BAAAC,IAAA,CAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,GAAA,kB,eCiBA,MAAMC,EAAqBC,MAE3B,GAAAC,EAAAA,EAAAA,sBAAAC,EAAeH,E,mSCnBf,SAAAP,EAAAA,EAAAA,uBAAA,q9BAAAC,IAAA,CAAAU,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,GAAAC,EAAAA,GAAAC,EAAAA,EAAAC,EAAAA,GAAA,kB,2BCOuB,IAeFC,GAAkBC,GAGlCC,EAAAA,EAAAA,OAAM,4CAA2CC,GAMjDC,EAAAA,EAAAA,UAAS,eAAcC,EATb,cAAiCC,EAAAA,EAAuCC,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,sBAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,mBAAAE,EAAA,OAcnFF,EAAAA,EAAAA,GAAA,wBAAAG,EAAA,MALA,YACIC,GACA,OAAOC,EAAAA,EAAAA,OAAqBC,KAAKC,WACrC,GAQHN,GAAAO,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,kBAnBIC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAZ,GAAAM,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,eAAAjB,GAAA,CAAAmB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,YAAAf,GAAAqB,OAAAC,yBAAApB,EAAAa,UAAA,YAAAb,EAAAa,WAAAN,GAAAK,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,oBAiBPQ,EAAAA,SAAO,CAAAN,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBACW,CAAK,IAAAlB,IAnBWd,EAAAA,EAAAA,sBAAAC,EAAAQ,G,gDCtBvC,SAAAlB,EAAAA,EAAAA,uBAAA,mpFAAAC,IAAA,CAAA4C,EAAAA,EAAA/B,EAAAA,GAAAgC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAA7C,EAAAA,EAAAD,EAAAA,EAAA+C,EAAAA,EAAAC,EAAAA,KAAAC,EAAAA,GAAA,kB,sBCQsB,IAyBDC,GAAqBlC,GADzCmC,EAAAA,EAAAA,GAAS,CAAEC,KAAM,6BAA6BlC,GAM1CmC,EAAAA,EAAAA,IAAG,2BAA4B,6DAA4DC,GAG3FnC,EAAAA,EAAAA,UAAS,+BAA8BH,GAAAuC,EAT5C,cACmDlC,EAAAA,EAAqCC,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,uBAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,YAAAE,EAAA,OAAAF,EAAAA,EAAAA,GAAA,2BAAAG,EAAA,OAAAH,EAAAA,EAAAA,GAAA,uBAAAgC,EAAA,OAsBpFC,EAAAA,EAAAA,GAAA,gCAAAC,EAAAA,EAAAA,IAAA,MAAAC,QAAA,KAAAC,UAAA,YAOI,MAAMC,EAAc/B,KAAKgC,KAAKC,MAAMC,MAAMC,IAAOA,EAAEC,aAC/CL,UAEM/B,KAAKgC,KAAKK,yBAGpBC,EAAAA,EAAAA,GAAEtC,KAAKgC,KAAKC,OAAOM,QAAQ,aAAcR,EAC7C,KAT+B,CAAES,MAAM,GAAQ,0BAAF,OAnB7C,qBACIC,GACA,OAAOzC,KAAKgC,KAAKC,MAAMS,QAAQP,GAAMA,EAAEC,aAAYO,MACvD,CAEA,iBAAIC,GACA,MAAM,kBAAEH,GAAsBzC,KAC9B,OAA0B,IAAtByC,IAIGA,IAAsBzC,KAAKgC,KAAKC,MAAMU,QAAU,QAC3D,CAkBA,iBAAcE,GACV,MAAM,KAAEC,EAAI,oBAAEC,GAAwB/C,MAClC,oBAAEgD,GAAwBhD,KAAKgC,KAC/BiB,EAAgBjD,KAAKgC,KAAKC,MAAMS,QAAQP,GAAMA,EAAEC,aAAYc,KAAKf,GAAMA,EAAEgB,KACzEC,EAAWH,EAAcN,OACzBU,QAAcrD,KAAKgC,KAAKsB,OAAOL,GAG/BI,IAAUD,EAcVC,EAAQD,GACRL,EAAoBQ,SAChBT,EAAKU,GACDxD,KACAgD,EAAsB,qCAAuC,6BAC7D,CACII,SAAUA,EAAWC,KAnBjCN,EAAoBU,WAChBX,EAAKU,GACDxD,KACAgD,EAAsB,qCAAuC,6BAC7D,CACII,SAAUC,IAmB9B,CAEA,iBAAcK,GACV,MAAM,KAAEZ,EAAI,oBAAEC,GAAwB/C,KAClCiD,EAAgBjD,KAAKgC,KAAKC,MAAMS,QAAQP,GAAMA,EAAEC,aAChDgB,EAAWH,EAAcN,OAEvBgB,QAAc3D,KAAKgC,KAAK0B,YAAYT,EAAcC,KAAKf,GAAMA,EAAEgB,MACrE,IAAKQ,EAMD,YALAZ,EAAoBU,WAChBX,EAAKU,GAAGxD,KAAM,6BAA8B,CACxCoD,cAMZ,MAAM,OAAEQ,GAAWD,EACnB,GAAIC,EAAQ,KAAAC,EACRd,EAAoBQ,SAAkB,QAAVM,EAACD,EAAO,UAAE,IAAAC,OAAA,EAATA,EAAWC,QAExC,MAAMT,EAAQO,EAAOjB,OACjBU,IAAUD,GACVL,EAAoBgB,WAChBjB,EAAKU,GAAGxD,KAAM,6BAA8B,CACxCoD,SAAUA,EAAWC,IAIrC,CACJ,GACH1D,GAAAO,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,mBArGIC,EAAAA,SAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAZ,GAAAM,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,QACPC,EAAAA,SAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAX,GAAAK,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,uBACPC,EAAAA,SAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAkB,GAAAxB,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,mBAAAf,GAAA,CAAAiB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,qBAAAqB,GAAAf,OAAAC,yBAAAe,EAAAtB,UAAA,qBAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,eAmCP6D,EAAAA,QAAMvD,OAAAC,yBAAAe,EAAAtB,UAAA,eAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,eAmCN6D,EAAAA,QAAMvD,OAAAC,yBAAAe,EAAAtB,UAAA,eAAAsB,EAAAtB,WAjEiCb,EAiEjCmC,KAAAnC,IAzE+Bd,EAAAA,EAAAA,sBAAAC,EAAA2C,E,wXCjC1C,SAAArD,E,SAAAA,uBAAA,42JAAAC,IAAA,CAAA8C,EAAAA,EAAAmD,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAArD,EAAAA,EAAAsD,EAAAA,EAAAzD,EAAAA,EAAA/B,EAAAA,GAAAyF,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,GAAA,kB,mDC8BA,SAASC,EAELC,EACAC,EACAC,GACF,IAAAC,EACE,MAAM,gBAAEC,GAAoB/E,KACxBgF,EAAOL,EAAaM,iBACpBC,EAAwD,QAAvCJ,EAAGC,EAAgBI,4BAAoB,IAAAL,OAAA,EAApCA,EAAsCI,kBAE9D,OAAIF,IAASI,EAAAA,OAASF,EACX,CAAC,CAACG,GAAuB,eAAyC,MAAzBR,IAG7C,CACH,CAACS,EAAc,aAAcX,EAAaY,qBAAuBX,IAAuBC,GACxF,CAACW,EAAoB,qBAA4C,MAAtBZ,GAC3C,CAACS,GAAuB,eAAyC,MAAzBR,GAEhD,CAKO,MAAMS,EAAe,EACxBE,EAAqB,EACrBH,GAAwB,EAKfI,GAAU,IACVC,GAAU,KACVC,GAAe,CAAC,EAAG,EAAG,EAAG,EAAG,GAoBzC,IAKqBC,IAAqB1G,GADzCmC,EAAAA,EAAAA,GAAS,CAAEC,KAAM,6BAA6BlC,GAiE1CC,EAAAA,EAAAA,UAAS,uFAAsFmC,GAgB/FnC,EAAAA,EAAAA,UACG,wFACA,gCACHwG,GA4BAxG,EAAAA,EAAAA,UACG,sHACA,qBACA,yBACHyG,GAwBAzG,EAAAA,EAAAA,UAAS,mBAAkB0G,GAW3B1G,EAAAA,EAAAA,UAAS,mBAAkB2G,GAW3B3G,EAAAA,EAAAA,UAAS,+CAA8C4G,GAkBvD9G,EAAAA,EAAAA,OAAM,gDAA+C+G,GAQrD7G,EAAAA,EAAAA,UACG,oFACA,wBACA,0DACHH,GAAAuC,EAhML,cACmDlC,EAAAA,EAM/CC,WAAAA,CAAY2G,EAAgBnE,GACxBoE,MAAMD,EAAOnE,IAAMtC,EAAAA,EAAAA,GAAA,YAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,sBAAAE,EAAA,OAAAF,EAAAA,EAAAA,GAAA,aAAAG,EAAA,OAAAH,EAAAA,EAAAA,GAAA,uBAAAgC,EAAA,OAAAhC,EAAAA,EAAAA,GAAA,0BAAA2G,EAAA,OAAA3G,EAAAA,EAAAA,GAAA,6BAAA4G,EAAA,OAAA5G,EAAAA,EAAAA,GAAA,yCAAA6G,EAAA,MAEnB,MAAM,aAAE5B,GAAiB3E,KAAKgC,KAG9B,GAAI2C,EAAa6B,eAAgB,CAC7B,MAAMxB,EAAOL,EAAaM,iBAE1B,GAAI,CAACG,EAAAA,MAAOqB,EAAAA,oBAAqBC,EAAAA,WAAWC,SAAS3B,GASjD,OAPAhF,KAAK4G,wBAGLC,EAAAA,EAAAA,UAAS,eAAe,IAAM7G,KAAKgC,KAAK8E,uBAAuB9G,KAAK4E,2BAGpEiC,EAAAA,EAAAA,UAAS,eAAe,IAAM7G,KAAKgC,KAAK+E,0BAA0B/G,KAAK6E,wBAG/E,CAGIF,EAAaqC,eACbhH,KAAK4E,mBAAqB,IAAIqC,EAAAA,QAAejH,KAAM,CAC/CkH,UAAWvC,EAAaqC,eAAeE,UACvCC,QAASxC,EAAaqC,eAAeG,QACrCC,aAAczC,EAAaqC,eAAeI,eAI9CpH,KAAK4E,mBAAqB,KAI1BD,EAAa0C,kBACbrH,KAAK6E,sBAAwB,IAAIyC,EAAAA,QAAkBtH,KAAM,CACrDuH,cAAe5C,EAAa0C,kBAAkBE,cAC9CC,YAAa7C,EAAa0C,kBAAkBG,cAGhDxH,KAAK6E,sBAAwB,MAMjCgC,EAAAA,EAAAA,UAAS,eAAe,IAAM7G,KAAKgC,KAAK8E,uBAAuB9G,KAAK4E,uBAGpEiC,EAAAA,EAAAA,UAAS,eAAe,IAAM7G,KAAKgC,KAAK+E,0BAA0B/G,KAAK6E,wBAC3E,CAOA,gCACI4C,GACA,MAAO,OAACC,IACJ,MAAMC,QAAmBC,EAAAA,EAAAA,KACa,QADVC,EACxB7H,KAAK+E,gBAAgB+C,qBAAa,IAAAD,OAAA,EAAlCA,EAAoCE,oBACpC,eAGEC,QAAwBC,QAAQC,IAAIP,EAAUzE,KAAIwE,SAAoBS,KAC5E,OAAOH,EAAgBrF,OAAS,GAAKqF,EAAgB9F,MAAMiG,GAAaA,EAASC,iBACpF,EARM,EASX,CAKA,yCAIIC,GAAsE,IAAAC,EACtE,MAAMC,GAAgCX,EAAAA,EAAAA,KAC0B,QADvBU,GACrCV,EAAAA,EAAAA,KAAI5H,KAAKgC,KAAK2C,aAAc,wCAAgC,IAAA2D,EAAAA,EAAI,CAAC,EACjE,yCAGJ,OAAKC,EAIAvI,KAAK+E,gBAAgByD,aAQnBD,EAA8BrF,KAAIwE,UACrC,MAAMe,QAAeb,EAAAA,EAAAA,MAAIA,EAAAA,EAAAA,KAAIc,EAAiB,yBAA0B,UACxE,MAAO,GAAPC,OAAUD,EAAgBE,WAAU,MAAAD,OAAKF,EAAOI,YAAW,QAPpDN,EAA8BrF,KAAK4F,GAASA,EAAKF,aANjD,EAef,CAKA,mBAKIG,GACA,MAAM,aAAEpE,GAAiB3E,KAAKgC,KAS9B,OAP+B0C,EAAsCsE,KACjEhJ,KACA2E,EACA3E,KAAK4E,mBACL5E,KAAK6E,uBAGqB3B,KAC1B+F,IAAA,IAAE9F,EAAI+F,EAAKC,GAAQ,GAAiCF,EAAA,OAChD,IAAIG,EAAAA,EAAe,CACfC,MAAOrJ,KAAK8C,KAAKU,GAAGxD,KAAMkJ,GAC1BC,QACAG,MAAO,CAAEnG,OACX,GAEd,CAKA,2BACIoG,GACA,OAC4BC,MAAxBxJ,KAAK+I,iBACL/I,KAAK+I,gBAAgB7G,MAAM2E,GAAaA,EAASyC,MAAMnG,KAAOqC,GAEtE,CAKA,8BACIiE,GACA,OAC4BD,MAAxBxJ,KAAK+I,iBACL/I,KAAK+I,gBAAgB7G,MAAM2E,GAAaA,EAASyC,MAAMnG,KAAOkC,IAEtE,CAKA,8BACIqE,GACA,MAAM,2BAAEC,GAA+B3J,KAAKgC,KAAK4H,YACjD,GAAID,GAA8BA,EAA6B,EAC3D,OAAO3J,KAAK8C,KAAKU,GAAGxD,KAAM,cAAe,CACrC6J,QAASF,GAKrB,CAYAG,+BAAAA,GACI9J,KAAK+J,mCAAqC/J,KAAK+J,iCACnD,CAEA,0CAKIC,GAAyC,IAAAC,EAAAC,EAAAC,EACzC,OAC4F,QAAxFF,EAA0C,QAA1CC,EAAClK,KAAK+E,gBAAgBI,4BAAoB,IAAA+E,OAAA,EAAzCA,EAA2CE,oDAA4C,IAAAH,GAAAA,GAC5B,QADqCE,EAChGnK,KAAKgC,KAAK2C,aAAa0F,4CAAoC,IAAAF,GAAAA,GAC5DnK,KAAK6E,qBAEb,CAUAyF,qBAAAA,CAAsBC,GAA+D,IAAAC,EACjF,MAAMC,EAAeF,EAAcG,MAAM7D,GAAaA,EAASsC,QACzDhG,EAAKsH,SAAmB,QAAPD,EAAZC,EAAcnB,aAAK,IAAAkB,OAAA,EAAnBA,EAAqBrH,IAEhCwH,EAAAA,EAAAA,eAAc3K,KAAKgC,KAAK2C,aAAc,CAClCqC,eAAgB,KAChBK,kBAAmB,OAIvBrH,KAAK4E,mBAAqB,KAC1B5E,KAAKgC,KAAK8E,uBAAuB9G,KAAK4E,oBACtC5E,KAAK6E,sBAAwB,KAC7B7E,KAAKgC,KAAK+E,0BAA0B/G,KAAK6E,uBAErC1B,IAAOqC,GACPxF,KAAK4E,mBAAqB,IAAIqC,EAAAA,QAAejH,KAAM,CAC/CkH,UAAWzB,GACX0B,QAASzB,GACT0B,aAAczB,KAElB3F,KAAKgC,KAAK8E,uBAAuB9G,KAAK4E,qBAC/BzB,IAAOkC,KACdrF,KAAK4G,uBACL5G,KAAKgC,KAAK+E,0BAA0B/G,KAAK6E,uBACzC7E,KAAK+J,mCAAoC,EAEjD,CAKQa,uBAAAA,CAAuBC,GAAmE,IAAlE,UAAEC,EAAS,QAAEC,GAA6CF,EACtF,MAAMxD,EAAoBrH,KAAK6E,uBAC3B,cAAE0C,EAAa,YAAEC,GAAgBH,QAAAA,EAAqB,CAAC,EACvD2D,EAAU,CAAC,GAEXF,GAAevD,IAAkB0D,EAAAA,EAAAA,GAAQH,EAAWvD,KACpDyD,EAAQzD,cAAgBuD,IAGxBC,GAAavD,IAAgByD,EAAAA,EAAAA,GAAQF,EAASvD,KAC9CwD,EAAQxD,YAAcuD,GAGtBtK,OAAOyK,KAAKF,GAASrI,UACrBgI,EAAAA,EAAAA,eAAc3K,KAAK6E,sBAAuBmG,GAC1ChL,KAAKgC,KAAK+E,0BAA0B/G,KAAK6E,uBAEjD,CAMAsG,oBAAAA,CAAoBC,GAAsF,IAAAC,EAAAC,EAAAC,EAAA,IAArF,aAAEnE,EAAY,mBAAEoE,EAAkB,iBAAEC,GAAyCL,GAE1FI,KAA8C,QAA5BH,EAAKrL,KAAK4E,0BAAkB,IAAAyG,OAAA,EAAvBA,EAAyBnE,YAChDuE,KAA4C,QAA5BH,EAAKtL,KAAK4E,0BAAkB,IAAA0G,OAAA,EAAvBA,EAAyBnE,WAC9CC,aAAY,EAAZA,EAAczE,WAAkC,QAA5B4I,EAAKvL,KAAK4E,0BAAkB,IAAA2G,GAAc,QAAdA,EAAvBA,EAAyBnE,oBAAY,IAAAmE,OAAA,EAArCA,EAAuC5I,SAChD6G,MAAhBpC,GACApH,KAAK4E,mBAAmBwC,aAAalF,MAAK,CAACwJ,EAASC,IAAUvE,EAAauE,KAAWD,QAEtFf,EAAAA,EAAAA,eAAc3K,KAAK4E,mBAAoB,CACnCsC,UAAWsE,EACXrE,QAASsE,EACTrE,iBAGJpH,KAAKgC,KAAK8E,uBAAuB9G,KAAK4E,oBAE9C,CAOQgC,oBAAAA,GACJ,MACIgD,aAAa,qCAAEgC,EAAoC,mCAAEC,IACrD7L,KAAKgC,KAGT,IAAIuF,EAAgB,IAAIuE,KACpBtE,GAAcuE,EAAAA,EAAAA,GAAUxE,EAAe,GAG3C,GAAIqE,GAAwCC,EAAoC,CAC5E,MAAMG,GAAgB,IAAIF,MAAOG,SAAS,EAAG,EAAG,EAAG,GAC/CC,GAAmBC,EAAAA,EAAAA,IAAQ,IAAIL,MAAOG,SAAS,EAAG,EAAG,EAAG,GAAI,GAEhE1E,GAAgB6E,EAAAA,EAAAA,GAAWJ,EAAeJ,GAC1CpE,GAAc4E,EAAAA,EAAAA,GAAWF,EAAkBL,EAC/C,CAEA7L,KAAK6E,sBAAwB,IAAIyC,EAAAA,QAAkBtH,KAAM,CACrDuH,gBACAC,iBAEJmD,EAAAA,EAAAA,eAAc3K,KAAKgC,KAAK2C,aAAc,CAClCqC,eAAgB,MAExB,GACHrH,GAAAO,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,QAvTIC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAZ,GAAAM,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,kBACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAX,GAAAK,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,SACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAkB,GAAAxB,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,mBACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,gCAAAf,GAAAqB,OAAAC,yBAAAe,EAAAtB,UAAA,gCAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,yCAAAqB,GAAAf,OAAAC,yBAAAe,EAAAtB,UAAA,yCAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,mBAAA0F,GAAApF,OAAAC,yBAAAe,EAAAtB,UAAA,mBAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,2BAAA2F,GAAArF,OAAAC,yBAAAe,EAAAtB,UAAA,2BAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,8BAAA4F,GAAAtF,OAAAC,yBAAAe,EAAAtB,UAAA,8BAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,8BAAA6F,GAAAvF,OAAAC,yBAAAe,EAAAtB,UAAA,8BAAAsB,EAAAtB,WAAAkG,GAAAnG,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,sBAyKPQ,EAAAA,SAAO,CAAAN,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA8F,GAAApG,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,yBAGPQ,EAAAA,SAAO,CAAAN,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA+F,GAAArG,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,qCAAA8F,GAAA,CAAA5F,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBAI4B,CAAK,KAAAN,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,mCAExC6D,EAAAA,QAAMvD,OAAAC,yBAAAe,EAAAtB,UAAA,mCAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,0CAAA+F,GAAAzF,OAAAC,yBAAAe,EAAAtB,UAAA,0CAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,yBAyBN6D,EAAAA,QAAMvD,OAAAC,yBAAAe,EAAAtB,UAAA,yBAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,2BAiCN6D,EAAAA,QAAMvD,OAAAC,yBAAAe,EAAAtB,UAAA,2BAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,wBAsBN6D,EAAAA,QAAMvD,OAAAC,yBAAAe,EAAAtB,UAAA,wBAAAsB,EAAAtB,WAvENb,EAuEMmC,KAAAnC,IAtQ+Bd,EAAAA,EAAAA,sBAAAC,EAAAmH,G,sPCxF1C,SAAA7H,E,SAAAA,uBAAA,+yCAAAC,IAAA,CAAAkG,EAAAA,EAAAC,EAAAA,EAAAC,EAAAA,EAAAtD,EAAAA,EAAAuL,EAAAA,EAAAzN,EAAAA,EAAAqF,EAAAA,EAAAqI,EAAAA,EAAAC,EAAAA,EAAA3E,EAAAA,KAAA,kB,qCCyBA,SAAS4E,EAAY7H,EAAiC8H,IAClDC,EAAAA,EAAAA,KAAI/H,EAAc,WAAY8H,EAClC,CAEA,IAKqBE,GAAiBzN,GADrCmC,EAAAA,EAAAA,GAAS,CAAEC,KAAM,uCAAuClC,GA2BpDD,EAAAA,EAAAA,OAAM,iCAAgCqC,GAOtCnC,EAAAA,EAAAA,UAAS,qCAAoCwG,GAQ7CxG,EAAAA,EAAAA,UAAS,kDAAiDH,GAAAuC,EA1C/D,cAC+ClC,EAAAA,EAM3CC,WAAAA,CAAY2G,EAAgBnE,GACxBoE,MAAMD,EAAOnE,IAAMtC,EAAAA,EAAAA,GAAA,YAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,sBAAAE,EAAA,OAAAF,EAAAA,EAAAA,GAAA,2BAAAG,EAAA,OAAAH,EAAAA,EAAAA,GAAA,YAAAgC,EAAA,OAWvBC,EAAAA,EAAAA,GAAA,uBAGkB,KAElBjC,EAAAA,EAAAA,GAAA,sBAAA2G,EAAA,MAdI,MAAM,SAAEoG,EAAQ,aAAE9H,GAAiB3C,EAC/ByK,KAGAG,EAAAA,EAAAA,cAAa,cAAe5M,KAAMwM,EAAa7H,EAAc8H,GAC7DzM,KAAK6M,gBAAkBJ,EAE/B,CAiBA,eACIK,GACA,OAAQ9M,KAAKgC,KAAK4H,YAAYmD,gBAClC,CAKA,uBACIC,GACA,MAAM,aAAErI,EAAY,SAAEsI,GAAajN,KAAKgC,KACxC,OAAK2C,IAAgBiD,EAAAA,EAAAA,KAAIjD,EAAc,eAC1BsI,IAGJA,IAAatI,EAAauI,iBACvC,CAQQC,yBAAAA,GACJ,OAAInN,KAAKoN,eACEpN,KAAKqN,yBAGTrN,KAAKsN,mBAChB,CAgBQC,cAAAA,CAAed,GACnB,MAAM,aAAE9H,GAAiB3E,KAAKgC,KAI9B2C,EAAaf,OAAO4J,OAAO,aAG3Bd,EAAAA,EAAAA,KAAI/H,EAAc,WAAY8H,EAClC,CAKA,uBAAca,GACV,MAAM,aAAE3I,GAAiB3E,KAAKgC,KAC9B,IAAIyL,EAAU9I,EAAa8H,SAE3B,IACIgB,QAAgBzN,KAAK0N,KAAKC,mBAAkB,sDAAAhF,OACchE,EAAaxB,IAE3E,CAAE,MAAOQ,GACL3D,KAAK+C,oBAAoBQ,SAASI,EAAMC,OAAO,GAAGE,OACtD,CAEA,OAAO2J,CACX,CAMA,4BAAcJ,GACV,MAAM,aAAE1I,GAAiB3E,KAAKgC,KAC9B,UACUhC,KAAK0N,KAAKE,WAAW,+BAADjF,OACShE,EAAaxB,GAAE,gCAC9CqG,EACA,KACA,QAEJxJ,KAAK+C,oBAAoBU,WAAWzD,KAAK8C,KAAK+K,EAAE,4CAChDlJ,EAAamJ,SACb9N,KAAK+N,eAAeC,2BACxB,CAAE,MAAOrK,GAEL,OADA3D,KAAK+C,oBAAoBQ,SAASI,EAAMC,OAAO,GAAGE,QAC3CmE,QAAQgG,QACnB,CAEA,OAAOtJ,EAAa8H,QACxB,GAGH9M,GAAAO,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,QApIIC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAZ,GAAAM,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,kBACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAX,GAAAK,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,uBACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAkB,GAAAxB,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,QACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA6F,GAAAnG,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,kBAAAf,GAAA,CAAAiB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,eAAAqB,GAAAf,OAAAC,yBAAAe,EAAAtB,UAAA,eAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,uBAAA0F,GAAApF,OAAAC,yBAAAe,EAAAtB,UAAA,uBAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,6BAqDP6D,EAAAA,QAAMvD,OAAAC,yBAAAe,EAAAtB,UAAA,6BAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,kBAsBN6D,EAAAA,QAAMvD,OAAAC,yBAAAe,EAAAtB,UAAA,kBAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,qBAcN6D,EAAAA,QAAMvD,OAAAC,yBAAAe,EAAAtB,UAAA,qBAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,0BAmBN6D,EAAAA,QAAMvD,OAAAC,yBAAAe,EAAAtB,UAAA,0BAAAsB,EAAAtB,WAvEoDb,EAuEpDmC,KAAAnC,IAhH2Bd,EAAAA,EAAAA,sBAAAC,EAAAkO,E,uIClCtC,SAAA5O,E,SAAAA,uBAAA,2sDAAAC,IAAA,CAAAkQ,EAAAA,EAAAtN,EAAAA,EAAAsD,EAAAA,EAAAoI,EAAAA,EAAAzN,EAAAA,GAAAC,EAAAA,GAAAZ,EAAAA,GAAA,kB,eCuBA,MAAMiQ,EAA2B5P,MACjC,GAAAC,EAAAA,EAAAA,sBAAAC,EAAe0P,E,4QCxBf,SAAApQ,EAAAA,EAAAA,uBAAA,kqDAAAC,IAAA,CAAAoQ,EAAAA,EAAAlQ,EAAAA,EAAA+F,EAAAA,EAAAoK,EAAAA,MAAAC,EAAAA,EAAAxP,EAAAA,GAAAyP,EAAAA,EAAAzN,EAAAA,EAAApC,EAAAA,EAAAyC,EAAAA,EAAAtC,EAAAA,IAAA,kB,mCCmBA,IAIqB2P,GAAuBtP,GAD3CmC,EAAAA,EAAAA,GAAS,CAAEC,KAAM,sCAAsClC,GAUnDC,EAAAA,EAAAA,UAAS,uEAAsEmC,GAa/EnC,EAAAA,EAAAA,UAAS,oBAAmBwG,GAW5BxG,EAAAA,EAAAA,UAAS,mBAAoB,6DAA4DH,GAAAuC,EAlC9F,cACqDlC,EAAAA,EAAsCC,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,YAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,2BAAAE,EAAA,OAAAF,EAAAA,EAAAA,GAAA,YAAAG,EAAA,OAAAH,EAAAA,EAAAA,GAAA,uBAAAgC,EAAA,MASvF,oBACI+M,GACA,MAAO,WACH,MAAM9J,QAAqB3E,KAAKgC,KAAK0M,MAAM/J,aACvCgK,QAAsChK,EAAagK,8BAEvD,aAD0B1G,QAAQC,IAAIyG,EAA8BC,cAEvE,EALM,EAMX,CAKA,uBACIC,GACA,MAAO,iBACyB7O,KAAKyO,kBACZ9L,OAAS,EAF3B,EAIX,CAKA,yBACImM,GACA,MAAO,OAACpH,IACJ,MAAMK,QAA8D,QAAxCF,EAAM7H,KAAK+E,gBAAgB+C,qBAAa,IAAAD,OAAA,EAAlCA,EAAoCE,qBAClEgH,QAAwBhH,aAAmB,EAAnBA,EAAqBiH,SAC7CC,EAAcF,aAAe,EAAfA,EAAiB7L,KAAKgM,GAAMA,EAAE/L,KAEhD,aAD0BnD,KAAKyO,kBACV/L,QAAQwM,GAAMD,aAAW,EAAXA,EAAatI,SAASuI,EAAE/L,KAC9D,EANM,EAOX,CAMA,2BACMgM,CAAsBH,GACxB,IAAI,IAAAI,EACA,MAAMzK,QAAqB3E,KAAKgC,KAAK0M,MAAM/J,aACvCgK,QAAsChK,EAAagK,8BAEhD,QAAPS,EAAAJ,SAAO,IAAAI,IAAPJ,QAAkBhP,KAAK8O,6BAEjB9O,KAAK0N,KAAKE,WAAW,+CAADjF,OACyBhE,EAAaxB,SAC5DqG,EACA,CACI6F,QAASL,EAAQ9L,KAAKgM,GAAMA,EAAEI,UAElC,cAIEX,EAA8Bb,eAC9BnJ,EAAamJ,QACvB,CAAE,MAAOnK,GACL3D,KAAK+C,oBAAoBQ,SAASI,EAAMC,OAAO,GAAGE,OACtD,CACJ,GACHnE,GAAAO,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,QAvEIC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAZ,GAAAM,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,uBACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAX,GAAAK,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,QACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAkB,GAAAxB,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,mBACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,oBAAAf,GAAAqB,OAAAC,yBAAAe,EAAAtB,UAAA,oBAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,uBAAAqB,GAAAf,OAAAC,yBAAAe,EAAAtB,UAAA,uBAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,yBAAA0F,GAAApF,OAAAC,yBAAAe,EAAAtB,UAAA,yBAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,yBA4CP6D,EAAAA,QAAMvD,OAAAC,yBAAAe,EAAAtB,UAAA,yBAAAsB,EAAAtB,WAfmFb,EAenFmC,KAAAnC,IAhDiCd,EAAAA,EAAAA,sBAAAC,EAAA+P,GCvB5C,SAAAzQ,EAAAA,EAAAA,uBAAA,s+BAAAC,IAAA,CAAAoQ,EAAAA,EAAAlQ,EAAAA,EAAAqQ,EAAAA,EAAA7P,EAAAA,EAAA6Q,EAAAA,GAAA,kB,UCcA,IAGqBC,GAA4BtQ,GAM5CG,EAAAA,EAAAA,UACG,gGACA,2DACA,wEACHC,EAVU,cAA2CC,EAAAA,EAA4CC,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,uBAAAC,EAAA,MAMlG,yBAKI8P,GACA,MAAO,OAAC/H,IACJ,MAAM/C,QAAqB3E,KAAKgC,KAAK0M,MAAMgB,KAAK/K,aAC5CoD,QAA8D,QAAxCF,EAAM7H,KAAK+E,gBAAgB+C,qBAAa,IAAAD,OAAA,EAAlCA,EAAoCE,qBAChE4H,QAA2B5H,aAAmB,EAAnBA,EAAqB4H,qBAC/ChB,EAA+BiB,SAAqC3H,QAAQC,IAAI,CAC7EvD,EAAagK,8BACbhK,EAAaiL,+BAEhBC,EAAmBC,SAAwB7H,QAAQC,IAAI,CACpDyG,EAA8BkB,kBAC9BlB,EAA8BmB,iBAElCC,QAAkC9H,QAAQC,IAAI2H,GAC9CG,QAA+B/H,QAAQC,IAAI4H,GAC3CG,EAAsBF,EAA0B7M,KAAKgM,GAAMA,EAAE/L,KAC7D+M,EAAmBF,EAAuB9M,KAAKgM,GAAMA,EAAE/L,KAU3D,OAPAyM,EAA4BO,SAASjB,IAC5Be,EAAoBtJ,SAASuI,EAAE/L,KAChC4M,EAA0BK,KAAKlB,EACnC,IAIGa,EACFrN,QAAQwM,GAAMS,aAAkB,EAAlBA,EAAoBhJ,SAASuI,EAAE/L,MAC7CD,KAAI+F,IAAA,IAAC,GAAE9F,EAAE,YAAE0F,GAAaI,EAAA,MAAM,CAC3BJ,cACAwH,UAAWH,EAAiBvJ,SAASxD,GACxC,IACAmN,MAAK,CAACC,EAAGC,IAAMD,EAAE1H,YAAY4H,cAAcD,EAAE3H,cACrD,EAhCM,EAiCX,GACHlJ,GAAAO,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,mBA7CIC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,yBAAAjB,GAAAuB,OAAAC,yBAAApB,EAAAa,UAAA,yBAAAb,EAAAa,WAAAb,IADqCd,EAAAA,EAAAA,sBAAAC,EAAA+Q,G,uGCjBjD,SAAAzR,EAAAA,EAAAA,uBAAA,uyKAAAC,IAAA,CAAA0S,EAAAA,EAAArS,EAAAA,EAAA4F,EAAAA,EAAA0M,EAAAA,EAAAjS,EAAAA,EAAAG,EAAAA,GAAAX,EAAAA,EAAAgG,EAAAA,EAAA0M,EAAAA,EAAArB,EAAAA,EAAAzO,EAAAA,EAAA+P,EAAAA,EAAA9P,EAAAA,EAAA+P,EAAAA,GAAA,kB,6ECcA,IAaqBC,IAAiB7R,GADrCmC,EAAAA,EAAAA,GAAS,CAAEC,KAAM,yBAAyBlC,GAmEtCD,EAAAA,EAAAA,OAAM,oCAAmCqC,IAQzCwP,EAAAA,EAAAA,OAAM,aAAcC,EAAAA,QAAOpL,IAQ3BmL,EAAAA,EAAAA,OAAM,aAAcE,EAAAA,SAAQpL,IAQ5BzG,EAAAA,EAAAA,UAAS,mBAAoB,iBAAgB0G,IAY7C1G,EAAAA,EAAAA,UAAS,0BAA2B,wBAAuB2G,IAU3D3G,EAAAA,EAAAA,UAAS,qCAAoC4G,IAW7C5G,EAAAA,EAAAA,UAAS,gBAAiB,oCAAmC6G,IAwB7D7G,EAAAA,EAAAA,UAAS,cAAa8R,IAiBtB9R,EAAAA,EAAAA,UAAS,iBAAkB,wBAAuB+R,IAWlD/R,EAAAA,EAAAA,UAAS,oBAAqB,oCAAmCgS,IAwBjEhS,EAAAA,EAAAA,UAAS,oBAAqB,uDAAsDH,GAAAuC,GAxMzF,cAC+C6P,EAAAA,EAAa9R,WAAAA,GAAA,SAAAC,YAAAkC,EAAAA,EAAAA,GAAA,kBAC3C,oCAAiCjC,EAAAA,EAAAA,GAAA,YAAAC,GAAA,OAAAD,EAAAA,EAAAA,GAAA,sBAAAE,GAAA,OAAAF,EAAAA,EAAAA,GAAA,2BAAAG,GAAA,OAAAH,EAAAA,EAAAA,GAAA,cAAAgC,GAAA,OAAAhC,EAAAA,EAAAA,GAAA,YAAA2G,GAAA,OAAA3G,EAAAA,EAAAA,GAAA,aAAA4G,GAAA,OAW9C3E,EAAAA,EAAAA,GAAA,uBAKiB,IAEjBjC,EAAAA,EAAAA,GAAA,uBAAA6G,GAAA,OASA5E,EAAAA,EAAAA,GAAA,sBAKgB,IAEhBA,EAAAA,EAAAA,GAAA,yBAKmB,IAEnBA,EAAAA,EAAAA,GAAA,qBAKW6H,IAEX9J,EAAAA,EAAAA,GAAA,4BAAA6R,GAAA,OAYA7R,EAAAA,EAAAA,GAAA,kBAAA8R,GAAA,OAQA9R,EAAAA,EAAAA,GAAA,sBAAA+R,GAAA,OAQA/R,EAAAA,EAAAA,GAAA,uBAAAgS,GAAA,MAaA,iBACIC,GACA,MAAM,iBAAE5E,EAAgB,cAAE6E,GAAkB5R,KAE5C,OAAO+M,IAAqB6E,CAChC,CAOA,kBACIC,GACA,OAAO7R,KAAK8R,0BAA4B9R,KAAK+R,oBACjD,CAOA,mBACIC,GAAkB,IAAAC,EAClB,MAAMC,EAAsB,QAAZD,EAAGjS,KAAK0P,YAAI,IAAAuC,OAAA,EAATA,EAAWrK,IAAI,gCAClC,MAAsB,OAAfsK,EAAsBlS,KAAK8C,KAAK+K,EAAE,kBAAoBqE,QAAc1I,CAC/E,CAOA,kBACI2I,GAAiB,IAAAC,EACjB,IAAIC,EAAkB,QAAZD,EAAGpS,KAAK0P,YAAI,IAAA0C,OAAA,EAATA,EAAWxK,IAAI,+BAG5B,IAAI5H,KAAK2R,cAIT,OAAQU,GACJ,KAAKC,EAAAA,WACL,KAAKrB,EAAAA,OACD,MAAO,CAAEsB,KAAM,QAASC,MAAOxS,KAAK8C,KAAK+K,EAAE,kBAC/C,KAAKqD,EAAAA,QACD,MAAO,CAAEqB,KAAM,OAAQC,MAAOxS,KAAK8C,KAAK+K,EAAE,4BAC9C,QACI,OAEZ,CAMA,iBACI4E,GACA,OAAQzS,KAAK0S,YACT,KAAKxB,EAAAA,QACD,MAAO,OACX,KAAKD,EAAAA,OACD,MAAO,QACX,QACI,MAAO,kBAEnB,CAOA,qBACI0B,GACA,MAAM,KAAEjD,GAAS1P,KACjB,OAAOA,KAAK4S,gBAAkBlD,GAAQA,EAAKmD,eAC/C,CAOA,cACIC,GACA,OAAK9S,KAAK2S,kBAIH,OAACI,EAAAC,KACJ,MAAM7J,EAAoC,QAA/B4J,QAAmB,QAAfC,EAAMhT,KAAK0P,YAAI,IAAAsD,OAAA,EAATA,EAAWF,mBAAU,IAAAC,OAAA,EAA5BA,EAA+BE,iBAC7C,MAAO,CACHC,KAAM,CACF,CAACC,EAAAA,gBAAiB,cAClB,CAACC,EAAAA,sBAAuB,iBACxB,CAACC,EAAAA,kBAAmB,kBACtBlK,GACFmK,KAAMtT,KAAK8C,KAAKU,GAAGxD,KAAM,qBAEhC,EAVM,GAHI,IAcf,CAOA,mBACIuT,GACA,OAAKvT,KAAK2S,kBAKH,OAACjL,IACJ,MAAMoL,QAA4B,QAAfU,EAAMxT,KAAK0P,YAAI,IAAA8D,OAAA,EAATA,EAAWV,YAChCzP,EAAQyP,aAAU,EAAVA,EAAYW,cAAc9Q,OAGtC,OAAIU,EAAQ,IAAKyP,aAAU,EAAVA,EAAYG,oBAAqBI,EAAAA,iBAEvC,MAIJK,EAAAA,EAAAA,UAAS1T,KAAK8C,KAAKU,GAAGxD,KAAM,gBAAiB,CAAEqD,UACzD,EAZM,GAHI,IAgBf,CAKAsQ,gBAAAA,GACI,MAAM,aAAEhP,GAAiB3E,KAAK0P,KAC9B1P,KAAK4T,OAAOC,UAAUC,EAAoB,CAAEnP,gBAChD,CAQA,iBAAMjB,GACF,MAAMiB,QAAqB3E,KAAK0P,KAAK/K,aAErC,IASI,aARM3E,KAAK0N,KAAKE,WAAW,+CAADjF,OACyBhE,EAAaxB,IAC5D,KACA,KACA,cAGEwB,EAAamJ,UACZ,CACX,CAAE,MAAOnK,GAEL,OADA3D,KAAK+C,oBAAoBQ,SAASI,EAAMC,OAAO,GAAGE,SAC3C,CACX,CACJ,CAUAiQ,QAAAA,CAASrE,GACAA,GAOD1P,KAAKoN,gBACLsC,EAAK/K,aAAamJ,SAGtB9N,KAAK+N,eAAeiG,wBAChBtE,EAAKuE,gBAAkBjU,KAAKkU,SAASC,SAAWnU,KAAKkU,SAASE,qBAC9D1E,EAAKvM,KAZLnD,KAAK+C,oBAAoBQ,SAASvD,KAAK8C,KAAKU,GAAGxD,KAAM,iBAc7D,CAQAqU,WAAAA,GACQrU,KAAKsU,iBACLtU,KAAK+T,SAAS/T,KAAK0P,KAE3B,CAMA6E,oBAAAA,GACI,MAAM,KAAE7E,GAAS1P,KACjBA,KAAK4T,OAAOC,UAAUW,EAAyB,CAAE9E,QACrD,CAMA+E,kBAAAA,GACI,IAAIzU,KAAKwI,aAKT,OAAOxI,KAAK0D,cAJR1D,KAAK2T,kBAKb,CAQAe,eAAAA,CAAgBC,GACZA,EAAID,iBACR,GACH/U,IAAAO,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,QAhUIC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAZ,IAAAM,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,kBACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAX,IAAAK,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,uBACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAkB,IAAAxB,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,UACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA6F,IAAAnG,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,QACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA8F,IAAApG,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,SACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA+F,IAAArG,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,mBAiBPQ,EAAAA,SAAO,CAAAN,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBACU,CAAI,IAAA+Q,IAAArR,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,wBA4BrBQ,EAAAA,SAAO,CAAAN,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,kBACe,CAAK,IAAAgR,IAAAtR,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,cAAAf,GAAA,CAAAiB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAiR,IAAAvR,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,kBAAAqB,IAAA,CAAAnB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAkR,IAAAxR,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,mBAAA0F,IAAA,CAAAxF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,iBAAA2F,IAAArF,OAAAC,yBAAAe,GAAAtB,UAAA,iBAAAsB,GAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,kBAAA4F,IAAAtF,OAAAC,yBAAAe,GAAAtB,UAAA,kBAAAsB,GAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,mBAAA6F,IAAAvF,OAAAC,yBAAAe,GAAAtB,UAAA,mBAAAsB,GAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,kBAAA8F,IAAAxF,OAAAC,yBAAAe,GAAAtB,UAAA,kBAAAsB,GAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,iBAAA+F,IAAAzF,OAAAC,yBAAAe,GAAAtB,UAAA,iBAAAsB,GAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,qBAAAgR,IAAA1Q,OAAAC,yBAAAe,GAAAtB,UAAA,qBAAAsB,GAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,cAAAiR,IAAA3Q,OAAAC,yBAAAe,GAAAtB,UAAA,cAAAsB,GAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,mBAAAkR,IAAA5Q,OAAAC,yBAAAe,GAAAtB,UAAA,mBAAAsB,GAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,YA8M3B6D,EAAAA,QAAMvD,OAAAC,yBAAAe,GAAAtB,UAAA,YAAAsB,GAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,eAwBN6D,EAAAA,QAAMvD,OAAAC,yBAAAe,GAAAtB,UAAA,eAAAsB,GAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,wBAUN6D,EAAAA,QAAMvD,OAAAC,yBAAAe,GAAAtB,UAAA,wBAAAsB,GAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,sBASN6D,EAAAA,QAAMvD,OAAAC,yBAAAe,GAAAtB,UAAA,sBAAAsB,GAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,GAAAtB,UAAA,mBAeN6D,EAAAA,QAAMvD,OAAAC,yBAAAe,GAAAtB,UAAA,mBAAAsB,GAAAtB,WAxH8Eb,GAwH9EmC,MAAAnC,KA/T2Bd,EAAAA,EAAAA,sBAAAC,EAAAsS,G,oJC3BtC,SAAAhT,E,SAAAA,uBAAA,stBAAAC,IAAA,CAAAiG,EAAAA,EAAApF,EAAAA,GAAAyF,EAAAA,GAAA,kB,+CCuBA,IAKqBsQ,GAA8B1V,GADlDmC,EAAAA,EAAAA,GAAS,CAAEC,KAAM,wBAAwBlC,GAYrCD,EAAAA,EAAAA,OAAM,aAAYqC,GAQlBrC,EAAAA,EAAAA,OAAM,sCAAqC0G,GAM3CxG,EAAAA,EAAAA,UAAS,kDAAmD,qBAAoByG,GAehFzG,EAAAA,EAAAA,UAAS,oBAAqB,oCAAmC0G,GAqBjE1G,EAAAA,EAAAA,UAAS,oDAAmDH,GAAAuC,EA9DjE,cAC4DlC,EAAAA,EAAqCC,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,sBAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,uBAAAE,EAAA,OAAAF,EAAAA,EAAAA,GAAA,aAAAG,EAAA,OAAAH,EAAAA,EAAAA,GAAA,cAAAgC,EAAA,OAAAhC,EAAAA,EAAAA,GAAA,2BAAA2G,EAAA,OAAA3G,EAAAA,EAAAA,GAAA,YAAA4G,EAAA,OAQ7F5G,EAAAA,EAAAA,GAAA,YAAA6G,EAAA,OAMA7G,EAAAA,EAAAA,GAAA,gCAAA6R,EAAA,MAWA,0BACIsD,GAA8C,IAAA5C,EAC9C,MAAM,KAAEnP,EAAI,yBAAEgS,GAA6B9U,KAC3C,OAAc,QAAViS,EAACjS,KAAK0P,YAAI,IAAAuC,GAATA,EAAWrK,IAAI,gBAIbkN,EAAyBD,wBAC1BnB,EAAAA,EAAAA,UAASoB,EAAyBD,wBAClC/R,EAAKU,GAAGxD,KAAM,8CALT8C,EAAKU,GAAGxD,KAAM,0BAM7B,CAKA,uCACI+U,GACA,MAAO,WACH,MAAMC,QAAwBhV,KAAKiV,4BAEnC,GAAKjV,KAAK0P,KAAK9H,IAAI,iBAAoBoN,EAIvC,OAAOtB,EAAAA,EAAAA,UACH1T,KAAK8C,KAAKU,GAAGxD,KAAM,6BAA8B,CAC7CkV,UAAWF,EAAgBzC,OAGtC,EAZM,EAaX,CAMA,+BACI0C,GACA,MAAO,WACH,MAAM,wBAAEE,GAA4BnV,KAAK8U,0BAA4B,CAAC,EAEtE,GAAKK,EAKL,IAGI,aAF0BnV,KAAKoV,MAAMC,QAAQ,kCACH3K,MAAM5B,GAASA,EAAK3F,IAAM,SAAJwF,OAAawM,IAEjF,CAAE,MAAOG,GACL,MACJ,CACH,EAfM,EAgBX,CAKA,mCACMC,GAA+C,IAAAnD,EACjD,MAAM4C,QAAwBhV,KAAKiV,4BAC/BO,EAAkB,QAAZpD,EAAGpS,KAAK0P,YAAI,IAAA0C,OAAA,EAATA,EAAWxK,IAAI,MAC5B,GAAKoN,GAAoBQ,EAKzB,UAEUxV,KAAK+E,gBAAgB0Q,cAAcT,SACnChV,KAAK0V,OAAOC,aAAa,wBAAyBH,EAC5D,CAAE,MAAOF,GACLtV,KAAK4V,+BACT,MAVI5V,KAAK4V,+BAWb,CAKAA,6BAAAA,GACI5V,KAAK+C,oBAAoBQ,SAASvD,KAAK8C,KAAKU,GAAGxD,KAAM,gCACzD,GACHL,GAAAO,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,kBA3GIC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAZ,GAAAM,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,mBACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAX,GAAAK,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,SACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAkB,GAAAxB,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,UACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA6F,GAAAnG,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,uBACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA8F,GAAApG,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,QACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA+F,GAAArG,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,QAAAf,GAAA,CAAAiB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA+Q,GAAArR,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,4BAAAqB,GAAA,CAAAnB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,0BAAA0F,GAAApF,OAAAC,yBAAAe,EAAAtB,UAAA,0BAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,uCAAA2F,GAAArF,OAAAC,yBAAAe,EAAAtB,UAAA,uCAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,+BAAA4F,GAAAtF,OAAAC,yBAAAe,EAAAtB,UAAA,+BAAAsB,EAAAtB,YAAAD,EAAAA,EAAAA,GAAAuB,EAAAtB,UAAA,iCA8EP6D,EAAAA,QAAMvD,OAAAC,yBAAAe,EAAAtB,UAAA,iCAAAsB,EAAAtB,WAvBsDb,EAuBtDmC,KAAAnC,IApFwCd,EAAAA,EAAAA,sBAAAC,EAAAmW,E,gGCfpC,MAAMiB,UAA0CC,EAAAA,QAA6BtW,WAAAA,GAAA,SAAAC,YAAAkC,EAAAA,EAAAA,GAAA,eAC9EoU,EAAAA,4BAAyBpU,EAAAA,EAAAA,GAAA,mBAErB,eAAYA,EAAAA,EAAAA,GAAA,wBACPqU,EAAAA,cAAa,CAEhC,gBAAMC,CAAWvH,GAIb,MAAM/J,QAAqB+J,EAAM/J,aAC7BgK,QAAsChK,aAAY,EAAZA,EAAcgK,+BAExD,GAAIhK,SAAgBgK,GAAAA,EAA+BuH,mBAAoB,CACnE,MAAM,eAAEnI,GAAmB/N,KAEvB2E,EAAa6B,eAEbxG,KAAKmW,WAAWC,oBACZC,EAAAA,EAAAA,yBAAwBtI,EAAgBA,EAAevF,aAAcxI,KAAKsW,UAI9EvI,EAAeC,0BAA0BhO,KAAKuW,iBAEtD,CACJ,E,6NCfJ,IAIqBC,GAAsBtX,GAWtCG,EAAAA,EAAAA,UAAS,gCAAiC,+CAA8CD,GAOxFD,EAAAA,EAAAA,OAAM,8BAA6BqC,GAGnCrC,EAAAA,EAAAA,OAAM,8CAA6C0G,GAMnD1G,EAAAA,EAAAA,OAAM,+BAA8B2G,GAMpC3G,EAAAA,EAAAA,OAAM,0CAAyC4G,GAS/CxE,EAAAA,EAAAA,IACG,wCACA,iBACA,4EACHyE,GAMA7G,EAAAA,EAAAA,OAAM,6DAA4D8G,GAMlEwQ,EAAAA,EAAAA,KAAI,+BAAgC,+DAA8DvQ,GAMlG3E,EAAAA,EAAAA,IAAG,sCAAuC,wBAAuB4P,GA8BjE9R,EAAAA,EAAAA,UAAS,2EAA0E+R,GAoBnFjS,EAAAA,EAAAA,OAAM,iCAAgCkS,GAatChS,EAAAA,EAAAA,UACG,mBACA,4GACHqX,GAgCArX,EAAAA,EAAAA,UAAS,8BAA6BsX,GAStCtX,EAAAA,EAAAA,UAAS,iCAAgCuX,GAQzCH,EAAAA,EAAAA,KACG,aACA,+BACA,iCACA,+BACA,4BACA,+BACA,iCACHnX,EA3LU,cAAqCuX,EAAAA,QAAyCrX,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,qBAAAC,EAAA,OAKzFgC,EAAAA,EAAAA,GAAA,yBACoBqU,EAAAA,gBAWpBtW,EAAAA,EAAAA,GAAA,oBAAAE,EAAA,OAAAF,EAAAA,EAAAA,GAAA,qCAAAG,EAAA,OAOAH,EAAAA,EAAAA,GAAA,sBAAAgC,EAAA,OAMAhC,EAAAA,EAAAA,GAAA,iCAAA2G,EAAA,OAMA3G,EAAAA,EAAAA,GAAA,kBAAA4G,EAAA,OAaA5G,EAAAA,EAAAA,GAAA,2CAAA6G,EAAA,OAMA7G,EAAAA,EAAAA,GAAA,4BAAA6R,EAAA,OAMA7R,EAAAA,EAAAA,GAAA,0CAAA8R,EAAA,OAMA9R,EAAAA,EAAAA,GAAA,0BAAA+R,EAAA,OAMA/R,EAAAA,EAAAA,GAAA,6BAAAgS,EAAA,OAMAhS,EAAAA,EAAAA,GAAA,wBAAAoX,EAAA,OAgCApX,EAAAA,EAAAA,GAAA,sBAAAqX,EAAA,OAiEArX,EAAAA,EAAAA,GAAA,2BAAAsX,EAAA,MArKA,gCACIC,GAAwC,IAAAC,EACxC,MAAM,aAAEvS,GAAmC,QAArBuS,EAAGlX,KAAKmX,qBAAa,IAAAD,EAAAA,EAAI,CAAC,EAChD,QAASvS,IAAgBsS,EAAAA,EAAAA,8BAA6BtS,EAAc3E,KAAK+N,eAAeX,eAC5F,CAuEAgK,UAAAA,CAAWD,GAAoC,IAAAE,EAC3CrX,KAAKmX,cAAgBA,EACrBnX,KAAKsX,iBAA6C,QAA7BD,EAAGF,EAAcxS,oBAAY,IAAA0S,OAAA,EAA1BA,EAA4B5K,QACxD,CAKA,kCACI8K,GACA,MAAM,aAAE5S,GAAiB3E,KACzB,IAAK2E,EACD,OAAO,EAGX,MAAM,aAAE6S,GAAiB7S,EAIzB,QACIA,EAAa8S,gCACZD,IAAiBE,EAAAA,YAAYC,wBAA0BH,IAAiBE,EAAAA,YAAYE,iBAE7F,CAWA,gCAAIC,GACA,SAAU7X,KAAKwG,iBAAwBxG,KAAK4J,YAAYhC,IAAI,4BAChE,CAKA,iCAIIkQ,GACA,MAAO,OAACpQ,IACJ,GAA8B,KAA1B1H,KAAKsX,iBACL,OAAO,EAGX,MAAM3S,EAAiC,QAArBoT,EAAG/X,KAAKmX,qBAAa,IAAAY,OAAA,EAAlBA,EAAoBpT,aACrCgK,QAAsChK,aAAY,EAAZA,EAAcgK,+BACpDqJ,EAAmBrJ,aAA6B,EAA7BA,EAA+BqJ,iBAEtD,OAAKA,IAIGA,EAAiBC,KAAKvP,GACnBA,EAAgBwP,YAAcxP,EAAgByP,cAE5D,EAhBM,EAiBX,CAKA,sBAAIC,GACA,QAASpY,KAAK4J,YAAYhC,IAAI,2BAClC,CAMA,6BACIyQ,GAAqC,IAAAhN,EAAAC,EACrC,OAAuC,QAAvCD,EAA8B,QAA9BC,EAAOtL,KAAK4E,0BAAkB,IAAA0G,OAAA,EAAvBA,EAAyBgN,eAAO,IAAAjN,GAAAA,CAC3C,CAMA,gCACIkN,GAAwC,IAAAC,EAAAC,EACxC,OAA0C,QAA1CD,EAAiC,QAAjCC,EAAOzY,KAAK6E,6BAAqB,IAAA4T,OAAA,EAA1BA,EAA4BH,eAAO,IAAAE,GAAAA,CAC9C,CAqBAE,uBAAAA,CAAwB/T,EAAiCgU,GACrD,OAAI3Y,KAAK4Y,oCACL5Y,KAAK4T,OAAOiF,uBACR7Y,KAAK8C,KAAKU,GAAGxD,KAAM,iBACnBA,KAAK8C,KAAKU,GAAGxD,KAAM,4BACnB,CACIgE,OAAQA,IAAMhE,KAAK8Y,iBAAiBnU,MAGrC,GAGJ3E,KAAK8Y,iBAAiBnU,EAAcgU,EAC/C,CAKAG,gBAAAA,CAAiBnU,EAAiCgU,GAGY,IAAApN,EAAAwN,EAM1D,OANK/Y,KAAKoY,oBAAuBpY,KAAK0O,MAAMsK,eAExCrU,EAAaqC,eAAwC,QAA1BuE,EAAGvL,KAAK4E,0BAAkB,IAAA2G,EAAAA,EAAI,KACzD5G,EAAa0C,kBAA8C,QAA7B0R,EAAG/Y,KAAK6E,6BAAqB,IAAAkU,EAAAA,EAAI,OAG3D/Y,KAAKoN,eAAiB6L,EAAoCC,GAAuBlQ,KACrFhJ,KACA2E,EACAgU,EAER,CAMAQ,MAAAA,GACI,MAAM,aAAExU,GAAiB3E,KACzB,IAAIA,KAAKoN,gBAALpN,MAAuB2E,IAAAA,EAAc6B,eAKzC,OAAO4S,EAAgCpQ,KAAKhJ,KAAM2E,GAJ9C0U,EAAAA,2BAA2BrQ,KAAKhJ,KAAM2E,EAK9C,CAMA2U,wBAAAA,CAAyBzS,GACrB7G,KAAK4E,mBAAqBiC,CAC9B,CAMA0S,2BAAAA,CAA4B1S,GACxB7G,KAAK6E,sBAAwBgC,CACjC,GAGHlH,GAAAO,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,iBAnQIQ,EAAAA,SAAO,CAAAN,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,gCAAAjB,GAAAuB,OAAAC,yBAAApB,EAAAa,UAAA,gCAAAb,EAAAa,WAAAP,GAAAM,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,gBAAAf,GAAA,CAAAiB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAX,GAAAK,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,iCAAAqB,GAAA,CAAAnB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAkB,GAAAxB,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,kBAAA0F,GAAA,CAAAxF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA6F,GAAAnG,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,6BAAA2F,GAAA,CAAAzF,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA8F,GAAApG,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,cAAA4F,GAAA,CAAA1F,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA+F,GAAArG,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,uCAAA6F,GAAA,CAAA3F,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAA+Q,GAAArR,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,wBAAA8F,GAAA,CAAA5F,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAgR,GAAAtR,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,sCAAA+F,GAAA,CAAA7F,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAiR,GAAAvR,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,sBAqEPQ,EAAAA,SAAO,CAAAN,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAkR,GAAAxR,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,yBAMPQ,EAAAA,SAAO,CAAAN,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAsW,GAAA5W,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,oBAMPQ,EAAAA,SAAO,CAAAN,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,cAGP6D,EAAAA,QAAMvD,OAAAC,yBAAApB,EAAAa,UAAA,cAAAb,EAAAa,YAAAD,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,kCAAAgR,GAAA1Q,OAAAC,yBAAApB,EAAAa,UAAA,kCAAAb,EAAAa,WAAA4W,GAAA7W,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,kBAAAiR,GAAA,CAAA/Q,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,iCAAAkR,GAAA5Q,OAAAC,yBAAApB,EAAAa,UAAA,iCAAAb,EAAAa,YAAAD,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,6BAAAuW,GAAAjW,OAAAC,yBAAApB,EAAAa,UAAA,6BAAAb,EAAAa,YAAAD,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,gCAAAwW,GAAAlW,OAAAC,yBAAApB,EAAAa,UAAA,gCAAAb,EAAAa,WAAA6W,GAAA9W,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,uBAAAyW,GAAA,CAAAvW,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,2BA6GN6D,EAAAA,QAAMvD,OAAAC,yBAAApB,EAAAa,UAAA,2BAAAb,EAAAa,YAAAD,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,UAsCN6D,EAAAA,QAAMvD,OAAAC,yBAAApB,EAAAa,UAAA,UAAAb,EAAAa,YAAAD,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,4BAcN6D,EAAAA,QAAMvD,OAAAC,yBAAApB,EAAAa,UAAA,4BAAAb,EAAAa,YAAAD,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,+BAQN6D,EAAAA,QAAMvD,OAAAC,yBAAApB,EAAAa,UAAA,+BAAAb,EAAAa,WAAAb,GAkBXoI,eAAewR,EAEXvU,EACAgU,GAEA,MAAMhK,QAAsChK,EAAagK,8BACrD6K,EAAc7K,SAAAA,EAA+B8K,gBAAkB9K,EAAgChK,EAEnG,UACU6U,EAAYE,OAElB,MAAMC,EAASjS,UACP8R,aAAuBI,EAAAA,QACvBjL,EAA8BhK,aAAe6U,EAE7C7U,EAAamJ,eAGXsL,EAAgCpQ,KAAKhJ,KAAM2E,EAAa,EAGlE,GAAIgU,EAMA,OALAA,EAAgBkB,MAAMC,KACA,IAAdA,GACAH,GACJ,IAEG1R,QAAQ8R,gBAGbJ,GACV,CAAE,MAAOK,GAAI,IAAAC,EAAAC,EACT,MAAM,OAAEpW,GAAiC,QAAzBmW,EAAY,QAAZC,EAAGF,EAAGpW,cAAM,IAAAsW,OAAA,EAATA,EAAWC,mBAAW,IAAAF,EAAAA,EAAI,CAAC,EAK9C,OAJInW,GACA9D,KAAK+C,oBAAoBQ,SAASO,GAG/BmE,QAAQgG,QACnB,CACJ,CAKAvG,eAAeuR,EAEXtU,EACAgU,GAEA,MAAMjJ,QAAa/K,EAAa+K,KAC5B0K,EAAYA,KAGJzV,EAAa6B,gBAAkBkJ,EAAK2K,kCACpC3N,EAAAA,EAAAA,KAAIgD,EAAM,4BAA4B,GAKtC/K,EAAa6B,gBAAkBkJ,EAAK4K,iCACpC5N,EAAAA,EAAAA,KAAIgD,EAAM,2BAA2B,GAIlCwJ,EAAsBlQ,KAAKhJ,KAAM2E,EAAcgU,IAG9D,QAAM/Q,EAAAA,EAAAA,KAAIjD,EAAc,oDAAuDA,EAAa4V,eACjFH,IAGJ,IAAInS,SAAe8R,IAEtBS,EAAAA,uBAAuBxR,KACnBhJ,MACA0H,UAEqC,IAAA+S,EAAAC,EAA7B/V,EAAa6B,eACbmU,EAAAA,4CAA4C3R,KACxChJ,KACA2E,EACAA,EAAaiW,SACiB,QADTH,EACrB9V,EAAa0C,yBAAiB,IAAAoT,OAAA,EAA9BA,EAAgClT,cACF,QADemT,EAC7C/V,EAAa0C,yBAAiB,IAAAqT,OAAA,EAA9BA,EAAgClT,aAGpC4S,IAGJL,GAAS,IAEb,IAAMA,KACT,GAET,CAKArS,eAAe0R,EAEXzU,GAGyB,IAAAkW,EAAAC,EAAzB,GAAI9a,KAAKoN,eACL,OAAOuN,EAAAA,4CAA4C3R,KAC/ChJ,KACA2E,EACAA,EAAaiW,SACiB,QADTC,EACrBlW,EAAa0C,yBAAiB,IAAAwT,OAAA,EAA9BA,EAAgCtT,cACF,QADeuT,EAC7CnW,EAAa0C,yBAAiB,IAAAyT,OAAA,EAA9BA,EAAgCtT,aAIlCxH,KAAKwG,gBAAkBxG,KAAK+a,4BAMlCpQ,EAAAA,EAAAA,eAAchG,EAAc,CACxB6B,gBAAgB,EAChBuU,2BAA2B,UAIzB/a,KAAKgb,sBAEXhb,KAAKmW,WAAWC,mBAAmBpW,KAAKib,kBAAmBtW,EAAauW,UAAU,QAAQ/X,OAbtFnD,KAAK+N,eAAeC,2BAc5B,C,qFC7Ze,MAAMmN,UAAiCC,EAAAA,QAA6B5b,WAAAA,GAAA,SAAAC,YAAAkC,EAAAA,EAAAA,GAAA,gBAGpE,CACP0Z,aAActF,EAAAA,0BACdpR,aAAc2W,EAAAA,0BACdC,gBAAiBC,EAAAA,yBACjBC,mBAAoBC,EAAAA,sBACpBd,SAAUe,EAAAA,kBACVC,oBAAqBC,EAAAA,wBACrBC,kBAAmBC,EAAAA,4BACnBC,SAAUC,EAAAA,mBACVC,iBAAkBC,EAAAA,WAClBC,gCAAiCC,EAAAA,iCACpC,E,yHC7B0D,IAI1CC,GAAmBhd,EAAzB,cAAkCid,EAAAA,QAAa/c,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,sBAAAC,EAAA,OAAAgC,EAAAA,EAAAA,GAAA,eAGhDqU,EAAAA,cAAa,GAC1BrW,GAAAO,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,kBAHIC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAlB,E,qFCAG,MAAMkd,UAA8BD,EAAAA,QAAa/c,WAAAA,GAAA,SAAAC,YAAAkC,EAAAA,EAAAA,GAAA,eAClD8a,EAAAA,0BAAyB,E,8rBCEvC,IAGqBC,GAAwBpd,EAA9B,cAAuCqd,EAAAA,QAAgDnd,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,sBAAAC,EAAA,OAAAgC,EAAAA,EAAAA,GAAA,eAGxFqU,EAAAA,gBAAarU,EAAAA,EAAAA,GAAA,qBAEE,eAAYA,EAAAA,EAAAA,GAAA,0BAChB,UAAOA,EAAAA,EAAAA,GAAA,iCACA8a,EAAAA,0BAAyB,CAErD/N,KAAAA,CACIkO,EACAC,GAIA,OAAAC,EAAAA,EAAA,GACO1W,MAAMsI,MAAMkO,EAAQC,IAAW,IAClCE,MAA0B,QAAnBH,EAAOI,SAEtB,GACHrd,GAAAO,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,kBAnBIC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAlB,E,oFCNG,MAAM2d,UAAkCC,EAAAA,QAAqB1d,WAAAA,GAAA,SAAAC,YAAAkC,EAAAA,EAAAA,GAAA,yBACpDqU,EAAAA,cAAa,E,oFCFtB,MAAMmH,UAAwCC,EAAAA,QAAoD5d,WAAAA,GAAA,SAAAC,YAAAkC,EAAAA,EAAAA,GAAA,eACnG6Z,EAAAA,2BAAwB7Z,EAAAA,EAAAA,GAAA,wBAEhB,EAAK,CAEvB,+BAAM0b,GACF,MAAM3N,QAAa1P,KAAKsd,aAAa5N,KACrC,GAAKA,EAAL,CAMA,GAAI1P,KAAK+N,eAAeX,eAAgB,CACpC,MAAMzI,QAAqB+K,EAAK/K,aAC5BA,SAAAA,EAAc6B,gBACd7B,EAAa4Y,oBAErB,CAEAnX,MAAMiX,2BAXN,CAYJ,E,iLCZJ,IAIqBG,GAAkBte,GAalCG,EAAAA,EAAAA,UAAS,qGAAoGD,GAmB7GmC,EAAAA,EAAAA,IAAG,aAAc,+BAA8BC,GAM/CnC,EAAAA,EAAAA,UACG,gCACA,2FACA,oBACHC,EA1CU,cAAiCkX,EAAAA,QAAuBhX,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,YAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,2BAAAE,EAAA,OAAAF,EAAAA,EAAAA,GAAA,aAAAG,EAAA,OAKnE8B,EAAAA,EAAAA,GAAA,wBAGkC,OAqBlCjC,EAAAA,EAAAA,GAAA,uBAAAgC,EAAA,MAhBA,sBACI+b,GACA,MAAM,aAAE9Y,EAAY,KAAE7B,GAAS9C,KAC/B,GAAI2E,EAAc,CACd,IAAIiD,EAAAA,EAAAA,KAAIjD,EAAagK,8BAA+B,iBAChD,OAAO7L,EAAK+K,EAAE,gDAGlB,GAAIlJ,EAAa+Y,mBAAqB/Y,EAAagZ,qBAC/C,OAAO7a,EAAK+K,EAAE,mDAEtB,CAGJ,CAWA,iBAKI+P,GACA,MAAM,aAAEjZ,GAAiB3E,MACrB,SAAE4a,EAAQ,kBAAE8C,EAAiB,qBAAEC,EAAoB,0BAAEE,GAA8BlZ,QAAAA,EAAgB,CAAC,EACpGmZ,GAAgBlW,EAAAA,EAAAA,MAAKjD,QAAAA,EAAgB,CAAC,GAAGgK,8BAA+B,iBAE5E,IAAKkP,EACD,MAAO,GAImB,OAA1B7d,KAAK+d,uBAA0CvU,IAAboR,IAElClO,EAAAA,EAAAA,KAAI1M,KAAM,mBAAoB4a,GAGlC,MAAMoD,EAAqBhe,KAAK+N,eAAeX,eAE/C,OAAOyQ,EAA0B3a,KAC7B+F,IAAA,IAAC,GAAE9F,EAAE,KAAEoP,EAAI,YAAE1J,GAAaI,EAAA,OACtB,IAAIG,EAAAA,EAAgE,CAChEC,MAAOkJ,EACPpJ,MAAOhG,IAAOyX,EACdqD,UAAWH,GAAiBJ,GAAqBC,IAAyBxa,IAAO+a,EAAAA,YACjF5U,MAAO,CACHnG,KACA0F,YAAamV,OAAqBxU,EAAYX,IAEpD,GAEd,CAQAsV,eAAAA,CAAgBC,GACZ,MAAM,aAAEzZ,GAAiB3E,KACzB,GAAI2E,EAAc,CACd,MAAM0Z,EAAeD,EAAME,OAAO,SAAS,GAAOhV,MAAMnG,IACxDuJ,EAAAA,EAAAA,KAAI/H,EAAc,WAAY0Z,GAC1Bre,KAAK+N,eAAeX,iBACpBV,EAAAA,EAAAA,KAAI/H,EAAc,uBAAwB0Z,EAElD,CACJ,CAOA,kBACME,CAAa5F,GAAkD,IAAAzB,EACjE,MAAM,aAAEvS,GAAmC,QAArBuS,EAAGlX,KAAKmX,qBAAa,IAAAD,EAAAA,EAAI,CAAC,EAChD,IAAKvS,EACD,OAGJ,MAAMgK,QAAsChK,EAAaiD,IAAI,iCACzD4W,EAA0Cxe,KAAKoV,MAAMhF,WAC3CzB,EAA8B8P,wCAAwC9Z,EAAaiW,WAKjG,OAFAjM,EAA8BjC,IAAI,oCAAqC8R,GAEhExe,KAAK+N,eAAeX,eACrBsR,EAAgC1V,KAAKhJ,KAAM2E,EAAcgU,GACzD3Y,KAAK8Y,iBAAiBnU,EAAcgU,EAC9C,CASAgG,sCAAAA,CAAuCha,GACnC,MAAM,KAAE7B,GAAS9C,KAEjBA,KAAK4T,OAAOiF,uBACR/V,EAAK+K,EAAE,sDACP/K,EAAK+K,EAAE,4DACP,CACIyF,KAAMxQ,EAAK+K,EAAE,gBACb7J,OAAQ0D,gBAEwC/C,EAAaiD,IAAI,kCACxB8R,OAAOG,MAAKnS,gBACvC/C,EAAamJ,SACnB9N,KAAK+N,eAAeC,2BAA2B,KAKnE,GAGHrO,GAAAO,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,QA9IIC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAZ,GAAAM,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,uBACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAX,GAAAK,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,SACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,sBAAAjB,GAAAuB,OAAAC,yBAAApB,EAAAa,UAAA,sBAAAb,EAAAa,WAAAuB,GAAAxB,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,mBAAAf,GAAA,CAAAiB,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,QAAAN,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,iBAAAqB,GAAAf,OAAAC,yBAAApB,EAAAa,UAAA,iBAAAb,EAAAa,YAAAD,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,mBA4EP6D,EAAAA,QAAMvD,OAAAC,yBAAApB,EAAAa,UAAA,mBAAAb,EAAAa,YAAAD,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,gBAiBN6D,EAAAA,QAAMvD,OAAAC,yBAAApB,EAAAa,UAAA,gBAAAb,EAAAa,YAAAD,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,0CAyBN6D,EAAAA,QAAMvD,OAAAC,yBAAApB,EAAAa,UAAA,0CAAAb,EAAAa,WAAAb,GAwCXoI,eAAegX,EAEX/Z,EACAgU,GAEA,MAAMiG,EAA2B5e,KAAK+d,mBAAqBc,EAAAA,KAO3D,IAHAnS,EAAAA,EAAAA,KAAI/H,EAAc,iBAAkBia,GAGhCja,EAAaiW,WAAaiE,EAAAA,OAASla,EAAa6B,eAEhD,YADAxG,KAAK2e,uCAAuCha,GAKhD,IAAKia,EACD,OAAO5e,KAAK8Y,iBAAiBnU,EAAcgU,GAG/C,MAAMjJ,QAAa/K,EAAa+K,KAC5B8F,EAAS9F,EAAKvM,IACd,eAAE4K,GAAmB/N,KACrB8e,EAAY/Q,EAAevF,aACrBuW,EAAAA,8CACAzD,EAAAA,2BAGV3Q,EAAAA,EAAAA,eAAc+E,EAAM,CAChBsP,gCAAgC,EAChCC,mCAAmC,IAIvClR,EAAemR,4BAA4BJ,EAAWtJ,EAC1D,C,6GC/MA,IAIqB2J,GAAa7f,EAAnB,cAA6C8f,EAAAA,QAAyB5f,WAAAA,GAAA,SAAAC,YAAAkC,EAAAA,EAAAA,GAAA,eACvEga,EAAAA,kBAAiB,CAE3B,oBACM0D,CAAexC,SAEXzW,MAAMiZ,eAAexC,GAC1B7c,KAAKsf,WAA0B5S,IAAI,mBAAoB,KAC5D,IACHxM,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,kBANI6D,EAAAA,QAAMvD,OAAAC,yBAAApB,EAAAa,UAAA,kBAAAb,EAAAa,WAAAb,E,qJCFJ,SAASigB,EACZnK,EACArH,GAEA,OAAOqH,EAAMoK,WAAW,+BAAgCzR,EAAe0R,eAC3E,CAAC,IAEoBC,GAAUpgB,EAAhB,cAAyBid,EAAAA,QAAa/c,WAAAA,GAAA,SAAAC,YAAAC,EAAAA,EAAAA,GAAA,aAAAC,EAAA,OAAAD,EAAAA,EAAAA,GAAA,sBAAAE,EAAA,OAAA+B,EAAAA,EAAAA,GAAA,eAIvCwa,EAAAA,WAAU,CAEpBzN,KAAAA,GACI,MAAM,eAAEX,EAAc,MAAEqH,GAAUpV,KAElC,MAAO,CACH4J,YAAa2V,EAAoBnK,EAAOrH,GACxC4R,aAAc3f,KAAK+N,eAAe6R,cAC5B5f,KAAKoV,MAAMoK,WAAW,wBAAyBxf,KAAK+N,eAAe8R,4BACnErW,EACNsW,6BAA8B1K,EACzB2K,MAAM,6CAA8C,CAAC,GACrDlG,MAAMmG,GAAeA,EAAWC,YAE7C,GACHtgB,GAAAO,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,SAlBIC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAZ,GAAAM,EAAAA,EAAAA,GAAAZ,EAAAa,UAAA,kBACPC,EAAAA,QAAO,CAAAC,cAAA,EAAAC,YAAA,EAAAC,UAAA,EAAAC,YAAA,OAAAlB,E","sources":["./components/users/common-toolbar/index.hbs","./components/users/common-toolbar/index.ts","./components/ui/icon-tooltip-hover/index.hbs","./components/ui/icon-tooltip-hover/index.ts","./components/users/index-bulk-toolbar/index.hbs","./components/users/index-bulk-toolbar/index.ts","./components/users/item/access-period/index.hbs","./components/users/item/access-period/index.ts","./components/users/item/device-access/user-code/index.hbs","./components/users/item/device-access/user-code/index.ts","./components/users/list/checkbox-user-item/index.hbs","./components/users/list/checkbox-user-item/index.ts","./components/modals/users/failed-pin-locations/index.hbs","./components/modals/users/failed-pin-locations/index.ts","./components/modals/users/user-access-locations-list/index.hbs","./components/modals/users/user-access-locations-list/index.ts","./components/users/list/user-item/index.hbs","./components/users/list/user-item/index.js","./components/users/not-supported/index.hbs","./components/users/not-supported/index.ts","./users/edit/access-period/route.ts","./users/edit/device-access/controller.ts","./users/edit/index/controller.ts","./users/edit/index/route.ts","./users/edit/not-supported/route.js","./users/edit/route.ts","./users/edit/user-information/controller.ts","./users/edit/user-information/route.ts","./users/edit/user-type/controller.ts","./users/edit/user-type/route.ts","./users/route.ts"],"sourcesContent":["import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @items}}\\n \\n \\n \\n{{/if}}\\n\\n{{#if @permissions.canCreateNewUser}}\\n \\n{{/if}}\\n\",{ moduleName: \"customer-site/components/users/common-toolbar/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport type { PageViewSignature } from '@adc/ui-components/components/page-view';\nimport type DropdownActionItem from '@adc/ui-components/utils/dropdown-action-item';\nimport type PermissionsCollection from 'customer-site/models/users/permissions-collection';\n\ninterface UsersCommonToolbarSignature {\n Args: {\n items: DropdownActionItem[];\n permissions: PermissionsCollection & {\n canCreateNewUser: boolean;\n };\n addNewUser: VoidFunction;\n apiButtons: PageViewSignature['Blocks']['default'][1]['buttons'];\n };\n}\n\nconst UsersCommonToolbar = templateOnlyComponent();\n\nexport default UsersCommonToolbar;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::CommonToolbar': typeof UsersCommonToolbar;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n{{#unless this.isMobile}}\\n \\n {{@tooltipText}}\\n \\n{{/unless}}\",{ moduleName: \"customer-site/components/ui/icon-tooltip-hover/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { isMobileBrowser } from '@adc/ember-utils/utils/browser-helpers';\nimport { computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\n\nimport './_style.scss';\nimport type { SvgSymbolSignature } from '@adc/svg-system/components/svg-symbol';\nimport type { PopoverMenuSignature } from '@adc/ui-components/components/popover-menu';\nimport type ContextManager from 'customer-site/services/context-manager';\n\ninterface UiIconTooltipHoverSignature {\n Element: SvgSymbolSignature['Element'];\n Args: Pick & {\n icon?: string;\n style?: string;\n tooltipId?: string;\n tooltipText: string;\n };\n}\n\nexport default class UiIconTooltipHover extends Component {\n @service declare contextManager: ContextManager;\n\n @alias('contextManager.identityModel.isMobileApp')\n declare isMobileApp: boolean;\n\n /**\n * Is the browser a mobile user agent?\n */\n @computed('isMobileApp')\n get isMobile() {\n return isMobileBrowser() || this.isMobileApp;\n }\n\n /**\n * Whether the tooltip that appears on hover is visible.\n * This should always be false when viewing on mobile.\n */\n @tracked\n isTooltipVisible = false;\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Ui::IconTooltipHover': typeof UiIconTooltipHover;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if this.showBulkActions}}\\n
\\n \\n \\n {{#if this.toggleAllUsersSelection.isRunning}}\\n \\n {{else}}\\n {{tc this (if @inInactiveUsersMode \\'numberSelectedInactiveUsers\\' \\'numberSelectedUsers\\') numUsers=this.selectedUserCount}}\\n {{/if}}\\n \\n \\n\\n {{#if @inInactiveUsersMode}}\\n \\n {{/if}}\\n\\n \\n\\n {{#unless @inInactiveUsersMode}}\\n \\n {{/unless}}\\n\\n \\n
\\n {{/if}}\\n
\\n\",{ moduleName: \"customer-site/components/users/index-bulk-toolbar/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { A } from '@ember/array';\nimport { action, computed } from '@ember/object';\nimport { or } from '@ember/object/computed';\nimport { service } from '@ember/service';\nimport { task } from 'ember-concurrency';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './style.scss';\nimport type { TEmberAjaxError } from '@adc/ajax/services/adc-ajax';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type { Registry as ServiceRegistry } from '@ember/service';\nimport type User from 'customer-site/models/users/user';\n\ninterface UsersIndexBulkToolbarArgs {\n Element: HTMLDivElement;\n Args: {\n /** The current collection of users. */\n users: User[];\n /** Action for deleting users. */\n delete: (userIds: string[]) => Promise;\n /** Action for resending users codes. */\n resendCodes: (userIds: string[]) => Promise;\n /** Action for closing this toolbar. */\n close: VoidFunction;\n /** Called to ensure all users are loaded before bulk select all. */\n ensureAllUsersLoaded: () => Promise;\n /** Indicates we are bulk editing only inactive users. */\n inInactiveUsersMode?: boolean;\n };\n}\n\n@intlPath({ path: 'users.index-bulk-toolbar' })\nexport default class UsersIndexBulkToolbar extends Component {\n @service declare identityManager: ServiceRegistry['identity-manager'];\n @service declare intl: ADCIntlService;\n @service declare notificationManager: ServiceRegistry['notification-manager'];\n\n @or('args.inInactiveUsersMode', 'identityManager.identityModel.hasUsersPageBulkActionsBeta')\n declare showBulkActions: boolean;\n\n @computed('args.users.@each.isSelected')\n get selectedUserCount(): number {\n return this.args.users.filter((u) => u.isSelected).length;\n }\n\n get checkboxState(): boolean | 'mixed' {\n const { selectedUserCount } = this;\n if (selectedUserCount === 0) {\n return false;\n }\n\n return selectedUserCount === this.args.users.length || 'mixed';\n }\n\n /**\n * Toggles selection status for all users.\n *\n * @note If all users are not loaded, this will load them.\n */\n toggleAllUsersSelection = task({ drop: true }, async () => {\n // Are we selecting all users?\n const allSelected = this.args.users.some((u) => !u.isSelected);\n if (allSelected) {\n // Make sure they are all loaded.\n await this.args.ensureAllUsersLoaded();\n }\n\n A(this.args.users).setEach('isSelected', allSelected);\n });\n\n @action async deleteUsers(): Promise {\n const { intl, notificationManager } = this,\n { inInactiveUsersMode } = this.args,\n selectedUsers = this.args.users.filter((u) => u.isSelected).map((u) => u.id),\n numUsers = selectedUsers.length,\n count = await this.args.delete(selectedUsers);\n\n // If users are deleted successfully, display the success amount.\n if (count === numUsers) {\n notificationManager.addSuccess(\n intl.tc(\n this,\n inInactiveUsersMode ? 'numberInactiveUsersToDeleteSuccess' : 'numberUsersToDeleteSuccess',\n {\n numUsers: count\n }\n )\n );\n return;\n }\n\n // If users are not deleted successfully, display the failure amount.\n if (count < numUsers) {\n notificationManager.addError(\n intl.tc(\n this,\n inInactiveUsersMode ? 'numberInactiveUsersToDeleteFailure' : 'numberUsersToDeleteFailure',\n {\n numUsers: numUsers - count\n }\n )\n );\n }\n }\n\n @action async resendCodes(): Promise {\n const { intl, notificationManager } = this,\n selectedUsers = this.args.users.filter((u) => u.isSelected),\n numUsers = selectedUsers.length;\n\n const error = await this.args.resendCodes(selectedUsers.map((u) => u.id));\n if (!error) {\n notificationManager.addSuccess(\n intl.tc(this, 'numberUsersToResendSuccess', {\n numUsers\n })\n );\n return;\n }\n\n const { errors } = error;\n if (errors) {\n notificationManager.addError(errors[0]?.detail);\n\n const count = errors.length;\n if (count !== numUsers) {\n notificationManager.addWarning(\n intl.tc(this, 'numberUsersToResendFailure', {\n numUsers: numUsers - count\n })\n );\n }\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::IndexBulkToolbar': typeof UsersIndexBulkToolbar;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if this.selectedDevicesWithoutScheduleSupport}}\\n

{{tc this \\'schedulesNotSupported\\'}}

\\n

{{tc this \\'noScheduleSupport\\'}}

\\n\\n
    \\n {{#each this.selectedDevicesWithoutScheduleSupport as |accessPointItemDesc|}}\\n
  • {{await accessPointItemDesc}}
  • \\n {{/each}}\\n
\\n {{else}}\\n
\\n {{#if (and (is-enterprise) @deviceAccess.isCreationFlow)}}\\n \\n

{{tc this \\'setAccessPeriodDesc\\' htmlSafe=true}}

\\n {{else}}\\n \\n {{/if}}\\n\\n
\\n \\n
\\n\\n {{#if this.showOptOutOfExpiredUserRemovalCheckbox}}\\n \\n {{/if}}\\n\\n {{#if (await this.hasAnyAccessControlSubgroups)}}\\n \\n
\\n

{{tc this \\'acPcUserCodeScheduleWarning\\'}}

\\n
\\n {{/if}}\\n
\\n\\n {{#if (and this.weeklyScheduleCopy this.canSelectWeeklySchedule)}}\\n
\\n \\n\\n
\\n \\n
\\n\\n \\n {{tc this (if this.weeklyScheduleCopy.isValid \\'scheduleIsValid\\' \\'scheduleIsInvalid\\')}}\\n \\n
\\n {{/if}}\\n\\n {{#if (and this.temporaryScheduleCopy this.canSelectTemporarySchedule)}}\\n
\\n \\n\\n
\\n
\\n \\n
\\n
\\n\\n \\n {{tc this (if this.temporaryScheduleCopy.isValid \\'scheduleIsValid\\' \\'scheduleIsInvalid\\')}}\\n \\n\\n {{#if this.showEarlyAccessInformation}}\\n \\n

{{this.showEarlyAccessInformation}}

\\n
\\n {{/if}}\\n
\\n {{/if}}\\n {{/if}}\\n
\\n\",{ moduleName: \"customer-site/components/users/item/access-period/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { tracked } from '@glimmer/tracking';\nimport { computed, setProperties, action, get } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { schedule } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { Guest, ProspectiveResident, WorkOrder } from 'customer-site/enums/AccessPointUserType';\nimport { intlPath } from '@adc/i18n/path';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport addDays from 'date-fns/addDays';\nimport addMinutes from 'date-fns/addMinutes';\nimport addMonths from 'date-fns/addMonths';\nimport isEqual from 'date-fns/isEqual';\nimport TemporarySchedule from '../../../../utils/transforms-objects/temporary-schedule';\nimport WeeklySchedule from '../../../../utils/transforms-objects/weekly-schedule';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type Store from '@ember-data/store';\nimport type SystemGroup from 'customer-site/models/systems/system-group';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type UsersPermissionsCollectionModel from 'customer-site/models/users/permissions-collection';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\n/**\n * Gets the available user schedules for the user type.\n * @param userType\n * @returns {Promise}\n */\nfunction generateAvailableUserSchedulesButtons(\n this: AccessPeriodComponent,\n deviceAccess: DeviceAccessModel,\n weeklyScheduleCopy: WeeklySchedule,\n temporaryScheduleCopy: TemporarySchedule\n) {\n const { identityManager } = this,\n type = deviceAccess.resolvedUserType,\n isPointCentralSTR = identityManager.pointCentralIdentity?.isPointCentralSTR;\n\n if (type === Guest && isPointCentralSTR) {\n return [[TEMPORARY_SCHEDULE_ID, 'limitedTimes', temporaryScheduleCopy != null]];\n }\n\n return [\n [ALL_TIMES_ID, 'atAllTimes', deviceAccess.isAllTimesSelected && !weeklyScheduleCopy && !temporaryScheduleCopy],\n [WEEKLY_SCHEDULE_ID, 'restrictedSchedule', weeklyScheduleCopy != null],\n [TEMPORARY_SCHEDULE_ID, 'limitedTimes', temporaryScheduleCopy != null]\n ];\n}\n\n/**\n * These are used for mapping the schedule properties to radio options.\n */\nexport const ALL_TIMES_ID = 1,\n WEEKLY_SCHEDULE_ID = 2,\n TEMPORARY_SCHEDULE_ID = 3;\n\n/**\n * These are used to set up the default values for the restricted schedule.\n */\nexport const NINE_AM = 540;\nexport const FIVE_PM = 1020;\nexport const DEFAULT_DAYS = [1, 2, 3, 4, 5];\n\nexport interface SchedulePickerUpdates {\n selectedDays: number[];\n beginTimeInMinutes: number;\n endTimeInMinutes: number;\n beginTimeInSeconds: number;\n endTimeInSeconds: number;\n isEndTimeNextDay: boolean;\n}\n\ninterface AccessPeriodComponentSignature {\n Args: {\n deviceAccess: DeviceAccessModel;\n permissions: UsersPermissionsCollectionModel;\n onWeeklyScheduleUpdate: (schedule: WeeklySchedule | null | undefined) => void;\n onTemporaryScheduleUpdate: (schedule: TemporarySchedule | null | undefined) => void;\n };\n}\n\n/**\n * @classdesc\n * Allows for the ability to select when a user's pin code should work on devices.\n */\n@intlPath({ path: 'users/item/access-period' })\nexport default class AccessPeriodComponent extends Component {\n @service declare intl: ADCIntlService;\n @service declare contextManager: ContextManager;\n @service declare store: Store;\n @service declare identityManager: IdentityManager;\n\n constructor(owner: unknown, args: AccessPeriodComponentSignature['Args']) {\n super(owner, args);\n\n const { deviceAccess } = this.args;\n\n // Are we creating a user?\n if (deviceAccess.isCreationFlow) {\n const type = deviceAccess.resolvedUserType;\n\n if ([Guest, ProspectiveResident, WorkOrder].includes(type)) {\n // Default to Temporary Schedule\n this.addTemporarySchedule();\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', () => this.args.onWeeklyScheduleUpdate(this.weeklyScheduleCopy));\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', () => this.args.onTemporaryScheduleUpdate(this.temporaryScheduleCopy));\n return;\n }\n }\n\n // If we have an existing weekly schedule, set up the copy.\n if (deviceAccess.weeklySchedule) {\n this.weeklyScheduleCopy = new WeeklySchedule(this, {\n beginTime: deviceAccess.weeklySchedule.beginTime,\n endTime: deviceAccess.weeklySchedule.endTime,\n selectedDays: deviceAccess.weeklySchedule.selectedDays\n });\n } else {\n // If there is no existing weekly schedule, set it to null.\n this.weeklyScheduleCopy = null;\n }\n\n // If we have a temporary schedule, set up the copy.\n if (deviceAccess.temporarySchedule) {\n this.temporaryScheduleCopy = new TemporarySchedule(this, {\n beginDateTime: deviceAccess.temporarySchedule.beginDateTime,\n endDateTime: deviceAccess.temporarySchedule.endDateTime\n });\n } else {\n this.temporaryScheduleCopy = null;\n }\n\n // Pass the copy up to the controllers (after render to avoid autotracking.mutation-after-consumption deprecation).\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', () => this.args.onWeeklyScheduleUpdate(this.weeklyScheduleCopy));\n // Do not copy this deprecated usage. If you see this, please fix.\n // eslint-disable-next-line ember/no-runloop\n schedule('afterRender', () => this.args.onTemporaryScheduleUpdate(this.temporaryScheduleCopy));\n }\n\n // region Computed Properties\n\n /**\n * Are there any access control subgroups under the selected group?\n */\n @computed('identityManager.identityModel.selectedSystemGroup.childGroups.@each.isAccessControl')\n get hasAnyAccessControlSubgroups() {\n return (async () => {\n const subgroups = (await get(\n this.identityManager.identityModel?.selectedSystemGroup,\n 'childGroups'\n )) as SystemGroup[];\n\n const loadedSubgroups = await Promise.all(subgroups.map(async (subgroup) => subgroup));\n return loadedSubgroups.length > 0 && loadedSubgroups.some((subgroup) => subgroup.isAccessControl);\n })();\n }\n\n /**\n * List of devices that don't support schedules\n */\n @computed(\n 'args.deviceAccess.accessPointCollectionsSummary.selectedDevicesWithoutScheduleSupport',\n 'identityManager.isEnterprise'\n )\n get selectedDevicesWithoutScheduleSupport(): (string | Promise)[] {\n const devicesWithoutScheduleSupport = get(\n get(this.args.deviceAccess, 'accessPointCollectionsSummary') ?? {},\n 'selectedDevicesWithoutScheduleSupport'\n );\n\n if (!devicesWithoutScheduleSupport) {\n return [];\n }\n\n if (!this.identityManager.isEnterprise) {\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error accessPointCollectionsSummary is async, so we should await it (above) before we query it's properties.\n return devicesWithoutScheduleSupport.map((item) => item.deviceName);\n }\n\n // DO NOT COPY THIS, PLEASE IMPLEMENT THE SUGGESTION AND TEST.\n // @ts-expect-error accessPointCollectionsSummary is async, so we should await it (above) before we query it's properties.\n return devicesWithoutScheduleSupport.map(async (accessPointItem) => {\n const system = await get(get(accessPointItem, 'accessPointCollection'), 'system');\n return `${accessPointItem.deviceName} (${system.description})`;\n });\n }\n\n /**\n * The options to display for how an access period should be restricted.\n */\n @computed(\n 'args.deviceAccess.{isAllTimesSelected,isWeeklyScheduleSelected,isTemporaryScheduleSelected,userType,isCreationFlow}',\n 'weeklyScheduleCopy',\n 'temporaryScheduleCopy'\n )\n get scheduleOptions(): BinaryListItem<{ id: number }>[] {\n const { deviceAccess } = this.args;\n\n const availableUserSchedules = generateAvailableUserSchedulesButtons.call(\n this,\n deviceAccess,\n this.weeklyScheduleCopy,\n this.temporaryScheduleCopy\n );\n\n return availableUserSchedules.map(\n ([id, key, state = false]: [number, string, boolean]) =>\n new BinaryListItem({\n label: this.intl.tc(this, key),\n state,\n props: { id }\n })\n );\n }\n\n /**\n * Is the login able to select the weekly schedule option.\n */\n @computed('scheduleOptions')\n get canSelectWeeklySchedule(): boolean {\n return (\n this.scheduleOptions != undefined &&\n this.scheduleOptions.some((schedule) => schedule.props.id === WEEKLY_SCHEDULE_ID)\n );\n }\n\n /**\n * Is the login able to select the weekly schedule option.\n */\n @computed('scheduleOptions')\n get canSelectTemporarySchedule(): boolean {\n return (\n this.scheduleOptions != undefined &&\n this.scheduleOptions.some((schedule) => schedule.props.id === TEMPORARY_SCHEDULE_ID)\n );\n }\n\n /**\n * Should we show an information blurb explaining how this user's access will start early?\n */\n @computed('args.permissions.userCodeEarlyAccessMinutes')\n get showEarlyAccessInformation(): string | undefined {\n const { userCodeEarlyAccessMinutes } = this.args.permissions;\n if (userCodeEarlyAccessMinutes && userCodeEarlyAccessMinutes > 0) {\n return this.intl.tc(this, 'earlyAccess', {\n minutes: userCodeEarlyAccessMinutes\n });\n }\n\n return undefined;\n }\n\n @tracked\n weeklyScheduleCopy: WeeklySchedule | null | undefined;\n\n @tracked\n temporaryScheduleCopy: TemporarySchedule | null | undefined;\n\n @alias('args.deviceAccess.optOutOfExpiredUserRemoval')\n optOutOfExpiredUserRemovalEnabled = false;\n\n @action\n optOutOfExpiredUserDeleteSwitch(): void {\n this.optOutOfExpiredUserRemovalEnabled = !this.optOutOfExpiredUserRemovalEnabled;\n }\n\n @computed(\n 'identityManager.pointCentralIdentity.hasDeleteExpiredInactivePCUsersFeatureToggle',\n 'temporaryScheduleCopy',\n 'args.deviceAccess.shouldShowOptOutOfExpiredUserRemoval'\n )\n get showOptOutOfExpiredUserRemovalCheckbox() {\n return (\n (this.identityManager.pointCentralIdentity?.hasDeleteExpiredInactivePCUsersFeatureToggle ?? false) &&\n (this.args.deviceAccess.shouldShowOptOutOfExpiredUserRemoval ?? false) &&\n this.temporaryScheduleCopy\n );\n }\n\n // endregion\n\n // region Actions\n\n /**\n * Callback for when a schedule option has changed.\n */\n @action\n scheduleOptionChanged(scheduleItems: AccessPeriodComponent['scheduleOptions']): void {\n const scheduleItem = scheduleItems.find((schedule) => schedule.state);\n const id = scheduleItem?.props?.id;\n\n setProperties(this.args.deviceAccess, {\n weeklySchedule: null,\n temporarySchedule: null\n });\n\n // Remove our local copy and pass it up\n this.weeklyScheduleCopy = null;\n this.args.onWeeklyScheduleUpdate(this.weeklyScheduleCopy);\n this.temporaryScheduleCopy = null;\n this.args.onTemporaryScheduleUpdate(this.temporaryScheduleCopy);\n\n if (id === WEEKLY_SCHEDULE_ID) {\n this.weeklyScheduleCopy = new WeeklySchedule(this, {\n beginTime: NINE_AM,\n endTime: FIVE_PM,\n selectedDays: DEFAULT_DAYS\n });\n this.args.onWeeklyScheduleUpdate(this.weeklyScheduleCopy);\n } else if (id === TEMPORARY_SCHEDULE_ID) {\n this.addTemporarySchedule();\n this.args.onTemporaryScheduleUpdate(this.temporaryScheduleCopy);\n this.optOutOfExpiredUserRemovalEnabled = false;\n }\n }\n\n /**\n * Updates the temporary schedule with the values being sent up from the date time range picker component\n */\n @action updateTemporarySchedule({ startDate, endDate }: { startDate: Date; endDate: Date }): void {\n const temporarySchedule = this.temporaryScheduleCopy,\n { beginDateTime, endDateTime } = temporarySchedule ?? {},\n changes = {} as Partial;\n\n if (startDate && (!beginDateTime || !isEqual(startDate, beginDateTime))) {\n changes.beginDateTime = startDate;\n }\n\n if (endDate && (!endDateTime || !isEqual(endDate, endDateTime))) {\n changes.endDateTime = endDate;\n }\n\n if (Object.keys(changes).length) {\n setProperties(this.temporaryScheduleCopy, changes);\n this.args.onTemporaryScheduleUpdate(this.temporaryScheduleCopy);\n }\n }\n\n /**\n * Callback for when a weekly schedule is changed.\n */\n @action\n updateWeeklySchedule({ selectedDays, beginTimeInMinutes, endTimeInMinutes }: SchedulePickerUpdates): void {\n if (\n beginTimeInMinutes !== this.weeklyScheduleCopy?.beginTime ||\n endTimeInMinutes !== this.weeklyScheduleCopy?.endTime ||\n selectedDays?.length !== this.weeklyScheduleCopy?.selectedDays?.length ||\n selectedDays == undefined ||\n this.weeklyScheduleCopy.selectedDays.some((element, index) => selectedDays[index] !== element)\n ) {\n setProperties(this.weeklyScheduleCopy, {\n beginTime: beginTimeInMinutes,\n endTime: endTimeInMinutes,\n selectedDays\n });\n\n this.args.onWeeklyScheduleUpdate(this.weeklyScheduleCopy);\n }\n }\n\n // endregion\n\n /**\n * Adds a temporary schedule to the temporaryScheduleCopy\n */\n private addTemporarySchedule(): void {\n const {\n permissions: { userCodeStartTimeMinutesFromMidnight, userCodeEndTimeMinutesFromMidnight }\n } = this.args;\n\n // By default, set the begin datetime to be now and the end datetime to be a month from now.\n let beginDateTime = new Date(),\n endDateTime = addMonths(beginDateTime, 1);\n\n // If the selected group has established start and end times they'd like user for each user, defined in the permissions, set them here.\n if (userCodeStartTimeMinutesFromMidnight && userCodeEndTimeMinutesFromMidnight) {\n const midnightToday = new Date().setHours(0, 0, 0, 0),\n midnightTomorrow = addDays(new Date().setHours(0, 0, 0, 0), 1);\n\n beginDateTime = addMinutes(midnightToday, userCodeStartTimeMinutesFromMidnight);\n endDateTime = addMinutes(midnightTomorrow, userCodeEndTimeMinutesFromMidnight);\n }\n\n this.temporaryScheduleCopy = new TemporarySchedule(this, {\n beginDateTime,\n endDateTime\n });\n setProperties(this.args.deviceAccess, {\n weeklySchedule: null\n });\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::AccessPeriod': typeof AccessPeriodComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n {{#if (and (is-enterprise) @deviceAccess.isCreationFlow)}}\\n \\n {{/if}}\\n \\n \\n
\\n\\n\",{ moduleName: \"customer-site/components/users/item/device-access/user-code/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action, computed, set, get } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { scheduleOnce } from '@ember/runloop';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type BasePermissionsCollection from 'customer-site/models/users/base-permissions-collection';\nimport type AjaxService from 'customer-site/services/ajax';\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport interface UserCodeComponentSignature {\n Args: {\n deviceAccess: DeviceAccessModel;\n permissions: BasePermissionsCollection;\n description?: string;\n readOnly?: boolean;\n userCode?: string;\n };\n}\n\nfunction setUserCode(deviceAccess: DeviceAccessModel, userCode: string): void {\n set(deviceAccess, 'userCode', userCode);\n}\n\n/**\n * @classdesc\n * Component for editing and generating user codes.\n */\n@intlPath({ path: 'users/item/device-access/user-code' })\nexport default class UserCodeComponent extends Component {\n @service declare ajax: AjaxService;\n @service declare contextManager: ContextManager;\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n\n constructor(owner: unknown, args: UserCodeComponentSignature['Args']) {\n super(owner, args);\n\n const { userCode, deviceAccess } = args;\n if (userCode) {\n // Do not copy this deprecated usage. If you see this, please fix\n // eslint-disable-next-line ember/no-runloop\n scheduleOnce('afterRender', this, setUserCode, deviceAccess, userCode);\n this.initialUserCode = userCode;\n }\n }\n\n /**\n * The initial pin code associated with the user.\n */\n initialUserCode = '';\n\n /**\n * Whether we are in a PointCentral context.\n */\n @alias('contextManager.isPointCentral')\n declare isPointCentral: boolean;\n\n /**\n * Whether we are hiding the pin code from the login or not. We will hide the code if the login\n * doesn't have permissions to view user codes, or if we have obscured the user code from them.\n */\n @computed('args.permissions.canViewUserCodes')\n get hidePinCode(): boolean {\n return !this.args.permissions.canViewUserCodes;\n }\n\n /**\n * Whether the user pin input component should be disabled.\n */\n @computed('args.{deviceAccess.canChangeUserCode,readOnly}')\n get disableUserPinInput(): boolean {\n const { deviceAccess, readOnly } = this.args;\n if (!deviceAccess || get(deviceAccess, 'isLoading')) {\n return !!readOnly;\n }\n\n return !!readOnly || !deviceAccess.canChangeUserCode;\n }\n\n /**\n * This calls the action to use in the pin-code component to generate a new pin.\n *\n * PointCentral has a setting to hide pins from the login, so we must use a method that generates a new pin and saves device access\n * in the backend so the pin isn't sent to the front-end in the payload.\n */\n @action actionForPinCodeComponent(): Promise {\n if (this.isPointCentral) {\n return this.generateNewCodeAndSave();\n }\n\n return this.generateRandomPin();\n }\n\n // endregion\n\n // region Actions\n\n /**\n * Update user code.\n *\n * @note This is a kind of hack until we save separate relationships instead of the whole user.\n * The reason why we cannot do it in the typical way is because the errors are on the user model and\n * not on the deviceAccess model. Hence, changing the userCode on deviceAccess does not clear the error message.\n * I tried a bunch of other things and this is the only one that worked.\n *\n * @note We should revisit this with new Ember-data.\n */\n @action updateUserCode(userCode: string): void {\n const { deviceAccess } = this.args;\n\n // Clear the error from the errors list in case it was there.\n // This is deprecated, but it will do the job for now.\n deviceAccess.errors.remove('userCode');\n\n // Update user code.\n set(deviceAccess, 'userCode', userCode);\n }\n\n /**\n * Makes a request for a new valid user code and returns a promise that will resolve with the code.\n */\n @action async generateRandomPin(): Promise {\n const { deviceAccess } = this.args;\n let pinCode = deviceAccess.userCode;\n\n try {\n pinCode = await this.ajax.apiRequestForValue(\n `users/access/deviceAccesses/generateUniqueUserCode/${deviceAccess.id}`\n );\n } catch (error) {\n this.notificationManager.addError(error.errors[0].detail);\n }\n\n return pinCode;\n }\n\n /**\n * Makes a request to generate a new code and save the device access in the backend. This prevents from a new code from being\n * sent to the front-end.\n */\n @action async generateNewCodeAndSave(): Promise {\n const { deviceAccess } = this.args;\n try {\n await this.ajax.apiRequest(\n `users/access/deviceAccesses/${deviceAccess.id}/generateNewCodeAndSave`,\n undefined,\n null,\n 'POST'\n );\n this.notificationManager.addSuccess(this.intl.t('classes.users.edit.updatesHaveBeenSaved'));\n deviceAccess.reload();\n this.contextManager.transitionToPreviousRoute();\n } catch (error) {\n this.notificationManager.addError(error.errors[0].detail);\n return Promise.reject();\n }\n\n return deviceAccess.userCode;\n }\n\n // endregion\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::Item::DeviceAccess:UserCode': typeof UserCodeComponent;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{#if @editOnItemClick}}\\n {{!-- @glint-expect-error Please convert this component to TS. --}}\\n \\n{{else}}\\n {{! This template is in charge of rendering checkboxes next to each user\\n When the bulk actions button is clicked, checkboxes should appear next to each user }}\\n \\n \\n {{!-- @glint-expect-error Please convert this component to TS. --}}\\n \\n \\n \\n{{/if}}\\n\\n\\n\",{ moduleName: \"customer-site/components/users/list/checkbox-user-item/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport templateOnlyComponent from '@ember/component/template-only';\n\nimport './_style.scss';\nimport type User from 'customer-site/models/users/user';\n\ninterface UsesListCheckboxUserItemSignature {\n Args: {\n user: User;\n selectUserAction: (user: User) => void;\n routeMap: Record;\n hideUserCodes: boolean;\n canViewUserCodes: boolean;\n hidePanelSlotNumbers: boolean;\n canViewPanelSlotNumbers: boolean;\n showSmrfStatus: boolean;\n afterUserDeleted: (userId: string) => Promise;\n editOnItemClick: boolean;\n collapse: boolean;\n displayOrHideCheckbox: string;\n canLoginMergeUser: boolean;\n };\n}\n\nconst UsesListCheckboxUserItem = templateOnlyComponent();\nexport default UsesListCheckboxUserItem;\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::List::CheckboxUserItem': typeof UsesListCheckboxUserItem;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n \\n {{#if failedSystems}}\\n

{{tc this \\'pinLocationFailuresDescription\\'}}

\\n {{#each failedSystems as |system|}}\\n
\\n

{{system.description}}

\\n \\n \\n
\\n {{/each}}\\n {{else}}\\n

{{tc this \\'allLocationsSyncing\\'}}

\\n {{/if}}\\n
\\n
\\n\",{ moduleName: \"customer-site/components/modals/users/failed-pin-locations/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action, computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type AdcAjaxService from '@adc/ajax/services/adc-ajax';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type System from 'customer-site/models/systems/system';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\ninterface FailedPinLocationModalArgs {\n model: {\n deviceAccess: Promise;\n };\n}\n\n/**\n * Displays a list of the locations on which the user's code failed to update.\n */\n@intlPath({ path: 'modals/users/failed-pin-locations' })\nexport default class FailedPinLocationsModal extends Component {\n @service declare ajax: AdcAjaxService;\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n @service declare identityManager: IdentityManager;\n\n /**\n * Returns all of the failedSystems on the accessPointCollectionsSummary.\n */\n @computed('args.model.deviceAccess.accessPointCollectionsSummary.failedSystems')\n get allFailedSystems(): Promise {\n return (async () => {\n const deviceAccess = await this.args.model.deviceAccess,\n accessPointCollectionsSummary = await deviceAccess.accessPointCollectionsSummary,\n failedSystems = await Promise.all(accessPointCollectionsSummary.failedSystems);\n return failedSystems;\n })();\n }\n\n /**\n * Whether or not there are any failedSystems on the accessPointCollectionsSummary.\n */\n @computed('allFailedSystems')\n get areAnyFailedSystems(): Promise {\n return (async () => {\n const failedSystems = await this.allFailedSystems;\n return failedSystems.length > 0;\n })();\n }\n\n /**\n * Returns all of the failedSystems on the accessPointCollectionsSummary within the currently selected system group.\n */\n @computed('allFailedSystems', 'identityManager.identityModel.selectedSystemGroup.systems')\n get selectedFailedSystems(): Promise {\n return (async () => {\n const selectedSystemGroup = await this.identityManager.identityModel?.selectedSystemGroup,\n selectedSystems = await selectedSystemGroup?.systems,\n selectedIds = selectedSystems?.map((s) => s.id),\n failedSystems = await this.allFailedSystems;\n return failedSystems.filter((s) => selectedIds?.includes(s.id));\n })();\n }\n\n /**\n * Resends pending changes to all supplied systems,\n * or all systems the user has access to if no systems were provided.\n */\n @action\n async resendCodesForSystems(systems: System[] | undefined): Promise {\n try {\n const deviceAccess = await this.args.model.deviceAccess,\n accessPointCollectionsSummary = await deviceAccess.accessPointCollectionsSummary;\n\n systems ??= await this.selectedFailedSystems;\n\n await this.ajax.apiRequest(\n `users/access/deviceAccesses/resendUserCodes/${deviceAccess.id}`,\n undefined,\n {\n unitIds: systems.map((s) => s.unitId)\n },\n 'POST'\n );\n\n // Reload the device access to the updated userCodeStatus.\n await accessPointCollectionsSummary.reload();\n await deviceAccess.reload();\n } catch (error) {\n this.notificationManager.addError(error.errors[0].detail);\n }\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::Users::FailedPinLocations': typeof FailedPinLocationsModal;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"\\n
\\n \\n {{#each locationDropdownItems as |item|}}\\n
\\n

{{item.description}}

\\n\\n {{#if item.isPending}}\\n \\n

{{t \\'generic.pending\\'}}

\\n {{/if}}\\n
\\n {{/each}}\\n
\\n
\\n
\\n\",{ moduleName: \"customer-site/components/modals/users/user-access-locations-list/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { computed } from '@ember/object';\nimport { inject as service } from '@ember/service';\n\nimport './_style.scss';\nimport type User from 'customer-site/models/users/user';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\ninterface UserAccessLocationsListModalArgs {\n model: {\n user: User;\n };\n}\n\n/**\n * Displays a list of the locations that a user has access to.\n */\nexport default class UserAccessLocationsListModal extends Component {\n @service declare identityManager: IdentityManager;\n\n /**\n * Returns a list of the names of all locations the supplied user has access to.\n */\n @computed(\n 'args.model.user.deviceAccess.accessPointCollectionsSummary.{systemsWithAccess,pendingSystems}',\n 'args.model.user.deviceAccess.systemsWithAccessPlanAccess',\n 'identityManager.identityModel.selectedSystemGroup.allNestedSystemIds'\n )\n get locationDropdownItems(): Promise<{ description: string; isPending: boolean }[]> {\n return (async () => {\n const deviceAccess = await this.args.model.user.deviceAccess,\n selectedSystemGroup = await this.identityManager.identityModel?.selectedSystemGroup,\n allNestedSystemIds = await selectedSystemGroup?.allNestedSystemIds,\n [accessPointCollectionsSummary, systemsWithAccessPlanAccess] = await Promise.all([\n deviceAccess.accessPointCollectionsSummary,\n deviceAccess.systemsWithAccessPlanAccess\n ]),\n [systemsWithAccess, pendingSystems] = await Promise.all([\n accessPointCollectionsSummary.systemsWithAccess,\n accessPointCollectionsSummary.pendingSystems\n ]),\n resolvedSystemsWithAccess = await Promise.all(systemsWithAccess),\n resolvedPendingSystems = await Promise.all(pendingSystems),\n systemIdsWithAccess = resolvedSystemsWithAccess.map((s) => s.id),\n pendingSystemIds = resolvedPendingSystems.map((s) => s.id);\n\n // Add any systems that the user has access to through access plans.\n systemsWithAccessPlanAccess.forEach((s) => {\n if (!systemIdsWithAccess.includes(s.id)) {\n resolvedSystemsWithAccess.push(s);\n }\n });\n\n // We only want to show systems that the user has access to that are within the currently selected group.\n return resolvedSystemsWithAccess\n .filter((s) => allNestedSystemIds?.includes(s.id))\n .map(({ id, description }) => ({\n description,\n isPending: pendingSystemIds.includes(id)\n }))\n .sort((a, b) => a.description.localeCompare(b.description));\n })();\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Modals::Users::UserAccessLocationsList': typeof UserAccessLocationsListModal;\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"{{! template-lint-disable no-invalid-interactive }}\\n\\n {{#unless (media \\'isMobile\\')}}\\n {{#if this.user.isSmrfSupported}}\\n
\\n {{#let (await (promise-hash-tracked status=this.smrfStatus count=this.smrfReviewCount)) as |smrf|}}\\n

\\n \\n {{smrf.status.text}}\\n

\\n {{#if smrf.count}}\\n

{{smrf.count}}

\\n {{/if}}\\n {{/let}}\\n
\\n {{/if}}\\n\\n
\\n
\\n {{#if this.userCodeFailed}}\\n
\\n \\n
    \\n
  • {{t \\'generic.failed\\'}}
  • \\n {{#if (and this.isEnterprise this.shouldLoadAccessPointInformation)}}\\n
  • {{this.user.deviceAccess.accessPointCollectionsSummary.failedLocationCount}}
  • \\n {{/if}}\\n
\\n \\n
\\n {{else if this.isEnterprise}}\\n
\\n {{#if this.user.deviceAccess.locationCount }}\\n \\n \\n
    \\n
  • {{t (if this.user.deviceAccess.hasAllLocationAccess \\'generic.locationsAll\\' \\'generic.locations\\')}}
  • \\n
  • {{this.user.deviceAccess.locationCount}}
  • \\n
\\n {{#if (and this.userCodePending this.shouldLoadAccessPointInformation)}}\\n
    \\n
  • {{tc this \\'pinCodes\\'}}
  • \\n
  • {{this.user.deviceAccess.accessPointCollectionsSummary.pendingLocationCount}}
  • \\n
\\n {{/if}}\\n
\\n {{/if}}\\n
\\n {{/if}}\\n
\\n\\n
\\n {{#if this.user.deviceAccess.scheduleSummaryBadge}}\\n \\n {{/if}}\\n
\\n \\n {{/unless}}\\n\\n {{#if this.showSlotNumber}}\\n
\\n {{this.panelSlotNumber}}\\n
\\n {{/if}}\\n {{#if this.showCodeBadge}}\\n
\\n \\n
\\n {{/if}}\\n
\\n {{#if this.codeStatusIcon}}\\n \\n {{/if}}\\n
\\n\\n\",{ moduleName: \"customer-site/components/users/list/user-item/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport { tracked } from '@glimmer/tracking';\nimport { action, computed } from '@ember/object';\nimport { alias, equal } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport FailedPinLocations from 'customer-site/components/modals/users/failed-pin-locations/index';\nimport UserAccessLocationsList from 'customer-site/components/modals/users/user-access-locations-list/index';\nimport { Failed, Pending, Duplicated } from 'customer-site/enums/AccessPointUserCodeStatus';\nimport { NOT_CALIBRATED, PARTIALLY_CALIBRATED, FULLY_CALIBRATED } from 'customer-site/models/users/smrf-status';\nimport { intlPath } from '@adc/i18n/path';\nimport BaseUserItem from '../base-user-item/index';\n\nimport './_style.scss';\n\n/**\n * Displays a single User in the Users view.\n *\n * NOTE: Please avoid loading the AccessPointCollectionsSummary model on this component for enterprise users since it will drastically impact performance.\n *\n * @param {boolean} hideUserCodes Indicates if the user codes column should be hidden.\n * @param {boolean} canViewUserCodes Indicates if the user is allowed to view others user codes.\n * @param {object|undefined} routeMap Maps routes for click action.\n * @param {models.users.User} user\n * @param {boolean} showSmrfStatus Indicates whether to show the SMRF status for this user.\n * @param {function} afterUserDeleted Method to call after a user is deleted.\n */\n@intlPath({ path: 'users.list.user-item' })\nexport default class UserItemComponent extends BaseUserItem {\n layoutName = 'components/users/list/user-item';\n\n @service intl;\n @service contextManager;\n @service notificationManager;\n @service modals;\n @service ajax;\n @service store;\n\n // region Passed Properties\n\n /**\n * Indicates whether to show the SMRF status for this user.\n *\n * @type {boolean}\n */\n showSmrfStatus = false;\n\n /**\n * Determines whether we want to send an editUser action when this item is clicked anywhere.\n * Also helps us determine if the action buttons should be shown or not.\n *\n * @type {boolean}\n */\n @tracked\n editOnItemClick = true;\n\n /**\n * Indicates if the user codes column should be hidden.\n *\n * @type {boolean}\n */\n hideUserCodes = true;\n\n /**\n * Indicates if the user is allowed to view others user codes.\n *\n * @type {boolean}\n */\n canViewUserCodes = false;\n\n /**\n * Maps routes for click action.\n *\n * {object|undefined}\n */\n routeMap = undefined;\n\n /**\n * Whether or not the modal for displaying specific locations is open.\n *\n * @type {boolean}\n */\n @tracked\n isLocationsModalOpen = false;\n\n // endregion\n\n // region Computed Properties\n\n /**\n * Shortcut to the AccessPointUserCodeStatus enum relating to this user item.\n *\n * @type {number}\n */\n @alias('user.deviceAccess.userCodeStatus')\n codeStatus;\n\n /**\n * Whether or not the user code status is \"Failed\".\n *\n * @type {boolean}\n */\n @equal('codeStatus', Failed)\n userCodeFailed;\n\n /**\n * Whether or not the user code status is \"Pending\".\n *\n * @type {boolean}\n */\n @equal('codeStatus', Pending)\n userCodePending;\n\n /**\n * Indicates whether the user codes column should be visible.\n *\n * @type {boolean}\n */\n @computed('canViewUserCodes', 'hideUserCodes')\n get showCodeBadge() {\n const { canViewUserCodes, hideUserCodes } = this;\n\n return canViewUserCodes && !hideUserCodes;\n }\n\n /**\n * Indicates whether the panel slot number column should be visible.\n *\n * @type {boolean}\n */\n @computed('canViewPanelSlotNumbers', 'hidePanelSlotNumbers')\n get showSlotNumber() {\n return this.canViewPanelSlotNumbers && !this.hidePanelSlotNumbers;\n }\n\n /**\n * Filter for truthy panel slot numbers (exclude 0)\n *\n * @type {number|undefined}\n */\n @computed('user.deviceAccess.panelSlotNumber')\n get panelSlotNumber() {\n const slotNumber = this.user?.get('deviceAccess.panelSlotNumber');\n return slotNumber === '-1' ? this.intl.t('generic.master') : slotNumber || undefined;\n }\n\n /**\n * The icon representing the current user code status.\n *\n * @returns {undefined|{name: string, title: string}}\n */\n @computed('showCodeBadge', 'user.deviceAccess.userCodeStatus')\n get codeStatusIcon() {\n let status = this.user?.get('deviceAccess.userCodeStatus');\n\n // Do not show this icon if the pin-badge is visible. We are rendering it separately, inside that component.\n if (this.showCodeBadge) {\n return undefined;\n }\n\n switch (status) {\n case Duplicated:\n case Failed:\n return { name: 'issue', title: this.intl.t('generic.issue') };\n case Pending:\n return { name: 'sync', title: this.intl.t('generic.synchronization') };\n default:\n return undefined;\n }\n }\n\n /**\n * Returns the appropriate icon name for the user code status.\n * @returns {string}\n */\n @computed('codeStatus')\n get locationsIcon() {\n switch (this.codeStatus) {\n case Pending:\n return 'sync';\n case Failed:\n return 'issue';\n default:\n return 'property-manage';\n }\n }\n\n /**\n * Indicates whether the smrf status column should be visible.\n *\n * @type {boolean}\n */\n @computed('showSmrfStatus', 'user.smrfIsSupported')\n get smrfStatusVisible() {\n const { user } = this;\n return this.showSmrfStatus && user && user.isSmrfSupported;\n }\n\n /**\n * The current SMRF status for this user.\n *\n * @type {Promise}\n */\n @computed('smrfStatusVisible', 'user.smrfStatus.calibrationState')\n get smrfStatus() {\n if (!this.smrfStatusVisible) {\n return null;\n }\n\n return (async () => {\n const state = (await this.user?.smrfStatus)?.calibrationState;\n return {\n icon: {\n [NOT_CALIBRATED]: 'access-none',\n [PARTIALLY_CALIBRATED]: 'access-partial',\n [FULLY_CALIBRATED]: 'circle-o-check'\n }[state],\n text: this.intl.tc(this, 'facialRecognition')\n };\n })();\n }\n\n /**\n * The count of smrf images for review, which may not be visible based on current smrf status.\n *\n * @type {Promise}\n */\n @computed('smrfStatusVisible', 'user.smrfStatus.{calibrationState,unknownImages.[]}')\n get smrfReviewCount() {\n if (!this.smrfStatusVisible) {\n // Nothing to show.\n return null;\n }\n\n return (async () => {\n const smrfStatus = await this.user?.smrfStatus,\n count = smrfStatus?.unknownImages.length;\n\n // Are there NO images to review OR is calibration already complete?\n if (count < 1 || smrfStatus?.calibrationState === FULLY_CALIBRATED) {\n // Nothing to show.\n return null;\n }\n\n // Show count of images to review.\n return htmlSafe(this.intl.tc(this, 'newImageCount', { count }));\n })();\n }\n\n /**\n * Toggles the visibility of the retry modal.\n */\n toggleRetryModal() {\n const { deviceAccess } = this.user;\n this.modals.showModal(FailedPinLocations, { deviceAccess });\n }\n\n /**\n * Sends a retry command to all devices on all systems the user has access to.\n * Note that this is usually only run in a single-system context.\n *\n * @returns {Promise}\n */\n async resendCodes() {\n const deviceAccess = await this.user.deviceAccess;\n\n try {\n await this.ajax.apiRequest(\n `users/access/deviceAccesses/resendUserCodes/${deviceAccess.id}`,\n null,\n null,\n 'POST'\n );\n // Reload the device access to the updated userCodeStatus.\n await deviceAccess.reload();\n return true;\n } catch (error) {\n this.notificationManager.addError(error.errors[0].detail);\n return false;\n }\n }\n\n // endregion\n\n /**\n * @override\n *\n * @param {models.users.User} user\n */\n @action\n editUser(user) {\n if (!user) {\n this.notificationManager.addError(this.intl.tc(this, 'errorEditUser'));\n return;\n }\n\n // Upon editing a PointCentral user, reload device access to get device access information about all the groups the login has access to.\n // The users list page only includes device access information about the currently selected group.\n if (this.isPointCentral) {\n user.deviceAccess.reload();\n }\n\n this.contextManager.transitionToNativeRoute(\n user.isEditSupported ? this.routeMap.userEdit : this.routeMap.userEditNotSupported,\n user.id\n );\n }\n\n /**\n * If we are listening for clicks on the whole item, sends an editUser action.\n *\n * @param {models.users.BaseUser} user\n */\n @action\n itemClicked() {\n if (this.editOnItemClick) {\n this.editUser(this.user);\n }\n }\n\n /**\n * Toggles the visibility of the locations modal.\n */\n @action\n toggleLocationsModal() {\n const { user } = this;\n this.modals.showModal(UserAccessLocationsList, { user });\n }\n\n /**\n * Opens the retry modal or sends a retry command.\n */\n @action\n retryButtonPressed() {\n if (this.isEnterprise) {\n this.toggleRetryModal();\n return;\n }\n\n return this.resendCodes();\n }\n\n /**\n * Called when a click event is raised on a container to stop propagating the event.\n *\n * @param {ClickEvent} evt\n */\n @action\n stopPropagation(evt) {\n evt.stopPropagation();\n }\n}\n","import { precompileTemplate } from \"@ember/template-compilation\";\nexport default precompileTemplate(\"
\\n
\\n
\\n

{{this.editNotSupportedReason}}

\\n {{#if (await this.systemGroupItemToNavigateTo)}}\\n

{{await this.navigateToHigherLevelUsersGroupText}}

\\n {{/if}}\\n
\\n
\\n
\",{ moduleName: \"customer-site/components/users/not-supported/index.hbs\" })","/* import __COLOCATED_TEMPLATE__ from './index.hbs'; */\nimport Component from '@glimmer/component';\nimport { action, computed } from '@ember/object';\nimport { alias } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { htmlSafe } from '@ember/template';\nimport { intlPath } from '@adc/i18n/path';\n\nimport './_style.scss';\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type RouterService from '@ember/routing/router-service';\nimport type { SafeString } from '@ember/template/-private/handlebars';\nimport type AvailableSystemItem from 'customer-site/models/systems/available-system-item';\nimport type { EditUserNotSupportedInfo } from 'customer-site/models/users/base-user';\nimport type User from 'customer-site/models/users/user';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type IdentityManager from 'customer-site/services/identity-manager';\n\ninterface UsersEditNotSupportedArgs {\n user?: User;\n}\n\n/**\n * Renders a component with information about why this user cannot be edited and if appropriate, provides a link to\n * edit the user on a higher level group.\n */\n@intlPath({ path: 'users/not-supported' })\nexport default class UsersEditNotSupportedComponent extends Component {\n @service declare contextManager: ContextManager;\n @service declare identityManager: IdentityManager;\n @service declare store: Store;\n @service declare router: RouterService;\n @service declare notificationManager: NotificationManager;\n @service declare intl: ADCIntlService;\n\n /**\n * The user we are attempting to edit.\n */\n @alias('args.user')\n declare user: User;\n\n /**\n * If the logged-in login can edit this user on the higher level group, editUserNotSupportedInfo.systemGroupIdToEditUser will\n * be populated with the system group id on which the user can be edited. It will also be populated with the reason why\n * the end-user cannot edit the selected user.\n */\n @alias('args.user.editUserNotSupportedInfo')\n declare editUserNotSupportedInfo: EditUserNotSupportedInfo;\n\n /**\n * Returns the reason why we can't edit this user.\n */\n @computed('editUserNotSupportedInfo.editNotSupportedReason', 'user.isEnterprise')\n get editNotSupportedReason(): SafeString | string {\n const { intl, editUserNotSupportedInfo } = this;\n if (!this.user?.get('isEnterprise')) {\n return intl.tc(this, 'notSupportedDescription');\n }\n\n return editUserNotSupportedInfo.editNotSupportedReason\n ? htmlSafe(editUserNotSupportedInfo.editNotSupportedReason)\n : intl.tc(this, 'cannotEditEnterpriseUserGenericDescription');\n }\n\n /**\n * The text to show as the link to navigate to the higher level group.\n */\n @computed('user.isEnterprise', 'systemGroupItemToNavigateTo.name')\n get navigateToHigherLevelUsersGroupText(): Promise {\n return (async () => {\n const systemGroupItem = await this.systemGroupItemToNavigateTo;\n\n if (!this.user.get('isEnterprise') || !systemGroupItem) {\n return undefined;\n }\n\n return htmlSafe(\n this.intl.tc(this, 'navigateToHigherLevelGroup', {\n groupName: systemGroupItem.name\n })\n );\n })();\n }\n\n /**\n * If the logged-in user has access to the higher level group on which this user can be\n * edited, return the available system item.\n */\n @computed('editUserNotSupportedInfo.systemGroupIdToEditUser')\n get systemGroupItemToNavigateTo(): Promise {\n return (async () => {\n const { systemGroupIdToEditUser } = this.editUserNotSupportedInfo || {};\n\n if (!systemGroupIdToEditUser) {\n return undefined;\n }\n\n // Try to find the available system item associated with the system group on which we can edit this user.\n try {\n const systemItems = await this.store.findAll('systems/available-system-item'),\n systemGroupToNavigateTo = systemItems.find((item) => item.id == `group-${systemGroupIdToEditUser}`);\n return systemGroupToNavigateTo;\n } catch (e) {\n return undefined;\n }\n })();\n }\n\n /**\n * Navigates to the higher level group and displays the user profile page on the user to edit.\n */\n @action\n async navigateToEditHigherLevelUser(): Promise {\n const systemGroupItem = await this.systemGroupItemToNavigateTo,\n userId = this.user?.get('id');\n if (!systemGroupItem || !userId) {\n this.displayTransitionErrorMessage();\n return;\n }\n\n try {\n // Transition to that group and then to the user profile page.\n await this.identityManager.switchContext(systemGroupItem);\n await this.router.transitionTo('enterprise.users.edit', userId);\n } catch (e) {\n this.displayTransitionErrorMessage();\n }\n }\n\n /**\n * Display an error message stating that there was an issue transitioning to edit the user.\n */\n displayTransitionErrorMessage(): void {\n this.notificationManager.addError(this.intl.tc(this, 'errorTransitioningToEditUser'));\n }\n}\n\ndeclare module '@glint/environment-ember-loose/registry' {\n export default interface Registry {\n 'Users::NotSupported': typeof UsersEditNotSupportedComponent;\n }\n}\n","import { getNextRouteForCreation } from 'customer-site/classes/users/edit/base-user-edit-controller';\nimport { EmberEditUserAccessPeriod, EmberUserEdit } from 'customer-site/enums/CustomerPageUrl';\nimport UserEditDeviceAccessRoute from '../device-access/route';\n\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type ParentRoute from '../route';\n\ntype Permissions = ModelFrom['permissions'];\n\n/**\n * @classdesc\n * The route for editing a users access period.\n */\nexport default class Route> extends UserEditDeviceAccessRoute {\n routeId = EmberEditUserAccessPeriod;\n\n parentRoute = 'users.edit';\n defaultEditRoute = EmberUserEdit;\n\n async afterModel(model: {\n permissions: Permissions;\n deviceAccess: Promise;\n }): Promise {\n const deviceAccess = await model.deviceAccess,\n accessPointCollectionsSummary = await deviceAccess?.accessPointCollectionsSummary;\n\n if (deviceAccess && accessPointCollectionsSummary?.cannotUseSchedules) {\n const { contextManager } = this;\n\n if (deviceAccess.isCreationFlow) {\n // Redirect to the next appropriate route.\n this.navigation.replaceWithRouteId(\n getNextRouteForCreation(contextManager, contextManager.isEnterprise, this.routeId)\n );\n } else {\n // Redirect to edit route.\n contextManager.transitionToPreviousRoute(this.defaultEditRoute);\n }\n }\n }\n}\n","import { tracked } from '@glimmer/tracking';\nimport { action, computed, set, get, setProperties } from '@ember/object';\nimport { alias, and, or } from '@ember/object/computed';\nimport {\n cancelEditPointCentralUser,\n hasNoDeviceAccessModal,\n handleRedirectAfterSaveOrCancelPointCentral\n} from 'customer-site/classes/helpers/pointcentral';\nimport BaseEditUserController, {\n userTypeSupportsDeviceAccess\n} from 'customer-site/classes/users/edit/base-user-edit-controller';\nimport { EmberUserEdit } from 'customer-site/enums/CustomerPageUrl';\nimport DeviceAccessModel, { ACCESS_TYPE } from 'customer-site/models/users/access/device-access';\n\nimport type AccessPointCollectionsSummaryModel from 'customer-site/models/users/access/access-point-collections-summary';\nimport type User from 'customer-site/models/users/user';\nimport type { ModelFrom, ResolvedObject } from 'customer-site/utils/type-utils';\nimport type ParentRoute from '../route';\nimport type Route from './route';\n\ntype RouteModel = ModelFrom>>;\ntype ResolvedModel = ResolvedObject<\n Pick\n>;\n\n/**\n * @classdesc\n * The route controller for editing a users device access.\n */\nexport default class DeviceAccessController extends BaseEditUserController {\n @tracked resolvedModel?: ResolvedModel;\n\n // region Computed Properties\n\n /** @override */\n baseUserEditRoute = EmberUserEdit;\n\n /**\n * Notifications Only users are not allowed device access for PointCentral.\n */\n @computed('contextManager.isPointCentral', 'resolvedModel.deviceAccess.resolvedUserType')\n get userTypeSupportsDeviceAccess(): boolean {\n const { deviceAccess } = this.resolvedModel ?? {};\n return !!deviceAccess && userTypeSupportsDeviceAccess(deviceAccess, this.contextManager.isPointCentral);\n }\n\n /** @ignore */\n @alias('resolvedModel.deviceAccess')\n deviceAccess?: DeviceAccessModel;\n\n @alias('deviceAccess.accessPointCollectionsSummary')\n accessPointCollectionsSummary?: AccessPointCollectionsSummaryModel;\n\n /**\n * Are we editing device-access for a just created user?\n */\n @alias('deviceAccess.isCreationFlow')\n isCreationFlow?: boolean;\n\n /**\n * Should we override redirect and navigate to the edit route next?\n */\n @alias('deviceAccess.shouldRedirectToEditRoute')\n shouldRedirectToEditRoute?: boolean;\n\n /**\n * Can this user be saved?\n *\n * NOTE: This is used in the template to control the confirmDisabled boolean.\n * Using the property directly results in an ember error when you visit the route a second time.\n */\n @or(\n 'resolvedModel.deviceAccess.canBeSaved',\n 'isCreationFlow',\n 'resolvedModel.deviceAccess.accessPointCollectionsSummary.hasBeenModified'\n )\n declare canBeSaved: boolean;\n\n /**\n * Have any of the offline access points been modified?\n */\n @alias('accessPointCollectionsSummary.hasDirtyOfflineAccessPoints')\n offlineAccessPointsHaveBeenModified?: boolean;\n\n /**\n * Has the device access been modified on an access point collection that contains an offline device?\n */\n @and('deviceAccess.hasBeenModified', 'accessPointCollectionsSummary.offlineAccessPointsHaveAccess')\n declare deviceAccessModified: boolean;\n\n /**\n * Has any element that impacts access point access been modified for an offline device?\n */\n @or('offlineAccessPointsHaveBeenModified', 'deviceAccessModified')\n declare offlineDeviceAccessHasBeenModified: boolean;\n\n /**\n * Represents a copy of the WeeklySchedule object on deviceAccess.\n */\n @tracked\n weeklyScheduleCopy?: DeviceAccessModel['weeklySchedule'];\n\n /**\n * Represents a copy of the TemporarySchedule object on deviceAccess.\n */\n @tracked\n temporaryScheduleCopy?: DeviceAccessModel['temporarySchedule'];\n\n /**\n * Represents the original user code\n */\n @tracked\n originalUserCode?: string;\n\n @action\n dataLoaded(resolvedModel: ResolvedModel): void {\n this.resolvedModel = resolvedModel;\n this.originalUserCode = resolvedModel.deviceAccess?.userCode;\n }\n\n /**\n * Is this access type NOT blocked by a schedule?\n */\n @computed('resolvedModel.deviceAccess.{accessTypeId,showScheduledUserCodesWarning}')\n get accessTypeNotBlockedBySchedule(): boolean {\n const { deviceAccess } = this;\n if (!deviceAccess) {\n return false;\n }\n\n const { accessTypeId } = deviceAccess;\n\n // Some devices don't support schedules, which is reflected in deviceAccess.showScheduledUserCodesWarning.\n // We only care about those devices for the \"All Devices\" access types though.\n return !(\n deviceAccess.showScheduledUserCodesWarning &&\n (accessTypeId === ACCESS_TYPE.ALL_EXISTING_FUTURE_ID || accessTypeId === ACCESS_TYPE.ALL_EXISTING_ID)\n );\n }\n\n /**\n * Are we in a PointCentral context?\n */\n @alias('contextManager.isPointCentral')\n declare isPointCentral: boolean;\n\n /**\n * Can user codes be edited based on the canEditExistingUserCodes permission.\n */\n get hasPermissionToEditUserCodes(): boolean {\n return !!(this.isCreationFlow ? true : this.permissions.get('canEditExistingUserCodes'));\n }\n\n /**\n * Is there any device with no access.\n */\n @computed(\n 'originalUserCode',\n 'resolvedModel.deviceAccess.accessPointCollectionsSummary.lockAccessPoints.@each.{canGetAccess,hasAccess}'\n )\n get allToggledDevicesCanGetAccess(): Promise {\n return (async () => {\n if (this.originalUserCode === '') {\n return true;\n }\n\n const deviceAccess = this.resolvedModel?.deviceAccess,\n accessPointCollectionsSummary = await deviceAccess?.accessPointCollectionsSummary,\n lockAccessPoints = accessPointCollectionsSummary?.lockAccessPoints;\n\n if (!lockAccessPoints) {\n return true;\n }\n\n return !lockAccessPoints.any((accessPointItem) => {\n return accessPointItem.hasAccess && !accessPointItem.canGetAccess;\n });\n })();\n }\n\n /**\n * Should show schedule time section.\n */\n get shouldShowSchedule(): boolean {\n return !!this.permissions.get('canEditExistingUserCodes');\n }\n\n /**\n * If the copy has been set, check if it is valid.\n * If it has not been set, assume we have selected another schedule type.\n */\n @computed('weeklyScheduleCopy.isValid')\n get isWeeklyScheduleCopyValid(): boolean {\n return this.weeklyScheduleCopy?.isValid ?? true;\n }\n\n /**\n * If the copy has been set, check if it is valid.\n * If it has not been set, assume we have selected another schedule type.\n */\n @computed('temporaryScheduleCopy.isValid')\n get isTemporaryScheduleCopyValid(): boolean {\n return this.temporaryScheduleCopy?.isValid ?? true;\n }\n\n /**\n * Is the 'Save' button enabled on the device access page.\n */\n @and(\n 'canBeSaved',\n 'userTypeSupportsDeviceAccess',\n 'accessTypeNotBlockedBySchedule',\n 'hasPermissionToEditUserCodes',\n 'isWeeklyScheduleCopyValid',\n 'isTemporaryScheduleCopyValid',\n 'allToggledDevicesCanGetAccess'\n )\n declare canSaveDeviceAccess: boolean;\n\n // endregion\n\n // region Actions\n\n @action\n confirmDeviceAccessSave(deviceAccess: DeviceAccessModel, buttonAnimation: Promise): false | Promise {\n if (this.offlineDeviceAccessHasBeenModified) {\n this.modals.showConfirmationDialog(\n this.intl.tc(this, 'offlineDevice'),\n this.intl.tc(this, 'offlineDeviceDescription'),\n {\n action: () => this.saveDeviceAccess(deviceAccess)\n }\n );\n return false;\n }\n\n return this.saveDeviceAccess(deviceAccess, buttonAnimation);\n }\n\n /**\n * Saves the device access model.\n */\n saveDeviceAccess(deviceAccess: DeviceAccessModel, buttonAnimation?: Promise): Promise {\n // Only update here if we show the access period selection on the device access page.\n // Otherwise, will break other creation flows / edits.\n if (!this.shouldShowSchedule && !this.model.alreadySaved) {\n // Update the model with our copy.\n deviceAccess.weeklySchedule = this.weeklyScheduleCopy ?? null;\n deviceAccess.temporarySchedule = this.temporaryScheduleCopy ?? null;\n }\n\n return (this.isPointCentral ? saveDeviceAccessModelPointCentral : saveDeviceAccessModel).call(\n this,\n deviceAccess,\n buttonAnimation\n );\n }\n\n /**\n * Device Access and returns the users edit route.\n */\n @action\n cancel(): void | ReturnType {\n const { deviceAccess } = this;\n if (this.isPointCentral && deviceAccess?.isCreationFlow) {\n cancelEditPointCentralUser.call(this, deviceAccess);\n return;\n }\n\n return handleRedirectAfterSaveOrCancel.call(this, deviceAccess);\n }\n\n /**\n * Method which brings up the view modal up to this controller to save.\n */\n @action\n weeklyScheduleCopyUpdate(schedule: DeviceAccessModel['weeklySchedule']): void {\n this.weeklyScheduleCopy = schedule;\n }\n\n /**\n * Method which brings up the view modal up to this controller to save.\n */\n @action\n temporaryScheduleCopyUpdate(schedule: DeviceAccessModel['temporarySchedule']): void {\n this.temporaryScheduleCopy = schedule;\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'users/edit/device-access': DeviceAccessController;\n }\n}\n\n/**\n * Saves the device-access model to the server.\n */\nasync function saveDeviceAccessModel(\n this: DeviceAccessController,\n deviceAccess: DeviceAccessModel,\n buttonAnimation?: Promise\n): Promise {\n const accessPointCollectionsSummary = await deviceAccess.accessPointCollectionsSummary,\n modelToSave = accessPointCollectionsSummary?.hasBeenModified ? accessPointCollectionsSummary : deviceAccess;\n\n try {\n await modelToSave.save();\n\n const fnDone = async () => {\n if (modelToSave instanceof DeviceAccessModel) {\n accessPointCollectionsSummary.deviceAccess = modelToSave;\n } else {\n deviceAccess.reload();\n }\n\n await handleRedirectAfterSaveOrCancel.call(this, deviceAccess);\n };\n\n if (buttonAnimation) {\n buttonAnimation.then((isSuccess) => {\n if (isSuccess !== false) {\n fnDone();\n }\n });\n return Promise.resolve();\n }\n\n await fnDone();\n } catch (ex) {\n const { detail } = ex.errors?.firstObject ?? {};\n if (detail) {\n this.notificationManager.addError(detail);\n }\n\n return Promise.reject();\n }\n}\n\n/**\n * Save device access in a PointCentral context.\n */\nasync function saveDeviceAccessModelPointCentral(\n this: DeviceAccessController,\n deviceAccess: DeviceAccessModel,\n buttonAnimation?: Promise\n): Promise {\n const user = await deviceAccess.user,\n fnFinally = () => {\n // If we should send the welcome email by default, set the sendWelcomeEmailUponSave property to properly send one\n // upon saving device access.\n if (deviceAccess.isCreationFlow && user.shouldSendWelcomeEmailByDefault) {\n set(user, 'sendWelcomeEmailUponSave', true);\n }\n\n // If we should send the welcome text by default, set the sendWelcomeTextUponSave property to properly send one\n // upon saving device access.\n if (deviceAccess.isCreationFlow && user.shouldSendWelcomeTextByDefault) {\n set(user, 'sendWelcomeTextUponSave', true);\n }\n\n // Save device access.\n return saveDeviceAccessModel.call(this, deviceAccess, buttonAnimation);\n };\n\n if (!(get(deviceAccess, 'accessPointCollectionsSummary.hasNoDeviceAccess') && !deviceAccess.isAccessPaused)) {\n return fnFinally();\n }\n\n return new Promise((resolve) => {\n // If we are saving the user to have no device access, show a confirmation modal.\n hasNoDeviceAccessModal.call(\n this,\n async () => {\n // If we are creating the user, we don't need to save device access, since we can just rollback changes.\n if (deviceAccess.isCreationFlow) {\n handleRedirectAfterSaveOrCancelPointCentral.call(\n this,\n deviceAccess,\n deviceAccess.userType,\n deviceAccess.temporarySchedule?.beginDateTime,\n deviceAccess.temporarySchedule?.endDateTime\n );\n } else {\n fnFinally();\n }\n\n resolve();\n },\n () => resolve()\n );\n });\n}\n\n/**\n * Redirects to the appropriate page now that the model has been saved.\n */\nasync function handleRedirectAfterSaveOrCancel(\n this: DeviceAccessController,\n deviceAccess: DeviceAccessModel\n): Promise {\n // PointCentral handles redirecting a bit differently.\n if (this.isPointCentral) {\n return handleRedirectAfterSaveOrCancelPointCentral.call(\n this,\n deviceAccess,\n deviceAccess.userType,\n deviceAccess.temporarySchedule?.beginDateTime,\n deviceAccess.temporarySchedule?.endDateTime\n );\n }\n\n if (!(this.isCreationFlow || this.shouldRedirectToEditRoute)) {\n this.contextManager.transitionToPreviousRoute();\n return;\n }\n\n // Signal the end of the creation flow process and success of redirect to edit route.\n setProperties(deviceAccess, {\n isCreationFlow: false,\n shouldRedirectToEditRoute: false\n });\n\n // Sync user permissions because some panels may not support adding another duress user.\n await this.syncUserPermissions();\n\n this.navigation.replaceWithRouteId(this.baseUserEditRoute, deviceAccess.belongsTo('user').id());\n}\n","import BaseUsersEditIndexController from 'customer-site/classes/users/edit/index/controller';\nimport {\n EmberEditUserInformation,\n EmberUserEditLanguage,\n EmberEditUserAccessPeriod,\n EmberEditUserDeviceAccess,\n EmberEditUserType,\n EmberEditUserAttributes,\n EmberEditUserAttributesEdit,\n EmberUsersUsername,\n EmberUsers,\n EmberEditUserContactInformation\n} from '../../../enums/CustomerPageUrl';\n\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type ParentRoute from '../route';\n\nexport default class UsersEditIndexController extends BaseUsersEditIndexController {\n declare model: ModelFrom;\n\n routeMap = {\n accessPeriod: EmberEditUserAccessPeriod,\n deviceAccess: EmberEditUserDeviceAccess,\n userInformation: EmberEditUserInformation,\n languagePreference: EmberUserEditLanguage,\n userType: EmberEditUserType,\n addNewUserAttribute: EmberEditUserAttributes,\n editUserAttribute: EmberEditUserAttributesEdit,\n username: EmberUsersUsername,\n usernameRedirect: EmberUsers,\n userEditContactInformationRoute: EmberEditUserContactInformation\n };\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'users-edit-index': UsersEditIndexController;\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../../../classes/base-route';\nimport { EmberUserEdit } from '../../../enums/CustomerPageUrl';\n\nimport type ContextManager from 'customer-site/services/context-manager';\n\nexport default class UsersEditIndexRoute extends AdcBaseRoute {\n @service declare contextManager: ContextManager;\n\n routeId = EmberUserEdit;\n}\n","import AdcBaseRoute from '../../../classes/base-route';\nimport { EmberUserEditNotSupported } from '../../../enums/CustomerPageUrl';\n\n/**\n * @classdesc\n * A route displaying a message saying editing of this user is not supported.\n */\nexport default class EditNotSupportedRoute extends AdcBaseRoute {\n routeId = EmberUserEditNotSupported;\n}\n","import { inject as service } from '@ember/service';\nimport BaseUserEditRoute from 'customer-site/classes/users/edit/base-user-edit-route';\nimport { EmberUserEdit, EmberUserEditNotSupported } from 'customer-site/enums/CustomerPageUrl';\n\nimport type Transition from '@ember/routing/transition';\nimport type User from 'customer-site/models/users/user';\nimport type ContextManager from 'customer-site/services/context-manager';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type ParentRoute from '../route';\n\n/**\n * @classdesc Route for editing an existing profile/person\n */\nexport default class ResidentialUserEditRoute extends BaseUserEditRoute> {\n @service declare contextManager: ContextManager;\n\n routeId = EmberUserEdit;\n\n readonly userModelName = 'users/user';\n baseUsersRouteName = 'users';\n userEditNotSupportedRoute = EmberUserEditNotSupported;\n\n model(\n params: { id_user: string },\n transition: Transition\n ): ReturnType>['model']> & {\n isNew?: boolean;\n } {\n return {\n ...super.model(params, transition),\n isNew: params.id_user === 'new'\n };\n }\n}\n","import BaseController from 'customer-site/classes/users/edit/user-information/controller';\nimport { EmberUserEdit } from 'customer-site/enums/CustomerPageUrl';\n\nimport type User from 'customer-site/models/users/user';\n\n/**\n * The controller for editing the User Information section of a {@link models.users.User} model.\n */\nexport default class UserInformationController extends BaseController {\n baseUserEditRoute = EmberUserEdit;\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'user-information': UserInformationController;\n }\n}\n","import EditUserInfoBaseRoute from 'customer-site/classes/users/edit/user-information/route';\nimport { EmberEditUserInformation } from 'customer-site/enums/CustomerPageUrl';\n\nimport type User from 'customer-site/models/users/user';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type ParentRoute from '../route';\n\nexport default class ResidentialUserInformationRoute extends EditUserInfoBaseRoute> {\n routeId = EmberEditUserInformation;\n\n isAccessControl = false;\n\n async rollbackModelOnTransition(): Promise {\n const user = await this.currentModel.user;\n if (!user) {\n return;\n }\n\n // For the PointCentral user creation flow, we don't save device access until the end of the flow, so make sure not\n // to rollback any changes to the device access property on the user model here.\n if (this.contextManager.isPointCentral) {\n const deviceAccess = await user.deviceAccess;\n if (deviceAccess?.isCreationFlow) {\n deviceAccess.rollbackAttributes();\n }\n }\n\n super.rollbackModelOnTransition();\n }\n}\n","import { action, computed, get, set, setProperties } from '@ember/object';\nimport { or } from '@ember/object/computed';\nimport { inject as service } from '@ember/service';\nimport { OneTimeUser, None } from 'customer-site/enums/AccessPointUserType';\nimport {\n EmberEditUserDeviceAccess,\n EmberEnterpriseEditUserDeviceAccessAccessType\n} from 'customer-site/enums/CustomerPageUrl';\nimport { BinaryListItem } from '@adc/ui-components/components/simple-binary/list';\nimport DeviceAccessController from '../device-access/controller';\n\nimport type ADCIntlService from '@adc/i18n/services/adc-intl';\nimport type NotificationManager from '@adc/ui-components/services/notification-manager';\nimport type Store from '@ember-data/store';\nimport type DeviceAccessModel from 'customer-site/models/users/access/device-access';\n\n/**\n * @classdesc\n * The controller for editing the \"type\" of device-access (e.g. one-time user, temporary, etc).\n */\nexport default class UserTypeController extends DeviceAccessController {\n @service declare intl: ADCIntlService;\n @service declare notificationManager: NotificationManager;\n @service declare store: Store;\n\n /**\n * The original user type of the user.\n */\n originalUserType: number | null = null;\n\n /**\n * If defined, a warning message will display to the user saying one time users cannot have lock access.\n */\n @computed('deviceAccess.{accessPointCollectionsSummary.hasLockAccess,hasTemporarySchedule,hasWeeklySchedule}')\n get oneTimeUserWarning(): string | undefined {\n const { deviceAccess, intl } = this;\n if (deviceAccess) {\n if (get(deviceAccess.accessPointCollectionsSummary, 'hasLockAccess')) {\n return intl.t('users.edit.user-type.locksOneTimeUserWarning');\n }\n\n if (deviceAccess.hasWeeklySchedule || deviceAccess.hasTemporarySchedule) {\n return intl.t('users.edit.user-type.schedulesOneTimeUserWarning');\n }\n }\n\n return undefined;\n }\n\n /**\n * Whether the user type can be saved. Allow the user type to be saved if we are currently creating a new user.\n */\n @or('canBeSaved', 'deviceAccess.isCreationFlow')\n declare canSaveUserType: boolean;\n\n /**\n * The user type items provided to the button group.\n */\n @computed(\n 'contextManager.isPointCentral',\n 'deviceAccess.{availableUserTypesForUser,hasTemporarySchedule,hasWeeklySchedule,userType}',\n 'originalUserType'\n )\n get userTypeItems(): BinaryListItem<{ id: number; description: string | undefined }>[] {\n const { deviceAccess } = this,\n { userType, hasWeeklySchedule, hasTemporarySchedule, availableUserTypesForUser } = deviceAccess ?? {},\n hasLockAccess = get((deviceAccess ?? {}).accessPointCollectionsSummary, 'hasLockAccess');\n\n if (!availableUserTypesForUser) {\n return [];\n }\n\n // If the original user type hasn't been set, set it.\n if (this.originalUserType === null && userType !== undefined) {\n // eslint-disable-next-line ember/no-side-effects\n set(this, 'originalUserType', userType);\n }\n\n const includeDescription = this.contextManager.isPointCentral;\n\n return availableUserTypesForUser.map(\n ({ id, name, description }) =>\n new BinaryListItem<{ id: number; description: string | undefined }>({\n label: name,\n state: id === userType,\n disabled: (hasLockAccess || hasWeeklySchedule || hasTemporarySchedule) && id === OneTimeUser,\n props: {\n id,\n description: includeDescription ? undefined : description\n }\n })\n );\n }\n\n // region Actions\n\n /**\n * Updates the model with the selected user type when the radio items detect a change.\n */\n @action\n userTypeChanged(items: BinaryListItem<{ id: number; description: string | undefined }>[]) {\n const { deviceAccess } = this;\n if (deviceAccess) {\n const selectedItem = items.findBy('state', true)!.props.id;\n set(deviceAccess, 'userType', selectedItem);\n if (this.contextManager.isPointCentral) {\n set(deviceAccess, 'pointCentralUserType', selectedItem);\n }\n }\n }\n\n /**\n * Save user type and reload accessPointCollectionsSummary with new user type.\n * We need to reload accessPointCollectionsSummary to determine if \"Community\" button should be shown or not\n * after the user type has been changed.\n */\n @action\n async saveUserType(buttonAnimation: Promise): Promise {\n const { deviceAccess } = this.resolvedModel ?? {};\n if (!deviceAccess) {\n return;\n }\n\n const accessPointCollectionsSummary = await deviceAccess.get('accessPointCollectionsSummary'),\n updatedAccessPlansAccessPointCollection = this.store.push(\n await accessPointCollectionsSummary.updateAccessPlansAccessPointCollections(deviceAccess.userType)\n );\n\n accessPointCollectionsSummary.set('accessPlansAccessPointCollections', updatedAccessPlansAccessPointCollection);\n\n return this.contextManager.isPointCentral\n ? saveUserTypeForUserPointCentral.call(this, deviceAccess, buttonAnimation)\n : this.saveDeviceAccess(deviceAccess, buttonAnimation);\n }\n\n /**\n * If the user type 'Notifications Only' is selected, we show a confirmation modal to verify selection\n * because changing a user to notifications only will remove all of its device access.\n *\n * @param {models.users.access.DeviceAccess} deviceAccess\n */\n @action\n openNotificationsOnlyConfirmationModal(deviceAccess: DeviceAccessModel): void {\n const { intl } = this;\n\n this.modals.showConfirmationDialog(\n intl.t('users.edit.user-type.confirmNotificationsOnlyTitle'),\n intl.t('users.edit.user-type.confirmNotificationsOnlyDescription'),\n {\n text: intl.t('generic.save'),\n action: async () => {\n // Save access point collections summary since changing the user type to notifications only will cause a user to lose all access.\n const accessPointCollectionsSummary = await deviceAccess.get('accessPointCollectionsSummary');\n return accessPointCollectionsSummary.save().then(async () => {\n await deviceAccess.reload();\n this.contextManager.transitionToPreviousRoute();\n });\n }\n }\n );\n }\n\n // endregion\n}\n\n// DO NOT DELETE: this is how TypeScript knows how to look up your controllers.\ndeclare module '@ember/controller' {\n interface Registry {\n 'users/edit/user-type': UserTypeController;\n }\n}\n\n/**\n * PointCentral handles saving user types differently. If the contact's user type is notifications only, it will lose device access.\n * This method handles the following scenarios:\n * **Note: Notifications Only = NO\n *\n * 1) Non-NO to NO: The user previously had device access, and will lose device access if they continue to save the user as notifications only. Show confirmation modal.\n * 2) Non NO to Non NO: The user already has device access, so just modify its role and save device access.\n * 3) NO to Non NO: The user previously doesn't have device access, therefore, we must route the end user to set access after user type selection.\n */\nasync function saveUserTypeForUserPointCentral(\n this: UserTypeController,\n deviceAccess: DeviceAccessModel,\n buttonAnimation: Promise\n): Promise {\n const wasNotificationsOnlyUser = this.originalUserType === None;\n\n // If we have change the user type from notifications only to another user type, we want to navigate to\n // attempt to assign access for the first time.\n set(deviceAccess, 'isCreationFlow', wasNotificationsOnlyUser);\n\n // If we've edited the user type to be a notifications only user, display a confirmation modal.\n if (deviceAccess.userType === None && !deviceAccess.isCreationFlow) {\n this.openNotificationsOnlyConfirmationModal(deviceAccess);\n return;\n }\n\n // If we are changing the user type from a non-NO user type to a non-NO user type, save device access to make updated change.\n if (!wasNotificationsOnlyUser) {\n return this.saveDeviceAccess(deviceAccess, buttonAnimation);\n }\n\n const user = await deviceAccess.user,\n userId = user.id,\n { contextManager } = this,\n nextRoute = contextManager.isEnterprise\n ? EmberEnterpriseEditUserDeviceAccessAccessType\n : EmberEditUserDeviceAccess;\n\n // Don't send a welcome email since this isn't part of the user creation process.\n setProperties(user, {\n sendGuestWelcomeEmailByDefault: false,\n sendNonGuestWelcomeEmailByDefault: false\n });\n\n // Send the end user to assign access and have the user type saved.\n contextManager.replaceRouteWithNativeRoute(nextRoute, userId);\n}\n","import { action } from '@ember/object';\nimport { EmberEditUserType } from '../../../enums/CustomerPageUrl';\nimport BaseDeviceAccessRoute from '../device-access/route';\n\nimport type Transition from '@ember/routing/transition';\nimport type { ModelFrom } from 'customer-site/utils/type-utils';\nimport type ParentRoute from '../route';\nimport type Controller from './controller';\n\ntype ParentModel = ModelFrom;\n\n/**\n * @classdesc\n * Route for editing the \"type\" of user (e.g. Arm Only, Guest, etc).\n */\nexport default class UserTypeRoute extends BaseDeviceAccessRoute {\n routeId = EmberEditUserType;\n\n @action\n async willTransition(transition: Transition): Promise {\n // Clean up original user type property on controller.\n await super.willTransition(transition);\n (this.controller as Controller).set('originalUserType', null);\n }\n}\n","import { inject as service } from '@ember/service';\nimport AdcBaseRoute from '../classes/base-route';\nimport { EmberUsers } from '../enums/CustomerPageUrl';\n\nimport type Store from '@ember-data/store';\nimport type Configuration from 'customer-site/models/systems/configuration';\nimport type UsersPermissionsCollectionModel from 'customer-site/models/users/permissions-collection';\nimport type UserAttributeField from 'customer-site/models/users/user-attributes/user-attribute-field';\nimport type ContextManager from 'customer-site/services/context-manager';\n\ninterface BaseUsersRouteModel {\n permissions: ReturnType;\n availableUserAttributeFields?: Promise;\n systemConfig?: ADCAsyncStoreFindRecord;\n}\n\nexport function getUsersPermissions(\n store: Store,\n contextManager: ContextManager\n): ADCAsyncStoreFindRecord {\n return store.findRecord('users/permissions-collection', contextManager.getContextId());\n}\n\nexport default class UsersRoute extends AdcBaseRoute {\n @service declare store: Store;\n @service declare contextManager: ContextManager;\n\n routeId = EmberUsers;\n\n model(): BaseUsersRouteModel {\n const { contextManager, store } = this;\n\n return {\n permissions: getUsersPermissions(store, contextManager),\n systemConfig: this.contextManager.isSmrfAllowed\n ? this.store.findRecord('systems/configuration', this.contextManager.getSelectedSystemId())\n : undefined,\n availableUserAttributeFields: store\n .query('users/user-attributes/user-attribute-field', {})\n .then((attributes) => attributes.toArray())\n };\n }\n}\n"],"names":["createTemplateFactory","scope","dropdownActions_","t_","buttonIcon_","buttonNative_","media_","UsersCommonToolbar","templateOnlyComponent","setComponentTemplate","TEMPLATE","svgSymbol_","coalesce_","guidFor_","on","fn","toolTip_","coalesce_0","UiIconTooltipHover","_dec","alias","_dec2","computed","_class","Component","constructor","arguments","_initializerDefineProperty","_descriptor","_descriptor2","_descriptor3","isMobile","isMobileBrowser","this","isMobileApp","_applyDecoratedDescriptor","prototype","service","configurable","enumerable","writable","initializer","Object","getOwnPropertyDescriptor","tracked","simpleBinary_","spinnerSvg_","tc_","tc_0","uiIconTooltipHover_","showConfirmationModal_","hash","buttonSimple_","UsersIndexBulkToolbar","intlPath","path","or","_dec3","_class2","_descriptor4","_defineProperty","_buildTask","context","generator","allSelected","args","users","some","u","isSelected","ensureAllUsersLoaded","A","setEach","drop","selectedUserCount","filter","length","checkboxState","deleteUsers","intl","notificationManager","inInactiveUsersMode","selectedUsers","map","id","numUsers","count","delete","addError","tc","addSuccess","resendCodes","error","errors","_errors$","detail","addWarning","action","await_","and_","isEnterprise_","fieldsetHeader_","simpleBinaryButtonList_","await_0","schedulePicker_","inlineAlert_","smartDateRange_","generateAvailableUserSchedulesButtons","deviceAccess","weeklyScheduleCopy","temporaryScheduleCopy","_identityManager$poin","identityManager","type","resolvedUserType","isPointCentralSTR","pointCentralIdentity","Guest","TEMPORARY_SCHEDULE_ID","ALL_TIMES_ID","isAllTimesSelected","WEEKLY_SCHEDULE_ID","NINE_AM","FIVE_PM","DEFAULT_DAYS","AccessPeriodComponent","_dec4","_dec5","_dec6","_dec7","_dec8","_dec9","owner","super","_descriptor5","_descriptor6","_descriptor7","isCreationFlow","ProspectiveResident","WorkOrder","includes","addTemporarySchedule","schedule","onWeeklyScheduleUpdate","onTemporaryScheduleUpdate","weeklySchedule","WeeklySchedule","beginTime","endTime","selectedDays","temporarySchedule","TemporarySchedule","beginDateTime","endDateTime","hasAnyAccessControlSubgroups","async","subgroups","get","_this$identityManager","identityModel","selectedSystemGroup","loadedSubgroups","Promise","all","subgroup","isAccessControl","selectedDevicesWithoutScheduleSupport","_get","devicesWithoutScheduleSupport","isEnterprise","system","accessPointItem","concat","deviceName","description","item","scheduleOptions","call","_ref","key","state","BinaryListItem","label","props","canSelectWeeklySchedule","undefined","canSelectTemporarySchedule","showEarlyAccessInformation","userCodeEarlyAccessMinutes","permissions","minutes","optOutOfExpiredUserDeleteSwitch","optOutOfExpiredUserRemovalEnabled","showOptOutOfExpiredUserRemovalCheckbox","_this$identityManager2","_this$identityManager3","_this$args$deviceAcce","hasDeleteExpiredInactivePCUsersFeatureToggle","shouldShowOptOutOfExpiredUserRemoval","scheduleOptionChanged","scheduleItems","_scheduleItem$props","scheduleItem","find","setProperties","updateTemporarySchedule","_ref2","startDate","endDate","changes","isEqual","keys","updateWeeklySchedule","_ref3","_this$weeklyScheduleC","_this$weeklyScheduleC2","_this$weeklyScheduleC3","beginTimeInMinutes","endTimeInMinutes","element","index","userCodeStartTimeMinutesFromMidnight","userCodeEndTimeMinutesFromMidnight","Date","addMonths","midnightToday","setHours","midnightTomorrow","addDays","addMinutes","pinInput_","not_","validationError_","setUserCode","userCode","set","UserCodeComponent","scheduleOnce","initialUserCode","hidePinCode","canViewUserCodes","disableUserPinInput","readOnly","canChangeUserCode","actionForPinCodeComponent","isPointCentral","generateNewCodeAndSave","generateRandomPin","updateUserCode","remove","pinCode","ajax","apiRequestForValue","apiRequest","t","reload","contextManager","transitionToPreviousRoute","reject","usersListUserItem_","UsesListCheckboxUserItem","modalsDialogModalsSimpleSimpleDialog_","array","getModalButton_","asyncLoader_","FailedPinLocationsModal","allFailedSystems","model","accessPointCollectionsSummary","failedSystems","areAnyFailedSystems","selectedFailedSystems","selectedSystems","systems","selectedIds","s","resendCodesForSystems","_systems","unitIds","unitId","t_0","UserAccessLocationsListModal","locationDropdownItems","user","allNestedSystemIds","systemsWithAccessPlanAccess","systemsWithAccess","pendingSystems","resolvedSystemsWithAccess","resolvedPendingSystems","systemIdsWithAccess","pendingSystemIds","forEach","push","isPending","sort","a","b","localeCompare","usersListBaseUserItem_","promiseHashTracked_","buttonAsync_","uiBadgeLabel_","usersItemPinBadge_","UserItemComponent","equal","Failed","Pending","_dec10","_dec11","_dec12","BaseUserItem","_descriptor8","_descriptor9","_descriptor10","_descriptor11","showCodeBadge","hideUserCodes","showSlotNumber","canViewPanelSlotNumbers","hidePanelSlotNumbers","panelSlotNumber","_this$user","slotNumber","codeStatusIcon","_this$user2","status","Duplicated","name","title","locationsIcon","codeStatus","smrfStatusVisible","showSmrfStatus","isSmrfSupported","smrfStatus","_await$this$user$smrf","_this$user3","calibrationState","icon","NOT_CALIBRATED","PARTIALLY_CALIBRATED","FULLY_CALIBRATED","text","smrfReviewCount","_this$user4","unknownImages","htmlSafe","toggleRetryModal","modals","showModal","FailedPinLocations","editUser","transitionToNativeRoute","isEditSupported","routeMap","userEdit","userEditNotSupported","itemClicked","editOnItemClick","toggleLocationsModal","UserAccessLocationsList","retryButtonPressed","stopPropagation","evt","UsersEditNotSupportedComponent","editNotSupportedReason","editUserNotSupportedInfo","navigateToHigherLevelUsersGroupText","systemGroupItem","systemGroupItemToNavigateTo","groupName","systemGroupIdToEditUser","store","findAll","e","navigateToEditHigherLevelUser","userId","switchContext","router","transitionTo","displayTransitionErrorMessage","Route","UserEditDeviceAccessRoute","EmberEditUserAccessPeriod","EmberUserEdit","afterModel","cannotUseSchedules","navigation","replaceWithRouteId","getNextRouteForCreation","routeId","defaultEditRoute","DeviceAccessController","and","_dec13","_dec14","_dec15","BaseEditUserController","_descriptor12","_descriptor13","_descriptor14","userTypeSupportsDeviceAccess","_this$resolvedModel","resolvedModel","dataLoaded","_resolvedModel$device","originalUserCode","accessTypeNotBlockedBySchedule","accessTypeId","showScheduledUserCodesWarning","ACCESS_TYPE","ALL_EXISTING_FUTURE_ID","ALL_EXISTING_ID","hasPermissionToEditUserCodes","allToggledDevicesCanGetAccess","_this$resolvedModel2","lockAccessPoints","any","hasAccess","canGetAccess","shouldShowSchedule","isWeeklyScheduleCopyValid","isValid","isTemporaryScheduleCopyValid","_this$temporarySchedu","_this$temporarySchedu2","confirmDeviceAccessSave","buttonAnimation","offlineDeviceAccessHasBeenModified","showConfirmationDialog","saveDeviceAccess","_this$temporarySchedu3","alreadySaved","saveDeviceAccessModelPointCentral","saveDeviceAccessModel","cancel","handleRedirectAfterSaveOrCancel","cancelEditPointCentralUser","weeklyScheduleCopyUpdate","temporaryScheduleCopyUpdate","modelToSave","hasBeenModified","save","fnDone","DeviceAccessModel","then","isSuccess","resolve","ex","_ex$errors$firstObjec","_ex$errors","firstObject","fnFinally","shouldSendWelcomeEmailByDefault","shouldSendWelcomeTextByDefault","isAccessPaused","hasNoDeviceAccessModal","_deviceAccess$tempora","_deviceAccess$tempora2","handleRedirectAfterSaveOrCancelPointCentral","userType","_deviceAccess$tempora3","_deviceAccess$tempora4","shouldRedirectToEditRoute","syncUserPermissions","baseUserEditRoute","belongsTo","UsersEditIndexController","BaseUsersEditIndexController","accessPeriod","EmberEditUserDeviceAccess","userInformation","EmberEditUserInformation","languagePreference","EmberUserEditLanguage","EmberEditUserType","addNewUserAttribute","EmberEditUserAttributes","editUserAttribute","EmberEditUserAttributesEdit","username","EmberUsersUsername","usernameRedirect","EmberUsers","userEditContactInformationRoute","EmberEditUserContactInformation","UsersEditIndexRoute","AdcBaseRoute","EditNotSupportedRoute","EmberUserEditNotSupported","ResidentialUserEditRoute","BaseUserEditRoute","params","transition","_objectSpread","isNew","id_user","UserInformationController","BaseController","ResidentialUserInformationRoute","EditUserInfoBaseRoute","rollbackModelOnTransition","currentModel","rollbackAttributes","UserTypeController","oneTimeUserWarning","hasWeeklySchedule","hasTemporarySchedule","userTypeItems","availableUserTypesForUser","hasLockAccess","originalUserType","includeDescription","disabled","OneTimeUser","userTypeChanged","items","selectedItem","findBy","saveUserType","updatedAccessPlansAccessPointCollection","updateAccessPlansAccessPointCollections","saveUserTypeForUserPointCentral","openNotificationsOnlyConfirmationModal","wasNotificationsOnlyUser","None","nextRoute","EmberEnterpriseEditUserDeviceAccessAccessType","sendGuestWelcomeEmailByDefault","sendNonGuestWelcomeEmailByDefault","replaceRouteWithNativeRoute","UserTypeRoute","BaseDeviceAccessRoute","willTransition","controller","getUsersPermissions","findRecord","getContextId","UsersRoute","systemConfig","isSmrfAllowed","getSelectedSystemId","availableUserAttributeFields","query","attributes","toArray"],"sourceRoot":""}