{"version":3,"sources":["locales/it/messages.js","locales/en/messages.js","i18n.tsx","components/Loading.tsx","utils.ts","components/Error.tsx","TerryClient.ts","Loadable.ts","hooks/useTriggerUpdate.ts","hooks/useLogin.ts","admin/PackContext.tsx","admin/AdminContext.tsx","admin/UploadPackView.tsx","LanguageSwitcher.tsx","components/LogoutButton.tsx","components/Markdown.tsx","admin/hooks/usePack.ts","admin/AdminLoginView.tsx","components/Modal.tsx","hooks/useAutoRefresh.ts","components/AbsoluteDate.tsx","types/admin.ts","admin/hooks/useLogs.ts","admin/AdminLogsView.tsx","components/RelativeDate.tsx","admin/hooks/useUsers.ts","components/Countdown.tsx","admin/AdminContestStatus.tsx","admin/AdminSummaryView.tsx","admin/AdminUsersView.tsx","admin/ContestExtraTimeView.tsx","admin/DownloadResultsView.tsx","admin/AdminView.tsx","admin/PackView.tsx","hooks/useCommunication.tsx","contest/hooks/useSubmissionList.tsx","contest/ContestContext.tsx","contest/hooks/useUpload.ts","contest/submission/ValidationAlert.tsx","contest/submission/submit/submissionLimits.ts","contest/submission/submit/FileView.tsx","contest/submission/submit/SourceSelector.tsx","contest/submission/ResultView.tsx","contest/submission/ValidationView.tsx","contest/submission/submit/OutputSelector.tsx","contest/submission/submit/Submit.tsx","contest/submission/submit/CreateSubmissionView.tsx","contest/ScoreView.tsx","contest/submission/FeedbackView.tsx","contest/submission/SubmissionReportView.tsx","contest/hooks/useSubmission.tsx","contest/submission/SubmissionListView.tsx","contest/task/TaskCommands.tsx","contest/task/TaskStatement.tsx","contest/task/LastSubmission.tsx","contest/task/TaskView.tsx","contest/hooks/useStatement.ts","contest/sidebar/NavbarItemView.tsx","contest/sidebar/ExtraSections.tsx","contest/sidebar/SidebarView.tsx","contest/help/HomeInfo.tsx","contest/ContestHome.tsx","contest/LoginView.tsx","contest/hooks/useDetectInternet.ts","components/Question.tsx","components/Announcement.tsx","contest/Communication.tsx","contest/help/Section.tsx","contest/ContestView.tsx","communication/NewAnnouncement.tsx","communication/Announcements.tsx","communication/Questions.tsx","communication/Home.tsx","communication/Login.tsx","communication/Navbar.tsx","communication/CommunicationView.tsx","index.tsx"],"names":["module","exports","messages","0","one","other","parsed","missing","invalid","require","supportedLanguages","lang","name","i18n","load","messagesIt","messagesEn","defaultLanguage","storedLanguage","window","localStorage","getItem","navigator","languages","language","substring","getDefaultLanguage","activate","LanguageContext","React","createContext","changeLanguage","TransProvider","children","setLanguage","useState","Provider","value","newLang","setItem","storeDefaultLanguage","document","getElementsByTagName","setAttribute","Loading","className","colorFromScore","score","maxScore","errorToString","error","response","message","data","startsWith","status","statusText","notifyError","toast","console","round","maxDigits","Number","isInteger","Error","factor","Math","messageStr","cause","boxed","defaultProps","undefined","client","apiBaseURI","process","REACT_APP_API_BASE_URI","filesBaseURI","REACT_APP_FILES_BASE_URI","statementsBaseURI","REACT_APP_STATEMENTS_BASE_URI","communicationsBaseURI","api","axios","create","baseURL","this","files","statements","communications","adminApi","token","path","options","FormData","Object","entries","forEach","key","set","post","LoadableState","Loadable","constructor","state","value_","error_","Ready","isLoading","isReady","isError","valueOr","def","useTriggerUpdate","count","setCount","useLogin","cookieName","cookies","setCookie","removeCookie","useCookies","login","useCallback","newToken","logout","PackContext","pack","loading","reloadPack","PackContextProvider","setPack","packUpdate","useEffect","then","of","catch","AdminContext","serverTimeSkew","actions","isLoggedIn","startContest","Promise","reject","resetContest","setExtraTime","uploadPack","AdminContextProvider","setServerTimeSkew","setStatus","statusUpdate","triggerStatusUpdate","useContext","serverDate","DateTime","fromHTTP","headers","date","skew","local","diff","startTime","when","toUTC","toISO","start_time","extraTime","userToken","extra_time","toString","file","append","useActions","context","useMemo","useToken","useStatus","useServerTime","minus","Duration","fromMillis","UploadPackView","inputRef","createRef","action","onSubmit","e","preventDefault","current","doUpload","htmlFor","type","accept","id","ref","required","LanguageSwitcher","languageContext","onChange","event","target","map","LogoutButton","onClick","icon","faSignOutAlt","Markdown","baseUri","source","transformUri","url","transformImageUri","transformLinkUri","plugins","RemarkMathPlugin","renderers","math","inlineMath","usePack","AdminLoginView","tokenRef","uploaded","description","placeholder","Modal","contentLabel","returnUrl","history","useHistory","isOpen","style","overlay","position","top","left","right","bottom","backgroundColor","overflowY","content","margin","maxWidth","border","background","overflow","WebkitOverflowScrolling","borderRadius","outline","padding","onRequestClose","push","ReactModal","setAppElement","useAutoRefresh","rate","update","trigger","timer","setInterval","clearInterval","AbsoluteDate","clock","locale","localDate","setLocale","toLocal","localMoment","moment","title","from","toLocaleString","DATETIME_SHORT_WITH_SECONDS","LogLevel","defaultLogsOptions","start_date","end_date","level","WARNING","useLogs","initialOptions","logs","setLogs","logsOptions","setLogsOptions","logsUpdate","triggerLogsUpdate","category","LOG_LEVELS","DEBUG","color","INFO","ERROR","AdminLogsView","setLevel","setCategory","filter","setFilter","setOptions","reloadLogs","serverTime","interval","newOptions","to","role","aria-label","aria-hidden","lvl","obj","join","colSpan","items","l","filterLog","log","toLowerCase","indexOf","length","i","fromISO","zone","renderLogs","faTimes","RelativeDate","useUsers","users","setUsers","usersUpdate","triggerUsersUpdate","Countdown","end","afterEnd","ended","as","toFormat","ContestNotStarted","defaultDate","fromJSDate","Date","minute","ceil","second","scheduledStartTime","setScheduledDate","dateValid","setDateValid","check","isValid","success","faTrash","toJSDate","minDate","disabled","faClock","faPlay","ContestStarted","endTime","usersWithExtraTime","maxExtraTime","running","runningForExtras","plus","seconds","ContestEnded","faDownload","AdminContestStatus","end_time","user","max","apply","AdminSummaryView","reloadUsers","deletable","confirm","UserExtraTimeView","minutesRef","minutes","parseInt","doSetExtraTime","defaultValue","faHourglassStart","AdminUsersView","ips","ip","first_date","item","j","surname","renderUserRow","ContestExtraTimeView","DownloadResultsView","zip","setZip","href","download","faTrophy","AdminView","render","PackViewInner","readStorage","sessionStorage","JSON","parse","defaultContext","storage","announcements","questions","errored","reload","askQuestion","sendAnswer","CommunicationContext","CommunicationContextProvider","fromStorage","setErrored","setAnnouncements","setQuestions","handle","fetchData","get","question","answer","useAnnouncements","useQuestions","useCommunicationNotifier","permission","Notification","requestPermission","oldDada","oldList","oldAnn","find","old","body","requireInteraction","newList","oldQ","notifyNewQuestions","stringify","saveStorage","SubmissionListContext","list","reloadTask","SubmissionListContextProvider","setList","toUpdate","setToUpdate","keys","taskName","useSubmissionList","ContestContext","contest","reloadContest","ContestContextProvider","doLogout","setContest","reloadContestHandle","useContest","UploadType","useUpload","inputId","upload","setUpload","Source","ValidationAlert","alert","severity","ALLOWED_EXTENSIONS","cpp","cc","cxx","c","cs","dart","go","html","java","js","kt","ts","php","pas","pp","py","py2","py3","sb3","srs","rb","rs","vb","FORBIDDEN_EXTENSIONS","exe","o","or","so","a","cbp","txt","xml","class","jar","pyo","pyc","pyd","tar","gz","tgz","xz","rar","pdf","vbproj","csproj","sln","suo","dev","lpi","lps","lrs","lrt","lpk","ppu","compiled","FORBIDDEN_MAGIC_NUMBERS","async","checkFile","nameParts","split","extension","size","includes","_","blob","buffer","slice","arrayBuffer","view","Uint8Array","magic","valid","charCodeAt","resolve","isExecutable","FileView","lastModified","filesize","standard","SourceSelector","setSource","sourceRef","setFile","uploadStatus","f","selectSourceFile","warn","validation","alerts","ResultView","cases","renderCase","renderCaseSummary","code","toUpperCase","ValidationView","output","getColor","OutputSelector","setOutput","outputRef","Output","selectOutputFile","Submit","task","submission","setSubmission","reloadSubmissionList","submit","faPaperPlane","CreateSubmissionView","userTask","current_input","ScoreView","fontSize","FeedbackView","correct","marginTop","max_score","feedback","SubmissionReportView","submissionId","useSubmission","SubmissionListView","submissions","renderSubmission","cut","s","lastIndexOf","inputBasename","input","outputBasename","sourceBasename","place","effect","data-tip","data-for","reverse","TaskCommands","setInput","currentInput","faUpload","faPlus","already","generateInput","renderGenerateInputButton","TaskStatement","taskBaseUri","statement_path","match","LastSubmission","TaskView","statement","setStatement","useStatement","params","NavbarItemView","tasks","t","activeClassName","ExtraSections","sections","section","SidebarView","contestL","has_started","startedContest","textAlign","marginRight","total_score","max_total_score","exact","HomeInfo","hasStarted","delay","floor","random","delta","timeout","setTimeout","MAX_DELAY","clearTimeout","ContestHome","LoginView","setIsLoading","autoComplete","DETECT_INTERNET_TEST_ENDPOINT","REACT_APP_DETECT_INTERNET_TEST_ENDPOINT","DETECT_INTERNET_TEST_CONTENT","REACT_APP_DETECT_INTERNET_TEST_CONTENT","Question","canAnswer","setAnswer","fromSQL","answerDate","useSendAnswer","creator","Announcement","Communication","useCommunicationErrored","useAskQuestion","textArea","setTextArea","announcement","trim","Section","page","ContestViewInternal","loadablePack","contestLoadable","detectInternet","res","fetch","endpoint","mode","text","useDetectInternet","loggedIn","component","renderTask","NewAnnouncement","setTitle","setContent","setSeverity","useReloadCommunication","publish","Announcements","ann","Questions","setPage","perPage","setPerPage","currentFilter","setCurrentFilter","location","useLocation","URLSearchParams","search","notAnswered","q","answered","numPages","pageEnd","pageStart","paged","Array","Home","Login","setNewToken","faLock","Navbar","useLoginBase","App","Blob","origin","endsWith","replace","addEventListener","reason","ReactDOM","Suspense","fallback","getElementById"],"mappings":"yGAAkBA,EAAOC,QAAQ,CAACC,SAAS,CAAC,eAAe,cAAc,kEAAkE,sFAAgF,MAAQ,QAAQ,4BAA4B,sCAAsC,cAAc,cAAc,cAAgB,UAAU,OAAS,WAAW,uBAAuB,wBAAwB,SAAW,eAAe,gBAAgB,cAAc,iBAAiB,kBAAkB,2BAA2B,gCAAgC,0BAA0B,6BAA6B,EAAI,IAAI,KAAK,KAAK,MAAM,MAAM,OAAS,UAAU,+IAA+I,2MAAwM,gCAAgC,6CAA6C,SAAW,YAAY,kBAAkB,mBAAmB,gBAAgB,kBAAkB,gBAAgB,oBAAoB,MAAQ,UAAU,MAAQ,SAAS,qBAAqB,sBAAsB,cAAgB,gBAAgB,uBAAuB,2BAA2B,uBAAuB,yBAAyB,sBAAsB,wBAAwB,yBAAyB,2BAA2B,kBAAkB,oBAAoB,gBAAgB,iBAAiB,qBAAqB,qBAAqB,QAAU,YAAY,mBAAmB,yBAAsB,gCAAgC,mCAAgC,qBAAqB,2BAAwB,+BAA+B,4BAA4B,iBAAiB,mBAAmB,YAAc,eAAe,wBAAwB,0BAA0B,eAAe,iBAAiB,cAAc,kBAAkB,cAAc,gBAAgB,KAAO,OAAO,KAAO,OAAO,QAAU,WAAW,qBAAqB,uBAAuB,kBAAkB,sBAAsB,SAAW,WAAW,2BAA2B,iCAAiC,iBAAiB,gBAAgB,mBAAmB,oBAAoB,MAAQ,SAAS,iBAAiB,kBAAkB,aAAa,mBAAmB,kCAAkC,2CAA2C,+CAA+C,0DAA0D,KAAO,OAAO,QAAQ,QAAQ,2BAA2B,8BAA8B,8BAA8B,kCAAkC,mCAAmC,0CAA0C,GAAK,KAAK,GAAK,KAAK,cAAc,iBAAiB,aAAa,gBAAgB,sBAAsB,yBAAyB,KAAO,OAAO,WAAa,aAAa,oBAAoB,oBAAoB,OAAS,SAAS,mBAAmB,wBAAwB,eAAe,mBAAmB,MAAQ,UAAU,aAAa,iBAAiB,SAAS,SAAS,MAAQ,SAAS,OAAS,SAAS,KAAO,OAAO,QAAU,YAAY,iBAAiB,mBAAmB,KAAO,OAAO,mCAAmC,8CAA8C,mBAAmB,iBAAiB,wBAAwB,CAAC,mBAAmB,CAAC,MAAM,wBAAwB,0BAA0B,oBAAoB,2BAA2B,kBAAkB,0BAA0B,mBAAmB,wBAAwB,eAAe,kBAAkB,eAAe,iBAAiB,oBAAoB,yBAAyB,qFAAqF,gHAAgH,cAAc,iBAAiB,mBAAmB,mBAAmB,iBAAiB,oBAAoB,WAAW,WAAW,IAAM,MAAM,OAAS,SAAS,eAAe,mBAAmB,oCAAoC,oCAAoC,QAAU,YAAY,iBAAiB,gBAAgB,gBAAgB,iBAAiB,QAAU,WAAW,OAAS,SAAS,qBAAqB,kBAAkB,UAAY,UAAU,8BAA8B,oBAAoB,MAAQ,QAAQ,iBAAiB,kBAAkB,sCAAsC,0CAA0C,gBAAgB,iBAAiB,oBAAoB,uBAAuB,gBAAgB,iBAAiB,KAAO,OAAO,KAAO,OAAO,+DAA+D,8EAA2E,MAAQ,YAAY,mBAAmB,qBAAqB,kCAAkC,sCAAsC,KAAO,QAAQ,IAAM,UAAU,iBAAiB,2BAA2B,SAAW,cAAW,+CAA+C,CAAC,sCAAsC,CAAC,UAAU,QAAQ,QAAQ,aAAa,cAAc,WAAW,mBAAmB,wBAAwB,iBAAiB,cAAc,MAAQ,QAAQ,kCAAkC,gCAAgC,gCAAgC,uBAAuB,WAAa,iBAAiB,iBAAiB,qBAAqB,uBAAuB,6BAA6B,OAAS,QAAQ,kBAAkB,kBAAkB,QAAU,UAAU,gBAAgB,oBAAoB,iBAAiB,uBAAuB,MAAQ,WAAW,uBAAuB,uBAAuB,YAAY,gBAAgB,kDAAkD,uDAAoD,wDAAwD,2DAAwD,8DAA8D,oEAAiE,mCAAmC,oCAAiC,uGAAuG,4GAAsG,0BAA0B,yBAAsB,uIAAuI,uJAAiJ,0CAA0C,2CAAwC,0BAA0B,sBAAsB,sCAAsC,iDAAiD,iHAAiH,sGAAsG,wHAAwH,2HAAqH,4EAA4E,CAAC,mDAAgD,CAAC,QAAQ,YAAY,CAAC,mBAAmB,WAAW,mGAAmG,0GAAuG,uEAAuE,CAAC,uCAAuC,CAAC,uBAAuB,eAAe,+XAA+X,saAAoZ,MAAQ,SAAS,MAAQ,QAAQ,WAAa,aAAa,4BAA4B,CAAC,wBAAwB,CAAC,MAAM,OAAS,SAAS,kBAAkB,mBAAmB,cAAc,QAAQ,MAAQ,SAAS,wBAAwB,4BAA4B,YAAc,cAAc,mBAAmB,mBAAmB,WAAW,WAAW,mKAAmK,yLAAyL,6TAA6T,qTAAqT,8BAA8B,mCAAmC,8CAA8C,oDAAoD,qPAAqP,0RAA0R,6BAA6B,gCAAgC,aAAa,YAAY,QAAU,WAAW,iBAAiB,2BAA2B,WAAW,aAAa,aAAa,gBAAgB,yBAAyB,wBAAwB,uBAAuB,0BAA0B,eAAe,WAAW,MAAQ,SAAS,yIAAyI,CAAC,CAAC,IAAI,SAAS,CAACC,EAAE,gCAA6BC,IAAI,CAAC,gCAA6B,IAAI,WAAWC,MAAM,CAAC,gCAA6B,IAAI,cAAc,uGAAuG,CAAC,CAAC,IAAI,SAAS,CAACF,EAAE,uCAAuCC,IAAI,CAAC,IAAI,iCAAiCC,MAAM,CAAC,IAAI,uCAAuC,kGAAkG,CAAC,CAAC,IAAI,SAAS,CAACD,IAAI,CAAC,UAAO,IAAI,0CAA0CC,MAAM,CAAC,UAAO,IAAI,6CAA6C,6EAA6E,CAAC,CAAC,IAAI,SAAS,CAACC,OAAO,UAAUC,QAAQ,WAAWC,QAAQ,aAAaH,MAAM,U,kBCA5yXL,EAAOC,QAAQ,CAACC,SAAS,CAAC,eAAe,eAAe,kEAAkE,mEAAmE,MAAQ,QAAQ,4BAA4B,4BAA4B,cAAc,cAAc,cAAgB,gBAAgB,OAAS,SAAS,uBAAuB,uBAAuB,SAAW,WAAW,gBAAgB,gBAAgB,iBAAiB,iBAAiB,2BAA2B,2BAA2B,0BAA0B,0BAA0B,EAAI,IAAI,KAAK,KAAK,MAAM,MAAM,OAAS,SAAS,+IAA+I,+IAA+I,gCAAgC,gCAAgC,SAAW,WAAW,kBAAkB,kBAAkB,gBAAgB,gBAAgB,gBAAgB,gBAAgB,MAAQ,QAAQ,MAAQ,QAAQ,qBAAqB,qBAAqB,cAAgB,gBAAgB,uBAAuB,uBAAuB,uBAAuB,uBAAuB,sBAAsB,sBAAsB,yBAAyB,yBAAyB,kBAAkB,kBAAkB,gBAAgB,gBAAgB,qBAAqB,qBAAqB,QAAU,UAAU,mBAAmB,mBAAmB,gCAAgC,gCAAgC,qBAAqB,qBAAqB,+BAA+B,+BAA+B,iBAAiB,iBAAiB,YAAc,cAAc,wBAAwB,wBAAwB,eAAe,eAAe,cAAc,cAAc,cAAc,cAAc,KAAO,OAAO,KAAO,OAAO,QAAU,UAAU,qBAAqB,qBAAqB,kBAAkB,kBAAkB,SAAW,WAAW,2BAA2B,2BAA2B,iBAAiB,iBAAiB,mBAAmB,mBAAmB,MAAQ,QAAQ,iBAAiB,iBAAiB,aAAa,aAAa,kCAAkC,kCAAkC,+CAA+C,+CAA+C,KAAO,OAAO,QAAQ,QAAQ,2BAA2B,2BAA2B,8BAA8B,8BAA8B,mCAAmC,mCAAmC,GAAK,KAAK,GAAK,KAAK,cAAc,cAAc,aAAa,aAAa,sBAAsB,sBAAsB,KAAO,OAAO,WAAa,aAAa,oBAAoB,oBAAoB,OAAS,SAAS,mBAAmB,mBAAmB,eAAe,eAAe,MAAQ,QAAQ,aAAa,aAAa,SAAS,SAAS,MAAQ,QAAQ,OAAS,SAAS,KAAO,OAAO,QAAU,UAAU,iBAAiB,iBAAiB,KAAO,OAAO,mCAAmC,mCAAmC,mBAAmB,mBAAmB,wBAAwB,CAAC,qBAAqB,CAAC,MAAM,wBAAwB,wBAAwB,oBAAoB,oBAAoB,kBAAkB,kBAAkB,mBAAmB,mBAAmB,eAAe,eAAe,eAAe,eAAe,oBAAoB,oBAAoB,qFAAqF,qFAAqF,cAAc,cAAc,mBAAmB,mBAAmB,iBAAiB,iBAAiB,WAAW,WAAW,IAAM,MAAM,OAAS,SAAS,eAAe,eAAe,oCAAoC,oCAAoC,QAAU,UAAU,iBAAiB,iBAAiB,gBAAgB,gBAAgB,QAAU,UAAU,OAAS,SAAS,qBAAqB,qBAAqB,UAAY,YAAY,8BAA8B,8BAA8B,MAAQ,QAAQ,iBAAiB,iBAAiB,sCAAsC,sCAAsC,gBAAgB,gBAAgB,oBAAoB,oBAAoB,gBAAgB,gBAAgB,KAAO,OAAO,KAAO,OAAO,+DAA+D,gEAAgE,MAAQ,QAAQ,mBAAmB,mBAAmB,kCAAkC,kCAAkC,KAAO,OAAO,IAAM,MAAM,iBAAiB,iBAAiB,SAAW,WAAW,+CAA+C,CAAC,oCAAoC,CAAC,UAAU,QAAQ,QAAQ,QAAQ,cAAc,cAAc,mBAAmB,mBAAmB,iBAAiB,iBAAiB,MAAQ,QAAQ,kCAAkC,kCAAkC,gCAAgC,gCAAgC,WAAa,aAAa,iBAAiB,iBAAiB,uBAAuB,uBAAuB,OAAS,SAAS,kBAAkB,kBAAkB,QAAU,UAAU,gBAAgB,gBAAgB,iBAAiB,iBAAiB,MAAQ,QAAQ,uBAAuB,uBAAuB,YAAY,YAAY,kDAAkD,kDAAkD,wDAAwD,wDAAwD,8DAA8D,8DAA8D,mCAAmC,mCAAmC,uGAAuG,uGAAuG,0BAA0B,0BAA0B,uIAAuI,uIAAuI,0CAA0C,0CAA0C,0BAA0B,0BAA0B,sCAAsC,sCAAsC,iHAAiH,iHAAiH,wHAAwH,wHAAwH,4EAA4E,CAAC,qCAAqC,CAAC,QAAQ,YAAY,CAAC,mBAAmB,WAAW,mGAAmG,mGAAmG,uEAAuE,CAAC,iCAAiC,CAAC,uBAAuB,qBAAqB,+XAA+X,+XAA+X,MAAQ,QAAQ,MAAQ,QAAQ,WAAa,aAAa,4BAA4B,CAAC,yBAAyB,CAAC,MAAM,OAAS,SAAS,kBAAkB,kBAAkB,cAAc,cAAc,MAAQ,QAAQ,wBAAwB,wBAAwB,YAAc,cAAc,mBAAmB,mBAAmB,WAAW,WAAW,mKAAmK,qKAAqK,6TAA6T,gUAAgU,8BAA8B,8BAA8B,8CAA8C,8CAA8C,qPAAqP,qPAAqP,6BAA6B,6BAA6B,aAAa,aAAa,QAAU,UAAU,iBAAiB,iBAAiB,WAAW,WAAW,aAAa,aAAa,yBAAyB,yBAAyB,uBAAuB,uBAAuB,eAAe,eAAe,MAAQ,QAAQ,yIAAyI,CAAC,CAAC,IAAI,SAAS,CAACC,EAAE,oBAAoBC,IAAI,CAAC,oCAAoC,IAAI,WAAWC,MAAM,CAAC,oCAAoC,IAAI,eAAe,uGAAuG,CAAC,CAAC,IAAI,SAAS,CAACF,EAAE,yBAAyBC,IAAI,CAAC,IAAI,wBAAwBC,MAAM,CAAC,IAAI,6BAA6B,kGAAkG,CAAC,CAAC,IAAI,SAAS,CAACD,IAAI,CAAC,QAAQ,IAAI,+BAA+BC,MAAM,CAAC,QAAQ,IAAI,mCAAmC,6EAA6E,CAAC,CAAC,IAAI,SAAS,CAACC,OAAO,SAASC,QAAQ,UAAUC,QAAQ,UAAUH,MAAM,U,sdCQnzWI,EAAQ,KAED,MAAMC,EAAqB,CAChC,CAAEC,KAAM,KAAMC,KAAM,WACpB,CAAED,KAAM,KAAMC,KAAM,aAGtBC,IAAKC,KAAK,KAAMC,YAChBF,IAAKC,KAAK,KAAME,YAEhB,MAcaC,EAZc,MACzB,MAAMC,EAAiBC,OAAOC,aAAaC,QAHjB,oBAI1B,OAAIH,IAEFI,UAAUC,UAAYD,UAAUC,UAAU,GAAKD,UAAUE,UACzDC,UAAU,EAAG,IAOcC,GAC/Bb,IAAKc,SAASV,GAOP,MAAMW,EAAkBC,IAAMC,cAAc,CACjDnB,KAAMM,EACNc,eAAgB,SAGX,SAASC,EAAT,GAA+D,IAAxC,SAAEC,GAAqC,EACnE,MAAOtB,EAAMuB,GAAeC,mBAASlB,GAUrC,OACE,kBAAC,IAAD,CAAcJ,KAAMA,KAClB,kBAACe,EAAgBQ,SAAjB,CAA0BC,MAAO,CAAE1B,OAAMoB,eAVrBO,IApBIA,KAC5BnB,OAAOC,aAAamB,QAXM,mBAWuBD,IAoB/CE,CAAqBF,GACrBJ,EAAYI,GACZzB,IAAKc,SAASW,GAEdG,SAASC,qBAAqB,QAAQ,GAAGC,aAAa,OAAQL,MAMzDL,I,OCtDF,SAASW,IACd,OACE,yBAAKC,UAAU,mBACb,yBAAKA,UAAU,qBACf,yBAAKA,UAAU,qBACf,yBAAKA,UAAU,qBACf,yBAAKA,UAAU,sB,oBCLd,SAASC,EAAeC,EAAeC,GAC5C,OAAID,IAAUC,EAAiB,UACjB,IAAVD,EAAoB,SACjB,UAGF,SAASE,EAAcC,GAC5B,IAAIA,EAAMC,SAgBR,OAAOD,EAAME,QAfb,GAAIF,EAAMC,SAASE,KAAM,CACvB,GAAmC,kBAAxBH,EAAMC,SAASE,KACxB,OAAIH,EAAMC,SAASE,KAAKC,WAAW,UAE3B,GAAN,OAAUJ,EAAMC,SAASI,OAAzB,YAAmCL,EAAMC,SAASK,YAG7CN,EAAMC,SAASE,KACtB,GAAI,YAAaH,EAAMC,SAASE,KAEhC,OAAOH,EAAMC,SAASE,KAAKD,QAQjC,OAAO,KAGF,SAASK,EAAYP,GAC1B,MAAME,EAAUH,EAAcC,GAC1BE,EACFM,IAAMR,MAAME,GAEZO,QAAQT,MAAM,mCAAoCA,GAI/C,SAASU,EAAMvB,GAA+B,IAAhBwB,EAAe,uDAAH,EAC/C,IAAKC,OAAOC,UAAUF,IAAcA,EAAY,EAC9C,MAAM,IAAIG,MAAM,4BAElB,MAAMC,EAAS,IAAMJ,EACrB,OAAOK,KAAKN,MAAMvB,EAAQ4B,GAAUA,ECtC/B,SAASD,EAAT,GAA6D,IAC9DG,GADkBC,MAAOhB,EAAT,MAAkBiB,EAAlB,UAAyBxB,GAAoB,EAG/DsB,EADqB,kBAAZf,EACIA,EACe,kBAAZA,EACHH,EAAcG,GAEd,KAGf,MAAMF,EACJ,oCACE,gCACE,qCAEDiB,GACC,wCAEG,IACAA,IAMT,OAAIE,EAEA,yBAAKxB,UAAS,6BAAwBA,IACnCK,GAIA,0BAAML,UAAWA,GAAYK,GAGtCc,EAAMM,aAAe,CACnBF,WAAOG,EACPF,OAAO,EACPxB,UAAW,I,8BCnBN,MAAM2B,EAAS,IA5BtB,MAAc,cAAD,KACXC,WAAaC,wJAAYC,wBAA0B,QADxC,KAGXC,aAAeF,wJAAYG,0BAA4B,UAH5C,KAKXC,kBAAoBJ,wJAAYK,+BAAiC,UALtD,KAOXC,sBAAyE,KAP9D,KASXC,IAAMC,IAAMC,OAAO,CAAEC,QAASC,KAAKZ,aATxB,KAWXa,MAAQJ,IAAMC,OAAO,CAAEC,QAASC,KAAKT,eAX1B,KAaXW,WAAaL,IAAMC,OAAO,CAAEC,QAASC,KAAKP,oBAb/B,KAeXU,eAAiBH,KAAKL,sBAAwBE,IAAMC,OAAO,CAAEC,QAASC,KAAKL,wBAA2B,KAEtGS,SAASC,EAAeC,GAAoE,IAAtDC,EAAqD,uDAAJ,GACrF,MAAMvC,EAAO,IAAIwC,SAMjB,OALAC,OAAOC,QAAQH,GAASI,QAAQ,IAAmB,IAAjBC,EAAK5D,GAAW,EAC5CA,GAAOgB,EAAK6C,IAAID,EAAK5D,KAE3BgB,EAAK6C,IAAI,cAAeR,GAEjBL,KAAKJ,IAAIkB,KAAT,iBAAwBR,GAAQtC,KCxBpC,IAAK+C,G,SAAAA,O,qBAAAA,I,iBAAAA,I,kBAAAA,M,KAML,MAAMC,EAOHC,YAAYjE,EAAWa,GAAY,KANnCqD,MAAQH,EAAcxD,QAMY,KAJlC4D,YAIkC,OAFlCC,YAEkC,OAC1BlC,IAAVlC,GACFgD,KAAKkB,MAAQH,EAAcM,MAC3BrB,KAAKmB,OAASnE,QACKkC,IAAVrB,GACTmC,KAAKkB,MAAQH,EAAcpC,MAC3BqB,KAAKoB,OAASvD,GAEdmC,KAAKkB,MAAQH,EAAcxD,QAIjB,iBACZ,OAAO,IAAIyD,EAGJ,UAAShE,GAChB,OAAO,IAAIgE,EAAiBhE,GAGlB,aAASa,GACnB,OAAO,IAAImD,OAAiB9B,EAAWrB,GAGzCyD,YACE,OAAOtB,KAAKkB,QAAUH,EAAcxD,QAGtCgE,UACE,OAAOvB,KAAKkB,QAAUH,EAAcM,MAGtCG,UACE,OAAOxB,KAAKkB,QAAUH,EAAcpC,MAGtC3B,QACE,QAAoBkC,IAAhBc,KAAKmB,OAAsB,MAAM,IAAIxC,MAAJ,yCAA4CqB,KAAKkB,QACtF,OAAOlB,KAAKmB,OAGdtD,QACE,QAAoBqB,IAAhBc,KAAKoB,OAAsB,MAAM,IAAIzC,MAAJ,yCAA4CqB,KAAKkB,QACtF,OAAOlB,KAAKoB,OAGdK,QAAYC,GACV,YAAoBxC,IAAhBc,KAAKmB,OAA6BO,EAC/B1B,KAAKmB,QClDT,SAASQ,IACd,MAAOC,EAAOC,GAAY/E,mBAAS,GACnC,MAAO,CAAC8E,EAAO,IAAMC,EAASD,EAAQ,I,aCZjC,SAASE,EAASC,GACvB,MAAOC,EAASC,EAAWC,GAAgBC,YAAW,CAACJ,IACjDK,EAAQC,sBACXC,IACCL,EAAUF,EAAYO,EAAU,CAAEhC,KAAM,OAE1C,CAACyB,EAAYE,IAETM,EAASF,sBACb,KACEH,EAAaH,EAAY,CAAEzB,KAAM,OAEnC,CAACyB,EAAYG,IAGf,MAAO,CAACF,EAAQD,IAAe,KAAMK,EAAOG,GCJvC,MAAMC,EAAc/F,wBAA+B,CACxDgG,KAAMzB,EAAS0B,UACfC,WAAY,SAGP,SAASC,EAAT,GAAqE,IAAxC,SAAEhG,GAAqC,EACzE,MAAO6F,EAAMI,GAAW/F,mBAAyBkE,EAAS0B,YACnDI,EAAYH,GAAchB,IAcjC,OAZAoB,oBAAU,KACR5D,EACGS,IAAI,sBACJoD,KAAMlF,IACL+E,EAAQ7B,EAASiC,GAAGnF,EAASE,SAE9BkF,MAAOpF,IACNM,EAAYN,GACZ+E,EAAQ7B,EAASnD,MAAMC,OAE1B,CAACgF,IAEG,kBAACN,EAAYzF,SAAb,CAAsBC,MAAO,CAAEyF,OAAME,eAAe/F,GCCtD,MAAMuG,EAAe3G,IAAMC,cAAgC,CAChEuB,KAAM,CACJqC,MAAO,KACP+C,eAAgBpC,EAAS0B,UACzBxE,OAAQ8C,EAAS0B,WAEnBW,QAAS,CACPC,WAAY,KAAM,EAClBlB,MAAO,OACPG,OAAQ,OACRgB,aAAc,IAAMC,QAAQC,SAC5BC,aAAc,IAAMF,QAAQC,SAC5BE,aAAc,IAAMH,QAAQC,SAC5BG,WAAY,UAQT,SAASC,EAAT,GAAgE,IAAlC,SAAEjH,GAA+B,EACpE,MAEOyD,EAAO+B,EAAOG,GAAUT,EAFZ,eAGZsB,EAAgBU,GAAqBhH,mBAA6BkE,EAAS0B,YAC3ExE,EAAQ6F,GAAajH,mBAA+BkE,EAAS0B,YAC7DsB,EAAcC,GAAuBtC,KACtC,WAAEgB,GAAeuB,qBAAW1B,GA4DlCO,oBAAU,KACR,IAAK1C,EAGH,OAFAyD,EAAkB9C,EAAS0B,gBAC3BqB,EAAU/C,EAAS0B,WAGrBvD,EACGiB,SAASC,EAAO,WAChB2C,KAAMlF,IACL,MAAMqG,EAAaC,WAASC,SAASvG,EAASwG,QAAQC,MAChDC,EAAOJ,WAASK,QAAQC,KAAKP,GACnCL,EAAkB9C,EAASiC,GAAGuB,IAC9BT,EAAU/C,EAASiC,GAAGnF,EAASE,SAEhCkF,MAAOpF,IACNM,EAAYN,GACZyE,IACAuB,EAAkB9C,EAAS0B,WAC3BqB,EAAU/C,EAAS0B,cAEtB,CAACrC,EAAO2D,EAAczB,IAGzB,OACE,kBAACY,EAAapG,SAAd,CACEC,MAAO,CACLgB,KAAM,CACJqC,QACA+C,iBACAlF,UAEFmF,QAAS,CACPC,WAVW,KAAOpF,EAAOoD,YAWzBc,QACAG,SACAgB,aA7FcoB,IACpB,IAAKtE,EAAO,MAAM,IAAI1B,MAAM,yBAE5B,MAAMiG,EAA4B,kBAAdD,EAAyBA,EAAYA,EAAUE,QAAQC,QAC3E,OAAO3F,EACJiB,SAASC,EAAO,SAAU,CAAE0E,WAAYH,IACxC5B,KAAK,KACJiB,MAEDf,MAAOpF,IAEN,MADAM,EAAYN,GACNA,KAmFJ4F,aAhFa,KACnB,IAAKrD,EAAO,MAAM,IAAI1B,MAAM,yBAC5B,OAAOQ,EACJiB,SAASC,EAAO,iBAChB2C,KAAK,KACJT,IACAI,MAEDO,MAAOpF,IACNM,EAAYN,MAwEV6F,aArEa,CAACqB,EAAmBC,KACvC,IAAK5E,EAAO,MAAM,IAAI1B,MAAM,yBAC5B,MAAM4B,EAAU,CACd2E,WAAYF,EAAUG,WACtB9E,MAAO4E,GAGT,YADsB/F,IAAlBqB,EAAQF,cAA4BE,EAAQF,MACzClB,EACJiB,SAASC,EAAO,kBAAmBE,GACnCyC,KAAK,KACJiB,MAEDf,MAAOpF,IACNM,EAAYN,MAyDV8F,WAtDYwB,IAClB,MAAMpH,EAAO,IAAIwC,SAIjB,OAFAxC,EAAKqH,OAAO,OAAQD,GAEbjG,EAAOS,IACXkB,KAAK,qBAAsB9C,GAC3BgF,KAAK,KACJL,MAEDO,MAAOpF,IACNM,EAAYN,SA+CblB,GAKA,SAAS0I,IACd,MAAMC,EAAUrB,qBAAWf,GAC3B,OAAOqC,kBAAQ,IAAMD,EAAQlC,QAAS,CAACkC,EAAQlC,UAG1C,SAASoC,IACd,MAAMF,EAAUrB,qBAAWf,GAC3B,OAAOqC,kBAAQ,IAAMD,EAAQvH,KAAKqC,MAAO,CAACkF,EAAQvH,KAAKqC,QAGlD,SAASqF,IACd,MAAMH,EAAUrB,qBAAWf,GAC3B,OAAOqC,kBAAQ,IAAMD,EAAQvH,KAAKE,OAAQ,CAACqH,EAAQvH,KAAKE,SAGnD,SAASyH,IACd,MAAMJ,EAAUrB,qBAAWf,GAE3B,OAAOqC,kBAAQ,IAAM,IAAMpB,WAASK,QAAQmB,MAAML,EAAQvH,KAAKoF,eAAe3B,QAAQoE,WAASC,WAAW,KAAM,CAC9GP,EAAQvH,KAAKoF,iBC1LV,SAAS2C,IACd,MAAMC,EAAWC,uBACX,WAAErC,GAAe0B,IAQvB,OACE,yBAAK9H,UAAU,6BACb,wBAAIA,UAAU,yBACZ,qCAEF,6BACA,wBAAIA,UAAU,eACZ,iEAEF,0BACE0I,OAAO,GACPC,SAAWC,IACTA,EAAEC,iBAlBO,MAAO,IAAD,IACrB,MAAMjB,EAAI,UAAGY,EAASM,eAAZ,iBAAG,EAAkBrG,aAArB,aAAG,EAA0B,GAClCmF,GACLxB,EAAWwB,IAgBLmB,KAGF,yBAAK/I,UAAU,cACb,2BAAOgJ,QAAQ,OAAOhJ,UAAU,WAC9B,oCAEF,2BAAOiJ,KAAK,OAAOC,OAAO,OAAOnL,KAAK,OAAOoL,GAAG,OAAOC,IAAKZ,EAAUxI,UAAU,eAAeqJ,UAAQ,KAEzG,2BAAOJ,KAAK,SAASjJ,UAAU,iBAAiBR,MAAO,oBCjCxD,SAAS8J,IACd,MAAMC,EAAkB7C,qBAAW3H,GAOnC,OACE,4BACEiB,UAAU,sDACVwJ,SARoBC,IACtB,MAAM3L,EAAO2L,EAAMC,OAAOlK,MAC1B+J,EAAgBrK,eAAepB,IAO7B0B,MAAO+J,EAAgBzL,MAEtBD,EAAmB8L,IAAI,QAAC,KAAE7L,EAAF,KAAQC,GAAT,SACtB,4BAAQqF,IAAKtF,EAAM0B,MAAO1B,GACvBC,M,oBCVJ,SAAS6L,EAAT,GAA2C,IAArB,QAAEC,GAAkB,EAC/C,OACE,4BACE7J,UAAU,uBACViJ,KAAK,SACLY,QAAUjB,IACRA,EAAEC,iBACFgB,MAGF,kBAAC,IAAD,CAAiBC,KAAMC,MACtB,IACD,sC,wDCTC,SAASC,EAAT,GAA+C,IAA7B,QAAEC,EAAF,OAAWC,GAAiB,EACnD,MAAMC,EAAgBC,GACfH,EACEA,EAAUG,EADIA,EAIvB,OACE,kBAAC,IAAD,CACEF,OAAQA,EACRG,kBAAmBF,EACnBG,iBAAkBH,EAClBI,QAAS,CAACC,KACVC,UAAW,CACTC,KAAM,QAAC,MAAElL,GAAH,SAAkC,kBAAC,YAAD,KAAYA,IACpDmL,WAAY,QAAC,MAAEnL,GAAH,SAAkC,kBAAC,aAAD,KAAaA,OCvB5D,SAASoL,IACd,MAAM7C,EAAUrB,qBAAW1B,GAC3B,OAAOgD,kBAAQ,IAAMD,EAAQ9C,KAAM,CAAC8C,EAAQ9C,OCCvC,SAAS4F,KACd,MAAMC,EAAW9L,IAAMyJ,aACjB,MAAE7D,GAAUkD,IACZ7C,EAAO2F,IAAUpL,QAQvB,IAAKyF,EAAK8F,SACR,MAAM,IAAI5J,MAAM,mDAGlB,OACE,yBAAKnB,UAAU,6BACb,wBAAIA,UAAU,yBAAyBiF,EAAKlH,MAC5C,kBAACiM,EAAD,CAAUE,OAAQjF,EAAK+F,cACvB,6BACA,wBAAIhL,UAAU,eACZ,sCAEF,0BACE0I,OAAO,GACPC,SAAWC,IACTA,EAAEC,iBApBJiC,EAAShC,SACXlE,EAAMkG,EAAShC,QAAQtJ,SAuBrB,yBAAKQ,UAAU,cACb,2BAAOgJ,QAAQ,QAAQhJ,UAAU,WAC/B,2CAEF,2BACEjC,KAAK,QACLoL,GAAG,QACHC,IAAK0B,EACL9K,UAAU,2BACVqJ,UAAQ,EACR4B,YAAa,wBAGjB,2BAAOhC,KAAK,SAASjJ,UAAU,iBAAiBR,MAAO,mBFjB/DwK,EAASvI,aAAe,CACtBwI,aAASvI,G,0CGpBJ,SAASwJ,GAAT,GAA8D,IAA/C,aAAEC,EAAF,UAAgBC,EAAhB,SAA2BhM,GAAmB,EAClE,MAAMiM,EAAUC,cAEhB,OACE,kBAAC,KAAD,CACEC,QAAM,EACNJ,aAAcA,EACdK,MAAO,CACLC,QAAS,CACPC,SAAU,QACVC,IAAK,EACLC,KAAM,EACNC,MAAO,EACPC,OAAQ,EACRC,gBAAiB,yBACjBC,UAAW,QAEbC,QAAS,CACPP,SAAU,WACVC,IAAK,UACLC,KAAM,UACNC,MAAO,UACPC,OAAQ,UACRI,OAAQ,YACRC,SAAU,MACVC,OAAQ,iBACRC,WAAY,OACZC,SAAU,OACVC,wBAAyB,QACzBC,aAAc,MACdC,QAAS,OACTC,QAAS,QAGbC,eAAgB,IAAMtB,EAAQuB,KAAKxB,IAElChM,GAKPyN,KAAWC,cAAc,S,gCCnDlB,SAASC,GAAeC,GAC7B,MAAOC,EAAQC,GAAW/I,IAC1BoB,oBAAU,KACR,MAAM4H,EAAQC,YAAY,IAAMF,IAAWF,GAC3C,MAAO,IAAMK,cAAcF,IAC1B,CAACH,EAAME,EAASD,ICGd,SAASK,GAAT,GAA2D,IAArC,KAAEvG,EAAF,MAAQwG,GAA4B,EAC/DR,GAAe,KACf,MAAMjP,EAAOE,IAAKwP,QAAU,KACtBC,EAAY1G,EAAK2G,UAAU5P,GAAM6P,UACjCC,EAAcC,KAAO9G,EAAKO,SAASkG,OAAO1P,GAChD,OACE,0BAAMgQ,MAAOF,EAAYG,KAAKF,KAAON,IAAQjG,WAC1CmG,EAAUO,eAAepH,WAASqH,8BChBlC,IAAKC,I,SAAAA,K,cAAAA,E,YAAAA,E,kBAAAA,E,eAAAA,Q,KCOL,MAAMC,GAAkC,CAC7CC,WAAY,2BACZC,SAAU,2BACVC,MAAOJ,GAASK,SAKX,SAASC,GAAQC,GACtB,MAAM5L,EAAQoF,KACPyG,EAAMC,GAAWrP,mBAA6BkE,EAAS0B,YACvD0J,EAAaC,GAAkBvP,mBAAsBmP,GAAkBN,KACvEW,EAAYC,GAAqB5K,IAExCoB,oBAAU,KACR,IAAK1C,EAAO,OACZ,MAAME,EAAU,IAAK6L,GAChB7L,EAAQiM,iBAAiBjM,EAAQiM,SACtCrN,EACGiB,SAASC,EAAO,OAAQE,GACxByC,KAAMlF,IACLqO,EAAQnL,EAASiC,GAAGnF,EAASE,SAE9BkF,MAAOpF,IACNM,EAAYN,GACZqO,EAAQnL,EAASnD,MAAMC,OAE1B,CAACuC,EAAOiM,EAAYF,IAOvB,MAAO,CAACF,EALY3L,IACdA,GAAS8L,EAAe9L,GAC5BgM,MCzBJ,MAAME,GAAyD,CAC7DC,MAAO,CACLC,MAAO,aAETC,KAAM,CACJD,MAAO,QAETZ,QAAS,CACPY,MAAO,WAETE,MAAO,CACLF,MAAO,WAIJ,SAASG,KACd,MAAOhB,EAAOiB,GAAYjQ,mBAAS4O,GAASkB,OACrCJ,EAAUQ,GAAelQ,mBAAS,KAClCmQ,EAAQC,GAAapQ,mBAAS,KAC9ByD,EAAS4M,GAAcrQ,mBAAsB,IAAK6O,GAAoBG,QAAOU,cAE7EN,EAAMkB,GAAcpB,GAAQzL,GAC7B8M,EAAa1H,IAGnB5C,oBAAU,KACR,MACMuK,EAAW1C,YAAY,KAC3BwC,KAF2B,KAI7B,MAAO,IAAMvC,cAAcyC,IAC1B,CAACF,IAGJrK,oBAAU,KACR,MAAMwK,EAA0B,IAAKhN,EAASuL,QAAOU,YACjDe,EAAWzB,QAAUvL,EAAQuL,OAASyB,EAAWf,WAAajM,EAAQiM,WACxEW,EAAWI,GACXH,EAAWG,KAEZ,CAACzB,EAAOU,EAAUjM,EAAS6M,IA2D9B,OACE,kBAAC,GAAD,CAAOzE,aAAc,cAASC,UAAU,UACtC,yBAAKpL,UAAU,gBACb,wBAAIA,UAAU,eACZ,oCAEF,kBAAC,IAAD,CAAMgQ,GAAG,SAASC,KAAK,SAASjQ,UAAU,QAAQkQ,aAAW,SAC3D,0BAAMC,cAAY,QAAlB,UAGJ,yBAAKnQ,UAAU,yBACb,yBAAKA,UAAU,uBACb,yBAAKA,UAAU,iBAAiBiQ,KAAK,QAAQC,aAAW,oBACrDjN,UAAOC,QAAQ+L,IAAYtF,IAAI,QAAEyG,EAAKC,GAAP,SAC9B,4BACEjN,IAAKgN,EACLnH,KAAK,SACLjJ,UAAW,CAAC,MAAOsO,IAAU8B,EAAM,SAAW,GAAnC,cAA8CC,EAAIlB,QAASmB,KAAK,KAC3EzG,QAAS,IAAM0F,EAASa,IAEvBA,MAIP,2BACEnF,YAAa,yBACbjL,UAAU,oBACVR,MAAOwP,EACPxF,SAAWZ,GAAM4G,EAAY5G,EAAEc,OAAOlK,SAExC,2BACEyL,YAAa,wBACbjL,UAAU,eACVR,MAAOiQ,EACPjG,SAAWZ,GAAM8G,EAAU9G,EAAEc,OAAOlK,UAGxC,yBAAKQ,UAAU,8BACb,2BAAOA,UAAU,SACf,+BACE,4BACE,4BACE,oCAEF,4BACE,wCAEF,4BACE,qCAEF,4BACE,yCAIN,+BA3GS,MACjB,GAAI0O,EAAK5K,YACP,OACE,4BACE,wBAAIyM,QAAS,GACX,2CAKR,GAAI7B,EAAK3K,UAAW,CAClB,MAAMyM,EAAQ9B,EAAKlP,QAAQgR,MAAMf,OAAQgB,IAAMC,OAhBhCC,EAgB0CF,GAftDhB,IAC+D,IAA7DkB,EAAIpQ,QAAQqQ,cAAcC,QAAQpB,EAAOmB,eAF/BD,QAiBf,OAAqB,IAAjBH,EAAMM,OAEN,4BACE,wBAAIP,QAAS,GACX,gDAKDC,EAAM7G,IAAI,CAACgH,EAAKI,IAErB,wBAAI3N,IAAK2N,EAAG/Q,UAAS,gBAAWiP,GAAW0B,EAAIrC,OAAOa,QACpD,4BACE,kBAAC7B,GAAD,CAAcC,MAAO,IAAMsC,IAAc9I,KAAMH,WAASoK,QAAQL,EAAI5J,KAAM,CAAEkK,KAAM,WAEpF,4BACE,4BAAQjR,UAAU,eAAeiJ,KAAK,SAASY,QAAS,IAAM2F,EAAYmB,EAAI3B,WAC3E2B,EAAI3B,WAGT,4BACE,4BAAQhP,UAAU,eAAeiJ,KAAK,SAASY,QAAS,IAAM0F,EAASoB,EAAIrC,QACxEqC,EAAIrC,QAGT,4BACE,yBAAKtO,UAAU,eAAe2Q,EAAIpQ,YAK1C,OACE,4BACE,wBAAIgQ,QAAS,GACX,kBAAC,EAAD,CAAO/O,OAAO,EAAOD,MAAOmN,EAAKrO,aA6DvB6Q,OAId,yBAAKlR,UAAU,gBACb,kBAAC,IAAD,CAAMgQ,GAAG,SAASC,KAAK,SAASjQ,UAAU,mBACxC,kBAAC,IAAD,CAAiB8J,KAAMqH,MACtB,IACD,uCCtKH,SAASC,GAAT,GAA2D,IAArC,KAAErK,EAAF,MAAQwG,GAA4B,EAC/DR,GAAe,KACf,MAAMjP,EAAOE,IAAKwP,QAAU,KACtBC,EAAY1G,EAAK2G,UAAU5P,GAAM6P,UACjCC,EAAcC,KAAO9G,EAAKO,SAASkG,OAAO1P,GAChD,OACE,0BACEgQ,MAAOL,EAAUO,eAAepH,WAASqH,8BAExCL,EAAYG,KAAKF,KAAON,IAAQjG,WCThC,SAAS+J,KACd,MAAMxO,EAAQoF,KACPqJ,EAAOC,GAAYjS,mBAA8BkE,EAAS0B,YAC1DsM,EAAaC,GAAsBtN,IAE1CoB,oBAAU,KACH1C,GACLlB,EACGiB,SAASC,EAAO,cAChB2C,KAAMlF,IACLiR,EAAS/N,EAASiC,GAAGnF,EAASE,SAE/BkF,MAAOpF,IACNM,EAAYN,GACZiR,EAAS/N,EAASnD,MAAMC,OAE3B,CAACuC,EAAO2O,IAMX,MAAO,CAACF,EAJY,KAClBG,M,yBCpBG,SAASC,GAAT,GAA8D,IAA3C,IAAEC,EAAF,MAAOpE,EAAP,SAAcqE,GAA4B,EAClE7E,GAAe,KACf,MAAM8E,EAAQF,EAAIzK,KAAKqG,KAASuE,GAAG,gBAAkB,EACrD,OAAO,oCAAGD,EAAQD,IAAaD,EAAIzK,KAAKqG,KAASwE,SAAS,aCc5D,SAASC,GAAT,GAA4D,IAAjC,UAAE7K,GAA8B,EACzD,MAAM,aAAEpB,GAAiB+B,IACnB+H,EAAa1H,IACb8J,EAAc9K,IALHJ,EAK0BH,WAASsL,WAAW,IAAIC,OAL1B9O,IAAI,CAAE+O,OAAsC,GAA9B/Q,KAAKgR,KAAKtL,EAAKqL,OAAS,IAAUE,OAAQ,IAAhFvL,MAMjB,MAAOwL,EAAoBC,GAAoBlT,mBAA0B2S,IAClEQ,EAAWC,GAAgBpT,oBAAS,GAqB3C,OAnBAiG,oBAAU,KACR,MAAMoN,EAAQ,KACZ,IAAKJ,EAEH,YADAG,GAAa,GAGf,IAAIE,GAAU,EACV/C,IAAe0C,IACjBK,GAAU,GAEZF,EAAaE,IAEfD,IACA,MAAM7C,EAAW1C,YAAY,KAC3BuF,KACC,KACH,MAAO,IAAMtF,cAAcyC,IAC1B,CAACyC,EAAoB1C,IAGtB,oCACE,4BACE,4BACE,gEAED1I,GACC,oCACE,4BACE,sEACC,IACD,kBAACmG,GAAD,CAAcC,MAAO,IAAMsC,IAAc9I,KAAMI,IAC9C,IACD,4BACE8B,KAAK,SACLY,QAAS,IAAM9D,EAAa,SAASP,KAAK,IAAM3E,IAAMgS,QAAQ,oCAC9D7S,UAAU,yBAEV,kBAAC,IAAD,CAAiB8J,KAAMgJ,QAG3B,4BACE,kBAACpB,GAAD,CAAWnE,MAAO,IAAMsC,IAAc8B,IAAKxK,EAAWyK,SAAU,IAAM,OACrE,IACD,qDAHF,OASN,6BACA,0BACEjJ,SAAWC,IACTA,EAAEC,iBACE0J,GACFxM,EAAawM,GAAoB/M,KAAK,IAAM3E,IAAMgS,QAAQ,qCAI9D,4BACE,+DAEF,kBAAC,KAAD,CACErJ,SAAWzC,GAAsByL,EAAiBzL,EAAOH,WAASsL,WAAWnL,GAAQ,MACrFyG,OAAQxP,IAAKwP,OACbhO,MAAK,OAAE+S,QAAF,IAAEA,OAAF,EAAEA,EAAoBQ,WAC3BC,QAAS,IAAIb,OAEd,IACD,4BAAQlJ,KAAK,SAASjJ,UAAU,yBAAyBiT,UAAWR,GAClE,kBAAC,IAAD,CAAiB3I,KAAMoJ,MACtB,IACD,mCAEDX,GAAsBE,GACrB,2BACE,sDACC,IACD,kBAACrB,GAAD,CAAc7D,MAAO,IAAMsC,IAAc9I,KAAMwL,IAHjD,MAOAE,GACA,2BACE,iIAON,6BACA,0BACEzS,UAAU,OACV2I,SAAWC,IACTA,EAAEC,iBACF9C,EAAa,OAAOP,KAAK,IAAM3E,IAAMgS,QAAQ,0CAG/C,4BACE,6DAEF,4BAAQ5J,KAAK,SAASjJ,UAAU,0BAC9B,kBAAC,IAAD,CAAiB8J,KAAMqJ,MACtB,IACD,sCAGJ,6BACA,2BACE,0GACE,sCAeV,SAASC,GAAT,GAEkB,IAFM,UACtBjM,EADsB,QACXkM,EADW,mBACFC,EADE,aACkBC,GACzB,EACf,MAAM1D,EAAa1H,IACbqL,EAAU3D,IAAewD,EACzBI,GAAoBD,GAAW3D,IAAewD,EAAQK,KAAK,CAAEC,QAASJ,IAC5E,OACE,oCACE,wBAAIvT,UAAU,QACZ,4BACE,iDACC,IACD,kBAACsN,GAAD,CAAcC,MAAO,IAAMsC,IAAc9I,KAAMI,KAEhDqM,GACC,4BACE,6CACC,IACD,kBAAC9B,GAAD,CAAWnE,MAAO,IAAMsC,IAAc8B,IAAK0B,EAASzB,SAAU,IAAM,eACjE0B,GACD,oCACG,IADH,IAGE,8BACE,sIACSC,EAAe,OAL5B,KALJ,KAqBDE,GAEC,4BACE,kEACC,IACD,kBAAC/B,GAAD,CAAWnE,MAAO,IAAMsC,IAAc8B,IAAK0B,EAAQK,KAAK,CAAEC,QAASJ,IAAiB3B,SAAU,IAAM,aAHtG,OAYV,SAASgC,GAAT,GAEkB,IAFI,UACpBzM,EADoB,QACTkM,EADS,mBACAC,EADA,aACoBC,GACzB,EACf,MAAM1D,EAAa1H,IACnB,OACE,oCACE,4BACE,4BACE,iDACC,IACD,kBAACmF,GAAD,CAAcC,MAAO,IAAMsC,IAAc9I,KAAMI,KAEjD,4BACE,+CACC,IACD,kBAACmG,GAAD,CAAcC,MAAO,IAAMsC,IAAc9I,KAAMsM,OAG7CC,GACA,4BACE,4DACC,IACD,kBAAChG,GAAD,CAAcC,MAAO,IAAMsC,IAAc9I,KAAMsM,EAAQK,KAAK,CAAEC,QAASJ,QAM/E,kBAAC,IAAD,CAAMvD,GAAG,0BAA0BhQ,UAAU,mBAC3C,kBAAC,IAAD,CAAiB8J,KAAM+J,MACtB,IACD,yDAUD,SAASC,GAAT,GAA+C,IAAnB,MAAExC,GAAgB,EACnD,MAAM5Q,EAASwH,IAAY1I,QACrBqQ,EAAa1H,IAEbhB,EAAYzG,EAAO6G,WAAaX,WAASoK,QAAQtQ,EAAO6G,WAAY,CAAE0J,KAAM,QAAW,KACvFoC,EAAU3S,EAAOqT,SAAWnN,WAASoK,QAAQtQ,EAAOqT,SAAU,CAAE9C,KAAM,QAAW,KACjFqC,EAAqBhC,EAAMvN,UAC7BuN,EAAM9R,QAAQgR,MAAMf,OAAQuE,GAA6B,IAApBA,EAAKtM,YAAkBoJ,OAC5D,EACEyC,EAAejC,EAAMvN,UACvB1C,KAAK4S,IAAIC,MACT,KACA5C,EAAM9R,QAAQgR,MAAM7G,IAAKqK,GAASA,EAAKtM,aACrC,EAoCN,OACE,yBAAK1H,UAAU,aACb,yBAAKA,UAAU,aACb,4BACE,+CArCDmH,IAAckM,GAAWxD,IAAe1I,EACpC,kBAAC6K,GAAD,CAAmB7K,UAAWA,IAEnC0I,IAAewD,GAUfE,GAAgB1D,IAAewD,EAAQK,KAAK,CAAEC,QAASJ,IARvD,kBAACH,GAAD,CACEjM,UAAWA,EACXkM,QAASA,EACTC,mBAAoBA,EACpBC,aAAcA,IAelB,kBAACK,GAAD,CACEzM,UAAWA,EACXkM,QAASA,EACTC,mBAAoBA,EACpBC,aAAcA,MCxRf,SAASY,KACd,MAAMzT,EAASwH,IAAY1I,QACrByF,EAAO2F,IAAUpL,SAChBkP,EAAMkB,GAAcpB,MACpB8C,EAAO8C,GAAe/C,KACvBxB,EAAa1H,KACb,aAAEjC,GAAiB4B,IAEzB,IAAK7C,EAAK8F,SACR,MAAM,IAAIzM,OAAO6C,MAAM,qDAIzBoE,oBAAU,KACR,MACMuK,EAAW1C,YAAY,KAC3BwC,IACAwE,KAH2B,KAK7B,MAAO,IAAM/G,cAAcyC,IAC1B,CAACF,EAAYwE,IAgBhB,OACE,yBAAKpU,UAAU,aACb,kBAAC8T,GAAD,CAAoBxC,MAAOA,IAC3B,yBAAKtR,UAAU,aACb,yBAAKA,UAAU,aACb,4BACE,6CAED0O,EAAK5K,aAAe,kBAAC,EAAD,MACpB4K,EAAK1K,WAAa,kBAAC,EAAD,CAAOzC,MAAOmN,EAAKrO,UACrCqO,EAAK3K,WAEJ,wBAAI/D,UAAU,QACZ,4BACiC,IAA9B0O,EAAKlP,QAAQgR,MAAMM,OAClB,oCACE,gDACC,IAFH,IAIE,kBAAC,IAAD,CAAMd,GAAG,eACP,wCALJ,KAUA,oCACE,kDACC,IACD,kBAACoB,GAAD,CACE7D,MAAO,IAAMsC,IACb9I,KAAMH,WAASoK,QAAQtC,EAAKlP,QAAQgR,MAAM,GAAGzJ,KAAM,CAAEkK,KAAM,UAE5D,IAPH,IASE,kBAAC,IAAD,CAAMjB,GAAG,eACP,wCAVJ,SAoBZ,yBAAKhQ,UAAU,aACb,yBAAKA,UAAU,aACb,4BACE,0CAEF,wBAAIA,UAAU,QACZ,4BACE,6KACSqB,KAAKN,OAAOL,EAAOgH,YAAc,GAAK,OAK9C,IAPH,IASE,kBAAC,IAAD,CAAMsI,GAAG,qBACP,8CAVJ,KAcA,4BACE,oCACE,2IAhFPsB,EAAMvN,UACJuN,EAAM9R,QAAQgR,MAAMf,OAAQuE,GAA6B,IAApBA,EAAKtM,YAAkBoJ,OADtC,KAsFhB,IAPH,IASE,kBAAC,IAAD,CAAMd,GAAG,gBACP,0CAVJ,SAmBNrO,EAAOgB,gBACL,yBAAK3C,UAAU,aACb,yBAAKA,UAAU,aACb,4BACE,oDAEF,2BAAG,qFACH,kBAAC,IAAD,CAAMgQ,GAAG,uBAAuBhQ,UAAU,mBACxC,uCAMV,yBAAKA,UAAU,gCACb,yBAAKA,UAAU,aACb,4BACE,2CAEF,4BAAQiT,UAjHUhO,EAAKoP,UAiHWpL,KAAK,SAASjJ,UAAU,iBAAiB6J,QAAS,KA7GrFvL,OAAOgW,QAAQ,yBAEpBpO,MA4GQ,wCC1IZ,SAASqO,GAAT,GAA0D,IAA/B,KAAEP,GAA4B,EACvD,MAAMQ,EAAa/L,uBACb,aAAEtC,GAAiB2B,IAczB,OACE,0BACE9H,UAAU,cACV2I,SAAWC,IACTA,EAAEC,iBAhBe,MACrB,IAAK2L,EAAW1L,QAAS,OAEzB,IAAKxK,OAAOgW,QAAQ,wBAAmB,OAEvC,MAAMG,EAAUC,SAASF,EAAW1L,QAAQtJ,MAAO,IACnD2G,EAAuB,GAAVsO,EAAcT,EAAKnR,OAChChC,IAAMgS,QAAQ,wDAUV8B,KAGF,2BACE5W,KAAK,UACLkL,KAAK,SACLG,IAAKoL,EACLxU,UAAU,uBACV4U,aAAY,UAfavT,KAAKN,MAAMiT,EAAKtM,WAAa,OAiBxD,4BAAQuB,KAAK,SAASjJ,UAAU,mBAC9B,kBAAC,IAAD,CAAiB8J,KAAM+K,MACtB,IACD,oCAMD,SAASC,KACd,MAAOxD,GAASD,KAwBhB,OACE,kBAAC,GAAD,CAAOlG,aAAc,qBAAgBC,UAAU,UAC7C,yBAAKpL,UAAU,gBACb,wBAAIA,UAAU,eAAe,sBAC7B,kBAAC,IAAD,CAAMgQ,GAAG,SAASC,KAAK,SAASjQ,UAAU,QAAQkQ,aAAW,SAC3D,0BAAMC,cAAY,QAAlB,UAGHmB,EAAMxN,aAAe,kBAAC,EAAD,MACrBwN,EAAMtN,WAAa,kBAAC,EAAD,CAAOzC,MAAO+P,EAAMjR,UACvCiR,EAAMvN,WACL,yBAAK/D,UAAU,yBACb,2BAAOA,UAAU,qBACf,+BACE,4BACE,4BACE,oCAEF,4BACE,uCAEF,4BACE,qCAEF,4BACE,kCAEF,4BACE,yCACC,IACD,+BACE,+CAKR,+BAAQsR,EAAM9R,QAAQgR,MAAM7G,IAAI,CAACqK,EAAMjD,IA1D3B,EAACiD,EAAiBjD,KACtC,MAAMgE,EAAMf,EAAKgB,GACdrL,IAAKqL,GACJ,0BAAM5R,IAAK4R,EAAGA,GAAIlH,MAAO,IAAIqE,KAAK6C,EAAGC,YAAYjH,kBAC9CgH,EAAGA,KAIPrL,IAAI,CAACuL,EAAMC,IAAa,IAANA,EAAU,CAACD,GAAQ,CAAC,0BAAM9R,IAAG,eAAU8R,EAAK9R,MAAxB,OAA2C8R,IACpF,OACE,wBAAI9R,IAAK2N,GACP,4BAAKiD,EAAKjW,MACV,4BAAKiW,EAAKoB,SACV,4BAAKpB,EAAKnR,OACV,4BAAKkS,GACL,4BACE,kBAACR,GAAD,CAAmBP,KAAMA,OA0CsBqB,CAAcrB,EAAMjD,OAKvE,yBAAK/Q,UAAU,gBACb,kBAAC,IAAD,CAAMgQ,GAAG,SAASC,KAAK,SAASjQ,UAAU,mBACxC,kBAAC,IAAD,CAAiB8J,KAAMqH,MACtB,IACD,uCCtHH,SAASmE,KACd,MAAMd,EAAaxV,IAAMyJ,YAEnB4C,EAAUC,cACV5K,EAASwH,KACT,aAAE/B,GAAiB2B,IAczB,OACE,kBAAC,GAAD,CAAOqD,aAAc,oBAAeC,UAAU,UAC5C,0BACEzC,SAAWC,IACTA,EAAEC,iBAhBa,MACrB,IAAK2L,EAAW1L,QAAS,OAEzB,IAAKxK,OAAOgW,QAAQ,wBAAmB,OAEvC,MAAMG,EAAUC,SAASF,EAAW1L,QAAQtJ,MAAO,IACnD2G,EAAuB,GAAVsO,GAAcjP,KAAK,KAC9B3E,IAAMgS,QAAQ,0CACdxH,EAAQuB,KAAK,aAST+H,KAGF,yBAAK3U,UAAU,gBACb,wBAAIA,UAAU,eACZ,0CAEF,kBAAC,IAAD,CAAMgQ,GAAG,SAASC,KAAK,SAASjQ,UAAU,QAAQkQ,aAAW,SAC3D,0BAAMC,cAAY,QAAlB,UAGJ,yBAAKnQ,UAAU,cACb,2BACE,2MAGE,iCAKJ,yBAAKA,UAAU,mBACb,2BAAOgJ,QAAQ,WACb,yCADF,KAIA,2BACEG,GAAG,UACHpL,KAAK,UACLkL,KAAK,SACLG,IAAKoL,EACLxU,UAAU,eACVqJ,UAAQ,EACRuL,aAAY,UAAKvT,KAAKN,OAAOL,EAAOlB,QAAQkI,YAAc,GAAK,OAEjE,2BAAO1H,UAAU,wBACf,8CAIN,yBAAKA,UAAU,gBACb,kBAAC,IAAD,CAAMgQ,GAAG,SAASC,KAAK,SAASjQ,UAAU,mBACxC,kBAAC,IAAD,CAAiB8J,KAAMqH,MACtB,IACD,qCAEF,4BAAQlI,KAAK,SAASjJ,UAAU,mBAC9B,kBAAC,IAAD,CAAiB8J,KAAM+K,MACtB,IACD,iDCrEL,SAASU,KACd,MAAM1S,EAAQoF,KACPuN,EAAKC,GAAUnW,mBAA4BkE,EAAS0B,WAE3D,IAAKrC,EAAO,MAAM,IAAIvE,OAAO6C,MAAM,4CAEnCoE,oBAAU,KACR5D,EAAOiB,SAASC,EAAO,qBAAqB2C,KACzClF,IACCmV,EAAOjS,EAASiC,GAAGnF,EAASE,QAE7BF,IACCM,EAAYN,GACZmV,EAAOjS,EAASnD,MAAMC,OAGzB,CAACuC,IAuBJ,OACE,kBAAC,GAAD,CAAOsI,aAAc,0BAAqBC,UAAU,UAClD,yBAAKpL,UAAU,gBACb,wBAAIA,UAAU,eACZ,wDAEF,kBAAC,IAAD,CAAMgQ,GAAG,SAASC,KAAK,SAASjQ,UAAU,QAAQkQ,aAAW,SAC3D,0BAAMC,cAAY,QAAlB,UAGJ,yBAAKnQ,UAAU,cACb,yBAAKA,UAAU,QACb,oKAhCFwV,EAAI1R,YAEJ,4BACE,qDAIF0R,EAAIxR,UAAkB,kBAAC,EAAD,CAAOzC,MAAOiU,EAAInV,UAG1C,uBAAG4P,KAAK,SAASjQ,UAAU,yBAAyB0V,KAAM/T,EAAOI,aAAeyT,EAAIhW,QAAQsD,KAAM6S,UAAQ,GACxG,kBAAC,IAAD,CAAiB7L,KAAM8L,MACtB,IACD,uDACC,IACD,kBAAC,IAAD,CAAiB9L,KAAM8L,SClCxB,SAASC,KACd,MAAM,WAAE/P,EAAF,OAAcf,GAAW+C,IAa/B,OAAKhC,IAEH,oCAZA,yBAAK9F,UAAU,gBACb,kBAAC,IAAD,CAAMgQ,GAAG,SAAShQ,UAAU,gBAC1B,qCAEF,yBAAKA,UAAU,kBACf,kBAAC4J,EAAD,CAAcC,QAAS,IAAM9E,MAC7B,kBAACuE,EAAD,OAQA,8BACE,oCACE,kBAAC6K,GAAD,MAEA,kBAAC,IAAD,CAAOrR,KAAK,cAAcgT,OAAQ,IAAM,kBAAC,GAAD,QAExC,kBAAC,IAAD,CAAOhT,KAAK,oBAAoBgT,OAAQ,IAAM,kBAACR,GAAD,QAE9C,kBAAC,IAAD,CAAOxS,KAAK,eAAegT,OAAQ,IAAM,kBAAChB,GAAD,QAEzC,kBAAC,IAAD,CAAOhS,KAAK,0BAA0BgT,OAAQ,IAAM,kBAACP,GAAD,WAdlC,kBAAC1K,GAAD,MClB5B,SAASkL,KACP,MAAM9Q,EAAO2F,IACb,OAAI3F,EAAKnB,YAAoB,kBAAC,EAAD,MACzBmB,EAAKjB,UAAkB,kBAAC,EAAD,CAAOzC,MAAO0D,EAAK5E,UAE1C4E,EAAKzF,QAAQuL,SACR,kBAAC8K,GAAD,MAEF,kBAACtN,EAAD,M,OCPT,MAYMyN,GAAc,KAClB,MAAMd,EAAO5W,OAAO2X,eAAezX,QAZjB,kBAalB,OAAK0W,EACEgB,KAAKC,MAAMjB,GADA,MASdkB,GAAiB,KACrB,MAAMC,EAAUL,KAChB,OAAKK,EAUE,CACLC,cAAe9S,EAASiC,GAAG4Q,EAAQC,eACnCC,UAAW/S,EAASiC,GAAG4Q,EAAQE,WAC/BC,SAAS,EACTC,OAAQ,OACRC,YAAa,IAAM1Q,QAAQC,SAC3B0Q,WAAY,IAAM3Q,QAAQC,UAfnB,CACLqQ,cAAe9S,EAAS0B,UACxBqR,UAAW/S,EAAS0B,UACpBsR,SAAS,EACTC,OAAQ,OACRC,YAAa,IAAM1Q,QAAQC,SAC3B0Q,WAAY,IAAM3Q,QAAQC,WAanB2Q,GAAuB3X,wBAAwCmX,MAOrE,SAASS,GAAT,GAAmE,IAA7B,SAAEzX,EAAF,MAAYyD,GAAgB,EACvE,MAAMiU,EAAcV,MACbI,EAASO,GAAczX,oBAAkB,IACzCgX,EAAeU,GAAoB1X,mBAAmCwX,EAAYR,gBAClFC,EAAWU,GAAgB3X,mBAA+BwX,EAAYP,YACtEW,EAAQT,GAAUtS,IAEzBoB,oBAAU,KACR,IAAK5D,EAAOgB,eAAgB,MAAO,OAEnC,MAAMwU,EAAY,KAAO,IAAD,EACtB,UAAAxV,EAAOgB,sBAAP,SACIyU,IAAIvU,EAAK,0BAAsBA,GAAU,mBAC1C2C,KAAMlF,IACL,MAAME,EAAOF,EAASE,KACtBwW,EAAiBxT,EAASiC,GAAGjF,EAAK8V,gBAClCW,EAAazT,EAASiC,GAAGjF,EAAK+V,WAAa,KAC3CQ,GAAW,KAEZrR,MAAOpF,IACNM,EAAYN,GACZyW,GAAW,GAEXjW,QAAQT,MAAM,gCAAiCC,MAMrD6W,IACA,MAAMrH,EAAW1C,YAAY,IAAM+J,IAlFjB,MAmFlB,MAAO,IAAM9J,cAAcyC,IAC1B,CAACjN,EAAOqU,IA+BX,OACE,kBAACN,GAAqBrX,SAAtB,CAA+BC,MAAO,CACpC8W,gBACAC,YACAC,UACAC,SACAC,YAnCiBW,IACnB,IAAKxU,EAAO,MAAM,IAAI1B,MAAM,8CAC5B,OAAKQ,EAAOgB,eAELhB,EAAOgB,eACXW,KADI,0BACoBT,GAAS,CAAEoJ,QAASoL,IAC5C7R,KAAMlF,IACLmW,IACOnW,EAASE,OAEjBkF,MAAOpF,IAEN,MADAM,EAAYN,GACNA,IAVyB0F,QAAQC,UAkCzC0Q,WApBe,CAACxN,EAAYmO,IACzB3V,EAAOgB,gBAEPrE,OAAOgW,QAAQ,iBACb3S,EAAOgB,eAAeW,KAAtB,0BAA8CT,EAA9C,YAAuDsG,GAAM,CAClE8C,QAASqL,IACR9R,KAAK,KACNiR,MACC/Q,MAAOpF,IACRM,EAAYN,KARqB0F,QAAQC,WAsBxC7G,GAKA,SAASmY,KACd,MAAMxP,EAAUrB,qBAAWkQ,IAC3B,OAAO5O,kBAAQ,IAAMD,EAAQuO,cAAe,CAACvO,EAAQuO,gBAGhD,SAASkB,KACd,MAAMzP,EAAUrB,qBAAWkQ,IAC3B,OAAO5O,kBAAQ,IAAMD,EAAQwO,UAAW,CAACxO,EAAQwO,YAsE5C,SAASkB,KACd,MAAMlB,EAAYiB,KACZlB,EAAgBiB,KAEtBhS,oBAAU,KACR,GAAI,iBAAkBjH,OAAQ,CAC5B,MAAM,WAAEoZ,GAAeC,aACJ,YAAfD,GAA2C,WAAfA,GAC9BC,aAAaC,sBAGhB,IAEHrS,oBAAU,KACR,GAAI+Q,EAAcvS,WAAawS,EAAUxS,UAAW,CAClD,MAAM8T,EAAU7B,KACZ6B,IA/DsBC,EAgEDD,EAAQvB,cAAeA,EAAc9W,QA/D1D2D,QAAS+R,IACf,MAAM6C,EAASD,EAAQE,KAAMC,GAAQA,EAAI9O,KAAO+L,EAAK/L,IACrD,IAAI2E,EAAQ,KACPiK,IACHjK,EAAQ,iCAAsBoH,EAAKpH,SAEjCiK,GAAUA,EAAO9L,UAAYiJ,EAAKjJ,UACpC6B,EAAQ,qCAA0BoH,EAAKpH,SAIpCA,GAGL,IAAI6J,aAAa7J,EAAO,CACtBoK,KAAMhD,EAAKjJ,QACXkM,oBAAoB,MAKC,EAACL,EAAqBM,KAC/CA,EAAQjV,QAAS+R,IAAU,IAAD,EACxB,MAAMmD,EAAOP,EAAQE,KAAMC,GAAQA,EAAI9O,KAAO+L,EAAK/L,IAEnD,IAAKkP,EAAM,OAEX,IAAIvK,EAAQ,MACPuK,EAAKf,QAAUpC,EAAKoC,SACvBxJ,EAAQ,6BAENuK,EAAKf,QAAUpC,EAAKoC,QAAUe,EAAKf,OAAOrL,UAAYiJ,EAAKoC,OAAOrL,UACpE6B,EAAQ,0DAILA,GAGL,IAAI6J,aAAa7J,EAAO,CACtBoK,KAAI,UAAEhD,EAAKoC,cAAP,aAAE,EAAarL,QACnBkM,oBAAoB,OAuBlBG,CAAmBT,EAAQtB,WAAa,GAAIA,EAAU/W,SAAW,KA/MpDgB,KACnB,MAAM0U,EAAOgB,KAAKqC,UAAU/X,GAC5BlC,OAAO2X,eAAevW,QAnBJ,iBAmByBwV,IA+MvCsD,CAAY,CAAElC,cAAeA,EAAc9W,QAAS+W,UAAWA,EAAU/W,UAnEhD,IAACsY,GAqE3B,CAACvB,EAAWD,IC7NV,MAAMmC,GAAwBxZ,wBAAyC,CAC5EyZ,KAAM,GACNC,WAAY,SAGP,SAASC,GAAT,GAA+E,IAAxC,SAAExZ,GAAqC,EACnF,MAAOsZ,EAAMG,GAAWvZ,mBAA8B,KAC/CwZ,EAAUC,GAAezZ,mBAAmB,IAC7CuD,EAAQoF,KAEd1C,oBAAU,KAEH1C,GACCI,OAAO+V,KAAKN,GAAM5H,OAAS,GAC7B+H,EAAQ,IAIZ,MAAMT,EAAU,IAAKM,GACrBI,EAAS3V,QAAS8V,IAChBb,EAAQa,GAAYzV,EAAS0B,UAC7BvD,EAAOS,IACJgV,IADH,gBACgBvU,EADhB,wBACqCoW,IAClCzT,KAAMlF,IACLuY,EAAQ,IAAKH,EAAM,CAACO,GAAWzV,EAASiC,GAAGnF,EAASE,UAErDkF,MAAOpF,IACNM,EAAYN,GACZuY,EAAQ,IAAKH,EAAM,CAACO,GAAWzV,EAASnD,MAAMC,SAGhDwY,EAAShI,OAAS,IACpB+H,EAAQT,GACRW,EAAY,MAEb,CAACD,EAAUJ,EAAM7V,IAMpB,OACE,kBAAC4V,GAAsBlZ,SAAvB,CACEC,MAAO,CACLkZ,OACAC,WARcM,IAClBF,EAAY,IAAID,EAAUG,OAUvB7Z,GAKA,SAAS8Z,GAAkBD,GAChC,MAAMlR,EAAUrB,qBAAW+R,IACrBC,EAAO3Q,EAAQ2Q,KAAKO,GAM1B,OALA1T,oBAAU,KACHmT,GACH3Q,EAAQ4Q,WAAWM,IAEpB,CAACP,EAAM3Q,EAASkR,IACZ,CACLjR,kBAAQ,IAAM0Q,GAAQlV,EAAS0B,UAAW,CAACwT,IAC3C,IAAM3Q,EAAQ4Q,WAAWM,IClDtB,MAAME,GAAiBla,wBAAkC,CAC9DuB,KAAM,CACJqC,MAAO,KACP+C,eAAgBpC,EAAS0B,UACzBkU,QAAS5V,EAAS0B,WAEpBW,QAAS,CACPC,WAAY,KAAM,EAClBlB,MAAO,OACPG,OAAQ,OACRsU,cAAe,UAQZ,SAASC,GAAT,GAAoE,IAApC,SAAEla,GAAiC,EACxE,MACOyD,EAAO+B,EAAO2U,GAAYjV,EADd,cAEZsB,EAAgBU,GAAqBhH,mBAA6BkE,EAAS0B,YAC3EkU,EAASI,GAAcla,mBAAgCkE,EAAS0B,YAChEuU,EAAqBJ,GAAiBlV,IACvCkH,EAAUC,cAEVvG,EAASF,sBAAY,KACzB0U,IACAlO,EAAQuB,KAAK,MACZ,CAAC2M,EAAUlO,IAEd9F,oBAAU,KACR,IAAK1C,EAGH,OAFAyD,EAAkB9C,EAAS0B,gBAC3BsU,EAAWhW,EAAS0B,WAGtBvD,EAAOS,IACJgV,IADH,gBACgBvU,IACb2C,KAAMlF,IACL,MAAMqG,EAAaC,WAASC,SAASvG,EAASwG,QAAQC,MACtDT,EAAkB9C,EAASiC,GAAGmB,WAASK,QAAQC,KAAKP,KACpD6S,EAAWhW,EAASiC,GAAGnF,EAASE,SAEjCkF,MAAOpF,IACNyE,IACAuB,EAAkB9C,EAAS0B,WAC3BsU,EAAWhW,EAASnD,MAAMC,OAE7B,CAACuC,EAAOkC,EAAQ0U,IAInB,OACE,kBAACN,GAAe5Z,SAAhB,CACEC,MAAO,CACLgB,KAAM,CACJqC,QACA+C,iBACAwT,WAEFvT,QAAS,CACPC,WAXW,IAAgB,OAAVjD,EAYjB+B,QACAG,SACAsU,mBAIJ,kBAACxC,GAAD,CAA8BhU,MAAOA,GACnC,kBAAC+V,GAAD,KACGxZ,KAOJ,SAAS0I,KACd,MAAMC,EAAUrB,qBAAWyS,IAC3B,OAAOnR,kBAAQ,IAAMD,EAAQlC,QAAS,CAACkC,EAAQlC,UAG1C,SAASoC,KACd,MAAMF,EAAUrB,qBAAWyS,IAC3B,OAAOnR,kBAAQ,IAAMD,EAAQvH,KAAKqC,MAAO,CAACkF,EAAQvH,KAAKqC,QAGlD,SAAS6W,KACd,MAAM3R,EAAUrB,qBAAWyS,IAC3B,OAAOnR,kBAAQ,IAAMD,EAAQvH,KAAK4Y,QAAS,CAACrR,EAAQvH,KAAK4Y,UAGpD,SAASjR,KACd,MAAMJ,EAAUrB,qBAAWyS,IAE3B,OAAOnR,kBAAQ,IAAM,IAAMpB,WAASK,QAAQmB,MAAML,EAAQvH,KAAKoF,eAAe3B,QAAQoE,WAASC,WAAW,KAAM,CAC9GP,EAAQvH,KAAKoF,iBC5HV,IAAK+T,GAKL,SAASC,GAAaC,EAAiB5Q,GAC5C,MAAO6Q,EAAQC,GAAaza,mBAAsBkE,EAAS0B,WAsB3D,MAAO,CAAC4U,EApBS9R,kBACf,IAAOJ,IACL,IAAKA,EAAM,OACX,MAAMpH,EAAO,IAAIwC,SAEjBxC,EAAKqH,OAAO,WAAYgS,GACxBrZ,EAAKqH,OAAO,OAAQD,GAEpBjG,EAAOS,IACJkB,KAAK2F,IAAS0Q,GAAWK,OAAS,iBAAmB,iBAAkBxZ,GACvEgF,KAAMlF,IACLyZ,EAAUvW,EAASiC,GAAGnF,EAASE,SAEhCkF,MAAOpF,IACNyZ,EAAUvW,EAASnD,MAAMC,OAG/B,CAACuZ,EAAS5Q,KCtBP,SAASgR,GAAT,GAA4C,IAAnB,MAAEC,GAAgB,EAChD,OACE,yBAAKla,UAAS,sBAAiBka,EAAMC,WAClCD,EAAM3Z,U,SDNDoZ,O,mBAAAA,I,oBAAAA,Q,KEAL,MAIMS,GAAyC,CACpDC,IAAmB,CAAC,GAAU,OAC9BC,GAAkB,CAAC,GAAU,OAC7BC,IAAmB,CAAC,GAAU,OAC9B,MAAqB,CAAC,GAAU,OAChCC,EAAiB,CAAC,GAAU,KAC5BC,GAAkB,CAAC,GAAU,MAC7BC,KAAoB,CAAC,GAAU,QAC/BC,GAAkB,CAAC,GAAU,MAC7BC,KAAoB,CAAC,GAAU,qBAC/BC,KAAoB,CAAC,GAAU,QAC/BC,GAAkB,CAAC,GAAU,cAC7BC,GAAkB,CAAC,GAAU,UAC7BC,GAAkB,CAAC,GAAU,cAC7BC,IAAmB,CAAC,GAAU,OAC9BC,IAAmB,CAAC,GAAU,UAC9BC,GAAkB,CAAC,GAAU,UAC7BC,GAAkB,CAAC,GAAU,UAC7BC,IAAmB,CAAC,GAAU,UAC9BC,IAAmB,CAAC,GAAU,UAC9BC,IAAmB,CAAC,GAAU,WAC9BC,IAAmB,CAAC,GAAU,cAC9BC,GAAkB,CAAC,GAAU,QAC7BC,GAAkB,CAAC,GAAU,QAC7BC,GAAkB,CAAC,GAAU,gBAGlBC,GAA2C,CACtDC,IAAmB,CAAC,GAAU,mBAC9BC,EAAiB,CAAC,GAAU,mBAC5BC,GAAkB,CAAC,GAAU,mBAC7BC,GAAkB,CAAC,GAAU,mBAC7B3L,IAAmB,CAAC,GAAU,mBAC9B4L,EAAiB,CAAC,GAAU,mBAC5BC,IAAmB,CAAC,GAAU,sBAC9BC,IAAmB,CAAC,GAAU,aAC9BC,IAAmB,CAAC,GAAU,YAC9BC,MAAqB,CAAC,GAAU,uBAChCC,IAAmB,CAAC,GAAU,wBAC9BC,IAAmB,CAAC,GAAU,0BAC9BC,IAAmB,CAAC,GAAU,0BAC9BC,IAAmB,CAAC,GAAU,0BAC9BjH,IAAmB,CAAC,GAAU,sBAC9BkH,IAAmB,CAAC,GAAU,sBAC9BC,GAAkB,CAAC,GAAU,sBAC7BC,IAAmB,CAAC,GAAU,sBAC9BC,GAAkB,CAAC,GAAU,sBAC7BC,IAAmB,CAAC,GAAU,sBAC9BC,IAAmB,CAAC,GAAU,YAC9BC,OAAsB,CAAC,GAAU,yBACjCC,OAAsB,CAAC,GAAU,yBACjCC,IAAmB,CAAC,GAAU,yBAC9BC,IAAmB,CAAC,GAAU,yBAC9BC,IAAmB,CAAC,GAAU,mBAC9BC,IAAmB,CAAC,GAAU,+BAC9BC,IAAmB,CAAC,GAAU,oCAC9BC,IAAmB,CAAC,GAAU,4BAC9BC,IAAmB,CAAC,GAAU,4BAC9BC,IAAmB,CAAC,GAAU,4BAC9BC,IAAmB,CAAC,GAAU,4BAC9BC,SAAwB,CAAC,GAAU,kBAG/BC,GAA0B,CAC9B,KACA,mBACA,mBACA,mBACA,mBACA,cACA,eA2BKC,eAAeC,GAAUlW,GAC9B,MACMmW,EADOnW,EAAK7J,KACKigB,MAAM,KACvBC,EAAYF,EAAUA,EAAUjN,OAAS,GACzCoN,EAAOtW,EAAKsW,KAElB,QAAaxc,IAATwc,GAA+B,IAATA,EACxBrd,IAAMR,MAAM,0CACP,QAAaqB,IAATwc,GAAsBA,EA7GJ,IA8G3Brd,IAAMR,MACJ,wFAAsC6d,EAAtC,gBA/GyB,YAiHtB,GAAIH,EAAUjN,OAAS,EAC5BjQ,IAAMR,MAAM,+CACP,GAAI4d,EAAUE,SAAS,KAC5Btd,IAAMR,MAAM,mDACP,GAAI4d,KAAarC,GACtB/a,IAAMR,MAAN,UACK,+HADL,YACiIrC,IAAKogB,EAClIxC,GAAqBqC,UAGpB,WA9CTJ,eAA4BQ,GAC1B,MAAMC,QAAeD,EAAKE,MAAM,EAAG,GAAGC,cAChCC,EAAO,IAAIC,WAAWJ,GAE5B,IAAK,MAAMK,KAASf,GAAyB,CAC3C,IAAIgB,GAAQ,EACZ,IAAK,IAAI7N,EAAI,EAAGA,EAAI4N,EAAM7N,QAAUC,EAAI0N,EAAK3N,OAAQC,GAAK,EACxD,GAAI0N,EAAK1N,KAAO4N,EAAME,WAAW9N,GAAI,CACnC6N,GAAQ,EACR,MAGJ,GAAIA,EAMF,OAJA9d,QAAQ6P,IACN,yDACAgO,GAEK3Y,QAAQ8Y,SAAQ,GAG3B,OAAO9Y,QAAQ8Y,SAAQ,GAyBNC,CAAanX,GAK5B,OAAO,EAJP/G,IAAMR,MACJ,yHAKJ,OAAO,E,gCC3HF,SAAS2e,GAAT,GAAoC,IAAlB,KAAEpX,GAAe,EACxC,OACE,2BAAO5H,UAAU,mBACf,+BACE,4BACE,4BACE,qCAEF,4BAAK4H,EAAK7J,OAEX6J,EAAKqX,cACJ,4BACE,4BACE,4CAEF,4BACE,kBAAC7N,GAAD,CAAc7D,MAAO,IAAM3G,WAASK,QAASF,KAAMH,WAAS0B,WAAWV,EAAKqX,kBAIlF,4BACE,4BACE,qCAEF,4BAAKC,KAAStX,EAAKsW,KAAM,CAAEiB,SAAU,YCbxC,SAASC,GAAT,GAAwD,IAAhC,QAAEvF,EAAF,UAAWwF,GAAoB,EAC5D,MAAMC,EAAY7W,uBACXb,EAAM2X,GAAWjgB,mBAAsB,OACvCkgB,EAAc1F,GAAUF,GAA0BC,EAASF,GAAWK,QAgB7E,GAdAzU,oBAAU,KAAO,IAAD,EACd,IAAK+Z,EAAUxW,QAAS,OACxB,MAAM2W,GAAI,UAAAH,EAAUxW,QAAQrG,aAAlB,eAA0B,KAAM,KAC1C8c,EAAQE,IACP,CAACH,IAEJ/Z,oBAAU,KACJia,EAAazb,UACfsb,EAAUG,EAAahgB,SAEvB6f,EAAU,OAEX,CAACG,EAAcH,KAEbzX,EAAM,CACT,MAAM8X,EAAmB7B,UAAa,IAAD,EACnC,IAAKyB,EAAUxW,QAAS,OACxB,MAAM2W,EAAC,UAAGH,EAAUxW,QAAQrG,aAArB,aAAG,EAA0B,GAChCgd,SAAY3B,GAAU2B,GACxB3F,EAAO2F,GAEPH,EAAUxW,QAAQtJ,MAAQ8f,EAAUxW,QAAQ8L,cAIhD,OACE,oCACE,yBAAKxR,IAAI,SAASpD,UAAU,oBAC1B,2BACEoJ,IAAKkW,EACLvhB,KAAK,cACLkL,KAAK,OACLE,GAAG,cACHnJ,UAAU,oBACVwJ,SAAU,IAAMkW,MAElB,2BAAO1f,UAAU,oBAAoBgJ,QAAQ,eAC3C,+CAGHwW,EAAaxb,WAAa,kBAAC,EAAD,CAAOzC,MAAOie,EAAanf,WAK5D,MAAM,KAAEtC,GAAS6J,EACXmW,EAAYhgB,EAAKigB,MAAM,KACvBC,EAAYF,EAAUA,EAAUjN,OAAS,GAC/C,IAAI6O,EAAO,KACPhhB,EAAW,KAMf,OALIsf,KAAa7D,GACfzb,EAAWX,IAAKogB,EAAEhE,GAAmB6D,IAErC0B,EAAO,4PAGP,yBAAKvc,IAAI,UAAUpD,UAAU,wCAC3B,yBAAKA,UAAU,4CACb,wBAAIA,UAAU,kBACZ,gDAEF,4BACEoD,IAAI,UACJ6F,KAAK,SACLjJ,UAAU,+CACV6J,QAAS,KACP0V,EAAQ,MACRF,EAAU,QAGZ,kBAAC,IAAD,CAAiBvV,KAAMgJ,MACtB,IACD,8CAGJ,yBAAK9S,UAAU,aACb,kBAAC,GAAD,CAAU4H,KAAMA,IACf+X,GAAQ,yBAAK3f,UAAU,uBAAuB2f,GAC9ChhB,GACC,yBAAKqB,UAAU,uBACb,iDACC,IACArB,GAGJ6gB,EAAa1b,aAAe,kBAAC,EAAD,MAC5B0b,EAAaxb,WAAa,kBAAC,EAAD,CAAOzC,MAAOie,EAAanf,UACrDmf,EAAazb,WACTyb,EAAahgB,QAAQogB,WAAWC,OAAOlW,IAAKsS,GAAM,kBAAChC,GAAD,CAAiBC,MAAO+B,EAAG7Y,IAAK6Y,EAAE1b,aCxG1F,SAASuf,GAAT,GAEO,IAFgB,MAC5BC,EAD4B,OACrBF,EADqB,WACbG,EADa,kBACDC,GAChB,EACX,OACE,oCACE,wBAAIjgB,UAAU,iBACX6f,EAAOlW,IAAKsS,GACX,wBAAI7Y,IAAK6Y,EAAE1b,SACT,yBAAKP,UAAS,sBAAiBic,EAAE9B,UAAYlK,KAAK,SAChD,8BAAOgM,EAAEiE,MACR,IACD,gCAASjE,EAAE9B,SAASgG,eAHtB,IAKG,IACAlE,EAAE1b,YAKX,wBAAIP,UAAU,mBACZ,4BACE,sCADF,KAIA,4BACE,wBAAIA,UAAU,oBACX+f,EAAMpW,IAAI,CAAC6Q,EAAMzJ,IAEhB,wBAAI/Q,UAAU,mBAAmBoD,IAAK2N,GACnCkP,EAAkBzF,EAAGzJ,EAAI,QAMpC,yBAAK/Q,UAAU,iBACb,wBAAIA,UAAU,cAAc+f,EAAMpW,IAAI,CAAC6Q,EAAMzJ,IAAciP,EAAWxF,EAAGzJ,EAAI,OCtC9E,SAASqP,GAAT,GAA4C,IAApB,OAAEC,GAAiB,EAChD,MAAMC,EAAY9F,IAChB,OAAQA,EAAE9Z,QACV,IAAK,SACH,MAAO,OACT,IAAK,UACH,MAAO,YACT,QACE,MAAO,WA0BX,OACE,kBAACof,GAAD,CACED,OAAQQ,EAAOT,WAAWC,OAC1BE,MAAOM,EAAOT,WAAWG,MACzBC,WApBe,CAACxF,EAAuBrR,IACzC,wBAAIA,GAAE,eAAUA,GAAM/F,IAAK+F,EAAInJ,UAAS,0CAAqCsgB,EAAS9F,KACpF,uCAEE,8BAAOrR,GAFT,IAIG,IACD,2BACE,uBAAyB1L,OAAO,SAASC,QAAQ,UAAUC,QAAQ,UAAnE,0FAAe6c,EAAE9Z,WAEnB,6BACC,YAAa8Z,GAAK,4BAAKA,EAAEja,WAU5B0f,kBA3BsB,CAACzF,EAAuBrR,IAChD,uBAAGuM,KAAI,gBAAWvM,GAAMnJ,UAAS,sBAAiBsgB,EAAS9F,KACxDrR,KCPA,SAASoX,GAAT,GAAwD,IAAhC,QAAE1G,EAAF,UAAW2G,GAAoB,EAC5D,MAAMC,EAAYhY,uBACXb,EAAM2X,GAAWjgB,mBAAsB,OACvCkgB,EAAc1F,GAAUF,GAA0BC,EAASF,GAAW+G,QAgB7E,GAdAnb,oBAAU,KAAO,IAAD,EACd,IAAKkb,EAAU3X,QAAS,OACxB,MAAM2W,GAAI,UAAAgB,EAAU3X,QAAQrG,aAAlB,eAA0B,KAAM,KAC1C8c,EAAQE,IACP,CAACgB,IAEJlb,oBAAU,KACJia,EAAazb,UACfyc,EAAUhB,EAAahgB,SAEvBghB,EAAU,OAEX,CAAChB,EAAcgB,KAEb5Y,EAAM,CACT,MAAM+Y,EAAmB9C,UAAa,IAAD,EACnC,IAAK4C,EAAU3X,QAAS,OACxB,MAAM2W,GAAI,UAAAgB,EAAU3X,QAAQrG,aAAlB,eAA0B,KAAM,KAC1CqX,EAAO2F,IAGT,OACE,oCACE,yBAAKrc,IAAI,SAASpD,UAAU,oBAC1B,2BACEoJ,IAAKqX,EACL1iB,KAAK,cACLkL,KAAK,OACLE,GAAG,cACHnJ,UAAU,oBACVwJ,SAAU,IAAMmX,MAElB,2BAAO3gB,UAAU,oBAAoBgJ,QAAQ,eAC3C,+CAGHwW,EAAaxb,WAAa,kBAAC,EAAD,CAAOzC,MAAOie,EAAanf,WAK5D,OACE,yBAAK+C,IAAI,UAAUpD,UAAU,wCAC3B,yBAAKA,UAAU,4CACb,wBAAIA,UAAU,kBACZ,gDAEF,4BACEoD,IAAI,UACJ6F,KAAK,SACLjJ,UAAU,+CACV6J,QAAS,KACP0V,EAAQ,MACRiB,EAAU,QAGZ,kBAAC,IAAD,CAAiB1W,KAAMgJ,MACtB,IACD,8CAGJ,yBAAK9S,UAAU,aACb,kBAAC,GAAD,CAAU4H,KAAMA,IACf4X,EAAa1b,aAAe,kBAAC,EAAD,MAC5B0b,EAAaxb,WAAa,kBAAC,EAAD,CAAOzC,MAAOie,EAAanf,UACrDmf,EAAazb,WAAa,kBAACqc,GAAD,CAAgBC,OAAQb,EAAahgB,YCjEjE,SAASohB,GAAT,GAA2C,IAA3B,QAAE/G,EAAF,KAAWgH,GAAe,EAC/C,MAAO3W,EAAQmV,GAAa/f,mBAAgC,OACrD+gB,EAAQG,GAAalhB,mBAAgC,OACrDwhB,EAAYC,GAAiBzhB,mBAAmC,MACjE0hB,EAAuB9H,GAAkB2H,EAAK9iB,MAAM,IACpD,cAAEsb,GAAkBvR,KACpBuD,EAAUC,cA4BhB,OACE,kBAAC,GAAD,CAAOH,aAAa,sBAAsBC,UAAS,gBAAWyV,EAAK9iB,OACjE,0BACEiC,UAAU,iBACV2I,SAAWC,IACTA,EAAEC,iBA/BK,MACb,IAAKqB,IAAWmW,EAAQ,MAAM,IAAIlf,MAAM,gDAExC,MAAMX,EAAO,IAAIwC,SAEjBxC,EAAKqH,OAAO,WAAYgS,GACxBrZ,EAAKqH,OAAO,YAAaqC,EAAOf,IAChC3I,EAAKqH,OAAO,YAAawY,EAAOlX,IAEhC4X,EAAcvd,EAAS0B,WACvBvD,EAAOS,IACJkB,KAAK,UAAW9C,GAChBgF,KAAMlF,IACL,MAAM,GAAE6I,GAAO7I,EAASE,KACxB6K,EAAQuB,KAAR,gBAAsBiU,EAAK9iB,KAA3B,uBAA8CoL,IAC9CkQ,IACA2H,MAEDtb,MAAOpF,IACNM,EAAYN,GACZygB,EAAcvd,EAASnD,MAAMC,OAY3B2gB,KAGF,yBAAKjhB,UAAU,gBACb,wBAAIA,UAAU,eACZ,mDACC,IACD,gCAAS6Z,EAAQ0E,MAAM,EAAG,KAE5B,kBAAC,IAAD,CAAMvO,GAAE,gBAAW6Q,EAAK9iB,MAAQkS,KAAK,SAASjQ,UAAU,QAAQkQ,aAAW,SACzE,0BAAMC,cAAY,QAAlB,UAGJ,yBAAKnQ,UAAU,cACb,yBAAKA,UAAU,eACb,kBAACof,GAAD,CAAgBvF,QAASA,EAASwF,UAAWA,KAE/C,yBAAKrf,UAAU,eACb,kBAACugB,GAAD,CAAgB1G,QAASA,EAAS2G,UAAWA,MAGjD,yBAAKxgB,UAAU,gBACZ8gB,GAAcA,EAAWhd,aAAe,4CACzC,kBAAC,IAAD,CAAMkM,GAAE,gBAAW6Q,EAAK9iB,MAAQkS,KAAK,SAASjQ,UAAU,kBACtD,kBAAC,IAAD,CAAiB8J,KAAMqH,MACtB,IACD,sCAEF,4BAAQlI,KAAK,SAASjJ,UAAU,kBAAkBiT,WApCxB,MAAV/I,GAA4B,MAAVmW,IAqChC,kBAAC,IAAD,CAAiBvW,KAAMoX,MACtB,IACD,yCCjFL,SAASC,GAAT,GAAmE,IAArC,QAAEtH,EAAF,KAAWgH,EAAX,SAAiBO,GAAmB,EACvE,OAA+B,OAA3BA,EAASC,eAA0BD,EAASC,cAAclY,KAAO0Q,EAEjE,2BACE,6DAKC,kBAAC,GAAD,CAAQA,QAASA,EAASgH,KAAMA,I,OCTlC,SAASS,GAAT,GAEI,IAFe,KACxBpD,EADwB,MAClBhe,EADkB,IACX+T,EADW,MACNzI,GACV,EACR,OACE,yBAAKxL,UAAU,cAAcwL,MAAO,CAAE+V,SAAS,GAAD,OAAKrD,EAAL,UAAmB1S,IAC/D,0BAAMxL,UAAU,oBAAoBwL,MAAO,CAAE+V,SAAS,GAAD,OAAK,EAAIrD,EAAT,SAClDnd,EAAMb,EAAO,IAEf,IAJH,IAMG,IACA+T,GAKPqN,GAAU7f,aAAe,CACvB+J,MAAO,I,OCbF,SAASgW,GAAT,GAAoD,IAA9B,WAAEV,EAAF,KAAcD,GAAe,EACxD,MAAMhR,EAAa1H,KAEbmY,EAAY9F,GAAyBA,EAAEiH,QAAU,UAAY,SAsBnE,OACE,oCACE,wBAAIzhB,UAAU,mBACZ,4BACE,mCADF,KAIA,4BACE,kBAACoR,GAAD,CAAc7D,MAAO,IAAMsC,IAAc9I,KAAMH,WAASoK,QAAQ8P,EAAW/Z,KAAM,CAAEkK,KAAM,WAE3F,wBAAIzF,MAAO,CAAEkW,UAAW,YACtB,oCADF,KAIA,4BACE,kBAAC,GAAD,CAAWxhB,MAAO4gB,EAAW5gB,MAAO+T,IAAK4M,EAAKc,UAAWzD,KAAM,MAGnE,kBAAC4B,GAAD,CACEC,MAAOe,EAAWc,SAAS7B,MAC3BF,OAAQiB,EAAWc,SAAS/B,OAC5BG,WAnCa,CAACxF,EAAqBrR,IACvC,wBAAIA,GAAE,eAAUA,GAAM/F,IAAK+F,EAAInJ,UAAS,0CAAqCsgB,EAAS9F,KACpF,uCAEE,8BAAOrR,GAFT,IAIG,IACD,2BAAIqR,EAAEiH,QAAU,sCAAyB,qCACzC,6BACA,6BAAMjH,EAAEja,WA2BR0f,kBA1CoB,CAACzF,EAAqBrR,IAC9C,uBAAGuM,KAAI,gBAAWvM,GAAMnJ,UAAS,sBAAiBsgB,EAAS9F,KACxDrR,MCLA,SAAS0Y,GAAT,GAA8D,IAAhC,aAAEC,EAAF,KAAgBjB,GAAe,EAClE,MAAMC,ECZD,SAAuB3X,GAC5B,MAAO2X,EAAYC,GAAiBzhB,mBAA+BkE,EAAS0B,WAc5E,OAZAK,oBAAU,KACR5D,EAAOS,IACJgV,IADH,sBACsBjO,IACnB3D,KAAMlF,IACLygB,EAAcvd,EAASiC,GAAGnF,EAASE,SAEpCkF,MAAOpF,IACNM,EAAYN,GACZygB,EAAcvd,EAASnD,MAAMC,OAEhC,CAAC6I,IAEG2X,EDHYiB,CAAcD,GAE3B1W,EAAS,gBAAYyV,EAAK9iB,MAChC,OACE,kBAAC,GAAD,CAAOoN,aAAa,sBAAsBC,UAAWA,GACnD,yBAAKpL,UAAU,gBACb,wBAAIA,UAAU,eACZ,yCACC,IACD,gCAAS8hB,IAEX,kBAAC,IAAD,CAAM9R,GAAI5E,EAAW6E,KAAK,SAASjQ,UAAU,QAAQkQ,aAAW,SAC9D,0BAAMC,cAAY,QAAlB,UAGJ,yBAAKnQ,UAAU,cACZ8gB,EAAWhd,aAAe,kBAAC,EAAD,MAC1Bgd,EAAW9c,WAAa,kBAAC,EAAD,CAAOzC,MAAOuf,EAAWzgB,UACjDygB,EAAW/c,WAAa,kBAACyd,GAAD,CAAcV,WAAYA,EAAWthB,QAASqhB,KAAMA,KAE/E,yBAAK7gB,UAAU,gBACb,kBAAC,IAAD,CAAMgQ,GAAI5E,EAAW6E,KAAK,SAASjQ,UAAU,mBAC3C,kBAAC,IAAD,CAAiB8J,KAAMqH,MACtB,IACD,uC,qBEnBH,SAAS6Q,GAAT,GAA8C,IAAlB,KAAEnB,GAAe,EAClD,MAAOoB,GAAe/I,GAAkB2H,EAAK9iB,MACvC8R,EAAa1H,KAEb+Z,EAAoBpB,IACxB,MAAMqB,EAAOC,GAAcA,EAAE7D,MAAM6D,EAAEC,YAAY,KAAO,GAClDC,EAAgBH,EAAIrB,EAAWyB,MAAMzf,MACrC0f,EAAiBL,EAAIrB,EAAWT,OAAOvd,MACvC2f,EAAiBN,EAAIrB,EAAW5W,OAAOpH,MAC7C,OACE,wBAAIM,IAAK0d,EAAW3X,IAClB,4BACE,kBAACiI,GAAD,CAAc7D,MAAO,IAAMsC,IAAc9I,KAAMH,WAASoK,QAAQ8P,EAAW/Z,KAAM,CAAEkK,KAAM,UACzF,6BACA,kBAAC,IAAD,CAAMjB,GAAE,gBAAW8Q,EAAWD,KAAtB,uBAAyCC,EAAW3X,KAC1D,6CAGJ,4BACE,kBAAC,KAAD,CAAcA,GAAE,gBAAW2X,EAAW3X,IAAMuZ,MAAM,MAAMzZ,KAAK,OAAO0Z,OAAO,SACxEL,GAEH,kBAAC,KAAD,CAAcnZ,GAAE,iBAAY2X,EAAW3X,IAAMuZ,MAAM,MAAMzZ,KAAK,OAAO0Z,OAAO,SACzEF,GAEH,kBAAC,KAAD,CAActZ,GAAE,iBAAY2X,EAAW3X,IAAMuZ,MAAM,MAAMzZ,KAAK,OAAO0Z,OAAO,SACzEH,GAGH,yBAAKxiB,UAAU,2BAA2BiQ,KAAK,QAAQC,aAAW,4BAChE,uBACED,KAAK,SACLjQ,UAAU,gBACVkQ,aAAYoS,EACZ5M,KAAM/T,EAAOI,aAAe+e,EAAWyB,MAAMzf,KAC7C6S,UAAQ,EACRiN,YAAA,EACAC,WAAA,gBAAmB/B,EAAW3X,KAE9B,kBAAC,IAAD,CAAiBW,KAAM+J,MACtB,IACD,0BAAM7T,UAAU,kBACd,2CAIJ,uBACEiQ,KAAK,SACLjQ,UAAU,gBACVkQ,aAAYuS,EACZ/M,KAAM/T,EAAOI,aAAe+e,EAAW5W,OAAOpH,KAC9C6S,UAAQ,EACRiN,YAAA,EACAC,WAAA,iBAAoB/B,EAAW3X,KAE/B,kBAAC,IAAD,CAAiBW,KAAM+J,MACtB,IACD,0BAAM7T,UAAU,kBACd,4CAIJ,uBACEiQ,KAAK,SACLjQ,UAAU,gBACVkQ,aAAYsS,EACZ9M,KAAM/T,EAAOI,aAAe+e,EAAWT,OAAOvd,KAC9C6S,UAAQ,EACRiN,YAAA,EACAC,WAAA,iBAAoB/B,EAAW3X,KAE/B,kBAAC,IAAD,CAAiBW,KAAM+J,MACtB,IACD,0BAAM7T,UAAU,kBACd,8CAKR,wBAAIA,UAAS,gBAAWC,EAAe6gB,EAAW5gB,MAAO2gB,EAAKc,aAC5D,kBAAC,GAAD,CAAWzhB,MAAO4gB,EAAW5gB,MAAO+T,IAAK4M,EAAKc,UAAWzD,KAAM,OAuCvE,OACE,kBAAC,GAAD,CAAO/S,aAAc,oBAAeC,UAAS,gBAAWyV,EAAK9iB,OAC3D,yBAAKiC,UAAU,gBACb,wBAAIA,UAAU,eACZ,6CACC,IACD,4BAAQA,UAAU,kBAAkB6gB,EAAK9iB,OAE3C,kBAAC,IAAD,CAAMiS,GAAE,gBAAW6Q,EAAK9iB,MAAQkS,KAAK,SAASjQ,UAAU,QAAQkQ,aAAW,SACzE,0BAAMC,cAAY,QAAlB,UAGH8R,EAAYne,aAAe,kBAAC,EAAD,MAC3Bme,EAAYje,WAAa,kBAAC,EAAD,CAAOzC,MAAO0gB,EAAY5hB,UACnD4hB,EAAYle,YA9CW,KADR2U,EA+CqBuJ,EAAYziB,SA9C1CgR,MAAMM,OAEX,yBAAK9Q,UAAU,cACb,4BACE,4DAON,yBAAKA,UAAU,yBACb,2BAAOA,UAAU,qBACf,+BACE,4BACE,4BACE,oCAEF,4BACE,wCAEF,4BACE,uCAIN,+BAAQ0Y,EAAKlI,MAAM7G,IAAIuY,GAAkBY,cAqB7C,yBAAK9iB,UAAU,gBACb,kBAAC,IAAD,CAAMgQ,GAAE,gBAAW6Q,EAAK9iB,MAAQkS,KAAK,SAASjQ,UAAU,mBACtD,kBAAC,IAAD,CAAiB8J,KAAMqH,MACtB,IACD,uCApDYuH,MCzFf,SAASqK,GAAT,GAA+D,IAAzC,KAAElC,EAAF,SAAQO,EAAR,YAAkBa,GAAsB,EACnE,MAAOM,EAAOS,GAAY1jB,mBAAqC,MACzDuD,EAAQoF,MACR,cAAEoR,GAAkBvR,KAC1B,IAAKjF,EAAO,MAAM,IAAIvE,OAAO6C,MAAM,qDAkCnC,GAAIigB,EAASC,cAAe,CAC1B,MAAM4B,EAAe7B,EAASC,cAC9B,OACE,oCACE,uBAAGpR,KAAK,SAASjQ,UAAU,kBAAkB0V,KAAM/T,EAAOI,aAAekhB,EAAangB,KAAM6S,UAAQ,GAClG,kBAAC,IAAD,CAAiB7L,KAAM+J,MACtB,IACD,8CAED,IACD,kBAAC,IAAD,CAAM7D,GAAE,gBAAW6Q,EAAK9iB,KAAhB,mBAA+BklB,EAAa9Z,IAAM8G,KAAK,SAASjQ,UAAU,mBAChF,kBAAC,IAAD,CAAiB8J,KAAMoZ,MACtB,IACD,gDAKR,GAAIX,EAAO,CACT,GAAIA,EAAMze,YACR,OACE,4BAAQmP,UAAQ,EAACjT,UAAU,kBAAkBiJ,KAAK,UAChD,kBAAC,IAAD,CAAiBa,KAAMqZ,MACtB,IACD,6CAIN,GAAIZ,EAAMve,UAAW,OAAO,kBAAC,EAAD,CAAOzC,MAAOghB,EAAMliB,UAElD,MA1CkC,MAShC,OARgB+iB,EAQFnB,EAAYle,WAAake,EAAYziB,QAAQgR,MAAMM,OAAS,EAPxE,4BAAQ9Q,UAAU,kBAAkBiJ,KAAK,SAASY,QAAS,IAtBzC,MACpB,MAAMrJ,EAAO,IAAIwC,SAEjBxC,EAAKqH,OAAO,QAAShF,GACrBrC,EAAKqH,OAAO,OAAQgZ,EAAK9iB,MAEzBilB,EAASxf,EAAS0B,WAElBvD,EAAOS,IACJkB,KAAK,kBAAmB9C,GACxBgF,KAAMlF,IACL0iB,EAASxf,EAASiC,GAAGnF,EAASE,OAC9B6Y,MAED3T,MAAOpF,IACNM,EAAYN,GACZ0iB,EAASxf,EAASnD,MAAMC,OAMuC+iB,IAC/D,kBAAC,IAAD,CAAiBvZ,KAAMqZ,MACtB,IACAC,EAAU,gDAAmC,6CAJlCA,OAyCXE,G,OC3EF,SAASC,GAAT,GAAiD,IAAD,MAAzB,KAAE1C,EAAF,OAAQ3W,GAAiB,EACrD,MAAMsZ,EAAW,UAAG3C,EAAK4C,eAAeC,MAAM,eAA7B,aAAG,EAAoC,GAClDzZ,EAAUtI,EAAOM,kBAAoBuhB,EAC3C,OAAO,kBAACxZ,EAAD,CAAUE,OAAQA,EAAQD,QAASA,ICHrC,SAAS0Z,GAAT,GAAuD,IAA/B,KAAE9C,EAAF,YAAQoB,GAAsB,EAC3D,MAAMpS,EAAa1H,KAEnB,GAA2B,IAAvB8Z,EAAYnR,OACd,OAAO,KAET,MAAMgQ,EAAamB,EAAYA,EAAYnR,OAAS,GACpD,OACE,yBAAK9Q,UAAU,qCACb,gCACE,gDAED,IACD,kBAACoR,GAAD,CAAc7D,MAAO,IAAMsC,IAAc9I,KAAMH,WAASoK,QAAQ8P,EAAW/Z,KAAM,CAAEkK,KAAM,UACxF,IANH,IAQE,kBAAC,IAAD,CAAMjB,GAAE,gBAAW6Q,EAAK9iB,KAAhB,iBACN,oDATJ,KCFG,SAAS6lB,GAAT,GAA8C,IAA5B,KAAE/C,EAAF,SAAQO,GAAmB,EAClD,MAAMyC,EChBD,SAAsB/gB,GAC3B,MAAO+gB,EAAWC,GAAgBxkB,mBAA2BkE,EAAS0B,WAuBtE,OAlBA8C,kBAAQ,KACD6b,EAAU/f,aACbggB,EAAatgB,EAAS0B,YAGvB,CAACpC,IAEJyC,oBAAU,KACR5D,EAAOe,WACJ0U,IAAItU,GACJ0C,KAAMlF,IACLwjB,EAAatgB,EAASiC,GAAGnF,EAASE,SAEnCkF,MAAOpF,IACNwjB,EAAatgB,EAASnD,MAAMC,OAE/B,CAACwC,IAEG+gB,EDRWE,CAAalD,EAAK4C,iBAC7BxB,GAAe/I,GAAkB2H,EAAK9iB,MAW7C,OACE,oCACE,4BAAK8iB,EAAK/S,OACV,kBAACiV,GAAD,CAAclC,KAAMA,EAAMO,SAAUA,EAAUa,YAAaA,IAE3D,kBAAC,IAAD,CACEnf,KAAK,kCACLgT,OAAQ,QAAC,MAAE4N,GAAH,SAAe,kBAACvC,GAAD,CAAsBtH,QAAS6J,EAAMM,OAAOnK,QAASgH,KAAMA,EAAMO,SAAUA,OAEpG,kBAAC,IAAD,CAAOte,KAAK,8BAA8BgT,OAAQ,IAAM,kBAAC,GAAD,CAAoB+K,KAAMA,MAClF,kBAAC,IAAD,CACE/d,KAAK,2CACLgT,OAAQ,QAAC,MAAE4N,GAAH,SAAe,kBAAC7B,GAAD,CAAsBC,aAAc4B,EAAMM,OAAOlC,aAAcjB,KAAMA,OAG7FoB,EAAYle,WAAa,kBAAC4f,GAAD,CAAgB9C,KAAMA,EAAMoB,YAAaA,EAAYziB,QAAQgR,QAEvF,6BAzBEqT,EAAU/f,YACL,kBAAC,EAAD,MAEL+f,EAAU7f,UACL,kBAAC,EAAD,CAAOzC,MAAOsiB,EAAUxjB,UAE1B,kBAAC,GAAD,CAAewgB,KAAMA,EAAM3W,OAAQ2Z,EAAUrkB,WEpBjD,SAASykB,GAAT,GAA8C,IAAtB,SAAEhL,GAAmB,EAClD,MAAMG,EAAUM,KAAala,QACvBqhB,EAAOzH,EAAQA,QAAQ8K,MAAMlM,KAAMmM,GAAMA,EAAEpmB,OAASkb,GAC1D,IAAK4H,EAAM,MAAM,IAAI1f,MAAJ,0BAA6B8X,IAE9C,MAAM,MAAE/Y,GAAUkZ,EAAQ8K,MAAMjL,GAC1B9J,EAAQlP,EAAeC,EAAO2gB,EAAKc,WAEzC,OACE,wBAAI3hB,UAAU,YACZ,kBAAC,IAAD,CAASgQ,GAAE,gBAAWiJ,GAAYjZ,UAAU,yBAAyBokB,gBAAgB,UACnF,yBAAKpkB,UAAS,kDAA6CmP,IACxDpO,EAAMb,EAAO,GADhB,IAGG2gB,EAAKc,WAER,yBAAK3hB,UAAU,kBAAkBiZ,K,OCrBlC,SAASoL,KACd,MAAMpf,EAAO2F,IAAU3G,QAAQ,MAC/B,OAAKgB,GACAA,EAAK8F,UACL9F,EAAKqf,SACmB,IAAzBrf,EAAKqf,SAASxT,OAAqB,KAGrC,oCACE,wBAAI9Q,UAAU,uBACZ,wBAAIA,UAAU,kBACZ,+CAIJ,wBAAIA,UAAU,YAEViF,EAAKqf,SAAS3a,IAAK4a,GACjB,kBAAC,IAAD,CAASnhB,IAAKmhB,EAAQna,IAAK4F,GAAE,oBAAeuU,EAAQna,KAAOpK,UAAU,yBAAyBokB,gBAAgB,UAC3GG,EAAQxmB,SAjBH,KCMb,SAASymB,KACd,MAAMC,EAAW/K,KACX7J,EAAa1H,MACb,WAAErC,GAAegC,KACjBsR,EAAUqL,EAAS1gB,UAAY0gB,EAASjlB,QAAU,KAmDxD,OACE,yBAAKQ,UAAU,oBACb,wBAAIA,UAAU,6BACXoZ,GAAWA,EAAQA,QAAQsL,cApDXC,EAoDwCvL,EAnD7D,oCACE,wBAAIpZ,UAAU,kBACZ,wBAAIA,UAAU,kBACZ,0CAEF,kBAAC,GAAD,CACEwL,MAAO,CAAEoZ,UAAW,QAASC,YAAa,QAC1C3kB,MAAOykB,EAAeG,YACtB7Q,IAAK0Q,EAAevL,QAAQ2L,gBAC5B7G,KAAM,KAIV,wBAAIle,UAAU,qBAEd,wBAAIA,UAAU,kBACZ,wBAAIA,UAAU,kBACZ,8CAEF,uBAAGA,UAAU,wBACX,kBAAC0R,GAAD,CACEnE,MAAO,IAAMsC,IACb8B,IAAK/K,WAASoK,QAAQ2T,EAAe5Q,SAAU,CAAE9C,KAAM,QACvDW,SAAU,IACR,8BACE,2DAMV,wBAAI5R,UAAU,qBAEd,wBAAIA,UAAU,kBACZ,wBAAIA,UAAU,kBACZ,sCAGJ,wBAAIA,UAAU,qBAEb2kB,EAAevL,QAAQ8K,MAAMva,IAAKkX,GACjC,kBAACoD,GAAD,CAAgB7gB,IAAKyd,EAAK9iB,KAAMkb,SAAU4H,EAAK9iB,QAGjD,wBAAIiC,UAAU,wBAQV8F,KACA,wBAAI9F,UAAU,YACZ,kBAAC,IAAD,CAASglB,OAAK,EAAChV,GAAG,IAAIhQ,UAAU,yBAAyBokB,gBAAgB,UACvE,sCAMJziB,EAAOgB,gBACL,oCACE,wBAAI3C,UAAU,uBACZ,wBAAIA,UAAU,kBACZ,8CAGJ,wBAAIA,UAAU,YACZ,kBAAC,IAAD,CAASgQ,GAAG,iBAAiBhQ,UAAU,yBAAyBokB,gBAAgB,UAC9E,6DAOV,kBAACC,GAAD,QA9EiBM,MCJlB,SAASM,GAAT,GAAqD,IAAnC,WAAEC,EAAF,UAAc/d,GAAoB,EACzD,MAAM0I,EAAa1H,MACb,cAAEkR,GAAkBvR,KAC1BvC,oBAAU,KACR,GAAI2f,IAAe/d,EAAW,MAAO,OAErC,MAEMge,EAAQ9jB,KAAK+jB,MAFD,IAEO/jB,KAAKgkB,SAAuB,GAC/CC,EAAQne,EAAUD,KAAK2I,KAAciC,GAAG,gBAAkBqT,EAE1DI,EAAUC,WAAW,KACzB,MAAM1V,EAAW1C,YAAY,KACvByC,IAAa3I,KAAKC,GAAW2K,GAAG,WAAa2T,KAC/CpY,cAAcyC,GACduJ,MAEDoM,MACFH,GACH,MAAO,IAAMI,aAAaH,IACzB,CAACL,EAAY/d,EAAW0I,EAAYwJ,IA2DvC,OAAO6L,EAxDL,oCACE,4BACE,2CAEF,2BACE,kHAEF,qWAGE,6BAHF,EAQE,iCAQJ,oCACE,yBAAKllB,UAAU,aACb,wBAAIA,UAAU,yBACZ,kBAAC,IAAD,CAAiB8J,KAAMoJ,OAEzB,yBAAKlT,UAAU,eAEXmH,EAEI,oCACE,4BACE,kBAACuK,GAAD,CAAWnE,MAAO,IAAMsC,IAAc8B,IAAKxK,EAAWyK,SAAU,IAAM,kBAAC,EAAD,SAExE,2BACE,uGAEE,kBAACtE,GAAD,CAAcC,MAAO,IAAMsC,IAAc9I,KAAMI,SAOrD,sIC9ET,SAASwe,KACd,MAAMvM,EAAUM,KAAala,QAEvB2H,EAAYiS,EAAQA,QAAQ7R,WAAaX,WAASoK,QAAQoI,EAAQA,QAAQ7R,WAAY,CAAE0J,KAAM,QAAW,KAE/G,OACE,oCACE,4BAAKmI,EAAQA,QAAQrb,MACrB,kBAACiM,EAAD,CAAUE,OAAQkP,EAAQA,QAAQpO,cAClC,6BACA,kBAACia,GAAD,CAAUC,WAAY9L,EAAQA,QAAQsL,YAAavd,UAAWA,KCR7D,SAASye,KACd,MAAM9a,EAAWrC,uBACX,MAAE7D,GAAUkD,KACZsR,EAAUM,KACVzU,EAAO2F,IAAUpL,SAChBsE,EAAW+hB,GAAgBvmB,oBAAS,GAQ3C,OACE,oCAEI2F,GAAQA,EAAK8F,UACX,6BACE,4BAAK9F,EAAKlH,MACV,kBAACiM,EAAD,CAAUE,OAAQjF,EAAK+F,cACvB,8BAIN,yBAAKhL,UAAU,aACb,wBAAIA,UAAU,eACZ,4CAEF,0BACE0I,OAAO,GACPC,SAAWC,IACTA,EAAEC,iBAvBLiC,EAAShC,UACd+c,GAAa,GACbjhB,EAAMkG,EAAShC,QAAQtJ,UAyBjB,yBAAKQ,UAAU,cACb,2BAAOgJ,QAAQ,QAAQhJ,UAAU,WAC/B,qCAEF,2BACE8lB,aAAa,MACb/nB,KAAK,QACLoL,GAAG,QACHC,IAAK0B,EACL9K,UAAU,2BACVqJ,UAAQ,EACR4B,YAAa,eACbhC,KAAK,UAGT,2BAAOA,KAAK,SAASjJ,UAAU,kBAAkBR,MAAO,iBACvD4Z,EAAQpV,WAAa,kBAAC,EAAD,CAAOhE,UAAU,OAAOuB,MAAO6X,EAAQ/Y,UAC5DyD,GAAa,kBAAC,EAAD,SCvDxB,MAAMiiB,GAAgClkB,wJAAYmkB,yCAA2C,KACvFC,GAA+BpkB,wJAAYqkB,wCAA0C,KCWpF,SAASC,GAAT,GAAgE,IAA9C,SAAE9O,EAAF,WAAYxH,EAAZ,UAAwBuW,GAAqB,EACpE,MAAO9O,EAAQ+O,GAAa/mB,mBAAS,IAC/ByH,EAAOH,WAAS0f,QAAQjP,EAAStQ,KAAM,CAAEkK,KAAM,QAC/CsV,EAAalP,EAASC,QAAU1Q,WAAS0f,QAAQjP,EAASC,OAAOvQ,KAAM,CAAEkK,KAAM,QAC/E9B,EAAQkI,EAASC,OAAS,UAAY,OACtCX,E9B+ID,WACL,MAAM5O,EAAUrB,qBAAWkQ,IAC3B,OAAO5O,kBAAQ,IAAMD,EAAQ4O,WAAY,CAAC5O,EAAQ4O,a8BjJ/B6P,GA0BnB,OACE,yBAAKxmB,UAAS,sBAAiBmP,GAAS/L,IAAKiU,EAASlO,IACpD,0BAAMnJ,UAAU,eACbomB,GACC,oCACE,mCAEG/O,EAASlO,IAEX,WACD,kBAAC,IAAD,CAAM6G,GAAE,iBAAYqH,EAASoP,UAAW,8BAAOpP,EAASoP,UACvD,YAGL,kBAACrV,GAAD,CAAc7D,MAAO,IAAMsC,IAAc9I,KAAMA,KAEhDsQ,EAASpL,QACV,6BACCoL,EAASC,QAAUiP,GAClB,oCACE,0BAAMvmB,UAAU,eACd,kBAACoR,GAAD,CAAc7D,MAAO,IAAMsC,IAAc9I,KAAMwf,KAEjD,kBAACvc,EAAD,CAAUE,OAAQmN,EAASC,OAAOrL,YAInCoL,EAASC,SAAW8O,GACnB,+BAAO,4BAAI,mDAGZ/O,EAASC,QAAU8O,GAtDxB,oCACE,0BAAMzd,SAAWC,IAAQA,EAAEC,iBAAkB8N,EAAWU,EAASlO,GAAImO,KACnE,yBAAKtX,UAAU,cACb,8BACEA,UAAU,eACViL,YAAa,8BACbzL,MAAO8X,EACP9N,SAAWZ,GAAMyd,EAAUzd,EAAEc,OAAOlK,UAGxC,6BACA,4BAAI,uCACJ,kBAACwK,EAAD,CAAUE,OAAQoN,IAClB,6BACA,4BAAQrO,KAAK,SAASjJ,UAAU,mBAC9B,kBAAC,IAAD,CAAiB8J,KAAMoX,MACtB,IACD,yCC9BH,SAASwF,GAAT,GAEI,IAFkB,MAC3B5Y,EAD2B,QACpB7B,EADoB,SACXkO,EADW,KACDpT,GAClB,EACR,OACE,yBAAK/G,UAAS,sBAAiBma,IAC7B,0BAAMna,UAAU,eAAc,kBAACoR,GAAD,CAAc7D,MAAO,IAAM3G,WAASsL,WAAW,IAAIC,MAASpL,KAAMA,KAChG,wBAAI/G,UAAU,iBACX8N,GAEH,6BACA,kBAAC9D,EAAD,CAAUE,OAAQ+B,KCNjB,SAAS0a,KACd,MAAMrQ,EAAgBiB,KAChBhB,EAAYiB,KACZhB,EhCmID,WACL,MAAMzO,EAAUrB,qBAAWkQ,IAC3B,OAAO5O,kBAAQ,IAAMD,EAAQyO,QAAS,CAACzO,EAAQyO,UgCrI/BoQ,GACVlQ,EhC4ID,WACL,MAAM3O,EAAUrB,qBAAWkQ,IAC3B,OAAO5O,kBAAQ,IAAMD,EAAQ2O,YAAa,CAAC3O,EAAQ2O,cgC9I/BmQ,GACdhX,EAAa1H,MACZ2e,EAAUC,GAAeznB,mBAAS,KACnC,WAAEwG,GAAegC,KAEvB,IAAKnG,EAAOgB,eACV,OACE,2BACE,2FAiDN,OACE,oCAEI6T,GACE,oCACE,yBAAKxW,UAAU,eACb,+BACE,0BAAM8N,MAAO,uJACX,4BAAI,oEAOhB,4BACE,6CAEF,6BACEwI,EAAcxS,aAAe,kBAAC,EAAD,MAE7BwS,EAAcvS,WACXuS,EAAc9W,QAAQ+e,QAAQuE,UAAUnZ,IAAKqd,GAC9C,kBAACN,GAAD,CACEtjB,IAAK4jB,EAAa7d,GAClB2E,MAAOkZ,EAAalZ,MACpB7B,QAAS+a,EAAa/a,QACtBkO,SAAU6M,EAAa7M,SACvBpT,KAAMH,WAAS0f,QAAQU,EAAajgB,KAAM,CAAEkK,KAAM,WAKtDqF,EAAcvS,WAA8C,IAAjCuS,EAAc9W,QAAQsR,QAC/C,2BACE,4BAAI,sDAIV,4BACE,yCAEF,6BAEEhL,IACE,oCAnFN,oCACE,4BAAI,8CACJ,8BAAU9F,UAAU,eAAeR,MAAOsnB,EAAUtd,SAAWZ,GAAMme,EAAYne,EAAEc,OAAOlK,SAC1F,2BAAO2J,GAAG,oBAAoBnJ,UAAU,wBACtC,2HA7BoB,OAqCtB,4BACEA,UAAU,uBACViJ,KAAK,SACLY,QAAS,KApBb6M,EAAYoQ,GAAUthB,KAAK,IAAMuhB,EAAY,MAqBzC9T,WAnB2B6T,EAASG,OAAOnW,QAtBvB,KA2CpB,kBAAC,IAAD,CAAiBhH,KAAMoX,MACtB,IACD,oCAEF,uBAAGlhB,UAAU,QACX,4BACE,uaAIE,kCAMN,8BAmDQuW,EAAUzS,aAAe,kBAAC,EAAD,MAEzByS,EAAUxS,WAAawS,EAAU/W,QAAQ+e,QAAQuE,UAAUnZ,IAAK0N,GAC9D,kBAAC8O,GAAD,CAAU/iB,IAAKiU,EAASlO,GAAIkO,SAAUA,EAAUxH,WAAYA,EAAYuW,WAAW,MAKzF,oCACE,2BACE,4BAAI,8EC9HX,SAASc,GAAT,GAAsC,IAArB,QAAE3C,GAAkB,EAC1C,OACE,oCACE,4BAAKA,EAAQxmB,MACb,6BACA,kBAACiM,EAAD,CAAUE,OAAQqa,EAAQ4C,QCShC,SAASC,KAAuB,IAAD,EAC7B,MAAMC,EAAezc,IACf0c,EAAkB5N,MAClB,OAAE3U,EAAF,WAAUe,GAAegC,KAK/B,GLrBK,WACL,MAAMjF,EAAQoF,KACRsf,EAAiBvf,kBACrB,IAAM6V,UACJ,IAAKhb,EAAO,OACZ/B,QAAQ6P,IAAR,uCAA4CoV,GAA5C,SACA,IACE,MAAMyB,QAAYC,MAAMC,EAAU,CAChCC,KAAM,YAEF1b,QAAgBub,EAAII,OACtB3b,IAAYga,IACdnlB,QAAQ6P,IAAR,0BAA+B1E,IAEjC,MAAOrD,GAEP,YADA9H,QAAQ6P,IAAR,kCAAuC/H,EAAvC,MAGF9H,QAAQ6P,IAAR,4CAEA,MAAMnQ,EAAO,IAAIwC,SAEjBxC,EAAKqH,OAAO,QAAShF,SAEflB,EAAOS,IAAIkB,KAAK,qBAAsB9C,IAE9C,CAACqC,IAGH0C,oBAAU,KACR,IAAKwgB,GAA+B,MAAO,OAE3C,MAAMjW,EAAW1C,YAAY,IAAMma,EAAexB,IAlCrB,KAmC7B,MAAO,IAAM1Y,cAAcyC,IAC1B,CAACyX,IKhBJM,GACApQ,KAEI4P,EAAavjB,YAAa,OAAO,kBAAC,EAAD,MACrC,GAAIujB,EAAarjB,UAAW,OAAO,kBAAC,EAAD,CAAOzC,MAAO8lB,EAAahnB,UAE9D,MAAM4E,EAAOoiB,EAAa7nB,QAC1B,IAAKyF,EAAK8F,SAAU,OAAO,kBAAC,IAAD,CAAUiF,GAAG,WACxC,MAAM8X,EAAWhiB,IACjB,GAAIgiB,GAAYR,EAAgBxjB,YAAa,OAAO,kBAAC,EAAD,MACpD,MAAMsV,EAAUkO,EAAgBvjB,UAAYujB,EAAgB9nB,QAAU,KAWtE,OACE,oCACE,yBAAKQ,UAAU,gBACb,kBAAC,IAAD,CAAMgQ,GAAG,IAAIhQ,UAAU,gBACpBoZ,EAAUA,EAAQA,QAAQrb,KAAO,QAEpC,yBAAKiC,UAAU,kBACdoZ,GACC,0BAAMpZ,UAAU,mBACboZ,EAAQrb,KACR,IACAqb,EAAQhE,SAGZgE,GAAW,kBAACxP,EAAD,CAAcC,QAAS,IAAM9E,MACzC,kBAACuE,EAAD,OAGF,yBAAKtJ,UAAU,cACb,kBAAC,GAAD,MACA,8BACGoZ,GAAW,kBAAC,IAAD,CAAO4L,OAAK,EAACliB,KAAK,IAAIilB,UAAWpC,OAC1CmC,GAAYR,EAAgBtjB,YAAc,kBAAC,IAAD,CAAOghB,OAAK,EAACliB,KAAK,IAAIilB,UAAWnC,KAFhF,UAKI3gB,EAAKqf,gBALT,aAKI,EAAe3a,IAAK4a,GAClB,kBAAC,IAAD,CACEnhB,IAAKmhB,EAAQna,IACb4a,OAAK,EACLliB,KAAI,oBAAeyhB,EAAQna,MAE3B,kBAAC8c,GAAD,CAAS3C,QAASA,MAKxB,kBAAC,IAAD,CAAOS,OAAK,EAACliB,KAAK,iBAAiBilB,UAAWpB,KAE7CvN,GAAWA,EAAQA,QAAQsL,aAC1B,kBAAC,IAAD,CAAO5hB,KAAK,kBAAkBgT,OAAQ,QAAC,MAAE4N,GAAH,QAhD5BzK,KAClB,MAAM0L,EAAiBvL,EACjByH,EAAO8D,EAAevL,QAAQ8K,MAAMlM,KAAMmM,GAAMA,EAAEpmB,OAASkb,GACjE,OAAK4H,EAGE,kBAAC+C,GAAD,CAAU/C,KAAMA,EAAMO,SAAUuD,EAAeT,MAAMjL,KAFnD,8CA4CoD+O,CAAWtE,EAAMM,OAAO/K,gBC5ElF,SAASgP,KACd,MAAOplB,GAASyB,MACTwJ,EAAOoa,GAAY5oB,mBAAS,KAC5B2M,EAASkc,GAAc7oB,mBAAS,KAChC6a,EAAUiO,GAAe9oB,mBAAS,WACnCmX,EnC2ID,WACL,MAAM1O,EAAUrB,qBAAWkQ,IAC3B,OAAO5O,kBAAQ,IAAMD,EAAQ0O,OAAQ,CAAC1O,EAAQ0O,SmC7I/B4R,GAiBf,OACE,oCACE,4BAAI,gDACJ,0BAAM1f,SAAWC,IAAQA,EAAEC,iBAlBf,MAAO,IAAD,EAEfvK,OAAOgW,QAAQ,0BACpB,UAAA3S,EAAOgB,sBAAP,SAAuBW,KAAK,kBAAmB,CAC7CT,QAAOiL,QAAO7B,UAASkO,aACtB3U,KAAK,KACN0iB,EAAS,IACTC,EAAW,IACXC,EAAY,WACZ3R,MACC/Q,MAAOpF,IACRM,EAAYN,OAOiCgoB,KAC3C,yBAAKtoB,UAAU,cACb,2BAAOA,UAAU,eAAeiL,YAAa,eAAUzL,MAAOsO,EAAOtE,SAAWZ,GAAMsf,EAAStf,EAAEc,OAAOlK,UAE1G,yBAAKQ,UAAU,cACb,8BAAUA,UAAU,eAAeiL,YAAa,iBAAYzL,MAAOyM,EAASzC,SAAWZ,GAAMuf,EAAWvf,EAAEc,OAAOlK,UAEnH,yBAAKQ,UAAU,cACb,2BAAOgJ,QAAQ,WAAU,wCACzB,4BAAQhJ,UAAU,eAAeR,MAAO2a,EAAU3Q,SAAWZ,GAAMwf,EAAYxf,EAAEc,OAAOlK,QACtF,4BAAQA,MAAM,UAAU,uBACxB,4BAAQA,MAAM,WAAW,2BACzB,4BAAQA,MAAM,WAAW,yBACzB,4BAAQA,MAAM,aAAa,2BAC3B,4BAAQA,MAAM,WAAW,0BACzB,4BAAQA,MAAM,QAAQ,sBACtB,4BAAQA,MAAM,QAAQ,wBAG1B,6BACA,4BAAI,uCACJ,kBAACknB,GAAD,CAAc5Y,MAAOA,EAAO7B,QAASA,EAASkO,SAAUA,EAAUpT,KAAMH,WAASsL,WAAW,IAAIC,QAChG,6BACA,4BAAQlJ,KAAK,SAASjJ,UAAU,mBAC9B,kBAAC,IAAD,CAAiB8J,KAAMoX,MACtB,IACD,yCCtDH,SAASqH,KACd,MAAMjS,EAAgBiB,KACtB,OACE,oCACE,4BAAI,6CACFjB,EAAcxS,aAAe,kBAAC,EAAD,MAC7BwS,EAAcvS,WAAauS,EAAc9W,QAAQmK,IAAK6e,GACtD,kBAAC9B,GAAD,CACEtjB,IAAKolB,EAAIrf,GACT2E,MAAO0a,EAAI1a,MACX7B,QAASuc,EAAIvc,QACbkO,SAAUqO,EAAIrO,SACdpT,KAAMH,WAAS0f,QAAQkC,EAAIzhB,KAAM,CAAEkK,KAAM,WAG7C,kBAACgX,GAAD,OCdC,SAASQ,KACd,MAAMlS,EAAYiB,MACX2P,EAAMuB,GAAWppB,mBAAS,IAC1BqpB,EAASC,GAActpB,mBAAS,KAChCupB,EAAeC,GAAoBxpB,mBAAwB,MAC5DypB,EAAWC,cAEXvZ,EADQ,IAAIwZ,gBAAgBF,EAASG,QACtB9R,IAAI,SACnB/L,EAAUC,cAShB,GAPA/F,oBAAU,KACJkK,IAAWoZ,IACbC,EAAiBrZ,GACjBiZ,EAAQ,KAET,CAACjZ,EAAQoZ,IAERtS,EAAUzS,YACZ,OAAO,kBAAC,EAAD,MAET,GAAIyS,EAAUvS,UACZ,OAAO,kBAAC,EAAD,CAAOzC,MAAOgV,EAAUlW,UAGjC,MAAM8oB,EAAc5S,EAAU/W,QAAQiQ,OAAQ2Z,IAAOA,EAAE9R,UAAY7H,GAAU2Z,EAAE3C,UAAYhX,IACrF4Z,EAAW9S,EAAU/W,QAAQiQ,OAAQ2Z,GAAMA,EAAE9R,UAAY7H,GAAU2Z,EAAE3C,UAAYhX,IAEjFI,EAAa,IAAMjJ,WAASsL,WAAW,IAAIC,MAC3CmX,EAAWjoB,KAAKgR,KAAKgX,EAASvY,OAAS6X,GAEvCY,EAAUF,EAASvY,OAASqW,EAAOwB,EACnCa,EAAYnoB,KAAK4S,IAAI,EAAGsV,EAAUZ,GAClCc,EAAQJ,EAAS9K,MAAMiL,EAAWD,GAASzG,UAEjD,OACE,oCACE,4BAAI,yCACJ,4BAAI,4CACFqG,EAAYxf,IAAKyf,GAAM,kBAACjD,GAAD,CAAU/iB,IAAKgmB,EAAEjgB,GAAIkO,SAAU+R,EAAGvZ,WAAYA,EAAYuW,WAAS,KACnE,IAAvB+C,EAAYrY,QAAgB,4BAAI,gDAElC,wBAAI9Q,UAAU,QAAO,wCACpByP,GACC,oCACE,2BACE,wFAGKA,GAHL,cAEE,kCAIF,4BACExG,KAAK,SACLjJ,UAAU,sCACV6J,QAAS,IAAMwB,EAAQuB,KAAK,MAE5B,uCAMN6c,EAAM9f,IAAKyf,GACX,kBAACjD,GAAD,CAAU/iB,IAAKgmB,EAAEjgB,GAAIkO,SAAU+R,EAAGvZ,WAAYA,EAAYuW,WAAS,KAC/C,IAApBiD,EAASvY,QAAgB,4BAAI,4CAE9BwY,EAAW,GAEV,yBAAKtpB,UAAU,QACb,wBAAIA,UAAU,cACZ,wBAAIA,UAAS,oBAAwB,IAATmnB,EAAa,WAAa,KAElDA,EAAO,EACF,4BAAQnnB,UAAU,YAAYiJ,KAAK,SAASY,QAAS,IAAM6e,EAAQvB,EAAO,IAA1E,QACA,0BAAMnnB,UAAU,aAAhB,SAGR0pB,MAAM3b,KAAK,CAAE+C,OAAQwY,GAAY,CAAClL,EAAGrN,IACpC,wBAAI3N,IAAK2N,EAAG/Q,UAAS,oBAAe+Q,IAAMoW,EAAO,SAAW,KAC1D,4BAAQnnB,UAAU,YAAYiJ,KAAK,SAASY,QAAS,IAAM6e,EAAQ3X,IAAKA,EAAI,KAGhF,wBAAI/Q,UAAS,oBAAemnB,IAASmC,EAAW,EAAI,WAAa,KAE5DnC,EAAOmC,EAAW,EACd,4BAAQtpB,UAAU,YAAYiJ,KAAK,SAASY,QAAS,IAAM6e,EAAQvB,EAAO,IAA1E,QACA,0BAAMnnB,UAAU,aAAhB,UAKX,yBAAKA,UAAU,YACb,yBAAKA,UAAU,YACb,4BAAQA,UAAU,8CAA8CR,MAAOmpB,EAASnf,SAAWZ,GAAMggB,EAAW3nB,OAAOyT,SAAS9L,EAAEc,OAAOlK,MAAO,MAC1I,sCACA,sCACA,uCACA,gDCvGT,SAASmqB,KACd,OACE,oCACE,kBAAClB,GAAD,OCCC,SAASmB,KACd,MAAO/mB,EAAO+B,GAASN,MAChBQ,EAAU+kB,GAAevqB,mBAAS,IAEzC,OAAIuD,EAAc,kBAAC,IAAD,CAAUmN,GAAG,yBAG7B,yBAAKhQ,UAAU,aACb,4BAAI,qCACJ,0BAAM2I,SAAWC,IAAQA,EAAEC,iBAAkBjE,EAAME,KACjD,yBAAK9E,UAAU,cACb,2BAAOgJ,QAAQ,cAAa,yDAC5B,2BAAOhJ,UAAU,eAAemJ,GAAG,aAAa2c,aAAa,MAAMtc,SAAWZ,GAAMihB,EAAYjhB,EAAEc,OAAOlK,UAE3G,4BAAQyJ,KAAK,SAASjJ,UAAU,mBAC9B,kBAAC,IAAD,CAAiB8J,KAAMggB,MACtB,IACD,uCCjBH,SAASC,KACd,MAAO,CAAC,CAAEhlB,GAAUT,KACd+G,EAAUC,cAKhB,OACE,oCACE,yBAAKtL,UAAU,mCACb,kBAAC,IAAD,CAAMgQ,GAAG,uBAAuBhQ,UAAU,gBACxC,oDAEF,wBAAIA,UAAU,sBACZ,wBAAIA,UAAU,YACZ,kBAAC,IAAD,CAAMgQ,GAAG,uBAAuBhQ,UAAU,YACxC,0CAGJ,wBAAIA,UAAU,YACZ,kBAAC,IAAD,CAAMgQ,GAAG,qCAAqChQ,UAAU,YACtD,+CAIN,kBAAC4J,EAAD,CAAcC,QAAS,KArB3B9E,SACAsG,EAAQuB,KAAK,iCAqBT,kBAACtD,EAAD,QCjBD,MAAMhF,GAAW,IAAM0lB,EAAa,sBAE3C,SAASC,KACP,MAAOpnB,GAASyB,KAChB,OAAKzB,EAGH,oCACE,kBAACgU,GAAD,CAA8BhU,MAAOA,GACnC,kBAACknB,GAAD,MACA,yBAAK/pB,UAAU,aACb,kBAAC,IAAD,KACE,kBAAC,IAAD,CAAO8C,KAAK,qCAAqCilB,UAAWQ,KAC5D,kBAAC,IAAD,CAAOzlB,KAAK,uBAAuBilB,UAAW4B,SATrC,kBAAC,IAAD,CAAU3Z,GAAG,+BCAlC1R,OAAO4rB,KAAOA,OAGV5rB,OAAOyqB,SAASoB,OAAOC,SAAS,UAAU9rB,OAAOyqB,SAASsB,QAAQ,yBAItE/rB,OAAOgsB,iBAAiB,qBAAuB7gB,IAExCnL,OAAOyqB,SAASoB,OAAOC,SAAS,UAEnC9rB,OAAO4b,MAAP,sDAA4DzQ,EAAM8gB,QAAU,cAA5E,QAIJC,IAAS1U,OACP,oCACE,kBAAC3W,EAAD,KACE,kBAAC,IAAMsrB,SAAP,CAAgBC,SAAU,kBAAC,EAAD,OACxB,kBAAC,IAAD,MACA,kBAAC,IAAD,KACE,kBAAC,IAAD,KACE,kBAAC,IAAD,CAAO5nB,KAAK,uBAAuBilB,UDLxC,WACL,OAAKpmB,EAAOgB,eASV,oCACE,kBAAC,IAAD,MACA,kBAAC,IAAD,KACE,kBAAC,IAAD,KACE,kBAAC,IAAD,CAAOG,KAAK,6BAA6BilB,UAAW6B,KACpD,kBAAC,IAAD,CAAO9mB,KAAK,uBAAuBilB,UAAWkC,QAZlD,oCACE,2BAAG,+FCEC,kBAAC,IAAD,CAAOnnB,KAAK,SAASilB,U3CvB1B,WACL,OACE,kBAAC3iB,EAAD,KACE,kBAACiB,EAAD,KACE,kBAAC0P,GAAD,W2CoBI,kBAAC,IAAD,CAAOgS,URmDZ,WACL,OACE,kBAAC3iB,EAAD,KACE,kBAACkU,GAAD,KACE,kBAAC8N,GAAD,gBQjDNxnB,SAAS+qB,eAAe,W","file":"static/js/main.754307c8.chunk.js","sourcesContent":["/*eslint-disable*/module.exports={messages:{\"(in minutes)\":\"(in minuti)\",\"<0>Be careful!Once the contest starts it cannot be stopped!\":\"<0>Attenzione! Una volta che la gara inizia non è più possibile fermarla!\",\"Admin\":\"Admin\",\"Admin communication token\":\"Token di admin per la comunicazione\",\"Admin token\":\"Admin token\",\"Announcements\":\"Annunci\",\"Answer\":\"Rispondi\",\"Answer with Markdown\":\"Rispondi con Markdown\",\"Answered\":\"Con risposta\",\"Are you sure?\":\"Sei sicuro?\",\"Ask a question\":\"Fai una domanda\",\"Automatic start disabled\":\"Avvio automatico disabilitato\",\"Automatic start updated\":\"Avvio automatico impostato\",\"C\":\"C\",\"C#\":\"C#\",\"C++\":\"C++\",\"Cancel\":\"Annulla\",\"Cannot reach the communication server, your browser will try again automatically. The info shown are just a local copy that may be outdated.\":\"Impossibile raggiungere il server delle comunicazioni, il tuo browser riproverà a connettersi automaticamente. Le informazioni visualizzate sono una copia locale che potrebbe non essere aggiornata.\",\"Cannot submit for this input.\":\"Impossibile sottomettere per questo input.\",\"Category\":\"Categoria\",\"Category filter\":\"Filtra categoria\",\"Change output\":\"Modifica output\",\"Change source\":\"Modifica sorgente\",\"Clear\":\"Annulla\",\"Close\":\"Chiudi\",\"CodeBlocks project\":\"Progetto CodeBlocks\",\"Communication\":\"Comunicazioni\",\"Communication system\":\"Sistema di comunicazione\",\"Compiled Java binary\":\"Binario Java compilato\",\"Compiled Java class\":\"Classe Java compilata\",\"Compiled Python object\":\"Oggetto Python compilato\",\"Compiled binary\":\"Binario compilato\",\"Compiled file\":\"File compilato\",\"Compressed archive\":\"Archivio compresso\",\"Content\":\"Contenuto\",\"Contest ended at\":\"La gara è finita il\",\"Contest ended for everyone at\":\"La gara è finita per tutti il\",\"Contest started at\":\"La gara è iniziata il\",\"Contest started successfully\":\"Gara avviata con successo\",\"Contest status\":\"Stato della gara\",\"Contestants\":\"Partecipanti\",\"Creating final zip...\":\"Creazione zip finale...\",\"Danger (red)\":\"Danger (rosso)\",\"Danger zone\":\"Zona pericolosa\",\"Dark (grey)\":\"Dark (grigio)\",\"Dart\":\"Dart\",\"Date\":\"Data\",\"Details\":\"Dettagli\",\"Detected language:\":\"Linguaggio rilevato:\",\"Dev-Cpp project\":\"Progetto di Dev-Cpp\",\"Download\":\"Download\",\"Download contest results\":\"Scarica i risultati della gara\",\"Download input\":\"Scarica input\",\"Download results\":\"Scarica risultati\",\"Error\":\"Errore\",\"Extra material\":\"Materiale extra\",\"Extra time\":\"Tempo aggiuntivo\",\"Extra time successfully updated\":\"Tempo aggiuntivo modificato con successo\",\"Extra time successfully updated for the user\":\"Tempo aggiuntivo dello studente modificato con successo\",\"File\":\"File\",\"File:\":\"File:\",\"Free Pascal Lazarus file\":\"File di Free Pascal Lazarus\",\"Free Pascal Lazarus project\":\"Progetto di Free Pascal Lazarus\",\"Free Pascal Lazarus session file\":\"File di sessione di Free Pascal Lazarus\",\"Go\":\"Go\",\"IP\":\"IP\",\"Info (teal)\":\"Info (azzurro)\",\"Input file\":\"File di input\",\"Issue last detected\":\"Ultimo errore rilevato\",\"Java\":\"Java\",\"Javascript\":\"Javascript\",\"Javascript (HTML)\":\"Javascript (HTML)\",\"Kotlin\":\"Kotlin\",\"Last submission:\":\"Ultima sottoposizione\",\"Last update:\":\"Ultima modifica:\",\"Level\":\"Livello\",\"Loading...\":\"Caricamento...\",\"Log in\":\"Accedi\",\"Login\":\"Accedi\",\"Logout\":\"Logout\",\"Logs\":\"Logs\",\"Message\":\"Messaggio\",\"Message filter\":\"Filtra messaggio\",\"Name\":\"Nome\",\"Network problem. Reconnecting...\":\"Problema di rete. Riconnessione in corso...\",\"New announcement\":\"Nuovo annuncio\",\"New announcement: {0}\":[\"Nuovo annuncio: \",[\"0\"]],\"No announcements yet.\":\"Ancora nessun annuncio.\",\"No issue detected\":\"Nessun problema rilevato\",\"No messages yet\":\"Ancora nessun messaggio\",\"No new questions\":\"Nessuna nuova domanda\",\"No questions\":\"Nessuna domanda\",\"Not answered\":\"Senza risposta\",\"Not answered yet.\":\"Ancora senza risposta.\",\"On the left side of this page you can find the tasks, click on any one to open it.\":\"Nella parte sinistra di questa pagina trovi la lista dei problemi, premi sul nome di un problema per aprirlo.\",\"Output file\":\"File di output\",\"Output file info\":\"Info sull'output\",\"Output file...\":\"File di output...\",\"PDF file\":\"File PDF\",\"PHP\":\"PHP\",\"Pascal\":\"Pascal\",\"Please login\":\"Esegui l'accesso\",\"Please select the contest file...\":\"Seleziona il pacchetto di gara...\",\"Preview\":\"Anteprima\",\"Primary (blue)\":\"Primary (blu)\",\"Processing...\":\"Caricamento...\",\"Publish\":\"Pubblica\",\"Python\":\"Python\",\"Question answered!\":\"Nuova risposta!\",\"Questions\":\"Domande\",\"Questions and Announcements\":\"Domande e annunci\",\"RESET\":\"RESET\",\"Remaining time\":\"Tempo rimanente\",\"Remaining time for some participant\":\"Tempo rimanente per alcuni partecipanti\",\"Request input\":\"Richiedi input\",\"Request new input\":\"Richiedi nuovo input\",\"Requesting...\":\"Generazione...\",\"Ruby\":\"Ruby\",\"Rust\":\"Rust\",\"Scheduled start at<0/>. This page will reload automatically.\":\"Inizio previsto alle <0/>. Questa pagina si ricaricherà automaticamente.\",\"Score\":\"Punteggio\",\"Secondary (grey)\":\"Secondary (grigio)\",\"Select a file with an extension\":\"Seleziona un file con un'estensione\",\"Send\":\"Invia\",\"Set\":\"Imposta\",\"Set extra time\":\"Imposta tempo aggiuntivo\",\"Severity\":\"Severità\",\"Showing only the questions of<0>{filter}\":[\"Visualizzate solo le domande di <0>\",[\"filter\"],\"\"],\"Size:\":\"Dimensione\",\"Source file\":\"Sorgente\",\"Source file info\":\"Informazioni sorgente\",\"Source file...\":\"Sorgente...\",\"Start\":\"Avvia\",\"Start automatically the contest\":\"Avvia automaticamente la gara\",\"Start the contest immediately\":\"Avvia la gara adesso\",\"Submission\":\"Sottoposizione\",\"Submission for\":\"Sottoposizione per\",\"Submission for input\":\"Sottoposizione per l'input\",\"Submit\":\"Invia\",\"Success (green)\":\"Success (verde)\",\"Surname\":\"Cognome\",\"System status\":\"Stato del sistema\",\"Task not found\":\"Problema non trovato\",\"Tasks\":\"Problemi\",\"Terry Communications\":\"Terry Communications\",\"Text file\":\"File di testo\",\"The answer to one of your questions got updated\":\"La risposta ad una tua domanda è stata aggiornata\",\"The communication system is enabled for this contest.\":\"Il sistema di comunicazione è attivo per questa gara.\",\"The communication system is not available for this contest.\":\"Il sistema di comunicazione non è disponibile per questa gara.\",\"The contest has not started yet!\":\"La gara non è ancora iniziata!\",\"The contest has not started yet! Refresh this page when the contest has started to be able to login.\":\"La gara non è ancora iniziata! Per connetterti ricarica questa pagina quando la gara sarà iniziata.\",\"The contest is finished\":\"La gara è terminata\",\"The contest is finished, you must now download the zip containing all the contest data. This zip must then be sent to the committee.\":\"La gara è terminata, devi adesso scaricare l'archivio zip contenente tutti i dati della gara. Questo zip dovrà essere poi spedito al comitato.\",\"The contest will start automatically at\":\"La gara inizierà automaticamente alle\",\"The contest would start\":\"La gara inizierebbe\",\"The extension cannot contain spaces\":\"L'estensione del file non deve contenere spazi\",\"The file you selected has been detected as an executable. Please select the corresponding source file instead.\":\"Il file che hai selezionato sembra essere un eseguibile. Seleziona il corrispondente file sorgente.\",\"The file you selected is not allowed, please select the actual source file of your program. The detected file type is\":\"Il file che hai selezionato non è consentito, seleziona il sorgente del tuo programma. Il tipo di file rilevato è:\",\"The file you selected is too big ({size} bytes > {MAX_SOURCE_SIZE} bytes)\":[\"Il file che hai selezionato è troppo grande (\",[\"size\"],\" bytes > \",[\"MAX_SOURCE_SIZE\"],\" bytes)\"],\"The provided date cannot be used as start time for the contest. Please set a date in the future.\":\"La data inserita non può essere usata come data di inizio della gara. Inserisci una data nel futuro.\",\"The question must be at least {MIN_QUESTION_LENGTH} characters long.\":[\"La domanda deve essere lunga almeno \",[\"MIN_QUESTION_LENGTH\"],\" caratteri.\"],\"The question will be sent to the staff, who will analyze it and try to answer as quickly as possible. You will receive a notification (if you enabled them) when the answer is available. Please be patient if the answer lags to arrive, and try to be respectful.<0/>You can ask for clarifications about the tasks, but the staff takes the authority to decide whether to answer or not.\":\"La tua domanda verrà inviata allo staff che la analizzerà e cercherà di rispondere più velocemente possibile. Riceverai una notifica (se le hai abilitate) quando la risposta sarà disponibile. Cerca di essere paziente se la risposta ritarda ad arrivare, e cerca di mantenere un tono rispettoso.<0/>Puoi chiedere chiarimenti sui problemi, ma lo staff si riserva l'autorità di decidere a cosa rispondere.\",\"Title\":\"Titolo\",\"Token\":\"Token\",\"Typescript\":\"Typescript\",\"Updated announcement: {0}\":[\"Annuncio aggiornato: \",[\"0\"]],\"Upload\":\"Carica\",\"Upload solution\":\"Carica soluzione\",\"Usage guide\":\"Guida\",\"Visit\":\"Visita\",\"Visual Studio project\":\"Progetto di Visual Studio\",\"VisualBasic\":\"VisualBasic\",\"Warning (yellow)\":\"Warning (giallo)\",\"XML file\":\"File XML\",\"You can set an extra time for all the contestants in case of problems that afflicts everyone. This action<0>is loggedand must be justified to the committee.\":\"Puoi impostare del tempo aggiuntivo per tutti i partecipanti in caso di problemi tecnici che hanno colpito tutti. Questa azione <0>viene registrata e va giustificata al comitato.\",\"You can submit<0>as many times as you want, but you will have a different input every time. When you make a submission remember to send the correct source file and the output corresponding to the last generated input. When you have uploaded your files<1>remember to submitthem by clicking the green button!\":\"Puoi inviare <0>quante sottoposizioni vuoi, ma riceverai file di input ogni volta diversi. Quando fai una sottoposizione ricorda di inviare il file sorgente corretto e il file di output relativo all'ultimo input generato. Quando carichi i due file <1>ricorda di inviarli premendo il pulsante verde!\",\"You have not submitted yet.\":\"Non hai ancora sottomesso nulla.\",\"You have to be logged in to ask a question.\":\"Devi effettuare l'accesso per poter fare domande.\",\"You selected a file with an unknown extension. This submission may be invalidated if this file is not the true source of the program that generated the output file. If you think you selected the wrong file, please change it before submitting.\":\"Hai selezionato un file con un'estensione sconosciuta. Questa sottoposizione potrebbe essere invalidata se non si tratta del vero sorgente del programma che ha generato il file di output. Se pensi di aver selezionato il file sbagliato cambialo prima di inviare la sottoposizione.\",\"You selected an empty file\":\"Hai selezionato un file vuoto\",\"Your score\":\"Punteggio\",\"correct\":\"corretto\",\"set extra time\":\"imposta tempo aggiuntivo\",\"show log\":\"mostra log\",\"show users\":\"mostra utenti\",\"to the scheduled start\":\"all'inizio della gara\",\"view all submissions\":\"tutte le sottoposizioni\",\"view details\":\"dettagli\",\"wrong\":\"errato\",\"{0, plural, =0 {No extra time set} one {Contest duration was extended by # minute} other {Contest duration was extended by # minutes}}\":[[\"0\",\"plural\",{0:\"La gara non è stata estesa\",one:[\"La gara è stata estesa di \",\"#\",\" minuto\"],other:[\"La gara è stata estesa di \",\"#\",\" minuti\"]}]],\"{0, plural, =0 {No user has extra time} one {# user has extra time} other {# users have extra time}}\":[[\"0\",\"plural\",{0:\"Nessuno studente ha tempo aggiuntivo\",one:[\"#\",\" studente ha tempo aggiuntivo\"],other:[\"#\",\" studenti hanno tempo aggiuntivo\"]}]],\"{0, plural, one {plus # extra minute for some user} other {plus # extra minutes for some user}}\":[[\"0\",\"plural\",{one:[\"più \",\"#\",\" minuto aggiuntivi per alcuni studenti\"],other:[\"più \",\"#\",\" minuti aggiuntivi per alcuni studenti\"]}]],\"{0, select, parsed {parsed} missing {missing} invalid {invalid} other {?}}\":[[\"0\",\"select\",{parsed:\"trovato\",missing:\"mancante\",invalid:\"non valido\",other:\"?\"}]]}};","/*eslint-disable*/module.exports={messages:{\"(in minutes)\":\"(in minutes)\",\"<0>Be careful!Once the contest starts it cannot be stopped!\":\"<0>Be careful! Once the contest starts it cannot be stopped!\",\"Admin\":\"Admin\",\"Admin communication token\":\"Admin communication token\",\"Admin token\":\"Admin token\",\"Announcements\":\"Announcements\",\"Answer\":\"Answer\",\"Answer with Markdown\":\"Answer with Markdown\",\"Answered\":\"Answered\",\"Are you sure?\":\"Are you sure?\",\"Ask a question\":\"Ask a question\",\"Automatic start disabled\":\"Automatic start disabled\",\"Automatic start updated\":\"Automatic start updated\",\"C\":\"C\",\"C#\":\"C#\",\"C++\":\"C++\",\"Cancel\":\"Cancel\",\"Cannot reach the communication server, your browser will try again automatically. The info shown are just a local copy that may be outdated.\":\"Cannot reach the communication server, your browser will try again automatically. The info shown are just a local copy that may be outdated.\",\"Cannot submit for this input.\":\"Cannot submit for this input.\",\"Category\":\"Category\",\"Category filter\":\"Category filter\",\"Change output\":\"Change output\",\"Change source\":\"Change source\",\"Clear\":\"Clear\",\"Close\":\"Close\",\"CodeBlocks project\":\"CodeBlocks project\",\"Communication\":\"Communication\",\"Communication system\":\"Communication system\",\"Compiled Java binary\":\"Compiled Java binary\",\"Compiled Java class\":\"Compiled Java class\",\"Compiled Python object\":\"Compiled Python object\",\"Compiled binary\":\"Compiled binary\",\"Compiled file\":\"Compiled file\",\"Compressed archive\":\"Compressed archive\",\"Content\":\"Content\",\"Contest ended at\":\"Contest ended at\",\"Contest ended for everyone at\":\"Contest ended for everyone at\",\"Contest started at\":\"Contest started at\",\"Contest started successfully\":\"Contest started successfully\",\"Contest status\":\"Contest status\",\"Contestants\":\"Contestants\",\"Creating final zip...\":\"Creating final zip...\",\"Danger (red)\":\"Danger (red)\",\"Danger zone\":\"Danger zone\",\"Dark (grey)\":\"Dark (grey)\",\"Dart\":\"Dart\",\"Date\":\"Date\",\"Details\":\"Details\",\"Detected language:\":\"Detected language:\",\"Dev-Cpp project\":\"Dev-Cpp project\",\"Download\":\"Download\",\"Download contest results\":\"Download contest results\",\"Download input\":\"Download input\",\"Download results\":\"Download results\",\"Error\":\"Error\",\"Extra material\":\"Extra material\",\"Extra time\":\"Extra time\",\"Extra time successfully updated\":\"Extra time successfully updated\",\"Extra time successfully updated for the user\":\"Extra time successfully updated for the user\",\"File\":\"File\",\"File:\":\"File:\",\"Free Pascal Lazarus file\":\"Free Pascal Lazarus file\",\"Free Pascal Lazarus project\":\"Free Pascal Lazarus project\",\"Free Pascal Lazarus session file\":\"Free Pascal Lazarus session file\",\"Go\":\"Go\",\"IP\":\"IP\",\"Info (teal)\":\"Info (teal)\",\"Input file\":\"Input file\",\"Issue last detected\":\"Issue last detected\",\"Java\":\"Java\",\"Javascript\":\"Javascript\",\"Javascript (HTML)\":\"Javascript (HTML)\",\"Kotlin\":\"Kotlin\",\"Last submission:\":\"Last submission:\",\"Last update:\":\"Last update:\",\"Level\":\"Level\",\"Loading...\":\"Loading...\",\"Log in\":\"Log in\",\"Login\":\"Login\",\"Logout\":\"Logout\",\"Logs\":\"Logs\",\"Message\":\"Message\",\"Message filter\":\"Message filter\",\"Name\":\"Name\",\"Network problem. Reconnecting...\":\"Network problem. Reconnecting...\",\"New announcement\":\"New announcement\",\"New announcement: {0}\":[\"New announcement: \",[\"0\"]],\"No announcements yet.\":\"No announcements yet.\",\"No issue detected\":\"No issue detected\",\"No messages yet\":\"No messages yet\",\"No new questions\":\"No new questions\",\"No questions\":\"No questions\",\"Not answered\":\"Not answered\",\"Not answered yet.\":\"Not answered yet.\",\"On the left side of this page you can find the tasks, click on any one to open it.\":\"On the left side of this page you can find the tasks, click on any one to open it.\",\"Output file\":\"Output file\",\"Output file info\":\"Output file info\",\"Output file...\":\"Output file...\",\"PDF file\":\"PDF file\",\"PHP\":\"PHP\",\"Pascal\":\"Pascal\",\"Please login\":\"Please login\",\"Please select the contest file...\":\"Please select the contest file...\",\"Preview\":\"Preview\",\"Primary (blue)\":\"Primary (blue)\",\"Processing...\":\"Processing...\",\"Publish\":\"Publish\",\"Python\":\"Python\",\"Question answered!\":\"Question answered!\",\"Questions\":\"Questions\",\"Questions and Announcements\":\"Questions and Announcements\",\"RESET\":\"RESET\",\"Remaining time\":\"Remaining time\",\"Remaining time for some participant\":\"Remaining time for some participant\",\"Request input\":\"Request input\",\"Request new input\":\"Request new input\",\"Requesting...\":\"Requesting...\",\"Ruby\":\"Ruby\",\"Rust\":\"Rust\",\"Scheduled start at<0/>. This page will reload automatically.\":\"Scheduled start at <0/>. This page will reload automatically.\",\"Score\":\"Score\",\"Secondary (grey)\":\"Secondary (grey)\",\"Select a file with an extension\":\"Select a file with an extension\",\"Send\":\"Send\",\"Set\":\"Set\",\"Set extra time\":\"Set extra time\",\"Severity\":\"Severity\",\"Showing only the questions of<0>{filter}\":[\"Showing only the questions of <0>\",[\"filter\"],\"\"],\"Size:\":\"Size:\",\"Source file\":\"Source file\",\"Source file info\":\"Source file info\",\"Source file...\":\"Source file...\",\"Start\":\"Start\",\"Start automatically the contest\":\"Start automatically the contest\",\"Start the contest immediately\":\"Start the contest immediately\",\"Submission\":\"Submission\",\"Submission for\":\"Submission for\",\"Submission for input\":\"Submission for input\",\"Submit\":\"Submit\",\"Success (green)\":\"Success (green)\",\"Surname\":\"Surname\",\"System status\":\"System status\",\"Task not found\":\"Task not found\",\"Tasks\":\"Tasks\",\"Terry Communications\":\"Terry Communications\",\"Text file\":\"Text file\",\"The answer to one of your questions got updated\":\"The answer to one of your questions got updated\",\"The communication system is enabled for this contest.\":\"The communication system is enabled for this contest.\",\"The communication system is not available for this contest.\":\"The communication system is not available for this contest.\",\"The contest has not started yet!\":\"The contest has not started yet!\",\"The contest has not started yet! Refresh this page when the contest has started to be able to login.\":\"The contest has not started yet! Refresh this page when the contest has started to be able to login.\",\"The contest is finished\":\"The contest is finished\",\"The contest is finished, you must now download the zip containing all the contest data. This zip must then be sent to the committee.\":\"The contest is finished, you must now download the zip containing all the contest data. This zip must then be sent to the committee.\",\"The contest will start automatically at\":\"The contest will start automatically at\",\"The contest would start\":\"The contest would start\",\"The extension cannot contain spaces\":\"The extension cannot contain spaces\",\"The file you selected has been detected as an executable. Please select the corresponding source file instead.\":\"The file you selected has been detected as an executable. Please select the corresponding source file instead.\",\"The file you selected is not allowed, please select the actual source file of your program. The detected file type is\":\"The file you selected is not allowed, please select the actual source file of your program. The detected file type is\",\"The file you selected is too big ({size} bytes > {MAX_SOURCE_SIZE} bytes)\":[\"The file you selected is too big (\",[\"size\"],\" bytes > \",[\"MAX_SOURCE_SIZE\"],\" bytes)\"],\"The provided date cannot be used as start time for the contest. Please set a date in the future.\":\"The provided date cannot be used as start time for the contest. Please set a date in the future.\",\"The question must be at least {MIN_QUESTION_LENGTH} characters long.\":[\"The question must be at least \",[\"MIN_QUESTION_LENGTH\"],\" characters long.\"],\"The question will be sent to the staff, who will analyze it and try to answer as quickly as possible. You will receive a notification (if you enabled them) when the answer is available. Please be patient if the answer lags to arrive, and try to be respectful.<0/>You can ask for clarifications about the tasks, but the staff takes the authority to decide whether to answer or not.\":\"The question will be sent to the staff, who will analyze it and try to answer as quickly as possible. You will receive a notification (if you enabled them) when the answer is available. Please be patient if the answer lags to arrive, and try to be respectful.<0/>You can ask for clarifications about the tasks, but the staff takes the authority to decide whether to answer or not.\",\"Title\":\"Title\",\"Token\":\"Token\",\"Typescript\":\"Typescript\",\"Updated announcement: {0}\":[\"Updated announcement: \",[\"0\"]],\"Upload\":\"Upload\",\"Upload solution\":\"Upload solution\",\"Usage guide\":\"Usage guide\",\"Visit\":\"Visit\",\"Visual Studio project\":\"Visual Studio project\",\"VisualBasic\":\"VisualBasic\",\"Warning (yellow)\":\"Warning (yellow)\",\"XML file\":\"XML file\",\"You can set an extra time for all the contestants in case of problems that afflicts everyone. This action<0>is loggedand must be justified to the committee.\":\"You can set an extra time for all the contestants in case of problems that afflicts everyone. This action <0>is logged and must be justified to the committee.\",\"You can submit<0>as many times as you want, but you will have a different input every time. When you make a submission remember to send the correct source file and the output corresponding to the last generated input. When you have uploaded your files<1>remember to submitthem by clicking the green button!\":\"You can submit <0>as many times as you want, but you will have a different input every time. When you make a submission remember to send the correct source file and the output corresponding to the last generated input. When you have uploaded your files <1>remember to submit them by clicking the green button!\",\"You have not submitted yet.\":\"You have not submitted yet.\",\"You have to be logged in to ask a question.\":\"You have to be logged in to ask a question.\",\"You selected a file with an unknown extension. This submission may be invalidated if this file is not the true source of the program that generated the output file. If you think you selected the wrong file, please change it before submitting.\":\"You selected a file with an unknown extension. This submission may be invalidated if this file is not the true source of the program that generated the output file. If you think you selected the wrong file, please change it before submitting.\",\"You selected an empty file\":\"You selected an empty file\",\"Your score\":\"Your score\",\"correct\":\"correct\",\"set extra time\":\"set extra time\",\"show log\":\"show log\",\"show users\":\"show users\",\"to the scheduled start\":\"to the scheduled start\",\"view all submissions\":\"view all submissions\",\"view details\":\"view details\",\"wrong\":\"wrong\",\"{0, plural, =0 {No extra time set} one {Contest duration was extended by # minute} other {Contest duration was extended by # minutes}}\":[[\"0\",\"plural\",{0:\"No extra time set\",one:[\"Contest duration was extended by \",\"#\",\" minute\"],other:[\"Contest duration was extended by \",\"#\",\" minutes\"]}]],\"{0, plural, =0 {No user has extra time} one {# user has extra time} other {# users have extra time}}\":[[\"0\",\"plural\",{0:\"No user has extra time\",one:[\"#\",\" user has extra time\"],other:[\"#\",\" users have extra time\"]}]],\"{0, plural, one {plus # extra minute for some user} other {plus # extra minutes for some user}}\":[[\"0\",\"plural\",{one:[\"plus \",\"#\",\" extra minute for some user\"],other:[\"plus \",\"#\",\" extra minutes for some user\"]}]],\"{0, select, parsed {parsed} missing {missing} invalid {invalid} other {?}}\":[[\"0\",\"select\",{parsed:\"parsed\",missing:\"missing\",invalid:\"invalid\",other:\"?\"}]]}};","import React, { useState, ReactNode } from \"react\";\nimport { i18n } from \"@lingui/core\";\nimport { I18nProvider } from \"@lingui/react\";\nimport { messages as messagesIt } from \"./locales/it/messages\";\nimport { messages as messagesEn } from \"./locales/en/messages\";\n\nimport \"src/i18n.css\";\n\nrequire(\"moment/locale/it\");\n\nexport const supportedLanguages = [\n { lang: \"en\", name: \"English\" },\n { lang: \"it\", name: \"Italiano\" },\n];\n\ni18n.load(\"it\", messagesIt);\ni18n.load(\"en\", messagesEn);\n\nconst selectedLanguageKey = \"selectedLanguage\";\n\nconst getDefaultLanguage = () => {\n const storedLanguage = window.localStorage.getItem(selectedLanguageKey);\n if (storedLanguage) return storedLanguage;\n return (\n navigator.languages ? navigator.languages[0] : navigator.language\n ).substring(0, 2);\n};\n\nconst storeDefaultLanguage = (newLang: string) => {\n window.localStorage.setItem(selectedLanguageKey, newLang);\n};\n\nexport const defaultLanguage = getDefaultLanguage();\ni18n.activate(defaultLanguage);\n\nexport type LanguageContextType = {\n lang: string;\n changeLanguage: (lang: string) => void;\n};\n\nexport const LanguageContext = React.createContext({\n lang: defaultLanguage,\n changeLanguage: () => {},\n} as LanguageContextType);\n\nexport function TransProvider({ children }: { children: ReactNode }) {\n const [lang, setLanguage] = useState(defaultLanguage);\n\n const changeLanguage = (newLang: string) => {\n storeDefaultLanguage(newLang);\n setLanguage(newLang);\n i18n.activate(newLang);\n // when the language changes set the attribute so that bootstrap components can be translated via css\n document.getElementsByTagName(\"html\")[0].setAttribute(\"lang\", newLang);\n };\n\n return (\n \n \n {children}\n \n \n );\n}\n","import React from \"react\";\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport \"src/components/Loading.css\";\n\nexport function Loading() {\n return (\n
\n
\n
\n
\n
\n
\n );\n}\n","/* eslint-disable no-console */\nimport { toast } from \"react-toastify\";\nimport { AxiosError } from \"axios\";\n\nimport \"react-toastify/dist/ReactToastify.min.css\";\n\nexport function colorFromScore(score: number, maxScore: number) {\n if (score === maxScore) return \"success\";\n if (score === 0) return \"danger\";\n return \"warning\";\n}\n\nexport function errorToString(error: AxiosError) {\n if (error.response) {\n if (error.response.data) {\n if (typeof error.response.data === \"string\") {\n if (error.response.data.startsWith(\"\")) {\n // e.g. nginx errors (fields: status, statusText)\n return `${error.response.status} ${error.response.statusText}`;\n }\n // application errors (client)\n return error.response.data;\n } if (\"message\" in error.response.data) {\n // application errors (server)\n return error.response.data.message;\n }\n }\n } else {\n // e.g. TypeError (fields: message, stack)\n return error.message;\n }\n // unknown error\n return null;\n}\n\nexport function notifyError(error: AxiosError) {\n const message = errorToString(error);\n if (message) {\n toast.error(message);\n } else {\n console.error(\"unhandled notifyError parameter!\", error);\n }\n}\n\nexport function round(value: number, maxDigits = 2) {\n if (!Number.isInteger(maxDigits) || maxDigits < 0) {\n throw new Error(\"Invalid number of digits\");\n }\n const factor = 10 ** maxDigits;\n return Math.round(value * factor) / factor;\n}\n","import { Trans } from \"@lingui/macro\";\nimport { AxiosError } from \"axios\";\nimport React from \"react\";\nimport { errorToString } from \"src/utils\";\n\ntype Props = {\n boxed?: boolean;\n cause?: string | AxiosError;\n className?: string;\n};\n\nexport function Error({ cause: message, boxed, className }: Props) {\n let messageStr;\n if (typeof message === \"string\") {\n messageStr = message;\n } else if (typeof message === \"object\") {\n messageStr = errorToString(message);\n } else {\n messageStr = null;\n }\n\n const error = (\n <>\n \n Error\n \n {messageStr && (\n <>\n :\n {\" \"}\n {messageStr}\n \n )}\n \n );\n\n if (boxed) {\n return (\n
\n {error}\n
\n );\n }\n return {error};\n}\n\nError.defaultProps = {\n cause: undefined,\n boxed: true,\n className: \"\",\n};\n","import axios from \"axios\";\n\nclass Client {\n apiBaseURI = process.env.REACT_APP_API_BASE_URI || \"/api/\";\n\n filesBaseURI = process.env.REACT_APP_FILES_BASE_URI || \"/files/\";\n\n statementsBaseURI = process.env.REACT_APP_STATEMENTS_BASE_URI || \"/files/\";\n\n communicationsBaseURI = process.env.REACT_APP_COMMUNICATIONS_BASE_URI || null;\n\n api = axios.create({ baseURL: this.apiBaseURI });\n\n files = axios.create({ baseURL: this.filesBaseURI });\n\n statements = axios.create({ baseURL: this.statementsBaseURI });\n\n communications = this.communicationsBaseURI ? axios.create({ baseURL: this.communicationsBaseURI }) : null;\n\n adminApi(token: string, path: string, options: { [key: string]: string | undefined } = {}) {\n const data = new FormData();\n Object.entries(options).forEach(([key, value]) => {\n if (value) data.set(key, value);\n });\n data.set(\"admin_token\", token);\n\n return this.api.post(`/admin/${path}`, data);\n }\n}\n\nexport const client = new Client();\n","import { AxiosError } from \"axios\";\n\nexport enum LoadableState {\n Loading,\n Ready,\n Error,\n}\n\nexport class Loadable {\n private state = LoadableState.Loading;\n\n private value_?: T;\n\n private error_?: E;\n\n private constructor(value?: T, error?: E) {\n if (value !== undefined) {\n this.state = LoadableState.Ready;\n this.value_ = value;\n } else if (error !== undefined) {\n this.state = LoadableState.Error;\n this.error_ = error;\n } else {\n this.state = LoadableState.Loading;\n }\n }\n\n static loading() {\n return new Loadable();\n }\n\n static of(value: T_) {\n return new Loadable(value);\n }\n\n static error(error: E_) {\n return new Loadable(undefined, error);\n }\n\n isLoading() {\n return this.state === LoadableState.Loading;\n }\n\n isReady() {\n return this.state === LoadableState.Ready;\n }\n\n isError() {\n return this.state === LoadableState.Error;\n }\n\n value(): T {\n if (this.value_ === undefined) throw new Error(`Cannot get value, the state is ${this.state}`);\n return this.value_;\n }\n\n error(): E {\n if (this.error_ === undefined) throw new Error(`Cannot get error, the state is ${this.state}`);\n return this.error_;\n }\n\n valueOr(def: T2): T | T2 {\n if (this.value_ === undefined) return def;\n return this.value_;\n }\n}\n","import { useState } from \"react\";\n\n/**\n * ```\n * const [dep, trigger] = useTriggerUpdate();\n *\n * useEffect(() => {\n * // ...\n * }, [dep]);\n *\n * // call trigger() to trigger the useEffect update\n * ```\n */\nexport function useTriggerUpdate() {\n const [count, setCount] = useState(0);\n return [count, () => setCount(count + 1)] as const;\n}\n","import { useCallback } from \"react\";\nimport { useCookies } from \"react-cookie\";\n\nexport function useLogin(cookieName: string) {\n const [cookies, setCookie, removeCookie] = useCookies([cookieName]);\n const login = useCallback(\n (newToken: string) => {\n setCookie(cookieName, newToken, { path: \"/\" });\n },\n [cookieName, setCookie],\n );\n const logout = useCallback(\n () => {\n removeCookie(cookieName, { path: \"/\" });\n },\n [cookieName, removeCookie],\n );\n\n return [cookies[cookieName] || null, login, logout] as const;\n}\n","import React, {\n useState, useEffect, createContext, ReactNode,\n} from \"react\";\nimport { client } from \"src/TerryClient\";\nimport { Loadable } from \"src/Loadable\";\nimport { useTriggerUpdate } from \"src/hooks/useTriggerUpdate\";\nimport { notifyError } from \"src/utils\";\nimport { Pack } from \"src/types/admin\";\n\ntype PackContextType = {\n pack: Loadable;\n reloadPack: () => void;\n};\n\nexport const PackContext = createContext({\n pack: Loadable.loading(),\n reloadPack: () => {},\n});\n\nexport function PackContextProvider({ children }: { children: ReactNode }) {\n const [pack, setPack] = useState>(Loadable.loading());\n const [packUpdate, reloadPack] = useTriggerUpdate();\n\n useEffect(() => {\n client\n .api(\"/admin/pack_status\")\n .then((response) => {\n setPack(Loadable.of(response.data as Pack));\n })\n .catch((response) => {\n notifyError(response);\n setPack(Loadable.error(response));\n });\n }, [packUpdate]);\n\n return {children};\n}\n","import React, {\n useState, ReactNode, useEffect, useContext, useMemo,\n} from \"react\";\nimport { DateTime, Duration } from \"luxon\";\nimport { AxiosResponse, AxiosError } from \"axios\";\nimport { client } from \"src/TerryClient\";\nimport { notifyError } from \"src/utils\";\nimport { Loadable } from \"src/Loadable\";\nimport { useTriggerUpdate } from \"src/hooks/useTriggerUpdate\";\nimport { useLogin } from \"src/hooks/useLogin\";\nimport { StatusData } from \"src/types/admin\";\nimport { PackContext } from \"./PackContext\";\n\ntype ContextData = {\n token: string | null;\n serverTimeSkew: Loadable;\n status: Loadable;\n};\n\nexport type StartContestCommand = \"reset\" | \"now\" | DateTime;\n\nexport type ContextActions = {\n isLoggedIn: () => boolean;\n login: (token: string) => void;\n logout: () => void;\n startContest: (startTime: StartContestCommand) => Promise;\n resetContest: () => Promise;\n setExtraTime: (extraTime: number, userToken?: string) => Promise;\n uploadPack: (file: File) => void;\n};\n\ntype AdminContextType = {\n data: ContextData;\n actions: ContextActions;\n};\n\nexport const AdminContext = React.createContext({\n data: {\n token: null,\n serverTimeSkew: Loadable.loading(),\n status: Loadable.loading(),\n },\n actions: {\n isLoggedIn: () => false,\n login: () => {},\n logout: () => {},\n startContest: () => Promise.reject(),\n resetContest: () => Promise.reject(),\n setExtraTime: () => Promise.reject(),\n uploadPack: () => {},\n },\n});\n\ntype AdminContextProps = {\n children: ReactNode;\n};\n\nexport function AdminContextProvider({ children }: AdminContextProps) {\n const cookieName = \"adminToken\";\n\n const [token, login, logout] = useLogin(cookieName);\n const [serverTimeSkew, setServerTimeSkew] = useState>(Loadable.loading());\n const [status, setStatus] = useState>(Loadable.loading());\n const [statusUpdate, triggerStatusUpdate] = useTriggerUpdate();\n const { reloadPack } = useContext(PackContext);\n\n const startContest = (startTime: StartContestCommand) => {\n if (!token) throw new Error(\"You are not logged in\");\n\n const when = typeof startTime === \"string\" ? startTime : startTime.toUTC().toISO();\n return client\n .adminApi(token, \"/start\", { start_time: when })\n .then(() => {\n triggerStatusUpdate();\n })\n .catch((response) => {\n notifyError(response);\n throw response;\n });\n };\n const resetContest = () => {\n if (!token) throw new Error(\"You are not logged in\");\n return client\n .adminApi(token, \"/drop_contest\")\n .then(() => {\n logout();\n reloadPack();\n })\n .catch((response) => {\n notifyError(response);\n });\n };\n const setExtraTime = (extraTime: number, userToken?: string) => {\n if (!token) throw new Error(\"You are not logged in\");\n const options = {\n extra_time: extraTime.toString(),\n token: userToken,\n };\n if (options.token === undefined) delete options.token;\n return client\n .adminApi(token, \"/set_extra_time\", options)\n .then(() => {\n triggerStatusUpdate();\n })\n .catch((response) => {\n notifyError(response);\n });\n };\n const uploadPack = (file: File) => {\n const data = new FormData();\n\n data.append(\"file\", file);\n\n return client.api\n .post(\"/admin/upload_pack\", data)\n .then(() => {\n reloadPack();\n })\n .catch((response) => {\n notifyError(response);\n });\n };\n\n // handle the login\n useEffect(() => {\n if (!token) {\n setServerTimeSkew(Loadable.loading());\n setStatus(Loadable.loading());\n return;\n }\n client\n .adminApi(token, \"/status\")\n .then((response: AxiosResponse) => {\n const serverDate = DateTime.fromHTTP(response.headers.date);\n const skew = DateTime.local().diff(serverDate);\n setServerTimeSkew(Loadable.of(skew));\n setStatus(Loadable.of(response.data));\n })\n .catch((response: AxiosError) => {\n notifyError(response);\n logout();\n setServerTimeSkew(Loadable.loading());\n setStatus(Loadable.loading());\n });\n }, [token, statusUpdate, logout]);\n\n const isLoggedIn = () => !status.isLoading();\n return (\n \n {children}\n \n );\n}\n\nexport function useActions() {\n const context = useContext(AdminContext);\n return useMemo(() => context.actions, [context.actions]);\n}\n\nexport function useToken() {\n const context = useContext(AdminContext);\n return useMemo(() => context.data.token, [context.data.token]);\n}\n\nexport function useStatus() {\n const context = useContext(AdminContext);\n return useMemo(() => context.data.status, [context.data.status]);\n}\n\nexport function useServerTime() {\n const context = useContext(AdminContext);\n\n return useMemo(() => () => DateTime.local().minus(context.data.serverTimeSkew.valueOr(Duration.fromMillis(0))), [\n context.data.serverTimeSkew,\n ]);\n}\n","import React, { createRef } from \"react\";\nimport { Trans, t } from \"@lingui/macro\";\nimport { useActions } from \"./AdminContext\";\n\nexport function UploadPackView() {\n const inputRef = createRef();\n const { uploadPack } = useActions();\n\n const doUpload = () => {\n const file = inputRef.current?.files?.[0];\n if (!file) return;\n uploadPack(file);\n };\n\n return (\n
\n

\n Admin\n

\n
\n

\n Please select the contest file...\n

\n {\n e.preventDefault();\n doUpload();\n }}\n >\n
\n \n \n
\n \n \n
\n );\n}\n","import React, { useContext } from \"react\";\nimport { LanguageContext, supportedLanguages } from \"./i18n\";\n\nexport function LanguageSwitcher() {\n const languageContext = useContext(LanguageContext);\n\n const changeLanguage = (event: React.ChangeEvent) => {\n const lang = event.target.value;\n languageContext.changeLanguage(lang);\n };\n\n return (\n \n {supportedLanguages.map(({ lang, name }) => (\n \n ))}\n \n );\n}\n","import { faSignOutAlt } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { Trans } from \"@lingui/macro\";\nimport React from \"react\";\n\ntype Props = {\n onClick: () => void;\n};\n\nexport function LogoutButton({ onClick }: Props) {\n return (\n {\n e.preventDefault();\n onClick();\n }}\n >\n \n {\" \"}\n Logout\n \n );\n}\n","import React from \"react\";\nimport RemarkMathPlugin from \"remark-math\";\nimport { BlockMath, InlineMath } from \"react-katex\";\nimport ReactMarkdown from \"react-markdown\";\n\nimport \"katex/dist/katex.min.css\";\n\ntype Props = {\n source: string;\n baseUri?: string;\n};\n\nexport function Markdown({ baseUri, source }: Props) {\n const transformUri = (url: string) => {\n if (!baseUri) return url;\n return baseUri + url;\n };\n\n return (\n {value},\n inlineMath: ({ value }: { value: string }) => {value},\n }}\n />\n );\n}\n\nMarkdown.defaultProps = {\n baseUri: undefined,\n};\n","import { useContext, useMemo } from \"react\";\nimport { PackContext } from \"src/admin/PackContext\";\n\nexport function usePack() {\n const context = useContext(PackContext);\n return useMemo(() => context.pack, [context.pack]);\n}\n","import React from \"react\";\nimport { Trans, t } from \"@lingui/macro\";\nimport { Markdown } from \"src/components/Markdown\";\nimport { useActions } from \"./AdminContext\";\nimport { usePack } from \"./hooks/usePack\";\n\nexport function AdminLoginView() {\n const tokenRef = React.createRef();\n const { login } = useActions();\n const pack = usePack().value();\n\n const doLogin = () => {\n if (tokenRef.current) {\n login(tokenRef.current.value);\n }\n };\n\n if (!pack.uploaded) {\n throw new Error(\"AdminLoginView requires the pack to be uploaded\");\n }\n\n return (\n
\n

