{"version":3,"sources":["utils/cookies.js","container/privateRoute.js","components/commons/main/mainComponent.js","components/authentications/login/loginView.js","utils/api.js","components/authentications/login/loginComponent.js","components/authentications/register/registerView.js","components/authentications/register/registerComponent.js","components/authentications/forgot/forgotView.js","components/authentications/forgot/forgotComponent.js","components/authentications/forgot/resetView.js","components/authentications/forgot/resetComponent.js","components/authentications/logoutComponent.js","components/commons/header/headerComponent.js","utils/privileges.js","components/admin/memberList/memberListView.js","components/commons/preloader/preloaderComponent.js","components/commons/memberNotFound/memberNotFoundComponent.js","components/admin/memberList/memberListComponent.js","components/commons/footer/footerComponent.js","components/admin/controlComponent.js","components/admin/purchases/purchasesComponent.js","components/admin/addMember/addMemberView.js","components/admin/addMember/addMemberComponent.js","utils/announcements.js","components/admin/announcementList/announcementListView.js","components/admin/announcementList/announcementListComponent.js","components/admin/announcementDetails/announcementDetailsView.js","components/admin/announcementDetails/announcementDetailsComponent.js","components/announcement/publicAnnouncementList/publicAnnouncementListView.js","components/announcement/publicAnnouncementList/publicAnnouncementListComponent.js","components/announcement/publicAnnouncementDetails/publicAnnouncementDetailsView.js","components/announcement/publicAnnouncementDetails/publicAnnouncementDetailsComponent.js","components/admin/memberDetails/memberDetailsAdminView.js","components/admin/memberDetails/memberDetailsAdminComponent.js","components/admin/memberDetails/memberUpdateAdminView.js","components/admin/memberDetails/memberUpdateAdminComponent.js","components/member/details/memberUpdateView.js","components/member/details/memberUpdateComponent.js","components/member/details/memberDetailsView.js","components/member/details/memberDetailsComponent.js","components/member/payment/memberPayView.js","components/member/payment/memberPayComponent.js","components/member/payment/payReturnView.js","components/member/payment/payReturnComponent.js","components/notFoundComponent.js","container/App.js","index.js","components/assets/digit.webp","config.js"],"names":["setCookie","cname","cvalue","hours","d","Date","setTime","getTime","expires","toUTCString","document","cookie","getCookie","name","ca","split","i","length","c","charAt","substring","indexOf","getPrivileges","hasPrivilege","privilege","privileges","includes","canManageRegistry","canSeeAccounting","canAnnounce","checkCookie","user","PrivateRoute","Component","component","rest","render","props","to","pathname","state","from","location","MainComponent","className","style","color","this","big","alt","src","digitlogo","children","LoginView","success","message","handleLogin","handleInputChange","Alert","variant","Form","onSubmit","Group","Label","Control","type","onChange","Button","icon","config","paymentOptions","href","rel","target","axios","create","baseURL","apiUrl","responseType","LoginComponent","event","preventDefault","email","password","data","api","post","headers","response","setState","isLoading","token","id","join","history","push","value","checked","RegisterView","handleRegistration","registerForm","e","Row","Col","md","errorMessage","required","pattern","validator","isEmail","Check","inline","label","registrationComplete","RegisterComponent","acceptTerms","firstName","lastName","utuAccount","homeTown","tyyMember","memberId","showBanks","tiviaMember","productId","ForgotView","handleForgot","placeholder","ForgotComponent","ResetView","handleReset","matchPassword","ResetComponent","match","params","passwordAgain","LogoutComponent","HeaderComponent","Navbar","expand","Brand","width","height","Toggle","aria-controls","Collapse","Nav","NavDropdown","title","Item","Link","getPrivilegeString","map","p","privilegeSwitchCase","SearchBar","Search","CSVButtons","onClick","onImport","disabled","handlingCsv","columns","dataField","text","sort","align","headerAlign","textTransform","headerStyle","formatter","cell","row","rowIndex","extraData","accepted","membershipSince","Moment","format","currentDate","membershipUntil","defaultSorted","order","MemberListView","undefined","list","rowEvents","handleClick","selectRow","mode","onSelect","isSelect","updateSelectedMembers","onSelectAll","rows","onMembersPurgeModalOpen","onFunctionsModalOpen","selectedMembersCount","bootstrap4","keyField","search","exportCSV","fileName","separator","ignoreHeader","searchProps","whiteSpace","baseProps","striped","hover","classes","csvProps","Object","keys","PreloaderComponent","size","styles","marginTop","MemberNotFoundComponent","registerLocale","fi","csv","require","MemberListComponent","getSelectedMembersCount","pageChangeLink","showPageChangeAlert","proceedWithPageChange","dataToAdd","Array","isArray","member","addSelectedMember","removeSelectedMember","prevState","selectedMembers","filter","handleFunctionChange","selectedFunction","allowFunctionsExecution","functionsExecutionSuccess","showFunctionsModal","functionsExecutionMessage","handleAcceptanceOptionChange","selectedAcceptanceStatus","closeImportModal","showImportModal","closeFunctionsModal","closePageChangeAlert","handleExport","onExport","perfomSelectedFunction","responses","memberData","memberID","put","Authorization","privilegesStartDate","privilegesEndDate","getUTCMonth","getFullYear","role","all","failedRequest","find","getSelectedFunctionsValue","importModalMessage","showMembersPurgeModal","membersPurgeInProgress","membersPurgeDate","membersPurgeResultMessage","membersPurgeCurrentCount","membersPurgeMaxCount","membersPurgeSuccess","handlePurgeDateChange","date","closeMembersPurgeModal","handleMembersPurge","get","membersToPurge","delay","membersPurgeResults","delayCounter","members","result","Promise","resolve","setTimeout","resultMessage","failedRemovals","writeToString","delimiter","csvString","blob","Blob","downloadLink","createElement","URL","createObjectURL","download","click","input","accept","onchange","pickerEvent","file","files","reader","FileReader","failed","onload","readerEvent","stream","parseString","on","batchSize","batches","slice","importModalCurrentCount","importModalMaxCount","importModalTimeEstimationSeconds","Math","ceil","batch","newData","toLowerCase","readAsText","failedRows","importModalFailedMessage","memberNotFound","bind","FunctionsExecutionButton","float","display","functionsSelectOptions","multiselectDropdownStyles","control","provided","borderColor","boxShadow","option","backgroundColor","Modal","show","onHide","aria-labelledby","centered","Header","closeButton","Title","Body","options","htmlFor","Footer","backdrop","selected","dateFormat","locale","position","aria-valuenow","aria-valuemin","aria-valuemax","toFixed","justifyContent","membersData","console","log","withRouter","FooterComponent","ControlComponent","PurchasesComponent","now","startDate","setFullYear","endDate","body","fetchData","dateData","totalPrice","storeItem","storeItemData","reduce","a","b","key","trigger","classParentString","transitionTime","totalItems","amount","product","prodData","addMemberView","handleAddMember","handleMembershipStartsChange","handleMembershipEndsChange","handlePrivilegeStartChange","handlePrivilegeEndChange","handlePrivilegeChange","handleRemovePrivilege","handleAddPrivilege","defaultValue","index","padding","margin","borderRadius","as","NewMemberComponent","privilegeResponse","modal","showModal","announcementStatusString","status","platformString","platform","AnnouncementListView","announcements","onNewAnnouncement","onAnnouncementClick","setStatusFilter","statuses","announcement","titleFI","titleEN","createdAt","dateString","publishedAt","getStatusText","AnnouncementListComponent","openAnnouncementDetails","statusesResponse","AnnouncementDetailsView","handleFocusChange","changeContentFI","changeContentEN","quillModules","save","publish","deleteAnnouncement","archive","duplicate","makeTemplate","publishType","setPublishType","changePublishDate","handlePlatformChange","platforms","types","uploadAttachment","removeAttachment","canSendAnnouncement","announcementTypeString","theme","contentFI","onFocus","modules","contentEN","attachments","attachment","for","showTimeSelect","timeFormat","timeIntervals","AnnouncementDetailsComponent","announcementStatus","selection","source","editor","quillRef","focusedEditor","content","delta","getContents","alert","replace","delete","formData","FormData","append","toolbar","container","header","background","indent","platformsResponse","typesResponse","PublicAnnouncementListView","PublicAnnouncementListComponent","PublicAnnouncementDetailsView","setLanguage","language","announcer","photoUrl","readOnly","path","PublicAnnouncementDetailsComponent","MemberDetailsAdminView","entitledToCap","entitledToPatch","handleRemove","Table","membershipUntilFormatter","MemberDetailsAdminComponent","onHandleRemove","warning","dialogMessage","innerHTML","modalClose","profileData","capData","patchData","MemberUpdateAdminView","handleUpdateAdmin","handlePasswordReset","MemberUpdateAdminComponent","MemberUpdateView","submitMainForm","MemberUpdateComponent","showPasswordConfirmationModal","cancelPasswordConfirmation","submitPasswordConfirmation","detailsResponse","passwordConfirmation","error","handleUpdateMember","MemberDetailsView","MemberDetailsComponent","MemberPayView","storeItems","addToCart","setSelectedProduct","flexDirection","flexWrap","item","currentProduct","Text","description","products","selectedProduct","price","MemberPayComponent","handleBuy","productIds","cart","paymentIntent","purchaseUrl","window","removeFromCart","findIndex","newCart","splice","showCart","cartPrice","cartCount","marginRight","faShoppingCart","cursor","top","alignItems","fontWeight","toString","marginLeft","faTrash","storeItemsResponse","PayReturnView","purchase","showSuccess","showCancelled","payReturnComponent","purchaseId","intervalId","successParam","purchaseIdParam","setInterval","fetchPurchase","clearInterval","fetchedPurchase","fontSize","marginBottom","Notfound","library","add","faCheck","faTimes","faSignInAlt","faExclamationTriangle","App","exact","AddMemberComponent","NotFoundComponent","ReactDOM","getElementById","module","exports","process"],"mappings":";ktBAAO,SAASA,EAAUC,EAAOC,EAAQC,GACrC,IAAIC,EAAI,IAAIC,KACZD,EAAEE,QAAQF,EAAEG,UAAoB,GAARJ,EAAa,GAAK,MAC1C,IAAIK,EAAU,WAAaJ,EAAEK,cAC7BC,SAASC,OAASV,EAAQ,IAAMC,EAAS,IAAMM,EAAU,UAGtD,SAASI,EAAUX,GAItB,IAHA,IAAIY,EAAOZ,EAAQ,IACfa,EAAKJ,SAASC,OAAOI,MAAM,KAEtBC,EAAI,EAAGA,EAAIF,EAAGG,OAAQD,IAAK,CAEhC,IADA,IAAIE,EAAIJ,EAAGE,GACY,MAAhBE,EAAEC,OAAO,IACZD,EAAIA,EAAEE,UAAU,GAEpB,GAAwB,IAApBF,EAAEG,QAAQR,GACV,OAAOK,EAAEE,UAAUP,EAAKI,OAAQC,EAAED,QAI1C,MAAO,GAOJ,SAASK,IAAiB,IAAD,EAC5B,OAAO,UAACV,EAAU,qBAAX,QAA4B,IAAIG,MAAM,KAG1C,SAASQ,EAAaC,GACzB,IAAIC,EAAab,EAAU,cAC3B,MAAmB,KAAfa,GACOA,EAAWC,SAASF,GAM5B,SAASG,IACZ,IAAIF,EAAab,EAAU,cAE3B,OACIa,EAAWC,SAAS,gBACpBD,EAAWC,SAAS,UACpBD,EAAWC,SAAS,aACpBD,EAAWC,SAAS,gBAIrB,SAASE,IACZ,IAAIH,EAAab,EAAU,cAE3B,OACIa,EAAWC,SAAS,gBACpBD,EAAWC,SAAS,UACpBD,EAAWC,SAAS,aACpBD,EAAWC,SAAS,gBAIrB,SAASG,IACZ,IAAIJ,EAAab,EAAU,cAE3B,OACIa,EAAWC,SAAS,gBACpBD,EAAWC,SAAS,UACpBD,EAAWC,SAAS,aACpBD,EAAWC,SAAS,iBACpBD,EAAWC,SAAS,eAIrB,SAASI,IACZ,IAAIC,EAAOnB,EAAU,wBACrB,MAAa,KAATmB,EACOA,EAEA,K,oBCzDAC,EAlBM,SAAC,GAAD,IAAcC,EAAd,EAAGC,UAAyBC,EAA5B,wBACjB,kBAAC,IAAD,iBACQA,EADR,CAEIC,OAAQ,SAAAC,GAAK,OACS,OAAlBP,IACI,kBAACG,EAAcI,GAEf,kBAAC,IAAD,CACIC,GAAI,CACAC,SAAU,IACVC,MAAO,CAAEC,KAAMJ,EAAMK,kB,wECwB9BC,G,0KA9BX,WACI,OACI,yBACIC,UAAU,uBACVC,MAAO,CACHC,MAAO,YAGX,yBAAKF,UAAU,iCACX,yBACIA,UACI,yBACCG,KAAKV,MAAMW,IAAM,WAAa,eAGnC,kBAAC,IAAD,CAAMV,GAAG,KACL,yBACIW,IAAI,aACJL,UAAU,gCACVM,IAAKC,OAGZJ,KAAKV,MAAMe,gB,GAvBRnB,c,iBC0EboB,G,OAlEG,SAAC,GAAD,IAAGC,EAAH,EAAGA,QAASC,EAAZ,EAAYA,QAASC,EAArB,EAAqBA,YAAaC,EAAlC,EAAkCA,kBAAlC,OACd,yBAAKb,UAAU,uBACX,kBAAC,EAAD,KACI,wBAAIA,UAAU,eAAd,qBACmB,OAAlBd,IAAyB,kBAAC,IAAD,CAAUQ,GAAG,WAAc,KACpDiB,EACG,kBAACG,EAAA,EAAD,CAAOC,QAAUL,EAAqB,UAAX,UACtBC,GAEL,KACJ,kBAACK,EAAA,EAAD,CAAMC,SAAUL,EAAaZ,UAAU,cACnC,kBAACgB,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,yBACA,kBAACH,EAAA,EAAKI,QAAN,CACIC,KAAK,OACLpD,KAAK,QACLqD,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,iBACA,kBAACH,EAAA,EAAKI,QAAN,CACIC,KAAK,WACLpD,KAAK,WACLqD,SAAUT,KAIlB,kBAACU,EAAA,EAAD,CAAQvB,UAAU,cAAcqB,KAAK,SAASN,QAAQ,WAClD,kBAAC,IAAD,CAAiBS,KAAK,gBAD1B,2BAIJ,6BACA,yBAAKxB,UAAU,aACX,6BACKyB,IAAOC,eACJ,2BACI,kBAAC,IAAD,CAAMhC,GAAG,QAAT,uBAEJ,KACJ,2BACI,kBAAC,IAAD,CAAMA,GAAG,UAAT,wBAEJ,2BACI,uBAAGiC,KAAK,qDAAqDC,IAAI,sBAAsBC,OAAO,UAA9F,8BAKR,6BACI,2BACI,uBAAGF,KAAK,wBAAwBC,IAAI,sBAAsBC,OAAO,UAAjE,wBAIJ,2BACI,uBAAGF,KAAK,sBAAsBC,IAAI,sBAAsBC,OAAO,UAA/D,sC,SCrETC,E,OAAAA,EAAMC,OAAO,CACxBC,QAASP,IAAOQ,OAChBC,aAAc,S,6yMCqFHC,E,kDAlFX,WAAY1C,GAAQ,IAAD,8BACf,cAAMA,IASVmB,YAVmB,uCAUL,WAAOwB,GAAP,0FACVA,EAAMC,iBAEFC,EAAQ,EAAK1C,MAAM0C,MACnBC,EAAW,EAAK3C,MAAM2C,SAEpBC,EAAO,CACTF,QACAC,YARM,kBAYiBE,EAAIC,KAAK,SAAUF,EAAM,CAC5CG,QAAS,CACL,eAAgB,sBAdlB,OAYAC,EAZA,OAiBN,EAAKC,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,QAASkC,EAASJ,KAAK9B,QACvBC,QAASiC,EAASJ,KAAK7B,WAI3BiC,EAASJ,KAAKO,OACdH,EAASJ,KAAK3D,YACd+D,EAASJ,KAAKQ,KAEd5F,EAAU,uBAAwBwF,EAASJ,KAAKO,MAAO,KLvBnE3F,EAAU,aKwBgBwF,EAASJ,KAAK3D,WLxBLoE,KAAK,KAAM,KKyBlC7F,EAAU,KAAMwF,EAASJ,KAAKQ,GAAI,KAClC,EAAKvD,MAAMyD,QAAQC,KAAK,oBAjCtB,kDAoCN,EAAKN,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,4CACJmC,WAAW,KA3Cb,0DAVK,wDA2DnBjC,kBAAoB,SAACuB,GACjB,IAAMP,EAASO,EAAMP,OACfuB,EACc,aAAhBvB,EAAOR,KAAsBQ,EAAOwB,QAAUxB,EAAOuB,MACnDnF,EAAO4D,EAAO5D,KAEpB,EAAK4E,SAAL,eACK5E,EAAOmF,KAhEZ,EAAKxD,MAAQ,CACTc,SAAS,EACTC,QAAS,KACT2B,MAAO,KACPC,SAAU,MANC,E,0CAsEnB,WACI,OACI,kBAAC,EAAD,CACI3B,YAAaT,KAAKS,YAClBF,QAASP,KAAKP,MAAMc,QACpBC,QAASR,KAAKP,MAAMe,QACpBE,kBAAmBV,KAAKU,wB,GA7EXxB,a,oDCwMdiE,EAnMM,SAAC,GAKf,IAJH5C,EAIE,EAJFA,QACAC,EAGE,EAHFA,QACA4C,EAEE,EAFFA,mBACA1C,EACE,EADFA,kBAEM2C,EACF,oCACI,wBAAIxD,UAAU,eAAd,sBACA,yQAKA,iQAMA,kGACA,2BACI,uBAAG2B,KAAK,iDAAR,0CAIJ,kBAAC,iBAAD,CACI3B,UAAU,gBACViB,SAAU,SAACwC,GACPA,EAAEpB,iBACFkB,EAAmBE,KAGvB,kBAACC,EAAA,EAAD,KACI,kBAACC,EAAA,EAAD,CAAKC,IAAE,GACH,kBAAC5C,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,gBACA,kBAAC,YAAD,CACIlD,KAAK,YACL+E,GAAG,YACHa,aAAc,CACVC,SAAU,yBACVC,QAAS,qBAEbD,UAAQ,EACRC,QAAQ,mCACRzC,SAAUT,MAItB,kBAAC8C,EAAA,EAAD,CAAKC,IAAE,GACH,kBAAC5C,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,iBACA,kBAAC,YAAD,CACIlD,KAAK,WACL+E,GAAG,WACHa,aAAc,CACVC,SAAU,0BACVC,QAAS,sBAEbD,UAAQ,EACRC,QAAQ,mCACRzC,SAAUT,OAK1B,kBAAC6C,EAAA,EAAD,KACI,kBAACC,EAAA,EAAD,CAAKC,IAAE,GACH,kBAAC5C,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,mBACA,kBAAC,YAAD,CACIlD,KAAK,aACL+E,GAAG,aACHa,aAAc,CACVC,SAAU,4BACVC,QAAS,wBAEbA,QAAQ,wBACRzC,SAAUT,MAItB,kBAAC8C,EAAA,EAAD,CAAKC,IAAE,GACH,kBAAC5C,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,yBACA,kBAAC,YAAD,CACIlD,KAAK,QACL+E,GAAG,QACHa,aAAc,CACVC,SAAU,wCACVE,UAAW,oCAEfA,UAAWA,IAAUC,QACrB3C,SAAUT,OAK1B,kBAAC6C,EAAA,EAAD,KACI,kBAACC,EAAA,EAAD,CAAKC,IAAE,GACH,kBAAC5C,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,kBACA,kBAAC,YAAD,CACIlD,KAAK,WACL+E,GAAG,WACHa,aAAc,CACVC,SAAU,2BACVC,QAAS,uBAEbD,UAAQ,EACRC,QAAQ,mCACRzC,SAAUT,MAItB,kBAAC8C,EAAA,EAAD,CAAKC,IAAE,KAEX,kBAAC5C,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKkD,MAAN,CACIC,QAAM,EACN9C,KAAK,WACLrB,UAAU,aACV/B,KAAK,YACLiC,MAAM,QACND,MAAO,CAAEC,MAAO,SAChBkE,MACI,0BAAMnE,MAAO,CAAEC,MAAO,UAAtB,iBAEJoB,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKkD,MAAN,CACIC,QAAM,EACN9C,KAAK,WACLpD,KAAK,cACL+B,UAAU,eACVE,MAAM,QACN8C,GAAG,cACH/C,MAAO,CAAEC,MAAO,SAChBkE,MACI,0BAAMnE,MAAO,CAAEC,MAAO,UAAtB,4FAKJoB,SAAUT,KAGjBF,EACG,kBAACG,EAAA,EAAD,CAAOC,QAAUL,EAAqB,UAAX,UACtBC,GAEL,KACJ,kBAACY,EAAA,EAAD,CAAQF,KAAK,SAASN,QAAQ,WAC1B,kBAAC,IAAD,CAAiBS,KAAK,gBAD1B,gBAIJ,6BACA,yBAAKxB,UAAU,aACX,2BACI,kBAAC,IAAD,CAAMN,GAAG,KAAT,eAMV2E,EACF,oCACI,wBAAIrE,UAAU,eAAd,0CACA,gFAEA,+bAQA,yBAAKA,UAAU,aACX,2BACI,kBAAC,IAAD,CAAMN,GAAG,KAAT,eAKhB,OACI,kBAAC,EAAD,CAAeU,IAAI,QACdM,EAAU2D,EAAuBb,I,6yMClG/Bc,E,kDAjGX,WAAY7E,GAAQ,IAAD,8BACf,cAAMA,IAoBV8D,mBArBmB,uCAqBE,WAAOnB,GAAP,kFACjBA,EAAMC,iBAED,EAAKzC,MAAM2E,YAHC,uBAIb,EAAK1B,SAAL,2BACO,EAAKjD,OADZ,IAEIc,SAAS,EACTC,QAAS,+CAPA,iCAWX6B,EAAO,CACTgC,UAAW,EAAK5E,MAAM4E,UACtBC,SAAU,EAAK7E,MAAM6E,SACrBC,WAAY,EAAK9E,MAAM8E,WACvBpC,MAAO,EAAK1C,MAAM0C,MAClBqC,SAAU,EAAK/E,MAAM+E,SACrBC,UAAW,EAAKhF,MAAMgF,WAjBT,kBAqBUnC,EAAIC,KAAK,YAAaF,EAAM,CAC/CG,QAAS,CACL,eAAgB,sBAvBX,OAqBPC,EArBO,OA0Bb,EAAKC,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,QAASkC,EAASJ,KAAK9B,QACvBC,QAASiC,EAASJ,KAAK7B,QACvBkE,SAAUjC,EAASJ,KAAKQ,GACxB8B,YAAalC,EAASJ,KAAK9B,WAjCtB,kDAqCb,EAAKmC,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,uDACJmC,WAAW,KA5CN,0DArBF,wDAuEnBjC,kBAAoB,SAACuB,GACjB,IAAMP,EAASO,EAAMP,OACfuB,EACc,aAAhBvB,EAAOR,KAAsBQ,EAAOwB,QAAUxB,EAAOuB,MACnDnF,EAAO4D,EAAO5D,KAEpB,EAAK4E,SAAL,eACK5E,EAAOmF,KA3EZ,EAAKxD,MAAQ,CACTkD,WAAW,EACX0B,UAAW,KACXC,SAAU,KACVC,WAAY,KACZpC,MAAO,KACPqC,SAAU,KACVC,UAAW,KACXG,YAAa,KACbC,UAAW,OACXtE,QAAS,KACTC,QAAS,KACTmE,WAAW,EACXD,SAAU,KACVN,aAAa,GAjBF,E,0CAkFnB,WACI,OACI,6BACI,kBAAC,EAAD,CACIhB,mBAAoBpD,KAAKoD,mBACzB1C,kBAAmBV,KAAKU,kBACxBmE,UAAW7E,KAAKP,MAAMoF,UACtBrE,QAASR,KAAKP,MAAMe,QACpBD,QAASP,KAAKP,MAAMc,e,GA3FRrB,aCsDjB4F,G,OA/CI,SAAC,GAAD,IACfvE,EADe,EACfA,QACAC,EAFe,EAEfA,QACAE,EAHe,EAGfA,kBACAqE,EAJe,EAIfA,aAJe,OAMf,yBAAKlF,UAAU,wBACX,kBAAC,EAAD,KACI,wBAAIA,UAAU,eAAd,sBACA,uBAAGA,UAAU,eAAb,0GACA,uBAAGA,UAAU,eAAb,wFACCW,EACG,kBAACG,EAAA,EAAD,CAAOC,QAAUL,EAAqB,UAAX,UAAuBC,GAClD,KACJ,kBAAC,iBAAD,CACIM,SAAU,SAAAwC,GACNA,EAAEpB,iBACF6C,EAAazB,KAGjB,kBAACzC,EAAA,EAAKE,MAAN,KACI,kBAAC,YAAD,CACIjD,KAAK,QACL+E,GAAG,QACHa,aAAc,CACVC,SAAU,wCACVE,UAAW,oCAEfA,UAAWA,IAAUC,QACrB3C,SAAUT,EACVsE,YAAY,4BAGpB,kBAAC5D,EAAA,EAAD,CAAQF,KAAK,SAASN,QAAQ,WAA9B,iBAIJ,6BACA,yBAAKf,UAAU,aACX,2BACI,kBAAC,IAAD,CAAMN,GAAG,KAAT,kB,6yMCsBL0F,E,kDApEX,WAAY3F,GAAQ,IAAD,8BACf,cAAMA,IAQVyF,aATmB,uCASJ,WAAO9C,GAAP,wFACXA,EAAMC,iBAEFC,EAAQ,EAAK1C,MAAM0C,MACjBE,EAAO,CACTF,SALO,kBAQgBG,EAAIC,KAAK,UAAWF,EAAM,CAC7CG,QAAS,CACL,eAAgB,sBAVjB,OAQDC,EARC,OAaP,EAAKC,SAAL,2BACO,EAAKjD,OACL,CACCc,QAASkC,EAASJ,KAAK9B,QACvBC,QAASiC,EAASJ,KAAK7B,WAjBxB,kDAqBP,EAAKkC,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,yDA3BL,0DATI,wDA0CnBE,kBAAoB,SAACuB,GACjB,IAAMP,EAASO,EAAMP,OACfuB,EACc,aAAhBvB,EAAOR,KAAsBQ,EAAOwB,QAAUxB,EAAOuB,MACnDnF,EAAO4D,EAAO5D,KAEpB,EAAK4E,SAAL,eACK5E,EAAOmF,KA/CZ,EAAKxD,MAAQ,CACTc,SAAS,EACTC,QAAS,KACT2B,MAAO,MALI,E,0CAqDnB,WACI,MAAoCnC,KAAKP,MAAjC0C,EAAR,EAAQA,MAAO5B,EAAf,EAAeA,QAASC,EAAxB,EAAwBA,QAExB,OACI,kBAAC,EAAD,CACI2B,MAAOA,EACP5B,QAASA,EACTC,QAASA,EACTE,kBAAmBV,KAAKU,kBACxBqE,aAAc/E,KAAK+E,mB,GA/DL7F,aCyDfgG,EArDG,SAAC,GAAD,IACd3E,EADc,EACdA,QACAC,EAFc,EAEdA,QACAE,EAHc,EAGdA,kBACAyE,EAJc,EAIdA,YACAC,EALc,EAKdA,cALc,OAOd,kBAAC,EAAD,KACI,wBAAIvF,UAAU,eAAd,iBACCW,EACG,kBAACG,EAAA,EAAD,CAAOC,QAAUL,EAAqB,UAAX,UAAuBC,GAClD,KACJ,kBAAC,iBAAD,CACIM,SAAU,SAAAwC,GACNA,EAAEpB,iBACFiD,EAAY7B,KAGhB,kBAACzC,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,iBACA,kBAAC,YAAD,CACIE,KAAK,WACLC,SAAUT,EACV5C,KAAK,WACL8F,QAAQ,gBACRF,aAAc,CACVE,QAAS,8CAIrB,kBAAC/C,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,2BACA,kBAAC,YAAD,CACIE,KAAK,WACLC,SAAUT,EACV5C,KAAK,gBACL+F,UAAWuB,EACX1B,aAAc,CAAEG,UAAW,0CAGnC,kBAACzC,EAAA,EAAD,CAAQF,KAAK,SAASN,QAAQ,WAA9B,iBAIJ,6BACA,yBAAKf,UAAU,aACX,2BACI,kBAAC,IAAD,CAAMN,GAAG,KAAT,gB,6yMC2BD8F,G,kDA/EX,WAAY/F,GAAQ,IAAD,8BACf,cAAMA,IASV6F,YAVmB,uCAUL,WAAOlD,GAAP,8FACVA,EAAMC,iBAEFwC,EAAW,EAAKpF,MAAMgG,MAAMC,OAAO1C,GACnCD,EAAQ,EAAKtD,MAAMgG,MAAMC,OAAO3C,MAChCR,EAAW,EAAK3C,MAAM2C,SACtBoD,EAAgB,EAAK/F,MAAM+F,cACzBnD,EAAO,CACTqC,WACA9B,QACAR,WACAoD,iBAXM,kBAciBlD,EAAIC,KAAK,SAAUF,EAAM,CAC5CG,QAAS,CACL,eAAgB,sBAhBlB,OAcAC,EAdA,OAmBN,EAAKC,SAAL,2BACO,EAAKjD,OACL,CACCc,QAASkC,EAASJ,KAAK9B,QACvBC,QAASiC,EAASJ,KAAK7B,WAvBzB,kDA2BN,EAAKkC,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,0DAjCN,0DAVK,wDAiDnBE,kBAAoB,SAACuB,GACjB,IAAMP,EAASO,EAAMP,OACfuB,EACc,aAAhBvB,EAAOR,KAAsBQ,EAAOwB,QAAUxB,EAAOuB,MACnDnF,EAAO4D,EAAO5D,KAEpB,EAAK4E,SAAL,eACK5E,EAAOmF,KAxDG,EA4DnBmC,cAAgB,SAACnC,GACb,OAAOA,GAASA,IAAU,EAAKxD,MAAM2C,UA3DrC,EAAK3C,MAAQ,CACTc,SAAS,EACTC,QAAS,KACT4B,SAAU,KACVoD,cAAe,MANJ,E,0CAgEnB,WACI,MAA6BxF,KAAKP,MAA1Bc,EAAR,EAAQA,QAASC,EAAjB,EAAiBA,QAEjB,OACI,kBAAC,EAAD,CACID,QAASA,EACTC,QAASA,EACTE,kBAAmBV,KAAKU,kBACxByE,YAAanF,KAAKmF,YAClBC,cAAepF,KAAKoF,oB,GA1EPlG,aCkBduG,G,4JAhBX,WAKI,OAJAxI,EAAU,uBAAwBY,EAAU,SAAU,GACtDZ,EAAU,YAAaY,EAAU,aAAc,GAC/CZ,EAAU,KAAMY,EAAU,MAAO,GAGS,OAAtCA,EAAU,yBAC4B,KAAtCA,EAAU,wBAEH,kBAAC,IAAD,CAAU0B,GAAG,MAGjB,kBAAC,IAAD,CAAUA,GAAG,e,GAbEL,a,8BCsEfwG,I,mKA1DX,WACI,OACI,yBAAK7F,UAAU,oBACX,kBAAC8F,GAAA,EAAD,CAAQ/E,QAAQ,OAAOgF,OAAO,MAC1B,kBAACD,GAAA,EAAOE,MAAR,CAAcrE,KAAK,WACf,yBACItB,IAAI,eACJ4F,MAAM,KACNC,OAAO,KACPlG,UAAU,yCACVM,IAAKC,MACN,IACH,iDAEJ,kBAACuF,GAAA,EAAOK,OAAR,CAAeC,gBAAc,qBAC7B,kBAACN,GAAA,EAAOO,SAAR,CAAiBrG,UAAU,uBACvB,kBAACsG,GAAA,EAAD,MACMrH,KACEF,KACAC,MACA,kBAACuH,GAAA,EAAD,CACIC,MAAM,WACNxD,GAAG,sBAEFjE,KACG,kBAACwH,GAAA,EAAYE,KAAb,CAAkB9E,KAAK,UAAvB,aAIH3C,KACG,kBAACuH,GAAA,EAAYE,KAAb,CAAkB9E,KAAK,oBAAvB,cAIH1C,KACG,kBAACsH,GAAA,EAAYE,KAAb,CAAkB9E,KAAK,wBAAvB,aAOZ,kBAAC2E,GAAA,EAAII,KAAL,CAAU/E,KAAK,kBAAf,cAGA,kBAAC2E,GAAA,EAAII,KAAL,CAAU/E,KAAK,WAAf,eACCF,IAAOC,eACJ,kBAAC4E,GAAA,EAAII,KAAL,CAAU/E,KAAK,eAAf,UACA,KACJ,kBAAC2E,GAAA,EAAII,KAAL,CAAU/E,KAAK,WAAf,yB,GAlDEtC,c,oGChBjBsH,GAAqB,SAAC9H,GAC/B,OAAKA,EACmBA,EACnB+H,KAAI,SAACC,GAAD,OAAOC,GAAoBD,MAC/B5D,KAAK,MAHc,YAOtB6D,GAAsB,SAAClI,GACzB,OAAQA,GACJ,IAAK,WACD,MAAO,cACX,IAAK,eACD,MAAO,eACX,IAAK,QACD,MAAO,QACX,IAAK,cACD,MAAO,WACX,IAAK,cACD,MAAO,kBACX,IAAK,QACD,MAAO,QACX,IAAK,kBACD,MAAO,gBACX,IAAK,gBACD,MAAO,mBACX,IAAK,YACD,MAAO,aACX,QACI,MAAO,MCfXmI,I,cAAcC,UAAdD,WAEFE,GAAa,SAACxH,GAChB,OACI,yBAAKO,UAAU,OACX,4BACIA,UAAU,kBACVkH,QAAS,kBAAMzH,EAAM0H,YACrBC,SAAU3H,EAAMqD,WAAarD,EAAM4H,aAHvC,oBAkCZ,IAAMC,GAAU,CACZ,CACIC,UAAW,YACXC,KAAM,UACNC,MAAM,EACNC,MAAO,SACPC,YAAa,SACb1H,MAAO,CAAE2H,cAAe,cACxBC,YAAa,CACT5B,MAAO,UAGf,CACIsB,UAAW,WACXC,KAAM,WACNC,MAAM,EACNC,MAAO,SACPC,YAAa,SACbE,YAAa,CACT5B,MAAO,UAGf,CACIsB,UAAW,aACXC,KAAM,MACNC,MAAM,EACNC,MAAO,SACPC,YAAa,SACbE,YAAa,CACT5B,MAAO,UAGf,CACIsB,UAAW,QACXC,KAAM,QACNC,MAAM,EACNI,YAAa,CACT5B,MAAO,SAEXyB,MAAO,SACPC,YAAa,UAEjB,CACIJ,UAAW,WACXC,KAAM,YACNC,MAAM,EACNC,MAAO,SACPC,YAAa,SACbE,YAAa,CACT5B,MAAO,UAGf,CACIsB,UAAW,YACXC,KAAM,gBACNC,MAAM,EACNC,MAAO,SACPC,YAAa,SACbE,YAAa,CACT5B,MAAO,SAEX6B,UAAW,SAACC,EAAMC,EAAKC,EAAUC,GAAtB,OACP,6BACKF,EAAIpD,UACD,2BACI,kBAAC,IAAD,CAAiBpD,KAAK,QAAQtB,MAAM,WAGxC,2BACI,kBAAC,IAAD,CAAiBsB,KAAK,QAAQtB,MAAM,YAMxD,CACIqH,UAAW,WACXC,KAAM,gBACNC,MAAM,EACNC,MAAO,SACPC,YAAa,SACbE,YAAa,CACT5B,MAAO,SAEX6B,UAAW,SAACC,EAAMC,EAAKC,EAAUC,GAAtB,OACP,6BACKF,EAAIG,SACD,2BACI,kBAAC,IAAD,CAAiB3G,KAAK,QAAQtB,MAAM,WAGxC,2BACI,kBAAC,IAAD,CAAiBsB,KAAK,QAAQtB,MAAM,YAMxD,CACIqH,UAAW,kBACXC,KAAM,UACNC,MAAM,EACNC,MAAO,SACPC,YAAa,SACbE,YAAa,CACT5B,MAAO,SAEX6B,UAAW,SAACC,EAAMC,EAAKC,EAAUC,GAAtB,OACP,6BACKF,EAAII,gBACDC,KAAOL,EAAII,iBAAiBE,OAAO,YAEnC,kBAAC,IAAD,CAAiB9G,KAAK,QAAQtB,MAAM,WAKpD,CACIqH,UAAW,kBACXC,KAAM,gBACNC,MAAM,EACNC,MAAO,SACPC,YAAa,SACbE,YAAa,CACT5B,MAAO,SAEX6B,UArJR,SAAkCC,EAAMC,GACpC,IAAMO,EAAc,IAAI9K,KACxB,OAAIuK,EAAIQ,gBACA,IAAI/K,KAAKuK,EAAIQ,kBAAoBD,EAE7B,6BACKF,KAAOL,EAAIQ,iBAAiBF,OAAO,YAAa,IACjD,kBAAC,IAAD,CAAiB9G,KAAK,uBAAuBtB,MAAM,SAIpD,6BAAMmI,KAAOL,EAAIQ,iBAAiBF,OAAO,aAIhD,6BACI,kBAAC,IAAD,CAAiB9G,KAAK,QAAQtB,MAAM,WAuIhD,CACIqH,UAAW,aACXM,YAAa,CACT5B,MAAO,SAEXuB,KAAM,SACNC,MAAM,EACNC,MAAO,SACPC,YAAa,SACbG,UAAW,SAACjJ,GAAD,OAAgB8H,GAAmB9H,MAyEhD4J,GAAgB,CAClB,CACIlB,UAAW,YACXmB,MAAO,SA4IAC,GAvIQ,SAAClJ,GACpB,QAAmBmJ,IAAfnJ,EAAMoJ,KACN,OAAO,KAGX,GAA0B,IAAtBpJ,EAAMoJ,KAAKxK,OACX,OAAO,yBAAK2B,UAAU,gBAAf,iCAGX,IAAM8I,EAAY,CACd5B,QAAS,SAACzD,EAAGuE,EAAKC,GACdxI,EAAMsJ,YAAYf,KAGpBgB,EAAY,CACdC,KAAM,WACNC,SAFc,SAELlB,EAAKmB,EAAUlB,EAAUxE,GAC9BhE,EAAM2J,sBAAsBpB,EAAKmB,IAErCE,YALc,SAKFF,EAAUG,EAAM7F,GACxBhE,EAAM2J,sBAAsBE,EAAMH,KAI1C,SAAShC,IACL1H,EAAM0H,WAGV,SAASoC,IACL9J,EAAM8J,0BAGV,SAASC,IACL/J,EAAM+J,uBAEV,IAAMC,EAAuBhK,EAAMgK,uBAI/B3G,EAAYrD,EAAMqD,UAClBuE,EAAc5H,EAAM4H,YAExB,OACI,kBAAC,KAAD,CACIqC,YAAU,EACVC,SAAS,QACTnH,KAAM/C,EAAMoJ,KACZvB,QAASA,GACTmB,cAAeA,GACfmB,QAAM,EACNC,UAAW,CACPC,SAAU,cACVC,UAAW,IACXC,cAAc,KAGjB,SAACvK,GAAD,OACG,yBAAKO,UAAU,mBACX,yBAAKA,UAAU,OACX,yBAAKA,UAAU,OACX,kBAAC+G,GAAD,iBACQtH,EAAMwK,YADd,CAEI9E,YAAY,WAInBxG,EAAa,gBACdA,EAAa,aACbA,EAAa,iBACbA,EAAa,SACT,yBACIqB,UAAU,MACVC,MAAO,CACHiK,WAAY,WAIhB,kBAAC,IAAD,CACIlK,UAAU,qCACVN,GAAG,cAFP,wBAMA,kBAAC6B,EAAA,EAAD,CACIvB,UAAS,oDAA+CyJ,EAAuB,EAAI,GAAK,gBACxFvC,QAAS,kBAAMsC,KACfpC,SAAmC,IAAzBqC,GAHd,iBAOA,kBAAClI,EAAA,EAAD,CACIvB,UAAS,6BACTkH,QAAS,kBAAMqC,MAFnB,0BAMJ,MAER,6BACA,yBAAKvJ,UAAU,cACX,kBAAC,KAAD,iBACQP,EAAM0K,UADd,CAEIC,SAAO,EACPC,OAAK,EACLrB,UAAWA,EACXsB,QAAQ,kBACRxB,UAAWA,MAGnB,yBAAK9I,UAAU,OACX,yBAAKA,UAAU,OACX,yBAAKA,UAAU,aACX,kBAAC,GAAD,iBACQP,EAAM8K,SADd,CAEIpD,SAAUA,EACVrE,UAAWA,EACXuE,YAAaA,OAIzB,yBAAKrH,UAAU,OACX,yBAAKA,UAAU,2BACX,uDACqB,IAChBwK,OAAOC,KAAKhL,EAAM0K,UAAU3H,MAAMnE,gBC/WxDqM,I,mKArBX,WACI,MAAwB,UAApBvK,KAAKV,MAAMkL,KAEP,yBACItK,IAAI,kBACJL,UAAU,iCACVM,IAAKC,MAKT,yBACIF,IAAI,kBACJL,UAAU,4BACVM,IAAKC,U,GAfQlB,cCF7BuL,GAAS,CACTC,UAAW,QAgBAC,G,4JAZX,WACI,OACI,yBAAK9K,UAAU,yBACX,8DACA,kBAAC,IAAD,CAAMN,GAAG,IAAIM,UAAU,kBAAkBC,MAAO2K,IAAhD,iB,GALsBvL,a,m1MCWtC0L,0BAAe,KAAMC,MAErB,IAAMC,GAAMC,EAAQ,KACdC,G,kDACF,WAAY1L,GAAQ,IAAD,8BACf,cAAMA,IAsCVsJ,YAAc,SAACf,GACP,EAAKoD,2BAA6B,EAClC,EAAKvI,SAAL,2BACO,EAAKjD,OADZ,IAEIyL,eAAe,mBAAD,OAAqBrD,EAAIhF,OAEvC,WACI,EAAKsI,yBAKb,EAAK7L,MAAMyD,QAAQC,KAAnB,0BAA2C6E,EAAIhF,MAnDpC,EAsDnBuI,sBAAwB,WACpB,EAAK9L,MAAMyD,QAAQC,KAAK,EAAKvD,MAAMyL,iBAvDpB,EAyDnBjC,sBAAwB,SAACoC,EAAWrC,GAChC,GAAKA,EAUD,GAAIsC,MAAMC,QAAQF,GAAY,CAAC,IAAD,iBACLA,GADK,IAC1B,2BAAgC,CAAC,IAAtBG,EAAqB,QAC5B,EAAKC,kBAAkBD,IAFD,oCAM1B,EAAKC,kBAAkBJ,QAf3B,GAAIC,MAAMC,QAAQF,GAAY,CAAC,IAAD,iBACLA,GADK,IAC1B,2BAAgC,CAAC,IAAtBG,EAAqB,QAC5B,EAAKE,qBAAqBF,IAFJ,oCAM1B,EAAKE,qBAAqBL,IAjEnB,EA+EnBI,kBAAoB,SAAC5D,GACjB,EAAKnF,UAAS,SAAAiJ,GAAS,MAAK,CACxBC,gBAAgB,GAAD,oBAAMD,EAAUC,iBAAhB,CAAiC/D,SAjFrC,EAoFnB6D,qBAAuB,SAAC7D,GACpB,EAAKnF,UAAS,SAAAiJ,GAAS,MAAK,CACxBC,gBAAiBD,EAAUC,gBAAgBC,QAAO,SAAAL,GAAM,OAAIA,EAAOjH,aAAesD,EAAItD,mBAtF3E,EAyFnB0G,wBAA0B,WACtB,OAAO,EAAKxL,MAAMmM,gBAAgB1N,QA1FnB,EA6FnB4N,qBAAuB,SAACC,GACK,OAArBA,EACA,EAAKrJ,SAAL,2BACO,EAAKjD,OADZ,IAEIuM,yBAAyB,EACzBD,iBAAkBA,EAClBE,0BAA2B,KAC3BC,oBAAoB,EACpBC,0BAA2B,MAG/B,EAAKzJ,SAAL,2BAAmB,EAAKjD,OAAxB,IAA+BsM,iBAAkB,SAxGtC,EA6GnBK,6BAA+B,SAACnK,GAC5B,EAAKS,SAAL,2BACO,EAAKjD,OADZ,IAEI4M,yBAAkD,aAAvBpK,EAAMP,OAAOuB,MACxC+I,yBAAyB,EACzBC,0BAA2B,KAC3BE,0BAA2B,OAnHhB,EAuHnBG,iBAAmB,WACf,EAAK5J,SAAL,2BAAmB,EAAKjD,OAAxB,IAA+B8M,iBAAiB,MAxHjC,EA0HnBlD,qBAAuB,WACnB,EAAK3G,SAAL,2BACO,EAAKjD,OADZ,IAEIsM,iBAAkB,KAClBE,0BAA2B,KAC3BC,oBAAoB,EACpBC,0BAA2B,OAhIhB,EAoInBK,oBAAsB,WAClB,EAAK9J,SAAL,2BACO,EAAKjD,OADZ,IAEIyM,oBAAoB,MAvIT,EA2InBf,oBAAsB,WAClB,EAAKzI,SAAL,2BACO,EAAKjD,OADZ,IAEI0L,qBAAqB,MA9IV,EAkJnBsB,qBAAuB,WACnB,EAAK/J,SAAL,2BACO,EAAKjD,OADZ,IAEI0L,qBAAqB,MArJV,EAyJnBuB,aAAe,SAACpN,GACZA,EAAMqN,YA1JS,EA6JnBC,uBA7JmB,uBA6JM,uGACfb,EAAmB,EAAKtM,MAAMsM,iBACpC,EAAKrJ,SAAS,CAAEsJ,yBAAyB,IACnCa,EAAY,GAHG,SAKR5O,EAAI,EALI,YAKDA,EAAI,EAAKwB,MAAMmM,gBAAgB1N,QAL9B,oBAMP4O,EAAa,CACfzI,UAAW,EAAK5E,MAAMmM,gBAAgB3N,GAAGoG,UACzCC,SAAU,EAAK7E,MAAMmM,gBAAgB3N,GAAGqG,SACxCC,WAAY,EAAK9E,MAAMmM,gBAAgB3N,GAAGsG,WAC1CpC,MAAO,EAAK1C,MAAMmM,gBAAgB3N,GAAGkE,MACrCqC,SAAU,EAAK/E,MAAMmM,gBAAgB3N,GAAGuG,SACxCC,UAAW,EAAKhF,MAAMmM,gBAAgB3N,GAAGwG,UACzCwD,gBAAiB,EAAKxI,MAAMmM,gBAAgB3N,GAAGgK,gBAC/CI,gBAAiB,EAAK5I,MAAM4I,gBAC5BjG,SAAU,EAAK3C,MAAMmM,gBAAgB3N,GAAGmE,SACxCoD,cAAe,EAAK/F,MAAMmM,gBAAgB3N,GAAGuH,cAC7CwC,SAAU,EAAKvI,MAAMmM,gBAAgB3N,GAAG+J,SACxC+E,SAAU,EAAKtN,MAAMmM,gBAAgB3N,GAAG4E,IAGb,yBAA3BkJ,EAAiB9I,MArBR,wBAsBHoJ,EAA2B,EAAK5M,MAAM4M,yBAtBnC,UAuBY/J,EAAI0K,IAAI,gCAAiC,CAAE,OAAUF,EAAY,SAAYT,GAA4B,CAC1H7J,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBA1Bf,QAuBTgP,EAAU5O,GAvBD,kCA8BuB,0BAA3B8N,EAAiB9I,MA9Bb,wBA+BHiK,EAAsB,IAAI5P,KAC1B6P,GAAoB,IAAI7P,MAAO8P,cAAgB,EAAI,IAAI9P,KAAK4P,EAAoBG,cAAgB,EAAG,EAAG,IAAM,IAAI/P,KAAK4P,EAAoBG,cAAe,EAAG,IAhCxJ,UAiCY/K,EAAIC,KACrB,gCACA,CAAE7D,WAAY,CAAC,CAAE,QAAWyO,EAAmB,UAAaD,EAAqBxI,SAAU,EAAKjF,MAAMmM,gBAAgB3N,GAAG4E,GAAIyK,KAAM,mBACnI,CACI9K,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJwH,SAAU,EAAKtN,MAAMmM,gBAAgB3N,GAAG4E,GACxC0K,KAAK,KA3CR,QAiCTV,EAAU5O,GAjCD,kCAiDuB,4BAA3B8N,EAAiB9I,MAjDb,wBAkDHiK,EAAsB,IAAI5P,KAC1B6P,GAAoB,IAAI7P,MAAO8P,cAAgB,EAAI,IAAI9P,KAAK4P,EAAoBG,cAAgB,EAAG,EAAG,IAAM,IAAI/P,KAAK4P,EAAoBG,cAAe,EAAG,IAnDxJ,UAoDY/K,EAAIC,KACrB,gCACA,CAAE7D,WAAY,CAAC,CAAE,QAAWyO,EAAmB,UAAaD,EAAqBxI,SAAU,EAAKjF,MAAMmM,gBAAgB3N,GAAG4E,GAAIyK,KAAM,qBACnI,CACI9K,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJwH,SAAU,EAAKtN,MAAMmM,gBAAgB3N,GAAG4E,GACxC0K,KAAK,KA9DR,QAoDTV,EAAU5O,GApDD,kCAmEyB,0BAA3B8N,EAAiB9I,MAnEf,kCAoEYX,EAAIC,KACrB,wBACA,CAAEJ,MAAQ2K,EAAW3K,OACrB,CACIK,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBA1EnB,QAoETgP,EAAU5O,GApED,eAgFT4O,EAAUhB,QAAO,SAAApJ,GAAQ,OAA8B,IAA1BA,EAASJ,KAAK9B,WAAkBrC,SAAW,EAAKuB,MAAMmM,gBAAgB1N,QACnG,EAAKwE,SAAL,2BACO,EAAKjD,OADZ,IAEIuM,yBAAyB,EACzBC,0BAA2BY,EAAU,GAAGxK,KAAK9B,QAC7C4L,0BAA2BU,EAAU,GAAGxK,KAAK7B,WArFxC,QAKsCvC,IALtC,yEA0FXuP,EAAgBX,EAAUY,MAAK,SAAAhL,GAAQ,OAA8B,IAA1BA,EAASJ,KAAK9B,WAC/D,EAAKmC,SAAL,2BACO,EAAKjD,OADZ,IAEIuM,yBAAyB,EACzBC,0BAA2BuB,EAAcjN,QACzC4L,0BAA2BqB,EAAchN,WA/F5B,0DA7JN,EAiQnBkN,0BAA4B,WACxB,OAAO,EAAKjO,MAAMsM,iBAAmB,EAAKtM,MAAMsM,iBAAiB9I,MAAQ,MAlQ1D,EAsQnBsJ,gBAAkB,SAAC/L,GACf,EAAKkC,SAAL,2BACO,EAAKjD,OADZ,IAEI8M,iBAAiB,EACjBoB,mBAAoBnN,MA1QT,EA8QnBoN,sBAAwB,WACpB,EAAKlL,SAAL,2BACO,EAAKjD,OADZ,IAEImO,uBAAuB,EACvBC,wBAAwB,EACxBC,iBAAkB,IAAIxQ,KACtByQ,0BAA2B,GAC3BC,yBAA0B,KAC1BC,qBAAsB,KACtBC,qBAAqB,MAvRV,EA2RnBC,sBAAwB,SAACC,GACrB,EAAK1L,SAAS,CACVoL,iBAAkBM,KA7RP,EAiSnBC,uBAAyB,WACrB,EAAK3L,SAAL,2BACO,EAAKjD,OADZ,IAEImO,uBAAuB,MApSZ,EAowBnBU,mBApwBmB,uBAowBE,sFACjB,EAAK5L,SAAL,2BAAmB,EAAKjD,OAAxB,IAA+BoO,wBAAwB,KADtC,6JAGgBvL,EAAIiM,IAC7B,gCAAkCrG,KAAO,EAAKzI,MAAMqO,kBAAkB3F,OAAO,cAC7E,CACI3F,QAAS,CACLyK,cACIpP,EACI,wBAER,eACI,sBAZH,OAGP2Q,EAHO,OAgBPC,EAAQ,IACRC,EAAsB,GACxBC,EAAe,EAEV1Q,EAAI,EApBA,YAoBGA,EAAIuQ,EAAenM,KAAKuM,QAAQ1Q,QApBnC,2CAsBgBoE,EAAIC,KAAK,gBAC1B,CACIwK,SAAUyB,EAAenM,KAAKuM,QAAQ3Q,GAAG4E,GACzCV,MAAOqM,EAAenM,KAAKuM,QAAQ3Q,GAAGkE,OAE1C,CACIK,QAAS,CACLyK,cACIpP,EACI,wBAER,eACI,sBAlCX,WAsBCgR,EAtBD,OAsCLH,EAAoB1L,KAAK,CACrB,SAAYwL,EAAenM,KAAKuM,QAAQ3Q,GAAG4E,GAC3C,MAAS2L,EAAenM,KAAKuM,QAAQ3Q,GAAGkE,MACxC,QAAW0M,EAAOxM,KAAK9B,YAEvBoO,GAAgB,GA3Cf,wBA4CDA,EAAe,EA5Cd,UA6CK,IAAIG,SAAQ,SAACC,GAAD,OACdC,WAAWD,EAASN,MA9CvB,gCAkDDE,IAlDC,QAoDL,EAAKjM,SAAL,2BACO,EAAKjD,OADZ,IAEIoO,wBAAwB,EACxBD,uBAAuB,EACvBI,yBACI/P,EAAI,EACRgQ,qBAAsBO,EAAenM,KAAKuM,QAAQ1Q,UA1DjD,kDA8DLwQ,EAAoB1L,KAAK,CAAE,SAAYwL,EAAenM,KAAKuM,QAAQ3Q,GAAG4E,GAAI,MAAS2L,EAAenM,KAAKuM,QAAQ3Q,GAAGkE,MAAO5B,SAAS,IA9D7H,QAoB2CtC,IApB3C,0BAiETgR,EAAgB,IAChBP,EAAoBjB,MAAK,SAAAoB,GAAM,OAAuB,IAAnBA,EAAOtO,WAlEjC,wBAmET0O,EAAa,iEAAiDP,EAAoB7C,QAAO,SAAAgD,GAAM,OAAuB,IAAnBA,EAAOtO,WAAkBrC,OAA/G,2FACb,EAAKwE,SAAL,2BACO,EAAKjD,OADZ,IAEIoO,wBAAwB,EACxBE,0BAA2BkB,EAC3Bf,qBAAqB,EACrBF,yBAA0B,KAC1BC,qBAAsB,QAGpBiB,EAAiBR,EAAoB7C,QAAO,SAAAgD,GAAM,OAAuB,IAAnBA,EAAOtO,WA7E1D,UA8EeuK,GAAIqE,cAAcD,EAAgB,CACtD1M,SAAS,EACT4M,UAAW,MAhFN,QA8EHC,EA9EG,OAkFHC,EAAO,IAAIC,KAAK,CAACF,GAAY,CAC/BnO,KAAM,6BAEJsO,EAAe7R,SAAS8R,cAAc,MAC/BjO,KAAOkO,IAAIC,gBAAgBL,GACxCE,EAAaI,SAAW,sBACxBJ,EAAaK,QAxFJ,wBA4FTZ,EAAa,2DAA8CT,EAAenM,KAAKuM,QAAQ1Q,OAA1E,6BACb,EAAKwE,SAAL,2BACO,EAAKjD,OADZ,IAEIoO,wBAAwB,EACxBE,0BAA2BkB,EAC3Bf,qBAAqB,EACrBF,yBAA0B,KAC1BC,qBAAsB,QAnGjB,8MAyGb,EAAKvL,SAAL,2BAAmB,EAAKjD,OAAxB,IAA+BoO,wBAAwB,EAAOE,0BAzGjD,gJApwBF,EAi3BnB/G,SAj3BmB,uBAi3BR,sFACD8I,EAAQnS,SAAS8R,cAAc,UAC/BvO,KAAO,OACb4O,EAAMC,OAAS,OACfD,EAAME,SAAN,wCAAiB,WAAOC,GAAP,uFACPC,EAAOD,EAAYvO,OAAOyO,MAAM,GADzB,wDAKb,EAAKzN,SAAL,2BACO,EAAKjD,OADZ,IAEIyH,aAAa,KAEXkJ,EAAS,IAAIC,WATN,SAYY,IAAIvB,SAAQ,SAACC,GAClC,IAAMuB,EAAS,GACTnH,EAAO,GACbiH,EAAOG,OAAP,wCAAgB,WAAOC,GAAP,wEACNC,EAASD,EAAY9O,OAAOmN,OAElC/D,GAAI4F,YAAYD,EAAQ,CACpBjO,SAAS,EACT4M,UAAW,MAEVuB,GAAG,OAJR,wCAIgB,WAAOtO,GAAP,kEACR8G,EAAKnG,KAAKX,GADF,2CAJhB,uDAOKsO,GAAG,MAPR,uBAOe,+FAMP,IALMlC,EAAQ,IACRmC,EAAY,EACZC,EAAU,GAGP5S,EAAI,EAAGA,EAAIkL,EAAKjL,OAAQD,GAAK2S,EAClCC,EAAQ7N,KAAKmG,EAAK2H,MAAM7S,EAAGA,EAAI2S,IAI1B3S,EAAI,EAXN,YAWSA,EAAI4S,EAAQ3S,QAXrB,wBAYH,EAAKwE,SAAL,2BACO,EAAKjD,OADZ,IAEI8M,iBAAiB,EACjBoB,mBAAoB,2BACpBoD,yBACK9S,EAAI,GAAK2S,EACdI,oBAAqB7H,EAAKjL,OAC1B+S,iCAAkCC,KAAKC,MAClCN,EAAQ3S,QAAUD,EAAI,KACtBwQ,EAAQ,SAGX2C,EAAQP,EAAQ5S,GAxBnB,UAyBG6Q,QAAQvB,IACV6D,EAAM3K,IAAN,wCAAU,WAAOpE,GAAP,0FAEIgP,EAAU,CACZhN,UAAWhC,EAAK,GAChBiC,SAAUjC,EAAK,GACfkC,WAAU,UACNlC,EAAK,UADC,aACN,EAASiP,cACbnP,MAAOE,EAAK,GACZmC,SAAUnC,EAAK,GACfoC,UACqB,SAAjB,UAAGpC,EAAK,KAEJ,SADEA,EAAK,GAAGiP,cAGlBtJ,SACqB,SAAjB,UAAG3F,EAAK,KAEJ,SADEA,EAAK,GAAGiP,cAGlBrJ,gBACqB,SAAjB,UAAG5F,EAAK,IACF,IAAI/E,KAAK+E,EAAK,IACd,KACVgG,gBACqB,SAAjB,UAAGhG,EAAK,IACF,IAAI/E,KAAK+E,EAAK,IACd,MA1BZ,SA6BIC,EAAIC,KACN,aACA8O,EACA,CACI7O,QAAS,CACLyK,cACIpP,EACI,wBAER,eACI,sBAvCd,sDA4CFyS,EAAOtN,KAAKX,GA5CV,wDAAV,wDA1BD,aA0ECpE,EAAI4S,EAAQ3S,OAAS,GA1EtB,kCA2EO,IAAI4Q,SAAQ,SAACC,GAAD,OACdC,WAAWD,EAASN,MA5EzB,QAW6BxQ,IAX7B,uBAiFP8Q,EAAQuB,GAjFD,6CAVH,2CAAhB,sDA+FAF,EAAOmB,WAAWrB,MA9GT,aAYPsB,EAZO,QAiHEtT,OAAS,GAjHX,kCAkHe4M,GAAIqE,cAAcqC,EAAY,CAClDhP,SAAS,EACT4M,UAAW,MApHN,QAkHHC,EAlHG,OAsHHC,EAAO,IAAIC,KAAK,CAACF,GAAY,CAC/BnO,KAAM,6BAEJsO,EAAe7R,SAAS8R,cAAc,MAC/BjO,KAAOkO,IAAIC,gBAAgBL,GACxCE,EAAaI,SAAW,qBACxBJ,EAAaK,QA5HJ,uDA+HP4B,EA/HO,wCA+HkDD,EAAWtT,OA/H7D,gMAiIb,EAAKwE,SAAL,2BACO,EAAKjD,OADZ,IAEI8M,iBAAiB,EACjBoB,mBAAoB6D,EAAWtT,OAAS,EAAIuT,EApInC,+CAqITV,wBAAyB,KACzBC,oBAAqB,KACrBC,iCAAkC,QAGtC,EAAKvO,SAAL,2BACO,EAAKjD,OADZ,IAEIyH,aAAa,KA5IJ,4CAAjB,sDAgJA4I,EAAMD,QApJC,2CA/2BP,EAAKpQ,MAAQ,CACTkD,WAAW,EACXiJ,gBAAiB,GACjB1E,aAAa,EACb0H,QAAS,KACTrO,QAAS,KACTC,aAASiI,EACTiJ,gBAAgB,EAEhBrF,0BAA0B,EAC1BN,iBAAkB,KAClBC,yBAAyB,EACzBC,0BAA2B,KAC3BE,0BAA2B,GAC3BD,oBAAoB,EAEpB0B,uBAAuB,EACvBE,iBAAkB,KAClBC,0BAA2B,GAC3BF,wBAAwB,EACxBK,qBAAqB,EACrBF,yBAA0B,KAC1BC,qBAAsB,KAEtB9C,qBAAqB,EACrBD,eAAgB,KAEhBqB,iBAAiB,EACjBoB,mBAAoB,KACpBqD,oBAAqB,KACrBD,wBAAyB,KACzBE,iCAAkC,MAEtC,EAAKrI,YAAc,EAAKA,YAAY+I,KAAjB,iBACnB,EAAKxD,sBAAwB,EAAKA,sBAAsBwD,KAA3B,iBApCd,E,0CA2SnB,WAAU,IAAD,OAECC,EAA2B,SAACtS,GAI9B,OACI,6BACI,kBAAC8B,EAAA,EAAD,CACItB,MAAO,CAAE+R,MAAO,QAASC,QAA8C,gBAArC,EAAKpE,4BAAgD,QAAU,QACjG9M,QAAQ,UACRqG,UAAW,EAAKxH,MAAMuM,wBACtBnM,UAAS,UAAK,EAAKJ,MAAMuM,wBAA0B,GAAK,gBACxDjF,QAVQ,WAChBzH,EAAMqN,aAIF,WASA,kBAACvL,EAAA,EAAD,CACItB,MAAO,CAAE+R,MAAO,QAASC,QAA8C,gBAArC,EAAKpE,4BAAgD,QAAU,QACjG9M,QAAQ,UACRqG,UAAW,EAAKxH,MAAMuM,wBACtBnM,UAAS,UAAK,EAAKJ,MAAMuM,wBAA0B,GAAK,gBACxDjF,QAAS,EAAK6F,wBALlB,aAWNmF,EAAyB,CAC3B,CAAE9O,MAAO,uBAAwBgB,MAAO,kCACxC,CAAEhB,MAAO,wBAAyBgB,MAAO,2BACzC,CAAEhB,MAAO,0BAA2BgB,MAAO,wBAC3C,CAAEhB,MAAO,wBAAyBgB,MAAO,wCACzC,CAAEhB,MAAO,cAAegB,MAAO,kBAyF7B+N,EAA4B,CAE9BC,QAAS,SAACC,EAAUzS,GAAX,mBAAC,eACHyS,GADE,IAELC,YAAa,UACbC,UAAW,UACX,UAAW,CACPD,YAAa,UACbC,UAAW,qBAEf,WAAY,CACRD,YAAa,UACbC,UAAW,wBAInBC,OAAQ,SAACH,EAAUzS,GAAX,mBAAC,eACFyS,GADC,IAEJI,gBAAiB,QACjBvS,MAAO,QACP,UAAW,CACPuS,gBAAiB,UACjBvS,MAAO,aAInB,EAyBIC,KAAKP,MAxBLkD,EADJ,EACIA,UACAiM,EAFJ,EAEIA,QACArO,EAHJ,EAGIA,QACAC,EAJJ,EAIIA,QACAkR,EALJ,EAKIA,eACAxK,EANJ,EAMIA,YACAqF,EAPJ,EAOIA,gBACAqB,EARJ,EAQIA,sBACAE,EATJ,EASIA,iBACAD,EAVJ,EAUIA,uBACAG,EAXJ,EAWIA,yBACAC,EAZJ,EAYIA,qBACAF,EAbJ,EAaIA,0BACAG,EAdJ,EAcIA,oBACAhC,EAfJ,EAeIA,mBACAH,EAhBJ,EAgBIA,iBACAM,EAjBJ,EAiBIA,yBACAF,EAlBJ,EAkBIA,0BACAF,EAnBJ,EAmBIA,0BACAd,EApBJ,EAoBIA,oBACAwC,EArBJ,EAqBIA,mBACAoD,EAtBJ,EAsBIA,wBACAC,EAvBJ,EAuBIA,oBACAC,EAxBJ,EAwBIA,iCAGJ,OAAItO,EACO,kBAAC,GAAD,MAGP+O,EAEI,6BACI,kBAAC,GAAD,OAOR,6BACI,kBAAC,KAAD,CACInI,YAAU,EACVC,SAAS,aACTnH,KAAMrC,KAAKP,MAAMmM,gBACjBzE,QAzJuB,CAC/B,CACIC,UAAW,YACXC,KAAM,UACNC,MAAM,EACNC,MAAO,SACPC,YAAa,SACb1H,MAAO,CAAE2H,cAAe,cACxBC,YAAa,CACT5B,MAAO,UAGf,CACIsB,UAAW,WACXC,KAAM,WACNC,MAAM,EACNC,MAAO,SACPC,YAAa,SACbE,YAAa,CACT5B,MAAO,UAGf,CACIsB,UAAW,aACXC,KAAM,MACNC,MAAM,EACNC,MAAO,SACPC,YAAa,SACbE,YAAa,CACT5B,MAAO,UAGf,CACIsB,UAAW,QACXC,KAAM,QACNvH,MAAO,CAAEgS,QAAS,QAClBpK,YAAa,CACToK,QAAS,SAGjB,CACI1K,UAAW,WACXC,KAAM,YACNvH,MAAO,CAAEgS,QAAS,QAClBpK,YAAa,CACToK,QAAS,SAGjB,CACI1K,UAAW,YACXC,KAAM,gBACNvH,MAAO,CAAEgS,QAAS,QAClBpK,YAAa,CACToK,QAAS,SAGjB,CACI1K,UAAW,WACXC,KAAM,gBACNvH,MAAO,CAAEgS,QAAS,QAClBpK,YAAa,CACToK,QAAS,SAGjB,CACI1K,UAAW,kBACXC,KAAM,UACNvH,MAAO,CAAEgS,QAAS,QAClBpK,YAAa,CACToK,QAAS,SAGjB,CACI1K,UAAW,kBACXC,KAAM,gBACNvH,MAAO,CAAEgS,QAAS,QAClBpK,YAAa,CACToK,QAAS,UA6ETxJ,cAhKoB,CAC5B,CACIlB,UAAW,YACXmB,MAAO,SA8JHmB,UAAW,CACPC,SAAU,cACVC,UAAW,IACXC,cAAc,KAGjB,SAACvK,GAAD,OAEG,6BAEI,kBAACiT,GAAA,EAAD,CACIC,KAAMtG,EACNuG,OAAQ,EAAKjG,oBACbhC,KAAK,KACLkI,kBAAgB,gCAChBC,UAAQ,GAER,kBAACJ,GAAA,EAAMK,OAAP,CAAcC,aAAW,GACrB,kBAACN,GAAA,EAAMO,MAAP,CAAajQ,GAAG,iCAAhB,0BAIJ,kBAAC0P,GAAA,EAAMQ,KAAP,KACI,yBAAKlT,UAAU,mBACX,yBAAKA,UAAU,uBACX,kBAAC,KAAD,iBACQP,EAAM0K,UADd,CAEIC,SAAO,EACPC,OAAK,EACLC,QAAQ,+BAGhB,yBAAKtK,UAAU,OACX,yBAAKA,UAAU,OACX,yBAAKA,UAAU,2BACX,uDACqB,IAChBwK,OAAOC,KAAKhL,EAAM0K,UAAU3H,MAAMnE,YAMvD,6BACI,8DACA,kBAAC,KAAD,CACIuM,OAAQuH,EACR7Q,SAAU,EAAK2K,qBAAsB9G,YAAY,mBAAmB/B,MAAO8I,GAAsC,KAAMiH,QAASjB,IACpI,yBAAKlS,UAAU,mBAAmBC,MAAO,CAAEgS,QAA8C,yBAArC,EAAKpE,4BAAyD,QAAU,SACxH,6CACA,6BACI,2BAAOxM,KAAK,QAAQC,SAAU,EAAKiL,6BAA8BvJ,GAAG,qBAChEK,SAAsC,IAA7BmJ,EAAmCvO,KAAK,6BAA6BmF,MAAM,aACxF,2BAAOgQ,QAAQ,sBAAf,YAA0C,kBAAC,IAAD,CAAiB5R,KAAK,QAAQtB,MAAM,WAC9E,6BACA,2BAAOmB,KAAK,QAAQC,SAAU,EAAKiL,6BAA8BvJ,GAAG,sBAChEK,SAAsC,IAA7BmJ,EAAoCvO,KAAK,6BAA6BmF,MAAM,gBACzF,2BAAOgQ,QAAQ,uBAAf,MAAwC,kBAAC,IAAD,CAAiB5R,KAAK,QAAQtB,MAAM,WAGpF,yBAAKF,UAAU,mBAAmBC,MAAO,CAAEgS,QAA8C,0BAArC,EAAKpE,4BAA0D,QAAU,SACzH,kFAEJ,yBAAK7N,UAAU,mBAAmBC,MAAO,CAAEgS,QAA8C,4BAArC,EAAKpE,4BAA4D,QAAU,SAC3H,+EAEJ,yBAAK7N,UAAU,mBAAmBC,MAAO,CAAEgS,QAA8C,0BAArC,EAAKpE,4BAA0D,QAAU,SACzH,wHAEJ,yBAAK7N,UAAU,mBAAmBC,MAAO,CAAEgS,QAA8C,gBAArC,EAAKpE,4BAAgD,QAAU,SAC/G,2EAEJ,yBAAK5N,MAAO,CAAEgS,QAAS3F,EAA4B,QAAU,SACzD,kBAACxL,EAAA,EAAD,CAAOC,QAAUqL,EAAuC,UAAX,UACxCE,MAKjB,kBAACoG,GAAA,EAAMW,OAAP,CAAcpT,MAAO,CAAEgS,QAAS,UAC5B,kBAAC1Q,EAAA,EAAD,CAAQtB,MAAO,CAAE+R,MAAO,QAAUjR,QAAQ,QAAQmG,QAAS,EAAKyF,qBAAhE,WAGA,kBAACoF,EACOtS,EAAM8K,YAItB,kBAACmI,GAAA,EAAD,CACIC,KAAMrH,EACNsH,OAAQ,EAAKhG,qBACbjC,KAAK,KACLkI,kBAAgB,gCAChBC,UAAQ,GAER,kBAACJ,GAAA,EAAMK,OAAP,CAAcC,aAAW,GACrB,kBAACN,GAAA,EAAMO,MAAP,CAAajQ,GAAG,iCAAhB,aAIJ,kBAAC0P,GAAA,EAAMQ,KAAP,KACI,yBAAKlT,UAAU,mBACX,yBAAKA,UAAU,OACX,yBAAKA,UAAU,OACX,8HAKhB,kBAAC0S,GAAA,EAAMW,OAAP,CAAcpT,MAAO,CAAEgS,QAAS,UAC5B,kBAAC1Q,EAAA,EAAD,CAAQtB,MAAO,CAAE+R,MAAO,QAAUjR,QAAQ,QAAQmG,QAAS,EAAK0F,sBAAhE,WAGA,kBAACrL,EAAA,EAAD,CAAQtB,MAAO,CAAE+R,MAAO,SAAWjR,QAAQ,UAAUmG,QAAS,EAAKqE,uBAAnE,kBASpB,kBAACmH,GAAA,EAAD,CACIY,SAAS,SACTX,KAAM5E,EACN6E,OAAQzS,KAAKqO,uBACb7D,KAAK,KACLkI,kBAAgB,gCAChBC,UAAQ,GAER,kBAACJ,GAAA,EAAMK,OAAP,CAAcC,aAAW,GACrB,kBAACN,GAAA,EAAMO,MAAP,CAAajQ,GAAG,iCAAhB,0BAIJ,kBAAC0P,GAAA,EAAMQ,KAAP,KAEI,gJACA,yBAAKlT,UAAU,WACX,0BAAMA,UAAU,WAAhB,6BACA,kBAAC,KAAD,CACIuT,SAAUtF,GAAsC,IAAIxQ,KACpD6D,SAAUnB,KAAKmO,sBACfkF,WAAW,aACXxT,UAAU,eACVyT,OAAO,QAGf,yBAAKzT,UAAU,UAAUC,MAAO,CAAEgS,QAASjE,EAAyB,QAAU,SAC1E,6BAAK,gLACL,yBAAK/N,MAAO,CAAEyT,SAAU,WAAYxN,OAAQ,SACvCiI,GAA4BC,GACzB,yBAAKpO,UAAU,YACX,yBACIA,UAAU,eACVyN,KAAK,cACLxN,MAAO,CACHgG,MAAM,GAAD,OAAMkI,EACHC,EACJ,IAFC,MAKTuF,gBACKxF,EACGC,EACJ,IAEJwF,gBAAc,IACdC,gBAAc,QAGT1F,EACGC,EACJ,KACF0F,QAAQ,GArBd,QA4BhB,yBAAK9T,UAAU,UAAUC,MAAO,CAAEgS,QAAuC,KAA9B/D,EAAmC,QAAU,SACpF,kBAACpN,EAAA,EAAD,CAAOC,QAASsN,EAAsB,UAAY,UAC7CH,KAKb,kBAACwE,GAAA,EAAMW,OAAP,CAAcpT,MAAO,CAAE8T,eAAgB,kBACnC,kBAACxS,EAAA,EAAD,CAAQtB,MAAO,CAAE+R,MAAO,QAAUjR,QAAQ,QAAQmG,QAAS/G,KAAKqO,wBAAhE,WAGA,kBAACjN,EAAA,EAAD,CACIvB,UAAS,UAAKgO,EAAyB,eAAiB,IACxD/N,MAAO,CAAE+R,MAAO,SAAWjR,QAAQ,SAASmG,QAAS8G,EAAyB,KAAO7N,KAAKsO,oBAF9F,YASR,kBAACiE,GAAA,EAAD,CACIC,KAAMjG,EACNkG,OAAQzS,KAAKsM,iBACb9B,KAAK,KACLkI,kBAAgB,gCAChBC,UAAQ,GAER,kBAACJ,GAAA,EAAMK,OAAP,CAAcC,aAAW,GACrB,kBAACN,GAAA,EAAMO,MAAP,CAAajQ,GAAG,iCAAhB,aAIJ,kBAAC0P,GAAA,EAAMQ,KAAP,KACI,2BAAIpF,GACHoD,GAA2BC,GACxB,yBAAKnR,UAAU,YACX,yBACIA,UAAU,eACVyN,KAAK,cACLxN,MAAO,CACHgG,MAAM,GAAD,OAAMiL,EACHC,EACJ,IAFC,MAKTwC,gBACKzC,EACGC,EACJ,IAEJyC,gBAAc,IACdC,gBAAc,QAGT3C,EACGC,EACJ,KACF2C,QAAQ,GArBd,MA0BP1C,GACG,oDAC2B,IACtBA,EAFL,iBAMR,kBAACsB,GAAA,EAAMW,OAAP,KACI,4BACIrT,UAAU,kBACVkH,QAAS/G,KAAKsM,iBACdpL,KAAK,SAHT,cASR,kBAAC,GAAD,CACIwH,KAAMkG,EACNrO,QAASA,EACT0I,sBAAuBjJ,KAAKiJ,sBAC5BzI,QAASA,EACToI,YAAa5I,KAAK4I,YAClB5B,SAAUhH,KAAKgH,SACfsC,qBAAsBtJ,KAAKiL,wBAC3B7B,wBAAyBpJ,KAAK4N,sBAC9BvE,qBAAsBrJ,KAAKqJ,qBAC3B1G,UAAW3C,KAAK2C,UAChBuE,YAAaA,O,uEA0Q7B,sHAEgC5E,EAAIiM,IAAI,cAAe,CAC3C/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBALhC,cAEYgW,EAFZ,gBAS8B/E,QAAQvB,IAC1BsG,EAAYxR,KAAKoE,IAAjB,wCAAqB,WAAO+E,GAAP,yEACjBsI,QAAQC,IAAIvI,GADK,iCAuCVA,IAvCU,2CAArB,wDAVZ,OAScoD,EATd,OAyDQ5O,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCkD,WAAW,EACXpC,SAAS,EACTmR,eAAgB9C,EAAQ8C,eACxB9C,aA/DhB,kDAmEQ5O,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,iDACJmC,WAAW,EACX+O,gBAAgB,KA3EhC,0D,2DAzgC8BxS,aA2lCnB8U,eAAWhJ,IC3lCXiJ,I,mKAjBX,WACI,OACI,yBAAKpU,UAAU,oBACX,uBAAG2B,KAAK,qDAAqDC,IAAI,sBAAsBC,OAAO,UAA9F,4BAGA,uBAAGF,KAAK,wBAAwBC,IAAI,sBAAsBC,OAAO,UAAjE,uBAGA,uBAAGF,KAAK,sBAAsBC,IAAI,sBAAsBC,OAAO,UAA/D,+C,GAVcxC,cC4BfgV,G,4JAtBX,WACI,OACI,6BACI,kBAAC,GAAD,MACC1V,EAAa,gBACdA,EAAa,aACbA,EAAa,iBACbA,EAAa,SACT,yBAAKqB,UAAU,WACX,kBAAC,GAAD,OAGJ,6BACI,kBAAC,IAAD,CAAUN,GAAG,aAGrB,kBAAC,GAAD,W,GAjBeL,a,60MCsMhBiV,G,kDAnMX,WAAY7U,GAAQ,IAAD,sBACf,cAAMA,GAEN,IAAM8U,EAAM,IAAI9W,KAHD,OAKf,EAAKmC,MAAQ,CACTkD,WAAW,EACXpC,QAAS,KACTC,QAAS,KACT6B,KAAM,KACNgS,UAAW,IAAI/W,KAAK8W,EAAIE,YAAYF,EAAI/G,cAAgB,IACxDkH,QAAS,IAAIjX,MAXF,E,qFAenB,oGACI0C,KAAK0C,SAAS,CACVC,WAAW,IAFnB,SAKY6R,EAAO,CACPH,UAAWrU,KAAKP,MAAM4U,UACtBE,QAASvU,KAAKP,MAAM8U,SAPhC,SAS6BjS,EAAIC,KAAK,oBAAqBiS,EAAM,CACrDhS,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAZhC,OASY4E,EATZ,OAgBQzC,KAAK0C,SAAL,2BACO1C,KAAKP,OADZ,IAEIkD,WAAW,EACXpC,SAAS,EACT8B,KAAMI,EAASJ,QApB3B,gDAuBQrC,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,gDACJmC,WAAW,KA9B3B,yD,0EAoCA,WAAU,IAAD,OACL,EAAgD3C,KAAKP,MAA7CkD,EAAR,EAAQA,UAAWN,EAAnB,EAAmBA,KAAMgS,EAAzB,EAAyBA,UAAWE,EAApC,EAAoCA,QAEpC,OACI,6BACI,kBAAC,GAAD,MACA,yBAAK1U,UAAU,kBACX,0DACA,8JAKA,oOAOJ,yBAAKA,UAAU,WACX,kBAAC,KAAD,CACIuT,SAAUiB,EACVlT,SAAU,SAAC8B,GAAD,OACN,EAAKP,SAAS,CACV2R,UAAWpR,KAGnBoQ,WAAW,aACXxT,UAAU,eACVyT,OAAO,OAEX,iCACA,kBAAC,KAAD,CACIF,SAAUmB,EACVpT,SAAU,SAAC8B,GAAD,OACN,EAAKP,SAAS,CACV6R,QAAStR,KAGjBoQ,WAAW,aACXxT,UAAU,eACVyT,OAAO,OAEX,4BACIpS,KAAK,SACLrB,UAAU,kBACVkH,QAAS,kBAAM,EAAK0N,cAHxB,QAOG,IACN9R,GAAa,kBAAC,GAAD,MACbN,GACGgI,OAAOC,KAAKjI,GAAMoE,KAAI,SAAC2H,GACnB,IAAMsG,EAAWrS,EAAK+L,GAEhBuG,EAAatK,OAAOC,KAAKoK,GAC1BjO,KAAI,SAACmO,GACF,IAAMC,EAAgBH,EAASE,GAC/B,OAAOvK,OAAOC,KAAKuK,GACdpO,KAAI,SAACC,GAAD,OAAOmO,EAAcnO,GAAGiO,cAC5BG,QAAO,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,IAAG,MAEhCF,QAAO,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,IAAG,GAE7B,OACI,kBAAC,KAAD,CACIC,IAAK7G,EACL8G,QACI,yBAAKrV,UAAU,iCACX,4BACKuO,EADL,IACW,gCAAMuG,EAAN,YAEX,kCAGRQ,kBAAkB,yBAClBC,eAAgB,KAEf/K,OAAOC,KAAKjI,EAAK+L,IAAO3H,KAAI,SAACmO,GAC1B,IAAMC,EAAgBxS,EAAK+L,GAAMwG,GAE3BS,EAAahL,OAAOC,KACtBuK,GAECpO,KAAI,SAACC,GAAD,OAAOmO,EAAcnO,GAAG4O,UAC5BR,QAAO,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,IAAG,GACvBL,EAAatK,OAAOC,KACtBuK,GAECpO,KAAI,SAACC,GAAD,OAAOmO,EAAcnO,GAAGiO,cAC5BG,QAAO,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,IAAG,GAC7B,OACI,kBAAC,KAAD,CACIC,IAAKL,EACLM,QACI,yBAAKrV,UAAU,iCACX,4BACI,2BAAIwV,EAAJ,MAAsB,IACrBT,EAAW,IACZ,gCAAMD,EAAN,YAEJ,kCAGRQ,kBAAkB,+BAClBC,eAAgB,KAEf/K,OAAOC,KACJjI,EAAK+L,GAAMwG,IACbnO,KAAI,SAAC8O,GACH,IAAMC,EACFnT,EAAK+L,GAAMwG,GACPW,GAER,OACI,uBAAGN,IAAKM,GACJ,2BACKC,EAASF,OADd,MAEK,IACJC,EAAS,IACV,+BACM,IAEEC,EAASb,WACX,IAJN,sBAgBxC,kBAAC,GAAD,W,GA9LiBzV,a,OCEjC0L,0BAAe,KAAMC,MAErB,IAwRe4K,GAxRO,SAAC,GAAD,IAClBpR,EADkB,EAClBA,UACAC,EAFkB,EAElBA,SACAC,EAHkB,EAGlBA,WACApC,EAJkB,EAIlBA,MACAqC,EALkB,EAKlBA,SAEA9F,GAPkB,EAMlB+F,UANkB,EAOlB/F,YACAuJ,EARkB,EAQlBA,gBACAI,EATkB,EASlBA,gBACAqN,EAVkB,EAUlBA,gBACAhV,EAXkB,EAWlBA,kBACAiV,EAZkB,EAYlBA,6BACAC,EAbkB,EAalBA,2BACAC,EAdkB,EAclBA,2BACAC,EAfkB,EAelBA,yBACAC,EAhBkB,EAgBlBA,sBACAC,EAjBkB,EAiBlBA,sBACAC,EAlBkB,EAkBlBA,mBACA1V,EAnBkB,EAmBlBA,QACAC,EApBkB,EAoBlBA,QApBkB,OAsBlB,yBAAKX,UAAU,aACX,kBAAC,iBAAD,CACIiB,SAAU,SAACwC,GACPA,EAAEpB,iBACFwT,EAAgBpS,KAGpB,kBAACzC,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,gBACA,kBAAC,YAAD,CACIlD,KAAK,YACL+E,GAAG,YACHqT,aAAc7R,EACdX,aAAc,CACVC,SAAU,yBACVC,QAAS,qBAEbD,UAAQ,EACRC,QAAQ,mCACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,iBACA,kBAAC,YAAD,CACIlD,KAAK,WACL+E,GAAG,WACHqT,aAAc5R,EACdZ,aAAc,CACVC,SAAU,0BACVC,QAAS,sBAEbD,UAAQ,EACRC,QAAQ,mCACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,mCACA,kBAAC,YAAD,CACIlD,KAAK,aACL+E,GAAG,aACHqT,aAAc3R,EACdb,aAAc,CACVC,SAAU,4BACVC,QAAS,wBAEbA,QAAQ,yBACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,yBACA,kBAAC,YAAD,CACIlD,KAAK,QACLoY,aAAc/T,EACdU,GAAG,QACHa,aAAc,CACVC,SAAU,wCACVE,UAAW,oCAEfA,UAAWA,IAAUC,QACrB3C,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,kBACA,kBAAC,YAAD,CACIlD,KAAK,WACL+E,GAAG,WACHqT,aAAc1R,EACdd,aAAc,CACVC,SAAU,2BACVC,QAAS,uBAEbD,UAAQ,EACRC,QAAQ,mCACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKkD,MAAN,CACI7C,KAAK,WACLC,SAAUT,EACV5C,KAAK,YACLmG,MAAM,mBAGd,6BAECvF,EAAW+H,KAAI,SAAChI,EAAW0X,GAAZ,OACZ,yBACIlB,IAAKkB,EACLrW,MAAO,CACHwS,gBAAiB,UACjB8D,QAAS,OACTC,OAAQ,OACRC,aAAc,QAGlB,kBAACzV,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,cACA,kBAACH,EAAA,EAAKI,QAAN,CACIsV,GAAG,SACHzY,KAAI,qBAAgBqY,EAAhB,UACJlT,MAAOxE,EAAU6O,KACjBnM,SAAU,SAACmC,GAAD,OACNyS,EAAsBI,EAAO7S,EAAE5B,OAAOuB,SAG1C,4BAAQA,MAAM,aACTuD,GAAmB,CAAC,eAEzB,4BAAQvD,MAAM,SACTuD,GAAmB,CAAC,WAEzB,4BAAQvD,MAAM,YACTuD,GAAmB,CAAC,cAEzB,4BAAQvD,MAAM,gBACTuD,GAAmB,CAAC,kBAEzB,4BAAQvD,MAAM,eACTuD,GAAmB,CAAC,iBAEzB,4BAAQvD,MAAM,eACTuD,GAAmB,CAAC,iBAEzB,4BAAQvD,MAAM,SACTuD,GAAmB,CAAC,WAEzB,4BAAQvD,MAAM,mBACTuD,GAAmB,CAAC,qBAEzB,4BAAQvD,MAAM,iBACTuD,GAAmB,CAAC,qBAIjC,kBAAC3F,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,cACA,kBAAC,KAAD,CACIoS,SACI3U,EAAU4V,UACJ,IAAI/W,KAAKmB,EAAU4V,WACnB,KAEVlT,SAAU,SAAC8B,GAAD,OACN4S,EAA2B5S,EAAOkT,IAEtC9C,WAAW,aACXxT,UAAU,eACVyT,OAAO,QAGf,kBAACzS,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,sBACA,kBAAC,KAAD,CACIoS,SACI3U,EAAU8V,QACJ,IAAIjX,KAAKmB,EAAU8V,SACnB,KAEVpT,SAAU,SAAC8B,GAAD,OACN6S,EAAyB7S,EAAOkT,IAEpC9C,WAAW,aACXxT,UAAU,eACVyT,OAAO,QAGf,kBAACzS,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAK0C,IAAN,KACI,4BACIrC,KAAK,SACLrB,UAAU,kBACVkH,QAAS,kBAAMiP,EAAsBG,KAHzC,gBAWhB,4BACIjV,KAAK,SACLrB,UAAU,kBACVkH,QAASkP,GAHb,qBAOA,6BAEA,kBAACpV,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKkD,MAAN,CACI7C,KAAK,WACLC,SAAUT,EACV5C,KAAK,WACLmG,MAAM,+BAGd,yBAAKpE,UAAU,OACX,yBAAKA,UAAU,OACX,kBAACgB,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,CAAYnB,UAAU,WAAtB,qBAGA,kBAAC,KAAD,CACIuT,SACInL,EACM,IAAI3K,KAAK2K,GACT,KAEV9G,SAAUwU,EACVtC,WAAW,aACXxT,UAAU,eACVyT,OAAO,SAInB,yBAAKzT,UAAU,OACX,kBAACgB,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,CAAYnB,UAAU,WAAtB,6BAGA,kBAAC,KAAD,CACIuT,SACI/K,EACM,IAAI/K,KAAK+K,GACT,KAEVlH,SAAUyU,EACVvC,WAAW,aACXxT,UAAU,eACVyT,OAAO,UAKvB,wHAIC9S,IAAYD,EACT,kBAACI,EAAA,EAAD,CAAOC,QAAUL,EAAqB,UAAX,UACtBC,GAEL,KACJ,6BACI,4BAAQX,UAAU,mBAAlB,6BACA,kBAAC,IAAD,CAAMA,UAAU,8BAA8BN,GAAG,UAAjD,gB,+yMCVDiX,G,kDAvQX,WAAYlX,GAAQ,IAAD,8BACf,cAAMA,IAyBVoW,gBA1BmB,wCA0BD,WAAOzT,GAAP,+FACdA,EAAMC,iBACAG,EAAO,CACTgC,UAAW,EAAK5E,MAAM4E,UACtBC,SAAU,EAAK7E,MAAM6E,SACrBC,WAAY,EAAK9E,MAAM8E,WACvBpC,MAAO,EAAK1C,MAAM0C,MAClBqC,SAAU,EAAK/E,MAAM+E,SACrByD,gBAAiB,EAAKxI,MAAMwI,gBAC5BI,gBAAiB,EAAK5I,MAAM4I,gBAC5B5D,UAAW,EAAKhF,MAAMgF,UACtBuD,SAAU,EAAKvI,MAAMuI,SACrB+E,SAAU,EAAKtN,MAAMsN,UAZX,kBAgBazK,EAAIC,KAAK,aAAcF,EAAM,CAChDG,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAnBd,UAgBJ4E,EAhBI,OAuBVqR,QAAQC,IAAItR,EAASJ,OAIjBI,EAASJ,KAAKQ,GA3BR,kCA4BoBP,EAAIC,KAC1B,oBACA,CAAE7D,WAAY,EAAKe,MAAMf,YACzB,CACI8D,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJwH,SAAUtK,EAASJ,KAAKQ,GACxB0K,KAAK,KAtCX,QA4BNkJ,EA5BM,OA0CN3C,QAAQC,IAAI0C,EAAkBpU,MA1CxB,QA6CNqU,GAAQ,GACNnW,EACFkC,EAASJ,KAAK9B,SACdkC,EAASJ,KAAK7B,WACZiW,IAAD,UAAsBA,EAAkBpU,YAAxC,aAAsB,EAAwB9B,aAE/CmW,GAAQ,GAEZ,EAAKhU,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,QAASA,EACTC,QAASiC,EAASJ,KAAK7B,QACvBmW,UAAWD,KA3DT,kDA+DV,EAAKhU,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,0DACJmC,WAAW,KAtET,0DA1BC,wDAsGnBjC,kBAAoB,SAACuB,GACjB,IAAMP,EAASO,EAAMP,OACfuB,EACc,aAAhBvB,EAAOR,KAAsBQ,EAAOwB,QAAUxB,EAAOuB,MACnDnF,EAAO4D,EAAO5D,KAEpB,EAAK4E,SAAL,eACK5E,EAAOmF,KA7GG,EAiHnB0S,6BAA+B,SAACvH,GAC5B,EAAK1L,SAAS,CACVuF,gBAAiBmG,KAnHN,EAuHnBwH,2BAA6B,SAACxH,GAC1B,EAAK1L,SAAS,CACV2F,gBAAiB+F,KAzHN,EA6HnByH,2BAA6B,SAACzH,EAAM+H,GAChC,EAAKzT,SAAS,CACVhE,WAAY,EAAKe,MAAMf,WAAW+H,KAAI,SAAChI,EAAWR,GAI9C,OAHIA,IAAMkY,IACN1X,EAAU4V,UAAYjG,GAEnB3P,QAnIA,EAuInBqX,yBAA2B,SAAC1H,EAAM+H,GAC9B,EAAKzT,SAAS,CACVhE,WAAY,EAAKe,MAAMf,WAAW+H,KAAI,SAAChI,EAAWR,GAI9C,OAHIA,IAAMkY,IACN1X,EAAU8V,QAAUnG,GAEjB3P,QA7IA,EAkJnBsX,sBAAwB,SAACI,EAAOlT,GAC5B,EAAKP,SAAS,CACVhE,WAAY,EAAKe,MAAMf,WAAW+H,KAAI,SAACC,EAAGzI,GAItC,OAHIA,IAAMkY,IACNzP,EAAE4G,KAAOrK,GAENyD,QAxJA,EA6JnBsP,sBAAwB,SAACG,GACrB,EAAKzT,SAAS,CACVhE,WAAY,EAAKe,MAAMf,WAAWmN,QAAO,SAACnF,EAAGzI,GAAJ,OAAUA,IAAMkY,QA/J9C,EAmKnBF,mBAAqB,WACjB,EAAKvT,SAAS,CACVhE,WAAW,GAAD,oBACH,EAAKe,MAAMf,YADR,CAEN,CACIgG,SAAU,EAAKjF,MAAMsN,SACrBsH,UAAW/W,OACXiX,QAASjX,OACTgQ,KAAM,gBA3KH,EAiLnBlI,cAAgB,SAACnC,GACb,OAAOA,GAASA,IAAU,EAAKxD,MAAM2C,UA/KrC,EAAK3C,MAAQ,CACTkD,WAAW,EACXoK,SAAU,EAAKzN,MAAMgG,MAAMC,OAAO1C,GAClCwB,UAAW,KACXC,SAAU,KACVC,WAAY,GACZpC,MAAO,KACPqC,SAAU,KACVC,UAAW,KACX/F,WAAY,GACZuJ,gBAAiB,KACjBI,gBAAiB,KACjBL,SAAU,KACVzH,QAAS,KACTC,QAAS,KACTmW,WAAW,GAEf,EAAKhB,6BACD,EAAKA,6BAA6BhE,KAAlC,iBACJ,EAAKiE,2BACD,EAAKA,2BAA2BjE,KAAhC,iBAvBW,E,0CAqLnB,WAAU,IAAD,OAEL,EAgBI3R,KAAKP,MAfLkD,EADJ,EACIA,UACA0B,EAFJ,EAEIA,UACAC,EAHJ,EAGIA,SACAC,EAJJ,EAIIA,WACApC,EALJ,EAKIA,MACAqC,EANJ,EAMIA,SACAC,EAPJ,EAOIA,UACA/F,EARJ,EAQIA,WACAuJ,EATJ,EASIA,gBACAI,EAVJ,EAUIA,gBACAL,EAXJ,EAWIA,SACAzH,EAZJ,EAYIA,QACAC,EAbJ,EAaIA,QACAuM,EAdJ,EAcIA,SACA4J,EAfJ,EAeIA,UAGJ,OAAkB,IAAdhU,EACO,kBAAC,GAAD,MAIP,6BACI,kBAAC,GAAD,MACA,kBAAC4P,GAAA,EAAD,CACIC,KAAMmE,EACNlE,OA5BK,kBAAM,EAAK/P,SAAS,CAAEiU,WAAW,KA6BtCnM,KAAK,KACLkI,kBAAgB,gCAChBC,UAAQ,GAER,kBAACJ,GAAA,EAAMK,OAAP,CAAcC,aAAW,GACrB,kBAACN,GAAA,EAAMO,MAAP,CAAajQ,GAAG,iCAAhB,aAIJ,kBAAC0P,GAAA,EAAMQ,KAAP,KACI,2BAAIvS,IAER,kBAAC+R,GAAA,EAAMW,OAAP,KACI,kBAAC,IAAD,CAAMrT,UAAU,kBAAkBN,GAAG,UAArC,cAKR,kBAAC,GAAD,CACIoD,UAAWA,EACX0B,UAAWA,EACXC,SAAUA,EACVC,WAAYA,EACZpC,MAAOA,EACPqC,SAAUA,EACVC,UAAWA,EACX/F,WAAYA,EACZuJ,gBAAiBA,EACjBI,gBAAiBA,EACjBL,SAAUA,EACV0N,gBAAiB1V,KAAK0V,gBACtBhV,kBAAmBV,KAAKU,kBACxBiV,6BACI3V,KAAK2V,6BAETC,2BAA4B5V,KAAK4V,2BACjCC,2BAA4B7V,KAAK6V,2BACjCC,yBAA0B9V,KAAK8V,yBAC/BG,mBAAoBjW,KAAKiW,mBACzBF,sBAAuB/V,KAAK+V,sBAC5BC,sBAAuBhW,KAAKgW,sBAC5BzV,QAASA,EACTC,QAASA,EACTuM,SAAUA,EACV3H,cAAepF,KAAKoF,gBAExB,kBAAC,GAAD,W,GAlQiBlG,aCbpB0X,I,OAA2B,SAACC,GACrC,OAAQA,GACJ,IAAK,QACD,MAAO,UACX,IAAK,YACD,MAAO,YACX,IAAK,YACD,MAAO,YACX,IAAK,WACD,MAAO,aACX,IAAK,WACD,MAAO,eACX,QACI,MAAO,OAmBNC,GAAiB,SAACC,GAC3B,OAAQA,GACJ,IAAK,UACD,MAAO,4BACX,IAAK,MACD,MAAO,gCACX,IAAK,WACD,MAAO,4BACX,IAAK,gBACD,MAAO,4BACX,IAAK,UACD,MAAO,qCACX,IAAK,WACD,MAAO,WACX,IAAK,WACD,MAAO,WACX,QACI,OAAOA,ICwDJC,GAlGc,SAAC,GAUvB,IATHC,EASE,EATFA,cACAC,EAQE,EARFA,kBACAvU,EAOE,EAPFA,UACAwU,EAME,EANFA,oBACAC,EAKE,EALFA,gBACAP,EAIE,EAJFA,OACArW,EAGE,EAHFA,QACAD,EAEE,EAFFA,QACA8W,EACE,EADFA,SAUA,OACI,yBAAKxX,UAAU,iBACX,yBAAKA,UAAU,aACX,0CACA,4BACIA,UAAU,kBACVkH,QAASmQ,EACThW,KAAK,SAHT,iBAQJ,kBAACL,EAAA,EAAD,CAAMhB,UAAU,UACZ,kBAACgB,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,gBACA,kBAACH,EAAA,EAAKI,QAAN,CACIsV,GAAG,SACHzY,KAAK,SACLmF,MAAO4T,EACP1V,SAAU,SAACmC,GACP8T,EAAgB9T,EAAE5B,OAAOuB,SAG5BoU,EAAS5Q,KAAI,SAACoQ,GAAD,OACV,4BAAQ5T,MAAO4T,EAAQ5B,IAAK4B,GACvBD,GAAyBC,OAGlC,4BAAQ5T,MAAO,IACV2T,GAAyB,UAKzCpW,IAAYD,EACT,kBAACI,EAAA,EAAD,CAAOC,QAAUL,EAAqB,UAAX,UACtBC,GAEL,KACHmC,GAAa,kBAAC,GAAD,OACZA,GAAasU,GAA0C,IAAzBA,EAAc/Y,QAC1C,uFAEFyE,GACEsU,GACAA,EAAcxQ,KAAI,SAAC6Q,GACf,OACI,yBACIrC,IAAKqC,EAAazU,GAClBhD,UAAU,sBACVkH,QAAS,kBAAMoQ,EAAoBG,EAAazU,MAEhD,yBAAKhD,UAAU,+BACX,4BACKyX,EAAaC,QADlB,KAC6B,IACxBD,EAAaE,SAElB,mCACU,IACLtP,KAAOoP,EAAaG,WAAWtP,OAC5B,cAIZ,uBACItI,UACI,8BACAyX,EAAaT,QA3E7C,SAAuBS,GACnB,IAAMI,EAAaJ,EAAaK,YAC1BzP,KAAOoP,EAAaK,aAAaxP,OAAO,YACxC,GAEN,OAAOyO,GAAyBU,EAAaT,QAAU,IAAMa,EAyEpCE,CAAcN,U,+yMCvFzCO,G,kDACF,WAAYvY,GAAQ,IAAD,8BACf,cAAMA,IAkCVwY,wBAA0B,SAACjV,GACvB,EAAKvD,MAAMyD,QAAQC,KAAK,uBAAyBH,IApClC,EAuCnBqU,kBAvCmB,uBAuCC,kGAChB,EAAKxU,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,KAJH,kBAQSL,EAAIC,KACrB,oBACA,GACA,CACIC,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAdhB,cAQR4E,EARQ,gBAmBN,EAAK2U,gBAAgB,SAnBf,OAqBZ,EAAKU,wBAAwBrV,EAASJ,KAAKQ,IArB/B,kDAuBZ,EAAKH,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,iDACJmC,WAAW,KA9BP,0DAvCD,EA2EnByU,gBA3EmB,wCA2ED,WAAOP,GAAP,uFACd,EAAKnU,SAAL,2BACO,EAAKjD,OACL,CACCoX,OAAQA,EACRlU,WAAW,KALL,kBAUWL,EAAIiM,IAAI,qBAAsB,CAC/C/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJsR,OAAQA,KAhBN,cAUNpU,EAVM,gBAoBmBH,EAAIiM,IAAI,yBAA0B,CAC3D/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAvBd,OAoBNka,EApBM,OA2BV,EAAKrV,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,SAAS,EACT0W,cAAexU,EAASJ,KACxBgV,SAAUU,EAAiB1V,QAjCzB,kDAqCV,EAAKK,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,iDACJmC,WAAW,KA5CT,0DA3EC,sDAEf,EAAKlD,MAAQ,CACToX,OAAQ,QACRI,cAAe,GACfI,SAAU,GACV1U,WAAW,EACXpC,SAAS,EACTC,QAAS,MARE,E,0CAYnB,WACI,MACIR,KAAKP,MADDkD,EAAR,EAAQA,UAAWsU,EAAnB,EAAmBA,cAAeJ,EAAlC,EAAkCA,OAAQrW,EAA1C,EAA0CA,QAASD,EAAnD,EAAmDA,QAAS8W,EAA5D,EAA4DA,SAG5D,OACI,6BACI,kBAAC,GAAD,MACA,kBAAC,GAAD,CACI1U,UAAWA,EACXsU,cAAeA,EACfC,kBAAmBlX,KAAKkX,kBACxBC,oBAAqBnX,KAAK8X,wBAC1BV,gBAAiBpX,KAAKoX,gBACtBP,OAAQA,EACRrW,QAASA,EACTD,QAASA,EACT8W,SAAUA,IAEd,kBAAC,GAAD,S,uEA+FZ,+EACIrX,KAAKoX,gBAAgBpX,KAAKP,MAAMoX,QADpC,gD,2DA9HoC3X,aAmIzB8U,eAAW6D,I,8BCgLXG,I,OA9SiB,SAAC,GAyB1B,IAxBHV,EAwBE,EAxBFA,aACA5W,EAuBE,EAvBFA,kBACAuX,EAsBE,EAtBFA,kBACAC,EAqBE,EArBFA,gBACAC,EAoBE,EApBFA,gBACAC,EAmBE,EAnBFA,aACAC,EAkBE,EAlBFA,KACA7X,EAiBE,EAjBFA,QACAD,EAgBE,EAhBFA,QACA+X,EAeE,EAfFA,QACA3V,EAcE,EAdFA,UACA4V,EAaE,EAbFA,mBACAC,EAYE,EAZFA,QACAC,EAWE,EAXFA,UACAC,EAUE,EAVFA,aACAC,EASE,EATFA,YACAC,EAQE,EARFA,eACAC,EAOE,EAPFA,kBACAC,EAME,EANFA,qBACAC,EAKE,EALFA,UACAC,EAIE,EAJFA,MACAC,EAGE,EAHFA,iBACAC,EAEE,EAFFA,iBACAC,EACE,EADFA,oBAGA,OACI,yBAAKtZ,UAAU,qBACX,yBAAKA,UAAU,eACX,gCACA,yBAAKA,UAAU,uBACX,4BACIA,UAAU,kBACVqB,KAAK,SACL6F,QAAS,kBAAMyR,KACfvR,SAAkC,aAAxBqQ,EAAaT,QAJ3B,YAQA,4BACIhX,UAAU,kBACVqB,KAAK,SACL6F,QAAS,kBAAM2R,KACfzR,SAAkC,aAAxBqQ,EAAaT,QAJ3B,yBAQA,4BACIhX,UAAU,kBACVqB,KAAK,SACL6F,QAAS,kBAAM0R,MAHnB,aASR,kBAAC,iBAAD,CACI3X,SAAU,SAACwC,GACPA,EAAEpB,iBACFmW,MAGH,IACD,kBAACxX,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,KACI,kDAEJ,kBAACH,EAAA,EAAKI,QAAN,CACIsV,GAAG,SACHzY,KAAK,OACLmF,MAAOqU,EAAapW,KACpByC,UAAQ,EACRD,aAAc,CACVC,SAAU,oCAEdxC,SAAUT,GAETsY,EAAMvS,KAAI,SAACvF,GAAD,OACP,4BAAQ+B,MAAO/B,EAAM+T,IAAK/T,GH5EhB,SAACA,GACnC,OAAQA,GACJ,IAAK,OACD,MAAO,eACX,IAAK,SACD,MAAO,cACX,IAAK,UACD,MAAO,kBACX,IAAK,QACD,MAAO,mBACX,QACI,OAAOA,GGkEckY,CAAuBlY,SAKxC,kBAACL,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,KACI,sCADJ,OAGA,kBAAC,YAAD,CACIlD,KAAK,UACL+E,GAAG,UACHqT,aAAcoB,EAAaC,QAC3B7T,aAAc,CACVC,SAAU,wBACVC,QAAS,qBAEbD,UAAQ,EACRC,QAAQ,6BACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,KACI,sCADJ,OAGA,kBAAC,YAAD,CACIlD,KAAK,UACL+E,GAAG,UACHqT,aAAcoB,EAAaE,QAC3B9T,aAAc,CACVC,SAAU,wBACVC,QAAS,qBAEbD,UAAQ,EACRC,QAAQ,6BACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,KACI,4CADJ,OAGA,kBAAC,KAAD,CACIqY,MAAM,OACNpW,MAAOqU,EAAagC,UACpBnY,SAAU+W,EACVqB,QAAStB,EACTuB,QAASpB,KAGjB,kBAACvX,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,KACI,4CADJ,OAGA,kBAAC,KAAD,CACIqY,MAAM,OACNpW,MAAOqU,EAAamC,UACpBtY,SAAUgX,EACVoB,QAAStB,EACTuB,QAASpB,KAGjB,kBAACvX,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,KACI,wCAEJ,yBAAKnB,UAAU,mBACX,yBAAKA,UAAU,mBACVyX,EAAaoC,YAAYjT,KAAI,SAACkT,GAAD,OAE1B,yBACI9Z,UAAU,oBACVoV,IAAK0E,GAEL,2BAAIA,EAAW7b,MACf,uBACI+B,UAAU,SACVkH,QAAS,kBACLmS,EAAiBS,KAHzB,UAWZ,2BACIC,IAAI,cACJ/Z,UAAU,sCAFd,oBAMA,2BACIqB,KAAK,OACL2B,GAAG,cACH1B,SAAU8X,MAItB,kBAACpY,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,KACI,+CAEH+X,EAAUtS,KAAI,SAACsQ,GAAD,OACX,kBAAClW,EAAA,EAAKkD,MAAN,CACI7C,KAAK,WACL+T,IAAK8B,EACL7T,QAASoU,EAAayB,UAAUpa,SAASoY,GACzC5V,SAAU2X,EACVhb,KAAMiZ,EACN9S,MAAO6S,GAAeC,SAIT,cAAxBO,EAAaT,QACV,iKAMqB,aAAxBS,EAAaT,QACV,+KAMqB,aAAxBS,EAAaT,QACV,gGAIqB,cAAxBS,EAAaT,QACV,yTAQsB,UAAxBS,EAAaT,QACa,cAAxBS,EAAaT,SACb,oCACK,IACD,kBAAChW,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,KACI,iDAEJ,kBAACH,EAAA,EAAKI,QAAN,CACIsV,GAAG,SACHzY,KAAK,cACLmF,MAAO0V,EACPxX,SAAU,SAACmC,GAAD,OAAOsV,EAAetV,EAAE5B,OAAOuB,SAEzC,4BAAQA,MAAM,OAAd,QACA,4BAAQA,MAAM,aAAd,eAGS,cAAhB0V,GACG,kBAAC9X,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,KACI,mDAEJ,kBAAC,KAAD,CACIoS,SACI,IAAI9V,KAAKga,EAAaK,aAE1BhU,UAAQ,EACRkW,gBAAc,EACdC,WAAW,QACX3Y,SAAU0X,EACVkB,cAAe,GACf1G,WAAW,mBACXxT,UAAU,eACVyT,OAAO,SAM1B9S,IAAYD,EACT,kBAACI,EAAA,EAAD,CAAOC,QAAUL,EAAqB,UAAX,UACtBC,GAEL,KACJ,yBAAKX,UAAU,eACX,kBAAC,IAAD,CACIA,UAAU,8BACVN,GAAE,wBAFN,YAMCoD,GAAa,kBAAC,GAAD,MACd,yBAAK9C,UAAU,uBACX,4BACIA,UAAU,yBACVqB,KAAK,SACL6F,QAAS,kBAAMwR,MAHnB,UAOA,4BAAQ1Y,UAAU,kBAAkBqB,KAAK,UAAzC,YAGA,4BACIrB,UAAU,kBACVqB,KAAK,SACL6F,QAAS,kBAAMuR,KACfrR,UAAWkS,KAEM,QAAhBR,EAAwB,WAAa,gB,+yMCxS5DqB,G,kDACF,WAAY1a,GAAQ,IAAD,8BACf,cAAMA,IAkFV6Z,oBAAsB,WAClB,IAAMc,EAAqB,EAAKxa,MAAM6X,aAAaT,OACnD,MAA8B,cAAvBoD,GAA6D,aAAvBA,GAClB,aAAvBA,GAAqC,EAAKxa,MAAM6X,aAAayB,UAAU7a,OAAS,GAChF,EAAKuB,MAAM6X,aAAaC,QAAQrZ,OAAS,GAAK,EAAKuB,MAAM6X,aAAaE,QAAQtZ,QAvFnE,EA2FnB0a,eAAiB,SAAC1X,GAAU,IAAD,EACvB,EAAKwB,SAAL,2BACO,EAAKjD,OACL,CACCkZ,YAAazX,EACboW,aAAa,2BACN,EAAK7X,MAAM6X,cADN,IAERT,OACuC,cAAnC,EAAKpX,MAAM6X,aAAaT,QACf,QAAT3V,EACM,QACA,EAAKzB,MAAM6X,aAAaT,OAClCc,YACa,QAATzW,EACM,KADN,UAEM,EAAKzB,MAAM6X,aAAaK,mBAF9B,QAE6C,IAAIra,WA1GlD,EAgHnBub,kBAAoB,SAACzK,GACjB,EAAK1L,SAAL,eACO,CACC4U,aAAa,2BACN,EAAK7X,MAAM6X,cADN,IAERK,YAAavJ,QArHV,EA2HnB0K,qBAAuB,SAAC7W,GACpB,IAAMP,EAASO,EAAMP,OACfuB,EAAQvB,EAAOwB,QACf6T,EAAWrV,EAAO5D,KAEpBib,EAAY,EAAKtZ,MAAM6X,aAAayB,UAEpC9V,EACK8V,EAAUpa,SAASoY,KACpBgC,EAAS,uBAAOA,GAAP,CAAkBhC,KAG/BgC,EAAYA,EAAUlN,QAAO,SAACnF,GAAD,OAAOA,IAAMqQ,KAG9C,EAAKrU,SAAS,CACV4U,aAAa,2BACN,EAAK7X,MAAM6X,cADN,IAERyB,UAAWA,OA7IJ,EAkJnBrY,kBAAoB,SAACuB,GACjB,IAAMP,EAASO,EAAMP,OACfuB,EACc,aAAhBvB,EAAOR,KAAsBQ,EAAOwB,QAAUxB,EAAOuB,MACnDnF,EAAO4D,EAAO5D,KAEpB,EAAK4E,SAAS,CACV4U,aAAa,2BACN,EAAK7X,MAAM6X,cADN,kBAEPxZ,EAAOmF,OA3JD,EAgKnBgV,kBAAoB,SAACiC,EAAWC,EAAQC,EAAQC,GAC5C,EAAK3X,SAAL,2BACO,EAAKjD,OACL,CACC6a,cAAeJ,MApKR,EA0KnBhC,gBAAkB,SAACqC,EAASC,EAAOL,EAAQC,GACvC,EAAK1X,SAAL,2BACO,EAAKjD,OACL,CACC6X,aAAa,2BACN,EAAK7X,MAAM6X,cACX,CACCgC,UAAWc,EAAOK,oBAjLnB,EAwLnBtC,gBAAkB,SAACoC,EAASC,EAAOL,EAAQC,GACvC,EAAK1X,SAAL,2BACO,EAAKjD,OACL,CACC6X,aAAa,2BACN,EAAK7X,MAAM6X,cACX,CACCmC,UAAWW,EAAOK,oBA/LnB,EAwMnBpC,KAxMmB,uBAwMZ,2GAEC,EAAK3V,SAAS,CAAEC,WAAW,IAF5B,SAGsBL,EAAIC,KACrB,qBACA,EAAK9C,MAAM6X,aACX,CACI9U,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAT7B,OAGK4E,EAHL,OAcC,EAAKC,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,SAAS,EACT+W,aAAc7U,EAASJ,QAnBhC,gDAuBC,EAAKK,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,+BACJmC,WAAW,KA9BpB,yDAxMY,EA4OnB2V,QA5OmB,uBA4OT,yGAEF,EAAK5V,SAAS,CAAEC,WAAW,IAFzB,SAGI,EAAK0V,OAHT,UAI6B,cAA3B,EAAK5Y,MAAMkZ,YAJb,uBAKE,EAAKjW,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,SAAS,EACT+W,aAAa,2BACN,EAAK7X,MAAM6X,cADN,IAERT,OAAQ,iBAIpB6D,MAAM,oCACN,EAAKpb,MAAMyD,QAAQC,KAAK,wBAjB1B,2CAoBIV,EAAIC,KACN,wBACA,CAAEM,GAAI,EAAKpD,MAAM6X,aAAazU,IAC9B,CACIL,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBA1B1B,QA+BF,EAAK6E,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,SAAS,KAIjBma,MAAM,oCACN,EAAKpb,MAAMyD,QAAQC,KAAK,wBAxCtB,kDA0CF,EAAKN,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,+BACJmC,WAAW,KAjDjB,0DA5OS,EAmSnB6V,QAnSmB,uBAmST,yGAEF,EAAK9V,SAAS,CAAEC,WAAW,IAFzB,SAGI,EAAK0V,OAHT,uBAII/V,EAAIC,KACN,wBACA,CAAEM,GAAI,EAAKpD,MAAM6X,aAAazU,IAC9B,CACIL,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAV1B,OAeF,EAAK6E,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,SAAS,EACT+W,aAAa,2BACN,EAAK7X,MAAM6X,cADN,IAERT,OAAQ,gBAIpB6D,MAAM,qCA1BJ,kDA4BF,EAAKhY,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,+BACJmC,WAAW,KAnCjB,0DAnSS,EA4UnB8V,UA5UmB,uBA4UP,2GAEJ,EAAK/V,SAAS,CAAEC,WAAW,IAFvB,SAGE,EAAK0V,OAHP,uBAKmB/V,EAAIC,KACvB,0BACA,CAAEM,GAAI,EAAKpD,MAAM6X,aAAazU,IAC9B,CACIL,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAXxB,cAKE4E,EALF,OAgBJ,EAAKC,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,SAAS,KApBb,UAuBE,EAAKjB,MAAMyD,QAAQ4X,QAAQ,yBAvB7B,yBAwBE,EAAKrb,MAAMyD,QAAQC,KACrB,uBAAyBP,EAASJ,KAAKQ,IAzBvC,0DA4BJ,EAAKH,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,+BACJmC,WAAW,KAnCf,0DA5UO,EAqXnB+V,aArXmB,uBAqXJ,yGAEP,EAAKhW,SAAS,CAAEC,WAAW,IAFpB,SAGD,EAAK0V,OAHJ,uBAKD/V,EAAIC,KACN,8BACA,CAAEM,GAAI,EAAKpD,MAAM6X,aAAazU,IAC9B,CACIL,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAXrB,OAgBP,EAAK6E,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,SAAS,EACT+W,aAAa,2BACN,EAAK7X,MAAM6X,cADN,IAERT,OAAQ,gBAKpB6D,MAAM,qCA5BC,kDA8BP,EAAKhY,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,sCACJmC,WAAW,KArCZ,0DArXI,EAganBuW,iBAhamB,wCAgaA,WAAOS,GAAP,uGAEL,EAAKtB,OAFA,cAIX,EAAK3V,SAAS,CAAEC,WAAW,IAJhB,SAMYL,EAAIsY,OAAO,2BAA4B,CAC1DpY,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,uBAEpB0H,OAAQ,CACJ1C,GAAI,EAAKpD,MAAM6X,aAAazU,GAC5B8W,WAAYA,KAbT,OAMLlX,EANK,OAiBX,EAAKC,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,SAAS,EACT+W,aAAc7U,EAASJ,QAtBpB,kDA0BX,EAAKK,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,sCACJmC,WAAW,KAjCR,0DAhaA,wDAucnBsW,iBAvcmB,wCAucA,WAAO3V,GAAP,uFACfA,EAAEpB,iBADa,UAIL2Y,EAAW,IAAIC,UACZC,OAAO,aAAczX,EAAE5B,OAAOyO,MAAM,IALlC,SAOL,EAAKkI,OAPA,cASX,EAAK3V,SAAS,CAAEC,WAAW,IAThB,SAWYL,EAAIC,KACvB,2BACAsY,EACA,CACIrY,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,uBAEpB0H,OAAQ,CAAE1C,GAAI,EAAKpD,MAAM6X,aAAazU,MAnBnC,OAWLJ,EAXK,OAuBX,EAAKC,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,SAAS,EACT+W,aAAc7U,EAASJ,QA5BpB,kDAgCX,EAAKK,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,2CACJmC,WAAW,KAvCR,0DAvcA,wDAofnB4V,mBApfmB,uBAofE,yGAEb,EAAK7V,SAAS,CAAEC,WAAW,IAFd,SAGPL,EAAIsY,OACN,iBAEA,CACIpY,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CAAE1C,GAAI,EAAKpD,MAAM6X,aAAazU,MAXjC,OAeb,EAAKH,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,SAAS,KAIjB,EAAKjB,MAAMyD,QAAQC,KAAK,wBAvBX,gDAyBb,EAAKN,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAC2B,6BAClCmC,WAAW,KA/BN,yDAlfjB,EAAKlD,MAAQ,CACToD,GAAI,EAAKvD,MAAMgG,MAAMC,OAAO1C,GAC5B8V,YAAa,MACbI,UAAW,GACXC,MAAO,GACPsB,cAAe,KACfhD,aAAc,KACd3U,WAAW,EACXpC,SAAS,EACTC,QAAS,MAXE,E,0CAenB,WACI,MAQIR,KAAKP,MAPLkD,EADJ,EACIA,UACA2U,EAFJ,EAEIA,aACA9W,EAHJ,EAGIA,QACAD,EAJJ,EAIIA,QACAoY,EALJ,EAKIA,YACAI,EANJ,EAMIA,UACAC,EAPJ,EAOIA,MAGJ,GAAIrW,EACA,OAAO,kBAAC,GAAD,MAsBX,OACI,6BACI,kBAAC,GAAD,MACA,kBAAC,GAAD,CACI2U,aAAcA,EACd5W,kBAAmBV,KAAKU,kBACxBuX,kBAAmBjY,KAAKiY,kBACxBC,gBAAiBlY,KAAKkY,gBACtBC,gBAAiBnY,KAAKmY,gBACtBC,aA5BS,CACjB4C,QAAS,CACLC,UAAW,CACP,CAAC,CAAEC,OAAQ,CAAC,EAAG,GAAG,KAClB,CAAC,OAAQ,SAAU,YAAa,UAChC,CAAC,CAAEnb,MAAO,IAAM,CAAEob,WAAY,KAC9B,CAAC,aAAc,cACf,CACI,CAAEzS,KAAM,WACR,CAAEA,KAAM,UACR,CAAE0S,OAAQ,MACV,CAAEA,OAAQ,OAEd,CAAC,CAAE7T,MAAO,KACV,CAAC,OAAQ,YAeT8Q,KAAMrY,KAAKqY,KACX7X,QAASA,EACTD,QAASA,EACT+X,QAAStY,KAAKsY,QACdC,mBAAoBvY,KAAKuY,mBACzB5V,UAAWA,EACX6V,QAASxY,KAAKwY,QACdE,aAAc1Y,KAAK0Y,aACnBD,UAAWzY,KAAKyY,UAChBE,YAAaA,EACbC,eAAgB5Y,KAAK4Y,eACrBC,kBAAmB7Y,KAAK6Y,kBACxBC,qBAAsB9Y,KAAK8Y,qBAC3BC,UAAWA,EACXC,MAAOA,EACPC,iBAAkBjZ,KAAKiZ,iBACvBC,iBAAkBlZ,KAAKkZ,iBACvBC,oBAAqBnZ,KAAKmZ,sBAE9B,kBAAC,GAAD,S,uEA4cZ,+GAEQnZ,KAAK0C,SAAS,CAAEC,WAAW,IAFnC,SAG6BL,EAAIiM,IAAI,iBAAkB,CAC3C/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJ1C,GAAI7C,KAAKP,MAAMoD,MAT/B,cAGYJ,EAHZ,gBAasCH,EAAIiM,IAAI,0BAA2B,CAC7D/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAhBhC,cAaYwd,EAbZ,iBAmBkC/Y,EAAIiM,IAAI,sBAAuB,CACrD/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAtBhC,QAmBYyd,EAnBZ,OA0BQtb,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCkD,WAAW,EACXpC,SAAS,EACT+W,aAAc7U,EAASJ,KACvB0W,UAAWsC,EAAkBhZ,KAC7B2W,MAAOsC,EAAcjZ,KACrBsW,YACKlW,EAASJ,KAAKsV,aACc,UAAzBlV,EAASJ,KAAKwU,QACO,cAAzBpU,EAASJ,KAAKwU,OACR,YACA,SAvC1B,kDA2CQ7W,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,iDACJmC,WAAW,KAlD3B,0D,2DA3hBuCzD,aAolB5B8U,eAAWgG,ICviBXuB,I,OAlDoB,SAAC,GAM7B,IALHtE,EAKE,EALFA,cACAtU,EAIE,EAJFA,UACAwU,EAGE,EAHFA,oBACA3W,EAEE,EAFFA,QACAD,EACE,EADFA,QAEA,OACI,yBAAKV,UAAU,iBACX,yBAAKA,UAAU,aACX,2CAGHW,IAAYD,EACT,kBAACI,EAAA,EAAD,CAAOC,QAAUL,EAAqB,UAAX,UACtBC,GAEL,KACHmC,GAAa,kBAAC,GAAD,OACZA,GAAasU,GAA0C,IAAzBA,EAAc/Y,QAC1C,2DAEFyE,GACEsU,GACAA,EAAcxQ,KAAI,SAAC6Q,GACf,OACI,yBACIrC,IAAKqC,EAAazU,GAClBhD,UAAU,sBACVkH,QAAS,kBAAMoQ,EAAoBG,EAAazU,MAEhD,yBAAKhD,UAAU,+BACX,4BACKyX,EAAaC,QADlB,KAC6B,IACxBD,EAAaE,SAElB,uCACc,IACTtP,KAAOoP,EAAaK,aAAaxP,OAC9B,qB,+yMCpClCqT,G,kDACF,WAAYlc,GAAQ,IAAD,8BACf,cAAMA,IA2BVwY,wBAA0B,SAACjV,GACvB,EAAKvD,MAAMyD,QAAQC,KAAK,iBAAmBH,IA3B3C,EAAKpD,MAAQ,CACTwX,cAAe,GACftU,WAAW,EACXpC,SAAS,EACTC,QAAS,MANE,E,0CAUnB,WACI,MAAuDR,KAAKP,MAApDkD,EAAR,EAAQA,UAAWsU,EAAnB,EAAmBA,cAAezW,EAAlC,EAAkCA,QAASD,EAA3C,EAA2CA,QAE3C,OACI,6BACI,kBAAC,GAAD,MACA,kBAAC,GAAD,CACIoC,UAAWA,EACXsU,cAAeA,EACfE,oBAAqBnX,KAAK8X,wBAC1BtX,QAASA,EACTD,QAASA,IAEb,kBAAC,GAAD,S,uEASZ,kGACIP,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCkD,WAAW,KAJvB,kBAS6BL,EAAIiM,IAAI,qBAAsB,CAC/C/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJsR,OAAQ,YACRE,SAAU,aAhB1B,OASYtU,EATZ,OAoBQzC,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCkD,WAAW,EACXpC,SAAS,EACT0W,cAAexU,EAASJ,QAzBxC,gDA6BQrC,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,iDACJmC,WAAW,KApC3B,yD,2DAjC0CzD,aA4E/B8U,eAAWwH,ICOXC,I,OApFuB,SAAC,GAOhC,IAAD,EANFnE,EAME,EANFA,aACA9W,EAKE,EALFA,QACAD,EAIE,EAJFA,QACAoC,EAGE,EAHFA,UACA+Y,EAEE,EAFFA,YACAC,EACE,EADFA,SAEA,GAAIhZ,EACA,OAAO,kBAAC,GAAD,MAGX,IAAM4X,EAAUjD,EAAa,UAAYqE,GACnCtV,EAAQiR,EAAa,QAAUqE,GAC/BtX,EAAYiT,EAAasE,UAAUvX,UACnCC,EAAWgT,EAAasE,UAAUtX,SAClCuX,EAAQ,UACVvE,EAAasE,UAAUC,gBADb,QAEV,uCACIxX,EACA,IACAC,EACA,yCAER,OACI,yBAAKzE,UAAU,qBACX,yBAAKgD,GAAG,WACPrC,IAAYD,EACT,kBAACI,EAAA,EAAD,CAAOC,QAAUL,EAAqB,UAAX,UACtBC,GAEL,KACJ,yBAAKX,UAAU,gBACX,kBAACgB,EAAA,EAAKI,QAAN,CACIsV,GAAG,SACH1W,UAAU,kBACVoD,MAAO0Y,EACPxa,SAAU,SAACmC,GACPA,EAAEpB,iBACFwZ,EAAYpY,EAAE5B,OAAOuB,SAGzB,4BAAQA,MAAM,MAAd,SACA,4BAAQA,MAAM,MAAd,cAGNN,GAAa0D,EAAQ,4BAAKA,GAAc,KAE1C,yBAAKxG,UAAU,eACX,2BAAIqI,KAAOoP,EAAaK,aAAaxP,OAAO,aAC3CmP,EAAasE,WACV,yBAAK/b,UAAU,aACX,2BACKwE,EACD,6BACCC,GAEL,yBAAKnE,IAAK0b,EAAU3b,IAAI,WAIlCyC,GAAa4X,EACX,kBAAC,KAAD,CACIlB,MAAM,OACNpW,MAAOsX,EACPuB,UAAU,EACVtC,QAAS,CAAEwB,SAAS,KAGxB,oEAEJ,wCACC1D,EAAaoC,aACVpC,EAAaoC,YAAYxb,QAAU,GAAK,8CAC3CoZ,EAAaoC,aACVpC,EAAaoC,YAAYjT,KAAI,SAACsO,GAAD,OACzB,uBAAGlV,UAAU,kBAAkB2B,KAAMuT,EAAEgH,KAAM9G,IAAKF,EAAEjX,MAC/CiX,EAAEjX,Y,+yMC3ErBke,G,kDACF,WAAY1c,GAAQ,IAAD,8BACf,cAAMA,IAwCVoc,YAAc,SAACC,GACX,EAAKjZ,SAAL,2BACO,EAAKjD,OACL,CACCkc,SAAUA,MA3ClB,EAAKlc,MAAQ,CACToD,GAAI,EAAKvD,MAAMgG,MAAMC,OAAO1C,GAC5B8Y,SAAU,KACVrE,aAAc,KACd3U,WAAW,EACXpC,SAAS,EACTC,QAAS,MARE,E,0CAYnB,WACI,MAMIR,KAAKP,MALLkD,EADJ,EACIA,UACA2U,EAFJ,EAEIA,aACA9W,EAHJ,EAGIA,QACAD,EAJJ,EAIIA,QACAob,EALJ,EAKIA,SAGJ,OAAIhZ,EACO,kBAAC,GAAD,MAIP,6BACI,kBAAC,GAAD,MACA,kBAAC,GAAD,CACI2U,aAAcA,EACd9W,QAASA,EACTD,QAASA,EACToC,UAAWA,EACX+Y,YAAa1b,KAAK0b,YAClBC,SAAUA,IAEd,kBAAC,GAAD,S,uEAcZ,2GAEQ3b,KAAK0C,SAAS,CAAEC,WAAW,IAFnC,SAG6BL,EAAIiM,IAAI,iBAAkB,CAC3C/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJ1C,GAAI7C,KAAKP,MAAMoD,MAT/B,OAGYJ,EAHZ,OAaQzC,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCkD,WAAW,EACXpC,SAAS,EACT+W,aAAc7U,EAASJ,QAlBvC,gDAsBQrC,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,iDACJmC,WAAW,KA7B3B,yD,2DAnD6CzD,aAuFlC8U,eAAWgI,I,iBCrF1B9T,KAAOoL,OAAO,MAEd,IAAMlL,GAAc,IAAI9K,KAmBxB,IAkKe2e,GAlKgB,SAAC,GAAD,IAC3B5X,EAD2B,EAC3BA,UACAC,EAF2B,EAE3BA,SACAC,EAH2B,EAG3BA,WACApC,EAJ2B,EAI3BA,MACAqC,EAL2B,EAK3BA,SACAC,EAN2B,EAM3BA,UACA/F,EAP2B,EAO3BA,WACAwd,EAR2B,EAQ3BA,cACAC,EAT2B,EAS3BA,gBACAlU,EAV2B,EAU3BA,gBACAI,EAX2B,EAW3BA,gBACAoP,EAZ2B,EAY3BA,UACAzP,EAb2B,EAa3BA,SACAxH,EAd2B,EAc3BA,QACAD,EAf2B,EAe3BA,QACA6b,EAhB2B,EAgB3BA,aACArP,EAjB2B,EAiB3BA,SAjB2B,OAmB3B,yBAAKlN,UAAU,aACVW,EACG,kBAACG,EAAA,EAAD,CAAOC,QAAUL,EAAqB,UAAX,UAAuBC,GAClD,KACJ,kBAAC6b,GAAA,EAAD,CAAOpS,SAAO,EAACC,OAAK,GAChB,+BACI,4BACI,uCACA,wBAAIpK,MAAO,CAAE2H,cAAe,eAAiBpD,IAEjD,4BACI,wCACA,4BAAKC,IAET,4BACI,0CACA,4BAAKC,IAET,4BACI,sDACA,4BAAKpC,IAET,4BACI,yCACA,4BAAKqC,IAET,4BACI,6CACA,4BACKC,EACG,sCACU,IACN,kBAAC,IAAD,CAAiBpD,KAAK,QAAQtB,MAAM,WAGxC,iCACO,kBAAC,IAAD,CAAiBsB,KAAK,QAAQtB,MAAM,WAKvD,4BACI,qDACA,4BACKmc,EACG,sCACU,IACN,kBAAC,IAAD,CAAiB7a,KAAK,QAAQtB,MAAM,WAGxC,iCACO,kBAAC,IAAD,CAAiBsB,KAAK,QAAQtB,MAAM,WAKvD,4BACI,mDACA,4BACKoc,EACG,sCACU,IACN,kBAAC,IAAD,CAAiB9a,KAAK,QAAQtB,MAAM,WAGxC,iCACO,kBAAC,IAAD,CAAiBsB,KAAK,QAAQtB,MAAM,WAKvD,4BACI,yDACA,4BACKiI,EACG,sCACU,IACN,kBAAC,IAAD,CAAiB3G,KAAK,QAAQtB,MAAM,WAGxC,iCACO,kBAAC,IAAD,CAAiBsB,KAAK,QAAQtB,MAAM,WAKvD,4BACI,qCACA,4BAAKyG,GAAmB9H,KAG5B,4BACI,mDACA,4BACKuJ,EACKC,KAAOD,GAAiBE,OAAO,YAC/B,mCAGd,4BACI,yDACA,4BAzIpB,SAAkCE,EAAiBD,GAC/C,OAAIC,EACI,IAAI/K,KAAK+K,IAAoBD,EAEzB,6BACKF,KAAOG,GAAiBF,OAAO,YAAa,IAC7C,kBAAC,IAAD,CAAiB9G,KAAK,uBAAuBtB,MAAM,SAIpD,6BAAMmI,KAAOG,GAAiBF,OAAO,aAGzC,+DA6HUmU,CAAyBjU,EAAiBD,MAGnD,4BACI,4CACA,4BAAKF,KAAOuP,GAAWtP,OAAO,gBAI1C,yBAAKtI,UAAU,eACX,kBAAC,IAAD,CACIA,UAAU,yCACVN,GAAG,UAFP,YAMCf,EAAa,gBACdA,EAAa,aACbA,EAAa,iBACbA,EAAa,SACT,yBAAKqB,UAAU,uBACX,kBAACuB,EAAA,EAAD,CACIR,QAAQ,SACRf,UAAU,wBACVkH,QAASqV,EACTtc,MAAO,CAAE2H,cAAe,eAJ5B,UAMYpD,EANZ,IAMwBC,GAExB,kBAAC,IAAD,CACIzE,UAAU,0BACVN,GAAE,0BAAqBwN,IAF3B,0BAOJ,Q,+yMC+CDwP,G,kDAhOX,WAAYjd,GAAQ,IAAD,8BACf,cAAMA,IA4BVkd,eAAiB,WACb,EAAK9Z,SAAS,CACV+Z,SAAS,EACTC,cAAc,wCAAD,OAAuC,EAAKjd,MAAM4E,UAAlD,YAA+D,EAAK5E,MAAM6E,SAA1E,QAhCF,EAoCnB8X,aApCmB,wCAoCJ,WAAOna,GAAP,mFAGM,aAFAA,EAAMP,OAAOib,UAAUrL,cAD7B,wBAIDjP,EAAO,CACT0K,SAAU,EAAKtN,MAAMsN,SACrB5K,MAAO,EAAK1C,MAAM0C,OANf,kBASoBG,EAAIC,KAAK,gBAAiBF,EAAM,CACnDG,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAZrB,OASG4E,EATH,OAgBH,EAAKC,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,QAASkC,EAASJ,KAAK9B,QACvBC,QAASiC,EAASJ,KAAK7B,WArB5B,kDAyBH,EAAKkC,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,iDACJmC,WAAW,KAhChB,QAsCX,EAAKD,SAAS,CACV+Z,SAAS,EACTC,cAAe,KAxCR,0DApCI,sDAGf,EAAKjd,MAAQ,CACTkD,WAAW,EACXoK,SAAU,EAAKzN,MAAMgG,MAAMC,OAAO1C,GAClCwB,UAAW,KACXC,SAAU,KACVC,WAAY,KACZpC,MAAO,KACPqC,SAAU,KACVC,UAAW,KACX/F,WAAY,KACZwd,cAAe,KACfC,gBAAiB,KACjBlU,gBAAiB,KACjBI,gBAAiB,KACjBoP,UAAW,KACXzP,SAAU,KACV5F,SAAU,KACVoD,cAAe,KACfjF,QAAS,KACTC,QAAS,KACTic,SAAS,EACTC,cAAe,GACfhL,gBAAgB,GAzBL,E,0CAgFnB,WAAU,IAAD,OACDkL,EAAa,kBAAM,EAAKla,SAAS,CAAE+Z,SAAS,KAChD,EAqBIzc,KAAKP,MApBLkD,EADJ,EACIA,UACA0B,EAFJ,EAEIA,UACAC,EAHJ,EAGIA,SACAC,EAJJ,EAIIA,WACApC,EALJ,EAKIA,MACAqC,EANJ,EAMIA,SACAC,EAPJ,EAOIA,UACA/F,EARJ,EAQIA,WACAwd,EATJ,EASIA,cACAC,EAVJ,EAUIA,gBACAlU,EAXJ,EAWIA,gBACAI,EAZJ,EAYIA,gBACAoP,EAbJ,EAaIA,UACAzP,EAdJ,EAcIA,SACAzH,EAfJ,EAeIA,QACAC,EAhBJ,EAgBIA,QACAuM,EAjBJ,EAiBIA,SACA0P,EAlBJ,EAkBIA,QACAC,EAnBJ,EAmBIA,cACAhL,EApBJ,EAoBIA,eAGJ,OAAI/O,EACO,kBAAC,GAAD,MAGP+O,EAEI,6BACI,kBAAC,GAAD,MADJ,IACwB,kBAAC,GAAD,MADxB,IACoD,kBAAC,GAAD,OAMxD,6BACI,kBAAC,GAAD,MACA,kBAACa,GAAA,EAAD,CACIC,KAAMiK,EACNhK,OAAQmK,EACRpS,KAAK,KACLkI,kBAAgB,gCAChBC,UAAQ,GAER,kBAACJ,GAAA,EAAMK,OAAP,CAAcC,aAAW,GACrB,kBAACN,GAAA,EAAMO,MAAP,CAAajQ,GAAG,iCAAhB,aAIJ,kBAAC0P,GAAA,EAAMQ,KAAP,KACI,2BAAI2J,IAER,kBAACnK,GAAA,EAAMW,OAAP,KACI,kBAAC9R,EAAA,EAAD,CAAQR,QAAQ,UAAUmG,QAAS/G,KAAKoc,cAAxC,YAGA,kBAAChb,EAAA,EAAD,CAAQR,QAAQ,UAAUmG,QAAS6V,GAAnC,QAKR,kBAAC,GAAD,CACIja,UAAWA,EACX0B,UAAWA,EACXC,SAAUA,EACVC,WAAYA,EACZpC,MAAOA,EACPqC,SAAUA,EACVC,UAAWA,EACX/F,WAAYA,EACZwd,cAAeA,EACfC,gBAAiBA,EACjBlU,gBAAiBA,EACjBI,gBAAiBA,EACjB9H,QAASA,EACTC,QAASA,EACTuM,SAAUA,EACVqP,aAAcpc,KAAKwc,eAAe7K,KAAK3R,MACvCyX,UAAWA,EACXzP,SAAUA,IAEd,kBAAC,GAAD,S,uEAIZ,wHAEgC1F,EAAIiM,IAAI,kBAAmB,CAC/C/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJwH,SAAU/M,KAAKP,MAAMsN,YARrC,cAEY8P,EAFZ,gBAW8Bva,EAAIiM,IAAI,4BAA6B,CACvD/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJwH,SAAU/M,KAAKP,MAAMsN,YAjBrC,cAWc+P,EAXd,gBAqBgCxa,EAAIiM,IAAI,8BAA+B,CAC3D/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAGpB0H,OAAQ,CACJwH,SAAU/M,KAAKP,MAAMsN,YA5BrC,OAqBcgQ,EArBd,OAgCQ/c,KAAK0C,SAAL,2BACO1C,KAAKP,OADZ,IAEIkD,WAAW,EACXpC,SAAS,EACT2b,cAAeY,EAAQza,KACvB8Z,gBAAiBY,EAAU1a,MACxBwa,EAAYxa,OAtC3B,kDAyCQrC,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,gDACJmC,WAAW,EACX+O,gBAAgB,KAjDhC,0D,2DAzKsCxS,aCE1C0L,0BAAe,KAAMC,MAErB,IA2RemS,GA3Re,SAAC,GAAD,IAC1B3Y,EAD0B,EAC1BA,UACAC,EAF0B,EAE1BA,SACAC,EAH0B,EAG1BA,WACApC,EAJ0B,EAI1BA,MACAqC,EAL0B,EAK1BA,SACAC,EAN0B,EAM1BA,UACA/F,EAP0B,EAO1BA,WACAuJ,EAR0B,EAQ1BA,gBACAI,EAT0B,EAS1BA,gBACAL,EAV0B,EAU1BA,SACAiV,EAX0B,EAW1BA,kBACAvc,EAZ0B,EAY1BA,kBACAiV,EAb0B,EAa1BA,6BACAC,EAd0B,EAc1BA,2BACAC,EAf0B,EAe1BA,2BACAC,EAhB0B,EAgB1BA,yBACAC,EAjB0B,EAiB1BA,sBACAC,EAlB0B,EAkB1BA,sBACAC,EAnB0B,EAmB1BA,mBACA1V,EApB0B,EAoB1BA,QACAC,EArB0B,EAqB1BA,QACAuM,EAtB0B,EAsB1BA,SAEAmQ,GAxB0B,EAuB1B9X,cAvB0B,EAwB1B8X,qBAxB0B,OA0B1B,yBAAKrd,UAAU,aACX,kBAAC,iBAAD,CACIiB,SAAU,SAACwC,GACPA,EAAEpB,iBACF+a,EAAkB3Z,KAGtB,kBAACzC,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,gBACA,kBAAC,YAAD,CACIlD,KAAK,YACL+E,GAAG,YACHqT,aAAc7R,EACdX,aAAc,CACVC,SAAU,yBACVC,QAAS,qBAEbD,UAAQ,EACRC,QAAQ,mCACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,iBACA,kBAAC,YAAD,CACIlD,KAAK,WACL+E,GAAG,WACHqT,aAAc5R,EACdZ,aAAc,CACVC,SAAU,0BACVC,QAAS,sBAEbD,UAAQ,EACRC,QAAQ,mCACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,mCACA,kBAAC,YAAD,CACIlD,KAAK,aACL+E,GAAG,aACHqT,aAAc3R,EACdb,aAAc,CACVC,SAAU,4BACVC,QAAS,wBAEbA,QAAQ,yBACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,yBACA,kBAAC,YAAD,CACIlD,KAAK,QACLoY,aAAc/T,EACdU,GAAG,QACHa,aAAc,CACVC,SAAU,wCACVE,UAAW,oCAEfA,UAAWA,IAAUC,QACrB3C,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,kBACA,kBAAC,YAAD,CACIlD,KAAK,WACL+E,GAAG,WACHqT,aAAc1R,EACdd,aAAc,CACVC,SAAU,2BACVC,QAAS,uBAEbD,UAAQ,EACRC,QAAQ,mCACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKkD,MAAN,CACI7C,KAAK,WACLgC,QAASuB,EACTtD,SAAUT,EACV5C,KAAK,YACLmG,MAAM,mBAGd,kBAACpD,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKkD,MAAN,CACI7C,KAAK,WACLgC,QAAS8E,EACT7G,SAAUT,EACV5C,KAAK,WACLmG,MAAM,gCAGd,yBAAKpE,UAAU,OACX,yBAAKA,UAAU,OACX,kBAACgB,EAAA,EAAKG,MAAN,CAAYnB,UAAU,WAAtB,qBACA,kBAAC,KAAD,CACIuT,SACInL,EAAkB,IAAI3K,KAAK2K,GAAmB,KAElD9G,SAAUwU,EACVtC,WAAW,aACXxT,UAAU,eACVyT,OAAO,QAGf,yBAAKzT,UAAU,OACX,kBAACgB,EAAA,EAAKG,MAAN,CAAYnB,UAAU,WAAtB,6BAGA,kBAAC,KAAD,CACIuT,SACI/K,EAAkB,IAAI/K,KAAK+K,GAAmB,KAElDlH,SAAUyU,EACVvC,WAAW,aACXxT,UAAU,eACVyT,OAAO,SAInB,6BACA,sCACC5U,EAAW+H,KAAI,SAAChI,EAAW0X,GAAZ,OACZ,yBACIlB,IAAKkB,EACLrW,MAAO,CACHwS,gBAAiB,UACjB8D,QAAS,OACTC,OAAQ,OACRC,aAAc,QAGlB,kBAACzV,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,cACA,kBAACH,EAAA,EAAKI,QAAN,CACIsV,GAAG,SACHzY,KAAI,qBAAgBqY,EAAhB,UACJlT,MAAOxE,EAAU6O,KACjBnM,SAAU,SAACmC,GAAD,OACNyS,EAAsBI,EAAO7S,EAAE5B,OAAOuB,SAG1C,4BAAQA,MAAM,aACTuD,GAAmB,CAAC,eAEzB,4BAAQvD,MAAM,SACTuD,GAAmB,CAAC,WAEzB,4BAAQvD,MAAM,YACTuD,GAAmB,CAAC,cAEzB,4BAAQvD,MAAM,gBACTuD,GAAmB,CAAC,kBAEzB,4BAAQvD,MAAM,eACTuD,GAAmB,CAAC,iBAEzB,4BAAQvD,MAAM,eACTuD,GAAmB,CAAC,iBAEzB,4BAAQvD,MAAM,SACTuD,GAAmB,CAAC,WAEzB,4BAAQvD,MAAM,mBACTuD,GAAmB,CAAC,qBAEzB,4BAAQvD,MAAM,iBACTuD,GAAmB,CAAC,qBAIjC,kBAAC3F,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,cACA,kBAAC,KAAD,CACIoS,SACI3U,EAAU4V,UACJ,IAAI/W,KAAKmB,EAAU4V,WACnB,KAEVlT,SAAU,SAAC8B,GAAD,OACN4S,EAA2B5S,EAAOkT,IAEtC9C,WAAW,aACXxT,UAAU,eACVyT,OAAO,QAGf,kBAACzS,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,sBACA,kBAAC,KAAD,CACIoS,SACI3U,EAAU8V,QACJ,IAAIjX,KAAKmB,EAAU8V,SACnB,KAEVpT,SAAU,SAAC8B,GAAD,OACN6S,EAAyB7S,EAAOkT,IAEpC9C,WAAW,aACXxT,UAAU,eACVyT,OAAO,QAGf,kBAACzS,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAK0C,IAAN,KACI,4BACIrC,KAAK,SACLrB,UAAU,kBACVkH,QAAS,kBAAMiP,EAAsBG,KAHzC,gBAWhB,4BACIjV,KAAK,SACLrB,UAAU,kBACVkH,QAASkP,GAHb,qBAOA,6BACCzV,IAAYD,EACT,kBAACI,EAAA,EAAD,CAAOC,QAAUL,EAAqB,UAAX,UACtBC,GAEL,KACJ,yBAAKX,UAAU,eACV,kBAAC,IAAD,CACGA,UAAU,8BACVN,GAAE,0BAAqBwN,IAF1B,YAMD,yBAAKlN,UAAU,aACX,4BACAqB,KAAK,SACLrB,UAAU,kBACVkH,QAAS,kBAAImW,MAHb,mBAOJ,4BAAQrd,UAAU,mBAAlB,sB,+yMCkFDsd,G,kDAxWX,WAAY7d,GAAQ,IAAD,8BACf,cAAMA,IA4BV2d,kBA7BmB,wCA6BC,WAAOhb,GAAP,6FAChBA,EAAMC,iBACAG,EAAO,CACTgC,UAAW,EAAK5E,MAAM4E,UACtBC,SAAU,EAAK7E,MAAM6E,SACrBC,WAAY,EAAK9E,MAAM8E,WACvBpC,MAAO,EAAK1C,MAAM0C,MAClBqC,SAAU,EAAK/E,MAAM+E,SACrBC,UAAW,EAAKhF,MAAMgF,UACtBwD,gBAAiB,EAAKxI,MAAMwI,gBAC5BI,gBAAiB,EAAK5I,MAAM4I,gBAC5BjG,SAAU,EAAK3C,MAAM2C,SACrBoD,cAAe,EAAK/F,MAAM+F,cAC1BwC,SAAU,EAAKvI,MAAMuI,SACrB+E,SAAU,EAAKtN,MAAMsN,UAdT,kBAkBWzK,EAAI0K,IAAI,gBAAiB3K,EAAM,CAClDG,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBArBZ,cAkBN4E,EAlBM,gBAyBaH,EAAIC,KACzB,oBACA,CAAE7D,WAAY,EAAKe,MAAMf,YACzB,CACI8D,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJwH,SAAU,EAAKtN,MAAMsN,SACrBQ,KAAK,KAnCL,OAyBN7O,EAzBM,OAuCRgY,GAAQ,EACRjU,EAASJ,KAAK9B,SAAWkC,EAASJ,KAAK7B,UACvCkW,GAAQ,GAEZ,EAAKhU,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,QAASkC,EAASJ,KAAK9B,QACvBC,QAASiC,EAASJ,KAAK7B,QACvBmW,UAAWD,EACXhY,WAAU,UAAEA,EAAW2D,YAAb,QAAqB,EAAK5C,MAAMf,cAlDtC,kDAsDZ,EAAKgE,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,2DACJmC,WAAW,KA7DP,0DA7BD,wDAgGnBua,oBAhGmB,uBAgGG,sHAES5a,EAAIC,KACvB,wBACA,CAAEJ,MAAO,EAAK1C,MAAM0C,OACpB,CACIK,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBARd,OAER4E,EAFQ,OAaViU,GAAQ,EACRjU,EAASJ,KAAK9B,SAAWkC,EAASJ,KAAK7B,UACvCkW,GAAQ,GAEZ,EAAKhU,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,QAASkC,EAASJ,KAAK9B,QACvBC,QAASiC,EAASJ,KAAK7B,QACvBmW,UAAWD,KAvBL,gDA2Bd,EAAKhU,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,mCACJmC,WAAW,KAlCL,yDAhGH,EAwInBjC,kBAAoB,SAACuB,GACjB,IAAMP,EAASO,EAAMP,OACfuB,EACc,aAAhBvB,EAAOR,KAAsBQ,EAAOwB,QAAUxB,EAAOuB,MACnDnF,EAAO4D,EAAO5D,KAEpB,EAAK4E,SAAL,eACK5E,EAAOmF,KA/IG,EAmJnB0S,6BAA+B,SAACvH,GAC5B,EAAK1L,SAAS,CACVuF,gBAAiBmG,KArJN,EAyJnBwH,2BAA6B,SAACxH,GAC1B,EAAK1L,SAAS,CACV2F,gBAAiB+F,KA3JN,EA+JnByH,2BAA6B,SAACzH,EAAM+H,GAChC,EAAKzT,SAAS,CACVhE,WAAY,EAAKe,MAAMf,WAAW+H,KAAI,SAAChI,EAAWR,GAI9C,OAHIA,IAAMkY,IACN1X,EAAU4V,UAAYjG,GAEnB3P,QArKA,EAyKnBqX,yBAA2B,SAAC1H,EAAM+H,GAC9B,EAAKzT,SAAS,CACVhE,WAAY,EAAKe,MAAMf,WAAW+H,KAAI,SAAChI,EAAWR,GAI9C,OAHIA,IAAMkY,IACN1X,EAAU8V,QAAUnG,GAEjB3P,QA/KA,EAoLnBsX,sBAAwB,SAACI,EAAOlT,GAC5B,EAAKP,SAAS,CACVhE,WAAY,EAAKe,MAAMf,WAAW+H,KAAI,SAACC,EAAGzI,GAItC,OAHIA,IAAMkY,IACNzP,EAAE4G,KAAOrK,GAENyD,QA1LA,EA+LnBsP,sBAAwB,SAACG,GACrB,EAAKzT,SAAS,CACVhE,WAAY,EAAKe,MAAMf,WAAWmN,QAAO,SAACnF,EAAGzI,GAAJ,OAAUA,IAAMkY,QAjM9C,EAqMnBF,mBAAqB,WACjB,EAAKvT,SAAS,CACVhE,WAAW,GAAD,oBACH,EAAKe,MAAMf,YADR,CAEN,CACIgG,SAAU,EAAKjF,MAAMsN,SACrBsH,UAAW/W,OACXiX,QAASjX,OACTgQ,KAAM,gBA7MH,EAmNnBlI,cAAgB,SAACnC,GACb,OAAIA,IAAS,EAAKxD,MAAM2C,UACba,IAAU,EAAKxD,MAAM2C,UAlNhC,EAAK3C,MAAQ,CACTkD,WAAW,EACXoK,SAAU,EAAKzN,MAAMgG,MAAMC,OAAO1C,GAClCwB,UAAW,KACXC,SAAU,KACVC,WAAY,KACZpC,MAAO,KACPqC,SAAU,KACVC,UAAW,KACX/F,WAAY,KACZuJ,gBAAiB,KACjBI,gBAAiB,KACjBL,SAAU,KACV5F,SAAU,GACVoD,cAAe,GACfjF,QAAS,KACTC,QAAS,KACTmW,WAAW,EACXjF,gBAAgB,GAEpB,EAAKiE,6BACD,EAAKA,6BAA6BhE,KAAlC,iBACJ,EAAKiE,2BACD,EAAKA,2BAA2BjE,KAAhC,iBA1BW,E,0CA2NnB,WAAU,IAAD,OAEL,EAiBI3R,KAAKP,MAhBLkD,EADJ,EACIA,UACA0B,EAFJ,EAEIA,UACAC,EAHJ,EAGIA,SACAC,EAJJ,EAIIA,WACApC,EALJ,EAKIA,MACAqC,EANJ,EAMIA,SACAC,EAPJ,EAOIA,UACA/F,EARJ,EAQIA,WACAuJ,EATJ,EASIA,gBACAI,EAVJ,EAUIA,gBACAL,EAXJ,EAWIA,SACAzH,EAZJ,EAYIA,QACAC,EAbJ,EAaIA,QACAuM,EAdJ,EAcIA,SACA4J,EAfJ,EAeIA,UACAjF,EAhBJ,EAgBIA,eAGJ,OAAkB,IAAd/O,EACO,kBAAC,GAAD,MAGP+O,EAEI,6BACI,kBAAC,GAAD,MADJ,IACwB,kBAAC,GAAD,MAA4B,IAChD,kBAAC,GAAD,OAMR,6BACI,kBAAC,GAAD,MACA,kBAACa,GAAA,EAAD,CACIC,KAAMmE,EACNlE,OAtCK,kBAAM,EAAK/P,SAAS,CAAEiU,WAAW,KAuCtCnM,KAAK,KACLkI,kBAAgB,gCAChBC,UAAQ,GAER,kBAACJ,GAAA,EAAMK,OAAP,CAAcC,aAAW,GACrB,kBAACN,GAAA,EAAMO,MAAP,CAAajQ,GAAG,iCAAhB,aAIJ,kBAAC0P,GAAA,EAAMQ,KAAP,KACI,2BAAIvS,IAER,kBAAC+R,GAAA,EAAMW,OAAP,KACG,4BAAQrT,UAAU,kBAAkBkH,QAAS,kBAAI,EAAKrE,SAAL,2BACzC,EAAKjD,OADoC,IAE5CkX,WAAW,OAFhB,cAQP,kBAAC,GAAD,CACIhU,UAAWA,EACX0B,UAAWA,EACXC,SAAUA,EACVC,WAAYA,EACZpC,MAAOA,EACPqC,SAAUA,EACVC,UAAWA,EACX/F,WAAYA,EACZuJ,gBAAiBA,EACjBI,gBAAiBA,EACjBL,SAAUA,EACViV,kBAAmBjd,KAAKid,kBACxBvc,kBAAmBV,KAAKU,kBACxBiV,6BACI3V,KAAK2V,6BAETC,2BAA4B5V,KAAK4V,2BACjCC,2BAA4B7V,KAAK6V,2BACjCC,yBAA0B9V,KAAK8V,yBAC/BG,mBAAoBjW,KAAKiW,mBACzBF,sBAAuB/V,KAAK+V,sBAC5BC,sBAAuBhW,KAAKgW,sBAC5B5Q,cAAepF,KAAKoF,cACpB7E,QAASA,EACTC,QAASA,EACTuM,SAAUA,EACVmQ,oBAAqBld,KAAKkd,sBAE9B,kBAAC,GAAD,S,uEAKZ,wHAEgC5a,EAAIiM,IAAI,iBAAkB,CAC9C/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJwH,SAAU/M,KAAKP,MAAMsN,YARrC,cAEY8P,EAFZ,gBAYiCva,EAAIiM,IAAI,qBAAsB,CACnD/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJwH,SAAU/M,KAAKP,MAAMsN,SACrBQ,KAAK,KAnBrB,OAYc7O,EAZd,OAuBQsB,KAAK0C,SAAL,uCACO1C,KAAKP,OADZ,IAEIkD,WAAW,EACXpC,SAAS,GACNsc,EAAYxa,MAJnB,IAKI3D,WAAU,UAAEA,EAAW2D,YAAb,QAAqB,MA5B3C,kDA+BQrC,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,iDACJmC,WAAW,EACX+O,gBAAgB,KAvChC,0D,2DA3TqCxS,aCwH1Bke,I,OA3HU,SAAC,GAAD,IACrB/Y,EADqB,EACrBA,UACAC,EAFqB,EAErBA,SACAC,EAHqB,EAGrBA,WACApC,EAJqB,EAIrBA,MACAqC,EALqB,EAKrBA,SACAC,EANqB,EAMrBA,UACA4Y,EAPqB,EAOrBA,eACA3c,EARqB,EAQrBA,kBACAH,EATqB,EASrBA,QACAC,EAVqB,EAUrBA,QAEA0c,GAZqB,EAWrB9X,cAXqB,EAYrB8X,qBAZqB,OAcrB,yBAAKrd,UAAU,aACX,kBAAC,iBAAD,CAAgBiB,SAAUuc,GACtB,kBAACxc,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,gBACA,kBAAC,YAAD,CACIlD,KAAK,YACL+E,GAAG,YACHqT,aAAc7R,EACdX,aAAc,CACVC,SAAU,yBACVC,QAAS,qBAEbD,UAAQ,EACRC,QAAQ,mCACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,iBACA,kBAAC,YAAD,CACIlD,KAAK,WACL+E,GAAG,WACHqT,aAAc5R,EACdZ,aAAc,CACVC,SAAU,0BACVC,QAAS,sBAEbD,UAAQ,EACRC,QAAQ,mCACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,mCACA,kBAAC,YAAD,CACIlD,KAAK,aACL+E,GAAG,aACHqT,aAAc3R,EACdb,aAAc,CACVC,SAAU,4BACVC,QAAS,wBAEbA,QAAQ,yBACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,yBACA,kBAAC,YAAD,CACIlD,KAAK,QACLoY,aAAc/T,EACdU,GAAG,QACHa,aAAc,CACVC,SAAU,wCACVE,UAAW,oCAEfA,UAAWA,IAAUC,QACrB3C,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,kBACA,kBAAC,YAAD,CACIlD,KAAK,WACL+E,GAAG,WACHqT,aAAc1R,EACdd,aAAc,CACVC,SAAU,2BACVC,QAAS,uBAEbD,UAAQ,EACRC,QAAQ,mCACRzC,SAAUT,KAGlB,kBAACG,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKkD,MAAN,CACI7C,KAAK,WACLgC,QAASuB,EACTtD,SAAUT,EACV5C,KAAK,YACLmG,MAAM,mBAGd,6BACCzD,IAAYD,EACT,kBAACI,EAAA,EAAD,CAAOC,QAAUL,EAAqB,UAAX,UACtBC,GAEL,KACJ,yBAAKX,UAAU,eACX,kBAAC,IAAD,CAAMA,UAAU,8BAA8BN,GAAG,WAAjD,YAGG,yBAAKM,UAAU,aACd,4BACAqB,KAAK,SACLrB,UAAU,kBACVkH,QAAS,kBAAImW,MAHb,mBAOJ,4BAAQrd,UAAU,mBAAlB,uB,+yMCiODyd,G,kDAhVX,WAAYhe,GAAQ,IAAD,8BACf,cAAMA,IAsBV+d,eAvBmB,wCAuBF,WAAOpb,GAAP,kEACbA,EAAMC,iBACN,EAAKQ,SAAL,2BACO,EAAKjD,OADZ,IAEI8d,+BAA+B,KAJtB,2CAvBE,wDA+BnBC,2BA/BmB,uBA+BU,+EACzB,EAAK9a,SAAL,2BACO,EAAKjD,OADZ,IAEI8d,+BAA+B,KAHV,2CA/BV,EAsCnBE,2BAtCmB,wCAsCU,WAAOxb,GAAP,qFACzBA,EAAMC,iBACN4R,QAAQC,IAAI,oCACZ,EAAKrR,SAAL,2BACO,EAAKjD,OADZ,IAEI8d,+BAA+B,KAE/Bhd,GAAU,EAPW,kBASS+B,EAAIiM,IAAI,eAAgB,CAClD/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAZH,cASf6f,EATe,OAefrb,EAAO,CACTF,MAAOub,EAAgBrb,KAAKF,MAC5BC,SAAU,EAAK3C,MAAMke,sBAjBJ,UAmBErb,EAAIC,KAAK,SAAUF,EAAM,CAC5CG,QAAS,CACL,eAAgB,sBArBH,QAmBfC,EAnBe,OAwBrBlC,EAAUkC,EAASJ,KAAKO,MAxBH,kDA0BrBkR,QAAQ8J,MAAR,MA1BqB,YA4BrBrd,EA5BqB,kCA6Bf,EAAKsd,qBA7BU,gCA+BrB,EAAKnb,SAAL,2BACO,EAAKjD,OADZ,IAEIc,SAAS,EACTC,QACI,qFAnCa,0DAtCV,wDA8EnBqd,mBA9EmB,uBA8EE,sGACXxb,EAAO,CACTgC,UAAW,EAAK5E,MAAM4E,UACtBC,SAAU,EAAK7E,MAAM6E,SACrBC,WAAY,EAAK9E,MAAM8E,WACvBpC,MAAO,EAAK1C,MAAM0C,MAClBqC,SAAU,EAAK/E,MAAM+E,SACrBC,UAAW,EAAKhF,MAAMgF,UACtBrC,SAAU,EAAK3C,MAAM2C,SACrBoD,cAAe,EAAK/F,MAAM+F,cAC1B3C,GAAI,EAAKpD,MAAMoD,IAVF,kBAcUP,EAAI0K,IAAI,kBAAmB3K,EAAM,CACpDG,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAjBX,OAcP4E,EAdO,OAoBTiU,GAAQ,EAERjU,EAASJ,KAAK9B,SAAWkC,EAASJ,KAAK7B,UACvCkW,GAAQ,GAEZ,EAAKhU,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,QAASkC,EAASJ,KAAK9B,QACvBC,QAASiC,EAASJ,KAAK7B,QACvBmW,UAAWD,KA/BN,kDAmCb,EAAKhU,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,2DACJmC,WAAW,KA1CN,0DA9EF,EA8HnBjC,kBAAoB,SAACuB,GACjB,IAAMP,EAASO,EAAMP,OACfuB,EACc,aAAhBvB,EAAOR,KAAsBQ,EAAOwB,QAAUxB,EAAOuB,MACnDnF,EAAO4D,EAAO5D,KAEpB,EAAK4E,SAAL,eACK5E,EAAOmF,KArIG,EAyInBmC,cAAgB,SAACnC,GACb,OAAIA,IAAS,EAAKxD,MAAM2C,UACba,IAAU,EAAKxD,MAAM2C,UA3IjB,EAiJnB8a,oBAjJmB,uBAiJG,sHAES5a,EAAIC,KACvB,wBACA,CAAEJ,MAAO,EAAK1C,MAAM0C,OACpB,CACIK,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBARd,OAER4E,EAFQ,OAaViU,GAAQ,EACRjU,EAASJ,KAAK9B,SAAWkC,EAASJ,KAAK7B,UACvCkW,GAAQ,GAEZ,EAAKhU,SAAL,2BACO,EAAKjD,OACL,CACCkD,WAAW,EACXpC,QAASkC,EAASJ,KAAK9B,QACvBC,QAASiC,EAASJ,KAAK7B,QACvBmW,UAAWD,KAvBL,gDA2Bd,EAAKhU,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,mCACJmC,WAAW,KAlCL,yDA9IlB,EAAKlD,MAAQ,CACToD,GAAI,KACJF,WAAW,EACX0B,UAAW,KACXC,SAAU,KACVC,WAAY,KACZpC,MAAO,KACPqC,SAAU,KACVC,UAAW,KACXrC,SAAU,GACVoD,cAAe,GACfjF,QAAS,KACTC,QAAS,KACTmW,WAAW,EACXjF,gBAAgB,EAChBiM,qBAAsB,GACtBJ,+BAA+B,GAnBpB,E,0CAyLnB,WAAU,IAAD,OAEL,EAYIvd,KAAKP,MAXLkD,EADJ,EACIA,UACA0B,EAFJ,EAEIA,UACAC,EAHJ,EAGIA,SACAC,EAJJ,EAIIA,WACApC,EALJ,EAKIA,MACAqC,EANJ,EAMIA,SACAC,EAPJ,EAOIA,UACAlE,EARJ,EAQIA,QACAC,EATJ,EASIA,QACAmW,EAVJ,EAUIA,UACAjF,EAXJ,EAWIA,eAGJ,OAAkB,IAAd/O,EACO,kBAAC,GAAD,MAGP+O,EAEI,6BACI,kBAAC,GAAD,MADJ,IACwB,kBAAC,GAAD,OAM5B,6BACI,kBAAC,GAAD,MACA,kBAACa,GAAA,EAAD,CACIC,KAAMxS,KAAKP,MAAM8d,8BACjB9K,OAAQzS,KAAKwd,2BACbhT,KAAK,KACLkI,kBAAgB,gCAChBC,UAAQ,GAER,kBAAC,iBAAD,CAAgB7R,SAAUd,KAAKyd,4BAC3B,kBAAClL,GAAA,EAAMK,OAAP,CAAcC,aAAW,GACrB,kBAACN,GAAA,EAAMO,MAAP,CAAajQ,GAAG,iCAAhB,cAIJ,kBAAC0P,GAAA,EAAMQ,KAAP,KACI,kBAAClS,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,4EAIA,kBAAC,YAAD,CACIE,KAAK,WACLpD,KAAK,uBACL+E,GAAG,uBACHqT,aAAclW,KAAK2d,qBACnBja,aAAc,CACVC,SACI,8CAERA,UAAQ,EACRxC,SAAUnB,KAAKU,sBAI3B,kBAAC6R,GAAA,EAAMW,OAAP,KACI,4BAAQrT,UAAU,mBAAlB,iBACA,4BACIA,UAAU,kBACVkH,QAAS/G,KAAKwd,2BACdtc,KAAK,SAHT,eAUZ,kBAACqR,GAAA,EAAD,CACIC,KAAMmE,EACNlE,OA7EK,kBAAM,EAAK/P,SAAS,CAAEiU,WAAW,KA8EtCnM,KAAK,KACLkI,kBAAgB,gCAChBC,UAAQ,GAER,kBAACJ,GAAA,EAAMK,OAAP,CAAcC,aAAW,GACrB,kBAACN,GAAA,EAAMO,MAAP,CAAajQ,GAAG,iCAAhB,aAIJ,kBAAC0P,GAAA,EAAMQ,KAAP,KACI,2BAAIvS,IAER,kBAAC+R,GAAA,EAAMW,OAAP,KACI,4BAAQrT,UAAU,kBAAkBkH,QAAS,kBAAI,EAAKrE,SAAL,2BAC1C,EAAKjD,OADqC,IAE7CkX,WAAW,OAFf,cAQR,kBAAC,GAAD,CACIhU,UAAWA,EACX0B,UAAWA,EACXC,SAAUA,EACVC,WAAYA,EACZpC,MAAOA,EACPqC,SAAUA,EACVC,UAAWA,EACX/D,kBAAmBV,KAAKU,kBACxBH,QAASA,EACTC,QAASA,EACT6c,eAAgBrd,KAAKqd,eACrBjY,cAAepF,KAAKoF,cACpB8X,oBAAqBld,KAAKkd,sBAE9B,kBAAC,GAAD,S,uEAKZ,oHAE6B5a,EAAIiM,IAAI,eAAgB,CACzC/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBALhC,OAEY4E,EAFZ,OASQzC,KAAK0C,SAAL,2BACO1C,KAAKP,OADZ,IAEIkD,WAAW,EACXpC,SAAS,GACNkC,EAASJ,OAbxB,gDAgBQrC,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,gDACJmC,WAAW,EACX+O,gBAAgB,KAxBhC,yD,2DAlTgCxS,aCLpCgJ,KAAOoL,OAAO,MAEd,IAAMlL,GAAc,IAAI9K,KAmBxB,IAmGewgB,GAnGW,SAAC,GAAD,IACtBzZ,EADsB,EACtBA,UACAC,EAFsB,EAEtBA,SACAC,EAHsB,EAGtBA,WACApC,EAJsB,EAItBA,MACAqC,EALsB,EAKtBA,SACA9F,EANsB,EAMtBA,WACAuJ,EAPsB,EAOtBA,gBACAI,EARsB,EAQtBA,gBACAL,EATsB,EAStBA,SACAvD,EAVsB,EAUtBA,UAVsB,OAYtB,yBAAK5E,UAAU,aACX,kBAACwc,GAAA,EAAD,CAAOpS,SAAO,EAACC,OAAK,GAChB,+BACI,4BACI,uCACA,wBAAIpK,MAAO,CAAE2H,cAAe,eAAiBpD,IAEjD,4BACI,wCACA,4BAAKC,IAET,4BACI,0CACA,4BAAKC,IAET,4BACI,sDACA,4BAAKpC,IAET,4BACI,yCACA,4BAAKqC,IAET,4BACI,6CACA,4BACKC,EACG,sCACU,IACN,kBAAC,IAAD,CAAiBpD,KAAK,QAAQtB,MAAM,WAGxC,iCACO,kBAAC,IAAD,CAAiBsB,KAAK,QAAQtB,MAAM,WAKvD,4BACI,sCACA,4BAAKyG,GAAmB9H,KAE5B,4BACI,yDACA,4BACKsJ,EACG,sCACU,IACN,kBAAC,IAAD,CAAiB3G,KAAK,QAAQtB,MAAM,WAGxC,iCACO,kBAAC,IAAD,CAAiBsB,KAAK,QAAQtB,MAAM,WAKvD,4BACI,mDACA,4BACKkI,EACKC,KAAOD,GAAiBE,OAAO,YAC/B,mCAGd,4BACI,yDACA,4BAhGpB,SAAkCE,EAAiBD,GAC/C,OAAIC,EACI,IAAI/K,KAAK+K,IAAoBD,EAEzB,6BACKF,KAAOG,GAAiBF,OAAO,YAAa,IAC7C,kBAAC,IAAD,CAAiB9G,KAAK,uBAAuBtB,MAAM,SAIpD,6BAAMmI,KAAOG,GAAiBF,OAAO,aAGzC,+DAoFUmU,CAAyBjU,EAAiBD,QAK3D,6BACKC,GAAmB,IAAI/K,KAAK+K,IAAoBD,GAC7C,2BACI,kBAAC,IAAD,CAAiB/G,KAAK,uBAAuBtB,MAAM,QAAS,IADhE,6DAIA,MAER,kBAAC,IAAD,CAAMF,UAAU,0BAA0BN,GAAE,mBAA5C,2B,+yMCVOwe,G,kDArGX,WAAYze,GAAQ,IAAD,8BACf,cAAMA,IAEDG,MAAQ,CACTf,WAAYH,IACZoE,WAAW,EACX0B,UAAW,KACXC,SAAU,KACVC,WAAY,KACZpC,MAAO,KACPqC,SAAU,KACVyD,gBAAiB,KACjBI,gBAAiB,KACjBL,SAAU,KACVvD,UAAW,KACXlE,QAAS,KACTC,QAAS,KACTkR,gBAAgB,GAjBL,E,0CAqBnB,WACI,MAaI1R,KAAKP,MAZLkD,EADJ,EACIA,UACA0B,EAFJ,EAEIA,UACAC,EAHJ,EAGIA,SACAC,EAJJ,EAIIA,WACApC,EALJ,EAKIA,MACAqC,EANJ,EAMIA,SACA9F,EAPJ,EAOIA,WACAuJ,EARJ,EAQIA,gBACAI,EATJ,EASIA,gBACAL,EAVJ,EAUIA,SACAvD,EAXJ,EAWIA,UACAiN,EAZJ,EAYIA,eAGJ,OAAkB,IAAd/O,EACO,kBAAC,GAAD,MAGP+O,EAEI,6BACI,kBAAC,GAAD,MADJ,IACwB,kBAAC,GAAD,OAM5B,6BACI,kBAAC,GAAD,MACA,kBAAC,GAAD,CACI/O,UAAWA,EACX0B,UAAWA,EACXC,SAAUA,EACVC,WAAYA,EACZpC,MAAOA,EACPqC,SAAUA,EACV9F,WAAYA,EACZuJ,gBAAiBA,EACjBI,gBAAiBA,EACjBL,SAAUA,EACVvD,UAAWA,IAEf,kBAAC,GAAD,S,uEAKZ,oHAE6BnC,EAAIiM,IAAI,eAAgB,CACzC/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBALhC,OAEY4E,EAFZ,OASQzC,KAAK0C,SAAL,2BACO1C,KAAKP,OADZ,IAEIkD,WAAW,EACXpC,SAAS,GACNkC,EAASJ,OAbxB,gDAgBQrC,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,gDACJmC,WAAW,EACX+O,gBAAgB,KAxBhC,yD,2DAvEiCxS,aC0FtB8e,I,OAjGO,SAAC,GAAD,IAAGC,EAAH,EAAGA,WAAYC,EAAf,EAAeA,UAAWC,EAA1B,EAA0BA,mBAA1B,OAClB,yBAAKte,UAAU,aACX,8CACA,yIAIA,yMAKA,+NAKA,mJAIA,yBACIA,UAAU,MACVC,MAAO,CACHgS,QAAS,OACTsM,cAAe,MACfxK,eAAgB,gBAChByK,SAAU,SAGbJ,EAAWxX,KAAI,SAAC6X,GACb,OACI,yBAAKrJ,IAAK,YAAcqJ,EAAKzb,GAAIhD,UAAU,aACvC,kBAACgB,EAAA,EAAD,CACIC,SAAU,SAACwC,GACPA,EAAEpB,iBACEoc,EAAKC,gBACLL,EAAUI,EAAKC,kBAIvB,kBAAC1d,EAAA,EAAKE,MAAN,KACI,kBAACF,EAAA,EAAKG,MAAN,KAAasd,EAAKxgB,MAClB,kBAAC+C,EAAA,EAAK2d,KAAN,KAAYF,EAAKG,aAEjB,kBAAC5d,EAAA,EAAK0C,IAAN,CAAU1D,UAAU,iCACfye,EAAKI,SAASxgB,OAAS,GACpB,kBAAC2C,EAAA,EAAKI,QAAN,CACIsV,GAAG,SACHtT,MACIqb,EAAKC,eACCD,EAAKC,eAAe1b,GACpB,GAEV1B,SAAU,SAACmC,GACP,IAAMuB,EACFvB,EAAE5B,OAAOuB,MACP0b,EACFL,EAAKI,SAASjR,MACV,SAAC8H,GAAD,OACIA,EAAQ1S,KACRgC,KAGZsZ,EACIG,EACAK,KAIPL,EAAKI,SAASjY,KAAI,SAAC8O,GAAD,OACf,4BACIN,IAAKM,EAAQ1S,GACbI,MAAOsS,EAAQ1S,IAEd0S,EAAQzX,KAJb,KAKKyX,EAAQqJ,MALb,gBAUXN,EAAKC,gBACF,kBAACnd,EAAA,EAAD,CAAQF,KAAK,SAASN,QAAQ,WAA9B,0BACsB,IACjB0d,EAAKC,eAAeK,MAFzB,sB,wzMCwNzBC,G,kDAjSX,WAAYvf,GAAQ,IAAD,8BACf,cAAMA,IAaVwf,UAdmB,uBAcP,sHAEwBxc,EAAIC,KAC5B,oBACA,CACIwc,WAAY,EAAKtf,MAAMuf,KAAKvY,KAAI,SAACC,GAAD,OAAOA,EAAE7D,OAE7C,CACIL,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAVxB,OAEEohB,EAFF,OAeEC,EAAcD,EAAc5c,KAAK6c,YAGvCC,OAAOxf,SAAS6B,KAAO0d,EAlBnB,gDAoBJ,EAAKxc,SAAL,2BACO,EAAKjD,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,uCACJmC,WAAW,EACX+O,gBAAgB,KA5BpB,yDAdO,EAgDnBhR,kBAAoB,SAACuB,GACjB,IAAMP,EAASO,EAAMP,OACfuB,EACc,aAAhBvB,EAAOR,KAAsBQ,EAAOwB,QAAUxB,EAAOuB,MACnDnF,EAAO4D,EAAO5D,KAEpB,EAAK4E,SAAL,eACK5E,EAAOmF,KAvDG,EA2DnBib,UAAY,SAAC3I,GACT,EAAK7S,SAAS,CAAEsc,KAAK,GAAD,oBAAM,EAAKvf,MAAMuf,MAAjB,CAAuBzJ,OA5D5B,EA+DnB6J,eAAiB,SAAC7J,GACd,IAAMY,EAAQ,EAAK1W,MAAMuf,KAAKK,WAAU,SAAC3Y,GAAD,OAAOA,EAAE7D,KAAO0S,EAAQ1S,MAChE,IAAe,IAAXsT,EAAc,CACd,IAAMmJ,EAAO,aAAO,EAAK7f,MAAMuf,MAC/BM,EAAQC,OAAOpJ,EAAO,GACtB,EAAKzT,SAAS,CAAEsc,KAAMM,MApEX,EAwEnBnB,mBAAqB,SAACG,EAAM/I,GACxB,EAAK7S,SAAS,CACVub,WAAY,EAAKxe,MAAMwe,WAAWxX,KAAI,SAACxI,GAInC,OAHIA,EAAE4E,KAAOyb,EAAKzb,KACd5E,EAAEsgB,eAAiBhJ,GAEhBtX,QA3Ef,EAAKwB,MAAQ,CACTkD,WAAW,EACXsb,WAAY,GACZS,SAAU,GACVM,KAAM,GACNQ,UAAU,EACVjf,QAAS,KACTC,QAAS,MAVE,E,0CAmFnB,WAAU,IAAD,OACL,EAQIR,KAAKP,MAPLkD,EADJ,EACIA,UACAqc,EAFJ,EAEIA,KACAN,EAHJ,EAGIA,SACAT,EAJJ,EAIIA,WACAuB,EALJ,EAKIA,SACAjf,EANJ,EAMIA,QACAC,EAPJ,EAOIA,QAGJ,IAAkB,IAAdmC,EACA,OAAO,kBAAC,GAAD,MAGX,IAAM8c,EAAYT,EAAKlK,QAAO,SAACC,EAAGC,GAAJ,OAAUD,EAAIC,EAAE4J,QAAO,GAC/Cc,EAAY1f,KAAKP,MAAMuf,KAAK9gB,OAClC,OACI,6BACI,kBAAC,GAAD,MACA,yBACI2B,UAAU,MACVC,MAAO,CACHgS,QAAS,OACTD,MAAO,QACP+B,eAAgB,WAChB+L,YAAa,SAGjB,kBAAC,IAAD,CACIte,KAAMue,KACNpV,KAAK,KACLzD,QAAS,kBAAM,EAAKrE,SAAS,CAAE8c,UAAU,KACzC1f,MAAO,CAAE+f,OAAQ,aAEpBH,EAAY,GACT,yBACI5f,MAAO,CACHyT,SAAU,WACVuM,IAAK,QACLxN,gBAAiB,MACjBgE,aAAc,MACdxQ,MAAO,OACPC,OAAQ,OACR+L,QAAS,OACT8B,eAAgB,SAChBmM,WAAY,SACZhgB,MAAO,QACPigB,WAAY,SAGfN,IAIb,kBAACnN,GAAA,EAAD,CACIC,KAAMgN,EACN/M,OAAQ,kBAAM,EAAK/P,SAAS,CAAE8c,UAAU,KACxChV,KAAK,KACLkI,kBAAgB,gCAChBC,UAAQ,GAER,kBAACJ,GAAA,EAAMK,OAAP,CAAcC,aAAW,GACrB,kBAACN,GAAA,EAAMO,MAAP,CAAajQ,GAAG,iCAAhB,cAIJ,kBAAC0P,GAAA,EAAMQ,KAAP,CACIjT,MAAO,CACHgS,QAAS,OACTsM,cAAe,SACf2B,WAAY,QACZnM,eAAgB,WAGnBoL,EAAK9gB,OAAS,GAAK,wCACnB8gB,EAAKvY,KAAI,SAAC8O,GAAD,OACN,yBACI1V,UAAU,MACVC,MAAO,CACHgS,QAAS,OACTsM,cAAe,MACf2B,WAAY,SACZnM,eAAgB,UAEpBqB,IACI,YACAM,EAAQ1S,GAAGod,WACXjB,EAAK1gB,QAAQiX,GAAS0K,YAG1B,yBACIpgB,UAAU,MACVC,MAAO,CAAEogB,WAAY,SAErB,4BACK3K,EAAQzX,KADb,KACqByX,EAAQqJ,MAD7B,WAGA,2BAAIrJ,EAAQkJ,cAEhB,kBAAC,IAAD,CACIpd,KAAM8e,KACN3V,KAAK,KACLzD,QAAS,kBAAM,EAAKqY,eAAe7J,IACnCzV,MAAO,CACH+f,OAAQ,UACR9f,MAAO,MACPmgB,WAAY,cAKX,IAAhBlB,EAAK9gB,OACF,oDAEA,4CAAeuhB,EAAf,YAGR,kBAAClN,GAAA,EAAMW,OAAP,KACI,4BACIrT,UAAU,kBACVkH,QAAS,kBAAM,EAAKrE,SAAS,CAAE8c,UAAU,KACzCte,KAAK,SAHT,YAOC8d,EAAK9gB,OAAS,GACX,4BACI2B,UAAU,kBACVkH,QAAS,kBAAM,EAAK+X,aACpB5d,KAAK,UAHT,UAUZ,kBAAC,GAAD,CACIX,QAASA,EACTC,QAASA,EACTwe,KAAMA,EACNf,WAAYA,EACZuB,SAAUA,EACVd,SAAUA,EACVR,UAAWle,KAAKke,UAChBC,mBAAoBne,KAAKme,qBAE7B,kBAAC,GAAD,S,uEAKZ,4PAEyC7b,EAAIiM,IAAI,cAAe,CACpD/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBALhC,cAEcuiB,EAFd,OAScnC,EAAamC,EAAmB/d,KAT9C,SAW+BC,EAAIiM,IAAJ,WAAoB,CACvC/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,sBAdhC,OAWc6gB,EAXd,sBAkByBT,GAlBzB,IAkBQ,2BAASK,EAAoB,QACnB5X,EAAI4X,EAAKS,WAAWtY,KAAI,SAAC5B,GAC3B,OAAO6Z,EAASrc,KAAKoL,MAAK,SAAC/G,GAAD,OAAOA,EAAE7D,KAAOgC,QAE9CyZ,EAAKI,SAAWhY,EACZA,EAAExI,OAAS,IACXogB,EAAKC,eAAiB7X,EAAE,IAxBxC,8BA4BQoN,QAAQC,IAAIkK,GAEZ,EAAKvb,SAAL,2BACO,EAAKjD,OADZ,IAEIkD,WAAW,EACXpC,SAAS,EACT0d,WAAYA,EACZS,SAAUA,EAASrc,QAnC/B,2GAsCQyR,QAAQ8J,MAAR,MACA5d,KAAK0C,SAAL,2BACO1C,KAAKP,OACL,CACCc,SAAS,EACTC,QAAO,gDACH,KAAGiC,gBADA,iBACH,EAAaJ,YADV,aACH,EAAmB7B,eADhB,QAEH,uCACJmC,WAAW,EACX+O,gBAAgB,KA/ChC,wD,2DA5O6BxS,aCiDlBmhB,GAvDO,SAAC,GAAsC,IAApC9f,EAAmC,EAAnCA,QAAS+f,EAA0B,EAA1BA,SAAU3d,EAAgB,EAAhBA,UAClC4d,EAAchgB,GAAW+f,GAAgC,SAApBA,EAASzJ,OAC9C2J,GACDjgB,GAAYA,GAAW+f,GAAgC,cAApBA,EAASzJ,OAEjD,OACI,6BACI,kBAAC,GAAD,OAEElU,IAAe6d,IAAkBD,IAC/B,kBAAC,GAAD,MAGHA,GACG,yBAAK1gB,UAAU,aACX,uDACA,qIAKA,+HAKA,0HAKA,kBAAC,IAAD,CAAMA,UAAU,0BAA0BN,GAAE,WAA5C,eAMPihB,GACG,yBAAK3gB,UAAU,aACX,wDACA,8JAKA,kBAAC,IAAD,CAAMA,UAAU,0BAA0BN,GAAE,WAA5C,eAKR,kBAAC,GAAD,Q,+yMClDNkhB,G,kDACF,WAAYnhB,GAAQ,IAAD,8BACf,cAAMA,IAEDG,MAAQ,CACTc,SAAS,EACTmgB,WAAY,KACZJ,SAAU,KACV3d,WAAW,EACXge,WAAY,MARD,E,qDAYnB,WAAqB,IAAD,OACVC,EAAe5gB,KAAKV,MAAMgG,MAAMC,OAAOhF,QACvCsgB,EAAkB7gB,KAAKV,MAAMgG,MAAMC,OAAO+a,SAEhD,GAAIM,GAAgBC,EAAiB,CACjC7gB,KAAK0C,SAAS,CACVnC,QAA0B,SAAjBqgB,EACTF,WAAYG,IAGhB,IAAMF,EAAaG,YAAW,uBAAC,+EAC3B,EAAKC,gBADsB,2CAE5B,KAEH/gB,KAAK0C,SAAS,CACVie,WAAYA,O,kCAKxB,WACQ3gB,KAAKP,MAAMkhB,YACXK,cAAchhB,KAAKP,MAAMkhB,c,mEAIjC,gHAE+Bre,EAAIiM,IAAI,qBAAsB,CACjD/L,QAAS,CACLyK,cAAepP,EAAU,wBACzB,eAAgB,oBAEpB0H,OAAQ,CACJmb,WAAY1gB,KAAKP,MAAMihB,cARvC,OAEcje,EAFd,OAeuC,UAHzBwe,EAAkBxe,EAASJ,MAGbwU,QACW,cAA3BoK,EAAgBpK,SAEZ7W,KAAKP,MAAMkhB,YACXK,cAAchhB,KAAKP,MAAMkhB,YAE7B3gB,KAAK0C,SAAS,CACV4d,SAAUW,EACVte,WAAW,KAvB3B,gDA2BQmR,QAAQ8J,MAAR,MA3BR,yD,0EA+BA,WACI,MAAyC5d,KAAKP,MAAtCc,EAAR,EAAQA,QAAS+f,EAAjB,EAAiBA,SAAU3d,EAA3B,EAA2BA,UAE3B,OACI,kBAAC,GAAD,CACIpC,QAASA,EACT+f,SAAUA,EACV3d,UAAWA,Q,GA7EMzD,aAmFlB8U,eAAWyM,ICpFpBhW,GAAS,CACXyW,SAAU,OACVlB,WAAY,MACZmB,aAAc,QAcHC,GAXE,kBACb,kBAAC,EAAD,KACI,yBAAKvhB,UAAU,eACX,wBAAIC,MAAO2K,IAAX,OACA,kBAAC,IAAD,CAAMlL,GAAG,IAAIM,UAAU,mBAAvB,iB,MCsBZwhB,EAAQC,IAAIC,KAASC,KAASC,KAAaC,M,IAwF5BC,G,4JArFX,WACI,OACI,kBAAC,IAAD,KACI,6BACI,kBAAC,IAAD,KACI,kBAAC,IAAD,CACI5F,KAAK,IACL6F,OAAO,EACPziB,UAAW6C,IAEf,kBAAC,IAAD,CAAO+Z,KAAK,UAAU5c,UAAW8F,IACjC,kBAAC,IAAD,CACI8W,KAAK,oBACL6F,OAAO,EACPziB,UAAWkG,KAEf,kBAAC,EAAD,CACI0W,KAAK,UACL5c,UAAWsG,KAGf,kBAAC,EAAD,CACIsW,KAAK,SACL6F,OAAO,EACPziB,UAAW+U,KAEf,kBAAC,EAAD,CACI6H,KAAK,uBACL5c,UAAW0Y,KAEf,kBAAC,EAAD,CACIkE,KAAK,0BACL5c,UAAW6a,KAEf,kBAAC,EAAD,CACI+B,KAAK,aACL5c,UAAW0iB,KAEf,kBAAC,EAAD,CACI9F,KAAK,mBACL5c,UAAWgV,KAEf,kBAAC,EAAD,CACI4H,KAAK,sBACL5c,UAAWge,KAEf,kBAAC,EAAD,CACIpB,KAAK,sBACL5c,UAAWod,KAEf,kBAAC,EAAD,CACIR,KAAK,iBACL5c,UAAWqc,KAEf,kBAAC,EAAD,CACIO,KAAK,oBACL5c,UAAW6c,KAGf,kBAAC,EAAD,CACID,KAAK,kBACL5c,UAAWme,KAEf,kBAAC,EAAD,CACIvB,KAAK,wCACL5c,UAAWshB,KAEf,kBAAC,EAAD,CACI1E,KAAK,cACL5c,UAAW0f,KAEf,kBAAC,IAAD,CAAO9C,KAAK,QAAQ5c,UAAWgF,IAC/B,kBAAC,EAAD,CACI4X,KAAK,UACL5c,UAAW4e,KAGf,kBAAC,IAAD,CAAO5e,UAAW2iB,Y,GA9ExB5iB,a,OCjClB6iB,IAAS1iB,OAAO,kBAAC,GAAD,MAAS1B,SAASqkB,eAAe,U,mBCNjDC,EAAOC,QAAU,IAA0B,oC,mBCI3CD,EAAOC,QAAU,CACbpgB,OALWqgB,4BAMX5gB,gBAJ+C,K","file":"static/js/main.7df207dc.chunk.js","sourcesContent":["export function setCookie(cname, cvalue, hours) {\n let d = new Date();\n d.setTime(d.getTime() + hours * 60 * 60 * 4400);\n let expires = 'expires=' + d.toUTCString();\n document.cookie = cname + '=' + cvalue + ';' + expires + ';path=/';\n}\n\nexport function getCookie(cname) {\n let name = cname + '=';\n let ca = document.cookie.split(';');\n\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') {\n c = c.substring(1);\n }\n if (c.indexOf(name) === 0) {\n return c.substring(name.length, c.length);\n }\n }\n\n return '';\n}\n\nexport function setPrivileges(privileges) {\n setCookie('privileges', privileges.join(','), 1000);\n}\n\nexport function getPrivileges() {\n return (getCookie('privileges') ?? '').split(',');\n}\n\nexport function hasPrivilege(privilege) {\n let privileges = getCookie('privileges');\n if (privileges !== '') {\n return privileges.includes(privilege);\n } else {\n return false;\n }\n}\n\nexport function canManageRegistry() {\n let privileges = getCookie('privileges');\n\n return (\n privileges.includes('boardmember') ||\n privileges.includes('admin') ||\n privileges.includes('chairman') ||\n privileges.includes('vicechairman')\n );\n}\n\nexport function canSeeAccounting() {\n let privileges = getCookie('privileges');\n\n return (\n privileges.includes('boardmember') ||\n privileges.includes('admin') ||\n privileges.includes('chairman') ||\n privileges.includes('vicechairman')\n );\n}\n\nexport function canAnnounce() {\n let privileges = getCookie('privileges');\n\n return (\n privileges.includes('boardmember') ||\n privileges.includes('admin') ||\n privileges.includes('chairman') ||\n privileges.includes('vicechairman') ||\n privileges.includes('functionary')\n );\n}\n\nexport function checkCookie() {\n let user = getCookie('jasenrekisteri-token');\n if (user !== '') {\n return user;\n } else {\n return null;\n }\n}\n","import React from 'react';\n\nimport { Redirect, Route } from 'react-router-dom';\nimport { checkCookie } from '../utils/cookies';\n\nconst PrivateRoute = ({ component: Component, ...rest }) => (\n \n checkCookie() !== null ? (\n \n ) : (\n \n )\n }\n />\n);\n\nexport default PrivateRoute;\n","import React, { Component } from 'react';\nimport { Link } from 'react-router-dom';\n\nimport digitlogo from '../../assets/digit.webp';\nimport '../../assets/scaling-logo.css';\n\nimport './mainComponent.css';\n\nclass MainComponent extends Component {\n render() {\n return (\n \n
\n \n \n \n \n {this.props.children}\n
\n \n \n );\n }\n}\n\nexport default MainComponent;\n","import React from 'react';\n\nimport { Link, Redirect } from 'react-router-dom';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\n\nimport Alert from 'react-bootstrap/Alert';\nimport Form from 'react-bootstrap/Form';\nimport Button from 'react-bootstrap/Button';\n\nimport MainComponent from '../../commons/main/mainComponent';\n\nimport { checkCookie } from '../../../utils/cookies';\nimport config from '../../../config';\n\nimport './loginView.css';\n\nconst LoginView = ({ success, message, handleLogin, handleInputChange }) => (\n
\n \n

Jäsenrekisteri

\n {checkCookie() !== null ? : null}\n {message ? (\n \n {message}\n \n ) : null}\n
\n \n Sähköposti\n \n \n \n Salasana\n \n \n\n \n
\n
\n
\n
\n {config.paymentOptions ? (\n

\n Liity jäseneksi\n

\n ) : null}\n

\n Salasana unohtunut?\n

\n

\n \n Jäsenrekisteriseloste\n \n

\n
\n \n
\n
\n
\n);\n\nexport default LoginView;\n","import axios from 'axios';\nimport config from '../config';\n\nexport default axios.create({\n baseURL: config.apiUrl,\n responseType: 'json',\n});\n","import React, { Component } from 'react';\n\nimport LoginView from './loginView';\n\nimport { setCookie, setPrivileges } from '../../../utils/cookies';\nimport api from '../../../utils/api';\n\nclass LoginComponent extends Component {\n constructor(props) {\n super(props);\n this.state = {\n success: false,\n message: null,\n email: null,\n password: null,\n };\n }\n\n handleLogin = async (event) => {\n event.preventDefault();\n\n let email = this.state.email;\n let password = this.state.password;\n\n const data = {\n email,\n password,\n };\n\n try {\n const response = await api.post('/login', data, {\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: response.data.success,\n message: response.data.message,\n },\n });\n if (\n response.data.token &&\n response.data.privileges &&\n response.data.id\n ) {\n setCookie('jasenrekisteri-token', response.data.token, 1000);\n setPrivileges(response.data.privileges);\n setCookie('id', response.data.id, 1000);\n this.props.history.push('/member/profile');\n }\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö kirjautumiselle epäonnistui.',\n isLoading: false,\n },\n });\n }\n };\n\n handleInputChange = (event) => {\n const target = event.target;\n const value =\n target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n\n this.setState({\n [name]: value,\n });\n };\n\n render() {\n return (\n \n );\n }\n}\n\nexport default LoginComponent;\n","import React from 'react';\n\nimport { Link } from 'react-router-dom';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { ValidationForm, TextInput } from 'react-bootstrap4-form-validation';\nimport validator from 'validator';\nimport '../../assets/validatedCheckbox.css';\n\nimport { Alert, Form, Button, Row, Col } from 'react-bootstrap';\n\nimport MainComponent from '../../commons/main/mainComponent';\n\nconst RegisterView = ({\n success,\n message,\n handleRegistration,\n handleInputChange,\n}) => {\n const registerForm = (\n <>\n

Liity jäseneksi

\n

\n Voit jättää jäsenhakemuksesi Digit ry:lle tästä. Täytön jälkeen\n sähköpostiisi lähetetään salasana, jolla pääset kirjautumaan,\n joten varmistathan että sähköpostiosoite on oikein.\n

\n

\n Kun käyttäjä on luotu, kirjaudu sisään ja maksa jäsenmaksu.\n Jäsenyys astuu voimaan, kun jäsenmaksu on maksettu. Jos\n jäsenmaksua ei ole maksettu 30 päivän kuluessa, käyttäjä\n poistetaan.\n

\n

Digit ry:n hallitus hyväksyy jäsenyytesi mahdollisimman pian.

\n

\n \n Lisätietoa jäsenrekisteristä\n \n

\n {\n e.preventDefault();\n handleRegistration(e);\n }}\n >\n \n \n \n Etunimi\n \n \n \n \n \n Sukunimi\n \n \n \n \n \n \n \n UTU-tunnus\n \n \n \n \n \n Sähköposti\n \n \n \n \n \n \n \n Kotikunta\n \n \n \n \n \n \n TYYn jäsen\n }\n onChange={handleInputChange}\n />\n \n \n \n Hyväksyn että tietojani käsitellään\n jäsenrekisteriselosteen mukaisesti\n \n }\n onChange={handleInputChange}\n />\n \n {message ? (\n \n {message}\n \n ) : null}\n \n \n
\n
\n

