{"version":3,"file":"main.ba8552a07772b5a2.js","mappings":"4PAoBO,IAAMA,EAAY,MAAnB,MAAOA,EAUZC,YAESC,EAEAC,EACAC,EACAC,EAESC,EAETC,GARAC,KAAAN,cAEAM,KAAAL,cACAK,KAAAJ,eACAI,KAAAH,YAESG,KAAAF,sBAETE,KAAAD,sBAnBDC,KAAAC,QAAOC,OAAOC,MACdH,KAAAI,iBAAgBF,OAAOG,OAE/BL,KAAAM,YAAa,EACbN,KAAAO,iBAAmB,GAEnBP,KAAAQ,MAAQ,MACRR,KAAAS,cAAiC,GAchCT,KAAKL,YAAYe,mBAAmBC,UAAWC,GAAaZ,KAAKa,WAAWD,IAC5EZ,KAAKL,YAAYmB,wBAAwBH,UAAWI,GAAef,KAAKgB,mBAAmBD,GAC5F,CAEAE,WACCjB,KAAKJ,aAAasB,OAEblB,KAAKN,YAAYwB,OACtBlB,KAAKmB,mBACLnB,KAAKoB,uBACN,CAEAD,mBAOCnB,KAAKS,cAAgBT,KAAKM,WAAa,GAAK,CANlB,CACzBe,KAAM,SACNC,MAAO,oBACPC,MAAO,EACPC,OAAQA,IAAMxB,KAAKN,YAAY+B,SAGjC,CAEA,YAAIC,GACH,OAAO1B,KAAKL,YAAYgC,YAAYD,QACrC,CAEAD,QACCzB,KAAKN,YAAY+B,OAClB,CAEQZ,WAAWD,GAClBZ,KAAKM,WAAaM,EAEdA,EACHZ,KAAKC,KAAK2B,QAEV5B,KAAKC,KAAK4B,MAEZ,CAEQb,mBAAmBD,GACtBA,GACHf,KAAKF,oBAAoBoB,MAE3B,CAEQE,wBACP,MAAMU,EAA8B9B,KAAKD,oBAAoBgC,UAAU,gCAAkC,KACnGC,EAAkChC,KAAKD,oBAAoBgC,UAAU,oCAAsC,GACjH/B,KAAKC,KAAKgC,QAAQC,OAAOJ,IACzB9B,KAAKC,KAAKkC,WAAWD,OAAOF,IAC5BhC,KAAKC,KAAKmC,cAAcC,MAExBrC,KAAKC,KAAKqC,UAAU3B,UAAU,KAC7BX,KAAKuC,WAAS,GAGfvC,KAAKC,KAAKuC,UAAU7B,UAAU,KAC7BX,KAAKI,cAAcqC,QACdzC,KAAKN,YAAYgD,QAAM,GAG7B1C,KAAKC,KAAK0C,YAAYhC,UAAU,KAC/BX,KAAKI,cAAcwC,KAClB,oCACA,qCACA,CAAEC,MAAO,SAAUvB,MAAO,0BAC1B,CAAEuB,MAAO,OAAQvB,MAAO,wBACxB,eACA,QACA,GACA,GAGDtB,KAAKI,cAAc0C,UACjBC,cACAC,QAAKC,KAAK,IACVtC,UAAWuC,IACE,SAATA,GACHlD,KAAKuC,YAGO,WAATW,GACElD,KAAKN,YAAYgD,QAAM,EAE7B,GAGH1C,KAAKC,KAAKkD,iBAAiBxC,UAAWyC,IACrCpD,KAAKO,iBAAmB,wBAAwB6C,aAChDC,QAAQC,IAAItD,KAAKO,iBAAgB,GAGlCP,KAAKuC,WACN,CAEQA,YACPvC,KAAKC,KAAK2B,OACX,iDAxHYpC,GAAY+D,MAWfC,MAAYD,MAEZE,MAAYF,MAAAG,MAAAH,MAAAI,MAAAJ,MAIZK,MAAqBL,MAErBM,MAAoB,oCAnBjBrE,EAAYsE,UAAA,gBAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,8FAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ICpBzBZ,MAAA,YACCA,MAAA,WAEAA,MAAA,WACCA,MAAA,6BACAA,MAAA,WACCA,MAAA,mBACDA,UAEDA,MAAA,WACDA,uLDUa/D,CAAY,+BEZlB,MAAM6E,EAAyB,IAAIC,MAAqC,oCCRxE,IAAKC,EAAZ,SAAYA,GACXA,SAAAC,IAAA,MACAD,EAAAE,UAAA,YACAF,EAAAG,OAAA,SACAH,EAAAI,QAAA,UACAJ,EAAAK,SAAA,WACAL,EAAAM,UAAA,YACAN,EAAAO,QAAA,UAPWP,CAQZ,CARA,CAAYA,GAAY,ICGjB,MAAMQ,EAA8BA,MAC1CC,MAAO,CACN,CACC3D,KAAM,QACN4D,KAAM,oBACNC,KAAMX,EAAaC,IACnBjD,MAAO,EACP4D,KAAM,QACNC,UAAU,EACVC,mBAAmB,GAEpB,CACChE,KAAM,YACN4D,KAAM,+BACNC,KAAMX,EAAaE,UACnBlD,MAAO,EACP4D,KAAM,WACNC,UAAU,EACVC,mBAAmB,GAEpB,CACChE,KAAM,SACN4D,KAAM,iCACNC,KAAMX,EAAaG,OACnBnD,MAAO,EACP4D,KAAM,0BACNC,UAAU,EACVC,mBAAmB,GAEpB,CACChE,KAAM,UACN4D,KAAM,mCACNC,KAAMX,EAAaI,QACnBpD,MAAO,EACP4D,KAAM,2BACNC,UAAU,EACVC,mBAAmB,GAEpB,CACChE,KAAM,WACN4D,KAAM,yBACNC,KAAMX,EAAaK,SACnBrD,MAAO,EACP4D,KAAM,4BACNC,UAAU,EACVC,mBAAmB,GAEpB,CACChE,KAAM,cACN4D,KAAM,0BACNC,KAAMX,EAAaM,UACnBtD,MAAO,EACP4D,KAAM,6BACNC,UAAU,EACVC,mBAAmB,IAGrBC,YAAY,ICpBN,IAAMC,EAAoB,MAA3B,MAAOA,oDAAoB,oCAApBA,GAAoB,wCAPrB,CACV,CACCC,QAASnB,EACToB,WAAYV,IAEbW,QAAA,CAlBAC,MACAC,KACAC,KACAC,KACAC,MACAC,MACAC,MAGAC,MACAC,QAAkB,SAUPZ,CAAoB,8BChCjC,MAAMa,EAAmB,CAACb,GAEbc,EAA2C,CACvDC,UAAW,EACXC,UAAW,EACXC,kBAAmB,KACnBC,6BAA6B,GAcvB,IAAMC,EAAmB,MAA1B,MAAOA,oDAAmB,oCAAnBA,GAAmB,wCAFpB,CAAC,CAAElB,QAASmB,KAA6BC,SAAUP,IAAiBX,QAAA,CAR9EE,KACAiB,IACAC,KAAoBC,WAAW,CAAEC,6BAA8B,WAC/DnB,KACAF,MACGS,EAEMT,MAjBeJ,IAAoB,SAoBjCmB,CAAmB,qKCnBzB,IAAMO,EAAoB,MAA3B,MAAOA,EAJbxH,cAKkBO,KAAAkH,eAAchH,OAAOiH,OACrBnH,KAAAoH,oBAAmBlH,OAAOmH,OAC1BrH,KAAAsH,sBAAqBpH,OAAOqH,KAC5BvH,KAAAwH,WAAa,IAAIC,IAKzBzH,KAAA0H,oBAAmD,KAE5DzG,WACKjB,KAAK2H,YACR3H,KAAKsH,mBACHM,mBAAmB5H,KAAK2H,aACxB3E,QAAK6E,KAAU7H,KAAKwH,aACpB7G,UAAWiH,IACX5H,KAAKoH,iBAAiBU,QAClBF,EACH5H,KAAKoH,iBAAiBW,mBAAmB/H,KAAKkH,aACpClH,KAAK0H,qBACf1H,KAAKoH,iBAAiBW,mBAAmB/H,KAAK0H,oBAAmB,IAIpE1H,KAAKoH,iBAAiBU,QACtB9H,KAAKoH,iBAAiBW,mBAAmB/H,KAAKkH,aAEhD,CAEAc,cACChI,KAAKwH,WAAWS,OAChBjI,KAAKwH,WAAWU,aACjB,iDAjCYjB,EAAoB,oCAApBA,EAAoBnD,UAAA,4BAAAqE,OAAA,CAAAR,YAAA,CAAApE,MAAA6E,KAAA,iCAAAV,oBAAA,uBAAAW,YAAA,YAApBpB,CAAoB,6CC2B1B1D,MAAA,YAMCA,MAAA,wBACDA,yCAHCA,MAAA,yCAAA+E,EAAArD,MAEA1B,cAAA,IAAAA,MAAA,IAAA+E,EAAArD,MAAA,mFA7BH1B,MAAA,GACCA,MAAA,sBAECA,MAAA,mBAAAA,MAAAgF,GAAA,MAAAD,EAAA/E,QAAAiF,UAAAC,EAAAlF,MAAA,UAASA,MAAAkF,EAAAC,YAAAJ,GAAmB,wBAO5B/E,MAAA,gBAMCA,MAAA,sBAKDA,QAEAA,MAAA,EAAAoF,EAAA,cAQDpF,QACDA,qDA5BEA,cAAA,aAAA+E,EAAAnD,KAAA5B,CAA0B,UAAAA,MAAA,GAAAqF,EAAAN,EAAAlD,UAA1B7B,CAA0B,aAAAA,MAAA,GAAAsF,GAAAC,EAAAC,SAAA,GAAAxF,MAAA,IAAA+E,EAAArD,QAE1B1B,MAAA,oCAAA+E,EAAArD,MAMC1B,MAAA,GAAAA,MAAA,UAAA+E,EAAAjH,MAEAkC,MAAA,yCAAA+E,EAAAjH,MAICkC,cAAA,OAAA+E,EAAAjD,mBAQA9B,cAAA,OAAAuF,EAAAC,qCA3BLxF,MAAA,GACCA,MAAA,EAAAyF,GAAA,wBAiCDzF,6CAjCgBA,cAAA,kBAAA0F,EAAAC,iBAAAZ,EAAApD,+BA2Cf3B,MAAA,YAMCA,MAAA,oBAIDA,cANCA,MAAA,+FAlDHA,MAAA,oBAECA,MAAA,EAAA4F,GAAA,sBAmCA5F,MAAA,qBACQA,MAAA,mBAAAA,MAAA6F,GAAA,MAAAC,EAAA9F,QAAA,OAASA,MAAA8F,EAAAC,gBAAe,GAC/B/F,MAAA,gBAOAA,MAAA,EAAAgG,GAAA,cAWDhG,8CAvDiCA,cAAA,UAAAiG,GAuC/BjG,MAAA,GAAAA,MAAA,kBAEAA,MAAA,2DAMCA,cAAA,OAAAkG,EAAAV,oDAUJxF,MAAA,GACAA,MAAA,4BAEEA,MAAA,oBAAAA,MAAAmG,GAAA,MAAAC,EAAApG,QAAA,OAAUA,MAAAoG,EAAAC,iBAAgB,wBAM3BrG,QACAA,cANCA,cAAA,8BAAAA,CAA+B,UAAAA,MAAA,uEAQjCA,MAAA,GACCA,MAAA,qBACAA,MAAA,4BAECA,MAAA,oBAAAA,MAAAsG,GAAA,MAAAC,EAAAvG,QAAA,OAAUA,MAAAuG,EAAAF,iBAAgB,wBAO3BrG,QACDA,cAPEA,MAAA,GAAAA,MAAA,6BAAAA,CAA8B,0BAA9BA,CAA8B,UAAAA,MAAA,qHC5E7BwG,GAAgD,CACrDlF,UAAW,gBACXH,OAAQ,uBACRE,SAAU,eACVD,QAAS,cACTH,IAAK,WACLC,UAAW,cACXK,QAAS,eAQH,IAAMkF,GAAuB,MAA9B,MAAOA,EAcZvK,YACyCwK,EAChCC,EAESpK,EAETqK,GALgCnK,KAAAiK,gBAChCjK,KAAAkK,SAESlK,KAAAF,sBAETE,KAAAmK,qBAnBCnK,KAAAoK,aAAe,IAAIC,IAAiC,IAC7CrK,KAAAwH,WAA4B,IAAIC,IAIjDzH,KAAA+I,UAAW,EAGX/I,KAAAM,YAAa,EAGbN,KAAAsK,aAA4C,IAAIC,KAS7C,CAEHtJ,WACCjB,KAAKwK,wBAAwBxK,KAAKiK,cAAcjF,OAChDhF,KAAKyK,wBACLzK,KAAK0K,cAAcX,GAAsBjF,SAEzC9E,KAAKkK,OAAOS,OACV3H,QACA4H,QAAoB,EACpBC,MAAQC,GAAyCA,aAAiBC,OAAa,EAC/EC,KAAKF,GAAUA,EAAMG,mBAAqBH,EAAMI,MAAG,EACnDC,MAAenL,KAAKoK,eAAY,EAChCvC,KAAU7H,KAAKwH,aAEf7G,UAAU,EAAEuK,EAAKlG,MACjBhF,KAAKoL,kBAAkBF,EAAIG,MAAM,KAAK,GAAIrG,EAAK,EAElD,CAEUkE,iBAAiBoC,GAC1B,OAAOvB,GAAsBuB,EAC9B,CAEU1B,iBACT5J,KAAK+I,UAAY/I,KAAK+I,QACvB,CAEUL,YAAY6C,GACrBvL,KAAKsK,aAAakB,KAAKD,EACxB,CAEQH,kBAAkBK,EAAsBzG,GAC/C,MAAM0G,EAAgBD,EAAaJ,MAAM,KACnCM,EAAe3G,EAAMgG,IAAKO,IAC/B,MAAMK,EAAeL,EAAKpG,KAAKkG,MAAM,KACrCE,SAAKnG,SAAWwG,EAAaC,MAAOC,GAAOJ,EAAcK,SAASD,IAC3DP,IAGRvL,KAAKwK,wBAAwBmB,EAC9B,CAEQlB,wBACPzK,KAAKF,oBAAoBkM,mCACvBhJ,QAAK4H,QAAoB,EAAI/C,KAAU7H,KAAKwH,aAC5C7G,UAAWsL,IACXjM,KAAKkM,iBAAiB3H,EAAaI,QAASsH,EAAgB,GAE9DjM,KAAKF,oBAAoBqM,sCACvBnJ,QAAK4H,QAAoB,EAAI/C,KAAU7H,KAAKwH,aAC5C7G,UAAWyL,IACXpM,KAAKkM,iBAAiB3H,EAAaK,SAAUwH,EAA0B,EAE1E,CAEQF,iBAAiBG,EAAkCC,GAC1D,MAAMC,EAAiBvM,KAAKiK,cAAcjF,MAAMgG,IAAKO,GAChDA,EAAKrG,OAASmH,EACV,IACHd,EACHlG,kBAAmBiH,GAGdf,GAERvL,KAAKwK,wBAAwB+B,EAC9B,CAEQ/B,wBAAwBxF,GAC/BhF,KAAKiK,cAAcjF,MAAQA,EAC3BhF,KAAKoK,aAAanC,KAAKjD,EACxB,CAEQ0F,cAAc8B,GACrBxM,KAAKmK,mBAAmBvC,mBAAmB4E,GAC1CxJ,QAAK4H,QAAoB,EAAI/C,KAAU7H,KAAKwH,aAC5C7G,UAAW8L,IACXzM,KAAK0M,gBAAkBD,GAEzB,CAEAzE,cACChI,KAAKwH,WAAWS,OAChBjI,KAAKwH,WAAWU,aACjB,iDA1GY8B,GAAuBzG,MAe1Bc,GAAsBd,MAAAG,MAAAH,MAEtBK,MAAqBL,MAErBgE,KAAoB,oCAnBjByC,EAAuBlG,UAAA,sBAAAqE,OAAA,CAAAY,SAAA,WAAAzI,WAAA,cAAAqM,QAAA,CAAArC,aAAA,gBAAAsC,mBAAAC,GAAA9I,MAAA,EAAAC,KAAA,EAAAC,OAAA,i9BAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,cDzBpCZ,MAAA,4BAAAA,CAA8D,kBAA9DA,CAA8D,WAU3DA,MAAA,EAAAuJ,GAAA,qBAAAvJ,CA0De,EAAAwJ,GAAA,qBA1DfxJ,CA0De,EAAAyJ,GAAA,sBA0BhBzJ,UAGDA,MAAA,WACCA,MAAA,GACDA,iBAjGCA,cAAA,UAAAA,MAAA,EAAA0J,GAAA7I,EAAA2E,UAAAxF,CAAkC,SAAAa,EAAAsI,gBAAlCnJ,CAAkC,mBAQ0CA,MAAA,GAAAA,MAAA,UAAAa,EAAAgG,cA2D5D7G,cAAA,QAAAa,EAAA2E,UAYAxF,cAAA,OAAAa,EAAA2E,8pDCxDLiB,CAAuB,KCjBvBkD,GAAe,MAAtB,MAAOA,oDAAe,oCAAfA,EAAepJ,UAAA,kBAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,wCAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ICR5BZ,MAAA,YAAAA,CAAS,sBAATA,CAAS,WAGNA,MAAA,mBACDA,mBAHgBA,cAAA,kDDOL2J,CAAe,qBEGrB,IAAMC,GAAgB,MAAvB,MAAOA,EAUZ1N,YAESE,EACAuK,EAEAxK,EACAG,GAJAG,KAAAL,cACAK,KAAAkK,SAEAlK,KAAAN,cACAM,KAAAH,YAdCG,KAAAoN,kBAAoB,CAC7B/L,KAAM,SACNC,MAAO,oBACPC,MAAO,EACPC,OAAQA,IAAMxB,KAAKN,YAAY+B,SAa/BzB,KAAKL,YAAYe,mBAAmBC,UAAWL,IAC1CA,GACEN,KAAKkK,OAAOmD,SAAS,CAAC,SAAU,CAAEC,YAAY,GAAM,EAG5D,CAEAC,QAAQhC,GACFA,EAAK/J,QACX,iDA5BY2L,GAAgB5J,MAWnBE,MAAYF,MAAAG,MAAAH,MAGZC,MAAYD,MAAAI,MAAA,oCAdTwJ,EAAgBrJ,UAAA,mBAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,8PAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ICX7BZ,MAAA,UAAAA,CAA0B,WAExBA,MAAA,WAGAA,MAAA,UAAAA,CAA+E,2BAI7EA,MAAA,2BAAUa,EAAAmJ,QAAAnJ,EAAAgJ,kBAA0B,wBAIrC7J,qBANCA,MAAA,GAAAA,MAAA,aAAAa,EAAAgJ,kBAAA,KAAAhJ,EAAAgJ,kBAAA/L,KAAAkC,CAAgC,QAAAA,MAAA,UAAAa,EAAAgJ,kBAAA,KAAAhJ,EAAAgJ,kBAAA9L,0tBDIvB6L,CAAgB,KEHhBK,GAA+B,MAAtC,MAAOA,EACZ/N,YAA0CC,EAAmCwK,GAAnClK,KAAAN,cAAmCM,KAAAkK,QAAiB,CAE9FjJ,WACMjB,KAAKN,YAAY+N,gBAAgBC,KAAMC,IACvCA,EACE3N,KAAKkK,OAAO0D,cAAcD,EAAa,CAAEL,YAAY,IAErDtN,KAAKkK,OAAOmD,SAAS,CAAC,KAAM,CAAEC,YAAY,GAAM,EAGxD,iDAXYE,GAA+BjK,MACvBC,MAAYD,MAAAG,MAAA,oCADpB8J,EAA+B1J,UAAA,2BAAAC,MAAA,EAAAC,KAAA,EAAAE,SAAA,SAAAC,EAAAC,GAAA,EAAAD,GAFhCZ,MAAA,oCAECiK,CAA+B,KCA/BK,GAAgC,MAAvC,MAAOA,EACZpO,YAA0CC,EAAmCwK,GAAnClK,KAAAN,cAAmCM,KAAAkK,QAAiB,CAE9FjJ,WACMjB,KAAKN,YAAYoO,iBAAiBJ,KAAK,KACtC1N,KAAKkK,OAAOmD,SAAS,CAAC,KAAM,CAAEC,YAAY,GAAM,EAEvD,iDAPYO,GAAgCtK,MACxBC,MAAYD,MAAAG,MAAA,oCADpBmK,EAAgC/J,UAAA,2BAAAC,MAAA,EAAAC,KAAA,EAAAE,SAAA,SAAAC,EAAAC,GAAA,EAAAD,GAFjCZ,MAAA,oCAECsK,CAAgC,KCDhCE,GAA8B,MAArC,MAAOA,EACZtO,YAESC,GAAAM,KAAAN,cAEHM,KAAKN,YAAYsO,sBACvB,iDANYD,GAA8BxK,MAEjCC,MAAY,oCAFTuK,EAA8BjK,UAAA,mCAAAC,MAAA,EAAAC,KAAA,EAAAE,SAAA,SAAAC,EAAAC,GAAA,EAAAD,GAF/BZ,MAAA,oCAECwK,CAA8B,qBCCpC,IAAME,GAAkB,MAAzB,MAAOA,EACZxO,YAESyO,GAAAlO,KAAAkO,eACN,CAEH,SAAIC,GACH,MAAMA,EAAQnO,KAAKkO,cAAcnM,UAAU,WAG3C,OAAOqM,UAAU,UAAUD,wCAC5B,iDAXYF,GAAkB1K,MAErB8K,MAAW,oCAFRJ,EAAkBnK,UAAA,qBAAAC,MAAA,GAAAC,KAAA,GAAAC,OAAA,oJAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ICR/BZ,MAAA,UAAAA,CAA4B,WAE1BA,MAAA,gBACAA,MAAA,WAA4BA,MAAA,wBAAyCA,QACrEA,MAAA,YACEA,MAAA,wBAA4DA,MAAA,YAAQA,MAAA,UAAGA,QACxEA,MAAA,0BACAA,MAAA,SAAAA,CACE,aAAQA,MAAA,0BAA6DA,UAEvEA,MAAA,0BAA6DA,mBAPlCA,MAAA,GAAAA,YAAA,8BAE1BA,MAAA,GAAAA,MAAA,GAAAA,MAAA,oDACDA,MAAA,GAAAA,MAAA,IAAAA,MAAA,wDACGA,MAAA,GAAAA,MAAA,OAAAa,EAAA+J,MAAA5K,OACOA,MAAA,GAAAA,YAAA,oDAEVA,MAAA,GAAAA,MAAA,IAAAA,MAAA,2oBDFU0K,CAAkB,KEDlBK,GAAgB,MAAvB,MAAOA,EACZ7O,YACkByK,EACTqE,EAC+CC,GAFtCxO,KAAAkK,SACTlK,KAAAuO,qBAC+CvO,KAAAwO,aACrD,CAEHvN,WACEjB,KAAKuO,mBAA2CE,iBAAiB,YAClEzO,KAAKwO,YAAYE,YACZ1O,KAAKkK,OAAOmD,SAAS,CAAC,SAC5B,iDAXYiB,GAAgB/K,MAAAG,MAAAH,MAAAG,MAAAH,MAInBoL,MAA4B,oCAJzBL,EAAgBxK,UAAA,mBAAAC,MAAA,EAAAC,KAAA,EAAAE,SAAA,SAAAC,EAAAC,GAAA,EAAAD,GAFjBZ,MAAA,oCAEC+K,CAAgB,KCU7B,MAAMM,GAA+BC,GACpCC,KAAkCD,EAAM,CAAEE,aAAc,mBAEnDC,GAAiB,CACtB,CACCC,KAAM,GACNC,UAAW,OACXC,WAAY,WAEb,CACCF,KAAM,GACNG,UAAWlC,GACXmC,YAAa,CAACC,KAAWC,MACzBC,SAAU,CACT,CACCP,KAAM,OACNzO,MAAO,iBACP6O,YAAa,CAACC,KAAWC,MACzBC,SAAU,CACT,CACCP,KAAM,GACNQ,aAAcA,IAAMC,QAAAC,IAAA,CAAAC,EAAAC,EAAA,wGAAAD,EAAAC,EAAA,wGAAAD,EAAAC,EAAA,wGAAAD,EAAAC,EAAA,4DAAAD,EAAAC,EAAA,wGAAAD,EAAAC,EAAA,uFAAAD,EAAAC,EAAA,wGAAAD,EAAAC,EAAA,kDAAAD,EAAAC,EAAA,UAAAD,EAAAC,EAAA,kCAAAnC,KAAAkC,EAAAE,KAAAF,EAAA,QAA2BlC,KAAMqC,GAAMA,EAAEC,oBAIhE,CACCf,KAAM,UACNzO,MAAO,sBACP6O,YAAa,CAACC,KAAWC,MACzBE,aAAcA,IAAMC,QAAAC,IAAA,CAAAC,EAAAC,EAAA,wGAAAD,EAAAC,EAAA,4DAAAD,EAAAC,EAAA,kDAAAD,EAAAC,EAAA,6CAAAnC,KAAAkC,EAAAE,KAAAF,EAAA,QAAsClC,KAAMqC,GAAMA,EAAEE,4BAEzE,CACChB,KAAM,kBACNI,YAAa,CAACC,KAAWC,MACzBC,SAAU,CACT,CACCP,KAAM,GACNQ,aAAcA,IAAMC,QAAAC,IAAA,CAAAC,EAAAC,EAAA,wGAAAD,EAAAC,EAAA,iDAAAD,EAAAC,EAAA,wGAAAD,EAAAC,EAAA,gDAAAD,EAAAC,EAAA,gDAAAnC,KAAAkC,EAAAE,KAAAF,EAAA,OAAmClC,KAAMqC,GAAMA,EAAEG,2BAIxE,CACCjB,KAAM,eACNI,YAAY,CAACC,KAAWC,MACxBE,aAAcA,IAAMC,QAAAC,IAAA,CAAAC,EAAAC,EAAA,wGAAAD,EAAAC,EAAA,4DAAAD,EAAAC,EAAA,iDAAAD,EAAAC,EAAA,UAAAD,EAAAC,EAAA,qFAAAnC,KAAAkC,EAAAE,KAAAF,EAAA,QAAmClC,KAAMqC,GAAMA,EAAEI,4BAIxE,CACClB,KAAM,kBACNG,UAAW5B,IAEZ,CACCyB,KAAM,mBACNG,UAAWvB,IAEZ,CACCoB,KAAM,mBACNG,UAAWrB,IAEZ,CACCkB,KAAM,UACNzO,MAAO,oBACP6O,YAAa,CAACe,MACdhB,UAAWjC,IAEZ,CACC8B,KAAM,YACNI,YAAa,CAACC,MACdF,UAAWnB,IAEZ,CACCgB,KAAM,cACNG,UAAWd,IAEZ,CACCW,KAAM,gBACNG,UAAWd,IAEZ,CACCW,KAAM,KACNE,WAAY,aAwBP,IAAMkB,GAAgB,MAAvB,MAAOA,oDAAgB,oCAAhBA,GAAgB,uCAlB3BxK,KAAayK,QAAQtB,GAAQ,CAC5BuB,mBAAoBC,KACpBC,uBAAuB,EACvBC,oBAAqB,WAEtB5J,KACAhB,KAAgB6K,SAAS,CACxBC,OAAQ,CACPpL,QAASqL,KACTpL,WAAYmJ,GACZkC,KAAM,CAACC,QAERC,SAAS,EACTC,gBAAiB,UAGTpL,KAAciB,KAAqBhB,OAAe,SAEhDuK,CAAgB,+EC1HtB,MAAMa,GAAiBA,CAAC/C,EAAegD,KAC7C,MACMC,EAAO,mBAAkBC,MAAOC,sBAAsBH,IAC5D,OAAO/C,UAAU,UAAUD,+CAAiCiD,IAAM,ECS5D,IAAMG,GAAe,MAAtB,MAAOA,EACZ9R,YAEkBE,EACT6R,EAEAtD,EACYuD,GAJHzR,KAAAL,cACTK,KAAAwR,kBAEAxR,KAAAkO,gBACYlO,KAAAyR,gBAClB,CAEHC,UAAUC,EAA2B1J,GACpC,MAAM2J,EAAe,CACpB,+CACA,+CACA,+CACA,+CACA,gBACA,kBACA,eACA,iBACA,yDACCC,KAAMC,GAAMH,EAAIzG,IAAIa,SAAS+F,IAEzBC,EACJJ,EAAIK,QAAQC,IAAIC,OAAmBN,EAOjCD,EANAA,EAAIQ,MAAM,CACVC,WAAY,CACXC,cAAe,UAAUrS,KAAKL,YAAY2S,cAC1C,mBAAoBC,KAAKC,SAASC,cAKvC,SAAOC,MACNzK,EAAK0K,OAAOZ,GAAS/O,QACpB4P,MAAI,CACHC,MAAQA,KACeA,KAGNC,SAAWC,KAAYC,cAHjBH,EAG+CC,SAAWC,KAAYE,WAY3FjT,KAAKwR,gBAAgB0B,YAVA,CACpB1S,MAAO,uBACP2S,QAAS,+CACTC,kBAAmB,CAClBC,cAAe,CAAElF,MAAOnO,KAAKmO,QAE9BmF,gBAAgB,EAChB9R,OAAQA,IAAM+R,OAAO3Q,KAAKsO,GAAelR,KAAKmO,MAAOnO,KAAKyR,gBAAgB+B,IAAIf,cAIhF,KAKL,CAEA,SAAItE,GACH,OAAOnO,KAAKkO,cAAcnM,UAAU,UACrC,iDA9DYwP,GAAehO,MAElBE,MAAYF,MAAAG,OAAAH,MAGZ8K,MAAW9K,MAAAI,MAAA,yCALR4N,EAAekC,QAAflC,EAAemC,WAAA,SAAfnC,CAAe,qBCZrB,MAAMoC,GAAc,CAC1BC,YAAY,EACZC,OAAQ,yBACRC,SAAU,4BACVC,OAAQ,yBACRC,cAAc,EACdC,UAAW,CACVC,gBAAiB,aACjBC,QAAS,WACTC,cAAe,CACdF,gBAAiB,aACjBC,QAAS,WACTE,cAAc,GAEfC,kBAAmB,CAClBC,mBAAmB,EACnBC,iBAAkB,4BAClBC,mBAAoB,8BACpBC,wBAAwB,EAGxBC,yBAAyB,EACzBC,uBAAuB,EACvBC,iCAAkC,CAAC,sBAAuB,sBAAuB,wBAGnFC,WAAY,CACXC,QAAS,2BACTC,aAAc,wBACdC,mBAAoB,uBACpBC,WAAY,6BAEbC,aAAc,CACbC,OAAQ,CACPC,QAAS,sCACTC,SAAU,oCAEXC,oBAAqB,CACpBF,QAAS,sCACTC,SAAU,qBAEXE,KAAM,CACLH,QAAS,sCACTC,SAAU,YAEXG,aAAc,CACbJ,QAAS,sCACTC,SAAU,qBAEXI,SAAU,CACTL,QAAS,sCACTC,SAAU,gBAEXK,WAAY,CACXN,QAAS,sCACTC,SAAU,OAEXM,mBAAoB,CACnBP,QAAS,sCACTC,SAAU,4BAEXO,sBAAuB,CACtBR,QAAS,sCACTC,SAAU,+BAEXQ,YAAa,CACZT,QAAS,sCACTC,SAAU,oBAEXS,cAAe,CACdV,QAAS,sCACTC,SAAU,sBAEXU,sBAAuB,CACtBX,QAAS,sCACTC,SAAU,gCAEXW,sBAAuB,CACtBZ,QAAS,sCACTC,SAAU,gCAEXY,sBAAuB,CACtBb,QAAS,sCACTC,SAAU,gCAEXa,mBAAoB,CACnBd,QAAS,sCACTC,SAAU,4BAEXc,0BAA2B,CAC1Bf,QAAS,sCACTC,SAAU,oCAEX3T,YAAa,CACZ0T,QAAS,sCACTC,SAAU,YAEXe,UAAW,CACVhB,QAAS,sCACTC,SAAU,uCAEXgB,UAAW,CACVjB,QAAS,sCACTC,SAAU,+BAEXiB,UAAW,CACVlB,QAAS,sCACTC,SAAU,+BAEXkB,4BAA6B,CAC5BnB,QAAS,sCACTC,SAAU,qBAGXmB,2BAA4B,CAC3BpB,QAAS,8CACTC,SAAU,qBAEXoB,YAAa,CACZrB,QAAS,sCACTC,SAAU,cAGZqB,gBAAiB,CAChBC,oBAAqB,uCACrBC,oBAAqB,8BAEtB9W,oBAAqB,CACpB+W,uBAAwB,+CACxBC,mBAAoB,0CACpBjV,4BAA6B,sCAC7BE,gCAAiC,4CAElCgV,eAAgB,CACfC,2BAA4B,oCAE7BC,cAAe,CACdC,eAAgB,sCCvIZC,GAAO7D,OAAO8D,SAASC,KAIhBC,GAAa,CACzBzD,SAAUH,GAAYG,SACtBD,OAAQF,GAAYE,OACpB2D,YALoB,GADJ7D,GAAYK,aAAe,WAAa,YACtBoD,KAMlCK,mBAAoB9D,GAAYE,OAChC6D,MAAO/D,GAAYI,OACnB4D,sBAAsB,mBCYhB,IAAMC,GAAW,MAAlB,MAAOA,EAGZnY,YAEkBE,EACT6R,EAEAtD,EACAuD,GAJSzR,KAAAL,cACTK,KAAAwR,kBAEAxR,KAAAkO,gBACAlO,KAAAyR,iBAER,MAAMoG,EAAkC,CACvCC,UAAWP,GAAW1D,OACtBkE,UAAWR,GAAWzD,SACtBkE,aAAc,GAAGT,GAAWC,8BAC5BE,MAAOH,GAAWG,MAClBO,cAAe,OACfC,yBAA0B,GAAGX,GAAWC,+BACxCW,sBAAsB,EACtBC,oBAAqB,GAAGb,GAAWC,+BACnCa,cAAc,EACdC,UAAW,IAAIC,MAAsB,CAAEC,MAAOC,aAAcC,OAAQ,SAGrE1Y,KAAK2Y,YAAc,IAAIC,MAAYf,GAEnC7X,KAAK2Y,YAAYhO,OAAOkO,sBAAsB,IAAM7Y,KAAK0C,UACzD1C,KAAK2Y,YAAYhO,OAAOmO,oBAAoB,IAAM9Y,KAAK0C,UACvD1C,KAAK2Y,YAAYhO,OAAOoO,cAAeC,GAAWhZ,KAAKL,YAAYsZ,eAAeD,GACnF,CAEAvX,MAAMyX,GACL,OAAOlZ,KAAK2Y,YAAYQ,eAAe,CACtCC,MAAO,CACNF,gBAGH,CAEMzL,gBAAa,IAAA4L,EAAArZ,KAAA,SAAAsZ,MAAA,YAClB,aAAaD,EAAKV,YAChBY,yBACA7L,KAAMsL,IACN,MAAMxB,EAAewB,EAAOI,OAAeF,YAC3CG,SAAK5H,eAAenO,IAAI,cAAekW,MAASC,YAAa,kBAAmB,CAC/EC,qBAAsBlC,IAEhBA,IAEPmC,MAAO9G,IACP,MAAM+G,EAAe,CACpBpZ,MAAO,uBACP2S,QAAS,sCACTC,kBAAmB,CAClBC,cAAe,CAAElF,MAAOkL,EAAKlL,QAE9BmF,gBAAgB,EAChB9R,OAAQA,IAAM+R,OAAO3Q,KAAKsO,GAAemI,EAAKlL,MAAOkL,EAAK5H,gBAAgB+B,IAAIf,cAG/E4G,EAAK7H,gBAAgBqI,UAAUD,GAC/BP,EAAK5H,eAAeqI,aAAa,cAAeN,MAASO,MAAO,+BAAgClH,EAAK,EACnG,EAvBc,EAwBnB,CAEMnQ,SAAM,IAAAsX,EAAAha,KAAA,SAAAsZ,MAAA,kBACLU,EAAKrB,YAAYsB,iBAAkB,EAD9B,EAEZ,CAEMnM,iBAAc,IAAAoM,EAAAla,KAAA,SAAAsZ,MAAA,YACnBY,EAAKva,YAAYwa,yBACXD,EAAKvB,YAAYyB,wBACjBF,EAAKvB,YAAY0B,mBACjBH,EAAKvB,YAAY2B,0BAA0B5M,KAAK,KACrDwM,EAAKzI,eAAenO,IAAI,cAAekW,MAASC,YAAa,mBAAkB,EAC7E,EANgB,EAOpB,CAEMzL,uBAAoB,IAAAuM,EAAAva,KAAA,SAAAsZ,MAAA,kBACnBiB,EAAK5B,YAAY3K,sBAAuB,EADrB,EAE1B,CAEM9M,OAAI,IAAAsZ,EAAAxa,KAAA,SAAAsZ,MAAA,YACT,MAAMmB,QAAaD,EAAK7B,YAAY+B,UACpCF,EAAK7a,YAAYsZ,eAAewB,EAAM,EAF7B,EAGV,CAEA,SAAItM,GACH,OAAOnO,KAAKkO,cAAcnM,UAAU,UACrC,iDAzFY6V,GAAWrU,MAIdE,MAAYF,MAAAG,OAAAH,MAGZ8K,MAAW9K,MAAAI,OAAA,sCAPRiU,EAAWnE,QAAXmE,EAAWlE,WAAA,SAAXkE,CAAW,iCChBjB,MAAM+C,GAAe,IAAIrW,MAA6B,gBCAtD,IAAMsW,GAA2B,MAAlC,MAAOA,EAOZ,UAAIC,GACH,OAAOC,OAAOC,QAAQ/a,KAAKya,KAAKO,SAAShQ,IAAI,EAAEiQ,EAAKpY,MAAK,CAASoY,MAAKpY,UACxE,CAEA,eAAIlB,GACH,OAAI3B,KAAKya,MAAMO,QACP,IAAIE,KAAYlb,KAAKya,KAAKO,QAAQG,WAAYnb,KAAKya,KAAKO,QAAQI,YAAapb,KAAKya,KAAKO,QAAQ7M,OAEhG,IACR,CAEA,eAAImE,GACH,OAAOtS,KAAKya,KAAOza,KAAKya,KAAKY,aAAe,IAC7C,CAEA5b,YAAmD6b,GAAAtb,KAAAsb,cApB3Ctb,KAAAub,mBAAuC,IAAIC,KAAuB,GAClExb,KAAAyb,8BAAkD,IAAID,KAAuB,GACrFxb,KAAAU,mBAAqBV,KAAKub,mBAAmBG,eAC7C1b,KAAAc,wBAA0Bd,KAAKyb,8BAA8BC,eAkB5D1b,KAAKU,mBACHsC,QACA6H,MAAQiI,GAAWA,IAAM,EACzB6I,MAAU,IACT3b,KAAKsb,YACHM,iBACA5Y,QAAK4P,MAAK6H,GAASza,KAAKyb,8BAA8BxT,KAAKwS,GAAMoB,SAASC,OAAS,OAGtFnb,WACH,CAEAsY,eAAewB,GACVA,IAASza,KAAKya,OACjBza,KAAKya,KAAOA,EAEZza,KAAKub,mBAAmBtT,OADPwS,IAASA,EAAKsB,SAGjC,CAEA5B,mBACCna,KAAKya,KAAO,KACZza,KAAKub,mBAAmBtT,MAAK,EAC9B,iDA9CY2S,GAA2BrX,MAsBnBoX,IAAY,sCAtBpBC,EAA2BnH,QAA3BmH,EAA2BlH,WAAA,SAA3BkH,CAA2B,iCCOjC,IAAMoB,GAAqB,MAA5B,MAAOA,EACZvc,YAAgCgS,GAAAzR,KAAAyR,gBAAiC,CAEjEC,UAAUC,EAA2B1J,GACpC,OAAOA,EAAK0K,OAAOhB,GAAK3O,QACvBiZ,MAAYC,IACX,GAAIA,EAAe,CAClB,MAAQpJ,SAAQD,QAAO3H,OAAQgR,EACzBC,EAAWtJ,GAA0CsJ,QAE3D,GAAIrJ,IAAWsJ,MAAeC,WAC7B,MAAArc,KAAKyR,eAAenO,IAAI4H,EAAKsO,MAAS8C,QAASH,GACzCI,KAAY/J,OAAO2J,EAE3B,CAEA,SAAOK,MAAW,IAAMN,EAAa,GAGxC,iDAnBYF,GAAqBzY,MAAAG,MAAA,yCAArBsY,EAAqBvI,QAArBuI,EAAqBtI,WAAA,SAArBsI,CAAqB,KCCrBS,GAA8B,MAArC,MAAOA,EAGZhd,YACqBgS,EAEZvD,GAFYlO,KAAAyR,iBAEZzR,KAAAkO,eAET,CAEAwD,UAAUC,EAA2B1J,GACpC,OAAOA,EAAK0K,OAAOhB,GAAK3O,QACvBiZ,MAAYC,IACX,GAAIA,EAAe,CAClB,MAAQpJ,SAAQ5H,MAAK2H,SAAUqJ,EAC/B,GAAIrJ,GAAS,YAAaA,EAAO,CAChC,MAAQM,WAAYN,EACpB,GAAIC,IAAWsJ,MAAeM,oBAAqB,CAClD,MAAMC,GAAUC,GAAezJ,GAC/B,MAAAnT,KAAKyR,eAAenO,IAAI4H,EAAKsO,MAASO,MAAO,yBAA0B,CAAE4C,aACnEJ,KAAY/J,OAAO,sCAAuC,CAC/DrE,MAAOnO,KAAKkO,cAAcnM,UAAU,WACpC4a,iBACEE,EAAWC,KAAgBC,YAC/B,CACD,CAEA,SAAOP,MAAW,IAAMN,EACzB,IAGH,iDA/BYO,GAA8BlZ,MAAAG,MAAA,GAAAH,MAKjC8K,MAAW,sCALRoO,EAA8BhJ,QAA9BgJ,EAA8B/I,WAAA,SAA9B+I,CAA8B,KAkCpC,MAAMG,GAAkBzJ,IAC9B,MAEM6J,EAAa7J,EAAQ8J,QAFD,QAE8BC,EAClDC,EAAWhK,EAAQ8J,QAFD,iBAGlBzJ,EAAKL,EAAQiK,UAAUJ,EAAYG,GAGzC,OAAI3J,EAAGsI,OAAS,GAFD,6EAGHuB,KAAK7J,GACRA,EAIF,ICjDD,IAAM8J,GAA8B,MAArC,MAAOA,EACZ7d,YACqBgS,EAEZvD,GAFYlO,KAAAyR,iBAEZzR,KAAAkO,eACN,CAEHwD,UAAUC,EAA2B1J,GACpC,OAAOA,EAAK0K,OAAOhB,GAAK3O,QACvBiZ,MAAYC,IACX,GAAIA,EAAe,CAClB,MAAQpJ,SAAQ5H,OAAQgR,EAExB,GAAIpJ,IAAWsJ,MAAemB,mBAC7B,MAAAvd,KAAKyR,eAAenO,IAAI4H,EAAKsO,MAAS8C,QAAS,yBACzCC,KAAY/J,OAAO,+CAAgD,CACxErE,MAAOnO,KAAKkO,cAAcnM,UAAU,aAItC,SAAOya,MAAW,IAAMN,EACzB,IAGH,iDAxBYoB,GAA8B/Z,MAAAG,MAAA,GAAAH,MAGjC8K,MAAW,sCAHRiP,EAA8B7J,QAA9B6J,EAA8B5J,WAAA,SAA9B4J,CAA8B,KCA9BE,GAAgC,MAAvC,MAAOA,EACZ/d,YAAgCgS,GAAAzR,KAAAyR,gBAAiC,CAEjEC,UAAUC,EAA2B1J,GACpC,OAAOA,EAAK0K,OAAOhB,GAAK3O,QACvBiZ,MAAYC,IACX,GAAIA,EAAe,CAClB,MAAQpJ,SAAQ5H,OAAQgR,EAExB,GAAIpJ,IAAWsJ,MAAeqB,qBAC7B,MAAAzd,KAAKyR,eAAenO,IAAI4H,EAAKsO,MAAS8C,QAAS,0BACzCC,KAAY/J,OAAO,gDAE3B,CAEA,SAAOgK,MAAW,IAAMN,EAAa,GAGxC,iDAlBYsB,GAAgCja,MAAAG,MAAA,yCAAhC8Z,EAAgC/J,QAAhC+J,EAAgC9J,WAAA,SAAhC8J,CAAgC,KCAhCE,GAA0B,MAAjC,MAAOA,EACZje,YACqBgS,EAEZvD,GAFYlO,KAAAyR,iBAEZzR,KAAAkO,eACN,CAEHwD,UAAUC,EAA2B1J,GACpC,OAAOA,EAAK0K,OAAOhB,GAAK3O,QACvBiZ,MAAYC,IACX,GAAIA,EAAe,CAClB,MAAQpJ,SAAQ5H,OAAQgR,EAExB,GAAIpJ,IAAWsJ,MAAeuB,gBAC7B,MAAA3d,KAAKyR,eAAenO,IAAI4H,EAAKsO,MAAS8C,QAAS,sBACzCC,KAAY/J,OAAO,6CAA8C,CACtErE,MAAOnO,KAAKkO,cAAcnM,UAAU,aAItC,SAAOya,MAAW,IAAMN,EACzB,IAGH,iDAxBYwB,GAA0Bna,MAAAG,MAAA,GAAAH,MAG7B8K,MAAW,sCAHRqP,EAA0BjK,QAA1BiK,EAA0BhK,WAAA,SAA1BgK,CAA0B,KCL1BE,GAAkB,MAAzB,MAAOA,EAGZne,YACSoe,EACArM,EACYtD,EACAuD,GAHZzR,KAAA6d,OACA7d,KAAAwR,kBACYxR,KAAAkO,gBACAlO,KAAAyR,iBAEhBzR,KAAKkO,eACRlO,KAAKkO,cAAc4P,UAAUnd,UAAWod,GAAa/d,KAAKge,aAAaD,GAEzE,CAEAC,aAAaD,GACZ/d,KAAKie,OAASF,CACf,CAEAG,YAAYrL,GACX,GAAIA,aAAiB0J,KAAa,CACjC,GAAI1J,EAAMsL,YAAcrB,KAAgBC,YAAa,CACpD,MAAMnD,EAAe,CACpBpZ,MAAO,8BACP2S,QAASN,EAAMM,QACfG,gBAAgB,EAChBF,kBAAmB,CAClBC,cAAeR,EAAMQ,gBAGvB,OAAOrT,KAAK6d,KAAKO,IAAI,KACpBpe,KAAKwR,gBAAgBqI,UAAUD,EAjCL,GAiCyC,EAErE,CAEA,GAAI/G,EAAMsL,YAAcrB,KAAgBR,QAAS,CAChD,MAAM1C,EAAe,CACpBpZ,MAAO,yBACP2S,QAASN,EAAMM,QACfG,gBAAgB,EAChBF,kBAAmB,CAClBC,cAAeR,EAAMQ,gBAGvB,OAAOrT,KAAK6d,KAAKO,IAAI,KACpBpe,KAAKwR,gBAAgB0B,YAAY0G,EAhDL,EAgD2C,EAEzE,CACD,CAIA5Z,KAAKyR,eAAeqI,aAAa9Z,KAAKie,OAAO/J,gBAAiBsF,MAASO,MAAOlH,EAAMM,QAASN,GAE7F,MAAM+G,EAAe,CACpBpZ,MAAO,8BACP2S,QAAS,yCACTG,gBAAgB,GAEjBtT,KAAK6d,KAAKO,IAAI,IAAMpe,KAAKwR,gBAAgB6M,gBAAgBzE,GAC1D,iDA3DYgE,GAAkBra,mBAAAG,OAAAH,MAAAI,MAAA,GAAAJ,MAAAI,MAAA,yCAAlBia,EAAkBnK,QAAlBmK,EAAkBlK,WAAA,SAAlBkK,CAAkB,qBCLxB,IAAMU,GAAe,MAAtB,MAAOA,EADb7e,cAEkBO,KAAAue,SAAW,IAAIC,YACxBxe,KAAAye,KAKF,GAENC,QAAWC,EAAiBC,GAC3B5e,KAAKue,SAASG,QAAWC,EAASC,EACnC,CAEAC,SAASF,EAAiBG,GACzB,OAAO9e,KAAKue,SAASM,SAASF,EAASG,EACxC,CAEAne,UAAage,EAAiBI,GAC7B,MAAMC,EAAehf,KAAKue,SAAS5d,UAAage,GAAS,EAAMI,GAE/D/e,KAAKye,KAAKQ,KAAK,CACdN,UACAK,gBAEF,CAEA9W,YAAYyW,GACX3e,KAAKye,KAAK5T,OAAQqU,GAAQA,EAAIP,UAAYA,GAASQ,QAAQ,EAAGH,kBAAmBA,EAAa9W,cAC/F,CAEAkX,WAAWT,GACV,OAAO3e,KAAKue,SAASa,WAAWT,EACjC,iDAhCYL,EAAe,sCAAfA,EAAe7K,QAAf6K,EAAe5K,WAAA,SAAf4K,CAAe,qBCErB,IAAMe,GAAwB,MAA/B,MAAOA,EACZ5f,YAAoB+Y,GAAAxY,KAAAwY,OAAyB,CAC7C8G,kBACC,OAAOtf,KAAKwY,MAAM+G,OAAOC,KAC1B,iDAJYH,GAAwB9b,MAAAG,OAAA,sCAAxB2b,EAAwB5L,QAAxB4L,EAAwB3L,WAAA,SAAxB2L,CAAwB,6CCC9B,IAAMI,GAAY,MAAnB,MAAOA,UAAoBC,KAChCjgB,YAESyO,EACsCyR,GAE9CC,QAHQ5f,KAAAkO,gBACsClO,KAAA2f,gBAG9C3f,KAAK6f,YAAc,aACpB,CAEAjE,iBACC,MAAMkE,EAAU9f,KAAK+f,6BAA6B,MAC5C9B,EAASje,KAAKkO,cAAcnM,UAAU,eAE5C,OAAO/B,KAAKggB,eAA6B,CACxCC,WAFW,GAAGhC,EAAO5I,UAAU4I,EAAO3I,WAGtC4K,cAAeC,KAAkBC,IACjCN,YACE9c,QACFC,KAAK,IAAC,EACN+H,KAAK8G,GCxB4BuO,MACnCpb,KAAMob,EAASpb,KACfqb,SAAUD,EAASC,SACnBnS,MAAOkS,EAASlS,MAChB2F,SAAUuM,EAASE,iBACnBC,WAAYH,EAASG,WACrB3E,QAASwE,EAASxE,QAAQ7Q,IAAK8G,KAAS7M,KAAM6M,EAAE2O,WAAYjN,GAAI1B,EAAE4O,oBAClEC,MAAON,EAASM,MAAM3V,IAAK8G,KAC1B5M,QAAM0b,OAAiBC,KAAU/O,EAAEgP,gBACnC7b,KAAM6M,EAAEiP,SACRC,SAAUlP,EAAE4O,iBACZ5M,SAAUhC,EAAEyO,sBDaAU,CAAoBnP,KAAE,EACjCc,MAAKoG,GAAWhZ,KAAK2f,cAAcuB,eAAelI,IAEpD,iDAvBYyG,GAAWlc,MAEd4d,MAAa5d,MAEb6d,MAAmB,sCAJhB3B,EAAWhM,QAAXgM,EAAW/L,WAAA,SAAX+L,CAAY,KEFZ4B,GAAkB,MAAzB,MAAOA,EACZ5hB,YAAoB+Y,GAAAxY,KAAAwY,OAAyB,CAC7C8I,eACC,OAAOthB,KAAKwY,MAAM+G,OAAOgC,KAC1B,CAEAC,gBAAgBC,GACfzhB,KAAKwY,MAAMkJ,YAASC,MAAS,CAAEF,UAChC,iDARYJ,GAAkB9d,MAAAG,OAAA,sCAAlB2d,EAAkB5N,QAAlB4N,EAAkB3N,WAAA,SAAlB2N,CAAkB,qBCCxB,IAAMO,GAAiB,MAAxB,MAAOA,EAGZniB,YAEkBoiB,GAAA7hB,KAAA6hB,UAJV7hB,KAAA8hB,mBAAqB,kBAK1B,CAEHpQ,UAAUqQ,EAA+B9Z,GAExC,OADmB8Z,EAAQ/P,QAAQC,IAAI+P,OAEtChiB,KAAKiiB,YAAW,EAAMF,GACf9Z,EAAK0K,OAAOoP,GAAS/e,QAC3Bkf,MAAS,KACRliB,KAAKiiB,YAAW,EAAOF,EAAO,KAIzB9Z,EAAK0K,OAAOoP,EAErB,CAEQE,WAAWE,EAAoBJ,GACtC,IAAIK,EAAYL,EAAQ7W,IACpB6W,GAASjC,SAASuC,IAAIriB,KAAK8hB,sBAC9BM,EAAYL,EAAQjC,QAAQ7N,IAAIjS,KAAK8hB,qBAEtC9hB,KAAK6hB,QAAQI,WAAWE,EAAWC,EACpC,iDA5BYR,GAAiBre,MAIpB+e,OAAe,sCAJZV,EAAiBnO,QAAjBmO,EAAiBlO,WAAA,SAAjBkO,CAAiB,KCLxB,MAAOW,GAAb9iB,cACSO,KAAAwiB,aAAe,IAAIhe,GAsC5B,CApCCie,aAAaC,GACZ,OAAOA,EAAMxf,KAAKyf,aACnB,CAEAnK,MAAMkK,EAA+B/P,GACpC,MAAMsI,EAAMjb,KAAK4iB,YAAYF,GAC7B1iB,KAAKwiB,aAAaK,IAAI5H,EAAKtI,EAC5B,CAEAmQ,aAAaJ,GACZ,OAAO1iB,KAAKwiB,aAAaH,IAAIriB,KAAK4iB,YAAYF,GAC/C,CAEAK,SAASL,GACR,OAAO1iB,KAAKwiB,aAAavQ,IAAIjS,KAAK4iB,YAAYF,GAC/C,CAEAM,iBAAiBC,EAAgCC,GAChD,OAAOD,EAAOE,cAAgBD,EAAKC,WACpC,CAEO1U,iBAAiBwM,GACvB,MAAMtI,EAAS3S,KAAKwiB,aAAavQ,IAAIgJ,GACjCtI,GACFA,EAAeyQ,aAAaC,UAG9BrjB,KAAKwiB,aAAac,OAAOrI,EAC1B,CAEQ2H,YAAYF,GACnB,OAAOA,EAAMa,aACX1Y,OAAQgF,GAAMA,EAAE3E,KAChBF,IAAK6E,GAAMA,EAAE3E,KACbsY,KAAK,IACR,EClCM,IAAMC,GAAkB,MAAzB,MAAOA,UAA0BC,IACtCjkB,YAA6Be,EAA+BmjB,GAC3D/D,QAD4B5f,KAAAQ,QAA+BR,KAAA2jB,kBAE5D,CAEAC,YAAYC,GACX,MAAMC,EAAU9jB,KAAK2jB,iBAAiBI,eAAe,YAC/CvjB,EAAQR,KAAKgkB,WAAWH,GAE9B,QAAchH,IAAVrc,EAAqB,CACxB,MAAMyjB,EAAmBjkB,KAAK2jB,iBAAiBI,eAAevjB,GAC9D,OAAOR,KAAKQ,MAAM0jB,SAAS,GAAGJ,OAAaG,IAC5C,CAEAjkB,KAAKQ,MAAM0jB,SAAS,GAAGJ,IACxB,iDAfYL,GAAiBlgB,MAAAG,MAAAH,MAAAI,MAAA,sCAAjB8f,EAAiBhQ,QAAjBgQ,EAAiB/P,WAAA,SAAjB+P,CAAkB,iCCExB,IAAMU,GAAiB,MAAxB,MAAOA,EAGZ1kB,YAA0DkgB,GAAA3f,KAAA2f,gBAFlD3f,KAAAokB,cAAgB,oBAEsE,CAE9F1S,UAAUC,EAA2B1J,GACpC,OAAOjI,KAAK2f,cAAc0E,oBAAoBrhB,QAC7CC,KAAK,IAAC,EACNqhB,MAAUC,IACT,IAAIxC,EAAUpQ,EACd,OAAI4S,GAAgB/Q,KAAO7B,EAAIK,QAAQC,IAAIC,QAC1C6P,EAAUpQ,EAAIQ,MAAM,CACnBC,WAAY,CACX,CAACpS,KAAKokB,eAAgBG,GAAgB/Q,OAIlCvL,EAAK0K,OAAOoP,EAAO,GAG7B,iDApBYoC,GAAiB5gB,MAGT6d,MAAmB,sCAH3B+C,EAAiB1Q,QAAjB0Q,EAAiBzQ,WAAA,SAAjByQ,CAAiB,iCCQvB,IAAMK,GAAmB,MAA1B,MAAOA,EAMZ,sCAAIxY,GACH,OAAOhM,KAAKykB,yCAAyC/I,cACtD,CAEA,yCAAIvP,GACH,OAAOnM,KAAK0kB,4CAA4ChJ,cACzD,CAEAjc,YAEkBklB,EAEAC,EACmBrG,EAE5BrQ,GALSlO,KAAA2kB,2BAEA3kB,KAAA4kB,+BACmB5kB,KAAAue,WAE5Bve,KAAAkO,gBApBQlO,KAAA6kB,cAAgB,KAChB7kB,KAAAykB,yCAA2C,IAAIjJ,KAC/Cxb,KAAA0kB,4CAA8C,IAAIlJ,KAC3Dxb,KAAAwH,WAA4B,IAAIC,IAyGhCzH,KAAA8kB,yBAAkF,EAAGlG,cACxFA,GAASmG,yBACZ/kB,KAAKglB,0BAA0BrkB,WAAS,EAIlCX,KAAAilB,4BAAqF,EAAGrG,cAC3FA,GAASmG,yBACZ/kB,KAAKklB,6BAA6BvkB,WAAS,EA9F5C,MAAMwkB,EAAiBjX,EAAcnM,UAAU,0BAC3CojB,IACHnlB,KAAK6kB,cAAyC,IAAzB3iB,OAAOijB,GAE9B,CAEAjkB,OACClB,KAAKwH,WAAWS,OAChBjI,KAAKolB,gCACLplB,KAAKqlB,+BACN,CAEQA,gCACPrlB,KAAKue,SAASM,SAAS,kCAAmC,CACzD3Z,KAAM,SACNogB,SAAU,CAAC,2BACXC,WAAY,CACXR,wBAAyB,CACxB7f,KAAM,cAITlF,KAAKue,SAAS5d,UAAU,kCAAmCX,KAAK8kB,0BAChE9kB,KAAKue,SAASM,SAAS,gCAAiC,CACvD3Z,KAAM,SACNogB,SAAU,CAAC,2BACXC,WAAY,CACXR,wBAAyB,CACxB7f,KAAM,cAITlF,KAAKue,SAAS5d,UAAU,gCAAiCX,KAAKilB,4BAC/D,CAEQG,gCAEPplB,KAAKwlB,wBAAwBxiB,QAAK6E,KAAU7H,KAAKwH,aAAa7G,YAE9DX,KAAKylB,2BAA2BziB,QAAK6E,KAAU7H,KAAKwH,aAAa7G,WAClE,CAEQ6kB,wBACP,OAAOxlB,KAAKglB,0BAA0BhiB,QACrC2Y,MAAU,OACT+J,MAAS1lB,KAAK6kB,eAAe7hB,QAC5B6E,KAAU7H,KAAKwH,aAAU,EACzBmU,MAAU,IAAM3b,KAAKglB,6BAIzB,CAEQS,2BACP,OAAOzlB,KAAKklB,6BAA6BliB,QACxC2Y,MAAU,OACT+J,MAAS1lB,KAAK6kB,eAAe7hB,QAC5B6E,KAAU7H,KAAKwH,aAAU,EACzBmU,MAAU,IAAM3b,KAAKklB,gCAIzB,CAEQF,0BACP,OAAOhlB,KAAK2kB,yBAAyBgB,yBAAyB3iB,QAC7DC,KAAK,IAAC,EACN2P,MAAKd,GAAM9R,KAAKykB,yCAAyCxc,KAAK6J,KAAE,EAChEmK,MAAYpJ,IACXxP,QAAQwP,MAAM,oCAAqCA,GAC5C+S,OAGV,CAEQV,6BACP,OAAOllB,KAAK4kB,6BAA6Be,yBAAyB3iB,QACjEC,KAAK,IAAC,EACN2P,MAAKd,GAAM9R,KAAK0kB,4CAA4Czc,KAAK6J,KAAE,EACnEmK,MAAYpJ,IACXxP,QAAQwP,MAAM,oCAAqCA,GAC5C+S,OAGV,CAcA5d,cACChI,KAAKwH,WAAWS,OAChBjI,KAAKwH,WAAWU,aACjB,iDA5HYsc,GAAmBjhB,MAetBsiB,MAA2BtiB,MAE3BuiB,MAA+BviB,MAE/BwiB,MAASxiB,MACTM,MAAoB,sCApBjB2gB,EAAmB/Q,QAAnB+Q,EAAmB9Q,WAAA,SAAnB8Q,CAAmB,KCFnBwB,GAAyB,MAAhC,MAAOA,UAAiCtG,KAC7CjgB,YAESyO,GAER0R,QAFQ5f,KAAAkO,gBAGRlO,KAAK6f,YAAc,0BACpB,CAEA8F,yBACC,OAAO3lB,KAAKimB,sBACb,CAEQA,uBACP,MAAMnG,EAAU9f,KAAK+f,6BAA6B,MAC5C9B,EAASje,KAAKkO,cAAcnM,UAAU,gBAG5C,OAAO/B,KAAKggB,eAAqC,CAChDC,WAHW,GAAGhC,EAAO5I,UAAU4I,EAAO3I,yBAItC4K,cAAeC,KAAkBC,IACjCN,UACA9N,SAAS,IAAIkU,OAAcrD,IAAIb,MAAa,KAC1Chf,QAAKgI,KAAKmb,GAAyBA,GAAsBC,UAAUC,WAAa,GACpF,iDAxBYL,GAAwBziB,MAE3B4d,MAAa,sCAFV6E,EAAwBvS,QAAxBuS,EAAwBtS,WAAA,SAAxBsS,CAAyB,KCd/B,IAAKM,GAAZ,SAAYA,GACXA,SAAAC,WAAA,aACAD,EAAAE,eAAA,iBAFWF,CAGZ,CAHA,CAAYA,IAAY,ICiBjB,IAAMG,GAA6B,MAApC,MAAOA,UAAqC/G,KACjDjgB,YAES0V,EAEApV,GAER6f,QAJQ5f,KAAAmV,eAEAnV,KAAAD,sBAGRC,KAAK6f,YAAc,8BACpB,CAEA8F,yBACC,OAAO3lB,KAAK0mB,yBACb,CAEQA,0BACP,MAAM5G,EAAU9f,KAAK+f,6BAA6B,MAC5C9B,EAASje,KAAKmV,aAAapT,UAAU,eACrCgV,EAAqB/W,KAAKD,oBAAoBgC,UAAU,uBAAyB,OAEvF,IAAImJ,EAAM,GAAG+S,EAAO5I,UAAU4I,EAAO3I,yBAAyBgR,GAAaE,eAAe/T,aAC1FvH,SAAM,GAAGA,kBACTA,EAAM,GAAGA,mBACTA,EAAM,GAAGA,iBAAG,EAAeyb,OAAoBzkB,OAAO6U,MAE/C/W,KAAKggB,eAAoC,CAC/CC,WAAY/U,EACZgV,cAAeC,KAAkBC,IACjCN,UACA9N,SAAS,IAAIkU,OAAcrD,IAAIb,MAAa,KAC1Chf,QAAKgI,KAAKqV,GAAaA,GAAU+F,UAAUC,WAAa,GAC5D,iDA/BYI,GAA4BljB,MAE/B4d,MAAa5d,MAEbM,MAAoB,sCAJjB4iB,EAA4BhT,QAA5BgT,EAA4B/S,WAAA,SAA5B+S,CAA6B,KCQ7BG,GAAkB,MAAzB,MAAOA,oDAAkB,oCAAlBA,GAAkB,wCAfnB,CACV,CACCphB,QAAS5B,KACTijB,SAAUrC,IAEX,CACChf,QAASqgB,KACTgB,SAAUb,IAEX,CACCxgB,QAASsgB,KACTe,SAAUJ,MAEX,SAEWG,CAAkB,+BC0BxB,IAAME,GAAU,MAAjB,MAAOA,EACZrnB,YAAoCsnB,GACnC/mB,KAAKgnB,qBAAqBD,EAC3B,CAEA,cAAOzW,GAWN,MAAO,CACN2W,SAAUH,EACVI,UAAW,CAZqB,CAChC,CAAE1hB,QAAS2hB,MAAmBN,SAAUtV,GAAiB6V,OAAO,GAChE,CAAE5hB,QAAS2hB,MAAmBN,SAAU1C,GAAmBiD,OAAO,GAClE,CAAE5hB,QAAS2hB,MAAmBN,SAAUjF,GAAmBwF,OAAO,GAClE,CAAE5hB,QAAS2hB,MAAmBN,SAAU7K,GAAuBoL,OAAO,GACtE,CAAE5hB,QAAS2hB,MAAmBN,SAAUvJ,GAAgC8J,OAAO,GAC/E,CAAE5hB,QAAS2hB,MAAmBN,SAAUrJ,GAAkC4J,OAAO,GACjF,CAAE5hB,QAAS2hB,MAAmBN,SAAUnJ,GAA4B0J,OAAO,GAC3E,CAAE5hB,QAAS2hB,MAAmBN,SAAUpK,GAAgC2K,OAAO,IAM9E,CACC5hB,QAAS6hB,MACTR,SAAUjJ,IAEX,CACCpY,QAAShC,KACTqjB,SAAUjP,IAEX,CACCpS,QAAS/B,KACTojB,SAAUjM,IAEX,CACCpV,QAASmV,GACTkM,SAAUpH,IAEX,CACCja,QAAS8c,MACTuE,SAAUS,OAEX,CACC9hB,QAASmJ,KACTkY,SAAUU,MAEX,CACC/hB,QAASugB,KACTc,SAAUvI,IAEX,CACC9Y,QAASgiB,KACTX,SAAUtE,IAEX,CACC/c,QAASke,IACTmD,SAAUpD,KAId,CAEQuD,qBAAqBD,GAC5B,GAAIA,EACH,MAAM,IAAIhN,MAAM,GAAGgN,EAAatnB,YAAYwF,8DAE9C,iDAhEY6hB,GAAUvjB,MAAAujB,EAAA,wCAAVA,GAAU,wCAXX,CACV,CACCthB,QAASiiB,KACTZ,SAAUxH,IAEX,CACC7Z,QAASkiB,KACTb,SAAUxF,KAEX3b,QAAA,CAhBAiiB,KAAkBrX,UAClBsX,MAActX,QAAQ,CAAE2N,OAAQtK,GAAYM,YAC5C4T,KAAoBvX,QAAQ,CAAEqD,YAAWA,KACzCmU,KACAlB,GACAmB,OAAiB,SAaNjB,CAAU,iCC3ChB,MAAMkB,MAAmBC,OAAkC,sCACrDC,MAA0BD,OACtC,gDACAE,UAEYC,MAAuBH,OACnC,6CACAE,UCCYE,MAAsBC,OANY,CAC9CplB,KAAM,GACNqlB,QAAQ,EACR1G,SAAS,IAIT2G,EACAC,OAAGT,GAAmB5O,QAClBA,EACHmP,QAAQ,EACR1G,SAAS,MACR,EACF4G,OAAGP,GAAyB,CAAC9O,GAASwF,SAAW1b,YAAM,IACnDkW,EACHlW,KAAM,IACFA,GAEJqlB,QAAQ,EACR1G,SAAS,MACR,EACF4G,OAAGL,GAAsB,CAAChP,QAAkB,IACxCA,EACHmP,QAAQ,EACR1G,SAAS,MC7BE6G,GAAuB,oBAMvBC,GAAmD,CAC/DC,MAAOP,IAGKQ,MAA0BC,OAA4CJ,oBCR5E,IAAMK,GAAoB,MAA3B,MAAOA,UAA4BrJ,KACxCjgB,cACCmgB,QACA5f,KAAK6f,YAAc,qBACpB,CAEAmJ,kBACC,MAAMlJ,EAAU9f,KAAK+f,+BAErB,OAAO/f,KAAKggB,eAA6B,CACxCC,WAFW,8CAGXC,cAAeC,KAAkBC,IACjCN,WAEF,iDAdYiJ,EAAmB,sCAAnBA,EAAmBtV,QAAnBsV,EAAmBrV,UAAAuV,WADN,QAAM,SACnBF,CAAoB,KCApBG,EAAmB,MAA1B,MAAOA,EAWZzpB,YACS0pB,EACAC,GADAppB,KAAAmpB,UACAnpB,KAAAopB,sBAXTppB,KAAAqpB,2BAA0BC,OAAa,IACtCtpB,KAAKmpB,QAAQnmB,QACZumB,OAAOC,KAA4B,EACnC7N,MAAU,IAAM3b,KAAKopB,oBAAoBJ,oBAAiB,EAC1Dhe,KAAIye,GAAiBD,GAAoC,CAAC5K,QAAS,CAAE1b,KAAMumB,OAAiB,EAC5FxN,MAAYpJ,GAAkB,CAAC2W,GAAiC,CAAEE,IAAK,CAAExmB,KAAM2P,QAO9E,iDAdSqW,GAAmB3lB,MAAAG,OAAAH,MAAAI,IAAA,sCAAnBulB,EAAmBzV,QAAnByV,EAAmBxV,WAAA,SAAnBwV,CAAmB,KCCzB,MAAMS,GAAwB,IAAIrlB,MAAqC,yBCGjEslB,KAAuBC,OACnChB,GACCzP,GAAmDA,EAAMwP,OAG9CI,KAAkBa,OAAeD,ELsBXxQ,GAA6BA,EAAMlW,OKrBzD4mB,EAAwBD,OAAeD,ELuBXxQ,GAA6BA,EAAMmP,SKtB/DwB,EAAyBF,OAAeD,ELqBXxQ,GAA6BA,EAAMyI,SM7BtE,IAAMmI,GAAyB,MAAhC,MAAOA,EADbvqB,cAEkBO,KAAAiqB,UAAqC/pB,OAAOgqB,OAE7DC,mBACEnqB,KAAKiqB,OAAOvI,SAASsG,KACvB,CAEApgB,mBAAmBD,GAClB,OAAO3H,KAAKiqB,OAAOjnB,QAAKuc,ODEY5X,OACrCkiB,OAAeb,EAAkBJ,GAAUA,EAAMjhB,KAAgB,GCHjCyiB,CAAsBziB,IACtD,iDATYqiB,EAAyB,sCAAzBA,EAAyBvW,QAAzBuW,EAAyBtW,WAAA,SAAzBsW,CAAyB,KCP/B,MCQDK,GAA8B,IAAI/lB,MAAuD,yBAEzFgmB,GAAcA,SAChB3B,KAGE4B,GAAU,CAACrB,GAuBV,IAAMsB,GAAkB,MAAzB,MAAOA,EACZ/qB,YAAoCsnB,GACnC/mB,KAAKgnB,qBAAqBD,EAAc,2BACzC,CAEA,cAAOzW,GACN,MAAO,CACN2W,SAAUuD,EACVtD,UAAW,CACV,CACC1hB,QAASilB,MACThlB,WAAYA,IDhDqBilB,MACrC,MAAMpjB,KAAqBpH,OAAOqH,KAClC,MAAO,IAAMD,EAAmB6iB,kBAAgB,EC8C1BO,GAClB5Z,KAAM,CAACvJ,KACP6f,OAAO,IAIX,CAEQJ,qBAAqBD,EAAkC4D,GAC9D,GAAI5D,EACH,MAAM,IAAIhN,MAAM,GAAG4Q,qCAA8CA,2BAEnE,iDAvBYH,GAAkBjnB,MAAAinB,EAAA,wCAAlBA,GAAkB,wCAfnB,CACV,CACChlB,QAAS6kB,GACT5kB,WAAY6kB,IAEb,CACC9kB,QAAS+B,IACTsf,SAAUmD,IAEX,CACCxkB,QAASmkB,GACT9C,SAAUkC,KAEXrjB,QAAA,CAjBAE,KACAglB,MAAYC,WAAWnC,GAAsB2B,IAC7CS,MAAcD,WAAWN,MAAQ,SAiBtBC,CAAkB,KCblBO,GAAqB,MAA5B,MAAOA,oDAAqB,oCAArBA,GAAqB,uCAZhCnlB,KACAD,MACAI,MACAC,MACAglB,MACAC,MACAC,MACAplB,OAAe,SAKJilB,CAAqB,oBCrB3B,MAAMI,GAAe,IAAI7mB,MAAyC,2ECalE,IAAM8mB,GAAwB,MAA/B,MAAOA,EAGZ3rB,YAEQyD,GAAAlD,KAAAkD,OAJElD,KAAAqrB,aAAe,IAAI9gB,KAK1B,CAEHtJ,WACCjB,KAAKsrB,WACN,CAEAA,YACKtrB,KAAKkD,KAAKqoB,YAAYzP,OAAS,IAClC9b,KAAKwrB,OAAS1Q,OAAO2Q,KAAKzrB,KAAKkD,KAAKqoB,YAAY,IAAIG,OACnD,CAACC,EAAUC,SAAkBD,EAAUE,CAACD,GAAUA,IAClD,IAGH,CAEAE,UACC9rB,KAAKqrB,aAAa7f,MAAK,EACxB,iDAvBY4f,GAAwB7nB,MAI3B4nB,IAAY,oCAJTC,EAAwBtnB,UAAA,yCAAA6I,QAAA,CAAA0e,aAAA,gBAAAtnB,MAAA,GAAAC,KAAA,GAAAC,OAAA,mcAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,ICnBrCZ,MAAA,UAAAA,CAAoC,+BACKA,MAAA,+BAAca,EAAA0nB,SAAS,GAC9DvoB,MAAA,UAAAA,CAAmD,YACOA,MAAA,wBAA0CA,QACnGA,MAAA,YAAsEA,MAAA,GAAmBA,QACzFA,MAAA,gDAUDA,QACAA,MAAA,YACCA,MAAA,sBACDA,QACAA,MAAA,4BAECA,MAAA,2BAAUa,EAAA0nB,SAAS,yBAGpBvoB,mBArB0DA,MAAA,GAAAA,MAAA,GAAAA,MAAA,mCACaA,MAAA,GAAAA,MAAAa,EAAAlB,KAAA6oB,UAGrExoB,cAAA,cAAAA,CAAe,WAAfA,CAAe,cAAfA,CAAe,eAAfA,CAAe,UAAAA,MAAA,oCAAAA,MAAA,GAAAqF,GAAAxE,EAAAlB,KAAAqoB,YAAAzP,UAUDvY,MAAA,GAAAA,MAAA,OAAAa,EAAAlB,KAAAqoB,YAAAhoB,CAAyB,SAAAa,EAAAonB,QAKxCjoB,cAAA,QAAAA,MAAA,28BDHU6nB,CAAwB,yDED9B,IAAMY,GAAc,MAArB,MAAOA,EAKZvsB,YAAoBwsB,EAAyCC,GAAzClsB,KAAAisB,WAAyCjsB,KAAAksB,UAH5ClsB,KAAAmsB,oBAAmBjsB,OAAOksB,MAC1BpsB,KAAAqsB,sBAAqBnsB,OAAOosB,KAEoC,CAEjFC,mBAAsBC,EAAYC,EAA0BC,EAAuBC,GAC7E,OAAO3sB,KAAKqsB,mBAAmBE,mBAAmBC,EAAMC,EAAgBC,EAAcC,EAC5F,CAEAC,kBACCJ,EACAC,EACAE,EChC2C,IDmC3C,MAAME,EAAsD,GAe5D,OAAO7sB,KAAKmsB,iBAAiBW,MAASN,EAAMC,EAdpBM,CAACvB,EAAgBjqB,KACxCiqB,KAASwB,MAAoBxB,EAAQjqB,GAAS,GAC9C,MAAM0rB,GAAiBJ,EAAiB7hB,IAAK8G,IAAMA,GAAE7M,MAAMgY,QAAQuO,GACnE,IAAuB,IAAnByB,GAAuB,CAC1B,MAAMC,GAAWL,EAAiBI,IAAgB1rB,MAAQ,EACpD4rB,GAAY,GAAG3B,KAAU0B,KAC/BL,SAAiBI,IAAgB1rB,MAAQ2rB,GAClCC,EACR,CACCN,SAAiB5N,KAAK,CAAEha,KAAMumB,EAAQjqB,MAAO,IACtCiqB,GAIqEmB,GAAgB,GAC5F3pB,QAAKgI,KAAI6E,GAAKA,EAAEud,YACnB,CAEAC,YAAetB,EAAkBR,GAChC,IAAKvrB,KAAKksB,QACT,MAAM,IAAInS,MAAM,4BAEjB,MAAMuT,EAAU,CACfC,aAAa,EACbC,OAAQ,IACRC,MAAO,IACPC,iBAAkB1tB,KAAKksB,QAAQyB,WAAWC,SAASC,qBAAqBC,oBAEnEC,EAAa/tB,KAAKksB,QAAQ1Z,OAAO8a,GACjCU,EAAS,IAAIC,MAAgB7C,GAA0B,KAAMprB,KAAKkuB,eAAe,CAAEnC,WAAUR,iBACnGwC,EAAWI,OAAOH,GAAQI,SAAS/C,aAAa1qB,UAAU,IAAMotB,EAAWM,UAC5E,CAEAC,WAAW9B,EAAYE,GACtB,SAAI6B,OAAW/B,GACPxsB,KAAKqsB,mBAAmBmC,eAAehC,EAAME,IAAa,EACxD+B,OAAUjC,GACZxsB,KAAKmsB,iBAAiBmC,WAAW9B,IAAI,EAGtCkC,OAAG,GACX,CAEAC,gBACCnC,EACAE,EACAkC,EACAC,EACAC,GAAa,EACbC,EACAC,GAWA,OAPIF,IACHF,GAAoB,EAChBG,IACHA,GAAoB,IALAvC,EAAKvnB,KAAKoG,MAAM,KAAK4jB,OAU1C,IAAK,OACJ,OAAOjvB,KAAKqsB,mBAAmB6C,mBAAmB1C,EAAMsC,EAAYpC,EAAekC,EAASC,EAAYE,EAASC,GAClH,IAAK,MACJ,OAAOhvB,KAAKmsB,iBAAiBgD,mBAAmB3C,EAAMoC,EAASC,EAAYE,GAC5E,QACC,SAAOL,QAAG,GAEb,CAEAU,wBAAwB5C,GACvB,OAAOxsB,KAAKqsB,mBAAmB+C,wBAAwB5C,EACxD,CAEQ0B,eAAemB,GACtB,OAAOC,MAAS9c,OAAO,CACtB+c,OAAQvvB,KAAKisB,SACb/E,UAAW,CAAC,CAAE1hB,QAAS2lB,GAAcvkB,SAAUyoB,KAEjD,iDAlGYrD,GAAczoB,mBAAAG,MAAA,yCAAdsoB,EAAcvY,QAAduY,EAActY,WAAA,SAAdsY,CAAc,iCEXpB,IAAMwD,GAAiB,MAAxB,MAAOA,UAAyBC,KACrChwB,cACCmgB,QACA5f,KAAK6f,YAAc,aACnB7f,KAAK0vB,0BACN,CAEA5C,MAASN,EACJmD,EACA5C,EACA6C,GACJ,OAAO,IAAIC,KAAgCC,IAC1C,MAAMC,EAAe/vB,KAAKgwB,2BACzBL,EACA5C,EACA+C,EACAF,IACD9C,YAASN,EAAMuD,EAAY,EAE7B,CAEAzB,WAAW9B,GACV,OAAO,IAAIqD,KAAYC,IACtB,IAAIhQ,GAEJgN,YAAMN,EAAM,CACXyD,KAAMA,CAACjX,EAAQkX,KACdpQ,EAAU9G,EAAO9V,KACjBgtB,EAAOC,OAAK,EAEbC,SAAUA,KACTN,EAAS7nB,KAAK6X,GACdgQ,EAASM,UAAQ,GAElB,EAEH,CAEOjB,mBAAmB3C,EAAYoC,EAAiBC,EAAoBE,GAC1E,OAAO,IAAIc,KAAYC,IACtB,IAAInD,EAAe,EACf0D,EAAkB,GACtBvD,YAAMN,EAAM,CACXhB,QAAQ,EACR8E,gBAAgB,EAChBL,KAAMA,CAACptB,GAAOqtB,MACM,OAAfrtB,GAAMK,MACTgtB,GAAOC,QAERxD,IAEA0D,EAAkBrwB,KAAKuwB,oBAAoB5D,EAAckC,EAAYwB,EAAiBxtB,GAAMK,KAAMgtB,IAClG,MAAMM,GAAmBxwB,KAAKywB,gBAAgB1B,EAASpC,EAAcuD,IACrElwB,KAAK0wB,gBAAgB9B,EAASjC,EAAc6D,GAAkBN,GAAM,EAErEE,SAAUA,KAMTN,EAAS7nB,MAJN2mB,GAAWjC,GAAgBiC,IAAaA,IAC1CyB,GAAmBxB,IACjBE,GAAWpC,GAAgBoC,IAAaA,IAG3Ce,EAASM,UAAQ,GAElB,EAEH,CAEAO,sBAAsBnE,EAAYoE,GACjC,OAAO,IAAIf,KAAYC,IACtB,IAAInD,EAAe,GACnBG,YAAMN,EAAM,CACXhB,QAAQ,EACR8E,gBAAgB,EAChBL,KAAMA,CAACY,EAAQX,KACdvD,IACIA,EAAeiE,GAClBV,EAAOC,OAAK,EAGdC,SAAUA,KAERN,EAAS7nB,KADN0kB,GAAgBiE,GAKpBd,EAASM,UAAQ,GAElB,EAEH,CAGQJ,2BACPL,EACA5C,EACA+C,EACAF,GAEA,MAAO,CACNpE,OAAQmE,EACR5C,kBACAuD,gBAAgB,EAChBQ,eAAe,EACfC,QAASnB,EACToB,UAAYnuB,GAA0BA,GAAS,GAC/CutB,SAAWpX,IACV,MAAM9V,EAAO8V,EAAO9V,KAAK2H,OAAOgF,GAAKiL,OAAOmW,OAAOphB,GAAYgC,KAAKhP,MAAWA,IAAe,IAANgN,IACxFigB,EAAS7nB,KAAK,CACbmlB,WAAYlqB,EACZkjB,SAAU,CAAE8K,UAAWhuB,EAAK4Y,UAE7BgU,EAASM,UAAQ,EAElBvd,MAAQhD,IACPxM,QAAQwP,MAAMhD,GACdigB,EAASjd,MAAMhD,EAAC,EAKnB,CAEQ6gB,gBAAgB9B,EAAiBjC,EAAsB6D,EAA2BN,GAErFtB,GACCjC,GAAgBiC,GAAW4B,GAC9BN,EAAOC,OAGV,CAEQM,gBAAgB1B,EAA6BpC,EAAsBuD,GAC1E,IAAIM,GAAmB,EACvB,OAAIzB,EACCpC,EAAeoC,GAClBmB,EAAOC,QAGRK,GAAmB,EAEbA,CACR,CAEQD,oBAAoB5D,EAAsBkC,EAAoBwB,EAAyBc,EAAcjB,GAE5G,OAAqB,IAAjBvD,GAAsBkC,IACzBwB,EAAkBvV,OAAO2Q,KAAK0F,GAAerV,QACvB+S,GACrBqB,EAAOC,QAGFE,CACR,iDAzJYb,EAAgB,sCAAhBA,EAAgB/b,QAAhB+b,EAAgB9b,WAAA,SAAhB8b,CAAiB,KCAjB4B,GAAqB,MAA5B,MAAOA,EACZC,eAAe7E,EAAY8E,EAAgC,CAAC,SAC3D,MAAMC,EAAa/E,EAAKvnB,KAAKoG,MAAM,KAAK4jB,MACxC,SAAOP,YAAkB7R,IAAf0U,GAA4BD,EAAerU,QAAQ,IAAIsU,MAAgB,EAClF,CAEAC,aAAahF,EAAYiF,EARG,SAS3B,SAAO/C,OAAGlC,EAAKkF,MAAQD,EACxB,iDARYL,EAAqB,sCAArBA,EAAqB3d,QAArB2d,EAAqB1d,WAAA,SAArB0d,CAAqB,iCCD3B,IAAMO,GAAkB,MAAzB,MAAOA,EAEZpF,mBACCC,EACAC,EACAC,EACAC,EHZ2C,IGc3C,OAAO3sB,KAAK4xB,oBAAoBpF,GAAM,GAAO,GAAMxpB,QAClDgI,KAAK6mB,IACJ,MAAMC,EAAYD,EAASE,OAAOrF,GAAiBmF,EAASG,WAAW,IACjE1E,EAA+B,CACpC2E,WAAW,GAEZ,GAAItF,EAAc,CACjB,MACMuF,GAAQC,MAAWC,aADRN,EAAU,SAAW,IAEtCI,GAAMG,EAAExG,EAAI,EACZqG,GAAMriB,EAAEgc,EAAIc,EACZW,EAAQ4E,MAAQC,MAAWG,aAAaJ,GACzC,CACA,OAAKzF,IACJa,EAAQ9B,OAAS,KAGX2G,MAAWI,cAAiBT,EAAWxE,EAAO,GAGxD,CAEAkB,eAAehC,EAAYE,GAC1B,OAAO1sB,KAAK4xB,oBAAoBpF,GAAMxpB,QACrCgI,KAAK6mB,IACJ,MAAMC,EAAYD,EAASE,OAAOrF,GAAiBmF,EAASG,WAAW,IAEjE1E,EAA+B,CACpC2E,WAAW,EACXzG,OAAQ,EACRgH,KAAK,EACLC,YAAY,GAEPC,EAAWZ,EAAU,QAE3B,IAAKY,EACJ,MAAO,GAGR,MAAMR,EAAQC,MAAWC,aAAaM,GACtCR,SAAMG,EAAExG,EAAI,EACZqG,EAAMriB,EAAEgc,EAAI,EACZyB,EAAQ4E,MAAQC,MAAWG,aAAaJ,GAEhCC,MAAWI,cAAwBT,EAAWxE,GAAS,GAAKtiB,IAAK2nB,IAAMC,OAAOD,IAAE,GAG3F,CAEAE,UACCrG,EACAE,EACAiD,GAAmB,GAEnB,OAAO3vB,KAAK4xB,oBAAoBpF,GAAM,GAAO,GAAMxpB,QAClDgI,KAAK6mB,GAAa7xB,KAAK8yB,uBAA0BjB,EAAUnF,EAAeiD,KAAiB,EAC3F3kB,KAAK9H,KACJkqB,WAAYlqB,EAAK8H,IAAK8G,GACrBgJ,OAAOiY,YAAYjY,OAAOC,QAAQjJ,GAAY9G,IAAI,EAAEiQ,EAAKpY,KAAW,CAACoY,EAAI+X,cAAeJ,OAAO/vB,OAEhGujB,SAAU,CACT8K,UAAWhuB,EAAK4Y,WAIpB,CAEAgX,uBACCjB,EACAnF,EACAiD,GAAmB,GAEnB,MAAMmC,EAAYD,EAASE,OAAOrF,GAAiBmF,EAASG,WAAW,IACjE1E,EAA+B,CACpC2E,WAAW,GAEZ,IAAKtC,EAAkB,CACtB,IAAIsD,EAAc,EACdnB,EAAU,UACbmB,EAAcd,MAAWC,aAAaN,EAAU,SAAUjiB,EAAEqjB,EAAI,GAEjE,MAAM1H,EAAmB,GACzB,QAAS2H,GAAI,EAAGA,GAAIF,EAAaE,KAChC3H,EAAO2H,IAAK,UAAUA,GAAI,IAE3B7F,EAAQ9B,OAASA,CAClB,CACA,OAAO2G,MAAWI,cAAiBT,EAAWxE,EAC/C,CAGO4B,mBACN1C,EACAsC,EACApC,EACAkC,EACAC,EACAE,EACAC,GAEA,OAAOhvB,KAAK4xB,oBAAoBpF,GAAM,GAAO,GAAMxpB,QAClDgI,KAAK6mB,KACJ,MAAMC,GAAYD,GAASE,OAAOrF,GAElC,IAAIgG,GAAW,GAEf,IAAKZ,KAAY,QAChB,QAAI/C,EAMJ2D,GAAWZ,GAAU,QAGtB,MAAMI,GAAQC,MAAWC,aAAaM,IAEhC/F,GAAemC,EAAaoD,GAAMriB,EAAEgc,EAAI,EAAIqG,GAAMriB,EAAEgc,EAAI,EACxDwE,GAAkB6B,GAAMriB,EAAEqjB,EAAI,EAE9BE,GACLzG,IAAgBiC,GAChByB,IAAmBxB,IACjBE,GAAWpC,IAAgBoC,IAAaA,GAG3C,OAAIC,GAAkBoE,GACdpzB,KAAKqzB,oBAAoBhD,GAAiBvB,EAAYgD,IAGvDsB,KAGV,CAEAE,uBAAuB9G,EAAY+G,GAClC,OAAOvzB,KAAK4xB,oBAAoBpF,GAAM,GAAO,GAAMxpB,QAClDgI,KAAK6mB,IAGJ,MAAMa,EAFYb,EAASE,OAAOF,EAASG,WAAW,IAE3B,QAC3B,QAAKU,GAGSP,MAAWC,aAAaM,GACX7iB,EAAEgc,EAAI,GACV0H,CAJf,GAOX,CAEAnE,wBAAwB5C,GACvB,OAAOxsB,KAAK4xB,oBAAoBpF,GAAM,GAAMxpB,QAAKgI,KAAK8G,GAAMA,EAAEkgB,YAC/D,CAEAwB,YAAehH,EAAYiH,GAC1B,OAAOzzB,KAAK4xB,oBAAoBpF,GAAM,GAAO,GAAMxpB,QAClDgI,KAAK6mB,GAAa7xB,KAAK8yB,uBAA0BjB,KAAS,EAC1D7mB,KAAK9H,GAAcA,EAAK8H,IAAK0oB,GAAS1zB,KAAK2zB,kBAAkBD,EAAGD,KAElE,CAEQE,kBAAqBzwB,EAASuwB,GACrC,MAAMtL,EAAY,CAAEyL,QAAS,IAE7B,UAAWC,KAAQ3wB,EACduwB,GAAqBA,EAAkB1nB,SAAS8nB,GAGnD1L,EAAMyL,QAAUhB,OAAO1vB,EAAK2wB,IAE5B1L,EAAM0L,GAAQ3wB,EAAK2wB,GAGrB,OAAO1L,CACR,CAEQyJ,oBACPpF,EACAsH,GAAoB,EACpBC,GAAkB,GAEjB,OAAO,IAAIlE,KAAYC,IACvB,IAAI+B,EAAW,KACf,MAAMmC,EAAS,IAAIC,WACnBD,EAAOE,OAAUC,IAGhBtC,EAAWM,MAFE6B,EAAOhb,OAEO,CAC1B9T,KAAM,SACNkvB,WAAYN,EACZO,UAAWN,EAAkB,EH9MW,KGiNzCjE,EAAS7nB,KAAK4pB,EAAQ,EAEvBmC,EAAOM,UAAaxpB,IACnB,GAA2C,OAAtCA,EAAMypB,OAAsB1hB,MAAgB,CAChD,MAAM6W,GAAM,uFAGZ,OAFArmB,QAAQwP,MAAM6W,SACdoG,EAASjd,MAAM6W,GAEhB,CAEAoG,EAASM,UAAQ,EAElB4D,EAAOQ,mBAAmBhI,EAAI,EAE/B,CAEO6G,oBAAoBhD,EAAyBvB,EAAqBgD,GAIzE,QAASqB,EAAI,EAAGA,EAAI9C,EAAiB8C,IAAK,CACzC,MAAMsB,EAAiBtC,MAAWuC,WAAWvB,GAIvCwB,GAAkB7C,EADFhD,EAAa,GAAG2F,KAAoB,GAAGA,MAG7D,GAAIE,IAVoB,MAYCA,GAAwB,EAG/C,OAAO,CAGV,CAEA,OAAO,CACR,iDAjPYhD,EAAkB,sCAAlBA,EAAkBle,QAAlBke,EAAkBje,WAAA,SAAlBie,CAAkB,KCKlBiD,GAAiB,MAAxB,MAAOA,EACZn1B,YAAoCsnB,GACnC/mB,KAAKgnB,qBAAqBD,EAAc,oBACzC,CACA,cAAOzW,GACN,MAAO,CACN2W,SAAU2N,EACV1N,UAAW,CACV,CACC1hB,QAASqvB,KACThO,SAAUmF,IAEX,CACCxmB,QAAS4mB,KACTvF,SAAU2I,IAEX,CACChqB,QAAS8mB,KACTzF,SAAU8K,IAEX,CACCnsB,QAASsvB,KACTjO,SAAUuK,KAId,CAEQpK,qBAAqBD,EAAiC4D,GAC7D,GAAI5D,EACH,MAAM,IAAIhN,MAAM,GAAG4Q,qCAA8CA,2BAEnE,iDAhCYiK,GAAiBrxB,MAAAqxB,EAAA,wCAAjBA,GAAiB,uCAFnBhvB,KAAcmlB,KAAqB,SAEjC6J,CAAiB,uBCgDvB,IAAMG,GAAS,MAAhB,MAAOA,oDAAS,oCAATA,EAASC,UAAA,CAFTx1B,IAAY,wCANb,CACVy1B,KACA50B,MACA,CAAEmF,QAAS0vB,KAAkBrO,SAAUsO,OACvC,CAAE3vB,QAAS4vB,OAAQxuB,SAAU2M,SAC7B7N,QAAA,CA5BA2vB,KACAC,MACAC,MACAC,MACAC,MAEAC,MACAhvB,EACAogB,GAAWxW,UACXqlB,KAAarlB,UACbslB,MAAetlB,UACfulB,MAAiBvlB,UACjBwlB,KAAkBxlB,UAClBka,GAAmBla,UACnBskB,GAAkBtkB,UAClBylB,MAAoBC,WAAW,CAC9B/wB,KAAM,gCACNgxB,QAAStiB,GAAYC,WACrBsiB,OAAQ,IACRC,OAAQxiB,GAAYC,aAErBvD,KAAgB,SAUL0kB,CAAS,KCrDlBphB,GAAYC,eACfwiB,SAGDC,OACEC,gBAAgBvB,IAChBrnB,KAAM6oB,MAAWC,MAAiBD,EAAOtK,SAASha,IAAIwkB,OAAgBC,WAAW,KAEjF/c,MAAO+P,GAAQrmB,QAAQwP,MAAM6W,4WCdxB,ICAKiN,EAAZ,SAAYA,GACXA,SAAAC,qBAAA,uBACAD,EAAAE,WAAA,aACAF,EAAAG,KAAA,OACAH,EAAAI,QAAA,UACAJ,EAAAK,IAAA,MACAL,EAAAM,IAAA,MACAN,EAAAO,IAAA,MACAP,EAAAQ,IAAA,MACAR,EAAAS,IAAA,MACAT,EAAAU,IAAA,MACAV,EAAAW,IAAA,MACAX,EAAAY,IAAA,MACAZ,EAAAa,IAAA,MACAb,EAAAc,QAAA,UAdWd,CAeZ,CAfA,CAAYA,GAAgB,ICuBhBe,EAAZ,SAAYA,GACXA,SAAAtvB,KAAA,GACAsvB,EAAAC,OAAA,SACAD,EAAAE,uBAAA,yBACAF,EAAAG,mBAAA,qBAJWH,CAKZ,CALA,CAAYA,GAAU,ICvBVI,EAAZ,SAAYA,GACXA,SAAAC,cAAA,gBACAD,EAAAE,OAAA,SACAF,EAAAG,MAAA,QACAH,EAAAI,eAAA,iBACAJ,EAAAK,aAAA,eACAL,EAAAM,WAAA,aACAN,EAAAO,MAAA,QACAP,EAAAQ,mBAAA,qBACAR,EAAA1vB,KAAA,OATW0vB,CAUZ,CAVA,CAAYA,GAAS,ICATS,EAAZ,SAAYA,GACXA,SAAAC,OAAA,SACAD,EAAAE,YAAA,cACAF,EAAAG,YAAA,cACAH,EAAAI,WAAA,aACAJ,EAAAK,MAAA,QACAL,EAAAM,OAAA,SACAN,EAAAO,MAAA,QACAP,EAAAQ,KAAA,OARWR,CASZ,CATA,CAAYA,GAAK,ICALS,EAAZ,SAAYA,GACXA,SAAAC,OAAA,SADWD,CAEZ,CAFA,CAAYA,GAAY,eCcjB,MAAME,EACZ,IAAI50B,MACH,oDCFW60B,EAET,IAAI70B,MACP,wCCXYqK,EAA+B,IAAIrK,MAC/C,yCCCY80B,EAAyC,IAAI90B,MACzD,+BCEY+0B,EAAuE,IAAI/0B,MACvF,iDCRM,IAAemrB,EAAW,MAA3B,MAAgBA,EADtBhwB,cAEWO,KAAA6f,YAAc,cACd7f,KAAAyR,kBAAiBvR,OAAOo5B,MAExB5J,2BACT1vB,KAAKyR,eAAenO,IAAItD,KAAK6f,YAAarG,KAASC,YAAa,6BACjE,iDANqBgW,EAAW,sCAAXA,EAAWhc,QAAXgc,EAAW/b,WAAA,SAAX+b,CAAW,oBCJrB3S,EAAZ,SAAYA,GACXA,WAAAyc,KAAA,UACAzc,IAAAR,QAAA,aACAQ,IAAAC,YAAA,iBAHWD,CAIZ,CAJA,CAAYA,GAAe,IAMrB,MAAOP,UAAoBxC,MAIhCta,YAAoB0T,EAAiBE,EAElCmmB,EAAa,MAAOrb,EAAYrB,EAAgBR,SAClDsD,MAAMzM,GACNnT,KAAKy5B,MAAQD,EACbx5B,KAAKqT,cAAgBA,EACrBrT,KAAKme,UAAYA,CAClB,CAEA,aAAO3L,CAAOW,EAAiBE,EAE5BmmB,EAAa,MAAOrb,EAAYrB,EAAgBR,SAClD,OAAO,IAAIC,EAAYpJ,EAASE,EAAemmB,EAAYrb,EAC5D,ECvBM,IAAKub,EAAZ,SAAYA,GACXA,SAAAC,KAAA,OACAD,EAAAE,QAAA,WACAF,EAAAG,YAAA,gBACAH,EAAAI,YAAA,eAJWJ,CAKZ,CALA,CAAYA,GAAmB,ICcnBK,EAAZ,SAAYA,GACXA,WAAAC,WAAA,gBACAD,IAAAE,QAAA,eACAF,IAAAG,sBAAA,6BACAH,IAAAI,oBAAA,2BAJWJ,CAKZ,CALA,CAAYA,GAAQ,ICPd,MAAgBra,UAAwB+P,EAA9ChwB,kCACoBO,KAAA6f,YAAc,kBAChB7f,KAAA6O,QAAO3O,OAAO6Q,KA0ChC,CAxCWgP,6BAA6BD,EAA8B,MACpE,OAAe,MAAXA,IACHA,EAAU,IAAIsa,MAERta,EAAQ+C,IAAI6W,EAAoBI,YAAa,mBACrD,CAGUO,iCAAiCC,GAE1C,OADgBt6B,KAAK+f,+BACN8C,IAAI6W,EAAoBE,QAASW,KAAKC,UAAUF,GAChE,CAEUG,yBACT,MAAMC,EAAgB,IAAIrpB,KAAKA,KAAKspB,OACpCD,EAAcE,QAAQF,EAAcG,UAAY,GAChD,MAAMC,EAAgBJ,EAAcK,cAEpC,OAAO,IAAIX,MACTvX,IAAI,gBAAiB,YACrBA,IAAI,SAAU,YACdA,IAAI,oBAAqBiY,EAC5B,CAEU9a,eAAkBgb,GAC3B,OAAOh7B,KAAK6O,KAAKkT,QAAWiZ,EAAe9a,cAAczN,WAAYuoB,EAAe/a,WAAY+a,EACjG,CAEUC,uBAAuB/vB,GAChC,OAAOlL,KAAK6O,KAAKoD,IAAI/G,EAAK,CAAEgwB,aAAc,QAC3C,CAEUC,iCACTH,GAEA,OAAOh7B,KAAK6O,KAAKkT,QAAWiZ,EAAe9a,cAAczN,WAAYuoB,EAAe/a,WAAY,IAC5F+a,EACHI,QAAS,YAEX,EChDM,MAAMlpB,EAAgB,IAAImpB,KAA0B,KAAM,GACpDrZ,EAAc,IAAIqZ,KAA0B,KAAM,GCHxD,IAAKlb,EAAZ,SAAYA,GACXA,SAAAC,IAAA,MACAD,EAAAmb,KAAA,OACAnb,EAAAob,IAAA,MACApb,EAAAqb,OAAA,SACArb,EAAAsb,KAAA,OACAtb,EAAAub,MAAA,QACAvb,EAAAwb,QAAA,UAPWxb,CAQZ,CARA,CAAYA,GAAiB,ICYtB,MAAM4F,GAAY,IAAIzhB,MAA0B,iBCPhD,IAAMijB,EAA4B,MAAnC,MAAOA,EACZ9nB,YAAgD8e,GAAAve,KAAAue,WAC/Cve,KAAKue,SAASM,SAAS,8BAA+B,CACrD3Z,KAAM,SACNogB,SAAU,CAAC,oBACXC,WAAY,CACXqW,iBAAkB,CACjB12B,KAAM,aAIV,CAEAwJ,YACC1O,KAAKue,SAASG,QAAQ,8BAA+B,CAAEkd,kBAAkB,GAC1E,iDAfYrU,GAA4BhkB,MACpBwiB,IAAS,sCADjBwB,EAA4B9T,QAA5B8T,EAA4B7T,WAAA,SAA5B6T,CAA4B,wCCIlC,MAAM3jB,GAAwB,IAAIU,MAAqC,qBCFjEuhB,EAA8B,IAAIvhB,MAAsC,mCACxEwhB,EAAkC,IAAIxhB,MAAsC,uCCD5EwwB,EAA0B,IAAIxwB,MAAuC,8HCgB3E,IAAMujB,EAAmB,MAA1B,MAAOA,EACZ,cAAOvX,CAAQ2N,GACd,MAAO,CACNgJ,SAAUY,EACVX,UAAW,CACV,CACC1hB,QAASq2B,IACTj1B,SAAUqX,GAEX,CACCzY,QAAS2b,KACT0F,SAAUiV,MAEX,CACCt2B,QAAS6I,KACTwY,SAAUkV,MAEX,CACCv2B,QAASw2B,KACTnV,SAAUoV,MAEX,CACCz2B,QAAS02B,KACTrV,SAAUsV,MAEX,CACC32B,QAAS3B,KACTgjB,SAAUuV,MAEX,CACC52B,QAAS62B,KACTxV,SAAUyV,MAEX,CACC92B,QAAS+2B,KACT1V,SAAU2V,OAId,iDAvCY3U,EAAmB,oCAAnBA,GAAmB,uCAFrBjiB,OAAY,SAEViiB,CAAmB,oDCFzB,MAAMgU,EAAa,aAAIv3B,KAAkC,oNCjBzD,IAAMw3B,EAAmB,MAA1B,MAAOA,EAGZr8B,YAAwCwe,GAAAje,KAAAie,SACvCje,KAAKmV,aAAenV,KAAKie,OAAOtK,YAAYwB,YAC7C,CAEApT,UAAqDkZ,GACpD,OAAQjb,KAAKmV,aAAmB8F,EACjC,iDATY6gB,GAAmBv4B,MAGXs4B,KAAU,sCAHlBC,EAAmBroB,QAAnBqoB,EAAmBpoB,WAAA,SAAnBooB,CAAmB,KAYzB,MAAM3a,EAAgB,IAAI7c,MAAoC,4BCZ9D,IAAMy3B,EAAiB,MAAxB,MAAOA,EAGZt8B,YAAwCwe,GAAAje,KAAAie,SACvCje,KAAK8U,WAAa9U,KAAKie,OAAOtK,YAAYmB,UAC3C,CAEA/S,UAAmDkZ,GAClD,OAAQjb,KAAK8U,WAAiBmG,EAC/B,iDATY8gB,GAAiBx4B,MAGTs4B,KAAU,sCAHlBE,EAAiBtoB,QAAjBsoB,EAAiBroB,WAAA,SAAjBqoB,CAAiB,KAYvB,MAAM1tB,EAAc,IAAI/J,MAAkC,0BCX1D,IAAM63B,EAAsB,MAA7B,MAAOA,EAGZ18B,YAAwCwe,GAAAje,KAAAie,SACvCje,KAAK2W,gBAAkB3W,KAAKie,OAAOtK,YAAYgD,eAChD,CAEA5U,UAAwDkZ,GACvD,OAAQjb,KAAK2W,gBAAsBsE,EACpC,iDATYkhB,GAAsB54B,MAGds4B,KAAU,sCAHlBM,EAAsB1oB,QAAtB0oB,EAAsBzoB,WAAA,SAAtByoB,CAAsB,KAY5B,MAAMD,EAAmB,IAAI53B,MAAuC,+BCbpE,IAAM23B,EAAgB,MAAvB,MAAOA,EAGZx8B,YAAwCwe,GAAAje,KAAAie,SACvCje,KAAKiU,UAAYjU,KAAKie,OAAOtK,YAAYM,SAC1C,CAEA,WAAIE,GACH,OAAOnU,KAAKiU,UAAUE,OACvB,CAEA,QAAIlP,GACH,OAAOjF,KAAKiU,UAAUC,eACvB,iDAbY+nB,GAAgB14B,MAGRs4B,KAAU,sCAHlBI,EAAgBxoB,QAAhBwoB,EAAgBvoB,WAAA,SAAhBuoB,CAAgB,KAgBtB,MAAMD,EAAa,IAAI13B,MAAiC,yBChBxD,IAAM83B,EAA0B,MAAjC,MAAOA,EAGZ38B,YAAwCwe,GAAAje,KAAAie,SACvCje,KAAKD,oBAAsBC,KAAKie,OAAOtK,YAAY5T,mBACpD,CAEAgC,UAA4DkZ,GAC3D,OAAQjb,KAAKD,oBAA0Bkb,EACxC,iDATYmhB,GAA0B74B,MAGlBs4B,KAAU,sCAHlBO,EAA0B3oB,QAA1B2oB,EAA0B1oB,WAAA,SAA1B0oB,CAA0B,KAYhC,MAAMv4B,EAAuB,IAAIS,MAA2C,mCCZ5E,IAAMg4B,EAAqB,MAA5B,MAAOA,EAGZ78B,YAAwCwe,GAAAje,KAAAie,SACvCje,KAAKgX,eAAiBhX,KAAKie,OAAOtK,YAAYqD,cAC/C,CAEAjV,UAAuDkZ,GACtD,OAAQjb,KAAKgX,eAAqBiE,EACnC,iDATYqhB,GAAqB/4B,MAGbs4B,KAAU,sCAHlBS,EAAqB7oB,QAArB6oB,EAAqB5oB,WAAA,SAArB4oB,CAAqB,KAY3B,MAAMD,EAAkB,IAAI/3B,MAAsC,8BCZlE,IAAMk4B,EAAoB,MAA3B,MAAOA,EAGZ/8B,YAAwCwe,GAAAje,KAAAie,SACvCje,KAAKkX,cAAgBlX,KAAKie,OAAOtK,YAAYuD,aAC9C,CAEAnV,UAAsDkZ,GACrD,OAAQjb,KAAKkX,cAAoB+D,EAClC,iDATYuhB,GAAoBj5B,MAGZs4B,KAAU,sCAHlBW,EAAoB/oB,QAApB+oB,EAAoB9oB,WAAA,SAApB8oB,CAAoB,KAY1B,MAAMD,EAAiB,IAAIj4B,MAAqC,iKCAhE,MAAMd,EAAe,IAAIc,MAA6B,YCChDb,EAAe,IAAIa,MAA6B,yDCZtD,MAAMgL,EAA2BA,KACvC,MAAM3P,KAAcO,OAAOuD,GACrB/D,KAAcQ,OAAOsD,GACrB6T,KAAWnX,OAAOu8B,MAExB,OAAO98B,EAAYe,mBAAmBsC,QACrCgI,KAAK1K,KACAA,IAGHZ,EAAY+B,MAAM4V,EAASpI,SACpB,IAEP,iBCbG,MAAMM,EAA6BA,KACzC,MAAM5P,KAAcO,OAAOuD,GACrByG,KAAShK,OAAOw8B,MAEtB,OAAO/8B,EAAYmB,wBAAwBkC,QAC1CgI,KAAK2xB,KACAA,IAGEzyB,EAAOmD,SAAS,CAAC,gBACf,IAEP,ECXS+C,EAA+BA,KAC3C,MAAMzQ,KAAcO,OAAOuD,GACrByG,KAAShK,OAAOw8B,MAEtB,OAAO/8B,EAAYe,mBAAmBsC,QACrCgI,KAAK1K,IACAA,GACI4J,EAAO0yB,SAAS,UAGvB,iDChBE,MAAO1hB,EAKZ,YAAIxZ,GACH,MAAO,GAAG1B,KAAK68B,aAAa78B,KAAK88B,UAClC,CAEAr9B,YAAYo9B,EAAmBC,EAAkB3uB,GAChDnO,KAAK68B,UAAYA,EACjB78B,KAAK88B,SAAWA,EAChB98B,KAAKmO,MAAQA,CACd,4ECPM,IAAM2Z,EAAU,MAAjB,MAAOA,oDAAU,oCAAVA,GAAU,uCAFZliB,OAAY,SAEVkiB,CAAU,oDCahB,MAAMsE,EAAqB,aAAI9nB,KAAkC,kECgBjE,MAAMgoB,EAAuB,aAAIhoB,KAAoC,oECRrE,MAAMuwB,EAAkB,aAAIvwB,KAAgC,+EC3B5D,MAAM0oB,EAAsBA,CAACxB,EAAgBjqB,IACxC,OAAXiqB,GAA8B,KAAXA,EAAgB,UAAUjqB,EAAQ,IAAMiqB,iDCQrD,MAAMjkB,EAAuB,aAAIjD,KAA2C,yMCP7E,MAAgBy4B,EAAtBt9B,cACWO,KAAAg9B,WAAY,CAUvB,CAPCC,UACKj9B,KAAKg9B,WACRh9B,KAAKk9B,OAEP,kDCRK,MAAOC,wFCMN,IAAMC,EAAmB,MAA1B,MAAOA,EAIZ39B,YAAwBuS,GAHhBhS,KAAAq9B,gBAA0C,IAAI7hB,IAA6B,GACnExb,KAAA8d,UAAuC9d,KAAKq9B,gBAAgB3hB,eAGvE1J,GACHhS,KAAKq9B,gBAAgBp1B,KAAK+J,EAAQiM,OAEpC,iDARYmf,GAAmB75B,MAAAG,IAAA,yCAAnB05B,EAAmB3pB,QAAnB2pB,EAAmB1pB,UAAAuV,WAFnB,QAAM,SAENmU,CAAmB,mHCRzB,IAAK5jB,EAAZ,SAAYA,GACXA,WAAA8jB,MAAA,WACA9jB,IAAAC,YAAA,iBACAD,IAAA8C,QAAA,aACA9C,IAAAO,MAAA,WACAP,IAAA+jB,SAAA,cALW/jB,CAMZ,CANA,CAAYA,GAAQ,iGCQb,IAAMgkB,EAAc,MAArB,MAAOA,UAAsBT,IAClCt9B,YAAoBgS,GACnBmO,QADmB5f,KAAAyR,iBAEnBzR,KAAKg9B,WAAY,EACjBh9B,KAAKyR,eAAegsB,YAAY98B,UAAW+8B,GAAa19B,KAAK29B,YAAYD,GAC1E,CAEAC,YAAYD,GACX19B,KAAK09B,SAAWA,EAChB19B,KAAKi9B,SACN,CAEOC,QACN,OAAQl9B,KAAK09B,SAASE,UACrB,KAAKpkB,IAAS8jB,MACbj6B,QAAQw6B,MAAM79B,KAAK09B,UACnB,MACD,KAAKlkB,IAASC,YACbpW,QAAQy6B,KAAK99B,KAAK09B,UAClB,MACD,KAAKlkB,IAAS8C,QACbjZ,QAAQ06B,KAAK/9B,KAAK09B,UAClB,MACD,KAAKlkB,IAASO,MAGd,KAAKP,IAAS+jB,SACbl6B,QAAQwP,MAAM7S,KAAK09B,UAKtB,iDAhCYF,GAAaj6B,MAAAG,MAAA,sCAAb85B,EAAa/pB,QAAb+pB,EAAa9pB,WAAA,SAAb8pB,CAAc,0ECKpB,IAAMQ,EAAkB,MAAzB,MAAOA,UAA0BjB,IAMtCt9B,YAEkBE,EACGuO,EACZuD,GAERmO,QAJiB5f,KAAAL,cACGK,KAAAkO,gBACZlO,KAAAyR,iBANQzR,KAAAkK,UAAShK,OAAOw8B,MAS5B18B,KAAKkO,eAAiBlO,KAAKyR,iBAC9BzR,KAAKkO,cAAc4P,UAAUnd,UAAWod,GAAa/d,KAAKi+B,eAAelgB,IACzE/d,KAAKyR,eAAegsB,YAAY98B,UAAWu9B,GAAUl+B,KAAK29B,YAAYO,KAGnEl+B,KAAKL,aACRK,KAAKL,YAAYe,mBAAmBC,UAAWC,GAAaZ,KAAKm+B,wBAAwBv9B,GAE3F,CAEQu9B,wBAAwBv9B,GAC3BZ,KAAKie,OAAO3J,kBAAkBC,oBAC7B3T,EACHZ,KAAKo+B,YAAYC,+BAA4BC,KAAWt+B,KAAKL,YAAYgC,aAAawM,OAAOsE,YAE7FzS,KAAKo+B,YAAYG,gCAGpB,CAEAN,eAAelgB,GACd,GAAIA,EAAU,CACb/d,KAAKie,OAASF,EAEd,MACCtJ,qBACAE,0BACAJ,oBACAG,yBACAE,wBACAC,oCACG7U,KAAKie,OAAO3J,kBAChB,IAAME,oBAAqBxU,KAAKie,OAAO3J,kBAEvC,GAAIC,EAAmB,CACtBvU,KAAKg9B,WAAY,EAIbxoB,IAAqBA,EAAiBzI,SAAS,wBAClDyI,OAAmBqI,GAGpB,MAAM2hB,GAAgB,IAAIC,KAC1Bz+B,KAAKo+B,YAAc,IAAIM,IAAoB,CAC1CzgB,OAAQ,CACPzJ,mBACAC,qBACAE,0BACAE,mCACAH,yBACAE,wBACA+pB,WAAY,CAACH,IACbI,gBAAiB,CAChB,CAACJ,GAAcK,YAAa,CAAE30B,OAAQlK,KAAKkK,YAI9ClK,KAAKo+B,YAAYU,kBACjB9+B,KAAKo+B,YAAYW,eAClB,CACD,CACD,CAEApB,YAAYO,GACPl+B,KAAKg9B,YACRh9B,KAAK09B,SAAWQ,EAChBl+B,KAAKi9B,UAEP,CAEA+B,WACMh/B,KAAK09B,UAIV19B,KAAKo+B,YAAYa,WAChB,CACC9rB,QAASnT,KAAK09B,SAASvqB,QACvB+rB,cAAel/B,KAAK09B,SAASE,UAE9B,CACCuB,OAAQn/B,KAAK09B,SAASyB,OACtBC,UAAWp/B,KAAK09B,SAAS0B,aACtBp/B,KAAK09B,SAAS2B,kBAGpB,CAEOnC,QACN,GAAKl9B,KAAK09B,SAIV,IAAI19B,KAAK09B,SAASE,WAAapkB,IAASO,OAAS/Z,KAAK09B,SAASE,WAAapkB,IAAS+jB,SAKpF,YAJAv9B,KAAKo+B,YAAYkB,eAAe,CAC/BJ,cAAel/B,KAAK09B,SAASE,SAC7B2B,UAAWv/B,KAAK09B,SAAS6B,YAK3Bv/B,KAAKg/B,UAAQ,CACd,iDApHYhB,GAAiBz6B,MAOpBE,MAAYF,MAAAG,IAAA,GAAAH,MAAAI,MAAA,sCAPTq6B,EAAiBvqB,QAAjBuqB,EAAiBtqB,WAAA,SAAjBsqB,CAAkB,+BCPxB,MAAMwB,EAAuBC,GAAiC,IAAMA,EAMpE,IAAM7X,EAAa,MAApB,MAAOA,EACZ,cAAOtX,CAAQovB,GACd,MAAO,CACNzY,SAAUW,EACVV,UAAW,CACV,CACC1hB,QAAS23B,IACTv2B,SAAU84B,GAEX,CACCl6B,QAASilB,MACThlB,WAAak6B,GAAyC,IAAMA,EAC5D7uB,KAAM,CAACwoB,KAAgB0E,GACvB5W,OAAO,GAER,CACC5hB,QAASilB,MACThlB,WAAY+5B,EACZ1uB,KAAM,CAACwoB,KAAgBkE,GACvBpW,OAAO,IAIX,iDAvBYQ,EAAa,oCAAbA,GAAa,wCAFd,CAACwV,IAAqBY,EAAmB1E,KAAgBkE,GAAc93B,QAAA,CADxEE,OAAY,SAGVgiB,CAAa,qDCTpB,MAAOgY,EAIZngC,YACQ0/B,EACAvB,EACAzqB,EACAosB,EACPF,GAJOr/B,KAAAm/B,SACAn/B,KAAA49B,WACA59B,KAAAmT,UACAnT,KAAAu/B,YAGPv/B,KAAKo/B,UAAY,IAAI/tB,KAAKA,KAAKspB,OAC/B36B,KAAKq/B,iBAAmBA,EACxBr/B,KAAKu/B,UAAYA,CAClB,uECJM,IAAMjG,EAAc,MAArB,MAAOA,EAiBZ75B,YAA+ByO,GAAAlO,KAAAkO,gBAhB/BlO,KAAA6f,YAAc,iBACd7f,KAAAkU,gBAAkB,cAElBlU,KAAA49B,SAAqBpkB,IAASC,YAG9BzZ,KAAAmU,QAAU,QACVnU,KAAAqU,cAAe,EAEfrU,KAAAwT,GAAWjB,IAAKC,SAGCxS,KAAA6/B,iBAAuC,IAAIrkB,IAAyB,GAErFxb,KAAAy9B,YAAqCz9B,KAAK6/B,iBAAiBnkB,eAG1D1b,KAAKo/B,UAAY,IAAI/tB,KAAKA,KAAKspB,OAC/B36B,KAAK8/B,kBAAkB5xB,GACvBlO,KAAKsD,IACJtD,KAAK6f,YACLrG,IAASC,YACT,4BAA4BzZ,KAAKwT,GAAGf,mBAAmBzS,KAAKo/B,UAAUrE,gBAExE,CAEQkD,eAAelgB,GACtB/d,KAAKie,OAASF,EACd/d,KAAKkU,gBAAkBlU,KAAKie,QAAQ7J,eAAeF,iBAAmB,cACtElU,KAAKmU,QAAUnU,KAAKie,QAAQ7J,eAAeD,SAAW,QACtDnU,KAAKqU,aAAerU,KAAKie,QAAQ7J,eAAeC,eAAgB,CACjE,CAEQyrB,kBAAkB5xB,GACH,OAAlBA,GACHlO,KAAKkO,cAAc4P,UAAU9a,QAAKC,KAAK,IAAItC,UAAWod,GAAa/d,KAAKi+B,eAAelgB,GAEzF,CAEAza,IAAI67B,EAAgBvB,EAAoBzqB,EAAiBksB,EAA4C,IACpGr/B,KAAKm/B,OAAS,GAAGn/B,KAAKkU,mBAAmBlU,KAAKmU,YAAYgrB,IAC1Dn/B,KAAK49B,SAAWA,EAChB59B,KAAKmT,QAAUA,EACfnT,KAAKo/B,UAAY,IAAI/tB,KAAKA,KAAKspB,OAE/B,MAAM+C,EAAW,IAAIkC,EAAS,WAAW5/B,KAAKm/B,SAAUn/B,KAAK49B,SAAU59B,KAAKmT,aAAS0J,EAAW,IAC5FwiB,EACHU,SAAU//B,KAAKwT,GAAGf,WAClButB,eAAgBhgC,KAAKukB,iBAEtBvkB,KAAK6/B,iBAAiB53B,KAAKy1B,EAC5B,CAEA5jB,aACCqlB,EACAvB,EACAzqB,EACAosB,EACAF,EAA4C,IAE5Cr/B,KAAKm/B,OAAS,GAAGn/B,KAAKkU,mBAAmBlU,KAAKmU,YAAYgrB,IAC1Dn/B,KAAK49B,SAAWA,EAChB59B,KAAKmT,QAAUosB,EAAUpsB,QACzBnT,KAAKo/B,UAAY,IAAI/tB,KAAKA,KAAKspB,OAE/B,MAAM+C,EAAW,IAAIkC,EAAS5/B,KAAKm/B,OAAQn/B,KAAK49B,SAAU59B,KAAKmT,QAASosB,EAAW,IAC/EF,EACHU,SAAU//B,KAAKwT,GAAGf,WAClButB,eAAgBhgC,KAAKukB,iBAEtBvkB,KAAK6/B,iBAAiB53B,KAAKy1B,EAC5B,CAEAuC,8BAA8B1b,GAC7BvkB,KAAKukB,eAAiBA,CACvB,iDA5EY+U,GAAc/1B,MAAAG,IAAA,yCAAd41B,EAAc7lB,QAAd6lB,EAAc5lB,UAAAuV,WAFd,QAAM,SAENqQ,CAAc,mDCDpB,MAAMgF,EAAc4B,IAC1B,IAAIC,EAAO,EACX,QAAShN,EAAI,EAAGA,EAAI+M,EAAMpkB,SAAUqX,EACnCgN,EAAOC,KAAKC,KAAK,GAAIF,GAAQD,EAAMI,WAAWnN,GAG/C,OAAc,EAAPgN,CAAO,6cCfHI,EAAZ,SAAYA,GACXA,SAAAC,sBAAA,sCACAD,EAAAE,kBAAA,iCACAF,EAAAG,yBAAA,yCACAH,EAAAI,sBAAA,sCACAJ,EAAAK,uBAAA,uCACAL,EAAAM,SAAA,4BANWN,CAOZ,CAPA,CAAYA,GAAc,IASnB,MAAMO,KAAwB7Y,MAAasY,EAAeC,uBACpDO,KAAuB9Y,MAAasY,EAAeE,mBACnDO,KAA8B/Y,MAC1CsY,EAAeG,4BACfvY,SAEY8Y,KAA2BhZ,MAAasY,EAAeI,yBAAuBxY,SAC9E+Y,KAAyBjZ,MAAasY,EAAeK,wBAErDjf,KAAWsG,MAAasY,EAAeM,YAAU1Y,SCbjDgZ,KAAoBlZ,MAChC,gCACAE,SAGYiZ,KAA8BnZ,MAC1C,yCACAE,SAGYkZ,KAA+BpZ,MAC3C,6CACAE,SAGYmZ,KAAuBrZ,MACnC,mCACAE,SCvBYoZ,KAAetZ,MAAa,mBAE5BuZ,EACRC,GACJ,CAACroB,EAAO5X,KACHA,GAAO0D,OAASq8B,IAAer8B,KAC3Bu8B,OAAQ5kB,EAAWrb,IAGpBigC,EAAQroB,EAAO5X,mBCOjB,MAAMkgC,EAAyC,CACrDzjB,OAAQ,CACPwD,MAAOkgB,IAAiBC,MACxBC,YAAaF,IAAuBG,MAErCC,0BAA0B,GAGdC,KAAgB1Z,MAC5BoZ,KACAjZ,MAAGe,EAAyC,CAACpQ,GAASqI,QAAOogB,mBAAW,IACpEzoB,EACH6E,OAAQ,IACJ7E,EAAM6E,OACTwD,QACAogB,gBAEDE,0BAA0B,MACzB,EACFtZ,MAAGe,EAAsB,CAACpQ,GAASqI,YAAK,IACpCrI,EACH6E,OAAQ,IACJ7E,EAAM6E,OACTwD,SAEDsgB,0BAA0B,iGC5BrB,IAAME,GAAU,MAAjB,MAAOA,EAgBZxiC,YAAoByiC,IAAAliC,KAAAkiC,YAfpBliC,KAAAmiC,sBAAqB7Y,MAAa,IAEjCtpB,KAAKkiC,SAASl/B,QACbumB,MAAOC,EAA2BiX,oBAAiB,EACnD9kB,KAAU,OACT+S,MAAGgT,EAAmBzjB,QAAQjb,QAC7BgI,KAAK9H,IAASsmB,EAAwCtmB,MAAK,EAC3D+Y,KAAYpJ,OAAU6b,MAAGlF,EAAqC,CAAE3W,MAAO,eAQnC,CAExCuvB,iBAAiBC,IAChB,OAAOriC,KAAKkiC,SAASl/B,QACpBumB,MAAOC,EAA2BgX,wBAAqB,EACvD8B,KAAW,IACVD,GAAiBr/B,QAAK6E,KAAU7H,KAAKkiC,SACnCl/B,QAAKumB,MAAOC,EAA2BoX,4BAG5C,mDA1BYqB,GAAU1+B,MAAAG,MAAA,sCAAVu+B,EAAUxuB,QAAVwuB,EAAUvuB,WAAA,SAAVuuB,CAAU,KCHhB,MAAMM,EAAuBnpB,GAAoBA,EAAMopB,cAEjDC,MAAiB3Z,MAAqE,UCXtF4Z,KDYAC,EAAiB9Y,MAC7B4Y,GACA,EAAGrpB,YACF,MAAQwpB,UAAWxpB,EAEnB,OAAOwpB,KAGIC,EAAiBhZ,MAC7B4Y,GACA,EAAGrpB,YACF,MAAQ0pB,eAAgB1pB,EAExB,OAAO0pB,KCzBIJ,EAAiC7Y,MAC7CkZ,EACC3pB,GAAUA,EAAM2oB,2BAGLiB,KAAsBnZ,MAAekZ,EAA+B3pB,GAAUA,EAAM6E,QAEpFsD,KAAcsI,MAAemZ,EAAsB5pB,GAAUA,EAAMqI,OAEnEjC,KAAqBqK,MAAemZ,EAAsB5pB,GAAUA,EAAMyoB,aCHjF,MAAOoB,EACZC,UAAUC,GACT,IAAIzgB,GAAQygB,EAAYC,KAExB,KAAO1gB,GAAM2gB,YACZ3gB,GAAQA,GAAM2gB,WAGf,MACCn4B,OACAk4B,MAAQN,iBACLK,GACIP,WAAWlgB,GAEnB,MAAO,CAAExX,OAAK03B,UAAQE,eACvB,ECnBM,MAAMvY,EAAiB,CAAC+Y,IAKlB3a,EAAgD,CAC5D6Z,cAAec,EACfp5B,OAAQq5B,MAGIC,EAAiD,0DCfvD,IAAKC,EAAZ,SAAYA,GACXA,SAAAC,KAAA,OACAD,EAAA7B,MAAA,QAFW6B,CAGZ,CAHA,CAAYA,GAAK,IAILE,EAAZ,SAAYA,GACXA,SAAA7B,KAAA,QADW6B,CAEZ,CAFA,CAAYA,GAAW,yICEhB,MAAMC,EAAWC,GAAwD,IAAMA,EAAYC,OAG3F,IAAMC,EAAwB,MAA/B,MAAOA,EACZtkC,YAAoB+Y,GAAAxY,KAAAwY,OAAkC,CAEtDsrB,OACC,OAAO,IAAIp0B,QAAQ,CAACs0B,EAASC,KAC5BjkC,KAAKwY,MAAMkJ,SAASqhB,QACpB/iC,KAAKwY,MAAMkJ,SAASqhB,QACpB/iC,KAAKwY,MACH+G,OAAOwjB,MACP//B,QAAK2Y,KAAWzY,MAASwrB,MAAGxrB,KAC5BvC,UACCujC,IACIA,IACHlkC,KAAKwY,MAAMkJ,SAASqhB,QACpBiB,EAAQE,GAAiB,EAG1BrxB,GAAUoxB,EAAOpxB,GAAM,EAG5B,iDApBYkxB,GAAwBxgC,MAAAG,MAAA,sCAAxBqgC,EAAwBtwB,QAAxBswB,EAAwBrwB,WAAA,SAAxBqwB,CAAwB,KCA9B,MAAMrc,EAAe,IAAIpjB,MAAoC,qDCD7D,IAAM2wB,EAAY,MAAnB,MAAOA,EAMZx1B,YACS0kC,EACsBC,GADtBpkC,KAAAmkC,mBACsBnkC,KAAAokC,cAE9BpkC,KAAKqkC,sBAAwB,IAAIh6B,IAAwBrK,KAAKskC,cAC9DtkC,KAAKyhB,MAAQzhB,KAAKqkC,sBAAsB3oB,eACxC1b,KAAKokC,YACH9iB,eACAte,QAAK2Y,KAAWzY,MAASwrB,MAAGxrB,KAC5BvC,UAAWuC,IACNlD,KAAKskC,eACTtkC,KAAKskC,aAAephC,GAErBlD,KAAKshB,aAAepe,EACpBlD,KAAKqkC,sBAAsBp8B,KAAK/E,EAAI,EAEvC,CAEAhC,OACClB,KAAKqkC,sBAAsB1jC,UAAW4jC,IAErC,GAAIA,IAAcvkC,KAAKskC,aAAc,CACpC,MAAME,EAAcC,SAASrzB,KAAKszB,UAC5BC,EAAqBC,MAAMlyB,KAAK8xB,GAAa35B,OAAQU,GAAiBA,EAAKQ,SAAS,WACtF44B,EAAmB7oB,QACtB0oB,EAAYK,UAAUF,GAIvB,MAAMG,EAA0B9kC,KAAKmkC,iBAAiBY,sBAAsBL,UACtEM,EAAuBJ,MAAMlyB,KAAKoyB,GAAyBj6B,OAAQU,GACxEA,EAAKQ,SAAS,WAEXi5B,EAAqBlpB,QACxBgpB,EAAwBD,UAAUG,EAEpC,MACCP,SAASrzB,KAAKszB,UAAUO,KAAKV,EAAY,UAAUvR,eACnDhzB,KAAKmkC,iBAAiBY,sBAAsBL,UAAUO,KAAKV,EAAY,UAAUvR,cAAa,EAGjG,CAEAkS,cAECllC,KAAKokC,YAAY5iB,gBADAxhB,KAAKshB,eAAiBmiB,IAAMC,KAAOD,IAAM7B,MAAQ6B,IAAMC,KAEzE,CACAyB,WACC,OAAOnlC,KAAKqkC,sBAAsBe,UACnC,CAEAC,mBACC,OAAOrlC,KAAKqkC,sBAAsBe,aAAe3B,IAAMC,KAAOD,IAAM7B,MAAQ6B,IAAMC,IACnF,iDA3DYzO,GAAY1xB,MAAAG,MAAAH,MAQfmkB,GAAY,sCARTuN,EAAYxhB,QAAZwhB,EAAYvhB,WAAA,SAAZuhB,CAAY,oICSzB,MAAMqQ,EAAyD,CAPvB7D,MACvC8D,MAAiB,CAChB9Z,KAAM,CAAC,CAAEhR,KAAM,CAAC,aAChB+qB,qBAAuBvqB,GAAQ,KAAKA,IACpCwqB,WAAW,GAJ2BhE,CAKpCA,IAiBG,IAAM3L,EAAiB,MAAxB,MAAOA,EACZr2B,YAAoCsnB,GACnC/mB,KAAKgnB,qBAAqBD,EAAc,oBACzC,CAEA,cAAOzW,GACN,MAAO,CACN2W,SAAU6O,EACV5O,UAAW,CACV6c,KACA,CAAEv+B,QAASilB,MAAiBhlB,WAAYm+B,KAAS9yB,KAAM,CAACizB,MAA2B3c,OAAO,GAC1F,CAAE5hB,QAASkgC,KAAuB7e,SAAU8e,OAG/C,CAEQ3e,qBAAqBD,EAAiC4D,GAC7D,GAAI5D,EACH,MAAM,IAAIhN,MAAM,GAAG4Q,qCAA8CA,2BAEnE,iDApBYmL,GAAiBvyB,MAAAuyB,EAAA,wCAAjBA,GAAiB,uCAX5BlL,KAAYta,QAAQq1B,KAAoB,CACvCnC,aAAc,IAAImC,QAA2BL,GAC7CM,cAAe,CACdC,yBAAyB,EACzBC,0BAA0B,KAG5Bhb,KAAcxa,QAAQq1B,MACtBI,KAA4Bz1B,YAAS,SAG1BwlB,CAAiB,+HCtBK,aAAIxxB,KAAoC,sECHpE,MAAMmjB,EAAqB,aAAInjB,KAA0C,wKCEzE,MAAM0hC,EAAoBnmC,GAAgC,IAChE,IAAI6P,QAASs0B,IACZnkC,EAAUomC,aAAatlC,UAAU,KAChCqjC,EAAQ,GAAE,EACV,GAGUkC,EAAoBA,CAACr3B,EAAkBoP,KACnD,MAAMhK,KAA8B/T,OAAO87B,MAE3C,OAAO,IAAImK,IAAoBt3B,EAAMoP,EAAOlP,aAAc,WAAWkF,EAAUE,UAAS,EAMlF,IAAMiyB,EAAkB,MAAzB,MAAOA,EACZ3mC,YACSI,EAC4BwmC,GAD5BrmC,KAAAH,YAC4BG,KAAAqmC,oBAEpCrmC,KAAKqmC,kBACH/mB,kBACAtc,QAAK2Y,KAAWzY,MAASwrB,MAAGxrB,KAC5BvC,UAAWuC,IACXlD,KAAKH,UAAUymC,eAAepjC,GAC9BlD,KAAKH,UAAU0mC,IAAIrjC,EAAI,EAE1B,CAEAsjC,gBAAgBvrB,GACf,OAAOjb,KAAKH,UAAUoS,IAAIgJ,EAC3B,CAEAwrB,uBAAuBxrB,GACtB,OAAOjb,KAAKH,UAAU6mC,QAAQzrB,EAC/B,CAEA8I,eAAe9I,EAAa2nB,GAC3B,OAAIA,GAAQ9mB,SACK6qB,KAAgBC,IAC/BD,EAAIE,QAAQ,WAAY,CAACC,EAAQvlC,IAAUqlC,EAAKrlC,IAAU,IAFhDua,CAIG9b,KAAKH,UAAU6mC,QAAQzrB,MAAS2nB,GAGxC5iC,KAAKH,UAAU6mC,QAAQzrB,EAC/B,CAEA8rB,qBACC,OAAO/mC,KAAKH,UAAUmnC,WACvB,iDAnCYZ,GAAkB7iC,MAAAG,MAAAH,MAGrBkkB,KAAkB,sCAHf2e,EAAkB3yB,QAAlB2yB,EAAkB1yB,UAAAuV,WAFlB,QAAM,SAENmd,CAAkB,+GClB/B,MAAMx3B,EAA+BC,MAAqBq3B,MAAkBr3B,EAAM,CAAEE,aAAc,mBAgB3F,IAAM4Y,EAAiB,MAAxB,MAAOA,EACZloB,YAAoCsnB,GACnC/mB,KAAKgnB,qBAAqBD,EAC3B,CAEA,cAAOzW,GACN,MAAO,CACN2W,SAAUU,EACVT,UAAW,CACV,CACC1hB,QAASilB,MACThlB,WAAYugC,KACZl1B,KAAM,CAACm2B,KAAkBb,MACzBhf,OAAO,IAIX,CAEQJ,qBAAqBD,GAC5B,GAAIA,EACH,MAAM,IAAIhN,MAAM,GAAGgN,EAAatnB,YAAYwF,8DAE9C,iDAvBY0iB,GAAiBpkB,MAAAokB,EAAA,wCAAjBA,GAAiB,uCAZ5B/hB,KACAE,KAAgBwK,QAAQ,CACvBM,OAAQ,CACPpL,QAASqL,KACTpL,WAAYmJ,EACZkC,KAAM,CAACC,OAERC,SAAS,EACTC,gBAAiB,YAChB,SAGS0W,CAAiB,swBCbvB,IAAMuf,EAAkB,MAAzB,MAAOA,oDAAkB,oCAAlBA,GAAkB,uCAJpBthC,KAAcD,MAAoB,SAIhCuhC,CAAkB,oBCAxB,IAAMlc,EAAqB,MAA5B,MAAOA,oDAAqB,oCAArBA,GAAqB,uCAHvBplB,KAAcI,MAAoB,SAGhCglB,CAAqB,yCCE3B,IAAMmc,EAAmB,MAA1B,MAAOA,oDAAmB,oCAAnBA,GAAmB,uCAHrBvhC,KAAcwhC,KAAkBC,KAAiBC,OAAa,SAG5DH,CAAmB,KCFnBI,EAAoB,MAA3B,MAAOA,oDAAoB,oCAApBA,GAAoB,uCAHtB3hC,KAAcD,MAAoB,SAGhC4hC,CAAoB,oBCA1B,IAAMC,EAAqB,MAA5B,MAAOA,oDAAqB,oCAArBA,GAAqB,uCAHvB5hC,KAAcD,MAAoB,SAGhC6hC,CAAqB,KCArBC,EAAsB,MAA7B,MAAOA,oDAAsB,oCAAtBA,GAAsB,uCAHxB7hC,KAAcD,MAAoB,SAGhC8hC,CAAsB,KCAtBC,EAAsB,MAA7B,MAAOA,oDAAsB,oCAAtBA,GAAsB,uCAHxB9hC,KAAcD,MAAoB,SAGhC+hC,CAAsB,KCEtBC,EAAwB,MAA/B,MAAOA,oDAAwB,oCAAxBA,GAAwB,uCAH1B/hC,KAAcD,IAAsBK,IAAsB0hC,IAAsB,SAG9EC,CAAwB,KCZ9B,IAAKC,EAAZ,SAAYA,GACXA,SAAAC,QAAA,iBACAD,EAAAE,OAAA,SACAF,EAAAG,UAAA,SACAH,EAAAI,KAAA,OAJWJ,CAKZ,CALA,CAAYA,GAAyB,qCCY9B,IAAMK,EAAyB,MAAhC,MAAOA,oDAAyB,oCAAzBA,GAAyB,uCAJ3BriC,KAAcD,IAAsB+vB,IAAiB3vB,IAAsBC,MAAoB,SAI7FiiC,CAAyB,KCFzBC,EAAqB,MAA5B,MAAOA,oDAAqB,oCAArBA,GAAqB,uCAJvBtiC,KAAcD,MAAoB,SAIhCuiC,CAAqB,oDCE3B,IAAMC,GAAmB,MAA1B,MAAOA,oDAAmB,oCAAnBA,GAAmB,wCAFpB,CAACC,MAAiB1iC,QAAA,CAFnBmB,IAAajB,KAAcD,MAAoB,SAI7CwiC,CAAmB,yCCCzB,IAAME,EAAuB,MAA9B,MAAOA,oDAAuB,oCAAvBA,GAAuB,uCAJzBziC,KAAcD,IAAsB+vB,IAAiB5vB,MAAiBwiC,MAAa,SAIjFD,CAAuB,oBCH7B,IAAME,EAAe,MAAtB,MAAOA,oDAAe,oCAAfA,GAAe,uCAJjB3iC,KAAcD,MAAoB,SAIhC4iC,CAAe,wGCArB,IAAMC,GAAyB,MAAhC,MAAOA,oDAAyB,oCAAzBA,GAAyB,uCAH3B5iC,KAAcD,MAAoB,SAGhC6iC,CAAyB,KCCzBC,GAAmB,MAA1B,MAAOA,oDAAmB,oCAAnBA,GAAmB,uCAHrB7iC,KAAcD,IAAsB6iC,GAChBA,KAAyB,SAE3CC,CAAmB,qBCDzB,IAAMC,GAAuB,MAA9B,MAAOA,oDAAuB,oCAAvBA,GAAuB,uCAHzB9iC,KAAcD,MAAoB,SAGhC+iC,CAAuB,KCAvBC,GAAmB,MAA1B,MAAOA,oDAAmB,oCAAnBA,GAAmB,uCAHrB/iC,KAAcD,MAAoB,SAGhCgjC,CAAmB,KCCnBC,GAAsB,MAA7B,MAAOA,oDAAsB,oCAAtBA,GAAsB,uCAHxBhjC,KAAcD,IAAsBK,MAAoB,SAGtD4iC,CAAsB,6CCC5B,IAAMC,GAAkB,MAAzB,MAAOA,oDAAkB,oCAAlBA,GAAkB,uCAHpBjjC,KAAcD,IAAsBkB,IAAaC,OAAmB,SAGlE+hC,CAAkB,2HCX9BtlC,MAAA,4BAQCA,MAAA,oBAAAA,MAAAulC,GAAA,MAAAC,EAAAxlC,QAAA,OAAUA,MAAAwlC,EAAAC,OAAM,GAChBzlC,aARAA,MAAA,eAAAsZ,8BA8BMtZ,MAAA,mBACCA,MAAA,GACDA,mCAF2CA,MAAA,QAAA0lC,GAC1C1lC,cAAA,IAAA0lC,EAAAC,cAAA,iCAHH3lC,MAAA,sBAAAA,CAAkE,mBAEhEA,MAAA,EAAA4lC,GAAA,qBAGD5lC,mCAHgCA,MAAA,GAAAA,MAAA,UAAA6lC,ICoBhC,IAAMC,GAAa,MAApB,MAAOA,EAcZ5pC,YAAoB6pC,GAAAtpC,KAAAspC,KANpBtpC,KAAAupC,WAAmC,IAAIh/B,MACvCvK,KAAAwpC,YAAa,CAKoC,CACjDvoC,WACCjB,KAAKypC,KAAOzpC,KAAKspC,GAAGI,MAAM,CACzBC,WAAY3pC,KAAKspC,GAAGM,QAAQ,GAAI,CAACC,KAAWvkB,YAE9C,CACAwkB,UACK9pC,KAAK+pC,YACR/pC,KAAKwpC,YAAa,EAElBxpC,KAAKuN,SAEP,CACAy7B,OACChpC,KAAKwpC,YAAa,CACnB,CACAj8B,UACCvN,KAAKupC,WAAW/9B,KAAKxL,KAAKypC,KAAKO,SAASL,WAAW9mC,MACpD,iDAhCYwmC,GAAa9lC,MAAAG,MAAA,oCAAb2lC,EAAavlC,UAAA,mBAAAqE,OAAA,CAAA3H,MAAA,QAAAypC,MAAA,QAAAC,SAAA,WAAAC,aAAA,eAAAJ,YAAA,cAAAK,aAAA,gBAAAz9B,QAAA,CAAA48B,WAAA,cAAAlhC,YAAA,EAAAgiC,SAAA,CAAA9mC,OAAAQ,MAAA,GAAAC,KAAA,EAAAC,OAAA,8/BAAAC,SAAA,SAAAC,EAAAC,GAAA,EAAAD,IDpD1BZ,MAAA,gBACCA,MAAA,EAAA+mC,GAAA,6BAUA/mC,MAAA,WAICA,MAAA,gCAAea,EAAA0lC,SAAS,EAAxBvmC,CAAyB,0BAChBa,EAAA0lC,SAAS,GAElBvmC,MAAA,UAAAA,CAAmD,WAEjDA,MAAA,WACDA,QACAA,MAAA,UAAAA,CAAwB,WACSA,MAAA,GAAWA,UAG5CA,MAAA,YAAAA,CAAuD,aAC9BA,MAAA,IAAcA,QACtCA,MAAA,SAAAA,CAAK,cAEHA,MAAA,GAAAgnC,GAAA,yBAODhnC,UAEDA,MAAA,6BAMCA,MAAA,2BAAUa,EAAAmJ,SAAS,EAAnBhK,CAAoB,iBAAAinC,IAAA,OACXA,GAAAC,iBAAwB,GACjClnC,uBA3CFA,cAAA,OAAAa,EAAAolC,YAUDjmC,cAAA,YAAAa,EAAAolC,WAAA,eAMkCjmC,MAAA,GAAAA,MAAA,uBAAAa,EAAA6lC,MAAA,OAAA1mC,OAGAA,MAAA,GAAAA,MAAAa,EAAA5D,OAIR+C,MAAA,GAAAA,MAAAa,EAAA8lC,UAEjB3mC,MAAA,GAAAA,MAAA,YAAAa,EAAAqlC,MAC2BlmC,cAAA,UAAAa,EAAAgmC,cAWjC7mC,cAAA,WAAAa,EAAAgmC,cAAA,KAAAhmC,EAAAqlC,KAAAO,SAAAL,WAAA9mC,MAAAU,CAAkE,QAAAa,EAAA2lC,6BCfrEnkC,KAAYjC,UACZgC,IAAoB+kC,MAAAC,MAAAC,MAAAC,MACpB/jC,KAAmBpD,6BACnBmD,IACAikC,MACAC,KACAlC,GACAnT,IACA1vB,IAAoBglC,KACpBjlC,IAAoBklC,MAAAC,OAAA,6sBAAAhoC,KAAA,CAAAioC,UAET,IACXC,OAAQ,WAAY,IACnBhyB,OAAM,UAAQiyB,OAAM,CAAEra,UAAW,yBAAuB,EACxD5X,OAAM,UAAQiyB,OAAM,CAAEra,UAAW,qBAAmB,EAEpDsa,OAAW,eAAaC,OAAQ,OAAI,EACpCD,OAAW,eAAaC,OAAQ,SAChC,EACDH,OAAQ,SAAU,IACjBhyB,OAAM,QAAMiyB,OAAM,CAAEG,QAAS,MAAI,EACjCF,OAAW,YAAa,IAACD,OAAM,CAAEG,QAAS,KAAG,EAAGD,OAAQ,QAAK,EAC7DD,OAAW,YAAa,IAACC,OAAQ,OAAKF,OAAM,CAAEG,QAAS,WAExDC,gBAAA,YAEWpC,CAAa,4CCxCnB,IAAMqC,GAAqB,MAA5B,MAAOA,oDAAqB,oCAArBA,GAAqB,uCAHvB9lC,KAAcD,IAAsBkB,IAAaC,KAAqB6kC,QAAiB,SAGrFD,CAAqB,qBCD3B,IAAME,GAAqB,MAA5B,MAAOA,oDAAqB,oCAArBA,GAAqB,uCAHvBhmC,KAAcD,IAAsBK,IAAsBF,QAAe,SAGvE8lC,CAAqB,aCC3B,IAAMC,GAAoB,MAA3B,MAAOA,oDAAoB,oCAApBA,GAAoB,uCAHtBjmC,KAAcD,IAAsBkB,IAAaf,QAAe,SAG9D+lC,CAAoB,cCA1B,IAAMC,GAAsB,MAA7B,MAAOA,oDAAsB,oCAAtBA,GAAsB,uCAJxBlmC,KAAcD,IAA8CuhC,IAAkB,SAI5E4E,CAAsB,KCFtBC,GAAe,MAAtB,MAAOA,oDAAe,oCAAfA,GAAe,uCAHjBllC,IAAajB,KAAcD,MAAoB,SAG7ComC,CAAe,KCCfC,GAA8B,MAArC,MAAOA,oDAA8B,oCAA9BA,GAA8B,uCAJhCpmC,KAAcD,IAAsBG,QAAe,SAIjDkmC,CAA8B,KCA9BC,GAAuB,MAA9B,MAAOA,oDAAuB,oCAAvBA,GAAuB,uCAHzBrmC,KAAcD,MAAoB,SAGhCsmC,CAAuB,KCCvBC,GAAsB,MAA7B,MAAOA,oDAAsB,oCAAtBA,GAAsB,uCAHxBtmC,KAAcD,IAAsBK,IAAsBmhC,IAAmB,SAG3E+E,CAAsB,6BCP5B,IAAM5kB,GAAc,MAArB,MAAOA,EADb7nB,cAESO,KAAAmsC,WAAuC,IAAI9hC,MAAyB,GACpErK,KAAAosC,WAAmC,IAAI5nC,IAE/C,YAAI6nC,GACH,OAAOrsC,KAAKmsC,WAAWzwB,cACxB,CAEAuG,WAAWJ,EAAkBrO,GAC5B,IAAKA,EACJ,MAAM,IAAIuG,MAAM,8EAED,IAAZ8H,GACH7hB,KAAKosC,WAAWvpB,IAAIrP,EAAIqO,GACxB7hB,KAAKmsC,WAAWlkC,MAAK,KAED,IAAZ4Z,GAAqB7hB,KAAKosC,WAAW/pB,IAAI7O,IACjDxT,KAAKosC,WAAW9oB,OAAO9P,GAEK,IAAzBxT,KAAKosC,WAAW1a,MACnB1xB,KAAKmsC,WAAWlkC,MAAK,EAEvB,iDAtBYqf,EAAc,sCAAdA,EAAc7T,QAAd6T,EAAc5T,UAAAuV,WADD,QAAM,SACnB3B,CAAc,qBCcpB,IAAMglB,GAAwB,MAA/B,MAAOA,oDAAwB,oCAAxBA,GAAwB,wCARzB,CACV,CACC9mC,QAAS8c,KACTuE,SAAUS,KAEX5hB,QAAA,CANSE,KAAsCD,MAAoB,SASxD2mC,CAAwB,iCCR9B,IAAMC,GAAY,MAAnB,MAAOA,EAGZ9sC,YACSysB,EACAsgB,EACAC,GAFAzsC,KAAAksB,UACAlsB,KAAAwsC,kBACAxsC,KAAAysC,gBACN,CAEHC,iBAAiBxoC,EAAgCkD,EAAoC6W,GACpF,MAAMqP,GAAU,CACfC,aAAa,EACbof,cAAe,uBACfC,WAAY,oBACZlf,iBAAkB1tB,KAAKwsC,gBAAgB5e,SAASC,qBAAqBC,mBACrE2e,eAAgBzsC,KAAKysC,eAAeI,SAErC7sC,KAAK+tB,WAAa/tB,KAAKksB,QAAQ1Z,OAAO,IAAKyL,KAAWqP,KAEtDttB,KAAK+tB,WAAWI,OAAO,IAAI2e,MAAe5oC,EAAUkD,GACrD,CAEA2lC,kBACCC,EACA/uB,GAEA,OAAAje,KAAK+tB,WAAa/tB,KAAKksB,QAAQ1Z,OAAOyL,GAG/B,CAAEmF,aAFYpjB,KAAK+tB,WAAWI,OAAO6e,GAErBjf,WAAY/tB,KAAK+tB,WACzC,CAEAtrB,QACCzC,KAAK+tB,WAAWM,SACjB,iDAlCYke,GAAYhpC,MAAAG,OAAAH,MAAAG,OAAAH,MAAAG,OAAA,sCAAZ6oC,EAAY94B,QAAZ84B,EAAY74B,UAAAuV,WADC,QAAM,SACnBsjB,CAAY,KCCZU,GAAe,MAAtB,MAAOA,oDAAe,oCAAfA,GAAe,wCAHb,CAACV,IAAa7mC,QAAA,CAFfE,KAAcsnC,MAAcvnC,MAAoB,SAKjDsnC,CAAe,KCSf/hB,GAAwB,MAA/B,MAAOA,oDAAwB,oCAAxBA,GAAwB,uCATnCtlB,KACAD,IACAG,MACAE,IACAglB,EACAiiB,KAAe,SAIJ/hB,CAAwB,wDCd9B,IAAMiiB,GAAoB,MAA3B,MAAOA,EAGZ1tC,YAES2tC,EACAvtC,GADAG,KAAAotC,+BACAptC,KAAAH,YAJQG,KAAAqtC,YAAc,QAM9BrtC,KAAKkB,MACN,CAEQA,OACPlB,KAAKstC,cACLttC,KAAKutC,4BACLvtC,KAAKwtC,qBACN,CAEQF,cACPttC,KAAKsf,gBAAkBtf,KAAKH,UAAUknC,qBACtC0G,YAAcztC,KAAKsf,gBACpB,CAEQiuB,4BACP,UAAYG,EAAW7qC,KAAUiY,OAAOC,QAAQ/a,KAAKotC,8BACpDK,2BAA6BC,EAAW7qC,EAE1C,CAEQ2qC,sBACP,MAAMG,EAAsB3tC,KAAKH,UAAUkkB,eAC1C,2DAGK6pB,EAAwC,CAC7C3qB,OAAQ,GAAGjjB,KAAKH,UAAUkkB,eAAe,4DACzC8pB,KAAM,MAAM7tC,KAAKH,UAAUkkB,eAAe,uDAC1C+pB,EAAGH,EACHI,GAAIJ,EACJK,EAAGL,EACHM,GAAIN,GAGLF,kBAAoBztC,KAAKsf,iBAAmBtf,KAAKqtC,YAAa,CAC7DO,aAAc,IAAKA,IAErB,CAEAM,uBAAuBC,GACtB,OAAOV,KAAOU,GAAiBC,SAChC,iDAjDYjB,GAAoB5pC,MAIvB8qC,MAAiB9qC,MAAAG,OAAA,sCAJdypC,EAAoB15B,QAApB05B,EAAoBz5B,WAAA,SAApBy5B,CAAoB,KCgBpBmB,GAAW,MAAlB,MAAOA,oDAAW,oCAAXA,GAAW,wCAXZ,CACV,CACC9oC,QAAS+oC,KACT1nB,SAAUsmB,IAEX,CACC3nC,QAAS6oC,KACTznC,SAAU,CAAEyrB,EAAG,GAAImc,GAAI,EAAGz+B,EAAG,GAAI0+B,EAAG,GAAI/a,EAAG,GAAIoa,EAAG,OAEnD,SAEWQ,CAAW,KCbXI,GAAqB,MAA5B,MAAOA,oDAAqB,oCAArBA,GAAqB,uCAHvB9oC,KAAcD,MAAoB,SAGhC+oC,CAAqB,KCArBC,GAAyB,MAAhC,MAAOA,oDAAyB,oCAAzBA,GAAyB,uCAH3B/oC,KAAcD,MAAoB,SAGhCgpC,CAAyB,qBCE/B,IAAMC,GAAwB,MAA/B,MAAOA,oDAAwB,oCAAxBA,GAAwB,uCAJ1BhpC,KAAcD,IAAsBkB,IAAagoC,MAAgB/oC,QAAe,SAI9E8oC,CAAwB,KCCxBE,GAA4B,MAAnC,MAAOA,oDAA4B,oCAA5BA,GAA4B,uCAJ9BlpC,KAAcD,IAAsBmB,KAAqBhB,MAAiBE,MAAoB,SAI5F8oC,CAA4B,cCclC,IAAMC,GAAgC,MAAvC,MAAOA,oDAAgC,oCAAhCA,GAAgC,uCAd3CnpC,KACAD,IACAqpC,IACAlD,GACAmD,MACAnpC,MAGAH,IAGAspC,QAAuB,SAGZF,CAAgC,gCCFtC,IAAMG,GAAsB,MAA7B,MAAOA,oDAAsB,oCAAtBA,GAAsB,uCAbjCtpC,KACAD,IACAkB,IACAC,KACAqoC,MACA9H,KACA+H,MACAC,QAAwB,SAMbH,CAAsB,qBCjB5B,IAAMI,GAAyB,MAAhC,MAAOA,oDAAyB,oCAAzBA,GAAyB,uCAH3BC,MACAA,QAAkB,SAEhBD,CAAyB,qBCG/B,IAAME,GAAiB,MAAxB,MAAOA,oDAAiB,oCAAjBA,GAAiB,uCAHnB5pC,KAAcD,IAAsB8pC,QAAgB,SAGlDD,CAAiB,qBCAvB,IAAMvkB,GAAe,MAAtB,MAAOA,oDAAe,oCAAfA,GAAe,uCAHjBrlB,KAAc8pC,MAAgBC,OAAkB,SAG9C1kB,CAAe,KCCf2kB,GAAa,MAApB,MAAOA,oDAAa,oCAAbA,GAAa,uCAHfhqC,KAAcD,MAAoB,SAGhCiqC,CAAa,KCgCbC,GAAc,MAArB,MAAOA,oDAAc,oCAAdA,GAAc,uCAnBzBjqC,KACAD,IACAG,MACAyiC,EAGAF,EACAtiC,IACAC,IACAa,MAAW,SAUAgpC,CAAc,oBCc3B,MAAMzpC,GAAmB,CACxBL,IACAC,IACA0hC,EACAP,EACAuB,GACAC,GACA1iC,KACAihC,EACAgB,EACAD,EACAO,GACAC,GACAI,GACAkD,GACA/lC,IACAuhC,EACAvc,EACA2c,EACAmI,IACAN,GACA3D,GACAH,GACAsD,IACAzG,EACAK,GACAgH,GACA3D,GACA8D,KACAC,IACA3G,GACAiG,GACApD,GACA/D,GACAuG,GACAC,GACA7C,GACAtE,EACAwE,GACA+C,GACAnD,GACAiE,GACA5kB,GACAyK,IACA2S,EACAyG,GACAI,GACAhkB,GACAohB,GACAsC,GACAqB,MAkBM,IAAM1a,GAAc,MAArB,MAAOA,oDAAc,oCAAdA,GAAc,uCAXzB3vB,KACAiB,IACAC,KACAjB,MACAF,IACAspC,MACG7oC,GAGMT,IAAsB2oC,GAAa4B,KAjE7CnqC,IACAC,IACA0hC,EACAP,EACAuB,GACAC,GACA1iC,KACAihC,EACAgB,EACAD,EACAO,GACAC,GACAI,GACAkD,GACA/lC,IACAuhC,EACAvc,EACA2c,EAEA6H,GACA3D,GACAH,GACAsD,IACAzG,EACAK,GACAgH,GACA3D,GAIAqD,GACApD,GACA/D,GACAuG,GACAC,GACA7C,GACAtE,EACAwE,GACA+C,GACAnD,GACAiE,GACA5kB,GACAyK,IACA2S,EA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OAAA,EAAAD,UAUpB43C,EAAgB,y6BDpB/Bx4C,MAAA,WACCA,MAAA,EAAA47C,EAAA,aAiDD57C,eAhD4BA,cAAA,UAAAa,GAAAg7C,q0BCQfX,CAAsB,oDCV5B,MAAMY,EAAW,CACvB,kBACA,mBACA,aACA,iBACA,cACA,kBACA,gBACA,MACA,WACA,eACA,gBACA,aACA,cACA,mBACA,8BACA,iBACA,kBACA,gBACA,4BACA,aACA,aACA,cACA,eACA,UACA,oBACA,qBACA,aACA,aACA,cACA,iBACA,kBACA,WACA,oBACA,kBACA,WACA,oBACA,QACA,aACA,eACA,UACA,YACA,kBACA,QACA,iBACA,OACA,WACA,MACA,YACA,aACA,QACA,aACA,WACA,SACA,aACA,aACA,cACA,WACA,YACA,UACA,QACA,OACA,mBACA,eACA,kBACA,eACA,gBACA,aACA,oBACA,oBACA,qBACA,kBACA,SACA,WACA,QACA,YACA,iBACA,eACA,cACA,cACA,QACA,eACA,aACA,OACA,MACA,eACA,WACA,gBACA,UACA,aACA,UACA,aACA,UACA,UACA,WACA,UACA,cACA,QACA,QACA,WACA,cACA,OACA,SACA,qBACA,MACA,QACA,YACA,eACA,WACA,2BACA,4BACA,2BACA,kCACA,mCACA,0BACA,SACA,iBACA,QACA,gBACA,UACA,YACA,eACA,iBACA,kBACA,UACA,gBACA,iBACA,WACA,SACA,0BACA,wBACA,sBACA,sBACA,uBACA,oBACA,iBACA,WACA,eACA,gBACA,yBACA,uBACA,OACA,qBACA,cACA,sBACA,eACA,aACA,YACA,OACA,QACA,WACA,WACA,SACA,SACA,QACA,OACA,WACA,cACA,aACA,SACA,SACA,aACA,UACA,SACA,WACA,gBACA,eACA,kBACA,OACA,OACA,gBACA,cACA,cACA,cACA,gBACA,SACA,OACA,QACA,QACA,cACA,cACA,WACA,cACA,qBACA,cACA,QACA,SACA,eACA,aACA,cACA,qBACA,gBACA,WACA,YACA,OACA,YACA,OACA,OACA,cACA,qBACA,aACA,WACA,cACA,cACA,YACA,aACA,aACA,aACA,YACA,iBACA,WACA,WACA,WACA,QACA,gBACA,QACA,eACA,QACA,2BACA,eACA,YACA,OACA,gBACA,oBACA,YACA,YACA,aACA,UACA,OACA,aACA,aACA,SACA,UACA,eACA,YACA,UACA,OACA,oBACA,YACA,UACA,OACA,2BACA,4BACA,uBACA,uBACA,0BACA,YACA,oBACA,qBACA,SACA,iBACA,YACA,eACA,eACA,QACA,YACA,cACA,kBACA,aACA,SACA,eACA,aACA,eACA,YACA,QACA,SACA,aACA,gBACA,cACA,cACA,aACA,YACA,aACA,aACA,YACA,UACA,MACA,gBACA,WACA,QACA,QACA,SACA,cACA,iBACA,gBACA,cACA,kBACA,mBACA,gBACA,mBACA,yBACA,SACA,WACA,YACA,wBACA,YACA,YACA,YACA,OACA,OACA,eACA,mBACA,OACA,SACA,OACA,SACA,UACA,SACA,wBACA,aACA,MACA,eACA,aACA,WACA,UACA,QACA,cACA,YACA,OACA,gBACA,cACA,WACA,QACA,eACA,eACA,eACA,QACA,OACA,OACA,WACA,OACA,UACA,eACA,QACA,cACA,gBACA,YACA,WACA,aACA,aACA,mBACA,eACA,QACA,eACA,wBACA,gBACA,sBACA,gBACA,YACA,SACA,UACA,YACA,aACA,WACA,cACA,QACA,cACA,cACA,YACA,YACA,cACA,OACA,QACA,gBACA,SACA,aACA,SACA,QACA,YACA,MACA,cACA,QACA,OACA,OACA,gBACA,gBACA,iBACA,QACA,sBACA,eACA,eACA,QACA,WACA,aACA,WACA,mBACA,QACA,SACA,SACA,OACA,UACA,mBACA,qBACA,sBACA,gBACA,oBACA,iBACA,SACA,SACA,QACA,UACA,MACA,aACA,OACA,kBACA,cACA,QACA,YACA,QACA,eACA,gBACA,kBACA,cACA,SACA,oBACA,SACA,YACA,eACA,gBACA,cACA,UACA,aACA,uBACA,iBACA,kBACA,gBACA,WACA,gBACA,gBACA,QACA,kBACA,SACA,OACA,gBACA,gBACA,WACA,QACA,cACA,cACA,aACA,aACA,YACA,eACA,yBACA,oBACA,WACA,YACA,sBACA,iBACA,OACA,gBACA,SACA,gBACA,aACA,OACA,gBACA,aACA,eACA,OACA,YACA,gBACA,QACA,kBACA,gBACA,gBACA,eACA,iBACA,gBACA,uBACA,qBACA,MACA,cACA,OACA,iBACA,aACA,gBACA,cACA,UACA,KACA,cACA,YACA,cACA,OACA,OACA,sBACA,qBACA,kBACA,sBACA,OACA,QACA,UACA,QACA,YACA,QACA,OACA,gBACA,cACA,QACA,cACA,YACA,YACA,OACA,kBACA,kBACA,SACA,QACA,YACA,UACA,SACA,UACA,OACA,WACA,yBACA,0BACA,wBACA,iBACA,QACA,QACA,cACA,aACA,YACA,OACA,eACA,cACA,kBACA,gBACA,gBACA,gBACA,SACA,SACA,gBACA,UACA,WACA,oDC/gBM,IAAM3pB,EAAe,MAAtB,MAAOA,EAGZj2B,YAAoB6/C,EAA0CC,GAA1Cv/C,KAAAs/C,kBAA0Ct/C,KAAAu/C,YAF9Dv/C,KAAAw/C,YAAc,uDACdx/C,KAAAy/C,WAAa,cAEZz/C,KAAK8jC,KAAKub,EAAU,eACrB,CAEQvb,KAAK4b,EAAsBx0C,GAClCw0C,EAAMvgC,QAAS9d,IACdrB,KAAKs/C,gBAAgBK,WAAWt+C,EAAMrB,KAAKu/C,UAAUK,+BAA+B,GAAG10C,KAAO7J,SAAW,EAE3G,iDAXYq0B,GAAenyB,MAAAG,MAAAH,MAAAI,MAAA,oCAAf+xB,GAAe,yCAAfA,CAAe,oDCErB,MAAMpT,EAAkB,aAAIhe,KAAgC,2ICE5D,IAAMu7C,EAAuB,MAA9B,MAAOA,EAGZpgD,YAEQqgD,GAAA9/C,KAAA8/C,iBAGP9/C,KAAKqsC,SAAWrsC,KAAK8/C,eAAezT,SAASrpC,QAAK+8C,KAAM,GACzD,iDATYF,GAAuBt8C,MAI1B+e,KAAe,oCAJZu9B,EAAuB/7C,UAAA,8BAAAC,MAAA,EAAAC,KAAA,EAAAC,OAAA,oFAAAC,SAAA,SAAAC,EAAAC,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MAFH,IAAIA,MAEgBC,UAAYmjD,GAGpD,KAA+B,IAAxBC,EAAWC,UAA0C,IAAxBD,EAAWC,UAC9CD,EAAW95B,QAAQ85B,EAAW75B,UAAY,GAG3C,OAAO65B,EAAWE,aAAW,mBCd9B,IAAA5pD,EAAA,CACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,eACA,kBACA,gBACA,mBACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,YACA,gBACA,mBACA,gBACA,mBACA,eACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,eACA,kBACA,aACA,gBACA,aACA,eACA,kBACA,gBACA,mBACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,cACA,iBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,mBACA,gBACA,YACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,sBACA,mBACA,sBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,gBACA,WACA,cACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,YACA,eACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,eACA,kBACA,gBACA,aACA,gBACA,iBACA,oBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,mBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,kBACA,qBACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,cACA,iBACA,aACA,gBACA,aACA,gBACA,aACA,gBACA,gBACA,mBACA,cACA,iBACA,aACA,gBACA,aACA,gBACA,cACA,mBACA,sBACA,iBACA,gBACA,mBACA,aACA,gBACA,aACA,gBACA,aACA,iBACA,oBACA,gBACA,aACA,gBACA,mBACA,sBACA,aACA,gBACA,gBACA,mBACA,gBACA,mBACA,gBACA,mBACA,eACA,mBAIA,SAAA6pD,EAAAljD,GACA,IAAA6B,EAAAshD,EAAAnjD,GACA,OAAA/B,EAAA4D,EACA,CACA,SAAAshD,EAAAnjD,GACA,IAAA/B,EAAAmlD,EAAA/pD,EAAA2G,GAAA,CACA,IAAA9B,EAAA,IAAAkK,MAAA,uBAAApI,EAAA,KACA,MAAA9B,EAAAmlD,KAAA,mBACAnlD,CACA,CACA,OAAA7E,EAAA2G,EACA,CACAkjD,EAAAppC,KAAA,WACA,OAAA3Q,OAAA2Q,KAAAzgB,EACA,EACA6pD,EAAA7wB,QAAA8wB,EACAv+B,EAAA0+B,QAAAJ,EACAA,EAAArhD,GAAA","names":["AppComponent","constructor","authService","authContext","themeService","translate","notificationService","notificationsConfig","this","idle","inject","Idle","dialogService","DialogService","isLoggedIn","idleStateMessage","title","headerOptions","loginStatusChange$","subscribe","loggedIn","afterLogin","userRegisteredInMarket$","registered","afterProfileLoaded","ngOnInit","init","getHeaderOptions","initIdleConfiguration","icon","label","index","action","login","fullName","userProfile","watch","stop","userIdleWarningAfterSeconds","getConfig","userLogoutAfterWarningInSeconds","setIdle","Number","setTimeout","setInterrupts","DEFAULT_INTERRUPTSOURCES","onIdleEnd","resetIdle","onTimeout","close","logout","onIdleStart","open","value","dialogRef","afterClosed","pipe","take","data","onTimeoutWarning","countdown","console","log","i0","AUTH_SERVICE","AUTH_CONTEXT","i1","i2","NOTIFICATIONS_SERVICE","NOTIFICATIONS_CONFIG","selectors","decls","vars","consts","template","rf","ctx","SIDENAV_OPTIONS_CONFIG","InjectionToken","MenuItemType","Map","Catalogue","Import","Uploads","Projects","Dashboard","Sidenav","sideNavOptionsConfigFactory","items","name","type","link","selected","hasRecentActivity","isExpanded","SideNavigationModule","provide","useFactory","imports","SharedMaterialModule","CommonModule","RouterModule","TranslateModule","EcosTextButtonModule","EcosIconButtonModule","EcosBadgeModule","EcosVersionComponent","OutsideClickModule","componentModules","tooltipOptions","showDelay","hideDelay","touchendHideDelay","disableTooltipInteractivity","AppComponentsModule","MAT_TOOLTIP_DEFAULT_OPTIONS","useValue","FormsModule","ReactiveFormsModule","withConfig","warnOnNgModelWithFormControl","FeatureFlagDirective","templateRef","TemplateRef","viewContainerRef","ViewContainerRef","featureFlagsFacade","FEATURE_FLAGS_FACADE","onDestroy$","Subject","ecosFeatureFlagElse","featureFlag","featureFlagEnabled","takeUntil","clear","createEmbeddedView","ngOnDestroy","next","unsubscribe","inputs","None","standalone","option_r6","_r12","$implicit","ctx_r10","iconClicked","SideNavigationComponent_mat_nav_list_3_ng_container_1_ng_container_1_div_5_Template","_c0","_c1","ctx_r7","expanded","SideNavigationComponent_mat_nav_list_3_ng_container_1_ng_container_1_Template","ctx_r4","mapToFeatureFlag","SideNavigationComponent_mat_nav_list_3_ng_container_1_Template","_r15","ctx_r14","profileToggle","SideNavigationComponent_mat_nav_list_3_div_4_Template","options_r3","ctx_r0","_r17","ctx_r16","changeExpanded","_r19","ctx_r18","menuTypeToFeatureFlag","SideNavigationComponent","configOptions","router","featureFlagService","menuOptions$","BehaviorSubject","selectedIcon","EventEmitter","setAvailableMenuOptions","checkForNotifications","toggleSidenav","events","distinctUntilChanged","filter","event","NavigationEnd","map","urlAfterRedirects","url","withLatestFrom","handleRouteChange","split","menuType","item","emit","currentRoute","routeSegments","updatedItems","linkSegments","every","rs","includes","pendingJobsNotificationsAvailable$","newJobsAvailable","notifyMenuOption","sharedProjectsNotificationsAvailable$","newSharedProjectsAvailable","menuOptionToNotify","notificationAvailable","updatedOptions","sideNavFlag","isSideNavEnable","isSideNavOpened","outputs","ngContentSelectors","_c4","SideNavigationComponent_mat_nav_list_3_Template","SideNavigationComponent_ng_container_4_Template","SideNavigationComponent_ng_container_5_Template","_c3","LayoutComponent","WelcomeComponent","loginButtonConfig","navigate","replaceUrl","clicked","SigninRedirectCallbackComponent","completeLogin","then","redirectUrl","navigateByUrl","SignoutRedirectCallbackComponent","completeLogout","SilentRefreshCallbackComponent","signinSilentCallback","ForbiddenComponent","configService","email","encodeURI","DOCS_CONFIG","RefreshComponent","routeReuseStrategy","projectInit","clearSavedHandle","createNew","PROJECT_INITIALIZATION_TOKEN","getTranslationLoaderFactory","http","fromTranslation","languagePath","routes","path","pathMatch","redirectTo","component","canActivate","AuthGuard","TenantGuard","children","loadChildren","Promise","all","__webpack_require__","e","bind","m","MapsShellModule","DatasetCatalogShellModule","DataManagerShellModule","IntegrationsShellModule","RedirectGuard","AppRoutingModule","forRoot","preloadingStrategy","PreloadAllModules","bindToComponentInputs","onSameUrlNavigation","forChild","loader","TranslateLoader","deps","HttpClient","isolate","defaultLanguage","getEmailAction","loggerId","body","Date","getTime","AuthInterceptor","snackBarService","loggingService","intercept","req","isNonAuthUrl","some","x","authReq","context","get","IS_PUBLIC_API","clone","setHeaders","Authorization","accessToken","Guid","create","toString","from","handle","tap","error","status","StatusCodes","UNAUTHORIZED","FORBIDDEN","showWarning","message","translationParams","messageParams","isTranslatable","window","id","factory","ɵfac","environment","production","issuer","clientId","scopes","httpsEnabled","appConfig","applicationName","version","loggingConfig","isProduction","appInsightsConfig","enableAppInsights","connectionString","instrumentationKey","autoTrackPageVisitTime","enableAutoRouteTracking","enableCorsCorrelation","correlationHeaderExcludedDomains","docsConfig","contact","cookiePolicy","termsAndConditions","disclosure","domainConfig","search","baseUrl","endpoint","datasetCatalogItems","jobs","approvalJobs","requests","masterData","onboardingJobSpecs","catalogItemReferences","mapProjects","userDownloads","p2pCrossLayerAnalysis","p2sCrossLayerAnalysis","s2sCrossLayerAnalysis","crossLayerAnalysis","crossLayerAnalysisGeodata","geocoding","isochrone","staticMap","audienceBuilderIntegrations","audienceBuilderRedirectUrl","customIcons","isochroneConfig","numberOfPointsLimit","maximumDistanceInKm","recheckIntervalSeconds","newSinceSecondsAgo","insightsConfig","p2pNearestMaxRadiusInMiles","projectConfig","allowedDomains","HOST","location","host","AuthConfig","redirectUri","revocationEndpoint","scope","showDebugInformation","AuthService","authConfig","authority","client_id","redirect_uri","response_type","post_logout_redirect_uri","automaticSilentRenew","silent_redirect_uri","loadUserInfo","userStore","WebStorageStateStore","store","localStorage","prefix","userManager","UserManager","addAccessTokenExpired","addSilentRenewError","addUserLoaded","result","setCurrentUser","originalUri","signinRedirect","state","_this","_asyncToGenerator","signinRedirectCallback","Severity","Information","LoginRedirectReferer","catch","snackBarData","showError","logException","Error","_this2","signoutRedirect","_this3","clearCurrentUser","clearStaleState","removeUser","signoutRedirectCallback","_this4","_this5","user","getUser","USER_SERVICE","AuthorizationContextService","claims","Object","entries","profile","key","UserProfile","given_name","family_name","access_token","userService","loginStatusSubject","ReplaySubject","userRegisteredInMarketSubject","asObservable","switchMap","getUserProfile","markets","length","expired","BadRequestInterceptor","catchError","errorResponse","details","HttpStatusCode","BadRequest","Warning","CustomError","throwError","InternalServerErrorInterceptor","InternalServerError","errorId","extractErrorId","undefined","CustomErrorType","SystemError","startIndex","indexOf","startOfIdTemplate","endIndex","substring","test","PrecondititonFailedInterceptor","PreconditionFailed","PrecondititonRequiredInterceptor","PreconditionRequired","TooManyRequestsInterceptor","TooManyRequests","GlobalErrorHandler","zone","settings$","settings","handleConfig","config","handleError","errorType","run","showSystemError","EventBusService","eventBus","EventBus","subs","publish","channel","payload","register","schema","eventHandler","subscription","push","sub","forEach","unregister","TranslationConfigService","currentLanguage","select","getTranslationCode","UserService","HttpBaseService","profileFacade","super","serviceName","headers","createContentTypeJsonHeaders","executeRequest","requestUrl","requestMethod","HttpRequestMethod","Get","response","userName","clientIdentifier","clientName","marketName","marketIdentifier","roles","toEnumIgnoreCase","RoleType","roleIdentifier","roleName","marketId","userResponseAdapter","setUserProfile","DOMAIN_CONFIG","USER_PROFILE_FACADE","ThemeConfigService","currentTheme","getAppTheme","setCurrentTheme","theme","dispatch","setTheme","LoaderInterceptor","loading","CORRELATION_HEADER","request","SHOW_LOADER","setLoading","finalize","isLoading","requestId","has","LOADING_SERVICE","CustomReuseStrategy","savedHandles","shouldDetach","route","saveComponent","getRouteKey","set","shouldAttach","retrieve","shouldReuseRoute","future","curr","routeConfig","componentRef","destroy","delete","pathFromRoot","join","PageTitleStrategy","TitleStrategy","translateService","updateTitle","snapshot","appName","translateByKey","buildTitle","titleTranslation","setTitle","MarketInterceptor","MARKET_HEADER","getSelectedMarket","mergeMap","selectedMarket","NotificationService","pendingJobsNotificationsAvailableSubject","sharedProjectsNotificationsAvailableSubject","jobsNotificationProvider","projectsNotificationProvider","pollDelayTime","checkOnDemandPendingJobs","checkForNewNotification","arePendingJobsAvailable","checkOnDemandSharedProjects","areSharedProjectsAvailable","configInterval","pollForAutomaticNotifications","registerOnDemandNotifications","required","properties","pollForNewPendingJobs","pollForNewSharedProjects","interval","notificationsAvailable","EMPTY","JOBS_NOTIFICATIONS_PROVIDER","PROJECTS_NOTIFICATIONS_PROVIDER","EVENT_BUS","JobsNotificationProvider","pendingJobsAvailable","HttpContext","injestionJobResponse","metadata","totalCount","ProjectsType","MyProjects","SharedProjects","ProjectsNotificationProvider","sharedProjectsAvailable","getTimeAgoISOString","NotificationModule","useClass","CoreModule","parentModule","throwIfAlreadyLoaded","ngModule","providers","HTTP_INTERCEPTORS","multi","ErrorHandler","LoadingService","ProjectInitializationService","RouteReuseStrategy","TRANSLATION_CONFIG","THEME_CONFIG","TranslationModule","LoggingModule","ConfigurationModule","AuthModule","UserProfileModule","LoadFeatureFlags","createAction","LoadFeatureFlagsSuccess","props","LoadFeatureFlagsFail","featureFlagsReducer","createReducer","loaded","initialFeatureFlags","on","featureFlagsStoreKey","reducers","flags","selectFeatureFlagsState","createFeatureSelector","FeatureFlagsService","getFeatureFlags","providedIn","FeatureFlagsEffects","action$","featureFlagsService","getInitialFeatureFlags$","createEffect","ofType","fromActions","featureFlags","err","FEATURE_FLAGS_SERVICE","getFeatureFlagsState","createSelector","getFeatureFlagsLoaded","getFeatureFlagsLoading","FeatureFlagsFacadeService","store$","Store","loadFeatureFlags","getFeatureFlagEnabled","FEATURE_FLAGS_REDUCER_TOKEN","getReducers","effects","FeatureFlagsModule","APP_INITIALIZER","initializeFeatureFlags","moduleName","StoreModule","forFeature","EffectsModule","EcosFilePreviewModule","EcosCloseButtonModule","EcosTableModule","EcosModalContainerModule","PREVIEW_DATA","FilePreviewViewComponent","closePreview","setHeader","filePreview","header","keys","reduce","previous","current","r","onClose","filename","ParsingService","injector","overlay","csvParserService","CSV_PARSER_SERVICE","excelParserService","EXCEL_PARSER_SERVICE","getXlsxPreviewData","file","containsHeaders","worksheetName","numberOfRows","getCsvPreviewData","duplicateHeaders","parse","transformHeader","checkForEmptyHeader","duplicateIndex","newIndex","newHeader","resultData","showPreview","options","hasBackdrop","height","width","positionStrategy","position","global","centerHorizontally","centerVertically","overlayRef","portal","ComponentPortal","createInjector","attach","instance","dispose","getHeaders","isXlsxFile","getXlsxHeaders","isCsvFile","of","hasValidContent","minRows","minColumns","hasHeaders","maxRows","checkDataTypes","pop","xlsHasValidContent","csvHasValidContent","readExcelWorksheetNames","dataToPass","Injector","parent","CsvParserService","BaseService","logServiceInitialization","hasColumnHeaders","previewNoOfRows","Observable","observer","parserConfig","createLocalFileParseConfig","step","parser","abort","complete","numberOfColumns","skipEmptyLines","validateColumnCount","maxRowsFullfiled","validateMaxRows","validateMinRows","csvHasValidRowsNumber","maxNoOfRows","_value","dynamicTyping","preview","transform","values","totalRows","row","FileValidationService","hasValidFormat","validFileTypes","fileFormat","hasValidSize","sizeInBytes","size","ExcelParserService","readExcelWorksheets","workBook","workSheet","Sheets","SheetNames","blankrows","range","XLSX","decode_range","s","encode_range","sheet_to_json","raw","rawNumbers","sheetRef","v","String","parseXlsx","convertWorksheetToJson","fromEntries","toLowerCase","columnCount","c","i","respectsRowsAndCols","checkSheetDataTypes","xlsxHasValidRowsNumber","maxNoOFRows","getXlsxData","columnsToValidate","d","transformXlsxData","frameId","prop","onlyWorsheetNames","parseEntireFile","reader","FileReader","onload","_event","bookSheets","sheetRows","onloadend","target","readAsBinaryString","currentCellRef","encode_col","currentCellInfo","DataPreviewModule","PARSING_SERVICE","FILE_VALIDATION_SERVICE","AppModule","bootstrap","ThemeService","OverlayContainer","FullscreenOverlayContainer","Window","BrowserModule","BrowserAnimationsModule","SharedUiModule","HttpClientModule","HttpClientJsonpModule","EcosIconsModule","NgIdleModule","SnackBarModule","EcosDialogModule","SharedStoreModule","StoreDevtoolsModule","instrument","logOnly","maxAge","trace","enableProdMode","__NgCli_bootstrap_1","bootstrapModule","module","enableDebugTools","ApplicationRef","components","ImportFileFormat","CommaSeparatedValues","FixedWidth","Xlsx","GeoJSON","Shp","Shx","Dbf","Sbn","Sbx","Prj","Cpg","Kml","Kmz","Nothing","FilterType","LookUp","GeoSpatialIntersection","GeoSpatialDistance","LayerType","GeoBoundaries","Points","Lines","ShapeAndMarker","TravelRadius","Choropleth","Place","CrossLayerAnalysis","Units","Meters","Millimeters","Centimeters","Kilometers","Miles","Inches","Yards","Feet","BusinessCase","Frames","AD_HOC_AUDIENCE_SHAPE_MATCHING_PROCESSOR_SERVICE","CHOROPLETH_SHAPE_MATCHING_DETAILS_FACADE","MAPS_CHOROPLETH_SHAPE_MATCHING_SERVICE","WELL_KNOWN_DATASETS_FACADE","LoggingService","Info","stacktrace","stack","InternalHttpHeaders","ETag","IfMatch","IfNoneMatch","ContentType","StatusId","InProgress","Invalid","ProcessedSuccessfully","ProcessedWithErrors","HttpHeaders","createDefaultAndIfMatchedHeaders","projectEtag","JSON","stringify","createCachelessHeaders","referenceDate","now","setDate","getDate","modifiedSince","toUTCString","requestOptions","executeRequestForImage","responseType","executeRequestAndGetFullResponse","observe","HttpContextToken","Post","Put","Delete","Head","Patch","Options","createNewProject","ENV_CONFIG","DomainConfigService","DocsConfigService","APP_CONFIG","AppConfigService","ISOCHRONE_CONFIG","IsochroneConfigService","NotificationsConfigService","INSIGHTS_CONFIG","InsightsConfigService","PROJECT_CONFIG","ProjectConfigService","Location","Router","userRegisteredInMarket","parseUrl","firstName","lastName","LogWriter","hasWriter","execute","write","ConfigurationContext","ConfigurationFacade","settingsSubject","Debug","Critical","ConsoleWriter","logEntries$","logEntry","handleEntry","severity","debug","info","warn","AppInsightsWriter","handleSettings","entry","handleAuthConfiguration","appInsights","setAuthenticatedUserContext","toHashCode","clearAuthenticatedUserContext","angularPlugin","AngularPlugin","ApplicationInsights","extensions","extensionConfig","identifier","loadAppInsights","trackPageView","logTrace","trackTrace","severityLevel","source","timestamp","customProperties","trackException","exception","initializeLogWriter","consoleWriter","configContext","appInsightsWriter","LogEntry","innerlogEntries$","initializeService","LoggerId","SelectedMarket","addSelectedMarketLogDimension","input","hash","Math","imul","charCodeAt","AppActionTypes","StartAppConfiguration","LoadConfiguration","LoadConfigurationSuccess","LoadConfigurationFail","FinishAppConfiguration","SetTheme","startAppConfiguration","loadAppConfiguration","loadAppConfigurationSuccess","loadAppConfigurationFail","finishAppConfiguration","ExportFileRecords","ExportFileChoroplethRecords","ExportFileGeoBoundaryRecords","ExportInsightRecords","RESET_ACTION","ResetToNewProject","reducer","initialConfigState","fromModels","Light","translation","enGB","configurationInitialized","configReducer","AppEffects","actions$","loadConfiguration$","ngrxOnRunEffects","resolvedEffects$","exhaustMap","selectConfiguration","configuration","getRouterState","getAppConfigurationInitialized","getRouteParams","params","getQueryParams","queryParams","fromRoot","getAppConfiguration","CustomSerializer","serialize","routerState","root","firstChild","fromApp","routerReducer","metaReducers","Theme","Dark","Translation","initApp","initService","load","AppInitializationService","resolve","reject","configInitialized","overlayContainer","themeConfig","themeBehaviourSubject","defaultTheme","themeName","bodyClasses","document","classList","bodyThemesToRemove","Array","remove","overlayContainerClasses","getContainerElement","themeClassesToRemove","add","changeTheme","getTheme","getValue","getContrastTheme","localStorageMetaReducers","localStorageSync","storageKeySerializer","rehydrate","RouterStateSerializer","fromStore","runtimeChecks","strictStateImmutability","strictActionImmutability","StoreRouterConnectingModule","translateFactory","onLangChange","httpLoaderFactory","TranslateHttpLoader","TranslationService","translationConfig","setDefaultLang","use","translateByKey$","translateMultipleByKey","instant","str","args","replace","_match","getCurrentLanguage","currentLang","TranslateService","EcosCheckboxModule","EcosFabButtonModule","MatTooltipModule","MatButtonModule","MatIconModule","EcosLinkButtonModule","EcosBasicButtonModule","EcosExpandButtonModule","EcosOptionButtonModule","EcosDropdownButtonModule","DropDownButtonOptionsType","Polygon","Circle","Rectangle","Line","EcosRadioIconButtonModule","EcosSlideToggleModule","EcosPaginatorModule","MatPaginatorIntl","EcosStatusMessageModule","TooltipModule","EcosChipsModule","EcosActionBarButtonModule","EcosActionBarModule","EcosMiniFabButtonModule","EcosRemovableButton","EcosCampaignCardModule","EcosDropdownModule","_r4","ctx_r3","hide","option_r7","toUpperCase","CardComponent_mat_form_field_15_mat_option_2_Template","options_r5","CardComponent","fb","cardAction","showHidden","form","group","cardOption","control","Validators","onClick","buttonLabel","controls","image","subTitle","dropdownList","cardOptions$","features","CardComponent_ecos_ui_icon_button_1_Template","CardComponent_mat_form_field_15_Template","$event","stopPropagation","i3","i4","i5","i6","LetDirective","EcosUiDropDownDirective","i7","i8","styles","animation","trigger","style","transition","animate","opacity","changeDetection","EcosColorPickerModule","ColorPickerModule","EcosFacetHeaderModule","EcosDatepickerModule","EcosCheckboxListModule","EcosInputModule","EcosInternationalisationModule","EcosHeaderCounterModule","EcosListViewItemModule","loadingSub","loadingMap","loading$","EcosLoadingSpinnerModule","ModalService","positionBuilder","scrollStrategy","openWithTemplate","backdropClass","panelClass","block","TemplatePortal","openWithComponent","componentPortal","EcosModalModule","PortalModule","DateTransformService","relativeTimeThresholdOptions","defaultLang","setLanguage","setRelativeTimeThresholds","setRelativeTimeSpec","moment","threshold","moreThanAMonthLabel","relativeTime","past","M","MM","y","yy","transformDateToTimeAgo","dateToTransform","fromNow","THRESHOLD_OPTIONS","PipesModule","DATE_TRANSFORM_SERVICE","ss","h","EcosProgressBarModule","EcosProgressSpinnerModule","EcosRadioSelectionModule","MatRadioModule","EcosSearchAutocompleteModule","EcosSearchableCheckboxListModule","EcosSearchModule","NgxSkeletonLoaderModule","EcosSelectSearchModule","MatSelectModule","MatFormFieldModule","NgxMatSelectSearchModule","EcosSplittablePanelModule","AngularSplitModule","EcosStepperModule","CdkStepperModule","MatTableModule","MatPaginatorModule","EcosTabModule","EcosTagsModule","MenuButtonComponent","CollapsiblePanelComponent","SliderComponent","CheckedLabelComponent","DirectivesModule","ctx_r1","headerIcon","ctx_r2","secondaryButton","impact","primaryButton","disabled","DialogComponent","dialog","showCloseButton","primaryButtonClicked","secondaryButtonClicked","headerIconColor","MAT_DIALOG_DATA","DialogComponent_div_1_Template","DialogComponent_mat_icon_3_Template","DialogComponent_ecos_ui_text_button_12_Template","DialogComponent_ecos_ui_text_button_13_Template","defaultConfig","isArray","MAT_DIALOG_DEFAULT_OPTIONS","BadgeComponent","show","BadgeComponent_div_0_Template","CloseButtonComponent","tooltip","closed","IconButtonComponent","isSvg","tooltipPosition","showBadge","variant","positions","defaultPosition","_r6","item_r10","MenuButtonComponent_ng_template_6_button_2_ng_container_2_ng_container_1_Template","MenuButtonComponent_ng_template_6_button_2_ng_container_2_ng_template_2_Template","MenuButtonComponent_ng_template_6_button_2_ng_container_2_ng_template_4_Template","_r14","_r16","_r21","ctx_r20","MenuButtonComponent_ng_template_6_button_2_ng_container_2_Template","ctx_r9","highlightCurrentSelection","MenuButtonComponent_ng_template_6_button_2_Template","ctx_r5","customButton","positionType","endBottom","itemSelected","menuPosition","endTop","startBottom","startTop","leftDown","leftUp","rightDown","rightUp","option","viewQuery","CdkMenuTrigger","ElementRef","CdkMenu","CdkMenuItem","MenuButtonComponent_ng_container_1_Template","MenuButtonComponent_ng_template_2_Template","MenuButtonComponent_ng_template_4_Template","MenuButtonComponent_ng_template_6_Template","_r2","CdkMenuModule","encapsulation","ConnectionPositionPair","originX","originY","overlayX","overlayY","TextButtonComponent","iconPosition","color","TextButtonComponent_ng_container_3_Template","TextButtonComponent_ng_container_6_Template","TextButtonComponent_ng_container_7_Template","_c2","ToggleCardComponent","selectItem","selectedItem","description","ToggleCardComponent_div_3_Template","_r0","checked","svg","label_r1","_r5","EcosChipsComponent_mat_chip_option_2_mat_icon_3_Template","truncate","selectable","removable","EcosChipsComponent","stackable","removed","labels","EcosChipsComponent_mat_chip_option_2_Template","TogglePosition","After","hideToggle","minimalPadding","Before","ThrottleClickModule","FeatureNotSupportedModule","el","renderer","addClass","nativeElement","ngAfterViewInit","matSelect","querySelector","arrow","disableRipple","contentQueries","dirIndex","MatSelect","MAT_FORM_FIELD_DEFAULT_OPTIONS","appearance","hideRequiredMarker","CheckboxComponent","usage","showUnchecked","CheckedLabelComponent_mat_icon_1_Template","DatepickerComponent_2_ng_template_0_Template","DatepickerComponent","dateChange","selectedDate","date","toDate","selectDate","pickerName","minDate","maxDate","DateAdapter","MomentDateAdapter","MAT_DATE_LOCALE","MAT_MOMENT_DATE_ADAPTER_OPTIONS","MAT_DATE_FORMATS","ECOS_FORMATS","DatepickerComponent_2_Template","DatepickerComponent_mat_error_8_Template","DatepickerComponent_mat_error_9_Template","_r1","hasError","dateInput","display","monthYearLabel","dateA11yLabel","monthYearA11yLabel","onPageSelected","pageSize","pageSizeOptions","pageIndex","hidePageSize","PaginatorComponent","paginatorIntl","pageEvent","nextPageLabel","previousPageLabel","firstPage","paginator","MatPaginator","PaginatorComponent_mat_paginator_1_Template","max","min","changed","sliderForm","FormGroup","slider","FormControl","valueChanges","change","changeInput","evt","validity","inputValue","valueAsNumber","stepMismatch","valid","isNaN","patchValue","TooltipDirective","MatTooltip","tooltipDisabled","parentHasOverflow","element","offsetHeight","scrollHeight","offsetWidth","scrollWidth","_overlay","_elementRef","_scrollDispatcher","_viewContainerRef","_ngZone","_platform","_ariaDescriber","_focusMonitor","_scrollStrategy","_dir","_defaultOptions","MAT_TOOLTIP_SCROLL_STRATEGY","DOCUMENT","StatusMessageComponent_div_1_ng_container_1_mat_icon_1_Template","StatusMessageComponent_div_1_ng_container_1_mat_icon_2_Template","StatusMessageComponent_div_1_ng_container_1_mat_icon_3_Template","StatusMessageComponent_div_1_ng_container_1_mat_icon_4_Template","statusMessage_r1","messageType","statusMessageType","Success","StatusMessageComponent_div_1_ng_container_2_ng_template_4_ng_container_0_Template","StatusMessageComponent_div_1_ng_container_2_ng_template_4_ng_template_1_Template","StatusMessageComponent_div_1_ng_container_2_ng_template_4_ng_template_3_Template","ctx_r12","truncateMessage","StatusMessageComponent_div_1_ng_container_2_ng_container_1_Template","StatusMessageComponent_div_1_ng_container_2_ng_template_2_Template","StatusMessageComponent_div_1_ng_container_2_ng_template_4_Template","_r11","_r13","StatusMessageComponent_div_1_ng_container_1_Template","StatusMessageComponent_div_1_ng_container_2_Template","StatusMessageComponent","StatusMessageType","messagesWithTooltip","filenameRef","setAttribute","getSuffix","innerHTML","slice","dotposition","lastIndexOf","StatusMessageComponent_div_1_Template","messages","iconList","matIconRegistry","sanitizer","iconBaseUrl","iconSuffix","icons","addSvgIcon","bypassSecurityTrustResourceUrl","LoadingSpinnerComponent","loadingService","delay","MatCheckboxModule","MatListModule","MatSidenavModule","MatRippleModule","MatToolbarModule","MatProgressSpinnerModule","MatProgressBarModule","MatDividerModule","MatChipsModule","MatSnackBarModule","MatDialogModule","MatSliderModule","MatSlideToggleModule","MatInputModule","MatDatepickerModule","MatNativeDateModule","MatMomentDateModule","MatMenuModule","MatCardModule","OverlayModule","MatTabsModule","MatExpansionModule","MatStepperModule","ScrollingModule","MatAutocompleteModule","MatButtonToggleModule","MatBadgeModule","ModalContainerComponent","closeModal","ModalContainerComponent_ecos_ui_close_button_2_Template","ModalComponent","SnackBarType","Validation","SnackBarComponent_ng_template_14_ng_container_0_Template","SnackBarComponent_ng_template_14_ng_container_1_Template","SnackBarComponent_ng_template_14_ng_container_2_Template","SnackBarComponent_ng_template_14_ng_container_3_Template","SnackBarComponent_ng_template_14_ng_container_4_Template","snackBarType","SnackBarComponent","snackBarRef","dismiss","MAT_SNACK_BAR_DATA","SnackBarComponent_ng_container_3_Template","SnackBarComponent_mat_icon_11_Template","SnackBarComponent_ng_template_14_Template","_r3","titleParams","snackBarDefaultOptions","duration","horizontalPosition","verticalPosition","MAT_SNACK_BAR_DEFAULT_OPTIONS","SnackBarService","snackBar","durationSec","showSuccess","showInfo","getPanelClass","openFromComponent","TimeAgoPipe","dateTransformService","pure","FileSizePipe","units","bytes","precision","parseFloat","isFinite","unit","toFixed","SearchComponent","searchedTerm","SubSink","clearAsYouTypeSearch$","searchDebounceTime","clear$","shouldClear","searchInput","asYouTypeSearch$","merge","fromEvent","searchRef","searchAsYouType","debounceTime","SearchComponent_mat_progress_spinner_6_Template","searching$","placeholderText","FacetValuesStore","ComponentStore","componentStore","values$","setItems","setState","item_r3","itemWidth","count","CheckboxListComponent_ng_container_2_div_1_Template","filters_r1","getItemValue","CheckboxListComponent","filters$","CheckboxListComponent_ng_container_2_Template","noResultsText","SearchableCheckboxListComponent","innerItems","checkAndSetCheckboxList","hasSearch","showSearch","maxItemsWithoutSearch","facetValueStore","valuesCount","selectedValue","filterBySearchTerm","searchedText$","searchTerm","hasFilteredItems","filteredItems","ngAfterContentChecked","noResults","calculateHeight","scrollViewRef","checkViewportSize","itemsWithoutScroll","itemHeight","SEARCHABLE_CHECKBOX_LIST_CONFIG","SearchableCheckboxListComponent_ecos_ui_search_1_Template","SearchableCheckboxListComponent_div_5_Template","checkboxItemWidth","ctx_r6","getHeader","colKey_r4","element_r9","TableComponent_ng_container_2_th_1_Template","TableComponent_ng_container_2_td_2_Template","TableComponent","includePaginator","columnKeys","dataSource","MatTableDataSource","updateData","colKey","MatTable","TableComponent_ng_container_2_Template","TableComponent_tr_3_Template","TableComponent_tr_4_Template","TableComponent_mat_paginator_5_Template","tag_r4","TagsInsertComponent","translatePath","insertedTag","tagsInsertRef","addTag","infoSelected","TagsInsertComponent_ecos_ui_text_button_8_Template","TagsInsertComponent_mat_option_18_Template","canAddTags","tags","RemovableTagsListComponent","removedTag","removeTag","tagsWarningMessage_r2","TagsListEditorComponent","subscriptions","tagsWarningMessage$","createTagsLimitMessage","translationPath","createDuplicateTagMessage","createAlphaNumericValidationMessage","createLengthValidationMessage","onAddTag","tag","validateTag","checkEmptyOrWhiteSpace","checkAlphaNumericInput","checkMinMaxLength","checkDuplicate","addedTags","duplicateTags","addedTag","trim","isDuplicate","exec","onRemoveTag","TagsListEditorComponent_ng_container_3_Template","suggestedTags","tmp_5_0","autoSuggestedTags","TagsComponent","tmp_1_0","docsService","currentYear","getFullYear","policy","terms","BasicUser","AdvancedUser","MarketAdmin","GetSelectedMarket","SetSelectedMarket","SetProfile","SetProfileSuccess","profileReducer","initialProfileState","featureUserKey","fromProfileReducer","getFeatureUserState","getProfileState","find","getAvailableMarkets","getUserRolesForSelectedMarket","UserProfileFacade","hasRole","role","fromSelectors","setSelectedMarket","ProfileEffects","getMarketEffect$","NewSelectedMarket","setProfileEffect$","concatLatestFrom","market","FEATURE_PROFILE_REDUCER_TOKEN","UserProfileStateModule","rgbToHex","g","b","hexToRgb","hex","bigint","parseInt","interpolateColor","firstColor","secondColor","factor","round","interpolateColors","lastColor","steps","stepFactor","interpolatedColorArray","generateDerivedColor","sourceColor","rgb2hsv","hsv2rgb","f","n","k","floor","capitalizeFirstLetter","charAt","camelCaseToTitleCase","match","snakeCaseToSentenceCase","_","snakeCaseToUpperCase","toLowercaseAndRemoveSpaces","removeFileExtension","removeWhitespaceAndSpecialChars","inputString","DATASET_NAME_UNIQUENESS_VALIDATION_SERVICE","DatasetNameUniquenessValidator","validationService","validate","visibilityLevel","oldValue","hasUniqueName","nameExists","UNIQUENESS_VALIDATION_SERVICE","UniquenessValidator","hasDuplicates","array","uniqueValues","Set","itemString","searchObjectForValue","deepSearch","groupBy","arr","fn","prev","groupKey","DEFAULT_COORDINATES_PRECISION","areValidCoordinates","lat","lng","isLatitude","isLongitude","parsed","abs","enumType","valueToParse","p","isNumericValue","convertToFixedDecimal","decimals","getPropertyIgnoreCase","obj","lowerKey","keyList","term","retryBackoff","exponentialBackoffDelay","iteration","initInterval","pow","initialInterval","maxRetries","Infinity","maxInterval","shouldRetry","resetOnSuccess","backoffDelay","defer","retryWhen","errors","concatMap","attempt","iif","timer","getDelay","maximumInterval","markLastSelectedValue","isOnlyOneItemSelected","filterUndefinedOrNull","toLocaleLowerCase","endsWith","isSvgFile","secondsToSubtract","millisecondsToSubtract","targetDate","getDay","toISOString","webpackContext","webpackContextResolve","o","code","exports"],"sourceRoot":"webpack:///","sources":["./apps/location-intelligence/src/app/app.component.ts","./apps/location-intelligence/src/app/app.component.html","./apps/location-intelligence/src/components/sidenav/models/sidenav-options.interface.ts","./apps/location-intelligence/src/components/sidenav/configs/menu-item-type.enum.ts","./apps/location-intelligence/src/components/sidenav/configs/sidenav.config.ts","./apps/location-intelligence/src/components/sidenav/side-navigation.module.ts","./apps/location-intelligence/src/components/app-components.module.ts","./libs/shared/feature-flags/src/lib/directives/feature-flag.directive.ts","./apps/location-intelligence/src/components/sidenav/sidenav.component.html","./apps/location-intelligence/src/components/sidenav/sidenav.component.ts","./apps/location-intelligence/src/pages/layout/layout.component.ts","./apps/location-intelligence/src/pages/layout/layout.component.html","./apps/location-intelligence/src/pages/welcome/welcome.component.ts","./apps/location-intelligence/src/pages/welcome/welcome.component.html","./apps/location-intelligence/src/pages/auth/signin-redirect-callback.component.ts","./apps/location-intelligence/src/pages/auth/signout-redirect-callback.component.ts","./apps/location-intelligence/src/pages/auth/silent-refresh-callback.component.ts","./apps/location-intelligence/src/pages/forbidden/forbidden.component.ts","./apps/location-intelligence/src/pages/forbidden/forbidden.component.html","./apps/location-intelligence/src/refresh/refresh.component.ts","./apps/location-intelligence/src/app/app-routing.module.ts","./apps/location-intelligence/src/core/auth/utils.ts","./apps/location-intelligence/src/core/auth/interceptors/auth-interceptor.ts","./apps/location-intelligence/src/environments/environment.prod.ts","./apps/location-intelligence/src/core/auth/auth-config.ts","./apps/location-intelligence/src/core/auth/auth.service.ts","./libs/shared/user-profile/src/lib/domain/abstractions/user-service.interface.ts","./apps/location-intelligence/src/core/auth/authorization-context.service.ts","./apps/location-intelligence/src/core/errors/bad-request.interceptor.ts","./apps/location-intelligence/src/core/errors/internal-server-error.interceptor.ts","./apps/location-intelligence/src/core/errors/precondition-failed.interceptor.ts","./apps/location-intelligence/src/core/errors/precondition-required.interceptor.ts","./apps/location-intelligence/src/core/errors/too-many-requests.interceptor.ts","./apps/location-intelligence/src/core/errors/global-error-handler.ts","./apps/location-intelligence/src/core/event-bus/event-bus.service.ts","./apps/location-intelligence/src/core/services/translation-config.service.ts","./apps/location-intelligence/src/core/services/user.service.ts","./apps/location-intelligence/src/core/services/adapters/user-response.adapter.ts","./apps/location-intelligence/src/core/services/theme-config.service.ts","./apps/location-intelligence/src/core/http/loader-interceptor.ts","./libs/shared/routing-kernel/src/lib/abstractions/routing/custom-reuse-strategy.service.ts","./libs/shared/routing-kernel/src/lib/abstractions/page-title/page-title-strategy.service.ts","./apps/location-intelligence/src/core/http/market-interceptor.ts","./apps/location-intelligence/src/core/notifications/notification.service.ts","./apps/location-intelligence/src/core/notifications/providers/jobs-notification.provider.ts","./apps/location-intelligence/src/core/services/models/project-type.enum.ts","./apps/location-intelligence/src/core/notifications/providers/projects-notification.provider.ts","./apps/location-intelligence/src/core/notifications/notification.module.ts","./apps/location-intelligence/src/core/core.module.ts","./libs/shared/feature-flags/src/lib/+state/actions/feature-flags.actions.ts","./libs/shared/feature-flags/src/lib/+state/reducers/feature-flags.reducer.ts","./libs/shared/feature-flags/src/lib/+state/reducers/index.ts","./libs/shared/feature-flags/src/lib/infrastructure/services/feature-flags.service.ts","./libs/shared/feature-flags/src/lib/+state/effects/feature-flags.effects.ts","./libs/shared/feature-flags/src/lib/domain/feature-flags-service.interface.ts","./libs/shared/feature-flags/src/lib/+state/selectors/feature-flags.selectors.ts","./libs/shared/feature-flags/src/lib/+state/facades/feature-flags.facade.ts","./libs/shared/feature-flags/src/lib/app-initializers/feature-flags-initializer.ts","./libs/shared/feature-flags/src/lib/feature-flags.module.ts","./libs/shared/data-preview/src/lib/file-preview/file-preview.module.ts","./libs/shared/data-preview/src/lib/abstractions/file-preview.token.ts","./libs/shared/data-preview/src/lib/file-preview/file-preview-view.component.ts","./libs/shared/data-preview/src/lib/file-preview/file-preview-view.component.html","./libs/shared/data-preview/src/lib/services/parsing.service.ts","./libs/shared/data-preview/src/lib/abstractions/constants.ts","./libs/shared/data-preview/src/lib/services/csv-parser.service.ts","./libs/shared/data-preview/src/lib/services/file-validation.service.ts","./libs/shared/data-preview/src/lib/services/excel-parser.service.ts","./libs/shared/data-preview/src/lib/data-preview.module.ts","./apps/location-intelligence/src/app/app.module.ts","./apps/location-intelligence/src/main.ts","./libs/shared/abstractions/src/lib/models/choropleth-segmentation-type.enum.ts","./libs/shared/abstractions/src/lib/models/import-file-type.enum.ts","./libs/shared/abstractions/src/lib/models/layer-filters.interface.ts","./libs/shared/abstractions/src/lib/models/layer-type.enum.ts","./libs/shared/abstractions/src/lib/models/units.enum.ts","./libs/shared/abstractions/src/lib/models/business-case-enum.ts","./libs/shared/abstractions/src/lib/abstractions/ad-hoc-audience-shape-matching-processor.interface.ts","./libs/shared/abstractions/src/lib/abstractions/choropleth-shape-matching-details-facade.interface.ts","./libs/shared/abstractions/src/lib/abstractions/project-initialization.interface.ts","./libs/shared/abstractions/src/lib/abstractions/shape-matching-service.interface.ts","./libs/shared/abstractions/src/lib/abstractions/well-known-datasets-facade.interface.ts","./libs/shared/abstractions/src/lib/common/base.service.ts","./libs/shared/abstractions/src/lib/api-models/custom-error.ts","./libs/shared/abstractions/src/lib/api-models/http-headers.enum.ts","./libs/shared/abstractions/src/lib/api-models/request-status-response.interface.ts","./libs/shared/abstractions/src/lib/http/http-base.service.ts","./libs/shared/abstractions/src/lib/http/http-context.token.ts","./libs/shared/abstractions/src/lib/http/http-request-method.enum.ts","./libs/shared/abstractions/src/lib/event-bus/event-bus.interface.ts","./libs/shared/abstractions/src/lib/project/project-initialization.service.ts","./libs/shared/abstractions/src/lib/notifications/notifications-service.interface.ts","./libs/shared/abstractions/src/lib/notifications/notifications-provider.interface.ts","./libs/shared/abstractions/src/lib/file-validation/file-validation-service.interface.ts","./libs/shared/abstractions/src/lib/configuration/configuration.module.ts","./libs/shared/abstractions/src/lib/configuration/models/environment-config.interface.ts","./libs/shared/abstractions/src/lib/configuration/services/domain-config.service.ts","./libs/shared/abstractions/src/lib/configuration/services/docs-config.service.ts","./libs/shared/abstractions/src/lib/configuration/services/isochrone-config.service.ts","./libs/shared/abstractions/src/lib/configuration/services/app-config.service.ts","./libs/shared/abstractions/src/lib/configuration/services/notifications-config.service.ts","./libs/shared/abstractions/src/lib/configuration/services/insights-config.service.ts","./libs/shared/abstractions/src/lib/configuration/services/project-config.service.ts","./libs/shared/auth/src/lib/abstractions/i-auth-service.interface.ts","./libs/shared/auth/src/lib/abstractions/auth-context.interface.ts","./libs/shared/auth/src/lib/guards/auth-guard.service.ts","./libs/shared/auth/src/lib/guards/tenant-guard.service.ts","./libs/shared/auth/src/lib/guards/redirect-guard.service.ts","./libs/shared/auth/src/lib/abstractions/user-profile.ts","./libs/shared/auth/src/lib/auth.module.ts","./libs/shared/data-preview/src/lib/abstractions/csv-parser-service.interface.ts","./libs/shared/data-preview/src/lib/abstractions/excel-parser-service.interface.ts","./libs/shared/data-preview/src/lib/abstractions/parsing-service.interface.ts","./libs/shared/data-preview/src/lib/utils/file-parsing.utils.ts","./libs/shared/feature-flags/src/lib/domain/feature-flags-facade-service.interface.ts","./libs/shared/logging/src/lib/abstractions/log-writer.ts","./libs/shared/logging/src/lib/configuration/configuration-context.ts","./libs/shared/logging/src/lib/configuration/configuration.service.ts","./libs/shared/logging/src/lib/enums/severity.enum.ts","./libs/shared/logging/src/lib/writers/console/console-writer.ts","./libs/shared/logging/src/lib/writers/app-insights/app-insights-writer.ts","./libs/shared/logging/src/lib/logging.module.ts","./libs/shared/logging/src/lib/services/log-entry.ts","./libs/shared/logging/src/lib/services/logging.service.ts","./libs/shared/logging/src/lib/utils/hash.utils.ts","./libs/shared/store/src/lib/+state/app/actions/config.actions.ts","./libs/shared/store/src/lib/+state/app/actions/export.actions.ts","./libs/shared/store/src/lib/+state/app/actions/reset-project.actions.ts","./libs/shared/store/src/lib/+state/app/reducers/config.reducers.ts","./libs/shared/store/src/lib/+state/app/effects/app.effects.ts","./libs/shared/store/src/lib/+state/root.selectors.ts","./libs/shared/store/src/lib/+state/app/selectors/app.selectors.ts","./libs/shared/store/src/lib/+state/router/reducers/custom-route-serializer.ts","./libs/shared/store/src/lib/+state/index.ts","./libs/shared/store/src/lib/models/configuration.types.ts","./libs/shared/store/src/lib/services/app-init.service.ts","./libs/shared/store/src/lib/services/theme-config.service.ts","./libs/shared/store/src/lib/services/theme.service.ts","./libs/shared/store/src/lib/shared-store.module.ts","./libs/shared/translation/src/lib/services/translation-service.interface.ts","./libs/shared/translation/src/lib/services/translation-config.service.ts","./libs/shared/translation/src/lib/services/translation.service.ts","./libs/shared/translation/src/lib/translation.module.ts","./libs/shared/ui/src/lib/forms/checkbox/checkbox.module.ts","./libs/shared/ui/src/lib/buttons/close-button/close-button.module.ts","./libs/shared/ui/src/lib/buttons/fab-button/fab-button.module.ts","./libs/shared/ui/src/lib/buttons/link-button/link-button.module.ts","./libs/shared/ui/src/lib/buttons/basic-button/basic-button.module.ts","./libs/shared/ui/src/lib/buttons/expand-button/expand-button.module.ts","./libs/shared/ui/src/lib/buttons/option-button/option-button.module.ts","./libs/shared/ui/src/lib/buttons/dropdown-button/dropdown-button.module.ts","./libs/shared/ui/src/lib/buttons/dropdown-button/dropdown-button-options.enum.ts","./libs/shared/ui/src/lib/forms/radio-icon-button/radio-icon-button.module.ts","./libs/shared/ui/src/lib/forms/slide-toggle/slide-toggle.module.ts","./libs/shared/ui/src/lib/forms/paginator/paginator.module.ts","./libs/shared/ui/src/lib/forms/status-message/status-message.module.ts","./libs/shared/ui/src/lib/chips/chips.module.ts","./libs/shared/ui/src/lib/buttons/action-bar-button/action-bar-button.module.ts","./libs/shared/ui/src/lib/action-footer/action-bar.module.ts","./libs/shared/ui/src/lib/buttons/mini-fab-button/mini-fab-button.module.ts","./libs/shared/ui/src/lib/buttons/removable-button/removable-button.module.ts","./libs/shared/ui/src/lib/cards/campaign-card/campaign-card.module.ts","./libs/shared/ui/src/lib/dropdown/dropdown.module.ts","./libs/shared/ui/src/lib/cards/card/card.component.html","./libs/shared/ui/src/lib/cards/card/card.component.ts","./libs/shared/ui/src/lib/color-picker/color-picker.module.ts","./libs/shared/ui/src/lib/facet-header/facet-header.module.ts","./libs/shared/ui/src/lib/forms/datepicker/datepicker.module.ts","./libs/shared/ui/src/lib/forms/checkbox-list/checkbox-list.module.ts","./libs/shared/ui/src/lib/forms/input-component/input.module.ts","./libs/shared/ui/src/lib/internationalisation/internationalisation.module.ts","./libs/shared/ui/src/lib/layout/header-counter/header-counter.module.ts","./libs/shared/ui/src/lib/layout/list-view-item/list-view-item.module.ts","./libs/shared/ui/src/lib/loading-spinner/loading.service.ts","./libs/shared/ui/src/lib/loading-spinner/loading-spinner.module.ts","./libs/shared/ui/src/lib/modal/modal.service.ts","./libs/shared/ui/src/lib/modal/modal.module.ts","./libs/shared/ui/src/lib/modal-container/modal-container.module.ts","./libs/shared/ui/src/lib/pipes/date/date-transform.service.ts","./libs/shared/ui/src/lib/pipes/pipes.module.ts","./libs/shared/ui/src/lib/progress-bar/progress-bar.module.ts","./libs/shared/ui/src/lib/progress-spinner/progress-spinner.module.ts","./libs/shared/ui/src/lib/radio-selection/radio-selection.module.ts","./libs/shared/ui/src/lib/search-autocomplete/search-autocomplete.module.ts","./libs/shared/ui/src/lib/searchable-checkbox-list/searchable-checkbox-list.module.ts","./libs/shared/ui/src/lib/select-search/select-search.module.ts","./libs/shared/ui/src/lib/splittable-panel/splittable-panel.module.ts","./libs/shared/ui/src/lib/stepper/stepper.module.ts","./libs/shared/ui/src/lib/table/table.module.ts","./libs/shared/ui/src/lib/tabs/tabs.module.ts","./libs/shared/ui/src/lib/tags/tags.module.ts","./libs/shared/ui/src/lib/shared-ui.module.ts","./libs/shared/ui/src/lib/dialog/dialog.component.html","./libs/shared/ui/src/lib/dialog/dialog.component.ts","./libs/shared/ui/src/lib/dialog/dialog.service.ts","./libs/shared/ui/src/lib/dialog/dialog.module.ts","./libs/shared/ui/src/lib/badge/badge.component.html","./libs/shared/ui/src/lib/badge/badge.component.ts","./libs/shared/ui/src/lib/badge/badge.module.ts","./libs/shared/ui/src/lib/buttons/close-button/close-button.component.ts","./libs/shared/ui/src/lib/buttons/close-button/close-button.component.html","./libs/shared/ui/src/lib/buttons/icon-button/icon-button.component.ts","./libs/shared/ui/src/lib/buttons/icon-button/icon-button.component.html","./libs/shared/ui/src/lib/buttons/icon-button/icon-button.module.ts","./libs/shared/ui/src/lib/buttons/menu-button/menu-button.component.html","./libs/shared/ui/src/lib/buttons/menu-button/menu-button.component.ts","./libs/shared/ui/src/lib/buttons/menu-button/menu-position.config.ts","./libs/shared/ui/src/lib/buttons/text-button/text-button.component.html","./libs/shared/ui/src/lib/buttons/text-button/text-button.component.ts","./libs/shared/ui/src/lib/buttons/text-button/text-button.module.ts","./libs/shared/ui/src/lib/cards/toggle-card/toggle-card.component.html","./libs/shared/ui/src/lib/cards/toggle-card/toggle-card.component.ts","./libs/shared/ui/src/lib/chips/chips.component.html","./libs/shared/ui/src/lib/chips/chips.component.ts","./libs/shared/ui/src/lib/collapsible-panel/collapsible-panel.component.ts","./libs/shared/ui/src/lib/collapsible-panel/collapsible-panel.component.html","./libs/shared/ui/src/lib/collapsible-panel/collapsible-panel.interface.ts","./libs/shared/ui/src/lib/directives/throttle-click/throttle-click.module.ts","./libs/shared/ui/src/lib/directives/directives.module.ts","./libs/shared/ui/src/lib/directives/ecos-ui-dropdown/ecos-ui-drop-down.directive.ts","./libs/shared/ui/src/lib/directives/feature-not-supported/feature-not-supported.module.ts","./libs/shared/ui/src/lib/directives/outside-click/outside-click.module.ts","./libs/shared/ui/src/lib/directives/tooltip/tooltip.module.ts","./libs/shared/ui/src/lib/forms/checkbox/checkbox.component.ts","./libs/shared/ui/src/lib/forms/checkbox/checkbox.component.html","./libs/shared/ui/src/lib/forms/checked-label/checked-label.component.html","./libs/shared/ui/src/lib/forms/checked-label/checked-label.component.ts","./libs/shared/ui/src/lib/forms/datepicker/datepicker.component.html","./libs/shared/ui/src/lib/forms/datepicker/datepicker.component.ts","./libs/shared/ui/src/lib/forms/datepicker/datepicker.formats.ts","./libs/shared/ui/src/lib/forms/paginator/paginator.component.html","./libs/shared/ui/src/lib/forms/paginator/paginator.component.ts","./libs/shared/ui/src/lib/forms/slider/slider.component.ts","./libs/shared/ui/src/lib/forms/slider/slider.component.html","./libs/shared/ui/src/lib/directives/tooltip/tooltip.directive.ts","./libs/shared/ui/src/lib/forms/status-message/status-message.component.html","./libs/shared/ui/src/lib/forms/status-message/status-message.component.ts","./libs/shared/ui/src/lib/icons/icon-list.ts","./libs/shared/ui/src/lib/icons/icons.module.ts","./libs/shared/ui/src/lib/loading-spinner/loading-service.interface.ts","./libs/shared/ui/src/lib/loading-spinner/loading-spinner.component.ts","./libs/shared/ui/src/lib/loading-spinner/loading-spinner.component.html","./libs/shared/ui/src/lib/material/shared-material.module.ts","./libs/shared/ui/src/lib/modal-container/modal-container.component.html","./libs/shared/ui/src/lib/modal-container/modal-container.component.ts","./libs/shared/ui/src/lib/modal/modal.component.ts","./libs/shared/ui/src/lib/modal/modal.component.html","./libs/shared/ui/src/lib/models/date-transform-service.interface.ts","./libs/shared/ui/src/lib/models/status-message-type.enum.ts","./libs/shared/ui/src/lib/overlays/snackbar/snackbar-data.interface.ts","./libs/shared/ui/src/lib/overlays/snackbar/snackbar.component.html","./libs/shared/ui/src/lib/overlays/snackbar/snackbar.component.ts","./libs/shared/ui/src/lib/overlays/snackbar/snackbar.module.ts","./libs/shared/ui/src/lib/overlays/snackbar/snackbar.service.ts","./libs/shared/ui/src/lib/pipes/date/time-ago.pipe.ts","./libs/shared/ui/src/lib/pipes/file/file-size.pipe.ts","./libs/shared/ui/src/lib/search/search.module.ts","./libs/shared/ui/src/lib/search/search.component.html","./libs/shared/ui/src/lib/search/search.component.ts","./libs/shared/ui/src/lib/searchable-checkbox-list/searchable-checkbox-list.service.ts","./libs/shared/ui/src/lib/forms/checkbox-list/checkbox-list.component.html","./libs/shared/ui/src/lib/forms/checkbox-list/checkbox-list.component.ts","./libs/shared/ui/src/lib/searchable-checkbox-list/searchable-checkbox-list.component.html","./libs/shared/ui/src/lib/searchable-checkbox-list/searchable-checkbox-list.component.ts","./libs/shared/ui/src/lib/searchable-checkbox-list/searchable-checkbox-list.config.ts","./libs/shared/ui/src/lib/table/table.component.html","./libs/shared/ui/src/lib/table/table.component.ts","./libs/shared/ui/src/lib/tags/components/tags-insert/tags-insert.component.html","./libs/shared/ui/src/lib/tags/components/tags-insert/tags-insert.component.ts","./libs/shared/ui/src/lib/tags/components/removable-tags-list/removable-tags-list.component.ts","./libs/shared/ui/src/lib/tags/components/removable-tags-list/removable-tags-list.component.html","./libs/shared/ui/src/lib/tags/components/tags-list-editor/tags-list-editor.component.html","./libs/shared/ui/src/lib/tags/components/tags-list-editor/tags-list-editor.component.ts","./libs/shared/ui/src/lib/tags/components/tags/tags.component.ts","./libs/shared/ui/src/lib/tags/components/tags/tags.component.html","./libs/shared/ui/src/lib/version/version.component.ts","./libs/shared/ui/src/lib/version/version.component.html","./libs/shared/user-profile/src/lib/domain/abstractions/user-profile-facade.interface.ts","./libs/shared/user-profile/src/lib/domain/models/user-role.model.ts","./libs/shared/user-profile/src/lib/state/actions/profile.actions.ts","./libs/shared/user-profile/src/lib/state/reducers/profile.reducer.ts","./libs/shared/user-profile/src/lib/state/reducers/index.ts","./libs/shared/user-profile/src/lib/state/selectors/profile.selectors.ts","./libs/shared/user-profile/src/lib/state/facades/profile.facade.ts","./libs/shared/user-profile/src/lib/state/effects/profile.effects.ts","./libs/shared/user-profile/src/lib/state/user-profile-state.module.ts","./libs/shared/user-profile/src/lib/user-profile.module.ts","./libs/shared/utils/src/lib/color/color.utils.ts","./libs/shared/utils/src/lib/string/string.utils.ts","./libs/shared/utils/src/lib/validators/dataset-name-uniqueness-validation-service.interface.ts","./libs/shared/utils/src/lib/validators/dataset-name-uniqueness.validator.ts","./libs/shared/utils/src/lib/validators/uniqueness-validation-service.interface.ts","./libs/shared/utils/src/lib/validators/uniqueness.validator.ts","./libs/shared/utils/src/lib/array/array.utils.ts","./libs/shared/utils/src/lib/coordinates/coordinates.utils.ts","./libs/shared/utils/src/lib/enum/enum.utils.ts","./libs/shared/utils/src/lib/number/number.utils.ts","./libs/shared/utils/src/lib/object/object.utils.ts","./libs/shared/utils/src/lib/operators/rxjs-operators.utils.ts","./libs/shared/utils/src/lib/parsing/file-parsing.utils.ts","./libs/shared/utils/src/lib/time/time.utils.ts","./node_modules/moment/locale/ sync ^\\.\\/.*$"],"sourcesContent":["import { AUTH_SERVICE, AUTH_CONTEXT, IAuthContext, IAuthService } from '@ecos/auth';\nimport { Component, Inject, OnInit, inject } from '@angular/core';\nimport { ThemeService } from '@ecos/store';\nimport { TranslationService } from '@ecos/translation';\nimport { ProfileOption } from '@ecos/user-profile';\nimport {\n\tINotificationService,\n\tNOTIFICATIONS_CONFIG,\n\tNOTIFICATIONS_SERVICE,\n\tNotificationsConfigService,\n} from '@ecos/abstractions';\nimport { Idle, DEFAULT_INTERRUPTSOURCES } from '@ng-idle/core';\nimport { DialogService } from '@ecos/ui';\nimport { take } from 'rxjs';\n\n@Component({\n\tselector: 'ecos-root',\n\ttemplateUrl: './app.component.html',\n\tstyleUrls: ['./app.component.scss'],\n})\nexport class AppComponent implements OnInit {\n\tprivate idle = inject(Idle);\n\tprivate dialogService = inject(DialogService);\n\n\tisLoggedIn = false;\n\tidleStateMessage = '';\n\n\ttitle = 'Geo';\n\theaderOptions: ProfileOption[] = [];\n\n\tconstructor(\n\t\t@Inject(AUTH_SERVICE)\n\t\tprivate authService: IAuthService,\n\t\t@Inject(AUTH_CONTEXT)\n\t\tprivate authContext: IAuthContext,\n\t\tprivate themeService: ThemeService,\n\t\tprivate translate: TranslationService,\n\t\t@Inject(NOTIFICATIONS_SERVICE)\n\t\tprivate readonly notificationService: INotificationService,\n\t\t@Inject(NOTIFICATIONS_CONFIG)\n\t\tprivate notificationsConfig: NotificationsConfigService,\n\t) {\n\t\tthis.authContext.loginStatusChange$.subscribe((loggedIn) => this.afterLogin(loggedIn));\n\t\tthis.authContext.userRegisteredInMarket$.subscribe((registered) => this.afterProfileLoaded(registered));\n\t}\n\n\tngOnInit() {\n\t\tthis.themeService.init();\n\n\t\tvoid this.authService.init();\n\t\tthis.getHeaderOptions();\n\t\tthis.initIdleConfiguration();\n\t}\n\n\tgetHeaderOptions(): void {\n\t\tconst loginButtonConfig = {\n\t\t\ticon: 'log-in',\n\t\t\tlabel: 'HOME.HEADER.LOGIN',\n\t\t\tindex: 1,\n\t\t\taction: () => this.authService.login(),\n\t\t};\n\t\tthis.headerOptions = this.isLoggedIn ? [] : [loginButtonConfig];\n\t}\n\n\tget fullName() {\n\t\treturn this.authContext.userProfile.fullName;\n\t}\n\n\tlogin() {\n\t\tthis.authService.login();\n\t}\n\n\tprivate afterLogin(loggedIn: boolean) {\n\t\tthis.isLoggedIn = loggedIn;\n\t\t// this.getHeaderOptions();\n\t\tif (loggedIn) {\n\t\t\tthis.idle.watch();\n\t\t} else {\n\t\t\tthis.idle.stop();\n\t\t}\n\t}\n\n\tprivate afterProfileLoaded(registered: boolean) {\n\t\tif (registered) {\n\t\t\tthis.notificationService.init();\n\t\t}\n\t}\n\n\tprivate initIdleConfiguration(): void {\n\t\tconst userIdleWarningAfterSeconds = this.notificationsConfig.getConfig('userIdleWarningAfterSeconds') || 30 * 60;\n\t\tconst userLogoutAfterWarningInSeconds = this.notificationsConfig.getConfig('userLogoutAfterWarningInSeconds') || 30;\n\t\tthis.idle.setIdle(Number(userIdleWarningAfterSeconds));\n\t\tthis.idle.setTimeout(Number(userLogoutAfterWarningInSeconds));\n\t\tthis.idle.setInterrupts(DEFAULT_INTERRUPTSOURCES);\n\n\t\tthis.idle.onIdleEnd.subscribe(() => {\n\t\t\tthis.resetIdle();\n\t\t});\n\n\t\tthis.idle.onTimeout.subscribe(() => {\n\t\t\tthis.dialogService.close();\n\t\t\tvoid this.authService.logout();\n\t\t});\n\n\t\tthis.idle.onIdleStart.subscribe(() => {\n\t\t\tthis.dialogService.open(\n\t\t\t\t'GENERAL.INFO_MESSAGES.IDLE_HEADER',\n\t\t\t\t'GENERAL.INFO_MESSAGES.IDLE_MESSAGE',\n\t\t\t\t{ value: 'Logout', label: 'GENERAL.BUTTONS.LOGOUT' },\n\t\t\t\t{ value: 'Stay', label: 'GENERAL.BUTTONS.STAY' },\n\t\t\t\t'warning-sign',\n\t\t\t\t'warn',\n\t\t\t\tfalse,\n\t\t\t\ttrue,\n\t\t\t);\n\n\t\t\tthis.dialogService.dialogRef\n\t\t\t\t.afterClosed()\n\t\t\t\t.pipe(take(1))\n\t\t\t\t.subscribe((data) => {\n\t\t\t\t\tif (data === 'Stay') {\n\t\t\t\t\t\tthis.resetIdle();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (data === 'Logout') {\n\t\t\t\t\t\tvoid this.authService.logout();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t});\n\n\t\tthis.idle.onTimeoutWarning.subscribe((countdown) => {\n\t\t\tthis.idleStateMessage = `You will time out in ${countdown} seconds!`;\n\t\t\tconsole.log(this.idleStateMessage);\n\t\t});\n\n\t\tthis.resetIdle();\n\t}\n\n\tprivate resetIdle(): void {\n\t\tthis.idle.watch();\n\t}\n}\n","
\n\t
\n\n\t
\n\t\t\n\t\t
\n\t\t\t\n\t\t
\n\t
\n\t
\n
\n","import { InjectionToken } from '@angular/core';\nimport { SideNavOption } from './sidenav-option.interface';\n\nexport interface SideNavOptionsConfig {\n\titems: SideNavOption[];\n\tisExpanded: boolean;\n}\n\nexport const SIDENAV_OPTIONS_CONFIG = new InjectionToken('app-shell.sidenav-options-config');\n","export enum MenuItemType {\n\tMap = 'Map',\n\tCatalogue = 'Catalogue',\n\tImport = 'Import',\n\tUploads = 'Uploads',\n\tProjects = 'Projects',\n\tDashboard = 'Dashboard',\n\tSidenav = 'Sidenav'\n}\n","import { SideNavOptionsConfig } from '../models';\nimport { MenuItemType } from './menu-item-type.enum';\n\nexport const sideNavOptionsConfigFactory = (): SideNavOptionsConfig => ({\n\titems: [\n\t\t{\n\t\t\ticon: 'globe',\n\t\t\tname: 'HOME.SIDE-NAV.MAP',\n\t\t\ttype: MenuItemType.Map,\n\t\t\tindex: 1,\n\t\t\tlink: '/maps',\n\t\t\tselected: true,\n\t\t\thasRecentActivity: false,\n\t\t},\n\t\t{\n\t\t\ticon: 'catalogue',\n\t\t\tname: 'HOME.SIDE-NAV.DATA-CATALOGUE',\n\t\t\ttype: MenuItemType.Catalogue,\n\t\t\tindex: 2,\n\t\t\tlink: '/catalog',\n\t\t\tselected: false,\n\t\t\thasRecentActivity: false,\n\t\t},\n\t\t{\n\t\t\ticon: 'import',\n\t\t\tname: 'HOME.SIDE-NAV.INGESTION-WIZARD',\n\t\t\ttype: MenuItemType.Import,\n\t\t\tindex: 3,\n\t\t\tlink: '/catalog-manager/import',\n\t\t\tselected: false,\n\t\t\thasRecentActivity: false,\n\t\t},\n\t\t{\n\t\t\ticon: 'uploads',\n\t\t\tname: 'HOME.SIDE-NAV.INGESTION-DATASETS',\n\t\t\ttype: MenuItemType.Uploads,\n\t\t\tindex: 4,\n\t\t\tlink: '/catalog-manager/uploads',\n\t\t\tselected: false,\n\t\t\thasRecentActivity: false,\n\t\t},\n\t\t{\n\t\t\ticon: 'projects',\n\t\t\tname: 'HOME.SIDE-NAV.PROJECTS',\n\t\t\ttype: MenuItemType.Projects,\n\t\t\tindex: 5,\n\t\t\tlink: '/catalog-manager/projects',\n\t\t\tselected: false,\n\t\t\thasRecentActivity: false,\n\t\t},\n\t\t{\n\t\t\ticon: 'page-layout',\n\t\t\tname: 'HOME.SIDE-NAV.DASHBOARD',\n\t\t\ttype: MenuItemType.Dashboard,\n\t\t\tindex: 6,\n\t\t\tlink: '/catalog-manager/dashboard',\n\t\t\tselected: false,\n\t\t\thasRecentActivity: false,\n\t\t},\n\t],\n\tisExpanded: false,\n});\n","import { NgModule } from '@angular/core';\nimport { SideNavigationComponent } from './sidenav.component';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule } from '@angular/router';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { LetDirective } from '@ngrx/component';\nimport { FeatureFlagDirective } from '@ecos/feature-flags';\nimport {\n\tEcosBadgeModule,\n\tEcosIconButtonModule,\n\tEcosTextButtonModule,\n\tSharedMaterialModule,\n\tEcosVersionComponent, OutsideClickModule\n} from '@ecos/ui';\nimport { SIDENAV_OPTIONS_CONFIG } from './models';\nimport { sideNavOptionsConfigFactory } from './configs';\n\n@NgModule({\n\tdeclarations: [SideNavigationComponent],\n\timports: [\n\t\tSharedMaterialModule,\n\t\tCommonModule,\n\t\tRouterModule,\n\t\tTranslateModule,\n\t\tEcosTextButtonModule,\n\t\tEcosIconButtonModule,\n\t\tEcosBadgeModule,\n\t\tLetDirective,\n\t\tFeatureFlagDirective,\n\t\tEcosVersionComponent,\n\t\tOutsideClickModule,\n\t],\n\texports: [SideNavigationComponent],\n\tproviders: [\n\t\t{\n\t\t\tprovide: SIDENAV_OPTIONS_CONFIG,\n\t\t\tuseFactory: sideNavOptionsConfigFactory,\n\t\t},\n\t],\n})\nexport class SideNavigationModule {}\n","import { CommonModule } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SharedMaterialModule } from '@ecos/ui';\nimport { MatTooltipDefaultOptions, MAT_TOOLTIP_DEFAULT_OPTIONS } from '@angular/material/tooltip';\nimport { SideNavigationModule } from './sidenav';\n\nconst componentModules = [SideNavigationModule];\n\nexport const tooltipOptions: MatTooltipDefaultOptions = {\n\tshowDelay: 0,\n\thideDelay: 0,\n\ttouchendHideDelay: 1500,\n\tdisableTooltipInteractivity: true,\n};\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tReactiveFormsModule.withConfig({ warnOnNgModelWithFormControl: 'always' }),\n\t\tRouterModule,\n\t\tSharedMaterialModule,\n\t\t...componentModules,\n\t],\n\texports: [SharedMaterialModule, ...componentModules],\n\tproviders: [{ provide: MAT_TOOLTIP_DEFAULT_OPTIONS, useValue: tooltipOptions }],\n})\nexport class AppComponentsModule {}\n","import { Directive, Input, OnDestroy, OnInit, TemplateRef, ViewContainerRef, inject } from '@angular/core';\nimport { FEATURE_FLAGS_FACADE } from '../domain';\nimport { FeatureFlag } from '../types';\nimport { Subject, takeUntil } from 'rxjs';\n\n@Directive({\n\tselector: '[ecosFeatureFlag]',\n\tstandalone: true,\n})\nexport class FeatureFlagDirective implements OnInit, OnDestroy {\n\tprivate readonly templateRef = inject(TemplateRef);\n\tprivate readonly viewContainerRef = inject(ViewContainerRef);\n\tprivate readonly featureFlagsFacade = inject(FEATURE_FLAGS_FACADE);\n\tprivate readonly onDestroy$ = new Subject();\n\n\t@Input({ required: true, alias: 'ecosFeatureFlag' })\n\tfeatureFlag!: FeatureFlag | undefined;\n\n\t@Input() ecosFeatureFlagElse: TemplateRef | null = null;\n\n\tngOnInit(): void {\n\t\tif (this.featureFlag) {\n\t\t\tthis.featureFlagsFacade\n\t\t\t\t.featureFlagEnabled(this.featureFlag)\n\t\t\t\t.pipe(takeUntil(this.onDestroy$))\n\t\t\t\t.subscribe((featureFlagEnabled) => {\n\t\t\t\t\tthis.viewContainerRef.clear();\n\t\t\t\t\tif (featureFlagEnabled) {\n\t\t\t\t\t\tthis.viewContainerRef.createEmbeddedView(this.templateRef);\n\t\t\t\t\t} else if (this.ecosFeatureFlagElse) {\n\t\t\t\t\t\tthis.viewContainerRef.createEmbeddedView(this.ecosFeatureFlagElse);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\tthis.viewContainerRef.clear();\n\t\t\tthis.viewContainerRef.createEmbeddedView(this.templateRef);\n\t\t}\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.onDestroy$.next();\n\t\tthis.onDestroy$.unsubscribe();\n\t}\n}\n","\n\t\n\t\t
\n\n\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{{ this.option.name | translate }}\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\tUser Profile\n\t\t\t\t\t\t\n\n\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t\n\n\t
\n\t\t\n\t
\n
\n","import { Component, EventEmitter, Inject, Input, OnDestroy, OnInit, Output } from '@angular/core';\nimport { Event, NavigationEnd, Router } from '@angular/router';\nimport { BehaviorSubject, Subject } from 'rxjs';\nimport { distinctUntilChanged, filter, map, takeUntil, withLatestFrom } from 'rxjs/operators';\nimport { SIDENAV_OPTIONS_CONFIG, SideNavOption, SideNavOptionsConfig } from './models';\nimport { INotificationService, NOTIFICATIONS_SERVICE } from '@ecos/abstractions';\nimport { MenuItemType } from './configs';\nimport { FEATURE_FLAGS_FACADE, FeatureFlag, IFeatureFlagsFacadeService } from '@ecos/feature-flags';\n\ntype PartialMenuTypeToFlags = { [K in MenuItemType]?: FeatureFlag };\nconst menuTypeToFeatureFlag: PartialMenuTypeToFlags = {\n\tDashboard: 'app.dashboard',\n\tImport: 'app.ingestion-wizard',\n\tProjects: 'app.projects',\n\tUploads: 'app.uploads',\n\tMap: 'app.maps',\n\tCatalogue: 'app.catalog',\n\tSidenav: 'app.sidenav'\n};\n\n@Component({\n\tselector: 'ecos-ui-sidenav',\n\ttemplateUrl: './sidenav.component.html',\n\tstyleUrls: ['./sidenav.component.scss'],\n})\nexport class SideNavigationComponent implements OnInit, OnDestroy {\n\tprotected menuOptions$ = new BehaviorSubject([]);\n\tprivate readonly onDestroy$: Subject = new Subject();\n\tprotected isSideNavOpened: boolean;\n\n\t@Input()\n\texpanded = false;\n\n\t@Input()\n\tisLoggedIn = false;\n\n\t@Output()\n\tselectedIcon: EventEmitter = new EventEmitter();\n\n\tconstructor(\n\t\t@Inject(SIDENAV_OPTIONS_CONFIG) private configOptions: SideNavOptionsConfig,\n\t\tprivate router: Router,\n\t\t@Inject(NOTIFICATIONS_SERVICE)\n\t\tprivate readonly notificationService: INotificationService,\n\t\t@Inject(FEATURE_FLAGS_FACADE)\n\t\tprivate featureFlagService: IFeatureFlagsFacadeService\n\t) {}\n\n\tngOnInit(): void {\n\t\tthis.setAvailableMenuOptions(this.configOptions.items);\n\t\tthis.checkForNotifications();\n\t\tthis.toggleSidenav(menuTypeToFeatureFlag.Sidenav);\n\n\t\tthis.router.events\n\t\t\t.pipe(\n\t\t\t\tdistinctUntilChanged(),\n\t\t\t\tfilter((event: Event): event is NavigationEnd => event instanceof NavigationEnd),\n\t\t\t\tmap((event) => event.urlAfterRedirects ?? event.url),\n\t\t\t\twithLatestFrom(this.menuOptions$),\n\t\t\t\ttakeUntil(this.onDestroy$)\n\t\t\t)\n\t\t\t.subscribe(([url, items]) => {\n\t\t\t\tthis.handleRouteChange(url.split('?')[0], items);\n\t\t\t});\n\t}\n\n\tprotected mapToFeatureFlag(menuType: MenuItemType): FeatureFlag | undefined {\n\t\treturn menuTypeToFeatureFlag[menuType];\n\t}\n\n\tprotected changeExpanded(): void {\n\t\tthis.expanded = !this.expanded;\n\t}\n\n\tprotected iconClicked(item: SideNavOption): void {\n\t\tthis.selectedIcon.emit(item);\n\t}\n\n\tprivate handleRouteChange(currentRoute: string, items: SideNavOption[]): void {\n\t\tconst routeSegments = currentRoute.split('/');\n\t\tconst updatedItems = items.map((item) => {\n\t\t\tconst linkSegments = item.link.split('/');\n\t\t\titem.selected = linkSegments.every((rs) => routeSegments.includes(rs));\n\t\t\treturn item;\n\t\t});\n\n\t\tthis.setAvailableMenuOptions(updatedItems);\n\t}\n\n\tprivate checkForNotifications(): void {\n\t\tthis.notificationService.pendingJobsNotificationsAvailable$\n\t\t\t.pipe(distinctUntilChanged(), takeUntil(this.onDestroy$))\n\t\t\t.subscribe((newJobsAvailable) => {\n\t\t\t\tthis.notifyMenuOption(MenuItemType.Uploads, newJobsAvailable);\n\t\t\t});\n\t\tthis.notificationService.sharedProjectsNotificationsAvailable$\n\t\t\t.pipe(distinctUntilChanged(), takeUntil(this.onDestroy$))\n\t\t\t.subscribe((newSharedProjectsAvailable) => {\n\t\t\t\tthis.notifyMenuOption(MenuItemType.Projects, newSharedProjectsAvailable);\n\t\t\t});\n\t}\n\n\tprivate notifyMenuOption(menuOptionToNotify: MenuItemType, notificationAvailable: boolean): void {\n\t\tconst updatedOptions = this.configOptions.items.map((item) => {\n\t\t\tif (item.type === menuOptionToNotify) {\n\t\t\t\treturn {\n\t\t\t\t\t...item,\n\t\t\t\t\thasRecentActivity: notificationAvailable,\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn item;\n\t\t});\n\t\tthis.setAvailableMenuOptions(updatedOptions);\n\t}\n\n\tprivate setAvailableMenuOptions(items: SideNavOption[]): void {\n\t\tthis.configOptions.items = items;\n\t\tthis.menuOptions$.next(items);\n\t}\n\n\tprivate toggleSidenav(sideNavFlag:FeatureFlag) {\n\t\tthis.featureFlagService.featureFlagEnabled(sideNavFlag)\n\t\t.pipe(distinctUntilChanged(), takeUntil(this.onDestroy$))\n\t\t.subscribe((isSideNavEnable: boolean) => {\n\t\t\tthis.isSideNavOpened = isSideNavEnable;\n\t\t});\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.onDestroy$.next();\n\t\tthis.onDestroy$.unsubscribe();\n\t}\n}\n","import { Component } from '@angular/core';\n// eslint-disable-next-line @nx/enforce-module-boundaries\n\n@Component({\n\tselector: '',\n\ttemplateUrl: './layout.component.html',\n\tstyleUrls: ['./layout.component.scss'],\n})\nexport class LayoutComponent {}\n","
\n\t\n\t\t
\n\t\t\t\n\t\t
\n\t
\n
\n","import { AUTH_CONTEXT, AUTH_SERVICE, IAuthContext, IAuthService } from '@ecos/auth';\nimport { Component, Inject } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { ProfileOption } from '@ecos/user-profile';\nimport { TranslationService } from '@ecos/translation';\n\n@Component({\n\tselector: 'ecos-welcome',\n\ttemplateUrl: './welcome.component.html',\n\tstyleUrls: ['./welcome.component.scss'],\n})\nexport class WelcomeComponent {\n\n\tprotected loginButtonConfig = {\n\t\ticon: 'log-in',\n\t\tlabel: 'HOME.HEADER.LOGIN',\n\t\tindex: 1,\n\t\taction: () => this.authService.login(),\n\t};\n\n\n\tconstructor(\n\t\t@Inject(AUTH_CONTEXT)\n\t\tprivate authContext: IAuthContext,\n\t\tprivate router: Router,\n\t\t@Inject(AUTH_SERVICE)\n\t\tprivate authService: IAuthService,\n\t\tprivate translate: TranslationService,\n\n\t) {\n\t\tthis.authContext.loginStatusChange$.subscribe((isLoggedIn) => {\n\t\t\tif (isLoggedIn) {\n\t\t\t\tvoid this.router.navigate(['/maps'], { replaceUrl: true });\n\t\t\t}\n\t\t});\n\t}\n\n\tclicked(item: ProfileOption): Promise | void {\n\t\tvoid item.action();\n\t}\n}\n","
\n\t
\n\t\t\"Geo-dentsu\"\n\n\t\t\n\t\t\n\t
\n
\n","import { AUTH_SERVICE, IAuthService } from '@ecos/auth';\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n\tselector: 'ecos-signin-callback',\n\ttemplate: `
`,\n})\nexport class SigninRedirectCallbackComponent implements OnInit {\n\tconstructor(@Inject(AUTH_SERVICE) private authService: IAuthService, private router: Router) {}\n\n\tngOnInit() {\n\t\tvoid this.authService.completeLogin().then((redirectUrl) => {\n\t\t\tif (redirectUrl) {\n\t\t\t\tvoid this.router.navigateByUrl(redirectUrl, { replaceUrl: true });\n\t\t\t} else {\n\t\t\t\tvoid this.router.navigate(['/'], { replaceUrl: true });\n\t\t\t}\n\t\t});\n\t}\n}\n","import { AUTH_SERVICE, IAuthService } from '@ecos/auth';\nimport { Component, Inject, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\n\n@Component({\n\tselector: 'ecos-sigout-callback',\n\ttemplate: `
`,\n})\nexport class SignoutRedirectCallbackComponent implements OnInit {\n\tconstructor(@Inject(AUTH_SERVICE) private authService: IAuthService, private router: Router) {}\n\n\tngOnInit() {\n\t\tvoid this.authService.completeLogout().then(() => {\n\t\t\tvoid this.router.navigate(['/'], { replaceUrl: true });\n\t\t});\n\t}\n}\n","import { AUTH_SERVICE, IAuthService } from '@ecos/auth';\nimport { Component, Inject } from '@angular/core';\n\n@Component({\n\tselector: 'ecos-silent-refresh-callback',\n\ttemplate: `
`,\n})\nexport class SilentRefreshCallbackComponent {\n\tconstructor(\n\t\t@Inject(AUTH_SERVICE)\n\t\tprivate authService: IAuthService\n\t) {\n\t\tvoid this.authService.signinSilentCallback();\n\t}\n}\n","import { Component, Inject } from '@angular/core';\nimport { DocsConfigService, DOCS_CONFIG } from '@ecos/abstractions';\n\n@Component({\n\tselector: 'ecos-forbidden',\n\ttemplateUrl: './forbidden.component.html',\n\tstyleUrls: ['./forbidden.component.scss'],\n})\nexport class ForbiddenComponent {\n\tconstructor(\n\t\t@Inject(DOCS_CONFIG)\n\t\tprivate configService: DocsConfigService\n\t) {}\n\n\tget email() {\n\t\tconst email = this.configService.getConfig('contact');\n\t\tconst subject = '[REQUEST] Geo-dentsu access';\n\n\t\treturn encodeURI(`mailto:${email}?subject=${subject}`);\n\t}\n}\n","
\n\t
\n\t\t\n\t\t
{{ 'HOME.HEADER.FORBIDDEN' | translate }}
\n\t\t{{ 'GENERAL.INFO_MESSAGES.FORBIDDEN_MESSAGE' | translate }} geo\n\t\t\t{{ 'GENERAL.INFO_MESSAGES.FORBIDDEN_MESSAGE_2' | translate }}\n\t\t\t{{ 'GENERAL.INFO_MESSAGES.FORBIDDEN_MESSAGE_3' | translate }}\n\t\t\t{{ 'GENERAL.INFO_MESSAGES.FORBIDDEN_MESSAGE_4' | translate }}\n\t
\n
\n","import { Component, Inject, OnInit } from '@angular/core';\nimport { RouteReuseStrategy, Router } from '@angular/router';\nimport { PROJECT_INITIALIZATION_TOKEN, ProjectInitialization } from '@ecos/abstractions';\nimport { CustomReuseStrategy } from '@ecos/routing-kernel';\n@Component({\n\ttemplate: `
`,\n})\nexport class RefreshComponent implements OnInit {\n\tconstructor(\n\t\tprivate readonly router: Router,\n\t\tprivate routeReuseStrategy: RouteReuseStrategy,\n\t\t@Inject(PROJECT_INITIALIZATION_TOKEN) private readonly projectInit: ProjectInitialization\n\t) {}\n\n\tngOnInit(): void {\n\t\t(this.routeReuseStrategy as CustomReuseStrategy).clearSavedHandle('//maps//');\n\t\tthis.projectInit.createNew();\n\t\tvoid this.router.navigate(['/maps']);\n\t}\n}\n","import * as fromTranslation from '@ecos/translation';\nimport { AuthGuard, RedirectGuard, TenantGuard } from '@ecos/auth';\nimport { LayoutComponent } from '../pages/layout';\nimport { NgModule } from '@angular/core';\nimport { PreloadAllModules, RouterModule, Routes } from '@angular/router';\nimport { WelcomeComponent } from '../pages/welcome';\nimport {\n\tSigninRedirectCallbackComponent,\n\tSignoutRedirectCallbackComponent,\n\tSilentRefreshCallbackComponent\n} from '../pages/auth';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { HttpClient } from '@angular/common/http';\nimport { ForbiddenComponent } from '../pages/forbidden';\nimport { RefreshComponent } from '../refresh';\n\nconst getTranslationLoaderFactory = (http: HttpClient) =>\n\tfromTranslation.httpLoaderFactory(http, { languagePath: './assets/i18n/' });\n\nconst routes: Routes = [\n\t{\n\t\tpath: '',\n\t\tpathMatch: 'full',\n\t\tredirectTo: 'welcome',\n\t},\n\t{\n\t\tpath: '',\n\t\tcomponent: LayoutComponent,\n\t\tcanActivate: [AuthGuard, TenantGuard],\n\t\tchildren: [\n\t\t\t{\n\t\t\t\tpath: 'maps',\n\t\t\t\ttitle: 'APP.PAGES.MAPS',\n\t\t\t\tcanActivate: [AuthGuard, TenantGuard],\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: '',\n\t\t\t\t\t\tloadChildren: () => import('@ecos/maps-shell').then((m) => m.MapsShellModule),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: 'catalog',\n\t\t\t\ttitle: 'APP.PAGES.CATALOGUE',\n\t\t\t\tcanActivate: [AuthGuard, TenantGuard],\n\t\t\t\tloadChildren: () => import('@ecos/dataset-catalog-shell').then((m) => m.DatasetCatalogShellModule),\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: 'catalog-manager',\n\t\t\t\tcanActivate: [AuthGuard, TenantGuard],\n\t\t\t\tchildren: [\n\t\t\t\t\t{\n\t\t\t\t\t\tpath: '',\n\t\t\t\t\t\tloadChildren: () => import('@ecos/data-manager-shell').then((m) => m.DataManagerShellModule),\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tpath: 'integrations',\n\t\t\t\tcanActivate:[AuthGuard, TenantGuard],\n\t\t\t\tloadChildren: () => import('@ecos/integrations-shell').then((m) => m.IntegrationsShellModule)\n\t\t\t},\n\t\t],\n\t},\n\t{\n\t\tpath: 'signin-callback',\n\t\tcomponent: SigninRedirectCallbackComponent,\n\t},\n\t{\n\t\tpath: 'signout-callback',\n\t\tcomponent: SignoutRedirectCallbackComponent,\n\t},\n\t{\n\t\tpath: 'refresh-callback',\n\t\tcomponent: SilentRefreshCallbackComponent,\n\t},\n\t{\n\t\tpath: 'welcome',\n\t\ttitle: 'APP.PAGES.WELCOME',\n\t\tcanActivate: [RedirectGuard],\n\t\tcomponent: WelcomeComponent,\n\t},\n\t{\n\t\tpath: 'forbidden',\n\t\tcanActivate: [AuthGuard],\n\t\tcomponent: ForbiddenComponent,\n\t},\n\t{\n\t\tpath: 'new-project',\n\t\tcomponent: RefreshComponent,\n\t},\n\t{\n\t\tpath: 'switch-market',\n\t\tcomponent: RefreshComponent,\n\t},\n\t{\n\t\tpath: '**',\n\t\tredirectTo: '/welcome',\n\t},\n];\n\n@NgModule({\n\timports: [\n\t\tRouterModule.forRoot(routes, {\n\t\t\tpreloadingStrategy: PreloadAllModules,\n\t\t\tbindToComponentInputs: true,\n\t\t\tonSameUrlNavigation: 'reload',\n\t\t}),\n\t\tReactiveFormsModule,\n\t\tTranslateModule.forChild({\n\t\t\tloader: {\n\t\t\t\tprovide: TranslateLoader,\n\t\t\t\tuseFactory: getTranslationLoaderFactory,\n\t\t\t\tdeps: [HttpClient],\n\t\t\t},\n\t\t\tisolate: true,\n\t\t\tdefaultLanguage: 'en-GB',\n\t\t}),\n\t],\n\texports: [RouterModule, ReactiveFormsModule, TranslateModule],\n})\nexport class AppRoutingModule {}\n","export const getEmailAction = (email: string, loggerId: string) => {\n\tconst subject = '[REQUEST] Geo-dentsu support';\n\tconst body = `Timestamp: ${new Date().getTime()}. Log Id: ${loggerId}`;\n\treturn encodeURI(`mailto:${email}?subject=${subject}&body=${body}`);\n};\n","import { DocsConfigService, DOCS_CONFIG, IS_PUBLIC_API } from '@ecos/abstractions';\nimport { from, Observable } from 'rxjs';\nimport { Guid } from 'guid-typescript';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { SnackBarService } from '@ecos/ui';\nimport { StatusCodes } from 'http-status-codes';\nimport { tap } from 'rxjs/operators';\nimport { HttpErrorResponse, HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { AUTH_CONTEXT, IAuthContext } from '@ecos/auth';\nimport { LoggingService } from '@ecos/logging';\nimport { getEmailAction } from '../utils';\n@Injectable()\nexport class AuthInterceptor implements HttpInterceptor {\n\tconstructor(\n\t\t@Inject(AUTH_CONTEXT)\n\t\tprivate readonly authContext: IAuthContext,\n\t\tprivate snackBarService: SnackBarService,\n\t\t@Inject(DOCS_CONFIG)\n\t\tprivate configService: DocsConfigService,\n\t\t@Optional() private loggingService: LoggingService,\n\t) {}\n\n\tintercept(req: HttpRequest, next: HttpHandler): Observable> {\n\t\tconst isNonAuthUrl = [\n\t\t\t'https://devlocatedscsa.blob.core.windows.net',\n\t\t\t'https://intlocatedscsa.blob.core.windows.net',\n\t\t\t'https://stglocatedscsa.blob.core.windows.net',\n\t\t\t'https://prdlocatedscsa.blob.core.windows.net',\n\t\t\t'assets/icons/',\n\t\t\t'assets/configs/',\n\t\t\t'assets/i18n/',\n\t\t\t'assets/images/',\n\t\t\t'https://eu0az0dc0intsa0locdscsa.blob.core.windows.net'\n\t\t].some((x) => req.url.includes(x));\n\n\t\tconst authReq =\n\t\t\t!req.context.get(IS_PUBLIC_API) && !isNonAuthUrl\n\t\t\t\t? req.clone({\n\t\t\t\t\t\tsetHeaders: {\n\t\t\t\t\t\t\tAuthorization: `Bearer ${this.authContext.accessToken}`,\n\t\t\t\t\t\t\t'X-Correlation-ID': Guid.create().toString(),\n\t\t\t\t\t\t},\n\t\t\t\t\t})\n\t\t\t\t: req;\n\n\t\treturn from(\n\t\t\tnext.handle(authReq).pipe(\n\t\t\t\ttap({\n\t\t\t\t\terror: (error) => {\n\t\t\t\t\t\tconst responseError = error as HttpErrorResponse;\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tresponseError &&\n\t\t\t\t\t\t\t(responseError.status === StatusCodes.UNAUTHORIZED || responseError.status === StatusCodes.FORBIDDEN)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tconst snackBarData = {\n\t\t\t\t\t\t\t\ttitle: 'GENERAL.TITLES.ERROR',\n\t\t\t\t\t\t\t\tmessage: 'GENERAL.ERROR_MESSAGES.UNAUTHORIZED_RESOURCE',\n\t\t\t\t\t\t\t\ttranslationParams: {\n\t\t\t\t\t\t\t\t\tmessageParams: { email: this.email },\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tisTranslatable: true,\n\t\t\t\t\t\t\t\taction: () => window.open(getEmailAction(this.email, this.loggingService?.id?.toString())),\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\tthis.snackBarService.showWarning(snackBarData);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}),\n\t\t\t),\n\t\t);\n\t}\n\n\tget email(): string {\n\t\treturn this.configService.getConfig('contact');\n\t}\n}\n","export const environment = {\n\tproduction: true,\n\tissuer: '#{OKTA_LOCATE_ISSUER}#',\n\tclientId: '#{OKTA_LOCATE_CLIENT_ID}#',\n\tscopes: '#{OKTA_LOCATE_SCOPES}#',\n\thttpsEnabled: true,\n\tappConfig: {\n\t\tapplicationName: 'Geo-dentsu',\n\t\tversion: '1.40.1+1',\n\t\tloggingConfig: {\n\t\t\tapplicationName: 'Geo-dentsu',\n\t\t\tversion: '1.40.1+1',\n\t\t\tisProduction: true,\n\t\t},\n\t\tappInsightsConfig: {\n\t\t\tenableAppInsights: true,\n\t\t\tconnectionString: '#{GEO_CONNECTION_STRING}#',\n\t\t\tinstrumentationKey: '#{LOCATE_APP_INSIGHTS_KEY}#',\n\t\t\tautoTrackPageVisitTime: true,\n\t\t\t/* The enableAutoRouteTracking should be set to false to avoid duplicate data\n\t\t\t\tbecause the angular plugin for app insights already send the routes information */\n\t\t\tenableAutoRouteTracking: false,\n\t\t\tenableCorsCorrelation: true,\n\t\t\tcorrelationHeaderExcludedDomains: ['maps.googleapis.com', 'atlas.microsoft.com', '*.core.windows.net'],\n\t\t},\n\t},\n\tdocsConfig: {\n\t\tcontact: '#{LOCATE_CONTACT_EMAIL}#',\n\t\tcookiePolicy: '#{LOCATE_POLICY_URL}#',\n\t\ttermsAndConditions: '#{LOCATE_TERMS_URL}#',\n\t\tdisclosure: '#{LOCATE_DISCLOSURE_URL}#',\n\t},\n\tdomainConfig: {\n\t\tsearch: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/catalog-indexed-data-records',\n\t\t},\n\t\tdatasetCatalogItems: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/catalog-items',\n\t\t},\n\t\tjobs: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/jobs',\n\t\t},\n\t\tapprovalJobs: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/approval-jobs',\n\t\t},\n\t\trequests: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/requests',\n\t\t},\n\t\tmasterData: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1',\n\t\t},\n\t\tonboardingJobSpecs: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/onboarding-job-specs',\n\t\t},\n\t\tcatalogItemReferences: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/catalog-item-references',\n\t\t},\n\t\tmapProjects: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/map-projects',\n\t\t},\n\t\tuserDownloads: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/user-downloads',\n\t\t},\n\t\tp2pCrossLayerAnalysis: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/p2p-cross-layer-analysis',\n\t\t},\n\t\tp2sCrossLayerAnalysis: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/p2s-cross-layer-analysis',\n\t\t},\n\t\ts2sCrossLayerAnalysis: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/s2s-cross-layer-analysis',\n\t\t},\n\t\tcrossLayerAnalysis: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/cross-layer-analysis',\n\t\t},\n\t\tcrossLayerAnalysisGeodata: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/cross-layer-analysis-geodata',\n\t\t},\n\t\tuserProfile: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/user',\n\t\t},\n\t\tgeocoding: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/geo-services/geocoded-locations',\n\t\t},\n\t\tisochrone: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/geo-services/isochrones',\n\t\t},\n\t\tstaticMap: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/geo-services/static-map',\n\t\t},\n\t\taudienceBuilderIntegrations: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/external-data',\n\t\t},\n\n\t\taudienceBuilderRedirectUrl: {\n\t\t\tbaseUrl: '#{LOCATE-AUDIENCE-BUILDER-REDIRECTION-URL}#',\n\t\t\tendpoint: '/audience-builder',\n\t\t},\n\t\tcustomIcons: {\n\t\t\tbaseUrl: '#{LOCATE_DATASET_CATALOG_BASE_URL}#',\n\t\t\tendpoint: '/v1/icons',\n\t\t},\n\t},\n\tisochroneConfig: {\n\t\tnumberOfPointsLimit: '#{ISOCHRONE_NUMBER_OF_POINTS_LIMIT}#',\n\t\tmaximumDistanceInKm: '#{RADIUS_MAX_DISTANCE_KM}#',\n\t},\n\tnotificationsConfig: {\n\t\trecheckIntervalSeconds: '#{NOTIFICATIONS_PENDING_APPROVALS_INTERVAL}#',\n\t\tnewSinceSecondsAgo: '#{NOTIFICATIONS_NEW_SINCE_SECONDS_AGO}#',\n\t\tuserIdleWarningAfterSeconds: '#{USER_IDLE_WARNING_AFTER_SECONDS}#',\n\t\tuserLogoutAfterWarningInSeconds: '#{USER_LOGOUT_AFTER_WARNING_IN_SECONDS}#',\n\t},\n\tinsightsConfig: {\n\t\tp2pNearestMaxRadiusInMiles: '#{INSIGHTS_P2P_NEAREAST_RADIUS}#',\n\t},\n\tprojectConfig: {\n\t\tallowedDomains: '#{SHARE_PROJECT_ALLOWED_DOMAINS}#',\n\t},\n};\n","import { environment } from '../../environments/environment';\n\nconst HOST = window.location.host;\nconst protocol = environment.httpsEnabled ? 'https://' : 'http://';\nconst REDIRECT_URI = `${protocol}${HOST}`;\n\nexport const AuthConfig = {\n\tclientId: environment.clientId,\n\tissuer: environment.issuer,\n\tredirectUri: REDIRECT_URI,\n\trevocationEndpoint: environment.issuer,\n\tscope: environment.scopes,\n\tshowDebugInformation: true,\n};\n","import { AuthConfig } from './auth-config';\nimport { AUTH_CONTEXT, IAuthContext, IAuthService } from '@ecos/auth';\nimport { Inject, Injectable } from '@angular/core';\nimport { SnackBarService } from '@ecos/ui';\nimport { UserManager, UserManagerSettings, WebStorageStateStore } from 'oidc-client-ts';\nimport { DocsConfigService, DOCS_CONFIG } from '@ecos/abstractions';\nimport { LoggingService, Severity } from '@ecos/logging';\nimport { getEmailAction } from './utils';\n\n/* eslint-disable camelcase */\n/**\n * Login notes:\n * When user tries to access the app, he's first redirected to Okta for login.\n * After succesful login he's redirected back to the app(with tokens, redirect url and other info).\n * We update the internal info about the login status.\n * If there is a redirect url in the state, we redirect to that url, otherwise redirect to root.\n * Before we allow the user to use the app we ask for user profile information from BE(which needs bearer token but not a market header).\n * If in the user profile information we find that he's registered in a market, we allow him to use the app(also start notifications service...) and all requests will use the bearer token and market header.\n * If the user does not have any market registered, the tenant guard will redirect to forbidden page.\n * The auth guard always checks if the user is still logged in before allowing to access that route.\n * If the auth token is no longer valid, the oidc lib automatically uses the refresh token to get a new auth token and keeps user logged in. If it fails the user is logged out.\n * Other notes: The oidc lib uses the signinSilentCallback only if the refresh token is unavailable. The selected market and available markets slice is persisted in local storage and loaded on refresh.\n */\n@Injectable()\nexport class AuthService implements IAuthService {\n\tprivate userManager: UserManager;\n\n\tconstructor(\n\t\t@Inject(AUTH_CONTEXT)\n\t\tprivate readonly authContext: IAuthContext,\n\t\tprivate snackBarService: SnackBarService,\n\t\t@Inject(DOCS_CONFIG)\n\t\tprivate configService: DocsConfigService,\n\t\tprivate loggingService: LoggingService\n\t) {\n\t\tconst authConfig: UserManagerSettings = {\n\t\t\tauthority: AuthConfig.issuer,\n\t\t\tclient_id: AuthConfig.clientId,\n\t\t\tredirect_uri: `${AuthConfig.redirectUri}/signin-callback`,\n\t\t\tscope: AuthConfig.scope,\n\t\t\tresponse_type: 'code',\n\t\t\tpost_logout_redirect_uri: `${AuthConfig.redirectUri}/signout-callback`,\n\t\t\tautomaticSilentRenew: true,\n\t\t\tsilent_redirect_uri: `${AuthConfig.redirectUri}/refresh-callback`,\n\t\t\tloadUserInfo: true,\n\t\t\tuserStore: new WebStorageStateStore( { store: localStorage, prefix: 'geo' })\n\t\t};\n\n\t\tthis.userManager = new UserManager(authConfig);\n\n\t\tthis.userManager.events.addAccessTokenExpired(() => this.logout());\n\t\tthis.userManager.events.addSilentRenewError(() => this.logout());\n\t\tthis.userManager.events.addUserLoaded((result) => this.authContext.setCurrentUser(result));\n\t}\n\n\tlogin(originalUri?: string) {\n\t\treturn this.userManager.signinRedirect({\n\t\t\tstate: {\n\t\t\t\toriginalUri,\n\t\t\t},\n\t\t});\n\t}\n\n\tasync completeLogin(): Promise {\n\t\treturn await this.userManager\n\t\t\t.signinRedirectCallback()\n\t\t\t.then((result) => {\n\t\t\t\tconst redirectUri = (result.state as any)?.originalUri;\n\t\t\t\tthis.loggingService.log('AuthService', Severity.Information, 'User logged in.', {\n\t\t\t\t\tLoginRedirectReferer: redirectUri,\n\t\t\t\t});\n\t\t\t\treturn redirectUri;\n\t\t\t})\n\t\t\t.catch((error: Error) => {\n\t\t\t\tconst snackBarData = {\n\t\t\t\t\ttitle: 'GENERAL.TITLES.ERROR',\n\t\t\t\t\tmessage: 'GENERAL.ERROR_MESSAGES.UNAUTHORIZED',\n\t\t\t\t\ttranslationParams: {\n\t\t\t\t\t\tmessageParams: { email: this.email },\n\t\t\t\t\t},\n\t\t\t\t\tisTranslatable: true,\n\t\t\t\t\taction: () => window.open(getEmailAction(this.email, this.loggingService?.id?.toString())),\n\t\t\t\t};\n\n\t\t\t\tthis.snackBarService.showError(snackBarData);\n\t\t\t\tthis.loggingService.logException('AuthService', Severity.Error, 'signinRedirectCallback error', error);\n\t\t\t});\n\t}\n\n\tasync logout(): Promise {\n\t\tawait this.userManager.signoutRedirect();\n\t}\n\n\tasync completeLogout(): Promise {\n\t\tthis.authContext.clearCurrentUser();\n\t\tawait this.userManager.clearStaleState();\n\t\tawait this.userManager.removeUser();\n\t\tawait this.userManager.signoutRedirectCallback().then(() => {\n\t\t\tthis.loggingService.log('AuthService', Severity.Information, 'User logged out.');\n\t\t});\n\t}\n\n\tasync signinSilentCallback(): Promise {\n\t\tawait this.userManager.signinSilentCallback();\n\t}\n\n\tasync init(): Promise {\n\t\tconst user = await this.userManager.getUser();\n\t\tthis.authContext.setCurrentUser(user);\n\t}\n\n\tget email(): string {\n\t\treturn this.configService.getConfig('contact');\n\t}\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { UserProfile } from '../models/user-profile.model';\n\nexport interface IUserService {\n\tgetUserProfile(): Observable;\n}\n\nexport const USER_SERVICE = new InjectionToken('user.service');\n","/* eslint-disable @typescript-eslint/no-floating-promises */\nimport { Inject, Injectable } from '@angular/core';\nimport { ReplaySubject, Subject, filter, switchMap, tap } from 'rxjs';\nimport { User } from 'oidc-client-ts';\nimport { IAuthContext, UserProfile } from '@ecos/auth';\nimport { IUserService, USER_SERVICE } from '@ecos/user-profile';\n\n@Injectable()\nexport class AuthorizationContextService implements IAuthContext {\n\tprivate user: User;\n\tprivate loginStatusSubject: Subject = new ReplaySubject(1);\n\tprivate userRegisteredInMarketSubject: Subject = new ReplaySubject(1);\n\tloginStatusChange$ = this.loginStatusSubject.asObservable();\n\tuserRegisteredInMarket$ = this.userRegisteredInMarketSubject.asObservable();\n\n\tget claims(): { key: string; value: any }[] {\n\t\treturn Object.entries(this.user.profile).map(([key, value]) => ({ key, value }));\n\t}\n\n\tget userProfile(): UserProfile {\n\t\tif (this.user?.profile) {\n\t\t\treturn new UserProfile(this.user.profile.given_name, this.user.profile.family_name, this.user.profile.email);\n\t\t}\n\t\treturn null;\n\t}\n\n\tget accessToken(): string {\n\t\treturn this.user ? this.user.access_token : null;\n\t}\n\n\tconstructor(@Inject(USER_SERVICE) private readonly userService: IUserService) {\n\t\tthis.loginStatusChange$\n\t\t\t.pipe(\n\t\t\t\tfilter((status) => status),\n\t\t\t\tswitchMap(() =>\n\t\t\t\t\tthis.userService\n\t\t\t\t\t\t.getUserProfile()\n\t\t\t\t\t\t.pipe(tap((user) => this.userRegisteredInMarketSubject.next(user?.markets?.length > 0)))\n\t\t\t\t)\n\t\t\t)\n\t\t\t.subscribe();\n\t}\n\n\tsetCurrentUser(user: User): void {\n\t\tif (user !== this.user) {\n\t\t\tthis.user = user;\n\t\t\tconst status = !!user && !user.expired;\n\t\t\tthis.loginStatusSubject.next(status);\n\t\t}\n\t}\n\n\tclearCurrentUser(): void {\n\t\tthis.user = null;\n\t\tthis.loginStatusSubject.next(false);\n\t}\n}\n","import { Observable, throwError } from 'rxjs';\nimport { Injectable, Optional } from '@angular/core';\nimport { catchError } from 'rxjs/operators';\nimport {\n\tHttpErrorResponse,\n\tHttpEvent,\n\tHttpHandler,\n\tHttpInterceptor,\n\tHttpRequest,\n\tHttpStatusCode,\n} from '@angular/common/http';\nimport { LoggingService, Severity } from '@ecos/logging';\nimport { CustomError } from '@ecos/abstractions';\n\n@Injectable()\nexport class BadRequestInterceptor implements HttpInterceptor {\n\tconstructor(@Optional() private loggingService: LoggingService) {}\n\n\tintercept(req: HttpRequest, next: HttpHandler): Observable> {\n\t\treturn next.handle(req).pipe(\n\t\t\tcatchError((errorResponse: HttpErrorResponse) => {\n\t\t\t\tif (errorResponse) {\n\t\t\t\t\tconst { status, error, url } = errorResponse;\n\t\t\t\t\tconst details = (error as unknown as { details: string })?.details;\n\n\t\t\t\t\tif (status === HttpStatusCode.BadRequest) {\n\t\t\t\t\t\tthis.loggingService.log(url, Severity.Warning, details);\n\t\t\t\t\t\tthrow CustomError.create(details);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn throwError(() => errorResponse);\n\t\t\t})\n\t\t);\n\t}\n}\n","import { Observable, throwError } from 'rxjs';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { catchError } from 'rxjs/operators';\nimport {\n\tHttpErrorResponse,\n\tHttpEvent,\n\tHttpHandler,\n\tHttpInterceptor,\n\tHttpRequest,\n\tHttpStatusCode\n} from '@angular/common/http';\nimport { LoggingService, Severity } from '@ecos/logging';\nimport { CustomError, CustomErrorType, DOCS_CONFIG, DocsConfigService } from '@ecos/abstractions';\n\n\n@Injectable()\nexport class InternalServerErrorInterceptor implements HttpInterceptor {\n\n\n\tconstructor(\n\t\t@Optional() private loggingService: LoggingService,\n\t\t@Inject(DOCS_CONFIG)\n\t\tprivate configService: DocsConfigService\n\t) {\n\t}\n\n\tintercept(req: HttpRequest, next: HttpHandler): Observable> {\n\t\treturn next.handle(req).pipe(\n\t\t\tcatchError((errorResponse: HttpErrorResponse) => {\n\t\t\t\tif (errorResponse) {\n\t\t\t\t\tconst { status, url, error } = errorResponse;\n\t\t\t\t\tif (error && 'message' in error) {\n\t\t\t\t\t\tconst { message } = error as { message: string };\n\t\t\t\t\t\tif (status === HttpStatusCode.InternalServerError) {\n\t\t\t\t\t\t\tconst errorId = extractErrorId(message);\n\t\t\t\t\t\t\tthis.loggingService.log(url, Severity.Error, 'Internal Server Error!', { errorId });\n\t\t\t\t\t\t\tthrow CustomError.create('GENERAL.ERROR_MESSAGES.SYSTEM_ERROR', {\n\t\t\t\t\t\t\t\temail: this.configService.getConfig('contact'),\n\t\t\t\t\t\t\t\terrorId\n\t\t\t\t\t\t\t}, undefined, CustomErrorType.SystemError);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn throwError(() => errorResponse);\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n}\n\nexport const extractErrorId = (message: string): string => {\n\tconst startOfIdTemplate = 'ID \\'';\n\tconst endOfIdTemplate = '\\' for support';\n\tconst startIndex = message.indexOf(startOfIdTemplate) + startOfIdTemplate.length;\n\tconst endIndex = message.indexOf(endOfIdTemplate);\n\tconst id = message.substring(startIndex, endIndex);\n\tconst regExp = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;\n\n\tif (id.length > 0) {\n\t\tif (regExp.test(id)) {\n\t\t\treturn id;\n\t\t}\n\t}\n\n\treturn '';\n};\n","import { Observable, throwError } from 'rxjs';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { catchError } from 'rxjs/operators';\nimport {\n\tHttpErrorResponse,\n\tHttpEvent,\n\tHttpHandler,\n\tHttpInterceptor,\n\tHttpRequest,\n\tHttpStatusCode,\n} from '@angular/common/http';\nimport { LoggingService, Severity } from '@ecos/logging';\nimport { DOCS_CONFIG, DocsConfigService, CustomError } from '@ecos/abstractions';\n\n@Injectable()\nexport class PrecondititonFailedInterceptor implements HttpInterceptor {\n\tconstructor(\n\t\t@Optional() private loggingService: LoggingService,\n\t\t@Inject(DOCS_CONFIG)\n\t\tprivate configService: DocsConfigService\n\t) {}\n\n\tintercept(req: HttpRequest, next: HttpHandler): Observable> {\n\t\treturn next.handle(req).pipe(\n\t\t\tcatchError((errorResponse: HttpErrorResponse) => {\n\t\t\t\tif (errorResponse) {\n\t\t\t\t\tconst { status, url } = errorResponse;\n\n\t\t\t\t\tif (status === HttpStatusCode.PreconditionFailed) {\n\t\t\t\t\t\tthis.loggingService.log(url, Severity.Warning, 'Precondititon Failed!');\n\t\t\t\t\t\tthrow CustomError.create('GENERAL.WARNING_MESSAGES.PRECONDITION_FAILED', {\n\t\t\t\t\t\t\temail: this.configService.getConfig('contact'),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn throwError(() => errorResponse);\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n}\n","import { Observable, throwError } from 'rxjs';\nimport { Injectable, Optional } from '@angular/core';\nimport { catchError } from 'rxjs/operators';\nimport {\n\tHttpErrorResponse,\n\tHttpEvent,\n\tHttpHandler,\n\tHttpInterceptor,\n\tHttpRequest,\n\tHttpStatusCode,\n} from '@angular/common/http';\nimport { LoggingService, Severity } from '@ecos/logging';\nimport { CustomError } from '@ecos/abstractions';\n\n@Injectable()\nexport class PrecondititonRequiredInterceptor implements HttpInterceptor {\n\tconstructor(@Optional() private loggingService: LoggingService) {}\n\n\tintercept(req: HttpRequest, next: HttpHandler): Observable> {\n\t\treturn next.handle(req).pipe(\n\t\t\tcatchError((errorResponse: HttpErrorResponse) => {\n\t\t\t\tif (errorResponse) {\n\t\t\t\t\tconst { status, url } = errorResponse;\n\n\t\t\t\t\tif (status === HttpStatusCode.PreconditionRequired) {\n\t\t\t\t\t\tthis.loggingService.log(url, Severity.Warning, 'Precondition required!');\n\t\t\t\t\t\tthrow CustomError.create('GENERAL.WARNING_MESSAGES.PRECONDTION_REQUIRED');\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn throwError(() => errorResponse);\n\t\t\t})\n\t\t);\n\t}\n}\n","import { Observable, throwError } from 'rxjs';\nimport { Inject, Injectable, Optional } from '@angular/core';\nimport { catchError } from 'rxjs/operators';\nimport {\n\tHttpErrorResponse,\n\tHttpEvent,\n\tHttpHandler,\n\tHttpInterceptor,\n\tHttpRequest,\n\tHttpStatusCode,\n} from '@angular/common/http';\nimport { LoggingService, Severity } from '@ecos/logging';\nimport { DOCS_CONFIG, DocsConfigService, CustomError } from '@ecos/abstractions';\n\n@Injectable()\nexport class TooManyRequestsInterceptor implements HttpInterceptor {\n\tconstructor(\n\t\t@Optional() private loggingService: LoggingService,\n\t\t@Inject(DOCS_CONFIG)\n\t\tprivate configService: DocsConfigService\n\t) {}\n\n\tintercept(req: HttpRequest, next: HttpHandler): Observable> {\n\t\treturn next.handle(req).pipe(\n\t\t\tcatchError((errorResponse: HttpErrorResponse) => {\n\t\t\t\tif (errorResponse) {\n\t\t\t\t\tconst { status, url } = errorResponse;\n\n\t\t\t\t\tif (status === HttpStatusCode.TooManyRequests) {\n\t\t\t\t\t\tthis.loggingService.log(url, Severity.Warning, 'Too Many Requests!');\n\t\t\t\t\t\tthrow CustomError.create('GENERAL.WARNING_MESSAGES.TOO_MANY_REQUESTS', {\n\t\t\t\t\t\t\temail: this.configService.getConfig('contact'),\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\n\t\t\t\t\treturn throwError(() => errorResponse);\n\t\t\t\t}\n\t\t\t})\n\t\t);\n\t}\n}\n","import { Configuration, ConfigurationFacade, LoggingService, Severity } from '@ecos/logging';\nimport { ErrorHandler, Injectable, NgZone, Optional } from '@angular/core';\nimport { SnackBarService } from '@ecos/ui';\nimport { CustomError, CustomErrorType } from '@ecos/abstractions';\n\n\nconst WARNING_DISPLAY_TIME_SEC = 5;\nconst ERROR_DISPLAY_TIME_SEC = 10;\n\n@Injectable()\nexport class GlobalErrorHandler implements ErrorHandler {\n\tconfig: Configuration;\n\n\tconstructor(\n\t\tprivate zone: NgZone,\n\t\tprivate snackBarService: SnackBarService,\n\t\t@Optional() private configService: ConfigurationFacade,\n\t\t@Optional() private loggingService: LoggingService\n\t) {\n\t\tif (this.configService) {\n\t\t\tthis.configService.settings$.subscribe((settings) => this.handleConfig(settings));\n\t\t}\n\t}\n\n\thandleConfig(settings: Configuration) {\n\t\tthis.config = settings;\n\t}\n\n\thandleError(error: Error): void {\n\t\tif (error instanceof CustomError) {\n\t\t\tif (error.errorType === CustomErrorType.SystemError) {\n\t\t\t\tconst snackBarData = {\n\t\t\t\t\ttitle: 'GENERAL.TITLES.SYSTEM_ERROR',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\tisTranslatable: true,\n\t\t\t\t\ttranslationParams: {\n\t\t\t\t\t\tmessageParams: error.messageParams\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treturn this.zone.run(() => {\n\t\t\t\t\tthis.snackBarService.showError(snackBarData, ERROR_DISPLAY_TIME_SEC);\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (error.errorType === CustomErrorType.Warning) {\n\t\t\t\tconst snackBarData = {\n\t\t\t\t\ttitle: 'GENERAL.TITLES.WARNING',\n\t\t\t\t\tmessage: error.message,\n\t\t\t\t\tisTranslatable: true,\n\t\t\t\t\ttranslationParams: {\n\t\t\t\t\t\tmessageParams: error.messageParams\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\treturn this.zone.run(() => {\n\t\t\t\t\tthis.snackBarService.showWarning(snackBarData, WARNING_DISPLAY_TIME_SEC);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\t// Any other type of unhandled error\n\t\t// TODO handle specific error types if need it\n\t\tthis.loggingService.logException(this.config.applicationName, Severity.Error, error.message, error);\n\n\t\tconst snackBarData = {\n\t\t\ttitle: 'GENERAL.TITLES.SYSTEM_ERROR',\n\t\t\tmessage: 'GENERAL.ERROR_MESSAGES.SOMETHING_WRONG',\n\t\t\tisTranslatable: true,\n\t\t};\n\t\tthis.zone.run(() => this.snackBarService.showSystemError(snackBarData));\n\t}\n}\n","import { EventBus } from '@trutoo/event-bus';\nimport { EventBusHandler, IEventBus } from '@ecos/abstractions';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class EventBusService implements IEventBus {\n\tprivate readonly eventBus = new EventBus();\n\tprivate subs: {\n\t\tchannel: string;\n\t\tsubscription: {\n\t\t\tunsubscribe(): void;\n\t\t};\n\t}[] = [];\n\n\tpublish(channel: string, payload: T) {\n\t\tthis.eventBus.publish(channel, payload);\n\t}\n\n\tregister(channel: string, schema: Record): boolean {\n\t\treturn this.eventBus.register(channel, schema);\n\t}\n\n\tsubscribe(channel: string, eventHandler: EventBusHandler) {\n\t\tconst subscription = this.eventBus.subscribe(channel, true, eventHandler);\n\n\t\tthis.subs.push({\n\t\t\tchannel,\n\t\t\tsubscription,\n\t\t});\n\t}\n\n\tunsubscribe(channel: string) {\n\t\tthis.subs.filter((sub) => sub.channel === channel).forEach(({ subscription }) => subscription.unsubscribe());\n\t}\n\n\tunregister(channel:string):boolean {\n\t\treturn this.eventBus.unregister(channel);\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { AppState, getTranslationCode } from '@ecos/store';\nimport { ITranslationConfigService } from '@ecos/translation';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class TranslationConfigService implements ITranslationConfigService {\n\tconstructor(private store: Store) {}\n\tcurrentLanguage(): Observable {\n\t\treturn this.store.select(getTranslationCode);\n\t}\n}\n","import { DOMAIN_CONFIG, DomainConfigService, HttpBaseService, HttpRequestMethod } from '@ecos/abstractions';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable, map, take, tap } from 'rxjs';\nimport { IUserProfileFacade, IUserService, USER_PROFILE_FACADE, UserProfile } from '@ecos/user-profile';\nimport { userResponseAdapter } from './adapters/user-response.adapter';\nimport { UserResponse } from './models';\n\n@Injectable()\nexport class UserService extends HttpBaseService implements IUserService {\n\tconstructor(\n\t\t@Inject(DOMAIN_CONFIG)\n\t\tprivate configService: DomainConfigService,\n\t\t@Inject(USER_PROFILE_FACADE) private readonly profileFacade: IUserProfileFacade\n\t) {\n\t\tsuper();\n\t\tthis.serviceName = 'UserService';\n\t}\n\n\tgetUserProfile(): Observable {\n\t\tconst headers = this.createContentTypeJsonHeaders(null);\n\t\tconst config = this.configService.getConfig('userProfile');\n\t\tconst url = `${config.baseUrl}${config.endpoint}`;\n\t\treturn this.executeRequest({\n\t\t\trequestUrl: url,\n\t\t\trequestMethod: HttpRequestMethod.Get,\n\t\t\theaders,\n\t\t}).pipe(\n\t\t\ttake(1),\n\t\t\tmap((x) => userResponseAdapter(x)),\n\t\t\ttap((result) => this.profileFacade.setUserProfile(result))\n\t\t);\n\t}\n}\n","import { RoleType, UserProfile } from '@ecos/user-profile';\nimport { UserResponse } from '../models/user-response.model';\nimport { toEnumIgnoreCase } from '@ecos/utils';\n\nexport const userResponseAdapter = (response: UserResponse): UserProfile => ({\n\tname: response.name,\n\tuserName: response.userName,\n\temail: response.email,\n\tclientId: response.clientIdentifier,\n\tclientName: response.clientName,\n\tmarkets: response.markets.map((x) => ({ name: x.marketName, id: x.marketIdentifier })),\n\troles: response.roles.map((x) => ({\n\t\ttype: toEnumIgnoreCase(RoleType, x.roleIdentifier),\n\t\tname: x.roleName,\n\t\tmarketId: x.marketIdentifier,\n\t\tclientId: x.clientIdentifier,\n\t})),\n});\n","import { Injectable } from '@angular/core';\nimport { AppState, getAppTheme, IThemeConfigService, Theme, setTheme } from '@ecos/store';\nimport { Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class ThemeConfigService implements IThemeConfigService {\n\tconstructor(private store: Store) {}\n\tcurrentTheme(): Observable {\n\t\treturn this.store.select(getAppTheme);\n\t}\n\n\tsetCurrentTheme(theme: Theme): void {\n\t\tthis.store.dispatch(setTheme({ theme }));\n\t}\n}\n","import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport { SHOW_LOADER } from '@ecos/abstractions';\nimport { ILoadingService, LOADING_SERVICE } from '@ecos/ui';\nimport { finalize, Observable } from 'rxjs';\n\n@Injectable()\nexport class LoaderInterceptor implements HttpInterceptor {\n\tprivate CORRELATION_HEADER = 'x-correlation-id';\n\n\tconstructor(\n\t\t@Inject(LOADING_SERVICE)\n\t\tprivate readonly loading: ILoadingService\n\t) {}\n\n\tintercept(request: HttpRequest, next: HttpHandler): Observable> {\n\t\tconst showLoader = request.context.get(SHOW_LOADER);\n\t\tif (showLoader) {\n\t\t\tthis.setLoading(true, request);\n\t\t\treturn next.handle(request).pipe(\n\t\t\t\tfinalize(() => {\n\t\t\t\t\tthis.setLoading(false, request);\n\t\t\t\t})\n\t\t\t);\n\t\t} else {\n\t\t\treturn next.handle(request);\n\t\t}\n\t}\n\n\tprivate setLoading(isLoading: boolean, request: HttpRequest) {\n\t\tlet requestId = request.url;\n\t\tif (request?.headers?.has(this.CORRELATION_HEADER)) {\n\t\t\trequestId = request.headers.get(this.CORRELATION_HEADER);\n\t\t}\n\t\tthis.loading.setLoading(isLoading, requestId);\n\t}\n}\n","import { ActivatedRouteSnapshot, DetachedRouteHandle, RouteReuseStrategy } from '@angular/router';\n\nexport class CustomReuseStrategy implements RouteReuseStrategy {\n\tprivate savedHandles = new Map();\n\n\tshouldDetach(route: ActivatedRouteSnapshot): boolean {\n\t\treturn route.data.saveComponent;\n\t}\n\n\tstore(route: ActivatedRouteSnapshot, handle: DetachedRouteHandle): void {\n\t\tconst key = this.getRouteKey(route);\n\t\tthis.savedHandles.set(key, handle);\n\t}\n\n\tshouldAttach(route: ActivatedRouteSnapshot): boolean {\n\t\treturn this.savedHandles.has(this.getRouteKey(route));\n\t}\n\n\tretrieve(route: ActivatedRouteSnapshot): DetachedRouteHandle {\n\t\treturn this.savedHandles.get(this.getRouteKey(route));\n\t}\n\n\tshouldReuseRoute(future: ActivatedRouteSnapshot, curr: ActivatedRouteSnapshot): boolean {\n\t\treturn future.routeConfig === curr.routeConfig;\n\t}\n\n\tpublic clearSavedHandle(key: string): void {\n\t\tconst handle = this.savedHandles.get(key);\n\t\tif (handle) {\n\t\t\t(handle as any).componentRef.destroy();\n\t\t}\n\n\t\tthis.savedHandles.delete(key);\n\t}\n\n\tprivate getRouteKey(route: ActivatedRouteSnapshot): string {\n\t\treturn route.pathFromRoot\n\t\t\t.filter((e) => e.url)\n\t\t\t.map((e) => e.url)\n\t\t\t.join('/');\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { Title } from '@angular/platform-browser';\nimport { RouterStateSnapshot, TitleStrategy } from '@angular/router';\nimport { TranslationService } from '@ecos/translation';\n\n@Injectable()\nexport class PageTitleStrategy extends TitleStrategy {\n\tconstructor(private readonly title: Title, private readonly translateService: TranslationService) {\n\t\tsuper();\n\t}\n\n\tupdateTitle(snapshot: RouterStateSnapshot): void {\n\t\tconst appName = this.translateService.translateByKey('APP.NAME');\n\t\tconst title = this.buildTitle(snapshot);\n\n\t\tif (title !== undefined) {\n\t\t\tconst titleTranslation = this.translateService.translateByKey(title);\n\t\t\treturn this.title.setTitle(`${appName} - ${titleTranslation}`);\n\t\t}\n\n\t\tthis.title.setTitle(`${appName}`);\n\t}\n}\n","import { IS_PUBLIC_API } from '@ecos/abstractions';\nimport { Observable } from 'rxjs';\nimport { Inject, Injectable } from '@angular/core';\nimport { mergeMap, take } from 'rxjs/operators';\nimport { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';\nimport { IUserProfileFacade, MarketOption, USER_PROFILE_FACADE } from '@ecos/user-profile';\n\n@Injectable()\nexport class MarketInterceptor implements HttpInterceptor {\n\tprivate MARKET_HEADER = 'Geo-Dsc-MarketCode';\n\n\tconstructor(@Inject(USER_PROFILE_FACADE) private readonly profileFacade: IUserProfileFacade) {}\n\n\tintercept(req: HttpRequest, next: HttpHandler): Observable> {\n\t\treturn this.profileFacade.getSelectedMarket().pipe(\n\t\t\ttake(1),\n\t\t\tmergeMap((selectedMarket: MarketOption | undefined) => {\n\t\t\t\tlet request = req;\n\t\t\t\tif (selectedMarket?.id && !req.context.get(IS_PUBLIC_API)) {\n\t\t\t\t\trequest = req.clone({\n\t\t\t\t\t\tsetHeaders: {\n\t\t\t\t\t\t\t[this.MARKET_HEADER]: selectedMarket?.id,\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn next.handle(request);\n\t\t\t})\n\t\t);\n\t}\n}\n","import { Inject, Injectable, OnDestroy } from '@angular/core';\nimport {\n\tCustomError,\n\tEVENT_BUS,\n\tEventBusHandler,\n\tIEventBus,\n\tINotificationProvider,\n\tINotificationService,\n\tJOBS_NOTIFICATIONS_PROVIDER,\n\tNOTIFICATIONS_CONFIG,\n\tNotificationsConfigService,\n\tPROJECTS_NOTIFICATIONS_PROVIDER,\n} from '@ecos/abstractions';\nimport { EMPTY, Observable, ReplaySubject, Subject, catchError, interval, switchMap, take, takeUntil, tap } from 'rxjs';\n\n@Injectable()\nexport class NotificationService implements INotificationService, OnDestroy {\n\tprivate readonly pollDelayTime = 7200 * 1000; // ms\n\tprivate readonly pendingJobsNotificationsAvailableSubject = new ReplaySubject();\n\tprivate readonly sharedProjectsNotificationsAvailableSubject = new ReplaySubject();\n\tprivate onDestroy$: Subject = new Subject();\n\n\tget pendingJobsNotificationsAvailable$(): Observable {\n\t\treturn this.pendingJobsNotificationsAvailableSubject.asObservable();\n\t}\n\n\tget sharedProjectsNotificationsAvailable$(): Observable {\n\t\treturn this.sharedProjectsNotificationsAvailableSubject.asObservable();\n\t}\n\n\tconstructor(\n\t\t@Inject(JOBS_NOTIFICATIONS_PROVIDER)\n\t\tprivate readonly jobsNotificationProvider: INotificationProvider,\n\t\t@Inject(PROJECTS_NOTIFICATIONS_PROVIDER)\n\t\tprivate readonly projectsNotificationProvider: INotificationProvider,\n\t\t@Inject(EVENT_BUS) private readonly eventBus: IEventBus,\n\t\t@Inject(NOTIFICATIONS_CONFIG)\n\t\tprivate configService: NotificationsConfigService\n\t) {\n\t\tconst configInterval = configService.getConfig('recheckIntervalSeconds');\n\t\tif (configInterval) {\n\t\t\tthis.pollDelayTime = Number(configInterval) * 1000;\n\t\t}\n\t}\n\n\tinit() {\n\t\tthis.onDestroy$.next();\n\t\tthis.pollForAutomaticNotifications();\n\t\tthis.registerOnDemandNotifications();\n\t}\n\n\tprivate registerOnDemandNotifications() {\n\t\tthis.eventBus.register('notifications:pending-approvals', {\n\t\t\ttype: 'object',\n\t\t\trequired: ['checkForNewNotification'],\n\t\t\tproperties: {\n\t\t\t\tcheckForNewNotification: {\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\tthis.eventBus.subscribe('notifications:pending-approvals', this.checkOnDemandPendingJobs);\n\t\tthis.eventBus.register('notifications:shared-projects', {\n\t\t\ttype: 'object',\n\t\t\trequired: ['checkForNewNotification'],\n\t\t\tproperties: {\n\t\t\t\tcheckForNewNotification: {\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\tthis.eventBus.subscribe('notifications:shared-projects', this.checkOnDemandSharedProjects);\n\t}\n\n\tprivate pollForAutomaticNotifications() {\n\t\t// pending approval jobs\n\t\tthis.pollForNewPendingJobs().pipe(takeUntil(this.onDestroy$)).subscribe();\n\t\t// new shared projects\n\t\tthis.pollForNewSharedProjects().pipe(takeUntil(this.onDestroy$)).subscribe();\n\t}\n\n\tprivate pollForNewPendingJobs() {\n\t\treturn this.arePendingJobsAvailable().pipe(\n\t\t\tswitchMap(() =>\n\t\t\t\tinterval(this.pollDelayTime).pipe(\n\t\t\t\t\ttakeUntil(this.onDestroy$),\n\t\t\t\t\tswitchMap(() => this.arePendingJobsAvailable())\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tprivate pollForNewSharedProjects() {\n\t\treturn this.areSharedProjectsAvailable().pipe(\n\t\t\tswitchMap(() =>\n\t\t\t\tinterval(this.pollDelayTime).pipe(\n\t\t\t\t\ttakeUntil(this.onDestroy$),\n\t\t\t\t\tswitchMap(() => this.areSharedProjectsAvailable())\n\t\t\t\t)\n\t\t\t)\n\t\t);\n\t}\n\n\tprivate arePendingJobsAvailable() {\n\t\treturn this.jobsNotificationProvider.notificationsAvailable().pipe(\n\t\t\ttake(1),\n\t\t\ttap((x) => this.pendingJobsNotificationsAvailableSubject.next(x)),\n\t\t\tcatchError((error) => {\n\t\t\t\tconsole.error('Notification service unavailable.', error);\n\t\t\t\treturn EMPTY;\n\t\t\t})\n\t\t);\n\t}\n\n\tprivate areSharedProjectsAvailable() {\n\t\treturn this.projectsNotificationProvider.notificationsAvailable().pipe(\n\t\t\ttake(1),\n\t\t\ttap((x) => this.sharedProjectsNotificationsAvailableSubject.next(x)),\n\t\t\tcatchError((error) => {\n\t\t\t\tconsole.error('Notification service unavailable.', error);\n\t\t\t\treturn EMPTY;\n\t\t\t})\n\t\t);\n\t}\n\n\tprivate checkOnDemandPendingJobs: EventBusHandler<{ checkForNewNotification: boolean }> = ({ payload }): void => {\n\t\tif (payload?.checkForNewNotification) {\n\t\t\tthis.arePendingJobsAvailable().subscribe();\n\t\t}\n\t};\n\n\tprivate checkOnDemandSharedProjects: EventBusHandler<{ checkForNewNotification: boolean }> = ({ payload }): void => {\n\t\tif (payload?.checkForNewNotification) {\n\t\t\tthis.areSharedProjectsAvailable().subscribe();\n\t\t}\n\t};\n\n\tngOnDestroy(): void {\n\t\tthis.onDestroy$.next();\n\t\tthis.onDestroy$.unsubscribe();\n\t}\n}\n","import { HttpContext } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport {\n\tDOMAIN_CONFIG,\n\tDomainConfigService,\n\tHttpBaseService,\n\tHttpRequestMethod,\n\tINotificationProvider,\n\tSHOW_LOADER,\n} from '@ecos/abstractions';\nimport { Observable, map } from 'rxjs';\nimport { IngestionJobResponse } from '../../services/models';\n\n@Injectable()\nexport class JobsNotificationProvider extends HttpBaseService implements INotificationProvider {\n\tconstructor(\n\t\t@Inject(DOMAIN_CONFIG)\n\t\tprivate configService: DomainConfigService\n\t) {\n\t\tsuper();\n\t\tthis.serviceName = 'JobsNotificationProvider';\n\t}\n\n\tnotificationsAvailable(): Observable {\n\t\treturn this.pendingJobsAvailable();\n\t}\n\n\tprivate pendingJobsAvailable(): Observable {\n\t\tconst headers = this.createContentTypeJsonHeaders(null);\n\t\tconst config = this.configService.getConfig('approvalJobs');\n\t\tconst url = `${config.baseUrl}${config.endpoint}?metaOnly=true`;\n\n\t\treturn this.executeRequest({\n\t\t\trequestUrl: url,\n\t\t\trequestMethod: HttpRequestMethod.Get,\n\t\t\theaders,\n\t\t\tcontext: new HttpContext().set(SHOW_LOADER, false),\n\t\t}).pipe(map((injestionJobResponse) => injestionJobResponse?.metadata?.totalCount > 0));\n\t}\n}\n","export enum ProjectsType {\n\tMyProjects = 'MyProjects',\n\tSharedProjects = 'SharedProjects',\n}\n","import { HttpContext } from '@angular/common/http';\nimport { Inject, Injectable } from '@angular/core';\nimport {\n\tDOMAIN_CONFIG,\n\tDomainConfigService,\n\tHttpBaseService,\n\tHttpRequestMethod,\n\tINotificationProvider,\n\tNOTIFICATIONS_CONFIG,\n\tNotificationsConfigService,\n\tSHOW_LOADER,\n} from '@ecos/abstractions';\nimport { getTimeAgoISOString } from '@ecos/utils';\nimport { Observable, map } from 'rxjs';\nimport { MapProjectsResponse, ProjectsType } from '../../services/models';\n\n@Injectable()\nexport class ProjectsNotificationProvider extends HttpBaseService implements INotificationProvider {\n\tconstructor(\n\t\t@Inject(DOMAIN_CONFIG)\n\t\tprivate domainConfig: DomainConfigService,\n\t\t@Inject(NOTIFICATIONS_CONFIG)\n\t\tprivate notificationsConfig: NotificationsConfigService\n\t) {\n\t\tsuper();\n\t\tthis.serviceName = 'ProjectsNotificationProvider';\n\t}\n\n\tnotificationsAvailable(): Observable {\n\t\treturn this.sharedProjectsAvailable();\n\t}\n\n\tprivate sharedProjectsAvailable(): Observable {\n\t\tconst headers = this.createContentTypeJsonHeaders(null);\n\t\tconst config = this.domainConfig.getConfig('mapProjects');\n\t\tconst newSinceSecondsAgo = this.notificationsConfig.getConfig('newSinceSecondsAgo') || 172800; // default to 48h\n\n\t\tlet url = `${config.baseUrl}${config.endpoint}?projectsType=${ProjectsType.SharedProjects.toString()}`;\n\t\turl = `${url}&metaOnly=true`;\n\t\turl = `${url}&order=sharedAt`;\n\t\turl = `${url}&sharedFrom=${getTimeAgoISOString(Number(newSinceSecondsAgo))}`;\n\n\t\treturn this.executeRequest({\n\t\t\trequestUrl: url,\n\t\t\trequestMethod: HttpRequestMethod.Get,\n\t\t\theaders,\n\t\t\tcontext: new HttpContext().set(SHOW_LOADER, false),\n\t\t}).pipe(map((response) => response?.metadata?.totalCount > 0));\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport {\n\tJOBS_NOTIFICATIONS_PROVIDER,\n\tNOTIFICATIONS_SERVICE,\n\tPROJECTS_NOTIFICATIONS_PROVIDER,\n} from '@ecos/abstractions';\nimport { NotificationService } from './notification.service';\nimport { JobsNotificationProvider, ProjectsNotificationProvider } from './providers';\n\n@NgModule({\n\tproviders: [\n\t\t{\n\t\t\tprovide: NOTIFICATIONS_SERVICE,\n\t\t\tuseClass: NotificationService,\n\t\t},\n\t\t{\n\t\t\tprovide: JOBS_NOTIFICATIONS_PROVIDER,\n\t\t\tuseClass: JobsNotificationProvider,\n\t\t},\n\t\t{\n\t\t\tprovide: PROJECTS_NOTIFICATIONS_PROVIDER,\n\t\t\tuseClass: ProjectsNotificationProvider,\n\t\t},\n\t],\n})\nexport class NotificationModule {}\n","import {\n\tConfigurationModule,\n\tEVENT_BUS,\n\tPROJECT_INITIALIZATION_TOKEN,\n\tProjectInitializationService\n} from '@ecos/abstractions';\nimport { AUTH_CONTEXT, AUTH_SERVICE, AuthModule } from '@ecos/auth';\nimport { AuthInterceptor } from './auth/interceptors';\nimport { AuthorizationContextService, AuthService } from './auth';\nimport { environment } from '../environments/environment';\nimport {\n\tBadRequestInterceptor, GlobalErrorHandler, InternalServerErrorInterceptor,\n\tPrecondititonFailedInterceptor,\n\tPrecondititonRequiredInterceptor,\n\tTooManyRequestsInterceptor\n} from './errors';\nimport { EventBusService } from './event-bus';\nimport { HTTP_INTERCEPTORS } from '@angular/common/http';\nimport { LoggingModule } from '@ecos/logging';\nimport { ErrorHandler, ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { THEME_CONFIG } from '@ecos/store';\nimport { ThemeConfigService, TranslationConfigService, UserService } from './services';\nimport { TRANSLATION_CONFIG, TranslationModule } from '@ecos/translation';\nimport { RouteReuseStrategy, TitleStrategy } from '@angular/router';\nimport { LoaderInterceptor } from './http/loader-interceptor';\nimport { LOADING_SERVICE, LoadingService } from '@ecos/ui';\nimport { CustomReuseStrategy, PageTitleStrategy } from '@ecos/routing-kernel';\nimport { USER_SERVICE, UserProfileModule } from '@ecos/user-profile';\nimport { MarketInterceptor } from './http/market-interceptor';\nimport { NotificationModule } from './notifications';\n\n@NgModule({\n\timports: [\n\t\tTranslationModule.forRoot(),\n\t\tLoggingModule.forRoot({ config: environment.appConfig }),\n\t\tConfigurationModule.forRoot({ environment }),\n\t\tAuthModule,\n\t\tNotificationModule,\n\t\tUserProfileModule\n\t],\n\tproviders: [\n\t\t{\n\t\t\tprovide: TRANSLATION_CONFIG,\n\t\t\tuseClass: TranslationConfigService,\n\t\t},\n\t\t{\n\t\t\tprovide: THEME_CONFIG,\n\t\t\tuseClass: ThemeConfigService,\n\t\t},\n\t],\n})\nexport class CoreModule {\n\tconstructor(@SkipSelf() @Optional() parentModule: CoreModule) {\n\t\tthis.throwIfAlreadyLoaded(parentModule);\n\t}\n\n\tstatic forRoot(): ModuleWithProviders {\n\t\tconst httpInterceptorProviders = [\n\t\t\t{ provide: HTTP_INTERCEPTORS, useClass: AuthInterceptor, multi: true },\n\t\t\t{ provide: HTTP_INTERCEPTORS, useClass: MarketInterceptor, multi: true },\n\t\t\t{ provide: HTTP_INTERCEPTORS, useClass: LoaderInterceptor, multi: true },\n\t\t\t{ provide: HTTP_INTERCEPTORS, useClass: BadRequestInterceptor, multi: true },\n\t\t\t{ provide: HTTP_INTERCEPTORS, useClass: PrecondititonFailedInterceptor, multi: true },\n\t\t\t{ provide: HTTP_INTERCEPTORS, useClass: PrecondititonRequiredInterceptor, multi: true },\n\t\t\t{ provide: HTTP_INTERCEPTORS, useClass: TooManyRequestsInterceptor, multi: true },\n\t\t\t{ provide: HTTP_INTERCEPTORS, useClass: InternalServerErrorInterceptor, multi: true },\n\t\t];\n\t\treturn {\n\t\t\tngModule: CoreModule,\n\t\t\tproviders: [\n\t\t\t\thttpInterceptorProviders,\n\t\t\t\t{\n\t\t\t\t\tprovide: ErrorHandler,\n\t\t\t\t\tuseClass: GlobalErrorHandler,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: AUTH_SERVICE,\n\t\t\t\t\tuseClass: AuthService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: AUTH_CONTEXT,\n\t\t\t\t\tuseClass: AuthorizationContextService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: USER_SERVICE,\n\t\t\t\t\tuseClass: UserService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: LOADING_SERVICE,\n\t\t\t\t\tuseClass: LoadingService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: PROJECT_INITIALIZATION_TOKEN,\n\t\t\t\t\tuseClass: ProjectInitializationService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: EVENT_BUS,\n\t\t\t\t\tuseClass: EventBusService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: RouteReuseStrategy,\n\t\t\t\t\tuseClass: CustomReuseStrategy,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: TitleStrategy,\n\t\t\t\t\tuseClass: PageTitleStrategy,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t}\n\n\tprivate throwIfAlreadyLoaded(parentModule: CoreModule) {\n\t\tif (parentModule) {\n\t\t\tthrow new Error(`${parentModule.constructor.name} has already been loaded. Import in the AppModule only.`);\n\t\t}\n\t}\n}\n","import { createAction, props } from '@ngrx/store';\nimport { FeatureFlags } from '../../types/types';\n\nexport type FeatureFlagsActions =\n\t| '[Feature Flags] Load Feature Flags'\n\t| '[Feature Flags] Load Feature Flags Success'\n\t| '[Feature Flags] Load Feature Flags Fail';\n\nexport const LoadFeatureFlags = createAction('[Feature Flags] Load Feature Flags');\nexport const LoadFeatureFlagsSuccess = createAction(\n\t'[Feature Flags] Load Feature Flags Success',\n\tprops<{ payload: { data: FeatureFlags } }>()\n);\nexport const LoadFeatureFlagsFail = createAction(\n\t'[Feature Flags] Load Feature Flags Fail',\n\tprops<{ err: { data: Error } }>()\n);\n","import { createReducer, on } from '@ngrx/store';\nimport { FeatureFlags } from '../../types/types';\nimport { LoadFeatureFlags, LoadFeatureFlagsFail, LoadFeatureFlagsSuccess } from '../actions';\n\nexport interface FeatureFlagsState {\n\tdata: FeatureFlags | Record;\n\tloaded: boolean;\n\tloading: boolean;\n}\n\nconst initialFeatureFlags: FeatureFlagsState = {\n\tdata: {},\n\tloaded: false,\n\tloading: false,\n};\n\nexport const featureFlagsReducer = createReducer(\n\tinitialFeatureFlags,\n\ton(LoadFeatureFlags, (state) => ({\n\t\t...state,\n\t\tloaded: false,\n\t\tloading: true,\n\t})),\n\ton(LoadFeatureFlagsSuccess, (state, { payload: { data } }) => ({\n\t\t...state,\n\t\tdata: {\n\t\t\t...data,\n\t\t},\n\t\tloaded: true,\n\t\tloading: false,\n\t})),\n\ton(LoadFeatureFlagsFail, (state, { err: _err }) => ({\n\t\t...state,\n\t\tloaded: false,\n\t\tloading: false,\n\t}))\n);\n\nexport const selectFeatureFlags = (state: FeatureFlagsState) => state.data;\nexport const selectFeatureFlagsLoading = (state: FeatureFlagsState) => state.loading;\nexport const selectFeatureFlagsLoaded = (state: FeatureFlagsState) => state.loaded;\n","import { ActionReducerMap, createFeatureSelector } from '@ngrx/store';\nimport { FeatureFlagsState, featureFlagsReducer } from './feature-flags.reducer';\n\nexport * from './feature-flags.reducer';\n\nexport const featureFlagsStoreKey = 'app.feature-flags';\n\nexport interface AppFeatureFlagsState {\n\tflags: FeatureFlagsState;\n}\n\nexport const reducers: ActionReducerMap = {\n\tflags: featureFlagsReducer,\n};\n\nexport const selectFeatureFlagsState = createFeatureSelector(featureFlagsStoreKey);\n","import { Injectable } from '@angular/core';\nimport { HttpBaseService, HttpRequestMethod } from '@ecos/abstractions';\nimport { Observable } from 'rxjs';\nimport { IFeatureFlagsService } from '../../domain/feature-flags-service.interface';\nimport { FeatureFlags } from '../../types';\n\n@Injectable({ providedIn: 'root' })\nexport class FeatureFlagsService extends HttpBaseService implements IFeatureFlagsService {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.serviceName = 'FeatureFlagsService';\n\t}\n\n\tgetFeatureFlags(): Observable {\n\t\tconst headers = this.createContentTypeJsonHeaders();\n\t\tconst url = '/assets/configs/feature-flags.manifest.json';\n\t\treturn this.executeRequest({\n\t\t\trequestUrl: url,\n\t\t\trequestMethod: HttpRequestMethod.Get,\n\t\t\theaders,\n\t\t});\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { Actions, createEffect, ofType } from '@ngrx/effects';\nimport * as fromActions from '../actions';\nimport { catchError, map, switchMap } from 'rxjs';\nimport { FeatureFlagsService } from '../../infrastructure/services/feature-flags.service';\n\n@Injectable()\nexport class FeatureFlagsEffects {\n\n\tgetInitialFeatureFlags$ = createEffect(() =>\n\t\tthis.action$.pipe(\n\t\t\tofType(fromActions.LoadFeatureFlags),\n\t\t\tswitchMap(() => this.featureFlagsService.getFeatureFlags()),\n\t\t\tmap(featureFlags => (fromActions.LoadFeatureFlagsSuccess({payload: { data: featureFlags }}))),\n\t\t\tcatchError((error: Error) => ([fromActions.LoadFeatureFlagsFail({ err: { data: error}}) ]))\n\t\t)\n\t);\n\n\tconstructor(\n\t\tprivate action$: Actions,\n\t\tprivate featureFlagsService: FeatureFlagsService\n\t) {}\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { FeatureFlags } from '../types';\n\nexport interface IFeatureFlagsService {\n\tgetFeatureFlags(): Observable;\n}\n\nexport const FEATURE_FLAGS_SERVICE = new InjectionToken('feature-flags.service');\n","import { createSelector } from '@ngrx/store';\nimport {\n\tAppFeatureFlagsState,\n\tFeatureFlagsState,\n\tselectFeatureFlags,\n\tselectFeatureFlagsLoaded,\n\tselectFeatureFlagsLoading,\n\tselectFeatureFlagsState,\n} from '../reducers';\nimport { FeatureFlag } from '../../types';\n\nexport const getFeatureFlagsState = createSelector(\n\tselectFeatureFlagsState,\n\t(state: AppFeatureFlagsState): FeatureFlagsState => state.flags\n);\n\nexport const getFeatureFlags = createSelector(getFeatureFlagsState, selectFeatureFlags);\nexport const getFeatureFlagsLoaded = createSelector(getFeatureFlagsState, selectFeatureFlagsLoaded);\nexport const getFeatureFlagsLoading = createSelector(getFeatureFlagsState, selectFeatureFlagsLoading);\n\nexport const getFeatureFlagEnabled = (featureFlag: FeatureFlag) =>\n\tcreateSelector(getFeatureFlags, (flags) => flags[featureFlag] ?? false);\n","import { Injectable, inject } from '@angular/core';\nimport { IFeatureFlagsFacadeService } from '../../domain';\nimport { Store, select } from '@ngrx/store';\nimport { AppFeatureFlagsState } from '../reducers';\nimport { LoadFeatureFlags } from '../actions';\nimport { FeatureFlag } from '../../types';\nimport { getFeatureFlagEnabled } from '../selectors';\nimport { Observable } from 'rxjs';\n\n@Injectable()\nexport class FeatureFlagsFacadeService implements IFeatureFlagsFacadeService {\n\tprivate readonly store$:Store = inject(Store);\n\n\tloadFeatureFlags(): void {\n\t\t\tthis.store$.dispatch(LoadFeatureFlags());\n\t}\n\n\tfeatureFlagEnabled(featureFlag: FeatureFlag): Observable {\n\t\treturn this.store$.pipe(select(getFeatureFlagEnabled(featureFlag)));\n\t}\n}\n","import { inject } from '@angular/core';\nimport { FEATURE_FLAGS_FACADE } from '../domain';\n\nexport const initializeFeatureFlags = () => {\n\tconst featureFlagsFacade = inject(FEATURE_FLAGS_FACADE);\n\treturn () => featureFlagsFacade.loadFeatureFlags();\n};\n","import { APP_INITIALIZER, InjectionToken, ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { ActionReducerMap, StoreModule } from '@ngrx/store';\nimport { AppFeatureFlagsState, featureFlagsStoreKey, reducers } from './+state/reducers';\nimport { EffectsModule } from '@ngrx/effects';\nimport { FeatureFlagsEffects } from './+state/effects/feature-flags.effects';\nimport { FEATURE_FLAGS_FACADE, FEATURE_FLAGS_SERVICE } from './domain';\nimport { FeatureFlagsFacadeService } from './+state/facades';\nimport { initializeFeatureFlags } from './app-initializers';\nimport { FeatureFlagsService } from './infrastructure/services/feature-flags.service';\n\nconst FEATURE_FLAGS_REDUCER_TOKEN = new InjectionToken>('Feature Flags Reducer');\n\nconst getReducers = (): ActionReducerMap => ({\n\t...reducers,\n});\n\nconst effects = [FeatureFlagsEffects];\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tStoreModule.forFeature(featureFlagsStoreKey, FEATURE_FLAGS_REDUCER_TOKEN),\n\t\tEffectsModule.forFeature(effects),\n\t],\n\tproviders: [\n\t\t{\n\t\t\tprovide: FEATURE_FLAGS_REDUCER_TOKEN,\n\t\t\tuseFactory: getReducers,\n\t\t},\n\t\t{\n\t\t\tprovide: FEATURE_FLAGS_FACADE,\n\t\t\tuseClass: FeatureFlagsFacadeService,\n\t\t},\n\t\t{\n\t\t\tprovide: FEATURE_FLAGS_SERVICE,\n\t\t\tuseClass: FeatureFlagsService\n\t\t}\n\t],\n})\nexport class FeatureFlagsModule {\n\tconstructor(@Optional() @SkipSelf() parentModule: FeatureFlagsModule) {\n\t\tthis.throwIfAlreadyLoaded(parentModule, 'SharedFeatureFlagsModule');\n\t}\n\n\tstatic forRoot(): ModuleWithProviders {\n\t\treturn {\n\t\t\tngModule: FeatureFlagsModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: APP_INITIALIZER,\n\t\t\t\t\tuseFactory: () => initializeFeatureFlags(),\n\t\t\t\t\tdeps: [FEATURE_FLAGS_FACADE],\n\t\t\t\t\tmulti: true,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t}\n\n\tprivate throwIfAlreadyLoaded(parentModule: FeatureFlagsModule, moduleName: string) {\n\t\tif (parentModule) {\n\t\t\tthrow new Error(`${moduleName} has already been loaded. Import ${moduleName} in the AppModule only.`);\n\t\t}\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport {\n\tEcosTableModule,\n\tEcosModalContainerModule,\n\tSharedMaterialModule,\n\tEcosCloseButtonModule,\n\tEcosIconButtonModule,\n\tEcosTextButtonModule,\n} from '@ecos/ui';\nimport { NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { FilePreviewViewComponent } from './file-preview-view.component';\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tSharedMaterialModule,\n\t\tEcosTextButtonModule,\n\t\tEcosIconButtonModule,\n\t\tEcosCloseButtonModule,\n\t\tEcosTableModule,\n\t\tEcosModalContainerModule,\n\t\tTranslateModule,\n\t],\n\tdeclarations: [FilePreviewViewComponent],\n\texports: [FilePreviewViewComponent],\n})\nexport class EcosFilePreviewModule {}\n","import { InjectionToken } from '@angular/core';\nimport { DataRow } from '../models';\n\n\nexport type FilePreviewData = { filename: string; filePreview: T[] };\n\nexport const PREVIEW_DATA = new InjectionToken>('PREVIEW_DATA');\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInject,\n\tOnInit,\n\tOutput,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { DataRow } from '../models';\nimport { PREVIEW_DATA } from '../abstractions';\n\n@Component({\n\tselector: 'geo-data-preview-file-preview-view',\n\ttemplateUrl: './file-preview-view.component.html',\n\tstyleUrls: ['./file-preview-view.component.scss'],\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class FilePreviewViewComponent implements OnInit {\n\t@Output() closePreview = new EventEmitter();\n\theader: DataRow;\n\tconstructor(\n\t\t@Inject(PREVIEW_DATA)\n\t\tpublic data: { filename: 'string'; filePreview: DataRow[] }\n\t) {}\n\n\tngOnInit(): void {\n\t\tthis.setHeader();\n\t}\n\n\tsetHeader(): void {\n\t\tif (this.data.filePreview.length > 0) {\n\t\t\tthis.header = Object.keys(this.data.filePreview[0]).reduce(\n\t\t\t\t(previous, current) => ({ ...previous, [current]: current }),\n\t\t\t\t{}\n\t\t\t);\n\t\t}\n\t}\n\n\tonClose(): void {\n\t\tthis.closePreview.emit(true);\n\t}\n}\n","
\n\t\n\t\t
\n\t\t\t{{ 'DATA_PREVIEW.PREVIEW' | translate }}: \n\t\t\t{{ data.filename }}\n\t\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t \n\t\t
\n\t\t\n\t\t\n\t
\n
\n","import { inject, Injectable, Injector, Optional } from '@angular/core';\nimport { map, Observable, of } from 'rxjs';\nimport { FilePreviewViewComponent } from '../file-preview';\nimport { ComponentPortal } from '@angular/cdk/portal';\nimport { Overlay } from '@angular/cdk/overlay';\nimport {\n\tisCsvFile,\n\tisXlsxFile,\n} from '@ecos/utils';\nimport { checkForEmptyHeader } from '../utils';\nimport {\n\tCSV_PARSER_SERVICE, DEFAULT_PARSED_NUMBER_OF_ROWS,\n\tEXCEL_PARSER_SERVICE, FilePreviewData,\n\tIParsingService,\n\tPREVIEW_DATA\n} from '../abstractions';\n\n@Injectable()\nexport class ParsingService implements IParsingService {\n\n\tprivate readonly csvParserService = inject(CSV_PARSER_SERVICE);\n\tprivate readonly excelParserService = inject(EXCEL_PARSER_SERVICE);\n\n\tconstructor(private injector?: Injector, @Optional() private overlay?: Overlay) {}\n\n\tgetXlsxPreviewData(file: File, containsHeaders: boolean, worksheetName: string, numberOfRows?: number | undefined): Observable {\n return this.excelParserService.getXlsxPreviewData(file, containsHeaders,worksheetName,numberOfRows);\n\t}\n\n\tgetCsvPreviewData(\n\t\tfile: File,\n\t\tcontainsHeaders: boolean,\n\t\tnumberOfRows = DEFAULT_PARSED_NUMBER_OF_ROWS\n\t): Observable {\n\n\t\tconst duplicateHeaders: { name: string; index: number }[] = [];\n\t\tconst transformHeader = (header: string, index?: number) => {\n\t\t\theader = checkForEmptyHeader(header, index ?? 0);\n\t\t\tconst duplicateIndex = duplicateHeaders.map((x) => x.name).indexOf(header);\n\t\t\tif (duplicateIndex !== -1) {\n\t\t\t\tconst newIndex = duplicateHeaders[duplicateIndex].index + 1;\n\t\t\t\tconst newHeader = `${header}_${newIndex}`;\n\t\t\t\tduplicateHeaders[duplicateIndex].index = newIndex;\n\t\t\t\treturn newHeader;\n\t\t\t} else {\n\t\t\t\tduplicateHeaders.push({ name: header, index: 0 });\n\t\t\t\treturn header;\n\t\t\t}\n\t\t};\n\n\t\treturn this.csvParserService.parse(file, containsHeaders, transformHeader, numberOfRows || 0)\n\t\t\t.pipe(map(e => e.resultData));\n\t}\n\n\tshowPreview(filename: string, filePreview: T[]): void {\n\t\tif (!this.overlay) {\n\t\t\tthrow new Error('Overlay not initialized!');\n\t\t}\n\t\tconst options = {\n\t\t\thasBackdrop: true,\n\t\t\theight: 550,\n\t\t\twidth: 850,\n\t\t\tpositionStrategy: this.overlay.position().global().centerHorizontally().centerVertically(),\n\t\t};\n\t\tconst overlayRef = this.overlay.create(options);\n\t\tconst portal = new ComponentPortal(FilePreviewViewComponent, null, this.createInjector({ filename, filePreview } as FilePreviewData));\n\t\toverlayRef.attach(portal).instance.closePreview.subscribe(() => overlayRef.dispose());\n\t}\n\n\tgetHeaders(file: File, worksheetName?: string): Observable {\n\t\tif (isXlsxFile(file)) {\n\t\t\treturn this.excelParserService.getXlsxHeaders(file, worksheetName);\n\t\t} else if(isCsvFile(file)) {\n\t\t\treturn this.csvParserService.getHeaders(file);\n\t\t}\n\n\t\treturn of([]);\n\t}\n\n\thasValidContent(\n\t\tfile: File,\n\t\tworksheetName: string,\n\t\tminRows: number,\n\t\tminColumns: number,\n\t\thasHeaders = false,\n\t\tmaxRows?: number,\n\t\tcheckDataTypes?: boolean\n\t): Observable {\n\t\tconst fileExtension = file.name.split('.').pop();\n\n\t\tif (hasHeaders) {\n\t\t\tminRows = minRows + 1;\n\t\t\tif (maxRows) {\n\t\t\t\tmaxRows = maxRows + 1;\n\t\t\t}\n\t\t}\n\n\t\tswitch (fileExtension) {\n\t\t\tcase 'xlsx':\n\t\t\t\treturn this.excelParserService.xlsHasValidContent(file, hasHeaders, worksheetName, minRows, minColumns, maxRows, checkDataTypes);\n\t\t\tcase 'csv':\n\t\t\t\treturn this.csvParserService.csvHasValidContent(file, minRows, minColumns, maxRows);\n\t\t\tdefault:\n\t\t\t\treturn of(false);\n\t\t}\n\t}\n\n\treadExcelWorksheetNames(file: File): Observable {\n\t\treturn this.excelParserService.readExcelWorksheetNames(file);\n\t}\n\n\tprivate createInjector(dataToPass: unknown): Injector {\n\t\treturn Injector.create({\n\t\t\tparent: this.injector,\n\t\t\tproviders: [{ provide: PREVIEW_DATA, useValue: dataToPass }],\n\t\t});\n\t}\n}\n","export const DEFAULT_PARSED_NUMBER_OF_ROWS = 25;\n","import { parse, ParseLocalConfig, Parser, ParseResult } from 'papaparse';\nimport { FileParseResult, ICsvParserService } from '../abstractions';\nimport { Injectable } from '@angular/core';\nimport { BaseService } from '@ecos/abstractions';\nimport { Observable, Subscriber } from 'rxjs';\n\n@Injectable()\nexport class CsvParserService extends BaseService implements ICsvParserService {\n\tconstructor() {\n\t\tsuper();\n\t\tthis.serviceName = 'Csv Parser';\n\t\tthis.logServiceInitialization();\n\t}\n\n\tparse(file: File,\n\t\t\t\t\t hasColumnHeaders: boolean,\n\t\t\t\t\t transformHeader: (header: string, index?: number) => string,\n\t\t\t\t\t previewNoOfRows?: number): Observable> {\n\t\treturn new Observable>((observer) => {\n\t\t\tconst parserConfig = this.createLocalFileParseConfig(\n\t\t\t\thasColumnHeaders,\n\t\t\t\ttransformHeader,\n\t\t\t\tobserver,\n\t\t\t\tpreviewNoOfRows);\n\t\t\tparse(file, parserConfig);\n\t\t});\n\t}\n\n\tgetHeaders(file: File): Observable {\n\t\treturn new Observable((observer) => {\n\t\t\tlet headers: string[];\n\n\t\t\tparse(file, {\n\t\t\t\tstep: (result, parser) => {\n\t\t\t\t\theaders = result.data as string[];\n\t\t\t\t\tparser.abort();\n\t\t\t\t},\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tobserver.next(headers);\n\t\t\t\t\tobserver.complete();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tpublic csvHasValidContent(file: File, minRows: number, minColumns: number, maxRows?: number): Observable {\n\t\treturn new Observable((observer) => {\n\t\t\tlet numberOfRows = 0;\n\t\t\tlet numberOfColumns = 0;\n\t\t\tparse(file, {\n\t\t\t\theader: true,\n\t\t\t\tskipEmptyLines: true,\n\t\t\t\tstep: (value, parser: Parser): void => {\n\t\t\t\t\tif (value.data === null) {\n\t\t\t\t\t\tparser.abort();\n\t\t\t\t\t}\n\t\t\t\t\tnumberOfRows++;\n\n\t\t\t\t\tnumberOfColumns = this.validateColumnCount(numberOfRows, minColumns, numberOfColumns, value.data, parser);\n\t\t\t\t\tconst maxRowsFullfiled = this.validateMaxRows(maxRows, numberOfRows, parser);\n\t\t\t\t\tthis.validateMinRows(minRows, numberOfRows, maxRowsFullfiled, parser);\n\t\t\t\t},\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tconst validity =\n\t\t\t\t\t\t((minRows && numberOfRows >= minRows) || !minRows) &&\n\t\t\t\t\t\tnumberOfColumns >= minColumns &&\n\t\t\t\t\t\t((maxRows && numberOfRows <= maxRows) || !maxRows);\n\n\t\t\t\t\tobserver.next(validity);\n\t\t\t\t\tobserver.complete();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\tcsvHasValidRowsNumber(file: File, maxNoOfRows: number): Observable {\n\t\treturn new Observable((observer) => {\n\t\t\tlet numberOfRows = 0;\n\t\t\tparse(file, {\n\t\t\t\theader: true,\n\t\t\t\tskipEmptyLines: true,\n\t\t\t\tstep: (_value, parser) => {\n\t\t\t\t\tnumberOfRows++;\n\t\t\t\t\tif (numberOfRows > maxNoOfRows) {\n\t\t\t\t\t\tparser.abort();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tcomplete: () => {\n\t\t\t\t\tif (numberOfRows <= maxNoOfRows) {\n\t\t\t\t\t\tobserver.next(true);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tobserver.next(false);\n\t\t\t\t\t}\n\t\t\t\t\tobserver.complete();\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t}\n\n\n\tprivate createLocalFileParseConfig(\n\t\thasColumnHeaders: boolean,\n\t\ttransformHeader: (header: string, index?: number) => string,\n\t\tobserver: Subscriber>,\n\t\tpreviewNoOfRows?: number\n\t): ParseLocalConfig {\n\t\treturn {\n\t\t\theader: hasColumnHeaders,\n\t\t\ttransformHeader,\n\t\t\tskipEmptyLines: true,\n\t\t\tdynamicTyping: true,\n\t\t\tpreview: previewNoOfRows,\n\t\t\ttransform: (value: string): string => value ?? '',\n\t\t\tcomplete: (result: ParseResult) => {\n\t\t\t\tconst data = result.data.filter(e => Object.values(e as never).some(value => !!value || e === 0));\n\t\t\t\tobserver.next({\n\t\t\t\t\tresultData: data,\n\t\t\t\t\tmetadata: { totalRows: data.length }\n\t\t\t\t});\n\t\t\t\tobserver.complete();\n\t\t\t},\n\t\t\terror: (e) => {\n\t\t\t\tconsole.error(e);\n\t\t\t\tobserver.error(e);\n\t\t\t}\n\t\t};\n\n\n\t}\n\n\tprivate validateMinRows(minRows: number, numberOfRows: number, maxRowsFullfiled: boolean, parser: Parser): void {\n\t\t// if we no longer need to count the max rows and the min is fullfilled, abort the process\n\t\tif (minRows) {\n\t\t\tif (numberOfRows >= minRows && maxRowsFullfiled) {\n\t\t\t\tparser.abort();\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate validateMaxRows(maxRows: number | undefined, numberOfRows: number, parser: Parser): boolean {\n\t\tlet maxRowsFullfiled = false;\n\t\tif (maxRows) {\n\t\t\tif (numberOfRows > maxRows) {\n\t\t\t\tparser.abort();\n\t\t\t}\n\t\t} else {\n\t\t\tmaxRowsFullfiled = true;\n\t\t}\n\t\treturn maxRowsFullfiled;\n\t}\n\n\tprivate validateColumnCount(numberOfRows: number, minColumns: number, numberOfColumns: number, row: unknown, parser: Parser): number {\n\t\t// only count the columns if requested and only once\n\t\tif (numberOfRows === 1 && minColumns) {\n\t\t\tnumberOfColumns = Object.keys(row as object).length;\n\t\t\tif (numberOfColumns < minColumns) {\n\t\t\t\tparser.abort();\n\t\t\t}\n\t\t}\n\t\treturn numberOfColumns;\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { IFileValidationService } from '@ecos/abstractions';\n\nimport { Observable, of } from 'rxjs';\n\nexport const FILE_SIZE_1MB = 1024 * 1024; // 1 MB\n@Injectable()\nexport class FileValidationService implements IFileValidationService {\n\thasValidFormat(file: File, validFileTypes: Array = ['.svg']): Observable {\n\t\tconst fileFormat = file.name.split('.').pop();\n\t\treturn of(fileFormat !== undefined && validFileTypes.indexOf(`.${fileFormat}`) > -1);\n\t}\n\n\thasValidSize(file: File, sizeInBytes = FILE_SIZE_1MB): Observable {\n\t\treturn of(file.size <= sizeInBytes);\n\t}\n}\n","import { map, Observable } from 'rxjs';\nimport * as XLSX from 'xlsx';\nimport { FileParseResult, IExcelParserService, DEFAULT_PARSED_NUMBER_OF_ROWS } from '../abstractions';\nimport { Injectable } from '@angular/core';\n\n@Injectable()\nexport class ExcelParserService implements IExcelParserService {\n\n\tgetXlsxPreviewData(\n\t\tfile: File,\n\t\tcontainsHeaders: boolean,\n\t\tworksheetName?: string,\n\t\tnumberOfRows = DEFAULT_PARSED_NUMBER_OF_ROWS\n\t): Observable {\n\t\treturn this.readExcelWorksheets(file, false, true).pipe(\n\t\t\tmap((workBook) => {\n\t\t\t\tconst workSheet = workBook.Sheets[worksheetName || workBook.SheetNames[0]];\n\t\t\t\tconst options: XLSX.Sheet2JSONOpts = {\n\t\t\t\t\tblankrows: false,\n\t\t\t\t};\n\t\t\t\tif (numberOfRows) {\n\t\t\t\t\tconst sheetRef = workSheet['!ref'] ?? '';\n\t\t\t\t\tconst range = XLSX.utils.decode_range(sheetRef);\n\t\t\t\t\trange.s.r = 0;\n\t\t\t\t\trange.e.r = numberOfRows;\n\t\t\t\t\toptions.range = XLSX.utils.encode_range(range);\n\t\t\t\t}\n\t\t\t\tif (!containsHeaders) {\n\t\t\t\t\toptions.header = 'A';\n\t\t\t\t}\n\n\t\t\t\treturn XLSX.utils.sheet_to_json(workSheet, options);\n\t\t\t})\n\t\t);\n\t}\n\n\tgetXlsxHeaders(file: File, worksheetName?: string): Observable {\n\t\treturn this.readExcelWorksheets(file).pipe(\n\t\t\tmap((workBook) => {\n\t\t\t\tconst workSheet = workBook.Sheets[worksheetName || workBook.SheetNames[0]];\n\t\t\t\t// TODO: To revisit on https://application.dentsu.com/browse/LI-5339\n\t\t\t\tconst options: XLSX.Sheet2JSONOpts = {\n\t\t\t\t\tblankrows: false,\n\t\t\t\t\theader: 1,\n\t\t\t\t\traw: false,\n\t\t\t\t\trawNumbers: false,\n\t\t\t\t};\n\t\t\t\tconst sheetRef = workSheet['!ref'];\n\n\t\t\t\tif (!sheetRef) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\n\t\t\t\tconst range = XLSX.utils.decode_range(sheetRef);\n\t\t\t\trange.s.r = 0;\n\t\t\t\trange.e.r = 0;\n\t\t\t\toptions.range = XLSX.utils.encode_range(range);\n\n\t\t\t\treturn (XLSX.utils.sheet_to_json(workSheet, options)[0] ).map((v) => String(v));\n\t\t\t})\n\t\t);\n\t}\n\n\tparseXlsx(\n\t\tfile: File,\n\t\tworksheetName?: string,\n\t\thasColumnHeaders = true\n\t): Observable> {\n\t\treturn this.readExcelWorksheets(file, false, true).pipe(\n\t\t\tmap((workBook) => this.convertWorksheetToJson(workBook, worksheetName, hasColumnHeaders)),\n\t\t\tmap((data: T[]) => ({\n\t\t\t\tresultData: data.map((x) =>\n\t\t\t\t\tObject.fromEntries(Object.entries(x as never).map(([key, value]) => [key.toLowerCase(), String(value)]))\n\t\t\t\t),\n\t\t\t\tmetadata: {\n\t\t\t\t\ttotalRows: data.length,\n\t\t\t\t},\n\t\t\t}) as FileParseResult)\n\t\t);\n\t}\n\n\tconvertWorksheetToJson(\n\t\tworkBook: XLSX.WorkBook,\n\t\tworksheetName?: string,\n\t\thasColumnHeaders = true\n\t): T[] {\n\t\tconst workSheet = workBook.Sheets[worksheetName || workBook.SheetNames[0]];\n\t\tconst options: XLSX.Sheet2JSONOpts = {\n\t\t\tblankrows: false,\n\t\t};\n\t\tif (!hasColumnHeaders) {\n\t\t\tlet columnCount = 0;\n\t\t\tif (workSheet['!ref']) {\n\t\t\t\tcolumnCount = XLSX.utils.decode_range(workSheet['!ref'] ).e.c + 1;\n\t\t\t}\n\t\t\tconst header: string[] = [];\n\t\t\tfor (let i = 0; i < columnCount; i++) {\n\t\t\t\theader[i] = `column ${i + 1}`;\n\t\t\t}\n\t\t\toptions.header = header;\n\t\t}\n\t\treturn XLSX.utils.sheet_to_json(workSheet, options);\n\t};\n\n\t// TODO: Improve so that the entire file is not read by default (we might need a maximum number of rows)\n\tpublic xlsHasValidContent(\n\t\tfile: File,\n\t\thasHeaders: boolean,\n\t\tworksheetName: string,\n\t\tminRows: number,\n\t\tminColumns: number,\n\t\tmaxRows?: number,\n\t\tcheckDataTypes?: boolean\n\t): Observable {\n\t\treturn this.readExcelWorksheets(file, false, true).pipe(\n\t\t\tmap((workBook) => {\n\t\t\t\tconst workSheet = workBook.Sheets[worksheetName];\n\n\t\t\t\tlet sheetRef = '';\n\n\t\t\t\tif (!workSheet?.['!ref']) {\n\t\t\t\t\tif (maxRows) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tsheetRef = workSheet['!ref'];\n\t\t\t\t}\n\n\t\t\t\tconst range = XLSX.utils.decode_range(sheetRef as unknown as string);\n\n\t\t\t\tconst numberOfRows = hasHeaders ? range.e.r + 1 : range.e.r + 2;\n\t\t\t\tconst numberOfColumns = range.e.c + 1;\n\n\t\t\t\tconst respectsRowsAndCols =\n\t\t\t\t\tnumberOfRows >= minRows &&\n\t\t\t\t\tnumberOfColumns >= minColumns &&\n\t\t\t\t\t((maxRows && numberOfRows <= maxRows) || !maxRows);\n\n\t\t\t\t// TODO: hardcodded excel cell type validation\n\t\t\t\tif (checkDataTypes && respectsRowsAndCols) {\n\t\t\t\t\treturn this.checkSheetDataTypes(numberOfColumns, hasHeaders, workSheet);\n\t\t\t\t}\n\n\t\t\t\treturn respectsRowsAndCols;\n\t\t\t})\n\t\t);\n\t}\n\n\txlsxHasValidRowsNumber(file: File, maxNoOFRows: number): Observable {\n\t\treturn this.readExcelWorksheets(file, false, true).pipe(\n\t\t\tmap((workBook) => {\n\t\t\t\tconst workSheet = workBook.Sheets[workBook.SheetNames[0]];\n\n\t\t\t\tconst sheetRef = workSheet['!ref'] as string;\n\t\t\t\tif (!sheetRef) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tconst range = XLSX.utils.decode_range(sheetRef);\n\t\t\t\tconst numberOfRows = range.e.r + 1;\n\t\t\t\treturn numberOfRows <= maxNoOFRows;\n\t\t\t})\n\t\t);\n\t}\n\n\treadExcelWorksheetNames(file: File): Observable {\n\t\treturn this.readExcelWorksheets(file, true).pipe(map((x) => x.SheetNames));\n\t}\n\n\tgetXlsxData(file: File, columnsToValidate?: string[]): Observable {\n\t\treturn this.readExcelWorksheets(file, false, true).pipe(\n\t\t\tmap((workBook) => this.convertWorksheetToJson(workBook)),\n\t\t\tmap((data: T[]) => data.map((d: T) => this.transformXlsxData(d, columnsToValidate)))\n\t\t);\n\t}\n\n\tprivate transformXlsxData(data: T, columnsToValidate?: string[]): T {\n\t\tconst props: T = { frameId: '' } as never ;\n\n\t\tfor (const prop in data) {\n\t\t\tif (columnsToValidate && columnsToValidate.includes(prop)) {\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/ban-ts-comment\n\t\t\t\t// @ts-ignore\n\t\t\t\tprops.frameId = String(data[prop]);\n\t\t\t} else {\n\t\t\t\tprops[prop] = data[prop];\n\t\t\t}\n\t\t}\n\t\treturn props as never;\n\t}\n\n\tprivate readExcelWorksheets(\n\t\tfile: File,\n\t\tonlyWorsheetNames = false,\n\t\tparseEntireFile = false\n\t): Observable {\n\t\t return new Observable((observer) => {\n\t\t\tlet workBook = null;\n\t\t\tconst reader = new FileReader();\n\t\t\treader.onload = (_event: ProgressEvent) => {\n\t\t\t\tconst data = reader.result;\n\n\t\t\t\tworkBook = XLSX.read(data, {\n\t\t\t\t\ttype: 'binary',\n\t\t\t\t\tbookSheets: onlyWorsheetNames,\n\t\t\t\t\tsheetRows: parseEntireFile ? 0 : DEFAULT_PARSED_NUMBER_OF_ROWS,\n\t\t\t\t});\n\n\t\t\t\tobserver.next(workBook);\n\t\t\t};\n\t\t\treader.onloadend = (event: ProgressEvent) => {\n\t\t\t\tif ((event.target as FileReader).error !== null) {\n\t\t\t\t\tconst err = 'The file could not be processed on client-side to validate the content requirements.';\n\t\t\t\t\tconsole.error(err);\n\t\t\t\t\tobserver.error(err);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tobserver.complete();\n\t\t\t};\n\t\t\treader.readAsBinaryString(file);\n\t\t});\n\t }\n\n\tprivate checkSheetDataTypes(numberOfColumns: number, hasHeaders: boolean, workSheet: XLSX.WorkSheet): boolean {\n\t\tconst requiredDataType = 'n'; // denotes numeric datatype\n\n\t\t// checking first row for a number\n\t\tfor (let i = 0; i < numberOfColumns; i++) {\n\t\t\tconst currentCellRef = XLSX.utils.encode_col(i);\n\n\t\t\t// first sheet row when there are no headers in the file\n\t\t\tconst currentCellID = hasHeaders ? `${currentCellRef}2` : `${currentCellRef}1`;\n\t\t\tconst currentCellInfo = workSheet[currentCellID];\n\n\t\t\tif (currentCellInfo) {\n\t\t\t\tconst datatype = 't';\n\t\t\t\tconst currentCellType = currentCellInfo[datatype];\n\n\t\t\t\tif (currentCellType === requiredDataType) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n}\n","import { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { EcosFilePreviewModule } from './file-preview';\nimport { CsvParserService, FileValidationService, ParsingService } from './services';\nimport { CSV_PARSER_SERVICE, EXCEL_PARSER_SERVICE, PARSING_SERVICE } from './abstractions';\nimport { ExcelParserService } from './services/excel-parser.service';\nimport { FILE_VALIDATION_SERVICE } from '@ecos/abstractions';\n\n@NgModule({\n\timports: [CommonModule, EcosFilePreviewModule],\n})\nexport class DataPreviewModule {\n\tconstructor(@Optional() @SkipSelf() parentModule: DataPreviewModule) {\n\t\tthis.throwIfAlreadyLoaded(parentModule, 'DataPreviewModule');\n\t}\n\tstatic forRoot(): ModuleWithProviders {\n\t\treturn {\n\t\t\tngModule: DataPreviewModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: PARSING_SERVICE,\n\t\t\t\t\tuseClass: ParsingService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: CSV_PARSER_SERVICE,\n\t\t\t\t\tuseClass: CsvParserService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: EXCEL_PARSER_SERVICE,\n\t\t\t\t\tuseClass: ExcelParserService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: FILE_VALIDATION_SERVICE,\n\t\t\t\t\tuseClass: FileValidationService,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t}\n\n\tprivate throwIfAlreadyLoaded(parentModule: DataPreviewModule, moduleName: string) {\n\t\tif (parentModule) {\n\t\t\tthrow new Error(`${moduleName} has already been loaded. Import ${moduleName} in the AppModule only.`);\n\t\t}\n\t}\n}\n","import { AppComponent } from './app.component';\nimport { AppComponentsModule } from '../components';\nimport { AppRoutingModule } from './app-routing.module';\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\nimport { BrowserModule } from '@angular/platform-browser';\nimport { CoreModule } from '../core';\nimport { FullscreenOverlayContainer, OverlayContainer } from '@angular/cdk/overlay';\nimport { HttpClientJsonpModule, HttpClientModule } from '@angular/common/http';\nimport { LayoutComponent } from '../pages/layout';\nimport { NgModule } from '@angular/core';\nimport { SharedStoreModule, ThemeService } from '@ecos/store';\nimport { SigninRedirectCallbackComponent, SignoutRedirectCallbackComponent } from '../pages/auth';\n// eslint-disable-next-line @nx/enforce-module-boundaries\nimport { DialogService, EcosDialogModule, EcosIconsModule, SharedUiModule, SnackBarModule } from '@ecos/ui';\nimport { ForbiddenComponent } from '../pages/forbidden';\nimport { LetDirective } from '@ngrx/component';\nimport { StoreDevtoolsModule } from '@ngrx/store-devtools';\nimport { environment } from '../environments/environment';\nimport { NgIdleModule } from '@ng-idle/core';\nimport { FeatureFlagsModule } from '@ecos/feature-flags';\nimport { DataPreviewModule } from '@ecos/data-preview';\nimport { WelcomeComponent } from '../pages/welcome';\n\nconst loginComponents = [SigninRedirectCallbackComponent, SignoutRedirectCallbackComponent];\n\n@NgModule({\n\tdeclarations: [AppComponent, LayoutComponent, ForbiddenComponent, ...loginComponents, WelcomeComponent],\n\timports: [\n\t\tBrowserModule,\n\t\tBrowserAnimationsModule,\n\t\tSharedUiModule,\n\t\tHttpClientModule,\n\t\tHttpClientJsonpModule,\n\t\tLetDirective,\n\t\tEcosIconsModule,\n\t\tAppComponentsModule,\n\t\tCoreModule.forRoot(),\n\t\tNgIdleModule.forRoot(),\n\t\tSnackBarModule.forRoot(),\n\t\tEcosDialogModule.forRoot(),\n\t\tSharedStoreModule.forRoot(),\n\t\tFeatureFlagsModule.forRoot(),\n\t\tDataPreviewModule.forRoot(),\n\t\tStoreDevtoolsModule.instrument({\n\t\t\tname: 'Geo NgRx DevTools & Debugging',\n\t\t\tlogOnly: environment.production,\n\t\t\tmaxAge: 200,\n\t\t\ttrace: !environment.production,\n\t\t}),\n\t\tAppRoutingModule,\n\t],\n\tproviders: [\n\t\tThemeService,\n\t\tDialogService,\n\t\t{ provide: OverlayContainer, useClass: FullscreenOverlayContainer },\n\t\t{ provide: Window, useValue: window },\n\t],\n\tbootstrap: [AppComponent],\n})\nexport class AppModule {}\n","import { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\nimport { ApplicationRef, enableProdMode } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { enableDebugTools } from '@angular/platform-browser';\n\nif (environment.production) {\n\tenableProdMode();\n}\n\nplatformBrowserDynamic()\n\t.bootstrapModule(AppModule)\n\t.then((module) => enableDebugTools(module.injector.get(ApplicationRef).components[0]))\n\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return\n\t.catch((err) => console.error(err));\n","export enum ChoroplethSegmentationType {\n\tQuantiles = 'Quantiles',\n\tEqualIntervals = 'EqualIntervals',\n\tCustom = 'Custom',\n\tColumnValues = 'ColumnValues',\n}\n","export enum ImportFileFormat {\n\tCommaSeparatedValues = 'CommaSeparatedValues',\n\tFixedWidth = 'FixedWidth',\n\tXlsx = 'Xlsx',\n\tGeoJSON = 'GeoJSON',\n\tShp = 'Shp',\n\tShx = 'Shx',\n\tDbf = 'Dbf',\n\tSbn = 'Sbn',\n\tSbx = 'Sbx',\n\tPrj = 'Prj',\n\tCpg = 'Cpg',\n\tKml = 'Kml',\n\tKmz = 'Kmz',\n\tNothing = 'Nothing',\n}\n","export interface LayerFilters {\n\tlayerKey: string;\n\tfilters: LayerFilter[];\n}\n\nexport interface LayerFilter {\n\tfilterType: FilterType;\n}\n\nexport interface ShapeFilter extends LayerFilter {\n\tshapeId: string;\n\tselected: boolean;\n}\n\nexport interface FramesFilter extends LayerFilter {\n\tids: string[];\n}\n\nexport interface ReduceFilter extends LayerFilter {\n\tfilterType: FilterType.LookUp;\n\tids: string[];\n}\n\nexport enum FilterType {\n\tNone = '',\n\tLookUp = 'lookup',\n\tGeoSpatialIntersection = 'geoSpatialIntersection',\n\tGeoSpatialDistance = 'geoSpatialDistance',\n}\n","export enum LayerType {\n\tGeoBoundaries = 'GeoBoundaries',\n\tPoints = 'Points',\n\tLines = 'Lines',\n\tShapeAndMarker = 'ShapeAndMarker',\n\tTravelRadius = 'TravelRadius',\n\tChoropleth = 'Choropleth',\n\tPlace = 'Place',\n\tCrossLayerAnalysis = 'CrossLayerAnalysis',\n\tNone = 'None',\n}\n","export enum Units {\n\tMeters = 'meters',\n\tMillimeters = 'millimeters',\n\tCentimeters = 'centimeters',\n\tKilometers = 'kilometers',\n\tMiles = 'miles',\n\tInches = 'inches',\n\tYards = 'yards',\n\tFeet = 'feet',\n}\n","export enum BusinessCase {\n\tFrames = 'Frames',\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ShapeMatchingDetails } from './shape-matching-details.model';\n\nexport interface IAdHocAudienceShapeMatchingProcessorService {\n\tgetShapeMatching(\n\t\tshapeIds: string[],\n\t\tselectedDatasetId: string,\n\t\tshapeMatchingId: string,\n\t\tselectedGeographyData: string,\n\t\tkey?: string\n\t): Observable;\n}\n\nexport const AD_HOC_AUDIENCE_SHAPE_MATCHING_PROCESSOR_SERVICE =\n\tnew InjectionToken(\n\t\t'shared.adHocAudienceShapeMatchingProcessorervice'\n\t);\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ShapeMatchingDetails } from './shape-matching-details.model';\nimport { ShapeMatchingWarningInfo } from './shape-matching-warning-info.model';\n\nexport interface IChoroplethShapeMatchingDetailsFacade {\n\taddShapeMatchingDetails(shapeMatchingDetails: ShapeMatchingDetails): void;\n\tgetShapeMatchingDetailsById(id: string): Observable;\n\tgetShapeMatchingDetailsByLayerKey(layerKey: string): Observable;\n\thasShapeMatchingError(id: string): Observable;\n\tgetShapeMatchingWarningInfo(id: string): Observable;\n\tremoveShapeMatchingDetails(shapeMatchingId: string): void;\n}\n\nexport const CHOROPLETH_SHAPE_MATCHING_DETAILS_FACADE: InjectionToken<\n\tIChoroplethShapeMatchingDetailsFacade\n> = new InjectionToken(\n\t'shared.shape-matching-details-facade'\n);\n","import { InjectionToken } from '@angular/core';\n\nexport interface ProjectInitialization {\n\tcreateNew(): void;\n}\n\nexport const PROJECT_INITIALIZATION_TOKEN = new InjectionToken(\n\t'shared.projects.initializationService'\n);\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ShapeMatchingResult } from './shape-matching-result.model';\n\nexport interface IShapeMatchingService {\n\tgetShapeMatchingResult(key: string, shapeIds: string[]): Observable;\n}\n\nexport const MAPS_CHOROPLETH_SHAPE_MATCHING_SERVICE = new InjectionToken(\n\t'shared.shapeMatchingService'\n);\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { BusinessCase, BusinessUse } from '../models';\n\nexport interface IWellKnownDatasetsFacade {\n\tloadWellKnownDatasets(): void;\n\tcheckWellKnownDatasetsLoaded(): Observable;\n\tisWellKnownDataset(id: string): Observable;\n\tgetBusinessUses(businessCase: BusinessCase.Frames): Observable;\n}\n\nexport const WELL_KNOWN_DATASETS_FACADE: InjectionToken = new InjectionToken(\n\t'map.well-known-datasets-facade',\n);\n","import { inject, Injectable } from '@angular/core';\nimport { LoggingService, Severity } from '@ecos/logging';\n\n@Injectable()\nexport abstract class BaseService {\n\tprotected serviceName = 'BaseService';\n\tprotected loggingService = inject(LoggingService);\n\n\tprotected logServiceInitialization() {\n\t\tthis.loggingService.log(this.serviceName, Severity.Information, 'Successfully instantiated!');\n\t}\n}\n","export enum CustomErrorType {\n\tInfo = 0,\n\tWarning = 1,\n\tSystemError = 2\n}\n\nexport class CustomError extends Error {\n\tmessageParams: { [key: string]: string } | undefined;\n\terrorType: CustomErrorType;\n\n\tprivate constructor(message: string, messageParams?: {\n\t\t[key: string]: string;\n\t}, stacktrace = 'n/a', errorType = CustomErrorType.Warning) {\n\t\tsuper(message);\n\t\tthis.stack = stacktrace;\n\t\tthis.messageParams = messageParams;\n\t\tthis.errorType = errorType;\n\t}\n\n\tstatic create(message: string, messageParams?: {\n\t\t[key: string]: string;\n\t}, stacktrace = 'n/a', errorType = CustomErrorType.Warning): CustomError {\n\t\treturn new CustomError(message, messageParams, stacktrace, errorType);\n\t}\n}\n","export enum InternalHttpHeaders {\n\tETag = 'ETag',\n\tIfMatch = 'If-Match',\n\tIfNoneMatch = 'If-None-Match',\n\tContentType = 'Content-Type',\n}\n","export interface RequestStatusResponse {\n\tstatusId: StatusId;\n\tstatusName: string;\n\tindicatesCompletion: boolean;\n\tresourceItem: ResourceItem;\n\tvalidationErrors: string[];\n\terror: string;\n}\n\nexport interface ResourceItem {\n\tid: string;\n\ttype: string;\n}\n\nexport enum StatusId {\n\tInProgress = 0,\n\tInvalid = 100,\n\tProcessedSuccessfully = 200,\n\tProcessedWithErrors = 300,\n}\n","import { BaseService } from '../common/base.service';\nimport { Observable } from 'rxjs';\nimport { HttpClient, HttpHeaders, HttpResponse } from '@angular/common/http';\nimport { HttpRequestOptionsWithBody, HttpRequestOptionsWithResponse } from './http-request-options.interface';\nimport { inject } from '@angular/core';\nimport { InternalHttpHeaders } from '../api-models';\n\nexport abstract class HttpBaseService extends BaseService {\n\tprotected override serviceName = 'HttpBaseService';\n\tprivate readonly http = inject(HttpClient);\n\n\tprotected createContentTypeJsonHeaders(headers: HttpHeaders | null = null): HttpHeaders {\n\t\tif (headers == null) {\n\t\t\theaders = new HttpHeaders();\n\t\t}\n\t\treturn headers.set(InternalHttpHeaders.ContentType, 'application/json');\n\t}\n\n\t// TODO Review this\n\tprotected createDefaultAndIfMatchedHeaders(projectEtag: string): HttpHeaders {\n\t\tconst headers = this.createContentTypeJsonHeaders();\n\t\treturn headers.set(InternalHttpHeaders.IfMatch, JSON.stringify(projectEtag));\n\t}\n\n\tprotected createCachelessHeaders(): HttpHeaders {\n\t\tconst referenceDate = new Date(Date.now());\n\t\treferenceDate.setDate(referenceDate.getDate() - 2);\n\t\tconst modifiedSince = referenceDate.toUTCString();\n\n\t\treturn new HttpHeaders()\n\t\t\t.set('Cache-Control', 'no-cache')\n\t\t\t.set('Pragma', 'no-cache')\n\t\t\t.set('If-Modified-Since', modifiedSince);\n\t}\n\n\tprotected executeRequest(requestOptions: HttpRequestOptionsWithBody): Observable {\n\t\treturn this.http.request(requestOptions.requestMethod.toString(), requestOptions.requestUrl, requestOptions);\n\t}\n\n\tprotected executeRequestForImage(url: string): Observable {\n\t\treturn this.http.get(url, { responseType: 'blob' });\n\t}\n\n\tprotected executeRequestAndGetFullResponse(\n\t\trequestOptions: HttpRequestOptionsWithResponse\n\t): Observable> {\n\t\treturn this.http.request(requestOptions.requestMethod.toString(), requestOptions.requestUrl, {\n\t\t\t...requestOptions,\n\t\t\tobserve: 'response',\n\t\t});\n\t}\n}\n","import { HttpContextToken } from '@angular/common/http';\n\nexport const IS_PUBLIC_API = new HttpContextToken(() => false);\nexport const SHOW_LOADER = new HttpContextToken(() => true);\n","export enum HttpRequestMethod {\n\tGet = 'GET',\n\tPost = 'POST',\n\tPut = 'PUT',\n\tDelete = 'DELETE',\n\tHead = 'HEAD',\n\tPatch = 'PATCH',\n\tOptions = 'OPTIONS',\n}\n","import { InjectionToken } from '@angular/core';\n\nexport type EventBusHandler = ({ payload }: { payload: T }) => void;\n\nexport interface IEventBus {\n\tpublish(channel: string, payload: T): void;\n\tregister(channel: string, schema: Record): boolean;\n\tsubscribe(channel: string, eventHandler: EventBusHandler): void;\n\tunsubscribe(channel: string): void;\n\tunregister(channel:string):boolean;\n}\n\nexport const EVENT_BUS = new InjectionToken('app.event-bus');\n","import { Inject, Injectable } from '@angular/core';\nimport { ProjectInitialization } from '../abstractions';\nimport { EVENT_BUS, IEventBus } from '../event-bus';\n\n@Injectable()\nexport class ProjectInitializationService implements ProjectInitialization {\n\tconstructor(@Inject(EVENT_BUS) private readonly eventBus: IEventBus) {\n\t\tthis.eventBus.register('dataset-manager:new-project', {\n\t\t\ttype: 'object',\n\t\t\trequired: ['createNewProject'],\n\t\t\tproperties: {\n\t\t\t\tcreateNewProject: {\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n\n\tcreateNew(): void {\n\t\tthis.eventBus.publish('dataset-manager:new-project', { createNewProject: true });\n\t}\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface INotificationService {\n\tpendingJobsNotificationsAvailable$: Observable;\n\tsharedProjectsNotificationsAvailable$: Observable;\n\tinit(): void;\n}\n\nexport const NOTIFICATIONS_SERVICE = new InjectionToken('app.notifications');\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface INotificationProvider {\n\tnotificationsAvailable(): Observable;\n}\n\nexport const JOBS_NOTIFICATIONS_PROVIDER = new InjectionToken('app.jobs-notifications-provider');\nexport const PROJECTS_NOTIFICATIONS_PROVIDER = new InjectionToken('app.projects-notifications-provider');\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface IFileValidationService {\n\thasValidFormat(file: File, validFormats: string[]): Observable;\n}\n\nexport const FILE_VALIDATION_SERVICE = new InjectionToken('app.file-validation-service');\n","import { CommonModule } from '@angular/common';\nimport {\n\tDOMAIN_CONFIG,\n\tDomainConfigService,\n\tDOCS_CONFIG,\n\tDocsConfigService,\n\tISOCHRONE_CONFIG,\n\tIsochroneConfigService,\n\tAPP_CONFIG,\n\tAppConfigService,\n\tNotificationsConfigService,\n\tNOTIFICATIONS_CONFIG,\n\tINSIGHTS_CONFIG,\n\tInsightsConfigService,\n\tPROJECT_CONFIG,\n\tProjectConfigService,\n} from './services';\nimport { ENV_CONFIG, EnvironmentConfig } from './models';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\n\n@NgModule({\n\timports: [CommonModule],\n})\nexport class ConfigurationModule {\n\tstatic forRoot(config: EnvironmentConfig): ModuleWithProviders {\n\t\treturn {\n\t\t\tngModule: ConfigurationModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: ENV_CONFIG,\n\t\t\t\t\tuseValue: config,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: DOMAIN_CONFIG,\n\t\t\t\t\tuseClass: DomainConfigService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: DOCS_CONFIG,\n\t\t\t\t\tuseClass: DocsConfigService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: APP_CONFIG,\n\t\t\t\t\tuseClass: AppConfigService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: ISOCHRONE_CONFIG,\n\t\t\t\t\tuseClass: IsochroneConfigService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: NOTIFICATIONS_CONFIG,\n\t\t\t\t\tuseClass: NotificationsConfigService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: INSIGHTS_CONFIG,\n\t\t\t\t\tuseClass: InsightsConfigService,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: PROJECT_CONFIG,\n\t\t\t\t\tuseClass: ProjectConfigService,\n\t\t\t\t}\n\t\t\t],\n\t\t};\n\t}\n}\n","import { InjectionToken } from '@angular/core';\nimport { DomainConfig } from './domain-config.interface';\nimport { DocsConfig } from './docs-config.interface';\nimport { IsochroneConfig } from './isochrone-config.interface';\nimport { AppConfig } from './app-config.interface';\nimport { NotificationsConfig } from './notifications-config.interface';\nimport { InsightsConfig } from './insights-config.interface';\nimport { ProjectConfig } from './project-config.interface';\n\nexport interface EnvironmentConfig {\n\tenvironment: {\n\t\tappConfig: AppConfig;\n\t\tdomainConfig: DomainConfig;\n\t\tdocsConfig: DocsConfig;\n\t\tisochroneConfig: IsochroneConfig;\n\t\tnotificationsConfig: NotificationsConfig;\n\t\tinsightsConfig: InsightsConfig;\n\t\tprojectConfig: ProjectConfig;\n\t};\n}\n\nexport const ENV_CONFIG = new InjectionToken('EnvironmentConfig');\n","import { DomainConfig, ENV_CONFIG, EnvironmentConfig } from '../models';\nimport { Inject, Injectable, InjectionToken } from '@angular/core';\n\n@Injectable()\nexport class DomainConfigService {\n\tprivate domainConfig: DomainConfig;\n\n\tconstructor(@Inject(ENV_CONFIG) private config: EnvironmentConfig) {\n\t\tthis.domainConfig = this.config.environment.domainConfig;\n\t}\n\n\tgetConfig(key: K): T[K] {\n\t\treturn (this.domainConfig as T)[key];\n\t}\n}\n\nexport const DOMAIN_CONFIG = new InjectionToken('EnvironmentConfig.Domain');\n","import { ENV_CONFIG, EnvironmentConfig, DocsConfig } from '../models';\nimport { Inject, Injectable, InjectionToken } from '@angular/core';\n\n@Injectable()\nexport class DocsConfigService {\n\tprivate docsConfig: DocsConfig;\n\n\tconstructor(@Inject(ENV_CONFIG) private config: EnvironmentConfig) {\n\t\tthis.docsConfig = this.config.environment.docsConfig;\n\t}\n\n\tgetConfig(key: K): T[K] {\n\t\treturn (this.docsConfig as T)[key];\n\t}\n}\n\nexport const DOCS_CONFIG = new InjectionToken('EnvironmentConfig.Docs');\n","import { ENV_CONFIG, EnvironmentConfig } from '../models';\nimport { Inject, Injectable, InjectionToken } from '@angular/core';\nimport { IsochroneConfig } from '../models/isochrone-config.interface';\n\n@Injectable()\nexport class IsochroneConfigService {\n\tprivate isochroneConfig: IsochroneConfig;\n\n\tconstructor(@Inject(ENV_CONFIG) private config: EnvironmentConfig) {\n\t\tthis.isochroneConfig = this.config.environment.isochroneConfig;\n\t}\n\n\tgetConfig(key: K): T[K] {\n\t\treturn (this.isochroneConfig as T)[key];\n\t}\n}\n\nexport const ISOCHRONE_CONFIG = new InjectionToken('EnvironmentConfig.Isochrone');\n","import { ENV_CONFIG, EnvironmentConfig, AppConfig } from '../models';\nimport { Inject, Injectable, InjectionToken } from '@angular/core';\n\n@Injectable()\nexport class AppConfigService {\n\tprivate appConfig: AppConfig;\n\n\tconstructor(@Inject(ENV_CONFIG) private config: EnvironmentConfig) {\n\t\tthis.appConfig = this.config.environment.appConfig;\n\t}\n\n\tget version() {\n\t\treturn this.appConfig.version;\n\t}\n\n\tget name() {\n\t\treturn this.appConfig.applicationName;\n\t}\n}\n\nexport const APP_CONFIG = new InjectionToken('EnvironmentConfig.App');\n","import { ENV_CONFIG, EnvironmentConfig, NotificationsConfig } from '../models';\nimport { Inject, Injectable, InjectionToken } from '@angular/core';\n\n@Injectable()\nexport class NotificationsConfigService {\n\tprivate notificationsConfig: NotificationsConfig;\n\n\tconstructor(@Inject(ENV_CONFIG) private config: EnvironmentConfig) {\n\t\tthis.notificationsConfig = this.config.environment.notificationsConfig;\n\t}\n\n\tgetConfig(key: K): T[K] {\n\t\treturn (this.notificationsConfig as T)[key];\n\t}\n}\n\nexport const NOTIFICATIONS_CONFIG = new InjectionToken('EnvironmentConfig.Notifications');\n","import { ENV_CONFIG, EnvironmentConfig, InsightsConfig } from '../models';\nimport { Inject, Injectable, InjectionToken } from '@angular/core';\n\n@Injectable()\nexport class InsightsConfigService {\n\tprivate insightsConfig: InsightsConfig;\n\n\tconstructor(@Inject(ENV_CONFIG) private config: EnvironmentConfig) {\n\t\tthis.insightsConfig = this.config.environment.insightsConfig;\n\t}\n\n\tgetConfig(key: K): T[K] {\n\t\treturn (this.insightsConfig as T)[key];\n\t}\n}\n\nexport const INSIGHTS_CONFIG = new InjectionToken('EnvironmentConfig.Insights');\n","import { ENV_CONFIG, EnvironmentConfig, ProjectConfig } from '../models';\nimport { Inject, Injectable, InjectionToken } from '@angular/core';\n\n@Injectable()\nexport class ProjectConfigService {\n\tprivate projectConfig: ProjectConfig;\n\n\tconstructor(@Inject(ENV_CONFIG) private config: EnvironmentConfig) {\n\t\tthis.projectConfig = this.config.environment.projectConfig;\n\t}\n\n\tgetConfig(key: K): T[K] {\n\t\treturn (this.projectConfig as T)[key];\n\t}\n}\n\nexport const PROJECT_CONFIG = new InjectionToken('EnvironmentConfig.Project');\n","import { InjectionToken } from '@angular/core';\n\nexport interface IAuthService {\n\tinit(): Promise;\n\n\tlogin(originalUri?: string): void;\n\n\tcompleteLogin(): Promise;\n\n\tlogout(): Promise;\n\n\tcompleteLogout(): Promise;\n\n\tsigninSilentCallback(): Promise;\n}\n\nexport const AUTH_SERVICE = new InjectionToken('app.auth');\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { User } from 'oidc-client-ts';\nimport { UserProfile } from './user-profile';\n\nexport interface IAuthContext {\n\tclaims: { key: string; value: string | string[] }[];\n\tuserProfile: UserProfile;\n\taccessToken: string;\n\tloginStatusChange$: Observable;\n\tuserRegisteredInMarket$: Observable;\n\n\tsetCurrentUser(user: User): void;\n\n\tclearCurrentUser(): void;\n}\n\nexport const AUTH_CONTEXT = new InjectionToken('app.auth-context');\n","import { CanActivateFn } from '@angular/router';\nimport { AUTH_CONTEXT, AUTH_SERVICE } from '../abstractions';\nimport { inject } from '@angular/core';\nimport { map } from 'rxjs';\nimport { Location } from '@angular/common';\nexport const AuthGuard: CanActivateFn = () => {\n\tconst authContext = inject(AUTH_CONTEXT);\n\tconst authService = inject(AUTH_SERVICE);\n\tconst location = inject(Location);\n\n\treturn authContext.loginStatusChange$.pipe(\n\t\tmap((isLoggedIn) => {\n\t\t\tif (isLoggedIn) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tauthService.login(location.path());\n\t\t\t\treturn false;\n\t\t\t}\n\t\t})\n\t);\n};\n","import { CanActivateFn, Router } from '@angular/router';\nimport { inject } from '@angular/core';\nimport { map } from 'rxjs';\nimport { AUTH_CONTEXT } from '../abstractions';\n\nexport const TenantGuard: CanActivateFn = () => {\n\tconst authContext = inject(AUTH_CONTEXT);\n\tconst router = inject(Router);\n\n\treturn authContext.userRegisteredInMarket$.pipe(\n\t\tmap((userRegisteredInMarket) => {\n\t\t\tif (userRegisteredInMarket) {\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\tvoid router.navigate(['/forbidden']);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t})\n\t);\n};\n","import { inject } from '@angular/core';\nimport { CanActivateFn, Router, UrlTree } from '@angular/router';\nimport { AUTH_CONTEXT } from '../abstractions';\nimport { Observable } from 'rxjs';\nimport { map } from 'rxjs/operators';\n\nexport const RedirectGuard: CanActivateFn = (): Observable => {\n\tconst authContext = inject(AUTH_CONTEXT);\n\tconst router = inject(Router);\n\n\treturn authContext.loginStatusChange$.pipe(\n\t\tmap((isLoggedIn) => {\n\t\t\tif (isLoggedIn) {\n\t\t\t\treturn router.parseUrl('/maps');\n\t\t\t}\n\t\t\treturn true;\n\t\t})\n\t);\n};\n","export class UserProfile {\n\tfirstName: string;\n\tlastName: string;\n\temail: string;\n\n\tget fullName(): string {\n\t\treturn `${this.firstName} ${this.lastName}`;\n\t}\n\n\tconstructor(firstName: string, lastName: string, email: string) {\n\t\tthis.firstName = firstName;\n\t\tthis.lastName = lastName;\n\t\tthis.email = email;\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\n\n@NgModule({\n\timports: [CommonModule],\n})\nexport class AuthModule {}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { FileParseResult } from './types';\n\nexport interface ICsvParserService {\n\tcsvHasValidContent(file: File, minRows: number, minColumns: number, maxRows?: number): Observable;\n\n\tcsvHasValidRowsNumber(file: File, maxNoOfRows: number): Observable;\n\n\tgetHeaders(file: File): Observable;\n\n\tparse(\n\t\tfile: File,\n\t\thasColumnHeaders: boolean,\n\t\ttransformHeader: (header: string, index?: number) => string,\n\t\tpreviewNoOfRows?: number\n\t): Observable>;\n}\n\nexport const CSV_PARSER_SERVICE = new InjectionToken('app.parsers.csv');\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { FileParseResult } from './types';\n\nexport interface IExcelParserService {\n\tgetXlsxHeaders(file: File, worksheetName?: string): Observable;\n\n\tgetXlsxPreviewData(\n\t\tfile: File,\n\t\tcontainsHeaders: boolean,\n\t\tworksheetName?: string,\n\t\tnumberOfRows?: number\n\t): Observable;\n\n\txlsHasValidContent(\n\t\tfile: File,\n\t\thasHeaders: boolean,\n\t\tworksheetName: string,\n\t\tminRows: number,\n\t\tminColumns: number,\n\t\tmaxRows?: number,\n\t\tcheckDataTypes?: boolean\n\t): Observable;\n\n\tparseXlsx(\n\t\tfile: File,\n\t\tworksheetName?: string,\n\t\thasColumnHeaders? : boolean\n\t): Observable>;\n\n\txlsxHasValidRowsNumber(file: File, maxNoOFRows: number): Observable;\n\treadExcelWorksheetNames(file: File): Observable;\n\tgetXlsxData(file: File, columnsToValidate?: string[]): Observable;\n}\n\nexport const EXCEL_PARSER_SERVICE = new InjectionToken('app.parsers.excel');\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface IParsingService {\n\tgetCsvPreviewData(file: File, containsHeaders: boolean, numberOfRows?: number): Observable;\n\tgetXlsxPreviewData(\n\t\tfile: File,\n\t\tcontainsHeaders: boolean,\n\t\tworksheetName: string,\n\t\tnumberOfRows?: number\n\t): Observable;\n\n\tgetHeaders(file: File, worksheetName?: string): Observable;\n\tshowPreview(filename: string, filePreview: T[]): void;\n\thasValidContent(\n\t\tfile: File,\n\t\tworksheetName: string,\n\t\tminRows: number,\n\t\tminColumns: number,\n\t\thasHeaders: boolean,\n\t\tmaxRows?: number,\n\t\tcheckDataTypes?: boolean\n\t): Observable;\n\n\treadExcelWorksheetNames(file: File): Observable;\n}\n\nexport const PARSING_SERVICE = new InjectionToken('data-preview.parsing-service');\n","export const checkForEmptyHeader = (header: string, index: number): string =>\n\theader === null || header === '' ? `Column_${index + 1}` : header;\n\n\n","import { InjectionToken } from '@angular/core';\nimport { FeatureFlag } from '../types/types';\nimport { Observable } from 'rxjs';\n\nexport interface IFeatureFlagsFacadeService {\n\tloadFeatureFlags(): void;\n\tfeatureFlagEnabled(featureFlag: FeatureFlag): Observable;\n}\n\nexport const FEATURE_FLAGS_FACADE = new InjectionToken('feature-flags.facade');\n","import { ILogWriter, ILogEntry } from '.';\n\nexport abstract class LogWriter implements ILogWriter {\n\tprotected hasWriter = false;\n protected logEntry!: ILogEntry;\n\n\texecute(): void {\n\t\tif (this.hasWriter) {\n\t\t\tthis.write();\n\t\t}\n\t}\n\n\tpublic abstract write(): void;\n}\n","import { Configuration } from './configuration.interface';\n\nexport class ConfigurationContext {\n\tconfig!: Configuration;\n}\n","import { Injectable, Optional } from '@angular/core';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\nimport { ConfigurationContext } from './configuration-context';\nimport { Configuration } from './configuration.interface';\n\n@Injectable({\n\tprovidedIn: 'root',\n})\nexport class ConfigurationFacade {\n\tprivate settingsSubject: Subject = new ReplaySubject(1);\n\tpublic readonly settings$: Observable = this.settingsSubject.asObservable();\n\n\tconstructor(@Optional() context: ConfigurationContext) {\n\t\tif (context) {\n\t\t\tthis.settingsSubject.next(context.config);\n\t\t}\n\t}\n}\n","export enum Severity {\n\tDebug = 0,\n\tInformation = 1,\n\tWarning = 2,\n\tError = 3,\n\tCritical = 4,\n}\n","/* eslint-disable no-restricted-syntax */\n/* eslint-disable no-console */\nimport { Injectable } from '@angular/core';\nimport { LogWriter } from '../../abstractions';\nimport { Severity } from '../../enums';\nimport { LogEntry, LoggingService } from '../../services';\n\n@Injectable()\nexport class ConsoleWriter extends LogWriter {\n\tconstructor(private loggingService: LoggingService) {\n\t\tsuper();\n\t\tthis.hasWriter = true;\n\t\tthis.loggingService.logEntries$.subscribe((logEntry) => this.handleEntry(logEntry));\n\t}\n\n\thandleEntry(logEntry: LogEntry) {\n\t\tthis.logEntry = logEntry;\n\t\tthis.execute();\n\t}\n\n\tpublic write(): void {\n\t\tswitch (this.logEntry.severity) {\n\t\t\tcase Severity.Debug:\n\t\t\t\tconsole.debug(this.logEntry);\n\t\t\t\tbreak;\n\t\t\tcase Severity.Information:\n\t\t\t\tconsole.info(this.logEntry);\n\t\t\t\tbreak;\n\t\t\tcase Severity.Warning:\n\t\t\t\tconsole.warn(this.logEntry);\n\t\t\t\tbreak;\n\t\t\tcase Severity.Error:\n\t\t\t\tconsole.error(this.logEntry);\n\t\t\t\tbreak;\n\t\t\tcase Severity.Critical:\n\t\t\t\tconsole.error(this.logEntry);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tbreak;\n\t\t}\n\t}\n}\n","import { AppInsightsConfig } from './app-insights-config';\nimport { ApplicationInsights, SeverityLevel } from '@microsoft/applicationinsights-web';\nimport { Configuration, ConfigurationFacade } from '../../configuration';\nimport { LogEntry, LoggingService } from '../../services';\nimport { AUTH_CONTEXT, IAuthContext } from '@ecos/auth';\nimport { toHashCode } from '../../utils/hash.utils';\nimport { Inject, inject, Injectable, Optional } from '@angular/core';\nimport { LogWriter } from '../../abstractions';\nimport { Severity } from '../../enums';\nimport { AngularPlugin } from '@microsoft/applicationinsights-angularplugin-js';\nimport { Router } from '@angular/router';\n\n@Injectable()\nexport class AppInsightsWriter extends LogWriter {\n\tprivate appInsights!: ApplicationInsights;\n\tprivate config!: AppInsightsConfig;\n\n\tprivate readonly router = inject(Router);\n\n\tconstructor(\n\t\t@Inject(AUTH_CONTEXT)\n\t\tprivate readonly authContext: IAuthContext,\n\t\t@Optional() private configService: ConfigurationFacade,\n\t\tprivate loggingService: LoggingService\n\t) {\n\t\tsuper();\n\t\tif (this.configService && this.loggingService) {\n\t\t\tthis.configService.settings$.subscribe((settings) => this.handleSettings(settings));\n\t\t\tthis.loggingService.logEntries$.subscribe((entry) => this.handleEntry(entry));\n\t\t}\n\n\t\tif (this.authContext) {\n\t\t\tthis.authContext.loginStatusChange$.subscribe((loggedIn) => this.handleAuthConfiguration(loggedIn));\n\t\t}\n\t}\n\n\tprivate handleAuthConfiguration(loggedIn: boolean): void {\n\t\tif (this.config.appInsightsConfig.enableAppInsights) {\n\t\t\tif (loggedIn) {\n\t\t\t\tthis.appInsights.setAuthenticatedUserContext(toHashCode(this.authContext.userProfile?.email).toString());\n\t\t\t} else {\n\t\t\t\tthis.appInsights.clearAuthenticatedUserContext();\n\t\t\t}\n\t\t}\n\t}\n\n\thandleSettings(settings: Configuration) {\n\t\tif (settings) {\n\t\t\tthis.config = settings as AppInsightsConfig;\n\n\t\t\tconst {\n\t\t\t\tinstrumentationKey,\n\t\t\t\tenableAutoRouteTracking,\n\t\t\t\tenableAppInsights,\n\t\t\t\tautoTrackPageVisitTime,\n\t\t\t\tenableCorsCorrelation,\n\t\t\t\tcorrelationHeaderExcludedDomains,\n\t\t\t} = this.config.appInsightsConfig;\n\t\t\tlet { connectionString } = this.config.appInsightsConfig;\n\n\t\t\tif (enableAppInsights) {\n\t\t\t\tthis.hasWriter = true;\n\n\t\t\t\t// Backward Compatibility\n\t\t\t\t// to be removed in a later version\n\t\t\t\tif (connectionString && !connectionString.includes('InstrumentationKey')) {\n\t\t\t\t\tconnectionString = undefined;\n\t\t\t\t}\n\n\t\t\t\tconst angularPlugin = new AngularPlugin();\n\t\t\t\tthis.appInsights = new ApplicationInsights({\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tconnectionString,\n\t\t\t\t\t\tinstrumentationKey,\n\t\t\t\t\t\tenableAutoRouteTracking,\n\t\t\t\t\t\tcorrelationHeaderExcludedDomains,\n\t\t\t\t\t\tautoTrackPageVisitTime,\n\t\t\t\t\t\tenableCorsCorrelation,\n\t\t\t\t\t\textensions: [angularPlugin],\n\t\t\t\t\t\textensionConfig: {\n\t\t\t\t\t\t\t[angularPlugin.identifier]: { router: this.router },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tthis.appInsights.loadAppInsights();\n\t\t\t\tthis.appInsights.trackPageView();\n\t\t\t}\n\t\t}\n\t}\n\n\thandleEntry(entry: LogEntry) {\n\t\tif (this.hasWriter) {\n\t\t\tthis.logEntry = entry;\n\t\t\tthis.execute();\n\t\t}\n\t}\n\n\tlogTrace() {\n\t\tif (!this.logEntry) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.appInsights.trackTrace(\n\t\t\t{\n\t\t\t\tmessage: this.logEntry.message,\n\t\t\t\tseverityLevel: this.logEntry.severity as unknown as SeverityLevel,\n\t\t\t},\n\t\t\t{\n\t\t\t\tsource: this.logEntry.source,\n\t\t\t\ttimestamp: this.logEntry.timestamp,\n\t\t\t\t...this.logEntry.customProperties,\n\t\t\t}\n\t\t);\n\t}\n\n\tpublic write(): void {\n\t\tif (!this.logEntry) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.logEntry.severity === Severity.Error || this.logEntry.severity === Severity.Critical) {\n\t\t\tthis.appInsights.trackException({\n\t\t\t\tseverityLevel: this.logEntry.severity,\n\t\t\t\texception: this.logEntry.exception,\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tthis.logTrace();\n\t}\n}\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule } from '@angular/core';\nimport { AppInsightsWriter, ConsoleWriter } from './writers';\nimport { CommonModule } from '@angular/common';\nimport { ConfigurationContext, ConfigurationFacade } from './configuration';\nimport { LoggingService } from './services';\n\nexport const initializeLogWriter = (consoleWriter: ConsoleWriter) => () => consoleWriter;\n\n@NgModule({\n\timports: [CommonModule],\n\tproviders: [ConfigurationFacade, AppInsightsWriter, LoggingService, ConsoleWriter],\n})\nexport class LoggingModule {\n\tstatic forRoot(configContext: ConfigurationContext): ModuleWithProviders {\n\t\treturn {\n\t\t\tngModule: LoggingModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: ConfigurationContext,\n\t\t\t\t\tuseValue: configContext,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: APP_INITIALIZER,\n\t\t\t\t\tuseFactory: (appInsightsWriter: AppInsightsWriter) => () => appInsightsWriter,\n\t\t\t\t\tdeps: [LoggingService, AppInsightsWriter],\n\t\t\t\t\tmulti: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: APP_INITIALIZER,\n\t\t\t\t\tuseFactory: initializeLogWriter,\n\t\t\t\t\tdeps: [LoggingService, ConsoleWriter],\n\t\t\t\t\tmulti: true,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t}\n}\n","import { ILogEntry } from '../abstractions';\nimport { Severity } from '../enums';\n\nexport class LogEntry implements ILogEntry {\n\ttimestamp: Date;\n\tcustomProperties?: Record;\n\n\tconstructor(\n\t\tpublic source: string,\n\t\tpublic severity: Severity,\n\t\tpublic message: string,\n\t\tpublic exception: Error | undefined,\n\t\tcustomProperties?: Record\n\t) {\n\t\tthis.timestamp = new Date(Date.now());\n\t\tthis.customProperties = customProperties;\n\t\tthis.exception = exception;\n\t}\n}\n","import { LogEntry } from './log-entry';\nimport { LoggingConfig } from './logging-config';\nimport { Configuration, ConfigurationFacade } from '../configuration';\nimport { ILogEntry } from '../abstractions';\nimport { Severity } from '../enums';\nimport { Guid } from 'guid-typescript';\nimport { Injectable, Optional } from '@angular/core';\nimport { Observable, ReplaySubject, Subject } from 'rxjs';\nimport { take } from 'rxjs/operators';\n\n@Injectable({\n\tprovidedIn: 'root',\n})\nexport class LoggingService {\n\tserviceName = 'LoggingService';\n\tapplicationName = 'application';\n\tsource!: string;\n\tseverity: Severity = Severity.Information;\n\tmessage!: string;\n\ttimestamp: Date;\n\tversion = '0.0.0';\n\tisProduction = false;\n\tconfig!: LoggingConfig;\n\tid: Guid = Guid.create();\n\tselectedMarket?: string;\n\n\tprivate readonly innerlogEntries$: Subject = new ReplaySubject(1);\n\n\tlogEntries$: Observable = this.innerlogEntries$.asObservable();\n\n\tconstructor(@Optional() public configService: ConfigurationFacade) {\n\t\tthis.timestamp = new Date(Date.now());\n\t\tthis.initializeService(configService);\n\t\tthis.log(\n\t\t\tthis.serviceName,\n\t\t\tSeverity.Information,\n\t\t\t`Starting logging service[${this.id.toString()}] at: ${this.timestamp.toUTCString()}`\n\t\t);\n\t}\n\n\tprivate handleSettings(settings: Configuration) {\n\t\tthis.config = settings as LoggingConfig;\n\t\tthis.applicationName = this.config?.loggingConfig?.applicationName ?? 'application';\n\t\tthis.version = this.config?.loggingConfig?.version ?? '0.0.0';\n\t\tthis.isProduction = this.config?.loggingConfig?.isProduction ?? false;\n\t}\n\n\tprivate initializeService(configService: ConfigurationFacade) {\n\t\tif (configService !== null) {\n\t\t\tthis.configService.settings$.pipe(take(1)).subscribe((settings) => this.handleSettings(settings));\n\t\t}\n\t}\n\n\tlog(source: string, severity: Severity, message: string, customProperties: Record = {}) {\n\t\tthis.source = `${this.applicationName}[${this.version}].${source}`;\n\t\tthis.severity = severity;\n\t\tthis.message = message;\n\t\tthis.timestamp = new Date(Date.now());\n\n\t\tconst logEntry = new LogEntry(`[CLIENT]${this.source}`, this.severity, this.message, undefined, {\n\t\t\t...customProperties,\n\t\t\tLoggerId: this.id.toString(),\n\t\t\tSelectedMarket: this.selectedMarket,\n\t\t});\n\t\tthis.innerlogEntries$.next(logEntry);\n\t}\n\n\tlogException(\n\t\tsource: string,\n\t\tseverity: Severity,\n\t\tmessage: string,\n\t\texception: Error,\n\t\tcustomProperties: Record = {}\n\t) {\n\t\tthis.source = `${this.applicationName}[${this.version}].${source}`;\n\t\tthis.severity = severity;\n\t\tthis.message = exception.message;\n\t\tthis.timestamp = new Date(Date.now());\n\n\t\tconst logEntry = new LogEntry(this.source, this.severity, this.message, exception, {\n\t\t\t...customProperties,\n\t\t\tLoggerId: this.id.toString(),\n\t\t\tSelectedMarket: this.selectedMarket,\n\t\t});\n\t\tthis.innerlogEntries$.next(logEntry);\n\t}\n\n\taddSelectedMarketLogDimension(selectedMarket?: string) {\n\t\tthis.selectedMarket = selectedMarket;\n\t}\n}\n","/* eslint-disable no-bitwise */\n\n/* This method returns a hash code for this string.\n * The hash code for a String object is computed as:\n * s[0]*31^(n - 1) + s[1]*31^(n - 2) + ... + s[n - 1]\n * Using int arithmetic, where s[i] is the ith character of the string,\n * n is the length of the string, and ^ indicates exponentiation.\n * The hash value of the empty string is zero.\n * Compatible to Java String.hashCode().\n * @param {string} input a string\n * @return {number} a hash code value for the given string.\n */\nexport const toHashCode = (input: string) => {\n\tlet hash = 0;\n\tfor (let i = 0; i < input.length; ++i) {\n\t\thash = Math.imul(31, hash) + input.charCodeAt(i);\n\t}\n\n\treturn hash | 0;\n};\n","import { createAction, props } from '@ngrx/store';\nimport * as fromModels from '../../../models';\n\nexport enum AppActionTypes {\n\tStartAppConfiguration = '[AppConfig] Start App Configuration',\n\tLoadConfiguration = '[AppConfig] Load Configuration',\n\tLoadConfigurationSuccess = '[AppConfig] Load Configuration Success',\n\tLoadConfigurationFail = '[AppConfig] Load Configuration Fail',\n\tFinishAppConfiguration = '[AppConfig] Finish App Configuration',\n\tSetTheme = '[AppConfig] Set App Theme',\n}\n\nexport const startAppConfiguration = createAction(AppActionTypes.StartAppConfiguration);\nexport const loadAppConfiguration = createAction(AppActionTypes.LoadConfiguration);\nexport const loadAppConfigurationSuccess = createAction(\n\tAppActionTypes.LoadConfigurationSuccess,\n\tprops<{ theme: fromModels.Theme; translation: fromModels.Translation }>()\n);\nexport const loadAppConfigurationFail = createAction(AppActionTypes.LoadConfigurationFail, props<{ error: any }>());\nexport const finishAppConfiguration = createAction(AppActionTypes.FinishAppConfiguration);\n\nexport const setTheme = createAction(AppActionTypes.SetTheme, props<{ theme: fromModels.Theme }>());\n","import { createAction, props } from '@ngrx/store';\n\nexport type ExportActionTypes =\n\t| '[Data] Export file records'\n\t| '[Data] Export insight records'\n\t| '[Data] Export audience file records'\n\t| '[Data] Export geo boundary file records';\n\nexport const ExportFileRecords = createAction(\n\t'[Data] Export file records',\n\tprops<{ layerKey: string; validity: string }>()\n);\n\nexport const ExportFileChoroplethRecords = createAction(\n\t'[Data] Export audience file records',\n\tprops<{ layerKey: string; validity:string }>()\n);\n\nexport const ExportFileGeoBoundaryRecords = createAction(\n\t'[Data] Export geo boundary file records',\n\tprops<{ layerKey: string; validity:string }>()\n);\n\nexport const ExportInsightRecords = createAction(\n\t'[Data] Export insight records',\n\tprops<{ insightKey: string }>()\n);\n","import { ActionReducer, createAction } from '@ngrx/store';\n\nexport const RESET_ACTION = createAction('[Project] Reset');\n\nexport const ResetToNewProject =\n\t(reducer: ActionReducer): ActionReducer =>\n\t(state, action) => {\n\t\tif (action.type === RESET_ACTION().type) {\n\t\t\treturn reducer(undefined, action);\n\t\t}\n\n\t\treturn reducer(state, action);\n\t};\n","import { createReducer, on } from '@ngrx/store';\n\nimport * as fromActions from '../actions';\nimport * as fromModels from '../../../models';\n\nexport interface AppSettings {\n\ttheme: fromModels.Theme;\n\ttranslation: fromModels.Translation;\n}\n\nexport interface ConfigurationState {\n\tconfig: {\n\t\ttheme: fromModels.Theme;\n\t\ttranslation: fromModels.Translation;\n\t};\n\tconfigurationInitialized: boolean;\n}\n\nexport const initialConfigState: ConfigurationState = {\n\tconfig: {\n\t\ttheme: fromModels.Theme.Light,\n\t\ttranslation: fromModels.Translation.enGB,\n\t},\n\tconfigurationInitialized: false,\n};\n\nexport const configReducer = createReducer(\n\tinitialConfigState,\n\ton(fromActions.loadAppConfigurationSuccess, (state, { theme, translation }) => ({\n\t\t...state,\n\t\tconfig: {\n\t\t\t...state.config,\n\t\t\ttheme,\n\t\t\ttranslation,\n\t\t},\n\t\tconfigurationInitialized: true,\n\t})),\n\ton(fromActions.setTheme, (state, { theme }) => ({\n\t\t...state,\n\t\tconfig: {\n\t\t\t...state.config,\n\t\t\ttheme,\n\t\t},\n\t\tconfigurationInitialized: true,\n\t}))\n);\n","import * as fromActions from '../actions';\nimport { Actions, createEffect, EffectNotification, ofType, OnRunEffects } from '@ngrx/effects';\nimport {\n\tcatchError,\n\texhaustMap,\n\tmap,\n\tswitchMap,\n\ttakeUntil\n} from 'rxjs/operators';\nimport { initialConfigState } from '../reducers';\nimport { Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\n\n\n@Injectable()\nexport class AppEffects implements OnRunEffects {\n\tloadConfiguration$ = createEffect(() =>\n\t\t// TODO an actual Http API call to get the configurations\n\t\tthis.actions$.pipe(\n\t\t\tofType(fromActions.AppActionTypes.LoadConfiguration),\n\t\t\tswitchMap(() =>\n\t\t\t\tof(initialConfigState.config).pipe(\n\t\t\t\t\tmap((data) => fromActions.loadAppConfigurationSuccess(data)),\n\t\t\t\t\tcatchError((error) => of(fromActions.loadAppConfigurationFail({ error: 'Fail!' })))\n\t\t\t\t)\n\t\t\t)\n\t\t)\n\t);\n\n\t// TODO add other effects for other slices of AppState\n\n\tconstructor(private actions$: Actions) {}\n\n\tngrxOnRunEffects(resolvedEffects$: Observable): Observable {\n\t\treturn this.actions$.pipe(\n\t\t\tofType(fromActions.AppActionTypes.StartAppConfiguration),\n\t\t\texhaustMap(() =>\n\t\t\t\tresolvedEffects$.pipe(takeUntil(this.actions$\n\t\t\t\t\t.pipe(ofType(fromActions.AppActionTypes.FinishAppConfiguration))))\n\t\t\t)\n\t\t);\n\t}\n}\n","import { Params } from '@angular/router';\nimport { RouterReducerState } from '@ngrx/router-store';\nimport { createFeatureSelector, createSelector } from '@ngrx/store';\n\nimport * as fromApp from './app';\nimport * as fromRouter from './router';\n\nexport interface AppState {\n\tconfiguration: fromApp.ConfigurationState;\n\trouter: RouterReducerState;\n}\n\nexport const selectConfiguration = (state: AppState) => state.configuration;\n\nexport const getRouterState = createFeatureSelector>('router');\nexport const getRouteParams = createSelector(\n\tgetRouterState,\n\t({ state }): Params => {\n\t\tconst { params } = state;\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return\n\t\treturn params;\n\t}\n);\nexport const getQueryParams = createSelector(\n\tgetRouterState,\n\t({ state }): Params => {\n\t\tconst { queryParams } = state;\n\t\t// eslint-disable-next-line @typescript-eslint/no-unsafe-return\n\t\treturn queryParams;\n\t}\n);\n","import * as fromRoot from '../../root.selectors';\nimport { createSelector } from '@ngrx/store';\n\nexport const getAppConfigurationInitialized = createSelector(\n\tfromRoot.selectConfiguration,\n\t(state) => state.configurationInitialized\n);\n\nexport const getAppConfiguration = createSelector(fromRoot.selectConfiguration, (state) => state.config);\n\nexport const getAppTheme = createSelector(getAppConfiguration, (state) => state.theme);\n\nexport const getTranslationCode = createSelector(getAppConfiguration, (state) => state.translation);\n","import { Params, RouterStateSnapshot } from '@angular/router';\nimport { RouterStateSerializer } from '@ngrx/router-store';\n\nexport interface RouterStateUrl {\n\turl: string;\n\tparams: Params;\n\tqueryParams: Params;\n}\n\nexport class CustomSerializer implements RouterStateSerializer {\n\tserialize(routerState: RouterStateSnapshot): RouterStateUrl {\n\t\tlet route = routerState.root;\n\n\t\twhile (route.firstChild) {\n\t\t\troute = route.firstChild;\n\t\t}\n\n\t\tconst {\n\t\t\turl,\n\t\t\troot: { queryParams },\n\t\t} = routerState;\n\t\tconst { params } = route;\n\n\t\treturn { url, params, queryParams };\n\t}\n}\n","import { ActionReducerMap, MetaReducer } from '@ngrx/store';\nimport { routerReducer } from '@ngrx/router-store';\nimport * as fromApp from './app';\nimport * as fromRoot from './root.selectors';\n\nexport const effects: any[] = [fromApp.AppEffects];\nexport * from './app';\nexport * from './router';\nexport * from './root.selectors';\n\nexport const reducers: ActionReducerMap = {\n\tconfiguration: fromApp.configReducer,\n\trouter: routerReducer,\n};\n\nexport const metaReducers: MetaReducer[] = [];\n","export enum Theme {\n\tDark = 'Dark',\n\tLight = 'Light',\n}\nexport enum Translation {\n\tenGB = 'en-GB',\n}\n","import { Injectable } from '@angular/core';\nimport { of } from 'rxjs';\nimport { Store } from '@ngrx/store';\nimport { switchMap } from 'rxjs/operators';\nimport * as fromRoot from '../+state';\n\nexport const initApp = (initService: AppInitializationService): (() => void) => () => initService.load();\n\n@Injectable()\nexport class AppInitializationService {\n\tconstructor(private store: Store) {}\n\n\tload() {\n\t\treturn new Promise((resolve, reject) => {\n\t\t\tthis.store.dispatch(fromRoot.startAppConfiguration());\n\t\t\tthis.store.dispatch(fromRoot.loadAppConfiguration());\n\t\t\tthis.store\n\t\t\t\t.select(fromRoot.getAppConfigurationInitialized)\n\t\t\t\t.pipe(switchMap((data) => of(data)))\n\t\t\t\t.subscribe(\n\t\t\t\t\t(configInitialized) => {\n\t\t\t\t\t\tif (configInitialized) {\n\t\t\t\t\t\t\tthis.store.dispatch(fromRoot.finishAppConfiguration());\n\t\t\t\t\t\t\tresolve(configInitialized);\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t(error) => reject(error)\n\t\t\t\t);\n\t\t});\n\t}\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Theme } from '../models';\n\nexport interface IThemeConfigService {\n\tcurrentTheme(): Observable;\n\tsetCurrentTheme(theme: Theme): void;\n}\n\nexport const THEME_CONFIG = new InjectionToken('theme.config');\n","import { IThemeConfigService, THEME_CONFIG } from './theme-config.service';\nimport { Theme } from '../models';\nimport { BehaviorSubject, Observable, of } from 'rxjs';\nimport { FullscreenOverlayContainer } from '@angular/cdk/overlay';\nimport { Inject, Injectable } from '@angular/core';\nimport { switchMap } from 'rxjs/operators';\n\n@Injectable()\nexport class ThemeService {\n\tpublic theme: Observable;\n\tprivate themeBehaviourSubject: BehaviorSubject;\n\tprivate defaultTheme: Theme;\n\tprivate currentTheme: Theme;\n\n\tconstructor(\n\t\tprivate overlayContainer: FullscreenOverlayContainer,\n\t\t@Inject(THEME_CONFIG) private themeConfig: IThemeConfigService\n\t) {\n\t\tthis.themeBehaviourSubject = new BehaviorSubject(this.defaultTheme);\n\t\tthis.theme = this.themeBehaviourSubject.asObservable();\n\t\tthis.themeConfig\n\t\t\t.currentTheme()\n\t\t\t.pipe(switchMap((data) => of(data)))\n\t\t\t.subscribe((data) => {\n\t\t\t\tif (!this.defaultTheme) {\n\t\t\t\t\tthis.defaultTheme = data;\n\t\t\t\t}\n\t\t\t\tthis.currentTheme = data;\n\t\t\t\tthis.themeBehaviourSubject.next(data);\n\t\t\t});\n\t}\n\n\tinit(): void {\n\t\tthis.themeBehaviourSubject.subscribe((themeName) => {\n\t\t\t//\tremove themes from body if necessary\n\t\t\tif (themeName === this.defaultTheme) {\n\t\t\t\tconst bodyClasses = document.body.classList;\n\t\t\t\tconst bodyThemesToRemove = Array.from(bodyClasses).filter((item: string) => item.includes('-theme'));\n\t\t\t\tif (bodyThemesToRemove.length) {\n\t\t\t\t\tbodyClasses.remove(...bodyThemesToRemove);\n\t\t\t\t}\n\n\t\t\t\t// remove themes from overlay if necessary\n\t\t\t\tconst overlayContainerClasses = this.overlayContainer.getContainerElement().classList;\n\t\t\t\tconst themeClassesToRemove = Array.from(overlayContainerClasses).filter((item: string) =>\n\t\t\t\t\titem.includes('-theme')\n\t\t\t\t);\n\t\t\t\tif (themeClassesToRemove.length) {\n\t\t\t\t\toverlayContainerClasses.remove(...themeClassesToRemove);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdocument.body.classList.add((themeName + '-theme').toLowerCase());\n\t\t\t\tthis.overlayContainer.getContainerElement().classList.add((themeName + '-theme').toLowerCase());\n\t\t\t}\n\t\t});\n\t}\n\n\tchangeTheme(): void {\n\t\tconst newTheme = this.currentTheme === Theme.Dark ? Theme.Light : Theme.Dark;\n\t\tthis.themeConfig.setCurrentTheme(newTheme);\n\t}\n\tgetTheme(): string {\n\t\treturn this.themeBehaviourSubject.getValue();\n\t}\n\n\tgetContrastTheme(): string {\n\t\treturn this.themeBehaviourSubject.getValue() === Theme.Dark ? Theme.Light : Theme.Dark;\n\t}\n}\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { AppInitializationService, initApp } from './services';\nimport { EffectsModule } from '@ngrx/effects';\nimport { RouterStateSerializer, StoreRouterConnectingModule } from '@ngrx/router-store';\nimport { ActionReducer, MetaReducer, StoreModule } from '@ngrx/store';\n\nimport { localStorageSync } from 'ngrx-store-localstorage';\n\nimport * as fromStore from './+state';\n\nexport const localStorageSyncReducer = (reducer: ActionReducer): ActionReducer =>\n\tlocalStorageSync({\n\t\tkeys: [{ user: ['profile'] }],\n\t\tstorageKeySerializer: (key) => `g_${key}`,\n\t\trehydrate: true,\n\t})(reducer);\n\nconst localStorageMetaReducers: Array> = [localStorageSyncReducer];\n\n@NgModule({\n\timports: [\n\t\tStoreModule.forRoot(fromStore.reducers, {\n\t\t\tmetaReducers: [...fromStore.metaReducers, ...localStorageMetaReducers],\n\t\t\truntimeChecks: {\n\t\t\t\tstrictStateImmutability: true,\n\t\t\t\tstrictActionImmutability: true,\n\t\t\t},\n\t\t}),\n\t\tEffectsModule.forRoot(fromStore.effects),\n\t\tStoreRouterConnectingModule.forRoot(),\n\t],\n})\nexport class SharedStoreModule {\n\tconstructor(@Optional() @SkipSelf() parentModule: SharedStoreModule) {\n\t\tthis.throwIfAlreadyLoaded(parentModule, 'SharedStoreModule');\n\t}\n\n\tstatic forRoot(): ModuleWithProviders {\n\t\treturn {\n\t\t\tngModule: SharedStoreModule,\n\t\t\tproviders: [\n\t\t\t\tAppInitializationService,\n\t\t\t\t{ provide: APP_INITIALIZER, useFactory: initApp, deps: [AppInitializationService], multi: true },\n\t\t\t\t{ provide: RouterStateSerializer, useClass: fromStore.CustomSerializer },\n\t\t\t],\n\t\t};\n\t}\n\n\tprivate throwIfAlreadyLoaded(parentModule: SharedStoreModule, moduleName: string) {\n\t\tif (parentModule) {\n\t\t\tthrow new Error(`${moduleName} has already been loaded. Import ${moduleName} in the AppModule only.`);\n\t\t}\n\t}\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface ITranslationService {\n\tgetCurrentLanguage(): string;\n\ttranslateByKey$(key: string): Observable;\n\ttranslateByKey(key: string, params?: Array): string;\n\ttranslateMultipleByKey(key: string[]): { [key: string]: string };\n}\n\nexport const TRANSLATION_SERVICE = new InjectionToken('translation.service');\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface ITranslationConfigService {\n\tcurrentLanguage(): Observable;\n}\n\nexport const TRANSLATION_CONFIG = new InjectionToken('translation.config');\n\nexport interface TranslationConfig {\n\tlanguagePath: string;\n}\n","import { ITranslationConfigService, TRANSLATION_CONFIG, TranslationConfig } from './translation-config.service';\nimport { HttpClient } from '@angular/common/http';\nimport { Inject, Injectable, inject } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { switchMap } from 'rxjs/operators';\nimport { TranslateHttpLoader } from '@ngx-translate/http-loader';\nimport { TranslateService } from '@ngx-translate/core';\nimport { APP_CONFIG, AppConfigService } from '@ecos/abstractions';\n\nexport const translateFactory = (translate: TranslateService) => () =>\n\tnew Promise((resolve) => {\n\t\ttranslate.onLangChange.subscribe(() => {\n\t\t\tresolve('');\n\t\t});\n\t});\n\nexport const httpLoaderFactory = (http: HttpClient, config: TranslationConfig): TranslateHttpLoader => {\n\tconst appConfig: AppConfigService = inject(APP_CONFIG);\n\n\treturn new TranslateHttpLoader(http, config.languagePath, `.json?v=${appConfig.version}`);\n};\n\n@Injectable({\n\tprovidedIn: 'root',\n})\nexport class TranslationService {\n\tconstructor(\n\t\tprivate translate: TranslateService,\n\t\t@Inject(TRANSLATION_CONFIG) private translationConfig: ITranslationConfigService\n\t) {\n\t\tthis.translationConfig\n\t\t\t.currentLanguage()\n\t\t\t.pipe(switchMap((data) => of(data)))\n\t\t\t.subscribe((data) => {\n\t\t\t\tthis.translate.setDefaultLang(data);\n\t\t\t\tthis.translate.use(data);\n\t\t\t});\n\t}\n\n\ttranslateByKey$(key: string): Observable {\n\t\treturn this.translate.get(key);\n\t}\n\n\ttranslateMultipleByKey(key: string[]): { [key: string]: string } {\n\t\treturn this.translate.instant(key);\n\t}\n\n\ttranslateByKey(key: string, params?: Array): string {\n\t\tif (params?.length) {\n\t\t\tconst format = (str: string, ...args: Array) =>\n\t\t\t\tstr.replace(/{(\\d+)}/g, (_match, index) => args[index] || '');\n\n\t\t\treturn format(this.translate.instant(key), ...params);\n\t\t}\n\n\t\treturn this.translate.instant(key);\n\t}\n\n\tgetCurrentLanguage(): string {\n\t\treturn this.translate.currentLang;\n\t}\n}\n","import { APP_INITIALIZER, ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\n\nimport { HttpClient } from '@angular/common/http';\nimport { TranslateModule, TranslateLoader, TranslateService } from '@ngx-translate/core';\nimport { CommonModule } from '@angular/common';\nimport { TranslationService, translateFactory, httpLoaderFactory } from './services/translation.service';\n\nconst getTranslationLoaderFactory = (http: HttpClient) => httpLoaderFactory(http, { languagePath: './assets/i18n/' });\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tTranslateModule.forRoot({\n\t\t\tloader: {\n\t\t\t\tprovide: TranslateLoader,\n\t\t\t\tuseFactory: getTranslationLoaderFactory,\n\t\t\t\tdeps: [HttpClient],\n\t\t\t},\n\t\t\tisolate: true,\n\t\t\tdefaultLanguage: 'en-GB',\n\t\t}),\n\t],\n})\nexport class TranslationModule {\n\tconstructor(@Optional() @SkipSelf() parentModule: TranslationModule) {\n\t\tthis.throwIfAlreadyLoaded(parentModule);\n\t}\n\n\tstatic forRoot(): ModuleWithProviders {\n\t\treturn {\n\t\t\tngModule: TranslationModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: APP_INITIALIZER,\n\t\t\t\t\tuseFactory: translateFactory,\n\t\t\t\t\tdeps: [TranslateService, TranslationService],\n\t\t\t\t\tmulti: true,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t}\n\n\tprivate throwIfAlreadyLoaded(parentModule: TranslationModule) {\n\t\tif (parentModule) {\n\t\t\tthrow new Error(`${parentModule.constructor.name} has already been loaded. Import in the AppModule only.`);\n\t\t}\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { CheckboxComponent } from './checkbox.component';\n\n@NgModule({\n\timports: [CommonModule, SharedMaterialModule],\n\tdeclarations: [CheckboxComponent],\n\texports: [CheckboxComponent],\n})\nexport class EcosCheckboxModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { CloseButtonComponent } from './close-button.component';\nimport { EcosIconButtonModule } from '../../buttons/icon-button';\n\n@NgModule({\n\tdeclarations: [CloseButtonComponent],\n\timports: [CommonModule, EcosIconButtonModule],\n\texports: [CloseButtonComponent],\n})\nexport class EcosCloseButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { FabButtonComponent } from './fab-button.component';\n\n@NgModule({\n\tdeclarations: [FabButtonComponent],\n\timports: [CommonModule, MatTooltipModule, MatButtonModule, MatIconModule],\n\texports: [FabButtonComponent],\n})\nexport class EcosFabButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { LinkButtonComponent } from './link-button.component';\n\n@NgModule({\n\tdeclarations: [LinkButtonComponent],\n\timports: [CommonModule, SharedMaterialModule],\n\texports: [LinkButtonComponent],\n})\nexport class EcosLinkButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { BasicButtonComponent } from './basic-button.component';\n\n@NgModule({\n\tdeclarations: [BasicButtonComponent],\n\timports: [CommonModule, SharedMaterialModule],\n\texports: [BasicButtonComponent],\n})\nexport class EcosBasicButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { ExpandButtonComponent } from './expand-button.component';\n\n@NgModule({\n\tdeclarations: [ExpandButtonComponent],\n\timports: [CommonModule, SharedMaterialModule],\n\texports: [ExpandButtonComponent],\n})\nexport class EcosExpandButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { OptionButtonComponent } from './option-button.component';\n\n@NgModule({\n\tdeclarations: [OptionButtonComponent],\n\timports: [CommonModule, SharedMaterialModule],\n\texports: [OptionButtonComponent],\n})\nexport class EcosOptionButtonModule {}\n","import { DropdownButtonComponent } from './dropdown-button.component';\nimport { SharedMaterialModule } from '../../material';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { EcosIconButtonModule } from '../icon-button/icon-button.module';\nimport { EcosOptionButtonModule } from '../option-button';\n\n@NgModule({\n\tdeclarations: [DropdownButtonComponent],\n\timports: [CommonModule, SharedMaterialModule, EcosIconButtonModule, EcosOptionButtonModule],\n\texports: [DropdownButtonComponent],\n})\nexport class EcosDropdownButtonModule {}\n","export enum DropDownButtonOptionsType {\n\tPolygon = 'polygon-filter',\n\tCircle = 'circle',\n\tRectangle = 'square',\n\tLine = 'line',\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { EcosIconButtonModule, EcosTextButtonModule } from '../../buttons';\nimport { EcosIconsModule } from '../../icons';\nimport { SharedMaterialModule } from '../../material';\nimport { RadioIconButtonComponent } from './radio-icon-button.component';\n\n@NgModule({\n\timports: [CommonModule, SharedMaterialModule, EcosIconsModule, EcosTextButtonModule, EcosIconButtonModule],\n\tdeclarations: [RadioIconButtonComponent],\n\texports: [RadioIconButtonComponent],\n})\nexport class EcosRadioIconButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { SlideToggleComponent } from './slide-toggle.component';\n\n@NgModule({\n\timports: [CommonModule, SharedMaterialModule],\n\tdeclarations: [SlideToggleComponent],\n\texports: [SlideToggleComponent],\n})\nexport class EcosSlideToggleModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { PaginatorComponent } from './paginator.component';\nimport { SharedMaterialModule } from '../../material';\nimport { FormsModule } from '@angular/forms';\nimport { MatPaginatorIntl } from '@angular/material/paginator';\n@NgModule({\n\tdeclarations: [PaginatorComponent],\n\timports: [FormsModule, CommonModule, SharedMaterialModule],\n\texports: [PaginatorComponent],\n\tproviders: [MatPaginatorIntl],\n})\nexport class EcosPaginatorModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { StatusMessageComponent } from './status-message.component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { TooltipModule } from '../../directives';\nimport { EcosIconsModule } from '../../icons';\n\n@NgModule({\n\timports: [CommonModule, SharedMaterialModule, EcosIconsModule, TranslateModule, TooltipModule],\n\tdeclarations: [StatusMessageComponent],\n\texports: [StatusMessageComponent],\n})\nexport class EcosStatusMessageModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../material';\nimport { EcosChipsComponent } from './chips.component';\n\n@NgModule({\n\timports: [CommonModule, SharedMaterialModule],\n\tdeclarations: [EcosChipsComponent],\n\texports: [EcosChipsComponent],\n})\nexport class EcosChipsModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { ActionBarButtonComponent } from './action-bar-button.component';\n\n@NgModule({\n\tdeclarations: [ActionBarButtonComponent],\n\timports: [CommonModule, SharedMaterialModule],\n\texports: [ActionBarButtonComponent],\n})\nexport class EcosActionBarButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { EcosActionBarButtonModule } from '../buttons/action-bar-button';\nimport { SharedMaterialModule } from '../material';\nimport { ActionBarComponent } from './action-bar.component';\n\n@NgModule({\n\tdeclarations: [ActionBarComponent],\n\timports: [CommonModule, SharedMaterialModule, EcosActionBarButtonModule],\n\texports: [ActionBarComponent, EcosActionBarButtonModule],\n})\nexport class EcosActionBarModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { MiniFabButtonComponent } from './mini-fab-button.component';\n\n@NgModule({\n\tdeclarations: [MiniFabButtonComponent],\n\timports: [CommonModule, SharedMaterialModule],\n\texports: [MiniFabButtonComponent],\n})\nexport class EcosMiniFabButtonModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { RemovableButtonComponent } from './removable-button.component';\n\n@NgModule({\n\tdeclarations: [RemovableButtonComponent],\n\timports: [CommonModule, SharedMaterialModule],\n\texports: [RemovableButtonComponent],\n})\nexport class EcosRemovableButton {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { EcosIconButtonModule } from '../../buttons';\nimport { SharedMaterialModule } from '../../material';\nimport { CampaignCardComponent } from './campaign-card.component';\n\n@NgModule({\n\tdeclarations: [CampaignCardComponent],\n\timports: [CommonModule, SharedMaterialModule, EcosIconButtonModule],\n\texports: [CampaignCardComponent],\n})\nexport class EcosCampaignCardModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../material';\nimport { DropdownComponent } from './dropdown.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { EcosUiDropDownDirective } from '../directives';\n\n@NgModule({\n\tdeclarations: [DropdownComponent],\n\timports: [CommonModule, SharedMaterialModule, FormsModule, ReactiveFormsModule, EcosUiDropDownDirective],\n\texports: [DropdownComponent],\n})\nexport class EcosDropdownModule {}\n","\n\t\n\t\n\t\t
\n\t\t\t
\n\t\t\t\t\"ecos\n\t\t\t
\n\t\t\t
\n\t\t\t\t
{{ title }}
\n\t\t\t
\n\n\t\t\t
\n\t\t\t\t
{{ subTitle }}
\n\t\t\t\t
\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{{ option.toUpperCase() }}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t\n
\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { EcosIconsModule } from '../../icons';\nimport { EcosIconButtonModule, EcosTextButtonModule } from '../../buttons';\nimport { animate, state, style, transition, trigger } from '@angular/animations';\nimport { Observable } from 'rxjs';\nimport {\n\tFormControl,\n\tFormGroup,\n\tFormsModule,\n\tNonNullableFormBuilder,\n\tReactiveFormsModule,\n\tValidators,\n} from '@angular/forms';\nimport { LetDirective } from '@ngrx/component';\nimport { EcosUiDropDownDirective } from '../../directives';\nimport { EcosDropdownModule } from '../../dropdown';\n\n@Component({\n\tselector: 'ecos-ui-card',\n\ttemplateUrl: './card.component.html',\n\tstyleUrls: ['./card.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tstandalone: true,\n\timports: [\n\t\tCommonModule,\n\t\tSharedMaterialModule,\n\t\tReactiveFormsModule,\n\t\tFormsModule,\n\t\tLetDirective,\n\t\tEcosUiDropDownDirective,\n\t\tEcosDropdownModule,\n\t\tEcosIconsModule,\n\t\tEcosIconButtonModule,\n\t\tEcosTextButtonModule,\n\t],\n\tanimations: [\n\t\ttrigger('moreCard', [\n\t\t\tstate('show', style({ transform: 'translateY(-186px)' })),\n\t\t\tstate('hide', style({ transform: 'translateY(0%)' })),\n\n\t\t\ttransition('* => show', animate(200)),\n\t\t\ttransition('* => hide', animate(200)),\n\t\t]),\n\t\ttrigger('button', [\n\t\t\tstate('in', style({ opacity: 1 })),\n\t\t\ttransition('void => *', [style({ opacity: 0 }), animate(200)]),\n\t\t\ttransition('* => void', [animate(200, style({ opacity: 0 }))]),\n\t\t]),\n\t],\n})\nexport class CardComponent implements OnInit {\n\t@Input() title: string;\n\t@Input() image: string;\n\t@Input() subTitle?: string;\n\t@Input() dropdownList?: Observable;\n\t@Input() buttonLabel?: string;\n\t@Input() cardOptions$?: Observable;\n\t@Output()\n\tcardAction: EventEmitter = new EventEmitter();\n\tshowHidden = false;\n\tform: FormGroup<{\n\t\tcardOption: FormControl;\n\t}>;\n\n\tconstructor(private fb: NonNullableFormBuilder) {}\n\tngOnInit(): void {\n\t\tthis.form = this.fb.group({\n\t\t\tcardOption: this.fb.control('', [Validators.required]),\n\t\t});\n\t}\n\tonClick(): void {\n\t\tif (this.buttonLabel) {\n\t\t\tthis.showHidden = true;\n\t\t} else {\n\t\t\tthis.clicked();\n\t\t}\n\t}\n\thide(): void {\n\t\tthis.showHidden = false;\n\t}\n\tclicked() {\n\t\tthis.cardAction.emit(this.form.controls.cardOption.value);\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../material';\nimport { ColorPickerComponent } from './color-picker.component';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport { ColorPickerModule } from 'ngx-color-picker';\n@NgModule({\n\tdeclarations: [ColorPickerComponent],\n\timports: [CommonModule, SharedMaterialModule, FormsModule, ReactiveFormsModule, ColorPickerModule],\n\texports: [ColorPickerComponent],\n})\nexport class EcosColorPickerModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EcosIconButtonModule } from '../buttons';\nimport { SharedMaterialModule } from '../material';\nimport { FacetHeaderComponent } from './facet-header.component';\n@NgModule({\n\tdeclarations: [FacetHeaderComponent],\n\timports: [CommonModule, SharedMaterialModule, EcosIconButtonModule, TranslateModule],\n\texports: [FacetHeaderComponent],\n})\nexport class EcosFacetHeaderModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharedMaterialModule } from '../../material';\nimport { DatepickerComponent } from './datepicker.component';\nimport { FormsModule } from '@angular/forms';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n\tdeclarations: [DatepickerComponent],\n\timports: [CommonModule, SharedMaterialModule, FormsModule, TranslateModule],\n\texports: [DatepickerComponent],\n})\nexport class EcosDatepickerModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { LetDirective, PushPipe } from '@ngrx/component';\nimport { SharedMaterialModule } from '../../material';\nimport { EcosCheckboxModule } from '../checkbox';\nimport { CheckboxListComponent } from './checkbox-list.component';\n\n@NgModule({\n\timports: [CommonModule, SharedMaterialModule, LetDirective, PushPipe, EcosCheckboxModule],\n\tdeclarations: [CheckboxListComponent],\n\texports: [CheckboxListComponent],\n})\nexport class EcosCheckboxListModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { InputComponent } from './input.component';\nimport { SharedMaterialModule } from '../../material';\nimport { FormsModule } from '@angular/forms';\n@NgModule({\n\tdeclarations: [InputComponent],\n\timports: [FormsModule, CommonModule, SharedMaterialModule],\n\texports: [InputComponent],\n})\nexport class EcosInputModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../material';\nimport { InternationalisationComponent } from './internationalisation.component';\n\nimport { TranslateModule } from '@ngx-translate/core';\n@NgModule({\n\timports: [CommonModule, SharedMaterialModule, TranslateModule],\n\tdeclarations: [InternationalisationComponent],\n\texports: [InternationalisationComponent],\n})\nexport class EcosInternationalisationModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\n\nimport { HeaderCounterComponent } from './header-counter.component';\n\n@NgModule({\n\tdeclarations: [HeaderCounterComponent],\n\timports: [CommonModule, SharedMaterialModule],\n\texports: [HeaderCounterComponent],\n})\nexport class EcosHeaderCounterModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { EcosFabButtonModule, EcosIconButtonModule } from '../../buttons';\nimport { HoverVisibilityDirective } from '../../directives';\nimport { SharedMaterialModule } from '../../material';\nimport { ListViewItemComponent } from './list-view-item.component';\n\n@NgModule({\n\tdeclarations: [ListViewItemComponent],\n\timports: [CommonModule, SharedMaterialModule, EcosIconButtonModule, EcosFabButtonModule, HoverVisibilityDirective],\n\texports: [ListViewItemComponent],\n})\nexport class EcosListViewItemModule {}\n","import { Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable } from 'rxjs';\nimport { ILoadingService } from './loading-service.interface';\n\n@Injectable({ providedIn: 'root' })\nexport class LoadingService implements ILoadingService {\n\tprivate loadingSub: BehaviorSubject = new BehaviorSubject(false);\n\tprivate loadingMap: Map = new Map();\n\n\tget loading$(): Observable {\n\t\treturn this.loadingSub.asObservable();\n\t}\n\n\tsetLoading(loading: boolean, id: string): void {\n\t\tif (!id) {\n\t\t\tthrow new Error('The request Id must be provided to the LoadingService.setLoading function');\n\t\t}\n\t\tif (loading === true) {\n\t\t\tthis.loadingMap.set(id, loading);\n\t\t\tthis.loadingSub.next(true);\n\t\t}\n\t\telse if (loading === false && this.loadingMap.has(id)) {\n\t\t\tthis.loadingMap.delete(id);\n\t\t}\n\t\tif (this.loadingMap.size === 0) {\n\t\t\tthis.loadingSub.next(false);\n\t\t}\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { LetDirective, PushPipe } from '@ngrx/component';\nimport { LoadingSpinnerComponent } from './loading-spinner.component';\nimport { SharedMaterialModule } from '../material';\nimport { LoadingService } from './loading.service';\nimport { LOADING_SERVICE } from './loading-service.interface';\n\n@NgModule({\n\tdeclarations: [LoadingSpinnerComponent],\n\timports: [CommonModule, LetDirective, PushPipe, SharedMaterialModule],\n\tproviders: [\n\t\t{\n\t\t\tprovide: LOADING_SERVICE,\n\t\t\tuseClass: LoadingService,\n\t\t},\n\t],\n\texports: [LoadingSpinnerComponent],\n})\nexport class EcosLoadingSpinnerModule {}\n","import { ComponentPortal, TemplatePortal } from '@angular/cdk/portal';\nimport { ComponentRef, Injectable, TemplateRef, ViewContainerRef } from '@angular/core';\nimport {\n\tOverlay,\n\tOverlayConfig,\n\tOverlayPositionBuilder,\n\tOverlayRef,\n\tScrollStrategyOptions,\n} from '@angular/cdk/overlay';\n\n@Injectable({ providedIn: 'root' })\nexport class ModalService {\n\toverlayRef: OverlayRef;\n\n\tconstructor(\n\t\tprivate overlay: Overlay,\n\t\tprivate positionBuilder: OverlayPositionBuilder,\n\t\tprivate scrollStrategy: ScrollStrategyOptions\n\t) {}\n\n\topenWithTemplate(template: TemplateRef, viewContainerRef: ViewContainerRef, config: OverlayConfig): void {\n\t\tconst options = {\n\t\t\thasBackdrop: true,\n\t\t\tbackdropClass: 'ecos-modal__backdrop',\n\t\t\tpanelClass: 'ecos-modal__panel',\n\t\t\tpositionStrategy: this.positionBuilder.global().centerHorizontally().centerVertically(),\n\t\t\tscrollStrategy: this.scrollStrategy.block(),\n\t\t};\n\t\tthis.overlayRef = this.overlay.create({ ...config, ...options });\n\n\t\tthis.overlayRef.attach(new TemplatePortal(template, viewContainerRef));\n\t}\n\n\topenWithComponent(\n\t\tcomponentPortal: ComponentPortal,\n\t\tconfig: OverlayConfig\n\t): { componentRef: ComponentRef; overlayRef: OverlayRef } {\n\t\tthis.overlayRef = this.overlay.create(config);\n\t\tconst componentRef = this.overlayRef.attach(componentPortal);\n\n\t\treturn { componentRef, overlayRef: this.overlayRef };\n\t}\n\n\tclose(): void {\n\t\tthis.overlayRef.dispose();\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../material';\nimport { ModalComponent } from './modal.component';\nimport { ModalService } from './modal.service';\nimport { CommonModule } from '@angular/common';\nimport { PortalModule } from '@angular/cdk/portal';\n@NgModule({\n imports: [CommonModule, PortalModule, SharedMaterialModule],\n declarations: [ModalComponent],\n providers: [ModalService],\n exports: [ModalComponent]\n})\nexport class EcosModalModule {}\n","import { CommonModule } from '@angular/common';\nimport { ModalContainerComponent } from './modal-container.component';\nimport { NgModule } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EcosIconButtonModule } from '../buttons/icon-button/icon-button.module';\nimport { EcosCloseButtonModule } from '../buttons/close-button/close-button.module';\nimport { EcosModalModule } from '../modal/modal.module';\nimport { SharedMaterialModule } from '../material/shared-material.module';\n\n@NgModule({\n\tdeclarations: [ModalContainerComponent],\n\timports: [\n\t\tCommonModule,\n\t\tSharedMaterialModule,\n\t\tTranslateModule,\n\t\tEcosIconButtonModule,\n\t\tEcosCloseButtonModule,\n\t\tEcosModalModule,\n\t],\n\texports: [ModalContainerComponent],\n})\nexport class EcosModalContainerModule {}\n","import { IDateTransformService, THRESHOLD_OPTIONS } from '../../models/date-transform-service.interface';\nimport { Inject, Injectable } from '@angular/core';\nimport { RelativeTimeThresholdOptions } from '../../models/date-transform.interface';\nimport { TranslationService } from '@ecos/translation';\nimport moment from 'moment';\n\n@Injectable()\nexport class DateTransformService implements IDateTransformService {\n\tprivate currentLanguage: string;\n\tprivate readonly defaultLang = 'en-GB';\n\tconstructor(\n\t\t@Inject(THRESHOLD_OPTIONS)\n\t\tprivate relativeTimeThresholdOptions: RelativeTimeThresholdOptions,\n\t\tprivate translate: TranslationService\n\t) {\n\t\tthis.init();\n\t}\n\n\tprivate init(): void {\n\t\tthis.setLanguage();\n\t\tthis.setRelativeTimeThresholds();\n\t\tthis.setRelativeTimeSpec();\n\t}\n\n\tprivate setLanguage(): void {\n\t\tthis.currentLanguage = this.translate.getCurrentLanguage();\n\t\tmoment.locale(this.currentLanguage);\n\t}\n\n\tprivate setRelativeTimeThresholds(): void {\n\t\tfor (const [threshold, value] of Object.entries(this.relativeTimeThresholdOptions)) {\n\t\t\tmoment.relativeTimeThreshold(threshold, value);\n\t\t}\n\t}\n\n\tprivate setRelativeTimeSpec(): void {\n\t\tconst moreThanAMonthLabel = this.translate.translateByKey(\n\t\t\t'DATA-MANAGER.UI.UPLOADS.RELATIVE_TIME.MORE_THAN_A_MONTH'\n\t\t);\n\n\t\tconst relativeTime: moment.RelativeTimeSpec = {\n\t\t\tfuture: `${this.translate.translateByKey('DATA-MANAGER.UI.UPLOADS.RELATIVE_TIME.FUTURE_PREFIX')} %s`,\n\t\t\tpast: `%s ${this.translate.translateByKey('DATA-MANAGER.UI.UPLOADS.RELATIVE_TIME.PAST_SUFFIX')}`,\n\t\t\tM: moreThanAMonthLabel,\n\t\t\tMM: moreThanAMonthLabel,\n\t\t\ty: moreThanAMonthLabel,\n\t\t\tyy: moreThanAMonthLabel,\n\t\t};\n\n\t\tmoment.updateLocale(this.currentLanguage ?? this.defaultLang, {\n\t\t\trelativeTime: { ...relativeTime },\n\t\t});\n\t}\n\n\ttransformDateToTimeAgo(dateToTransform: Date): string {\n\t\treturn moment(dateToTransform).fromNow();\n\t}\n}\n","import { DATE_TRANSFORM_SERVICE, THRESHOLD_OPTIONS } from '../models/date-transform-service.interface';\nimport { DateTransformService } from './date/date-transform.service';\nimport { FileSizePipe } from './file/file-size.pipe';\nimport { NgModule } from '@angular/core';\nimport { TimeAgoPipe } from './date/time-ago.pipe';\nimport { TruncatePipe } from './truncate/truncate.pipe';\nimport { EvenOddPipe } from './evenodd/evenodd.pipe';\nimport { SortPipe } from './sort/sort.pipe';\n\n@NgModule({\n\tdeclarations: [FileSizePipe, TimeAgoPipe, TruncatePipe, EvenOddPipe, SortPipe],\n\texports: [FileSizePipe, TimeAgoPipe, TruncatePipe, EvenOddPipe, SortPipe],\n\tproviders: [\n\t\t{\n\t\t\tprovide: DATE_TRANSFORM_SERVICE,\n\t\t\tuseClass: DateTransformService,\n\t\t},\n\t\t{\n\t\t\tprovide: THRESHOLD_OPTIONS,\n\t\t\tuseValue: { s: 60, ss: 5, m: 60, h: 24, d: 29, M: 12 },\n\t\t},\n\t],\n})\nexport class PipesModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ProgressBarComponent } from './progress-bar.component';\nimport { SharedMaterialModule } from '../material';\n\n@NgModule({\n\tdeclarations: [ProgressBarComponent],\n\timports: [CommonModule, SharedMaterialModule],\n\texports: [ProgressBarComponent],\n})\nexport class EcosProgressBarModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ProgressSpinnerComponent } from '.';\nimport { SharedMaterialModule } from '../material';\n\n@NgModule({\n\tdeclarations: [ProgressSpinnerComponent],\n\timports: [CommonModule, SharedMaterialModule],\n\texports: [ProgressSpinnerComponent],\n})\nexport class EcosProgressSpinnerModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SharedMaterialModule } from '../material';\nimport { RadioSelectionComponent } from './radio-selection.component';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { TranslateModule } from '@ngx-translate/core';\n@NgModule({\n\timports: [CommonModule, SharedMaterialModule, FormsModule, MatRadioModule, TranslateModule],\n\tdeclarations: [RadioSelectionComponent],\n\texports: [RadioSelectionComponent],\n})\nexport class EcosRadioSelectionModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { SharedMaterialModule } from '../material';\nimport { SearchAutocompleteComponent } from './search-autocomplete.component';\nimport { EcosIconButtonModule } from '../buttons/icon-button';\n\nimport { TranslateModule } from '@ngx-translate/core';\n@NgModule({\n\timports: [CommonModule, SharedMaterialModule, ReactiveFormsModule, TranslateModule, EcosIconButtonModule],\n\tdeclarations: [SearchAutocompleteComponent],\n\texports: [SearchAutocompleteComponent],\n})\nexport class EcosSearchAutocompleteModule {}\n","import { CommonModule } from '@angular/common';\nimport { EcosCheckboxListModule } from '../forms';\nimport { EcosSearchModule } from '../search';\nimport { NgModule } from '@angular/core';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { SearchableCheckboxListComponent } from './searchable-checkbox-list.component';\nimport { SearchableCheckboxListSkeletonComponent } from './skeletons/searchable-checkbox-list-skeleton.component';\nimport { SharedMaterialModule } from '../material';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n\tdeclarations: [SearchableCheckboxListComponent, SearchableCheckboxListSkeletonComponent],\n\timports: [\n\t\tCommonModule,\n\t\tSharedMaterialModule,\n\t\tEcosSearchModule,\n\t\tEcosCheckboxListModule,\n\t\tNgxSkeletonLoaderModule,\n\t\tTranslateModule\n\t],\n\texports: [\n\t\tSharedMaterialModule,\n\t\tSearchableCheckboxListComponent,\n\t\tSearchableCheckboxListSkeletonComponent,\n\t\tNgxSkeletonLoaderModule,\n\t],\n})\nexport class EcosSearchableCheckboxListModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { SharedMaterialModule } from '../material';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { NgxMatSelectSearchModule } from 'ngx-mat-select-search';\nimport { SelectSearchComponent } from './select-search.component';\nimport { EcosUiDropDownDirective } from '../directives';\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tSharedMaterialModule,\n\t\tFormsModule,\n\t\tReactiveFormsModule,\n\t\tMatSelectModule,\n\t\tMatButtonModule,\n\t\tMatFormFieldModule,\n\t\tNgxMatSelectSearchModule,\n\t\tEcosUiDropDownDirective,\n\t],\n\tdeclarations: [SelectSearchComponent],\n\texports: [SelectSearchComponent],\n})\nexport class EcosSelectSearchModule {}\n","import { NgModule } from '@angular/core';\nimport { AngularSplitModule } from 'angular-split';\n\n@NgModule({\n\tdeclarations: [],\n\timports: [AngularSplitModule],\n\texports: [AngularSplitModule],\n})\nexport class EcosSplittablePanelModule {}\n","import { CdkStepperModule } from '@angular/cdk/stepper';\nimport { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../material';\nimport { StepperComponent } from './stepper.component';\n\n@NgModule({\n\tdeclarations: [StepperComponent],\n\timports: [CommonModule, SharedMaterialModule, CdkStepperModule],\n\texports: [StepperComponent],\n})\nexport class EcosStepperModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { TableComponent } from './table.component';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatPaginatorModule } from '@angular/material/paginator';\n\n@NgModule({\n\tdeclarations: [TableComponent],\n\timports: [CommonModule, MatTableModule, MatPaginatorModule],\n\texports: [TableComponent],\n})\nexport class EcosTableModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../material';\nimport { ContentContainerDirective } from './content-container.directive';\nimport { TabContentComponent } from './tab-content.component';\nimport { TabsComponent } from './tabs.component';\n\n@NgModule({\n\tdeclarations: [TabsComponent, TabContentComponent, ContentContainerDirective],\n\timports: [CommonModule, SharedMaterialModule],\n\texports: [TabsComponent],\n})\nexport class EcosTabModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { LetDirective } from '@ngrx/component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { EcosChipsModule } from '../chips/chips.module';\nimport { EcosStatusMessageModule } from '../forms/status-message';\nimport { SharedMaterialModule } from '../material/shared-material.module';\nimport { RemovableTagsListComponent } from './components/removable-tags-list/removable-tags-list.component';\nimport { TagsInsertComponent } from './components/tags-insert/tags-insert.component';\nimport { TagsListEditorComponent } from './components/tags-list-editor/tags-list-editor.component';\nimport { TagsComponent } from './components/tags/tags.component';\nimport { EcosTextButtonModule, EcosIconButtonModule } from '../buttons';\nimport { InputTagsComponent } from './components/tags-in-input/input-tags.component';\nimport { EcosUiDropDownDirective } from '../directives';\n\n@NgModule({\n\tdeclarations: [\n\t\tTagsComponent,\n\t\tTagsInsertComponent,\n\t\tRemovableTagsListComponent,\n\t\tInputTagsComponent,\n\t\tTagsListEditorComponent,\n\t],\n\timports: [\n\t\tCommonModule,\n\t\tSharedMaterialModule,\n\t\tTranslateModule,\n\t\tEcosChipsModule,\n\t\tLetDirective,\n\t\tEcosUiDropDownDirective,\n\t\tEcosStatusMessageModule,\n\t\tEcosTextButtonModule,\n\t\tEcosIconButtonModule,\n\t\tFormsModule,\n\t],\n\texports: [\n\t\tTagsComponent,\n\t\tTagsInsertComponent,\n\t\tRemovableTagsListComponent,\n\t\tInputTagsComponent,\n\t\tTagsListEditorComponent,\n\t],\n})\nexport class EcosTagsModule {}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { RouterModule } from '@angular/router';\nimport { NgxSkeletonLoaderModule } from 'ngx-skeleton-loader';\nimport { EcosActionBarModule } from './action-footer';\nimport { EcosBadgeModule } from './badge';\nimport { EcosBasicButtonModule } from './buttons';\nimport { EcosActionBarButtonModule } from './buttons/action-bar-button';\nimport { EcosCloseButtonModule } from './buttons/close-button';\nimport { EcosDropdownButtonModule } from './buttons/dropdown-button';\nimport { EcosFabButtonModule } from './buttons/fab-button';\nimport { EcosIconButtonModule } from './buttons/icon-button';\nimport { EcosLinkButtonModule } from './buttons/link-button';\nimport { MenuButtonComponent } from './buttons/menu-button';\nimport { EcosMiniFabButtonModule } from './buttons/mini-fab-button';\nimport { EcosRemovableButton } from './buttons/removable-button';\nimport { EcosTextButtonModule } from './buttons/text-button';\nimport { EcosCampaignCardModule } from './cards/campaign-card';\nimport { CardComponent } from './cards/card';\nimport { EcosChipsModule } from './chips';\nimport { CollapsiblePanelComponent } from './collapsible-panel';\nimport { EcosColorPickerModule } from './color-picker';\nimport { DirectivesModule } from './directives/directives.module';\nimport { EcosDropdownModule } from './dropdown';\nimport { EcosFacetHeaderModule } from './facet-header';\nimport { EcosCheckboxListModule, EcosDatepickerModule } from './forms';\nimport { EcosCheckboxModule } from './forms/checkbox';\nimport { EcosInputModule } from './forms/input-component';\nimport { EcosPaginatorModule } from './forms/paginator';\nimport { EcosRadioIconButtonModule } from './forms/radio-icon-button';\nimport { EcosSlideToggleModule } from './forms/slide-toggle';\nimport { SliderComponent } from './forms/slider';\nimport { EcosStatusMessageModule } from './forms/status-message';\nimport { EcosIconsModule } from './icons';\nimport { EcosInternationalisationModule } from './internationalisation';\nimport { EcosHeaderCounterModule, EcosListViewItemModule } from './layout';\nimport { EcosLoadingSpinnerModule } from './loading-spinner';\nimport { SharedMaterialModule } from './material';\nimport { EcosModalContainerModule } from './modal-container';\nimport { PipesModule } from './pipes/pipes.module';\nimport { EcosProgressBarModule } from './progress-bar';\nimport { EcosProgressSpinnerModule } from './progress-spinner';\nimport { EcosRadioSelectionModule } from './radio-selection/radio-selection.module';\nimport { EcosSearchModule } from './search';\nimport { EcosSearchAutocompleteModule } from './search-autocomplete';\nimport { EcosSearchableCheckboxListModule } from './searchable-checkbox-list';\nimport { EcosSelectSearchModule } from './select-search';\nimport { EcosSplittablePanelModule } from './splittable-panel';\nimport { EcosStepperModule } from './stepper';\nimport { EcosTableModule } from './table';\nimport { EcosTabModule } from './tabs';\nimport { EcosTagsModule } from './tags/tags.module';\nimport { ToolbarComponent } from './toolbar';\nimport { EcosUiViewToggleComponent } from './view-toggle';\nimport { CheckedLabelComponent } from './forms/checked-label';\nimport { EcosOptionButtonModule } from './buttons/option-button';\n\nconst componentModules = [\n\tEcosTextButtonModule,\n\tEcosIconButtonModule,\n\tEcosOptionButtonModule,\n\tEcosFabButtonModule,\n\tEcosMiniFabButtonModule,\n\tEcosRemovableButton,\n\tEcosBadgeModule,\n\tEcosCheckboxModule,\n\tEcosSlideToggleModule,\n\tEcosRadioIconButtonModule,\n\tEcosActionBarButtonModule,\n\tEcosActionBarModule,\n\tEcosDropdownModule,\n\tEcosInputModule,\n\tEcosIconButtonModule,\n\tEcosLinkButtonModule,\n\tEcosCloseButtonModule,\n\tEcosDropdownButtonModule,\n\tMenuButtonComponent,\n\tEcosStepperModule,\n\tEcosDatepickerModule,\n\tEcosColorPickerModule,\n\tEcosSearchModule,\n\tEcosChipsModule,\n\tEcosCampaignCardModule,\n\tEcosTabModule,\n\tEcosHeaderCounterModule,\n\tCollapsiblePanelComponent,\n\tSliderComponent,\n\tCardComponent,\n\tEcosSplittablePanelModule,\n\tEcosListViewItemModule,\n\tEcosPaginatorModule,\n\tEcosProgressBarModule,\n\tEcosProgressSpinnerModule,\n\tEcosCheckboxListModule,\n\tEcosBasicButtonModule,\n\tEcosInternationalisationModule,\n\tEcosSearchableCheckboxListModule,\n\tEcosFacetHeaderModule,\n\tEcosTagsModule,\n\tEcosTableModule,\n\tEcosIconsModule,\n\tEcosStatusMessageModule,\n\tEcosSearchAutocompleteModule,\n\tEcosSelectSearchModule,\n\tEcosModalContainerModule,\n\tEcosLoadingSpinnerModule,\n\tEcosRadioSelectionModule,\n\tCheckedLabelComponent,\n];\n\nconst components = [EcosUiViewToggleComponent, ToolbarComponent];\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tReactiveFormsModule,\n\t\tRouterModule,\n\t\tSharedMaterialModule,\n\t\tNgxSkeletonLoaderModule,\n\t\t...componentModules,\n\t],\n\tdeclarations: [...components],\n\texports: [SharedMaterialModule, PipesModule, DirectivesModule, ...componentModules, ...components],\n})\nexport class SharedUiModule {}\n","
\n\t
\n\t\t\n\t
\n\t\n\t\t\n\t\t
{{ isTranslatable ? (header | translate) : header }}
\n\t
\n\t\n\t\t
{{ isTranslatable ? (message | translate) : message }}
\n\t
\n\n\t\n\t\t\n\t\t\n\t\n\n","import { ButtonOptions } from './button-options.interface';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInject,\n\tInput,\n\tOnInit,\n\tOutput,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { DialogOptions } from './dialog-options.interface';\nimport { MAT_DIALOG_DATA, MatDialog, MatDialogRef } from '@angular/material/dialog';\n\n@Component({\n\tselector: 'ecos-ui-dialog',\n\ttemplateUrl: 'dialog.component.html',\n\tstyleUrls: ['dialog.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n})\nexport class DialogComponent implements OnInit {\n\t@Input()\n\theader: string | undefined;\n\n\t@Input()\n\theaderIconColor: 'none' | 'warn' | 'error' | 'accent' | 'success' | undefined;\n\n\t@Input()\n\theaderIcon: string | undefined;\n\n\t@Input()\n\tshowCloseButton = false;\n\n\t@Input()\n\tmessage: string;\n\n\t@Input()\n\tprimaryButton: ButtonOptions | undefined;\n\n\t@Input()\n\tsecondaryButton: ButtonOptions | undefined;\n\n\t@Input()\n\tisTranslatable: boolean;\n\n\t@Output()\n\tprimaryButtonClicked: EventEmitter = new EventEmitter();\n\n\t@Output()\n\tsecondaryButtonClicked: EventEmitter = new EventEmitter();\n\n\tconstructor(\n\t\t@Inject(MAT_DIALOG_DATA) public data: DialogOptions,\n\t\tpublic dialogRef: MatDialogRef,\n\t\tpublic dialog: MatDialog,\n\t) {}\n\n\tngOnInit(): void {\n\t\tthis.header = this.data.header;\n\t\tthis.message = this.data.message;\n\t\tthis.primaryButton = this.data.primaryButton;\n\t\tthis.secondaryButton = this.data.secondaryButton;\n\t\tthis.headerIcon = this.data.headerIcon;\n\t\tthis.headerIconColor = this.data.headerIconColor;\n\t\tthis.showCloseButton = this.data.showCloseButton;\n\t\tthis.isTranslatable = this.data.isTranslatable;\n\t}\n}\n","import { ButtonOptions } from './button-options.interface';\nimport { DialogComponent } from './dialog.component';\nimport { Injectable } from '@angular/core';\nimport {\n\tMatDialog,\n\tMatDialogRef,\n\tMatDialogConfig,\n} from '@angular/material/dialog';\n@Injectable({\n\tprovidedIn: 'root',\n})\nexport class DialogService {\n\tdialogRef: MatDialogRef;\n\n\tprivate defaultConfig: MatDialogConfig = {\n\t\tpanelClass: ['ecos-dialog'],\n\t};\n\n\tconstructor(private dialog: MatDialog) {}\n\n\tpublic open(\n\t\theader: string,\n\t\tmessage: string,\n\t\tprimaryButton?: ButtonOptions,\n\t\tsecondaryButton?: ButtonOptions,\n\t\theaderIcon?: string,\n\t\theaderIconColor?: string,\n\t\tshowCloseButton = true,\n\t\tisTranslatable = false\n\t) {\n\t\tlet panelClass = ['ecos-dialog--opened'];\n\t\tif (Array.isArray(this.defaultConfig.panelClass)) {\n\t\t\tpanelClass = [...this.defaultConfig.panelClass, ...panelClass];\n\t\t} else {\n\t\t\tconst value = this.defaultConfig.panelClass || [];\n\t\t\tpanelClass = [...value, ...panelClass];\n\t\t}\n\n\t\tthis.dialogRef = this.dialog.open(DialogComponent, {\n\t\t\t...this.defaultConfig,\n\t\t\tdata: {\n\t\t\t\theader,\n\t\t\t\tmessage,\n\t\t\t\tprimaryButton,\n\t\t\t\tsecondaryButton,\n\t\t\t\theaderIcon,\n\t\t\t\theaderIconColor,\n\t\t\t\tshowCloseButton,\n\t\t\t\tisTranslatable,\n\t\t\t},\n\t\t\thasBackdrop: true,\n\t\t\tpanelClass,\n\t\t});\n\t}\n\n\tpublic close() {\n\t\tthis.dialogRef.close();\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { DialogComponent } from './dialog.component';\nimport { DialogConfig } from './dialog-config.interface';\nimport { DialogService } from './dialog.service';\nimport { EcosCloseButtonModule } from '../buttons/close-button';\nimport { EcosIconButtonModule } from '../buttons/icon-button';\nimport { EcosTextButtonModule } from '../buttons/text-button';\nimport { MAT_DIALOG_DATA, MAT_DIALOG_DEFAULT_OPTIONS, SharedMaterialModule } from '../material';\nimport { ModuleWithProviders, NgModule, Optional, SkipSelf } from '@angular/core';\nimport { TranslateModule } from '@ngx-translate/core';\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tSharedMaterialModule,\n\t\tEcosTextButtonModule,\n\t\tEcosIconButtonModule,\n\t\tEcosCloseButtonModule,\n\t\tTranslateModule,\n\t],\n\tdeclarations: [DialogComponent],\n\tproviders: [DialogService],\n\texports: [DialogComponent],\n})\nexport class EcosDialogModule {\n\tconstructor(@Optional() @SkipSelf() parentModule: EcosDialogModule) {\n\t\tthis.throwIfAlreadyLoaded(parentModule, 'DialogModule');\n\t}\n\n\tstatic forRoot(\n\t\toptions: DialogConfig = {\n\t\t\thasBackdrop: true,\n\t\t}\n\t): ModuleWithProviders {\n\t\treturn {\n\t\t\tngModule: EcosDialogModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: MAT_DIALOG_DEFAULT_OPTIONS,\n\t\t\t\t\tuseValue: { ...options },\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tprovide: MAT_DIALOG_DATA,\n\t\t\t\t\tuseValue: { ...options },\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t}\n\n\tprivate throwIfAlreadyLoaded(parentModule: any, moduleName: string) {\n\t\tif (parentModule) {\n\t\t\tthrow new Error(`${moduleName} has already been loaded. Import ${moduleName} in the AppModule only.`);\n\t\t}\n\t}\n}\n","\n","import { Component, Input } from '@angular/core';\n\n@Component({\n\tselector: 'ecos-ui-badge',\n\ttemplateUrl: './badge.component.html',\n\tstyleUrls: ['./badge.component.scss'],\n})\nexport class BadgeComponent {\n\t@Input() show: boolean;\n\t@Input() position: 'top' | 'bottom' = 'bottom';\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { BadgeComponent } from './badge.component';\n\n@NgModule({\n\tdeclarations: [BadgeComponent],\n\timports: [CommonModule],\n\texports: [BadgeComponent],\n})\nexport class EcosBadgeModule {}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n\tselector: 'ecos-ui-close-button',\n\ttemplateUrl: './close-button.component.html',\n\tstyleUrls: ['./close-button.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CloseButtonComponent {\n\t@Input()\n\tdisabled = false;\n\t@Input()\n\ttooltip = 'Close';\n\t@Output()\n\tclosed: EventEmitter = new EventEmitter();\n\n\tclicked() {\n\t\tthis.closed.emit();\n\t}\n}\n","\n\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { TooltipPosition } from '@angular/material/tooltip';\n\n@Component({\n\tselector: 'ecos-ui-icon-button',\n\ttemplateUrl: './icon-button.component.html',\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class IconButtonComponent {\n\t@Input()\n\ticon: string;\n\t@Input()\n\tisSvg = true;\n\t@Input()\n\ttooltip?: string;\n\t@Input()\n\ttooltipPosition: TooltipPosition = 'below';\n\t@Input()\n\tdisabled: boolean | null = false;\n\t@Input()\n\tshowBadge: boolean = false;\n\t@Input()\n\tsize: 'small' | 'large' = 'small';\n\n\t@Input()\n\tvariant: 'primary' | 'secondary' | 'tertiary' | 'ghost' = 'ghost';\n\n\t@Output()\n\taction: EventEmitter = new EventEmitter();\n\n\tclicked(): void {\n\t\tif (!this.disabled) {\n\t\t\tthis.action.emit();\n\t\t}\n\t}\n}\n","
\n\t\n
\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { IconButtonComponent } from './icon-button.component';\nimport { EcosTextButtonModule } from '../text-button';\n\n@NgModule({\n\tdeclarations: [IconButtonComponent],\n\timports: [CommonModule, SharedMaterialModule, EcosTextButtonModule],\n\texports: [IconButtonComponent],\n})\nexport class EcosIconButtonModule {}\n","
\n\t \n\t\n\t\t\n\t\t\tmore_horiz\n\t\t\n\t\n\t\n\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ item.icon.name }}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t
{{ isTranslatable ? (item.label | translate) : item.label }}
\n\t\t\t\t
\n\t\t\t\n\t\t
\n\t
\n
\n","import {\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tEventEmitter,\n\tInput,\n\tOutput,\n\tQueryList,\n\tViewChild,\n\tViewChildren,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { DropdownButtonOption } from '../../models/dropdown-button-options.interface';\nimport { CommonModule } from '@angular/common';\nimport { CdkMenu, CdkMenuItem, CdkMenuModule, CdkMenuTrigger } from '@angular/cdk/menu';\nimport { LetDirective } from '@ngrx/component';\nimport { TranslateModule } from '@ngx-translate/core';\nimport { MatIconModule } from '@angular/material/icon';\nimport { DirectivesModule } from '../../directives';\nimport { MatButtonModule } from '@angular/material/button';\nimport { menuPosition, positionType } from './menu-position.config';\nimport { ConnectionPositionPair } from '@angular/cdk/overlay';\n@Component({\n\tselector: 'ecos-ui-menu-button',\n\ttemplateUrl: 'menu-button.component.html',\n\tstyleUrls: ['menu-button.component.scss'],\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tstandalone: true,\n\timports: [\n\t\tCommonModule,\n\t\tMatButtonModule,\n\t\tMatIconModule,\n\t\tTranslateModule,\n\t\tDirectivesModule,\n\t\tCdkMenuModule,\n\t\tLetDirective,\n\t\tMatIconModule,\n\t],\n})\nexport class MenuButtonComponent {\n\t@Input()\n\titems: Array;\n\t@Input()\n\tisTranslatable = false;\n\t@Input()\n\tdisabled = false;\n\t@Input()\n\tcustomButton = false;\n\t// if to highlight the selected option when the menu is opened or just use it as a toggle\n\t@Input()\n\thighlightCurrentSelection = false;\n\t@Input()\n\tdefaultPosition: string = positionType.endBottom;\n\t@Output()\n\titemSelected: EventEmitter = new EventEmitter();\n\n\tpositions: Record> = {\n\t\tendBottom: [menuPosition.endBottom, menuPosition.endTop],\n\t\tstartBottom: [menuPosition.startBottom, menuPosition.startTop],\n\t\tleftDown: [menuPosition.leftDown, menuPosition.leftUp, menuPosition.rightDown, menuPosition.rightUp],\n\t\tleftUp: [menuPosition.leftUp, menuPosition.leftDown, menuPosition.rightUp, menuPosition.rightDown],\n\t\trightDown: [menuPosition.rightDown, menuPosition.rightUp, menuPosition.leftUp, menuPosition.leftDown],\n\t\trightUp: [menuPosition.rightUp, menuPosition.rightDown, menuPosition.leftUp, menuPosition.leftDown],\n\t};\n\n\t// for testing\n\t@ViewChildren(CdkMenu) menus: QueryList;\n\t@ViewChildren(CdkMenu, { read: ElementRef }) nativeMenus: QueryList;\n\t@ViewChild(CdkMenuTrigger) trigger: CdkMenuTrigger;\n\t@ViewChild(CdkMenuTrigger, { read: ElementRef }) nativeTrigger: ElementRef;\n\t@ViewChildren(CdkMenuItem) menuItems: QueryList;\n\tclicked(item: DropdownButtonOption): void {\n\t\tthis.itemSelected.emit(item.value || item.label);\n\t\tif (this.highlightCurrentSelection) {\n\t\t\tthis.items = this.items.map((option) => ({ ...option, selected: option.value === item.value }));\n\t\t}\n\t}\n}\n","import { ConnectionPositionPair } from '@angular/cdk/overlay';\nexport enum positionType {\n\tendBottom = 'endBottom',\n\tendTop = 'endTop',\n\tstartBottom = 'startBottom',\n\tstartTop = 'startTop',\n\tleftDown = 'leftDown',\n\tleftUp = 'leftUp',\n\trightDown = 'rightDown',\n\trightUp = 'rightUp',\n}\n\nexport const menuPosition: Record = {\n\tendBottom: new ConnectionPositionPair(\n\t\t{ originX: 'end', originY: 'bottom' },\n\t\t{ overlayX: 'end', overlayY: 'top' },\n\t\t10,\n\t\t9,\n\t\t'ecos-menu-button__menu-end-bottom'\n\t),\n\tendTop: new ConnectionPositionPair(\n\t\t{ originX: 'end', originY: 'top' },\n\t\t{ overlayX: 'end', overlayY: 'bottom' },\n\t\t10,\n\t\t-9,\n\t\t'ecos-menu-button__menu-end-top'\n\t),\n\tstartBottom: new ConnectionPositionPair(\n\t\t{ originX: 'start', originY: 'bottom' },\n\t\t{ overlayX: 'start', overlayY: 'top' },\n\t\t-10,\n\t\t9,\n\t\t'ecos-menu-button__menu-start-bottom'\n\t),\n\tstartTop: new ConnectionPositionPair(\n\t\t{ originX: 'start', originY: 'top' },\n\t\t{ overlayX: 'start', overlayY: 'bottom' },\n\t\t-10,\n\t\t-9,\n\t\t'ecos-menu-button__menu-start-top'\n\t),\n\tleftDown: new ConnectionPositionPair(\n\t\t{ originX: 'start', originY: 'top' },\n\t\t{ overlayX: 'end', overlayY: 'top' },\n\t\t-9,\n\t\t-10,\n\t\t'ecos-menu-button__menu-left-down'\n\t),\n\tleftUp: new ConnectionPositionPair(\n\t\t{ originX: 'start', originY: 'bottom' },\n\t\t{ overlayX: 'end', overlayY: 'bottom' },\n\n\t\t-9,\n\t\t10,\n\t\t'ecos-menu-button__menu-left-up'\n\t),\n\trightDown: new ConnectionPositionPair(\n\t\t{ originX: 'end', originY: 'top' },\n\t\t{ overlayX: 'start', overlayY: 'top' },\n\n\t\t9,\n\t\t-10,\n\t\t'ecos-menu-button__menu-right-down'\n\t),\n\trightUp: new ConnectionPositionPair(\n\t\t{ originX: 'end', originY: 'bottom' },\n\t\t{ overlayX: 'start', overlayY: 'bottom' },\n\n\t\t9,\n\t\t10,\n\t\t'ecos-menu-button__menu-right-up'\n\t),\n};\n","
\n\t\n\t\t
\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t \n\t\t\t{{ label }}\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t \n\t\t
\n\t\n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, OnInit, Output } from '@angular/core';\n\n@Component({\n\tselector: 'ecos-ui-text-button',\n\ttemplateUrl: './text-button.component.html',\n\tstyleUrls: ['./text-button.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TextButtonComponent implements OnInit {\n\t@Input()\n\tlabel: string;\n\n\t@Input()\n\ticon: string;\n\n\t@Input()\n\ticonPosition: 'left' | 'right' = 'right';\n\n\t@Input()\n\tsize: 'small' | 'menu' | 'large' = 'large';\n\n\t@Input()\n\tdisabled: boolean | null = false;\n\n\t@Input()\n\tshowBadge: boolean = false;\n\n\t@Input()\n\tvariant: 'primary' | 'secondary' | 'tertiary' | 'ghost' | 'menu' = 'secondary';\n\n\tcolor: 'primary' | 'accent' = 'primary';\n\t@Output()\n\taction: EventEmitter = new EventEmitter();\n\n\tngOnInit(): void {\n\t\tswitch (this.variant) {\n\t\t\tcase 'primary':\n\t\t\tcase 'secondary':\n\t\t\t\tthis.color = 'primary';\n\t\t\t\tbreak;\n\n\t\t\tcase 'tertiary':\n\t\t\tcase 'ghost':\n\t\t\t\tthis.color = 'accent';\n\t\t}\n\t}\n\tclicked(): void {\n\t\tthis.action.emit();\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { SharedMaterialModule } from '../../material';\nimport { TextButtonComponent } from './text-button.component';\nimport { EcosBadgeModule } from '../../badge';\n\n@NgModule({\n\tdeclarations: [TextButtonComponent],\n\timports: [CommonModule, SharedMaterialModule, EcosBadgeModule],\n\texports: [TextButtonComponent],\n})\nexport class EcosTextButtonModule {}\n","\n\t
\n\t\t\n\t\t\t\n\t\t
\n\t\t
\n\t\t\t\"ecos\n\t\t
\n\t\t
\n\t\t\t
{{ item.label }}
\n\t\t
\n\n\t\t
\n\t\t\t{{ description }}\n\t\t
\n\t\n","/* eslint-disable no-underscore-dangle */\nimport { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\nimport { MatButtonToggleChange } from '@angular/material/button-toggle';\nimport { CheckboxModel } from '../../models';\nimport { CommonModule } from '@angular/common';\nimport { SharedMaterialModule } from '../../material';\nimport { LetDirective } from '@ngrx/component';\nimport { FormsModule } from '@angular/forms';\nimport { EcosIconsModule } from '../../icons';\n\n@Component({\n\tselector: 'ecos-ui-toggle-card',\n\ttemplateUrl: './toggle-card.component.html',\n\tstyleUrls: ['./toggle-card.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tstandalone: true,\n\tencapsulation: ViewEncapsulation.None,\n\timports: [CommonModule, SharedMaterialModule, LetDirective, FormsModule, EcosIconsModule],\n})\nexport class ToggleCardComponent {\n\t@Input()\n\titem: CheckboxModel;\n\t@Input()\n\tdescription?: string;\n\n\t@Output() selected: EventEmitter = new EventEmitter();\n\n\tselectItem(selectedItem: CheckboxModel): void {\n\t\tthis.selected.emit({\n\t\t\tvalue: selectedItem.value,\n\t\t\tlabel: selectedItem.label,\n\t\t\tdisabled: selectedItem.disabled,\n\t\t});\n\t}\n}\n","
\n\t\n\t\t\n\t\t\t{{ label }} clear\n\t\t\n\t\n
\n","import { Component, Input, Output, EventEmitter, ViewEncapsulation, ChangeDetectionStrategy } from '@angular/core';\n\n@Component({\n\tselector: 'ecos-ui-chips',\n\ttemplateUrl: './chips.component.html',\n\tstyleUrls: ['./chips.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n})\nexport class EcosChipsComponent {\n\t@Input() labels: string[];\n\t@Input() stackable = false;\n\t@Input() disabled = false;\n\t@Input() selectable?: boolean;\n\t@Input() removable: boolean;\n\t@Input() truncate = false;\n\t@Input() color = 'primary';\n\t@Output() removed = new EventEmitter();\n\n\tremove(label: string): void {\n\t\tthis.removed.emit(label);\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { ChangeDetectionStrategy, Component, Input, ViewEncapsulation } from '@angular/core';\nimport { SharedMaterialModule } from '../material/shared-material.module';\nimport { TogglePosition } from './collapsible-panel.interface';\n\n@Component({\n\tselector: 'ecos-ui-collapsible-panel',\n\ttemplateUrl: './collapsible-panel.component.html',\n\tstyleUrls: ['./collapsible-panel.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tstandalone: true,\n\tencapsulation: ViewEncapsulation.None,\n\timports: [CommonModule, SharedMaterialModule],\n})\nexport class CollapsiblePanelComponent {\n\t@Input() position: TogglePosition = TogglePosition.After;\n\t@Input() expanded = false;\n\t@Input() hideToggle = false;\n\n\t@Input() minimalPadding = false;\n}\n","
\n\t\n\t\t\n\t\t\t\n\t\t\n\t\t\n\t\n
\n","export enum TogglePosition {\n\tBefore = 'before',\n\tAfter = 'after',\n}\n","import { NgModule } from '@angular/core';\nimport { ThrottleClickDirective } from './throttle-click.directive';\n\n@NgModule({\n\tdeclarations: [ThrottleClickDirective],\n\timports: [],\n\texports: [ThrottleClickDirective],\n\tproviders: [],\n})\nexport class ThrottleClickModule {}\n","import { NgModule } from '@angular/core';\nimport { FeatureNotSupportedModule } from './feature-not-supported/feature-not-supported.module';\nimport { ThrottleClickModule } from './throttle-click';\nimport { TooltipModule } from './tooltip';\nimport { OutsideClickModule } from './outside-click';\nimport { EcosUiDropDownDirective } from './ecos-ui-dropdown';\n\n@NgModule({\n\timports: [\n\t\tEcosUiDropDownDirective,\n\t\tThrottleClickModule,\n\t\tFeatureNotSupportedModule,\n\t\tTooltipModule,\n\t\tOutsideClickModule,\n\t],\n\texports: [EcosUiDropDownDirective, ThrottleClickModule, FeatureNotSupportedModule, TooltipModule, OutsideClickModule],\n\tproviders: [],\n})\nexport class DirectivesModule {}\n","import { AfterViewInit, Directive, ElementRef, Renderer2, ContentChild } from '@angular/core';\n\nimport { MAT_FORM_FIELD_DEFAULT_OPTIONS, MatFormField } from '@angular/material/form-field';\nimport { MatSelect } from '@angular/material/select';\n\n@Directive({\n\tselector: '[ecosUiDropDown]',\n\tstandalone: true,\n\tproviders: [\n\t\t{\n\t\t\tprovide: MAT_FORM_FIELD_DEFAULT_OPTIONS,\n\t\t\tuseValue: { appearance: 'outline', hideRequiredMarker: true },\n\t\t},\n\t],\n})\nexport class EcosUiDropDownDirective implements AfterViewInit {\n\t@ContentChild(MatSelect) matSelect!: MatSelect;\n\n\tconstructor(component: MatFormField, private el: ElementRef, private renderer: Renderer2) {\n\t\tcomponent.color = 'accent';\n\t\tthis.renderer.addClass(this.el.nativeElement, 'ecos-ui-dropdown');\n\t}\n\tngAfterViewInit(): void {\n\t\tif (this.matSelect) {\n\t\t\tconst option = this.el.nativeElement.querySelector('.mat-mdc-form-field-infix');\n\n\t\t\tthis.renderer.addClass(option, '!py-[11px]');\n\t\t\tthis.renderer.addClass(option, '!min-h-[44px]');\n\n\t\t\tconst arrow = this.el.nativeElement.querySelector('.mat-mdc-select-arrow-wrapper');\n\n\t\t\tthis.renderer.addClass(arrow, '!h-[22px]');\n\n\t\t\tthis.matSelect.panelClass = ['ecos-scrollbar', 'ecos-ui-dropdown-panelclass'];\n\n\t\t\tthis.matSelect.disableRipple = true;\n\t\t}\n\t}\n}\n","import { NgModule } from '@angular/core';\nimport { FeatureNotSupportedDirective } from '.';\n\n\n@NgModule({\n\tdeclarations: [\n\t\tFeatureNotSupportedDirective\n\t],\n\timports: [],\n\texports: [\n\t\tFeatureNotSupportedDirective\n\t],\n\tproviders: []\n})\nexport class FeatureNotSupportedModule {}\n","import { NgModule } from '@angular/core';\nimport { OutsideClickDirective } from './outside-click.directive';\n\n@NgModule({\n\tdeclarations: [OutsideClickDirective],\n\timports: [],\n\texports: [OutsideClickDirective],\n\tproviders: [],\n})\nexport class OutsideClickModule {}\n","import { NgModule } from '@angular/core';\nimport { TooltipDirective } from '.';\n\n@NgModule({\n\tdeclarations: [TooltipDirective],\n\timports: [],\n\texports: [TooltipDirective],\n\tproviders: [],\n})\nexport class TooltipModule {}\n","import { Component, Input, Output, EventEmitter, ChangeDetectionStrategy } from '@angular/core';\n\nimport { Filterable } from '../../models';\n\n@Component({\n\tselector: 'ecos-ui-checkbox',\n\ttemplateUrl: './checkbox.component.html',\n\tstyleUrls: ['./checkbox.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckboxComponent {\n\t@Input()\n\titem: Filterable;\n\n\t@Input()\n\tusage: 'single' | 'multiple' = 'multiple';\n\n\t@Output() selected: EventEmitter> = new EventEmitter();\n\n\titemSelected(checked: boolean): void {\n\t\tthis.item.selected = checked;\n\t\tthis.selected.emit({\n\t\t\tvalue: this.item.value,\n\t\t\tselected: checked,\n\t\t});\n\t}\n}\n","
\n\t\n\t\t\n\t\t\n\t\n
","
\n\t\n\t\n\t\n\t\t\n\t\n
\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { SharedMaterialModule } from '../../material';\nimport { ReactiveFormsModule } from '@angular/forms';\n\n@Component({\n\tselector: 'ecos-ui-checked-label',\n\tstandalone: true,\n\timports: [CommonModule, SharedMaterialModule, ReactiveFormsModule],\n\ttemplateUrl: './checked-label.component.html',\n\tstyleUrls: ['./checked-label.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckedLabelComponent {\n\t@Input()\n\tchecked = false;\n\n\t@Input()\n\tshowUnchecked = true;\n}\n","
\n\t\n\t\t\n\t\t\t{{ title }}\n\t\t\n\t\t\n\t\t\n\t\t{{\n\t\t\t'MAPS.FEATURE-GOOGLE-MAP.LAYER-SETTINGS.SPATIAL-TOOLS.INVALID-MAX-TIME' | translate\n\t\t}}\n\t\t{{\n\t\t\t'MAPS.FEATURE-GOOGLE-MAP.LAYER-SETTINGS.SPATIAL-TOOLS.INVALID-MIN-TIME' | translate\n\t\t}}\n\t\n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\nimport { DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE } from '@angular/material/core';\nimport { ECOS_FORMATS } from './datepicker.formats';\nimport { MAT_MOMENT_DATE_ADAPTER_OPTIONS, MomentDateAdapter } from '@angular/material-moment-adapter';\nimport { MatDatepickerInputEvent } from '@angular/material/datepicker';\nimport moment from 'moment';\n\n@Component({\n\tselector: 'ecos-ui-datepicker',\n\ttemplateUrl: './datepicker.component.html',\n\tstyleUrls: ['./datepicker.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [\n\t\t{\n\t\t\tprovide: DateAdapter,\n\t\t\tuseClass: MomentDateAdapter,\n\t\t\tdeps: [MAT_DATE_LOCALE, MAT_MOMENT_DATE_ADAPTER_OPTIONS],\n\t\t},\n\n\t\t{ provide: MAT_DATE_FORMATS, useValue: ECOS_FORMATS },\n\t],\n})\nexport class DatepickerComponent {\n\t@Input() disabled: boolean;\n\t@Input() title: string;\n\t@Input() pickerName: string;\n\t@Input() minDate?: Date;\n\t@Input() maxDate?: Date;\n\t@Output() dateChange: EventEmitter>> = new EventEmitter();\n\n\tselectedDate = moment(new Date());\n\n\tget date() {\n\t\treturn this.selectedDate;\n\t}\n\n\tset date(value) {\n\t\tthis.selectedDate = moment(value);\n\t\tthis.dateChange.emit({ value: this.selectedDate.toDate() });\n\t}\n\n\tselectDate(event: MatDatepickerInputEvent): void {\n\t\tthis.selectedDate = moment(event.value);\n\t\tthis.dateChange.emit({ value: this.selectedDate.toDate() });\n\t}\n}\n","export const ECOS_FORMATS = {\n\tparse: {\n\t\tdateInput: 'DD/MM/YYYY',\n\t},\n\tdisplay: {\n\t\tdateInput: 'DD/MM/YYYY',\n\t\tmonthYearLabel: 'MMMM YYYY',\n\t\tdateA11yLabel: 'LL',\n\t\tmonthYearA11yLabel: 'MMMM YYYY',\n\t},\n};\n","
\n\t 0\"\n\t\t[length]=\"totalCount\"\n\t\t[pageSize]=\"pageSize\"\n\t\t[pageSizeOptions]=\"pageSizeOptions\"\n\t\t[pageIndex]=\"pageIndex\"\n\t\t[hidePageSize]=\"hidePageSize\"\n\t\t(page)=\"onPageSelected($event)\"\n\t>\n\t\n
\n","import { Component, EventEmitter, Output, Input, OnInit, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\nimport { PageEvent } from './page-event.model';\n\n@Component({\n\tselector: 'ecos-ui-paginator',\n\ttemplateUrl: './paginator.component.html',\n\tstyleUrls: ['./paginator.component.scss'],\n\tencapsulation: ViewEncapsulation.None,\n})\nexport class PaginatorComponent implements OnInit {\n\t@Input()\n\ttotalCount: number | null;\n\t@Input()\n\tpageSize: number;\n\t@Input()\n\tpageSizeOptions: number[] = [];\n\tpageIndex = 0;\n\n\t@Output()\n\tpageEvent: EventEmitter = new EventEmitter();\n\n\t@ViewChild(MatPaginator, { static: false }) paginator: MatPaginator;\n\n\tconstructor(private paginatorIntl: MatPaginatorIntl) {}\n\n\tngOnInit() {\n\t\t// turn off tooltips for next and previous buttons\n\t\tthis.paginatorIntl.nextPageLabel = '';\n\t\tthis.paginatorIntl.previousPageLabel = '';\n\t}\n\n\tonPageSelected(event: PageEvent): void {\n\t\tthis.pageIndex = event.pageIndex;\n\t\tthis.pageSize = event.pageSize;\n\t\tthis.pageEvent.emit(event);\n\t}\n\n\tfirstPage(): void {\n\t\tif (this.paginator) {\n\t\t\tthis.paginator.firstPage();\n\t\t}\n\t}\n\n\tget hidePageSize(): boolean {\n\t\tif (this.totalCount === null) {\n\t\t\treturn this.pageSizeOptions.length === 0;\n\t\t} else {\n\t\t\treturn this.pageSizeOptions.length === 0 || this.totalCount <= this.pageSizeOptions[0];\n\t\t}\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport {\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOnInit,\n\tOutput,\n\tViewEncapsulation,\n} from '@angular/core';\nimport { FormControl, FormGroup, ReactiveFormsModule, Validators } from '@angular/forms';\nimport { SharedMaterialModule } from '../../material';\n\n@Component({\n\tselector: 'ecos-ui-slider',\n\ttemplateUrl: './slider.component.html',\n\tstyleUrls: ['./slider.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tencapsulation: ViewEncapsulation.None,\n\tstandalone: true,\n\timports: [CommonModule, SharedMaterialModule, ReactiveFormsModule],\n})\nexport class SliderComponent implements OnInit {\n\t@Input()\n\tlabel?: string;\n\t@Input()\n\tdisabled = false;\n\n\t@Input()\n\tmax = 100;\n\t@Input()\n\tmin = 2;\n\t@Input()\n\tstep = 1;\n\t@Input()\n\tvalue: number | null = 0;\n\n\tsliderForm: FormGroup<{\n\t\tslider: FormControl;\n\t}>;\n\n\t@Output() changed: EventEmitter = new EventEmitter();\n\tngOnInit(): void {\n\t\tthis.sliderForm = new FormGroup({\n\t\t\tslider: new FormControl({ value: this.value, disabled: this.disabled }, [\n\t\t\t\tValidators.max(this.max),\n\t\t\t\tValidators.min(this.min),\n\t\t\t]),\n\t\t});\n\n\t\tthis.sliderForm.controls.slider.valueChanges.subscribe((change) => {\n\t\t\tthis.changed.emit(change);\n\t\t});\n\t}\n\n\tchangeInput(evt: any): void {\n\t\tconst validity = evt.target.validity;\n\t\tconst inputValue = evt.target.valueAsNumber as number;\n\t\tif (!validity.stepMismatch && validity.valid && !isNaN(inputValue)) {\n\t\t\tthis.sliderForm.patchValue({ slider: inputValue });\n\t\t} else {\n\t\t\tthis.changed.emit();\n\t\t}\n\t}\n}\n","
\n\t\n\t\t\n\t\n\t\n
\n","import { Directive, ElementRef, Input, Inject, NgZone, Optional, ViewContainerRef } from '@angular/core';\nimport {\n\tMAT_TOOLTIP_DEFAULT_OPTIONS,\n\tMAT_TOOLTIP_SCROLL_STRATEGY,\n\tMatTooltip,\n\tMatTooltipDefaultOptions,\n} from '@angular/material/tooltip';\n\nimport { AriaDescriber, FocusMonitor } from '@angular/cdk/a11y';\nimport { Directionality } from '@angular/cdk/bidi';\nimport { Overlay, ScrollDispatcher } from '@angular/cdk/overlay';\nimport { Platform } from '@angular/cdk/platform';\nimport { DOCUMENT } from '@angular/common';\n\n@Directive({\n\tselector: '[ecosUiTooltip]',\n})\nexport class TooltipDirective extends MatTooltip {\n\tprivate readonly element: ElementRef;\n\n\t@Input()\n\tget tooltip() {\n\t\treturn this.message;\n\t}\n\tset tooltip(value: string) {\n\t\tthis.message = value;\n\t}\n\n\t@Input()\n\tget tooltipDisabled() {\n\t\treturn this.disabled;\n\t}\n\tset tooltipDisabled(value: boolean) {\n\t\tthis.disabled = value;\n\t}\n\n\tget parentHasOverflow(): boolean {\n\t\tconst nativeElement = this.element.nativeElement;\n\t\treturn (\n\t\t\tnativeElement.offsetHeight < nativeElement.scrollHeight || nativeElement.offsetWidth < nativeElement.scrollWidth\n\t\t);\n\t}\n\n\tconstructor(\n\t\t_overlay: Overlay,\n\t\t_elementRef: ElementRef,\n\t\t_scrollDispatcher: ScrollDispatcher,\n\t\t_viewContainerRef: ViewContainerRef,\n\t\t_ngZone: NgZone,\n\t\t_platform: Platform,\n\t\t_ariaDescriber: AriaDescriber,\n\t\t_focusMonitor: FocusMonitor,\n\t\t@Inject(MAT_TOOLTIP_SCROLL_STRATEGY) _scrollStrategy: any,\n\t\t@Inject(DOCUMENT) private document: Document,\n\t\t@Optional() _dir: Directionality,\n\t\t@Optional()\n\t\t@Inject(MAT_TOOLTIP_DEFAULT_OPTIONS)\n\t\t_defaultOptions: MatTooltipDefaultOptions\n\t) {\n\t\tsuper(\n\t\t\t_overlay,\n\t\t\t_elementRef,\n\t\t\t_scrollDispatcher,\n\t\t\t_viewContainerRef,\n\t\t\t_ngZone,\n\t\t\t_platform,\n\t\t\t_ariaDescriber,\n\t\t\t_focusMonitor,\n\t\t\t_scrollStrategy,\n\t\t\t_dir,\n\t\t\t_defaultOptions,\n\t\t\tdocument\n\t\t);\n\t\tthis.element = _elementRef;\n\t}\n}\n","
\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t
\n\t\t\t\n\t\t\t\n\t\t\t\t \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{{ statusMessage.message | translate }}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t{{ statusMessage.message | translate }}\n\t\t\t\t\t
\n\t\t\t\t
\n\t\t\t
\n\t\t\n\t\n\n","import { AfterViewInit, Component, ElementRef, Input, QueryList, ViewChildren } from '@angular/core';\nimport { TooltipDirective } from '../../directives';\n\nimport { StatusMessage, StatusMessageType } from '../../models';\n\n@Component({\n\tselector: 'ecos-ui-status-message',\n\ttemplateUrl: './status-message.component.html',\n\tstyleUrls: ['./status-message.component.scss'],\n})\nexport class StatusMessageComponent implements AfterViewInit {\n\t@Input()\n\tmessages: Array;\n\t@Input()\n\ttruncateMessage = false;\n\t@Input()\n\tdisplay: 'all' | 'messageOnly' | 'iconOnly' | 'iconAndTooltip' = 'all';\n\n\tstatusMessageType = StatusMessageType;\n\n\t@ViewChildren(TooltipDirective) private messagesWithTooltip: QueryList;\n\t@ViewChildren('fileName') private filenameRef: QueryList;\n\n\tngAfterViewInit(): void {\n\t\tthis.messagesWithTooltip.forEach((tooltip) => {\n\t\t\ttooltip.tooltipDisabled = !tooltip.parentHasOverflow;\n\t\t});\n\t\tthis.filenameRef.forEach((filename) => {\n\t\t\tconst nativeElement = filename.nativeElement;\n\t\t\tconst hasOverflow =\n\t\t\t\tnativeElement.offsetHeight < nativeElement.scrollHeight ||\n\t\t\t\tnativeElement.offsetWidth < nativeElement.scrollWidth;\n\t\t\tif (hasOverflow) {\n\t\t\t\tfilename.nativeElement.classList.add('has-overflow');\n\t\t\t\tfilename.nativeElement.setAttribute('data-filetype', this.getSuffix(nativeElement.innerHTML));\n\n\t\t\t\twhile (nativeElement.scrollWidth > nativeElement.offsetWidth) {\n\t\t\t\t\tnativeElement.innerHTML = nativeElement.innerHTML.slice(0, -1);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tgetSuffix(str: string): string {\n\t\tconst dotposition = str.lastIndexOf('.');\n\t\treturn '...' + str.slice(dotposition - 3);\n\t}\n}\n","export const iconList = [\n\t'add-column-left',\n\t'add-column-right',\n\t'add-marker',\n\t'add-row-bottom',\n\t'add-row-top',\n\t'add-to-artifact',\n\t'add-to-folder',\n\t'add',\n\t'airplane',\n\t'align-center',\n\t'align-justify',\n\t'align-left',\n\t'align-right',\n\t'alignment-bottom',\n\t'alignment-horizontal-center',\n\t'alignment-left',\n\t'alignment-right',\n\t'alignment-top',\n\t'alignment-vertical-center',\n\t'annotation',\n\t'app-header',\n\t'application',\n\t'applications',\n\t'archive',\n\t'arrow-bottom-left',\n\t'arrow-bottom-right',\n\t'arrow-down',\n\t'arrow-left',\n\t'arrow-right',\n\t'arrow-top-left',\n\t'arrow-top-right',\n\t'arrow-up',\n\t'arrows-horizontal',\n\t'arrows-vertical',\n\t'asterisk',\n\t'automatic-updates',\n\t'badge',\n\t'ban-circle',\n\t'bank-account',\n\t'barcode',\n\t'billboard',\n\t'billboard-point',\n\t'blank',\n\t'blocked-person',\n\t'bold',\n\t'bookmark',\n\t'box',\n\t'briefcase',\n\t'bring-data',\n\t'build',\n\t'calculator',\n\t'calendar',\n\t'camera',\n\t'caret-down',\n\t'caret-left',\n\t'caret-right',\n\t'caret-up',\n\t'catalogue',\n\t'changes',\n\t'chart',\n\t'chat',\n\t'chevron-backward',\n\t'chevron-down',\n\t'chevron-forward',\n\t'chevron-left',\n\t'chevron-right',\n\t'chevron-up',\n\t'circle-arrow-down',\n\t'circle-arrow-left',\n\t'circle-arrow-right',\n\t'circle-arrow-up',\n\t'circle',\n\t'citation',\n\t'clean',\n\t'clipboard',\n\t'cloud-download',\n\t'cloud-upload',\n\t'cloud-empty',\n\t'cloud-saved',\n\t'cloud',\n\t'close-circle',\n\t'code-block',\n\t'code',\n\t'cog',\n\t'collapse-all',\n\t'collapse',\n\t'column-layout',\n\t'comment',\n\t'comparison',\n\t'compass',\n\t'compressed',\n\t'confirm',\n\t'console',\n\t'contrast',\n\t'control',\n\t'credit-card',\n\t'cross',\n\t'crown',\n\t'cube-add',\n\t'cube-remove',\n\t'cube',\n\t'cursor',\n\t'curved-range-chart',\n\t'cut',\n\t'cycle',\n\t'dashboard',\n\t'data-lineage',\n\t'database',\n\t'datavisualisation-points',\n\t'datavisualisation-heatmap',\n\t'datavisualisation-shapes',\n\t'datavisualisation-linkedmetrics',\n\t'datavisualisation-linkedaudience',\n\t'datavisualisation-lines',\n\t'delete',\n\t'delete-forever',\n\t'delta',\n\t'derive-column',\n\t'desktop',\n\t'diagnosis',\n\t'diagram-tree',\n\t'direction-left',\n\t'direction-right',\n\t'disable',\n\t'document-open',\n\t'document-share',\n\t'document',\n\t'dollar',\n\t'double-caret-horizontal',\n\t'double-caret-vertical',\n\t'double-chevron-down',\n\t'double-chevron-left',\n\t'double-chevron-right',\n\t'double-chevron-up',\n\t'doughnut-chart',\n\t'download',\n\t'download-alt',\n\t'download-file',\n\t'drag-handle-horizontal',\n\t'drag-handle-vertical',\n\t'draw',\n\t'drawer-left-filled',\n\t'drawer-left',\n\t'drawer-right-filled',\n\t'drawer-right',\n\t'drive-time',\n\t'duplicate',\n\t'edit',\n\t'eject',\n\t'endorsed',\n\t'envelope',\n\t'equals',\n\t'eraser',\n\t'error',\n\t'euro',\n\t'exchange',\n\t'exclude-row',\n\t'expand-all',\n\t'expand',\n\t'export',\n\t'export-csv',\n\t'eye-off',\n\t'eye-on',\n\t'eye-open',\n\t'fast-backward',\n\t'fast-forward',\n\t'feed-subscribed',\n\t'feed',\n\t'film',\n\t'filter-frames',\n\t'filter-keep',\n\t'filter-list',\n\t'filter-open',\n\t'filter-remove',\n\t'filter',\n\t'flag',\n\t'flame',\n\t'flash',\n\t'floppy-disk',\n\t'flow-branch',\n\t'flow-end',\n\t'flow-linear',\n\t'flow-review-branch',\n\t'flow-review',\n\t'flows',\n\t'folder',\n\t'folder-close',\n\t'folder-new',\n\t'folder-open',\n\t'folder-shared-open',\n\t'folder-shared',\n\t'follower',\n\t'following',\n\t'font',\n\t'forbidden',\n\t'fork',\n\t'form',\n\t'full-circle',\n\t'full-stacked-chart',\n\t'fullscreen',\n\t'function',\n\t'gantt-chart',\n\t'geolocation',\n\t'geosearch',\n\t'get-frames',\n\t'git-branch',\n\t'git-commit',\n\t'git-merge',\n\t'git-new-branch',\n\t'git-pull',\n\t'git-push',\n\t'git-repo',\n\t'glass',\n\t'globe-network',\n\t'globe',\n\t'graph-remove',\n\t'graph',\n\t'greater-than-or-equal-to',\n\t'greater-than',\n\t'grid-view',\n\t'grid',\n\t'group-objects',\n\t'grouped-bar-chart',\n\t'hand-down',\n\t'hand-left',\n\t'hand-right',\n\t'hand-up',\n\t'hand',\n\t'header-one',\n\t'header-two',\n\t'header',\n\t'headset',\n\t'heart-broken',\n\t'heat-grid',\n\t'heatmap',\n\t'help',\n\t'helper-management',\n\t'highlight',\n\t'history',\n\t'home',\n\t'horizontal-bar-chart-asc',\n\t'horizontal-bar-chart-desc',\n\t'horizontal-bar-chart',\n\t'horizontal-billboard',\n\t'horizontal-distribution',\n\t'id-number',\n\t'image-rotate-left',\n\t'image-rotate-right',\n\t'import',\n\t'inbox-filtered',\n\t'inbox-geo',\n\t'inbox-search',\n\t'inbox-update',\n\t'inbox',\n\t'info-sign',\n\t'inheritance',\n\t'inherited-group',\n\t'inner-join',\n\t'insert',\n\t'intersection',\n\t'ip-address',\n\t'issue-closed',\n\t'issue-new',\n\t'issue',\n\t'italic',\n\t'join-table',\n\t'key-backspace',\n\t'key-command',\n\t'key-control',\n\t'key-delete',\n\t'key-enter',\n\t'key-escape',\n\t'key-option',\n\t'key-shift',\n\t'key-tab',\n\t'key',\n\t'known-vehicle',\n\t'lab-test',\n\t'label',\n\t'layer',\n\t'layers',\n\t'layout-auto',\n\t'layout-balloon',\n\t'layout-circle',\n\t'layout-grid',\n\t'layout-group-by',\n\t'layout-hierarchy',\n\t'layout-linear',\n\t'layout-skew-grid',\n\t'layout-sorted-clusters',\n\t'layout',\n\t'learning',\n\t'left-join',\n\t'less-than-or-equal-to',\n\t'less-than',\n\t'lifesaver',\n\t'lightbulb',\n\t'line',\n\t'link',\n\t'list-columns',\n\t'list-detail-view',\n\t'list',\n\t'locate',\n\t'lock',\n\t'log-in',\n\t'log-out',\n\t'manual',\n\t'manually-entered-data',\n\t'map-create',\n\t'map',\n\t'map-marker-x',\n\t'map-switch',\n\t'maximize',\n\t'measure',\n\t'media',\n\t'menu-closed',\n\t'menu-open',\n\t'menu',\n\t'merge-columns',\n\t'merge-links',\n\t'minimize',\n\t'minus',\n\t'mobile-phone',\n\t'mobile-video',\n\t'modal-filled',\n\t'modal',\n\t'moon',\n\t'more',\n\t'mountain',\n\t'move',\n\t'mugshot',\n\t'multi-select',\n\t'music',\n\t'new-drawing',\n\t'new-grid-item',\n\t'new-layer',\n\t'new-link',\n\t'new-object',\n\t'new-person',\n\t'new-prescription',\n\t'new-text-box',\n\t'ninja',\n\t'not-equal-to',\n\t'notifications-updated',\n\t'notifications',\n\t'notification-circle',\n\t'numbered-list',\n\t'numerical',\n\t'office',\n\t'offline',\n\t'oil-field',\n\t'one-column',\n\t'outdated',\n\t'page-layout',\n\t'panel',\n\t'panel-stats',\n\t'panel-table',\n\t'paperclip',\n\t'paragraph',\n\t'path-search',\n\t'path',\n\t'pause',\n\t'pegman-switch',\n\t'people',\n\t'percentage',\n\t'person',\n\t'phone',\n\t'pie-chart',\n\t'pin',\n\t'pivot-table',\n\t'pivot',\n\t'play',\n\t'plus',\n\t'points-points',\n\t'points-shapes',\n\t'polygon-filter',\n\t'power',\n\t'predictive-analysis',\n\t'prescription',\n\t'presentation',\n\t'print',\n\t'projects',\n\t'properties',\n\t'property',\n\t'publish-function',\n\t'pulse',\n\t'random',\n\t'record',\n\t'redo',\n\t'refresh',\n\t'regression-chart',\n\t'remove-column-left',\n\t'remove-column-right',\n\t'remove-column',\n\t'remove-row-bottom',\n\t'remove-row-top',\n\t'remove',\n\t'repeat',\n\t'reset',\n\t'resolve',\n\t'rig',\n\t'right-join',\n\t'ring',\n\t'rotate-document',\n\t'rotate-page',\n\t'route',\n\t'satellite',\n\t'saved',\n\t'scatter-plot',\n\t'search-around',\n\t'search-template',\n\t'search-text',\n\t'search',\n\t'segmented-control',\n\t'select',\n\t'selection',\n\t'send-message',\n\t'send-to-graph',\n\t'send-to-map',\n\t'send-to',\n\t'series-add',\n\t'series-configuration',\n\t'series-derived',\n\t'series-filtered',\n\t'series-search',\n\t'settings',\n\t'shapes-points',\n\t'shapes-shapes',\n\t'share',\n\t'shared-document',\n\t'shield',\n\t'shop',\n\t'shopping-cart',\n\t'signal-search',\n\t'sim-card',\n\t'slash',\n\t'small-cross',\n\t'small-minus',\n\t'small-plus',\n\t'small-tick',\n\t'snowflake',\n\t'social-media',\n\t'sort-alphabetical-desc',\n\t'sort-alphabetical',\n\t'sort-asc',\n\t'sort-desc',\n\t'sort-numerical-desc',\n\t'sort-numerical',\n\t'sort',\n\t'split-columns',\n\t'square',\n\t'stacked-chart',\n\t'star-empty',\n\t'star',\n\t'step-backward',\n\t'step-chart',\n\t'step-forward',\n\t'stop',\n\t'stopwatch',\n\t'strikethrough',\n\t'style',\n\t'swap-horizontal',\n\t'swap-vertical',\n\t'symbol-circle',\n\t'symbol-cross',\n\t'symbol-diamond',\n\t'symbol-square',\n\t'symbol-triangle-down',\n\t'symbol-triangle-up',\n\t'tag',\n\t'take-action',\n\t'taxi',\n\t'text-highlight',\n\t'th-derived',\n\t'th-disconnect',\n\t'th-filtered',\n\t'th-list',\n\t'th',\n\t'thumbs-down',\n\t'thumbs-up',\n\t'tick-circle',\n\t'tick',\n\t'time',\n\t'timeline-area-chart',\n\t'timeline-bar-chart',\n\t'timeline-events',\n\t'timeline-line-chart',\n\t'tint',\n\t'torch',\n\t'tractor',\n\t'train',\n\t'translate',\n\t'trash',\n\t'tree',\n\t'trending-down',\n\t'trending-up',\n\t'truck',\n\t'two-columns',\n\t'unarchive',\n\t'underline',\n\t'undo',\n\t'ungroup-objects',\n\t'unknown-vehicle',\n\t'unlock',\n\t'unpin',\n\t'unresolve',\n\t'updated',\n\t'upload',\n\t'uploads',\n\t'user',\n\t'variable',\n\t'vertical-bar-chart-asc',\n\t'vertical-bar-chart-desc',\n\t'vertical-distribution',\n\t'vertical-panel',\n\t'video',\n\t'virus',\n\t'volume-down',\n\t'volume-off',\n\t'volume-up',\n\t'walk',\n\t'warning-sign',\n\t'warn-square',\n\t'waterfall-chart',\n\t'widget-button',\n\t'widget-footer',\n\t'widget-header',\n\t'widget',\n\t'wrench',\n\t'wrench-square',\n\t'zoom-in',\n\t'zoom-out',\n\t'zoom-to-fit',\n];\n","import { iconList } from './icon-list';\nimport { DomSanitizer } from '@angular/platform-browser';\nimport { MatIconRegistry } from '@angular/material/icon';\nimport { NgModule } from '@angular/core';\n\n@NgModule()\nexport class EcosIconsModule {\n\ticonBaseUrl = 'https://maps.gstatic.com/mapfiles/place_api/icons/v2';\n\ticonSuffix = '_pinlet.svg';\n\tconstructor(private matIconRegistry: MatIconRegistry, private sanitizer: DomSanitizer) {\n\t\tthis.load(iconList, 'assets/icons');\n\t}\n\n\tprivate load(icons: Array, url: string): void {\n\t\ticons.forEach((icon) => {\n\t\t\tthis.matIconRegistry.addSvgIcon(icon, this.sanitizer.bypassSecurityTrustResourceUrl(`${url}/${icon}.svg`));\n\t\t});\n\t}\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface ILoadingService {\n\tloading$: Observable;\n\tsetLoading(loading: boolean, url: string): void;\n}\n\nexport const LOADING_SERVICE = new InjectionToken('loading-service');\n","import { Component, ChangeDetectionStrategy, Inject } from '@angular/core';\nimport { Observable, delay } from 'rxjs';\nimport { ILoadingService, LOADING_SERVICE } from './loading-service.interface';\n\n@Component({\n\tselector: 'ecos-ui-loading-spinner',\n\ttemplateUrl: './loading-spinner.component.html',\n\tstyleUrls: ['./loading-spinner.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class LoadingSpinnerComponent {\n\tpublic readonly loading$: Observable;\n\n\tconstructor(\n\t\t@Inject(LOADING_SERVICE)\n\t\tpublic loadingService: ILoadingService\n\t) {\n\t\t// delay(0) prevents a ExpressionChangedAfterItHasBeenCheckedError for subsequent requests\n\t\tthis.loading$ = this.loadingService.loading$.pipe(delay(0));\n\t}\n}\n","\n","import { CdkStepperModule } from '@angular/cdk/stepper';\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\nimport { MatButtonModule } from '@angular/material/button';\nimport { MatCardModule } from '@angular/material/card';\nimport { MatCheckboxModule } from '@angular/material/checkbox';\nimport { MatChipsModule } from '@angular/material/chips';\nimport { MatDatepickerModule } from '@angular/material/datepicker';\nimport { MatDialogModule } from '@angular/material/dialog';\nimport { MatDividerModule } from '@angular/material/divider';\nimport { MatExpansionModule } from '@angular/material/expansion';\nimport { MatFormFieldModule } from '@angular/material/form-field';\nimport { MatIconModule } from '@angular/material/icon';\nimport { MatInputModule } from '@angular/material/input';\nimport { MatListModule } from '@angular/material/list';\nimport { MatMenuModule } from '@angular/material/menu';\nimport { MatMomentDateModule } from '@angular/material-moment-adapter';\nimport { MatNativeDateModule, MatRippleModule } from '@angular/material/core';\nimport { MatPaginatorModule } from '@angular/material/paginator';\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\nimport { MatProgressSpinnerModule } from '@angular/material/progress-spinner';\nimport { MatRadioModule } from '@angular/material/radio';\nimport { MatSelectModule } from '@angular/material/select';\nimport { MatSidenavModule } from '@angular/material/sidenav';\nimport { MatSlideToggleModule } from '@angular/material/slide-toggle';\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\nimport { MatStepperModule } from '@angular/material/stepper';\nimport { MatTableModule } from '@angular/material/table';\nimport { MatTabsModule } from '@angular/material/tabs';\nimport { MatToolbarModule } from '@angular/material/toolbar';\nimport { MatTooltipModule } from '@angular/material/tooltip';\nimport { NgModule } from '@angular/core';\nimport { OverlayModule } from '@angular/cdk/overlay';\nimport { PortalModule } from '@angular/cdk/portal';\nimport { ScrollingModule } from '@angular/cdk/scrolling';\nimport { MatSliderModule } from '@angular/material/slider';\nimport { MatButtonToggleModule } from '@angular/material/button-toggle';\nimport { MatBadgeModule } from '@angular/material/badge';\nimport { CdkMenuModule } from '@angular/cdk/menu';\n\n@NgModule({\n\texports: [\n\t\tMatCheckboxModule,\n\t\tMatListModule,\n\t\tMatSidenavModule,\n\t\tMatIconModule,\n\t\tMatRippleModule,\n\t\tMatToolbarModule,\n\t\tMatProgressSpinnerModule,\n\t\tMatProgressBarModule,\n\t\tMatButtonModule,\n\t\tMatDividerModule,\n\t\tMatChipsModule,\n\t\tMatSnackBarModule,\n\t\tMatDialogModule,\n\t\tMatSelectModule,\n\t\tMatRadioModule,\n\t\tMatSliderModule,\n\t\tMatSlideToggleModule,\n\t\tMatFormFieldModule,\n\t\tMatInputModule,\n\t\tMatDatepickerModule,\n\t\tMatNativeDateModule,\n\t\tMatMomentDateModule,\n\t\tMatMenuModule,\n\t\tMatCardModule,\n\t\tMatTooltipModule,\n\t\tOverlayModule,\n\t\tMatTabsModule,\n\t\tMatExpansionModule,\n\t\tMatPaginatorModule,\n\t\tMatStepperModule,\n\t\tScrollingModule,\n\t\tPortalModule,\n\t\tMatTableModule,\n\t\tMatAutocompleteModule,\n\t\tCdkStepperModule,\n\t\tMatButtonToggleModule,\n\t\tMatBadgeModule,\n\t\tCdkMenuModule,\n\t],\n})\nexport class SharedMaterialModule {}\n","
\n\t\n\t\t\n\t\t
\n\t\t\t \n\t\t
\n\t
\n
\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewEncapsulation } from '@angular/core';\n\n@Component({\n\tselector: 'ecos-ui-modal-container',\n\ttemplateUrl: './modal-container.component.html',\n\tstyleUrls: ['./modal-container.component.scss'],\n\tencapsulation: ViewEncapsulation.None,\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class ModalContainerComponent {\n\t@Input() height = '848px';\n\t@Input() width = '1128px';\n\t@Input() showCloseButton = true;\n\n\t@Output() closeModal: EventEmitter = new EventEmitter();\n\n\tonClose(): void {\n\t\tthis.closeModal.emit(true);\n\t}\n}\n","import { Component, ChangeDetectionStrategy } from '@angular/core';\n@Component({\n\tselector: 'ecos-ui-modal',\n\ttemplateUrl: 'modal.component.html',\n\tstyleUrls: ['modal.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\n\nexport class ModalComponent {\n}\n","
\n\t\n
\n","import { InjectionToken } from '@angular/core';\nimport { RelativeTimeThresholdOptions } from './date-transform.interface';\n\nexport interface IDateTransformService {\n\ttransformDateToTimeAgo(value: Date): string;\n}\n\nexport const DATE_TRANSFORM_SERVICE = new InjectionToken('shared-ui.date-transform-service');\n\nexport const THRESHOLD_OPTIONS = new InjectionToken('THRESHOLD_OPTIONS');\n","export enum StatusMessageType {\n\tInfo = 'info',\n\tWarning = 'warning',\n\tError = 'error',\n\tSuccess = 'success',\n}\n","export interface SnackBarData {\n\tmessage: string;\n\ttitle?: string;\n\tmessageType?: SnackBarType;\n\taction?: SnackBarCallback;\n\tisTranslatable?: boolean;\n\ttranslationParams?: TranslationParams;\n}\n\nexport enum SnackBarType {\n\tSuccess,\n\tWarning,\n\tError,\n\tSystemError,\n\tValidation,\n\tInfo,\n}\n\nexport interface TranslationParams {\n\ttitleParams?: { [key: string]: string };\n\tmessageParams?: { [key: string]: string };\n}\n\nexport type SnackBarCallback = () => void;\n","
\n\t
\n\t\t\n\t\t\t\n\t
\n\t
\n\t\t{{\n\t\t\tdata.isTranslatable ? (data.title! | translate: data.translationParams?.titleParams) : data.title\n\t\t}}\n\t\t{{ data.isTranslatable ? (data.message | translate: data.translationParams?.messageParams) : data.message }}\n\t\t\t\n\t\t\n\t
\n\t
\n\t\t\n\t
\n
\n\n\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\n\t\n\n","import { Component, Inject } from '@angular/core';\nimport { MAT_SNACK_BAR_DATA, MatSnackBarRef } from '@angular/material/snack-bar';\nimport { SnackBarData, SnackBarType } from './snackbar-data.interface';\n\n@Component({\n\tselector: 'ecos-ui-snackbar',\n\ttemplateUrl: './snackbar.component.html',\n\tstyleUrls: ['./snackbar.component.scss'],\n})\nexport class SnackBarComponent {\n\tprotected snackBarType = SnackBarType;\n\tconstructor(\n\t\t@Inject(MAT_SNACK_BAR_DATA) public data: SnackBarData,\n\t\tprivate snackBarRef: MatSnackBarRef,\n\t) {}\n\n\tprotected close() {\n\t\tthis.snackBarRef.dismiss();\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { EcosIconButtonModule } from '../../buttons/icon-button';\nimport { MAT_SNACK_BAR_DEFAULT_OPTIONS, SharedMaterialModule } from '../../material';\nimport { ModuleWithProviders, NgModule } from '@angular/core';\nimport { RouterModule } from '@angular/router';\nimport { SnackBarComponent } from './snackbar.component';\nimport { SnackBarConfig } from './snackbar-config.interface';\nimport { SnackBarService } from './snackbar.service';\nimport { TranslateModule } from '@ngx-translate/core';\n\nconst snackBarDefaultOptions: SnackBarConfig = {\n\tduration: 3000,\n\thorizontalPosition: 'center',\n\tverticalPosition: 'bottom',\n};\n\n@NgModule({\n\timports: [SharedMaterialModule, EcosIconButtonModule, CommonModule, TranslateModule, RouterModule],\n\tdeclarations: [SnackBarComponent],\n\tproviders: [\n\t\tSnackBarService,\n\t\t{\n\t\t\tprovide: MAT_SNACK_BAR_DEFAULT_OPTIONS,\n\t\t\tuseValue: { ...snackBarDefaultOptions },\n\t\t},\n\t],\n})\nexport class SnackBarModule {\n\tstatic forRoot(options: SnackBarConfig = snackBarDefaultOptions): ModuleWithProviders {\n\t\treturn {\n\t\t\tngModule: SnackBarModule,\n\t\t\tproviders: [\n\t\t\t\t{\n\t\t\t\t\tprovide: MAT_SNACK_BAR_DEFAULT_OPTIONS,\n\t\t\t\t\tuseValue: { ...options },\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\t}\n}\n","import { Injectable } from '@angular/core';\n\nimport { MatSnackBar, MatSnackBarConfig } from '@angular/material/snack-bar';\nimport { SnackBarComponent } from './snackbar.component';\nimport { SnackBarData, SnackBarType } from './snackbar-data.interface';\n\nconst DEFAULT_SHOW_ERROR_DURATION_SEC = 10;\n\nconst DEFAULT_DURATION_SEC = 10;\n\n@Injectable()\nexport class SnackBarService {\n\tprivate defaultConfig: MatSnackBarConfig = {\n\t\tduration: 10000,\n\t\tverticalPosition: 'top',\n\t\thorizontalPosition: 'right',\n\t\tpanelClass: ['ecos-snackbar-panelclass'],\n\t};\n\n\tconstructor(private snackBar: MatSnackBar) {}\n\n\tpublic showError(data: SnackBarData, durationSec = DEFAULT_SHOW_ERROR_DURATION_SEC) {\n\t\tthis.open(data, SnackBarType.Error, durationSec);\n\t}\n\n\tpublic showSystemError(data: SnackBarData, durationSec = DEFAULT_SHOW_ERROR_DURATION_SEC) {\n\t\tthis.open(data, SnackBarType.SystemError, durationSec);\n\t}\n\n\tpublic showWarning(data: SnackBarData, durationSec = DEFAULT_DURATION_SEC) {\n\t\tthis.open(data, SnackBarType.Warning, durationSec);\n\t}\n\n\tpublic showSuccess(data: SnackBarData, durationSec = DEFAULT_DURATION_SEC) {\n\t\tthis.open(data, SnackBarType.Success, durationSec);\n\t}\n\n\tpublic showInfo(data: SnackBarData, durationSec = DEFAULT_DURATION_SEC) {\n\t\tthis.open(data, SnackBarType.Info, durationSec);\n\t}\n\n\tprivate getPanelClass(status: SnackBarType): string[] {\n\t\tlet panelClass = [];\n\t\tswitch (status) {\n\t\t\tcase SnackBarType.Warning:\n\t\t\t\tpanelClass.push('ecos-snackbar-panelclass--warning');\n\t\t\t\tbreak;\n\t\t\tcase SnackBarType.Error:\n\t\t\t\tpanelClass.push('ecos-snackbar-panelclass--error');\n\t\t\t\tbreak;\n\t\t\tcase SnackBarType.SystemError:\n\t\t\t\tpanelClass.push('ecos-snackbar-panelclass--system-error');\n\t\t\t\tbreak;\n\t\t\tcase SnackBarType.Success:\n\t\t\t\tpanelClass.push('ecos-snackbar-panelclass--success');\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tpanelClass.push('ecos-snackbar-panelclass--info');\n\t\t\t\tbreak;\n\t\t}\n\n\t\tif (Array.isArray(this.defaultConfig.panelClass)) {\n\t\t\tpanelClass = [...this.defaultConfig.panelClass, ...panelClass];\n\t\t} else {\n\t\t\tconst value = this.defaultConfig.panelClass || [];\n\t\t\tpanelClass = [...value, ...panelClass];\n\t\t}\n\n\t\treturn panelClass;\n\t}\n\n\tprivate open(data: SnackBarData, messageType: SnackBarType, durationSec: number) {\n\t\tthis.snackBar.openFromComponent(SnackBarComponent, {\n\t\t\t...this.defaultConfig,\n\t\t\tdata: { ...data, messageType },\n\t\t\tduration: durationSec * 1000,\n\t\t\tpanelClass: this.getPanelClass(messageType),\n\t\t});\n\t}\n}\n","import { DATE_TRANSFORM_SERVICE, IDateTransformService } from '../../models/date-transform-service.interface';\nimport { Inject, Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'timeAgo'\n})\nexport class TimeAgoPipe implements PipeTransform {\n\tconstructor(\n\t\t@Inject(DATE_TRANSFORM_SERVICE)\n\t\tprivate dateTransformService: IDateTransformService\n\t) {}\n\n\ttransform(dateToTransform: Date): string {\n\t\treturn this.dateTransformService.transformDateToTimeAgo(dateToTransform);\n\t}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n\tname: 'fileSize',\n})\nexport class FileSizePipe implements PipeTransform {\n\tprivate units = ['bytes', 'KB', 'MB', 'GB', 'TB', 'PB'];\n\n\ttransform(bytes = 0, precision = 2): string {\n\t\tif (isNaN(parseFloat(String(bytes))) || !isFinite(bytes)) {\n\t\t\treturn '?';\n\t\t}\n\n\t\tlet unit = 0;\n\n\t\twhile (bytes >= 1024) {\n\t\t\tbytes /= 1024;\n\t\t\tunit++;\n\t\t}\n\n\t\treturn this.units[unit] === 'bytes'\n\t\t\t? `${bytes} ${this.units[unit]}`\n\t\t\t: `${bytes.toFixed(+precision)} ${this.units[unit]}`;\n\t}\n}\n","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { SharedMaterialModule } from '../material';\nimport { SearchComponent } from './search.component';\nimport { EcosIconButtonModule } from '../buttons/icon-button';\n\n@NgModule({\n\timports: [CommonModule, SharedMaterialModule, FormsModule, EcosIconButtonModule],\n\tdeclarations: [SearchComponent],\n\texports: [SearchComponent],\n})\nexport class EcosSearchModule {}\n","\n\t\n\t\n\t\n\n\t\n\t\n\n\t\n\n","import { AfterViewInit, Component, ElementRef, EventEmitter, Input, OnDestroy, Output, ViewChild } from '@angular/core';\nimport { debounceTime, distinctUntilChanged, filter, map } from 'rxjs/operators';\nimport { fromEvent, merge, Observable, Subject } from 'rxjs';\nimport { SubSink } from 'subsink';\n\n@Component({\n\tselector: 'ecos-ui-search',\n\ttemplateUrl: './search.component.html',\n\tstyleUrls: ['./search.theme.scss', './search.component.scss'],\n})\nexport class SearchComponent implements AfterViewInit, OnDestroy {\n\t@Input() searching$: Observable;\n\t@Input() expanded?: boolean;\n\t@Input() width: string;\n\t@Input() placeholderText: string;\n\t@Input() disabled = false;\n\t@Input() clear$: Observable;\n\t@Output() searchedTerm: EventEmitter = new EventEmitter();\n\tprivate subs = new SubSink();\n\n\tsearchInput: string;\n\n\tprivate clearAsYouTypeSearch$ = new Subject();\n\n\t@ViewChild('searchRef') private searchRef: ElementRef;\n\n\tprivate asYouTypeSearch$: Observable;\n\tprivate searchDebounceTime = 300;\n\n\tngAfterViewInit(): void {\n\t\tif (this.clear$) {\n\t\t\tconst subs = this.clear$.pipe(filter((shouldClear) => shouldClear)).subscribe(() => (this.searchInput = ''));\n\t\t\tthis.subs.add(subs);\n\t\t}\n\n\t\tthis.asYouTypeSearch$ = merge(\n\t\t\tfromEvent(this.searchRef.nativeElement, 'keyup').pipe(\n\t\t\t\tmap((event) => ((event.target) as any).value)\n\t\t\t),\n\t\t\tthis.clearAsYouTypeSearch$.asObservable()\n\t\t);\n\t}\n\n\tsearch(): void {\n\t\tthis.searchedTerm.emit(this.searchInput);\n\t}\n\n\tclear(): void {\n\t\tthis.searchInput = '';\n\t\tthis.clearAsYouTypeSearch$.next('');\n\t\tthis.search();\n\t}\n\n\tsearchAsYouType(): Observable {\n\t\treturn this.asYouTypeSearch$.pipe(debounceTime(this.searchDebounceTime), distinctUntilChanged());\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subs.unsubscribe();\n\t}\n}\n","import { Injectable } from '@angular/core';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { Observable } from 'rxjs';\nimport { Filterable } from '../models';\n\nexport interface FilterableState {\n\tvalues: Filterable[];\n}\n\n@Injectable()\nexport class FacetValuesStore extends ComponentStore {\n\treadonly values$: Observable;\n\n\tconstructor(private readonly componentStore: ComponentStore) {\n\t\tsuper({ values: [] });\n\t\tthis.values$ = componentStore.select((state) => state.values);\n\t}\n\n\tsetItems(values: Filterable[]) {\n\t\tthis.componentStore.setState({ values });\n\t}\n}\n","
\n\t
\n\t\t\n\t\t\t
\n\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{{ item.label }}\n\t\t\t\t\t\t
\n\t\t\t\t\t\t
{{ item.count }}
\n\t\t\t\t\t
\n\t\t\t\t\n\t\t\t
\n\t\t\n\t
\n\n","import { Component, Output, EventEmitter, Input, ChangeDetectionStrategy } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { Filterable } from '../../models';\n\n@Component({\n\tselector: 'ecos-ui-checkbox-list',\n\ttemplateUrl: './checkbox-list.component.html',\n\tstyleUrls: ['./checkbox-list.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class CheckboxListComponent {\n\t@Output()\n\tselected: EventEmitter> = new EventEmitter();\n\n\t@Input()\n\titemWidth: number;\n\t@Input()\n\tfilters$: Observable;\n\n\titemSelected(item: Filterable): void {\n\t\tthis.selected.emit(item);\n\t}\n\n\tgetItemValue(index: number, item: Filterable): string {\n\t\treturn `${index}-${item.value}`;\n\t}\n}\n","
\n\t\n\t\n\n\t\n\t\t\n\t\t\n\t\n\t
\n\t\t\n\t\t\t{{ noResultsText | translate }}\n\t\t\n\t
\n
\n","import {\n\tAfterContentChecked,\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInject,\n\tInput,\n\tOnDestroy,\n\tOutput,\n\tViewChild,\n} from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { ComponentStore } from '@ngrx/component-store';\nimport { SubSink } from 'subsink';\nimport { FacetValuesStore } from './searchable-checkbox-list.service';\nimport { SearchableCheckboxListConfig, SEARCHABLE_CHECKBOX_LIST_CONFIG } from './searchable-checkbox-list.config';\nimport { Filterable } from '../models';\nimport { CdkVirtualScrollViewport } from '@angular/cdk/scrolling';\nimport { SearchComponent } from '../search';\n\n@Component({\n\tselector: 'ecos-ui-searchable-checkbox-list',\n\ttemplateUrl: './searchable-checkbox-list.component.html',\n\tstyleUrls: ['./searchable-checkbox-list.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n\tproviders: [FacetValuesStore, ComponentStore],\n})\nexport class SearchableCheckboxListComponent implements OnDestroy, AfterContentChecked {\n\tprivate subs = new SubSink();\n\n\t@ViewChild('searchRefComp') searchRef: SearchComponent;\n\t@ViewChild('scrollViewRef')\n\tprivate scrollViewRef: CdkVirtualScrollViewport;\n\n\tvaluesCount = 0;\n\tnoResults: boolean;\n\n\tprivate innerItems: Filterable[];\n\n\t@Input() clear$: Observable;\n\t@Input() showSearch = true;\n\t@Input() itemHeight: number;\n\t@Input() itemsWithoutScroll: number;\n\t@Input() searchedText$: Observable;\n\t@Input() placeholderText = 'Search';\n\t@Input() noResultsText: string;\n\t@Input() checkboxItemWidth: number;\n\n\t@Input() set items(values: Filterable[]) {\n\t\tthis.innerItems = values;\n\t\tthis.checkAndSetCheckboxList(values);\n\t}\n\n\tget items(): Filterable[] {\n\t\treturn this.innerItems;\n\t}\n\n\t@Output() selectedValue: EventEmitter> = new EventEmitter>();\n\n\tvalues$: Observable;\n\n\tget hasSearch(): boolean {\n\t\tconst shouldSearchBeDisplayed = this.config.maxItemsWithoutSearch\n\t\t\t? this.items.length > this.config.maxItemsWithoutSearch\n\t\t\t: true;\n\t\treturn this.config.showSearch ?? shouldSearchBeDisplayed;\n\t}\n\n\tconstructor(\n\t\tprivate readonly facetValueStore: FacetValuesStore,\n\t\t@Inject(SEARCHABLE_CHECKBOX_LIST_CONFIG) private config: SearchableCheckboxListConfig\n\t) {}\n\n\tprivate checkAndSetCheckboxList(values: Filterable[]) {\n\t\tif (this.searchRef?.searchInput && this.searchRef.searchInput !== '') {\n\t\t\tvalues = [...values.filter(this.filterBySearchTerm(this.searchRef.searchInput))];\n\t\t} else if (this.searchedText$) {\n\t\t\tconst sub = this.searchedText$.subscribe(\n\t\t\t\t(searchTerm) => (values = [...values.filter(this.filterBySearchTerm(searchTerm))])\n\t\t\t);\n\t\t\tthis.subs.add(sub);\n\t\t}\n\n\t\tthis.facetValueStore.setItems(values);\n\t\treturn values;\n\t}\n\n\tprivate filterBySearchTerm(searchTerm: string): (value: Filterable, index: number, array: Filterable[]) => boolean {\n\t\treturn (value) => value.label.toLowerCase().includes(searchTerm.toLowerCase());\n\t}\n\n\tprivate hasFilteredItems(items: Filterable[], searchTerm: string): boolean {\n\t\treturn items.some(this.filterBySearchTerm(searchTerm));\n\t}\n\tprivate filteredItems(items: Filterable[], searchTerm: string): Filterable[] {\n\t\treturn items.filter(this.filterBySearchTerm(searchTerm));\n\t}\n\n\tngAfterContentChecked() {\n\t\tthis.values$ = this.facetValueStore.values$;\n\t\tif (this.searchRef) {\n\t\t\tconst subs = this.searchRef.searchAsYouType().subscribe((searchTerm) => {\n\t\t\t\tif (this.hasFilteredItems(this.items, searchTerm)) {\n\t\t\t\t\tthis.facetValueStore.setItems([...this.filteredItems(this.items, searchTerm)]);\n\t\t\t\t\tthis.noResults = false;\n\t\t\t\t} else {\n\t\t\t\t\tthis.facetValueStore.setItems([]);\n\t\t\t\t\tthis.noResults = true;\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.subs.add(subs);\n\n\t\t\treturn;\n\t\t}\n\n\t\tif (this.searchedText$) {\n\t\t\tconst sub = this.searchedText$.subscribe((searchTerm) =>\n\t\t\t\tthis.facetValueStore.setItems([...this.items.filter(this.filterBySearchTerm(searchTerm))])\n\t\t\t);\n\t\t\tthis.subs.add(sub);\n\t\t}\n\t}\n\n\tselected(item: Partial) {\n\t\tthis.selectedValue.emit(item);\n\t}\n\n\tcalculateHeight(): string {\n\t\tconst sub = this.facetValueStore.values$.subscribe((values) => (this.valuesCount = values.length));\n\t\tthis.subs.add(sub);\n\n\t\tsetTimeout(() => {\n\t\t\tthis.scrollViewRef.checkViewportSize();\n\t\t}, 200);\n\t\tconst searchbar = this.hasSearch && this.valuesCount === this.itemsWithoutScroll ? 40 : 0;\n\t\tif (this.valuesCount <= this.itemsWithoutScroll) {\n\t\t\treturn `${this.itemHeight * this.valuesCount - searchbar}px`;\n\t\t}\n\n\t\tif (this.showSearch) {\n\t\t\treturn `${this.itemHeight * this.itemsWithoutScroll - 40}px`;\n\t\t}\n\n\t\treturn `${this.itemHeight * this.itemsWithoutScroll}px`;\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subs.unsubscribe();\n\t}\n}\n","import { InjectionToken } from '@angular/core';\n\nexport interface SearchableCheckboxListConfig {\n\tshowSearch?: boolean;\n\tmaxItemsWithoutSearch?: number;\n}\n\nexport const SEARCHABLE_CHECKBOX_LIST_CONFIG = new InjectionToken(\n\t'ui.searchable-checkbox-list-config'\n);\n","
\n\t\n\t\t\n\t\t\t\n\t\t\t\n\t\t\n\t\t\n\t\t\n\t
{{ getHeader(colKey) }}{{ element[colKey] }}
\n\n\t \n
\n","import { AfterViewInit, ChangeDetectionStrategy, Component, Input, OnInit, ViewChild } from '@angular/core';\nimport { MatPaginator } from '@angular/material/paginator';\nimport { MatTable, MatTableDataSource } from '@angular/material/table';\nimport { DataRow } from './models';\n\n@Component({\n\tselector: 'ecos-ui-table',\n\ttemplateUrl: 'table.component.html',\n\tstyleUrls: ['table.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TableComponent implements OnInit, AfterViewInit {\n\t@ViewChild(MatPaginator) paginator: MatPaginator;\n\t@ViewChild(MatTable) table: MatTable;\n\t@Input() data: DataRow[];\n\t@Input() header?: DataRow;\n\t@Input() includePaginator = false;\n\n\tdataSource: MatTableDataSource;\n\tcolumnKeys: string[];\n\n\tngOnInit(): void {\n\t\tthis.columnKeys = Object.keys(this.data[0]);\n\t\tthis.dataSource = new MatTableDataSource(this.data);\n\t}\n\n\tngAfterViewInit(): void {\n\t\tif (this.includePaginator) {\n\t\t\tthis.dataSource.paginator = this.paginator;\n\t\t}\n\t}\n\n\tupdateData(data: DataRow[]): void {\n\t\tthis.dataSource.data = data;\n\t}\n\n\tgetHeader(colKey: string): string {\n\t\treturn this.header ? this.header[colKey] : colKey;\n\t}\n}\n","
\n\t
\n\t\t
\n\t\t\t\n\t\t\t\t{{ translatePath + '.TAGS' | translate }}\n\t\t\t\n\t\t\t\n\t\t
\n\t\t\n\t\t\n\t
\n\t{{ translatePath + '.TAGS-SUBHEADER' | translate }}\n\t\n\t\t\n\t\t\n\t\t\t\n\t\t\t\t{{ tag }}\n\t\t\t\n\t\t\n\t\n
\n","import {\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tComponent,\n\tElementRef,\n\tEventEmitter,\n\tInput,\n\tOutput,\n\tViewChild,\n} from '@angular/core';\nimport { debounceTime, distinctUntilChanged, map } from 'rxjs/operators';\nimport { fromEvent, Observable } from 'rxjs';\n\n@Component({\n\tselector: 'ecos-ui-tags-insert',\n\ttemplateUrl: './tags-insert.component.html',\n\tstyleUrls: ['./tags-insert.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TagsInsertComponent implements AfterViewInit {\n\t@Input() tags: string[] | null;\n\t@Input() canAddTags: boolean | null;\n\t@Input() translatePath = 'DATA-MANAGER.UI.FACETS-AND-TAGS.';\n\t@Output() insertedTag: EventEmitter = new EventEmitter();\n\t@Output() info: EventEmitter = new EventEmitter();\n\n\tinput: string;\n\n\t@ViewChild('tagsInsertRef') private tagsInsertRef: ElementRef;\n\n\tprivate asYouTypeSearch$: Observable;\n\tprivate searchDebounceTime = 200;\n\n\tngAfterViewInit(): void {\n\t\tthis.asYouTypeSearch$ = fromEvent(this.tagsInsertRef.nativeElement, 'keyup').pipe(\n\t\t\tmap((event) => ((event.target) as any).value)\n\t\t);\n\t}\n\n\taddTag() {\n\t\tthis.insertedTag.emit(this.input);\n\t\tthis.input = '';\n\t}\n\n\tsearchAsYouType(): Observable {\n\t\treturn this.asYouTypeSearch$.pipe(debounceTime(this.searchDebounceTime), distinctUntilChanged());\n\t}\n\n\tinfoSelected(str: string): void {\n\t\tthis.info.emit(str);\n\t}\n}\n","import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core';\n\n@Component({\n\tselector: 'ecos-ui-removable-tags-list',\n\ttemplateUrl: './removable-tags-list.component.html',\n\tstyleUrls: ['./removable-tags-list.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class RemovableTagsListComponent {\n\t@Input() tags: string[];\n\t@Output() removedTag: EventEmitter = new EventEmitter();\n\n\tremoveTag($event: string): void {\n\t\tthis.removedTag.emit($event);\n\t}\n}\n","
\n \n
","
\n\t\n\t\n\t\n\t\t\n\t\t\n\t\n\t\n\t\n\n\t\n\t\n
\n","import {\n\tAfterViewInit,\n\tChangeDetectionStrategy,\n\tComponent,\n\tEventEmitter,\n\tInput,\n\tOnDestroy,\n\tOnInit,\n\tOutput,\n\tViewChild,\n} from '@angular/core';\n\nimport { BehaviorSubject, tap } from 'rxjs';\nimport { SubSink } from 'subsink';\nimport { StatusMessage, StatusMessageType } from '../../../models';\nimport { TagsInsertComponent } from '../tags-insert';\n\n@Component({\n\tselector: 'ecos-ui-tags-list-editor',\n\ttemplateUrl: './tags-list-editor.component.html',\n\tstyleUrls: ['./tags-list-editor.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TagsListEditorComponent implements OnInit, OnDestroy, AfterViewInit {\n\t@Input() tags: string[] = [];\n\t@Input() translationPath: string;\n\t@Input()\n\tautoSuggestedTags: string[] | null;\n\t@Input()\n\tcanAddTags: boolean | null;\n\t@Input()\n\tsuggestedTags: string[] | null;\n\t@Input()\n\taddedTags: string[] | null;\n\tprivate subscriptions = new SubSink();\n\ttagsWarningMessage$ = new BehaviorSubject>([]);\n\tisDuplicate: boolean;\n\n\t@Output()\n\taddTag: EventEmitter = new EventEmitter();\n\n\t@Output()\n\tremoveTag: EventEmitter = new EventEmitter();\n\n\t@ViewChild('tagsInsertRef') tagsInsertRef: TagsInsertComponent;\n\n\t@Output()\n\tsearchTerm: EventEmitter = new EventEmitter();\n\n\tngAfterViewInit(): void {\n\t\tif (this.tagsInsertRef) {\n\t\t\tthis.subscriptions.add(\n\t\t\t\tthis.tagsInsertRef\n\t\t\t\t\t.searchAsYouType()\n\t\t\t\t\t.pipe(tap((searchTerm) => this.searchTerm.emit(searchTerm)))\n\t\t\t\t\t.subscribe(),\n\t\t\t);\n\t\t}\n\t}\n\n\tngOnInit(): void {\n\t\tif (!this.canAddTags) {\n\t\t\tthis.createTagsLimitMessage();\n\t\t} else {\n\t\t\tthis.tagsWarningMessage$.next([]);\n\t\t}\n\t}\n\n\tprivate createTagsLimitMessage(): void {\n\t\tthis.tagsWarningMessage$.next([\n\t\t\t{\n\t\t\t\tmessage: this.translationPath + '.WARNING_MESSAGES.TAGS_LIMIT',\n\t\t\t\tmessageType: StatusMessageType.Warning,\n\t\t\t},\n\t\t]);\n\t}\n\n\tprivate createDuplicateTagMessage(): void {\n\t\tthis.tagsWarningMessage$.next([\n\t\t\t{\n\t\t\t\tmessage: this.translationPath + '.WARNING_MESSAGES.DUPLICATE_TAG',\n\t\t\t\tmessageType: StatusMessageType.Warning,\n\t\t\t},\n\t\t]);\n\t}\n\n\tprivate createAlphaNumericValidationMessage(): void {\n\t\tthis.tagsWarningMessage$.next([\n\t\t\t{\n\t\t\t\tmessage: this.translationPath + '.WARNING_MESSAGES.TAG_ALPHANUMERIC_VALIDATION',\n\t\t\t\tmessageType: StatusMessageType.Warning,\n\t\t\t},\n\t\t]);\n\t}\n\n\tprivate createLengthValidationMessage(): void {\n\t\tthis.tagsWarningMessage$.next([\n\t\t\t{\n\t\t\t\tmessage: this.translationPath + '.WARNING_MESSAGES.TAG_LENGTH_VALIDATION',\n\t\t\t\tmessageType: StatusMessageType.Warning,\n\t\t\t},\n\t\t]);\n\t}\n\n\tonAddTag(tag: string): void {\n\t\tif (this.validateTag(tag)) {\n\t\t\tthis.tagsWarningMessage$.next([]);\n\t\t\tthis.addTag.emit(tag);\n\t\t}\n\t}\n\n\tvalidateTag(tag: string): boolean {\n\t\tif (this.checkEmptyOrWhiteSpace(tag)) {\n\t\t\treturn false;\n\t\t} else if (!this.checkAlphaNumericInput(tag)) {\n\t\t\tthis.createAlphaNumericValidationMessage();\n\t\t} else if (!this.checkMinMaxLength(tag)) {\n\t\t\tthis.createLengthValidationMessage();\n\t\t} else if (this.checkDuplicate(tag)) {\n\t\t\tthis.createDuplicateTagMessage();\n\t\t} else {\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate checkDuplicate(tag: string): boolean {\n\t\tif (this.addedTags) {\n\t\t\tconst duplicateTags = this.addedTags.filter(\n\t\t\t\t(addedTag) => addedTag.trim().toLowerCase() === tag.trim().toLowerCase(),\n\t\t\t);\n\n\t\t\tthis.isDuplicate = duplicateTags ? duplicateTags.length !== 0 : false;\n\t\t\treturn this.isDuplicate;\n\t\t}\n\t\treturn false;\n\t}\n\n\tprivate checkEmptyOrWhiteSpace(tag: string): boolean {\n\t\treturn tag === undefined || tag.trim().length === 0;\n\t}\n\n\tprivate checkMinMaxLength(tag: string): boolean {\n\t\treturn tag.trim().length >= 2 && tag.length <= 60;\n\t}\n\n\tprivate checkAlphaNumericInput(tag: string): boolean {\n\t\treturn !!/^[A-Za-z0-9-_]+$/.exec(tag);\n\t}\n\n\tonRemoveTag(tag: string): void {\n\t\tthis.tagsWarningMessage$.next([]);\n\t\tthis.removeTag.emit(tag);\n\t}\n\n\tngOnDestroy(): void {\n\t\tthis.subscriptions.unsubscribe();\n\t}\n}\n","import { ChangeDetectionStrategy, Component, Input } from '@angular/core';\n\n@Component({\n\tselector: 'ecos-ui-tags',\n\ttemplateUrl: './tags.component.html',\n\tstyleUrls: ['./tags.component.scss'],\n\tchangeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class TagsComponent {\n\t@Input() tags: string[];\n\t@Input() label: string;\n}\n","
\n\t
\n\t\t{{ label | translate }}\n\t\t({{ tags.length ?? 0 }})\n\t
\n\t
\n\t\t \n\t
\n
\n","import { Component, Inject } from '@angular/core';\nimport { APP_CONFIG, AppConfigService, DOCS_CONFIG, DocsConfigService } from '@ecos/abstractions';\nimport { CommonModule } from '@angular/common';\n\n@Component({\n\tselector: 'ecos-ui-version',\n\ttemplateUrl: './version.component.html',\n\tstyleUrls: ['./version.component.scss'],\n\tstandalone: true,\n\timports: [\n\t\tCommonModule\n\t]\n})\nexport class EcosVersionComponent {\n\tconstructor(\n\t\t@Inject(DOCS_CONFIG)\n\t\tprivate docsService: DocsConfigService,\n\t\t@Inject(APP_CONFIG) private appConfig: AppConfigService\n\t) {\n\t}\n\n\tget currentYear() {\n\t\treturn new Date().getFullYear();\n\t}\n\n\tget policy() {\n\t\treturn this.docsService.getConfig('cookiePolicy');\n\t}\n\n\tget terms() {\n\t\treturn this.docsService.getConfig('termsAndConditions');\n\t}\n\n\tget disclosure() {\n\t\treturn this.docsService.getConfig('disclosure');\n\t}\n\n\tget version() {\n\t\treturn this.appConfig.version;\n\t}\n}\n","\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { MarketOption, RoleType, UserProfile, UserRole } from '../models';\n\nexport interface IUserProfileFacade {\n\t// TODO: To be moved to authorization context\n\t// User Profile should be separate from authorization context\n\thasRole(role: RoleType): Observable;\n\tgetSelectedMarket(): Observable;\n\tgetAvailableMarkets(): Observable;\n\tsetUserProfile(userProfile: UserProfile): void;\n\tsetSelectedMarket(selectedMarket: string): void;\n\tgetUserRolesForSelectedMarket(): Observable;\n}\n\nexport const USER_PROFILE_FACADE = new InjectionToken('user.profile');\n","export interface UserRole {\n\ttype: RoleType;\n\tname: string;\n\tmarketId: string;\n\tclientId: string;\n}\n\nexport enum RoleType {\n\tBasicUser = 'basicUser',\n\tAdvancedUser = 'advancedUser',\n\tMarketAdmin = 'marketAdmin',\n}\n","import { createAction, props } from '@ngrx/store';\nimport { UserProfile } from '../../domain';\n\nexport type ProfileActionTypes =\n\t| '[Profile] Get Selected Market'\n\t| '[Profile] Set Selected Market'\n\t| '[Profile] Set User Profile'\n\t| '[Profile] Set User Profile Success';\n\nexport const GetSelectedMarket = createAction('[Profile] Get Selected Market');\nexport const SetSelectedMarket = createAction(\n\t'[Profile] Set Selected Market',\n\tprops<{ selectedMarket: string }>()\n);\nexport const SetProfile = createAction(\n\t'[Profile] Set User Profile',\n\tprops<{ userProfile: UserProfile }>()\n);\nexport const SetProfileSuccess = createAction(\n\t'[Profile] Set User Profile Success',\n\tprops<{ userProfile: UserProfile; selectedMarket: string }>()\n);\n","import * as fromActions from '../actions/profile.actions';\nimport { createReducer, on } from '@ngrx/store';\nimport { MarketOption, UserRole } from '../../domain';\n\nexport interface ProfileState {\n\tselectedMarket: string;\n\tmarkets: MarketOption[];\n\tname: string;\n\tuserName: string;\n\temail: string;\n\tclientId: string;\n\tclientName: string;\n\troles: UserRole[];\n}\n\nexport const initialProfileState: ProfileState = {\n\tselectedMarket: '',\n\tmarkets: [],\n\tname: '',\n\tuserName: '',\n\temail: '',\n\tclientId: '',\n\tclientName: '',\n\troles: [],\n};\n\nexport const profileReducer = createReducer(\n\tinitialProfileState,\n\ton(fromActions.SetSelectedMarket, (state, { selectedMarket }) => ({\n\t\t...state,\n\t\tselectedMarket,\n\t})),\n\ton(fromActions.SetProfileSuccess, (state, { userProfile, selectedMarket }) => ({\n\t\t...state,\n\t\t...userProfile,\n\t\tselectedMarket,\n\t}))\n);\n","import { ActionReducerMap, createFeatureSelector } from '@ngrx/store';\nimport * as fromProfileReducer from './profile.reducer';\n\nexport const featureUserKey = 'user';\n\nexport interface FeatureUserState {\n\tprofile: fromProfileReducer.ProfileState;\n}\n\nexport const reducers: ActionReducerMap = {\n\tprofile: fromProfileReducer.profileReducer,\n};\n\nexport const getFeatureUserState = createFeatureSelector(featureUserKey);\n","import { createSelector } from '@ngrx/store';\nimport { FeatureUserState, getFeatureUserState } from '../reducers';\nimport { ProfileState } from '../reducers/profile.reducer';\nimport { MarketOption, RoleType, UserRole } from '../../domain';\n\nconst selectProfileState = (state: FeatureUserState): ProfileState => state.profile;\n\nexport const getProfileState = createSelector(getFeatureUserState, selectProfileState);\n\nexport const getSelectedMarket = createSelector(\n\tgetProfileState,\n\t(state) => state.markets.find((x) => x.id === state.selectedMarket)\n);\n\nexport const getAvailableMarkets = createSelector(\n\tgetProfileState,\n\t(state) => state.markets\n);\n\nexport const getUserRolesForSelectedMarket = createSelector(\n\tgetProfileState,\n\t(state) => state.roles.filter((x) => x.marketId === state.selectedMarket)\n);\n\nexport const hasRole = (props: { role: RoleType }) =>\n\tcreateSelector(\n\t\tgetUserRolesForSelectedMarket,\n\t\t(roles) => roles.map((x) => x.type).some((role) => role === props.role)\n\t);\n\n","import { select, Store } from '@ngrx/store';\nimport { Observable } from 'rxjs';\nimport * as fromSelectors from '../selectors';\nimport * as fromActions from '../actions';\nimport { Injectable } from '@angular/core';\nimport * as fromReducers from '../reducers';\nimport { IUserProfileFacade, MarketOption, RoleType, UserProfile, UserRole } from '../../domain';\n\n@Injectable()\nexport class UserProfileFacade implements IUserProfileFacade {\n\tconstructor(private store$: Store) {}\n\n\thasRole(role: RoleType): Observable {\n\t\treturn this.store$.pipe(select(fromSelectors.hasRole({ role })));\n\t}\n\n\tgetSelectedMarket(): Observable {\n\t\treturn this.store$.pipe(select(fromSelectors.getSelectedMarket));\n\t}\n\n\tgetAvailableMarkets(): Observable {\n\t\treturn this.store$.pipe(select(fromSelectors.getAvailableMarkets));\n\t}\n\n\tsetUserProfile(userProfile: UserProfile) {\n\t\tthis.store$.dispatch(fromActions.SetProfile({ userProfile }));\n\t}\n\n\tsetSelectedMarket(selectedMarket: string): void {\n\t\tthis.store$.dispatch(fromActions.SetSelectedMarket({ selectedMarket }));\n\t}\n\n\tgetUserRolesForSelectedMarket(): Observable {\n\t\treturn this.store$.pipe(select(fromSelectors.getUserRolesForSelectedMarket));\n\t}\n}\n","import { Inject, Injectable } from '@angular/core';\nimport { Actions, concatLatestFrom, createEffect, ofType } from '@ngrx/effects';\nimport { Store, select } from '@ngrx/store';\nimport { switchMap, tap } from 'rxjs';\nimport * as fromActions from '../actions';\nimport * as fromReducers from '../reducers';\nimport * as fromSelectors from '../selectors';\nimport { EVENT_BUS, IEventBus } from '@ecos/abstractions';\nimport { LoggingService, Severity } from '@ecos/logging';\n\n@Injectable()\nexport class ProfileEffects {\n\tgetMarketEffect$ = createEffect(\n\t\t() =>\n\t\t\tthis.actions$.pipe(\n\t\t\t\tofType(fromActions.SetSelectedMarket),\n\t\t\t\ttap(({ selectedMarket }) => {\n\t\t\t\t\tthis.loggingService.addSelectedMarketLogDimension(selectedMarket);\n\t\t\t\t\tthis.loggingService.log('ProfileEffects', Severity.Information, `Selecting new market: ${selectedMarket}`, {\n\t\t\t\t\t\tNewSelectedMarket: selectedMarket,\n\t\t\t\t\t});\n\t\t\t\t}),\n\t\t\t\ttap(() => {\n\t\t\t\t\tthis.eventBus.publish('notifications:pending-approvals', { checkForNewNotification: true });\n\t\t\t\t\tthis.eventBus.publish('notifications:shared-projects', { checkForNewNotification: true });\n\t\t\t\t})\n\t\t\t),\n\t\t{\n\t\t\tdispatch: false,\n\t\t}\n\t);\n\n\tsetProfileEffect$ = createEffect(() =>\n\t\tthis.actions$.pipe(\n\t\t\tofType(fromActions.SetProfile),\n\t\t\tconcatLatestFrom(() => this.store$.pipe(select(fromSelectors.getSelectedMarket))),\n\t\t\tswitchMap(([{ userProfile }, selectedMarket]) => {\n\t\t\t\t// if there is an existing market stored in local storage, use that one, otherwise use the first one from the list\n\t\t\t\tconst market =\n\t\t\t\t\tselectedMarket?.id && userProfile.markets.some((x) => x.id === selectedMarket.id)\n\t\t\t\t\t\t? selectedMarket.id\n\t\t\t\t\t\t: userProfile.markets[0]?.id;\n\t\t\t\tthis.loggingService.addSelectedMarketLogDimension(selectedMarket?.id);\n\t\t\t\treturn [fromActions.SetProfileSuccess({ userProfile, selectedMarket: market })];\n\t\t\t})\n\t\t)\n\t);\n\n\tconstructor(\n\t\tprivate actions$: Actions,\n\t\tprivate store$: Store,\n\t\t@Inject(EVENT_BUS) private readonly eventBus: IEventBus,\n\t\tprivate loggingService: LoggingService\n\t) {\n\t\tthis.eventBus.register('notifications:pending-approvals', {\n\t\t\ttype: 'object',\n\t\t\trequired: ['checkForNewNotification'],\n\t\t\tproperties: {\n\t\t\t\tcheckForNewNotification: {\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t\tthis.eventBus.register('notifications:shared-projects', {\n\t\t\ttype: 'object',\n\t\t\trequired: ['checkForNewNotification'],\n\t\t\tproperties: {\n\t\t\t\tcheckForNewNotification: {\n\t\t\t\t\ttype: 'boolean',\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\t}\n}\n","import { InjectionToken, NgModule } from '@angular/core';\nimport { EffectsModule } from '@ngrx/effects';\nimport { ActionReducerMap, StoreModule } from '@ngrx/store';\nimport { ProfileEffects } from './effects';\nimport { UserProfileFacade } from './facades';\nimport { featureUserKey, FeatureUserState, reducers } from './reducers';\nimport { USER_PROFILE_FACADE } from '../domain';\n\nconst FEATURE_PROFILE_REDUCER_TOKEN = new InjectionToken>('Feature User Reducers');\n\nconst getReducers = (): ActionReducerMap => ({\n\t...reducers,\n});\n\nconst effects = [ProfileEffects];\n\n@NgModule({\n\timports: [StoreModule.forFeature(featureUserKey, FEATURE_PROFILE_REDUCER_TOKEN), EffectsModule.forFeature(effects)],\n\tproviders: [\n\t\t{\n\t\t\tprovide: FEATURE_PROFILE_REDUCER_TOKEN,\n\t\t\tuseFactory: getReducers,\n\t\t},\n\t\t{\n\t\t\tprovide: USER_PROFILE_FACADE,\n\t\t\tuseClass: UserProfileFacade,\n\t\t},\n\t],\n})\nexport class UserProfileStateModule {}\n","import { CommonModule } from '@angular/common';\nimport { HttpClient } from '@angular/common/http';\nimport { NgModule } from '@angular/core';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\nimport { httpLoaderFactory } from '@ecos/translation';\nimport { PipesModule, SharedUiModule } from '@ecos/ui';\nimport { LetDirective } from '@ngrx/component';\nimport { TranslateLoader, TranslateModule } from '@ngx-translate/core';\nimport { UserProfileFacade } from './state/facades/profile.facade';\nimport { UserProfileViewComponent } from './components/user-profile-view/user-profile-view.component';\nimport { UserProfileStateModule } from './state/user-profile-state.module';\nimport { USER_PROFILE_FACADE } from './domain';\nimport { HasRoleDirective } from './directives/user-role';\n\nconst getTranslationLoaderFactory = (http: HttpClient) =>\n\thttpLoaderFactory(http, { languagePath: './assets/i18n/user/' });\n\n@NgModule({\n\timports: [\n\t\tCommonModule,\n\t\tFormsModule,\n\t\tReactiveFormsModule,\n\t\tLetDirective,\n\t\tPipesModule,\n\t\tHasRoleDirective,\n\t\tUserProfileStateModule,\n\t\tSharedUiModule,\n\t\tTranslateModule.forChild({\n\t\t\tloader: {\n\t\t\t\tprovide: TranslateLoader,\n\t\t\t\tuseFactory: getTranslationLoaderFactory,\n\t\t\t\tdeps: [HttpClient],\n\t\t\t},\n\t\t\tisolate: true,\n\t\t\tdefaultLanguage: 'en-GB',\n\t\t}),\n\t],\n\tdeclarations: [UserProfileViewComponent],\n\texports: [UserProfileViewComponent],\n\tproviders: [\n\t\t{\n\t\t\tprovide: USER_PROFILE_FACADE,\n\t\t\tuseClass: UserProfileFacade,\n\t\t},\n\t],\n})\nexport class UserProfileModule {}\n","/* eslint-disable no-bitwise */\n\nimport { RgbColor } from './color.interface';\n\nexport const rgbToHex = ([r, g, b]: RgbColor) => '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);\n\nexport const hexToRgb = (hex: string): RgbColor => {\n\thex = hex.substring(1);\n\tconst bigint = parseInt(hex, 16);\n\tconst r = (bigint >> 16) & 255;\n\tconst g = (bigint >> 8) & 255;\n\tconst b = bigint & 255;\n\n\treturn [r, g, b];\n};\n\nexport const rgb2hsv = (color: RgbColor): [number, number, number] => {\n\tconst [r, g, b] = color;\n\tconst v = Math.max(r, g, b);\n\tconst c = v - Math.min(r, g, b);\n\tconst h = c && (v === r ? (g - b) / c : v === g ? 2 + (b - r) / c : 4 + (r - g) / c);\n\treturn [60 * (h < 0 ? h + 6 : h), v && c / v, v];\n};\n\nexport const hsv2rgb = (h: number, s: number, v: number): RgbColor => {\n\tconst f = (n: number, k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);\n\treturn [Math.floor(f(5)), Math.floor(f(3)), Math.floor(f(1))];\n};\n\nconst generateColorNumber = (): number => Math.floor(Math.random() * 255) + 1;\n\nexport const generateRgbColor = (): RgbColor => [generateColorNumber(), generateColorNumber(), generateColorNumber()];\n\nexport const interpolateColor = (firstColor: number[], secondColor: number[], factor: number): RgbColor => {\n\tconst result = firstColor.slice();\n\tfor (let i = 0; i < 3; i++) {\n\t\tresult[i] = Math.round(result[i] + factor * (secondColor[i] - firstColor[i]));\n\t}\n\n\treturn [result[0], result[1], result[2]];\n};\n\nexport const interpolateColors = (firstColor: RgbColor, lastColor: RgbColor, steps: number): string[] => {\n\tconst stepFactor = 1 / Math.max(1, steps - 1);\n\tlet interpolatedColorArray: string[] = [];\n\n\tfor (let i = 0; i < steps; i++) {\n\t\tinterpolatedColorArray = [\n\t\t\t...interpolatedColorArray,\n\t\t\trgbToHex(interpolateColor(firstColor, lastColor, stepFactor * i)),\n\t\t];\n\t}\n\n\treturn interpolatedColorArray;\n};\n\nexport const generateDerivedColor = (sourceColor: RgbColor, step: number): RgbColor => {\n\tconst [h] = rgb2hsv(sourceColor);\n\tconst DEFAULT_SATURATION = 0.7;\n\tconst DEFAULT_VALUE = 250;\n\tconst derivedColor = hsv2rgb(h + step, DEFAULT_SATURATION, DEFAULT_VALUE);\n\n\treturn derivedColor;\n};\n\nexport const generateColorPallette = (sourceColor: RgbColor, numberOfColors: number, step: number): RgbColor[] => {\n\tconst colors: RgbColor[] = [];\n\tcolors.push(sourceColor);\n\tlet newColor = sourceColor;\n\n\tfor (let i = 0; i < numberOfColors; i++) {\n\t\tnewColor = generateDerivedColor(newColor, step);\n\t\tcolors.push(newColor);\n\t}\n\n\treturn colors;\n};\n","export const capitalizeFirstLetter = (value: string) => `${value?.charAt(0).toUpperCase()}${value?.slice(1)}`;\n\nexport const camelCaseToTitleCase = (s: string) =>\n\ts\n\t\t.replace(/([A-Z])/g, (match) => ` ${match}`)\n\t\t.replace(/^./, (match) => match.toUpperCase())\n\t\t.trim();\n\nexport const snakeCaseToSentenceCase = (s: string) =>\n\ts.replace(/^[-_]*(.)/, (_, c: string) => c.toUpperCase()).replace(/[-_]+(.)/g, (_, c: string) => ' ' + c);\n\nexport const snakeCaseToUpperCase = (s: string) =>\n\t\ts.replace(/^[-_]*(.)/, (_, c: string) => c.toUpperCase())\n\t\t.replace(/[-_]+(.)/g, (_, c: string) => ' ' + c.toUpperCase());\n\nexport const toLowercaseAndRemoveSpaces = (s: string) => s.toLowerCase().split(' ').join('');\n\nexport const removeFileExtension = (filename: string) => filename.replace(/\\.[^/.]+$/, '');\n\nexport const removeWhitespaceAndSpecialChars = (inputString: string): string =>\n\tinputString.replace(/[^a-zA-Z0-9]/g, '');\n","import { InjectionToken } from '@angular/core';\nimport { VisibilityLevel } from '@ecos/abstractions';\nimport { Observable } from 'rxjs';\n\nexport interface IDatasetNameUniquenessValidationService {\n\thasUniqueName(name: string, visibilityLevel: VisibilityLevel | undefined): Observable;\n}\n\nexport const DATASET_NAME_UNIQUENESS_VALIDATION_SERVICE = new InjectionToken<\n\tIDatasetNameUniquenessValidationService\n>(\n\t'validators.dataset-name-uniqueness'\n);\n","import { Inject, Injectable } from '@angular/core';\nimport { AbstractControl, AsyncValidatorFn, ValidationErrors } from '@angular/forms';\nimport { Observable, of } from 'rxjs';\nimport { map } from 'rxjs/operators';\nimport {\n\tDATASET_NAME_UNIQUENESS_VALIDATION_SERVICE,\n\tIDatasetNameUniquenessValidationService\n} from './dataset-name-uniqueness-validation-service.interface';\nimport { VisibilityLevel } from '@ecos/abstractions';\n\n@Injectable()\nexport class DatasetNameUniquenessValidator {\n\tconstructor(\n\t\t@Inject(DATASET_NAME_UNIQUENESS_VALIDATION_SERVICE)\n\t\tprivate validationService: IDatasetNameUniquenessValidationService\n\t) {}\n\n\tvalidate(visibilityLevel: VisibilityLevel | undefined, oldValue?: string): AsyncValidatorFn {\n\t\treturn (control: AbstractControl): Observable => {\n\t\t\tif (oldValue !== undefined && oldValue === control.value) {\n\t\t\t\treturn of(null);\n\t\t\t}\n\t\t\treturn this.validationService\n\t\t\t\t.hasUniqueName(control.value.trim(), visibilityLevel)\n\t\t\t\t.pipe(map((nameExists) => (nameExists ? { nameExists } : null)));\n\t\t};\n\t}\n}\n","import { InjectionToken } from '@angular/core';\nimport { Observable } from 'rxjs';\n\nexport interface IUniquenessValidationService {\n\thasUniqueName(name: string): Observable;\n}\n\nexport const UNIQUENESS_VALIDATION_SERVICE = new InjectionToken(\n\t'validators.uniqueness'\n);\n","import { AbstractControl, AsyncValidatorFn, ValidationErrors } from '@angular/forms';\nimport { map } from 'rxjs/operators';\nimport { Inject, Injectable } from '@angular/core';\nimport { Observable, of } from 'rxjs';\nimport { IUniquenessValidationService, UNIQUENESS_VALIDATION_SERVICE } from './uniqueness-validation-service.interface';\n\n@Injectable()\nexport class UniquenessValidator {\n\tconstructor(\n\t\t@Inject(UNIQUENESS_VALIDATION_SERVICE)\n\t\tprivate validationService: IUniquenessValidationService\n\t) {}\n\n\tvalidate(oldValue?: string): AsyncValidatorFn {\n\t\treturn (control: AbstractControl): Observable => {\n\t\t\tif (oldValue !== undefined && oldValue === control.value) {\n\t\t\t\treturn of(null);\n\t\t\t}\n\t\t\treturn this.validationService\n\t\t\t\t.hasUniqueName(control.value.trim())\n\t\t\t\t.pipe(map((nameExists) => (nameExists ? { nameExists } : null)));\n\t\t};\n\t}\n}\n","import { deepSearch } from '../object';\n\nexport const hasDuplicates = (array: any[]) => {\n\tconst uniqueValues = new Set();\n\tfor (const item of array) {\n\t\tconst itemString = JSON.stringify(item);\n\t\tif (uniqueValues.has(itemString)) {\n\t\t\treturn true;\n\t\t}\n\t\tuniqueValues.add(itemString);\n\t}\n\treturn false;\n};\n\nexport const searchObjectForValue = (array: any[], searchTerm: string): any[] => {\n\tconst filteredEntries = array.filter((entry) => deepSearch(entry, searchTerm));\n\n\treturn filteredEntries;\n};\n\nexport const groupBy = (arr: T[], fn: (item: T) => any) =>\n\tarr.reduce>((prev, curr) => {\n\t\tconst groupKey = fn(curr);\n\t\tconst group = prev[groupKey] || [];\n\t\tgroup.push(curr);\n\t\treturn { ...prev, [groupKey]: group };\n\t}, {});\n","export const DEFAULT_COORDINATES_PRECISION = 5;\n\nexport const areValidCoordinates = (lat?: string, lng?: string): boolean =>\n\t!!lat && !!lng && isLatitude(lat) && isLongitude(lng);\n\nexport const isLatitude = (lat: string): boolean => {\n\tconst parsed = parseFloat(lat);\n\treturn !Number.isNaN(Number(lat)) && !Number.isNaN(parsed) && isFinite(parsed) && Math.abs(parsed) <= 90;\n};\n\nexport const isLongitude = (lng: string): boolean => {\n\tconst parsed = parseFloat(lng);\n\treturn !Number.isNaN(Number(lng)) && !Number.isNaN(parsed) && isFinite(parsed) && Math.abs(parsed) <= 180;\n};\n","export const toEnumIgnoreCase = (\n\tenumType: T,\n\tvalueToParse: string\n): {\n\t[P in Extract]-?: Uppercase

extends Uppercase ? T[P] : never;\n}[Extract] =>\n\tObject.entries(enumType).find(([p]) => valueToParse.toUpperCase() === p.toUpperCase())?.[1];\n","export const isNumericValue = (value: unknown) =>\n\tvalue !== null &&\n\tvalue !== undefined &&\n\tvalue !== true &&\n\tvalue !== false &&\n\t!Number.isNaN(Number(value));\n\nexport const convertToFixedDecimal = (value: unknown, decimals: number): string | undefined => {\n\tif(isNumericValue(value)) {\n\t\treturn Number(value).toFixed(decimals);\n\t}\n\treturn undefined;\n};\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable guard-for-in */\nexport const getPropertyIgnoreCase = (obj: T, key: string): T[keyof T] | undefined => {\n\tconst lowerKey = key.toLowerCase();\n\tconst keyList = Object.keys(obj) as Array;\n\n\tfor (const k of keyList) {\n\t\tif (typeof k === 'string' && k.toLowerCase() === lowerKey) {\n\t\t\treturn obj[k];\n\t\t}\n\t}\n\n\treturn undefined;\n};\n\nexport const deepSearch = (entry: any, term: string): boolean => {\n\tfor (const key in entry) {\n\t\tconst value = entry[key];\n\t\tif (typeof value === 'object' && !(value instanceof Date)) {\n\t\t\tif (deepSearch(value, term)) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t} else if (\n\t\t\ttypeof value === 'string' ||\n\t\t\ttypeof value === 'number' ||\n\t\t\tvalue instanceof Date ||\n\t\t\ttypeof value === 'boolean'\n\t\t) {\n\t\t\tif (value.toString().toLowerCase().includes(term.toLowerCase())) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n};\n","import { Filterable } from '@ecos/ui';\nimport { Observable, defer, retryWhen, concatMap, iif, timer, throwError, tap, filter, map } from 'rxjs';\n\nexport interface RetryBackoffConfig {\n\t// Initial interval. It will eventually go as high as maxInterval.\n\tinitialInterval: number;\n\t// Maximum number of retry attempts.\n\tmaxRetries?: number;\n\t// Maximum delay between retries.\n\tmaxInterval?: number;\n\t// When set to `true` every successful emission will reset the delay and the error count.\n\tresetOnSuccess?: boolean;\n\t// A custom function that should tell if to retry or not\n\tshouldRetry?: (error: any) => boolean;\n\t// A custom delay calculation function(default delays will be doubled between each interval)\n\tbackoffDelay?: (iteration: number, initialInterval: number) => number;\n}\n\nexport const retryBackoff = (config: number | RetryBackoffConfig): ((source: Observable) => Observable) => {\n\tconst getDelay = (delay: number, maximumInterval: number) => Math.min(delay, maximumInterval);\n\tconst exponentialBackoffDelay = (iteration: number, initInterval: number) => Math.pow(2, iteration) * initInterval;\n\tconst {\n\t\tinitialInterval,\n\t\tmaxRetries = Infinity,\n\t\tmaxInterval = Infinity,\n\t\tshouldRetry = () => true,\n\t\tresetOnSuccess = false,\n\t\tbackoffDelay = exponentialBackoffDelay,\n\t} = typeof config === 'number' ? { initialInterval: config } : config;\n\n\treturn (source: Observable) =>\n\t\tdefer(() => {\n\t\t\tlet index = 0;\n\t\t\treturn source.pipe(\n\t\t\t\tretryWhen((errors) =>\n\t\t\t\t\terrors.pipe(\n\t\t\t\t\t\tconcatMap((error) => {\n\t\t\t\t\t\t\tconst attempt = index++;\n\t\t\t\t\t\t\treturn iif(\n\t\t\t\t\t\t\t\t() => attempt < maxRetries && shouldRetry(error),\n\t\t\t\t\t\t\t\ttimer(getDelay(backoffDelay(attempt, initialInterval), maxInterval)),\n\t\t\t\t\t\t\t\tthrowError(() => error)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t),\n\t\t\t\ttap(() => {\n\t\t\t\t\tif (resetOnSuccess) {\n\t\t\t\t\t\tindex = 0;\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t);\n\t\t});\n};\n\nexport const markLastSelectedValue = () => (source: Observable) =>\n\tsource.pipe(\n\t\tmap((items) => {\n\t\t\tconst isOnlyOneItemSelected = items.filter((s) => s.selected === true).length === 1;\n\t\t\treturn items.map((item) =>\n\t\t\t\titem.selected === true && isOnlyOneItemSelected ? { ...item, disabled: true } : item\n\t\t\t);\n\t\t})\n\t);\n\nexport const filterUndefinedOrNull =\n\t() =>\n\t(source: Observable) =>\n\t\tsource.pipe(filter((value: T | undefined) => value !== undefined));\n","export const isCsvFile = (file: File): boolean => file.name.toLocaleLowerCase().endsWith('csv');\nexport const isXlsxFile = (file: File): boolean => file.name.toLocaleLowerCase().endsWith('xlsx');\nexport const isSvgFile = (file: File): boolean => file.name.toLocaleLowerCase().endsWith('.svg');\n","/**\n * Gets the UTC time in ISO format by substracting the seconds from the current Date().\n * Only counts for work days(skips weekends).\n */\nexport const getTimeAgoISOString = (secondsToSubtract: number) => {\n\tconst currentDate = new Date();\n\tconst millisecondsToSubtract = secondsToSubtract * 1000;\n\tconst targetDate = new Date(currentDate.getTime() - millisecondsToSubtract);\n\n\t// Check if the targetDate is on a weekend (Saturday or Sunday)\n\twhile (targetDate.getDay() === 0 || targetDate.getDay() === 6) {\n\t\ttargetDate.setDate(targetDate.getDate() - 1);\n\t}\n\n\treturn targetDate.toISOString(); // Return the UTC date in ISO 8601 format\n};\n","var map = {\n\t\"./af\": 22408,\n\t\"./af.js\": 22408,\n\t\"./ar\": 83632,\n\t\"./ar-dz\": 20944,\n\t\"./ar-dz.js\": 20944,\n\t\"./ar-kw\": 59628,\n\t\"./ar-kw.js\": 59628,\n\t\"./ar-ly\": 60764,\n\t\"./ar-ly.js\": 60764,\n\t\"./ar-ma\": 8087,\n\t\"./ar-ma.js\": 8087,\n\t\"./ar-sa\": 36932,\n\t\"./ar-sa.js\": 36932,\n\t\"./ar-tn\": 97064,\n\t\"./ar-tn.js\": 97064,\n\t\"./ar.js\": 83632,\n\t\"./az\": 78216,\n\t\"./az.js\": 78216,\n\t\"./be\": 90432,\n\t\"./be.js\": 90432,\n\t\"./bg\": 54440,\n\t\"./bg.js\": 54440,\n\t\"./bm\": 45340,\n\t\"./bm.js\": 45340,\n\t\"./bn\": 91936,\n\t\"./bn-bd\": 43392,\n\t\"./bn-bd.js\": 43392,\n\t\"./bn.js\": 91936,\n\t\"./bo\": 11440,\n\t\"./bo.js\": 11440,\n\t\"./br\": 51592,\n\t\"./br.js\": 51592,\n\t\"./bs\": 15056,\n\t\"./bs.js\": 15056,\n\t\"./ca\": 25992,\n\t\"./ca.js\": 25992,\n\t\"./cs\": 15944,\n\t\"./cs.js\": 15944,\n\t\"./cv\": 60928,\n\t\"./cv.js\": 60928,\n\t\"./cy\": 86160,\n\t\"./cy.js\": 86160,\n\t\"./da\": 22112,\n\t\"./da.js\": 22112,\n\t\"./de\": 6456,\n\t\"./de-at\": 44712,\n\t\"./de-at.js\": 44712,\n\t\"./de-ch\": 29100,\n\t\"./de-ch.js\": 29100,\n\t\"./de.js\": 6456,\n\t\"./dv\": 28776,\n\t\"./dv.js\": 28776,\n\t\"./el\": 91928,\n\t\"./el.js\": 91928,\n\t\"./en-au\": 67528,\n\t\"./en-au.js\": 67528,\n\t\"./en-ca\": 20736,\n\t\"./en-ca.js\": 20736,\n\t\"./en-gb\": 13976,\n\t\"./en-gb.js\": 13976,\n\t\"./en-ie\": 41600,\n\t\"./en-ie.js\": 41600,\n\t\"./en-il\": 53344,\n\t\"./en-il.js\": 53344,\n\t\"./en-in\": 24072,\n\t\"./en-in.js\": 24072,\n\t\"./en-nz\": 46264,\n\t\"./en-nz.js\": 46264,\n\t\"./en-sg\": 7816,\n\t\"./en-sg.js\": 7816,\n\t\"./eo\": 51920,\n\t\"./eo.js\": 51920,\n\t\"./es\": 82808,\n\t\"./es-do\": 2772,\n\t\"./es-do.js\": 2772,\n\t\"./es-mx\": 83368,\n\t\"./es-mx.js\": 83368,\n\t\"./es-us\": 48288,\n\t\"./es-us.js\": 48288,\n\t\"./es.js\": 82808,\n\t\"./et\": 33892,\n\t\"./et.js\": 33892,\n\t\"./eu\": 35736,\n\t\"./eu.js\": 35736,\n\t\"./fa\": 68544,\n\t\"./fa.js\": 68544,\n\t\"./fi\": 83640,\n\t\"./fi.js\": 83640,\n\t\"./fil\": 24616,\n\t\"./fil.js\": 24616,\n\t\"./fo\": 27128,\n\t\"./fo.js\": 27128,\n\t\"./fr\": 50552,\n\t\"./fr-ca\": 59120,\n\t\"./fr-ca.js\": 59120,\n\t\"./fr-ch\": 17980,\n\t\"./fr-ch.js\": 17980,\n\t\"./fr.js\": 50552,\n\t\"./fy\": 7912,\n\t\"./fy.js\": 7912,\n\t\"./ga\": 34464,\n\t\"./ga.js\": 34464,\n\t\"./gd\": 98864,\n\t\"./gd.js\": 98864,\n\t\"./gl\": 32056,\n\t\"./gl.js\": 32056,\n\t\"./gom-deva\": 75804,\n\t\"./gom-deva.js\": 75804,\n\t\"./gom-latn\": 98648,\n\t\"./gom-latn.js\": 98648,\n\t\"./gu\": 76036,\n\t\"./gu.js\": 76036,\n\t\"./he\": 14000,\n\t\"./he.js\": 14000,\n\t\"./hi\": 48800,\n\t\"./hi.js\": 48800,\n\t\"./hr\": 55176,\n\t\"./hr.js\": 55176,\n\t\"./hu\": 192,\n\t\"./hu.js\": 192,\n\t\"./hy-am\": 94840,\n\t\"./hy-am.js\": 94840,\n\t\"./id\": 78240,\n\t\"./id.js\": 78240,\n\t\"./is\": 23608,\n\t\"./is.js\": 23608,\n\t\"./it\": 56816,\n\t\"./it-ch\": 25136,\n\t\"./it-ch.js\": 25136,\n\t\"./it.js\": 56816,\n\t\"./ja\": 17272,\n\t\"./ja.js\": 17272,\n\t\"./jv\": 83248,\n\t\"./jv.js\": 83248,\n\t\"./ka\": 4768,\n\t\"./ka.js\": 4768,\n\t\"./kk\": 93624,\n\t\"./kk.js\": 93624,\n\t\"./km\": 48168,\n\t\"./km.js\": 48168,\n\t\"./kn\": 69372,\n\t\"./kn.js\": 69372,\n\t\"./ko\": 37088,\n\t\"./ko.js\": 37088,\n\t\"./ku\": 63357,\n\t\"./ku.js\": 63357,\n\t\"./ky\": 3672,\n\t\"./ky.js\": 3672,\n\t\"./lb\": 43592,\n\t\"./lb.js\": 43592,\n\t\"./lo\": 16096,\n\t\"./lo.js\": 16096,\n\t\"./lt\": 92672,\n\t\"./lt.js\": 92672,\n\t\"./lv\": 69056,\n\t\"./lv.js\": 69056,\n\t\"./me\": 63280,\n\t\"./me.js\": 63280,\n\t\"./mi\": 95037,\n\t\"./mi.js\": 95037,\n\t\"./mk\": 48600,\n\t\"./mk.js\": 48600,\n\t\"./ml\": 93795,\n\t\"./ml.js\": 93795,\n\t\"./mn\": 19288,\n\t\"./mn.js\": 19288,\n\t\"./mr\": 63656,\n\t\"./mr.js\": 63656,\n\t\"./ms\": 71744,\n\t\"./ms-my\": 92804,\n\t\"./ms-my.js\": 92804,\n\t\"./ms.js\": 71744,\n\t\"./mt\": 28536,\n\t\"./mt.js\": 28536,\n\t\"./my\": 21764,\n\t\"./my.js\": 21764,\n\t\"./nb\": 64752,\n\t\"./nb.js\": 64752,\n\t\"./ne\": 82948,\n\t\"./ne.js\": 82948,\n\t\"./nl\": 49572,\n\t\"./nl-be\": 5900,\n\t\"./nl-be.js\": 5900,\n\t\"./nl.js\": 49572,\n\t\"./nn\": 14904,\n\t\"./nn.js\": 14904,\n\t\"./oc-lnc\": 57328,\n\t\"./oc-lnc.js\": 57328,\n\t\"./pa-in\": 81496,\n\t\"./pa-in.js\": 81496,\n\t\"./pl\": 25928,\n\t\"./pl.js\": 25928,\n\t\"./pt\": 85764,\n\t\"./pt-br\": 91248,\n\t\"./pt-br.js\": 91248,\n\t\"./pt.js\": 85764,\n\t\"./ro\": 37168,\n\t\"./ro.js\": 37168,\n\t\"./ru\": 97904,\n\t\"./ru.js\": 97904,\n\t\"./sd\": 68448,\n\t\"./sd.js\": 68448,\n\t\"./se\": 29244,\n\t\"./se.js\": 29244,\n\t\"./si\": 65696,\n\t\"./si.js\": 65696,\n\t\"./sk\": 77120,\n\t\"./sk.js\": 77120,\n\t\"./sl\": 83544,\n\t\"./sl.js\": 83544,\n\t\"./sq\": 71544,\n\t\"./sq.js\": 71544,\n\t\"./sr\": 53696,\n\t\"./sr-cyrl\": 33444,\n\t\"./sr-cyrl.js\": 33444,\n\t\"./sr.js\": 53696,\n\t\"./ss\": 32504,\n\t\"./ss.js\": 32504,\n\t\"./sv\": 39011,\n\t\"./sv.js\": 39011,\n\t\"./sw\": 74144,\n\t\"./sw.js\": 74144,\n\t\"./ta\": 81280,\n\t\"./ta.js\": 81280,\n\t\"./te\": 90504,\n\t\"./te.js\": 90504,\n\t\"./tet\": 36472,\n\t\"./tet.js\": 36472,\n\t\"./tg\": 77024,\n\t\"./tg.js\": 77024,\n\t\"./th\": 69872,\n\t\"./th.js\": 69872,\n\t\"./tk\": 63364,\n\t\"./tk.js\": 63364,\n\t\"./tl-ph\": 25164,\n\t\"./tl-ph.js\": 25164,\n\t\"./tlh\": 60048,\n\t\"./tlh.js\": 60048,\n\t\"./tr\": 86976,\n\t\"./tr.js\": 86976,\n\t\"./tzl\": 4224,\n\t\"./tzl.js\": 4224,\n\t\"./tzm\": 64316,\n\t\"./tzm-latn\": 72264,\n\t\"./tzm-latn.js\": 72264,\n\t\"./tzm.js\": 64316,\n\t\"./ug-cn\": 18984,\n\t\"./ug-cn.js\": 18984,\n\t\"./uk\": 25152,\n\t\"./uk.js\": 25152,\n\t\"./ur\": 57068,\n\t\"./ur.js\": 57068,\n\t\"./uz\": 47880,\n\t\"./uz-latn\": 7400,\n\t\"./uz-latn.js\": 7400,\n\t\"./uz.js\": 47880,\n\t\"./vi\": 35368,\n\t\"./vi.js\": 35368,\n\t\"./x-pseudo\": 71252,\n\t\"./x-pseudo.js\": 71252,\n\t\"./yo\": 98595,\n\t\"./yo.js\": 98595,\n\t\"./zh-cn\": 23036,\n\t\"./zh-cn.js\": 23036,\n\t\"./zh-hk\": 59944,\n\t\"./zh-hk.js\": 59944,\n\t\"./zh-mo\": 94952,\n\t\"./zh-mo.js\": 94952,\n\t\"./zh-tw\": 8240,\n\t\"./zh-tw.js\": 8240\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 92348;"],"x_google_ignoreList":[301]}