{pack.name}

\n \n
\n

\n Log in\n

\n {\n e.preventDefault();\n doLogin();\n }}\n >\n
\n \n \n
\n \n \n
\n );\n}\n","import React from \"react\";\nimport ReactModal from \"react-modal\";\nimport { useHistory } from \"react-router-dom\";\n\n// eslint-disable-next-line import/no-extraneous-dependencies\nimport \"src/components/Modal.css\";\n\ntype Props = {\n contentLabel: string;\n returnUrl: string;\n children: React.ReactNode;\n};\n\nexport function Modal({ contentLabel, returnUrl, children }: Props) {\n const history = useHistory();\n\n return (\n history.push(returnUrl)}\n >\n {children}\n \n );\n}\n\nReactModal.setAppElement(\"#root\");\n","import { useEffect } from \"react\";\nimport { useTriggerUpdate } from \"./useTriggerUpdate\";\n\nexport function useAutoRefresh(rate: number) {\n const [update, trigger] = useTriggerUpdate();\n useEffect(() => {\n const timer = setInterval(() => trigger(), rate);\n return () => clearInterval(timer);\n }, [rate, trigger, update]);\n}\n","import React from \"react\";\nimport { DateTime } from \"luxon\";\nimport moment from \"moment\";\nimport { i18n } from \"@lingui/core\";\nimport { useAutoRefresh } from \"src/hooks/useAutoRefresh\";\n\ntype AbsoluteDateProps = {\n date: DateTime;\n clock: () => DateTime;\n};\n\nexport function AbsoluteDate({ date, clock }: AbsoluteDateProps) {\n useAutoRefresh(30000);\n const lang = i18n.locale || \"en\";\n const localDate = date.setLocale(lang).toLocal();\n const localMoment = moment(date.toISO()).locale(lang);\n return (\n \n {localDate.toLocaleString(DateTime.DATETIME_SHORT_WITH_SECONDS)}\n \n );\n}\n","/* eslint-disable camelcase */\n\nexport enum LogLevel {\n DEBUG = \"DEBUG\",\n INFO = \"INFO\",\n WARNING = \"WARNING\",\n ERROR = \"ERROR\",\n}\n\nexport type LogEntry = {\n date: string;\n category: string;\n level: LogLevel;\n message: string;\n};\n\nexport type LogsData = {\n items: LogEntry[];\n};\n\nexport type LogsOptions = {\n start_date: string;\n end_date: string;\n level: LogLevel;\n category?: string;\n};\n\nexport type UserIp = {\n first_date: string;\n ip: string;\n};\n\nexport type UserEntry = {\n name: string;\n surname: string;\n token: string;\n extra_time: number;\n ip: UserIp[];\n};\n\nexport type UsersData = {\n items: UserEntry[];\n};\n\nexport type StatusData = {\n loaded: boolean;\n start_time?: string;\n end_time?: string;\n extra_time?: number;\n};\n\nexport type ZipData = {\n path: string;\n};\n\nexport type Section = {\n name: string;\n url: string;\n page: string;\n};\n\nexport type Pack =\n | { uploaded: false }\n | {\n uploaded: true;\n deletable: boolean;\n name: string;\n description: string;\n sections?: Section[];\n };\n","import { AxiosResponse } from \"axios\";\nimport { useState, useEffect } from \"react\";\nimport { Loadable } from \"src/Loadable\";\nimport { client } from \"src/TerryClient\";\nimport { notifyError } from \"src/utils\";\nimport { useTriggerUpdate } from \"src/hooks/useTriggerUpdate\";\nimport { useToken } from \"src/admin/AdminContext\";\nimport { LogsOptions, LogLevel, LogsData } from \"src/types/admin\";\n\nexport const defaultLogsOptions: LogsOptions = {\n start_date: \"2000-01-01T00:00:00.000Z\",\n end_date: \"2030-01-01T00:00:00.000Z\",\n level: LogLevel.WARNING,\n};\n\nexport type ReloadLogs = (options?: LogsOptions) => void;\n\nexport function useLogs(initialOptions?: LogsOptions): [Loadable, ReloadLogs] {\n const token = useToken();\n const [logs, setLogs] = useState>(Loadable.loading());\n const [logsOptions, setLogsOptions] = useState(initialOptions || defaultLogsOptions);\n const [logsUpdate, triggerLogsUpdate] = useTriggerUpdate();\n\n useEffect(() => {\n if (!token) return;\n const options = { ...logsOptions };\n if (!options.category) delete options.category;\n client\n .adminApi(token, \"/log\", options)\n .then((response: AxiosResponse) => {\n setLogs(Loadable.of(response.data as LogsData));\n })\n .catch((response) => {\n notifyError(response);\n setLogs(Loadable.error(response));\n });\n }, [token, logsUpdate, logsOptions]);\n\n const reloadLogs = (options?: LogsOptions) => {\n if (options) setLogsOptions(options);\n triggerLogsUpdate();\n };\n\n return [logs, reloadLogs];\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Object } from \"core-js\";\nimport { Link } from \"react-router-dom\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTimes } from \"@fortawesome/free-solid-svg-icons\";\nimport { DateTime } from \"luxon\";\nimport { Trans, t } from \"@lingui/macro\";\nimport { Modal } from \"src/components/Modal\";\nimport \"./AdminLogsView.css\";\nimport { AbsoluteDate } from \"src/components/AbsoluteDate\";\nimport { LogLevel, LogsOptions, LogEntry } from \"src/types/admin\";\nimport { Error } from \"src/components/Error\";\nimport { useServerTime } from \"./AdminContext\";\nimport { useLogs, defaultLogsOptions } from \"./hooks/useLogs\";\n\nconst LOG_LEVELS: { [level in LogLevel]: { color: string } } = {\n DEBUG: {\n color: \"secondary\",\n },\n INFO: {\n color: \"info\",\n },\n WARNING: {\n color: \"warning\",\n },\n ERROR: {\n color: \"danger\",\n },\n};\n\nexport function AdminLogsView() {\n const [level, setLevel] = useState(LogLevel.INFO);\n const [category, setCategory] = useState(\"\");\n const [filter, setFilter] = useState(\"\");\n const [options, setOptions] = useState({ ...defaultLogsOptions, level, category });\n\n const [logs, reloadLogs] = useLogs(options);\n const serverTime = useServerTime();\n\n // auto reload the logs\n useEffect(() => {\n const LOG_REFRESH_INTERVAL = 5000;\n const interval = setInterval(() => {\n reloadLogs();\n }, LOG_REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }, [reloadLogs]);\n\n // react to option changes asking the context to reload the logs only when the options really changed\n useEffect(() => {\n const newOptions: LogsOptions = { ...options, level, category };\n if (newOptions.level !== options.level || newOptions.category !== options.category) {\n setOptions(newOptions);\n reloadLogs(newOptions);\n }\n }, [level, category, options, reloadLogs]);\n\n const filterLog = (log: LogEntry) => {\n if (!filter) return true;\n return log.message.toLowerCase().indexOf(filter.toLowerCase()) !== -1;\n };\n\n const renderLogs = () => {\n if (logs.isLoading()) {\n return (\n \n \n Loading...\n \n \n );\n }\n if (logs.isReady()) {\n const items = logs.value().items.filter((l) => filterLog(l));\n if (items.length === 0) {\n return (\n \n \n No messages yet\n \n \n );\n }\n return items.map((log, i) => (\n // eslint-disable-next-line react/no-array-index-key\n \n \n serverTime()} date={DateTime.fromISO(log.date, { zone: \"utc\" })} />\n \n \n \n \n \n \n \n \n
{log.message}
\n \n \n ));\n }\n return (\n \n \n \n \n \n );\n };\n\n return (\n \n
\n
\n Logs\n
\n \n ×\n \n
\n
\n
\n
\n {Object.entries(LOG_LEVELS).map(([lvl, obj]) => (\n setLevel(lvl)}\n >\n {lvl}\n \n ))}\n
\n setCategory(e.target.value)}\n />\n setFilter(e.target.value)}\n />\n
\n
\n \n \n \n \n \n \n \n \n \n {renderLogs()}\n
\n Date\n \n Category\n \n Level\n \n Message\n
\n
\n
\n
\n \n \n {\" \"}\n Close\n \n
\n
\n );\n}\n","import { DateTime } from \"luxon\";\nimport moment from \"moment\";\nimport React from \"react\";\nimport { useAutoRefresh } from \"src/hooks/useAutoRefresh\";\nimport { i18n } from \"@lingui/core\";\n\ntype RelativeDateProps = {\n date: DateTime;\n clock: () => DateTime;\n};\n\nexport function RelativeDate({ date, clock }: RelativeDateProps) {\n useAutoRefresh(30000);\n const lang = i18n.locale || \"en\";\n const localDate = date.setLocale(lang).toLocal();\n const localMoment = moment(date.toISO()).locale(lang);\n return (\n \n {localMoment.from(moment(clock().toISO()))}\n \n );\n}\n","import { AxiosResponse } from \"axios\";\nimport { useState, useEffect } from \"react\";\nimport { Loadable } from \"src/Loadable\";\nimport { client } from \"src/TerryClient\";\nimport { useToken } from \"src/admin/AdminContext\";\nimport { notifyError } from \"src/utils\";\nimport { useTriggerUpdate } from \"src/hooks/useTriggerUpdate\";\nimport { UsersData } from \"src/types/admin\";\n\nexport type ReloadUsers = () => void;\n\nexport function useUsers(): [Loadable, ReloadUsers] {\n const token = useToken();\n const [users, setUsers] = useState>(Loadable.loading());\n const [usersUpdate, triggerUsersUpdate] = useTriggerUpdate();\n\n useEffect(() => {\n if (!token) return;\n client\n .adminApi(token, \"/user_list\")\n .then((response: AxiosResponse) => {\n setUsers(Loadable.of(response.data as UsersData));\n })\n .catch((response) => {\n notifyError(response);\n setUsers(Loadable.error(response));\n });\n }, [token, usersUpdate]);\n\n const reloadUsers = () => {\n triggerUsersUpdate();\n };\n\n return [users, reloadUsers];\n}\n","import React from \"react\";\nimport { DateTime } from \"luxon\";\nimport { useAutoRefresh } from \"src/hooks/useAutoRefresh\";\n\ntype CountdownProps = {\n end: DateTime;\n clock: () => DateTime;\n afterEnd: () => React.ReactNode;\n};\n\nexport function Countdown({ end, clock, afterEnd }: CountdownProps) {\n useAutoRefresh(1000);\n const ended = end.diff(clock()).as(\"milliseconds\") < 0;\n return <>{ended ? afterEnd() : end.diff(clock()).toFormat(\"hh:mm:ss\")};\n}\n","import {\n faClock, faDownload, faPlay, faTrash,\n} from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport DateTimePicker from \"react-datetime-picker\";\nimport { Plural, Trans, t } from \"@lingui/macro\";\nimport { DateTime } from \"luxon\";\nimport React, { useEffect, useState } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\nimport { AbsoluteDate } from \"src/components/AbsoluteDate\";\nimport { RelativeDate } from \"src/components/RelativeDate\";\nimport { Countdown } from \"src/components/Countdown\";\nimport { i18n } from \"@lingui/core\";\nimport { Loadable } from \"src/Loadable\";\nimport { UsersData } from \"src/types/admin\";\nimport {\n useActions, useServerTime, useStatus,\n} from \"./AdminContext\";\n\ntype NotStartedProps = {\n startTime: DateTime | null;\n}\n\n// round a date to the next 15-th of an hour\nconst roundDate = (date: DateTime) => date.set({ minute: Math.ceil(date.minute / 15) * 15, second: 0 });\n\nfunction ContestNotStarted({ startTime }: NotStartedProps) {\n const { startContest } = useActions();\n const serverTime = useServerTime();\n const defaultDate = startTime || roundDate(DateTime.fromJSDate(new Date()));\n const [scheduledStartTime, setScheduledDate] = useState(defaultDate);\n const [dateValid, setDateValid] = useState(true);\n\n useEffect(() => {\n const check = () => {\n if (!scheduledStartTime) {\n setDateValid(false);\n return;\n }\n let isValid = true;\n if (serverTime() > scheduledStartTime) {\n isValid = false;\n }\n setDateValid(isValid);\n };\n check();\n const interval = setInterval(() => {\n check();\n }, 1000);\n return () => clearInterval(interval);\n }, [scheduledStartTime, serverTime]);\n\n return (\n <>\n
    \n
  • \n The contest has not started yet!\n
  • \n {startTime && (\n <>\n
  • \n The contest will start automatically at\n {\" \"}\n serverTime()} date={startTime} />\n {\" \"}\n startContest(\"reset\").then(() => toast.success(t`Automatic start disabled`))}\n className=\"btn btn-danger btn-sm\"\n >\n \n \n
  • \n
  • \n serverTime()} end={startTime} afterEnd={() => null} />\n {\" \"}\n to the scheduled start\n .\n
  • \n \n )}\n
\n
\n {\n e.preventDefault();\n if (scheduledStartTime) {\n startContest(scheduledStartTime).then(() => toast.success(t`Automatic start updated`));\n }\n }}\n >\n

