{"version":3,"sources":["Utils/GetVoTheme.ts","Components/Common/AlertIconOverride/AlertIconOverride.tsx","Components/Common/PasswordInput/PasswordInput.tsx","store/SkrinHttpRequest.ts","store/StudentJournalsInfo.ts","Components/Main/PrivateRouts/PrivateRouts.tsx","store/Error.ts","Components/Common/ErrrorView/ErrorView.tsx","Components/Common/UpdateInfo/UpdateInfo.tsx","Components/Common/UpdateInfo/StartUpdateInfo.tsx","Components/Common/UpdateInfo/StartUpdateDbInfo.tsx","Components/Common/ClearCacheComponent/ClearCacheComponent.tsx","Components/Common/UpdateInfo/DbUpdateHasError.tsx","Components/Main/DynamicFavicon/DynamicFavicon.tsx","Components/Common/UpdateAppAlert/UpdateAppAlert.tsx","Components/Common/UpdateDbInfo/UpdateDbInfo.tsx","Components/Common/HttpErrorModal/ModalList.tsx","Components/Common/HttpErrorModal/HttpErrorModal.tsx","App.tsx","store/index.ts","Components/Common/ErrrorView/ErrorBoundary.tsx","RequestStatus.tsx","index.tsx","store/configureStore.ts","Utils/Fetch.ts","Interface/ServerRouteConst.ts","Components/Common/Loader/Loader.tsx","Components/Common/LazyWithRetry/lazyWithRetry.ts","Utils/IsEqualFun.ts","store/AuthStatus.ts","Interface/MainTypes.ts","store/HttpErrorMessages.ts","store/HttpWarningMessages.ts","Components/Common/QueryDialog/QueryDialog.tsx","Components/Common/ModalMessageWithNode/ModalMessageWithNode.tsx","Components/Main/DefaultWrapperWidth/WrapperPaddingWidth.tsx","store/VoAuth.ts","Components/Main/CommonSetting/AccessPage.tsx","Interface/RouteConst.ts","store/KaFlAuth.ts"],"names":["GetVoTheme","modules","stateType","defaultValueTheme","id","name","_modules$find","_modules$find2","siteTheme","undefined","find","x","ISiteList","voDesktop","voWeb","AlertIconOverride","props","_jsx","Alert","_objectSpread","icon","severity","DoneAllIcon","children","PasswordInput","_useState","useState","_useState2","_slicedToArray","showPassword","setShowPassword","label","TextField","disabled","fullWidth","type","autoComplete","onChange","e","password","target","value","setValue","InputProps","endAdornment","IconButton","onClick","onMouseDown","event","preventDefault","onMouseUp","size","Visibility","VisibilityOff","ISkrinResponseStatus","GetRequestData","url","method","body","baseUrl","window","location","origin","fullPath","concat","Request","JSON","stringify","headers","IsJsonResponse","contentTypeHeader","length","toLowerCase","includes","MessageFormatHttp","responseStatus","responseStatusText","message","stacktrace","methodLabel","urlLabel","responseStatusLabel","responseStatusTextLabel","bodyLabel","messageLabel","stacktraceLabel","SkrinHttpRequest","setStatusRequest","_ref","_asyncToGenerator","_regeneratorRuntime","mark","_callee","dispatch","request","response","contentType","isJsonResponse","responseData","errorMessages","warningMessages","bodyJson","msg","wrap","_context","prev","next","fetch","sent","status","statusText","ok","Error","get","abrupt","json","Success","data","uuidv4","toString","messages","SetHttpErrorMessages","Warning","SetHttpWarningMessages","t0","String","stack","console","log","stop","_x","apply","arguments","SetJournalsInfo","info","SetClearJournalsInfo","reducer","state","incomingAction","studentJournalsInfo","startDate","endDate","selectedAll","selectedIds","areaId","action","ApiRoutePage","lazyWithRetry","StartPage","VoRoutePage","UserInfo","SettingLogs","ImportPage","CreateDbBackUpPage","KaFlRoutePage","connector","connect","isAuth","appAuth","Redirect","to","MainAuthPath","_jsxs","Switch","Route","path","UserInfoPath","component","UserSettingLogs","DataImportPath","CreateDbBackUpPagePath","VoRoutePath","ApiRoutePath","KaFlRoutePath","setError","error","ResetApp","getState","push","StartPagePath","unSetError","Grid","container","spacing","justifyContent","item","lg","md","xs","sm","style","textAlign","Button","variant","color","hasUpdate","setAuth","auth","SetAuth","setStatus","_useState3","_useState4","openQuryDialog","setOpenQuryDialog","_useState5","_useState6","showUserDialog","setShowUserDialog","onSendQuery","apiStartUpdate","then","hasAccess","apiMainAuthAuto","Form","_Fragment","NavLink","DefaultWrapperWidth","direction","alignItems","marginTop","Loader","ModalMessageWithNode","title","show","handleClose","AccessPage","handleSuccess","QueryDialog","open","onClose","textQuery","onAgree","updateting","updateProcess","hasErrorUpdate","setHasErrorUpdate","useEffect","timeout","setTimeout","clearTimeout","AlertTitle","blockDbChanges","ClearCacheComponent","intervalId","setIntervalId","showQuery","setShowQuery","intervalID","setInterval","timeLabel","Date","getTime","buildDate","catch","clearInterval","reason","Snackbar","zIndex","reload","RefreshIcon","fontSize","CloseIcon","dbUpdateProcessHasError","fullPathFile","setFullPathFile","showSnack","setShowSnack","apiImportDataGetFullPathFileDb","responseFolder","handelCloseSnack","display","readOnly","startAdornment","navigator","clipboard","writeText","FileCopyIcon","autoHideDuration","anchorOrigin","vertical","horizontal","getActiveSitePage","PodftFlRoutePath","getNewFaviconLink","themeSite","faviconLink","activeSite","setActiveSite","setFaviconLink","activeThemeId","setActiveThemeId","activeVoTheme","useLocation","pathname","activeSitePage","Helmet","rel","href","appHasUpdate","hasLongScriptDbUpdate","setOpen","timer","setTimer","history","useHistory","interval","prevTimer","needShowFromRedux","handleSnackbarClose","width","maxWidth","border","StartUpdateInfoPath","StartUpdateDbInfoPath","ArrowForwardIcon","handelSend","apiStartDbUpdate","useStyles","makeStyles","dialog","position","top","closeButton","ShowList","list","map","index","Typography","ModalList","classes","onCloseModal","Dialog","scroll","paper","DialogTitle","className","DialogContent","dividers","DialogContentText","tabIndex","errorMessagesInfo","httpErrorMessages","warningMessagesInfo","httpWarningMessages","closeErrorModal","SetClearHttpErrorMessages","closeWarningModal","SetClearHttpWarningMessages","MainAuth","CommonSettingPage","root","flexDirection","minHeight","footer","minWidth","link","margin","textDecoration","toolbar","flexWrap","_state$error","appError","appStartUpdate","setVoAuth","SetVoAuth","updateModules","SetAuthModules","updateKaFLAuth","SetKalAuth","getAuthStateKaFl","HttpRequest","ModuleAuthenticationModuleLoginAuto","kaFl","authDesktop","authWeb","subAuthModule","apiVoAuthAutoWeb","voAuth","_yield$Promise$all","_yield$Promise$all2","voAuthResponse","kaFlAuthResponse","Promise","all","apiVoAuthAuto","ErrorView","StartUpdateInfo","DbUpdateHasError","StartUpdateDbInfo","defaultTheme","createTheme","ThemeProvider","theme","CssBaseline","DynamicFavicon","UpdateAppAlert","HttpErrorModal","Suspense","fallback","exact","UpdateInfo","UpdateDbInfo","CommonSettingPath","PrivateRouts","getFullYear","reducers","ClientError","Auth","VoAth","StudentJournalsInfo","HttpErrorMessages","HttpWarningMessages","kaFlAuth","KaFlAuth","ErrorBoundary","_Component","_inherits","_super","_createSuper","_this","_classCallCheck","_len","args","Array","_key","call","hasError","TryRefresh","setState","_createClass","key","errorInfo","_this2","customErr","post","apiWriteError","this","_","Component","updateAppState","serverState","UpdateAppStateToTimer","setStartUpdateStatus","SetStartUpdateStatus","GetRequest","text","serverStateType","shortAjax","document","getElementsByTagName","getAttribute","createBrowserHistory","basename","store","initialState","middleware","thunk","routerMiddleware","rootReducer","combineReducers","router","connectRouter","enhancers","windowIfDefined","__REDUX_DEVTOOLS_EXTENSION__","createStore","compose","applyMiddleware","configureStore","ReduxStore","ReactDOM","render","Provider","ConnectedRouter","App","RequestStatus","getElementById","http","_x2","_http","config","_x3","_x4","_get","_callee2","init","_context2","_x5","_x6","_post","_callee3","_args3","_context3","put","_x7","_x8","_put","_callee4","_args4","_context4","deleteData","_x9","_x10","_deleteData","_callee5","_context5","apiMainAuth","apiUserInfo","apiReloginUser","apiCheckUser","apiVoAuth","apiVoLogOut","apiVoAuthWeb","apiVoAuthPasswordRecovery","apiVoTestList","apiVoTest","apiVoTestMaterialList","apiVoTestExportDocFile","apiVoSkrinTest","apiVoAdminSettings","apiVoAdminSmtpStatus","apiVoAdminSmtpTest","apiSettionLog","apiImportDataGetAdminAuth","apiImportDataGetTempFolder","apiImportDataCheckTempFolder","apiImportDataStartUnZip","apiImportDataGetStatusUnZip","apiImportDataCheckUnZipFolder","apiImportDataCheckLogins","apiImportDataCheckStudentLimit","apiImportDataCheckStartImport","apiAutoBackupConfigGetInfo","apiAutoBackupConfigSetInfo","apiVoAdminSettingsSave","apiVoCommonSettingGetProxy","apiVoCommonSettingSetProxy","apiVoCommonSettingSetProxyAuth","apiVoCommonTestProxy","apiVoAdminSdl","apiVoAdminSdlSetActive","apiVoAdminSdlSendNewPassword","apiVoAdminSdlGetLinkNewPassword","apiVoAdmintruct","apiVoAdminStructCheckLinks","apiVoCheckPassword","apiVoSetUserPassword","apiVoAreaSaveLogo","apiVoAreaDropLogo","apiVoAreas","apiVoAreasVoWeb","apiVoAreasGetLast","apiVoAreasSetUnActive","apiVoAreasSetActive","apiVoAreasWebSetActive","apiVoGetAllNews","apiVoGetSkrinNews","apiVoGetSdlNews","apiVoSkrinNewsGetStudentStatus","apiVoSkrinNewsSetStudentStatus","apiVoSdlNews","apiVoSdlNewsChangeStatus","apiVoSdlNewsChangeAllStatus","apiVoGetAllDocs","apiVoGetSdlDocs","apiVoGetSdlDocsSearch","apiVoGetSdlVideo","apiVoGetSkrinVideo","apiVoGetSdlVideoSearch","apiVoGetSkrinVideoUrl","apiFileViewPrefixLoadFile","apiFileViewPrefixGetList","apiFileViewPrefixSave","apiFileViewPrefixDownLoad","apiVoStudents","apiVoStudentsWebVo","apiVoStudentsArhive","apiVoStudentChangeArhiveStatus","apiVoStudentChangeArhiveStatusWeb","apiVoStudentsNewLogin","apiVoStudentsLoadList","apiWebVoStudentsLoadList","apiVoStudentsSendNewPassword","apiVoStudentsGetLinkNewPassword","apiVoStudentsTreeView","apiVoDepartamenTreeView","apiVoStudentsTreeViewTraining","apiVoStudentsGetShortInfo","apiVoStudentSearchHistory","apiVoStudentJournals","apiVoStudentJournalsGetPdf","apiVoStudentJournalsGetDoc","apiVoStudnetJournalSaved","apiVoStudentJournalJournalFile","apiVoStudentsFilterJournalsList","apiVoStudentsFilterJournalsCreateFilePdf","apiVoStudentsFilterJournalsCreateFileDoc","apiVoStudentsCertList","apiVoStudentsFilterCount","apiVoStudentsCertGetFileId","apiVoStudentsCertGetFileStatus","apiVoStudentsCertStartProcess","apiVoStudentsCertLoad","apiVoTraningStartGenCerts","apiVoStudentCertCountById","apiVoStudentCertStartGenById","apiVoTrainingSelectorOptions","apiVoTraining","apiVoTrainingStartSendMails","apiVoTrainingChangeStatus","apiVoTrainingSendMailsInvit","apiVoTrainingProgress","apiVoTrainingSendStudentMailInvit","apiVoTrainingUpdateStudentList","apiVoTrainingSearch","apiVoTrainingGetSdlCertPdf","apiVoTrainingGetSdlCertDoc","apiVoTrainingGetSdlTestResult","apiVoTrainginJournal","apiVoTrainingJournalGetPdf","apiVoTrainingJournalGetDoc","apiVoStudentSkrinNews","apiVoStudentSdlNews","apiVoStudentSkrinNewsStatus","apiVoStudentTraining","apiVoStudentTrainingDescript","apiVoStudentTrainingDocs","apiVoStudentTrainingVideo","apiVoStudentTrainingTests","apiVoStudentTrainingSetStatusDelay","apiVoLoadSkrinDocById","apiVoLoadSdlDocById","apiVoLoadSdlVideoById","apiVoWriteVideoSkrinEvent","apiVoWriteVideoSdlEvent","apiVoStudentSdlTest","apiVoStudentSkrinTest","apiVoStudentStartTestSdl","apiVoStudentStartTestSkrin","apiVoStudentGetQuestion","apiVoStudentSetQuestionAnswer","apiVoStudentGetTestResult","apiVoStudentGetTestFinishInfo","apiVoStudentTestFinishedForward","apiVoStudentGetTestResultPdf","apiVoStudentTrainingConfirm","apiVoStudentGetCertPdf","apiVoStudentGetCertDoc","apiVoFeedbackSend","apiVoFeedbackSendSupport","apiLoadLogo","apiMVKRegistr","api639PRegistr","ModuleAuthentication","ModuleAuthenticationLogout","apiRegistryPrefixLoadFile","apiRegistryPrefixGetListFile","apiRegistryPrefixRemome","apiVoInstructionVideo","apiVoInstructionVideoTag","CircularProgress","disableShrink","componentImport","lazy","pageHasAlreadyBeenForceRefreshed","parse","localStorage","getItem","setItem","IsEqual","object1","object2","hasNullValue","props1","Object","getOwnPropertyNames","props2","i","prop","bothAreObjects","SetEndUpdateStatus","isRun","errorMessage","actualData","ISiteTypeDesktopDictionary","vo","soap","api","kafl","podftfl","podftFl","IPeriodCron","IPeriodDayOfWeek","_toConsumableArray","filter","right","align","DialogActions","autoFocus","left","transform","backgroundColor","padding","borderRadius","paddingLeft","cursor","Modal","WrapperPaddingWidth","SetActiveArea","activeArea","SetAreaList","userAreas","UpdateAreaList","activeUserArea","activeAreaInList","isEnable","nameActiveAreaId","userLogin","role","_action$auth$userArea","oldSelctAreaId","getCookie","Number","setCookie","expires","actulState","ShowErrorMessage","login","messageError","setMessageError","noValidate","newAuth","VoAuthPath","VoSettingSdlPath","VoSettingSdlAddPath","VoSettingSdlEditRoute","VoSettingSdlEditPath","VoSettingAreasPath","VoAdminSettingSmtpPath","VoSettingAreasAddRoute","VoSettingAreasAddPath","VoSettingAreasEditRoute","VoSettingAreasEditPath","VoSettingStructCompany","VoSetUserPassword","VoQuestionBasePath","VoQuestionBaseRoute","VoQuestionBaseListPath","VoQuestionBaseListRoute","VoQuestionBaseCreatePath","VoQuestionBaseEditPath","VoQuestionBaseEditRoute","VoQuestionBaseCopyPath","VoQuestionBaseCopyRoute","VoNewsPath","VoNewsTabPath","VoNewsTabRoute","VoSkrinNewsAdminShowListPath","VoSkrinNewsAdminShowListRoute","VoSkrinNewsAdminOpenItemPath","VoSkrinNewsAdminOpenItemRoute","VoSDLNewsAdminShowListPath","VoSDLNewsAdminShowListRoute","VoSDLNewsAdminOpenItemPath","VoSDLNewsAdminOpenItemRoute","VoSDLNewsAdminCreatePath","VoSDLNewsAdminEditPath","VoSDLNewsAdminEditRoute","VoDocumentsPath","VoDocumentsTabPath","VoDocumentsTabRoute","VoVideoClipsPath","VoVideoClipsTabPath","VoVideoClipsTabRoute","VoStudetsTabPath","VoStudetsTabRoute","VoStudentTabShowList","VoStudetAddPath","VoStudetEditRoute","VoStudetEditPath","VoStudentsJournalsRoute","VoStudentsJournalsPath","VoStudentLoadFile","VoTrainingStudentHistoryRoute","VoTrainingStudentHistoryPath","VoStudentJournalRoute","VoStudentJournalPath","VoStudentCertPath","VoStudentCertRoute","VoTrainingPath","VoTrainingRoute","VoTrainingShowListPath","VoTrainingShowListRoute","VoTrainingAddPath","VoTrainingOpenRoute","VoTrainingOpenPath","VoTrainingEditRoute","VoTrainingEditPath","VoTrainingCopyRoute","VoTrainingCopyPath","VoTrainingProgressRoute","VoTrainingProgressPath","VoTrainingJournalRoute","VoTrainingJournalPath","VoUserManualPath","VoStudentNewsTabs","VoStudentNewsTabRoute","VoStudentSkrinNewsShowListPath","VoStudentSkrinNewsShowListRoute","VoStudentSkrinNewsOpenItemPath","VoStudentSkrinNewsOpenItemRoute","VoStudentSdlNewsShowListPath","VoStudentSdlNewsShowListRoute","VoStudentSdlNewsOpenItemPath","VoStudentSdlNewsOpenItemRoute","VoStudentTrainingsPath","VoStudentTrainingsRoute","VoStudentTrainingShowPath","VoStudentTrainingShowRoute","VoStudentOpenTrainingPath","VoStudentOpenTrainingRoute","VoStudentOpenTrainingTabsRoute","VoStudentOpenTestPath","VoStudentOpenTestRoute","VoStudentOpenQuestionPath","VoStudentOpenQuestionRoute","VoStudentOpenTestResultPath","VoStudentOpenTestResultRoute","VoPricePath","ApiRegistryPath","SetKaFlLogOut","defaultState","accesses"],"mappings":"iHAAA,8CAEO,SAASA,EAAWC,EAA4BC,GACnD,IAAMC,EAAgC,CAAEC,GAAI,EAAGC,KAAM,WAErD,GAAgB,OAAZJ,EACF,OAAOE,EAET,IAE6BG,EAGxBC,EALDC,OAAoCC,EAEtB,YAAdP,EACFM,EAA2D,QAAlDF,EAAGL,EAAQS,MAAK,SAAAC,GAAC,OAAIA,EAAEP,KAAOQ,IAAUC,SAAS,WAAC,IAAAP,OAAA,EAA/CA,EAAiDE,UAG7DA,EAAuD,QAA9CD,EAAGN,EAAQS,MAAK,SAAAC,GAAC,OAAIA,EAAEP,KAAOQ,IAAUE,KAAK,WAAC,IAAAP,OAAA,EAA3CA,EAA6CC,UAG3D,OAAIA,GAGGL,CACT,C,wFCQaY,IAtBW,SAACC,GAezB,OACEC,cAACC,IAAKC,wBAAA,CAACC,KATA,YADCJ,EAAMK,SAEHJ,cAACK,IAAW,IAEZ,MAMiBN,GAAK,IAAAO,SAC9BP,EAAMO,WAGb,C,kHCwBeC,IArCO,SAACR,GACrB,IAAAS,EAAwCC,oBAAkB,GAAMC,EAAAC,YAAAH,EAAA,GAAzDI,EAAYF,EAAA,GAAEG,EAAeH,EAAA,GAE9BI,EAAgBf,EAAMe,MAAQf,EAAMe,MAAQ,uCASlD,OACEd,cAACe,IAAS,CACRD,MAAOA,EACPE,SAAUjB,EAAMiB,SAChBC,WAAS,EACTC,KAAMN,EAAe,OAAS,WAC9BO,aAAa,MACbC,SAZyB,SAACC,GAC5B,IAAyBC,EAAeD,EAAhCE,OAAUC,MAClBzB,EAAM0B,SAASH,EACjB,EAUIE,MAAOzB,EAAMyB,MACbE,WAAY,CACVC,aACE3B,cAAC4B,IAAU,CACTC,QAnBsB,WAAH,OAAShB,GAAiBD,EAAc,EAoB3DkB,YAAa,SAACC,GAAYA,EAAMC,gBAAiB,EACjDC,UAAW,SAACF,GAAYA,EAAMC,gBAAkB,EAChDE,KAAK,QAAO5B,SAEXM,EAAeZ,cAACmC,IAAU,IAAMnC,cAACoC,IAAa,QAM3D,C,gFC1CKC,EAAoB,SAApBA,GAAoB,OAApBA,IAAoB,qBAApBA,IAAoB,iBAApBA,IAAoB,qBAApBA,CAAoB,EAApBA,GAAoB,IAazB,SAASC,EAA8BC,EAAaC,EAAoBC,GAEtE,IAAMC,EAAUC,OAAOC,SAASC,OAC1BC,EAAQ,GAAAC,OAAML,EAAO,KAAAK,OAAIR,GAE/B,OAAIE,EACK,IAAIO,QAAQF,EAAU,CAC3BN,OAAQA,EACRC,KAAMQ,KAAKC,UAAUT,GACrBU,QAAS,CAAE,eAAgB,sBAIxB,IAAIH,QAAQF,EAAU,CAAEN,OAAQA,GACzC,CA+DA,SAASY,EAAeC,GACpB,OAA0B,OAAtBA,MAGAA,GAAkD,IAA7BA,EAAkBC,YAGvCD,IAAqBA,EAAkBE,cAAcC,SAAS,qBAItE,CAEA,SAASC,EAAkBX,EAAkBY,EAAoCC,EAAwCC,EAAiBC,EAAoBpB,EAA2BD,GACvL,IAAMsB,EAAmB,YAAAf,OAAeP,EAAM,KACxCuB,EAAgB,SAAAhB,OAAYD,EAAQ,KACpCkB,EAA2B,oBAAAjB,OAAuBW,EAAc,KAChEO,EAA+B,wBAAAlB,OAA2BY,EAAkB,KAC5EO,EAAiB,UAAAnB,OAAaN,EAAI,KAClC0B,EAAoB,aAAApB,OAAgBa,EAAO,KAC3CQ,EAAuB,gBAAArB,OAAmBc,EAAU,KAE1D,MAAM,oBAANd,OAA2Be,EAAW,KAAAf,OAAIgB,EAAQ,KAAAhB,OAAIiB,EAAmB,KAAAjB,OAAIkB,EAAuB,KAAAlB,OAAImB,EAAS,KAAAnB,OAAIoB,EAAY,KAAApB,OAAIqB,EACvI,CAGeC,IAtFiB,SAC9B9B,EACAC,EACA8B,EACA7B,GAAQ,sBAAA8B,EAAAC,YAAAC,cAAAC,MAC+F,SAAAC,EAAOC,GAAQ,IAAAlB,EAAAC,EAAAkB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAvB,EAAAC,EAAAuB,EAAAC,EAAA,OAAAZ,cAAAa,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAQlE,OANhDnB,GACFA,EAAiB,WAEfZ,OAAqClE,EACrCmE,OAAyCnE,EAEvCqF,EAAUvC,EAAkBC,EAAKC,EAAQC,GAAK8C,EAAAC,KAAA,EAAAD,EAAAE,KAAA,EAE3BC,MAAMb,GAAS,KAAD,EAGI,GAHnCC,EAAQS,EAAAI,KAEdjC,EAAiBoB,EAASc,OAC1BjC,EAAqBmB,EAASe,YAE1B,IAAUf,EAASgB,GAAE,CAAAP,EAAAE,KAAA,eACjB,IAAIM,MAAM,kBAAkB,KAAD,GAOD,GAJ1BhB,EAA6BD,EAAS3B,QAAQ6C,IAAI,gBAClDhB,EAA0B5B,EAAe2B,GAE3CT,GACAA,EAAiB,YAEjB,IAAUU,EAAc,CAAAO,EAAAE,KAAA,gBAAAF,EAAAU,OAAA,cACjBzG,GAAS,eAAA+F,EAAAE,KAAA,GAEwBX,EAASoB,OAAO,KAAD,GAG/B,GAHxBjB,EAA+BM,EAAAI,KAEjCrB,GACFA,EAAiB,WAEfW,EAAaW,SAAWvD,EAAqB8D,QAAO,CAAAZ,EAAAE,KAAA,gBAAAF,EAAAU,OAAA,SAC/ChB,EAAamB,MAAI,QACfnB,EAAaW,SAAWvD,EAAqB0D,OAChDb,EAAwC,CAAE/F,GAAIkH,cAASC,WAAYC,SAAUtB,EAAaC,eAChGN,EAAS4B,YAAqBtB,KACrBD,EAAaW,SAAWvD,EAAqBoE,UAChDtB,EAA0C,CAAEhG,GAAIkH,cAASC,WAAYC,SAAUtB,EAAaE,iBAClGP,EAAS8B,YAAuBvB,KACjC,eAAAI,EAAAU,OAAA,cAEMzG,GAAS,QAOC,MAPD+F,EAAAC,KAAA,GAAAD,EAAAoB,GAAApB,EAAA,SAGV3B,EAAU2B,EAAAoB,cAAiBZ,MAAQR,EAAAoB,GAAM/C,QAAUgD,OAAMrB,EAAAoB,IACzD9C,EAAa0B,EAAAoB,cAAiBZ,OAASR,EAAAoB,GAAME,MAAQtB,EAAAoB,GAAME,MAAQ,GACnEzB,EAAW3C,EAAOQ,KAAKC,UAAUT,QAAQjD,EACzC6F,EAAM5B,EAAkBoB,EAAQtC,IAAKmB,EAAgBC,EAAoBC,EAASC,EAAYuB,EAAUP,EAAQrC,QACtHsE,QAAQC,IAAI1B,GACN,IAAIU,MAAMV,GAAK,KAAD,oBAAAE,EAAAyB,OAAA,GAAArC,EAAA,mBAEvB,gBAAAsC,GAAA,OAAA1C,EAAA2C,MAAA,KAAAC,UAAA,EAtDS,EAsDT,C,mCCrFD,sGAAO,IAAMC,EAAkB,SAACC,GAAgC,MAC9D,CAAEnG,KAAM,+BAAgCmG,OAAM,EAGnCC,EAAuB,WAAH,MAC/B,CAAEpG,KAAM,qCAAsC,EAKnCqG,EAA+C,SAACC,EAA+CC,GAE1G,QAAcjI,IAAVgI,EACF,MAAO,CAAEE,oBAAqB,CAAEC,UAAW,KAAMC,QAAS,KAAMC,aAAa,EAAOC,YAAa,GAAIC,YAAQvI,IAG/G,IAAMwI,EAASP,EAEf,OAAQO,EAAO9G,MACb,IAAK,+BACH,MAAO,CAAEwG,oBAAqBM,EAAOX,MACvC,IAAK,qCACH,MAAO,CAAEK,oBAAqB,CAAEC,UAAW,KAAMC,QAAS,KAAMC,aAAa,EAAOC,YAAa,GAAIC,YAAQvI,IAC/G,QACE,OAAOgI,EAGb,C,kQC/BMS,EAAeC,aAAe,kBAAK,8BAAqC,IACxEC,EAAYD,aAAc,kBAAM,6BAA0C,IAC1EE,EAAcF,aAAc,kBAAM,4DAAuC,IACzEG,EAAWH,aAAc,kBAAM,8BAAwC,IACvEI,EAAcJ,aAAc,kBAAM,8BAAsC,IACxEK,EAAaL,aAAc,kBAAM,qDAAoC,IACrEM,EAAsBN,aAAc,kBAAM,4DAAkD,IAC5FO,EAAiBP,aAAc,kBAAM,oDAAsC,IAwClEQ,MAjCGC,aAJM,SAACnB,GAAwB,MAAM,CACrDoB,OAASpB,EAAMqB,QAAQA,QAAQD,OAChC,GAmCcF,EA5Bf,SAAsB3I,GAIpB,OAAqB,IAAjBA,EAAM6I,OAED5I,cAAC8I,IAAQ,CAACC,GAAIC,MAIjBC,eAACC,IAAM,CAAA5I,SAAA,CAELN,cAACmJ,IAAK,CAACC,KAAMC,IAAyBC,UAAWjB,IACjDrI,cAACmJ,IAAK,CAACC,KAAMG,IAAyBD,UAAWhB,IACjDtI,cAACmJ,IAAK,CAACC,KAAMI,IAAyBF,UAAWf,IACjDvI,cAACmJ,IAAK,CAACC,KAAMK,IAAyBH,UAAWd,IAGjDxI,cAACmJ,IAAK,CAACC,KAAMM,IAAyBJ,UAAWlB,IACjDpI,cAACmJ,IAAK,CAACC,KAAMO,IAAyBL,UAAWrB,IAEjDjI,cAACmJ,IAAK,CAACC,KAAMQ,IAAyBN,UAAWb,IACjDzI,cAACmJ,IAAK,CAACG,UAAWnB,MAG5B,I,yBCjCa0B,EAAW,SAACC,GAAa,MACnC,CAAE5I,KAAM,YAAa4I,QAAO,EAOlBC,EAAW,WAAH,OAA8B,SAACnF,EAAUoF,GACzCA,MAEbpF,EANJ,CAAE1D,KAAM,gBAOJ0D,EAASqF,YAAKC,MAEtB,CAAC,ECUcxB,EA7BGC,YAAQ,MANC,SAAC/D,GAC1B,MAAO,CACLuF,WAAa,kBAAMvF,EAASmF,IAAW,EAE3C,GA+BerB,EAzBG,SAAC3I,GAQjB,OACEC,cAACoK,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SACjD2I,eAACmB,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAIC,GAAI,GAAKC,GAAI,GAAIC,GAAI,GAAIC,MAAU,CAAEC,UAAY,UAAYxK,SAAA,CACnFN,cAAA,MAAAM,SAAI,gGACJN,cAAC+K,IAAM,CACHC,QAAQ,YACRC,MAAM,UACN/I,KAAK,QACLL,QAZO,SAACR,GAClBtB,EAAMoK,YACR,EAUoC7J,SACvB,4JAMf,I,yDCkFeoI,EA3FGC,aAVM,SAACnB,GAAuB,MAAM,CACpD0D,UAAW1D,EAAMqB,QAAQA,QAAQqC,UAClC,IAEiC,SAACtG,GACjC,MAAO,CACLuG,QAAS,SAACC,GAAiB,OAAKxG,EAASyG,YAAQD,GAAM,EAE3D,GA6Fe1C,EAvFI,SAAC3I,GAElB,IAAAS,EAA4BC,mBAA2B,QAAOC,EAAAC,YAAAH,EAAA,GAAvDoF,EAAMlF,EAAA,GAAE4K,EAAS5K,EAAA,GACxB6K,EAA4C9K,oBAAkB,GAAM+K,EAAA7K,YAAA4K,EAAA,GAA7DE,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GACxCG,EAA4ClL,oBAAkB,GAAMmL,EAAAjL,YAAAgL,EAAA,GAA7DE,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAUlCG,EAAc,WAClBT,EAAU,WACVtF,YAAwBgG,KACrBC,MAAK,SAACnH,GACDA,EAASoH,UACXlG,YAAiBmG,KACdF,MAAK,SAACnH,GACL/E,EAAMoL,QAAQrG,GACdwG,EAAU,UACZ,KAGFA,EAAU,WACVQ,GAAkB,GAEtB,GACJ,EAQMM,EACJnD,eAAAoD,WAAA,CAAA/L,SAAA,CACEN,cAAC+K,IAAM,CACLC,QAAQ,WACRC,MAAM,YACNpJ,QAjCa,SAACR,GAClBqK,GAAkB,EACpB,EA+B0BpL,SACrB,uJAEDN,cAAA,SAAM,IAACA,cAAA,SAEPA,cAAC+K,IAAM,CACLC,QAAQ,YACRC,MAAM,UACN3B,UAAWgD,IAASvD,GAAImB,IAAc5J,SACvC,2JAIL,OAAwB,IAApBP,EAAMmL,UACDlL,cAAC8I,IAAQ,CAACC,GAAImB,MAGrBlK,cAACuM,IAAmB,CAAAjM,SAClB2I,eAACmB,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGkC,UAAU,SAASjC,eAAe,SAASkC,WAAW,SAAS5B,MAAO,CAAE6B,UAAW,MAAOpM,SAAA,CACpH2I,eAACmB,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAGC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAGtK,SAAA,CAC9CN,cAACC,IAAK,CAACG,SAAS,QAAOE,SAAC,idACxBN,cAAA,SAAMA,cAAA,YAERA,cAACoK,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAGC,GAAI,EAAGC,GAAI,EAAGC,GAAI,EAAEtK,SAC/B,YAAXsF,EAAuB+G,IAASP,IAEnCpM,cAAC4M,IAAoB,CACnBC,MAAM,+IACNC,KAAMjB,EACNkB,YAlEkB,WAAH,OAASjB,GAAkB,EAAO,EAmEjDlI,QAAS5D,cAACgN,IAAU,CAACC,cAzCN,WACrBnB,GAAkB,GAClBC,GACF,MAwCM/L,cAACkN,IAAW,CACVC,KAAM1B,EACN2B,QAtEoB,WAAH,OAAS1B,GAAkB,EAAO,EAuEnDmB,MAAM,sHACNQ,UAAU,mSACVC,QAASvB,QAKnB,I,iBCrEerD,EArCGC,aAJM,SAACnB,GAAuB,MAAM,CACpD+F,WAAY/F,EAAMqB,QAAQA,QAAQ2E,cACnC,GAuCc9E,EAlCS,SAAC3I,GACvB,IAAAS,EAA4CC,oBAAkB,GAAMC,EAAAC,YAAAH,EAAA,GAA7DiN,EAAc/M,EAAA,GAAEgN,EAAiBhN,EAAA,GAExCiN,qBAAU,WACR,IAAMC,EAAUC,YAAW,kBAAMH,GAAkB,EAAK,GAAE,MAE1D,OAAO,kBAAMI,aAAaF,EAAS,CACrC,GAAG,IAEH,IAAIhK,EAA+B,KAYnC,OAREA,GAFoB,IAAnB6J,EAESxE,eAAChJ,IAAK,CAACG,SAAS,OAAME,SAAA,CAACN,cAAC+N,IAAU,CAAAzN,SAAC,oIAAmC,0HAItE2I,eAAChJ,IAAK,CAACG,SAAS,QAAOE,SAAA,CAACN,cAAC+N,IAAU,CAAAzN,SAAC,mKAAyC,6NAIhE,IAArBP,EAAMwN,WACDvN,cAAC8I,IAAQ,CAACC,GAAImB,MAGrBlK,cAACoK,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SACjD2I,eAACmB,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAGC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,MAAO,CAAEC,UAAW,UAAWxK,SAAA,CAC7EsD,EACA+I,QAIT,IChBejE,EAnBGC,aAJM,SAACnB,GAAuB,MAAM,CACpDwG,eAAgBxG,EAAMqB,QAAQA,QAAQmF,eACvC,GAqBctF,EAfW,SAAC3I,GAEzB,OAA6B,IAAzBA,EAAMiO,eACDhO,cAAC8I,IAAQ,CAACC,GAAImB,MAGrBlK,cAACoK,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SACjD2I,eAACmB,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAGC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,MAAO,CAAEC,UAAW,UAAWxK,SAAA,CAC9E2I,eAAChJ,IAAK,CAACG,SAAS,OAAME,SAAA,CAACN,cAAC+N,IAAU,CAAAzN,SAAC,kMAA+C,0HACjFqM,QAIT,I,+DC8CesB,GAlEa,WAC1B,IAAAzN,EAAoCC,mBAAgC,MAAKC,EAAAC,YAAAH,EAAA,GAAlE0N,EAAUxN,EAAA,GAAEyN,EAAazN,EAAA,GAChC6K,EAAkC9K,oBAAkB,GAAM+K,EAAA7K,YAAA4K,EAAA,GAAnD6C,EAAS5C,EAAA,GAAE6C,EAAY7C,EAAA,GAW9BmC,qBAAU,WAER,IAAIW,EAAaC,aAAY,WAE3B,IAAMC,GAAY,IAAIC,MAAOC,UACvBnM,EAAY,cAAAQ,OAAiByL,GAEnCxI,YAAgBzD,GACb0J,MAAK,SAACnH,IACc,IAAdsJ,GAAyBtJ,EAAS6J,YAAcA,EAAUA,WAC7DN,GAAa,EAEjB,IACCO,OAAM,SAAA9E,GACLhD,QAAQC,IAAI,qBAAsB+C,EACpC,GAEJ,GAAG,MAIH,OAFAqE,EAAcG,GAEP,WAzBHJ,GACFW,cAAcX,EAwBU,CAC5B,GAAG,IAEH,IAAMnB,EAAc,SAAChL,EAA8B+M,GAClC,cAAXA,GAIJT,GAAa,EACf,EAEA,OACErO,cAAC+O,IAAQ,CAAC5B,KAAMiB,EAAWhB,QAASL,EAAalC,MAAO,CAAEmE,OAAS,KAAM1O,SACvEN,cAACC,IAAK,CAACG,SAAS,OAAO4K,QAAQ,SAC7BhD,OACEiB,eAAAoD,WAAA,CAAA/L,SAAA,CACEN,cAAC4B,IAAU,CAACC,QA9CL,WACfc,OAAOC,SAASqM,QAClB,EA4CyC/M,KAAK,QAAQ2K,MAAM,iFAAevM,SAC/DN,cAACkP,IAAW,CAACC,SAAS,YAExBnP,cAAC4B,IAAU,CAACC,QAASkL,EAAa7K,KAAK,QAAQ2K,MAAM,6CAASvM,SAC5DN,cAACoP,KAAS,CAACD,SAAS,eAGzB7O,SACF,4ZAMP,E,yCC0CeoI,GA7FGC,aAJM,SAACnB,GAAuB,MAAM,CACpD6H,wBAAyB7H,EAAMqB,QAAQA,QAAQwG,wBAChD,GA+Fc3G,EAzFU,SAAC3I,GACxB,IAAAS,EAA4BC,mBAA2B,QAAOC,EAAAC,YAAAH,EAAA,GAAvDoF,EAAMlF,EAAA,GAAE4K,EAAS5K,EAAA,GACxB6K,EAAwC9K,mBAAiB,IAAG+K,EAAA7K,YAAA4K,EAAA,GAArD+D,EAAY9D,EAAA,GAAE+D,EAAe/D,EAAA,GACpCG,EAAkClL,oBAAkB,GAAMmL,EAAAjL,YAAAgL,EAAA,GAAnD6D,EAAS5D,EAAA,GAAE6D,EAAY7D,EAAA,GAE9B+B,qBAAU,WACRrC,EAAU,WAEVtF,YAAY0J,KACTzD,MAAK,SAAC0D,GACLJ,EAAgBI,GAChBrE,EAAU,UACZ,GAEJ,GAAG,IAEH,IAAMsE,EAAmB,WAAH,OAASH,GAAa,EAAO,EASnD,OAAsC,IAAlC1P,EAAMsP,wBACDrP,cAAC8I,IAAQ,CAACC,GAAImB,MAER,YAAXtE,EAEA5F,cAACoK,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SACjDN,cAACoK,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAGC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,MAAO,CAAEC,UAAW,UAAWxK,SAC7EqM,QAOP1D,eAACmB,IAAI,CAACC,WAAS,EAACmC,UAAU,MAAMlC,QAAS,EAAGC,eAAe,SAAQjK,SAAA,CACjEN,cAACoK,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAGC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAGtK,SAC9C2I,eAAChJ,IAAK,CAACG,SAAS,QAAOE,SAAA,CAAC2I,eAAC8E,IAAU,CAAAzN,SAAA,CAAC,IAACN,cAAA,UAAAM,SAAQ,oKAAsC,OACjFN,cAAA,KAAAM,SAAG,uQACH2I,eAAA,MAAA3I,SAAA,CACEN,cAAA,MAAAM,SAAI,iLACJN,cAAA,MAAAM,SAAI,2HAIVN,cAACoK,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAGC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAGtK,SAC9CN,cAAA,OAAK6K,MAAO,CAAEgF,QAAS,OAAQtF,eAAgB,UAAWjK,SAErDgP,EAAahM,OAAS,GAErBtD,cAACe,KAAS,CACRD,MAAM,mHACNG,WAAS,EACTO,MAAO8N,EACPnO,aAAa,MACbO,WAAY,CACVoO,UAAU,EACVC,eAAiB/P,cAAC4B,IAAU,CAACC,QA3C5B,WACXyN,EAAahM,OAAS,IACxB0M,UAAUC,UAAUC,UAAUZ,GAC9BG,GAAa,GAEjB,EAsCgEvN,KAAK,QAAQ2K,MAAM,+DAAYvM,SAC7EN,cAACmQ,KAAY,CAAChB,SAAS,mBAQrCnP,cAACoK,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAGC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAGtK,SAC9CN,cAAA,OAAK6K,MAAO,CAAEgF,QAAS,OAAQtF,eAAgB,UAAWjK,SACvDqM,QAGL3M,cAAC+O,IAAQ,CACP5B,KAAMqC,EACNY,iBAAkB,IAClBhD,QAASwC,EACTS,aAAc,CAAEC,SAAU,MAAOC,WAAY,UAAWjQ,SAExDN,cAACF,KAAiB,CAACsN,QAASwC,EAAkBxP,SAAS,UAAU4K,QAAQ,SAAQ1K,SAAC,oIAM1F,I,oBCvGMkQ,GAAoB,SAAC5N,GAEzB,OAAIA,EAASY,SAASkG,KACb,KAEA9G,EAASY,SAASmG,KAClB,OAEA/G,EAASY,SAASiN,KAClB,UAEA7N,EAASY,SAASoG,KAClB,OAEK,IAChB,EAEM8G,GAAoB,SAAClP,EAAqBmP,GAC9C,OAAQnP,GACN,IAAK,KACH,OAAqB,IAAjBmP,EAAUxR,GACL,CAAE0N,MAAO,yIAA4B+D,YAAa,wCAEpD,CAAE/D,MAAO,oFAAoB+D,YAAa,gCACnD,IAAK,OACH,MAAO,CAAE/D,MAAO,uCAAe+D,YAAa,iCAC9C,IAAK,UACD,MAAO,CAAE/D,MAAO,+EAAoB+D,YAAa,mCACrD,IAAK,OACH,MAAO,CAAE/D,MAAO,6DAAiB+D,YAAa,oBAEhD,KAAK,KACH,MAAO,CAAE/D,MAAO,2CAAmB+D,YAAa,oBAEtD,EAuDelI,GAhDGC,aALM,SAACnB,GAAuB,MAAM,CACpDvI,UAAWuI,EAAMqB,QAAQA,QAAQ5J,UACjCD,QAASwI,EAAMqB,QAAQA,QAAQ7J,QAChC,GAkDc0J,EA7CQ,SAAC3I,GACtB,IACM4Q,EAAwB5R,aAAWgB,EAAMf,QAASe,EAAMd,WAC9DuB,EAAoCC,mBAAuB,MAAKC,EAAAC,YAAAH,EAAA,GAAzDqQ,EAAUnQ,EAAA,GAAEoQ,EAAapQ,EAAA,GAChC6K,EAAsC9K,mBAHE,CAAEoM,MAAO,2CAAmB+D,YAAa,qBAGFpF,EAAA7K,YAAA4K,EAAA,GAAxEqF,EAAWpF,EAAA,GAAEuF,EAAcvF,EAAA,GAClCG,EAA0ClL,mBAAiB,GAAEmL,EAAAjL,YAAAgL,EAAA,GAAtDqF,EAAapF,EAAA,GAAEqF,EAAgBrF,EAAA,GAEhCsF,EAA4BnS,aAAWgB,EAAMf,QAASe,EAAMd,WAC5D2D,EAAmBuO,cAAcC,SAoBvC,OAlBAzD,qBAAU,WAER,IAAM0D,EAA+Bb,GAAkB5N,IACnD,KAAWyO,IAAmBR,KAChCC,EAAcO,GACdN,EAAeL,GAAkBW,EAAgBV,IAErD,GAAG,CAAC/N,IAEJ+K,qBAAU,WACR,IAAI,KAAWqD,IAAkBE,EAAc/R,IAAK,CAClD8R,EAAiBC,EAAc/R,IAC/B,IAAMkS,EAA+Bb,GAAkB5N,GACvDmO,EAAeL,GAAkBW,EAAgBH,GACnD,CACF,GAAG,CAACA,EAAc/R,KAGdY,EAAMd,UAENgK,eAACqI,KAAM,CAAAhR,SAAA,CACLN,cAAA,QAAMuR,IAAI,OAAOC,KAAMZ,EAAYA,cACnC5Q,cAAA,SAAAM,SAAQsQ,EAAY/D,UAW5B,I,qBClFMnE,GAAYC,aALM,SAACnB,GAAuB,MAAM,CACpDiK,aAAcjK,EAAMqB,QAAQA,QAAQqC,UACpCwG,sBAAuBlK,EAAMqB,QAAQA,QAAQ6I,sBAC9C,IA8FchJ,OArFQ,SAAC3I,GACtB,IAAAS,EAAwBC,oBAAkB,GAAMC,EAAAC,YAAAH,EAAA,GAAzC2M,EAAIzM,EAAA,GAAEiR,EAAOjR,EAAA,GACpB6K,EAA0B9K,mBAJE,IAI6B+K,EAAA7K,YAAA4K,EAAA,GAAlDqG,EAAKpG,EAAA,GAAEqG,EAAQrG,EAAA,GAElBsG,EAAUC,cAEdpE,qBAAU,YACJ5N,EAAM0R,cAAgB1R,EAAM2R,wBAC9BC,GAAQ,EAEZ,GAAG,CAAC5R,EAAM0R,aAAc1R,EAAM2R,wBAE9B/D,qBAAU,WACR,IAAIqE,GACU,IAAT7E,GAAmByE,EAAQ,IAC9BI,EAAWzD,aAAY,WACrBsD,GAAS,SAACI,GAAS,OAAKA,EAAY,CAAC,GACvC,GApBwB,MAuB1B,IAAMC,EAA6BnS,EAAM0R,cAAgB1R,EAAM2R,sBAM/D,OAJK,IAAME,IAAW,IAAUzE,GAAS+E,GACvCP,GAAQ,GAGH,WACL9C,cAAcmD,EAChB,CACF,GAAG,CAAC7E,EAAMyE,IAGV,IAAMO,EAAsB,WAC1BR,GAAQ,GACRE,EApC0B,GAqC5B,EA2BA,OACE7R,cAAC+O,IAAQ,CACP5B,KAAMA,EAAMC,QAAS+E,EACrB9B,aAAc,CAAEC,SAAU,SAAUC,WAAY,UAChD1F,MAAO,CAAEuH,MAAO,OAAQC,SAAU,QAASrD,OAAQ,KAAO1O,SAE1DN,cAACC,IAAK,CAACG,SAAS,UAAU4K,QAAQ,WAChCH,MAAO,CAAEuH,MAAO,OAAQE,OAAQ,mBAChCtK,OACEiB,eAAAoD,WAAA,CAAA/L,SAAA,CACEN,cAAC4B,IAAU,CAACM,KAAK,QAAQ2K,MAAM,mDAAWhL,QAzB1B,WACxB,OAAI9B,EAAM0R,cACRE,GAAQ,QACRG,EAAQ7H,KAAKsI,MAIXxS,EAAM2R,uBACRC,GAAQ,QACRG,EAAQ7H,KAAKuI,WAFf,CAKF,EAa+ElS,SACnEN,cAACyS,KAAgB,CAACtD,SAAS,YAE7BnP,cAAC4B,IAAU,CAACM,KAAK,QAAQ2K,MAAM,6CAAUhL,QAASsQ,EAAoB7R,SACpEN,cAACoP,KAAS,CAACD,SAAS,eAGzB7O,SAzCDP,EAAM0R,aACD,gHAEL1R,EAAM2R,sBACD,mIAEF,MAuCX,IC5EMhJ,GAAYC,aAVM,SAACnB,GAAuB,MAAM,CACpDkK,sBAAuBlK,EAAMqB,QAAQA,QAAQ6I,sBAC9C,IAEiC,SAAC9M,GACjC,MAAO,CACLuG,QAAS,SAACC,GAAiB,OAAKxG,EAASyG,YAAQD,GAAM,EAE3D,IA0EMgB,GAAO,SAACrM,GACZ,OACEkJ,eAAAoD,WAAA,CAAA/L,SAAA,CACEN,cAAC+K,IAAM,CACLC,QAAQ,WACRC,MAAM,YACNpJ,QAAS9B,EAAM2S,WAAWpS,SAC3B,uJAEDN,cAAA,SAAM,IAACA,cAAA,SAEPA,cAAC+K,IAAM,CACLC,QAAQ,YACRC,MAAM,UACN3B,UAAWgD,IAASvD,GAAImB,IAAc5J,SACvC,0JAGP,EAGeoI,OA1FM,SAAC3I,GACpB,IAAAS,EAA4BC,mBAA2B,QAAOC,EAAAC,YAAAH,EAAA,GAAvDoF,EAAMlF,EAAA,GAAE4K,EAAS5K,EAAA,GACxB6K,EAA4C9K,oBAAkB,GAAM+K,EAAA7K,YAAA4K,EAAA,GAA7DE,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GACxCG,EAA4ClL,oBAAkB,GAAMmL,EAAAjL,YAAAgL,EAAA,GAA7DE,EAAcD,EAAA,GAAEE,EAAiBF,EAAA,GAYlCG,EAAc,WAClBT,EAAU,WACVtF,YAAwB2M,KACrB1G,MAAK,SAACnH,GACDA,EAASoH,UACXlG,YAAiBmG,KACdF,MAAK,SAACnH,GACL/E,EAAMoL,QAAQrG,GACdwG,EAAU,UACZ,KAGFA,EAAU,WACVQ,GAAkB,GAEtB,GACJ,EAEA,OAAoC,IAAhC/L,EAAM2R,sBACD1R,cAAC8I,IAAQ,CAACC,GAAImB,MAIrBlK,cAACuM,IAAmB,CAAAjM,SAChB2I,eAACmB,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGkC,UAAU,SAASjC,eAAe,SAASkC,WAAW,SAAS5B,MAAO,CAAE6B,UAAW,MAAOpM,SAAA,CACpH2I,eAACmB,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAGC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAGtK,SAAA,CAC9CN,cAACC,IAAK,CAACG,SAAS,QAAOE,SAAC,8dACxBN,cAAA,SAAMA,cAAA,YAERA,cAACoK,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAGC,GAAI,EAAGC,GAAI,EAAGC,GAAI,EAAEtK,SAC/B,YAAXsF,EAAuB+G,IAAS3M,cAACoM,GAAI,CAACsG,WArC9B,WAAH,OAAShH,GAAkB,EAAM,MAuCzC1L,cAAC4M,IAAoB,CACnBC,MAAM,+IACNC,KAAMjB,EACNkB,YA7CgB,WAAH,OAASjB,GAAkB,EAAO,EA8C/ClI,QAAS5D,cAACgN,IAAU,CAACC,cAzCR,WACrBnB,GAAkB,GAClBC,GACF,MAwCQ/L,cAACkN,IAAW,CACVC,KAAM1B,EACN2B,QAjDgB,WAAH,OAAS1B,GAAkB,EAAO,EAkD/CmB,MAAM,sHACNQ,UAAU,mSACVC,QAASvB,QAKrB,I,uFCpFM6G,GAAYC,YAAW,CAC3BC,OAAQ,CACNC,SAAU,WACVC,IAAK,MAEPC,YAAa,CACXhI,MAAO,UAgBLiI,GAAW,SAACnT,GAChB,OAAmB,OAAfA,EAAMoT,KACD,KAGPnT,cAAAqM,WAAA,CAAA/L,SACGP,EAAMoT,KAAKC,KAAI,SAAC5I,EAAM6I,GAAK,OAC1BrT,cAACsT,KAAU,CAAatI,QAAQ,YAAW1K,SAAGkK,GAA7B6I,EAA+C,KAIxE,EAsCeE,GApCG,SAACxT,GACf,IAAMyT,EAAUZ,KACVa,EAAe,WAAH,OAAS1T,EAAMgN,YAAYhN,EAAMZ,GAAI,EAGzD,OACE8J,eAACyK,KAAM,CACLvG,MAAM,EACNC,QAASqG,EACTE,OAAO,QACP1S,WAAc,EACduS,QAAS,CAAEI,MAAOJ,EAAQV,QAASxS,SAAA,CAEnCN,cAAC6T,KAAW,CAAC1U,GAAG,sBAAqBmB,SACnC2I,eAACmB,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAASkC,WAAW,SAAQnM,SAAA,CACrEN,cAACoK,IAAI,CAACI,MAAM,EAAME,GAAI,GAAGpK,SACvBN,cAACC,IAAK,CAACG,SAAUL,EAAMmB,KAAKZ,SAAEP,EAAM8M,UAEtC7M,cAACoK,IAAI,CAACI,MAAM,EAAME,GAAI,EAAGG,MAAQ,CAAEgF,QAAS,OAAQtF,eAAe,YAAcjK,SAC7EN,cAAC4B,IAAU,CAAC,aAAW,QAAQC,QAAS4R,EAAcK,UAAWN,EAAQP,YAAY3S,SACnFN,cAACoP,KAAS,CAACD,SAAS,mBAK9BnP,cAAC+T,KAAa,CAACC,UAAU,EAAK1T,SAC5BN,cAACiU,KAAiB,CAChBC,UAAW,EAAE5T,SAEbN,cAACkT,GAAQ,CAACC,KAAMpT,EAAMwG,iBAKhC,EClCemC,GA7BGC,aAZM,SAACnB,GAAuB,MAAM,CACrD2M,kBAAmB3M,EAAM4M,kBAAkBA,kBAC3CC,oBAAqB7M,EAAM8M,oBAAoBA,oBAC/C,IAE0B,SAAC1P,GAC3B,MAAO,CACN2P,gBAAiB,SAACpV,GAAU,OAAKyF,EAAS4P,aAA0BrV,GAAI,EACxEsV,kBAAmB,SAACtV,GAAU,OAAKyF,EAAS8P,aAA4BvV,GAAI,EAE9E,GA+BeuJ,EA1BQ,SAAC3I,GAEvB,OAAQkJ,eAAAoD,WAAA,CAAA/L,SAAA,CACNP,EAAMoU,kBAAkBf,KAAI,SAAC5I,GAAI,OACjCxK,cAACuT,GAAS,CACTrS,KAAK,QACL2L,MAAM,gJACNtG,SAAUiE,EAAKjE,SACfpH,GAAIqL,EAAKrL,GACT4N,YAAahN,EAAMwU,iBAClB,IAGFxU,EAAMsU,oBAAoBjB,KAAI,SAAC5I,GAAI,OACnCxK,cAACuT,GAAS,CACTrS,KAAK,UACL2L,MAAM,uFACNtG,SAAUiE,EAAKjE,SACfpH,GAAIqL,EAAKrL,GACT4N,YAAahN,EAAM0U,mBAClB,MAIL,I,mBCVME,GAAWzM,aAAc,kBAAM,8BAAyC,IACxEC,GAAYD,aAAc,kBAAM,6BAA+C,IAC/E0M,GAAoB1M,aAAc,kBAAM,qDAA2D,IAGnG0K,GAAYC,YAAW,CAC5BgC,KAAM,CACLhF,QAAS,OACTiF,cAAe,SACfC,UAAW,QAEZC,OAAQ,CACPtI,UAAW,OACXqI,UAAW,MACXjK,UAAW,SACXsH,MAAQ,OACR6C,SAAW,SAEZC,KAAM,CACLjK,MAAO,UACPkK,OAAQ,OACRC,eAAgB,QAEjBC,QAAS,CACRC,SAAU,UA4KG5M,OAhJGC,aAvBM,SAACnB,GAAuB,IAAA+N,EAAA,MAAM,CACrDC,SAAqB,QAAbD,EAAE/N,EAAMsC,aAAK,IAAAyL,OAAA,EAAXA,EAAazL,MACvB2H,aAAcjK,EAAMqB,QAAQA,QAAQqC,UACpCuK,eAAgBjO,EAAMqB,QAAQA,QAAQ2E,cACtCvO,UAAWuI,EAAMqB,QAAQA,QAAQ5J,UACjC+O,eAAgBxG,EAAMqB,QAAQA,QAAQmF,eACtCqB,wBAAyB7H,EAAMqB,QAAQA,QAAQwG,wBAC/CqC,sBAAuBlK,EAAMqB,QAAQA,QAAQ6I,sBAC7C,IAEiC,SAAC9M,GAClC,MAAO,CACNuG,QAAS,SAACC,GAAiB,OAAKxG,EAASyG,YAAQD,GAAM,EACvDsK,UAAW,SAACtK,GAAkB,OAAKxG,EAAS+Q,YAAUvK,GAAM,EAC5DwK,cAAe,SAAC5W,GAA+B,OAAK4F,EAASiR,YAAe7W,GAAS,EAErF8W,eAAgB,SAAC1K,GAAoB,OAAKxG,EAASmR,aAAW3K,GAAM,EAEpE4K,iBAAkB,kBACjBpR,EAASqR,aAAW,GAAAlT,OAAoBmT,IAAmC,KAAAnT,OAAIpD,IAAUwW,MAAQ,OAAO,EAE3G,GAkJezN,EA7If,SAAa3I,GACZ,IAAAS,EAA4BC,mBAA2B,QAAOC,EAAAC,YAAAH,EAAA,GAAvDoF,EAAMlF,EAAA,GAAE4K,EAAS5K,EAAA,GAExBiN,qBAAU,WACe,YAApB5N,EAAMd,UACTmX,IAGAC,GAEF,GAAG,CAACtW,IAGJ,IAAMqW,EAAc,WAEE,OAAnBrW,EAAMyV,WACiB,IAAvBzV,EAAM0R,eACmB,IAAzB1R,EAAM0V,iBACmB,IAAzB1V,EAAMiO,iBAC4B,IAAlCjO,EAAMsP,yBAEPrJ,YAAiBmG,KACfF,MAAK,SAACnH,GACN/E,EAAMoL,QAAQrG,GACeA,EAAS8D,SACT,IAA3B9D,EAAS0I,gBACmB,IAA5B1I,EAASkJ,iBAC4B,IAArClJ,EAASuK,wBAIViH,IAGAhL,EAAU,UAEZ,GAEH,EAEM+K,EAAU,WACS,OAAnBtW,EAAMyV,UACVxP,YAAiBmG,KACfF,MAAK,SAACnH,GACN/E,EAAMoL,QAAQrG,GACVA,EAAS8D,OACZ5C,YAAqBuQ,MACnBtK,MAAK,SAACnH,GACN/E,EAAM2V,UAAU5Q,EAAS0R,QACrB1R,EAAS0R,OAAO5N,QAAU9D,EAAS9F,SAAW8F,EAAS9F,QAAQsE,OAAS,GAC3EvD,EAAM6V,cAAc9Q,EAAS9F,SAE9BsM,EAAU,UACX,IAGDA,EAAU,UAEZ,GAEH,EAGMgL,EAAa,eAAA/R,EAAAC,YAAAC,cAAAC,MAAG,SAAAC,IAAA,IAAA8R,EAAAC,EAAAC,EAAAC,EAAA,OAAAnS,cAAAa,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,cAAAF,EAAAE,KAAA,EAG4BoR,QAAQC,IAAI,CAC5D9Q,YAAkB+Q,MAClBhX,EAAMiW,qBACJ,KAAD,EAAAS,EAAAlR,EAAAI,KAAA+Q,EAAA/V,YAAA8V,EAAA,GAHKE,EAAcD,EAAA,GAAEE,EAAgBF,EAAA,GAMnCC,GACH5W,EAAM2V,UAAUiB,GAGbC,GACH7W,EAAM+V,eAAec,GAGtBtL,EAAU,WAAY,wBAAA/F,EAAAyB,OAAA,GAAArC,EAAA,KACtB,kBAlBkB,OAAAJ,EAAA2C,MAAA,KAAAC,UAAA,KAoBbqM,EAAUZ,KAEhB,GAAuB,OAAnB7S,EAAMyV,SACT,OAAOxV,cAACgX,EAAS,IAElB,GAAIjX,EAAM0V,eACT,OAAOzV,cAACiX,EAAe,IAExB,GAAIlX,EAAMsP,wBACT,OAAOrP,cAACkX,GAAgB,IAEzB,GAAyB,YAApBnX,EAAMd,WAA6Bc,EAAMiO,eAC7C,OAAOhO,cAACmX,EAAiB,IAG1B,GAAe,YAAXvR,GAAmC,SAAXA,EAC3B,OAAO+G,IAER,IAAMyK,EAAeC,eAErB,OACCrX,cAAA,OAAK8T,UAAWN,EAAQqB,KAAKvU,SAC5B2I,eAACqO,KAAa,CAACC,MAAOH,EAAa9W,SAAA,CAClCN,cAACwX,IAAW,IACZxX,cAACyX,GAAc,IACfzX,cAACoK,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SAClD2I,eAACmB,IAAI,CAACI,MAAM,EAAMC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAGtK,SAAA,CAChDN,cAAC0X,GAAc,IACf1X,cAACiO,GAAmB,IACpBjO,cAAC2X,GAAc,IACf3X,cAAC4X,WAAQ,CAACC,SAAUlL,IAAOrM,SAC1B2I,eAACC,IAAM,CAAA5I,SAAA,CACNN,cAACmJ,IAAK,CAACC,KAAMc,IAAeZ,UAAWnB,GAAW2P,OAAK,IACvD9X,cAACmJ,IAAK,CAACC,KAAMmJ,IAAqBjJ,UAAWyO,IAC7C/X,cAACmJ,IAAK,CAACC,KAAMoJ,IAAuBlJ,UAAW0O,KAC/ChY,cAACmJ,IAAK,CAACC,KAAMJ,IAAcM,UAAWqL,KACtC3U,cAACmJ,IAAK,CAACC,KAAM6O,IAAmB3O,UAAWsL,KAK3C5U,cAACkY,EAAY,cAKjBlY,cAAA,UAAQ8T,UAAWN,EAAQwB,OAAO1U,SACjCN,cAACoK,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SAClDN,cAACoK,IAAI,CAACI,MAAM,EAAKlK,SAChB2I,eAAA,QAAA3I,SAAA,CAAM,aAAO,IAAImO,MAAO0J,cAAc,0EAO7C,I,gDClNaC,GAAW,CACpBtO,MbawC,SAACtC,EAA+BC,GAExE,QAAcjI,IAAVgI,EACA,MAAO,CAAEsC,MAAQ,MAGrB,IAAM9B,EAASP,EACf,OAAQO,EAAO9G,MACX,IAAK,YACG,MAAO,CAAC4I,MAAQ,IAAIuO,IAAYrQ,EAAO8B,MAAMlG,QAASoE,EAAO8B,MAAM1K,KAAM4I,EAAO8B,MAAMjD,QAC9F,IAAK,cACD,OAAA3G,wBAAA,GAAYsH,GAAK,IAAEsC,MAAO,OAC9B,QACI,OAAOtC,EAEnB,Ea3BIqB,QAAUyP,IACV9B,OAAS+B,IACT7Q,oBAAsB8Q,KACtBpE,kBAAoBqE,KACpBnE,oBAAsBoE,KACtBC,SAAWC,M,mDCRTlQ,GAAYC,YAAQ,MALC,SAAC/D,GAC1B,MAAO,CACLuF,WAAa,kBAAMvF,EAASmF,IAAW,EAE3C,IAcM8O,GAAa,SAAAC,GAAAC,aAAAF,EAAAC,GAAA,IAAAE,EAAAC,aAAAJ,GAAA,SAAAA,IAAA,IAAAK,EAAAC,aAAA,KAAAN,GAAA,QAAAO,EAAAjS,UAAA7D,OAAA+V,EAAA,IAAAC,MAAAF,GAAAG,EAAA,EAAAA,EAAAH,EAAAG,IAAAF,EAAAE,GAAApS,UAAAoS,GA0BhB,OA1BgBL,EAAAF,EAAAQ,KAAAtS,MAAA8R,EAAA,OAAAjW,OAAAsW,KAEV7R,MAAe,CACpBiS,UAAU,EACV7T,OAAS,QACVsT,EAiBMQ,WAAa,SAACrY,GAEnB6X,EAAKS,SAAU,CAAE/T,OAAS,OAAQ6T,UAAW,IAC7CP,EAAKnZ,MAAMoK,YACb,EAAC+O,CAAA,CAjBA,OAiBAU,aAAAf,EAAA,EAAAgB,IAAA,oBAAArY,MAfD,SAAyBsI,EAAcgQ,GACtC,IAADC,EAAA,KACQC,EAAY,IAAI3B,IAAYvO,EAAM1K,KAAM0K,EAAMlG,QAASkG,EAAMjD,OAEnEoT,YAA4BC,KAAeF,GACxC/N,MAAM,SAACnH,GACNiV,EAAKJ,SAAU,CAAE/T,OAAS,WAC5B,IACCgJ,OAAO,SAAC9E,GAAgB,GAC7B,GAAC,CAAA+P,IAAA,SAAArY,MAQD,WAGE,OAAI2Y,KAAK3S,MAAMiS,SAEY,YAAtBU,KAAK3S,MAAM5B,QAA+C,SAAtBuU,KAAK3S,MAAM5B,OACzC+G,IAIT3M,cAACoK,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SACnD2I,eAACmB,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAIC,GAAI,GAAKC,GAAI,GAAIC,GAAI,GAAIC,MAAU,CAAEC,UAAY,UAAYxK,SAAA,CACnFN,cAAA,MAAAM,SAAI,gGACJN,cAAC+K,IAAM,CACHlJ,QAAWsY,KAAKT,WAChB1O,QAAQ,YACRC,MAAM,UACN/I,KAAK,QAAO5B,SAAC,6JAOhB6Z,KAAKpa,MAAMO,QACpB,IAAC,EAAAuZ,IAAA,2BAAArY,MA9CD,SAAuC4Y,GACrC,MAAO,CAAEX,UAAU,EAAM7T,OAAS,OACpC,KAACiT,CAAA,CATgB,CAASwB,aAwDb3R,MAAUmQ,ICzEnBnQ,GAAYC,YAAQ,MARQ,SAAC/D,GACjC,MAAO,CACL0V,eAAgB,SAACC,GAAwB,OAAK3V,EAAS4V,YAAsBD,GAAa,EAC1FE,qBAAsB,kBAAM7V,EAAS8V,cAAuB,EAC5D7Q,SAAU,SAACC,GAAY,OAAKlF,EAASiF,EAASC,GAAO,EAEzD,IAKM6Q,GAAa,SAACpY,GAClB,IAAMG,EAAUC,OAAOC,SAASC,OAC1BC,EAAQ,GAAAC,OAAML,EAAO,KAAAK,OAAIR,GAC/B,OAAO,IAAIS,QAAQF,EAAU,CAAEN,OAAQ,OACzC,EAqDekG,OAnDO,SAAC3I,GACrB,IAAAS,EAAoCC,mBAAgC,MAAKC,EAAAC,YAAAH,EAAA,GAAlE0N,EAAUxN,EAAA,GAAEyN,EAAazN,EAAA,GAOhCiN,qBAAU,WACR,IACM9I,EAAU8V,GADH,sBAcb,OAXAjV,MAAMb,GACHoH,MAAK,SAACnH,GACL,OAAOA,EAAS8V,MAClB,IACC3O,MAAK,SAAC4O,GACL,GAAwB,YAApBA,EAA+B,CACjC,IAAIvM,EAAaC,YAAYuM,EAAW,KACxC3M,EAAcG,EAChB,CACF,IAEK,WAnBHJ,GACFW,cAAcX,EAkBU,CAC5B,GAAG,IAEH,IAAM4M,EAAY,WAEhB,IACMjW,EAAW8V,GADJ,qBAGbjV,MAAMb,GACHoH,MAAK,SAACnH,GACL,IAAI,IAAUA,EAASgB,GAIvB,OAAOhB,EAASoB,OAHdnG,EAAM8J,SAAS,IAAI9D,MAAM,mBAI7B,IACCkG,MAAK,SAAC7F,GACL,IAAMmU,EAA2BnU,EACjCrG,EAAMua,eAAeC,EACvB,IACC3L,OAAM,SAAA9E,GACL/J,EAAM0a,sBACR,GACJ,EAEA,OAAO,IACT,IC9DM/X,GAAUqY,SAASC,qBAAqB,QAAQ,GAAGC,aAAa,QAChEnJ,GAAUoJ,aAAqB,CAAEC,SAAUzY,KAC3C0Y,GCNS,SAAwBtJ,EAAkBuJ,GACrD,IAAMC,EAAa,CACfC,KACAC,aAAiB1J,IAGf2J,EAAcC,aAAexb,wBAAC,CAAC,EAC9BkY,IAAQ,IACXuD,OAAQC,aAAc9J,MAGpB+J,EAAY,GACZC,EAAoC,qBAAXnZ,OAAyB,KAAOA,OAK/D,OAJImZ,GAAmBA,EAAgBC,8BACnCF,EAAU5R,KAAK6R,EAAgBC,gCAG5BC,aACHP,EACAJ,EACAY,KAAO/U,WAAC,EAAD,CAACgV,KAAehV,WAAC,EAAGoU,IAAWvY,OAAK8Y,IAEnD,CDhBcM,CAAerK,IAG5BnP,OAAeyZ,WAAahB,GAE7BiB,IAASC,OACLtc,cAACuc,IAAQ,CAACnB,MAAOA,GAAM9a,SACnBN,cAACwc,KAAe,CAAC1K,QAASA,GAAQxR,SAC9B2I,eAAC4P,GAAa,CAAAvY,SAAA,CACVN,cAACyc,GAAG,IACJzc,cAAC0c,GAAa,WAI1B3B,SAAS4B,eAAe,Q,+ME1BbC,EAAI3V,EAAA4V,GAAA,OAAAC,EAAA5V,MAAA,KAAAC,UAAA,UAAA2V,IA2BlB,OA3BkBA,EAAAtY,YAAAC,cAAAC,MAAnB,SAAAC,EAAuByE,EAAc2T,GAAmB,IAAArZ,EAAAC,EAAAjB,EAAAI,EAAA+B,EAAAC,EAAAlB,EAAAC,EAAAwB,EAAA,OAAAZ,cAAAa,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAQP,OAP3C/B,OAAqClE,EACrCmE,OAA0CnE,EAExCkD,EAAUC,OAAOC,SAASC,OAC1BC,EAAQ,GAAAC,OAAML,EAAO,KAAAK,OAAIqG,GAAI7D,EAAAC,KAAA,EAG3BX,EAAU,IAAI7B,QAAQF,EAAUia,GAAOxX,EAAAE,KAAA,EACtBC,MAAMb,GAAS,KAAD,EAGI,GAHnCC,EAAQS,EAAAI,KAEdjC,EAAiBoB,EAASc,OAC1BjC,EAAqBmB,EAASe,YAE1B,IAAUf,EAASgB,GAAE,CAAAP,EAAAE,KAAA,eACjB,IAAIM,MAAM,kBAAkB,KAAD,UAAAR,EAAAU,OAAA,SAG5BnB,EAASoB,QAAM,QAML,MANKX,EAAAC,KAAA,GAAAD,EAAAoB,GAAApB,EAAA,SAGhB3B,EAAU2B,EAAAoB,cAAiBZ,MAAQR,EAAAoB,GAAM/C,QAAUgD,OAAMrB,EAAAoB,IACzD9C,EAAa0B,EAAAoB,cAAiBZ,OAASR,EAAAoB,GAAME,MAAQtB,EAAAoB,GAAME,MAAQ,GACnExB,EAAM5B,EAAkBX,EAAUY,EAAgBC,EAAoBC,EAASC,EAAYkZ,EAAOta,KAAMsa,EAAOva,QACrHsE,QAAQC,IAAI1B,GACN,IAAIU,MAAMV,GAAK,KAAD,oBAAAE,EAAAyB,OAAA,GAAArC,EAAA,oBAEvBuC,MAAA,KAAAC,UAAA,CAED,SAAS1D,EAAkBX,EAAmBY,EAAoCC,EAAwCC,EAAiBC,EAAoBpB,EAAoCD,GACjM,IAAMsB,EAAoB,YAAAf,OAAeP,EAAM,KACzCuB,EAAiB,SAAAhB,OAAYD,EAAQ,KACrCkB,EAA4B,oBAAAjB,OAAuBW,EAAc,KACjEO,EAAgC,wBAAAlB,OAA2BY,EAAkB,KAC7EO,EAAkB,UAAAnB,OAAiB,OAAJN,QAAI,IAAJA,OAAI,EAAJA,EAAM6D,WAAU,KAC/CnC,EAAqB,aAAApB,OAAgBa,EAAO,KAC5CQ,EAAwB,gBAAArB,OAAmBc,EAAU,KAE3D,MAAM,oBAANd,OAA2Be,EAAW,KAAAf,OAAIgB,EAAQ,KAAAhB,OAAIiB,EAAmB,KAAAjB,OAAIkB,EAAuB,KAAAlB,OAAImB,EAAS,KAAAnB,OAAIoB,EAAY,KAAApB,OAAIqB,EACvI,CAEO,SAAe4B,EAAGgX,EAAAC,GAAA,OAAAC,EAAAhW,MAAA,KAAAC,UAAA,CAGxB,SAAA+V,IAAA,OAAAA,EAAA1Y,YAAAC,cAAAC,MAHM,SAAAyY,EAAsB/T,EAAc2T,GAAoB,IAAAK,EAAA,OAAA3Y,cAAAa,MAAA,SAAA+X,GAAA,cAAAA,EAAA7X,KAAA6X,EAAA5X,MAAA,OACtB,OAAjC2X,EAAIld,YAAA,CAAKsC,OAAQ,OAAUua,GAAMM,EAAA5X,KAAA,EAC1BmX,EAAQxT,EAAMgU,GAAM,KAAD,SAAAC,EAAApX,OAAA,SAAAoX,EAAA1X,MAAA,wBAAA0X,EAAArW,OAAA,GAAAmW,EAAA,MACjCjW,MAAA,KAAAC,UAAA,CAEM,SAAe8S,EAAIqD,EAAAC,GAAA,OAAAC,EAAAtW,MAAA,KAAAC,UAAA,CAMzB,SAAAqW,IAAA,OAAAA,EAAAhZ,YAAAC,cAAAC,MANM,SAAA+Y,EAA0BrU,EAAc3G,GAAO,IAAAsa,EAAAK,EAAAM,EAAAvW,UAAA,OAAA1C,cAAAa,MAAA,SAAAqY,GAAA,cAAAA,EAAAnY,KAAAmY,EAAAlY,MAAA,OAIgB,OAHrD,QADuCsX,EAA0BW,EAAApa,OAAA,QAAA9D,IAAAke,EAAA,GAAAA,EAAA,GAAG,QAEjFX,EAAS,CAAE5Z,QAAS,CAAE,eAAgB,sBAElCia,EAAIld,YAAA,CAAKsC,OAAQ,OAAQC,KAAMQ,KAAKC,UAAUT,IAAUsa,GAAMY,EAAAlY,KAAA,EACvDmX,EAAQxT,EAAMgU,GAAM,KAAD,SAAAO,EAAA1X,OAAA,SAAA0X,EAAAhY,MAAA,wBAAAgY,EAAA3W,OAAA,GAAAyW,EAAA,KACjCD,EAAAtW,MAAA,KAAAC,UAAA,CAEM,SAAeyW,EAAGC,EAAAC,GAAA,OAAAC,EAAA7W,MAAA,KAAAC,UAAA,CAKxB,SAAA4W,IAAA,OAAAA,EAAAvZ,YAAAC,cAAAC,MALM,SAAAsZ,EAAyB5U,EAAc3G,GAAO,IAAAsa,EAAAK,EAAAa,EAAA9W,UAAA,OAAA1C,cAAAa,MAAA,SAAA4Y,GAAA,cAAAA,EAAA1Y,KAAA0Y,EAAAzY,MAAA,OAGgB,OAFpD,QADsCsX,EAA0BkB,EAAA3a,OAAA,QAAA9D,IAAAye,EAAA,GAAAA,EAAA,GAAG,QAEhFlB,EAAS,CAAE5Z,QAAS,CAAE,eAAgB,sBAClCia,EAAIld,YAAA,CAAKsC,OAAQ,MAAOC,KAAMQ,KAAKC,UAAUT,IAAUsa,GAAMmB,EAAAzY,KAAA,EACtDmX,EAAQxT,EAAMgU,GAAM,KAAD,SAAAc,EAAAjY,OAAA,SAAAiY,EAAAvY,MAAA,wBAAAuY,EAAAlX,OAAA,GAAAgX,EAAA,KACjCD,EAAA7W,MAAA,KAAAC,UAAA,CAEM,SAAegX,EAAUC,EAAAC,GAAA,OAAAC,EAAApX,MAAA,KAAAC,UAAA,CAG/B,SAAAmX,IAAA,OAAAA,EAAA9Z,YAAAC,cAAAC,MAHM,SAAA6Z,EAA6BnV,EAAc2T,GAAoB,IAAAK,EAAA,OAAA3Y,cAAAa,MAAA,SAAAkZ,GAAA,cAAAA,EAAAhZ,KAAAgZ,EAAA/Y,MAAA,OAC1B,OAApC2X,EAAIld,YAAA,CAAKsC,OAAQ,UAAaua,GAAMyB,EAAA/Y,KAAA,EAC7BmX,EAAQxT,EAAMgU,GAAM,KAAD,SAAAoB,EAAAvY,OAAA,SAAAuY,EAAA7Y,MAAA,wBAAA6Y,EAAAxX,OAAA,GAAAuX,EAAA,MACjCrX,MAAA,KAAAC,UAAA,C,kCChED,imLAEO,IAAMsX,EAA4B,gBAC5BtS,EAA4B,oBAE5BH,EAA4B,uBAC5B0S,EAA4B,oBAC5BC,EAA4B,mBAC5BC,EAAwB,qBACxBjM,EAA8B,yBAE9BkM,EAAgC,kBAChC9H,EAAgC,sBAChCR,EAAmC,yBAEnCuI,EAAgC,oBAChCC,EAAwB,qBACxBC,EAAqC,8BAGrCC,EAAyB,kBACzBC,EAAqB,cACrBC,EAAiC,gCACjCC,EAAkC,uBAElCC,EAA0B,mBAE1BC,EAAgC,uBAChCC,EAAgC,iCAChCC,EAA8B,+BAE9BC,EAAyB,iBAEzBC,EAAqC,8BACrCC,EAAsC,+BACtCC,EAAwC,iCACxCC,EAAmC,4BACnCC,EAAuC,gCACvCC,EAAyC,kCACzCC,EAAmC,6BACnCC,EAA0C,mCAE1CC,EAAwC,6BACxCxQ,EAA0C,6BAG1CyQ,EAAsC,mCACtCC,EAAsC,oCAGtCC,EAAoC,2BAIpCC,EAAsC,wBACtCC,EAAsC,wBACtCC,EAA0C,4BAE1CC,EAAgC,oBAGhCC,EAAyB,iBACzBC,EAAkC,2BAClCC,EAAwC,6BACxCC,EAAkC,gCAElCC,EAA2B,eAE3BC,EAA6B,0BAE7BC,EAAgC,0BAChCC,EAAgC,yBAEhCC,EAA6B,uBAC7BC,EAA6B,uBAC7BC,EAAsB,cACtBC,EAA2B,iBAC3BC,GAAoB,sBAEpBC,GAAiC,0BACjCC,GAA+B,wBAC/BC,GAAkC,2BAIlCC,GAA4B,0BAC5BC,GAA8B,uBAC9BC,GAA4B,qBAC5BC,GAA0C,+BAC1CC,GAA0C,kCAE1CC,GAAwB,iBACxBC,GAAmC,6BACnCC,GAAuC,gCAGvCC,GAA4B,+BAC5BC,GAA2B,gBAC3BC,GAAiC,2BAGjCC,GAA4B,iBAC5BC,GAA8B,mBAC9BC,GAAkC,4BAClCC,GAAiC,gCAMjCC,GAAqC,YACrCC,GAAoC,WACpCC,GAAiC,QACjCC,GAAqC,YAIrCC,GAAyB,gBACzBC,GAA8B,mBAE9BC,GAA+B,iCAE/BC,GAA0C,0CAC1CC,GAA6C,6CAE7CC,GAAiC,4BACjCC,GAAiC,yBACjCC,GAAoC,4BAEpCC,GAAwC,4BACxCC,GAA4C,+BAC5CC,GAAkC,kCAClCC,GAAmC,6CACnCC,GAAyC,sCAEzCC,GAAqC,6BACrCC,GAAqC,8BACrCC,GAAgC,uBAChCC,GAAsC,8BACtCC,GAAsC,8BAEtCC,GAAoC,4BACpCC,GAA0C,uCAC1CC,GAA2C,yCAE3CC,GAAoD,4CACpDC,GAAoD,4CAEpDC,GAAiC,oBAEjCC,GAAoC,4CACpCC,GAAsC,yCACtCC,GAA0C,6CAC1CC,GAAyC,8CACzCC,GAAiC,uCAEjCC,GAAqC,4CAErCC,GAAqC,oDACrCC,GAAwC,mDAIxCC,GAAwC,iCACxCC,GAAyB,kBACzBC,GAAuC,gCACvCC,GAAqC,8BACrCC,GAAuC,2BACvCC,GAAiC,6BACjCC,GAA6C,kCAC7CC,GAA0C,2CAC1CC,GAA+B,gCAE/BC,GAAsC,qCACtCC,GAAsC,qCAEtCC,GAAyC,qCACzCC,GAAgC,2CAChCC,GAAsC,0CACtCC,GAAsC,0CAGtCC,GAAkC,iCAClCC,GAAkC,+BAClCC,GAAuC,2CAEvCC,GAAgC,uBAChCC,GAAwC,+BACxCC,GAAoC,+BACpCC,GAAqC,gCACrCC,GAAqC,gCAErCC,GAA8C,2CAG9CC,GAAiC,4BACjCC,GAA+B,0BAC/BC,GAAiC,mCAEjCC,GAAsC,kCACtCC,GAAsC,gCAItCC,GAA+B,+BAC/BC,GAAiC,iCAEjCC,GAAsC,iCACtCC,GAAsC,mCAGtCC,GAAmC,6BACnCC,GAAyC,yCACzCC,GAAqC,8BACrCC,GAAyC,+BACzCC,GAA2C,kCAE3CC,GAAwC,iCACxCC,GAAuC,+BAEvCC,GAAkC,kCAClCC,GAAkC,kCAElCC,GAA6B,sBAC7BC,GAAmC,6BAGnCC,GAAuB,qBACvBvN,GAA4B,kCAI5BwN,GAA4B,kBAC5BC,GAA4B,mBAG5BC,GAAgC,uCAChCC,GAAsC,wCACtC3R,GAA+C,2CAG/C4R,GAAwC,YACxCC,GAAwC,SACxCC,GAAwC,WAGxCC,GAAkC,8CAClCC,GAAqC,iD,kCCvPlD,4BAGMvb,EACJ3M,cAACoK,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SACjDN,cAACmoB,IAAgB,CAACC,eAAa,MAGpBzb,K,+FCJA,SAASzE,EACtBmgB,GAEA,OAAOC,eAAI9jB,YAAAC,cAAAC,MAAE,SAAAC,IAAA,IAAA4jB,EAAAjf,EAAA,OAAA7E,cAAAa,MAAA,SAAAC,GAAA,cAAAA,EAAAC,KAAAD,EAAAE,MAAA,OAMV,OAJK8iB,EAAmCtlB,KAAKulB,MAC5C7lB,OAAO8lB,aAAaC,QAClB,kCACG,SACNnjB,EAAAC,KAAA,EAAAD,EAAAE,KAAA,EAG0B4iB,IAAkB,KAAD,EAKxC,OALI/e,EAAS/D,EAAAI,KAEfhD,OAAO8lB,aAAaE,QAClB,gCACA,SACApjB,EAAAU,OAAA,SAEKqD,GAAS,OAgBhB,MAhBgB/D,EAAAC,KAAA,EAAAD,EAAAoB,GAAApB,EAAA,SAEXgjB,IAGH5lB,OAAO8lB,aAAaE,QAClB,gCACA,QAGFhmB,OAAOC,SAASqM,UAMlB1J,EAAAoB,GAAA,yBAAApB,EAAAyB,OAAA,GAAArC,EAAA,kBAIN,C,wNC1CO,SAASikB,EAAQC,EAAcC,GAEpC,IAAIC,GAAwB,EAK5B,GAHiB,OAAZF,GAAkC,OAAZC,IACzBC,GAAe,GAEbA,EACF,OAAqB,OAAZF,GAAkC,OAAZC,EAIjC,IAAME,EAASC,OAAOC,oBAAoBL,GACpCM,EAASF,OAAOC,oBAAoBJ,GAE1C,GAAIE,EAAO1lB,SAAW6lB,EAAO7lB,OAC3B,OAAO,EAGT,IAAK,IAAI8lB,EAAI,EAAGA,EAAIJ,EAAO1lB,OAAQ8lB,GAAK,EAAG,CACzC,IAAMC,EAAOL,EAAOI,GACdE,EAA4C,kBAAnBT,EAAQQ,IAAkD,kBAAnBP,EAAQO,GAE9E,IAAMC,GAAmBT,EAAQQ,KAAUP,EAAQO,IAC7CC,IAAmBV,EAAQC,EAAQQ,GAAOP,EAAQO,IACtD,OAAO,CAEX,CAEA,OAAO,CACT,CCjBO,IAAMhe,EAAU,SAACD,GAAiB,MACvC,CAAElK,KAAM,WAAYkK,OAAM,EAWfyK,EAAiB,SAAC7W,GAA+B,MAC5D,CAAEkC,KAAM,mBAAoBlC,UAAS,EAG1Bwb,EAAwB,SAACD,GAAwB,OAA0B,SAAC3V,EAAUoF,IAK7F,IAFuB4e,EADI5e,IAAWnB,QAAQA,QACF0R,KAGZvQ,IAAWnB,QAAQA,QAAQ2E,gBAC3B+M,EAAY/M,cAG5C5I,EAASyG,EAAQkP,KAGjB3V,EAAS2kB,KACT5mB,OAAOC,SAASqM,UAGtB,CAAC,EAEYyL,EAAuB,WAAH,OAA8B,SAAC9V,EAAUoF,IAGpE,IAFyBA,IAAWnB,QAAQA,QAAQ2E,eAGtD5I,EAlCF,CAAE1D,KAAM,oBAoCV,CAAC,EAEYqoB,EAAqB,WAAH,OAA8B,SAAC3kB,EAAUoF,GACzCA,IAAWnB,QAAQA,QAAQ2E,eAGtD5I,EAtCF,CAAE1D,KAAM,kBAwCV,CAAC,EAKYqG,EAAoC,SAACC,EAAoCC,GAEpF,QAAcjI,IAAVgI,EACA,MAAO,CAAEqB,QAAU,CAAED,QAAS,EAAO4gB,OAAQ,EAAOhc,eAAgB,EAAOtC,WAAY,EAAO8C,gBAAiB,EAAOqB,yBAA0B,EAAOoa,aAAe,KAAMzqB,QAAU,KAAMC,UAAY,UAAWyS,uBAAwB,IAG/O,IAAM1J,EAASP,EACf,OAAQO,EAAO9G,MACb,IAAK,WACH,MAAO,CAAE2H,QAASb,EAAOoD,MAC3B,IAAK,mBAED,IAAIse,EAAuBxpB,YAAA,GAAQsH,EAAMqB,SAEzC,OADA6gB,EAAWlc,eAAgB,EACpB,CAAE3E,QAAS6gB,GAEtB,IAAK,iBACH,IAAIA,EAAuBxpB,YAAA,GAAQsH,EAAMqB,SAEzC,OADA6gB,EAAWlc,eAAgB,EACpB,CAAE3E,QAAS6gB,GAEpB,IAAK,mBAED,IAAIA,EAAuBxpB,YAAA,GAAQsH,EAAMqB,SAEzC,OADA6gB,EAAW1qB,QAAUgJ,EAAOhJ,QACrB,CAAE6J,QAAS6gB,GAEtB,QACE,OAAOliB,EAEb,C,gOC9Ba6Q,EAAWuB,aAItB,SAAAvB,EAAYjZ,EAAcwE,EAAiBiD,GAAgBsS,YAAA,KAAAd,GAAA,KAH3DjZ,UAAI,OACJwE,aAAO,OACPiD,WAAK,EAEHsT,KAAK/a,KAAOA,EACZ+a,KAAKvW,QAAUA,EACfuW,KAAKtT,MAAQA,CACf,IAkFUlH,EAAS,SAATA,GAAS,OAATA,IAAS,cAATA,IAAS,kBAATA,IAAS,0BAATA,IAAS,gBAATA,IAAS,qBAATA,CAAS,MAERgqB,EAAwD,CACnEC,GAAKjqB,EAAUC,UACfiqB,KAAOlqB,EAAUmqB,IACjBC,KAAOpqB,EAAUwW,KACjB6T,QAAUrqB,EAAUsqB,SAoBVC,EAAW,SAAXA,GAAW,OAAXA,IAAW,eAAXA,IAAW,qBAAXA,IAAW,uBAAXA,IAAW,yBAAXA,CAAW,MACXC,EAAgB,SAAhBA,GAAgB,OAAhBA,IAAgB,mBAAhBA,IAAgB,mBAAhBA,IAAgB,qBAAhBA,IAAgB,yBAAhBA,IAAgB,uBAAhBA,IAAgB,mBAAhBA,IAAgB,uBAAhBA,CAAgB,K,oJC9Kf3jB,EAAuB,SAACD,GAAgC,MACjE,CAAErF,KAAM,+BAAgCqF,WAAU,EAGzCiO,EAA4B,SAACrV,GAAU,MAChD,CAAE+B,KAAM,qCAAsC/B,KAAI,EAKzCoI,EAA2C,SAACC,EAA2CC,GAEhG,QAAcjI,IAAVgI,EACA,MAAO,CAAE4M,kBAAmB,IAEhC,IAAMpM,EAASP,EAEf,OAAQO,EAAO9G,MACX,IAAK,+BACD,MAAO,CAAEkT,kBAAkB,GAADrR,OAAAqnB,YAAM5iB,EAAM4M,mBAAiB,CAAEpM,EAAOzB,YACpE,IAAK,qCAED,MAAO,CAAE6N,kBADwC5M,EAAM4M,kBAAkBiW,QAAO,SAAA7f,GAAI,OAAK,KAAWA,EAAKrL,KAAO6I,EAAO7I,GAAG,KAE9H,QACI,OAAOqI,EAGnB,C,oJC3Bad,EAAyB,SAACH,GAAgC,MACnE,CAAErF,KAAM,iCAAkCqF,WAAU,EAG3CmO,EAA8B,SAACvV,GAAU,MAClD,CAAE+B,KAAM,uCAAwC/B,KAAI,EAK3CoI,EAA6C,SAACC,EAA6CC,GAEpG,QAAcjI,IAAVgI,EACA,MAAO,CAAE8M,oBAAqB,IAElC,IAAMtM,EAASP,EAEf,OAAQO,EAAO9G,MACX,IAAK,iCACD,MAAO,CAAEoT,oBAAmB,GAAAvR,OAAAqnB,YAAO5iB,EAAM8M,qBAAmB,CAAEtM,EAAOzB,YACzE,IAAK,uCAED,MAAO,CAAE+N,oBADwC9M,EAAM8M,oBAAoB+V,QAAO,SAAA7f,GAAI,OAAK,KAAWA,EAAKrL,KAAO6I,EAAO7I,GAAG,KAEhI,QACI,OAAOqI,EAGnB,C,kCCtCA,2GAWMoL,EAAYC,YAAW,CAC3BC,OAAQ,CACNC,SAAU,WACVC,IAAK,MAEPC,YAAa,CACXF,SAAU,WACVuX,MAAO,KACPtX,IAAK,KACL/H,MAAO,UAkDIiC,IArCK,SAACnN,GAEnB,IAAMyT,EAAUZ,IAEhB,OACE3J,eAACyK,IAAM,CACLzS,WAAW,EACXoR,SAAU,KACVlF,KAAMpN,EAAMoN,KACZC,QAASrN,EAAMqN,QACfoG,QAAS,CAAEI,MAAOJ,EAAQV,QAASxS,SAAA,CAEnC2I,eAAC4K,IAAW,CAAAvT,SAAA,CACVN,cAACoK,IAAI,CAACC,WAAS,EAACE,eAAe,SAAQjK,SACrCN,cAACsT,IAAU,CAACtI,QAAQ,KAAKuf,MAAM,SAAQjqB,SAAEP,EAAM8M,UAEjD7M,cAAC4B,IAAU,CAAC,aAAW,QAAQC,QAAS9B,EAAMqN,QAAS0G,UAAWN,EAAQP,YAAY3S,SACpFN,cAACoP,IAAS,CAACD,SAAS,eAIxBnP,cAAC+T,IAAa,CAAAzT,SACZN,cAACsT,IAAU,CAACtI,QAAQ,YAAW1K,SAAGP,EAAMsN,cAG1CpE,eAACuhB,IAAa,CAAAlqB,SAAA,CACZN,cAAC+K,IAAM,CAAClJ,QAAS9B,EAAMuN,QAASrC,MAAM,UAAUD,QAAQ,YAAYyf,WAAS,EAAAnqB,SAAC,iBAG9EN,cAAC+K,IAAM,CAAClJ,QAAS9B,EAAMqN,QAASnC,MAAM,YAAYD,QAAQ,WAAU1K,SAAC,8CAM7E,C,kCCpEA,8DAeMsS,EAAYC,YAAW,CAC3Be,MAAO,CACLb,SAAU,WACVX,MAAO,IACPY,IAAK,MACL0X,KAAM,MACNC,UAAW,wBACXC,gBAAiB,OACjB9f,UAAW,SACX+f,QAAS,OACTC,aAAc,MACdxY,OAAQ,8BA4CG1F,IAvCc,SAAC7M,GAC5B,IAAMyT,EAAUZ,IAEVnQ,EACJwG,eAAA,OAAK6K,UAAWN,EAAQI,MAAMtT,SAAA,CAC5B2I,eAACmB,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SAAA,CACjDN,cAACoK,IAAI,CAACI,MAAM,EAAME,GAAI,GAAGpK,SACvBN,cAACsT,IAAU,CAACtI,QAAQ,YAAYH,MAAO,CAAEkgB,YAAc,OAAQzqB,SAAGP,EAAM8M,UAE1E7M,cAACoK,IAAI,CAACI,MAAM,EAAME,GAAI,EAAEpK,SACtBN,cAACoP,IAAS,CACRvE,MAAO,CAAEmgB,OAAQ,WACjBnpB,QAAS9B,EAAMgN,mBAIrB/M,cAAA,SACAA,cAACoK,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SAChDP,EAAM6D,aAKb,OAAmB,IAAf7D,EAAM+M,KACD,KAIP9M,cAAAqM,WAAA,CAAA/L,SACEN,cAACirB,IAAK,CACJ9d,KAAMpN,EAAM+M,KACZM,QAASrN,EAAMgN,YAAYzM,SAE1BmC,KAIT,C,kCCpEA,mBAceyoB,IAVwB,SAAH3mB,GAAsB,IAAhBjE,EAAQiE,EAARjE,SACxC,OACEN,cAACoK,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SACjDN,cAACoK,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAGC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,MAAO,CAAEggB,QAAS,MAAOvqB,SACvEA,KAIT,C,+LCCaqV,EAAY,SAACvK,GAAkB,MAC1C,CAAElK,KAAM,cAAekK,OAAM,EAGlB+f,EAAgB,SAACC,GAA8B,MAC1D,CAAElqB,KAAM,yBAA0BkqB,aAAY,EAGnCC,EAAc,SAACC,GAAoC,MAC9D,CAAEpqB,KAAM,uBAAwBoqB,YAAW,EAGhCC,EAAiB,SAACD,GAAoC,OAA0B,SAAC1mB,EAAUoF,GACtG,IAAMohB,EAAiCphB,IAAWwM,OAAOA,OAAOgV,eAEhE,GAAmB,OAAfJ,EAAJ,CAKA,IAAMK,EAAqD,OAATH,QAAS,IAATA,OAAS,EAATA,EAAW7rB,MAAK,SAAAC,GAAC,OAAIA,EAAEP,KAAOisB,EAAWjsB,EAAE,IAE7F,IAAMssB,IAAoD,IAA9BA,EAAiBC,SAG3C,OAFA9mB,EAASumB,EAAc,YACvBvmB,EAASymB,EAAYC,IAInBG,EAAiBC,UACnB9mB,EAASymB,EAAYC,GAXvB,MAFE1mB,EAASymB,EAAYC,GAgBzB,CAAC,EAKKK,EAA4B,aAGrBpkB,EAAgC,SAACC,EAAgCC,GAE5E,QAAcjI,IAAVgI,EACF,MAAO,CAAEgP,OAAQ,CAAE5N,QAAQ,EAAOgjB,UAAW,KAAMC,KAAM,KAAMpC,aAAc,KAAM6B,UAAW,KAAME,eAAgB,OAGtH,IAAMxjB,EAASP,EACf,OAAQO,EAAO9G,MACb,IAAK,cAAgB,IAAD4qB,EACZC,EAAsCC,YAAUL,GAEtD,IAAII,EACF,MAAO,CAAEvV,OAAQxO,EAAOoD,MAE1B,IAAMZ,EAAsD,QAAxBshB,EAAG9jB,EAAOoD,KAAKkgB,iBAAS,IAAAQ,OAAA,EAArBA,EAAuBrsB,MAAK,SAAAC,GAAC,OAAIA,EAAEP,KAAO8sB,OAAOF,KAAkC,IAAfrsB,EAAEgsB,QAAiB,IAE9H,OAAGlhB,EAGM,CAAEgM,OADKtW,wBAAA,GAAO8H,EAAOoD,MAAI,IAAEogB,eAAiBhhB,KAI9C,CAAEgM,OAAQxO,EAAOoD,MAE1B,IAAK,yBAED,IAAIse,EAAwBxpB,YAAA,GAAQsH,EAAMgP,QAMxC,OALFkT,EAAW8B,eAAiBxjB,EAAOojB,WAEhCpjB,EAAOojB,YACRc,YAAUP,EAAkB3jB,EAAOojB,WAAWjsB,GAAI,CAAEgtB,QAAS,EAAG/iB,KAAO,MAEhE,CAAEoN,OAAQkT,GAEvB,IAAK,uBAED,IAAI0C,EAAwBlsB,YAAA,GAAQsH,EAAMgP,QAE1C,OADA4V,EAAWd,UAAYtjB,EAAOsjB,UACvB,CAAE9U,OAAQ4V,GAErB,QACE,OAAO5kB,EAEb,C,8HCjFM6kB,EAAmB,SAACtsB,GACxB,OAAuB,OAAlBA,EAAM6D,SAA+C,IAAzB7D,EAAM6D,QAAQN,OACtC,KAEDtD,cAAA,QAAM6K,MAAO,CAAEI,MAAO,MAAOH,UAAW,UAAWxK,SAAEP,EAAM6D,SACrE,EA4FeoJ,IAtFI,SAACjN,GAElB,IAAAS,EAA4BC,mBAA2B,QAAOC,EAAAC,YAAAH,EAAA,GAAvDoF,EAAMlF,EAAA,GAAE4K,EAAS5K,EAAA,GAExB6K,EAAwB9K,mBADI,CAAE6rB,MAAO,GAAIhrB,SAAU,KACEkK,EAAA7K,YAAA4K,EAAA,GAA9CH,EAAII,EAAA,GAAEL,EAAOK,EAAA,GACpBG,EAAwClL,mBAAwB,MAAKmL,EAAAjL,YAAAgL,EAAA,GAA9D4gB,EAAY3gB,EAAA,GAAE4gB,EAAe5gB,EAAA,GAsC9BQ,EACJpM,cAAA,QAAMysB,YAAU,EAACtrB,aAAa,MAAKb,SACjC2I,eAACmB,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SAAA,CACjDN,cAACoK,IAAI,CAACI,MAAI,EAACG,GAAI,GAAIC,GAAI,GAAIF,GAAI,GAAGpK,SAChCN,cAACe,IAAS,CACRD,MAAM,iCACNG,WAAS,EACTG,SA3CgB,SAACC,GACzB,IAAyBirB,EAAYjrB,EAA7BE,OAAUC,MACZkrB,EAAOxsB,wBAAA,GAAQkL,GAAI,IAAEkhB,MAAOA,IAClCnhB,EAAQuhB,EACV,EAwCUlrB,MAAO4J,EAAKkhB,UAGhBtsB,cAACoK,IAAI,CAACI,MAAI,EAACG,GAAI,GAAIC,GAAI,GAAIF,GAAI,GAAGpK,SAChCN,cAACO,IAAa,CACZiB,MAAO4J,EAAK9J,SACZG,SAtCU,SAACD,GACnB,IAAMkrB,EAAOxsB,wBAAA,GAAQkL,GAAI,IAAE9J,SAAUE,IACrC2J,EAAQuhB,EACV,MAsCM1sB,cAACoK,IAAI,CAACI,MAAI,EAACG,GAAI,GAAIC,GAAI,GAAIF,GAAI,GAAGpK,SAChCN,cAACoK,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SACjDN,cAAC+K,IAAM,CACLC,QAAQ,YACRC,MAAM,UACNpJ,QAzCO,SAACR,GACd+J,EAAKkhB,MAAMhpB,OAAS,GAAK8H,EAAK9J,SAASgC,OAAS,IAClDkpB,EAAgB,IAChBlhB,EAAU,WACV2O,YAAyB2E,IAAcxT,GACpCa,MAAK,SAACnH,GACLwG,EAAU,WACNxG,EAAS8D,OACX7I,EAAMkN,gBAGNuf,EAAgB1nB,EAAS2kB,aAE7B,IAEN,EA0BgCnpB,SACrB,sCAMX,OACE2I,eAACmB,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAASkC,WAAW,SAAQnM,SAAA,CACrEN,cAACoK,IAAI,CAACI,MAAM,EAAMC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAIC,GAAI,GAAGtK,SAC/CN,cAACoK,IAAI,CAACC,WAAS,EAACC,QAAS,EAAGC,eAAe,SAAQjK,SACjDN,cAACqsB,EAAgB,CAACzoB,QAAS2oB,QAG/BvsB,cAACoK,IAAI,CAACI,MAAM,EAAMC,GAAI,EAAGC,GAAI,EAAGC,GAAI,GAAIC,GAAI,GAAGtK,SACjC,YAAXsF,EAAuB+G,IAASP,MAIzC,C,iCC7GA,qzHACO,IAAMlC,EAAyB,IACzBlB,EAAwB,aACxBuJ,EAA+B,oBAC/BC,EAAiC,sBAEjCnJ,EAAwB,iBACxB4O,EAA6B,sBAC7B1O,EAA2B,oBAC3BC,EAA0B,mBAC1BC,EAAkC,2BAKlCC,EAA8B,MAE9BijB,EAAwC,WACxCC,EAAwC,kBACxCC,EAAwC,yBACxCC,EAAwC,2BACxCC,EAAwC,wBACxCC,EAAwC,oBAGxCC,EAAkC,wBAGlCC,EAAwC,sCACxCC,EAAwC,4BAExCC,EAAwC,6BACxCC,EAAwC,0BAExCC,EAAwC,qBAExCC,EAA8B,uBAI9BC,EAA8B,mBAC9BC,EAA+B,gCAE/BC,EAAkC,wBAClCC,EAAmC,+BAEnCC,EAAoC,0BAEpCC,EAAoC,yBACpCC,EAAmC,4BAEnCC,EAAkC,yBAClCC,EAAmC,4BAInCC,EAAgC,WAChCC,EAAgC,eAChCC,EAAiC,mCAGjCC,EAA0C,uBAC1CC,EAA0C,6BAE1CC,EAAyC,uBACzCC,EAAyC,0BAGzCC,EAAwC,uBACxCC,EAAwC,6BAExCC,EAAuC,uBACvCC,EAAuC,0BAEvCC,EAAqC,wBAErCC,EAAkC,uBAClCC,EAAmC,0BAInCC,EAA+B,gBAC/BC,EAA+B,oBAC/BC,EAA+B,iCAG/BC,EAAgC,YAChCC,EAAgC,gBAChCC,GAAgC,6BAOhCC,GAAiC,mBACjCC,GAAiC,uCAGjCC,GAAiC,iCACjCC,GAAiC,4BAEjCC,GAA6B,8BAC7BC,GAA6B,2BAG7BC,GAAmC,oCACnCC,GAAkC,8BAGlCC,GAA6B,8BAG7BC,GAAyC,8CACzCC,GAAyC,qCAGzCC,GAAiC,uCACjCC,GAAgC,6BAGhCC,GAA6B,2BAC7BC,GAA8B,qCAI9BC,GAA6B,eAC7BC,GAA4B,0BAE5BC,GAAkC,oBAClCC,GAAmC,2BAEnCC,GAA+B,sBAE/BC,GAAiC,wBACjCC,GAAiC,qBAEjCC,GAAiC,wBACjCC,GAAiC,qBAEjCC,GAAiC,wBACjCC,GAAiC,qBAEjCC,GAAmC,kCACnCC,GAAkC,yBAElCC,GAAkC,iCAClCC,GAAiC,wBAEjCC,GAA4B,iBAI5BC,GAAqC,uBACrCC,GAAqC,2CAErCC,GAA2C,+BAC3CC,GAA2C,qCAE3CC,GAA2C,+BAC3CC,GAA2C,mCAE3CC,GAAyC,+BACzCC,GAAyC,qCAEzCC,GAAyC,+BACzCC,GAAyC,mCAKzCC,GAAoC,uBACpCC,GAAmC,kCAEnCC,GAAuC,4BACvCC,GAAsC,mCAEtCC,GAAwC,6BACxCC,GAAwC,gCAExCC,GAA4C,4CAG5CC,GAAmC,6BACnCC,GAAmC,2EAGnCC,GAAuC,6BACvCC,GAAuC,qEAEvCC,GAAuC,6BACvCC,GAAwC,mEAExCC,GAAiC,YAEjChpB,GAA8B,QAC9BipB,GAA8B,iBAC9BhpB,GAA8B,QAC9B6G,GAA+B,U,kCC7L5C,sGAAO,IAAMsF,EAAa,SAAC3K,GAAoB,MAC7C,CAAElK,KAAM,gBAAiBkK,OAAM,EAGpBynB,EAAgB,WAAH,MACxB,CAAE3xB,KAAM,uBAAwB,EAK5B4xB,EAAgC,CAAElqB,QAAS,EAAO0jB,MAAQ,KAAMxiB,MAAQ,KAAMipB,SAAW,MAGlFxrB,EAAkC,SAACC,EAAkCC,GAEhF,QAAcjI,IAAVgI,EACF,MAAO,CAAEmR,SAAUma,GAErB,IAAM9qB,EAASP,EACf,OAAQO,EAAO9G,MACb,IAAK,gBACH,MAAO,CAAEyX,SAAU3Q,EAAOoD,MAE5B,IAAK,uBACH,MAAO,CAAEuN,SAAUma,GAErB,QACE,OAAOtrB,EAEb,C","file":"static/js/main.4aeb0b1c.chunk.js","sourcesContent":["import { IStateType, IModules, ISiteTheme, ISiteList } from './../Interface/MainTypes';\r\n\r\nexport function GetVoTheme(modules: IModules[] | null, stateType: IStateType): ISiteTheme {\r\n const defaultValueTheme: ISiteTheme = { id: 0, name: \"Default\" };\r\n \r\n if (modules === null)\r\n return defaultValueTheme;\r\n \r\n let siteTheme: ISiteTheme | undefined = undefined;\r\n \r\n if (stateType === 'Desktop') {\r\n siteTheme = modules.find(x => x.id === ISiteList.voDesktop)?.siteTheme;\r\n }\r\n else {\r\n siteTheme = modules.find(x => x.id === ISiteList.voWeb)?.siteTheme;\r\n }\r\n \r\n if (siteTheme)\r\n return siteTheme;\r\n \r\n return defaultValueTheme;\r\n }","import React from \"react\";\r\nimport { Alert, AlertProps } from \"@material-ui/lab\";\r\nimport DoneAllIcon from '@material-ui/icons/DoneAll';\r\n\r\n// вместо Alert заменить на AlertIconOverride - для всего проекта целиком \r\n\r\n\r\nconst AlertIconOverride = (props: AlertProps) => {\r\n\r\n // замена иконки успешного сообщения - похоже на лого СБЕРА\r\n // null - заначение по умолчанию для Icons\r\n\r\n const getIcon = (): React.ReactNode => {\r\n switch (props.severity) {\r\n case \"success\":\r\n return ;\r\n default:\r\n return null;\r\n }\r\n };\r\n\r\n\r\n return (\r\n \r\n {props.children}\r\n \r\n );\r\n}\r\n\r\nexport default AlertIconOverride;","import { useState } from \"react\"\r\nimport Visibility from '@material-ui/icons/Visibility';\r\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport TextField from '@material-ui/core/TextField';\r\n\r\ninterface IProps {\r\n value: string,\r\n setValue(value: string): void,\r\n\r\n label?: string | undefined\r\n disabled?: boolean | undefined\r\n}\r\n\r\nconst PasswordInput = (props: IProps) => {\r\n const [showPassword, setShowPassword] = useState(false);\r\n\r\n const label: string = props.label ? props.label : \"Пароль\";\r\n\r\n const handleClickShowPassword = () => setShowPassword(!showPassword);\r\n\r\n const handelChangePassword = (e: React.ChangeEvent) => {\r\n const { target: { value: password } } = e;\r\n props.setValue(password);\r\n }\r\n\r\n return (\r\n { event.preventDefault();}}\r\n onMouseUp={(event) => { event.preventDefault(); }}\r\n size=\"small\"\r\n >\r\n {showPassword ? : }\r\n \r\n )\r\n }}\r\n />\r\n )\r\n}\r\n\r\nexport default PasswordInput;","import { AppThunkAction } from './index'\r\nimport { IComponentStatus } from '../Interface/MainTypes';\r\nimport { SetHttpErrorMessages, SetHttpErrorMessagesAction } from './HttpErrorMessages';\r\nimport { SetHttpWarningMessages, SetHttpWarningMessagesAction } from './HttpWarningMessages';\r\nimport { v4 as uuidv4 } from 'uuid';\r\nimport { ISkrinResponseMessages } from '../Interface/MainTypes';\r\n\r\nenum ISkrinResponseStatus { Success = 0, Error = 1, Warning = 2 }\r\n\r\ninterface ISkrinResponse {\r\n data: T,\r\n status: ISkrinResponseStatus,\r\n errorMessages: Array,\r\n warningMessages: Array,\r\n}\r\n\r\ntype HttpMethod = 'GET' | 'POST' | 'DELETE' | 'PUT';\r\n\r\nexport type SetStatusRequestType = (status: IComponentStatus) => void;\r\n\r\nfunction GetRequestData(url: string, method: HttpMethod, body?: U): Request {\r\n\r\n const baseUrl = window.location.origin;\r\n const fullPath = `${baseUrl}/${url}`;\r\n\r\n if (body) {\r\n return new Request(fullPath, {\r\n method: method,\r\n body: JSON.stringify(body),\r\n headers: { 'Content-Type': 'application/json' }\r\n });\r\n }\r\n\r\n return new Request(fullPath, { method: method });\r\n}\r\n\r\n\r\nexport const SkrinHttpRequest = (\r\n url: string,\r\n method: HttpMethod,\r\n setStatusRequest?: SetStatusRequestType,\r\n body?: U,\r\n): AppThunkAction | SetHttpWarningMessagesAction | SetHttpErrorMessagesAction> => async (dispatch) => {\r\n\r\n if (setStatusRequest)\r\n setStatusRequest('pending');\r\n\r\n let responseStatus: number | undefined = undefined;\r\n let responseStatusText: string | undefined = undefined;\r\n\r\n const request = GetRequestData(url, method, body);\r\n try {\r\n const response = await fetch(request);\r\n\r\n responseStatus = response.status;\r\n responseStatusText = response.statusText;\r\n\r\n if (false === response.ok) {\r\n throw new Error(\"Failed_request\");\r\n }\r\n\r\n const contentType: string | null = response.headers.get('content-type');\r\n const isJsonResponse: boolean = IsJsonResponse(contentType);\r\n\r\n if (setStatusRequest)\r\n setStatusRequest('success');\r\n\r\n if (false === isJsonResponse)\r\n return undefined;\r\n\r\n const responseData: ISkrinResponse = await response.json();\r\n\r\n if (setStatusRequest)\r\n setStatusRequest('success');\r\n\r\n if (responseData.status === ISkrinResponseStatus.Success) {\r\n return responseData.data;\r\n } else if (responseData.status === ISkrinResponseStatus.Error) {\r\n const errorMessages: ISkrinResponseMessages = { id: uuidv4().toString(), messages: responseData.errorMessages };\r\n dispatch(SetHttpErrorMessages(errorMessages));\r\n } else if (responseData.status === ISkrinResponseStatus.Warning) {\r\n const warningMessages: ISkrinResponseMessages = { id: uuidv4().toString(), messages: responseData.warningMessages };\r\n dispatch(SetHttpWarningMessages(warningMessages));\r\n }\r\n\r\n return undefined;\r\n }\r\n catch (error) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n const stacktrace = error instanceof Error && error.stack ? error.stack : '';\r\n const bodyJson = body ? JSON.stringify(body) : undefined;\r\n const msg = MessageFormatHttp(request.url, responseStatus, responseStatusText, message, stacktrace, bodyJson, request.method);\r\n console.log(msg);\r\n throw new Error(msg);\r\n }\r\n}\r\n\r\nfunction IsJsonResponse(contentTypeHeader: string | null): boolean {\r\n if (contentTypeHeader === null)\r\n return false;\r\n\r\n if (contentTypeHeader && contentTypeHeader.length === 0)\r\n return false;\r\n\r\n if (contentTypeHeader && contentTypeHeader.toLowerCase().includes(\"application/json\"))\r\n return true;\r\n\r\n return false;\r\n}\r\n\r\nfunction MessageFormatHttp(fullPath: string, responseStatus: number | undefined, responseStatusText: string | undefined, message: string, stacktrace: string, body?: string | undefined, method?: string | undefined): string {\r\n const methodLabel: string = `method = ${method};`;\r\n const urlLabel: string = `url = ${fullPath};`;\r\n const responseStatusLabel: string = `responseStatus = ${responseStatus};`;\r\n const responseStatusTextLabel: string = `responseStatusText = ${responseStatusText};`;\r\n const bodyLabel: string = `body = ${body};`;\r\n const messageLabel: string = `message = ${message};`;\r\n const stacktraceLabel: string = `innerStack = ${stacktrace};`;\r\n\r\n return `HttpRequestError ${methodLabel} ${urlLabel} ${responseStatusLabel} ${responseStatusTextLabel} ${bodyLabel} ${messageLabel} ${stacktraceLabel}`;\r\n}\r\n\r\n\r\nexport default SkrinHttpRequest;","import { Action, Reducer } from 'redux';\r\nimport { IStudentJournalsFilterInfo } from './../Interface/VoTypes';\r\n\r\nexport interface VoStudentJournalsInfoState {\r\n studentJournalsInfo: IStudentJournalsFilterInfo\r\n}\r\n\r\nexport interface SetJournalsInfoAction { type: 'SET_VO_STUDENT_JOURNALS_INFO', info: IStudentJournalsFilterInfo }\r\nexport interface SetClearJournalsInfohAction { type: 'SET_VO_STUDENT_JOURNALS_CLEAR_INFO' }\r\n\r\nexport const SetJournalsInfo = (info: IStudentJournalsFilterInfo): SetJournalsInfoAction => (\r\n { type: 'SET_VO_STUDENT_JOURNALS_INFO', info }\r\n)\r\n\r\nexport const SetClearJournalsInfo = (): SetClearJournalsInfohAction => (\r\n { type: 'SET_VO_STUDENT_JOURNALS_CLEAR_INFO' }\r\n)\r\n\r\ntype KnownAction = SetJournalsInfoAction | SetClearJournalsInfohAction;\r\n\r\nexport const reducer: Reducer = (state: VoStudentJournalsInfoState | undefined, incomingAction: Action): VoStudentJournalsInfoState => {\r\n\r\n if (state === undefined) {\r\n return { studentJournalsInfo: { startDate: null, endDate: null, selectedAll: false, selectedIds: [], areaId: undefined } };\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n\r\n switch (action.type) {\r\n case 'SET_VO_STUDENT_JOURNALS_INFO':\r\n return { studentJournalsInfo: action.info };\r\n case 'SET_VO_STUDENT_JOURNALS_CLEAR_INFO':\r\n return { studentJournalsInfo: { startDate: null, endDate: null, selectedAll: false, selectedIds: [], areaId: undefined } };\r\n default:\r\n return state;\r\n }\r\n\r\n};","import { Route, Redirect, Switch } from 'react-router-dom';\r\nimport { MainAuthPath, VoRoutePath, ApiRoutePath, UserInfoPath, UserSettingLogs, DataImportPath, CreateDbBackUpPagePath, KaFlRoutePath} from './../../../Interface/RouteConst';\r\nimport { connect, ConnectedProps} from 'react-redux';\r\nimport { ApplicationState } from './../../../store/index';\r\nimport lazyWithRetry from './../../Common/LazyWithRetry/lazyWithRetry';\r\n\r\nconst ApiRoutePage = lazyWithRetry( ()=> import('./../../SoapApi/Route/Route') );\r\nconst StartPage = lazyWithRetry(() => import('./../../Main/StartPage/StartPage'));\r\nconst VoRoutePage = lazyWithRetry(() => import('./../../VO/Route/VoRouteTheme'));\r\nconst UserInfo = lazyWithRetry(() => import('./../../Main/UserInfo/UserInfo'));\r\nconst SettingLogs = lazyWithRetry(() => import('./../SettingLogs/SettingLogs'));\r\nconst ImportPage = lazyWithRetry(() => import('./../ImportPage/ImportPage'));\r\nconst CreateDbBackUpPage = lazyWithRetry(() => import('../CreateDbBackUpPage/CreateDbBackUpPage'));\r\nconst KaFlRoutePage = lazyWithRetry(() => import('./../../KaFl/Route/KaFlRoute'));\r\n\r\n\r\nconst mapStateToProps = (state : ApplicationState) => ({\r\n isAuth : state.appAuth.appAuth.isAuth\r\n});\r\n\r\nconst connector = connect(mapStateToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\n\r\n\r\nfunction PrivateRouts(props : PropsFromRedux){\r\n\r\n \r\n \r\n if( props.isAuth === false)\r\n {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n {/* маршруты настройки, требующий общего уровня авторизации */}\r\n \r\n \r\n \r\n \r\n\r\n {/* маршруты отдельных разделов приложения */}\r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\n\r\nexport default connector(PrivateRouts);\r\n","import { Action, Reducer } from 'redux';\r\nimport {AppThunkAction} from './index'\r\nimport { push } from 'connected-react-router'\r\nimport { StartPagePath } from './../Interface/RouteConst';\r\nimport { ClientError } from './../Interface/MainTypes'\r\n\r\nexport interface ErrorState {\r\n error: ClientError | null\r\n}\r\n\r\nexport interface SetErrorAction { type: 'SET_ERROR', error : ClientError }\r\nexport interface UnSetErrorAction { type: 'UNSET_ERROR' }\r\n\r\n\r\ntype KnownAction = SetErrorAction | UnSetErrorAction;\r\n\r\n\r\nexport const setError = (error : Error) : SetErrorAction => (\r\n { type: 'SET_ERROR', error }\r\n)\r\n\r\nconst unSetError = () : UnSetErrorAction => (\r\n { type: 'UNSET_ERROR' }\r\n)\r\n\r\nexport const ResetApp = (): AppThunkAction => (dispatch, getState) => {\r\n const appState = getState();\r\n if (appState) {\r\n dispatch(unSetError());\r\n dispatch(push(StartPagePath));\r\n }\r\n}\r\n\r\nexport const reducer: Reducer = (state: ErrorState | undefined, incomingAction: Action): ErrorState => {\r\n \r\n if (state === undefined) {\r\n return { error : null };\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'SET_ERROR':\r\n return {error : new ClientError(action.error.message, action.error.name, action.error.stack) };\r\n case 'UNSET_ERROR':\r\n return { ...state, error: null };\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\nexport const mapDispatchToPropsError = (dispatch : any) =>{\r\n return {\r\n setError :(error: Error) => dispatch(setError(error)),\r\n }\r\n }","import Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport { connect, ConnectedProps} from 'react-redux';\r\nimport { ResetApp } from './../../../store/Error';\r\n\r\n\r\nconst mapDispatchToProps = (dispatch : any) =>{\r\n return {\r\n unSetError : () => dispatch(ResetApp())\r\n }\r\n}\r\n\r\nconst connector = connect(null, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\n\r\nconst ErrorView = (props : PropsFromRedux) =>{\r\n\r\n \r\n \r\n const onResetApp = (e : React.MouseEvent) =>{\r\n props.unSetError();\r\n }\r\n\r\n return(\r\n \r\n \r\n

Произошла ошибка

\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default connector(ErrorView);","import Grid from '@material-ui/core/Grid';\r\nimport Loader from './../../Common/Loader/Loader';\r\nimport { useState } from 'react';\r\nimport { IComponentStatus, IAuthStatus, IAdminActionResult } from '../../../Interface/MainTypes';\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport Button from '@material-ui/core/Button';\r\nimport { get } from './../../../Utils/Fetch';\r\nimport { apiStartUpdate, apiMainAuthAuto } from './../../../Interface/ServerRouteConst';\r\nimport { SetAuth } from './../../../store/AuthStatus';\r\nimport { ApplicationState } from './../../../store/index';\r\nimport { connect, ConnectedProps } from 'react-redux';\r\nimport { NavLink } from 'react-router-dom';\r\nimport { StartPagePath } from './../../../Interface/RouteConst';\r\nimport { Redirect } from 'react-router-dom';\r\nimport ModalMessageWithNode from '../../Common/ModalMessageWithNode/ModalMessageWithNode';\r\nimport AccessPage from './../../Main/CommonSetting/AccessPage';\r\nimport QueryDialog from './../../Common/QueryDialog/QueryDialog';\r\nimport DefaultWrapperWidth from '../../Main/DefaultWrapperWidth/WrapperPaddingWidth';\r\n\r\n\r\nconst mapStateToProps = (state: ApplicationState) => ({\r\n hasUpdate: state.appAuth.appAuth.hasUpdate\r\n});\r\n\r\nexport const mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setAuth: (auth: IAuthStatus) => dispatch(SetAuth(auth))\r\n }\r\n}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\n\r\nconst UpdateInfo = (props: PropsFromRedux) => {\r\n\r\n const [status, setStatus] = useState('idle');\r\n const [openQuryDialog, setOpenQuryDialog] = useState(false);\r\n const [showUserDialog, setShowUserDialog] = useState(false);\r\n\r\n const onCloseUserDialog = () => setShowUserDialog(false);\r\n const onCloseDeleteDialog = () => setOpenQuryDialog(false);\r\n\r\n\r\n const handelSend = (e: React.MouseEvent) => {\r\n setOpenQuryDialog(true);\r\n }\r\n\r\n const onSendQuery = () => {\r\n setStatus('pending');\r\n get(apiStartUpdate)\r\n .then((response: IAdminActionResult) => {\r\n if (response.hasAccess) {\r\n get(apiMainAuthAuto)\r\n .then((response: IAuthStatus) => {\r\n props.setAuth(response);\r\n setStatus('success');\r\n })\r\n }\r\n else {\r\n setStatus('success');\r\n setShowUserDialog(true);\r\n }\r\n })\r\n }\r\n\r\n const SaveAfterLogin = () => {\r\n setShowUserDialog(false);\r\n onSendQuery();\r\n };\r\n\r\n\r\n const Form: JSX.Element = (\r\n <>\r\n Запуск процесса обновления\r\n\r\n

\r\n\r\n Перейти на главную страницу\r\n \r\n );\r\n\r\n if (props.hasUpdate === false)\r\n return \r\n\r\n return (\r\n \r\n \r\n \r\n После отправки запроса приложение будет временно недоступно, до завершение обновления\r\n

\r\n
\r\n \r\n {status === 'pending' ? Loader : Form}\r\n \r\n }\r\n />\r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default connector(UpdateInfo);","import Grid from '@material-ui/core/Grid';\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\nimport Loader from './../../Common/Loader/Loader';\r\nimport { ApplicationState } from './../../../store/index';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { StartPagePath } from './../../../Interface/RouteConst';\r\nimport { connect, ConnectedProps } from 'react-redux';\r\nimport { useEffect, useState } from 'react';\r\n\r\nconst mapStateToProps = (state: ApplicationState) => ({\r\n updateting: state.appAuth.appAuth.updateProcess\r\n});\r\n\r\nconst connector = connect(mapStateToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\nconst StartUpdateInfo = (props: PropsFromRedux) => {\r\n const [hasErrorUpdate, setHasErrorUpdate] = useState(false);\r\n\r\n useEffect(() => {\r\n const timeout = setTimeout(() => setHasErrorUpdate(true), 1200000); \r\n\r\n return () => clearTimeout(timeout);\r\n }, [])\r\n\r\n let message : JSX.Element | null = null;\r\n\r\n if(hasErrorUpdate === false)\r\n {\r\n message = Приложение обновляетсяПожалуйста, подождите\r\n }\r\n else\r\n {\r\n message = Ошибка обновления приложенияПожалуйста, обратитесь к администратору\r\n }\r\n \r\n\r\n if (props.updateting === false)\r\n return \r\n\r\n return (\r\n \r\n \r\n {message}\r\n {Loader}\r\n \r\n \r\n );\r\n}\r\n\r\nexport default connector(StartUpdateInfo);","\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\nimport Loader from '../Loader/Loader';\r\nimport { ApplicationState } from '../../../store/index';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { StartPagePath } from '../../../Interface/RouteConst';\r\nimport { connect, ConnectedProps } from 'react-redux';\r\n\r\nconst mapStateToProps = (state: ApplicationState) => ({\r\n blockDbChanges: state.appAuth.appAuth.blockDbChanges\r\n});\r\n\r\nconst connector = connect(mapStateToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\n\r\nconst StartUpdateDbInfo = (props: PropsFromRedux) => {\r\n\r\n if (props.blockDbChanges === false)\r\n return \r\n\r\n return (\r\n \r\n \r\n База данных приложения обновляетсяПожалуйста, подождите\r\n {Loader}\r\n \r\n \r\n );\r\n}\r\n\r\nexport default connector(StartUpdateDbInfo);","import buildDate from \"./../../../buildDate.json\";\r\nimport { get } from \"./../../../Utils/Fetch\";\r\nimport { useState, useEffect } from 'react';\r\nimport { IBuildDate } from \"./../../../Interface/MainTypes\";\r\nimport { Alert } from '@material-ui/lab';\r\nimport RefreshIcon from '@material-ui/icons/Refresh';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\n\r\nconst ClearCacheComponent = () => {\r\n const [intervalId, setIntervalId] = useState(null);\r\n const [showQuery, setShowQuery] = useState(false);\r\n\r\n const onReload = () => {\r\n window.location.reload();\r\n }\r\n\r\n const ClearTimer = () => {\r\n if (intervalId)\r\n clearInterval(intervalId);\r\n }\r\n\r\n useEffect(() => {\r\n\r\n let intervalID = setInterval(() => {\r\n\r\n const timeLabel = new Date().getTime();\r\n const url : string = `meta.json?v${timeLabel}`;\r\n\r\n get(url)\r\n .then((response: IBuildDate) => {\r\n if ((showQuery === false) && (response.buildDate !== buildDate.buildDate)) {\r\n setShowQuery(true);\r\n }\r\n })\r\n .catch(error => {\r\n console.log(\"Error status chank\", error);\r\n })\r\n\r\n }, 180000); // 3 мин. 180000\r\n\r\n setIntervalId(intervalID);\r\n\r\n return () => ClearTimer();\r\n }, [])\r\n\r\n const handleClose = (event?: React.SyntheticEvent, reason?: string) => {\r\n if (reason === 'clickaway') {\r\n return;\r\n }\r\n\r\n setShowQuery(false);\r\n };\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n >\r\n Сайт был обновлен. Чтобы избежать ошибок, рекомендуем перезагрузить страницу\r\n \r\n \r\n )\r\n\r\n}\r\n\r\nexport default ClearCacheComponent;","\r\nimport Grid from '@material-ui/core/Grid';\r\nimport { Alert, AlertTitle } from '@material-ui/lab';\r\nimport Loader from '../Loader/Loader';\r\nimport { ApplicationState } from '../../../store/index';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { StartPagePath } from '../../../Interface/RouteConst';\r\nimport { connect, ConnectedProps } from 'react-redux';\r\nimport { IComponentStatus } from './../../../Interface/MainTypes';\r\nimport { useEffect, useState } from 'react';\r\nimport { get } from './../../../Utils/Fetch';\r\nimport { apiImportDataGetFullPathFileDb } from './../../../Interface/ServerRouteConst';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport FileCopyIcon from '@material-ui/icons/FileCopy';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport AlertIconOverride from './../AlertIconOverride/AlertIconOverride';\r\n\r\n\r\nconst mapStateToProps = (state: ApplicationState) => ({\r\n dbUpdateProcessHasError: state.appAuth.appAuth.dbUpdateProcessHasError\r\n});\r\n\r\nconst connector = connect(mapStateToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\n\r\nconst DbUpdateHasError = (props: PropsFromRedux) => {\r\n const [status, setStatus] = useState('idle');\r\n const [fullPathFile, setFullPathFile] = useState('');\r\n const [showSnack, setShowSnack] = useState(false);\r\n\r\n useEffect(() => {\r\n setStatus('pending');\r\n\r\n get(apiImportDataGetFullPathFileDb)\r\n .then((responseFolder: string) => {\r\n setFullPathFile(responseFolder);\r\n setStatus('success');\r\n })\r\n\r\n }, []);\r\n\r\n const handelCloseSnack = () => setShowSnack(false);\r\n\r\n const copyPath = () => {\r\n if (fullPathFile.length > 0) {\r\n navigator.clipboard.writeText(fullPathFile);\r\n setShowSnack(true);\r\n }\r\n }\r\n\r\n if (props.dbUpdateProcessHasError === false)\r\n return \r\n\r\n if (status === 'pending') {\r\n return (\r\n \r\n \r\n {Loader}\r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n \r\n Ошибка обновления базы данных \r\n

Для восстановления работы приложения требуется :

\r\n
    \r\n
  1. Замена файла БД резервной копией
  2. \r\n
  3. Перезапуск службы SkrinDesktop
  4. \r\n
\r\n
\r\n
\r\n \r\n
\r\n {\r\n (fullPathFile.length > 0) &&\r\n (\r\n \r\n \r\n )\r\n }}\r\n />\r\n )\r\n }\r\n
\r\n
\r\n \r\n
\r\n {Loader}\r\n
\r\n
\r\n \r\n \r\n Путь скопирован в буфер\r\n \r\n \r\n
\r\n );\r\n}\r\n\r\nexport default connector(DbUpdateHasError);","import { ApplicationState } from './../../../store/index';\r\nimport { connect, ConnectedProps } from 'react-redux';\r\nimport { useLocation } from 'react-router-dom';\r\nimport { Helmet } from 'react-helmet';\r\nimport { useState, useEffect } from 'react';\r\nimport { ISite, ISiteTitleFavicon } from './../../../Interface/MainTypes';\r\nimport { VoRoutePath, ApiRoutePath, KaFlRoutePath, PodftFlRoutePath } from \"./../../../Interface/RouteConst\";\r\nimport { ISiteTheme } from './../../../Interface/MainTypes';\r\nimport { GetVoTheme } from './../../../Utils/GetVoTheme';\r\n\r\n\r\nconst getActiveSitePage = (location: string): ISite | null => {\r\n\r\n if (location.includes(VoRoutePath)) {\r\n return \"vo\";\r\n }\r\n else if (location.includes(ApiRoutePath)) {\r\n return \"soap\";\r\n }\r\n else if (location.includes(PodftFlRoutePath)) {\r\n return \"podftfl\";\r\n }\r\n else if (location.includes(KaFlRoutePath)) {\r\n return \"kafl\"\r\n }\r\n else { return null; }\r\n}\r\n\r\nconst getNewFaviconLink = (value: ISite | null, themeSite: ISiteTheme): ISiteTitleFavicon => {\r\n switch (value) {\r\n case \"vo\":\r\n if (themeSite.id === 1) {\r\n return { title: \"Метр квадратный Обучение\", faviconLink: \"/favicons/favicon_vo_m2_blue.ico?v=1\" };\r\n }\r\n return { title: \"СКРИН : Обучение\", faviconLink: \"/favicons/favicon_vo.ico?v=1\" };\r\n case \"soap\":\r\n return { title: \"СКРИН : API\", faviconLink: \"/favicons/favicon_api.ico?v=2\" };\r\n case \"podftfl\":\r\n return { title: \"СКРИН : ПОДФТ ФЛ\", faviconLink: \"/favicons/favicon_podft.ico?v=3\" };\r\n case \"kafl\":\r\n return { title: \"СКРИН : КА/ФЛ\", faviconLink: \"/favicon.ico?v=0\" };\r\n \r\n case null:\r\n return { title: \"СКРИН : Desktop\", faviconLink: \"/favicon.ico?v=0\" };\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: ApplicationState) => ({\r\n stateType: state.appAuth.appAuth.stateType,\r\n modules: state.appAuth.appAuth.modules,\r\n});\r\n\r\nconst connector = connect(mapStateToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\nconst DynamicFavicon = (props: PropsFromRedux) => {\r\n const defaultValue: ISiteTitleFavicon = { title: \"СКРИН : Desktop\", faviconLink: \"/favicon.ico?v=0\" };\r\n const themeSite: ISiteTheme = GetVoTheme(props.modules, props.stateType);\r\n const [activeSite, setActiveSite] = useState(null);\r\n const [faviconLink, setFaviconLink] = useState(defaultValue);\r\n const [activeThemeId, setActiveThemeId] = useState(0); // темы по умолчанию id=0\r\n\r\n const activeVoTheme: ISiteTheme = GetVoTheme(props.modules, props.stateType); // тек. момент темы только ВО \r\n const location: string = useLocation().pathname;\r\n\r\n useEffect(() => {\r\n\r\n const activeSitePage: ISite | null = getActiveSitePage(location);\r\n if (false === (activeSitePage === activeSite)) {\r\n setActiveSite(activeSitePage);\r\n setFaviconLink(getNewFaviconLink(activeSitePage, themeSite));\r\n }\r\n }, [location])\r\n\r\n useEffect(() => { // смена темы id \r\n if (false === (activeThemeId === activeVoTheme.id)) {\r\n setActiveThemeId(activeVoTheme.id);\r\n const activeSitePage: ISite | null = getActiveSitePage(location);\r\n setFaviconLink(getNewFaviconLink(activeSitePage, activeVoTheme));\r\n }\r\n }, [activeVoTheme.id])\r\n\r\n\r\n if (props.stateType === \"Web\") {\r\n return (\r\n \r\n \r\n {faviconLink.title}\r\n \r\n );\r\n }\r\n\r\n return (\r\n \r\n \r\n {faviconLink.title}\r\n \r\n );\r\n}\r\n\r\nexport default connector(DynamicFavicon);","import { useState, useEffect } from 'react';\r\nimport { ApplicationState } from './../../../store/index';\r\nimport { connect, ConnectedProps } from 'react-redux';\r\nimport { Alert } from '@material-ui/lab';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Snackbar from '@material-ui/core/Snackbar';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport ArrowForwardIcon from '@material-ui/icons/ArrowForward';\r\nimport { useHistory } from 'react-router-dom';\r\nimport { StartUpdateDbInfoPath, StartUpdateInfoPath } from './../../../Interface/RouteConst';\r\n\r\nconst mapStateToProps = (state: ApplicationState) => ({\r\n appHasUpdate: state.appAuth.appAuth.hasUpdate,\r\n hasLongScriptDbUpdate: state.appAuth.appAuth.hasLongScriptDbUpdate\r\n});\r\n\r\nconst connector = connect(mapStateToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\n\r\nconst stepSizeTimer: number = 10000; // 10c. вызов таймера \r\nconst stepSizeCount: number = 60; // 10 мин. после закрытия \r\n\r\nconst UpdateAppAlert = (props: PropsFromRedux) => {\r\n const [open, setOpen] = useState(false);//useState(false);\r\n const [timer, setTimer] = useState(stepSizeCount);\r\n\r\n let history = useHistory();\r\n\r\n useEffect(() => {\r\n if (props.appHasUpdate || props.hasLongScriptDbUpdate) {\r\n setOpen(true);\r\n }\r\n }, [props.appHasUpdate, props.hasLongScriptDbUpdate]);\r\n\r\n useEffect(() => {\r\n let interval: NodeJS.Timeout;\r\n if ((open === false) && timer > 0) {\r\n interval = setInterval(() => {\r\n setTimer((prevTimer) => prevTimer - 1);\r\n }, stepSizeTimer);\r\n }\r\n\r\n const needShowFromRedux: boolean = props.appHasUpdate || props.hasLongScriptDbUpdate;\r\n\r\n if ((0 === timer) && (false === open) && needShowFromRedux)\r\n setOpen(true);\r\n \r\n\r\n return () => {\r\n clearInterval(interval);\r\n };\r\n }, [open, timer]);\r\n\r\n\r\n const handleSnackbarClose = () => {\r\n setOpen(false);\r\n setTimer(stepSizeCount);\r\n };\r\n\r\n const getTitleMessage = (): string => {\r\n if (props.appHasUpdate)\r\n return \"Доступно обновление\";\r\n\r\n if (props.hasLongScriptDbUpdate)\r\n return \"Требуется обновление БД\";\r\n\r\n return \"\";\r\n }\r\n\r\n const handleUpdateClick = () => {\r\n if (props.appHasUpdate) {\r\n setOpen(false);\r\n history.push(StartUpdateInfoPath);\r\n return;\r\n }\r\n\r\n if (props.hasLongScriptDbUpdate) {\r\n setOpen(false);\r\n history.push(StartUpdateDbInfoPath);\r\n return;\r\n }\r\n };\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n >{getTitleMessage()}\r\n \r\n )\r\n}\r\n\r\nexport default connector(UpdateAppAlert);","import Grid from '@material-ui/core/Grid';\r\nimport Loader from './../../Common/Loader/Loader';\r\nimport { useState } from 'react';\r\nimport { IComponentStatus, IAuthStatus, IAdminActionResult } from '../../../Interface/MainTypes';\r\nimport Alert from '@material-ui/lab/Alert';\r\nimport Button from '@material-ui/core/Button';\r\nimport { get } from './../../../Utils/Fetch';\r\nimport { apiStartDbUpdate, apiMainAuthAuto } from './../../../Interface/ServerRouteConst';\r\nimport { SetAuth } from './../../../store/AuthStatus';\r\nimport { ApplicationState } from './../../../store/index';\r\nimport { connect, ConnectedProps } from 'react-redux';\r\nimport { NavLink } from 'react-router-dom';\r\nimport { StartPagePath } from './../../../Interface/RouteConst';\r\nimport { Redirect } from 'react-router-dom';\r\nimport ModalMessageWithNode from '../../Common/ModalMessageWithNode/ModalMessageWithNode';\r\nimport AccessPage from './../../Main/CommonSetting/AccessPage';\r\nimport QueryDialog from './../../Common/QueryDialog/QueryDialog';\r\nimport DefaultWrapperWidth from '../../Main/DefaultWrapperWidth/WrapperPaddingWidth';\r\n \r\n\r\nconst mapStateToProps = (state: ApplicationState) => ({\r\n hasLongScriptDbUpdate: state.appAuth.appAuth.hasLongScriptDbUpdate,\r\n});\r\n\r\nexport const mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setAuth: (auth: IAuthStatus) => dispatch(SetAuth(auth))\r\n }\r\n}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\nconst UpdateDbInfo = (props: PropsFromRedux) => {\r\n const [status, setStatus] = useState('idle');\r\n const [openQuryDialog, setOpenQuryDialog] = useState(false);\r\n const [showUserDialog, setShowUserDialog] = useState(false);\r\n\r\n const onCloseUserDialog = () => setShowUserDialog(false);\r\n const onCloseQuryDialog = () => setOpenQuryDialog(false);\r\n\r\n const handelSend = () => setOpenQuryDialog(true);\r\n\r\n const SaveAfterLogin = () => {\r\n setShowUserDialog(false);\r\n onSendQuery();\r\n };\r\n\r\n const onSendQuery = () => {\r\n setStatus('pending');\r\n get(apiStartDbUpdate)\r\n .then((response: IAdminActionResult) => {\r\n if (response.hasAccess) {\r\n get(apiMainAuthAuto)\r\n .then((response: IAuthStatus) => {\r\n props.setAuth(response);\r\n setStatus('success');\r\n })\r\n }\r\n else {\r\n setStatus('success');\r\n setShowUserDialog(true);\r\n }\r\n })\r\n }\r\n\r\n if (props.hasLongScriptDbUpdate === false)\r\n return \r\n\r\n\r\n return (\r\n \r\n \r\n \r\n После отправки запроса приложение будет временно недоступно, до завершение обновления БД\r\n

