{"version":3,"sources":["components/trimmedNav/TrimmedNav.module.css","resources/Texts.ts","components/navMenu/LoginButton.tsx","components/navMenu/NavMenu.tsx","images/synamedia-logo.png","services/Service.ts","components/trimmedNav/TrimmedNav.tsx","store/AlertStore.ts","components/AlertOverlay.tsx","components/Layout.tsx","resources/Routes.ts","utils/utils.ts","resources/Enums.ts","components/shared/GraphPagination.tsx","components/administration/users/userForms/EditUserForm.tsx","components/administration/formControls/MultiselectFormField.tsx","components/administration/formControls/TextFormField.tsx","components/administration/users/userForms/PasswordHelper.ts","components/administration/users/userForms/NewUserForm.tsx","components/administration/users/userForms/AssignedApplicationsTab.tsx","components/administration/users/userForms/AssignedRolesTab.tsx","components/administration/users/userForms/PasswordTab.tsx","components/administration/users/userForms/PersonalDetailsTab.tsx","components/administration/companies/companyForms/EditCompanyForm.tsx","components/administration/users/UsersTableRow.tsx","components/administration/users/UsersTable.tsx","views/administration/users/UserAdministration.tsx","components/shared/Pagination.tsx","components/shared/utils.ts","components/administration/companies/companyForms/NewCompanyForm.tsx","components/administration/companies/companyForms/CompanyDetailsTab.tsx","components/administration/companies/CompaniesTableRow.tsx","components/administration/companies/CompaniesTable.tsx","views/administration/companies/CompanyAdministration.tsx","views/UnauthorizedView.tsx","views/UnauthorizesAccess.tsx","views/home/HomeView.tsx","App.tsx","registerServiceWorker.ts","store/CurrentUser.ts","store/index.ts","store/SelectedSolution.ts","index.tsx","store/configureStore.ts"],"names":["module","exports","Texts","Navigation","Title","SID","ManagementTools","Companies","Users","Login","Logout","Back","UnauthorizedAccessMessage","UnauthorizedMessage","HomeView","Subtitle","UsersView","AddUser","Search","TableColumns","Name","Company","Status","Actions","NewUserForm","CreateNewUser","PersonalDetails","FirstName","LastName","DisplayName","Email","DynamicsId","InitialPassword","Hint","Suggest","AssignedRoles","WelcomeTemplate","Cancel","Create","EditUserForm","Tabs","AssignedApps","TabLabel","DisabledUserWarning","Password","ResetPasswordTitle","PasswordHint","PasswordActionNotice","TemplateTitle","InternalHint","ExternalHint","Buttons","Save","CompaniesView","AddCompany","ID","CompanyName","Domain","Description","NewCompanyForm","CreateNewCompany","CompanyDetails","EditCompanyForm","Dialogs","DeleteUserTitle","ConfirmEnable","ConfirmEnableText","ConfirmDisableText","ConfirmDeleteText","ConfirmDisable","ConfirmationText","ConfirmDialog","CancelDialog","DisableAccount","EnableAccount","DeleteAccount","Alerts","InfoCompanyUpdated","InfoCompanyNotCreatedMissingInfo","InfoUserUpdated","InfoUserNotCreatedMissingInfo","InfoUserDeleted","SynamediaUser","connect","state","currentUser","props","handleLogin","window","location","href","Box","className","display","alignItems","userName","onClick","NavMenu","flexDirection","justifyContent","src","alt","Service","apiUrl","method","payload","url","axios","get","request","post","put","delete","data","callApi","userId","userEmail","user","id","search","pageIndex","pageSize","queryParams","formatQueryParams","searchText","encodeURIComponent","company","params","Url","URL","urlParams","URLSearchParams","key","undefined","set","toString","trimmedNav","React","useState","navData","setNavData","loading","setLoading","open","setopen","loadNavigation","useCallback","getTrimmedNavData","result","useEffect","styles","trimmedNavClosed","menuBtn","CircularProgress","map","item","trimmedItem","to","link","icon","linkText","text","actionCreators","addAlert","alert","type","addErrorAlert","errorMessage","removeAlert","alerts","AlertStoreActionCreators","length","setTimeout","position","top","left","right","Stack","sx","width","spacing","index","Alert","severity","flex","children","Routing","base","query","Object","keys","forEach","paramKey","append","constructFullUrl","Routes","HomePage","handleErrorMessage","error","console","log","JSON","stringify","name","message","EmailTemplate","Pagination","IconButton","disabled","prevPageDisabled","onPrevPage","thisPage","nextPageDisabled","onNextPage","EditUserFormTabs","MultiselectFormField","label","InputLabel","Select","value","onChange","event","target","split","x","some","resultItem","valueField","filter","push","variant","multiple","renderValue","selected","flexWrap","gap","Chip","textField","input","MenuItem","Checkbox","checked","ListItemText","primary","TextFormField","TextField","classes","root","hiddenLabel","size","e","PasswordHelper","lowercase","uppercase","numerics","lowers","uppers","numbers","generated","i","j","Math","floor","random","generatedString","c","blankUser","surname","givenName","displayName","accountEnabled","userPrincipalName","rolesAssigned","companySearchTimeout","companies","setCompanies","roles","setRoles","templates","setTemplates","setUser","companyValue","setCompanyValue","loadCompanies","loadRoles","loadTemplates","getCompanies","getRoles","sort","a","b","roleName","unshift","handleCreateClick","continueProcessing","mail","toLowerCase","includes","companyName","companyId","emailTemplate","password","addUser","reloadUsers","displayNameHandler","newUser","handleCompanySearchChange","clearTimeout","rolesData","role","rolesValue","Collapse","in","opened","unmountOnExit","Typography","fontFamily","closeCallback","title","Autocomplete","disablePortal","options","renderInput","onBlur","getOptionLabel","option","dynamicsId","handleCompanyChange","Button","newPass","GenerateNewPassword","newUserValue","rolesToAssign","eventRoleId","RadioGroup","template","FormControlLabel","control","Radio","None","GeneralWelcome","SoftwarePortal","LicensePortal","ResellerPortal","handleClickTemplate","UserFormColumn","apps","setApps","selectedApps","setSelectedApps","loadApps","getApplications","getUserApplicationsByUserId","dataItem","userApplications","selectedUserApplications","app","ur","appsAssigned","appsData","appsValue","userDisabledWarning","style","minWidth","appsToAssign","eventAppId","selectedRoles","setSelectedRoles","getUserRolesByUserEmail","userRoles","selectedUserRoles","roleId","PasswordTab","searchValue","setSearch","loadUserCompany","userCompany","find","EditCompanyFormTabs","Details","selectedTab","setSelectedTab","handleSaveClick","updateUser","handleChange","TabIndicatorProps","hidden","Tab","Applications","Roles","detailOpened","setDetailOpened","openDeleteDialog","setOpenDeleteDialog","openEnableDialog","setOpenEnableDialog","openDisableDialog","setOpenDisableDialog","handleOpen","handleSwitchAccountEnabled","deleteClickHandler","handleDeleteUser","deleteUser","handleUserEnabledChange","userCopy","rowClassName","TableRow","TableCell","align","Switch","switchColumn","padding","colSpan","Dialog","onClose","DialogTitle","DialogContent","DialogContentText","DialogActions","autoFocus","searchTimeout","usersData","setUsersData","sortDir","setSortDir","orderBy","setOrderBy","setOrderByType","newFormOpened","setNewFormOpened","setSearchText","currentSkipToken","setCurrentSkipToken","newSkipToken","setNewSkipToken","setNextPageDisabled","currentPage","setCurrentPage","setTotalPages","lastPage","setLastPage","loadUsers","useHistory","requestBody","orderDir","skipToken","getUsersData","resultSkipToken","queryOption","qo","users","loadNewPageOfUsers","loadPreviousPage","totalNumberOfPages","ceil","extendedUserData","concat","lastPageOfUserData","updatedUser","usersDataCopy","slice","indexOfUpdatedUser","findIndex","u","indexOfDeletedUser","splice","tableColumnHeader","field","dataType","iconClassName","orderByField","obt","GraphPagination","TableContainer","Table","stickyHeader","TableHead","TableBody","UserAdministration","Container","maxWidth","disableGutters","component","numberOfPages","isDomainValid","domain","test","fetch","response","json","blankCompany","description","companiesCrm","setCompaniesCrm","setCompany","getCrmData","validCrmCompanies","errorText","dnsError","addCompany","reloadCompanies","newCompany","handleCrmCompanyChange","CompanyFormColumn","setCrmCompanies","crmSearchValue","loadCrmCompanies","crmCompanies","updateCompany","newCompanyValue","companiesData","setCompaniesData","previousPageDisabled","setPreviousPageDisabled","currentViewPage","setCurrentViewPage","setPageIndex","totalPages","numberOfResultsPerPage","getCompaniesTable","companyViewData","items","hasNextPage","hasPreviousPage","updatedCompany","companiesDataCopy","indexOfUpdatedCompany","loadNewPageOfCompanies","totalPagesLoaded","newCompanyViewData","extendedCompaniesData","p0","CompanyAdministration","UnauthorizedView","UnauthorizedAccess","routes","exact","path","Layout","Boolean","hostname","match","reducers","selectedSolutions","incomingAction","selectedSolutionId","action","alertsCopy","alertsRemove","shift","baseUrl","document","getElementsByTagName","getAttribute","history","createBrowserHistory","basename","store","initialState","middleware","thunk","routerMiddleware","rootReducer","combineReducers","router","connectRouter","enhancers","windowIfDefined","__REDUX_DEVTOOLS_EXTENSION__","createStore","compose","applyMiddleware","configureStore","startApp","getCurrentUser","dispatch","CurrentUserActionCreators","ReactDOM","getElementById","navigator","serviceWorker","ready","then","registration","unregister"],"mappings":"yGACAA,EAAOC,QAAU,CAAC,WAAa,+BAA+B,iBAAmB,kEAAkE,YAAc,gCAAgC,SAAW,6BAA6B,QAAU,8B,kzECkKpOC,EAnKD,CACbC,WAAY,CACXC,MAAO,YACPC,IAAK,qBACLC,gBAAiB,SACjBC,UAAW,YACXC,MAAO,QACPC,MAAO,SACPC,OAAQ,UACRC,KAAM,QAEPC,0BAA2B,kDAC3BC,oBAAqB,uCACrBC,SAAU,CACTV,MAAO,iBACPW,SAAU,4EAEXC,UAAW,CACVZ,MAAO,QACPW,SAAU,8EACVE,QAAS,WACTC,OAAQ,SACRC,aAAc,CACbC,KAAM,OACNX,MAAO,QACPY,QAAS,UACTC,OAAQ,SACRC,QAAS,WAEVC,YAAa,CACZC,cAAe,kBACfC,gBAAiB,CAChBtB,MAAO,mBACPuB,UAAW,aACXC,SAAU,YACVC,YAAa,eACbC,MAAO,gBACHT,QAAS,UACTU,WAAY,cAEjBC,gBAAiB,CAChB5B,MAAO,mBACP6B,KAAM,sCACNC,QAAS,WAEVC,cAAe,CACd/B,MAAO,iBACP6B,KAAM,2CAEPG,gBAAiB,CAChBhC,MAAO,mBACP6B,KAAM,2CAEPI,OAAQ,SACRC,OAAQ,UAETC,aAAc,CACbC,KAAM,CACLC,aAAc,CACbC,SAAU,wBACVtC,MAAO,oCACPuC,oBAAqB,2CAEtBR,cAAe,CACdO,SAAU,iBACVtC,MAAO,6BACPuC,oBAAqB,2CAEtBC,SAAU,CACTF,SAAU,WACVG,mBAAoB,sBACpBC,aAAc,0DACdC,qBAAsB,+CACtBb,QAAS,UACTc,cAAe,wBACfC,aAAc,oCACdC,aAAc,sDAEfxB,gBAAiB,CAChBgB,SAAU,mBACVtC,MAAO,oBACPyB,YAAa,eACbF,UAAW,aACXC,SAAU,YACVE,MAAO,gBACPT,QAAS,YAGX8B,QAAS,CACRd,OAAQ,SACRe,KAAM,UAITC,cAAe,CACdjD,MAAO,YACPW,SAAU,sCACVuC,WAAY,cACZpC,OAAQ,SACRC,aAAc,CACboC,GAAI,KACJC,YAAa,eACbzB,WAAY,iBACZ0B,OAAQ,SACRC,YAAa,cACbnC,QAAS,WAEVoC,eAAgB,CACfC,iBAAkB,sBAClBC,eAAgB,CACfzD,MAAO,aACPmD,GAAI,KACJC,YAAa,mBACbzB,WAAY,iBACZ0B,OAAQ,SACRC,YAAa,eAEdrB,OAAQ,SACRC,OAAQ,OAETwB,gBAAiB,CAChBtB,KAAM,CACLqB,eAAgB,CACfnB,SAAU,kBACVtC,MAAO,iBACPmD,GAAI,KACJC,YAAa,eACbzB,WAAY,iBACZ0B,OAAQ,SACRC,YAAa,gBAGfP,QAAS,CACRd,OAAQ,SACRe,KAAM,YAITW,QAAS,CACRC,gBAAiB,cACjBC,cAAe,iBACfC,kBAAmB,2CACnBC,mBAAoB,0CACpBC,kBAAmB,yCACnBC,eAAgB,kBAChBC,iBAAkB,iBAClBnB,QAAS,CACRoB,cAAe,KACfC,aAAc,SACdC,eAAgB,kBAChBC,cAAe,iBACfC,cAAe,mBAGjBC,OAAQ,CACPC,mBAAoB,4BACpBC,iCAAkC,sEAClCC,gBAAiB,8EACdC,8BAA+B,wFAClCC,gBAAiB,8EACXC,cAAe,yJ,gBC3HRC,eAAQ,SAACC,GAAD,OAA6BA,EAAMC,cAA3CF,EA3BiC,SAACG,GAChD,IAIMC,EAAW,iDAAG,wFACnBC,OAAOC,SAASC,KAAO,YADJ,2CAAH,qDAIjB,OACC,cAACC,EAAA,EAAD,CAAKC,UAAU,uCAAuCC,QAAQ,OAAOC,WAAW,SAAhF,SACER,EAAMS,SACN,eAACJ,EAAA,EAAD,WACEL,EAAMS,SACP,sBAAMC,QAbW,WACpBR,OAAOC,SAASC,KAAO,oBAYSE,UAAU,eAAvC,SACE1F,EAAMC,WAAWO,YAIpB,cAACiF,EAAA,EAAD,CAAKK,QAAST,EAAaK,UAAU,eAArC,SACE1F,EAAMC,WAAWM,aCqBRwF,G,OA3C8B,SAACX,GAC7C,OACC,wBAAQM,UAAU,aAAlB,SACC,eAACD,EAAA,EAAD,CACCO,cAAc,MACdC,eAAe,gBACfL,WAAW,SACXD,QAAQ,OACRD,UAAU,iBALX,UAOC,cAACD,EAAA,EAAD,CACCO,cAAc,MACdL,QAAQ,OACRC,WAAW,SACXF,UAAU,4BAJX,SAMC,cAACD,EAAA,EAAD,CAAKC,UAAU,kBAAkBC,QAAQ,OAAOC,WAAW,SAA3D,SACC,qBAAKM,ICzBI,ipJDyBoBC,IAAI,iBAGnC,cAACV,EAAA,EAAD,CACCO,cAAc,MACdL,QAAQ,OACRC,WAAW,SACXF,UAAU,8BAJX,SAOC,qBAAKA,UAAU,UAAf,SAA0B1F,EAAMC,WAAWE,QAG5C,cAACsF,EAAA,EAAD,CACCO,cAAc,MACdL,QAAQ,OACRC,WAAW,SACXF,UAAU,6BAJX,SAMC,cAAC,EAAD,a,0GExCQU,EAAb,6IACC,WACCC,EACAC,EACAC,GAHD,mFAMOC,EANP,cAM4BH,GAN5B,KAQSC,EART,OASO,QATP,OAaO,SAbP,OAiBO,QAjBP,QAqBO,WArBP,wCAUmBG,IAAMC,IAAIF,GAV7B,sCAsBGG,EAtBH,oDAcmBF,IAAMG,KAAKJ,EAAKD,GAdnC,yBAkBmBE,IAAMI,IAAIL,EAAKD,GAlBlC,yBAsBmBE,IAAMK,OAAON,GAtBhC,iCA0BQG,EAAQI,MA1BhB,4CADD,sIAgCC,WACCJ,GADD,oGAGQP,EAAQY,QAAoC,cAAe,OAAQL,IAH3E,2CAhCD,2IAsCC,WAA0CA,GAA1C,oGACQP,EAAQY,QAA8B,kBAAmB,OAAQL,IADzE,2CAtCD,0IA0CC,WAAyCM,GAAzC,oGACQb,EAAQY,QAAR,uBAAmDC,GAAU,QADrE,2CA1CD,6IA8CC,WAA4CC,GAA5C,oGACQd,EAAQY,QAAR,0BAA0DE,GAAa,QAD/E,2CA9CD,iJAkDC,WAAgDD,GAAhD,oGACQb,EAAQY,QAAR,wCAA+EC,GAAU,QADjG,2CAlDD,gIAsDC,WAA+BE,GAA/B,oGACQf,EAAQY,QAAR,iBAA0BG,EAAKC,IAAM,MAAOD,IADpD,2CAtDD,6HA0DC,WAA4BA,GAA5B,oGACQf,EAAQY,QAAR,SAA0B,OAAQG,IAD1C,2CA1DD,gIA8DC,WAA+BF,GAA/B,oGACQb,EAAQY,QAAR,iBAA0BC,GAAU,WAD5C,2CA9DD,uIAkEC,WAAsCI,EAAiBC,EAAmBC,GAA1E,yFAC0B,4BACrBC,EAAsBC,EAAkB,CAACC,WAAYL,EAAQC,UAAWA,EAAWC,SAAUA,IAC7Ff,EAFqB,4BAEFgB,EAHxB,kBAIQpB,EAAQY,QAAsCR,EAAK,QAJ3D,2CAlED,sIAyEC,WAAiCa,GAAjC,wFACKb,EAAc,0BAEda,IACHb,GAAO,eAAiBmB,mBAAmBN,IAJ7C,kBAOQjB,EAAQY,QAA8BR,EAAK,QAPnD,2CAzED,sIAmFC,WAAqCa,GAArC,wFACKb,EAAc,iBAEda,IACHb,GAAO,eAAiBmB,mBAAmBN,IAJ7C,kBAOQjB,EAAQY,QAA8BR,EAAK,QAPnD,2CAnFD,uIA+FC,8FACmB,cADnB,kBAEQJ,EAAQY,QADG,cACgC,QAFnD,2CA/FD,+HAqGC,WAA+BK,GAA/B,wFACKb,EAAc,iBAEda,IACHb,GAAO,SAAWmB,mBAAmBN,IAJvC,kBAOQjB,EAAQY,QAAkCR,EAAK,QAPvD,2CArGD,gIA4HC,WAA+BoB,GAA/B,oGACQxB,EAAQY,QAAR,iBAAkC,OAAQY,IADlD,2CA5HD,mIA+HC,WAAkCA,GAAlC,oGACQxB,EAAQY,QAAR,4BAAqCY,EAAQR,IAAM,MAAOQ,IADlE,2CA/HD,8HAmIC,iHACQxB,EAAQY,QAA2B,kBAAmB,QAD9D,2CAnID,oIAuIC,iHACQZ,EAAQY,QAAkC,wBAAyB,QAD3E,2CAvID,iIA2IC,iHACQZ,EAAQY,QAA+B,aAAc,QAD7D,2CA3ID,mIA+IC,iHACQZ,EAAQY,QAAgB,QAAS,QADzC,2CA/ID,6DAqJA,SAASS,EAAkBI,GAC1B,IAAMC,EAAM,IAAIC,IAAI,uBAEdC,EAAY,IAAIC,gBAAgBH,EAAIT,QAC1C,IAAK,IAAMa,KAAOL,OACIM,IAAhBN,EAAOK,IAAsC,KAAhBL,EAAOK,IACzCF,EAAUI,IAAIF,EAAKL,EAAOK,IAI3B,MAAQ,IAAMF,EAAUK,W,aCxJV,SAASC,IACpB,MAA8BC,IAAMC,SAAqB,IAAzD,mBAAOC,EAAP,KAAgBC,EAAhB,KACA,EAA8BH,IAAMC,UAAkB,GAAtD,mBAAOG,EAAP,KAAgBC,EAAhB,KACA,EAAwBJ,oBAAS,GAAjC,mBAAOK,EAAP,KAAaC,EAAb,KAMMC,EAAiBR,IAAMS,YAAN,gCAAkB,qGACrCJ,GAAW,GAD0B,kBAGRxC,EAAQ6C,oBAHA,QAGpCC,EAHoC,SAKzCR,EAAWQ,GAL8B,wDAUrCN,GAAW,GAV0B,yDAWvC,IAMF,OAJAL,IAAMY,WAAU,WAClBJ,MACE,CAACA,IAGG,sBAAKrD,UAAWmD,EAAKO,IAAOd,WAAWc,IAAOC,iBAA9C,UAEI,wBAAQ3D,UAAW0D,IAAOE,QAASxD,QAzBxB,WACfgD,GAASD,IAwBL,SACKA,EAAM,cAAC,IAAD,IAAiC,cAAC,IAAD,MAG3CF,EAEG,cAAClD,EAAA,EAAD,CAAKE,QAAQ,OAAOD,UAAU,uBAA9B,SACI,cAAC6D,EAAA,EAAD,MAIJ,mCACCd,EAAQe,KAAI,SAAAC,GACT,OAAO,eAAC,IAAD,CAAuB/D,UAAW0D,IAAOM,YAAaC,GAAIF,EAAKG,KAA/D,UACH,qBAAK1D,IAAKuD,EAAKI,OACf,sBAAMnE,UAAW0D,IAAOU,SAAxB,SAAmCL,EAAKM,SAFvBN,EAAKrC,Y,sBC/BjC4C,EAAiB,CAC7BC,SAAU,SAACC,GAAD,MAAoB,CAAEC,KAAM,YAAa5D,QAAS2D,IAC5DE,cAAe,SAACC,GAAD,MACb,CAAEF,KAAM,YAAa5D,QAAS,CAAE4D,KAAM,QAASJ,KAAMM,KACvDC,YAAa,iBAAO,CAAEH,KAAM,kBCadlF,eACd,SAACC,GAAD,OAA6BA,EAAMqF,SACnCC,EAFcvF,EA9BmC,SAACG,GAAW,IAAD,EAS5D,OARAmD,aAAgB,WACXnD,EAAMmF,OAAOE,OAAS,GACzBC,YAAW,WACVtF,EAAMkF,gBACJ,OAEF,CAAClF,EAAMmF,SAGT,cAAC9E,EAAA,EAAD,CACCC,UAAU,eACVC,QAAQ,OACRM,eAAe,SACf0E,SAAS,WACTC,IAAK,GACLC,KAAM,EACNC,MAAO,EAPR,SASC,cAACC,EAAA,EAAD,CAAOC,GAAI,CAAEC,MAAO,OAASC,QAAS,EAAtC,mBACE9F,EAAMmF,cADR,aACE,EAAcf,KAAI,SAACU,EAAOiB,GAAR,OAClB,cAACC,EAAA,EAAD,CAAOC,SAAUnB,EAAMC,KAAvB,SACED,EAAMH,MAD0BoB,aCvBxB,WAAC/F,GAAD,OACd,qCACC,cAAC,EAAD,IAEA,eAACK,EAAA,EAAD,CAAKC,UAAU,oBAAoBC,QAAQ,OAAOK,cAAc,MAAMsF,KAAM,EAA5E,UACC,cAAC,EAAD,IACA,cAAC7F,EAAA,EAAD,CAAKC,UAAU,wBAAwBC,QAAQ,OAAOK,cAAc,MAAMsF,KAAM,EAAhF,SACClG,EAAMmG,cAIR,cAAC,EAAD,QChBWC,EAAb,qGAaC,SAAgCC,EAAc5D,GAC7C,IACI6D,EADAxC,EAAiBuC,EAarB,OAVI5D,IACH6D,EAAQ,IAAIzD,gBAEZ0D,OAAOC,KAAK/D,GAAQgE,SAAQ,SAACC,GAC5BJ,EAAMK,OAAOD,EAAUjE,EAAOiE,OAG/B5C,EAAM,UAAMA,EAAN,YAAgBwC,EAAMrD,aAGtBa,IA3BT,4BA8BC,WACC,OAAOsC,EAAQQ,iBAAiBR,EAAQS,OAAOC,cA/BjD,KAAaV,EACES,OAAS,CACtBC,SAAU,IACV7L,UAAU,cACJC,MAAO,W,kJCNR,SAAS6L,EAAmBC,GAIlC,OAHAC,QAAQC,IAAIC,KAAKC,UAAUJ,EAAMK,OACjCJ,QAAQC,IAAIC,KAAKC,UAAUJ,EAAMM,UAE7BN,EAAMM,QACC,oEACAN,EAAMK,KACTL,EAAMK,KAENF,KAAKC,UAAUJ,G,ICPZO,G,6DCkCGC,GArBoC,SAACxH,GACnD,OACC,eAACK,EAAA,EAAD,CACCC,UAAU,qBACVC,QAAQ,OACRK,cAAc,MACdJ,WAAW,SACXK,eAAe,WACfqF,KAAM,EANP,UAQC,cAACuB,GAAA,EAAD,CAAYC,SAAU1H,EAAM2H,iBAAkBjH,QAASV,EAAM4H,WAA7D,SACC,cAAC,KAAD,MAEA5H,EAAM6H,SACP,cAACJ,GAAA,EAAD,CAAYC,SAAU1H,EAAM8H,iBAAkBpH,QAASV,EAAM+H,WAA7D,SACC,cAAC,KAAD,U,mMD5BQR,K,YAAAA,E,gCAAAA,E,gCAAAA,E,8BAAAA,E,iCAAAA,Q,SEiBPS,G,sECIQC,GAA4D,SAACjI,GAAW,IAAD,EA+C7EM,EAAoBN,EAAMM,UAAN,0CACYN,EAAMM,WACzC,kCAEH,OACC,qCACEN,EAAMkI,OAAS,cAACC,GAAA,EAAD,CAAY7H,UAAU,kBAAtB,SAAyCN,EAAMkI,QAE/D,cAACE,GAAA,EAAD,CACCC,MAAOrI,EAAMqI,OAAS,GACtBC,SAxDkB,SAACC,GACrB,IAAIzE,EAAmB,GAEnByE,EAAMC,OAAOH,QACkB,kBAAvBE,EAAMC,OAAOH,MACvBvE,EAASyE,EAAMC,OAAOH,MAAMI,MAAM,KAElCF,EAAMC,OAAOH,MAAM5B,SAAQ,SAACiC,GACV,kBAANA,EAET5E,EAAO6E,MACN,SAACC,GAAD,OACCA,IAAeF,GAAKE,EAAW5I,EAAM6I,cAAgBH,KAGvD5E,EAASA,EAAOgF,QACf,SAACF,GAAD,OACCA,IAAeF,GAAKE,EAAW5I,EAAM6I,cAAgBH,KAGvD5E,EAAOiF,KAAKL,GAIZ5E,EAAO6E,MACN,SAACC,GAAD,OACCA,IAAeF,EAAE1I,EAAM6I,aACvBD,EAAW5I,EAAM6I,cAAgBH,EAAE1I,EAAM6I,eAG3C/E,EAASA,EAAOgF,QACf,SAACF,GAAD,OACCA,IAAeF,EAAE1I,EAAM6I,aACvBD,EAAW5I,EAAM6I,cAAgBH,EAAE1I,EAAM6I,eAG3C/E,EAAOiF,KAAKL,EAAE1I,EAAM6I,iBAOzB7I,EAAMsI,SAASxE,IAcbxD,UAAWA,EACX0I,QAAQ,SACRC,UAAQ,EACRC,YAAa,SAACC,GAAD,OACZ,cAAC,KAAD,CAAKvD,GAAI,CAAErF,QAAS,OAAQ6I,SAAU,OAAQC,IAAK,IAAnD,SACEF,EAAS/E,KAAI,SAACiE,GAAD,OACb,cAACiB,GAAA,EAAD,CAAoCpB,MAAOG,EAAMrI,EAAMuJ,YAA5ClB,EAAMrI,EAAM6I,mBAI1BW,MAAOxJ,EAAMwJ,MAbd,mBAeExJ,EAAM2B,YAfR,aAeE,EAAYyC,KAAI,SAACC,GAAD,aAKhB,cAJA,CAICoF,GAAA,EAAD,CACCpB,MAAOhE,EAAKrE,EAAM6I,YAElBvI,UAAU,6BAHX,UAKC,cAACoJ,GAAA,EAAD,CACCC,SACC,UAAA3J,EAAMqI,aAAN,eAAaM,MACZ,SAACD,GAAD,OAAOA,EAAE1I,EAAM6I,cAAgBxE,EAAKrE,EAAM6I,kBACtC,IAGP,cAACe,GAAA,EAAD,CAAcC,QAASxF,EAAKrE,EAAMuJ,eAZnC,OAEMlF,QAFN,IAEMA,OAFN,EAEMA,EAAMrC,aCxFJ8H,I,OAA8C,SAAC9J,GAC3D,IAAMM,EAAoBN,EAAMM,UAAN,oBAA+BN,EAAMM,WAAc,YAE7E,OACC,qCACEN,EAAMkI,OAAS,cAACC,GAAA,EAAD,CAAY7H,UAAU,kBAAtB,SAAyCN,EAAMkI,QAE/D,cAAC6B,EAAA,EAAD,CACCzJ,UAAWA,EACX0J,QAAS,CAAEC,KAAM,SACjBjB,QAAQ,SACRkB,aAAW,EACXC,KAAK,QACLzC,SAAU1H,EAAM0H,SAChBW,MAAOrI,EAAMqI,OAAS,GACtBC,SAAU,SAAC8B,GAAD,OAAOpK,EAAMsI,SAAS8B,EAAE5B,OAAOH,eC3BhCgC,GAAb,wGACC,SACCC,EACAC,EACAC,GAOA,IALA,IAAMC,EAAiB,6BACjBC,EAAiB,6BACjBC,EAAkB,aAEpBC,EAAsB,GACjBC,EAAY,EAAGA,GAAKP,EAAYC,EAAYC,EAAUK,IAC9DD,EAAU7B,KAAK,KAIhB,IADA,IAAI+B,EAAY,EACTA,EAAI,GAAG,CACb,IAAM/E,EAAQgF,KAAKC,MAAMD,KAAKE,SAAWL,EAAUvF,QAC1B,MAArBuF,EAAU7E,KACb6E,EAAU7E,GAAS0E,EAAOM,KAAKC,MAAMD,KAAKE,SAAWR,EAAOpF,SAC5DyF,KAKF,IADAA,EAAI,EACGA,EAAI,GAAG,CACb,IAAM/E,EAAQgF,KAAKC,MAAMD,KAAKE,SAAWL,EAAUvF,QAC1B,MAArBuF,EAAU7E,KACb6E,EAAU7E,GAAS2E,EAAOK,KAAKC,MAAMD,KAAKE,SAAWP,EAAOrF,SAC5DyF,KAKF,IADAA,EAAI,EACGA,EAAI,GAAG,CACb,IAAM/E,EAAQgF,KAAKC,MAAMD,KAAKE,SAAWL,EAAUvF,QAC1B,MAArBuF,EAAU7E,KACb6E,EAAU7E,GAAS4E,EAAQI,KAAKC,MAAMD,KAAKE,SAAWN,EAAQtF,SAC9DyF,KAIF,IAAII,EAA0B,GAE9B,OADAN,EAAUnE,SAAQ,SAAC0E,GAAD,OAAQD,GAAmBC,KACtCD,MA5CT,KCqCME,I,OAAmB,CACxBpJ,GAAI,GACJqJ,QAAS,GACTC,UAAW,GACXC,YAAa,GACbC,gBAAgB,EAChBC,kBAAmB,GACnBC,cAAe,KAkZD7L,eAAQ,KAAMuF,EAAdvF,EA/YiC,SAACG,GAAW,IAAD,EAQtD2L,EAPJ,EAAkCxI,WAA2B,IAA7D,mBAAOyI,EAAP,KAAkBC,EAAlB,KACA,EAA0B1I,WAAwB,IAAlD,mBAAO2I,EAAP,KAAcC,EAAd,KACA,EAAkC5I,WAA4B,IAA9D,mBAAO6I,EAAP,KAAkBC,EAAlB,KACA,EAAwB9I,aAAxB,mBAAOpB,EAAP,KAAamK,EAAb,KAEA,EAAwC/I,WAAyB,MAAjE,mBAAOgJ,EAAP,KAAqBC,EAArB,KAIAjJ,aAAgB,WACfkJ,IACAC,IACAC,IAEAL,EAAQd,MACN,IAEH,IAAMiB,EAAa,iDAAG,WAAOpK,GAAP,0GAEgBjB,EAAQwL,aAAavK,GAFrC,OAEd2J,EAFc,OAIpBC,EAAaD,GAJO,gDAMpB5L,EAAMgF,cAAc+B,EAAmB,EAAD,KANlB,yDAAH,sDAUbuF,EAAS,iDAAG,uHAEatL,EAAQyL,WAFrB,OAEVX,EAFU,OAIhBC,EAASD,EAAMY,MAAK,SAACC,EAAGC,GAAJ,OAAWD,EAAEE,SAAWD,EAAEC,UAAY,EAAI,MAJ9C,gDAMhB7M,EAAMgF,cAAc+B,EAAmB,EAAD,KANtB,yDAAH,qDAUTwF,EAAa,iDAAG,8FACrB,KACOzI,EAAsB,CAC3B,CACC9B,GAAI,IACJqF,KAAM,gCAEP,CACCrF,GAAI,IACJqF,KAAM,mBAEH,CACErF,GAAI,IACJqF,KAAM,kBAER,CACErF,GAAI,IACJqF,KAAM,qBAINyF,QAAQ,CACd9K,GAAI,IACJqF,KAAM,6BAGP4E,EAAanI,GACZ,MAAOkD,GACLhH,EAAMgF,cAAc+B,EAAmBC,IACvChH,EAAM6E,SAAS,CACbE,KAAM,OACNJ,KAAM/J,EAAM0E,OAAOG,kBA/BJ,2CAAH,qDAyCbsN,EAAiB,iDAAG,8GAGjBC,GAAqB,EACrB/H,EAAe,GAEtB,UAAIlD,EAAKkL,YAAT,OAAI,EAAWC,cAAcC,SAAS,mBACvClI,EAAerK,EAAM0E,OAAOM,cAC5BoN,GAAqB,IAErB/H,EAAe,4DACVlD,EAAKqL,cAAenI,GAAgB,aAAc+H,GAAqB,GACvEjL,EAAKsL,YAAapI,GAAgB,gBAAiB+H,GAAqB,GACxEjL,EAAKwJ,cAAetG,GAAgB,kBAAmB+H,GAAqB,GAC5EjL,EAAKuL,gBAAiBrI,GAAgB,sBAAuB+H,GAAqB,GAClFjL,EAAKuJ,YAAarG,GAAgB,gBAAiB+H,GAAqB,GACxEjL,EAAKkL,OAAQhI,GAAgB,mBAAoB+H,GAAqB,GACtEjL,EAAKwL,WAAYtI,GAAgB,sBAAuB+H,GAAqB,GAC9EjL,EAAK2J,cAAcrG,OAAS,IAAKJ,GAAgB,oBAAqB+H,GAAqB,GAC1FjL,EAAKsJ,UAAWpG,GAAgB,eAAgB+H,GAAqB,KAGlEA,EAtBiB,iCAuBbhM,EAAQwM,QAAQzL,GAvBH,OAwBnB/B,EAAMyN,cACNzN,EAAM6E,SAAS,CAAEE,KAAM,OAAQJ,KAAM,QAAU5C,EAAKwJ,YAAc,8BAzB/C,wBA4BnBvL,EAAM6E,SAAS,CAAEE,KAAM,UAAWJ,KAAMM,IA5BrB,0DA+BrBjF,EAAMgF,cAAc+B,EAAmB,EAAD,KA/BjB,0DAAH,qDAiDjB2G,EAAqB,SAACrF,GAC3B,IAAMsF,EAAc,gBAAQ5L,GAC5B4L,EAAQpC,YAAclD,EACtB6D,EAAQyB,IAiBHC,EAA4B,SACjCrF,GAEAsF,aAAalC,GAEbA,EAAuBrG,YAAW,WACjC+G,EAAc9D,EAAMC,OAAOH,SACzB,MA4BEyF,EAAYhC,EAAM1H,KAAI,SAAC2J,GAC5B,MAAO,CACN/L,GAAI+L,EAAK/L,GAAGiB,WACZ4J,SAAUkB,EAAKlB,aAIXmB,EAAU,OAAGjM,QAAH,IAAGA,GAAH,UAAGA,EAAM2J,qBAAT,aAAG,EAAqBtH,KAAI,SAAC2J,GAC5C,MAAO,CACN/L,GAAI+L,EAAK/L,GAAGiB,WACZ4J,SAAUkB,EAAKlB,aA6BjB,OACC,cAACoB,GAAA,EAAD,CAAUC,GAAIlO,EAAMmO,OAAQC,eAAa,EAACxI,GAAI,CAAEC,MAAO,QAAvD,SACC,eAACxF,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASN,UAAU,oBAAoB4F,KAAM,EAA/E,UACC,eAAC7F,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdC,eAAe,gBACfL,WAAW,SAJZ,UAMC,cAAC6N,EAAA,EAAD,CAAYrF,QAAQ,KAAKsF,WAAW,UAApC,SACE1T,EAAMc,UAAUQ,YAAYC,gBAG9B,cAACsL,GAAA,EAAD,CAAY/G,QAASV,EAAMuO,cAA3B,SACC,cAAC,KAAD,SAIF,eAAClO,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,MAAMN,UAAU,kBAAkB4F,KAAM,EAA1E,UACC,eAAC,GAAD,CACCsI,MAAO5T,EAAMc,UAAUQ,YAAYE,gBAAgBtB,MACnD2J,KAAM,cAAC,KAAD,CAAYnE,UAAU,qBAF7B,UAIC,cAAC,GAAD,CACCA,UAAU,oBACV4H,MAAOtN,EAAMc,UAAUQ,YAAYE,gBAAgBC,UACnDgM,MAAK,OAAEtG,QAAF,IAAEA,OAAF,EAAEA,EAAMuJ,UACbhD,SAvImB,SAACD,GACzB,IAAMsF,EAAc,gBAAQ5L,GAC5B4L,EAAQrC,UAAYjD,EACpBsF,EAAQpC,YAAR,iBAAyBoC,QAAzB,IAAyBA,OAAzB,EAAyBA,EAASrC,UAAlC,mBAA+CqC,QAA/C,IAA+CA,OAA/C,EAA+CA,EAAStC,SACxDa,EAAQyB,MAsIJ,cAAC,GAAD,CACCrN,UAAU,oBACV4H,MAAOtN,EAAMc,UAAUQ,YAAYE,gBAAgBE,SACnD+L,MAAK,OAAEtG,QAAF,IAAEA,OAAF,EAAEA,EAAMsJ,QACb/C,SAvIiB,SAACD,GACvB,IAAMsF,EAAc,gBAAQ5L,GAC5B4L,EAAQtC,QAAUhD,EAClBsF,EAAQpC,YAAR,iBAAyBoC,QAAzB,IAAyBA,OAAzB,EAAyBA,EAASrC,UAAlC,mBAA+CqC,QAA/C,IAA+CA,OAA/C,EAA+CA,EAAStC,SACxDa,EAAQyB,MAsIJ,cAAC,GAAD,CACCrN,UAAU,oBACV4H,MAAOtN,EAAMc,UAAUQ,YAAYE,gBAAgBG,YACnD8L,MAAK,OAAEtG,QAAF,IAAEA,OAAF,EAAEA,EAAMwJ,YACbjD,SAAUoF,IAGX,cAAC,GAAD,CACCpN,UAAU,oBACV4H,MAAOtN,EAAMc,UAAUQ,YAAYE,gBAAgBI,MACnD6L,MAAK,OAAEtG,QAAF,IAAEA,OAAF,EAAEA,EAAMkL,KACb3E,SAxIe,SAACD,GACrB,IAAMsF,EAAc,gBAAQ5L,GAC5B4L,EAAQV,KAAO5E,EACf6D,EAAQyB,MAwIJ,cAACc,GAAA,EAAD,CACCC,eAAa,EACbpO,UAAU,8BACVqO,QAAS/C,GAAa,GACtBvD,MAAO8D,EACPyC,YAAa,SAACnM,GAAD,OACZ,cAACsH,EAAA,EAAD,6BACKtH,GADL,IAECyF,MAAOtN,EAAMc,UAAUQ,YAAYE,gBAAgBL,QACnDuM,SAAUsF,EACViB,OAAQ,kBAAMxC,SAGhByC,eAAgB,SAACC,GAAD,OAAsBA,EAAO3B,aAC7C9E,SAAU,SAACC,EAAOF,GAAR,OAnJY,SAACA,GAC5B,IAAMsF,EAAc,gBAAQ5L,GAC5B4L,EAAQP,YAAR,OAAsB/E,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAO+E,YAC7BO,EAAQN,UAAR,OAAoBhF,QAApB,IAAoBA,OAApB,EAAoBA,EAAO2G,WAC3B9C,EAAQyB,GACRvB,EAAgB/D,GA8IiB4G,CAAoB5G,MAG3C,cAAC,GAAD,CACE/H,UAAU,oBACV4H,MAAOtN,EAAMc,UAAUQ,YAAYE,gBAAgBK,WACnD4L,MAAK,OAAEtG,QAAF,IAAEA,OAAF,EAAEA,EAAMsL,UACb/E,SAAUoF,OAKnB,eAAC,GAAD,CACCc,MAAO5T,EAAMc,UAAUQ,YAAYQ,gBAAgB5B,MACnD2J,KAAM,cAAC,KAAD,CAASnE,UAAU,kBAF1B,UAIC,cAACD,EAAA,EAAD,CAAKC,UAAU,qBAAf,SACE1F,EAAMc,UAAUQ,YAAYQ,gBAAgBC,OAG9C,cAAC,GAAD,CACC2D,UAAU,oBACV+H,MAAK,OAAEtG,QAAF,IAAEA,OAAF,EAAEA,EAAMwL,SACbjF,SAxJkB,SAACD,GACxB,IAAMsF,EAAc,gBAAQ5L,GAC5B4L,EAAQJ,SAAWlF,EACnB6D,EAAQyB,MAwJJ,eAACuB,EAAA,EAAD,CACClG,QAAQ,YACR1I,UAAU,yBACVI,QAxJsB,WAC3B,IAAMyO,EAAU9E,GAAe+E,oBAAoB,EAAG,EAAG,GACnDzB,EAAc,gBAAQ5L,GAC5B4L,EAAQJ,SAAW4B,EACnBjD,EAAQyB,IAiJJ,UAKC,cAAC,KAAD,IACC/S,EAAMc,UAAUQ,YAAYQ,gBAAgBE,cAQ/C,eAAC,GAAD,CACC4R,MAAO5T,EAAMc,UAAUQ,YAAYW,cAAc/B,MACjD2J,KAAM,cAAC,KAAD,CAAenE,UAAU,qBAFhC,UAIC,cAACD,EAAA,EAAD,CAAKC,UAAU,aAAf,SACE1F,EAAMc,UAAUQ,YAAYW,cAAcF,OAG5C,cAAC0D,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAAlC,SACC,cAAC,GAAD,CACCN,UAAU,qBACVqB,KAAMmM,EACNjF,WAAW,KACXU,UAAU,WACVlB,MAAO2F,GAAc,GACrB1F,SA3KmB,SAACD,GAC1B,IAAMgH,EAAmB,gBAAQtN,GAE3BuN,EAAgBxD,EAAMhD,QAAO,SAACiF,GAAD,cAClC1F,QADkC,IAClCA,OADkC,EAClCA,EAAOM,MAAK,SAAC4G,GAAD,OAAiBA,IAAgBxB,EAAK/L,GAAGiB,iBAGtDoM,EAAa3D,cAAgB4D,EAE7BpD,EAAQmD,WAuKL,eAAC,GAAD,CACCb,MAAO5T,EAAMc,UAAUQ,YAAYY,gBAAgBhC,MACnD2J,KAAM,cAAC,KAAD,CAAmBnE,UAAU,uBAFpC,UAIC,cAACD,EAAA,EAAD,CAAKC,UAAU,iBAAf,SACE1F,EAAMc,UAAUQ,YAAYY,gBAAgBH,OAG9C,cAAC0D,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAAlC,SACC,cAAC4O,GAAA,EAAD,UACExD,EAAU5H,KAAI,SAACqL,GAAD,OACd,cAACC,GAAA,EAAD,CACCpP,UAAU,iBAEV+H,MAAOoH,EAASzN,GAChB2N,QAAS,cAACC,GAAA,EAAD,IACT1H,MAAOuH,EAASpI,KAChB3G,QAAS,kBAvKU,SAACoC,GAC5B,IAAMuM,EAAmB,gBAAQtN,GAE7BuL,EAAgB/F,GAAcsI,KAClC,OAAQ/M,GACP,IAAK,IACJwK,EAAgB/F,GAAcuI,eAC9B,MAED,IAAK,IACJxC,EAAgB/F,GAAcwI,eAC9B,MAEE,IAAK,IACHzC,EAAgB/F,GAAcyI,cAC9B,MAEF,IAAK,IACH1C,EAAgB/F,GAAc0I,eAGpCZ,EAAa/B,cAAgBA,EAC7BpB,EAAQmD,GAiJea,CAAoBT,EAASzN,MAJvCyN,EAASzN,iBAYpB,eAAC3B,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdC,eAAe,WACfL,WAAW,SAJZ,UAMC,cAAC0O,EAAA,EAAD,CACC5O,UAAU,0BACV0I,QAAQ,YACRtI,QAnTqB,WACzBV,EAAMuO,gBACNrC,EAAQd,KA8SL,SAKExQ,EAAMc,UAAUQ,YAAYa,SAG9B,cAACmS,EAAA,EAAD,CACC5O,UAAU,wBACV0I,QAAQ,YACRtI,QAASqM,EAHV,SAKEnS,EAAMc,UAAUQ,YAAYc,oBAe7BmT,GAAgD,SAACnQ,GACtD,OACC,eAACK,EAAA,EAAD,CAAKC,UAAU,iBAAiBC,QAAQ,OAAOK,cAAc,SAASsF,KAAM,EAA5E,UACC,eAAC7F,EAAA,EAAD,CACCC,UAAU,wBACVC,QAAQ,OACRK,cAAc,MACdJ,WAAW,SAJZ,UAMER,EAAMyE,KACNzE,EAAMwO,SAGPxO,EAAMmG,a,wJChVKtG,I,OAAAA,YAAQ,KAAMuF,EAAdvF,EAhHyD,SAACG,GAAW,IAAD,IAClF,EAA8BmD,YAAwB,GAAtD,mBAAOI,EAAP,KAAgBC,EAAhB,KACA,EAAwBL,WAA+B,IAAvD,mBAAOiN,EAAP,KAAaC,EAAb,KACA,EAAwClN,WAA+B,IAAvE,mBAAOmN,EAAP,KAAqBC,EAArB,KAEApN,aAAgB,WACf,IAAMqN,EAAQ,iDAAG,yGAChBhN,GAAW,GADK,kBAIsBxC,EAAQyP,kBAJ9B,cAIT3M,EAJS,OAKfuM,EAAQvM,GALO,SAOoC9C,EAAQ0P,4BAC1D1Q,EAAM2Q,SAAS3O,IARD,QAOT4O,EAPS,UAWRC,EAA2B/M,EAAOgF,QAAO,SAACgI,GAAD,cAC9CF,QAD8C,IAC9CA,OAD8C,EAC9CA,EAAkBjI,MAAK,SAACoI,GAAD,OAAQD,EAAI9O,KAAO+O,EAAG/O,SAE9CuO,EAAgBM,IAdF,kDAiBf7Q,EAAMgF,cAAc+B,EAAmB,EAAD,KAjBvB,QAoBhBvD,GAAW,GApBK,0DAAH,qDAuBdgN,MACE,IAEHrN,aAAgB,WACfnD,EAAMsI,SAAN,6BACItI,EAAM2Q,UADV,IAECK,aAAcV,OAEb,CAACA,IAEJ,IA0BMW,EAAQ,OAAGb,QAAH,IAAGA,OAAH,EAAGA,EAAMhM,KAAI,SAAC0M,GAC3B,MAAO,CACN9O,GAAI8O,EAAI9O,GAAGiB,WACX4J,SAAUiE,EAAItC,UAIV0C,EAAS,UAAGlR,EAAM2Q,gBAAT,iBAAG,EAAgBK,oBAAnB,aAAG,EAA8B5M,KAAI,SAAC0M,GACpD,MAAO,CACN9O,GAAI8O,EAAI9O,GAAGiB,WACX4J,SAAUiE,EAAItC,UAIhB,OACC,eAACnO,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,SACdJ,WAAW,aACXF,UAAU,gCAJX,UAMC,eAACD,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,MAAMJ,WAAW,SAAnD,UACC,cAAC6N,EAAA,EAAD,CAAYrF,QAAQ,KAAK1I,UAAU,YAAYgO,WAAW,UAA1D,SACE1T,EAAMc,UAAUuB,aAAaC,KAAKC,aAAarC,QAzCxB,WAAoB,IAAD,EAC9C,OACC,mCACE,UAACkF,EAAM2Q,gBAAP,OAAC,EAAgBnF,eAUd,KATH,eAACnL,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdJ,WAAW,SACXF,UAAU,uBAJX,UAMC,cAAC,KAAD,IACC1F,EAAMc,UAAUuB,aAAaC,KAAKC,aAAaE,yBAiCjD8T,MAGD5N,EACA,cAACY,EAAA,EAAD,IAEA,cAAC9D,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASwQ,MAAO,CAAEC,SAAU,SAA9D,SACC,cAAC,GAAD,CACC/Q,UAAU,qBACVqB,KAAMsP,EACNpI,WAAW,KACXU,UAAU,WACVlB,MAAO6I,GAAa,GACpB5I,SAjEoB,SAACD,GACzB,IAAMiJ,EAAelB,EAAKtH,QAAO,SAACgI,GAAD,cAChCzI,QADgC,IAChCA,OADgC,EAChCA,EAAOM,MAAK,SAAC4I,GAAD,OAAgBA,IAAeT,EAAI9O,GAAGiB,iBAGnDsN,EAAgBe,eCoEHzR,I,OAAAA,YAAQ,KAAMuF,EAAdvF,EAhH2C,SAACG,GAAW,IAAD,IACpE,EAA8BmD,YAAwB,GAAtD,mBAAOI,EAAP,KAAgBC,EAAhB,KACA,EAA0BL,WAAwB,IAAlD,mBAAO2I,EAAP,KAAcC,EAAd,KACA,EAA0C5I,WAAwB,IAAlE,mBAAOqO,EAAP,KAAsBC,EAAtB,KAEAtO,aAAgB,WACf,IAAMmJ,EAAS,iDAAG,yGACjB9I,GAAW,GADM,kBAIcxC,EAAQyL,WAJtB,cAIV3I,EAJU,gBAMqB9C,EAAQ0Q,wBAC5C1R,EAAM2Q,SAAS1D,MAPA,OAMV0E,EANU,OAUVC,EAAoB9N,EAAOgF,QAAO,SAACiF,GAAD,cACvC4D,QADuC,IACvCA,OADuC,EACvCA,EAAWhJ,MAAK,SAACoI,GAAD,OAAQhD,EAAK/L,KAAO+O,EAAGc,aAGxC9F,EAASjI,GACT2N,EAAiBG,GAfD,kDAiBhB5R,EAAMgF,cAAc+B,EAAmB,EAAD,KAjBtB,QAoBjBvD,GAAW,GApBM,0DAAH,qDAuBf8I,MACE,IAEHnJ,aAAgB,WACfnD,EAAMsI,SAAN,6BACItI,EAAM2Q,UADV,IAECjF,cAAe8F,OAEd,CAACA,IAEJ,IA0BM1D,EAAS,OAAGhC,QAAH,IAAGA,OAAH,EAAGA,EAAO1H,KAAI,SAAC2J,GAC7B,MAAO,CACN/L,GAAI+L,EAAK/L,GAAGiB,WACZ4J,SAAUkB,EAAKlB,aAIXmB,EAAU,UAAGhO,EAAM2Q,gBAAT,iBAAG,EAAgBjF,qBAAnB,aAAG,EAA+BtH,KAAI,SAAC2J,GACtD,MAAO,CACN/L,GAAI+L,EAAK/L,GAAGiB,WACZ4J,SAAUkB,EAAKlB,aAIjB,OACC,eAACxM,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,SACdJ,WAAW,aACXF,UAAU,gCAJX,UAMC,eAACD,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,MAAMJ,WAAW,SAAnD,UACC,cAAC6N,EAAA,EAAD,CAAYrF,QAAQ,KAAK1I,UAAU,YAAYgO,WAAW,UAA1D,SACE1T,EAAMc,UAAUuB,aAAaC,KAAKL,cAAc/B,QAzCzB,WAAoB,IAAD,EAC9C,OACC,mCACE,UAACkF,EAAM2Q,gBAAP,OAAC,EAAgBnF,eAUd,KATH,eAACnL,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdJ,WAAW,SACXF,UAAU,uBAJX,UAMC,cAAC,KAAD,IACC1F,EAAMc,UAAUuB,aAAaC,KAAKL,cAAcQ,yBAiClD8T,MAGD5N,EACA,cAACY,EAAA,EAAD,IAEA,cAAC9D,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASwQ,MAAO,CAAEC,SAAU,SAA9D,SACC,cAAC,GAAD,CACC/Q,UAAU,qBACVqB,KAAMmM,EACNjF,WAAW,KACXU,UAAU,WACVlB,MAAO2F,GAAc,GACrB1F,SAjEqB,SAACD,GAC1B,IAAMiH,EAAgBxD,EAAMhD,QAAO,SAACiF,GAAD,cAClC1F,QADkC,IAClCA,OADkC,EAClCA,EAAOM,MAAK,SAAC4G,GAAD,OAAiBA,IAAgBxB,EAAK/L,GAAGiB,iBAGtDwO,EAAiBnC,eC/CNwC,I,OAA0C,SAAC9R,GAcvD,OACC,eAACK,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdJ,WAAW,aACXF,UAAU,mCAJX,UAMC,eAACD,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASJ,WAAW,aAAa0F,KAAM,EAAzE,UACC,cAACmI,EAAA,EAAD,CAAYrF,QAAQ,KAAK1I,UAAU,YAAYgO,WAAW,UAA1D,SACE1T,EAAMc,UAAUuB,aAAaC,KAAKI,SAASC,qBAG7C,eAAC8C,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASN,UAAU,OAArD,UACC,cAACD,EAAA,EAAD,UAAMzF,EAAMc,UAAUuB,aAAaC,KAAKI,SAASE,eACjD,cAAC6C,EAAA,EAAD,UAAMzF,EAAMc,UAAUuB,aAAaC,KAAKI,SAASG,0BAGlD,cAAC,GAAD,CACC4K,MAAOrI,EAAM2Q,SAASpD,SACtBjF,SAhCoB,SAACD,GACxB,IAAMtG,EAAW,gBAAQ/B,EAAM2Q,UAC/B5O,EAAKwL,SAAWlF,EAChBrI,EAAMsI,SAASvG,IA8BZzB,UAAU,mBAGX,eAAC4O,EAAA,EAAD,CACClG,QAAQ,YACR1I,UAAU,gCACVI,QAjCwB,WAC3B,IAAMyO,EAAU9E,GAAe+E,oBAAoB,EAAG,EAAG,GACnDrN,EAAW,gBAAQ/B,EAAM2Q,UAC/B5O,EAAKwL,SAAW4B,EAChBnP,EAAMsI,SAASvG,IA0Bb,UAKC,cAAC,KAAD,IACCnH,EAAMc,UAAUQ,YAAYQ,gBAAgBE,cAI/C,cAACyD,EAAA,EAAD,CAAKE,QAAQ,OAAOD,UAAU,SAAS4F,KAAM,SCqIjCrG,I,OAAAA,YAAQ,KAAMuF,EAAdvF,EAlL+C,SAAC,GAIxD,IAKF8L,EARJgF,EAGK,EAHLA,SACArI,EAEK,EAFLA,SACAtD,EACK,EADLA,cAEA,EAAkC7B,WAA2B,IAA7D,mBAAOyI,EAAP,KAAkBC,EAAlB,KACA,EAAwC1I,WAAyB,MAAjE,mBAAOgJ,EAAP,KAAqBC,EAArB,KACA,EAAiCjJ,WAAuB,MAAxD,mBAAO4O,EAAP,KAAoBC,EAApB,KAIM3F,EAAgBlJ,WACrB,kDAAM,uHAEgCnC,EAAQwL,aAAauF,GAFrD,OAEEnG,EAFF,OAIJC,EAAaD,GAJT,gDAMJ5G,EAAc+B,EAAmB,EAAD,KAN5B,2DASN,CAACgL,EAAa/M,IAGTiN,EAAkB9O,WACvB,kDAAM,oGACDwN,EAASvD,aAAeuD,EAASvD,eAAT,OAAyBjB,QAAzB,IAAyBA,OAAzB,EAAyBA,EAAciB,aAD9D,0CAGiCpM,EAAQwL,aAAamE,EAASvD,aAH/D,QAKU,QAFPxB,EAHH,cAKU,IAATA,OAAA,EAAAA,EAAWvG,QAAS,IACjB6M,EAActG,EAAUuG,MAC7B,SAAChH,GAAD,OAAOA,EAAE6D,aAAe2B,EAAStD,aAGlCjB,EAAgB8F,IAVd,gDAaHlN,EAAc+B,EAAmB,EAAD,KAb7B,2DAiBN,CAAC4J,EAAU3L,IAGZ7B,aAAgB,WACfkJ,MACE,CAACA,IAEJlJ,aAAgB,WACf8O,MACE,CAACA,IAEJ,IAAMvE,EAAqB,SAACrF,GAC3B,IAAMtG,EAAW,gBAAQ4O,GACzB5O,EAAKwJ,YAAclD,EACnBC,EAASvG,IAiBJkN,EAAsB,SAAC5G,GAC5B,IAAMtG,EAAW,gBAAQ4O,GACzB5O,EAAKqL,YAAL,OAAmB/E,QAAnB,IAAmBA,OAAnB,EAAmBA,EAAO+E,YAC1BrL,EAAKsL,UAAL,OAAiBhF,QAAjB,IAAiBA,OAAjB,EAAiBA,EAAO2G,WACxB1G,EAASvG,GACTqK,EAAgB/D,IAGXuF,EAA4B,SACjCrF,GAEAsF,aAAalC,GAEbA,EAAuBrG,YAAW,WACjC0M,EAAUzJ,EAAMC,OAAOH,SACrB,MAGJ,OACC,eAAChI,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,SACdJ,WAAW,aACXF,UAAU,kCACV4F,KAAM,EALP,UAOC,cAACmI,EAAA,EAAD,CAAYrF,QAAQ,KAAK1I,UAAU,YAAYgO,WAAW,UAA1D,SACE1T,EAAMc,UAAUuB,aAAaC,KAAKd,gBAAgBtB,QAGpD,eAACuF,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,MAAMsF,KAAM,EAAGL,MAAM,OAAvD,UACC,eAACxF,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,SACdsF,KAAM,EACN5F,UAAU,wBAJX,UAMC,cAAC,GAAD,CACCA,UAAU,qBACV4H,MAAOtN,EAAMc,UAAUuB,aAAaC,KAAKd,gBAAgBG,YACzD8L,MAAK,OAAEsI,QAAF,IAAEA,OAAF,EAAEA,EAAUpF,YACjBjD,SAAUoF,IAGX,cAAC,GAAD,CACCpN,UAAU,qBACV4H,MAAOtN,EAAMc,UAAUuB,aAAaC,KAAKd,gBAAgBC,UACzDgM,MAAK,OAAEsI,QAAF,IAAEA,OAAF,EAAEA,EAAUrF,UACjBhD,SA9DoB,SAACD,GACzB,IAAMtG,EAAW,gBAAQ4O,GACzB5O,EAAKuJ,UAAYjD,EACjBtG,EAAKwJ,YAAL,iBAAsBxJ,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAMuJ,UAA5B,mBAAyCvJ,QAAzC,IAAyCA,OAAzC,EAAyCA,EAAMsJ,SAC/C/C,EAASvG,MA6DN,cAAC0M,GAAA,EAAD,CACCC,eAAa,EACbpO,UAAU,8BACVqO,QAAS/C,GAAa,GACtBvD,MAAO8D,EACPyC,YAAa,SAACnM,GAAD,OACZ,cAACsH,EAAA,EAAD,6BACKtH,GADL,IAECyF,MAAOtN,EAAMc,UAAUQ,YAAYE,gBAAgBL,QACnDuM,SAAUsF,EACViB,OAAQ,kBAAMxC,SAGhByC,eAAgB,SAACC,GAAD,OAAsBA,EAAO3B,aAC7C9E,SAAU,SAACC,EAAOF,GAAR,OAAkB4G,EAAoB5G,MAG5C,cAAC,GAAD,CACE/H,UAAU,oBACV4H,MAAOtN,EAAMc,UAAUQ,YAAYE,gBAAgBK,WACnD4L,MAAK,OAAEsI,QAAF,IAAEA,OAAF,EAAEA,EAAUtD,UACjB/E,SAAUoF,OAKlB,eAACrN,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,SACdsF,KAAM,EACN5F,UAAU,wBAJX,UAMC,cAAC,GAAD,CACCA,UAAU,qBACV4H,MAAOtN,EAAMc,UAAUuB,aAAaC,KAAKd,gBAAgBI,MACzD6L,MAAK,OAAEsI,QAAF,IAAEA,OAAF,EAAEA,EAAU1D,KACjB3E,cAAUvF,EACV2E,UAAU,IAGX,cAAC,GAAD,CACCpH,UAAU,qBACV4H,MAAOtN,EAAMc,UAAUuB,aAAaC,KAAKd,gBAAgBE,SACzD+L,MAAK,OAAEsI,QAAF,IAAEA,OAAF,EAAEA,EAAUtF,QACjB/C,SAtGkB,SAACD,GACvB,IAAMtG,EAAW,gBAAQ4O,GACzB5O,EAAKsJ,QAAUhD,EACftG,EAAKwJ,YAAL,iBAAsBxJ,QAAtB,IAAsBA,OAAtB,EAAsBA,EAAMuJ,UAA5B,mBAAyCvJ,QAAzC,IAAyCA,OAAzC,EAAyCA,EAAMsJ,SAC/C/C,EAASvG,SAsGP,cAAC1B,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASN,UAAU,SAAS4F,KAAM,c,iBR1KnE8B,O,+BAAAA,I,iBAAAA,I,uBAAAA,I,sBAAAA,Q,KAcL,IShBKoK,GTgLUvS,eAAQ,KAAMuF,EAAdvF,EAhKmC,SAACG,GAClD,MAAsCmD,WACrC6E,GAAiBqK,SADlB,mBAAOC,EAAP,KAAoBC,EAApB,KAGA,EAAwBpP,WAAsBnD,EAAM2Q,UAApD,mBAAO5O,EAAP,KAAamK,EAAb,KAYMsG,EAAe,iDAAG,iHAEhBxR,EAAQyR,WAAW1Q,GAFH,OAItB/B,EAAMyS,WAAW1Q,GAJK,+CAMtB/B,EAAMgF,cAAc+B,EAAmB,EAAD,KANhB,OASvB/G,EAAMuO,gBATiB,yDAAH,qDAYfmE,EAAe,SAACrD,GACrBnD,EAAQmD,IAGT,OACC,cAACpB,GAAA,EAAD,CAAUC,GAAIlO,EAAMmO,OAAQC,eAAa,EAACxI,GAAI,CAAEC,MAAO,QAAvD,SACC,eAACxF,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASN,UAAU,yBAAyB4F,KAAM,EAApF,UACC,eAAC7F,EAAA,EAAD,CACCC,UAAU,sBACVC,QAAQ,OACRK,cAAc,MACdC,eAAe,gBACfL,WAAW,WALZ,UAOC,eAACtD,GAAA,EAAD,CACCmL,MAAOiK,EACPhK,SAtCmB,SAACC,EAAOF,GAC/BkK,EAAelK,IAsCX/H,UAAU,oBACVqS,kBAAmB,CAClBC,QAAQ,GALV,UAQC,cAACC,GAAA,EAAD,CACC3K,MACC,eAAC7H,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdN,UAAU,YACVE,WAAW,SAJZ,UAMC,cAAC,KAAD,CAAeF,UAAU,qBACxB1F,EAAMc,UAAUuB,aAAaC,KAAKC,aAAaC,YAGlDiL,MAAOL,GAAiB8K,aACxBxS,UAAU,QAEX,cAACuS,GAAA,EAAD,CACC3K,MACC,eAAC7H,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdN,UAAU,YACVE,WAAW,SAJZ,UAMC,cAAC,KAAD,CAAeF,UAAU,qBACxB1F,EAAMc,UAAUuB,aAAaC,KAAKL,cAAcO,YAGnDiL,MAAOL,GAAiB+K,MACxBzS,UAAU,QAEX,cAACuS,GAAA,EAAD,CACC3K,MACC,eAAC7H,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdN,UAAU,YACVE,WAAW,SAJZ,UAMC,cAAC,KAAD,CAASF,UAAU,kBAClB1F,EAAMc,UAAUuB,aAAaC,KAAKI,SAASF,YAG9CiL,MAAOL,GAAiB1K,SACxBgD,UAAU,QAEX,cAACuS,GAAA,EAAD,CACC3K,MACC,eAAC7H,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdN,UAAU,YACVE,WAAW,SAJZ,UAMC,cAAC,KAAD,CAAYF,UAAU,qBACrB1F,EAAMc,UAAUuB,aAAaC,KAAKd,gBAAgBgB,YAGrDiL,MAAOL,GAAiBqK,QACxB/R,UAAU,WAIZ,cAACmH,GAAA,EAAD,CAAY/G,QAASV,EAAMuO,cAA3B,SACC,cAAC,KAAD,SAID+D,IAAgBtK,GAAiB8K,cACjC,cAAC,GAAD,CAAyBnC,SAAU5O,EAAMuG,SAAUoK,IAGnDJ,IAAgBtK,GAAiB+K,OACjC,cAAC,GAAD,CAAkBpC,SAAU5O,EAAMuG,SAAUoK,IAG5CJ,IAAgBtK,GAAiB1K,UACjC,cAAC,GAAD,CAAaqT,SAAU5O,EAAMuG,SAAUoK,IAGvCJ,IAAgBtK,GAAiBqK,SACjC,cAAC,GAAD,CAAoB1B,SAAU5O,EAAMuG,SAAUoK,IAG/C,eAACrS,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdC,eAAe,WACfP,UAAU,UAJX,UAMC,cAAC4O,EAAA,EAAD,CACC5O,UAAU,0BACV0I,QAAQ,YACRtI,QApIqB,WACzBwL,EAAQlM,EAAM2Q,UAEd3Q,EAAMuO,iBA8HH,SAKE3T,EAAMc,UAAUuB,aAAaY,QAAQd,SAGvC,cAACmS,EAAA,EAAD,CACC5O,UAAU,wBACV0I,QAAQ,YACRtI,QAAS8R,EAHV,SAKE5X,EAAMc,UAAUuB,aAAaY,QAAQC,kBU2F7B+B,I,OAAAA,YAAQ,KAAMuF,EAAdvF,EApPqC,SAACG,GACpD,MAAwCmD,aAAxC,mBAAO6P,EAAP,KAAqBC,EAArB,KACA,EAAgD9P,YAAwB,GAAxE,mBAAO+P,EAAP,KAAyBC,EAAzB,KACA,EAAgDhQ,YAAwB,GAAxE,mBAAOiQ,EAAP,KAAyBC,EAAzB,KACA,EAAkDlQ,YAAwB,GAA1E,mBAAOmQ,EAAP,KAA0BC,EAA1B,KAEMC,EAAa,WAClBP,GAAgB,IAOXQ,EAA6B,SAClClL,EACAoB,GAEIA,EACH0J,GAAoB,GAEpBE,GAAqB,IAsBjBG,EAAqB,WAC1BP,GAAoB,IAGfQ,EAAgB,iDAAG,+FACxBR,GAAoB,GADI,kBAIjBnS,EAAQ4S,WAAW5T,EAAM2Q,SAAS3O,IAJjB,OAKvBhC,EAAM4T,WAAW5T,EAAM2Q,SAAS3O,IALT,gDAOvBhC,EAAMgF,cAAc+B,EAAmB,EAAD,KAPf,yDAAH,qDAWhB8M,EAAuB,iDAAG,qGAC/BN,GAAqB,GACrBF,GAAoB,GAFW,SAKxBS,EALwB,6BAM1B9T,EAAM2Q,UANoB,IAO7BnF,gBAAiBxL,EAAM2Q,SAASnF,iBAPH,SAUxBxK,EAAQyR,WAAWqB,GAVK,OAW9B9T,EAAMyS,WAAWqB,GAXa,gDAa9B9T,EAAMgF,cAAc+B,EAAmB,EAAD,KAbR,yDAAH,qDA+BzBgN,EAAuB,iBAU3B,OARK/T,EAAM2Q,SAASnF,iBACnBuI,GAA8B,aAG3Bf,IACHe,GAA8B,WAI9B,qCACC,eAACC,EAAA,EAAD,CAA2C1T,UAAWyT,EAAtD,UACC,cAACE,EAAA,EAAD,CAAWC,MAAM,OAAjB,SAAyBlU,EAAM2Q,SAASpF,cACxC,cAAC0I,EAAA,EAAD,CAAWC,MAAM,OAAjB,SAAyBlU,EAAM2Q,SAASvD,cACxC,cAAC6G,EAAA,EAAD,CAAWC,MAAM,OAAjB,SACC,cAAC7T,EAAA,EAAD,CAAKC,UAAU,sBAAf,SAAsCN,EAAM2Q,SAAS1D,SAEtD,cAACgH,EAAA,EAAD,CAAWC,MAAM,OAAjB,SAlFkB,WAClB,IAAMhM,EAAgBlI,EAAM2Q,SAASnF,eAAiB,UAAY,WACpE,OACC,cAACkE,GAAA,EAAD,CACCpP,UAAU,gBACVqP,QACC,cAACwE,GAAA,EAAD,CACCnS,GAAIhC,EAAM2Q,SAAS3O,GACnB2H,QAAS3J,EAAM2Q,SAASnF,eACxBlD,SAAUmL,IAGZvL,MAAOA,EACPtC,GAAI,CAAEC,MAAO,WAqEYuO,KACzB,cAACH,EAAA,EAAD,CAAWC,MAAM,QAAjB,SA/BD,eAAC7T,EAAA,EAAD,WACC,cAACoH,GAAA,EAAD,CAAY/G,QAAS8S,EAArB,SACC,cAAC,KAAD,MAGD,cAAC/L,GAAA,EAAD,CAAY/G,QAASgT,EAArB,SACC,cAAC,KAAD,aAkBa1T,EAAM2Q,SAASpF,aAS9B,cAACyI,EAAA,EAAD,UACC,cAACC,EAAA,EAAD,CAAWrO,GAAI,CAAEyO,QAAS,GAAKC,QAAS,EAAxC,SACC,cAAC,GAAD,CACCnG,OAAQ6E,EACRzE,cAxGe,WACnB0E,GAAgB,IAwGZtC,SAAU3Q,EAAM2Q,SAChB8B,WAAYzS,EAAMyS,iBAKrB,eAAC8B,GAAA,EAAD,CACC9Q,KAAMyP,EACNsB,QAAS,kBAAMrB,GAAoB,IACnC,kBAAgB,qBAChB,mBAAiB,2BACjB7S,UAAU,SALX,UAOC,cAACmU,GAAA,EAAD,CAAanU,UAAU,eAAvB,SAAuC1F,EAAM6D,QAAQC,kBAErD,cAACgW,GAAA,EAAD,UACC,eAACC,GAAA,EAAD,CACCrU,UAAU,yBACVC,QAAQ,OACRK,cAAc,SACdJ,WAAW,SAJZ,UAMC,cAACH,EAAA,EAAD,UAAMzF,EAAM6D,QAAQK,oBACpB,4BAAIkB,EAAM2Q,SAASpF,cACnB,cAAClL,EAAA,EAAD,UAAMzF,EAAM6D,QAAQO,wBAItB,eAAC4V,GAAA,EAAD,CAAetU,UAAU,iBAAzB,UACC,cAAC4O,EAAA,EAAD,CACC5O,UAAU,0BACVI,QAAS,kBAAMyS,GAAoB,IAFpC,SAIEvY,EAAM6D,QAAQZ,QAAQqB,eAGxB,cAACgQ,EAAA,EAAD,CACC5O,UAAU,8BACVI,QAASiT,EACTkB,WAAS,EAHV,SAKEja,EAAM6D,QAAQZ,QAAQwB,sBAK1B,eAACkV,GAAA,EAAD,CACC9Q,KAAM2P,EACNoB,QAAS,kBAAMnB,GAAoB,IACnC,kBAAgB,qBAChB,mBAAiB,2BACjB/S,UAAU,SALX,UAOC,cAACmU,GAAA,EAAD,CAAanU,UAAU,eAAvB,SAAuC1F,EAAM6D,QAAQE,gBAErD,cAAC+V,GAAA,EAAD,UACC,eAACC,GAAA,EAAD,CACCrU,UAAU,yBACVC,QAAQ,OACRK,cAAc,SACdJ,WAAW,SAJZ,UAMC,cAACH,EAAA,EAAD,UAAMzF,EAAM6D,QAAQG,oBACpB,4BAAIoB,EAAM2Q,SAASpF,cACnB,cAAClL,EAAA,EAAD,UAAMzF,EAAM6D,QAAQO,wBAItB,eAAC4V,GAAA,EAAD,CAAetU,UAAU,iBAAzB,UACC,cAAC4O,EAAA,EAAD,CACC5O,UAAU,0BACVI,QAAS,kBAAM2S,GAAoB,IAFpC,SAIEzY,EAAM6D,QAAQZ,QAAQqB,eAGxB,cAACgQ,EAAA,EAAD,CACC5O,UAAU,8BACVI,QAASmT,EACTgB,WAAS,EAHV,SAKEja,EAAM6D,QAAQZ,QAAQuB,sBAK1B,eAACmV,GAAA,EAAD,CACC9Q,KAAM6P,EACNkB,QAAS,kBAAMjB,GAAqB,IACpC,kBAAgB,qBAChB,mBAAiB,2BACjBjT,UAAU,SALX,UAOC,cAACmU,GAAA,EAAD,CAAanU,UAAU,eAAvB,SAAuC1F,EAAM6D,QAAQM,iBAErD,cAAC2V,GAAA,EAAD,UACC,eAACC,GAAA,EAAD,CACCrU,UAAU,yBACVC,QAAQ,OACRK,cAAc,SACdJ,WAAW,SAJZ,UAMC,cAACH,EAAA,EAAD,UAAMzF,EAAM6D,QAAQI,qBACpB,4BAAImB,EAAM2Q,SAASpF,cACnB,cAAClL,EAAA,EAAD,UAAMzF,EAAM6D,QAAQO,wBAItB,eAAC4V,GAAA,EAAD,CAAetU,UAAU,iBAAzB,UACC,cAAC4O,EAAA,EAAD,CACC5O,UAAU,0BACVI,QAAS,kBAAM6S,GAAqB,IAFrC,SAIE3Y,EAAM6D,QAAQZ,QAAQqB,eAGxB,cAACgQ,EAAA,EAAD,CACC5O,UAAU,8BACVI,QAASmT,EACTgB,WAAS,EAHV,SAKEja,EAAM6D,QAAQZ,QAAQsB,8BC6HdU,eAAQ,KAAMuF,EAAdvF,EA5W+B,SAACG,GAC9C,IAeI8U,EAfJ,EAAkC3R,WAAwB,IAA1D,mBAAO4R,EAAP,KAAkBC,EAAlB,KACA,EAA8B7R,WAAsC,OAApE,mBAAO8R,EAAP,KAAgBC,EAAhB,KACA,EAA8B/R,WAAuB,eAArD,mBAAOgS,EAAP,KAAgBC,EAAhB,KACA,EAAsCjS,WAA4C,MAAlF,mBAAoBkS,GAApB,WACA,EAA0ClS,YAAwB,GAAlE,mBAAOmS,EAAP,KAAsBC,EAAtB,KACA,EAA8BpS,YAAwB,GAAtD,mBAAOI,EAAP,KAAgBC,EAAhB,KACA,EAAoCL,WAAuB,IAA3D,mBAAOb,EAAP,KAAmBkT,EAAnB,KACA,EAAgDrS,WAAuB,IAAvE,mBAAOsS,EAAP,KAAyBC,GAAzB,KACA,GAAwCvS,WAAuB,IAA/D,qBAAOwS,GAAP,MAAqBC,GAArB,MACA,GAAgDzS,YAAwB,GAAxE,qBAAO2E,GAAP,MAAyB+N,GAAzB,MACA,GAAsC1S,WAAuB,GAA7D,qBAAO2S,GAAP,MAAoBC,GAApB,MACA,GAAoC5S,WAAuB,GAA3D,qBAAmB6S,IAAnB,aAEA,GAAgC7S,WAAuB,GAAvD,qBAAO8S,GAAP,MAAiBC,GAAjB,MAOMC,IAFUC,cAEEjT,cAAA,gCAAkB,6GACnCK,GAAW,GACXuS,GAAe,GAFoB,SAK5BM,EAA6B,CAClCvN,OAAQxG,EACR6S,QAASA,EACTmB,SAAUrB,EACVsB,UAAWZ,GACXxT,SAdkC,IAID,SAaInB,EAAQwV,aAAaH,GAbzB,OAa5BvS,EAb4B,OAauC,GAEnE2S,EAf4B,OAeF3S,QAfE,IAeFA,GAfE,UAeFA,EAAQ4S,mBAfN,iBAeF,EAAqBvE,MACpD,SAACwE,GAAD,MAAoB,eAAZA,EAAGtP,eAhBsB,aAeF,EAE7BgB,MAECvE,GACHkR,EAAalR,EAAO8S,OAGjBH,GACHb,GAAgBa,GAChBZ,IAAoB,IAEpBA,IAAoB,GA3Ba,kDA8BlC7V,EAAMgF,cAAc+B,EAAmB,EAAD,KA9BJ,QAiCnCvD,GAAW,GAjCwB,0DAkCjC,CAAClB,EAAY6S,EAASF,KAEzB9R,aAAgB,WACfgT,OACE,CAACA,KAEJ,IAAMU,GAAkB,iDAAG,WAAOC,GAAP,iGACtBA,EADsB,gBAEzBf,GAAeD,GAAc,GAC7BD,IAAoB,GAHK,0BAKnBkB,EAA6BhM,KAAKiM,KAAKjC,EAAU1P,OAjDpB,IAkDnC2Q,GAAce,GACgBlB,GAA3BC,GAAY,GAAKG,MAMhBH,GAAc,EAAIiB,GAbG,iBAcxBhB,GAAeD,GAAY,GAC3B7O,QAAQC,IAAI,OAfY,+BAiBxB1D,GAAW,GACXkS,GAAoBC,IAlBI,UAqBjBU,EAA6B,CAClCvN,OAAQxG,EACR6S,QAASA,EACTmB,SAAUrB,EACVsB,UAAWZ,IAzBW,UA4Be3U,EAAQwV,aAAaH,GA5BpC,QA4BjBvS,EA5BiB,OA4BkD,IACnE2S,EA7BiB,OA6BS3S,QA7BT,IA6BSA,GA7BT,UA6BSA,EAAQ4S,mBA7BjB,aA6BS,EAAqBvE,MACpD,SAACwE,GAAD,MAAoB,eAAZA,EAAGtP,QACVgB,QAGK4O,EAA4BlC,EAAUmC,OAAOpT,EAAO8S,OAC1DhB,GAAgBa,GAChBzB,EAAaiC,GACblB,GAAeD,GAAc,GAC7BD,IAAoB,IAGjB/R,EAAO8S,MAAMvR,OAAS,IAClB8R,EAA8BpC,EAAUmC,OAAOpT,EAAO8S,OAC5D5B,EAAamC,GACbpB,GAAeD,GAAY,GAC3BI,GAAYJ,GAAY,GACxB7O,QAAQC,IAAI,kCAAoC4O,KA9C3B,mDAkDvB9V,EAAMgF,cAAc+B,EAAmB,EAAD,KAlDf,QAqDxBvD,GAAW,GArDa,2DAAH,sDA0DlBiK,GAAW,iDAAG,uGACnBjK,GAAW,GACX+R,GAAiB,GAFE,SAKZc,EAA6B,CAClCvN,OAAQxG,EACR6S,QAASA,EACTmB,SAAUrB,EACVsB,UAAWd,GATM,SAYoBzU,EAAQwV,aAAaH,GAZzC,QAYZvS,EAZY,OAYuD,KAGxEkR,EAAalR,EAAO8S,OAfH,kDAkBlB5W,EAAMgF,cAAc+B,EAAmB,EAAD,KAlBpB,QAqBnBvD,GAAW,GArBQ,0DAAH,qDAwBXiP,GAAa,SAAC2E,GACnB,IAAMC,EAAyBtC,EAAUuC,QACnCC,EAA6BF,EAAcG,WAAU,SAACC,GAAD,OAAOA,EAAEzV,KAAOoV,EAAYpV,MAEvFqV,EAAcE,GAAsBH,EAEpCpC,EAAaqC,GAEbrX,EAAM6E,SAAS,CACdE,KAAM,OACNJ,KAAM/J,EAAM0E,OAAOG,mBAIfmU,GAAa,SAAC/R,GACnB,IAAM6V,EAA6B3C,EAAUyC,WAAU,SAACC,GAAD,OAAOA,EAAEzV,KAAOH,KAEjEwV,EAAyBtC,EAAUuC,QACzCD,EAAcM,OAAOD,EAAoB,GAEzC1C,EAAaqC,GAEbrX,EAAM6E,SAAS,CACdE,KAAM,OACNJ,KAAM/J,EAAM0E,OAAOK,kBAGpB2F,YAAW,WACVtF,EAAMkF,gBACJ,MA+CE0S,GAAoB,SACzBjT,EACAkT,EACAC,EACA5D,GAEA,IAAM6D,EACLF,IAAU1C,EAAU,0BAA4B,iBAEjD,OACC,cAAClB,EAAA,EAAD,CACCvT,QAAS,kBAtDcsX,EAsDSH,EAtDaI,EAsDNH,EArDzCpC,GAAoB,IACpBE,GAAgB,SAEZT,GAAWA,IAAY6C,EACrB/C,EAEkB,QAAZA,EACVC,EAAW,QACW,SAAZD,IACVC,EAAW,MACXE,EAAW,MACXC,EAAe,OANfH,EAAW,QASZA,EAAW,OACXE,EAAW4C,GACX3C,EAAe4C,KAjBQ,IAACD,EAAsBC,GAuD7C3X,UAAU,wBAFX,SAIC,eAACD,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,MAAMJ,WAAW,SAASK,eAAgBqT,EAA5E,UACC,cAAC7F,EAAA,EAAD,CAAYrF,QAAQ,KAAKsF,WAAW,UAApC,SACE3J,IAEF,cAAC,IAAD,CAAUrE,UAAWyX,UAMzB,OACC,eAAC1X,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASsF,KAAM,EAAG5F,UAAU,uBAA9D,UACC,eAACD,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,MAAMC,eAAe,gBAAgBqF,KAAM,EAA7E,UACC,eAACgJ,EAAA,EAAD,CACClG,QAAQ,YACRtI,QA3CsB,WACzB6U,GAAiB,IA2CdjV,UAAU,uCAHX,UAKC,cAAC,IAAD,CAAeA,UAAU,sBACxB1F,EAAMc,UAAUC,WAElB,cAACoO,EAAA,EAAD,CACCzJ,UAAU,eACV0I,QAAQ,WACRd,MAAOtN,EAAMc,UAAUE,OACvBuO,KAAK,QACLpF,KAAK,SACLuD,SAAU,SAACC,GAAD,OAnDcwJ,EAmDgBxJ,EAAMC,OAAOH,MAlDxDwF,aAAaiH,QAEbA,EAAgBxP,YAAW,WAC1BoQ,GAAoB,IACpBE,GAAgB,IAChBJ,EAAczD,KACZ,MAPuB,IAACA,QAuD1B,eAAC1R,EAAA,EAAD,CAAKuF,GAAI,CAAEC,MAAO,QAAlB,UACA,cAACqS,GAAD,CACEnQ,WArEuB,WAC1B8O,IAAmB,IAqEhBjP,WAlEuB,WAC1BiP,IAAmB,IAkEhB/O,iBAAkBA,GAClBH,iBAAkC,IAAhBmO,GAClBjO,SAAUiO,GAAc,IAErB,cAACqC,EAAA,EAAD,CAAgB7X,UAAU,aAA1B,SACH,eAAC8X,EAAA,EAAD,CAAOjO,KAAK,QAAQkO,cAAY,EAAhC,UACC,cAACC,EAAA,EAAD,UACC,eAACtE,EAAA,EAAD,WACE4D,GACAhd,EAAMc,UAAUG,aAAaC,KAC7B,cACA,SACA,QAED,cAACmY,EAAA,EAAD,CAAWC,MAAM,OAAO5T,UAAU,wBAAlC,SACC,cAAC+N,EAAA,EAAD,CACCrF,QAAQ,KACRpD,GAAI,CAAEC,MAAO,KACbyI,WAAW,UAHZ,SAKE1T,EAAMc,UAAUG,aAAaE,YAG/B6b,GACAhd,EAAMc,UAAUG,aAAaV,MAC7B,oBACA,SACA,QAED,cAAC8Y,EAAA,EAAD,CAAWC,MAAM,OAAO5T,UAAU,wBAAlC,SACC,cAAC+N,EAAA,EAAD,CACCrF,QAAQ,KACRpD,GAAI,CAAEC,MAAO,KACbyI,WAAW,UAHZ,SAKE1T,EAAMc,UAAUG,aAAaG,WAGjC,cAACiY,EAAA,EAAD,CAAWC,MAAM,QAAQ5T,UAAU,wBAAnC,SACE,cAAC+N,EAAA,EAAD,CACCrF,QAAQ,KACRpD,GAAI,CAAEC,MAAO,KACbyI,WAAW,UAHZ,SAKE1T,EAAMc,UAAUG,aAAaI,iBAMlC,cAACsc,EAAA,EAAD,UACEhV,EACA,cAACyQ,EAAA,EAAD,UACC,cAACC,EAAA,EAAD,CAAWrO,GAAI,CAAEyO,QAAS,GAAKC,QAAS,EAAxC,SACC,cAACjU,EAAA,EAAD,CAAKE,QAAQ,OAAOD,UAAU,8BAA9B,SACC,cAAC6D,EAAA,EAAD,UAKH,qCACC,cAAC6P,EAAA,EAAD,UACC,cAACC,EAAA,EAAD,CAAWK,QAAS,EAAGhU,UAAU,wBAAjC,SACC,cAAC,GAAD,CACC6N,OAAQmH,EACR7H,YAAaA,GACbc,cAAe,kBAAMgH,GAAiB,UAN1C,OAUER,QAVF,IAUEA,OAVF,EAUEA,EACEuC,MAlU0B,GAmU3BxB,GAnU2B,GAoU3BA,GApU2B,IAuU3B1R,KAAI,SAACrC,GAAD,OACJ,cAAC,GAAD,CAEC4O,SAAU5O,EACV0Q,WAAYA,GACZmB,WAAYA,IAHP7R,EAAKC,0BC1VPwW,GApB8D,WAC5E,OACC,cAACnY,EAAA,EAAD,CAAKC,UAAU,qBAAf,SACI,eAACmY,EAAA,EAAD,CAAWC,UAAU,EAAOC,gBAAc,EAA1C,UACF,eAACtY,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASN,UAAU,2BAArD,UACC,cAAC+N,EAAA,EAAD,CAAYrF,QAAQ,KAAK4P,UAAU,MAAMtK,WAAW,UAApD,SACE1T,EAAMc,UAAUZ,QAGlB,cAACuT,EAAA,EAAD,CAAYrF,QAAQ,YAAY4P,UAAU,MAAMtK,WAAW,UAA3D,SACE1T,EAAMc,UAAUD,cAInB,cAAC,GAAD,U,8BCcW+L,GArB+B,SAACxH,GAC9C,OACC,eAACK,EAAA,EAAD,CACCC,UAAU,qBACVC,QAAQ,OACRK,cAAc,MACdJ,WAAW,SACXK,eAAe,WACfqF,KAAM,EANP,UAQC,cAACuB,GAAA,EAAD,CAAYC,SAAU1H,EAAM2H,iBAAkBjH,QAASV,EAAM4H,WAA7D,SACC,cAAC,KAAD,MAEA5H,EAAM6H,SAXR,MAWqB7H,EAAM6Y,cAC1B,cAACpR,GAAA,EAAD,CAAYC,SAAU1H,EAAM8H,iBAAkBpH,QAASV,EAAM+H,WAA7D,SACC,cAAC,KAAD,UC/BE+Q,I,OAAa,iDAAG,WAAOC,GAAP,+FAEM,mDACHC,KAAKD,GAHR,0CAGwB,GAHxB,uBAKSE,MAAM,mCAAD,OAAoCF,IALlD,cAKRG,EALQ,gBAMKA,EAASC,OANd,cAMRxX,EANQ,yBAOS,IAAhBA,EAAK3F,QAPE,4DASP,GATO,0DAAH,uDAaJ8c,MCiBTM,GAA6B,CAClCpX,GAAI,KACFoL,YAAa,GACd4B,WAAY,GACXqK,YAAa,GACbN,OAAQ,IAgNIlZ,eAAQ,KAAMuF,EAAdvF,EA7MuC,SAACG,GACtD,IAII2L,EAJJ,EAAwCxI,WAA+B,IAAvE,mBAAOmW,EAAP,KAAqBC,EAArB,KACA,EAA8BpW,aAA9B,mBAAOX,EAAP,KAAgBgX,EAAhB,KACA,EAAwCrW,WAA6B,MAArE,mBAAOgJ,EAAP,KAAqBC,EAArB,KAIAjJ,aAAgB,WACfkJ,IACAmN,EAAWJ,MACT,IAEH,IAAM/M,EAAa,iDAAG,WAAOpK,GAAP,0GAE4BjB,EAAQyY,WAAWxX,GAF/C,OAEdyX,EAFc,OAGpBH,EAAgBG,GAHI,gDAKpB1Z,EAAMgF,cAAc+B,EAAmB,EAAD,KALlB,yDAAH,sDAuBbgG,EAAiB,iDAAG,8GAEpBC,GAAqB,EACrB2M,EAAY,+DACgB,MAA5BxN,EAAaiB,cAChBuM,GAAa,aACb3M,GAAqB,GAES,MAA3Bb,EAAa6C,aAChB2K,GAAa,4BACb3M,GAAqB,GAEK,MAAvBb,EAAa4M,OAZO,iBAavBY,GAAa,YACb3M,GAAqB,EAdE,yCAgBZ8L,GAAc3M,EAAa4M,QAhBf,mCAiBhBa,EAjBgB,UAiBFzN,EAAa4M,OAjBX,4BAkBtBY,EAAY3M,EAAqB4M,EAAUA,EAAWD,EACtD3M,GAAqB,EAnBC,YAuBpBA,EAvBoB,kCAwBjBhM,EAAQ6Y,WAAW1N,GAxBF,QAyBvBnM,EAAM8Z,kBACN9Z,EAAM6E,SAAS,CAACE,KAAM,OAAQJ,KAAM,WAAawH,EAAaiB,YAAc,4BA1BrD,wBA4BvBpN,EAAM6E,SAAS,CAACE,KAAM,UAAWJ,KAAMgV,IA5BhB,0DA+BxB3Z,EAAMgF,cAAc,KAAMkU,SAASvX,KAAK,IA/BhB,0DAAH,qDA+CjBiM,EAA4B,SACjCrF,GAEAsF,aAAalC,GAEbA,EAAuBrG,YAAW,WACjC+G,EAAc9D,EAAMC,OAAOH,SACzB,MAGJ,OACC,cAAC4F,GAAA,EAAD,CAAUC,GAAIlO,EAAMmO,OAAQC,eAAa,EAACxI,GAAI,CAAEC,MAAO,QAAvD,SACC,eAACxF,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASN,UAAU,uBAAuB4F,KAAM,EAAlF,UACC,eAAC7F,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdC,eAAe,gBACfL,WAAW,SAJZ,UAOC,cAAC6N,EAAA,EAAD,CAAYrF,QAAQ,KAAKsF,WAAW,UAApC,SACE1T,EAAMmD,cAAcM,eAAeC,mBAGrC,cAACmJ,GAAA,EAAD,CAAY/G,QAASV,EAAMuO,cAA3B,SACC,cAAC,KAAD,SAIF,cAAClO,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,MAAMN,UAAU,qBAAqB4F,KAAM,EAA7E,SACC,eAAC,GAAD,CACCsI,MAAM,4DACN/J,KAAM,cAAC,KAAD,CAAgBnE,UAAU,yBAFjC,UAIC,cAACmO,GAAA,EAAD,CACAC,eAAa,EACbpO,UAAU,iCACVqO,QAAS2K,GAAgB,GACzBjR,MAAO8D,EACPyC,YAAa,SAACnM,GAAD,OACZ,cAACsH,EAAA,EAAD,6BACKtH,GADL,IAECyF,MAAOtN,EAAMmD,cAAcM,eAAeE,eAAeL,YACzDoK,SAAUsF,EACViB,OAAQ,kBAAMxC,SAGhByC,eAAgB,SAACC,GAAD,OAA0BA,EAAO3B,aACjD9E,SAAU,SAACC,EAAOF,GAAR,OAxGgB,SAACA,GAC/B,IAAM0R,EAAwB,gBAAQvX,GACtCuX,EAAW3M,YAAX,OAAyB/E,QAAzB,IAAyBA,OAAzB,EAAyBA,EAAO+E,YAChC2M,EAAW/K,WAAX,OAAwB3G,QAAxB,IAAwBA,OAAxB,EAAwBA,EAAO2G,WAC/B+K,EAAWV,YAAX,OAAyBhR,QAAzB,IAAyBA,OAAzB,EAAyBA,EAAOgR,YAChCU,EAAWhB,OAAX,OAAoB1Q,QAApB,IAAoBA,OAApB,EAAoBA,EAAO0Q,OAC3B3M,EAAgB2N,GAkGgBC,CAAuB3R,MAEnD,cAAC,GAAD,CACC/H,UAAU,oBACV4H,MAAOtN,EAAMmD,cAAcM,eAAeE,eAAeJ,OACzDkK,MAAK,OAAE8D,QAAF,IAAEA,OAAF,EAAEA,EAAc4M,OACrBzQ,SA5DiB,SAACD,GACvB,IAAM0R,EAAwB,gBAAQ5N,GACtC4N,EAAWhB,OAAS1Q,EACpB+D,EAAgB2N,MA4DZ,cAAC,GAAD,CACCzZ,UAAU,oBACV4H,MAAOtN,EAAMmD,cAAcM,eAAeE,eAAe9B,WACzD4L,MAAK,OAAE8D,QAAF,IAAEA,OAAF,EAAEA,EAAc6C,WACrB1G,SAzEqB,SAACD,YA8EzB,eAAChI,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdC,eAAe,WACfL,WAAW,SAJZ,UAMC,cAAC0O,EAAA,EAAD,CACC5O,UAAU,0BACV0I,QAAQ,YACRtI,QAxIqB,WACzB8Y,EAAWJ,IACXpZ,EAAMuO,iBAmIH,SAKE3T,EAAMmD,cAAcM,eAAetB,SAGrC,cAACmS,EAAA,EAAD,CACC5O,UAAU,wBACV0I,QAAQ,YACRtI,QAASqM,EAHV,SAKEnS,EAAMmD,cAAcM,eAAerB,oBA6CpCid,GAAsD,SAACja,GAC5D,OACC,eAACK,EAAA,EAAD,CAAKC,UAAU,oBAAoBC,QAAQ,OAAOK,cAAc,SAASsF,KAAM,EAA/E,UACC,cAAC7F,EAAA,EAAD,CACCC,UAAU,2BACVC,QAAQ,OACRK,cAAc,MACdJ,WAAW,WAKXR,EAAMmG,aCzFKtG,I,cAAAA,YAAQ,KAAMuF,EAAdvF,EA1J6C,SAAC,GAItD,IAHN8Q,EAGK,EAHLA,SACArI,EAEK,EAFLA,SACAtD,EACK,EADLA,cAEA,EAAkC7B,WAA+B,IAAjE,mBACA,GADA,UACwCA,WAA6B,OAArE,mBACA,GADA,UACiCA,WAAuB,OAAxD,mBAAO4O,EAAP,KAEA,GAFA,KAEwC5O,WAA+B,KAAvE,mBAAqB+W,GAArB,WACA,EAA8C/W,WAA6B,MAA3E,mBACA,GADA,UACuCA,WAAuB,OAA9D,mBAAOgX,EAAP,KAkBMC,GAlBN,KAkByBjX,WACxB,kDAAM,uHAEuCnC,EAAQyY,WAAW1H,GAF1D,OAEEsI,EAFF,OAIJH,EAAgBG,GAJZ,gDAMJrV,EAAc+B,EAAmB,EAAD,KAN5B,2DASN,CAACoT,EAAgBnV,KAOlB7B,aAAgB,WACfiX,MACE,CAACA,IAqDJ,OACC,eAAC/Z,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,SACdJ,WAAW,aACXF,UAAU,qCACV4F,KAAM,EALP,UAOC,cAACmI,EAAA,EAAD,CAAYrF,QAAQ,KAAK1I,UAAU,YAAYgO,WAAW,UAA1D,SACE1T,EAAMmD,cAAcS,gBAAgBtB,KAAKqB,eAAezD,QAG1D,eAACuF,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,MAAMsF,KAAM,EAAGL,MAAM,OAAvD,UACC,eAACxF,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,SACdsF,KAAM,EACN5F,UAAU,2BAJX,UAOM,cAAC,GAAD,CACJA,UAAU,wBACVoH,UAAQ,EACRQ,MAAOtN,EAAMmD,cAAcS,gBAAgBtB,KAAKqB,eAAeL,YAC/DmK,MAAK,OAAEsI,QAAF,IAAEA,OAAF,EAAEA,EAAUvD,YACjB9E,SAjEuB,SAACD,GAC5B,IAAM7F,EAAqB,gBAAQmO,GACnCnO,EAAQ4K,YAAc/E,EACtBC,EAAS9F,MAgEP,cAAC,GAAD,CACElC,UAAU,wBACV4H,MAAOtN,EAAMmD,cAAcS,gBAAgBtB,KAAKqB,eAAeH,YAC/DiK,MAAK,OAAEsI,QAAF,IAAEA,OAAF,EAAEA,EAAU0I,YACjB/Q,SArDsB,SAACD,GAC3B,IAAM7F,EAAqB,gBAAQmO,GACnCnO,EAAQ6W,YAAchR,EACtBC,EAAS9F,MAoDD,cAAC,GAAD,CACJlC,UAAU,wBACVoH,UAAQ,EACRQ,MAAOtN,EAAMmD,cAAcS,gBAAgBtB,KAAKqB,eAAe9B,WAC/D4L,MAAK,OAAEsI,QAAF,IAAEA,OAAF,EAAEA,EAAU3B,WACjB1G,SAxEsB,SAACD,GAC3B,IAAM7F,EAAqB,gBAAQmO,GACnCnO,EAAQwM,WAAa3G,EACrBC,EAAS9F,MAuED,cAAC,GAAD,CACJlC,UAAU,wBACV4H,MAAOtN,EAAMmD,cAAcS,gBAAgBtB,KAAKqB,eAAeJ,OAC/DkK,MAAK,OAAEsI,QAAF,IAAEA,OAAF,EAAEA,EAAUoI,OACjBzQ,SAxEkB,SAACD,GACvB,IAAM7F,EAAqB,gBAAQmO,GACnCnO,EAAQuW,OAAS1Q,EACjBC,EAAS9F,SAwEP,cAACnC,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASN,UAAU,SAAS4F,KAAM,c,iBPtJnEkM,O,+BAAAA,I,iBAAAA,I,uBAAAA,I,sBAAAA,Q,KAgBL,IA2GevS,eAAQ,KAAMuF,EAAdvF,EA3GyC,SAACG,GACxD,MAAsCmD,WACrCiP,GAAoBC,SADrB,mBAAOC,EAAP,KAAoBC,EAApB,KAGA,EAA8BpP,WAA6BnD,EAAM2Q,UAAjE,mBAAOnO,EAAP,KAAgBgX,EAAhB,KAYMhH,EAAe,iDAAG,iHAEXsG,GAActW,EAAQuW,QAFX,iCAGrB/Y,EAAMgF,cAAN,UAAuBxC,EAAQuW,OAA/B,4BAHqB,uCAKf/X,EAAQsZ,cAAc9X,GALP,OAOrBxC,EAAMsa,cAAc9X,GAPC,0DAUtBxC,EAAMgF,cAAc+B,EAAmB,EAAD,KAVhB,QAavB/G,EAAMuO,gBAbiB,0DAAH,qDAoBrB,OACC,cAACN,GAAA,EAAD,CAAUC,GAAIlO,EAAMmO,OAAQC,eAAa,EAACxI,GAAI,CAAEC,MAAO,OAAvD,SACC,eAACxF,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASN,UAAU,4BAA4B4F,KAAM,EAAvF,UACC,eAAC7F,EAAA,EAAD,CACCC,UAAU,yBACVC,QAAQ,OACRK,cAAc,MACdC,eAAe,gBACfL,WAAW,WALZ,UAOC,cAACtD,GAAA,EAAD,CACCmL,MAAOiK,EACPhK,SA1CmB,SAACC,EAAOF,GAC/BkK,EAAelK,IA0CX/H,UAAU,uBACVqS,kBAAmB,CAClBC,QAAQ,GALV,SAQC,cAACC,GAAA,EAAD,CACC3K,MACC,eAAC7H,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdN,UAAU,YACVE,WAAW,SAJZ,UAMC,cAAC,KAAD,CAAeF,UAAU,qBACxB1F,EAAMmD,cAAcS,gBAAgBtB,KAAKqB,eAAenB,YAG3DiL,MAAO+J,GAAoBC,QAC3B/R,UAAU,UAIZ,cAACmH,GAAA,EAAD,CAAY/G,QAASV,EAAMuO,cAA3B,SACC,cAAC,KAAD,SAID+D,IAAgBF,GAAoBC,SACpC,cAAC,GAAD,CAAmB1B,SAAUnO,EAAS8F,SA7CrB,SAACiS,GACrBf,EAAWe,MA+CT,eAACla,EAAA,EAAD,CACCE,QAAQ,OACRK,cAAc,MACdC,eAAe,WACfP,UAAU,UAJX,UAMC,cAAC4O,EAAA,EAAD,CACC5O,UAAU,0BACV0I,QAAQ,YACRtI,QA/EqB,WACzB8Y,EAAWxZ,EAAM2Q,UAEjB3Q,EAAMuO,iBAyEH,SAKE3T,EAAMmD,cAAcS,gBAAgBX,QAAQd,SAG9C,cAACmS,EAAA,EAAD,CACC5O,UAAU,wBACV0I,QAAQ,YACRtI,QAAS8R,EAHV,SAKE5X,EAAMmD,cAAcS,gBAAgBX,QAAQC,kBQ7DpC+B,I,OAAAA,YAAQ,KAAMuF,EAAdvF,EAlD6C,SAACG,GAC5D,MAAwCmD,aAAxC,mBAAO6P,EAAP,KAAqBC,EAArB,KAEMO,EAAa,WAClBP,GAAgB,IAiBbc,EAAuB,qBAM3B,OAJIf,IACHe,GAA8B,WAI9B,qCACC,eAACC,EAAA,EAAD,CAAkC1T,UAAWyT,EAA7C,UACC,cAACE,EAAA,EAAD,CAAWC,MAAM,OAAjB,SAAyBlU,EAAM2Q,SAASvD,cACxC,cAAC6G,EAAA,EAAD,CAAWC,MAAM,OAAjB,SAAyBlU,EAAM2Q,SAAS3B,aACxC,cAACiF,EAAA,EAAD,CAAWC,MAAM,OAAjB,SAAyBlU,EAAM2Q,SAASoI,SACpC,cAAC9E,EAAA,EAAD,CAAWC,MAAM,OAAjB,SAAyBlU,EAAM2Q,SAAS0I,cAC5C,cAACpF,EAAA,EAAD,CAAWC,MAAM,QAAjB,SArBD,cAAC7T,EAAA,EAAD,UACC,cAACoH,GAAA,EAAD,CAAY/G,QAAS8S,EAArB,SACC,cAAC,KAAD,YAcaxT,EAAM2Q,SAAS3O,IAO9B,cAACgS,EAAA,EAAD,UACC,cAACC,EAAA,EAAD,CAAWrO,GAAI,CAAEyO,QAAS,GAAKC,QAAS,EAAxC,SACC,cAAC,GAAD,CACCnG,OAAQ6E,EACRzE,cAjCe,WACnB0E,GAAgB,IAiCZtC,SAAU3Q,EAAM2Q,SAChB2J,cAAeta,EAAMsa,2BCuOZza,eAAQ,KAAMuF,EAAdvF,EAxQuC,SAACG,GACtD,IAeI8U,EAfJ,EAA0C3R,WAA+B,IAAzE,mBAAOqX,EAAP,KAAsBC,EAAtB,KACA,EAA0CtX,YAAwB,GAAlE,mBAAOmS,EAAP,KAAsBC,EAAtB,KACA,EAA8BpS,YAAwB,GAAtD,mBAAOI,EAAP,KAAgBC,EAAhB,KACA,EAAoCL,WAAuB,IAA3D,mBAAOb,EAAP,KAAmBkT,EAAnB,KAGA,EAAwDrS,YAAwB,GAAhF,mBAAOuX,EAAP,KAA6BC,EAA7B,KACA,EAAgDxX,YAAwB,GAAxE,mBAAO2E,EAAP,KAAyB+N,EAAzB,KACA,EAA8C1S,WAAuB,GAArE,mBAAOyX,EAAP,KAAwBC,EAAxB,KACA,EAAkC1X,WAAuB,GAAzD,mBAAOjB,EAAP,KAAkB4Y,EAAlB,KACA,EAAoC3X,WAAuB,GAA3D,oBAAO4X,GAAP,MAAmB/E,GAAnB,MAGMgF,GAAiC,GAMjC3O,GAAgBlJ,cAAA,gCAAkB,uGACvCK,GAAW,GAD4B,kBAIIxC,EAAQia,kBAAkB3Y,EAAY,EAAG0Y,IAJ7C,QAIhClX,EAJgC,SAM/BoX,EAAkBpX,EAAOnC,KAAKwZ,MACpCV,EAAiBS,GACjBL,EAAmB,GACnB7E,GAAclS,EAAOnC,KAAKoZ,YAC1BlF,GAAqB/R,EAAOnC,KAAKyZ,aACjCT,GAAyB7W,EAAOnC,KAAK0Z,iBACrCP,EAAahX,EAAOnC,KAAKO,YAUzB+E,QAAQC,IAAI,gBAtByB,gDAyBtClH,EAAMgF,cAAc+B,EAAmB,EAAD,KAzBA,QA2BvCvD,GAAW,GA3B4B,yDA4BrC,CAAClB,IAGJa,aAAgB,WACfkJ,OACE,CAACA,KAEJ,IAAMiO,GAAgB,SAACgB,GAEtB,IAAMC,EAAoCf,EAAclD,QAClDkE,EAAgCD,EAAkB/D,WAAU,SAACC,GAAD,OAAOA,EAAEzV,KAAOsZ,EAAetZ,MACjGuZ,EAAkBC,GAAyBF,EAE3Cb,EAAiBc,GAEjBvb,EAAM6E,SAAS,CACdE,KAAM,OACNJ,KAAM/J,EAAM0E,OAAOC,sBAIfkc,GAAsB,iDAAG,WAAO3E,GAAP,2FAE1BA,EAF0B,gBAG1B8D,EAAkB,IAEpBC,EADiBD,EAAkB,GAEnC/E,GAAoB,IANQ,mCAUtB6F,EAA2B3Q,KAAKiM,KAAKwD,EAAcnV,OAAS2V,MAG9DJ,EAAkB,EAAIc,GAbE,iBAe3Bb,EAAmBD,EAAkB,GAfV,+BAiB3BpX,GAAW,GAjBgB,UAkBexC,EAAQia,kBAAkB3Y,EAAYJ,EAAU,EAAG8Y,IAlBlE,SAkBrBlX,EAlBqB,SAoBpB6X,EAAqB7X,EAAOnC,KAAKwZ,MACjCS,EAAwCpB,EAActD,OAAOyE,GACnElB,EAAiBmB,GAEjBf,EAAmB/W,EAAOnC,KAAKO,UAAU,GACzC4Y,EAAahX,EAAOnC,KAAKO,WACzB2T,GAAqB/R,EAAOnC,KAAKyZ,aACjCT,GAAyB7W,EAAOnC,KAAK0Z,mBAUrCpU,QAAQC,IAAI,cACZ2O,GAAoB,IAErBrS,GAAW,GAxCgB,0DA2C5BxD,EAAMgF,cAAc+B,EAAmB,EAAD,KA3CV,0DAAH,sDAuEtB6Q,GAAoB,SAAEjT,EAAckT,EAAe3D,EAAe2H,GACtE,OACA,cAAC5H,EAAA,EAAD,CACC3T,UAAU,4BADX,SAGC,cAACD,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,MAAMJ,WAAW,SAASK,eAAgBqT,EAA5E,SACC,cAAC7F,EAAA,EAAD,CAAYrF,QAAQ,KAAKsF,WAAW,UAApC,SACE3J,SAON,OACC,eAACtE,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASsF,KAAM,EAAG5F,UAAU,2BAA9D,UACC,eAACD,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,MAAMC,eAAe,gBAAgBqF,KAAM,EAA7E,UACC,eAACgJ,EAAA,EAAD,CACClG,QAAQ,YACRtI,QA9BsB,WACzB6U,GAAiB,IA8BdjV,UAAU,0CAHX,UAKC,cAAC,KAAD,CAAgBA,UAAU,yBACzB1F,EAAMmD,cAAcC,cAEtB,cAAC+L,EAAA,EAAD,CACCzJ,UAAU,eACV0I,QAAQ,WACRd,MAAOtN,EAAMc,UAAUE,OACvBuO,KAAK,QACLpF,KAAK,SACLuD,SAAU,SAACC,GAAD,OAtCcwJ,EAsCgBxJ,EAAMC,OAAOH,MArCxDwF,aAAaiH,QACbA,EAAgBxP,YAAW,WAC1BkQ,EAAczD,KACZ,MAJuB,IAACA,QA0C1B,eAAC1R,EAAA,EAAD,CAAKuF,GAAI,CAAEC,MAAO,QAAlB,UACA,cAAC,GAAD,CACEkC,WA5DuB,WACtBD,GACH2T,IAAuB,IA2DrB7T,WAvDuB,WACtB8S,GACHe,IAAuB,IAsDrB3T,iBAAkBA,EAClBH,iBAAkB+S,EAClB7B,cAAekC,GACflT,SAAU+S,EAAgB,IAEvB,cAACzC,EAAA,EAAD,CAAgB7X,UAAU,iBAA1B,SACH,eAAC8X,EAAA,EAAD,CAAOjO,KAAK,QAAQkO,cAAY,EAAhC,UACC,cAACC,EAAA,EAAD,UACC,eAACtE,EAAA,EAAD,WACE4D,GACAhd,EAAMmD,cAAclC,aAAaqC,YACjC,EACA,UAGA0Z,GACAhd,EAAMmD,cAAclC,aAAaY,WACjC,EACA,UAGAmb,GACAhd,EAAMmD,cAAclC,aAAasC,OACjC,EACA,UAGAyZ,GACAhd,EAAMmD,cAAclC,aAAauC,YACjC,EACA,UAGD,cAAC6V,EAAA,EAAD,CAAWC,MAAM,QAAQ5T,UAAU,4BAAnC,SACC,cAAC+N,EAAA,EAAD,CACCrF,QAAQ,KACRpD,GAAI,CAAEC,MAAO,KACbyI,WAAW,UAHZ,SAKE1T,EAAMmD,cAAclC,aAAaI,iBAMtC,cAACsc,EAAA,EAAD,UACEhV,EACA,cAACyQ,EAAA,EAAD,UACC,cAACC,EAAA,EAAD,CAAWrO,GAAI,CAAEyO,QAAS,GAAKC,QAAS,EAAxC,SACC,cAACjU,EAAA,EAAD,CAAKE,QAAQ,OAAOD,UAAU,kCAA9B,SACC,cAAC6D,EAAA,EAAD,UAKH,qCACC,cAAC6P,EAAA,EAAD,UACC,cAACC,EAAA,EAAD,CAAWK,QAAS,EAAGhU,UAAU,+BAAjC,SACC,cAAC,GAAD,CACC6N,OAAQmH,EACRwE,gBAAiBzN,GACjBkC,cAAe,kBAAMgH,GAAiB,UAN1C,OAUEiF,QAVF,IAUEA,OAVF,EAUEA,EAAelD,MAAMsD,EAAkBI,GAAwBJ,EAAkBI,GAAyBA,IAC1G5W,KAAI,SAAC5B,GAAD,OACJ,cAAC,GAAD,CAECmO,SAAUnO,EACV8X,cAAeA,IAFV9X,EAAQR,0BCxPT8Z,GApBoE,WAClF,OACC,cAACzb,EAAA,EAAD,CAAKC,UAAU,wBAAf,SACI,eAACmY,EAAA,EAAD,CAAWC,UAAU,EAAOC,gBAAc,EAA1C,UACF,eAACtY,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASN,UAAU,8BAArD,UACC,cAAC+N,EAAA,EAAD,CAAYrF,QAAQ,KAAK4P,UAAU,MAAMtK,WAAW,UAApD,SACE1T,EAAMmD,cAAcjD,QAGtB,cAACuT,EAAA,EAAD,CAAYrF,QAAQ,YAAY4P,UAAU,MAAMtK,WAAW,UAA3D,SACE1T,EAAMmD,cAActC,cAIvB,cAAC,GAAD,UCFWsgB,GAd0D,WACxE,OACC,cAAC1b,EAAA,EAAD,CAAKC,UAAU,eAAf,SACC,cAACmY,EAAA,EAAD,UACC,cAACpY,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASN,UAAU,qBAArD,SACC,cAAC+N,EAAA,EAAD,CAAYrF,QAAQ,KAAK4P,UAAU,MAAnC,SACEhe,EAAMW,6BCQEygB,GAd8D,WAC5E,OACC,cAAC3b,EAAA,EAAD,CAAKC,UAAU,eAAf,SACC,cAACmY,EAAA,EAAD,UACC,cAACpY,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASN,UAAU,qBAArD,SACC,cAAC+N,EAAA,EAAD,CAAYrF,QAAQ,KAAK4P,UAAU,MAAnC,SACEhe,EAAMU,mCCwBEE,I,OAnB0C,WACrD,OACI,cAAC6E,EAAA,EAAD,CAAKC,UAAU,WAAf,SACI,cAACmY,EAAA,EAAD,CAAWC,UAAU,EAAOC,gBAAc,EAA1C,SACI,eAACtY,EAAA,EAAD,CAAKE,QAAQ,OAAOK,cAAc,SAASN,UAAU,iBAArD,UACI,cAAC+N,EAAA,EAAD,CAAYrF,QAAQ,KAAK4P,UAAU,MAAMtK,WAAW,UAApD,SACK1T,EAAMY,SAASV,QAGpB,cAACuT,EAAA,EAAD,CAAYrF,QAAQ,YAAY4P,UAAU,MAAMtK,WAAW,UAA3D,SACK1T,EAAMY,SAASC,oBCgCzBoE,gBAAQ,SAACC,GAAD,OAA6BA,EAAMC,cAA3CF,EA5CgC,SAACG,GAC/C,IAAMic,EAAwB,GAgC9B,OA9BAA,EAAOlT,KACN,cAAC,IAAD,CACCmT,OAAK,EACLC,KAAK,gBACLvD,UAAWoD,IACP,iBAIFhc,EAAMS,UACTwb,EAAOlT,KACN,cAAC,IAAD,CAAOmT,OAAK,EAACC,KAAM/V,EAAQS,OAAOC,SAAU8R,UAAWpd,IAAc,SAEtEygB,EAAOlT,KACN,cAAC,IAAD,CAAOmT,OAAK,EAACC,KAAM/V,EAAQS,OAAO3L,MAAO0d,UAAWJ,IAAwB,UAE7EyD,EAAOlT,KACN,cAAC,IAAD,CAAOmT,OAAK,EAACC,KAAM/V,EAAQS,OAAO5L,UAAW2d,UAAWkD,IAA2B,eAGpFG,EAAOlT,KACN,cAAC,IAAD,CACCmT,OAAK,EACLC,KAAM/V,EAAQS,OAAOC,SACrB8R,UAAWmD,IACP,iBAMN,cAACK,EAAD,UACC,eAAC,IAAD,WACEH,EAED,cAAC,IAAD,CAAU1X,GAAI6B,EAAQS,OAAOC,mBC5CbuV,QACa,cAA7Bnc,OAAOC,SAASmc,UAEa,UAA7Bpc,OAAOC,SAASmc,UAEhBpc,OAAOC,SAASmc,SAASC,MACrB,2D,kCCHK3X,GACQ,SAACyC,GAAD,MAClB,CAAEtC,KAAM,wBAAyB5D,QAASkG,ICDhCmV,GAAW,CACvBC,kBCmBsD,SACtD3c,EACA4c,GAEA,QAAc3Z,IAAVjD,EACH,MAAO,CAAE6c,mBAAoB,MAG9B,IAAMC,EAASF,EACf,MACM,0BADEE,EAAO7X,KAEN,CAAE4X,mBAAoBC,EAAOD,oBAE7B7c,GD/BTC,YDEiD,SACjDD,EACA4c,GAEA,QAAc3Z,IAAVjD,EACH,MAAO,CAAEW,SAAU,MAGpB,IAAMmc,EAASF,EACf,MACM,0BADEE,EAAO7X,KAEN,CAAEtE,SAAUmc,EAAOzb,SAEnBrB,GCdTqF,OjCY2C,SAC3CrF,EACA4c,GAEA,QAAc3Z,IAAVjD,EACH,MAAO,CAAEqF,OAAQ,IAGlB,IAAMyX,EAASF,EACf,OAAQE,EAAO7X,MACd,IAAK,YACJ,IAAM8X,EAAuB/c,EAAMqF,OAAOmS,QAI1C,OAFAuF,EAAW9T,KAAK6T,EAAOzb,SAEhB,CAAEgE,OAAQ0X,GAElB,IAAK,eACJ,IAAMC,EAAyBhd,EAAMqF,OAAOmS,QAM5C,OAJIwF,EAAazX,OAAS,GACzByX,EAAaC,QAGP,CAAE5X,OAAQ2X,GAElB,QACC,OAAOhd,KmCzCV,IAAMkd,GAAUC,SAASC,qBAAqB,QAAQ,GAAGC,aAAa,QAChEC,GAAUC,YAAqB,CAAEC,SAAUN,KAG3CO,GCbS,SAAwBH,EAAkBI,GACxD,IAAMC,EAAa,CAACC,KAAOC,aAAiBP,IAEtCQ,EAAcC,aAAgB,6BAChCrB,IAD+B,IAElCsB,OAAQC,YAAcX,MAGjBY,EAAY,GACZC,EAAoC,qBAAX/d,OAAyB,KAAQA,OAWhE,OAVI+d,GAAmBA,EAAgBC,8BACtCF,EAAUjV,KAAKkV,EAAgBC,gCAGlBC,aACbP,EACAJ,EACAY,KAAO,WAAP,GAAQC,KAAe,WAAf,EAAmBZ,IAA3B,OAA2CO,KDJ/BM,CAAelB,IAEvBmB,GAAQ,iDAAG,uHAIEvd,EAAQwd,iBAJV,OAIf/d,EAJe,sDAMf8c,GAAMkB,SAASrZ,EAAyBJ,cAAc+B,EAAmB,EAAD,MANzD,OASZtG,GACH8c,GAAMkB,SAASC,GAA6Cje,IAG7Dke,SACC,cAAC,IAAD,CAAUpB,MAAOA,GAAjB,SACC,cAAC,IAAD,CAAiBH,QAASA,GAA1B,SACC,cAAC,GAAD,QAGFH,SAAS2B,eAAe,SAnBT,yDAAH,qDAuBdL,KJuDQ,kBAAmBM,WACnBA,UAAUC,cAAcC,MAAMC,MAAK,SAAAC,GAC/BA,EAAaC,kB","file":"static/js/main.d8c3eda9.chunk.js","sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"trimmedNav\":\"TrimmedNav_trimmedNav__170eb\",\"trimmedNavClosed\":\"TrimmedNav_trimmedNavClosed__3oxEQ TrimmedNav_trimmedNav__170eb\",\"trimmedItem\":\"TrimmedNav_trimmedItem__3bgJN\",\"linkText\":\"TrimmedNav_linkText__FpEYf\",\"menuBtn\":\"TrimmedNav_menuBtn__39kL3\"};","const Texts = {\n\tNavigation: {\n\t\tTitle: \"Synamedia\",\n\t\tSID: \"Synamedia Identity\",\n\t\tManagementTools: \"Manage\",\n\t\tCompanies: \"Companies\",\n\t\tUsers: \"Users\",\n\t\tLogin: \"Log in\",\n\t\tLogout: \"Log out\",\n\t\tBack: \"Back\",\n\t},\n\tUnauthorizedAccessMessage: \"You are not authorised to use this application.\",\n\tUnauthorizedMessage: \"You are not logged in, please log in\",\n\tHomeView: {\n\t\tTitle: \"Welcome to SID\",\n\t\tSubtitle: \"This tool allows you to manage customer access to the Synamedia Portals.\",\n\t},\n\tUsersView: {\n\t\tTitle: \"Users\",\n\t\tSubtitle: \"Manage access to Synamedia resources for customers, partners and resellers.\",\n\t\tAddUser: \"Add User\",\n\t\tSearch: \"Search\",\n\t\tTableColumns: {\n\t\t\tName: \"Name\",\n\t\t\tLogin: \"Login\",\n\t\t\tCompany: \"Company\",\n\t\t\tStatus: \"Status\",\n\t\t\tActions: \"Actions\",\n\t\t},\n\t\tNewUserForm: {\n\t\t\tCreateNewUser: \"Create New User\",\n\t\t\tPersonalDetails: {\n\t\t\t\tTitle: \"Personal Details\",\n\t\t\t\tFirstName: \"First name\",\n\t\t\t\tLastName: \"Last name\",\n\t\t\t\tDisplayName: \"Display name\",\n\t\t\t\tEmail: \"Email / Login\",\n Company: \"Company\",\n DynamicsId: \"SynaCRM ID\",\n\t\t\t},\n\t\t\tInitialPassword: {\n\t\t\t\tTitle: \"Initial Password\",\n\t\t\t\tHint: \"Type a password, or click 'Suggest'\",\n\t\t\t\tSuggest: \"Suggest\",\n\t\t\t},\n\t\t\tAssignedRoles: {\n\t\t\t\tTitle: \"Assigned Roles\",\n\t\t\t\tHint: \"Select which roles this user can access\",\n\t\t\t},\n\t\t\tWelcomeTemplate: {\n\t\t\t\tTitle: \"Welcome Template\",\n\t\t\t\tHint: \"Select a template for the welcome email\",\n\t\t\t},\n\t\t\tCancel: \"Cancel\",\n\t\t\tCreate: \"Create\",\n\t\t},\n\t\tEditUserForm: {\n\t\t\tTabs: {\n\t\t\t\tAssignedApps: {\n\t\t\t\t\tTabLabel: \"Assigned Applications\",\n\t\t\t\t\tTitle: \"Enable applications for this user\",\n\t\t\t\t\tDisabledUserWarning: \"This user account is currently disabled\",\n\t\t\t\t},\n\t\t\t\tAssignedRoles: {\n\t\t\t\t\tTabLabel: \"Assigned Roles\",\n\t\t\t\t\tTitle: \"Enable roles for this user\",\n\t\t\t\t\tDisabledUserWarning: \"This user account is currently disabled\",\n\t\t\t\t},\n\t\t\t\tPassword: {\n\t\t\t\t\tTabLabel: \"Password\",\n\t\t\t\t\tResetPasswordTitle: \"Reset User Password\",\n\t\t\t\t\tPasswordHint: \"Type a new password, or click 'Suggest' to generate one\",\n\t\t\t\t\tPasswordActionNotice: \"The new password will be emailed to the user\",\n\t\t\t\t\tSuggest: \"Suggest\",\n\t\t\t\t\tTemplateTitle: \"Choose Email Template\",\n\t\t\t\t\tInternalHint: \"For internal users, select 'none'\",\n\t\t\t\t\tExternalHint: \"For external users, select an appropriate template\",\n\t\t\t\t},\n\t\t\t\tPersonalDetails: {\n\t\t\t\t\tTabLabel: \"Personal Details\",\n\t\t\t\t\tTitle: \"Edit User Details\",\n\t\t\t\t\tDisplayName: \"Display name\",\n\t\t\t\t\tFirstName: \"First name\",\n\t\t\t\t\tLastName: \"Last name\",\n\t\t\t\t\tEmail: \"Email / Login\",\n\t\t\t\t\tCompany: \"Company\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tButtons: {\n\t\t\t\tCancel: \"Cancel\",\n\t\t\t\tSave: \"Save\",\n\t\t\t},\n\t\t},\n\t},\n\tCompaniesView: {\n\t\tTitle: \"Companies\",\n\t\tSubtitle: \"Add verified companies to the list.\",\n\t\tAddCompany: \"Add Company\",\n\t\tSearch: \"Search\",\n\t\tTableColumns: {\n\t\t\tID: \"ID\",\n\t\t\tCompanyName: \"Company Name\",\n\t\t\tDynamicsId: \"Account Number\",\n\t\t\tDomain: \"Domain\",\n\t\t\tDescription: \"Description\",\n\t\t\tActions: \"Actions\",\n\t\t},\n\t\tNewCompanyForm: {\n\t\t\tCreateNewCompany: \"Add from SynaCRM...\",\n\t\t\tCompanyDetails: {\n\t\t\t\tTitle: \"Search CRM\",\n\t\t\t\tID: \"ID\",\n\t\t\t\tCompanyName: \"CRM Account Name\",\n\t\t\t\tDynamicsId: \"Account Number\",\n\t\t\t\tDomain: \"Domain\",\n\t\t\t\tDescription: \"Description\",\n\t\t\t},\n\t\t\tCancel: \"Cancel\",\n\t\t\tCreate: \"Add\",\n\t\t},\n\t\tEditCompanyForm: {\n\t\t\tTabs: {\n\t\t\t\tCompanyDetails: {\n\t\t\t\t\tTabLabel: \"Company Details\",\n\t\t\t\t\tTitle: \"Update Company\",\n\t\t\t\t\tID: \"ID\",\n\t\t\t\t\tCompanyName: \"Company Name\",\n\t\t\t\t\tDynamicsId: \"Account Number\",\n\t\t\t\t\tDomain: \"Domain\",\n\t\t\t\t\tDescription: \"Description\",\n\t\t\t\t},\n\t\t\t},\n\t\t\tButtons: {\n\t\t\t\tCancel: \"Cancel\",\n\t\t\t\tSave: \"Update\",\n\t\t\t},\n\t\t},\n\t},\n\tDialogs: {\n\t\tDeleteUserTitle: \"Delete user\",\n\t\tConfirmEnable: \"Confirm Enable\",\n\t\tConfirmEnableText: \"You are about to activate the account of\",\n\t\tConfirmDisableText: \"You are about to disable the account of\",\n\t\tConfirmDeleteText: \"You are about to delete the account of\",\n\t\tConfirmDisable: \"Confirm Disable\",\n\t\tConfirmationText: \"Please confirm\",\n\t\tButtons: {\n\t\t\tConfirmDialog: \"OK\",\n\t\t\tCancelDialog: \"Cancel\",\n\t\t\tDisableAccount: \"Disable account\",\n\t\t\tEnableAccount: \"Enable account\",\n\t\t\tDeleteAccount: \"Delete account\",\n\t\t},\n\t},\n\tAlerts: {\n\t\tInfoCompanyUpdated: \"Company has been updated.\",\n\t\tInfoCompanyNotCreatedMissingInfo: \"Company has not been created. Please ensure you fill in all fields.\",\n\t\tInfoUserUpdated: \"User has been updated. It might take a while for the change to take effect.\",\n \tInfoUserNotCreatedMissingInfo: \"User has not been created. Please ensure you fill in all fields and select a company.\",\n\t\tInfoUserDeleted: \"User has been deleted. It might take a while for the change to take effect.\",\n SynamediaUser: \"SID is for creating customer, partner and reseller users. Synamedia users should use their Synamedia credentials when logging into a support portal.\"\n\t},\n};\nexport default Texts;\n","import { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport Texts from \"../../resources/Texts\";\nimport { ApplicationState } from \"../../store\";\nimport { CurrentUserState } from \"../../store/CurrentUser\";\nimport \"./LoginButton.scss\";\n\ntype LoginButtonProps = CurrentUserState & {};\n\nconst LoginButton: React.FC = (props) => {\n\tconst handleLogout = (): void => {\n\t\twindow.location.href = \"/api/auth/logout\";\n\t};\n\n\tconst handleLogin = async () => {\n\t\twindow.location.href = \"/api/auth\";\n\t};\n\n\treturn (\n\t\t\n\t\t\t{props.userName ? (\n\t\t\t\t\n\t\t\t\t\t{props.userName}\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.Navigation.Logout}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t) : (\n\t\t\t\t\n\t\t\t\t\t{Texts.Navigation.Login}\n\t\t\t\t\n\t\t\t)}\n\t\t\n\t);\n};\n\nexport default connect((state: ApplicationState) => state.currentUser)(LoginButton);\n","import { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport SynamediaTitleImg from \"../../images/synamedia-logo.png\";\nimport LoginButton from \"./LoginButton\";\nimport \"./NavMenu.scss\";\nimport Texts from \"../../resources/Texts\";\n\n\nconst NavMenu: React.FunctionComponent<{}> = (props) => {\n\treturn (\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\"titleImg\"\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\t
{Texts.Navigation.SID}
\n\t\t\t\t\n\n\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\nexport default NavMenu;\n","export default \"data:image/png;base64,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\"","import axios, { Method, AxiosResponse } from \"axios\";\nimport * as Contracts from \"../resources/Contracts\";\nimport {ICompany, ICompanyView, IUser} from \"../resources/Contracts\";\n\nexport class Service {\n\tprivate static async callApi(\n\t\tapiUrl: string,\n\t\tmethod: Method,\n\t\tpayload?: any\n\t): Promise {\n\t\tlet request: AxiosResponse;\n\t\tconst url: string = `/api${apiUrl}`;\n\n\t\tswitch (method) {\n\t\t\tcase \"GET\":\n\t\t\t\trequest = await axios.get(url);\n\t\t\t\tbreak;\n\n\t\t\tcase \"POST\":\n\t\t\t\trequest = await axios.post(url, payload);\n\t\t\t\tbreak;\n\n\t\t\tcase \"PUT\":\n\t\t\t\trequest = await axios.put(url, payload);\n\t\t\t\tbreak;\n\n\t\t\tcase \"DELETE\":\n\t\t\t\trequest = await axios.delete(url);\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn request.data;\n\t}\n\n\t\n\n\tpublic static async getUsersData(\n\t\trequest: Contracts.IUsersRequest\n\t): Promise {\n\t\treturn Service.callApi(\"/users/list\", \"POST\", request);\n\t}\n\n\tpublic static async getCompaniesDataPaged(request: Contracts.ICompaniesRequest): Promise {\n\t\treturn Service.callApi(\"/companies/list\", \"POST\", request);\n\t}\n\n\tpublic static async getUserRolesByUserId(userId: string): Promise {\n\t\treturn Service.callApi(`/users/roles/${userId}`, \"GET\");\n\t}\n\n\tpublic static async getUserRolesByUserEmail(userEmail: string): Promise {\n\t\treturn Service.callApi(`/Roles/getroles/${userEmail}`, \"GET\");\n\t}\n\n\tpublic static async getUserApplicationsByUserId(userId: string): Promise {\n\t\treturn Service.callApi(`/Applications/getappsbyuserid/${userId}`, \"GET\");\n\t}\n\n\tpublic static async updateUser(user: IUser): Promise {\n\t\treturn Service.callApi(`/users/${user.id}`, \"PUT\", user);\n\t}\n\n\tpublic static async addUser(user: IUser): Promise {\n\t\treturn Service.callApi(`/users`, \"POST\", user);\n\t}\n\n\tpublic static async deleteUser(userId: string): Promise {\n\t\treturn Service.callApi(`/users/${userId}`, \"DELETE\");\n\t}\n\n\tpublic static async getCompaniesTable(search?: string, pageIndex?:number, pageSize?:number): Promise {\n\t\tlet methodPath: string = \"/Companies/companiestable\";\n\t\tlet queryParams: string = formatQueryParams({searchText: search, pageIndex: pageIndex, pageSize: pageSize});\n\t\tlet url = methodPath + queryParams;\n\t\treturn Service.callApi(url, \"GET\");\n\t}\n\n\tpublic static async getCompanies(search?: string): Promise {\n\t\tlet url: string = \"/Companies/getcompanies\";\n\n\t\tif (search) {\n\t\t\turl += \"?searchTerm=\" + encodeURIComponent(search);\n\t\t}\n\n\t\treturn Service.callApi(url, \"GET\");\n\t}\n\t// this is used by CompaniesTable\n\tpublic static async getCompaniesData(search?: string): Promise {\n\t\tlet url: string = \"/Companies/all\";\n\n\t\tif (search) {\n\t\t\turl += \"?searchTerm=\" + encodeURIComponent(search);\n\t\t}\n\n\t\treturn Service.callApi(url, \"GET\");\n\t\t//return Service.callApi(`/Companies/all`, \"GET\");\n\t}\n\t\n\t// gets the side navigation; returns data if the user is logged in an a member of the admins group\n\tpublic static async getTrimmedNavData(): Promise {\n\t\tlet url: string = \"/TrimmedNav\";\n\t\treturn Service.callApi(url, \"GET\");\n\t}\n\n\t// this is used by CompaniesTable (crm lookup)\n\tpublic static async getCrmData(search?: string): Promise {\n\t\tlet url: string = \"/Crm/getbyname\";\n\n\t\tif (search) {\n\t\t\turl += \"?name=\" + encodeURIComponent(search);\n\t\t}\n\n\t\treturn Service.callApi(url, \"GET\");\n\t\t//return Service.callApi(`/Companies/all`, \"GET\");\n\t}\n\n//\tpublic static async getCompaniesData(\n//\t\trequest: Contracts.ICompaniesRequest\n//\t): Promise {\n//\t\treturn Service.callApi(\"/companies/list\", \"POST\", request);\n//\t}\n\n//\tpublic static async getCompaniesData(\n//\t\trequest: Contracts.ICompaniesRequest\n//\t): Promise {\n//\t\t//return Service.callApi(\"/companies/list\", \"POST\", request);\n\t//}\n\n\tpublic static async addCompany(company: ICompanyView): Promise {\n\t\treturn Service.callApi(`/companies/add`, \"POST\", company);\n\t}\n\tpublic static async updateCompany(company: ICompanyView): Promise {\n\t\treturn Service.callApi(`/companies/update/${company.id}`, \"PUT\", company);\n\t}\n\n\tpublic static async getRoles(): Promise {\n\t\treturn Service.callApi(\"/Roles/getroles\", \"GET\");\n\t}\n\n\tpublic static async getApplications(): Promise {\n\t\treturn Service.callApi(\"/Applications/getapps\", \"GET\");\n\t}\n\n\tpublic static async getTemplates(): Promise {\n\t\treturn Service.callApi(\"/templates\", \"GET\");\n\t}\n\n\tpublic static async getCurrentUser(): Promise {\n\t\treturn Service.callApi(\"/home\", \"GET\");\n\t}\n}\n\n// format the query string params\nfunction formatQueryParams(params): string {\n\tconst Url = new URL(\"https://placeholder\");\n\n\tconst urlParams = new URLSearchParams(Url.search);\n\tfor (const key in params) {\n\t if (params[key] !== undefined && params[key] !== \"\") {\n\t\turlParams.set(key, params[key]);\n\t }\n\t}\n\t\n\treturn (\"?\" + urlParams.toString());\n}\n\n\n","import styles from \"./TrimmedNav.module.css\"\nimport KeyboardDoubleArrowRightIcon from '@mui/icons-material/KeyboardDoubleArrowRight';\nimport KeyboardDoubleArrowLeftIcon from '@mui/icons-material/KeyboardDoubleArrowLeft';\nimport { NavLink } from \"react-router-dom\";\nimport { useState } from \"react\";\nimport React from \"react\";\nimport { INavData } from \"../../resources/Contracts\";\nimport { Service } from \"../../services/Service\";\nimport { CircularProgress } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\n\nexport default function trimmedNav() {\n const [navData, setNavData] = React.useState([]);\n const [loading, setLoading] = React.useState(true);\n const [open, setopen] = useState(true);\n const toggleOpen = () => {\n setopen(!open)\n };\n \n // Load the navigation items from the controller - will be empty unless user is logged in as an admin\n const loadNavigation = React.useCallback(async () : Promise => {\n setLoading(true);\n try {\n\t\t\tconst result: INavData[] = (await Service.getTrimmedNavData());\n\t\t\tif (result) {\n\t\t\t\tsetNavData(result);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\t//props.addErrorAlert(handleErrorMessage(error));\n\t\t}\n setLoading(false);\n },[]);\n\n React.useEffect(() => {\n\t\tloadNavigation();\n\t}, [loadNavigation]);\n\n return (\n
\n \n \n \n {loading ? \n (\n \n \n \n ) : \n (\n <>\n {navData.map(item =>{\n return \n \n {item.text}\n \n })\n }\n \n )\n }\n
\n )\n}\n","import { Action, Reducer } from \"redux\";\n\nexport interface IAlert {\n\ttext: string;\n\ttype: \"error\" | \"warning\" | \"info\" | \"success\";\n}\n\nexport interface AlertState {\n\talerts: IAlert[];\n}\n\nexport interface SetAlertAction {\n\ttype: \"ADD_ALERT\";\n\tpayload: IAlert;\n}\n\nexport interface RemoveAlertAction {\n\ttype: \"REMOVE_ALERT\";\n}\n\nexport type KnownAction = SetAlertAction | RemoveAlertAction;\n\nexport const actionCreators = {\n\taddAlert: (alert: IAlert) => ({ type: \"ADD_ALERT\", payload: alert } as SetAlertAction),\n\taddErrorAlert: (errorMessage: string) =>\n\t\t({ type: \"ADD_ALERT\", payload: { type: \"error\", text: errorMessage } } as SetAlertAction),\n\tremoveAlert: () => ({ type: \"REMOVE_ALERT\" } as RemoveAlertAction),\n};\n\nexport const reducer: Reducer = (\n\tstate: AlertState | undefined,\n\tincomingAction: Action\n) => {\n\tif (state === undefined) {\n\t\treturn { alerts: [] };\n\t}\n\n\tconst action = incomingAction as KnownAction;\n\tswitch (action.type) {\n\t\tcase \"ADD_ALERT\":\n\t\t\tconst alertsCopy: IAlert[] = state.alerts.slice();\n\n\t\t\talertsCopy.push(action.payload);\n\n\t\t\treturn { alerts: alertsCopy };\n\n\t\tcase \"REMOVE_ALERT\":\n\t\t\tconst alertsRemove: IAlert[] = state.alerts.slice();\n\n\t\t\tif (alertsRemove.length > 0) {\n\t\t\t\talertsRemove.shift();\n\t\t\t}\n\n\t\t\treturn { alerts: alertsRemove };\n\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import { Alert, Stack } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { ApplicationState } from \"../store\";\nimport { actionCreators as AlertStoreActionCreators, AlertState } from \"../store/AlertStore\";\n\ntype AlertOverlayProps = AlertState & typeof AlertStoreActionCreators & {};\n\nconst AlertOverlay: React.FC = (props) => {\n\tReact.useEffect(() => {\n\t\tif (props.alerts.length > 0) {\n\t\t\tsetTimeout(() => {\n\t\t\t\tprops.removeAlert();\n\t\t\t}, 5000);\n\t\t}\n\t}, [props.alerts]);\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{props.alerts?.map((alert, index) => (\n\t\t\t\t\t\n\t\t\t\t\t\t{alert.text}\n\t\t\t\t\t\n\t\t\t\t))}\n\t\t\t\n\t\t\n\t);\n};\n\nexport default connect(\n\t(state: ApplicationState) => state.alerts,\n\tAlertStoreActionCreators\n)(AlertOverlay);\n","import { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport NavMenu from \"./navMenu/NavMenu\"; // top navigation\nimport TrimmedNav from './trimmedNav/TrimmedNav'; // permission-trimmed side navigation\n\nimport AlertOverlay from \"./AlertOverlay\";\n\nexport default (props: { children?: React.ReactNode }) => (\n\t<>\n\t\t\n\n\t\t\n\t\t\t\n\t\t\t\n\t\t\t{props.children}\n\t\t\t\n\t\t\n\n\t\t\n\t\n);\n","import \"core-js/features/url-search-params\";\n\nexport class Routing {\n\tpublic static Routes = {\n\t\tHomePage: \"/\",\n\t\tCompanies:\"/companies/\",\n Users: \"/users/\"\n };\n\n\t/**\n\t * Create full url with params, e.g. /Home?foo=bar\n\t * @param base base of url e.g. /Home\n\t * @param params object of params, where object key/value pair corresponds to query params\n\t * @returns full url with params\n\t */\n\tprivate static constructFullUrl(base: string, params?: any) {\n\t\tlet result: string = base;\n\t\tlet query: URLSearchParams;\n\n\t\tif (params) {\n\t\t\tquery = new URLSearchParams();\n\n\t\t\tObject.keys(params).forEach((paramKey) => {\n\t\t\t\tquery.append(paramKey, params[paramKey]);\n\t\t\t});\n\n\t\t\tresult = `${result}?${query.toString()}`;\n\t\t}\n\n\t\treturn result;\n\t}\n\n\tpublic static getHomeViewUrl(): string {\n\t\treturn Routing.constructFullUrl(Routing.Routes.HomePage);\n\t}\n}\n","export function handleErrorMessage(error: Error): string {\n\tconsole.log(JSON.stringify(error.name));\n\tconsole.log(JSON.stringify(error.message));\n\n\tif (error.message) {\n \treturn \"There was a problem - SID could not complete the requested action\";\n\t} else if (error.name) {\n\t\treturn error.name;\n\t} else {\n\t\treturn JSON.stringify(error);\n\t}\n}\n","export const i = 0;\n\nexport enum EmailTemplate {\n None = \"None\",\n GeneralWelcome = \"GeneralWelcome\",\n SoftwarePortal = \"SoftwarePortal\",\n LicensePortal = \"LicensePortal\",\n ResellerPortal = \"ResellerPortal\"\n}\n","import { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport ArrowBackIosIcon from \"@mui/icons-material/ArrowBackIos\";\nimport ArrowForwardIosIcon from \"@mui/icons-material/ArrowForwardIos\";\nimport \"./Pagination.scss\";\nimport { IconButton } from \"@mui/material\";\n\ninterface GraphPaginationProps {\n\tonNextPage: () => void;\n\tonPrevPage: () => void;\n\tnextPageDisabled: boolean;\n\tprevPageDisabled: boolean;\n\tthisPage: number;\n}\n\nconst Pagination: React.FC = (props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{props.thisPage} \n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default Pagination;\n","import { Button, Collapse, IconButton, Tab, Tabs } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport Texts from \"../../../../resources/Texts\";\nimport AssignedApplicationsTab from \"./AssignedApplicationsTab\";\nimport AssignedRolesTab from \"./AssignedRolesTab\";\nimport { PasswordTab } from \"./PasswordTab\";\nimport PersonalDetailsTab from \"./PersonalDetailsTab\";\nimport \"./EditUserForm.scss\";\nimport PersonIcon from \"@mui/icons-material/Person\";\nimport ToggleOffIcon from \"@mui/icons-material/ToggleOff\";\nimport KeyIcon from \"@mui/icons-material/Key\";\nimport { IUser } from \"../../../../resources/Contracts\";\nimport { Service } from \"../../../../services/Service\";\nimport { actionCreators as AlertStoreActionCreators } from \"../../../../store/AlertStore\";\nimport { handleErrorMessage } from \"../../../../utils/utils\";\nimport { connect } from \"react-redux\";\n\nenum EditUserFormTabs {\n\tApplications,\n\tRoles,\n\tPassword,\n\tDetails,\n}\n\ntype EditUserFormProps = typeof AlertStoreActionCreators & {\n\topened: boolean;\n\tcloseCallback: () => void;\n\tdataItem: IUser;\n\tupdateUser: (user: IUser) => void;\n};\n\nconst EditUserForm: React.FC = (props) => {\n\tconst [selectedTab, setSelectedTab] = React.useState(\n\t\tEditUserFormTabs.Details\n\t);\n\tconst [user, setUser] = React.useState(props.dataItem);\n\n\tconst handleTabChange = (event, value: EditUserFormTabs): void => {\n\t\tsetSelectedTab(value);\n\t};\n\n\tconst handleCancelClick = (): void => {\n\t\tsetUser(props.dataItem);\n\n\t\tprops.closeCallback();\n\t};\n\n\tconst handleSaveClick = async (): Promise => {\n\t\ttry {\n\t\t\tawait Service.updateUser(user);\n\n\t\t\tprops.updateUser(user);\n\t\t} catch (error) {\n\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t}\n\n\t\tprops.closeCallback();\n\t};\n\n\tconst handleChange = (newUserValue: IUser) => {\n\t\tsetUser(newUserValue);\n\t};\n\n\treturn (\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\t\t\n\t\t\t\t\t\t\t\t\t{Texts.UsersView.EditUserForm.Tabs.AssignedApps.TabLabel}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue={EditUserFormTabs.Applications}\n\t\t\t\t\t\t\tclassName=\"tab\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{Texts.UsersView.EditUserForm.Tabs.AssignedRoles.TabLabel}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue={EditUserFormTabs.Roles}\n\t\t\t\t\t\t\tclassName=\"tab\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{Texts.UsersView.EditUserForm.Tabs.Password.TabLabel}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue={EditUserFormTabs.Password}\n\t\t\t\t\t\t\tclassName=\"tab\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{Texts.UsersView.EditUserForm.Tabs.PersonalDetails.TabLabel}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue={EditUserFormTabs.Details}\n\t\t\t\t\t\t\tclassName=\"tab\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{selectedTab === EditUserFormTabs.Applications && (\n\t\t\t\t\t\n\t\t\t\t)}\n\n\t\t\t\t{selectedTab === EditUserFormTabs.Roles && (\n\t\t\t\t\t\n\t\t\t\t)}\n\n\t\t\t\t{selectedTab === EditUserFormTabs.Password && (\n\t\t\t\t\t\n\t\t\t\t)}\n\n\t\t\t\t{selectedTab === EditUserFormTabs.Details && (\n\t\t\t\t\t\n\t\t\t\t)}\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.UsersView.EditUserForm.Buttons.Cancel}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.UsersView.EditUserForm.Buttons.Save}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default connect(null, AlertStoreActionCreators)(EditUserForm);\n","import {\n\tInputLabel,\n\tMenuItem,\n\tSelect,\n\tSelectChangeEvent,\n\tCheckbox,\n\tListItemText,\n\tBox,\n\tChip,\n} from \"@mui/material\";\nimport * as React from \"react\";\n\ninterface MultiselectFormFieldProps {\n\tdata: any[];\n\tvalueField: string;\n\ttextField: string;\n\tclassName?: string;\n\tlabel?: string;\n\tvalue: any[];\n\tonChange: (value: string[]) => void;\n\tinput?: JSX.Element;\n}\n\nexport const MultiselectFormField: React.FC = (props) => {\n\tconst handleChange = (event: SelectChangeEvent) => {\n\t\tlet result: string[] = [];\n\n\t\tif (event.target.value) {\n\t\t\tif (typeof event.target.value === \"string\") {\n\t\t\t\tresult = event.target.value.split(\",\");\n\t\t\t} else {\n\t\t\t\tevent.target.value.forEach((x) => {\n\t\t\t\t\tif (typeof x === \"string\") {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tresult.some(\n\t\t\t\t\t\t\t\t(resultItem) =>\n\t\t\t\t\t\t\t\t\tresultItem === x || resultItem[props.valueField] === x\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tresult = result.filter(\n\t\t\t\t\t\t\t\t(resultItem) =>\n\t\t\t\t\t\t\t\t\tresultItem !== x && resultItem[props.valueField] !== x\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.push(x);\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tresult.some(\n\t\t\t\t\t\t\t\t(resultItem) =>\n\t\t\t\t\t\t\t\t\tresultItem === x[props.valueField] ||\n\t\t\t\t\t\t\t\t\tresultItem[props.valueField] === x[props.valueField]\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tresult = result.filter(\n\t\t\t\t\t\t\t\t(resultItem) =>\n\t\t\t\t\t\t\t\t\tresultItem !== x[props.valueField] &&\n\t\t\t\t\t\t\t\t\tresultItem[props.valueField] !== x[props.valueField]\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tresult.push(x[props.valueField]);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tprops.onChange(result);\n\t};\n\n\tconst className: string = props.className\n\t\t? `formField formField-multiselect ${props.className}`\n\t\t: \"formField formField-multiselect\";\n\n\treturn (\n\t\t<>\n\t\t\t{props.label && {props.label}}\n\n\t\t\t (\n\t\t\t\t\t\n\t\t\t\t\t\t{selected.map((value) => (\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\tinput={props.input}\n\t\t\t>\n\t\t\t\t{props.data?.map((item) => (\n\t\t\t\t\t// \n\t\t\t\t\t// \t{item[props.textField]}\n\t\t\t\t\t// \n\n\t\t\t\t\t\n\t\t\t\t\t\t x[props.valueField] === item[props.valueField]\n\t\t\t\t\t\t\t\t) || false\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\n\t\t\t\t))}\n\t\t\t\n\t\t\n\t);\n};\n","import { InputLabel, TextField } from \"@mui/material\";\nimport * as React from \"react\";\nimport \"./FormField.scss\";\n\ninterface TextFormFieldProps {\n\tclassName?: string;\n\tlabel?: string;\n\tvalue: string;\n\tonChange: (value: string) => void;\n\tdisabled?: boolean;\n}\n\nexport const TextFormField: React.FC = (props) => {\n\tconst className: string = props.className ? `formField ${props.className}` : \"formField\";\n\n\treturn (\n\t\t<>\n\t\t\t{props.label && {props.label}}\n\n\t\t\t props.onChange(e.target.value)}\n\t\t\t/>\n\t\t\n\t);\n};\n","export class PasswordHelper {\n\tpublic static GenerateNewPassword(\n\t\tlowercase: number,\n\t\tuppercase: number,\n\t\tnumerics: number\n\t): string {\n\t\tconst lowers: string = \"abcdefghijklmnopqrstuvwxyz\";\n\t\tconst uppers: string = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\";\n\t\tconst numbers: string = \"0123456789\";\n\n\t\tlet generated: string[] = [];\n\t\tfor (let i: number = 1; i <= lowercase + uppercase + numerics; i++) {\n\t\t\tgenerated.push(\"!\");\n\t\t}\n\n\t\tlet j: number = 0;\n\t\twhile (j < 4) {\n\t\t\tconst index = Math.floor(Math.random() * generated.length);\n\t\t\tif (generated[index] === \"!\") {\n\t\t\t\tgenerated[index] = lowers[Math.floor(Math.random() * lowers.length)];\n\t\t\t\tj++;\n\t\t\t}\n\t\t}\n\n\t\tj = 0;\n\t\twhile (j < 4) {\n\t\t\tconst index = Math.floor(Math.random() * generated.length);\n\t\t\tif (generated[index] === \"!\") {\n\t\t\t\tgenerated[index] = uppers[Math.floor(Math.random() * uppers.length)];\n\t\t\t\tj++;\n\t\t\t}\n\t\t}\n\n\t\tj = 0;\n\t\twhile (j < 4) {\n\t\t\tconst index = Math.floor(Math.random() * generated.length);\n\t\t\tif (generated[index] === \"!\") {\n\t\t\t\tgenerated[index] = numbers[Math.floor(Math.random() * numbers.length)];\n\t\t\t\tj++;\n\t\t\t}\n\t\t}\n\n\t\tlet generatedString: string = \"\";\n\t\tgenerated.forEach((c) => (generatedString += c));\n\t\treturn generatedString;\n\t}\n}\n","import CloseIcon from \"@mui/icons-material/Close\";\nimport KeyIcon from \"@mui/icons-material/Key\";\nimport LightbulbIcon from \"@mui/icons-material/Lightbulb\";\nimport MarkEmailReadIcon from \"@mui/icons-material/MarkEmailRead\";\nimport PersonIcon from \"@mui/icons-material/Person\";\nimport ToggleOffIcon from \"@mui/icons-material/ToggleOff\";\nimport {\n\tAutocomplete,\n\tButton,\n\tCollapse,\n\tFormControlLabel,\n\tIconButton,\n\tRadio,\n\tRadioGroup,\n\tTextField,\n\tTypography,\n} from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { ICompany, IRole, ITemplate, IUser } from \"../../../../resources/Contracts\";\nimport { EmailTemplate } from \"../../../../resources/Enums\";\nimport Texts from \"../../../../resources/Texts\";\nimport { Service } from \"../../../../services/Service\";\nimport { actionCreators as AlertStoreActionCreators } from \"../../../../store/AlertStore\";\nimport { handleErrorMessage } from \"../../../../utils/utils\";\nimport { MultiselectFormField } from \"../../formControls/MultiselectFormField\";\nimport { TextFormField } from \"../../formControls/TextFormField\";\nimport { PasswordHelper } from \"../userForms/PasswordHelper\";\nimport \"./NewUserForm.scss\";\n\ntype NewUserFormProps = typeof AlertStoreActionCreators & {\n\topened: boolean;\n\treloadUsers: () => void;\n\tcloseCallback: () => void;\n};\n\nconst blankUser: IUser = {\n\tid: \"\",\n\tsurname: \"\",\n\tgivenName: \"\",\n\tdisplayName: \"\",\n\taccountEnabled: true,\n\tuserPrincipalName: \"\",\n\trolesAssigned: [],\n};\n\nconst NewUserForm: React.FC = (props) => {\n\tconst [companies, setCompanies] = React.useState([]);\n\tconst [roles, setRoles] = React.useState([]);\n\tconst [templates, setTemplates] = React.useState([]);\n\tconst [user, setUser] = React.useState();\n\n\tconst [companyValue, setCompanyValue] = React.useState(null);\n\n\tlet companySearchTimeout: NodeJS.Timeout;\n\n\tReact.useEffect(() => {\n\t\tloadCompanies();\n\t\tloadRoles();\n\t\tloadTemplates();\n\n\t\tsetUser(blankUser);\n\t}, []);\n\n\tconst loadCompanies = async (search?: string): Promise => {\n\t\ttry {\n\t\t\tconst companies: ICompany[] = await Service.getCompanies(search);\n\n\t\t\tsetCompanies(companies);\n\t\t} catch (error) {\n\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t}\n\t};\n\n\tconst loadRoles = async (): Promise => {\n\t\ttry {\n\t\t\tconst roles: IRole[] = await Service.getRoles();\n\n\t\t\tsetRoles(roles.sort((a, b) => (a.roleName < b.roleName ? -1 : 1)));\n\t\t} catch (error) {\n\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t}\n\t};\n\n\tconst loadTemplates = async (): Promise => {\n\t\ttry {\n\t\t\tconst result: ITemplate[] = [\n\t\t\t\t{\n\t\t\t\t\tid: \"1\",\n\t\t\t\t\tname: \"General - no specific portal\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tid: \"2\",\n\t\t\t\t\tname: \"Software Portal\",\n },\n {\n id: \"3\",\n name: \"License Portal\",\n },\n {\n id: \"4\",\n name: \"Reseller Portal\",\n },\n\t\t\t];\n\n\t\t\tresult.unshift({\n\t\t\t\tid: \"0\",\n\t\t\t\tname: \"None - do not send email\",\n\t\t\t});\n\n\t\t\tsetTemplates(result);\n\t\t} catch (error) {\n props.addErrorAlert(handleErrorMessage(error));\n props.addAlert({\n type: \"info\",\n text: Texts.Alerts.InfoUserUpdated,\n });\n\t\t}\n\t};\n\n\tconst handleCancelClick = (): void => {\n\t\tprops.closeCallback();\n\t\tsetUser(blankUser);\n\t};\n\n\tconst handleCreateClick = async (): Promise => {\n try {\n\n let continueProcessing = true;\n let errorMessage = \"\";\n\n\t if (user.mail?.toLowerCase().includes('@synamedia.com')) {\n\t\terrorMessage = Texts.Alerts.SynamediaUser;\n\t\tcontinueProcessing = false;\n\t } else {\n\t\terrorMessage = \"Cannot create user - please complete the missing fields: \";\n\t\tif (!user.companyName) { errorMessage += \"[Company] \"; continueProcessing = false; }\n\t\tif (!user.companyId) { errorMessage += \"[SynaCRM ID] \"; continueProcessing = false; }\n\t\tif (!user.displayName) { errorMessage += \"[Display name] \"; continueProcessing = false; }\n\t\tif (!user.emailTemplate) { errorMessage += \"[Welcome Template] \"; continueProcessing = false; }\n\t\tif (!user.givenName) { errorMessage += \"[First name] \"; continueProcessing = false; }\n\t\tif (!user.mail) { errorMessage += \"[Email / Login] \"; continueProcessing = false; }\n\t\tif (!user.password) { errorMessage += \"[Initial Password] \"; continueProcessing = false; }\n\t\tif (user.rolesAssigned.length < 1) { errorMessage += \"[Assigned Roles] \"; continueProcessing = false; }\n\t\tif (!user.surname) { errorMessage += \"[Last name] \"; continueProcessing = false; }\n\t }\n\n if (continueProcessing) {\n await Service.addUser(user);\n props.reloadUsers();\n props.addAlert({ type: \"info\", text: \"User \" + user.displayName + \" was created successfully\", });\n }\n else {\n props.addAlert({ type: \"warning\", text: errorMessage, });\n }\n } catch (error) {\n props.addErrorAlert(handleErrorMessage(error));\n\t\t}\n\t};\n\n\tconst givenNameHandler = (value: string) => {\n\t\tconst newUser: IUser = { ...user };\n\t\tnewUser.givenName = value;\n\t\tnewUser.displayName = `${newUser?.givenName} ${newUser?.surname}`;\n\t\tsetUser(newUser);\n\t};\n\n\tconst surnameHandler = (value: string) => {\n\t\tconst newUser: IUser = { ...user };\n\t\tnewUser.surname = value;\n\t\tnewUser.displayName = `${newUser?.givenName} ${newUser?.surname}`;\n\t\tsetUser(newUser);\n\t};\n\n\tconst displayNameHandler = (value: string) => {\n\t\tconst newUser: IUser = { ...user };\n\t\tnewUser.displayName = value;\n\t\tsetUser(newUser);\n\t};\n\n\tconst emailHandler = (value: string) => {\n\t\tconst newUser: IUser = { ...user };\n\t\tnewUser.mail = value;\n\t\tsetUser(newUser);\n\t};\n\n\tconst handleCompanyChange = (value: ICompany) => {\n\t\tconst newUser: IUser = { ...user };\n\t\tnewUser.companyName = value?.companyName;\n\t\tnewUser.companyId = value?.dynamicsId;\n\t\tsetUser(newUser);\n\t\tsetCompanyValue(value);\n\t};\n\n\tconst handleCompanySearchChange = (\n\t\tevent: React.ChangeEvent\n\t): void => {\n\t\tclearTimeout(companySearchTimeout);\n\n\t\tcompanySearchTimeout = setTimeout(() => {\n\t\t\tloadCompanies(event.target.value);\n\t\t}, 500);\n\t};\n\n\tconst passwordHandler = (value: string) => {\n\t\tconst newUser: IUser = { ...user };\n\t\tnewUser.password = value;\n\t\tsetUser(newUser);\n\t};\n\n\tconst suggestClickHandler = (): void => {\n\t\tconst newPass = PasswordHelper.GenerateNewPassword(4, 4, 4);\n\t\tconst newUser: IUser = { ...user };\n\t\tnewUser.password = newPass;\n\t\tsetUser(newUser);\n\t};\n\n\tconst handleRolesChange = (value: string[]) => {\n\t\tconst newUserValue: IUser = { ...user };\n\n\t\tconst rolesToAssign = roles.filter((role) =>\n\t\t\tvalue?.some((eventRoleId) => eventRoleId === role.id.toString())\n\t\t);\n\n\t\tnewUserValue.rolesAssigned = rolesToAssign;\n\n\t\tsetUser(newUserValue);\n\t};\n\n\tconst rolesData = roles.map((role) => {\n\t\treturn {\n\t\t\tid: role.id.toString(),\n\t\t\troleName: role.roleName,\n\t\t};\n\t});\n\n\tconst rolesValue = user?.rolesAssigned?.map((role) => {\n\t\treturn {\n\t\t\tid: role.id.toString(),\n\t\t\troleName: role.roleName,\n\t\t};\n\t});\n\n\tconst handleClickTemplate = (key: string) => {\n\t\tconst newUserValue: IUser = { ...user };\n\n\t\tlet emailTemplate = EmailTemplate.None;\n\t\tswitch (key) {\n\t\t\tcase \"1\":\n\t\t\t\temailTemplate = EmailTemplate.GeneralWelcome;\n\t\t\t\tbreak;\n\n\t\t\tcase \"2\":\n\t\t\t\temailTemplate = EmailTemplate.SoftwarePortal;\n\t\t\t\tbreak;\n\n case \"3\":\n emailTemplate = EmailTemplate.LicensePortal;\n break;\n\n case \"4\":\n emailTemplate = EmailTemplate.ResellerPortal;\n break;\n }\n\t\tnewUserValue.emailTemplate = emailTemplate;\n\t\tsetUser(newUserValue);\n\t};\n\n\treturn (\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{Texts.UsersView.NewUserForm.CreateNewUser}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t (\n\t\t\t\t\t\t\t\t loadCompanies()}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\tgetOptionLabel={(option: ICompany) => option.companyName}\n\t\t\t\t\t\t\tonChange={(event, value) => handleCompanyChange(value as ICompany)}\n />\n\n \n\n\t\t\t\t\t\n\n\t\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{Texts.UsersView.NewUserForm.InitialPassword.Hint}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t{Texts.UsersView.NewUserForm.InitialPassword.Suggest}\n\t\t\t\t\t\t\n\t\t\t\t\t\n\n\n\n\n\n\t\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{Texts.UsersView.NewUserForm.AssignedRoles.Hint}\n\t\t\t\t\t\t\n\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\n\n\t\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{Texts.UsersView.NewUserForm.WelcomeTemplate.Hint}\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{templates.map((template) => (\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tlabel={template.name}\n\t\t\t\t\t\t\t\t\t\tonClick={() => handleClickTemplate(template.id)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.UsersView.NewUserForm.Cancel}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.UsersView.NewUserForm.Create}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default connect(null, AlertStoreActionCreators)(NewUserForm);\n\ninterface UserFormColumnProps {\n\ttitle: string;\n\ticon: JSX.Element;\n}\n\nconst UserFormColumn: React.FC = (props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{props.icon}\n\t\t\t\t{props.title}\n\t\t\t\n\n\t\t\t{props.children}\n\t\t\n\t);\n};\n","import ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\nimport { CircularProgress, Typography } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { IApplication, IUser, IUserApplication } from \"../../../../resources/Contracts\";\nimport Texts from \"../../../../resources/Texts\";\nimport { Service } from \"../../../../services/Service\";\nimport { MultiselectFormField } from \"../../formControls/MultiselectFormField\";\nimport \"./AssignedApplicationsTab.scss\";\nimport { actionCreators as AlertStoreActionCreators } from \"../../../../store/AlertStore\";\nimport { handleErrorMessage } from \"../../../../utils/utils\";\nimport { connect } from \"react-redux\";\n\ntype AssignedApplicationsTabProps = typeof AlertStoreActionCreators & {\n\tdataItem: IUser;\n\tonChange: (newUserValue: IUser) => void;\n};\n\nconst AssignedApplicationsTab: React.FC = (props) => {\n\tconst [loading, setLoading] = React.useState(false);\n\tconst [apps, setApps] = React.useState([]);\n\tconst [selectedApps, setSelectedApps] = React.useState([]);\n\n\tReact.useEffect(() => {\n\t\tconst loadApps = async (): Promise => {\n\t\t\tsetLoading(true);\n\n\t\t\ttry {\n\t\t\t\tconst result: IApplication[] = await Service.getApplications();\n\t\t\t\tsetApps(result);\n\n\t\t\t\tconst userApplications: IUserApplication[] = await Service.getUserApplicationsByUserId(\n\t\t\t\t\tprops.dataItem.id\n\t\t\t\t);\n\t\t\t\tif (userApplications) {\n\t\t\t\t\tconst selectedUserApplications = result.filter((app) =>\n\t\t\t\t\t\tuserApplications?.some((ur) => app.id === ur.id)\n\t\t\t\t\t);\n\t\t\t\t\tsetSelectedApps(selectedUserApplications);\n }\n\t\t\t} catch (error) {\n\t\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t\t}\n\n\t\t\tsetLoading(false);\n\t\t};\n\n\t\tloadApps();\n\t}, []);\n\n\tReact.useEffect(() => {\n\t\tprops.onChange({\n\t\t\t...props.dataItem,\n\t\t\tappsAssigned: selectedApps,\n\t\t});\n\t}, [selectedApps]);\n\n\tconst handleAppsChange = (value: string[]) => {\n\t\tconst appsToAssign = apps.filter((app) =>\n\t\t\tvalue?.some((eventAppId) => eventAppId === app.id.toString())\n\t\t);\n\n\t\tsetSelectedApps(appsToAssign);\n\t};\n\n\tconst userDisabledWarning = (): JSX.Element => {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{!props.dataItem?.accountEnabled ? (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{Texts.UsersView.EditUserForm.Tabs.AssignedApps.DisabledUserWarning}\n\t\t\t\t\t\n\t\t\t\t) : null}\n\t\t\t\n\t\t);\n\t};\n\n\tconst appsData = apps?.map((app) => {\n\t\treturn {\n\t\t\tid: app.id.toString(),\n\t\t\troleName: app.title,\n\t\t};\n\t});\n\n\tconst appsValue = props.dataItem?.appsAssigned?.map((app) => {\n\t\treturn {\n\t\t\tid: app.id.toString(),\n\t\t\troleName: app.title,\n\t\t};\n\t});\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{Texts.UsersView.EditUserForm.Tabs.AssignedApps.Title}\n\t\t\t\t\n\n\t\t\t\t{userDisabledWarning()}\n\t\t\t\n\n\t\t\t{loading ? (\n\t\t\t\t\n\t\t\t) : (\n\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\nexport default connect(null, AlertStoreActionCreators)(AssignedApplicationsTab);\n","import ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\nimport { CircularProgress, Typography } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { IRole, IUser, IUserRole } from \"../../../../resources/Contracts\";\nimport Texts from \"../../../../resources/Texts\";\nimport { Service } from \"../../../../services/Service\";\nimport { MultiselectFormField } from \"../../formControls/MultiselectFormField\";\nimport \"./AssignedRolesTab.scss\";\nimport { actionCreators as AlertStoreActionCreators } from \"../../../../store/AlertStore\";\nimport { handleErrorMessage } from \"../../../../utils/utils\";\nimport { connect } from \"react-redux\";\n\ntype AssignedRolesTabProps = typeof AlertStoreActionCreators & {\n\tdataItem: IUser;\n\tonChange: (newUserValue: IUser) => void;\n};\n\nconst AssignedRolesTab: React.FC = (props) => {\n\tconst [loading, setLoading] = React.useState(false);\n\tconst [roles, setRoles] = React.useState([]);\n\tconst [selectedRoles, setSelectedRoles] = React.useState([]);\n\n\tReact.useEffect(() => {\n\t\tconst loadRoles = async (): Promise => {\n\t\t\tsetLoading(true);\n\n\t\t\ttry {\n\t\t\t\tconst result: IRole[] = await Service.getRoles();\n\n\t\t\t\tconst userRoles: IUserRole[] = await Service.getUserRolesByUserEmail(\n\t\t\t\t\tprops.dataItem.mail\n\t\t\t\t);\n\n\t\t\t\tconst selectedUserRoles = result.filter((role) =>\n\t\t\t\t\tuserRoles?.some((ur) => role.id === ur.roleId)\n\t\t\t\t);\n\n\t\t\t\tsetRoles(result);\n\t\t\t\tsetSelectedRoles(selectedUserRoles);\n\t\t\t} catch (error) {\n\t\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t\t}\n\n\t\t\tsetLoading(false);\n\t\t};\n\n\t\tloadRoles();\n\t}, []);\n\n\tReact.useEffect(() => {\n\t\tprops.onChange({\n\t\t\t...props.dataItem,\n\t\t\trolesAssigned: selectedRoles,\n\t\t});\n\t}, [selectedRoles]);\n\n\tconst handleRolesChange = (value: string[]) => {\n\t\tconst rolesToAssign = roles.filter((role) =>\n\t\t\tvalue?.some((eventRoleId) => eventRoleId === role.id.toString())\n\t\t);\n\n\t\tsetSelectedRoles(rolesToAssign);\n\t};\n\n\tconst userDisabledWarning = (): JSX.Element => {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t{!props.dataItem?.accountEnabled ? (\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t{Texts.UsersView.EditUserForm.Tabs.AssignedRoles.DisabledUserWarning}\n\t\t\t\t\t\n\t\t\t\t) : null}\n\t\t\t\n\t\t);\n\t};\n\n\tconst rolesData = roles?.map((role) => {\n\t\treturn {\n\t\t\tid: role.id.toString(),\n\t\t\troleName: role.roleName,\n\t\t};\n\t});\n\n\tconst rolesValue = props.dataItem?.rolesAssigned?.map((role) => {\n\t\treturn {\n\t\t\tid: role.id.toString(),\n\t\t\troleName: role.roleName,\n\t\t};\n\t});\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{Texts.UsersView.EditUserForm.Tabs.AssignedRoles.Title}\n\t\t\t\t\n\n\t\t\t\t{userDisabledWarning()}\n\t\t\t\n\n\t\t\t{loading ? (\n\t\t\t\t\n\t\t\t) : (\n\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\nexport default connect(null, AlertStoreActionCreators)(AssignedRolesTab);\n","import LightbulbIcon from \"@mui/icons-material/Lightbulb\";\nimport { Button, FormControlLabel, Radio, RadioGroup, Typography } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { ITemplate, IUser } from \"../../../../resources/Contracts\";\nimport Texts from \"../../../../resources/Texts\";\nimport { TextFormField } from \"../../formControls/TextFormField\";\nimport { PasswordHelper } from \"./PasswordHelper\";\nimport \"./PasswordTab.scss\";\n\ninterface PasswordTabProps {\n\tdataItem: IUser;\n\tonChange: (newUserValue: IUser) => void;\n}\n\nexport const PasswordTab: React.FC = (props) => {\n\tconst passwordHandler = (value: string) => {\n\t\tconst user: IUser = { ...props.dataItem };\n\t\tuser.password = value;\n\t\tprops.onChange(user);\n\t};\n\n\tconst suggestClickHandler = (): void => {\n\t\tconst newPass = PasswordHelper.GenerateNewPassword(4, 4, 4);\n\t\tconst user: IUser = { ...props.dataItem };\n\t\tuser.password = newPass;\n\t\tprops.onChange(user);\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t{Texts.UsersView.EditUserForm.Tabs.Password.ResetPasswordTitle}\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t{Texts.UsersView.EditUserForm.Tabs.Password.PasswordHint}\n\t\t\t\t\t{Texts.UsersView.EditUserForm.Tabs.Password.PasswordActionNotice}\n\t\t\t\t\n\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{Texts.UsersView.NewUserForm.InitialPassword.Suggest}\n\t\t\t\t\n\t\t\t\n\n\t\t\t\n\t\t\n\t);\n};\n","import { Autocomplete, TextField, Typography } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { ICompany, IUser } from \"../../../../resources/Contracts\";\nimport Texts from \"../../../../resources/Texts\";\nimport { Service } from \"../../../../services/Service\";\nimport { actionCreators as AlertStoreActionCreators } from \"../../../../store/AlertStore\";\nimport { handleErrorMessage } from \"../../../../utils/utils\";\nimport { TextFormField } from \"../../formControls/TextFormField\";\nimport \"./PersonalDetailsTab.scss\";\n\ntype PersonalDetailsTabProps = typeof AlertStoreActionCreators & {\n\tdataItem: IUser;\n\tonChange: (newUserValue: IUser) => void;\n};\n\nconst PersonalDetailsTab: React.FC = ({\n\tdataItem,\n\tonChange,\n\taddErrorAlert,\n}) => {\n\tconst [companies, setCompanies] = React.useState([]);\n\tconst [companyValue, setCompanyValue] = React.useState(null);\n\tconst [searchValue, setSearch] = React.useState(null);\n\n\tlet companySearchTimeout: NodeJS.Timeout;\n\n\tconst loadCompanies = React.useMemo(\n\t\t() => async (): Promise => {\n\t\t\ttry {\n\t\t\t\tconst companies: ICompany[] = await Service.getCompanies(searchValue);\n\n\t\t\t\tsetCompanies(companies);\n\t\t\t} catch (error) {\n\t\t\t\taddErrorAlert(handleErrorMessage(error));\n\t\t\t}\n\t\t},\n\t\t[searchValue, addErrorAlert]\n\t);\n\n\tconst loadUserCompany = React.useMemo(\n\t\t() => async (): Promise => {\n\t\t\tif (dataItem.companyName && dataItem.companyName !== companyValue?.companyName) {\n\t\t\t\ttry {\n\t\t\t\t\tconst companies: ICompany[] = await Service.getCompanies(dataItem.companyName);\n\n\t\t\t\t\tif (companies?.length > 0) {\n\t\t\t\t\t\tconst userCompany = companies.find(\n\t\t\t\t\t\t\t(c) => c.dynamicsId === dataItem.companyId\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tsetCompanyValue(userCompany);\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\taddErrorAlert(handleErrorMessage(error));\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t[dataItem, addErrorAlert]\n\t);\n\n\tReact.useEffect(() => {\n\t\tloadCompanies();\n\t}, [loadCompanies]);\n\n\tReact.useEffect(() => {\n\t\tloadUserCompany();\n\t}, [loadUserCompany]);\n\n\tconst displayNameHandler = (value: string) => {\n\t\tconst user: IUser = { ...dataItem };\n\t\tuser.displayName = value;\n\t\tonChange(user);\n\t};\n\n\tconst givenNameHandler = (value: string) => {\n\t\tconst user: IUser = { ...dataItem };\n\t\tuser.givenName = value;\n\t\tuser.displayName = `${user?.givenName} ${user?.surname}`;\n\t\tonChange(user);\n\t};\n\n\tconst surnameHandler = (value: string) => {\n\t\tconst user: IUser = { ...dataItem };\n\t\tuser.surname = value;\n\t\tuser.displayName = `${user?.givenName} ${user?.surname}`;\n\t\tonChange(user);\n\t};\n\n\tconst handleCompanyChange = (value: ICompany) => {\n\t\tconst user: IUser = { ...dataItem };\n\t\tuser.companyName = value?.companyName;\n\t\tuser.companyId = value?.dynamicsId;\n\t\tonChange(user);\n\t\tsetCompanyValue(value);\n\t};\n\n\tconst handleCompanySearchChange = (\n\t\tevent: React.ChangeEvent\n\t): void => {\n\t\tclearTimeout(companySearchTimeout);\n\n\t\tcompanySearchTimeout = setTimeout(() => {\n\t\t\tsetSearch(event.target.value);\n\t\t}, 500);\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{Texts.UsersView.EditUserForm.Tabs.PersonalDetails.Title}\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\n\t\t\t\t\t (\n\t\t\t\t\t\t\t loadCompanies()}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tgetOptionLabel={(option: ICompany) => option.companyName}\n\t\t\t\t\t\tonChange={(event, value) => handleCompanyChange(value as ICompany)}\n />\n\n \n\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default connect(null, AlertStoreActionCreators)(PersonalDetailsTab);\n","import { Button, Collapse, IconButton, Tab, Tabs } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport Texts from \"../../../../resources/Texts\";\nimport CompanyDetailsTab from \"./CompanyDetailsTab\";\nimport \"./EditCompanyForm.scss\";\n//import PersonIcon from \"@mui/icons-material/Person\";\nimport ToggleOffIcon from \"@mui/icons-material/ToggleOff\";\n//import KeyIcon from \"@mui/icons-material/Key\";\nimport { ICompany, ICompanyView } from \"../../../../resources/Contracts\";\nimport { Service } from \"../../../../services/Service\";\nimport { actionCreators as AlertStoreActionCreators } from \"../../../../store/AlertStore\";\nimport { handleErrorMessage } from \"../../../../utils/utils\";\nimport { connect } from \"react-redux\";\nimport isDomainValid from \"../../../shared/utils\";\n\nenum EditCompanyFormTabs {\n\tApplications,\n\tRoles,\n\tPassword,\n\tDetails,\n}\n\ntype EditCompanyFormProps = typeof AlertStoreActionCreators & {\n\topened: boolean;\n\tcloseCallback: () => void;\n\t//dataItem: ICompany;\n\t//updateCompany: (company: ICompany) => void;\n\tdataItem: ICompanyView;\n\tupdateCompany: (company: ICompanyView) => void;\n};\n\nconst EditCompanyForm: React.FC = (props) => {\n\tconst [selectedTab, setSelectedTab] = React.useState(\n\t\tEditCompanyFormTabs.Details\n\t);\n\tconst [company, setCompany] = React.useState(props.dataItem);\n\n\tconst handleTabChange = (event, value: EditCompanyFormTabs): void => {\n\t\tsetSelectedTab(value);\n\t};\n\n\tconst handleCancelClick = (): void => {\n\t\tsetCompany(props.dataItem);\n\n\t\tprops.closeCallback();\n\t};\n\n\tconst handleSaveClick = async (): Promise => {\n\t\ttry {\n\t\t\tif (!await isDomainValid(company.domain)) {\n\t\t\t\tprops.addErrorAlert(`${company.domain} is not a valid domain.`);\n\t\t\t} else {\n\t\t\t\tawait Service.updateCompany(company);\n\n\t\t\t\tprops.updateCompany(company);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t}\n\n\t\tprops.closeCallback();\n\t};\n\n\tconst handleChange = (newCompanyValue: ICompanyView) => {\n\t\tsetCompany(newCompanyValue);\n\t};\n\n\treturn (\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\t\t\n\t\t\t\t\t\t\t\t\t{Texts.CompaniesView.EditCompanyForm.Tabs.CompanyDetails.TabLabel}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue={EditCompanyFormTabs.Details}\n\t\t\t\t\t\t\tclassName=\"tab\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t{selectedTab === EditCompanyFormTabs.Details && (\n\t\t\t\t\t\n\t\t\t\t)}\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.CompaniesView.EditCompanyForm.Buttons.Cancel}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.CompaniesView.EditCompanyForm.Buttons.Save}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default connect(null, AlertStoreActionCreators)(EditCompanyForm);\n","import DeleteIcon from \"@mui/icons-material/Delete\";\nimport EditIcon from \"@mui/icons-material/Edit\";\nimport {\n\tButton,\n\tDialog,\n\tDialogActions,\n\tDialogContent,\n\tDialogContentText,\n\tDialogTitle,\n\tFormControlLabel,\n\tIconButton,\n\tSwitch,\n\tTableCell,\n\tTableRow,\n} from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { IUser } from \"../../../resources/Contracts\";\nimport Texts from \"../../../resources/Texts\";\nimport { Service } from \"../../../services/Service\";\nimport { actionCreators as AlertStoreActionCreators } from \"../../../store/AlertStore\";\nimport { handleErrorMessage } from \"../../../utils/utils\";\nimport EditUserForm from \"./userForms/EditUserForm\";\nimport \"./UsersTableRow.scss\";\n\ntype UsersTableRowProps = typeof AlertStoreActionCreators & {\n\tdataItem: IUser;\n\tupdateUser: (user: IUser) => void;\n\tdeleteUser: (userId: string) => void;\n};\n\nconst UsersTableRow: React.FC = (props) => {\n\tconst [detailOpened, setDetailOpened] = React.useState();\n\tconst [openDeleteDialog, setOpenDeleteDialog] = React.useState(false);\n\tconst [openEnableDialog, setOpenEnableDialog] = React.useState(false);\n\tconst [openDisableDialog, setOpenDisableDialog] = React.useState(false);\n\n\tconst handleOpen = (): void => {\n\t\tsetDetailOpened(true);\n\t};\n\n\tconst handleClose = (): void => {\n\t\tsetDetailOpened(false);\n\t};\n\n\tconst handleSwitchAccountEnabled = (\n\t\tevent: React.ChangeEvent,\n\t\tchecked: boolean\n\t): void => {\n\t\tif (checked) {\n\t\t\tsetOpenEnableDialog(true);\n\t\t} else {\n\t\t\tsetOpenDisableDialog(true);\n\t\t}\n\t};\n\n\tconst switchColumn = (): JSX.Element => {\n const label: string = props.dataItem.accountEnabled ? \"Enabled\" : \"Disabled\";\n\t\treturn (\n\t\t\t\n\t\t\t\t}\n\t\t\t\tlabel={label}\n\t\t\t\tsx={{ width: \"125px\" }}\n\t\t\t/>\n\t\t);\n\t};\n\n\tconst deleteClickHandler = (): void => {\n\t\tsetOpenDeleteDialog(true);\n\t};\n\n\tconst handleDeleteUser = async (): Promise => {\n\t\tsetOpenDeleteDialog(false);\n\n\t\ttry {\n\t\t\tawait Service.deleteUser(props.dataItem.id);\n\t\t\tprops.deleteUser(props.dataItem.id);\n\t\t} catch (error) {\n\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t}\n\t};\n\n\tconst handleUserEnabledChange = async (): Promise => {\n\t\tsetOpenDisableDialog(false);\n\t\tsetOpenEnableDialog(false);\n\n\t\ttry {\n\t\t\tconst userCopy: IUser = {\n\t\t\t\t...props.dataItem,\n\t\t\t\taccountEnabled: !props.dataItem.accountEnabled,\n\t\t\t};\n\n\t\t\tawait Service.updateUser(userCopy);\n\t\t\tprops.updateUser(userCopy);\n\t\t} catch (error) {\n\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t}\n\t};\n\n\tconst actionsColumn = (): JSX.Element => {\n\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\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\tlet rowClassName: string = \"usersTable-row\";\n\n\tif (!props.dataItem.accountEnabled) {\n\t\trowClassName = rowClassName + \" disabled\";\n\t}\n\n\tif (detailOpened) {\n\t\trowClassName = rowClassName + \" opened\";\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{props.dataItem.displayName}\n\t\t\t\t{props.dataItem.companyName}\n\t\t\t\t\n\t\t\t\t\t{props.dataItem.mail}\n\t\t\t\t\n\t\t\t\t{switchColumn()}\n\t\t\t\t{actionsColumn()}\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t setOpenDeleteDialog(false)}\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\n\t\t\t\taria-describedby=\"alert-dialog-description\"\n\t\t\t\tclassName=\"dialog\"\n\t\t\t>\n\t\t\t\t{Texts.Dialogs.DeleteUserTitle}\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.Dialogs.ConfirmDeleteText}\n\t\t\t\t\t\t{props.dataItem.displayName}\n\t\t\t\t\t\t{Texts.Dialogs.ConfirmationText}\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t setOpenDeleteDialog(false)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{Texts.Dialogs.Buttons.CancelDialog}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.Dialogs.Buttons.DeleteAccount}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t setOpenEnableDialog(false)}\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\n\t\t\t\taria-describedby=\"alert-dialog-description\"\n\t\t\t\tclassName=\"dialog\"\n\t\t\t>\n\t\t\t\t{Texts.Dialogs.ConfirmEnable}\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.Dialogs.ConfirmEnableText}\n\t\t\t\t\t\t{props.dataItem.displayName}\n\t\t\t\t\t\t{Texts.Dialogs.ConfirmationText}\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t setOpenEnableDialog(false)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{Texts.Dialogs.Buttons.CancelDialog}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.Dialogs.Buttons.EnableAccount}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t setOpenDisableDialog(false)}\n\t\t\t\taria-labelledby=\"alert-dialog-title\"\n\t\t\t\taria-describedby=\"alert-dialog-description\"\n\t\t\t\tclassName=\"dialog\"\n\t\t\t>\n\t\t\t\t{Texts.Dialogs.ConfirmDisable}\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.Dialogs.ConfirmDisableText}\n\t\t\t\t\t\t{props.dataItem.displayName}\n\t\t\t\t\t\t{Texts.Dialogs.ConfirmationText}\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t setOpenDisableDialog(false)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{Texts.Dialogs.Buttons.CancelDialog}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.Dialogs.Buttons.DisableAccount}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default connect(null, AlertStoreActionCreators)(UsersTableRow);\n","import PersonAddIcon from \"@mui/icons-material/PersonAdd\";\nimport SortIcon from \"@mui/icons-material/Sort\";\nimport {\n\tButton,\n\tCircularProgress,\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableContainer,\n\tTableHead,\n\tTableRow,\n\tTextField,\n\tTypography,\n} from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { IUser, IUsersRequest, IUsersResponse } from \"../../../resources/Contracts\";\nimport Texts from \"../../../resources/Texts\";\nimport { Service } from \"../../../services/Service\";\nimport { actionCreators as AlertStoreActionCreators } from \"../../../store/AlertStore\";\nimport { handleErrorMessage } from \"../../../utils/utils\";\nimport GraphPagination from \"../../shared/GraphPagination\";\nimport NewUserForm from \"./userForms/NewUserForm\";\nimport \"./UsersTable.scss\";\nimport UsersTableRow from \"./UsersTableRow\";\n\ntype UsersTableProps = typeof AlertStoreActionCreators & {};\nconst UsersTable: React.FC = (props) => {\n\tconst [usersData, setUsersData] = React.useState([]);\n\tconst [sortDir, setSortDir] = React.useState<\"asc\" | \"desc\" | null>(\"asc\");\n\tconst [orderBy, setOrderBy] = React.useState(\"displayName\");\n\tconst [orderByType, setOrderByType] = React.useState<\"string\" | \"boolean\" | null>(null);\n\tconst [newFormOpened, setNewFormOpened] = React.useState(false);\n\tconst [loading, setLoading] = React.useState(true);\n\tconst [searchText, setSearchText] = React.useState(\"\");\n\tconst [currentSkipToken, setCurrentSkipToken] = React.useState(\"\");\n\tconst [newSkipToken, setNewSkipToken] = React.useState(\"\");\n\tconst [nextPageDisabled, setNextPageDisabled] = React.useState(false);\n\tconst [currentPage, setCurrentPage] = React.useState(0);\n\tconst [totalPages, setTotalPages] = React.useState(0);\n\t//const [allPagesLoaded, setAllPagesLoaded] = React.useState(false);\n\tconst [lastPage, setLastPage] = React.useState(0);\n\n\tlet searchTimeout: NodeJS.Timeout;\n\tconst numberOfUsersPerPage: number = 12; // was 20 \n\n\tconst history = useHistory();\n\n\tconst loadUsers = React.useCallback(async () => {\n\t\tsetLoading(true);\n\t\tsetCurrentPage(0);\n\n\t\ttry {\n\t\t\tconst requestBody: IUsersRequest = {\n\t\t\t\tfilter: searchText,\n\t\t\t\torderBy: orderBy,\n\t\t\t\torderDir: sortDir,\n\t\t\t\tskipToken: newSkipToken,\n\t\t\t\tpageSize: numberOfUsersPerPage\n\t\t\t};\n\n\t\t\tconst result: IUsersResponse = (await Service.getUsersData(requestBody))[0];\n\n\t\t\tconst resultSkipToken: string = result?.queryOption?.find(\n\t\t\t\t(qo) => qo.name === \"$skiptoken\"\n\t\t\t)?.value;\n\n\t\t\tif (result) {\n\t\t\t\tsetUsersData(result.users);\n\t\t\t}\n\n\t\t\tif (resultSkipToken) {\n\t\t\t\tsetNewSkipToken(resultSkipToken);\n\t\t\t\tsetNextPageDisabled(false);\n\t\t\t} else {\n\t\t\t\tsetNextPageDisabled(true);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t}\n\n\t\tsetLoading(false);\n\t}, [searchText, orderBy, sortDir]);\n\n\tReact.useEffect(() => {\n\t\tloadUsers();\n\t}, [loadUsers]);\n\n\tconst loadNewPageOfUsers = async (loadPreviousPage: boolean) => {\n\t\tif (loadPreviousPage) {\n\t\t\tsetCurrentPage(currentPage - 1);\n\t\t\tsetNextPageDisabled(false);\n\t\t} else {\n\t\t\tconst totalNumberOfPages: number = Math.ceil(usersData.length / numberOfUsersPerPage);\n\t\t\tsetTotalPages(totalNumberOfPages);\n\t\t\tif(currentPage+1 == lastPage) setNextPageDisabled(true);\n\t\t\telse setNextPageDisabled(false);\n\t\t\t//console.log(\"totalPages: \" + totalNumberOfPages);\n\t\t\t//setNextPageDisabled(allPagesLoaded);\n\n\t\t\t//We need to add +1 to currentpage, because currentPage starts from 0 for slicing purposes\n\t\t\tif (currentPage + 1 < totalNumberOfPages) {\n\t\t\t\tsetCurrentPage(currentPage+1);\n\t\t\t\tconsole.log(\"faf\");\n\t\t\t} else {\n\t\t\t\tsetLoading(true);\n\t\t\t\tsetCurrentSkipToken(newSkipToken);\n\n\t\t\t\ttry {\n\t\t\t\t\tconst requestBody: IUsersRequest = {\n\t\t\t\t\t\tfilter: searchText,\n\t\t\t\t\t\torderBy: orderBy,\n\t\t\t\t\t\torderDir: sortDir,\n\t\t\t\t\t\tskipToken: newSkipToken,\n\t\t\t\t\t};\n\n\t\t\t\t\tconst result: IUsersResponse = (await Service.getUsersData(requestBody))[0];\n\t\t\t\t\tconst resultSkipToken: string = result?.queryOption?.find(\n\t\t\t\t\t\t(qo) => qo.name === \"$skiptoken\"\n\t\t\t\t\t).value;\n\n\t\t\t\t\tif (resultSkipToken) {\n\t\t\t\t\t\tconst extendedUserData: IUser[] = usersData.concat(result.users);\n\t\t\t\t\t\tsetNewSkipToken(resultSkipToken);\n\t\t\t\t\t\tsetUsersData(extendedUserData);\n\t\t\t\t\t\tsetCurrentPage(currentPage + 1);\n\t\t\t\t\t\tsetNextPageDisabled(false);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// graph does not return a skiptoken for the last page of results, so check if there were any Users returned\n\t\t\t\t\t\tif(result.users.length > 0){\n\t\t\t\t\t\t\tconst lastPageOfUserData: IUser[] = usersData.concat(result.users);\n\t\t\t\t\t\t\tsetUsersData(lastPageOfUserData);\n\t\t\t\t\t\t\tsetCurrentPage(currentPage+1);\n\t\t\t\t\t\t\tsetLastPage(currentPage+2);\n\t\t\t\t\t\t\tconsole.log(\"graph: NO skip token, current: \" + currentPage);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (error) {\n\t\t\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t\t\t}\n\n\t\t\t\tsetLoading(false);\n\t\t\t}\n\t\t}\n\t};\n\n\tconst reloadUsers = async (): Promise => {\n\t\tsetLoading(true);\n\t\tsetNewFormOpened(false);\n\n\t\ttry {\n\t\t\tconst requestBody: IUsersRequest = {\n\t\t\t\tfilter: searchText,\n\t\t\t\torderBy: orderBy,\n\t\t\t\torderDir: sortDir,\n\t\t\t\tskipToken: currentSkipToken,\n\t\t\t};\n\n\t\t\tconst result: IUsersResponse = (await Service.getUsersData(requestBody))[0];\n\n\t\t\tif (result) {\n\t\t\t\tsetUsersData(result.users);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t}\n\n\t\tsetLoading(false);\n\t};\n\n\tconst updateUser = (updatedUser: IUser): void => {\n\t\tconst usersDataCopy: IUser[] = usersData.slice();\n\t\tconst indexOfUpdatedUser: number = usersDataCopy.findIndex((u) => u.id === updatedUser.id);\n\n\t\tusersDataCopy[indexOfUpdatedUser] = updatedUser;\n\n\t\tsetUsersData(usersDataCopy);\n\n\t\tprops.addAlert({\n\t\t\ttype: \"info\",\n\t\t\ttext: Texts.Alerts.InfoUserUpdated,\n\t\t});\n\t};\n\n\tconst deleteUser = (userId: string): void => {\n\t\tconst indexOfDeletedUser: number = usersData.findIndex((u) => u.id === userId);\n\n\t\tconst usersDataCopy: IUser[] = usersData.slice();\n\t\tusersDataCopy.splice(indexOfDeletedUser, 1);\n\n\t\tsetUsersData(usersDataCopy);\n\n\t\tprops.addAlert({\n\t\t\ttype: \"info\",\n\t\t\ttext: Texts.Alerts.InfoUserDeleted,\n\t\t});\n\n\t\tsetTimeout(() => {\n\t\t\tprops.removeAlert();\n\t\t}, 5000);\n\t};\n\n\t// Sorting\n\tconst handleSortChange = (orderByField: string, obt: typeof orderByType): void => {\n\t\tsetCurrentSkipToken(\"\");\n\t\tsetNewSkipToken(\"\");\n\n\t\tif (orderBy && orderBy === orderByField) {\n\t\t\tif (!sortDir) {\n\t\t\t\tsetSortDir(\"asc\");\n\t\t\t} else if (sortDir === \"asc\") {\n\t\t\t\tsetSortDir(\"desc\");\n\t\t\t} else if (sortDir === \"desc\") {\n\t\t\t\tsetSortDir(null);\n\t\t\t\tsetOrderBy(null);\n\t\t\t\tsetOrderByType(null);\n\t\t\t}\n\t\t} else {\n\t\t\tsetSortDir(\"asc\");\n\t\t\tsetOrderBy(orderByField);\n\t\t\tsetOrderByType(obt);\n\t\t}\n\t};\n\n\tconst handleLoadNextPage = () => {\n\t\tloadNewPageOfUsers(false);\n\t};\n\n\tconst handleLoadPrevPage = () => {\n\t\tloadNewPageOfUsers(true);\n\t};\n\n\tconst handleNewFormOpen = (): void => {\n\t\tsetNewFormOpened(true);\n\t};\n\n\tconst handleSearchChange = (searchValue: string) => {\n\t\tclearTimeout(searchTimeout);\n\n\t\tsearchTimeout = setTimeout(() => {\n\t\t\tsetCurrentSkipToken(\"\");\n\t\t\tsetNewSkipToken(\"\");\n\t\t\tsetSearchText(searchValue);\n\t\t}, 500);\n\t};\n\n\tconst tableColumnHeader = (\n\t\ttext: string,\n\t\tfield: string,\n\t\tdataType: typeof orderByType,\n\t\talign: string\n\t): JSX.Element => {\n\t\tconst iconClassName: string =\n\t\t\tfield === orderBy ? \"icon icon-sort selected\" : \"icon icon-sort\";\n\n\t\treturn (\n\t\t\t handleSortChange(field, dataType)}\n\t\t\t\tclassName=\"usersTable-headerCell\"\n\t\t\t>\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{text}\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{Texts.UsersView.AddUser}\n\t\t\t\t\n\t\t\t\t handleSearchChange(event.target.value)}\n\t\t\t\t/>\n\t\t\t\n\n\t\t\t\n\t\t\t\n \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{tableColumnHeader(\n\t\t\t\t\t\t\t\t\tTexts.UsersView.TableColumns.Name,\n\t\t\t\t\t\t\t\t\t\"displayName\",\n\t\t\t\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\t\t\t\"left\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{Texts.UsersView.TableColumns.Company}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t{tableColumnHeader(\n\t\t\t\t\t\t\t\t\tTexts.UsersView.TableColumns.Login,\n\t\t\t\t\t\t\t\t\t\"userPrincipalName\",\n\t\t\t\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\t\t\t\"left\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{Texts.UsersView.TableColumns.Status}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{Texts.UsersView.TableColumns.Actions}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\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\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t setNewFormOpened(false)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{usersData\n\t\t\t\t\t\t\t\t\t\t?.slice(\n\t\t\t\t\t\t\t\t\t\t\tcurrentPage * numberOfUsersPerPage,\n\t\t\t\t\t\t\t\t\t\t\tcurrentPage * numberOfUsersPerPage +\n\t\t\t\t\t\t\t\t\t\t\t\tnumberOfUsersPerPage\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t.map((user) => (\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n};\n\nexport default connect(null, AlertStoreActionCreators)(UsersTable);\n","import { Container, Typography } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport \"./UserAdministration.scss\";\nimport UsersTable from \"../../../components/administration/users/UsersTable\";\nimport Texts from \"../../../resources/Texts\";\n\ninterface UserAdministrationProps {}\n\nconst UserAdministration: React.FunctionComponent = () => {\n\treturn (\n\t\t\n \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.UsersView.Title}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.UsersView.Subtitle}\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default UserAdministration;\n","import { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport ArrowBackIosIcon from \"@mui/icons-material/ArrowBackIos\";\nimport ArrowForwardIosIcon from \"@mui/icons-material/ArrowForwardIos\";\nimport \"./Pagination.scss\";\nimport { IconButton } from \"@mui/material\";\n\ninterface PaginationProps {\n\tonNextPage: () => void;\n\tonPrevPage: () => void;\n\tnextPageDisabled: boolean;\n\tprevPageDisabled: boolean;\n\tthisPage: number;\n\tnumberOfPages: number;\n}\n\nconst Pagination: React.FC = (props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t{props.thisPage} / {props.numberOfPages}\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default Pagination;\n","const isDomainValid = async (domain: string): Promise => {\n try {\n const domainRegex = /^(?!:\\/\\/)([a-zA-Z0-9-_]{1,63}\\.)+[a-zA-Z]{2,6}$/;\n if (!domainRegex.test(domain)) return false;\n\n const response = await fetch(`https://dns.google/resolve?name=${domain}`);\n const data = await response.json();\n return data.Status === 0;\n } catch (error) {\n return false;\n }\n}\n\nexport default isDomainValid;\n","import CompanyAddIcon from \"@mui/icons-material/Castle\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport {\n\tAutocomplete,\n\tButton,\n\tCollapse,\n\tIconButton,\n\tTextField,\n\tTypography,\n} from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { ICompany, ICompanyView } from \"../../../../resources/Contracts\";\nimport { EmailTemplate } from \"../../../../resources/Enums\";\nimport Texts from \"../../../../resources/Texts\";\nimport { Service } from \"../../../../services/Service\";\nimport { actionCreators as AlertStoreActionCreators } from \"../../../../store/AlertStore\";\nimport { handleErrorMessage } from \"../../../../utils/utils\";\nimport { MultiselectFormField } from \"../../formControls/MultiselectFormField\";\nimport { TextFormField } from \"../../formControls/TextFormField\";\nimport \"./NewCompanyForm.scss\";\nimport isDomainValid from \"../../../shared/utils\";\n\ntype NewCompanyFormProps = typeof AlertStoreActionCreators & {\n\topened: boolean;\n\treloadCompanies: () => void;\n\tcloseCallback: () => void;\n};\n\nconst blankCompany: ICompanyView = {\n\tid: null,\n \tcompanyName: \"\",\n \tdynamicsId: \"\",\n \tdescription: \"\",\n \tdomain: \"\"\n};\n\nconst NewCompanyForm: React.FC = (props) => {\n\tconst [companiesCrm, setCompaniesCrm] = React.useState([]);\n\tconst [company, setCompany] = React.useState();\n\tconst [companyValue, setCompanyValue] = React.useState(null);\n\n\tlet companySearchTimeout: NodeJS.Timeout;\n\n\tReact.useEffect(() => {\n\t\tloadCompanies();\n\t\tsetCompany(blankCompany);\n\t}, []);\n\t\n\tconst loadCompanies = async (search?: string): Promise => {\n\t\ttry {\n\t\t\tconst validCrmCompanies: ICompanyView[] = await Service.getCrmData(search);\n\t\t\tsetCompaniesCrm(validCrmCompanies);\n\t\t} catch (error) {\n\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t}\n\t};\n\n\tconst handleCancelClick = (): void => {\n\t\tsetCompany(blankCompany);\n\t\tprops.closeCallback();\n\t};\n\n\tconst handleCrmCompanyChange = (value: ICompanyView) => {\n\t\tconst newCompany: ICompanyView = { ...company };\n\t\tnewCompany.companyName = value?.companyName;\n\t\tnewCompany.dynamicsId = value?.dynamicsId;\n\t\tnewCompany.description = value?.description;\n\t\tnewCompany.domain = value?.domain;\n\t\tsetCompanyValue(newCompany);\n\t};\n\n\tconst handleCreateClick = async (): Promise => {\n\t\ttry {\n\t\t\tlet continueProcessing = true;\n\t\t\tlet errorText = \"Cannot create company - please complete the missing fields: \";\n\t\t\tif (companyValue.companyName == null) {\n\t\t\t\terrorText += \"[Company] \";\n\t\t\t\tcontinueProcessing = false;\n\t\t\t}\n\t\t\tif (companyValue.dynamicsId == null) {\n\t\t\t\terrorText += \"[SynaCRM Account Number] \";\n\t\t\t\tcontinueProcessing = false;\n\t\t\t}\n\t\t\tif (companyValue.domain == null) {\n\t\t\t\terrorText += \"[Domain] \";\n\t\t\t\tcontinueProcessing = false;\n\t\t\t} else {\n\t\t\t\tif (!await isDomainValid(companyValue.domain)) {\n\t\t\t\t\tconst dnsError = `${companyValue.domain} is not a valid domain. `;\n\t\t\t\t\terrorText = continueProcessing ? dnsError: dnsError + errorText;\n\t\t\t\t\tcontinueProcessing = false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (continueProcessing) {\n\t\t\t\tawait Service.addCompany(companyValue);\n\t\t\t\tprops.reloadCompanies();\n\t\t\t\tprops.addAlert({type: \"info\", text: \"Company \" + companyValue.companyName + \" was added successfully\",});\n\t\t\t} else {\n\t\t\t\tprops.addAlert({type: \"warning\", text: errorText});\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tprops.addErrorAlert(error.response.data[1]);\n\t\t}\n\t};\n\n const dynamicsIdHandler = (value: string) => {\n\t\t//const newCompany: ICompany = { ...company };\n\t\t//newCompany.dynamicsId = value;\n\t\t//setCompanyValue(newCompany);\n\t};\n\n const domainHandler = (value: string) => {\n\t\tconst newCompany: ICompanyView = { ...companyValue };\n\t\tnewCompany.domain = value;\n\t\tsetCompanyValue(newCompany);\n\t};\n\n\tconst handleCompanySearchChange = (\n\t\tevent: React.ChangeEvent\n\t): void => {\n\t\tclearTimeout(companySearchTimeout);\n\n\t\tcompanySearchTimeout = setTimeout(() => {\n\t\t\tloadCompanies(event.target.value);\n\t\t}, 500);\n\t};\n \t\n\treturn (\n\t\t\n\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\t{Texts.CompaniesView.NewCompanyForm.CreateNewCompany}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\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 loadCompanies()}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\tgetOptionLabel={(option: ICompanyView) => option.companyName}\n\t\t\t\t\t\tonChange={(event, value) => handleCrmCompanyChange(value as ICompanyView)}\n \t\t\t\t/>\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.CompaniesView.NewCompanyForm.Cancel}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.CompaniesView.NewCompanyForm.Create}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\n/*\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n*/\n\n\nexport default connect(null, AlertStoreActionCreators)(NewCompanyForm);\n\ninterface CompanyFormColumnProps {\n\ttitle: string;\n\ticon: JSX.Element;\n}\n\nconst CompanyFormColumn: React.FC = (props) => {\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\n\t\t\t{props.children}\n\t\t\n\t);\n};\n","import { Autocomplete, TextField, Typography } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { ICompany, ICompanyView } from \"../../../../resources/Contracts\";\nimport Texts from \"../../../../resources/Texts\";\nimport { Service } from \"../../../../services/Service\";\nimport { actionCreators as AlertStoreActionCreators } from \"../../../../store/AlertStore\";\nimport { handleErrorMessage } from \"../../../../utils/utils\";\nimport { TextFormField } from \"../../formControls/TextFormField\";\nimport \"./CompanyDetailsTab.scss\";\n\ntype CompanyDetailsTabProps = typeof AlertStoreActionCreators & {\n\t//dataItem: ICompany; \n\t//onChange: (newCompanyValue: ICompany) => void;\n\tdataItem: ICompanyView; \n\tonChange: (newCompanyValue: ICompanyView) => void;\n};\n\nconst CompanyDetailsTab: React.FC = ({\n\tdataItem,\n\tonChange,\n\taddErrorAlert,\n}) => {\n\tconst [companies, setCompanies] = React.useState([]);\n\tconst [companyValue, setCompanyValue] = React.useState(null);\n\tconst [searchValue, setSearch] = React.useState(null);\n\n\tconst [crmCompanies, setCrmCompanies] = React.useState([]);\n\tconst [crmCompanyValue, setCrmCompanyValue] = React.useState(null);\n\tconst [crmSearchValue, setCrmSearch] = React.useState(null);\n\n\tlet companySearchTimeout: NodeJS.Timeout;\n\tlet crmCompanySearchTimeout: NodeJS.Timeout;\n/*\n\tconst loadCompanies = React.useMemo(\n\t\t() => async (): Promise => {\n\t\t\ttry {\n\t\t\t\tconst companies: ICompanyView[] = await Service.getCompanies(searchValue);\n\n\t\t\t\tsetCompanies(companies);\n\t\t\t} catch (error) {\n\t\t\t\taddErrorAlert(handleErrorMessage(error));\n\t\t\t}\n\t\t},\n\t\t[searchValue, addErrorAlert]\n\t);\n*/\n\tconst loadCrmCompanies = React.useMemo(\n\t\t() => async (): Promise => {\n\t\t\ttry {\n\t\t\t\tconst crmCompanies: ICompanyView[] = await Service.getCrmData(searchValue);\n\n\t\t\t\tsetCrmCompanies(crmCompanies);\n\t\t\t} catch (error) {\n\t\t\t\taddErrorAlert(handleErrorMessage(error));\n\t\t\t}\n\t\t},\n\t\t[crmSearchValue, addErrorAlert]\n\t);\n /*\n\tReact.useEffect(() => {\n\t\tloadCompanies();\n\t}, [loadCompanies]);\n*/\n\tReact.useEffect(() => {\n\t\tloadCrmCompanies();\n\t}, [loadCrmCompanies]);\n\n \n\tconst handleCrmCompanyChange = (value: ICompanyView) => {\n\t\tconst company: ICompanyView = { ...dataItem };\n\t\tcompany.companyName = value?.companyName;\n\t\tcompany.dynamicsId = value?.dynamicsId;\n\t\tcompany.description = value?.description;\n\t\tonChange(company);\n\t\tsetCompanyValue(value);\n\t};\n \n\n const companyNameHandler = (value: string) => {\n\t\tconst company: ICompanyView = { ...dataItem };\n\t\tcompany.companyName = value;\n\t\tonChange(company);\n\t};\n\n const dynamicsIdHandler = (value: string) => {\n\t\tconst company: ICompanyView = { ...dataItem };\n\t\tcompany.dynamicsId = value;\n\t\tonChange(company);\n\t};\n\n const domainHandler = (value: string) => {\n\t\tconst company: ICompanyView = { ...dataItem };\n\t\tcompany.domain = value;\n\t\tonChange(company);\n\t};\n\n\tconst descriptionHandler = (value: string) => {\n\t\tconst company: ICompanyView = { ...dataItem };\n\t\tcompany.description = value;\n\t\tonChange(company);\n\t};\n\n \tconst idHandler = (value: string) => {\n\t\tconst company: ICompanyView = { ...dataItem };\n\t\tcompany.domain = value;\n\t\t//onChange(company);\n\t};\n \n\tconst handleCrmCompanySearchChange = (\n\t\tevent: React.ChangeEvent\n\t): void => {\n\t\tclearTimeout(crmCompanySearchTimeout);\n\n\t\tcrmCompanySearchTimeout = setTimeout(() => {\n\t\t\tsetCrmSearch(event.target.value);\n\t\t}, 500);\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{Texts.CompaniesView.EditCompanyForm.Tabs.CompanyDetails.Title}\n\t\t\t\n\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n \n\t\t \n \n \n\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default connect(null, AlertStoreActionCreators)(CompanyDetailsTab);\n","import EditIcon from \"@mui/icons-material/Edit\";\nimport { IconButton, TableCell, TableRow } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { ICompany, ICompanyView } from \"../../../resources/Contracts\";\n//import Texts from \"../../../resources/Texts\";\n//import { Service } from \"../../../services/Service\";\nimport { actionCreators as AlertStoreActionCreators } from \"../../../store/AlertStore\";\n//import { handleErrorMessage } from \"../../../utils/utils\";\nimport EditCompanyForm from \"./companyForms/EditCompanyForm\";\nimport \"./CompaniesTableRow.scss\";\n\ntype CompaniesTableRowProps = typeof AlertStoreActionCreators & {\n\t//dataItem: ICompany; \n\t//updateCompany: (company: ICompany) => void;\n\n\tdataItem: ICompanyView; \n\tupdateCompany: (company: ICompanyView) => void;\n};\n\nconst CompaniesTableRow: React.FC = (props) => {\n\tconst [detailOpened, setDetailOpened] = React.useState();\n\n\tconst handleOpen = (): void => {\n\t\tsetDetailOpened(true);\n\t};\n\n\tconst handleClose = (): void => {\n\t\tsetDetailOpened(false);\n\t};\n\n\tconst actionsColumn = (): JSX.Element => {\n\t\treturn (\n\t\t\t\n\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\tlet rowClassName: string = \"companiesTable-row\";\n\n\tif (detailOpened) {\n\t\trowClassName = rowClassName + \" opened\";\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t\n\t\t\t\t{props.dataItem.companyName}\n\t\t\t\t{props.dataItem.dynamicsId}\n\t\t\t\t{props.dataItem.domain}\n {props.dataItem.description}\n\t\t\t\t{actionsColumn()}\n\t\t\t\n\t\t\t\n\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\nexport default connect(null, AlertStoreActionCreators)(CompaniesTableRow);\n","import CompanyAddIcon from \"@mui/icons-material/Castle\";\nimport SortIcon from \"@mui/icons-material/Sort\";\nimport {\n\tButton,\n\tCircularProgress,\n\tTable,\n\tTableBody,\n\tTableCell,\n\tTableContainer,\n\tTableHead,\n\tTableRow,\n\tTextField,\n\tTypography,\n} from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { useHistory } from \"react-router-dom\";\nimport { ICompany, ICompaniesRequest, ICompaniesResponse, ICompanyView } from \"../../../resources/Contracts\";\nimport Texts from \"../../../resources/Texts\";\nimport { Service } from \"../../../services/Service\";\nimport { actionCreators as AlertStoreActionCreators } from \"../../../store/AlertStore\";\nimport { handleErrorMessage } from \"../../../utils/utils\";\nimport Pagination from \"../../shared/Pagination\";\nimport NewCompanyForm from \"./companyForms/NewCompanyForm\";\nimport \"./CompaniesTable.scss\";\nimport CompaniesTableRow from \"./CompaniesTableRow\";\n\ntype CompaniesTableProps = typeof AlertStoreActionCreators & {};\n\nconst CompaniesTable: React.FC = (props) => {\n\tconst [companiesData, setCompaniesData] = React.useState([]);\n\tconst [newFormOpened, setNewFormOpened] = React.useState(false);\n\tconst [loading, setLoading] = React.useState(true);\n\tconst [searchText, setSearchText] = React.useState(\"\");\n\t\n\t// pagination\n\tconst [previousPageDisabled, setPreviousPageDisabled] = React.useState(true);\n\tconst [nextPageDisabled, setNextPageDisabled] = React.useState(false);\n\tconst [currentViewPage, setCurrentViewPage] = React.useState(0);\n\tconst [pageIndex, setPageIndex] = React.useState(1);\n\tconst [totalPages, setTotalPages] = React.useState(0);\n\n\t// The number of rows displayed, and the number of rows fetched from the db per page\n\tconst numberOfResultsPerPage: number = 12;\t\t// originally 20, but 12 results fit the screen better \n\n\tlet searchTimeout: NodeJS.Timeout;\n\tlet companySearchTimeout: NodeJS.Timeout;\n\t\n\t// loadCompanies is triggered by a search, or on first load of the table\n\tconst loadCompanies = React.useCallback(async () => {\n\t\tsetLoading(true);\n\n\t\ttry {\n\t\t\tconst result: ICompaniesResponse = (await Service.getCompaniesTable(searchText, 1, numberOfResultsPerPage))\n\t\t\tif (result) {\n\t\t\t\tconst companyViewData = result.data.items as ICompanyView[];\n\t\t\t\tsetCompaniesData(companyViewData);\n\t\t\t\tsetCurrentViewPage(0);\n\t\t\t\tsetTotalPages(result.data.totalPages);\n\t\t\t\tsetNextPageDisabled(!result.data.hasNextPage);\n\t\t\t\tsetPreviousPageDisabled(!result.data.hasPreviousPage);\n\t\t\t\tsetPageIndex(result.data.pageIndex);\n\n\t\t\t\t//// DEBUG ////\n\t\t\t\t//console.log(\"loadCompanies state pageIndex: \" + pageIndex);\n\t\t\t\t//console.log(\"loadCompanies state currentViewPage: \" + currentViewPage);\n\t\t\t\t//console.log(\"loadCompanies state totalPages: \" + totalPages);\n\t\t\t\t//console.log(\"loadCompanies data pageIndex: \" + result.data.pageIndex);\n\t\t\t\t//console.log(\"loadCompanies data totalPages: \" + result.data.totalPages);\n\t\t\t}\n\t\t\telse{\n\t\t\t\tconsole.log(\"no companies\");\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t}\n\t\tsetLoading(false);\n\t}, [searchText]);\n\n\t// first render\n\tReact.useEffect(() => {\n\t\tloadCompanies();\n\t}, [loadCompanies]);\n\t\n\tconst updateCompany = (updatedCompany: ICompanyView): void => {\n\t\t\n\t\tconst companiesDataCopy: ICompanyView[] = companiesData.slice();\n\t\tconst indexOfUpdatedCompany: number = companiesDataCopy.findIndex((u) => u.id === updatedCompany.id);\n\t\tcompaniesDataCopy[indexOfUpdatedCompany] = updatedCompany;\n\n\t\tsetCompaniesData(companiesDataCopy);\n\n\t\tprops.addAlert({\n\t\t\ttype: \"info\",\n\t\t\ttext: Texts.Alerts.InfoCompanyUpdated,\n\t\t}); \n\t};\n\n\tconst loadNewPageOfCompanies = async (loadPreviousPage: boolean) => {\n\n\t\tif (loadPreviousPage) {\n\t\t\tif(currentViewPage > 0) {\n\t\t\t\tconst prevPage = currentViewPage - 1;\n\t\t\t\tsetCurrentViewPage(prevPage);\n\t\t\t\tsetNextPageDisabled(false);\n\t\t\t}\n\t\t} else {\n\t\t\ttry {\n\t\t\t\tconst totalPagesLoaded: number = Math.ceil(companiesData.length / numberOfResultsPerPage);\n\n\t\t\t\t// add +1 to currentpage, because currentPage starts from 0 for slicing purposes\n\t\t\t\tif (currentViewPage + 1 < totalPagesLoaded) {\n\t\t\t\t\t//console.log(\"In-memory companyData: (move next page) : currentViewPage=\" + currentViewPage + \", totalPagesLoaded=\" + totalPagesLoaded + \", pageIndex=\" + pageIndex);\n\t\t\t\t\tsetCurrentViewPage(currentViewPage + 1);\n\t\t\t\t} else {\n\t\t\t\t\tsetLoading(true);\n\t\t\t\t\tconst result: ICompaniesResponse = (await Service.getCompaniesTable(searchText, pageIndex+1, numberOfResultsPerPage)) // was pageIndex + 1\n\t\t\t\t\tif (result)\t{\n\t\t\t\t\t\tconst newCompanyViewData = result.data.items as ICompanyView[];\n\t\t\t\t\t\tconst extendedCompaniesData: ICompanyView[] = companiesData.concat(newCompanyViewData);\n\t\t\t\t\t\tsetCompaniesData(extendedCompaniesData);\n\t\t\t\t\t\t//console.log(\"Slice and dice companyData: (move next page) : currentViewPage=\" + currentViewPage + \", totalPagesLoaded=\" + totalPagesLoaded + \", pageIndex=\" + pageIndex);\n\t\t\t\t\t\tsetCurrentViewPage(result.data.pageIndex-1);\n\t\t\t\t\t\tsetPageIndex(result.data.pageIndex);\n\t\t\t\t\t\tsetNextPageDisabled(!result.data.hasNextPage);\n\t\t\t\t\t\tsetPreviousPageDisabled(!result.data.hasPreviousPage);\n\t\t\t\t\t\t\n\t\t\t\t\t\t//// DEBUG ////\n\t\t\t\t\t\t//console.log(\"loadNewPageOfCompanies state pageIndex: \" + pageIndex);\n\t\t\t\t\t\t//console.log(\"loadNewPageOfCompanies state currentViewPage: \" + currentViewPage);\n\t\t\t\t\t\t//console.log(\"loadNewPageOfCompanies state totalPages: \" + totalPages);\n\t\t\t\t\t\t//console.log(\"loadNewPageOfCompanies data pageIndex: \" + result.data.pageIndex);\n\t\t\t\t\t\t//console.log(\"loadNewPageOfCompanies data totalPages: \" + result.data.totalPages);\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconsole.log(\"no results\");\n\t\t\t\t\t\tsetNextPageDisabled(true);\n\t\t\t\t\t}\n\t\t\t\t\tsetLoading(false);\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tprops.addErrorAlert(handleErrorMessage(error));\n\t\t\t}\n\t\t}\n\t};\n\n\tconst handleLoadNextPage = () => {\n\t\tif(!nextPageDisabled){\n\t\t\tloadNewPageOfCompanies(false);\n\t\t}\n\t};\n\n\tconst handleLoadPrevPage = () => {\n\t\tif(!previousPageDisabled){\n\t\t\tloadNewPageOfCompanies(true);\n\t\t}\n\t};\n\n\tconst handleNewFormOpen = (): void => {\n\t\tsetNewFormOpened(true);\n\t};\n\t\n\tconst handleSearchChange = (searchValue: string) => {\n\t\tclearTimeout(searchTimeout);\n\t\tsearchTimeout = setTimeout(() => {\n\t\t\tsetSearchText(searchValue);\n\t\t}, 500);\n\t};\n\n\tconst tableColumnHeader = ( text: string, field: string, align: string, p0: string ): JSX.Element => {\n\t\t\treturn (\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{text}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t);\n\t};\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t{Texts.CompaniesView.AddCompany}\n\t\t\t\t\n\t\t\t\t handleSearchChange(event.target.value)}\n\t\t\t\t/>\n\t\t\t\n\n\t\t\t\n\t\t\t\n \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{tableColumnHeader(\n\t\t\t\t\t\t\t\t\tTexts.CompaniesView.TableColumns.CompanyName,\n\t\t\t\t\t\t\t\t\t\"companyName\",\n\t\t\t\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\t\t\t\"left\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{tableColumnHeader(\n\t\t\t\t\t\t\t\t\tTexts.CompaniesView.TableColumns.DynamicsId,\n\t\t\t\t\t\t\t\t\t\"dynamicsId\",\n\t\t\t\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\t\t\t\"left\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{tableColumnHeader(\n\t\t\t\t\t\t\t\t\tTexts.CompaniesView.TableColumns.Domain,\n\t\t\t\t\t\t\t\t\t\"domain\",\n\t\t\t\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\t\t\t\"left\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t{tableColumnHeader(\n\t\t\t\t\t\t\t\t\tTexts.CompaniesView.TableColumns.Description,\n\t\t\t\t\t\t\t\t\t\"description\",\n\t\t\t\t\t\t\t\t\t\"string\",\n\t\t\t\t\t\t\t\t\t\"left\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t{Texts.CompaniesView.TableColumns.Actions}\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\n\n\t\t\t\t\t\t\n\t\t\t\t\t\t\t{loading ? (\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\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\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\t\t setNewFormOpened(false)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t{companiesData?.slice(currentViewPage * numberOfResultsPerPage,\tcurrentViewPage * numberOfResultsPerPage + numberOfResultsPerPage)\n\t\t\t\t\t\t\t\t\t.map((company) => (\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t
\n\t\t\t\t
\n\n\t\t\t\t\n\t\t\t
\n\t\t
\n\t);\n};\n\nexport default connect(null, AlertStoreActionCreators)(CompaniesTable);\n","import { Container, Typography } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport \"./CompanyAdministration.scss\";\nimport UsersTable from \"../../../components/administration/companies/CompaniesTable\";\nimport Texts from \"../../../resources/Texts\";\n\ninterface CompanyAdministrationProps {}\n\nconst CompanyAdministration: React.FunctionComponent = () => {\n\treturn (\n\t\t\n \n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.CompaniesView.Title}\n\t\t\t\t\t\n\n\t\t\t\t\t\n\t\t\t\t\t\t{Texts.CompaniesView.Subtitle}\n\t\t\t\t\t\n\t\t\t\t\n\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default CompanyAdministration;\n","import { Container, Typography } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport Texts from \"../resources/Texts\";\n\ninterface UnauthorizedViewProps {}\n\nconst UnauthorizedView: React.FunctionComponent = () => {\n\treturn (\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{Texts.UnauthorizedMessage}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default UnauthorizedView;\n","import { Container, Typography } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport Texts from \"../resources/Texts\";\n\ninterface UnauthorizesAccessProps { }\n\nconst UnauthorizedAccess: React.FunctionComponent = () => {\n\treturn (\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{Texts.UnauthorizedAccessMessage}\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default UnauthorizedAccess;\n","import { Container, Typography } from \"@mui/material\";\nimport { Box } from \"@mui/system\";\nimport * as React from \"react\";\nimport { Route } from \"react-router-dom\";\n//import './App.css';\nimport TrimmedNav from '../../components/trimmedNav/TrimmedNav';\nimport Home from \"./HomeView\";\nimport UserAdministration from \"../administration/users/UserAdministration\";\nimport CompanyAdministration from \"../administration/companies/CompanyAdministration\";\n//import Statistics from \"./Pages/Statistics\";\n\n\nimport \"./HomeView.scss\";\n//import UsersTable from \"../../../components/administration/users/UsersTable\";\nimport Texts from \"../../resources/Texts\";\n\ninterface HomeViewProps {}\n\nconst HomeView: React.FunctionComponent = () => {\n return (\n \n \n \n \n {Texts.HomeView.Title}\n \n\n \n {Texts.HomeView.Subtitle}\n \n \n\n \n \n );\n};\n\nexport default HomeView;\n","import * as React from \"react\";\nimport { connect } from \"react-redux\";\nimport { Redirect, Route, Switch } from \"react-router\";\nimport Layout from \"./components/Layout\";\nimport { Routing } from \"./resources/Routes\";\nimport { ApplicationState } from \"./store\";\nimport { CurrentUserState } from \"./store/CurrentUser\";\nimport \"./styles/custom.scss\";\nimport UserAdministration from \"./views/administration/users/UserAdministration\";\nimport CompanyAdministration from \"./views/administration/companies/CompanyAdministration\";\nimport UnauthorizedView from \"./views/UnauthorizedView\";\nimport UnauthorizedAccess from \"./views/UnauthorizesAccess\";\nimport HomeView from \"./views/home/HomeView\";\n\ntype AppProps = CurrentUserState & {};\n\nconst App: React.FunctionComponent = (props) => {\n\tconst routes: JSX.Element[] = [];\n\n\troutes.push(\n\t\t\n\t);\n\n\tif (props.userName) {\n\t\troutes.push(\n\t\t\t\n\t\t);\n\t\troutes.push(\n\t\t\t\n\t\t);\n\t\troutes.push(\n\t\t\t\n\t\t);\n\t} else {\n\t\troutes.push(\n\t\t\t\n\t\t);\n\t}\n\n\treturn (\n\t\t\n\t\t\t\n\t\t\t\t{routes}\n\n\t\t\t\t\n\t\t\t\n\t\t\n\t);\n};\n\nexport default connect((state: ApplicationState) => state.currentUser)(App);\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const url = process.env.PUBLIC_URL as string;\n const publicUrl = new URL(url, window.location.toString());\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing as ServiceWorker;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (response.status === 404 || (contentType && contentType.indexOf('javascript') === -1)) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log('No internet connection found. App is running in offline mode.');\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import { Action, Reducer } from \"redux\";\n\nexport interface CurrentUserState {\n\tuserName: string;\n}\n\nexport interface SetCurrentUserNameAction {\n\ttype: \"SET_CURRENT_USER_NAME\";\n\tpayload: string;\n}\n\nexport type KnownAction = SetCurrentUserNameAction;\n\nexport const actionCreators = {\n\tsetCurrentUserName: (name: string) =>\n\t\t({ type: \"SET_CURRENT_USER_NAME\", payload: name } as SetCurrentUserNameAction),\n};\n\nexport const reducer: Reducer = (\n\tstate: CurrentUserState | undefined,\n\tincomingAction: Action\n) => {\n\tif (state === undefined) {\n\t\treturn { userName: null };\n\t}\n\n\tconst action = incomingAction as KnownAction;\n\tswitch (action.type) {\n\t\tcase \"SET_CURRENT_USER_NAME\":\n\t\t\treturn { userName: action.payload };\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import * as SelectedSolutions from \"./SelectedSolution\";\nimport * as CurrentUser from \"./CurrentUser\";\nimport * as AlertStore from \"./AlertStore\";\n\n// The top-level state object\nexport interface ApplicationState {\n\tselectedSolutions: SelectedSolutions.SelectedSolutionState;\n\tcurrentUser: CurrentUser.CurrentUserState;\n\talerts: AlertStore.AlertState;\n}\n\n// Whenever an action is dispatched, Redux will update each top-level application state property using\n// the reducer with the matching name. It's important that the names match exactly, and that the reducer\n// acts on the corresponding ApplicationState property type.\nexport const reducers = {\n\tselectedSolutions: SelectedSolutions.reducer,\n\tcurrentUser: CurrentUser.reducer,\n\talerts: AlertStore.reducer,\n};\n\n// This type can be used as a hint on action creators so that its 'dispatch' and 'getState' params are\n// correctly typed to match your store.\nexport interface AppThunkAction {\n\t(dispatch: (action: TAction) => void, getState: () => ApplicationState): void;\n}\n","import { Action, Reducer } from \"redux\";\n\n// -----------------\n// STATE - This defines the type of data maintained in the Redux store.\n\nexport interface SelectedSolutionState {\n\tselectedSolutionId: string | null;\n}\n\n// -----------------\n// ACTIONS - These are serializable (hence replayable) descriptions of state transitions.\n// They do not themselves have any side-effects; they just describe something that is going to happen.\n\nexport interface SetSolutionAction {\n\ttype: \"SET_SELECTED_SOLUTION\";\n\tselectedSolutionId: string;\n}\n\n// Declare a 'discriminated union' type. This guarantees that all references to 'type' properties contain one of the\n// declared type strings (and not any other arbitrary string).\nexport type KnownAction = SetSolutionAction;\n\n// ----------------\n// ACTION CREATORS - These are functions exposed to UI components that will trigger a state transition.\n// They don't directly mutate state, but they can have external side-effects (such as loading data).\n\nexport const actionCreators = {\n\tsetSelectedSolutionId: (id: string | null) =>\n\t\t({ type: \"SET_SELECTED_SOLUTION\", selectedSolutionId: id } as SetSolutionAction)\n};\n\n// ----------------\n// REDUCER - For a given state and action, returns the new state. To support time travel, this must not mutate the old state.\n\nexport const reducer: Reducer = (\n\tstate: SelectedSolutionState | undefined,\n\tincomingAction: Action\n): SelectedSolutionState => {\n\tif (state === undefined) {\n\t\treturn { selectedSolutionId: null };\n\t}\n\n\tconst action = incomingAction as KnownAction;\n\tswitch (action.type) {\n\t\tcase \"SET_SELECTED_SOLUTION\":\n\t\t\treturn { selectedSolutionId: action.selectedSolutionId };\n\t\tdefault:\n\t\t\treturn state;\n\t}\n};\n","import { ConnectedRouter } from \"connected-react-router\";\nimport \"core-js\";\nimport { createBrowserHistory } from \"history\";\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { Provider } from \"react-redux\";\nimport App from \"./App\";\nimport { unregister as unregisterServiceWorker } from \"./registerServiceWorker\";\nimport configureStore from \"./store/configureStore\";\nimport { Service } from \"./services/Service\";\nimport { actionCreators as CurrentUserActionCreators } from \"./store/CurrentUser\";\nimport { actionCreators as AlertStoreActionCreators } from \"./store/AlertStore\";\nimport { handleErrorMessage } from \"./utils/utils\";\n\n// Create browser history to use in the Redux store\nconst baseUrl = document.getElementsByTagName(\"base\")[0].getAttribute(\"href\") as string;\nconst history = createBrowserHistory({ basename: baseUrl });\n\n// Get the application-wide store instance, prepopulating with state from the server where available.\nconst store = configureStore(history);\n\nconst startApp = async (): Promise => {\n\tlet userName: string;\n\n\ttry {\n\t\tuserName = await Service.getCurrentUser();\n\t} catch (error) {\n\t\tstore.dispatch(AlertStoreActionCreators.addErrorAlert(handleErrorMessage(error)));\n\t}\n\n\tif (userName) {\n\t\tstore.dispatch(CurrentUserActionCreators.setCurrentUserName(userName));\n\t}\n\n\tReactDOM.render(\n\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t,\n\t\tdocument.getElementById(\"root\")\n\t);\n};\n\nstartApp();\n\n//registerServiceWorker();\nunregisterServiceWorker();\n","import { applyMiddleware, combineReducers, compose, createStore } from \"redux\";\nimport thunk from \"redux-thunk\";\nimport { connectRouter, routerMiddleware } from \"connected-react-router\";\nimport { History } from \"history\";\nimport { ApplicationState, reducers } from \"./\";\n\nexport default function configureStore(history: History, initialState?: ApplicationState) {\n\tconst middleware = [thunk, routerMiddleware(history)];\n\n\tconst rootReducer = combineReducers({\n\t\t...reducers,\n\t\trouter: connectRouter(history),\n\t});\n\n\tconst enhancers = [];\n\tconst windowIfDefined = typeof window === \"undefined\" ? null : (window as any);\n\tif (windowIfDefined && windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__) {\n\t\tenhancers.push(windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__());\n\t}\n\n\tconst store = createStore(\n\t\trootReducer,\n\t\tinitialState,\n\t\tcompose(applyMiddleware(...middleware), ...enhancers)\n\t);\n\n\treturn store;\n}\n"],"sourceRoot":""}