\n Start automatically the contest\n

\n setScheduledDate(date ? DateTime.fromJSDate(date) : null)}\n locale={i18n.locale}\n value={scheduledStartTime?.toJSDate()}\n minDate={new Date()}\n />\n {\" \"}\n \n {scheduledStartTime && dateValid && (\n

\n The contest would start\n {\" \"}\n serverTime()} date={scheduledStartTime} />\n .\n

\n )}\n {!dateValid && (\n

\n \n The provided date cannot be used as start time for the contest.\n Please set a date in the future.\n \n

\n )}\n \n
\n {\n e.preventDefault();\n startContest(\"now\").then(() => toast.success(t`Contest started successfully`));\n }}\n >\n

\n Start the contest immediately\n

\n \n \n
\n

\n \n Be careful!\n Once the contest starts it cannot be stopped!\n \n

\n \n );\n}\n\ntype StartedProps = {\n startTime: DateTime;\n endTime: DateTime;\n usersWithExtraTime: number;\n maxExtraTime: number;\n}\n\nfunction ContestStarted({\n startTime, endTime, usersWithExtraTime, maxExtraTime,\n}: StartedProps) {\n const serverTime = useServerTime();\n const running = serverTime() < endTime;\n const runningForExtras = !running && serverTime() < endTime.plus({ seconds: maxExtraTime });\n return (\n <>\n
    \n
  • \n Contest started at\n {\" \"}\n serverTime()} date={startTime} />\n
  • \n {running && (\n
  • \n Remaining time\n {\" \"}\n serverTime()} end={endTime} afterEnd={() => \"00:00:00\"} />\n {!!usersWithExtraTime && (\n <>\n {\" \"}\n (\n \n \n \n )\n \n )}\n .\n
  • \n ) }\n {runningForExtras\n && (\n
  • \n Remaining time for some participant\n {\" \"}\n serverTime()} end={endTime.plus({ seconds: maxExtraTime })} afterEnd={() => \"00:00:00\"} />\n .\n
  • \n ) }\n
\n \n );\n}\n\nfunction ContestEnded({\n startTime, endTime, usersWithExtraTime, maxExtraTime,\n}: StartedProps) {\n const serverTime = useServerTime();\n return (\n <>\n
    \n
  • \n Contest started at\n {\" \"}\n serverTime()} date={startTime} />\n
  • \n
  • \n Contest ended at\n {\" \"}\n serverTime()} date={endTime} />\n
  • \n {\n !!usersWithExtraTime && (\n
  • \n Contest ended for everyone at\n {\" \"}\n serverTime()} date={endTime.plus({ seconds: maxExtraTime })} />\n
  • \n )\n }\n
\n\n \n \n {\" \"}\n Download contest results\n \n \n );\n}\n\ntype Props = {\n users: Loadable\n}\n\nexport function AdminContestStatus({ users }: Props) {\n const status = useStatus().value();\n const serverTime = useServerTime();\n\n const startTime = status.start_time ? DateTime.fromISO(status.start_time, { zone: \"utc\" }) : null;\n const endTime = status.end_time ? DateTime.fromISO(status.end_time, { zone: \"utc\" }) : null;\n const usersWithExtraTime = users.isReady()\n ? users.value().items.filter((user) => user.extra_time !== 0).length\n : 0;\n const maxExtraTime = users.isReady()\n ? Math.max.apply(\n null,\n users.value().items.map((user) => user.extra_time),\n ) : 0;\n\n const renderStatus = () => {\n if (!startTime || !endTime || serverTime() < startTime) {\n return ;\n }\n if (serverTime() < endTime) {\n return (\n \n );\n }\n if (maxExtraTime && serverTime() < endTime.plus({ seconds: maxExtraTime })) {\n return (\n \n );\n }\n return (\n \n );\n };\n\n return (\n
\n
\n

\n Contest status\n

\n {renderStatus()}\n
\n
\n );\n}\n","import React, { useEffect } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { DateTime } from \"luxon\";\nimport { Trans, t, Plural } from \"@lingui/macro\";\nimport { RelativeDate } from \"src/components/RelativeDate\";\nimport { client } from \"src/TerryClient\";\nimport { Error } from \"src/components/Error\";\nimport { Loading } from \"src/components/Loading\";\nimport { useStatus, useActions, useServerTime } from \"./AdminContext\";\nimport { useLogs } from \"./hooks/useLogs\";\nimport { useUsers } from \"./hooks/useUsers\";\nimport { usePack } from \"./hooks/usePack\";\nimport { AdminContestStatus } from \"./AdminContestStatus\";\n\nexport function AdminSummaryView() {\n const status = useStatus().value();\n const pack = usePack().value();\n const [logs, reloadLogs] = useLogs();\n const [users, reloadUsers] = useUsers();\n const serverTime = useServerTime();\n const { resetContest } = useActions();\n\n if (!pack.uploaded) {\n throw new window.Error(\"AdminSummaryView requires the pack to be uploaded\");\n }\n\n // auto reload the logs\n useEffect(() => {\n const LOG_REFRESH_INTERVAL = 5000;\n const interval = setInterval(() => {\n reloadLogs();\n reloadUsers();\n }, LOG_REFRESH_INTERVAL);\n return () => clearInterval(interval);\n }, [reloadLogs, reloadUsers]);\n\n const countUsersWithExtraTime = () => {\n if (!users.isReady()) return 0;\n return users.value().items.filter((user) => user.extra_time !== 0).length;\n };\n\n const isDeletable = () => pack.deletable;\n\n const doResetContest = () => {\n // eslint-disable-next-line no-alert\n if (!window.confirm(t`Are you sure?`)) return;\n\n resetContest();\n };\n\n return (\n
\n \n
\n
\n

\n System status\n

\n {logs.isLoading() && }\n {logs.isError() && }\n {logs.isReady()\n && (\n
    \n
  • \n {logs.value().items.length === 0 ? (\n <>\n No issue detected\n {\" \"}\n (\n \n show log\n \n )\n \n ) : (\n <>\n Issue last detected\n {\" \"}\n serverTime()}\n date={DateTime.fromISO(logs.value().items[0].date, { zone: \"utc\" })}\n />\n {\" \"}\n (\n \n show log\n \n )\n \n )}\n
  • \n
\n )}\n
\n
\n
\n
\n

\n Extra time\n

\n
    \n
  • \n \n {\" \"}\n (\n \n set extra time\n \n )\n
  • \n
  • \n <>\n \n {\" \"}\n (\n \n show users\n \n )\n \n
  • \n
\n
\n
\n {\n client.communications && (\n
\n
\n

\n Communication system\n

\n

The communication system is enabled for this contest.

\n \n Visit\n \n
\n
\n )\n }\n
\n
\n

\n Danger zone\n

\n \n
\n
\n
\n );\n}\n","import React, { createRef } from \"react\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTimes, faHourglassStart } from \"@fortawesome/free-solid-svg-icons\";\nimport { Link } from \"react-router-dom\";\nimport { toast } from \"react-toastify\";\nimport { Trans, t } from \"@lingui/macro\";\nimport { Modal } from \"src/components/Modal\";\nimport { Loading } from \"src/components/Loading\";\nimport { UserEntry } from \"src/types/admin\";\nimport { Error } from \"src/components/Error\";\nimport { useActions } from \"./AdminContext\";\nimport { useUsers } from \"./hooks/useUsers\";\n\ntype UserExtraTimeProps = {\n user: UserEntry;\n};\n\nfunction UserExtraTimeView({ user }: UserExtraTimeProps) {\n const minutesRef = createRef();\n const { setExtraTime } = useActions();\n\n const doSetExtraTime = () => {\n if (!minutesRef.current) return;\n // eslint-disable-next-line no-alert\n if (!window.confirm(t`Are you sure?`)) return;\n\n const minutes = parseInt(minutesRef.current.value, 10);\n setExtraTime(minutes * 60, user.token);\n toast.success(t`Extra time successfully updated for the user`);\n };\n\n const extraTimeMinutes = () => Math.round(user.extra_time / 60);\n\n return (\n {\n e.preventDefault();\n doSetExtraTime();\n }}\n >\n \n \n \n );\n}\n\nexport function AdminUsersView() {\n const [users] = useUsers();\n\n const renderUserRow = (user: UserEntry, i: number) => {\n const ips = user.ip\n .map((ip) => (\n \n {ip.ip}\n \n ))\n // join with a separator\n .map((item, j) => (j === 0 ? [item] : [ - , item]));\n return (\n \n {user.name}\n {user.surname}\n {user.token}\n {ips}\n \n \n \n \n );\n };\n\n return (\n \n
\n
{t`Contestants`}
\n \n ×\n \n
\n {users.isLoading() && }\n {users.isError() && }\n {users.isReady() && (\n
\n \n \n \n \n \n \n \n \n \n \n {users.value().items.map((user, i) => renderUserRow(user, i))}\n
\n Name\n \n Surname\n \n Token\n \n IP\n \n Extra time\n {\" \"}\n \n (in minutes)\n \n
\n
\n )}\n\n
\n \n \n {\" \"}\n Close\n \n
\n
\n );\n}\n","import React from \"react\";\nimport { Link, useHistory } from \"react-router-dom\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTimes, faHourglassStart } from \"@fortawesome/free-solid-svg-icons\";\nimport { Trans, t } from \"@lingui/macro\";\nimport { toast } from \"react-toastify\";\nimport { Modal } from \"src/components/Modal\";\nimport { useStatus, useActions } from \"./AdminContext\";\n\nexport function ContestExtraTimeView() {\n const minutesRef = React.createRef();\n\n const history = useHistory();\n const status = useStatus();\n const { setExtraTime } = useActions();\n\n const doSetExtraTime = () => {\n if (!minutesRef.current) return;\n // eslint-disable-next-line no-alert\n if (!window.confirm(t`Are you sure?`)) return;\n\n const minutes = parseInt(minutesRef.current.value, 10);\n setExtraTime(minutes * 60).then(() => {\n toast.success(t`Extra time successfully updated`);\n history.push(\"/admin\");\n });\n };\n\n return (\n \n {\n e.preventDefault();\n doSetExtraTime();\n }}\n >\n
\n
\n Extra time\n
\n \n ×\n \n
\n
\n

\n \n You can set an extra time for all the contestants in case of problems that afflicts everyone. This action\n {\" \"}\n is logged\n {\" \"}\n and must be justified to the committee.\n \n

\n
\n \n \n \n (in minutes)\n \n
\n
\n
\n \n \n {\" \"}\n Close\n \n \n
\n \n
\n );\n}\n","import React, { useState, useEffect } from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTrophy } from \"@fortawesome/free-solid-svg-icons\";\nimport { Trans, t } from \"@lingui/macro\";\nimport { Modal } from \"src/components/Modal\";\nimport { client } from \"src/TerryClient\";\nimport { notifyError } from \"src/utils\";\nimport { Loadable } from \"src/Loadable\";\nimport { ZipData } from \"src/types/admin\";\nimport { Error } from \"src/components/Error\";\nimport { useToken } from \"./AdminContext\";\n\nexport function DownloadResultsView() {\n const token = useToken();\n const [zip, setZip] = useState>(Loadable.loading());\n\n if (!token) throw new window.Error(\"DownloadResultView needs to be logged in\");\n\n useEffect(() => {\n client.adminApi(token, \"/download_results\").then(\n (response) => {\n setZip(Loadable.of(response.data as ZipData));\n },\n (response) => {\n notifyError(response);\n setZip(Loadable.error(response));\n },\n );\n }, [token]);\n\n const renderDownloadButton = () => {\n if (zip.isLoading()) {\n return (\n

\n Creating final zip...\n

\n );\n }\n if (zip.isError()) return ;\n\n return (\n \n \n {\" \"}\n Download contest results\n {\" \"}\n \n \n );\n };\n\n return (\n \n
\n
\n Download contest results\n
\n \n ×\n \n
\n
\n
\n \n The contest is finished, you must now download the zip containing all the contest data. This zip must then\n be sent to the committee.\n \n
\n {renderDownloadButton()}\n
\n
\n );\n}\n","import React from \"react\";\nimport { Link, Route } from \"react-router-dom\";\nimport { Trans } from \"@lingui/macro\";\nimport { LanguageSwitcher } from \"src/LanguageSwitcher\";\nimport { LogoutButton } from \"src/components/LogoutButton\";\nimport { AdminLoginView } from \"./AdminLoginView\";\nimport { AdminLogsView } from \"./AdminLogsView\";\nimport { AdminSummaryView } from \"./AdminSummaryView\";\nimport { AdminUsersView } from \"./AdminUsersView\";\nimport { ContestExtraTimeView } from \"./ContestExtraTimeView\";\nimport { DownloadResultsView } from \"./DownloadResultsView\";\nimport { useActions } from \"./AdminContext\";\n\nexport function AdminView() {\n const { isLoggedIn, logout } = useActions();\n\n const renderNavBar = () => (\n \n );\n\n if (!isLoggedIn()) return ;\n return (\n <>\n {renderNavBar()}\n
\n <>\n \n\n } />\n\n } />\n\n } />\n\n } />\n \n
\n \n );\n}\n","import React from \"react\";\nimport { Loading } from \"src/components/Loading\";\nimport { Error } from \"src/components/Error\";\nimport { UploadPackView } from \"./UploadPackView\";\nimport { AdminView } from \"./AdminView\";\nimport { AdminContextProvider } from \"./AdminContext\";\nimport { usePack } from \"./hooks/usePack\";\nimport { PackContextProvider } from \"./PackContext\";\n\nfunction PackViewInner() {\n const pack = usePack();\n if (pack.isLoading()) return ;\n if (pack.isError()) return ;\n\n if (pack.value().uploaded) {\n return ;\n }\n return ;\n}\n\nexport function PackView() {\n return (\n \n \n \n \n \n );\n}\n","import React, {\n createContext, ReactNode, useContext, useEffect, useMemo, useState,\n} from \"react\";\nimport { t } from \"@lingui/macro\";\nimport { notifyError } from \"src/utils\";\nimport { CommunicationData, Announcement, Question } from \"src/types/contest\";\nimport { client } from \"src/TerryClient\";\nimport { Loadable } from \"src/Loadable\";\nimport { useTriggerUpdate } from \"./useTriggerUpdate\";\n\nconst POLL_INTERVAL = 15 * 1000;\nconst sessionName = \"communications\";\n\ntype CommunicationContextType = {\n announcements: Loadable;\n questions: Loadable;\n errored: boolean;\n reload: () => void;\n askQuestion: (question: string) => Promise;\n sendAnswer: (id: number, answer: string) => Promise;\n}\n\nconst readStorage = () => {\n const item = window.sessionStorage.getItem(sessionName);\n if (!item) return null;\n return JSON.parse(item) as CommunicationData;\n};\n\nconst saveStorage = (data: CommunicationData) => {\n const item = JSON.stringify(data);\n window.sessionStorage.setItem(sessionName, item);\n};\n\nconst defaultContext = () => {\n const storage = readStorage();\n if (!storage) {\n return {\n announcements: Loadable.loading(),\n questions: Loadable.loading(),\n errored: false,\n reload: () => {},\n askQuestion: () => Promise.reject(),\n sendAnswer: () => Promise.reject(),\n } as CommunicationContextType;\n }\n return {\n announcements: Loadable.of(storage.announcements),\n questions: Loadable.of(storage.questions),\n errored: false,\n reload: () => {},\n askQuestion: () => Promise.reject(),\n sendAnswer: () => Promise.reject(),\n } as CommunicationContextType;\n};\n\nexport const CommunicationContext = createContext(defaultContext());\n\ntype Props = {\n children: ReactNode;\n token: string | null;\n}\n\nexport function CommunicationContextProvider({ children, token }: Props) {\n const fromStorage = defaultContext();\n const [errored, setErrored] = useState(false);\n const [announcements, setAnnouncements] = useState>(fromStorage.announcements);\n const [questions, setQuestions] = useState>(fromStorage.questions);\n const [handle, reload] = useTriggerUpdate();\n\n useEffect(() => {\n if (!client.communications) return () => {};\n\n const fetchData = () => {\n client.communications\n ?.get(token ? `/communications/${token}` : \"/communications\")\n .then((response) => {\n const data = response.data as CommunicationData;\n setAnnouncements(Loadable.of(data.announcements));\n setQuestions(Loadable.of(data.questions || []));\n setErrored(false);\n })\n .catch((response) => {\n notifyError(response);\n setErrored(true);\n // eslint-disable-next-line no-console\n console.error(\"Failed to load communications\", response);\n // the announcements and questions are not reset here, preventing\n // network failures to hide the locally stored backup\n });\n };\n\n fetchData();\n const interval = setInterval(() => fetchData(), POLL_INTERVAL);\n return () => clearInterval(interval);\n }, [token, handle]);\n\n const askQuestion = (question: string) => {\n if (!token) throw new Error(\"You have to be logged in to ask a question\");\n if (!client.communications) return Promise.reject();\n\n return client.communications\n .post(`/communications/${token}`, { content: question })\n .then((response) => {\n reload();\n return response.data;\n })\n .catch((response) => {\n notifyError(response);\n throw response;\n });\n };\n\n const sendAnswer = (id: number, answer: string) => {\n if (!client.communications) return Promise.reject();\n // eslint-disable-next-line no-alert\n if (!window.confirm(\"Are you sure?\")) return Promise.reject();\n return client.communications.post(`/communications/${token}/${id}`, {\n content: answer,\n }).then(() => {\n reload();\n }).catch((response) => {\n notifyError(response);\n });\n };\n\n return (\n \n {children}\n \n );\n}\n\nexport function useAnnouncements() {\n const context = useContext(CommunicationContext);\n return useMemo(() => context.announcements, [context.announcements]);\n}\n\nexport function useQuestions() {\n const context = useContext(CommunicationContext);\n return useMemo(() => context.questions, [context.questions]);\n}\n\nexport function useCommunicationErrored() {\n const context = useContext(CommunicationContext);\n return useMemo(() => context.errored, [context.errored]);\n}\n\nexport function useReloadCommunication() {\n const context = useContext(CommunicationContext);\n return useMemo(() => context.reload, [context.reload]);\n}\n\nexport function useAskQuestion() {\n const context = useContext(CommunicationContext);\n return useMemo(() => context.askQuestion, [context.askQuestion]);\n}\n\nexport function useSendAnswer() {\n const context = useContext(CommunicationContext);\n return useMemo(() => context.sendAnswer, [context.sendAnswer]);\n}\n\nconst notifyNewAnnouncements = (oldList: Announcement[], newList: Announcement[]) => {\n newList.forEach((item) => {\n const oldAnn = oldList.find((old) => old.id === item.id);\n let title = null;\n if (!oldAnn) {\n title = t`New announcement: ${item.title}`;\n }\n if (oldAnn && oldAnn.content !== item.content) {\n title = t`Updated announcement: ${item.title}`;\n }\n\n // old announcement\n if (!title) return;\n\n // eslint-disable-next-line no-new\n new Notification(title, {\n body: item.content,\n requireInteraction: true,\n });\n });\n};\n\nconst notifyNewQuestions = (oldList: Question[], newList: Question[]) => {\n newList.forEach((item) => {\n const oldQ = oldList.find((old) => old.id === item.id);\n // new question\n if (!oldQ) return;\n\n let title = null;\n if (!oldQ.answer && item.answer) {\n title = t`Question answered!`;\n }\n if (oldQ.answer && item.answer && oldQ.answer.content !== item.answer.content) {\n title = t`The answer to one of your questions got updated`;\n }\n\n // no changes\n if (!title) return;\n\n // eslint-disable-next-line no-new\n new Notification(title, {\n body: item.answer?.content,\n requireInteraction: true,\n });\n });\n};\n\nexport function useCommunicationNotifier() {\n const questions = useQuestions();\n const announcements = useAnnouncements();\n\n useEffect(() => {\n if (\"Notification\" in window) {\n const { permission } = Notification;\n if (permission !== \"granted\" && permission !== \"denied\") {\n Notification.requestPermission();\n }\n }\n }, []);\n\n useEffect(() => {\n if (announcements.isReady() && questions.isReady()) {\n const oldDada = readStorage();\n if (oldDada) {\n notifyNewAnnouncements(oldDada.announcements, announcements.value());\n notifyNewQuestions(oldDada.questions || [], questions.value() || []);\n }\n saveStorage({ announcements: announcements.value(), questions: questions.value() });\n }\n }, [questions, announcements]);\n}\n","import React, {\n useState, useEffect, createContext, ReactNode, useMemo, useContext,\n} from \"react\";\nimport { client } from \"src/TerryClient\";\nimport { useToken } from \"src/contest/ContestContext\";\nimport { Loadable } from \"src/Loadable\";\nimport { notifyError } from \"src/utils\";\nimport { SubmissionList } from \"src/types/contest\";\n\ntype TasksSubmissionList = {\n [taskName: string]: Loadable;\n};\n\ntype SubmissionListContextType = {\n list: TasksSubmissionList;\n reloadTask: (taskName: string) => void;\n};\n\nexport const SubmissionListContext = createContext({\n list: {},\n reloadTask: () => {},\n});\n\nexport function SubmissionListContextProvider({ children }: { children: ReactNode }) {\n const [list, setList] = useState({});\n const [toUpdate, setToUpdate] = useState([]);\n const token = useToken();\n\n useEffect(() => {\n // delay until logged in\n if (!token) {\n if (Object.keys(list).length > 0) {\n setList({});\n }\n }\n\n const newList = { ...list };\n toUpdate.forEach((taskName) => {\n newList[taskName] = Loadable.loading();\n client.api\n .get(`/user/${token}/submissions/${taskName}`)\n .then((response) => {\n setList({ ...list, [taskName]: Loadable.of(response.data) });\n })\n .catch((response) => {\n notifyError(response);\n setList({ ...list, [taskName]: Loadable.error(response) });\n });\n });\n if (toUpdate.length > 0) {\n setList(newList);\n setToUpdate([]);\n }\n }, [toUpdate, list, token]);\n\n const reloadTask = (taskName: string) => {\n setToUpdate([...toUpdate, taskName]);\n };\n\n return (\n \n {children}\n \n );\n}\n\nexport function useSubmissionList(taskName: string) {\n const context = useContext(SubmissionListContext);\n const list = context.list[taskName];\n useEffect(() => {\n if (!list) {\n context.reloadTask(taskName);\n }\n }, [list, context, taskName]);\n return [\n useMemo(() => list || Loadable.loading(), [list]),\n () => context.reloadTask(taskName),\n ] as const;\n}\n","import React, {\n ReactNode, useState, createContext, useContext, useMemo, useEffect, useCallback,\n} from \"react\";\nimport { Duration, DateTime } from \"luxon\";\nimport { useHistory } from \"react-router-dom\";\nimport { useLogin } from \"src/hooks/useLogin\";\nimport { Loadable } from \"src/Loadable\";\nimport { client } from \"src/TerryClient\";\nimport { useTriggerUpdate } from \"src/hooks/useTriggerUpdate\";\nimport { ContestData } from \"src/types/contest\";\nimport { CommunicationContextProvider } from \"src/hooks/useCommunication\";\nimport { SubmissionListContextProvider } from \"./hooks/useSubmissionList\";\n\nexport type ContextData = {\n token: string | null;\n serverTimeSkew: Loadable;\n contest: Loadable;\n};\n\nexport type ContextActions = {\n isLoggedIn: () => boolean;\n login: (token: string) => void;\n logout: () => void;\n reloadContest: () => void;\n};\n\ntype ContestContextType = {\n data: ContextData;\n actions: ContextActions;\n};\n\nexport const ContestContext = createContext({\n data: {\n token: null,\n serverTimeSkew: Loadable.loading(),\n contest: Loadable.loading(),\n },\n actions: {\n isLoggedIn: () => false,\n login: () => {},\n logout: () => {},\n reloadContest: () => {},\n },\n});\n\ntype ContestContextProps = {\n children: ReactNode;\n};\n\nexport function ContestContextProvider({ children }: ContestContextProps) {\n const cookieName = \"userToken\";\n const [token, login, doLogout] = useLogin(cookieName);\n const [serverTimeSkew, setServerTimeSkew] = useState>(Loadable.loading());\n const [contest, setContest] = useState>(Loadable.loading());\n const [reloadContestHandle, reloadContest] = useTriggerUpdate();\n const history = useHistory();\n\n const logout = useCallback(() => {\n doLogout();\n history.push(\"/\");\n }, [doLogout, history]);\n\n useEffect(() => {\n if (!token) {\n setServerTimeSkew(Loadable.loading());\n setContest(Loadable.loading());\n return;\n }\n client.api\n .get(`/user/${token}`)\n .then((response) => {\n const serverDate = DateTime.fromHTTP(response.headers.date);\n setServerTimeSkew(Loadable.of(DateTime.local().diff(serverDate)));\n setContest(Loadable.of(response.data));\n })\n .catch((response) => {\n logout();\n setServerTimeSkew(Loadable.loading());\n setContest(Loadable.error(response));\n });\n }, [token, logout, reloadContestHandle]);\n\n const isLoggedIn = () => token !== null;\n\n return (\n \n \n \n {children}\n \n \n \n );\n}\n\nexport function useActions() {\n const context = useContext(ContestContext);\n return useMemo(() => context.actions, [context.actions]);\n}\n\nexport function useToken() {\n const context = useContext(ContestContext);\n return useMemo(() => context.data.token, [context.data.token]);\n}\n\nexport function useContest() {\n const context = useContext(ContestContext);\n return useMemo(() => context.data.contest, [context.data.contest]);\n}\n\nexport function useServerTime() {\n const context = useContext(ContestContext);\n\n return useMemo(() => () => DateTime.local().minus(context.data.serverTimeSkew.valueOr(Duration.fromMillis(0))), [\n context.data.serverTimeSkew,\n ]);\n}\n","import { useState, useMemo } from \"react\";\nimport { Loadable } from \"src/Loadable\";\nimport { client } from \"src/TerryClient\";\n\nexport enum UploadType {\n Source,\n Output,\n}\n\nexport function useUpload(inputId: string, type: UploadType) {\n const [upload, setUpload] = useState>(Loadable.loading());\n\n const doUpload = useMemo(\n () => (file: File | null) => {\n if (!file) return;\n const data = new FormData();\n\n data.append(\"input_id\", inputId);\n data.append(\"file\", file);\n\n client.api\n .post(type === UploadType.Source ? \"/upload_source\" : \"/upload_output\", data)\n .then((response) => {\n setUpload(Loadable.of(response.data));\n })\n .catch((response) => {\n setUpload(Loadable.error(response));\n });\n },\n [inputId, type],\n );\n\n return [upload, doUpload] as const;\n}\n","import React from \"react\";\nimport { Alert } from \"src/types/contest\";\n\ntype Props = {\n alert: Alert\n}\n\nexport function ValidationAlert({ alert }: Props) {\n return (\n
\n {alert.message}\n
\n );\n}\n","import { t, defineMessage } from \"@lingui/macro\";\nimport { MessageDescriptor, i18n } from \"@lingui/core\";\nimport { toast } from \"react-toastify\";\n\nexport const MAX_SOURCE_SIZE = 100000;\n\ntype SourceLanguageType = { [key: string]: MessageDescriptor };\n\nexport const ALLOWED_EXTENSIONS: SourceLanguageType = {\n cpp: defineMessage({ message: \"C++\" }),\n cc: defineMessage({ message: \"C++\" }),\n cxx: defineMessage({ message: \"C++\" }),\n \"c++\": defineMessage({ message: \"C++\" }),\n c: defineMessage({ message: \"C\" }),\n cs: defineMessage({ message: \"C#\" }),\n dart: defineMessage({ message: \"Dart\" }),\n go: defineMessage({ message: \"Go\" }),\n html: defineMessage({ message: \"Javascript (HTML)\" }),\n java: defineMessage({ message: \"Java\" }),\n js: defineMessage({ message: \"Javascript\" }),\n kt: defineMessage({ message: \"Kotlin\" }),\n ts: defineMessage({ message: \"Typescript\" }),\n php: defineMessage({ message: \"PHP\" }),\n pas: defineMessage({ message: \"Pascal\" }),\n pp: defineMessage({ message: \"Pascal\" }),\n py: defineMessage({ message: \"Python\" }),\n py2: defineMessage({ message: \"Python\" }),\n py3: defineMessage({ message: \"Python\" }),\n sb3: defineMessage({ message: \"Scratch\" }),\n srs: defineMessage({ message: \"Pseudocode\" }),\n rb: defineMessage({ message: \"Ruby\" }),\n rs: defineMessage({ message: \"Rust\" }),\n vb: defineMessage({ message: \"VisualBasic\" }),\n};\n\nexport const FORBIDDEN_EXTENSIONS: SourceLanguageType = {\n exe: defineMessage({ message: \"Compiled binary\" }),\n o: defineMessage({ message: \"Compiled binary\" }),\n or: defineMessage({ message: \"Compiled binary\" }),\n so: defineMessage({ message: \"Compiled binary\" }),\n obj: defineMessage({ message: \"Compiled binary\" }),\n a: defineMessage({ message: \"Compiled binary\" }),\n cbp: defineMessage({ message: \"CodeBlocks project\" }),\n txt: defineMessage({ message: \"Text file\" }),\n xml: defineMessage({ message: \"XML file\" }),\n class: defineMessage({ message: \"Compiled Java class\" }),\n jar: defineMessage({ message: \"Compiled Java binary\" }),\n pyo: defineMessage({ message: \"Compiled Python object\" }),\n pyc: defineMessage({ message: \"Compiled Python object\" }),\n pyd: defineMessage({ message: \"Compiled Python object\" }),\n zip: defineMessage({ message: \"Compressed archive\" }),\n tar: defineMessage({ message: \"Compressed archive\" }),\n gz: defineMessage({ message: \"Compressed archive\" }),\n tgz: defineMessage({ message: \"Compressed archive\" }),\n xz: defineMessage({ message: \"Compressed archive\" }),\n rar: defineMessage({ message: \"Compressed archive\" }),\n pdf: defineMessage({ message: \"PDF file\" }),\n vbproj: defineMessage({ message: \"Visual Studio project\" }),\n csproj: defineMessage({ message: \"Visual Studio project\" }),\n sln: defineMessage({ message: \"Visual Studio project\" }),\n suo: defineMessage({ message: \"Visual Studio project\" }),\n dev: defineMessage({ message: \"Dev-Cpp project\" }),\n lpi: defineMessage({ message: \"Free Pascal Lazarus project\" }),\n lps: defineMessage({ message: \"Free Pascal Lazarus session file\" }),\n lrs: defineMessage({ message: \"Free Pascal Lazarus file\" }),\n lrt: defineMessage({ message: \"Free Pascal Lazarus file\" }),\n lpk: defineMessage({ message: \"Free Pascal Lazarus file\" }),\n ppu: defineMessage({ message: \"Free Pascal Lazarus file\" }),\n compiled: defineMessage({ message: \"Compiled file\" }),\n};\n\nconst FORBIDDEN_MAGIC_NUMBERS = [\n \"\\x4D\\x5A\", // Windows\n \"\\xCE\\xFA\\xED\\xFE\", // MacOs 32 bit\n \"\\xCF\\xFA\\xED\\xFE\", // MacOs 64 bit\n \"\\xBE\\xBA\\xFE\\xCA\", // MacOs 32 bit FAT\n \"\\xBF\\xBA\\xFE\\xCA\", // MacOs 64 bit FAT\n \"\\x7F\\x45\\x4C\\x46\\x01\", // ELF 32 bit\n \"\\x7F\\x45\\x4C\\x46\\x02\", // ELF 64 bit\n];\n\nasync function isExecutable(blob: Blob): Promise {\n const buffer = await blob.slice(0, 5).arrayBuffer();\n const view = new Uint8Array(buffer);\n // eslint-disable-next-line no-restricted-syntax\n for (const magic of FORBIDDEN_MAGIC_NUMBERS) {\n let valid = true;\n for (let i = 0; i < magic.length && i < view.length; i += 1) {\n if (view[i] !== magic.charCodeAt(i)) {\n valid = false;\n break;\n }\n }\n if (valid) {\n // eslint-disable-next-line no-console\n console.log(\n \"Source file detected to be binary file: it starts with\",\n magic\n );\n return Promise.resolve(true);\n }\n }\n return Promise.resolve(false);\n}\n\nexport async function checkFile(file: File) {\n const name = file.name as string;\n const nameParts = name.split(\".\");\n const extension = nameParts[nameParts.length - 1];\n const size = file.size as number | undefined;\n\n if (size !== undefined && size === 0) {\n toast.error(t`You selected an empty file`);\n } else if (size !== undefined && size > MAX_SOURCE_SIZE) {\n toast.error(\n t`The file you selected is too big (${size} bytes > ${MAX_SOURCE_SIZE} bytes)`\n );\n } else if (nameParts.length < 2) {\n toast.error(t`Select a file with an extension`);\n } else if (extension.includes(\" \")) {\n toast.error(t`The extension cannot contain spaces`);\n } else if (extension in FORBIDDEN_EXTENSIONS) {\n toast.error(\n `${t`The file you selected is not allowed, please select the actual source file of your program. The detected file type is`} ${i18n._(\n FORBIDDEN_EXTENSIONS[extension]\n )}`\n );\n } else if (await isExecutable(file)) {\n toast.error(\n t`The file you selected has been detected as an executable. Please select the corresponding source file instead.`\n );\n } else {\n return true;\n }\n return false;\n}\n","import React from \"react\";\nimport filesize from \"filesize\";\nimport { DateTime } from \"luxon\";\nimport \"./FileView.css\";\nimport { Trans } from \"@lingui/macro\";\nimport { RelativeDate } from \"src/components/RelativeDate\";\n\ntype Props = {\n file: File;\n};\n\nexport function FileView({ file }: Props) {\n return (\n \n \n \n \n \n \n {file.lastModified && (\n \n \n \n \n )}\n \n \n \n \n \n
\n File:\n {file.name}
\n Last update:\n \n DateTime.local()} date={DateTime.fromMillis(file.lastModified)} />\n
\n Size:\n {filesize(file.size, { standard: \"iec\" })}
\n );\n}\n","import React, {\n createRef, useEffect, useState,\n} from \"react\";\nimport { Trans, t } from \"@lingui/macro\";\nimport { i18n } from \"@lingui/core\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { faTrash } from \"@fortawesome/free-solid-svg-icons\";\nimport {\n useUpload, UploadType,\n} from \"src/contest/hooks/useUpload\";\nimport { ValidationAlert } from \"src/contest/submission/ValidationAlert\";\nimport { UploadedSource } from \"src/types/contest\";\nimport { Error } from \"src/components/Error\";\nimport { Loading } from \"src/components/Loading\";\nimport { checkFile, ALLOWED_EXTENSIONS } from \"./submissionLimits\";\nimport { FileView } from \"./FileView\";\n\ntype Props = {\n inputId: string;\n setSource: (source: UploadedSource | null) => void;\n};\n\nexport function SourceSelector({ inputId, setSource }: Props) {\n const sourceRef = createRef();\n const [file, setFile] = useState(null);\n const [uploadStatus, upload] = useUpload(inputId, UploadType.Source);\n\n useEffect(() => {\n if (!sourceRef.current) return;\n const f = sourceRef.current.files?.[0] || null;\n setFile(f);\n }, [sourceRef]);\n\n useEffect(() => {\n if (uploadStatus.isReady()) {\n setSource(uploadStatus.value());\n } else {\n setSource(null);\n }\n }, [uploadStatus, setSource]);\n\n if (!file) {\n const selectSourceFile = async () => {\n if (!sourceRef.current) return;\n const f = sourceRef.current.files?.[0];\n if (f && (await checkFile(f))) {\n upload(f);\n } else {\n sourceRef.current.value = sourceRef.current.defaultValue;\n }\n };\n\n return (\n <>\n
\n selectSourceFile()}\n />\n \n
\n {uploadStatus.isError() && }\n \n );\n }\n\n const { name } = file;\n const nameParts = name.split(\".\");\n const extension = nameParts[nameParts.length - 1];\n let warn = null;\n let language = null;\n if (extension in ALLOWED_EXTENSIONS) {\n language = i18n._(ALLOWED_EXTENSIONS[extension]);\n } else {\n warn = t`You selected a file with an unknown extension. This submission may be invalidated if this file is not the true source of the program that generated the output file. If you think you selected the wrong file, please change it before submitting.`;\n }\n return (\n
\n
\n
\n Source file info\n
\n {\n setFile(null);\n setSource(null);\n }}\n >\n \n {\" \"}\n Change source\n \n
\n
\n \n {warn &&
{warn}
}\n {language && (\n
\n Detected language:\n {\" \"}\n {language}\n
\n )}\n {uploadStatus.isLoading() && }\n {uploadStatus.isError() && }\n {uploadStatus.isReady()\n && uploadStatus.value().validation.alerts.map((a) => )}\n
\n
\n );\n}\n","import React from \"react\";\nimport { Trans } from \"@lingui/macro\";\nimport { Alert } from \"src/types/contest\";\n\ntype Props = {\n cases: T[];\n alerts: Alert[];\n renderCase: (c: T, i: number) => React.ReactNode;\n renderCaseSummary: (c: T, i: number) => React.ReactNode;\n};\n\nexport function ResultView({\n cases, alerts, renderCase, renderCaseSummary,\n}: Props) {\n return (\n <>\n
    \n {alerts.map((a: Alert) => (\n
  • \n
    \n {a.code}\n {\" \"}\n {a.severity.toUpperCase()}\n :\n {\" \"}\n {a.message}\n
    \n
  • \n ))}\n
\n
\n
\n Details\n :\n
\n
\n
    \n {cases.map((c: T, i: number) => (\n // eslint-disable-next-line react/no-array-index-key\n
  • \n {renderCaseSummary(c, i + 1)}\n
  • \n ))}\n
\n
\n
\n
\n
    {cases.map((c: T, i: number) => renderCase(c, i + 1))}
\n
\n \n );\n}\n","import React from \"react\";\nimport { Select } from \"@lingui/macro\";\nimport { ValidationCaseInfo, UploadedOutput } from \"src/types/contest\";\nimport { ResultView } from \"./ResultView\";\n\ntype Props = {\n output: UploadedOutput;\n};\n\nexport function ValidationView({ output }: Props) {\n const getColor = (c: ValidationCaseInfo) => {\n switch (c.status) {\n case \"parsed\":\n return \"info\";\n case \"missing\":\n return \"secondary\";\n default:\n return \"danger\";\n }\n };\n\n const renderCaseSummary = (c: ValidationCaseInfo, id: number) => (\n \n {id}\n \n );\n\n const renderCase = (c: ValidationCaseInfo, id: number) => (\n
  • \n \n Case #\n {id}\n :\n {\" \"}\n \n \n {contest.isError() && }\n {isLoading && }\n \n
  • \n \n );\n}\n","/* eslint-disable no-console */\nimport { useMemo, useEffect } from \"react\";\nimport { client } from \"src/TerryClient\";\nimport { useToken } from \"src/contest/ContestContext\";\n\nconst DETECT_INTERNET_TEST_ENDPOINT = process.env.REACT_APP_DETECT_INTERNET_TEST_ENDPOINT || null;\nconst DETECT_INTERNET_TEST_CONTENT = process.env.REACT_APP_DETECT_INTERNET_TEST_CONTENT || null;\nconst DETECT_INTERNET_INTERVAL = 10 * 60 * 1000;\n\nexport function useDetectInternet() {\n const token = useToken();\n const detectInternet = useMemo(\n () => async (endpoint: string) => {\n if (!token) return;\n console.log(`Testing internet connection (${DETECT_INTERNET_TEST_ENDPOINT})...`);\n try {\n const res = await fetch(endpoint, {\n mode: \"no-cors\",\n });\n const content = await res.text();\n if (content !== DETECT_INTERNET_TEST_CONTENT) {\n console.log(`Invalid content ${content}`);\n }\n } catch (e) {\n console.log(`No internet connection (${e})`);\n return;\n }\n console.log(`Internet connection detected. Reporting.`);\n\n const data = new FormData();\n\n data.append(\"token\", token);\n\n await client.api.post(\"/internet_detected\", data);\n },\n [token],\n );\n\n useEffect(() => {\n if (!DETECT_INTERNET_TEST_ENDPOINT) return () => {};\n\n const interval = setInterval(() => detectInternet(DETECT_INTERNET_TEST_ENDPOINT), DETECT_INTERNET_INTERVAL);\n return () => clearInterval(interval);\n }, [detectInternet]);\n}\n","import { Trans, t } from \"@lingui/macro\";\nimport { faPaperPlane } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { DateTime } from \"luxon\";\nimport React, { useState } from \"react\";\nimport { Question as QuestionT } from \"src/types/contest\";\nimport { useSendAnswer } from \"src/hooks/useCommunication\";\nimport { Link } from \"react-router-dom\";\nimport { RelativeDate } from \"./RelativeDate\";\nimport { Markdown } from \"./Markdown\";\n\ntype Props = {\n question: QuestionT,\n serverTime: () => DateTime,\n canAnswer: boolean\n};\n\nexport function Question({ question, serverTime, canAnswer } : Props) {\n const [answer, setAnswer] = useState(\"\");\n const date = DateTime.fromSQL(question.date, { zone: \"utc\" });\n const answerDate = question.answer && DateTime.fromSQL(question.answer.date, { zone: \"utc\" });\n const color = question.answer ? \"primary\" : \"dark\";\n const sendAnswer = useSendAnswer();\n\n const renderAnswerForm = () => (\n <>\n
    { e.preventDefault(); sendAnswer(question.id, answer); }}>\n
    \n setAnswer(e.target.value)}\n />\n
    \n
    \n

    Preview

    \n \n
    \n \n \n \n );\n\n return (\n
    \n \n {canAnswer && (\n <>\n \n id\n {question.id}\n \n {\" — \"}\n {question.creator}\n {\" — \"}\n \n )}\n serverTime()} date={date} />\n \n {question.content}\n
    \n {question.answer && answerDate && (\n <>\n \n serverTime()} date={answerDate} />\n \n \n \n )}\n {\n !question.answer && !canAnswer && (\n Not answered yet.\n )\n }\n { !question.answer && canAnswer && renderAnswerForm() }\n
    \n );\n}\n","import { DateTime } from \"luxon\";\nimport React from \"react\";\nimport { Markdown } from \"./Markdown\";\nimport { RelativeDate } from \"./RelativeDate\";\n\ntype Props = {\n title: string;\n content: string;\n severity: string;\n date: DateTime;\n}\n\nexport function Announcement({\n title, content, severity, date,\n}: Props) {\n return (\n
    \n DateTime.fromJSDate(new Date())} date={date} />\n
    \n {title}\n
    \n
    \n \n
    \n );\n}\n","import { faPaperPlane } from \"@fortawesome/free-solid-svg-icons\";\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\nimport { Trans, t } from \"@lingui/macro\";\nimport { DateTime } from \"luxon\";\nimport React, { useState } from \"react\";\nimport { Loading } from \"src/components/Loading\";\nimport { client } from \"src/TerryClient\";\nimport { Question } from \"src/components/Question\";\nimport { Announcement } from \"src/components/Announcement\";\nimport {\n useAnnouncements, useAskQuestion, useCommunicationErrored, useQuestions,\n} from \"src/hooks/useCommunication\";\nimport { useActions, useServerTime } from \"./ContestContext\";\n\nconst MIN_QUESTION_LENGTH = 10;\n\nexport function Communication() {\n const announcements = useAnnouncements();\n const questions = useQuestions();\n const errored = useCommunicationErrored();\n const askQuestion = useAskQuestion();\n const serverTime = useServerTime();\n const [textArea, setTextArea] = useState(\"\");\n const { isLoggedIn } = useActions();\n\n if (!client.communications) {\n return (\n

    \n The communication system is not available for this contest.\n

    \n );\n }\n\n const doAskQuestion = () => {\n askQuestion(textArea).then(() => setTextArea(\"\"));\n };\n const questionLongEnough = () => textArea.trim().length >= MIN_QUESTION_LENGTH;\n\n const renderAskQuestion = () => (\n <>\n

    Ask a question

    \n