\r\n
\r\n \r\n {status === 'pending' ? Loader :
}\r\n \r\n }\r\n />\r\n \r\n \r\n \r\n );\r\n}\r\n\r\ninterface IProps {\r\n handelSend: () => void\r\n}\r\n\r\nconst Form = (props: IProps) => {\r\n return (\r\n <>\r\n Запуск процесса обновления\r\n\r\n

\r\n\r\n Перейти на главную страницу\r\n \r\n )\r\n}\r\n\r\n\r\nexport default connector(UpdateDbInfo);\r\n\r\n","import { IModalType } from \"../../../Interface/MainTypes\";\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogContentText from '@material-ui/core/DialogContentText';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport { Alert } from '@material-ui/lab';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport IconButton from '@material-ui/core/IconButton';\r\n\r\nconst useStyles = makeStyles({\r\n dialog: {\r\n position: 'absolute',\r\n top: \"3%\"\r\n },\r\n closeButton: {\r\n color: \"#ccc\",\r\n },\r\n});\r\n\r\ninterface IProps {\r\n title: string,\r\n messages: Array | null,\r\n id : string,\r\n handleClose(id : string) : void,\r\n type: IModalType\r\n}\r\n\r\ninterface IPropsList {\r\n list: Array | null\r\n}\r\n\r\nconst ShowList = (props: IPropsList) => {\r\n if (props.list === null)\r\n return null;\r\n\r\n return (\r\n <>\r\n {props.list.map((item, index) => (\r\n {item}\r\n ))}\r\n \r\n );\r\n}\r\n\r\nconst ModalList = (props: IProps) => {\r\n const classes = useStyles();\r\n const onCloseModal = () => props.handleClose(props.id);\r\n\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n {props.title}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ModalList;","import { ApplicationState } from '../../../store/index';\r\nimport { connect, ConnectedProps } from 'react-redux';\r\nimport { SetClearHttpErrorMessages } from './../../../store/HttpErrorMessages';\r\nimport { SetClearHttpWarningMessages } from '../../../store/HttpWarningMessages';\r\nimport ModalList from './ModalList';\r\n\r\nconst mapStateToProps = (state: ApplicationState) => ({\r\n\terrorMessagesInfo: state.httpErrorMessages.httpErrorMessages,\r\n\twarningMessagesInfo: state.httpWarningMessages.httpWarningMessages\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n\treturn {\r\n\t\tcloseErrorModal: (id: string) => dispatch(SetClearHttpErrorMessages(id)),\r\n\t\tcloseWarningModal: (id: string) => dispatch(SetClearHttpWarningMessages(id))\r\n\t}\r\n}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\nconst HttpErrorModal = (props: PropsFromRedux) => {\r\n\r\n\treturn (<>\r\n\t\t{props.errorMessagesInfo.map((item) => (\r\n\t\t\t\r\n\t\t))}\r\n\r\n\t\t{props.warningMessagesInfo.map((item) => (\r\n\t\t\t\r\n\t\t))}\r\n\r\n\t)\r\n}\r\n\r\nexport default connector(HttpErrorModal);","import { Switch, Route } from 'react-router-dom';\r\nimport { Suspense, useState, useEffect } from 'react';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport CssBaseline from '@material-ui/core/CssBaseline';\r\nimport Loader from './Components/Common/Loader/Loader';\r\nimport { MainAuthPath, StartPagePath, StartUpdateInfoPath, CommonSettingPath, StartUpdateDbInfoPath } from './Interface/RouteConst';\r\nimport { apiMainAuthAuto, apiVoAuthAuto, apiVoAuthAutoWeb, ModuleAuthenticationModuleLoginAuto } from './Interface/ServerRouteConst';\r\nimport { IComponentStatus, IAuthStatus, IModules, ISiteList } from './Interface/MainTypes';\r\nimport { IVoAuthState, IVoAuthStateWeb } from './Interface/VoTypes';\r\nimport { get } from './Utils/Fetch';\r\nimport PrivateRouts from './Components/Main/PrivateRouts/PrivateRouts';\r\nimport { ApplicationState } from './store/index';\r\nimport ErrorView from './Components/Common/ErrrorView/ErrorView';\r\nimport UpdateInfo from './Components/Common/UpdateInfo/UpdateInfo';\r\nimport { connect, ConnectedProps } from 'react-redux';\r\nimport { SetAuth, SetAuthModules } from './store/AuthStatus';\r\nimport { SetVoAuth } from './store/VoAuth';\r\nimport StartUpdateInfo from './Components/Common/UpdateInfo/StartUpdateInfo';\r\nimport StartUpdateDbInfo from './Components/Common/UpdateInfo/StartUpdateDbInfo';\r\nimport lazyWithRetry from './Components/Common/LazyWithRetry/lazyWithRetry';\r\nimport ClearCacheComponent from './Components/Common/ClearCacheComponent/ClearCacheComponent';\r\nimport DbUpdateHasError from \"./Components/Common/UpdateInfo/DbUpdateHasError\";\r\nimport DynamicFavicon from './Components/Main/DynamicFavicon/DynamicFavicon';\r\nimport UpdateAppAlert from './Components/Common/UpdateAppAlert/UpdateAppAlert';\r\nimport UpdateDbInfo from './Components/Common/UpdateDbInfo/UpdateDbInfo';\r\nimport { ThemeProvider, createTheme } from '@material-ui/core/styles';\r\nimport HttpErrorModal from './Components/Common/HttpErrorModal/HttpErrorModal';\r\nimport HttpRequest from './store/SkrinHttpRequest';\r\nimport { IKaFlAuthState } from './Interface/KaFlTypes';\r\nimport { SetKalAuth } from './store/KaFlAuth';\r\n\r\n// import TestSkrinHttpRequest from './Components/Main/TestSkrinHttpRequest/TestSkrinHttpRequest';\r\n// import { TestSkrinHttpRequestPath } from './Interface/RouteConst';\r\n\r\nconst MainAuth = lazyWithRetry(() => import('./Components/Main/Auth/AuthPage'));\r\nconst StartPage = lazyWithRetry(() => import('./Components/Main/StartPage/StartPage'));\r\nconst CommonSettingPage = lazyWithRetry(() => import('./Components/Main/CommonSetting/CommonSettingPage'));\r\n\r\n\r\nconst useStyles = makeStyles({\r\n\troot: {\r\n\t\tdisplay: 'flex',\r\n\t\tflexDirection: 'column',\r\n\t\tminHeight: '95vh'\r\n\t},\r\n\tfooter: {\r\n\t\tmarginTop: 'auto',\r\n\t\tminHeight: '5vh',\r\n\t\ttextAlign: \"center\",\r\n\t\twidth : \"100%\", \r\n\t\tminWidth : \"435px\"\r\n\t},\r\n\tlink: {\r\n\t\tcolor: \"#002984\",\r\n\t\tmargin: \"10px\",\r\n\t\ttextDecoration: \"none\"\r\n\t},\r\n\ttoolbar: {\r\n\t\tflexWrap: 'wrap',\r\n\t}\r\n});\r\n\r\n\r\nconst mapStateToProps = (state: ApplicationState) => ({\r\n\tappError: state.error?.error,\r\n\tappHasUpdate: state.appAuth.appAuth.hasUpdate,\r\n\tappStartUpdate: state.appAuth.appAuth.updateProcess,\r\n\tstateType: state.appAuth.appAuth.stateType,\r\n\tblockDbChanges: state.appAuth.appAuth.blockDbChanges,\r\n\tdbUpdateProcessHasError: state.appAuth.appAuth.dbUpdateProcessHasError,\r\n\thasLongScriptDbUpdate: state.appAuth.appAuth.hasLongScriptDbUpdate\r\n});\r\n\r\nexport const mapDispatchToProps = (dispatch: any) => {\r\n\treturn {\r\n\t\tsetAuth: (auth: IAuthStatus) => dispatch(SetAuth(auth)),\r\n\t\tsetVoAuth: (auth: IVoAuthState) => dispatch(SetVoAuth(auth)),\r\n\t\tupdateModules: (modules: Array | null) => dispatch(SetAuthModules(modules)),\r\n\r\n\t\tupdateKaFLAuth: (auth: IKaFlAuthState) => dispatch(SetKalAuth(auth)),\r\n\r\n\t\tgetAuthStateKaFl: () =>\r\n\t\t\tdispatch(HttpRequest(`${ModuleAuthenticationModuleLoginAuto}/${ISiteList.kaFl}`, \"GET\")),\r\n\t}\r\n}\r\n\r\nconst connector = connect(mapStateToProps, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\nfunction App(props: PropsFromRedux) {\r\n\tconst [status, setStatus] = useState('idle');\r\n\r\n\tuseEffect(() => {\r\n\t\tif (props.stateType === \"Desktop\") {\r\n\t\t\tauthDesktop();\r\n\t\t}\r\n\t\telse {\r\n\t\t\tauthWeb();\r\n\t\t}\r\n\t}, [props]);\r\n\r\n\r\n\tconst authDesktop = () => {\r\n\t\tif (\r\n\t\t\t(props.appError === null) &&\r\n\t\t\t(props.appHasUpdate === false) &&\r\n\t\t\t(props.appStartUpdate === false) &&\r\n\t\t\t(props.blockDbChanges === false) &&\r\n\t\t\t(props.dbUpdateProcessHasError === false)\r\n\t\t) {\r\n\t\t\tget(apiMainAuthAuto)\r\n\t\t\t\t.then((response: IAuthStatus) => {\r\n\t\t\t\t\tprops.setAuth(response);\r\n\t\t\t\t\tconst needVoAuth: boolean = (response.isAuth &&\r\n\t\t\t\t\t\t(response.updateProcess === false) &&\r\n\t\t\t\t\t\t(response.blockDbChanges === false) &&\r\n\t\t\t\t\t\t(response.dbUpdateProcessHasError === false)\r\n\t\t\t\t\t);\r\n\r\n\t\t\t\t\tif (needVoAuth) {\r\n\t\t\t\t\t\tsubAuthModule();\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tsetStatus('success');\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\tconst authWeb = () => {\r\n\t\tif ((props.appError === null)) {\r\n\t\t\tget(apiMainAuthAuto)\r\n\t\t\t\t.then((response: IAuthStatus) => {\r\n\t\t\t\t\tprops.setAuth(response);\r\n\t\t\t\t\tif (response.isAuth) {\r\n\t\t\t\t\t\tget(apiVoAuthAutoWeb)\r\n\t\t\t\t\t\t\t.then((response: IVoAuthStateWeb) => {\r\n\t\t\t\t\t\t\t\tprops.setVoAuth(response.voAuth);\r\n\t\t\t\t\t\t\t\tif (response.voAuth.isAuth && response.modules && response.modules.length > 0) {\r\n\t\t\t\t\t\t\t\t\tprops.updateModules(response.modules);\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\tsetStatus('success');\r\n\t\t\t\t\t\t\t})\r\n\t\t\t\t\t}\r\n\t\t\t\t\telse {\r\n\t\t\t\t\t\tsetStatus('success');\r\n\t\t\t\t\t}\r\n\t\t\t\t})\r\n\t\t}\r\n\t}\r\n\r\n\t//авторизация подчиненных сайтов - при условии прохождения MainAuth\r\n\tconst subAuthModule = async () => {\r\n\t\t// при вызыве status === 'idle' \r\n\r\n\t\tconst [voAuthResponse, kaFlAuthResponse] = await Promise.all([\r\n\t\t\tget(apiVoAuthAuto),\r\n\t\t\tprops.getAuthStateKaFl()\r\n\t\t]);\r\n\r\n\r\n\t\tif (voAuthResponse) {\r\n\t\t\tprops.setVoAuth(voAuthResponse);\r\n\t\t}\r\n\r\n\t\tif (kaFlAuthResponse) {\r\n\t\t\tprops.updateKaFLAuth(kaFlAuthResponse);\r\n\t\t}\r\n\r\n\t\tsetStatus('success'); // запросы завершены \r\n\t}\r\n\r\n\tconst classes = useStyles();\r\n\r\n\tif (props.appError !== null)\r\n\t\treturn ;\r\n\r\n\tif (props.appStartUpdate)\r\n\t\treturn ;\r\n\r\n\tif (props.dbUpdateProcessHasError)\r\n\t\treturn ;\r\n\r\n\tif ((props.stateType === \"Desktop\") && (props.blockDbChanges))\r\n\t\treturn ;\r\n\r\n\r\n\tif (status === 'pending' || status === 'idle')\r\n\t\treturn Loader;\r\n\r\n\tconst defaultTheme = createTheme();\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\r\n\t\t\t\t\t\t\t\t{/* */}\r\n\t\t\t\t\t\t\t\t{/* - тестовый компонет отправки запросов /main/testSkrinRequest*/}\r\n\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t©1999-{new Date().getFullYear()} ООО «СКРИН»\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t
\r\n\t\t\t
\r\n\t\t
\r\n\t);\r\n};\r\n\r\nexport default connector(App);","import * as Error from './Error';\r\nimport * as Auth from './AuthStatus';\r\nimport * as VoAth from './VoAuth';\r\nimport * as StudentJournalsInfo from './StudentJournalsInfo';\r\nimport * as HttpErrorMessages from './HttpErrorMessages';\r\nimport * as HttpWarningMessages from './HttpWarningMessages';\r\nimport * as KaFlAuth from './KaFlAuth';\r\n\r\nexport interface ApplicationState {\r\n error : Error.ErrorState,\r\n appAuth : Auth.AuthStatusState,\r\n voAuth : VoAth.VoAuthState,\r\n studentJournalsInfo : StudentJournalsInfo.VoStudentJournalsInfoState,\r\n httpErrorMessages: HttpErrorMessages.HttpErrorMessagesState,\r\n httpWarningMessages : HttpWarningMessages.HttpWarningMessagesState,\r\n kaFlAuth : KaFlAuth.KaFlAuthState\r\n}\r\n\r\n\r\nexport const reducers = {\r\n error: Error.reducer,\r\n appAuth : Auth.reducer,\r\n voAuth : VoAth.reducer,\r\n studentJournalsInfo : StudentJournalsInfo.reducer,\r\n httpErrorMessages : HttpErrorMessages.reducer,\r\n httpWarningMessages : HttpWarningMessages.reducer,\r\n kaFlAuth : KaFlAuth.reducer\r\n};\r\n\r\nexport interface AppThunkAction {\r\n (dispatch: (action: TAction) => void, getState: () => ApplicationState): void;\r\n}\r\n","import { Component, ErrorInfo, ReactNode } from \"react\";\r\nimport Grid from '@material-ui/core/Grid';\r\nimport Button from '@material-ui/core/Button';\r\nimport { post } from './../../../Utils/Fetch';\r\nimport {apiWriteError} from './../../../Interface/ServerRouteConst';\r\nimport { IComponentStatus, ClientError } from './../../../Interface/MainTypes';\r\nimport Loader from './../../Common/Loader/Loader';\r\nimport { ResetApp } from './../../../store/Error';\r\nimport { connect, ConnectedProps } from 'react-redux';\r\n\r\ninterface OwnProps {\r\n children: ReactNode\r\n}\r\nconst mapDispatchToProps = (dispatch : any) =>{\r\n return {\r\n unSetError : () => dispatch(ResetApp())\r\n }\r\n}\r\nconst connector = connect(null, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\n\r\ntype IProps = OwnProps & PropsFromRedux;\r\n\r\ninterface State {\r\n hasError: boolean;\r\n status : IComponentStatus\r\n}\r\n// компонет отображается при деларативных ошибках, связанных с рендариногом\r\n// https://ru.reactjs.org/docs/error-boundaries.html\r\n\r\nclass ErrorBoundary extends Component {\r\n\r\n public state: State = {\r\n hasError: false,\r\n status : 'idle'\r\n };\r\n\r\n public static getDerivedStateFromError(_: Error): State {\r\n return { hasError: true, status : 'idle' };\r\n }\r\n\r\n public componentDidCatch(error: Error, errorInfo: ErrorInfo) \r\n {\r\n const customErr = new ClientError(error.name, error.message, error.stack);\r\n \r\n post(apiWriteError, customErr)\r\n .then( (response : boolean ) =>{\r\n this.setState( { status : \"success\" } );\r\n })\r\n .catch( (error : any) =>{})\r\n }\r\n\r\n public TryRefresh = (e : React.MouseEvent) =>\r\n {\r\n this.setState( { status : \"idle\", hasError : false } );\r\n this.props.unSetError();\r\n }\r\n\r\n public render() {\r\n \r\n\r\n if (this.state.hasError) {\r\n\r\n if(this.state.status === 'pending' || this.state.status === 'idle')\r\n return Loader;\r\n \r\n\r\n return (\r\n \r\n \r\n