\n Takaisin\n

\n
\n \n );\n\n const registrationComplete = (\n <>\n

Käyttäjä luotu onnistuneesti!

\n

Sinulle on luotu käyttäjä onnistuneesti.

\n\n

\n Saat sähköpostiisi salasanan, jolla pääset kirjautumaan\n käyttäjärekisteriin. Jos et saa sähköpostia, tarkista\n roskapostikansio. Kirjaudu sisään käyttäjällesi ja maksa\n jäsenmaksu. Jäsenyys astuu voimaan, kun jäsenmaksu on maksettu\n ja hallitus on hyväksynyt jäsenyytesi. Jos jäsenmaksua ei ole\n maksettu 30 päivän kuluessa, käyttäjä poistetaan.\n

\n
\n

\n Takaisin\n

\n
\n \n );\n return (\n \n {success ? registrationComplete : registerForm}\n \n );\n};\n\nexport default RegisterView;\n","import React, { Component } from 'react';\n\nimport RegisterView from './registerView';\n\nimport api from '../../../utils/api';\n\nclass RegisterComponent extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isLoading: true,\n firstName: null,\n lastName: null,\n utuAccount: null,\n email: null,\n homeTown: null,\n tyyMember: null,\n tiviaMember: null,\n productId: '1111',\n success: null,\n message: null,\n showBanks: false,\n memberId: null,\n acceptTerms: false,\n };\n }\n\n handleRegistration = async (event) => {\n event.preventDefault();\n\n if (!this.state.acceptTerms) {\n this.setState({\n ...this.state,\n success: false,\n message: 'Hyväksy käyttöehdot jatkaaksesi.',\n });\n return;\n }\n const data = {\n firstName: this.state.firstName,\n lastName: this.state.lastName,\n utuAccount: this.state.utuAccount,\n email: this.state.email,\n homeTown: this.state.homeTown,\n tyyMember: this.state.tyyMember,\n };\n\n try {\n const response = await api.post('/register', data, {\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: response.data.success,\n message: response.data.message,\n memberId: response.data.id,\n showBanks: !!response.data.success,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö jäseneksi liittymiselle epäonnistui.',\n isLoading: false,\n },\n });\n }\n };\n\n handleInputChange = (event) => {\n const target = event.target;\n const value =\n target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n\n this.setState({\n [name]: value,\n });\n };\n\n render() {\n return (\n
\n \n
\n );\n }\n}\n\nexport default RegisterComponent;\n","import React from 'react';\n\nimport Alert from 'react-bootstrap/Alert';\nimport Button from 'react-bootstrap/Button';\nimport Form from 'react-bootstrap/Form';\nimport { Link } from 'react-router-dom';\nimport { ValidationForm, TextInput } from 'react-bootstrap4-form-validation';\nimport validator from 'validator';\n\nimport MainComponent from '../../commons/main/mainComponent';\n\nimport './forgotView.css'\n\nconst ForgotView = ({\n success,\n message,\n handleInputChange,\n handleForgot,\n}) => (\n
\n \n

Salasanan palautus

\n

Sähköpostiosoitteeseesi lähetetään salasanan palautuslinkki. Linkki on voimassa tunnin.

\n

Jos olet unohtanut sähköpostiosoitteesi, ota yhteyttä Digitin hallitukseen.

\n {message ? (\n {message}\n ) : null}\n {\n e.preventDefault();\n handleForgot(e);\n }}\n >\n \n \n \n \n \n
\n
\n

\n Takaisin\n

\n
\n
\n
\n);\n\nexport default ForgotView;\n","import React, { Component } from 'react';\n\nimport ForgotView from './forgotView';\n\nimport api from '../../../utils/api';\n\nclass ForgotComponent extends Component {\n constructor(props) {\n super(props);\n this.state = {\n success: false,\n message: null,\n email: null,\n };\n }\n\n handleForgot = async (event) => {\n event.preventDefault();\n\n let email = this.state.email;\n const data = {\n email,\n };\n try {\n const response = await api.post('/forgot', data, {\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n this.setState({\n ...this.state,\n ...{\n success: response.data.success,\n message: response.data.message,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö salasanan palauttamiselle epäonnistui.',\n },\n });\n }\n };\n\n handleInputChange = (event) => {\n const target = event.target;\n const value =\n target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n\n this.setState({\n [name]: value,\n });\n };\n\n render() {\n const { email, success, message } = this.state;\n\n return (\n \n );\n }\n}\n\nexport default ForgotComponent;\n","import React from 'react';\n\nimport Alert from 'react-bootstrap/Alert';\nimport Button from 'react-bootstrap/Button';\nimport Form from 'react-bootstrap/Form';\nimport { Link } from 'react-router-dom';\nimport { ValidationForm, TextInput } from 'react-bootstrap4-form-validation';\n\nimport MainComponent from '../../commons/main/mainComponent';\n\nconst ResetView = ({\n success,\n message,\n handleInputChange,\n handleReset,\n matchPassword,\n}) => (\n \n

Uusi salasana

\n {message ? (\n {message}\n ) : null}\n {\n e.preventDefault();\n handleReset(e);\n }}\n >\n \n Salasana\n \n \n \n Salasana uudelleen\n \n \n \n \n
\n
\n

\n Takaisin\n

\n
\n
\n);\n\nexport default ResetView;\n","import React, { Component } from 'react';\nimport ResetView from './resetView';\nimport api from '../../../utils/api';\n\nclass ResetComponent extends Component {\n constructor(props) {\n super(props);\n this.state = {\n success: false,\n message: null,\n password: null,\n passwordAgain: null,\n };\n }\n\n handleReset = async (event) => {\n event.preventDefault();\n\n let memberId = this.props.match.params.id;\n let token = this.props.match.params.token;\n let password = this.state.password;\n let passwordAgain = this.state.passwordAgain;\n const data = {\n memberId,\n token,\n password,\n passwordAgain,\n };\n try {\n const response = await api.post('/reset', data, {\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n this.setState({\n ...this.state,\n ...{\n success: response.data.success,\n message: response.data.message,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö salasanan päivitykselle epäonnistui.',\n },\n });\n }\n };\n\n handleInputChange = (event) => {\n const target = event.target;\n const value =\n target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n\n this.setState({\n [name]: value,\n });\n };\n\n matchPassword = (value) => {\n return value && value === this.state.password;\n };\n\n render() {\n const { success, message } = this.state;\n\n return (\n \n );\n }\n}\n\nexport default ResetComponent;\n","import React, { Component } from 'react';\n\nimport { Redirect } from 'react-router-dom';\nimport { getCookie, setCookie } from '../../utils/cookies';\n\nclass LogoutComponent extends Component {\n render() {\n setCookie('jasenrekisteri-token', getCookie('token'), 0);\n setCookie('privilege', getCookie('privilege'), 0);\n setCookie('id', getCookie('id'), 0);\n\n if (\n getCookie('jasenrekisteri-token') === null ||\n getCookie('jasenrekisteri-token') === ''\n ) {\n return ;\n }\n\n return ;\n }\n}\n\nexport default LogoutComponent;\n","import React, { Component } from 'react';\nimport { Navbar } from 'react-bootstrap';\nimport { Nav } from 'react-bootstrap';\nimport { NavDropdown } from 'react-bootstrap';\nimport {\n canAnnounce,\n canManageRegistry,\n canSeeAccounting,\n} from '../../../utils/cookies';\nimport config from '../../../config';\n\nimport './headerComponent.css';\n\nimport digitlogo from '../../assets/digit.webp';\nimport '../../assets/scaling-logo.css';\n\nclass HeaderComponent extends Component {\n render() {\n return (\n
\n \n \n {' '}\n

Jäsenrekisteri

\n
\n \n \n \n \n
\n
\n );\n }\n}\n\nexport default HeaderComponent;\n","export const getPrivilegeString = (privileges) => {\n if (!privileges) return 'Jäsen';\n const privilegeString = privileges\n .map((p) => privilegeSwitchCase(p))\n .join(', ');\n return privilegeString;\n};\n\nconst privilegeSwitchCase = (privilege) => {\n switch (privilege) {\n case 'chairman':\n return 'Hallitus PJ';\n case 'vicechairman':\n return 'Hallitus VPJ';\n case 'admin':\n return 'Admin';\n case 'boardmember':\n return 'Hallitus';\n case 'functionary':\n return 'Toimihenkilö';\n case 'tutor':\n return 'Tutor';\n case 'bachelorfresher':\n return 'Fuksi (kandi)';\n case 'masterfresher':\n return 'Fuksi (maisteri)';\n case 'kiltisban':\n return 'Kiltis Ban';\n default:\n return '-';\n }\n};\n","import React from 'react';\n\nimport { Link } from 'react-router-dom';\nimport { Button } from 'react-bootstrap';\nimport BootstrapTable from 'react-bootstrap-table-next';\nimport ToolkitProvider, { Search } from 'react-bootstrap-table2-toolkit';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Moment from 'moment';\n\nimport { hasPrivilege } from '../../../utils/cookies';\nimport { getPrivilegeString } from '../../../utils/privileges';\nimport 'react-bootstrap-table-next/dist/react-bootstrap-table2.min.css';\nimport './memberList.css';\n\nconst { SearchBar } = Search;\n\nconst CSVButtons = (props) => {\n return (\n
\n props.onImport()}\n disabled={props.isLoading || props.handlingCsv}\n >\n Tuo CSV:stä\n \n
\n );\n};\n\nfunction membershipUntilFormatter(cell, row) {\n const currentDate = new Date();\n if (row.membershipUntil) {\n if (new Date(row.membershipUntil) <= currentDate) {\n return (\n
\n {Moment(row.membershipUntil).format('D.M.YYYY')}{' '}\n \n
\n );\n } else {\n return
{Moment(row.membershipUntil).format('D.M.YYYY')}
;\n }\n } else {\n return (\n
\n \n
\n );\n }\n}\n\n\nconst columns = [\n {\n dataField: 'firstName',\n text: 'Etunimi',\n sort: true,\n align: 'center',\n headerAlign: 'center',\n style: { textTransform: 'capitalize' },\n headerStyle: {\n width: '150px',\n },\n },\n {\n dataField: 'lastName',\n text: 'Sukunimi',\n sort: true,\n align: 'center',\n headerAlign: 'center',\n headerStyle: {\n width: '150px',\n },\n },\n {\n dataField: 'utuAccount',\n text: 'UTU',\n sort: true,\n align: 'center',\n headerAlign: 'center',\n headerStyle: {\n width: '100px',\n },\n },\n {\n dataField: 'email',\n text: 'Email',\n sort: true,\n headerStyle: {\n width: '230px',\n },\n align: 'center',\n headerAlign: 'center',\n },\n {\n dataField: 'homeTown',\n text: 'Kotikunta',\n sort: true,\n align: 'center',\n headerAlign: 'center',\n headerStyle: {\n width: '130px',\n },\n },\n {\n dataField: 'tyyMember',\n text: 'TYYn jäsen',\n sort: true,\n align: 'center',\n headerAlign: 'center',\n headerStyle: {\n width: '130px',\n },\n formatter: (cell, row, rowIndex, extraData) => (\n
\n {row.tyyMember ? (\n

\n \n

\n ) : (\n

\n \n

\n )}\n
\n ),\n },\n {\n dataField: 'accepted',\n text: 'Hyväksytty',\n sort: true,\n align: 'center',\n headerAlign: 'center',\n headerStyle: {\n width: '130px',\n },\n formatter: (cell, row, rowIndex, extraData) => (\n
\n {row.accepted ? (\n

\n \n

\n ) : (\n

\n \n

\n )}\n
\n ),\n },\n {\n dataField: 'membershipSince',\n text: 'Alkanut',\n sort: true,\n align: 'center',\n headerAlign: 'center',\n headerStyle: {\n width: '130px',\n },\n formatter: (cell, row, rowIndex, extraData) => (\n
\n {row.membershipSince ? (\n Moment(row.membershipSince).format('D.M.YYYY')\n ) : (\n \n )}\n
\n ),\n },\n {\n dataField: 'membershipUntil',\n text: 'Päättyy',\n sort: true,\n align: 'center',\n headerAlign: 'center',\n headerStyle: {\n width: '130px',\n },\n formatter: membershipUntilFormatter,\n },\n {\n dataField: 'privileges',\n headerStyle: {\n width: '200px',\n },\n text: 'Roolit',\n sort: true,\n align: 'center',\n headerAlign: 'center',\n formatter: (privileges) => getPrivilegeString(privileges),\n },\n // {\n // dataField: 'membershipValid',\n // text: 'Jäsenyys voimassa',\n // sort: true,\n // align: 'center',\n // headerAlign: 'center',\n // headerStyle: {\n // width: '180px',\n // },\n // formatter: (cell, row, rowIndex, extraData) => (\n //
\n // {row.membershipValid ? (\n //

\n // \n //

\n // ) : (\n //

\n // \n //

\n // )}\n //
\n // ),\n // },\n // {\n // dataField: 'entitledToCap',\n // text: 'Fuksipassi pakolliset',\n // sort: true,\n // align: 'center',\n // headerAlign: 'center',\n // headerStyle: {\n // width: '180px',\n // },\n // formatter: (cell, row, rowIndex, extraData) => (\n //
\n // {row.entitledToCap ? (\n //

\n // \n //

\n // ) : (\n //

\n // \n //

\n // )}\n //
\n // ),\n // },\n // {\n // dataField: 'entitledToPatch',\n // text: 'Fuksipassi harraste',\n // sort: true,\n // align: 'center',\n // headerAlign: 'center',\n // headerStyle: {\n // width: '180px',\n // },\n // formatter: (cell, row, rowIndex, extraData) => (\n //
\n // {row.entitledToPatch ? (\n //

\n // \n //

\n // ) : (\n //

\n // \n //

\n // )}\n //
\n // ),\n // },\n];\n\nconst defaultSorted = [\n {\n dataField: 'firstName',\n order: 'desc',\n },\n];\n\n\nconst MemberListView = (props) => {\n if (props.list === undefined) {\n return null;\n }\n\n if (props.list.length === 0) {\n return
Jäseniä ei löytynyt.
;\n }\n\n const rowEvents = {\n onClick: (e, row, rowIndex) => {\n props.handleClick(row);\n },\n };\n const selectRow = {\n mode: 'checkbox',\n onSelect(row, isSelect, rowIndex, e) {\n props.updateSelectedMembers(row, isSelect);\n },\n onSelectAll(isSelect, rows, e) {\n props.updateSelectedMembers(rows, isSelect);\n },\n };\n\n function onImport() {\n props.onImport();\n }\n\n function onMembersPurgeModalOpen() {\n props.onMembersPurgeModalOpen();\n }\n\n function onFunctionsModalOpen() {\n props.onFunctionsModalOpen();\n }\n const selectedMembersCount = props.selectedMembersCount();\n\n\n\n let isLoading = props.isLoading;\n let handlingCsv = props.handlingCsv;\n\n return (\n \n {(props) => (\n
\n
\n
\n \n
\n\n {hasPrivilege('boardmember') ||\n hasPrivilege('chairman') ||\n hasPrivilege('vicechairman') ||\n hasPrivilege('admin') ? (\n \n\n \n Lisää jäsen\n \n 0 ? '' : 'notClickable'}`}\n onClick={() => onFunctionsModalOpen()}\n disabled={selectedMembersCount === 0}\n >\n Toimintonappi\n \n onMembersPurgeModalOpen()}>\n Jäsenien puhdistus\n \n
\n ) : null}\n
\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n

\n Jäseniä yhteensä{' '}\n {Object.keys(props.baseProps.data).length}\n

\n
\n
\n
\n \n )}\n \n );\n};\n\nexport default MemberListView;\n","import React, { Component } from 'react';\n\nimport digitlogo from '../../assets/digit.webp';\n\nimport './preloaderComponent.css';\n\nclass PreloaderComponent extends Component {\n render() {\n if (this.props.size === 'small') {\n return (\n \n );\n } else {\n return (\n \n );\n }\n }\n}\n\nexport default PreloaderComponent;\n","import React, { Component } from 'react';\n\nimport { Link } from 'react-router-dom';\n\nlet styles = {\n marginTop: '30px',\n};\n\nclass MemberNotFoundComponent extends Component {\n render() {\n return (\n
\n

Jäsentietoja ei löytynyt

\n \n Takaisin\n \n
\n );\n }\n}\n\nexport default MemberNotFoundComponent;\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport { Modal, Button, Alert } from 'react-bootstrap';\n\nimport MemberListView from './memberListView';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport MemberNotFoundComponent from '../../commons/memberNotFound/memberNotFoundComponent';\n\nimport { getCookie } from '../../../utils/cookies';\nimport api from '../../../utils/api';\nimport ToolkitProvider from 'react-bootstrap-table2-toolkit';\nimport BootstrapTable from 'react-bootstrap-table-next';\nimport Select from 'react-select'\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport DatePicker, { registerLocale } from 'react-datepicker';\nimport fi from 'date-fns/locale/fi';\n\nimport Moment from 'moment';\n\nregisterLocale('fi', fi);\n\nconst csv = require('fast-csv');\nclass MemberListComponent extends Component {\n constructor(props) {\n super(props);\n this.state = {\n isLoading: true,\n selectedMembers: [],\n handlingCsv: false,\n members: null,\n success: null,\n message: undefined,\n memberNotFound: false,\n\n selectedAcceptanceStatus: false,\n selectedFunction: null,\n allowFunctionsExecution: false,\n functionsExecutionSuccess: null,\n functionsExecutionMessage: '',\n showFunctionsModal: false,\n\n showMembersPurgeModal: false,\n membersPurgeDate: null,\n membersPurgeResultMessage: '',\n membersPurgeInProgress: false,\n membersPurgeSuccess: false,\n membersPurgeCurrentCount: null,\n membersPurgeMaxCount: null,\n\n showPageChangeAlert: false,\n pageChangeLink: null,\n\n showImportModal: false,\n importModalMessage: null,\n importModalMaxCount: null,\n importModalCurrentCount: null,\n importModalTimeEstimationSeconds: null,\n };\n this.handleClick = this.handleClick.bind(this);\n this.handlePurgeDateChange = this.handlePurgeDateChange.bind(this);\n }\n\n handleClick = (row) => {\n if (this.getSelectedMembersCount() >= 1) {\n this.setState({\n ...this.state,\n pageChangeLink: `/member/details/${row.id}`,\n },\n () => {\n this.showPageChangeAlert(); // Call any other functions that depend on the updated state\n }\n );\n }\n else {\n this.props.history.push(`/member/details/${row.id}`);\n }\n };\n proceedWithPageChange = () => {\n this.props.history.push(this.state.pageChangeLink);\n }\n updateSelectedMembers = (dataToAdd, isSelect) => {\n if (!isSelect) {\n if (Array.isArray(dataToAdd)) {\n for (const member of dataToAdd) {\n this.removeSelectedMember(member);\n }\n }\n else {\n this.removeSelectedMember(dataToAdd);\n }\n } else {\n if (Array.isArray(dataToAdd)) {\n for (const member of dataToAdd) {\n this.addSelectedMember(member);\n }\n }\n else {\n this.addSelectedMember(dataToAdd);\n }\n }\n }\n\n addSelectedMember = (row) => {\n this.setState(prevState => ({\n selectedMembers: [...prevState.selectedMembers, row]\n }));\n }\n removeSelectedMember = (row) => {\n this.setState(prevState => ({\n selectedMembers: prevState.selectedMembers.filter(member => member.utuAccount !== row.utuAccount)\n }));\n }\n getSelectedMembersCount = () => {\n return this.state.selectedMembers.length;\n }\n\n handleFunctionChange = (selectedFunction) => {\n if (selectedFunction !== null) {\n this.setState({\n ...this.state,\n allowFunctionsExecution: true,\n selectedFunction: selectedFunction,\n functionsExecutionSuccess: null,\n showFunctionsModal: true,\n functionsExecutionMessage: ''\n });\n } else {\n this.setState({ ...this.state, selectedFunction: null });\n }\n\n };\n\n handleAcceptanceOptionChange = (event) => {\n this.setState({\n ...this.state,\n selectedAcceptanceStatus: (event.target.value === 'accepted') ? true : false,\n allowFunctionsExecution: true,\n functionsExecutionSuccess: null,\n functionsExecutionMessage: ''\n });\n }\n\n closeImportModal = () => {\n this.setState({ ...this.state, showImportModal: false });\n };\n onFunctionsModalOpen = () => {\n this.setState({\n ...this.state,\n selectedFunction: null,\n functionsExecutionSuccess: null,\n showFunctionsModal: true,\n functionsExecutionMessage: ''\n });\n };\n\n closeFunctionsModal = () => {\n this.setState({\n ...this.state,\n showFunctionsModal: false\n });\n }\n\n showPageChangeAlert = () => {\n this.setState({\n ...this.state,\n showPageChangeAlert: true\n });\n }\n\n closePageChangeAlert = () => {\n this.setState({\n ...this.state,\n showPageChangeAlert: false\n });\n }\n\n handleExport = (props) => {\n props.onExport();\n };\n\n perfomSelectedFunction = async () => {\n const selectedFunction = this.state.selectedFunction;\n this.setState({ allowFunctionsExecution: false });\n const responses = [];\n try {\n for (let i = 0; i < this.state.selectedMembers.length; i++) {\n const memberData = {\n firstName: this.state.selectedMembers[i].firstName,\n lastName: this.state.selectedMembers[i].lastName,\n utuAccount: this.state.selectedMembers[i].utuAccount,\n email: this.state.selectedMembers[i].email,\n homeTown: this.state.selectedMembers[i].homeTown,\n tyyMember: this.state.selectedMembers[i].tyyMember,\n membershipSince: this.state.selectedMembers[i].membershipSince,\n membershipUntil: this.state.membershipUntil,\n password: this.state.selectedMembers[i].password,\n passwordAgain: this.state.selectedMembers[i].passwordAgain,\n accepted: this.state.selectedMembers[i].accepted,\n memberID: this.state.selectedMembers[i].id,\n };\n\n if (selectedFunction.value === 'changeAcceptedStatus') {\n const selectedAcceptanceStatus = this.state.selectedAcceptanceStatus;\n responses[i] = await api.put('/admin/mass-change-acceptance', { 'member': memberData, 'accepted': selectedAcceptanceStatus }, {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n }\n else if (selectedFunction.value === 'giveMasterFresherRole') {\n const privilegesStartDate = new Date();\n const privilegesEndDate = new Date().getUTCMonth() > 6 ? new Date(privilegesStartDate.getFullYear() + 1, 6, 31) : new Date(privilegesStartDate.getFullYear(), 6, 31);\n responses[i] = await api.post(\n '/admin/mass-update-privileges',\n { privileges: [{ 'endDate': privilegesEndDate, 'startDate': privilegesStartDate, memberId: this.state.selectedMembers[i].id, role: 'masterfresher' }] },\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n memberID: this.state.selectedMembers[i].id,\n all: true,\n },\n }\n );\n\n }\n else if (selectedFunction.value === 'giveBachelorFresherRole') {\n const privilegesStartDate = new Date();\n const privilegesEndDate = new Date().getUTCMonth() > 6 ? new Date(privilegesStartDate.getFullYear() + 1, 6, 31) : new Date(privilegesStartDate.getFullYear(), 6, 31);\n responses[i] = await api.post(\n '/admin/mass-update-privileges',\n { privileges: [{ 'endDate': privilegesEndDate, 'startDate': privilegesStartDate, memberId: this.state.selectedMembers[i].id, role: 'bachelorfresher' }] },\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n memberID: this.state.selectedMembers[i].id,\n all: true,\n },\n }\n );\n\n } else if (selectedFunction.value === 'sendPasswordResetLink') {\n responses[i] = await api.post(\n '/forgot/authenticated',\n { email: memberData.email },\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n }\n )\n }\n\n if (responses.filter(response => response.data.success === true).length === this.state.selectedMembers.length) {\n this.setState({\n ...this.state,\n allowFunctionsExecution: true,\n functionsExecutionSuccess: responses[0].data.success,\n functionsExecutionMessage: responses[0].data.message,\n });\n }\n }\n } catch (e) {\n const failedRequest = responses.find(response => response.data.success === false)\n this.setState({\n ...this.state,\n allowFunctionsExecution: true,\n functionsExecutionSuccess: failedRequest.success,\n functionsExecutionMessage: failedRequest.message,\n });\n }\n }\n\n getSelectedFunctionsValue = () => {\n return this.state.selectedFunction ? this.state.selectedFunction.value : null;\n }\n\n\n showImportModal = (message) => {\n this.setState({\n ...this.state,\n showImportModal: true,\n importModalMessage: message,\n });\n };\n\n showMembersPurgeModal = () => {\n this.setState({\n ...this.state,\n showMembersPurgeModal: true,\n membersPurgeInProgress: false,\n membersPurgeDate: new Date(),\n membersPurgeResultMessage: '',\n membersPurgeCurrentCount: null,\n membersPurgeMaxCount: null,\n membersPurgeSuccess: false,\n });\n };\n\n handlePurgeDateChange = (date) => {\n this.setState({\n membersPurgeDate: date,\n });\n };\n\n closeMembersPurgeModal = () => {\n this.setState({\n ...this.state,\n showMembersPurgeModal: false,\n });\n };\n\n\n\n\n render() {\n\n const FunctionsExecutionButton = (props) => {\n const handleClick = () => {\n props.onExport();\n }\n return (\n
\n \n Suorita\n \n \n Suorita\n \n
\n )\n }\n const functionsSelectOptions = [\n { value: 'changeAcceptedStatus', label: 'Vaihda hyväksynnän tilaa' },\n { value: 'giveMasterFresherRole', label: 'Anna maisterifuksirooli' },\n { value: 'giveBachelorFresherRole', label: 'Anna kandifuksirooli' },\n { value: 'sendPasswordResetLink', label: 'Lähetä salasanan nollauslinkki' },\n { value: 'exportToCSV', label: 'Vie CSV:nä' },\n ]\n const functionsMemberListSort = [\n {\n dataField: 'firstName',\n order: 'desc',\n },\n ];\n const functionsMemberListColumns = [\n {\n dataField: 'firstName',\n text: 'Etunimi',\n sort: true,\n align: 'center',\n headerAlign: 'center',\n style: { textTransform: 'capitalize' },\n headerStyle: {\n width: '150px',\n },\n },\n {\n dataField: 'lastName',\n text: 'Sukunimi',\n sort: true,\n align: 'center',\n headerAlign: 'center',\n headerStyle: {\n width: '150px',\n },\n },\n {\n dataField: 'utuAccount',\n text: 'UTU',\n sort: true,\n align: 'center',\n headerAlign: 'center',\n headerStyle: {\n width: '100px',\n },\n },\n {\n dataField: 'email',\n text: 'Email',\n style: { display: 'none' },\n headerStyle: {\n display: 'none',\n },\n },\n {\n dataField: 'homeTown',\n text: 'Kotikunta',\n style: { display: 'none' },\n headerStyle: {\n display: 'none',\n },\n },\n {\n dataField: 'tyyMember',\n text: 'TYYn jäsen',\n style: { display: 'none' },\n headerStyle: {\n display: 'none',\n },\n },\n {\n dataField: 'accepted',\n text: 'Hyväksytty',\n style: { display: 'none' },\n headerStyle: {\n display: 'none',\n },\n },\n {\n dataField: 'membershipSince',\n text: 'Alkanut',\n style: { display: 'none' },\n headerStyle: {\n display: 'none',\n },\n },\n {\n dataField: 'membershipUntil',\n text: 'Päättyy',\n style: { display: 'none' },\n headerStyle: {\n display: 'none',\n },\n },\n ];\n const multiselectDropdownStyles = {\n // select box styles\n control: (provided, state) => ({\n ...provided,\n borderColor: '#fecd32',\n boxShadow: '0 0 0 0',\n '&:hover': {\n borderColor: '#fecd32',\n boxShadow: '0 0 0 2px #fecd32',\n },\n '&:active': {\n borderColor: '#fecd32',\n boxShadow: '0 0 0 2px #fecd32',\n },\n }),\n // option styles\n option: (provided, state) => ({\n ...provided,\n backgroundColor: 'white',\n color: 'black',\n '&:hover': {\n backgroundColor: '#fecd32',\n color: 'black'\n },\n }),\n };\n const {\n isLoading,\n members,\n success,\n message,\n memberNotFound,\n handlingCsv,\n showImportModal,\n showMembersPurgeModal,\n membersPurgeDate,\n membersPurgeInProgress,\n membersPurgeCurrentCount,\n membersPurgeMaxCount,\n membersPurgeResultMessage,\n membersPurgeSuccess,\n showFunctionsModal,\n selectedFunction,\n selectedAcceptanceStatus,\n functionsExecutionMessage,\n functionsExecutionSuccess,\n showPageChangeAlert,\n importModalMessage,\n importModalCurrentCount,\n importModalMaxCount,\n importModalTimeEstimationSeconds,\n } = this.state;\n\n if (isLoading) {\n return ;\n }\n\n if (memberNotFound) {\n return (\n
\n \n
\n );\n }\n\n return (\n\n
\n \n {(props) => (\n\n
\n {/* multiselect modal start */}\n \n \n \n Massatoimintosuoritus\n \n \n \n
\n
\n \n
\n
\n
\n
\n

\n Jäseniä yhteensä{' '}\n {Object.keys(props.baseProps.data).length}\n

\n
\n
\n
\n
\n
\n

Valitse suoritettava toiminto:

\n \n
\n

Hyväksytty:

\n
\n \n \n
\n \n \n
\n
\n
\n

Maisterifuksirooli annetaan täksi lukuvuodeksi.

\n
\n
\n

Kandifuksirooli annetaan täksi lukuvuodeksi.

\n
\n
\n

Lähetä jäsenen sähköpostiin salasanan nollauslinkki joka on voimassa 48h.

\n
\n
\n

Valitut jäsenet viedään CSV:nä.

\n
\n
\n \n {functionsExecutionMessage}\n \n
\n
\n
\n \n \n \n \n \n \n \n \n Varoitus\n \n \n \n
\n
\n
\n

Haluatko varmasti poistua nykyiseltä sivulta? Tällöin jäsenien valinta poistuu.

\n
\n
\n
\n
\n \n \n \n \n \n
\n )}\n \n {/* expired members purge modal start */}\n \n \n \n Jäsenien puhdistus\n \n \n \n\n

Valitse päivä, johon mennessä erääntyneiden jäsenyyksien osalta jäsenien poisto suoritetaan.

\n
\n Päivämäärä\n \n
\n
\n
Poistetaan jäseniä. Jos niitä on paljon, tässä voi mennä useita minuutteja. Älä sulje tätä ikkunaa kesken poiston.
\n
\n {membersPurgeCurrentCount && membersPurgeMaxCount && (\n
\n \n {(\n (membersPurgeCurrentCount /\n membersPurgeMaxCount) *\n 100\n ).toFixed(2)}\n %\n
\n
\n )}\n
\n
\n
\n \n {membersPurgeResultMessage}\n \n
\n\n \n \n \n \n Poista\n \n \n \n\n {/* members import modal start */}\n \n \n \n Ilmoitus\n \n \n \n

{importModalMessage}

\n {importModalCurrentCount && importModalMaxCount && (\n
\n \n {(\n (importModalCurrentCount /\n importModalMaxCount) *\n 100\n ).toFixed(2)}\n %\n
\n \n )}\n {importModalTimeEstimationSeconds && (\n

\n Tuonti valmis arviolta{' '}\n {importModalTimeEstimationSeconds} sekunnissa.\n

\n )}\n
\n \n \n Takaisin\n \n \n \n \n \n );\n }\n\n handleMembersPurge = async () => {\n this.setState({ ...this.state, membersPurgeInProgress: true });\n try {\n const membersToPurge = await api.get(\n '/admin/members-to-purge?date=' + Moment(this.state.membersPurgeDate).format('YYYY-MM-DD'),\n {\n headers: {\n Authorization:\n getCookie(\n 'jasenrekisteri-token'\n ),\n 'Content-Type':\n 'application/json',\n },\n }\n )\n const delay = 4000; // 4 seconds\n const membersPurgeResults = [];\n let delayCounter = 0;\n\n for (let i = 0; i < membersToPurge.data.members.length; i++) {\n try {\n const result = await api.post('/admin/remove',\n {\n memberID: membersToPurge.data.members[i].id,\n email: membersToPurge.data.members[i].email,\n },\n {\n headers: {\n Authorization:\n getCookie(\n 'jasenrekisteri-token'\n ),\n 'Content-Type':\n 'application/json',\n },\n }\n )\n membersPurgeResults.push({\n \"memberID\": membersToPurge.data.members[i].id,\n \"email\": membersToPurge.data.members[i].email,\n \"success\": result.data.success\n });\n if (delayCounter >= 6) {\n delayCounter = 0;\n await new Promise((resolve) =>\n setTimeout(resolve, delay)\n );\n }\n else {\n delayCounter++;\n }\n this.setState({\n ...this.state,\n membersPurgeInProgress: true,\n showMembersPurgeModal: true,\n membersPurgeCurrentCount:\n i + 1,\n membersPurgeMaxCount: membersToPurge.data.members.length,\n });\n }\n catch (error) {\n membersPurgeResults.push({ \"memberID\": membersToPurge.data.members[i].id, \"email\": membersToPurge.data.members[i].email, success: false });\n }\n }\n let resultMessage = '';\n if (membersPurgeResults.find(result => result.success === false)) {\n resultMessage = `Erääntyneiden jäsenien poisto epäonnistui. ${membersPurgeResults.filter(result => result.success === true).length} jäsentä poistettu. Loput näkyvät automaattisesti latautuvassa tiedostossa.`;\n this.setState({\n ...this.state,\n membersPurgeInProgress: false,\n membersPurgeResultMessage: resultMessage,\n membersPurgeSuccess: false,\n membersPurgeCurrentCount: null,\n membersPurgeMaxCount: null,\n });\n\n const failedRemovals = membersPurgeResults.filter(result => result.success === false);\n const csvString = await csv.writeToString(failedRemovals, {\n headers: false,\n delimiter: ',',\n });\n const blob = new Blob([csvString], {\n type: 'text/csv;charset=utf-8;',\n });\n const downloadLink = document.createElement('a');\n downloadLink.href = URL.createObjectURL(blob);\n downloadLink.download = 'failed-removals.csv';\n downloadLink.click();\n\n }\n else {\n resultMessage = `Erääntyneiden jäsenien poisto onnistui! ${membersToPurge.data.members.length} jäsentä poistettu.`;\n this.setState({\n ...this.state,\n membersPurgeInProgress: false,\n membersPurgeResultMessage: resultMessage,\n membersPurgeSuccess: true,\n membersPurgeCurrentCount: null,\n membersPurgeMaxCount: null,\n });\n }\n }\n catch (error) {\n let resultMessage = `Erääntyneiden jäsenien poisto epäonnistui tuntemattoman virheen takia.`;\n this.setState({ ...this.state, membersPurgeInProgress: false, membersPurgeResultMessage: resultMessage });\n }\n }\n\n onImport = async () => {\n const input = document.createElement('input');\n input.type = 'file';\n input.accept = '.csv';\n input.onchange = async (pickerEvent) => {\n const file = pickerEvent.target.files[0];\n if (!file) {\n return;\n }\n this.setState({\n ...this.state,\n handlingCsv: true,\n });\n const reader = new FileReader();\n\n // create new promise to await\n const failedRows = await new Promise((resolve) => {\n const failed = [];\n const rows = [];\n reader.onload = async (readerEvent) => {\n const stream = readerEvent.target.result;\n\n csv.parseString(stream, {\n headers: false,\n delimiter: ',',\n })\n .on('data', async (data) => {\n rows.push(data);\n })\n .on('end', async () => {\n const delay = 4000; // 4 seconds\n const batchSize = 6;\n const batches = [];\n\n // Split rows into batches of batchSize\n for (let i = 0; i < rows.length; i += batchSize) {\n batches.push(rows.slice(i, i + batchSize));\n }\n\n // Send each batch with a delay of delay milliseconds\n for (let i = 0; i < batches.length; i++) {\n this.setState({\n ...this.state,\n showImportModal: true,\n importModalMessage: 'Tuodaan jäseniä...',\n importModalCurrentCount:\n (i + 1) * batchSize,\n importModalMaxCount: rows.length,\n importModalTimeEstimationSeconds: Math.ceil(\n (batches.length - (i + 1)) *\n (delay / 1000)\n ),\n });\n const batch = batches[i];\n await Promise.all(\n batch.map(async (data) => {\n try {\n const newData = {\n firstName: data[0],\n lastName: data[1],\n utuAccount:\n data[2]?.toLowerCase(),\n email: data[3],\n homeTown: data[4],\n tyyMember:\n `${data[5]}` !== 'null'\n ? data[5].toLowerCase() ===\n 'true'\n : false,\n accepted:\n `${data[6]}` !== 'null'\n ? data[6].toLowerCase() ===\n 'true'\n : false,\n membershipSince:\n `${data[7]}` !== 'null'\n ? new Date(data[7])\n : null,\n membershipUntil:\n `${data[8]}` !== 'null'\n ? new Date(data[8])\n : null,\n };\n\n await api.post(\n '/admin/new',\n newData,\n {\n headers: {\n Authorization:\n getCookie(\n 'jasenrekisteri-token'\n ),\n 'Content-Type':\n 'application/json',\n },\n }\n );\n } catch (error) {\n failed.push(data);\n }\n })\n );\n if (i < batches.length - 1) {\n await new Promise((resolve) =>\n setTimeout(resolve, delay)\n );\n }\n }\n\n resolve(failed);\n });\n };\n\n reader.readAsText(file);\n });\n\n if (failedRows.length > 0) {\n const csvString = await csv.writeToString(failedRows, {\n headers: false,\n delimiter: ',',\n });\n const blob = new Blob([csvString], {\n type: 'text/csv;charset=utf-8;',\n });\n const downloadLink = document.createElement('a');\n downloadLink.href = URL.createObjectURL(blob);\n downloadLink.download = 'failed-imports.csv';\n downloadLink.click();\n }\n const importModalSuccessMessage = `Jäsentietojen tuonti CSV:stä onnistui!`;\n const importModalFailedMessage = `\\n\\nTuntemattomasta syystä ${failedRows.length} rivin tuonti epäonnistui, ja näille ei ole luotu käyttäjää rekisteriin. Epäonnistuneet rivit on kirjattu tiedostoon failed-imports.csv, joka latautuu automaattisesti.`;\n\n this.setState({\n ...this.state,\n showImportModal: true,\n importModalMessage: failedRows.length > 0 ? importModalFailedMessage : importModalSuccessMessage,\n importModalCurrentCount: null,\n importModalMaxCount: null,\n importModalTimeEstimationSeconds: null,\n });\n\n this.setState({\n ...this.state,\n handlingCsv: false,\n });\n };\n\n input.click();\n };\n\n async componentDidMount() {\n try {\n let membersData = await api.get('/admin/list', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n\n const members = await Promise.all(\n membersData.data.map(async (member) => {\n console.log(member)\n // const capData = await api.get('/fresherpass/validate/cap', {\n // headers: {\n // Authorization: getCookie('jasenrekisteri-token'),\n // 'Content-Type': 'application/json',\n // },\n // params: {\n // memberID: member.id,\n // },\n // });\n\n // const patchData = await api.get(\n // '/fresherpass/validate/patch',\n // {\n // headers: {\n // Authorization: getCookie(\n // 'jasenrekisteri-token'\n // ),\n // 'Content-Type': 'application/json',\n // },\n\n // params: {\n // memberID: member.id,\n // },\n // }\n // );\n\n // const membershipData = await api.get('/member/valid', {\n // headers: {\n // Authorization: getCookie('jasenrekisteri-token'),\n // 'Content-Type': 'application/json',\n // },\n // params: {\n // memberID: member.id,\n // },\n // });\n\n return {\n ...member,\n // entitledToCap: capData.data,\n // entitledToPatch: patchData.data,\n // membershipValid: membershipData.data.isValid,\n };\n })\n );\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n memberNotFound: members.memberNotFound,\n members,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen hakemiselle epäonnistui.',\n isLoading: false,\n memberNotFound: true,\n },\n });\n }\n }\n}\n\nexport default withRouter(MemberListComponent);\n","import React, { Component } from 'react';\r\n\r\nimport './footerComponent.css';\r\n\r\nclass FooterComponent extends Component {\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default FooterComponent;\r\n","import React, { Component } from 'react';\nimport { Redirect } from 'react-router-dom';\n\nimport HeaderComponent from '../commons/header/headerComponent';\nimport MemberListComponent from './memberList/memberListComponent';\n\nimport { hasPrivilege } from '../../utils/cookies';\nimport FooterComponent from '../commons/footer/footerComponent';\n\nclass ControlComponent extends Component {\n render() {\n return (\n
\n \n {hasPrivilege('boardmember') ||\n hasPrivilege('chairman') ||\n hasPrivilege('vicechairman') ||\n hasPrivilege('admin') ? (\n
\n \n
\n ) : (\n
\n \n
\n )}\n \n
\n );\n }\n}\n\nexport default ControlComponent;\n","import React, { Component } from 'react';\n\nimport HeaderComponent from '../../commons/header/headerComponent';\nimport DatePicker from 'react-datepicker';\nimport { getCookie } from '../../../utils/cookies';\nimport api from '../../../utils/api';\nimport FooterComponent from '../../commons/footer/footerComponent';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport './purchaseComponent.css';\nimport Collapsible from 'react-collapsible';\n\nclass PurchasesComponent extends Component {\n constructor(props) {\n super(props);\n\n const now = new Date();\n\n this.state = {\n isLoading: false,\n success: null,\n message: null,\n data: null,\n startDate: new Date(now.setFullYear(now.getFullYear() - 1)),\n endDate: new Date(),\n };\n }\n\n async fetchData() {\n this.setState({\n isLoading: true,\n });\n try {\n let body = {\n startDate: this.state.startDate,\n endDate: this.state.endDate,\n };\n let response = await api.post('/purchase/summary', body, {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n\n this.setState({\n ...this.state,\n isLoading: false,\n success: true,\n data: response.data,\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen hakemiseen epäonnistui.',\n isLoading: false,\n },\n });\n }\n }\n\n render() {\n const { isLoading, data, startDate, endDate } = this.state;\n\n return (\n
\n \n
\n

Kirjanpidon apuvälineet

\n

\n Tältä välilehdeltä saat helposti haettua digitin\n verkkokaupan kautta tehdyt ostokset tietyltä\n aikaväliltä.\n

\n

\n Huomioithan että tämä listaus näyttää KAIKKI onnistuneet\n maksutoimitukset. Mahdolliset palautukset tai muut\n epänormaalista poikkeavat tilanteet tulee selvittää\n erikseen.\n

\n
\n
\n \n this.setState({\n startDate: value,\n })\n }\n dateFormat=\"dd.MM.yyyy\"\n className=\"form-control\"\n locale=\"fi\"\n />\n

-

\n \n this.setState({\n endDate: value,\n })\n }\n dateFormat=\"dd.MM.yyyy\"\n className=\"form-control\"\n locale=\"fi\"\n />\n this.fetchData()}\n >\n Hae\n \n
{' '}\n {isLoading && }\n {data &&\n Object.keys(data).map((date) => {\n const dateData = data[date];\n\n const totalPrice = Object.keys(dateData)\n .map((storeItem) => {\n const storeItemData = dateData[storeItem];\n return Object.keys(storeItemData)\n .map((p) => storeItemData[p].totalPrice)\n .reduce((a, b) => a + b, 0);\n })\n .reduce((a, b) => a + b, 0);\n\n return (\n \n
\n {date} - {totalPrice} €\n
\n

+

\n
\n }\n classParentString=\"collapsible date-level\"\n transitionTime={100}\n >\n {Object.keys(data[date]).map((storeItem) => {\n const storeItemData = data[date][storeItem];\n\n const totalItems = Object.keys(\n storeItemData\n )\n .map((p) => storeItemData[p].amount)\n .reduce((a, b) => a + b, 0);\n const totalPrice = Object.keys(\n storeItemData\n )\n .map((p) => storeItemData[p].totalPrice)\n .reduce((a, b) => a + b, 0);\n return (\n \n
\n {totalItems} x{' '}\n {storeItem}{' '}\n - {totalPrice} €\n
\n

+

\n \n }\n classParentString=\"collapsible store-item-level\"\n transitionTime={100}\n >\n {Object.keys(\n data[date][storeItem]\n ).map((product) => {\n const prodData =\n data[date][storeItem][\n product\n ];\n return (\n

\n \n {prodData.amount} x\n {' '}\n {product}{' '}\n \n -{' '}\n {\n prodData.totalPrice\n }{' '}\n €\n \n

\n );\n })}\n \n );\n })}\n \n );\n })}\n \n \n );\n }\n}\n\nexport default PurchasesComponent;\n","import React from 'react';\n\nimport Alert from 'react-bootstrap/Alert';\nimport Form from 'react-bootstrap/Form';\nimport { Link } from 'react-router-dom';\nimport { ValidationForm, TextInput } from 'react-bootstrap4-form-validation';\nimport validator from 'validator';\nimport '../../assets/validatedCheckbox.css';\nimport DatePicker, { registerLocale } from 'react-datepicker';\nimport 'react-datepicker/dist/react-datepicker.css';\nimport fi from 'date-fns/locale/fi';\nimport { getPrivilegeString } from '../../../utils/privileges';\n\nregisterLocale('fi', fi);\n\nconst addMemberView = ({\n firstName,\n lastName,\n utuAccount,\n email,\n homeTown,\n tyyMember,\n privileges,\n membershipSince,\n membershipUntil,\n handleAddMember,\n handleInputChange,\n handleMembershipStartsChange,\n handleMembershipEndsChange,\n handlePrivilegeStartChange,\n handlePrivilegeEndChange,\n handlePrivilegeChange,\n handleRemovePrivilege,\n handleAddPrivilege,\n success,\n message,\n}) => (\n
\n {\n e.preventDefault();\n handleAddMember(e);\n }}\n >\n \n Etunimi\n \n \n \n Sukunimi\n \n \n \n UTU-tunnus (ilman @utu.fi)\n \n \n \n Sähköposti\n \n \n \n Kotikunta\n \n \n \n \n \n
\n\n {privileges.map((privilege, index) => (\n \n \n Rooli\n \n handlePrivilegeChange(index, e.target.value)\n }\n >\n \n \n \n \n \n \n \n \n \n \n \n \n Alkaa\n \n handlePrivilegeStartChange(value, index)\n }\n dateFormat=\"dd.MM.yyyy\"\n className=\"form-control\"\n locale=\"fi\"\n />\n \n \n Päättyy\n \n handlePrivilegeEndChange(value, index)\n }\n dateFormat=\"dd.MM.yyyy\"\n className=\"form-control\"\n locale=\"fi\"\n />\n \n \n \n handleRemovePrivilege(index)}\n >\n Poista\n \n \n \n
\n ))}\n \n Lisää rooli\n \n
\n\n \n \n \n
\n
\n \n \n Jäsenyys alkaa\n \n \n \n
\n
\n \n \n Jäsenyys päättyy\n \n \n \n
\n
\n

\n Jäsenelle generoidaan salasana joka lähetetään hänelle\n sähköpostitse\n

\n {message && !success ? (\n \n {message}\n \n ) : null}\n
\n \n \n Takaisin\n \n
\n \n \n);\n\nexport default addMemberView;\n","import React, { Component } from 'react';\n\nimport { Modal } from 'react-bootstrap';\nimport { Link } from 'react-router-dom';\n\nimport HeaderComponent from '../../commons/header/headerComponent';\nimport AddMemberView from './addMemberView';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\n\nimport { getCookie } from '../../../utils/cookies';\nimport api from '../../../utils/api';\nimport FooterComponent from '../../commons/footer/footerComponent';\n\nclass NewMemberComponent extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isLoading: false,\n memberID: this.props.match.params.id,\n firstName: null,\n lastName: null,\n utuAccount: '',\n email: null,\n homeTown: null,\n tyyMember: null,\n privileges: [],\n membershipSince: null,\n membershipUntil: null,\n accepted: null,\n success: null,\n message: null,\n showModal: false,\n };\n this.handleMembershipStartsChange =\n this.handleMembershipStartsChange.bind(this);\n this.handleMembershipEndsChange =\n this.handleMembershipEndsChange.bind(this);\n }\n\n handleAddMember = async (event) => {\n event.preventDefault();\n const data = {\n firstName: this.state.firstName,\n lastName: this.state.lastName,\n utuAccount: this.state.utuAccount,\n email: this.state.email,\n homeTown: this.state.homeTown,\n membershipSince: this.state.membershipSince,\n membershipUntil: this.state.membershipUntil,\n tyyMember: this.state.tyyMember,\n accepted: this.state.accepted,\n memberID: this.state.memberID,\n };\n\n try {\n const response = await api.post('/admin/new', data, {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n\n console.log(response.data);\n\n let privilegeResponse;\n\n if (response.data.id) {\n privilegeResponse = await api.post(\n '/admin/privileges',\n { privileges: this.state.privileges },\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n memberID: response.data.id,\n all: true,\n },\n }\n );\n console.log(privilegeResponse.data);\n }\n\n let modal = false;\n const success =\n response.data.success &&\n response.data.message &&\n (!privilegeResponse || privilegeResponse.data?.success);\n if (success) {\n modal = true;\n }\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: success,\n message: response.data.message,\n showModal: modal,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö jäsenen lisäämiselle epäonnistui.',\n isLoading: false,\n },\n });\n }\n };\n\n handleInputChange = (event) => {\n const target = event.target;\n const value =\n target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n\n this.setState({\n [name]: value,\n });\n };\n\n handleMembershipStartsChange = (date) => {\n this.setState({\n membershipSince: date,\n });\n };\n\n handleMembershipEndsChange = (date) => {\n this.setState({\n membershipUntil: date,\n });\n };\n\n handlePrivilegeStartChange = (date, index) => {\n this.setState({\n privileges: this.state.privileges.map((privilege, i) => {\n if (i === index) {\n privilege.startDate = date;\n }\n return privilege;\n }),\n });\n };\n handlePrivilegeEndChange = (date, index) => {\n this.setState({\n privileges: this.state.privileges.map((privilege, i) => {\n if (i === index) {\n privilege.endDate = date;\n }\n return privilege;\n }),\n });\n };\n\n handlePrivilegeChange = (index, value) => {\n this.setState({\n privileges: this.state.privileges.map((p, i) => {\n if (i === index) {\n p.role = value;\n }\n return p;\n }),\n });\n };\n\n handleRemovePrivilege = (index) => {\n this.setState({\n privileges: this.state.privileges.filter((p, i) => i !== index),\n });\n };\n\n handleAddPrivilege = () => {\n this.setState({\n privileges: [\n ...this.state.privileges,\n {\n memberId: this.state.memberID,\n startDate: Date(),\n endDate: Date(),\n role: 'fresher',\n },\n ],\n });\n };\n\n matchPassword = (value) => {\n return value && value === this.state.password;\n };\n\n render() {\n let modalClose = () => this.setState({ showModal: false });\n const {\n isLoading,\n firstName,\n lastName,\n utuAccount,\n email,\n homeTown,\n tyyMember,\n privileges,\n membershipSince,\n membershipUntil,\n accepted,\n success,\n message,\n memberID,\n showModal,\n } = this.state;\n\n if (isLoading === true) {\n return ;\n }\n\n return (\n
\n \n \n \n \n Ilmoitus\n \n \n \n

{message}

\n
\n \n \n Takaisin\n \n \n \n \n \n
\n );\n }\n}\n\nexport default NewMemberComponent;\n","export const announcementStatusString = (status) => {\n switch (status) {\n case 'draft':\n return 'Luonnos';\n case 'scheduled':\n return 'Ajoitettu';\n case 'published':\n return 'Julkaistu';\n case 'archived':\n return 'Arkistoitu';\n case 'template':\n return 'Tiedotepohja';\n default:\n return '-';\n }\n};\n\nexport const announcementTypeString = (type) => {\n switch (type) {\n case 'club':\n return 'Kerhotiedote';\n case 'weekly':\n return 'Viikkokirje';\n case 'general':\n return 'Yleinen tiedote';\n case 'event':\n return 'Tapahtumatiedote';\n default:\n return type;\n }\n};\n\nexport const platformString = (platform) => {\n switch (platform) {\n case 'website':\n return 'Tiedotukset - verkkosivut';\n case 'app':\n return 'Tiedotukset - mobiilisovellus';\n case 'emailAll':\n return 'Sähköposti - kaikki';\n case 'emailFreshers':\n return 'Sähköposti - fuksit';\n case 'discord':\n return 'Discord (vain teksti toistaiseksi)';\n case 'telegram':\n return 'Telegram';\n case 'linkedin':\n return 'LinkedIn';\n default:\n return platform;\n }\n};\n","import React from 'react';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport Moment from 'moment';\nimport './announcementList.css';\nimport { announcementStatusString } from '../../../utils/announcements';\nimport { Alert, Form } from 'react-bootstrap';\n\nconst AnnouncementListView = ({\n announcements,\n onNewAnnouncement,\n isLoading,\n onAnnouncementClick,\n setStatusFilter,\n status,\n message,\n success,\n statuses,\n}) => {\n function getStatusText(announcement) {\n const dateString = announcement.publishedAt\n ? Moment(announcement.publishedAt).format('D.M.YYYY')\n : '';\n\n return announcementStatusString(announcement.status) + ' ' + dateString;\n }\n\n return (\n
\n
\n

Tiedotteet

\n \n Uusi tiedote\n \n
\n
\n \n Suodata\n {\n setStatusFilter(e.target.value);\n }}\n >\n {statuses.map((status) => (\n \n ))}\n \n \n \n
\n {message && !success ? (\n \n {message}\n \n ) : null}\n {isLoading && }\n {!isLoading && announcements && announcements.length === 0 && (\n

Hakukriteerejä vastaavia tiedotteita ei löytynyt.

\n )}\n {!isLoading &&\n announcements &&\n announcements.map((announcement) => {\n return (\n onAnnouncementClick(announcement.id)}\n >\n
\n
\n {announcement.titleFI} /{' '}\n {announcement.titleEN}\n
\n

\n Luotu{' '}\n {Moment(announcement.createdAt).format(\n 'D.M.YYYY'\n )}\n

\n
\n \n {getStatusText(announcement)}\n

\n
\n );\n })}\n \n );\n};\n\nexport default AnnouncementListView;\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\n\nimport AnnouncementListView from './announcementListView';\nimport FooterComponent from '../../commons/footer/footerComponent';\nimport HeaderComponent from '../../commons/header/headerComponent';\nimport { getCookie } from '../../../utils/cookies';\nimport api from '../../../utils/api';\n\nclass AnnouncementListComponent extends Component {\n constructor(props) {\n super(props);\n this.state = {\n status: 'draft',\n announcements: [],\n statuses: [],\n isLoading: true,\n success: true,\n message: null,\n };\n }\n\n render() {\n const { isLoading, announcements, status, message, success, statuses } =\n this.state;\n\n return (\n
\n \n \n \n
\n );\n }\n\n openAnnouncementDetails = (id) => {\n this.props.history.push('/admin/announcement/' + id);\n };\n\n onNewAnnouncement = async () => {\n this.setState({\n ...this.state,\n ...{\n isLoading: true,\n },\n });\n try {\n let response = await api.post(\n '/announcement/new',\n {},\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n }\n );\n\n await this.setStatusFilter('draft');\n\n this.openAnnouncementDetails(response.data.id);\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen hakemiselle epäonnistui.',\n isLoading: false,\n },\n });\n }\n };\n\n setStatusFilter = async (status) => {\n this.setState({\n ...this.state,\n ...{\n status: status,\n isLoading: true,\n },\n });\n\n try {\n let response = await api.get('/announcement/list', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n status: status,\n },\n });\n\n let statusesResponse = await api.get('/announcement/statuses', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n announcements: response.data,\n statuses: statusesResponse.data,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen hakemiselle epäonnistui.',\n isLoading: false,\n },\n });\n }\n };\n\n async componentDidMount() {\n this.setStatusFilter(this.state.status);\n }\n}\n\nexport default withRouter(AnnouncementListComponent);\n","import React from 'react';\nimport './announcementDetails.css';\nimport { Alert, Form } from 'react-bootstrap';\nimport { ValidationForm, TextInput } from 'react-bootstrap4-form-validation';\nimport { Link } from 'react-router-dom';\nimport ReactQuill from 'react-quill';\nimport 'react-quill/dist/quill.snow.css';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport {\n announcementTypeString,\n platformString,\n} from '../../../utils/announcements';\nimport DatePicker from 'react-datepicker';\n\nconst AnnouncementDetailsView = ({\n announcement,\n handleInputChange,\n handleFocusChange,\n changeContentFI,\n changeContentEN,\n quillModules,\n save,\n message,\n success,\n publish,\n isLoading,\n deleteAnnouncement,\n archive,\n duplicate,\n makeTemplate,\n publishType,\n setPublishType,\n changePublishDate,\n handlePlatformChange,\n platforms,\n types,\n uploadAttachment,\n removeAttachment,\n canSendAnnouncement\n}) => {\n \n return (\n
\n
\n

\n
\n archive()}\n disabled={announcement.status === 'archived'}\n >\n Arkistoi\n \n makeTemplate()}\n disabled={announcement.status === 'template'}\n >\n Muuta tiedotepohjaksi\n \n duplicate()}\n >\n Monista\n \n
\n
\n {\n e.preventDefault();\n save();\n }}\n >\n {' '}\n \n \n Ilmoituksen tyyppi\n \n \n {types.map((type) => (\n \n ))}\n \n \n \n \n Otsikko FI\n \n \n \n \n \n Otsikko EN\n \n \n \n \n \n Sisältö FI\n \n \n \n \n \n Sisältö EN\n \n \n \n \n \n Liitteet\n \n
\n
\n {announcement.attachments.map((attachment) => (\n \n \n

{attachment.name}

\n \n removeAttachment(attachment)\n }\n >\n x\n

\n
\n ))}\n
\n \n Valitse tiedosto\n \n \n
\n \n \n \n Julkaisualustat\n \n {platforms.map((platform) => (\n \n ))}\n \n {announcement.status === 'published' && (\n

\n Tämä tiedote on jo julkaistu, joten voit ainoastaan\n muokata nettisivuilla ja mobiilisovelluksessa näkyvää\n versiota.\n

\n )}\n {announcement.status === 'template' && (\n

\n Tämä tiedote on merkitty tiedotepohjaksi, joten sitä ei\n voi julkaista. Voit monistaa tämän tiedotteen ja\n julkaista uuden version.\n

\n )}\n {announcement.status === 'archived' && (\n

\n Tämä tiedote on arkistoitu, joten sitä ei voi julkaista.\n

\n )}\n {announcement.status === 'scheduled' && (\n

\n Tämä tiedote on ajastettu julkaistavaksi myöhemmin.\n Ennen automaattisen julkaisun tapahtumista voit vielä\n muuttaa ajankohtaa tai poistaa automaattisen julkaisun\n vaihtamalla julkaisuajankohdaksi \"heti\". Tällöin\n julkaisu tapahtuu vain painamalla \"julkaise\" -nappia.\n

\n )}\n {(announcement.status === 'draft' ||\n announcement.status === 'scheduled') && (\n <>\n {' '}\n \n \n Julkaisuajankohta\n \n setPublishType(e.target.value)}\n >\n \n \n \n \n {publishType === 'scheduled' && (\n \n \n Julkaisupäivä\n \n \n \n )}\n \n )}\n {message && !success ? (\n \n {message}\n \n ) : null}\n
\n \n Takaisin\n \n {isLoading && }\n
\n deleteAnnouncement()}\n >\n Poista\n \n \n publish()}\n disabled={!canSendAnnouncement()}\n >\n {publishType === 'now' ? 'Julkaise' : 'Ajasta'}\n \n
\n
\n \n \n );\n};\n\nexport default AnnouncementDetailsView;\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\n\nimport AnnouncementDetailsView from './announcementDetailsView';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport FooterComponent from '../../commons/footer/footerComponent';\nimport HeaderComponent from '../../commons/header/headerComponent';\nimport { getCookie } from '../../../utils/cookies';\nimport api from '../../../utils/api';\n\n\nclass AnnouncementDetailsComponent extends Component {\n constructor(props) {\n super(props);\n this.state = {\n id: this.props.match.params.id,\n publishType: 'now', // 'now' or 'scheduled\n platforms: [],\n types: [],\n focusedEditor: null,\n announcement: null,\n isLoading: true,\n success: true,\n message: null,\n };\n }\n\n render() {\n const {\n isLoading,\n announcement,\n message,\n success,\n publishType,\n platforms,\n types,\n } = this.state;\n\n if (isLoading) {\n return ;\n }\n\n const quillModules = {\n toolbar: {\n container: [\n [{ header: [1, 2, false] }],\n ['bold', 'italic', 'underline', 'strike'],\n [{ color: [] }, { background: [] }],\n ['blockquote', 'code-block'],\n [\n { list: 'ordered' },\n { list: 'bullet' },\n { indent: '-1' },\n { indent: '+1' },\n ],\n [{ align: [] }],\n ['link', 'image'],\n ],\n },\n };\n\n return (\n
\n \n \n \n
\n );\n }\n\n canSendAnnouncement = () => {\n const announcementStatus = this.state.announcement.status;\n return announcementStatus !== 'published' && announcementStatus !== 'archived' &&\n announcementStatus !== 'template' && this.state.announcement.platforms.length > 0 &&\n this.state.announcement.titleFI.length > 0 && this.state.announcement.titleEN.length\n }\n\n\n setPublishType = (type) => {\n this.setState({\n ...this.state,\n ...{\n publishType: type,\n announcement: {\n ...this.state.announcement,\n status:\n this.state.announcement.status === 'scheduled' &&\n type === 'now'\n ? 'draft'\n : this.state.announcement.status,\n publishedAt:\n type === 'now'\n ? null\n : this.state.announcement.publishedAt ?? new Date(),\n },\n },\n });\n };\n\n changePublishDate = (date) => {\n this.setState({\n ...{\n announcement: {\n ...this.state.announcement,\n publishedAt: date,\n },\n },\n });\n };\n\n handlePlatformChange = (event) => {\n const target = event.target;\n const value = target.checked;\n const platform = target.name;\n\n let platforms = this.state.announcement.platforms;\n\n if (value) {\n if (!platforms.includes(platform)) {\n platforms = [...platforms, platform];\n }\n } else {\n platforms = platforms.filter((p) => p !== platform);\n }\n\n this.setState({\n announcement: {\n ...this.state.announcement,\n platforms: platforms,\n },\n });\n };\n\n handleInputChange = (event) => {\n const target = event.target;\n const value =\n target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n\n this.setState({\n announcement: {\n ...this.state.announcement,\n [name]: value,\n },\n });\n };\n\n handleFocusChange = (selection, source, editor, quillRef) => {\n this.setState({\n ...this.state,\n ...{\n focusedEditor: selection\n },\n });\n };\n\n\n changeContentFI = (content, delta, source, editor) => {\n this.setState({\n ...this.state,\n ...{\n announcement: {\n ...this.state.announcement,\n ...{\n contentFI: editor.getContents(),\n },\n },\n },\n });\n };\n\n changeContentEN = (content, delta, source, editor) => {\n this.setState({\n ...this.state,\n ...{\n announcement: {\n ...this.state.announcement,\n ...{\n contentEN: editor.getContents(),\n },\n },\n },\n });\n };\n\n\n\n save = async () => {\n try {\n this.setState({ isLoading: true });\n let response = await api.post(\n '/announcement/save',\n this.state.announcement,\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n }\n );\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n announcement: response.data,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Tallentaminen epäonnistui',\n isLoading: false,\n },\n });\n }\n };\n\n publish = async () => {\n try {\n this.setState({ isLoading: true });\n await this.save();\n if (this.state.publishType === 'scheduled') {\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n announcement: {\n ...this.state.announcement,\n status: 'scheduled',\n },\n },\n });\n alert('Tiedote ajastettu onnistuneesti!');\n this.props.history.push('/admin/announcements');\n return;\n }\n await api.post(\n '/announcement/publish',\n { id: this.state.announcement.id },\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n }\n );\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n },\n });\n\n alert('Tiedote julkaistu onnistuneesti!');\n this.props.history.push('/admin/announcements');\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Julkaiseminen epäonnistui',\n isLoading: false,\n },\n });\n }\n };\n\n archive = async () => {\n try {\n this.setState({ isLoading: true });\n await this.save();\n await api.post(\n '/announcement/archive',\n { id: this.state.announcement.id },\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n }\n );\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n announcement: {\n ...this.state.announcement,\n status: 'archived',\n },\n },\n });\n alert('Tiedote arkistoitu onnistuneesti!');\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Arkistoiminen epäonnistui',\n isLoading: false,\n },\n });\n }\n };\n\n duplicate = async () => {\n try {\n this.setState({ isLoading: true });\n await this.save();\n\n const response = await api.post(\n '/announcement/duplicate',\n { id: this.state.announcement.id },\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n }\n );\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n },\n });\n await this.props.history.replace('/admin/announcements/');\n await this.props.history.push(\n '/admin/announcement/' + response.data.id\n );\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Arkistoiminen epäonnistui',\n isLoading: false,\n },\n });\n }\n };\n\n makeTemplate = async () => {\n try {\n this.setState({ isLoading: true });\n await this.save();\n\n await api.post(\n '/announcement/make-template',\n { id: this.state.announcement.id },\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n }\n );\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n announcement: {\n ...this.state.announcement,\n status: 'template',\n },\n },\n });\n\n alert('Tiedotepohja luotu onnistuneesti!');\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pohjaksi muuttaminen epäonnistui',\n isLoading: false,\n },\n });\n }\n };\n\n removeAttachment = async (attachment) => {\n try {\n await this.save();\n\n this.setState({ isLoading: true });\n\n const response = await api.delete('/announcement/attachment', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'multipart/form-data',\n },\n params: {\n id: this.state.announcement.id,\n attachment: attachment,\n },\n });\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n announcement: response.data,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Liitteen poistaminen epäonnistui',\n isLoading: false,\n },\n });\n }\n };\n\n uploadAttachment = async (e) => {\n e.preventDefault();\n\n try {\n const formData = new FormData();\n formData.append('attachment', e.target.files[0]);\n\n await this.save();\n\n this.setState({ isLoading: true });\n\n const response = await api.post(\n '/announcement/attachment',\n formData,\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'multipart/form-data',\n },\n params: { id: this.state.announcement.id },\n }\n );\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n announcement: response.data,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Liitteen lisääminen epäonnistui',\n isLoading: false,\n },\n });\n }\n };\n\n deleteAnnouncement = async () => {\n try {\n this.setState({ isLoading: true });\n await api.delete(\n '/announcement/',\n\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: { id: this.state.announcement.id },\n }\n );\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n },\n });\n\n this.props.history.push('/admin/announcements');\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ?? 'Poistaminen epäonnistui',\n isLoading: false,\n },\n });\n }\n };\n\n\n async componentDidMount() {\n try {\n this.setState({ isLoading: true });\n let response = await api.get('/announcement/', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n id: this.state.id,\n },\n });\n\n let platformsResponse = await api.get('/announcement/platforms', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n let typesResponse = await api.get('/announcement/types', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n \n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n announcement: response.data,\n platforms: platformsResponse.data,\n types: typesResponse.data,\n publishType:\n (response.data.publishedAt &&\n response.data.status === 'draft') ||\n response.data.status === 'scheduled'\n ? 'scheduled'\n : 'now',\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen hakemiselle epäonnistui.',\n isLoading: false,\n },\n });\n }\n }\n}\n\nexport default withRouter(AnnouncementDetailsComponent);\n","import React from 'react';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport Moment from 'moment';\nimport './publicAnnouncementList.css';\nimport { Alert } from 'react-bootstrap';\n\nconst PublicAnnouncementListView = ({\n announcements,\n isLoading,\n onAnnouncementClick,\n message,\n success,\n}) => {\n return (\n
\n
\n

Tiedotteet

\n
\n\n {message && !success ? (\n \n {message}\n \n ) : null}\n {isLoading && }\n {!isLoading && announcements && announcements.length === 0 && (\n

Tiedotteita ei löytynyt.

\n )}\n {!isLoading &&\n announcements &&\n announcements.map((announcement) => {\n return (\n onAnnouncementClick(announcement.id)}\n >\n
\n
\n {announcement.titleFI} /{' '}\n {announcement.titleEN}\n
\n

\n Julkaistu{' '}\n {Moment(announcement.publishedAt).format(\n 'D.M.YYYY'\n )}\n

\n
\n
\n );\n })}\n \n );\n};\n\nexport default PublicAnnouncementListView;\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\n\nimport PublicAnnouncementListView from './publicAnnouncementListView';\nimport FooterComponent from '../../commons/footer/footerComponent';\nimport HeaderComponent from '../../commons/header/headerComponent';\nimport { getCookie } from '../../../utils/cookies';\nimport api from '../../../utils/api';\n\nclass PublicAnnouncementListComponent extends Component {\n constructor(props) {\n super(props);\n this.state = {\n announcements: [],\n isLoading: true,\n success: true,\n message: null,\n };\n }\n\n render() {\n const { isLoading, announcements, message, success } = this.state;\n\n return (\n
\n \n \n \n
\n );\n }\n\n openAnnouncementDetails = (id) => {\n this.props.history.push('/announcement/' + id);\n };\n\n async componentDidMount() {\n this.setState({\n ...this.state,\n ...{\n isLoading: true,\n },\n });\n\n try {\n let response = await api.get('/announcement/list', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n status: 'published',\n platform: 'website',\n },\n });\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n announcements: response.data,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen hakemiselle epäonnistui.',\n isLoading: false,\n },\n });\n }\n }\n}\n\nexport default withRouter(PublicAnnouncementListComponent);\n","import React from 'react';\nimport './publicAnnouncementDetails.css';\nimport { Alert, Form } from 'react-bootstrap';\nimport 'react-quill/dist/quill.snow.css';\nimport ReactQuill from 'react-quill';\nimport Moment from 'moment';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\n\nconst PublicAnnouncementDetailsView = ({\n announcement,\n message,\n success,\n isLoading,\n setLanguage,\n language,\n}) => {\n if (isLoading) {\n return ;\n }\n\n const content = announcement['content' + language];\n const title = announcement['title' + language];\n const firstName = announcement.announcer.firstName;\n const lastName = announcement.announcer.lastName;\n const photoUrl =\n announcement.announcer.photoUrl ??\n 'https://eu.ui-avatars.com/api/?name=' +\n firstName +\n '+' +\n lastName +\n '&size=50&bold=true&length=2&format=png';\n\n return (\n
\n
\n {message && !success ? (\n \n {message}\n \n ) : null}\n
\n {\n e.preventDefault();\n setLanguage(e.target.value);\n }}\n >\n \n \n \n
\n {!isLoading && title ?

{title}

: null}\n\n
\n

{Moment(announcement.publishedAt).format('D.M.YYYY')}

\n {announcement.announcer && (\n
\n

\n {firstName}\n

\n {lastName}\n

\n \"img\"\n
\n )}\n
\n {!isLoading && content ? (\n \n ) : (\n

Tiedotteella ei ole sisältöä

\n )}\n
Liitteet
\n {announcement.attachments &&\n announcement.attachments.length <= 0 &&

Ei liitteitä

}\n {announcement.attachments &&\n announcement.attachments.map((a) => (\n \n {a.name}\n \n ))}\n
\n );\n};\n\nexport default PublicAnnouncementDetailsView;\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\n\nimport PublicAnnouncementDetailsView from './publicAnnouncementDetailsView';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport FooterComponent from '../../commons/footer/footerComponent';\nimport HeaderComponent from '../../commons/header/headerComponent';\nimport { getCookie } from '../../../utils/cookies';\nimport api from '../../../utils/api';\n\nclass PublicAnnouncementDetailsComponent extends Component {\n constructor(props) {\n super(props);\n this.state = {\n id: this.props.match.params.id,\n language: 'FI',\n announcement: null,\n isLoading: true,\n success: true,\n message: null,\n };\n }\n\n render() {\n const {\n isLoading,\n announcement,\n message,\n success,\n language,\n } = this.state;\n\n if (isLoading) {\n return ;\n }\n\n return (\n
\n \n \n \n
\n );\n }\n\n setLanguage = (language) => {\n this.setState({\n ...this.state,\n ...{\n language: language,\n },\n });\n };\n\n async componentDidMount() {\n try {\n this.setState({ isLoading: true });\n let response = await api.get('/announcement/', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n id: this.state.id,\n },\n });\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: true,\n announcement: response.data,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen hakemiselle epäonnistui.',\n isLoading: false,\n },\n });\n }\n }\n}\n\nexport default withRouter(PublicAnnouncementDetailsComponent);\n","import React from 'react';\n\nimport { Link } from 'react-router-dom';\nimport { Alert, Button } from 'react-bootstrap';\nimport Table from 'react-bootstrap/Table';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Moment from 'moment';\n\nimport { hasPrivilege } from '../../../utils/cookies';\nimport { getPrivilegeString } from '../../../utils/privileges';\nimport './memberDetailsAdminView.css';\n\nMoment.locale('fi');\n\nconst currentDate = new Date();\n\nfunction membershipUntilFormatter(membershipUntil, currentDate) {\n if (membershipUntil) {\n if (new Date(membershipUntil) <= currentDate) {\n return (\n
\n {Moment(membershipUntil).format('D.M.YYYY')}{' '}\n \n
\n );\n } else {\n return
{Moment(membershipUntil).format('D.M.YYYY')}
;\n }\n } else {\n return
Jäsenmaksua ei ole maksettu
;\n }\n}\n\nconst MemberDetailsAdminView = ({\n firstName,\n lastName,\n utuAccount,\n email,\n homeTown,\n tyyMember,\n privileges,\n entitledToCap,\n entitledToPatch,\n membershipSince,\n membershipUntil,\n createdAt,\n accepted,\n message,\n success,\n handleRemove,\n memberID,\n}) => (\n
\n {message ? (\n {message}\n ) : null}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n
Etunimi{firstName}
Sukunimi{lastName}
UTU-tunnus{utuAccount}
Sähköpostiosoite{email}
Kotikunta{homeTown}
TYYn jäsen\n {tyyMember ? (\n

\n Kyllä{' '}\n \n

\n ) : (\n

\n Ei \n

\n )}\n
Fuksipassi pakolliset\n {entitledToCap ? (\n

\n Kyllä{' '}\n \n

\n ) : (\n

\n Ei \n

\n )}\n
Fuksipassi harraste\n {entitledToPatch ? (\n

\n Kyllä{' '}\n \n

\n ) : (\n

\n Ei \n

\n )}\n
Jäsenyys hyväksytty\n {accepted ? (\n

\n Kyllä{' '}\n \n

\n ) : (\n

\n Ei \n

\n )}\n
Rooli{getPrivilegeString(privileges)}
Jäsenyys alkanut\n {membershipSince\n ? Moment(membershipSince).format('D.M.YYYY')\n : 'Jäsenmaksua ei ole maksettu'}\n
Jäsenyys päättyy\n {membershipUntilFormatter(membershipUntil, currentDate)}\n
Tunnus luotu{Moment(createdAt).format('D.M.YYYY')}
\n
\n \n Takaisin\n \n {hasPrivilege('boardmember') ||\n hasPrivilege('chairman') ||\n hasPrivilege('vicechairman') ||\n hasPrivilege('admin') ? (\n
\n \n Poista {firstName} {lastName}\n \n \n Päivitä tietoja\n \n
\n ) : null}\n
\n
\n);\n\nexport default MemberDetailsAdminView;\n","import React, { Component } from 'react';\n\nimport { Modal, Button } from 'react-bootstrap';\nimport HeaderComponent from '../../commons/header/headerComponent';\nimport MemberDetailsAdminView from './memberDetailsAdminView';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport MemberNotFoundComponent from '../../commons/memberNotFound/memberNotFoundComponent';\n\nimport { getCookie } from '../../../utils/cookies';\nimport api from '../../../utils/api';\nimport FooterComponent from '../../commons/footer/footerComponent';\n\nclass MemberDetailsAdminComponent extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isLoading: true,\n memberID: this.props.match.params.id,\n firstName: null,\n lastName: null,\n utuAccount: null,\n email: null,\n homeTown: null,\n tyyMember: null,\n privileges: null,\n entitledToCap: null,\n entitledToPatch: null,\n membershipSince: null,\n membershipUntil: null,\n createdAt: null,\n accepted: null,\n password: null,\n passwordAgain: null,\n success: null,\n message: null,\n warning: false,\n dialogMessage: '',\n memberNotFound: false,\n };\n }\n\n onHandleRemove = () => {\n this.setState({\n warning: true,\n dialogMessage: `Haluatko varmasti poistaa jäsenen ${this.state.firstName} ${this.state.lastName}?`,\n });\n };\n\n handleRemove = async (event) => {\n const response = event.target.innerHTML.toLowerCase();\n\n if (response === 'kyllä') {\n const data = {\n memberID: this.state.memberID,\n email: this.state.email,\n };\n try {\n const response = await api.post('/admin/remove', data, {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: response.data.success,\n message: response.data.message,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö jäsenen poistolle epäonnistui.',\n isLoading: false,\n },\n });\n }\n }\n\n this.setState({\n warning: false,\n dialogMessage: '',\n });\n };\n\n render() {\n let modalClose = () => this.setState({ warning: false });\n const {\n isLoading,\n firstName,\n lastName,\n utuAccount,\n email,\n homeTown,\n tyyMember,\n privileges,\n entitledToCap,\n entitledToPatch,\n membershipSince,\n membershipUntil,\n createdAt,\n accepted,\n success,\n message,\n memberID,\n warning,\n dialogMessage,\n memberNotFound,\n } = this.state;\n\n if (isLoading) {\n return ;\n }\n\n if (memberNotFound) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n \n \n \n \n Varoitus\n \n \n \n

{dialogMessage}

\n
\n \n \n \n \n \n \n \n
\n );\n }\n async componentDidMount() {\n try {\n let profileData = await api.get('/member/details', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n memberID: this.state.memberID,\n },\n });\n const capData = await api.get('/fresherpass/validate/cap', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n memberID: this.state.memberID,\n },\n });\n\n const patchData = await api.get('/fresherpass/validate/patch', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n\n params: {\n memberID: this.state.memberID,\n },\n });\n\n this.setState({\n ...this.state,\n isLoading: false,\n success: true,\n entitledToCap: capData.data,\n entitledToPatch: patchData.data,\n ...profileData.data,\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen hakemiseen epäonnistui.',\n isLoading: false,\n memberNotFound: true,\n },\n });\n }\n }\n}\n\nexport default MemberDetailsAdminComponent;\n","import React from 'react';\n\nimport { Alert, Form } from 'react-bootstrap';\nimport { Link } from 'react-router-dom';\n\nimport DatePicker, { registerLocale } from 'react-datepicker';\nimport 'react-datepicker/dist/react-datepicker.css';\nimport fi from 'date-fns/locale/fi';\nimport { ValidationForm, TextInput } from 'react-bootstrap4-form-validation';\nimport validator from 'validator';\n\nimport '../../assets/validatedCheckbox.css';\nimport { getPrivilegeString } from '../../../utils/privileges';\n\nregisterLocale('fi', fi);\n\nconst MemberUpdateAdminView = ({\n firstName,\n lastName,\n utuAccount,\n email,\n homeTown,\n tyyMember,\n privileges,\n membershipSince,\n membershipUntil,\n accepted,\n handleUpdateAdmin,\n handleInputChange,\n handleMembershipStartsChange,\n handleMembershipEndsChange,\n handlePrivilegeStartChange,\n handlePrivilegeEndChange,\n handlePrivilegeChange,\n handleRemovePrivilege,\n handleAddPrivilege,\n success,\n message,\n memberID,\n matchPassword,\n handlePasswordReset,\n}) => (\n
\n {\n e.preventDefault();\n handleUpdateAdmin(e);\n }}\n >\n \n Etunimi\n \n \n \n Sukunimi\n \n \n \n UTU-tunnus (ilman @utu.fi)\n \n \n \n Sähköposti\n \n \n \n Kotikunta\n \n \n \n \n \n \n \n \n
\n
\n Jäsenyys alkaa\n \n
\n
\n \n Jäsenyys päättyy\n \n \n
\n
\n
\n
Roolit
\n {privileges.map((privilege, index) => (\n \n \n Rooli\n \n handlePrivilegeChange(index, e.target.value)\n }\n >\n \n \n \n \n \n \n \n \n \n \n \n \n Alkaa\n \n handlePrivilegeStartChange(value, index)\n }\n dateFormat=\"dd.MM.yyyy\"\n className=\"form-control\"\n locale=\"fi\"\n />\n \n \n Päättyy\n \n handlePrivilegeEndChange(value, index)\n }\n dateFormat=\"dd.MM.yyyy\"\n className=\"form-control\"\n locale=\"fi\"\n />\n \n \n \n handleRemovePrivilege(index)}\n >\n Poista\n \n \n \n
\n ))}\n \n Lisää rooli\n \n
\n {message && !success ? (\n \n {message}\n \n ) : null}\n
\n \n Takaisin\n \n
\n handlePasswordReset()}\n >\n Nollaa salasana\n \n \n
\n
\n \n \n);\n\nexport default MemberUpdateAdminView;\n","import React, { Component } from 'react';\n\nimport MemberUpdateAdminView from './memberUpdateAdminView';\nimport HeaderComponent from '../../commons/header/headerComponent';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport MemberNotFoundComponent from '../../commons/memberNotFound/memberNotFoundComponent';\n\nimport { Modal } from 'react-bootstrap';\n\nimport { getCookie } from '../../../utils/cookies';\nimport api from '../../../utils/api';\nimport FooterComponent from '../../commons/footer/footerComponent';\n\nclass MemberUpdateAdminComponent extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isLoading: true,\n memberID: this.props.match.params.id,\n firstName: null,\n lastName: null,\n utuAccount: null,\n email: null,\n homeTown: null,\n tyyMember: null,\n privileges: null,\n membershipSince: null,\n membershipUntil: null,\n accepted: null,\n password: '',\n passwordAgain: '',\n success: null,\n message: null,\n showModal: false,\n memberNotFound: false,\n };\n this.handleMembershipStartsChange =\n this.handleMembershipStartsChange.bind(this);\n this.handleMembershipEndsChange =\n this.handleMembershipEndsChange.bind(this);\n }\n\n handleUpdateAdmin = async (event) => {\n event.preventDefault();\n const data = {\n firstName: this.state.firstName,\n lastName: this.state.lastName,\n utuAccount: this.state.utuAccount,\n email: this.state.email,\n homeTown: this.state.homeTown,\n tyyMember: this.state.tyyMember,\n membershipSince: this.state.membershipSince,\n membershipUntil: this.state.membershipUntil,\n password: this.state.password,\n passwordAgain: this.state.passwordAgain,\n accepted: this.state.accepted,\n memberID: this.state.memberID,\n };\n\n try {\n const response = await api.put('/admin/update', data, {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n\n const privileges = await api.post(\n '/admin/privileges',\n { privileges: this.state.privileges },\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n memberID: this.state.memberID,\n all: true,\n },\n }\n );\n let modal = false;\n if (response.data.success && response.data.message) {\n modal = true;\n }\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: response.data.success,\n message: response.data.message,\n showModal: modal,\n privileges: privileges.data ?? this.state.privileges,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen päivittämiselle epäonnistui.',\n isLoading: false,\n },\n });\n }\n };\n\n handlePasswordReset = async () => {\n try {\n const response = await api.post(\n '/forgot/authenticated',\n { email: this.state.email },\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n }\n );\n\n let modal = false;\n if (response.data.success && response.data.message) {\n modal = true;\n }\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: response.data.success,\n message: response.data.message,\n showModal: modal,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Salasanan nollaus epäonnistui',\n isLoading: false,\n },\n });\n }\n };\n\n handleInputChange = (event) => {\n const target = event.target;\n const value =\n target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n\n this.setState({\n [name]: value,\n });\n };\n\n handleMembershipStartsChange = (date) => {\n this.setState({\n membershipSince: date,\n });\n };\n\n handleMembershipEndsChange = (date) => {\n this.setState({\n membershipUntil: date,\n });\n };\n\n handlePrivilegeStartChange = (date, index) => {\n this.setState({\n privileges: this.state.privileges.map((privilege, i) => {\n if (i === index) {\n privilege.startDate = date;\n }\n return privilege;\n }),\n });\n };\n handlePrivilegeEndChange = (date, index) => {\n this.setState({\n privileges: this.state.privileges.map((privilege, i) => {\n if (i === index) {\n privilege.endDate = date;\n }\n return privilege;\n }),\n });\n };\n\n handlePrivilegeChange = (index, value) => {\n this.setState({\n privileges: this.state.privileges.map((p, i) => {\n if (i === index) {\n p.role = value;\n }\n return p;\n }),\n });\n };\n\n handleRemovePrivilege = (index) => {\n this.setState({\n privileges: this.state.privileges.filter((p, i) => i !== index),\n });\n };\n\n handleAddPrivilege = () => {\n this.setState({\n privileges: [\n ...this.state.privileges,\n {\n memberId: this.state.memberID,\n startDate: Date(),\n endDate: Date(),\n role: 'fresher',\n },\n ],\n });\n };\n\n matchPassword = (value) => {\n if (value || this.state.password) {\n return value === this.state.password;\n } else {\n return true;\n }\n };\n\n render() {\n let modalClose = () => this.setState({ showModal: false });\n const {\n isLoading,\n firstName,\n lastName,\n utuAccount,\n email,\n homeTown,\n tyyMember,\n privileges,\n membershipSince,\n membershipUntil,\n accepted,\n success,\n message,\n memberID,\n showModal,\n memberNotFound,\n } = this.state;\n\n if (isLoading === true) {\n return ;\n }\n\n if (memberNotFound) {\n return (\n
\n {' '}\n \n
\n );\n }\n\n return (\n
\n \n \n \n \n Ilmoitus\n \n \n \n

{message}

\n
\n \n \n \n \n \n \n
\n );\n }\n\n async componentDidMount() {\n try {\n let profileData = await api.get('/admin/profile', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n memberID: this.state.memberID,\n },\n });\n\n const privileges = await api.get('/member/privileges', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n memberID: this.state.memberID,\n all: true,\n },\n });\n\n this.setState({\n ...this.state,\n isLoading: false,\n success: true,\n ...profileData.data,\n privileges: privileges.data ?? [],\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen hakemiselle epäonnistui.',\n isLoading: false,\n memberNotFound: true,\n },\n });\n }\n }\n}\n\nexport default MemberUpdateAdminComponent;\n","import React from 'react';\n\nimport Alert from 'react-bootstrap/Alert';\nimport Form from 'react-bootstrap/Form';\nimport { Link } from 'react-router-dom';\nimport { ValidationForm, TextInput } from 'react-bootstrap4-form-validation';\nimport validator from 'validator';\nimport '../../assets/validatedCheckbox.css';\nimport './memberUpdateView.css';\n\nconst MemberUpdateView = ({\n firstName,\n lastName,\n utuAccount,\n email,\n homeTown,\n tyyMember,\n submitMainForm,\n handleInputChange,\n success,\n message,\n matchPassword,\n handlePasswordReset,\n}) => (\n
\n \n \n Etunimi\n \n \n \n Sukunimi\n \n \n \n UTU-tunnus (ilman @utu.fi)\n \n \n \n Sähköposti\n \n \n \n Kotikunta\n \n \n \n \n \n
\n {message && !success ? (\n \n {message}\n \n ) : null}\n
\n \n Takaisin\n \n
\n handlePasswordReset()}\n >\n Nollaa salasana\n \n \n
\n
\n
\n
\n);\n\nexport default MemberUpdateView;\n","import React, { Component } from 'react';\n\nimport { Form, Modal } from 'react-bootstrap';\nimport { ValidationForm, TextInput } from 'react-bootstrap4-form-validation';\n\nimport HeaderComponent from '../../commons/header/headerComponent';\nimport MemberUpdateView from './memberUpdateView';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport MemberNotFoundComponent from '../../commons/memberNotFound/memberNotFoundComponent';\n\nimport { getCookie } from '../../../utils/cookies';\nimport api from '../../../utils/api';\nimport FooterComponent from '../../commons/footer/footerComponent';\n\nclass MemberUpdateComponent extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n id: null,\n isLoading: true,\n firstName: null,\n lastName: null,\n utuAccount: null,\n email: null,\n homeTown: null,\n tyyMember: null,\n password: '',\n passwordAgain: '',\n success: null,\n message: null,\n showModal: false,\n memberNotFound: false,\n passwordConfirmation: '',\n showPasswordConfirmationModal: false,\n };\n }\n\n submitMainForm = async (event) => {\n event.preventDefault();\n this.setState({\n ...this.state,\n showPasswordConfirmationModal: true,\n });\n };\n\n cancelPasswordConfirmation = async () => {\n this.setState({\n ...this.state,\n showPasswordConfirmationModal: false,\n });\n };\n\n submitPasswordConfirmation = async (event) => {\n event.preventDefault();\n console.log('submitting password confirmation');\n this.setState({\n ...this.state,\n showPasswordConfirmationModal: false,\n });\n let success = false;\n try {\n const detailsResponse = await api.get('/member/self', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n const data = {\n email: detailsResponse.data.email,\n password: this.state.passwordConfirmation,\n };\n const response = await api.post('/login', data, {\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n success = response.data.token;\n } catch (error) {\n console.error(error);\n }\n if (success) {\n await this.handleUpdateMember();\n } else {\n this.setState({\n ...this.state,\n success: false,\n message:\n 'Syöttämäsi salasana on väärä, joten tietoja ei päivitetty.',\n });\n }\n };\n\n handleUpdateMember = async () => {\n const data = {\n firstName: this.state.firstName,\n lastName: this.state.lastName,\n utuAccount: this.state.utuAccount,\n email: this.state.email,\n homeTown: this.state.homeTown,\n tyyMember: this.state.tyyMember,\n password: this.state.password,\n passwordAgain: this.state.passwordAgain,\n id: this.state.id,\n };\n\n try {\n const response = await api.put('/member/details', data, {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n let modal = false;\n\n if (response.data.success && response.data.message) {\n modal = true;\n }\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: response.data.success,\n message: response.data.message,\n showModal: modal,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen päivittämiselle epäonnistui.',\n isLoading: false,\n },\n });\n }\n };\n\n handleInputChange = (event) => {\n const target = event.target;\n const value =\n target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n\n this.setState({\n [name]: value,\n });\n };\n\n matchPassword = (value) => {\n if (value || this.state.password) {\n return value === this.state.password;\n } else {\n return true;\n }\n };\n\n handlePasswordReset = async () => {\n try {\n const response = await api.post(\n '/forgot/authenticated',\n { email: this.state.email },\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n }\n );\n\n let modal = false;\n if (response.data.success && response.data.message) {\n modal = true;\n }\n this.setState({\n ...this.state,\n ...{\n isLoading: false,\n success: response.data.success,\n message: response.data.message,\n showModal: modal,\n },\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Salasanan nollaus epäonnistui',\n isLoading: false,\n },\n });\n }\n };\n\n render() {\n let modalClose = () => this.setState({ showModal: false });\n const {\n isLoading,\n firstName,\n lastName,\n utuAccount,\n email,\n homeTown,\n tyyMember,\n success,\n message,\n showModal,\n memberNotFound,\n } = this.state;\n\n if (isLoading === true) {\n return ;\n }\n\n if (memberNotFound) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n \n \n \n \n \n Vahvistus\n \n \n \n \n \n Syötä tämänhetkinen salasanasi\n vahvistaaksesi muutokset\n \n \n \n \n \n \n \n Takaisin\n \n \n \n \n \n \n \n Ilmoitus\n \n \n \n

{message}

\n
\n \n \n \n \n \n \n
\n );\n }\n\n async componentDidMount() {\n try {\n let response = await api.get('/member/self', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n\n this.setState({\n ...this.state,\n isLoading: false,\n success: true,\n ...response.data,\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen hakemiseen epäonnistui.',\n isLoading: false,\n memberNotFound: true,\n },\n });\n }\n }\n}\n\nexport default MemberUpdateComponent;\n","import React from 'react';\n\nimport { Link } from 'react-router-dom';\nimport Table from 'react-bootstrap/Table';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport Moment from 'moment';\n\nimport { getPrivilegeString } from '../../../utils/privileges';\n\nMoment.locale('fi');\n\nconst currentDate = new Date();\n\nfunction membershipUntilFormatter(membershipUntil, currentDate) {\n if (membershipUntil) {\n if (new Date(membershipUntil) <= currentDate) {\n return (\n
\n {Moment(membershipUntil).format('D.M.YYYY')}{' '}\n \n
\n );\n } else {\n return
{Moment(membershipUntil).format('D.M.YYYY')}
;\n }\n } else {\n return
Jäsenmaksua ei ole maksettu
;\n }\n}\n\nconst MemberDetailsView = ({\n firstName,\n lastName,\n utuAccount,\n email,\n homeTown,\n privileges,\n membershipSince,\n membershipUntil,\n accepted,\n tyyMember,\n}) => (\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Etunimi{firstName}
Sukunimi{lastName}
UTU-tunnus{utuAccount}
Sähköpostiosoite{email}
Kotikunta{homeTown}
TYYn jäsen\n {tyyMember ? (\n

\n Kyllä{' '}\n \n

\n ) : (\n

\n Ei \n

\n )}\n
Roolit{getPrivilegeString(privileges)}
Jäsenyys hyväksytty\n {accepted ? (\n

\n Kyllä{' '}\n \n

\n ) : (\n

\n Ei \n

\n )}\n
Jäsenyys alkanut\n {membershipSince\n ? Moment(membershipSince).format('D.M.YYYY')\n : 'Jäsenmaksua ei ole maksettu'}\n
Jäsenyys päättyy\n {membershipUntilFormatter(membershipUntil, currentDate)}\n
\n
\n {membershipUntil && new Date(membershipUntil) <= currentDate ? (\n

\n {' '}\n Jäsenyytesi on päättynyt. Maksa jäsenmaksusi.\n

\n ) : null}\n
\n \n Päivitä tietoja\n \n
\n);\n\nexport default MemberDetailsView;\n","import React, { Component } from 'react';\n\nimport HeaderComponent from '../../commons/header/headerComponent';\nimport MemberDetailsView from './memberDetailsView';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport MemberNotFoundComponent from '../../commons/memberNotFound/memberNotFoundComponent';\n\nimport { getCookie, getPrivileges } from '../../../utils/cookies';\nimport api from '../../../utils/api';\nimport FooterComponent from '../../commons/footer/footerComponent';\n\nclass MemberDetailsComponent extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n privileges: getPrivileges(),\n isLoading: true,\n firstName: null,\n lastName: null,\n utuAccount: null,\n email: null,\n homeTown: null,\n membershipSince: null,\n membershipUntil: null,\n accepted: null,\n tyyMember: null,\n success: null,\n message: null,\n memberNotFound: false,\n };\n }\n\n render() {\n const {\n isLoading,\n firstName,\n lastName,\n utuAccount,\n email,\n homeTown,\n privileges,\n membershipSince,\n membershipUntil,\n accepted,\n tyyMember,\n memberNotFound,\n } = this.state;\n\n if (isLoading === true) {\n return ;\n }\n\n if (memberNotFound) {\n return (\n
\n \n
\n );\n }\n\n return (\n
\n \n \n \n
\n );\n }\n\n async componentDidMount() {\n try {\n let response = await api.get('/member/self', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n\n this.setState({\n ...this.state,\n isLoading: false,\n success: true,\n ...response.data,\n });\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö tietojen hakemiseen epäonnistui.',\n isLoading: false,\n memberNotFound: true,\n },\n });\n }\n }\n}\n\nexport default MemberDetailsComponent;\n","import React from 'react';\nimport { Button, Form } from 'react-bootstrap';\nimport './memberPayView.css';\n\nconst MemberPayView = ({ storeItems, addToCart, setSelectedProduct }) => (\n
\n

Digitin kauppa

\n

\n Tervetuloa Digitin kauppaan! Täältä voit ostaa Digitin jäsenyyden\n tai muita Digitin tuotteita.\n

\n

\n Saat ostotapahtumista aina kuitin siihen sähköpostiin, jonka olet\n jäsenrekisteriin itsellesi määrittänyt. Jos et saa kuittia, tarkista\n roskapostikansio.\n

\n

\n Jäsenmaksut kasvattavat automaattisesti jäsenyytesi\n voimassaoloaikaa, joten varmista jäsentietojen päivittyneen oikein\n palaamalla etusivulle onnistuneen maksutapahtuman jälkeen.\n

\n

\n Fyysisiä tuotteita ei postiteta, eli ne voi noutaa erikseen\n sovittuna ajankohtana Kiltahuoneelta kuittia vastaan.\n

\n \n {storeItems.map((item) => {\n return (\n
\n {\n e.preventDefault();\n if (item.currentProduct) {\n addToCart(item.currentProduct);\n }\n }}\n >\n \n {item.name}\n {item.description}\n\n \n {item.products.length > 1 && (\n {\n const productId =\n e.target.value;\n const selectedProduct =\n item.products.find(\n (product) =>\n product.id ===\n productId\n );\n\n setSelectedProduct(\n item,\n selectedProduct\n );\n }}\n >\n {item.products.map((product) => (\n \n {product.name} (\n {product.price} €)\n \n ))}\n \n )}\n {item.currentProduct && (\n \n )}\n \n \n \n
\n );\n })}\n
\n \n);\n\nexport default MemberPayView;\n","import React, { Component } from 'react';\n\nimport HeaderComponent from '../../commons/header/headerComponent';\nimport MemberPayView from './memberPayView';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport { Modal } from 'react-bootstrap';\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\nimport { faShoppingCart, faTrash } from '@fortawesome/free-solid-svg-icons';\nimport { getCookie } from '../../../utils/cookies';\nimport api from '../../../utils/api';\nimport FooterComponent from '../../commons/footer/footerComponent';\n\nclass MemberPayComponent extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n isLoading: true,\n storeItems: [],\n products: [],\n cart: [],\n showCart: false,\n success: null,\n message: null,\n };\n }\n\n handleBuy = async () => {\n try {\n const paymentIntent = await api.post(\n '/purchase/payment',\n {\n productIds: this.state.cart.map((p) => p.id),\n },\n {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n }\n );\n\n const purchaseUrl = paymentIntent.data.purchaseUrl;\n\n //redirect to purchaseUrl\n window.location.href = purchaseUrl;\n } catch (e) {\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö serverille epäonnistui.',\n isLoading: false,\n memberNotFound: true,\n },\n });\n }\n };\n\n handleInputChange = (event) => {\n const target = event.target;\n const value =\n target.type === 'checkbox' ? target.checked : target.value;\n const name = target.name;\n\n this.setState({\n [name]: value,\n });\n };\n\n addToCart = (product) => {\n this.setState({ cart: [...this.state.cart, product] });\n };\n\n removeFromCart = (product) => {\n const index = this.state.cart.findIndex((p) => p.id === product.id);\n if (index !== -1) {\n const newCart = [...this.state.cart];\n newCart.splice(index, 1);\n this.setState({ cart: newCart });\n }\n };\n\n setSelectedProduct = (item, product) => {\n this.setState({\n storeItems: this.state.storeItems.map((i) => {\n if (i.id === item.id) {\n i.currentProduct = product;\n }\n return i;\n }),\n });\n };\n\n render() {\n const {\n isLoading,\n cart,\n products,\n storeItems,\n showCart,\n success,\n message,\n } = this.state;\n\n if (isLoading === true) {\n return ;\n }\n\n const cartPrice = cart.reduce((a, b) => a + b.price, 0);\n const cartCount = this.state.cart.length;\n return (\n
\n \n \n this.setState({ showCart: true })}\n style={{ cursor: 'pointer'}}\n />\n {cartCount > 0 && (\n \n {cartCount}\n
\n )}\n \n this.setState({ showCart: false })}\n size=\"lg\"\n aria-labelledby=\"contained-modal-title-vcenter\"\n centered\n >\n \n \n Ostoskori\n \n \n \n {cart.length > 0 &&

Tuotteet

}\n {cart.map((product) => (\n \n \n
\n {product.name}: {product.price} €\n
\n

{product.description}

\n \n this.removeFromCart(product)}\n style={{\n cursor: 'pointer',\n color: 'red',\n marginLeft: '10px',\n }}\n />\n \n ))}\n {cart.length === 0 ? (\n

Ostoskori on tyhjä

\n ) : (\n

Yhteensä: {cartPrice} €

\n )}\n \n \n this.setState({ showCart: false })}\n type=\"reset\"\n >\n Takaisin\n \n {cart.length > 0 && (\n this.handleBuy()}\n type=\"submit\"\n >\n Osta\n \n )}\n \n \n \n \n \n );\n }\n\n async componentDidMount() {\n try {\n const storeItemsResponse = await api.get('/store-item', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n\n const storeItems = storeItemsResponse.data;\n\n const products = await api.get(`/product`, {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n });\n\n for (let item of storeItems) {\n const p = item.productIds.map((productId) => {\n return products.data.find((p) => p.id === productId);\n });\n item.products = p;\n if (p.length > 0) {\n item.currentProduct = p[0];\n }\n }\n\n console.log(storeItems);\n\n this.setState({\n ...this.state,\n isLoading: false,\n success: true,\n storeItems: storeItems,\n products: products.data,\n });\n } catch (e) {\n console.error(e);\n this.setState({\n ...this.state,\n ...{\n success: false,\n message:\n e?.response?.data?.message ??\n 'Pyyntö serverille epäonnistui.',\n isLoading: false,\n memberNotFound: true,\n },\n });\n }\n }\n}\n\nexport default MemberPayComponent;\n","import React from 'react';\nimport HeaderComponent from '../../commons/header/headerComponent';\nimport PreloaderComponent from '../../commons/preloader/preloaderComponent';\nimport { Link } from 'react-router-dom';\nimport FooterComponent from '../../commons/footer/footerComponent';\n\nconst PayReturnView = ({ success, purchase, isLoading }) => {\n const showSuccess = success && purchase && purchase.status === 'paid';\n const showCancelled =\n !success || (success && purchase && purchase.status === 'cancelled');\n\n return (\n
\n \n\n {(isLoading || (!showCancelled && !showSuccess)) && (\n \n )}\n\n {showSuccess && (\n
\n

Maksutapahtuma onnistui

\n

\n Olet suorittanut maksun onnistuneesti! Sinulle tulee\n sähköpostiin kuitti onnistuneesta maksusta.\n

\n\n

\n Jos ostit jäsenyyden, varmista jäsentietojen\n päivittyneen oikein palaamalla etusivulle.\n

\n\n

\n Muut tuotteet voit noutaa Kiltahuoneelta erikseen\n ilmoitettuna ajankohtana kuittia vastaan.\n

\n\n \n Etusivulle\n \n
\n )}\n\n {showCancelled && (\n
\n

Maksutapahtuma keskeytyi

\n

\n Et vienyt maksutapahtumaa loppuun asti, tai maksussa\n tapahtui virhe. Jos sinua on veloitettu, ota yhteys\n Digit ry hallitukseen.\n

\n \n Etusivulle\n \n
\n )}\n \n
\n );\n};\n\nexport default PayReturnView;\n","import React, { Component } from 'react';\nimport { withRouter } from 'react-router-dom';\nimport api from '../../../utils/api';\nimport { getCookie } from '../../../utils/cookies';\nimport PayReturnView from './payReturnView';\n\nclass payReturnComponent extends Component {\n constructor(props) {\n super(props);\n\n this.state = {\n success: false,\n purchaseId: null,\n purchase: null,\n isLoading: true,\n intervalId: null,\n };\n }\n\n componentDidMount() {\n const successParam = this.props.match.params.success;\n const purchaseIdParam = this.props.match.params.purchase;\n\n if (successParam && purchaseIdParam) {\n this.setState({\n success: successParam === 'true',\n purchaseId: purchaseIdParam,\n });\n\n const intervalId = setInterval(async () => {\n this.fetchPurchase();\n }, 4000);\n\n this.setState({\n intervalId: intervalId,\n });\n }\n }\n\n componentWillUnmount() {\n if (this.state.intervalId) {\n clearInterval(this.state.intervalId);\n }\n }\n\n async fetchPurchase() {\n try {\n const response = await api.get('/purchase/purchase', {\n headers: {\n Authorization: getCookie('jasenrekisteri-token'),\n 'Content-Type': 'application/json',\n },\n params: {\n purchaseId: this.state.purchaseId,\n },\n });\n\n const fetchedPurchase = response.data;\n\n if (\n fetchedPurchase.status === 'paid' ||\n fetchedPurchase.status === 'cancelled'\n ) {\n if (this.state.intervalId) {\n clearInterval(this.state.intervalId);\n }\n this.setState({\n purchase: fetchedPurchase,\n isLoading: false,\n });\n }\n } catch (e) {\n console.error(e);\n }\n }\n\n render() {\n const { success, purchase, isLoading } = this.state;\n\n return (\n \n );\n }\n}\n\nexport default withRouter(payReturnComponent);\n","import React from 'react';\n\nimport { Link } from 'react-router-dom';\nimport MainComponent from './commons/main/mainComponent';\n\nconst styles = {\n fontSize: '5rem',\n fontWeight: '600',\n marginBottom: '30px',\n};\n\nconst Notfound = () => (\n \n
\n

404

\n \n Etusivulle\n \n
\n
\n);\n\nexport default Notfound;\n","import React, { Component } from 'react';\n\nimport { BrowserRouter, Route, Switch } from 'react-router-dom';\n\nimport PrivateRoute from './privateRoute';\n\nimport LoginComponent from '../components/authentications/login/loginComponent';\nimport RegisterComponent from '../components/authentications/register/registerComponent';\nimport ForgotComponent from '../components/authentications/forgot/forgotComponent';\nimport ResetComponent from '../components/authentications/forgot/resetComponent';\nimport LogoutComponent from '../components/authentications/logoutComponent';\n\nimport ControlComponent from '../components/admin/controlComponent';\nimport PurchasesComponent from '../components/admin/purchases/purchasesComponent';\nimport AddMemberComponent from '../components/admin/addMember/addMemberComponent';\nimport AnnouncementListComponent from '../components/admin/announcementList/announcementListComponent';\nimport AnnouncementDetailsComponent from '../components/admin/announcementDetails/announcementDetailsComponent';\n\nimport PublicAnnouncementListComponent from '../components/announcement/publicAnnouncementList/publicAnnouncementListComponent';\nimport PublicAnnouncementDetailsComponent from '../components/announcement/publicAnnouncementDetails/publicAnnouncementDetailsComponent';\nimport MemberDetailsAdminComponent from '../components/admin/memberDetails/memberDetailsAdminComponent';\nimport MemberUpdateAdminComponent from '../components/admin/memberDetails/memberUpdateAdminComponent';\n\nimport MemberUpdateComponent from '../components/member/details/memberUpdateComponent';\nimport MemberDetailsComponent from '../components/member/details/memberDetailsComponent';\nimport MemberPayComponent from '../components/member/payment/memberPayComponent';\nimport payReturnComponent from '../components/member/payment/payReturnComponent';\nimport NotFoundComponent from '../components/notFoundComponent';\n\nimport { library } from '@fortawesome/fontawesome-svg-core';\nimport {\n faCheck,\n faTimes,\n faSignInAlt,\n faExclamationTriangle,\n} from '@fortawesome/free-solid-svg-icons';\n\nlibrary.add(faCheck, faTimes, faSignInAlt, faExclamationTriangle);\n\nclass App extends Component {\n render() {\n return (\n \n
\n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n\n \n \n
\n
\n );\n }\n}\n\nexport default App;\n","import React from 'react';\nimport ReactDOM from 'react-dom';\n\nimport App from './container/App';\nimport './index.css';\n\nReactDOM.render(, document.getElementById('root'));\n","module.exports = __webpack_public_path__ + \"static/media/digit.6c41178d.webp\";","const apiUrl = process.env.REACT_APP_API_URL;\nconst paymentOptions =\n process.env.REACT_APP_USE_PAYMENT === 'true' ? true : false;\n\nmodule.exports = {\n apiUrl,\n paymentOptions,\n};\n"],"sourceRoot":""}