Произошла ошибка

\r\n \r\n
\r\n
);\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}\r\n\r\nexport default connector(ErrorBoundary);","import { IAuthStatus } from './Interface/MainTypes';\r\nimport { connect, ConnectedProps } from 'react-redux';\r\nimport { setError } from './store/Error';\r\nimport { useState, useEffect } from 'react';\r\nimport { UpdateAppStateToTimer, SetStartUpdateStatus } from './store/AuthStatus';\r\n\r\nexport const mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n updateAppState: (serverState: IAuthStatus) => dispatch(UpdateAppStateToTimer(serverState)),\r\n setStartUpdateStatus: () => dispatch(SetStartUpdateStatus()),\r\n setError: (error: Error) => dispatch(setError(error))\r\n }\r\n}\r\n\r\nconst connector = connect(null, mapDispatchToProps);\r\ntype PropsFromRedux = ConnectedProps;\r\n\r\nconst GetRequest = (url : string) => {\r\n const baseUrl = window.location.origin;\r\n const fullPath = `${baseUrl}/${url}`;\r\n return new Request(fullPath, { method: \"get\" });\r\n}\r\n\r\nconst RequestStatus = (props: PropsFromRedux) => {\r\n const [intervalId, setIntervalId] = useState(null);\r\n\r\n const ClearTimer = () => {\r\n if (intervalId)\r\n clearInterval(intervalId);\r\n }\r\n\r\n useEffect(() => {\r\n const path = \"api/main/stateType\";\r\n const request = GetRequest(path);\r\n\r\n fetch(request)\r\n .then((response) => {\r\n return response.text();\r\n })\r\n .then((serverStateType) => {\r\n if (serverStateType === \"Desktop\") {\r\n let intervalID = setInterval(shortAjax, 3000);\r\n setIntervalId(intervalID);\r\n }\r\n })\r\n\r\n return () => ClearTimer();\r\n }, [])\r\n\r\n const shortAjax = () => {\r\n \r\n const path = \"api/main/authAuto\";\r\n const request = GetRequest(path);\r\n\r\n fetch(request)\r\n .then((response) => {\r\n if (false === response.ok) {\r\n props.setError(new Error(\"error getStatus\"));\r\n return;\r\n }\r\n return response.json();\r\n })\r\n .then((data) => {\r\n const serverState: IAuthStatus = data as IAuthStatus;\r\n props.updateAppState(serverState);\r\n })\r\n .catch(error => {\r\n props.setStartUpdateStatus();\r\n })\r\n }\r\n\r\n return null;\r\n}\r\n\r\nexport default connector(RequestStatus);","\r\nimport ReactDOM from 'react-dom';\r\nimport App from './App';\r\nimport { Provider } from 'react-redux';\r\nimport configureStore from './store/configureStore';\r\nimport { ConnectedRouter } from 'connected-react-router';\r\nimport { createBrowserHistory } from 'history';\r\nimport ErrorBoundary from './Components/Common/ErrrorView/ErrorBoundary';\r\nimport RequestStatus from './RequestStatus';\r\n\r\nconst baseUrl = document.getElementsByTagName('base')[0].getAttribute('href') as string;\r\nconst history = createBrowserHistory({ basename: baseUrl });\r\nconst store = configureStore(history);\r\n\r\n\r\n(window as any).ReduxStore = store; // для отображения ошибки \r\n\r\nReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root'));\r\n","import { applyMiddleware, combineReducers, compose, createStore } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport { connectRouter, routerMiddleware } from 'connected-react-router';\r\nimport { History } from 'history';\r\nimport { ApplicationState, reducers } from './';\r\n\r\nexport default function configureStore(history: History, initialState?: ApplicationState) {\r\n const middleware = [\r\n thunk,\r\n routerMiddleware(history)\r\n ];\r\n\r\n const rootReducer = combineReducers({\r\n ...reducers,\r\n router: connectRouter(history)\r\n });\r\n\r\n const enhancers = [];\r\n const windowIfDefined = typeof window === 'undefined' ? null : window as any; // eslint-disable-line @typescript-eslint/no-explicit-any\r\n if (windowIfDefined && windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__) {\r\n enhancers.push(windowIfDefined.__REDUX_DEVTOOLS_EXTENSION__());\r\n }\r\n\r\n return createStore(\r\n rootReducer,\r\n initialState,\r\n compose(applyMiddleware(...middleware), ...enhancers)\r\n );\r\n}","async function http(path: string, config: RequestInit): Promise {\r\n let responseStatus: number | undefined = undefined;\r\n let responseStatusText : string | undefined = undefined;\r\n\r\n const baseUrl = window.location.origin;\r\n const fullPath = `${baseUrl}/${path}`;\r\n\r\n try {\r\n const request = new Request(fullPath, config);\r\n const response = await fetch(request);\r\n \r\n responseStatus = response.status;\r\n responseStatusText = response.statusText;\r\n\r\n if (false === response.ok) {\r\n throw new Error(\"Failed_request\");\r\n }\r\n\r\n return response.json();\r\n }\r\n catch (error) {\r\n const message = error instanceof Error ? error.message : String(error);\r\n const stacktrace = error instanceof Error && error.stack ? error.stack : '';\r\n const msg = MessageFormatHttp(fullPath, responseStatus, responseStatusText, message, stacktrace, config.body, config.method);\r\n console.log(msg);\r\n throw new Error(msg);\r\n }\r\n}\r\n\r\nfunction MessageFormatHttp(fullPath : string, responseStatus: number | undefined, responseStatusText: string | undefined, message: string, stacktrace: string, body?: BodyInit | null | undefined, method?: string | undefined) : string {\r\n const methodLabel : string = `method = ${method};`;\r\n const urlLabel : string = `url = ${fullPath};`;\r\n const responseStatusLabel : string = `responseStatus = ${responseStatus};`;\r\n const responseStatusTextLabel : string = `responseStatusText = ${responseStatusText};`;\r\n const bodyLabel : string = `body = ${body?.toString()};`;\r\n const messageLabel : string = `message = ${message};`;\r\n const stacktraceLabel : string = `innerStack = ${stacktrace};`;\r\n\r\n return `HttpRequestError ${methodLabel} ${urlLabel} ${responseStatusLabel} ${responseStatusTextLabel} ${bodyLabel} ${messageLabel} ${stacktraceLabel}`;\r\n}\r\n\r\nexport async function get(path: string, config?: RequestInit): Promise {\r\n const init = { method: 'get', ...config }\r\n return await http(path, init);\r\n}\r\n\r\nexport async function post(path: string, body: T, config: RequestInit | null = null): Promise {\r\n if (config === null)\r\n config = { headers: { 'Content-Type': 'application/json' } };\r\n\r\n const init = { method: 'post', body: JSON.stringify(body), ...config }\r\n return await http(path, init);\r\n}\r\n\r\nexport async function put(path: string, body: T, config: RequestInit | null = null): Promise {\r\n if (config === null)\r\n config = { headers: { 'Content-Type': 'application/json' } };\r\n const init = { method: 'put', body: JSON.stringify(body), ...config }\r\n return await http(path, init);\r\n}\r\n\r\nexport async function deleteData(path: string, config?: RequestInit): Promise {\r\n const init = { method: 'delete', ...config }\r\n return await http(path, init);\r\n}\r\n\r\n","/* сервер */\r\n\r\nexport const apiMainAuth : string = \"api/main/auth\";\r\nexport const apiMainAuthAuto : string = \"api/main/authauto\";\r\n\r\nexport const apiStartUpdate : string = \"api/main/startupdate\";\r\nexport const apiUserInfo : string = \"api/main/userinfo\";\r\nexport const apiReloginUser : string = \"api/main/relogin\";\r\nexport const apiCheckUser : string = \"api/main/checkUser\"; // проверка login + password \r\nexport const apiStartDbUpdate : string = \"api/main/startDbUpdate\";\r\n \r\nexport const apiVoAuth : string = \"api/voauth/auth\";\r\nexport const apiVoAuthAuto : string = \"api/voauth/authauto\";\r\nexport const apiVoAuthAutoWeb : string = \"api/voauth/authautoweb\";\r\n\r\nexport const apiVoLogOut : string = \"api/voauth/logout\";\r\nexport const apiVoAuthWeb : string = \"api/voauth/authweb\";\r\nexport const apiVoAuthPasswordRecovery : string = \"api/voauth/passwordRecovery\";\r\n\r\n\r\nexport const apiVoTestList : string = \"api/votest/area\";\r\nexport const apiVoTest : string = \"api/votest/\";\r\nexport const apiVoTestMaterialList : string = \"api/votest/testmaterials/area\";\r\nexport const apiVoTestExportDocFile : string = \"api/votest/exportdoc\";\r\n\r\nexport const apiVoSkrinTest : string = \"api/votestsskrin\";\r\n\r\nexport const apiVoAdminSettings : string = \"api/voadminsettings/\";\r\nexport const apiVoAdminSmtpStatus : string = \"api/voadminsettings/statussmtp\";\r\nexport const apiVoAdminSmtpTest : string = \"api/voadminsettings/testsmtp\";\r\n\r\nexport const apiSettionLog : string = \"api/logsConfig\";\r\n\r\nexport const apiImportDataGetAdminAuth : string = \"api/ImportData/getAdminAuth\";\r\nexport const apiImportDataGetTempFolder : string = \"api/ImportData/getTempFolder\";\r\nexport const apiImportDataCheckTempFolder : string = \"api/ImportData/checkTempFolder\";\r\nexport const apiImportDataStartUnZip : string = \"api/ImportData/startUnZip\";\r\nexport const apiImportDataGetStatusUnZip : string = \"api/ImportData/getStatusUnZip\";\r\nexport const apiImportDataCheckUnZipFolder : string = \"api/ImportData/checkUnZipFolder\";\r\nexport const apiImportDataCheckLogins: string = \"api/ImportData/checkLogins\";\r\nexport const apiImportDataCheckStudentLimit : string = \"api/ImportData/checkStudentLimit\";\r\n\r\nexport const apiImportDataCheckStartImport: string = \"api/ImportData/startImport\";\r\nexport const apiImportDataGetFullPathFileDb : string = \"api/main/getFullPathFileDb\";\r\n\r\n\r\nexport const apiAutoBackupConfigGetInfo : string = \"api/CreateDbBackUp/getBackUpInfo\";\r\nexport const apiAutoBackupConfigSetInfo : string = \"api/CreateDbBackUp/saveBackUpInfo\";\r\n\r\n\r\nexport const apiVoAdminSettingsSave : string = \"api/voadminsettings/save\";\r\nexport const apiVoAdminSettingLogsConfig : string = \"api/voadminsettings/saveConfigLogs\";\r\n\r\n\r\nexport const apiVoCommonSettingGetProxy : string = \"api/main/getproxyconf\";\r\nexport const apiVoCommonSettingSetProxy : string = \"api/main/setproxyconf\";\r\nexport const apiVoCommonSettingSetProxyAuth : string = \"api/main/setproxyconfAuth\";\r\n\r\nexport const apiVoCommonTestProxy : string = \"api/main/testServ\";\r\n\r\n\r\nexport const apiVoAdminSdl : string = \"api/voadminsdl\";\r\nexport const apiVoAdminSdlSetActive : string = \"api/voadminsdl/setactive\";\r\nexport const apiVoAdminSdlSendNewPassword : string = \"api/voadminsdl/sendnewpass\";\r\nexport const apiVoAdminSdlGetLinkNewPassword = \"api/voadminsdl/getlinknewpass\"\r\n\r\nexport const apiVoAdmintruct : string = \"api/vostruct\";\r\n\r\nexport const apiVoAdminStructCheckLinks = \"api/vostruct/checkLinks\";\r\n\r\nexport const apiVoCheckPassword : string = \"api/voauth/temppassword\";\r\nexport const apiVoSetUserPassword : string = \"api/voauth/setpassword\";\r\n\r\nexport const apiVoAreaSaveLogo : string = \"api/voareas/savelogo\";\r\nexport const apiVoAreaDropLogo : string = \"api/voareas/droplogo\";\r\nexport const apiVoAreas : string = \"api/voareas\"; \r\nexport const apiVoAreasVoWeb : string = \"api/vowebareas\";\r\nexport const apiVoAreasGetLast = \"api/voareas/getlast\"\r\n\r\nexport const apiVoAreasSetUnActive : string = \"api/voareas/setunactive\";\r\nexport const apiVoAreasSetActive : string = \"api/voareas/setactive\";\r\nexport const apiVoAreasWebSetActive : string = \"api/vowebareas/setactive\";\r\n\r\n\r\n// новости \r\nexport const apiVoGetAllNews : string = \"api/vonews/allskrinnews\";\r\nexport const apiVoGetSkrinNews : string = \"api/vonews/skrinnews\";\r\nexport const apiVoGetSdlNews : string = \"api/vosdlnews/show\"; \r\nexport const apiVoSkrinNewsGetStudentStatus : string = \"api/vonews/showstudentstatus\";\r\nexport const apiVoSkrinNewsSetStudentStatus : string = \"api/vonews/setshowstudentstatus\";\r\n\r\nexport const apiVoSdlNews : string = \"api/vosdlnews/\"\r\nexport const apiVoSdlNewsChangeStatus :string = \"api/vosdlnews/changestatus\";\r\nexport const apiVoSdlNewsChangeAllStatus : string = \"api/vosdlnews/changeallstatus\";\r\n\r\n// документы \r\nexport const apiVoGetAllDocs : string = \"api/vodocsskrin/allskrindocs\"; \r\nexport const apiVoGetSdlDocs : string = \"api/vodocssdl\";\r\nexport const apiVoGetSdlDocsSearch : string = \"api/vodocssdl/searchTree\";\r\n\r\n// видео \r\nexport const apiVoGetSdlVideo : string = \"api/vovideosdl\";\r\nexport const apiVoGetSkrinVideo : string = \"api/vovideoskrin\"; \r\nexport const apiVoGetSdlVideoSearch : string = \"api/vovideosdl/searchTree\";\r\nexport const apiVoGetSkrinVideoUrl : string = \"api/vovideoskrin/getVideoLink\"; // получение ссылки на видео СКРИН\r\n\r\n\r\n\r\n\r\n// перфиксы для работы с виджетом файловой системы \r\nexport const apiFileViewPrefixLoadFile : string = \"/loadfile\"; \r\nexport const apiFileViewPrefixGetList : string = \"/getlist\"; \r\nexport const apiFileViewPrefixSave : string = \"/save\";\r\nexport const apiFileViewPrefixDownLoad : string = \"/download\";\r\n//export const apiFileViewPrefixDelete : string = \"/delete\"; -- по т.з. удаление отменено для облака \r\n\r\n// студенты \r\nexport const apiVoStudents : string = \"api/vostudent\";\r\nexport const apiVoStudentsWebVo : string = \"api/vowebstudent\";\r\n\r\nexport const apiVoStudentsArhive : string = \"api/vostudent/searcharhivepage\";\r\n\r\nexport const apiVoStudentChangeArhiveStatus : string = \"api/vostudent/changeStudentArhiveStatus\";\r\nexport const apiVoStudentChangeArhiveStatusWeb : string = \"api/vowebstudent/changeStudentArhiveStatus\";\r\n\r\nexport const apiVoStudentsNewLogin : string = \"api/vostudent/getNewLogin\";\r\nexport const apiVoStudentsLoadList : string = \"api/vostudent/loadlist\";\r\nexport const apiWebVoStudentsLoadList : string = \"api/vowebstudent/loadlist\";\r\n\r\nexport const apiVoStudentsSendNewPassword : string = \"api/vostudent/sendnewpass\";\r\nexport const apiVoStudentsGetLinkNewPassword : string = \"api/vostudent/getlinknewpass\"\r\nexport const apiVoStudentsTreeView : string = \"api/vostruct/searchTree/getlist\";\r\nexport const apiVoDepartamenTreeView : string = \"api/vostruct/searchTreeDepartament/getlist\";\r\nexport const apiVoStudentsTreeViewTraining : string = \"api/vostruct/searchTree/getshowlist\";\r\n\r\nexport const apiVoStudentsGetShortInfo : string = \"api/vostudent/getshortinfo\";\r\nexport const apiVoStudentSearchHistory : string = \"api/vostudent/searchHistory\";\r\nexport const apiVoStudentJournals : string = \"api/vostudentjournal\";\r\nexport const apiVoStudentJournalsGetPdf : string = \"api/vostudentjournal/getpdf\";\r\nexport const apiVoStudentJournalsGetDoc : string = \"api/vostudentjournal/getdoc\";\r\n\r\nexport const apiVoStudnetJournalSaved : string = \"api/vostudentjournalsaved\";\r\nexport const apiVoStudentJournalJournalFile : string = \"api/vostudentjournal/getsavedjournal\";\r\nexport const apiVoStudentsFilterJournalsList : string = \"api/vostudentjournal/getfilterjournals\";\r\n\r\nexport const apiVoStudentsFilterJournalsCreateFilePdf : string = \"api/vostudentjournal/getfileIdjournalsPdf\";\r\nexport const apiVoStudentsFilterJournalsCreateFileDoc : string = \"api/vostudentjournal/getfileIdjournalsDoc\";\r\n\r\nexport const apiVoStudentsCertList : string = \"api/vostudentcert\";\r\n\r\nexport const apiVoStudentsFilterCount : string = \"api/VoStudentTrainig/getCountstudentcerts\";\r\nexport const apiVoStudentsCertGetFileId : string = \"api/VoStudentTrainig/getStudentCertsId\";\r\nexport const apiVoStudentsCertGetFileStatus : string = \"api/VoStudentTrainig/getStudentCertsStatus\";\r\nexport const apiVoStudentsCertStartProcess : string = \"api/VoStudentTrainig/getstudentcertsprocess\";\r\nexport const apiVoStudentsCertLoad : string = \"api/VoStudentTrainig/getstudentcerts\";\r\n\r\nexport const apiVoTraningStartGenCerts : string = \"api/VoStudentTrainig/traningStartGenCerts\";\r\n\r\nexport const apiVoStudentCertCountById : string = \"api/VoStudentTrainig/getCountStudentCerts/student\"; // кол-во сертификатов по id студента \r\nexport const apiVoStudentCertStartGenById : string = \"api/VoStudentTrainig/traningStartGenCertsStudent\"; // запуск генерации по id студента \r\n\r\n\r\n//обучение \r\nexport const apiVoTrainingSelectorOptions : string = \"api/votraining/selectoroptions\";\r\nexport const apiVoTraining : string = \"api/votraining/\";\r\nexport const apiVoTrainingStartSendMails : string = \"api/votraining/startsendmails\";\r\nexport const apiVoTrainingChangeStatus : string = \"api/votraining/changestatus\";\r\nexport const apiVoTrainingSendMailsInvit : string = \"api/votraining/sendinvit\";\r\nexport const apiVoTrainingProgress : string = \"api/votraining/getprogress\";\r\nexport const apiVoTrainingSendStudentMailInvit : string = \"api/votraining/sendinvitstudent\";\r\nexport const apiVoTrainingUpdateStudentList : string = \"api/votraining/updateTrainingStudentList\";\r\nexport const apiVoTrainingSearch : string = \"api/votraining/searchtraining\";\r\n\r\nexport const apiVoTrainingGetSdlCertPdf : string = \"api/vostudenttrainig/getsdlcertPdf\";\r\nexport const apiVoTrainingGetSdlCertDoc : string = \"api/vostudenttrainig/getsdlcertDoc\";\r\n\r\nexport const apiVoTrainingGetSdlTestResult : string = \"/api/vostudenttest/getsdlresultpdf\";\r\nexport const apiVoTrainginJournal : string = \"api/vostudentjournal/gettrainingjournals\";\r\nexport const apiVoTrainingJournalGetPdf : string = \"api/vostudentjournal/trainingjournalpdf\";\r\nexport const apiVoTrainingJournalGetDoc : string = \"api/vostudentjournal/trainingjournaldoc\";\r\n\r\n// новости студента\r\nexport const apiVoStudentSkrinNews : string = \"api/vostudentnews/allskrinnews\";\r\nexport const apiVoStudentSdlNews : string = \"api/vostudentnews/allsdlnews\";\r\nexport const apiVoStudentSkrinNewsStatus : string = \"api/vostudentnews/getshowskrinnewsstatus\";\r\n// обучение студента \r\nexport const apiVoStudentTraining : string = \"api/vostudenttrainig\";\r\nexport const apiVoStudentTrainingDescript : string = \"api/vostudenttrainig/getinfo\";\r\nexport const apiVoStudentTrainingDocs : string = \"api/vostudenttrainig/getdocs\";\r\nexport const apiVoStudentTrainingVideo : string = \"api/vostudenttrainig/getvideo\";\r\nexport const apiVoStudentTrainingTests : string = \"api/vostudenttrainig/gettests\";\r\n\r\nexport const apiVoStudentTrainingSetStatusDelay : string = \"api/votrainingreasonDelay/setStatusDelay\";\r\n\r\n\r\nexport const apiVoLoadSkrinDocById : string = \"api/vodocsskrin/loadbyid/\";\r\nexport const apiVoLoadSdlDocById : string = \"api/vodocssdl/download/\";\r\nexport const apiVoLoadSdlVideoById : string = \"api/vovideosdl/download/student/\";\r\n\r\nexport const apiVoWriteVideoSkrinEvent : string = \"api/vovideoskrin/studenthistory\";\r\nexport const apiVoWriteVideoSdlEvent : string = \"api/vovideosdl/studenthistory\";\r\n\r\n// тесты студента \r\n\r\nexport const apiVoStudentSdlTest : string = \"api/vostudenttest/getsdltest\";\r\nexport const apiVoStudentSkrinTest : string = \"api/vostudenttest/getskrintest\";\r\n\r\nexport const apiVoStudentStartTestSdl : string = \"api/vostudenttest/starttestsdl\";\r\nexport const apiVoStudentStartTestSkrin : string = \"api/vostudenttest/starttestskrin\";\r\n\r\n\r\nexport const apiVoStudentGetQuestion : string = \"api/vostudenttest/question\";\r\nexport const apiVoStudentSetQuestionAnswer : string = \"api/vostudenttest/setanswerforquestion\";\r\nexport const apiVoStudentGetTestResult : string = \"api/vostudenttest/getresult\";\r\nexport const apiVoStudentGetTestFinishInfo : string = \"api/vostudenttest/finishInfo\";\r\nexport const apiVoStudentTestFinishedForward : string = \"api/vostudenttest/finishForward\";\r\n\r\nexport const apiVoStudentGetTestResultPdf : string = \"api/vostudenttest/getresultpdf\";\r\nexport const apiVoStudentTrainingConfirm : string = \"api/vostudenttrainig/confirm\"; \r\n\r\nexport const apiVoStudentGetCertPdf : string = \"api/vostudentTrainig/getCertPdf\";\r\nexport const apiVoStudentGetCertDoc : string = \"api/vostudentTrainig/getCertDoc\";\r\n\r\nexport const apiVoFeedbackSend : string = \"api/VoFeedback/Send\";\r\nexport const apiVoFeedbackSendSupport: string = \"api/VoFeedback/SendSupport\";\r\n\r\n\r\nexport const apiLoadLogo : string = \"/api/voareas/logo/\";\r\nexport const apiWriteError : string = \"api/clienterror/boundarieserror\";\r\n\r\n\r\n/* контроллеры реестров */\r\nexport const apiMVKRegistr : string = \"api/mvkregistry\";\r\nexport const api639PRegistr : string = \"api/fsfmregistry\";\r\n\r\n/** общая авторизация для блоков */\r\nexport const ModuleAuthentication : string = \"api/ModuleAuthentication/ModuleLogin\"; \r\nexport const ModuleAuthenticationLogout : string = \"api/ModuleAuthentication/ModuleLogout\"; \r\nexport const ModuleAuthenticationModuleLoginAuto : string = \"api/ModuleAuthentication/ModuleLoginAuto\";\r\n\r\n/* префиксы к регистрам */\r\nexport const apiRegistryPrefixLoadFile : string = \"/loadfile\";\r\nexport const apiRegistryPrefixGetListFile : string = \"/files\";\r\nexport const apiRegistryPrefixRemome : string = \"/remove/\";\r\n\r\n/* инструкции видео*/\r\nexport const apiVoInstructionVideo : string = \"api/voinstructionsvideo/allinstructionvideo\";\r\nexport const apiVoInstructionVideoTag : string = \"api/voinstructionsvideo/allinstructionvideotags\";\r\n\r\n\r\n","import Grid from '@material-ui/core/Grid';\r\nimport CircularProgress from '@material-ui/core/CircularProgress';\r\n\r\nconst Loader = (\r\n \r\n \r\n );\r\n\r\nexport default Loader;\r\n","import { ComponentType, lazy } from \"react\";\r\n\r\ntype ComponentPromise = Promise<{ default: ComponentType }>;\r\n\r\nexport default function lazyWithRetry(\r\n componentImport: () => ComponentPromise\r\n): React.LazyExoticComponent> {\r\n return lazy( async() => {\r\n \r\n const pageHasAlreadyBeenForceRefreshed = JSON.parse(\r\n window.localStorage.getItem(\r\n 'page-has-been-force-refreshed'\r\n ) || 'false'\r\n );\r\n\r\n try {\r\n const component = await componentImport();\r\n\r\n window.localStorage.setItem(\r\n 'page-has-been-force-refreshed',\r\n 'false'\r\n );\r\n\r\n return component;\r\n } catch (error) {\r\n if (!pageHasAlreadyBeenForceRefreshed) {\r\n // Assuming that the user is not on the latest version of the application.\r\n // Let's refresh the page immediately.\r\n window.localStorage.setItem(\r\n 'page-has-been-force-refreshed',\r\n 'true'\r\n );\r\n \r\n window.location.reload();\r\n\r\n }\r\n\r\n // The page has already been reloaded\r\n // Assuming that user is already using the latest version of the application.\r\n // Let's let the application crash and raise the error.\r\n throw error;\r\n }\r\n });\r\n}\r\n\r\n","\r\nexport function IsEqual(object1: any, object2: any): boolean {\r\n\r\n let hasNullValue: boolean = false;\r\n\r\n if ((object1 === null) || (object2 === null))\r\n hasNullValue = true;\r\n\r\n if (hasNullValue) {\r\n return ((object1 === null) && (object2 === null));\r\n }\r\n\r\n\r\n const props1 = Object.getOwnPropertyNames(object1);\r\n const props2 = Object.getOwnPropertyNames(object2);\r\n\r\n if (props1.length !== props2.length) {\r\n return false;\r\n }\r\n\r\n for (let i = 0; i < props1.length; i += 1) {\r\n const prop = props1[i];\r\n const bothAreObjects = typeof (object1[prop]) === 'object' && typeof (object2[prop]) === 'object';\r\n\r\n if ((!bothAreObjects && (object1[prop] !== object2[prop]))\r\n || (bothAreObjects && !IsEqual(object1[prop], object2[prop]))) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n}","import { Action, Reducer } from 'redux';\r\nimport { IAuthStatus, IModules } from './../Interface/MainTypes'\r\nimport { AppThunkAction } from './index'\r\nimport { IsEqual } from './../Utils/IsEqualFun';\r\n\r\nexport interface AuthStatusState {\r\n appAuth: IAuthStatus\r\n}\r\n\r\nexport interface SetAuthAction { type: 'SET_AUTH', auth: IAuthStatus }\r\nexport interface SetStartUpdateAction { type: 'SET_START_UPDATE' }\r\nexport interface SetEndUpdateAction { type: 'SET_END_UPDATE' }\r\nexport interface SetAuthModulesAction { type: 'SET_AUTH_MODULES', modules: Array | null }\r\n\r\nexport const SetAuth = (auth: IAuthStatus): SetAuthAction => (\r\n { type: 'SET_AUTH', auth }\r\n)\r\n\r\nexport const SetStartUpdate = (): SetStartUpdateAction => (\r\n { type: 'SET_START_UPDATE' }\r\n)\r\n\r\nexport const SetEndUpdate = (): SetEndUpdateAction => (\r\n { type: 'SET_END_UPDATE' }\r\n)\r\n\r\nexport const SetAuthModules = (modules: Array | null): SetAuthModulesAction => (\r\n { type: 'SET_AUTH_MODULES', modules }\r\n)\r\n\r\nexport const UpdateAppStateToTimer = (serverState: IAuthStatus): AppThunkAction => (dispatch, getState) => {\r\n\r\n let clientState: IAuthStatus = getState().appAuth.appAuth;\r\n let statusState: boolean = IsEqual(clientState, serverState);\r\n\r\n if (false === statusState) {\r\n let clientStatusUpdate: boolean = getState().appAuth.appAuth.updateProcess;\r\n let serverStatusUpdate: boolean = serverState.updateProcess;\r\n\r\n if (clientStatusUpdate === serverStatusUpdate) {\r\n dispatch(SetAuth(serverState));\r\n }\r\n else {\r\n dispatch(SetEndUpdateStatus());\r\n window.location.reload(); // обновление программы\r\n }\r\n }\r\n}\r\n\r\nexport const SetStartUpdateStatus = (): AppThunkAction => (dispatch, getState) => {\r\n let isStartUpdate: boolean = getState().appAuth.appAuth.updateProcess;\r\n\r\n if (false === isStartUpdate) {\r\n dispatch(SetStartUpdate());\r\n }\r\n}\r\n\r\nexport const SetEndUpdateStatus = (): AppThunkAction => (dispatch, getState) => {\r\n let isStartUpdate: boolean = getState().appAuth.appAuth.updateProcess;\r\n\r\n if (isStartUpdate) {\r\n dispatch(SetEndUpdate());\r\n }\r\n}\r\n\r\n\r\ntype KnownAction = SetAuthAction | SetStartUpdateAction | SetAuthModulesAction | SetEndUpdateAction;\r\n\r\nexport const reducer: Reducer = (state: AuthStatusState | undefined, incomingAction: Action): AuthStatusState => {\r\n\r\n if (state === undefined) {\r\n return { appAuth : { isAuth : false, isRun : false, updateProcess : false, hasUpdate : false, blockDbChanges : false, dbUpdateProcessHasError : false ,errorMessage : null, modules : null, stateType : 'Desktop', hasLongScriptDbUpdate : false} };\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'SET_AUTH':\r\n return { appAuth: action.auth };\r\n case 'SET_START_UPDATE':\r\n {\r\n let actualData: IAuthStatus = { ...state.appAuth };\r\n actualData.updateProcess = true;\r\n return { appAuth: actualData };\r\n }\r\n case 'SET_END_UPDATE': {\r\n let actualData: IAuthStatus = { ...state.appAuth };\r\n actualData.updateProcess = false;\r\n return { appAuth: actualData };\r\n }\r\n case 'SET_AUTH_MODULES':\r\n {\r\n let actualData: IAuthStatus = { ...state.appAuth };\r\n actualData.modules = action.modules;\r\n return { appAuth: actualData };\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n\r\n\r\n\r\n","\r\nexport type IComponentStatus = 'idle' | 'pending' | 'success' | 'error';\r\n\r\nexport type ISite = 'vo' | 'soap' | 'kafl' | 'podftfl';\r\n\r\n\r\nexport interface IAuth {\r\n login: string,\r\n password: string\r\n}\r\n\r\nexport interface IAuthCommon {\r\n login: string,\r\n password: string,\r\n targetModule : ISiteList\r\n}\r\n\r\n\r\n// карточка вывода на сайте \r\nexport interface ICard {\r\n id: number,\r\n color: string,\r\n url: string,\r\n title: string\r\n}\r\n\r\nexport type IStateType = 'Desktop' | 'Web';\r\n\r\nexport interface IAuthStatus {\r\n isAuth: boolean,\r\n isRun: boolean,\r\n hasUpdate: boolean,\r\n updateProcess: boolean,\r\n blockDbChanges: boolean,\r\n dbUpdateProcessHasError: boolean,\r\n hasLongScriptDbUpdate : boolean,\r\n errorMessage: string | null,\r\n modules: Array | null,\r\n stateType: IStateType,\r\n}\r\n\r\nexport interface ISiteTheme {\r\n id: number,\r\n name: string\r\n}\r\n\r\nexport interface IModules {\r\n id: number,\r\n name: string,\r\n limit: number,\r\n siteTheme: ISiteTheme,\r\n accessTypes: Array\r\n}\r\n\r\nexport interface IAccessTypes {\r\n id: number,\r\n name: string,\r\n limit: number,\r\n beginDate: Date | null,\r\n endDate: Date | null,\r\n}\r\n\r\n\r\nexport type IFormMode = \"editMode\" | \"createMode\";\r\n\r\nexport type IModalType = \"error\" | \"warning\" | \"info\" | \"success\";\r\n\r\n\r\nexport class ClientError {\r\n name: string;\r\n message: string;\r\n stack?: string;\r\n constructor(name: string, message: string, stack?: string) {\r\n this.name = name;\r\n this.message = message;\r\n this.stack = stack;\r\n }\r\n}\r\n\r\n// API = 14,\r\n// VO = 13,\r\n\r\n\r\nexport interface IExtendedModules {\r\n id: number\r\n show: boolean,\r\n title: string\r\n}\r\n\r\nexport interface IUserInfo {\r\n userLogin: string | null,\r\n version: string | null,\r\n modules: Array | null\r\n}\r\n\r\n/// тип возврата содержащий ошибки от сервера \r\nexport interface IResponseData {\r\n status: boolean,\r\n errorMessage: string\r\n}\r\n\r\nexport interface IResponseErorWarningMessage {\r\n status: boolean,\r\n hasWarning: boolean,\r\n errorMessage: string | null,\r\n warningMessage: string | null\r\n}\r\n\r\nexport interface IResponseWarningData {\r\n status: boolean,\r\n errorMessage: Array | null,\r\n warningMessage: Array | null\r\n}\r\n\r\nexport interface IResponseSuccessDate {\r\n status: boolean,\r\n errorMessage: string,\r\n successMessage: string\r\n}\r\n\r\nexport interface PagesData {\r\n currentPage: number,\r\n countPage: number,\r\n pageSize: number,\r\n items: Array\r\n}\r\n\r\n//пагинаци с указанием totalCount \r\nexport interface PagesDataSize {\r\n currentPage: number,\r\n countPage: number,\r\n pageSize: number,\r\n totalCount: number,\r\n items: Array\r\n}\r\n\r\n/** Пагинация из Common с TotalCount */\r\nexport interface PagesDataCommon {\r\n /** тек. страница*/\r\n currentPage: number,\r\n \r\n /** число страниц */\r\n countPage: number,\r\n \r\n /** размер страницы */\r\n pageSize: number,\r\n \r\n /** общее количество объектов */\r\n totalItemCount: number,\r\n \r\n /** список элементов */\r\n items: Array\r\n}\r\n\r\nexport type ITextFieldVariants = \"filled\" | \"outlined\" | \"standard\";\r\n\r\nexport type ITextFieldSizes = \"medium\" | \"small\";\r\n\r\nexport enum ISiteList { api = 14, voWeb = 13, voDesktop = 15, kaFl = 16, podftFl = 5 } // список сайтов \r\n\r\nexport const ISiteTypeDesktopDictionary : Record = {\r\n vo : ISiteList.voDesktop,\r\n soap : ISiteList.api,\r\n kafl : ISiteList.kaFl,\r\n podftfl : ISiteList.podftFl\r\n}\r\n\r\nexport type ISortingOrder = 'asc' | 'desc' | 'none';\r\n\r\nexport interface IVoEmailSendResult {\r\n smtpStatus: boolean,\r\n countSucces: number,\r\n emailsFailedSend: Array\r\n}\r\n\r\nexport interface IAdminActionResult {\r\n hasAccess: boolean,\r\n status: boolean\r\n}\r\n\r\nexport interface IBuildDate {\r\n buildDate: number\r\n}\r\n\r\nexport enum IPeriodCron { none = 0, onceDay = 1, onceWeek = 2, onceMonth = 3 }\r\nexport enum IPeriodDayOfWeek { sunday = 0, monday = 1, tuesday = 2, wednesday = 3, thursday = 4, friday = 5, saturday = 6 }\r\n\r\nexport interface IAutoBackupConfig {\r\n folder: string,\r\n status: boolean,\r\n afterDayesCount: number,\r\n dateTimeBackup: Date | null,\r\n timeSpanBackup: string,\r\n\r\n // новые поля \r\n period: IPeriodCron,\r\n periodDayOfWeek: IPeriodDayOfWeek,\r\n periodDayOfMonth: number\r\n}\r\n\r\nexport interface ISiteTitleFavicon {\r\n title: string,\r\n faviconLink: string\r\n}\r\n\r\nexport interface ISkrinResponseMessages\r\n{\r\n id : string,\r\n messages: Array\r\n}\r\n\r\nexport interface ISearchStringPaging {\r\n\tsearchString : string, \r\n\tpage : number,\r\n\tpageSize : number,\r\n}\r\n\r\nexport interface ISelectOptions {\r\n key : string ,\r\n value : string,\r\n name : string\r\n}","import { Action, Reducer } from 'redux';\r\nimport { ISkrinResponseMessages } from './../Interface/MainTypes';\r\n\r\n\r\nexport interface HttpErrorMessagesState {\r\n httpErrorMessages: Array\r\n}\r\n\r\nexport interface SetHttpErrorMessagesAction { type: 'SET_HTTP_ERROR_MESSAGES_INFO', messages: ISkrinResponseMessages }\r\nexport interface SetClearHttpErrorMessagesAction { type: 'SET_HTTP_ERROR_MESSAGES_CLEAR_INFO', id: string }\r\n\r\nexport const SetHttpErrorMessages = (messages: ISkrinResponseMessages): SetHttpErrorMessagesAction => (\r\n { type: 'SET_HTTP_ERROR_MESSAGES_INFO', messages }\r\n)\r\n\r\nexport const SetClearHttpErrorMessages = (id: string): SetClearHttpErrorMessagesAction => (\r\n { type: 'SET_HTTP_ERROR_MESSAGES_CLEAR_INFO', id }\r\n)\r\n\r\ntype KnownAction = SetHttpErrorMessagesAction | SetClearHttpErrorMessagesAction;\r\n\r\nexport const reducer: Reducer = (state: HttpErrorMessagesState | undefined, incomingAction: Action): HttpErrorMessagesState => {\r\n\r\n if (state === undefined) {\r\n return { httpErrorMessages: [] };\r\n }\r\n const action = incomingAction as KnownAction;\r\n\r\n switch (action.type) {\r\n case 'SET_HTTP_ERROR_MESSAGES_INFO':\r\n return { httpErrorMessages: [...state.httpErrorMessages, action.messages] };\r\n case 'SET_HTTP_ERROR_MESSAGES_CLEAR_INFO':\r\n const newItems : Array = state.httpErrorMessages.filter(item => (false === (item.id === action.id)));\r\n return { httpErrorMessages: newItems };\r\n default:\r\n return state;\r\n }\r\n\r\n};\r\n\r\n","import { Action, Reducer } from 'redux';\r\nimport { ISkrinResponseMessages } from './../Interface/MainTypes';\r\n\r\n\r\nexport interface HttpWarningMessagesState {\r\n httpWarningMessages: Array\r\n}\r\n\r\nexport interface SetHttpWarningMessagesAction { type: 'SET_HTTP_WARNING_MESSAGES_INFO', messages: ISkrinResponseMessages }\r\nexport interface SetClearHttpWarningMessagesAction { type: 'SET_HTTP_WARNING_MESSAGES_CLEAR_INFO', id: string }\r\n\r\nexport const SetHttpWarningMessages = (messages: ISkrinResponseMessages): SetHttpWarningMessagesAction => (\r\n { type: 'SET_HTTP_WARNING_MESSAGES_INFO', messages }\r\n)\r\n\r\nexport const SetClearHttpWarningMessages = (id: string): SetClearHttpWarningMessagesAction => (\r\n { type: 'SET_HTTP_WARNING_MESSAGES_CLEAR_INFO', id }\r\n)\r\n\r\ntype KnownAction = SetHttpWarningMessagesAction | SetClearHttpWarningMessagesAction;\r\n\r\nexport const reducer: Reducer = (state: HttpWarningMessagesState | undefined, incomingAction: Action): HttpWarningMessagesState => {\r\n\r\n if (state === undefined) {\r\n return { httpWarningMessages: [] };\r\n }\r\n const action = incomingAction as KnownAction;\r\n\r\n switch (action.type) {\r\n case 'SET_HTTP_WARNING_MESSAGES_INFO':\r\n return { httpWarningMessages : [...state.httpWarningMessages, action.messages] };\r\n case 'SET_HTTP_WARNING_MESSAGES_CLEAR_INFO':\r\n const newItems : Array = state.httpWarningMessages.filter(item => (false === (item.id === action.id)));\r\n return { httpWarningMessages: newItems };\r\n default:\r\n return state;\r\n }\r\n\r\n};\r\n\r\n","import Button from '@material-ui/core/Button';\r\nimport Dialog from '@material-ui/core/Dialog';\r\nimport DialogActions from '@material-ui/core/DialogActions';\r\nimport DialogContent from '@material-ui/core/DialogContent';\r\nimport DialogTitle from '@material-ui/core/DialogTitle';\r\nimport { makeStyles } from '@material-ui/core/styles';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport IconButton from '@material-ui/core/IconButton';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport Grid from '@material-ui/core/Grid';\r\n\r\nconst useStyles = makeStyles({\r\n dialog: {\r\n position: 'absolute',\r\n top: \"5%\"\r\n },\r\n closeButton: {\r\n position: 'absolute',\r\n right: \"1%\",\r\n top: \"1%\",\r\n color: \"#ccc\",\r\n },\r\n});\r\n\r\n\r\ninterface IProps {\r\n open: boolean,\r\n onClose(): void,\r\n title: string,\r\n textQuery: string,\r\n onAgree(): void\r\n}\r\n\r\nconst QueryDialog = (props: IProps) => {\r\n\r\n const classes = useStyles();\r\n\r\n return (\r\n \r\n \r\n \r\n {props.title}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n {props.textQuery}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default QueryDialog;","import { makeStyles } from '@material-ui/core/styles';\r\nimport Modal from '@material-ui/core/Modal';\r\nimport Grid from '@material-ui/core/Grid';\r\nimport CloseIcon from '@material-ui/icons/Close';\r\nimport Typography from '@material-ui/core/Typography';\r\nimport { ReactNode } from 'react';\r\n\r\ninterface IModalProps {\r\n title: string,\r\n message: ReactNode,\r\n show: boolean,\r\n handleClose(): void,\r\n}\r\n\r\n\r\nconst useStyles = makeStyles({\r\n paper: {\r\n position: 'absolute',\r\n width: 550,\r\n top: \"20%\",\r\n left: \"50%\",\r\n transform: \"translate(-50%, -50%)\",\r\n backgroundColor: \"#fff\",\r\n textAlign: \"center\",\r\n padding: \"25px\",\r\n borderRadius: \"6px\",\r\n border: \"1px solid rgba(0,0,0,.2)\"\r\n }\r\n});\r\n\r\n\r\nconst ModalMessageWithNode = (props: IModalProps) => {\r\n const classes = useStyles();\r\n\r\n const body = (\r\n
\r\n \r\n \r\n {props.title}\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n {props.message}\r\n \r\n
\r\n );\r\n\r\n if (props.show === false) {\r\n return null;\r\n }\r\n\r\n return (\r\n <>\r\n \r\n {body}\r\n \r\n \r\n );\r\n}\r\n\r\nexport default ModalMessageWithNode;","import Grid from '@material-ui/core/Grid';\r\n\r\n/** компонент общей обертки по ширине + paddind 1% общий */\r\n\r\nconst WrapperPaddingWidth : React.FC = ({ children }) => {\r\n return (\r\n \r\n \r\n {children}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default WrapperPaddingWidth;","import { Action, Reducer } from 'redux';\r\nimport { IVoAuthState, IVoUserArea } from './../Interface/VoTypes';\r\nimport { AppThunkAction } from './index'\r\nimport { getCookie, setCookie } from 'typescript-cookie'\r\n\r\nexport interface VoAuthState {\r\n voAuth: IVoAuthState\r\n}\r\n\r\nexport interface SetAuthAction { type: 'SET_VO_AUTH', auth: IVoAuthState }\r\nexport interface SetActiveUserArea { type: 'SET_VO_AREA_SET_ACTIVE', activeArea: IVoUserArea | null }\r\nexport interface SetUserAreas { type: 'SET_VO_AREA_SET_LIST', userAreas: Array | null }\r\n\r\nexport const SetVoAuth = (auth: IVoAuthState): SetAuthAction => (\r\n { type: 'SET_VO_AUTH', auth }\r\n)\r\n\r\nexport const SetActiveArea = (activeArea: IVoUserArea | null): SetActiveUserArea => (\r\n { type: 'SET_VO_AREA_SET_ACTIVE', activeArea }\r\n)\r\n\r\nexport const SetAreaList = (userAreas: Array | null): SetUserAreas => (\r\n { type: 'SET_VO_AREA_SET_LIST', userAreas }\r\n)\r\n\r\nexport const UpdateAreaList = (userAreas: Array | null): AppThunkAction => (dispatch, getState) => {\r\n const activeArea: IVoUserArea | null = getState().voAuth.voAuth.activeUserArea;\r\n\r\n if (activeArea === null) {\r\n dispatch(SetAreaList(userAreas));\r\n return;\r\n }\r\n\r\n const activeAreaInList: IVoUserArea | undefined = userAreas?.find(x => x.id === activeArea.id);\r\n\r\n if ((!activeAreaInList) || (activeAreaInList.isEnable === false)) {\r\n dispatch(SetActiveArea(null));\r\n dispatch(SetAreaList(userAreas));\r\n return;\r\n }\r\n\r\n if (activeAreaInList.isEnable) {\r\n dispatch(SetAreaList(userAreas));\r\n return;\r\n }\r\n}\r\n\r\n\r\n\r\ntype KnownAction = SetAuthAction | SetActiveUserArea | SetUserAreas;\r\nconst nameActiveAreaId : string = \"_actAreaId\";\r\n\r\n\r\nexport const reducer: Reducer = (state: VoAuthState | undefined, incomingAction: Action): VoAuthState => {\r\n\r\n if (state === undefined) {\r\n return { voAuth: { isAuth: false, userLogin: null, role: null, errorMessage: null, userAreas: null, activeUserArea: null } };\r\n }\r\n\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'SET_VO_AUTH': {\r\n const oldSelctAreaId : string | undefined = getCookie(nameActiveAreaId);\r\n\r\n if(!oldSelctAreaId)\r\n return { voAuth: action.auth };\r\n\r\n const item : IVoUserArea | undefined = action.auth.userAreas?.find(x => x.id === Number(oldSelctAreaId) && x.isEnable === true);\r\n\r\n if(item)\r\n {\r\n const newState = {...action.auth, activeUserArea : item };\r\n return { voAuth: newState };\r\n }\r\n\r\n return { voAuth: action.auth };\r\n }\r\n case 'SET_VO_AREA_SET_ACTIVE':\r\n {\r\n let actualData: IVoAuthState = { ...state.voAuth };\r\n actualData.activeUserArea = action.activeArea;\r\n \r\n if(action.activeArea)\r\n setCookie(nameActiveAreaId, action.activeArea.id, { expires: 7, path : \"/\" } );\r\n \r\n return { voAuth: actualData };\r\n }\r\n case 'SET_VO_AREA_SET_LIST':\r\n {\r\n let actulState: IVoAuthState = { ...state.voAuth };\r\n actulState.userAreas = action.userAreas;\r\n return { voAuth: actulState };\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n\r\n\r\n\r\n","import Grid from '@material-ui/core/Grid';\r\nimport TextField from '@material-ui/core/TextField';\r\nimport Button from '@material-ui/core/Button';\r\nimport { useState } from 'react';\r\nimport { IAuth, IComponentStatus } from '../../../Interface/MainTypes';\r\nimport Loader from './../../Common/Loader/Loader';\r\nimport { post } from './../../../Utils/Fetch';\r\nimport { apiCheckUser } from './../../../Interface/ServerRouteConst';\r\nimport { IAuthStatus } from '../../../Interface/MainTypes';\r\nimport PasswordInput from '../../Common/PasswordInput/PasswordInput';\r\n\r\ninterface IPropsShowError {\r\n message: string | null\r\n}\r\n\r\nconst ShowErrorMessage = (props: IPropsShowError) => {\r\n if ((props.message === null) || (props.message.length === 0))\r\n return null;\r\n\r\n return ({props.message})\r\n}\r\n\r\ninterface IProps {\r\n handleSuccess(): void // при успешной автризации \r\n}\r\n\r\nconst AccessPage = (props: IProps) => {\r\n\r\n const [status, setStatus] = useState('idle');\r\n const defaultValue: IAuth = { login: \"\", password: \"\" };\r\n const [auth, setAuth] = useState(defaultValue);\r\n const [messageError, setMessageError] = useState(null);\r\n\r\n const handelChangeLogin = (e: React.ChangeEvent) => {\r\n const { target: { value: login } } = e;\r\n const newAuth = { ...auth, login: login };\r\n setAuth(newAuth);\r\n }\r\n\r\n const handelChangePassword = (e: React.ChangeEvent) => {\r\n const { target: { value: password } } = e;\r\n const newAuth = { ...auth, password: password };\r\n setAuth(newAuth);\r\n }\r\n\r\n const setPassword = (value : string) => {\r\n const newAuth = { ...auth, password: value };\r\n setAuth(newAuth);\r\n }\r\n\r\n const handelSend = (e: React.MouseEvent) => {\r\n if (auth.login.length > 0 && auth.password.length > 0) {\r\n setMessageError(\"\");\r\n setStatus('pending');\r\n post(apiCheckUser, auth)\r\n .then((response: IAuthStatus) => {\r\n setStatus('success');\r\n if (response.isAuth) {\r\n props.handleSuccess();\r\n }\r\n else {\r\n setMessageError(response.errorMessage);\r\n }\r\n })\r\n }\r\n }\r\n\r\n\r\n\r\n const Form: JSX.Element = (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Вход\r\n \r\n \r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {status === 'pending' ? Loader : Form}\r\n \r\n \r\n );\r\n}\r\n\r\nexport default AccessPage;","\r\n/* клиент */\r\nexport const StartPagePath : string = \"/\";\r\nexport const MainAuthPath : string = \"/main/auth\";\r\nexport const StartUpdateInfoPath : string = \"/main/startupdate\";\r\nexport const StartUpdateDbInfoPath : string = \"/main/startdbupdate\";\r\n\r\nexport const UserInfoPath : string = \"/main/userinfo\";\r\nexport const CommonSettingPath : string = \"/main/commonsetting\";\r\nexport const UserSettingLogs : string = \"/main/settingLogs\";\r\nexport const DataImportPath : string = \"/main/dataImport\";\r\nexport const CreateDbBackUpPagePath : string = \"/main/createdbbackuppage\";\r\nexport const TestSkrinHttpRequestPath : string = \"/main/testSkrinRequest\";\r\n\r\n\r\n\r\nexport const VoRoutePath : string = \"/vo\";\r\n\r\nexport const VoAuthPath : string = \"/vo/auth\";\r\nexport const VoSettingSdlPath : string = \"/vo/setting/sdl\";\r\nexport const VoSettingSdlAddPath : string = \"/vo/setting/sdl/create\";\r\nexport const VoSettingSdlEditRoute : string = \"/vo/setting/sdl/edit/:id\";\r\nexport const VoSettingSdlEditPath : string = \"/vo/setting/sdl/edit/\"; \r\nexport const VoSettingAreasPath : string = \"/vo/setting/areas\";\r\n\r\n\r\nexport const VoAdminSettingSmtpPath : string = \"/vo/adminsetting/smtp\"\r\n\r\n\r\nexport const VoSettingAreasAddRoute : string = \"/vo/setting/areas/create/:typeParam\";\r\nexport const VoSettingAreasAddPath : string = \"/vo/setting/areas/create/\";\r\n\r\nexport const VoSettingAreasEditRoute : string = \"/vo/setting/areas/edit/:id\";\r\nexport const VoSettingAreasEditPath : string = \"/vo/setting/areas/edit/\"\r\n\r\nexport const VoSettingStructCompany : string = \"/vo/setting/struct\";\r\n\r\nexport const VoSetUserPassword : string = \"/vo/setpassword/:key\";\r\n\r\n// вопросная база \r\n\r\nexport const VoQuestionBasePath : string = \"/vo/questionbase\";\r\nexport const VoQuestionBaseRoute : string = \"/vo/questionbase/:mode/:page?\";\r\n\r\nexport const VoQuestionBaseListPath : string = \"/vo/questionbase/show\";\r\nexport const VoQuestionBaseListRoute : string = \"/vo/questionbase/show/:page?\";\r\n\r\nexport const VoQuestionBaseCreatePath : string = \"/vo/questionbase/create\";\r\n\r\nexport const VoQuestionBaseEditPath : string = \"/vo/questionbase/edit/\";\r\nexport const VoQuestionBaseEditRoute : string = \"/vo/questionbase/edit/:id\";\r\n\r\nexport const VoQuestionBaseCopyPath : string = \"/vo/questionbase/copy/\";\r\nexport const VoQuestionBaseCopyRoute : string = \"/vo/questionbase/copy/:id\";\r\n\r\n// табы новостей \r\n\r\nexport const VoNewsPath : string = \"/vo/news\";\r\nexport const VoNewsTabPath : string = \"/vo/news/tab\";\r\nexport const VoNewsTabRoute : string = \"/vo/news/tab/:tabId/:mode/:page?\";\r\n\r\n//новости СКРИН вывод списка \r\nexport const VoSkrinNewsAdminShowListPath: string = \"/vo/news/tab/0/show/\";\r\nexport const VoSkrinNewsAdminShowListRoute : string = \"/vo/news/tab/0/show/:page?\";\r\n\r\nexport const VoSkrinNewsAdminOpenItemPath : string = \"/vo/news/tab/0/open/\";\r\nexport const VoSkrinNewsAdminOpenItemRoute : string = \"/vo/news/tab/0/open/:id\";\r\n\r\n//новости СДЛ \r\nexport const VoSDLNewsAdminShowListPath: string = \"/vo/news/tab/1/show/\";\r\nexport const VoSDLNewsAdminShowListRoute : string = \"/vo/news/tab/1/show/:page?\";\r\n\r\nexport const VoSDLNewsAdminOpenItemPath : string = \"/vo/news/tab/1/open/\";\r\nexport const VoSDLNewsAdminOpenItemRoute : string = \"/vo/news/tab/1/open/:id\";\r\n\r\nexport const VoSDLNewsAdminCreatePath : string = \"/vo/news/tab/1/create\";\r\n\r\nexport const VoSDLNewsAdminEditPath : string = \"/vo/news/tab/1/edit/\";\r\nexport const VoSDLNewsAdminEditRoute : string = \"/vo/news/tab/1/edit/:id\";\r\n\r\n\r\n// табы документов \r\nexport const VoDocumentsPath : string = \"/vo/documents\";\r\nexport const VoDocumentsTabPath : string = \"/vo/documents/tab\";\r\nexport const VoDocumentsTabRoute : string = \"/vo/documents/tab/:tabId/:page\";\r\n\r\n//таб видео video\r\nexport const VoVideoClipsPath : string = \"/vo/video\";\r\nexport const VoVideoClipsTabPath : string = \"/vo/video/tab\";\r\nexport const VoVideoClipsTabRoute : string = \"/vo/video/tab/:tabId/:page\";\r\n\r\n\r\n\r\n\r\n//студенты\r\n\r\nexport const VoStudetsTabPath : string = \"/vo/students/tab\";\r\nexport const VoStudetsTabRoute : string = \"/vo/students/tab/:tabId/:mode/:page?\";\r\n\r\n\r\nexport const VoStudentTabShowList : string = \"/vo/students/tab/0/show/:page?\";\r\nexport const VoStudetAddPath : string = \"/vo/students/tab/0/create\";\r\n\r\nexport const VoStudetEditRoute : string = \"/vo/students/tab/0/edit/:id\";\r\nexport const VoStudetEditPath : string = \"/vo/students/tab/0/edit/\";\r\n\r\n//журнал нескольких студентов \r\nexport const VoStudentsJournalsRoute : string = \"/vo/students/tab/0/journals/:page\";\r\nexport const VoStudentsJournalsPath : string = \"/vo/students/tab/0/journals\";\r\n\r\n// загрузка студентов из файла \r\nexport const VoStudentLoadFile : string = \"/vo/students/tab/0/loadlist\";\r\n\r\n// история активности студента\r\nexport const VoTrainingStudentHistoryRoute : string = \"/vo/students/tab/0/studenthistory/:id/:page\";\r\nexport const VoTrainingStudentHistoryPath : string = \"/vo/students/tab/0/studenthistory/\";\r\n\r\n// жкрнал 1 студента\r\nexport const VoStudentJournalRoute : string = \"/vo/students/tab/0/journal/:id/:page\";\r\nexport const VoStudentJournalPath : string = \"/vo/students/tab/0/journal\";\r\n\r\n// сертификаты 1 студента\r\nexport const VoStudentCertPath : string = \"/vo/students/tab/0/certs\";\r\nexport const VoStudentCertRoute : string = \"/vo/students/tab/0/certs/:id/:page\";\r\n\r\n\r\n// обучение \r\nexport const VoTrainingPath : string = \"/vo/training\";\r\nexport const VoTrainingRoute : string = \"/vo/training/:mode/:id?\";\r\n\r\nexport const VoTrainingShowListPath : string = \"/vo/training/show\";\r\nexport const VoTrainingShowListRoute : string = \"/vo/training/show/:page?\";\r\n\r\nexport const VoTrainingAddPath : string = \"/vo/training/create\";\r\n\r\nexport const VoTrainingOpenRoute : string = \"/vo/training/open/:id\";\r\nexport const VoTrainingOpenPath : string = \"/vo/training/open/\";\r\n\r\nexport const VoTrainingEditRoute : string = \"/vo/training/edit/:id\";\r\nexport const VoTrainingEditPath : string = \"/vo/training/edit/\";\r\n\r\nexport const VoTrainingCopyRoute : string = \"/vo/training/copy/:id\";\r\nexport const VoTrainingCopyPath : string = \"/vo/training/copy/\";\r\n\r\nexport const VoTrainingProgressRoute : string = \"/vo/training/progress/:id/:page\";\r\nexport const VoTrainingProgressPath : string = \"/vo/training/progress/\";\r\n\r\nexport const VoTrainingJournalRoute : string = \"/vo/training/journal/:id/:page\";\r\nexport const VoTrainingJournalPath : string = \"/vo/training/journal/\";\r\n\r\nexport const VoUserManualPath : string = \"/vo/usermanual\";\r\n\r\n// раздел роли студента \r\n//новости 1 компонет\r\nexport const VoStudentNewsTabs : string = \"/vo/student/news/tab\";\r\nexport const VoStudentNewsTabRoute : string = \"/vo/student/news/tab/:tabId/:mode/:page?\";\r\n\r\nexport const VoStudentSkrinNewsShowListPath : string = \"/vo/student/news/tab/0/show/\";\r\nexport const VoStudentSkrinNewsShowListRoute : string = \"/vo/student/news/tab/0/show/:page?\";\r\n\r\nexport const VoStudentSkrinNewsOpenItemPath : string = \"/vo/student/news/tab/0/open/\";\r\nexport const VoStudentSkrinNewsOpenItemRoute : string = \"/vo/student/news/tab/0/open/:id?\";\r\n\r\nexport const VoStudentSdlNewsShowListPath : string = \"/vo/student/news/tab/1/show/\";\r\nexport const VoStudentSdlNewsShowListRoute : string = \"/vo/student/news/tab/1/show/:page?\";\r\n\r\nexport const VoStudentSdlNewsOpenItemPath : string = \"/vo/student/news/tab/1/open/\";\r\nexport const VoStudentSdlNewsOpenItemRoute : string = \"/vo/student/news/tab/1/open/:id?\";\r\n\r\n\r\n// студенты обучение \r\n\r\nexport const VoStudentTrainingsPath : string = \"/vo/student/training\";\r\nexport const VoStudentTrainingsRoute : string = \"/vo/student/training/:mode/:id?\";\r\n\r\nexport const VoStudentTrainingShowPath : string = \"/vo/student/training/show\";\r\nexport const VoStudentTrainingShowRoute : string = \"/vo/student/training/show/:page?\";\r\n\r\nexport const VoStudentOpenTrainingPath : string = \"/vo/student/training/open/\";\r\nexport const VoStudentOpenTrainingRoute : string = \"/vo/student/training/open/:id\";\r\n\r\nexport const VoStudentOpenTrainingTabsRoute : string = \"/vo/student/training/open/:id/tabs/:tabId\";\r\n\r\n\r\nexport const VoStudentOpenTestPath : string = \"/vo/student/training/open/\";\r\nexport const VoStudentOpenTestRoute : string = \"/vo/student/training/open/:traingingId/tabs/3/testInfo/:id/:materialtype\";\r\n\r\n\r\nexport const VoStudentOpenQuestionPath : string = \"/vo/student/training/open/\";\r\nexport const VoStudentOpenQuestionRoute : string = \"/vo/student/training/open/:traingingId/tabs/3/openquestion/:execId\";\r\n\r\nexport const VoStudentOpenTestResultPath : string = \"/vo/student/training/open/\";\r\nexport const VoStudentOpenTestResultRoute : string = \"/vo/student/training/open/:traingingId/tabs/3/testresult/:execId\";\r\n\r\nexport const VoPricePath : string = \"/vo/price\";\r\n\r\nexport const ApiRoutePath : string = \"/soap\";\r\nexport const ApiRegistryPath : string = \"/soap/registry\";\r\nexport const KaFlRoutePath : string = \"/kafl\";\r\nexport const PodftFlRoutePath : string = \"/podftfl\";\r\n\r\n","import { Action, Reducer } from 'redux';\r\nimport { IKaFlAuthState } from './../Interface/KaFlTypes';\r\n\r\nexport interface KaFlAuthState {\r\n kaFlAuth: IKaFlAuthState\r\n}\r\n\r\nexport interface SetAuthAction { type: 'SET_KAFL_AUTH', auth: IKaFlAuthState }\r\nexport interface SetLogOutAction { type: 'SET_KAFL_AUTH_LOGOUT'}\r\n\r\nexport const SetKalAuth = (auth: IKaFlAuthState): SetAuthAction => (\r\n { type: 'SET_KAFL_AUTH', auth }\r\n)\r\n\r\nexport const SetKaFlLogOut = (): SetLogOutAction => (\r\n { type: 'SET_KAFL_AUTH_LOGOUT' }\r\n)\r\n\r\ntype KnownAction = SetAuthAction | SetLogOutAction;\r\n\r\nconst defaultState : IKaFlAuthState = { isAuth : false, login : null, error : null, accesses : null };\r\n\r\n\r\nexport const reducer: Reducer = (state: KaFlAuthState | undefined, incomingAction: Action): KaFlAuthState => {\r\n\r\n if (state === undefined) {\r\n return { kaFlAuth: defaultState };\r\n }\r\n const action = incomingAction as KnownAction;\r\n switch (action.type) {\r\n case 'SET_KAFL_AUTH': {\r\n return { kaFlAuth: action.auth };\r\n }\r\n case 'SET_KAFL_AUTH_LOGOUT' : {\r\n return { kaFlAuth: defaultState };\r\n }\r\n default:\r\n return state;\r\n }\r\n};"],"sourceRoot":""}