{"version":3,"sources":["serviceWorker.ts","History.ts","Login/Redux/Reducers.ts","User/Redux/Reducers.ts","Contentful/ContentfulClient.ts","Contentful/Calls/GetEntryCall.ts","MembershipForm.ts","Constants/CheckoutStates.ts","EditMemberDetailsForm.ts","ReferMembershipForm.ts","Guests/Redux/Reducers.ts","Information/Redux/Reducers.ts","Calendar/Redux/Reducers.ts","Shared/Redux/Reducers.ts","Account/Redux/Reducers.ts","Modal/Redux/Reducers.ts","ParQForm/Redux/Reducers.ts","ParQFormInputs.ts","RootReducer.ts","Login/Redux/ActionTypes.ts","User/Redux/ActionTypes.ts","Account/Redux/ActionTypes.ts","Guests/Redux/ActionTypes.ts","Information/Redux/ActionTypes.ts","Calendar/Redux/ActionTypes.ts","Shared/Redux/ActionTypes.ts","Modal/Redux/ActionTypes.ts","ParQForm/Redux/ActionTypes.ts","i18n.ts","Shared/Components/Presentational/Icons.tsx","Shared/Components/Presentational/Buttons.tsx","ErrorBoundary.tsx","Shared/Components/Presentational/ResponsiveViews.tsx","Api/ApiService.ts","Api/Calls/ApiCall.ts","Api/Calls/PostLoginApiCalls.ts","Constants/Clients.ts","Constants/UserRoles.ts","Api/Calls/GetMyContactDetailsCall.ts","Api/Calls/PostMyContactDetailsCall.ts","Api/Calls/PostSetPasswordCall.ts","Api/Calls/GetMarketingPreferencesCall.ts","Api/Calls/PostMarketingPreferencesCall.ts","Api/Calls/GetShowMembershipPromptCall.ts","Api/Calls/PostDontShowAgainMembershipModalCall.ts","Api/Calls/GetOwnerMembershipAvailabilityCall.ts","User/Redux/ActionCreators.ts","Login/Redux/ActionCreators.ts","Shared/Components/Presentational/Widget.tsx","Constants/Routes.ts","Shared/Components/Presentational/Toggle.tsx","Shared/Components/Presentational/Calendar.tsx","Home/Components/Presentational/CalendarWidget.tsx","Home/Components/Presentational/WelcomeMessageWidget.tsx","Shared/Components/Presentational/Alert.tsx","Home/Components/Presentational/MenuWidget.tsx","Shared/Hooks/useAlert.ts","Shared/Components/Presentational/Modal.tsx","Calendar/Components/Presentational/CalendarItemDetailsModal.tsx","Calendar/Components/Container/CalendarItemDetails.tsx","Shared/Decorators/Feature.tsx","Constants/Features.ts","Calendar/Components/Presentational/CalendarList.tsx","Api/Calls/PostAddBookingApiCall.ts","Contentful/TagsFilter.ts","Contentful/Calls/GetParkCall.ts","Contentful/Calls/GetParkEventsCall.ts","Contentful/Calls/GetParkOffersCall.ts","Calendar/Redux/ActionCreators.ts","Calendar/Components/Container/CalendarListWidget.tsx","Shared/Components/Presentational/FeatureToggle.tsx","Shared/Components/Presentational/NavOption.tsx","Api/Calls/PostDownloadInvoiceCall.ts","Account/Hooks/useDownloadInvoice.ts","Shared/Utilities/DateUtils.ts","Shared/Utilities/TransactionUtils.ts","Home/Components/Presentational/TransactionItem.tsx","Shared/Components/Presentational/Spinner.tsx","Api/Calls/PostTransactionSearchCall.ts","Home/Components/Presentational/TransactionWidget.tsx","Calendar/Components/Container/MyCalendarListHeader.tsx","Shared/Components/Presentational/Containers.tsx","Contentful/Calls/GetOutletPromotionsCall.ts","Calendar/Components/Presentational/ParkRestaurantButton.tsx","Calendar/Components/Container/ParkRestaurantsModal.tsx","Contentful/RichTextOptions.tsx","Calendar/Components/Presentational/RestaurantDetails.tsx","Calendar/Components/Container/RestaurantDetailModal.tsx","Contentful/Calls/GetOutletMenusCall.ts","Shared/Utilities/Validation.ts","Api/Calls/GetRestaurantAvailabilityCall.ts","Constants/Honorifics.ts","Api/Calls/GetRestaurantSessionsCall.ts","Shared/Components/Presentational/NativeDatePicker.tsx","Shared/Components/Presentational/SelectableChip.tsx","Shared/Components/Presentational/DropdownList.tsx","Calendar/Components/Presentational/BookTableForm.tsx","Constants/Calendar/RestaurantReservationModals.ts","Api/Calls/PostBookTableCall.ts","Calendar/Components/Container/BookTableModal.tsx","Calendar/Components/Presentational/ReservationLinksWidget.tsx","Contentful/Calls/GetImportantInformationCall.ts","Contentful/Calls/GetParkFAQsCall.ts","Contentful/Calls/GetParkInformationCall.ts","Information/Redux/ActionCreators.ts","Calendar/Components/Container/ReservationLinks.tsx","Home/Components/Presentational/HomePage.tsx","Home/Components/Presentational/DropdownListWidget.tsx","Home/Components/Presentational/HomePage.mobile.tsx","Api/Calls/PostPassesSearchCall.ts","Api/Calls/PostAddCarPassesCall.ts","Api/Calls/GetParkPassTypesCall.ts","Api/Calls/PostAddSeasonPassesCall.ts","Api/Calls/PostAddShortStayPassesCall.ts","Api/Calls/DeleteCarPassCall.ts","Api/Calls/DeleteShortStayPassCall.ts","Api/Calls/PutRenewSeasonPassesCall.ts","Api/Calls/DeleteSeasonPassCall.ts","Api/Calls/PostAnalyzeFaceCall.ts","Api/Calls/GetPassPhotoSizeLimit.ts","Api/Calls/PostAddMembershipCall.ts","Api/Calls/GetMembershipsCall.ts","Api/Calls/GetAddMembershipByIdCall.ts","Api/Calls/PostAgeVerificationFileCall.ts","Api/Calls/GetEditMemberDetailsByIdCall.ts","Api/Calls/PostUpdateEditMemberDetailsCall.ts","Api/Calls/PostCreateMembershipBasket.ts","Constants/MembershipMappedStates.ts","Constants/MembershipMappingStatesOrder.ts","Api/Calls/DeleteMembershipCall.ts","Contentful/Calls/GetMembershipTypes.ts","Api/Calls/GetReferralCall.ts","Api/Calls/PostAssociateMembershipWithReferredUserCall.ts","Api/Calls/FilterMembershipTermTimesForAberafonOwnersCall.ts","Guests/Redux/ActionCreators.ts","Shared/Components/Presentational/Labels.tsx","Shared/Components/Presentational/MobileSideNav.tsx","Shared/Components/Presentational/ContactModal.tsx","Shared/Components/Presentational/HomeButton.tsx","Shared/Components/Presentational/Header.tsx","Shared/Components/Container/HeaderContainer.tsx","Shared/Components/Presentational/PasswordRequirements.tsx","Modal/Components/Presentational/MyContactDetailsModal.tsx","Modal/Components/Container/MyContactDetails.tsx","Api/Calls/PostSearchLodgeBookingsCall.ts","Modal/Components/Presentational/MyMembershipsCreatePromptModal.tsx","Contentful/Calls/GetHTMLContentBlockCall.ts","Modal/Components/Container/MyMembershipsCreatePrompt.tsx","Home/Components/Container/Home.tsx","Shared/Components/Presentational/MemberMobileSideNav.tsx","Shared/Components/Container/MemberHeader.tsx","Shared/Components/Presentational/Grid.tsx","Contentful/Calls/GetNewsArticlesCall.ts","Information/Components/Presentational/NewsCard.tsx","Information/Components/Container/NewsCardContainer.tsx","Modal/Components/Container/ReferredCreateMembershipModal.tsx","Home/Components/Container/MemberHomePage.tsx","Shared/Components/Presentational/Backgrounds.tsx","Shared/Components/Presentational/Version.tsx","Shared/Environment.tsx","Login/Components/Presentational/LoginPopup.tsx","Constants/Login/CustomerPortalUrls.ts","Login/Components/Presentational/LoginPage.tsx","Login/Components/Presentational/WelcomePage.mobile.tsx","Login/Components/Presentational/LoginPage.mobile.tsx","Contentful/Calls/GetParksCall.ts","Contentful/Calls/GetSettingCall.ts","Login/Components/Container/Login.tsx","ProtectedRoute.tsx","Shared/Components/Presentational/Fab.tsx","Api/Calls/GetHotTubServiceTypesCall.ts","Api/Calls/GetBookingTypesCall.ts","Calendar/Components/Presentational/AddBookingModalBookingForm.tsx","Shared/Components/Presentational/Chip.tsx","Calendar/Components/Presentational/AddBookingModalMobileNumbersForm.tsx","Calendar/Components/Presentational/AddBookingModalVehicleAccessForm.tsx","Constants/Calendar/AddBookingsModalForms.ts","Calendar/Components/Presentational/AddBookingModal.tsx","Calendar/Components/Presentational/SubletBookingInfoModal.tsx","Calendar/Components/Presentational/MyCalendarPage.tsx","Calendar/Components/Presentational/MyCalendarPage.mobile.tsx","Constants/PassFunctionalityTypes.ts","Calendar/Components/Container/MyCalendar.tsx","Constants/TableFilterPosition.ts","Shared/Components/Presentational/Table.tsx","Guests/Components/Presentational/PassesFilter.tsx","Guests/Components/Presentational/AddPassModalHeader.tsx","Guests/Components/Presentational/AddPassModalFooter.tsx","Shared/Components/Presentational/ImageCropper.tsx","Guests/Components/Presentational/AddPassPhotoFooter.tsx","Guests/Components/Presentational/AddPassPhotoHeader.tsx","Guests/Components/Presentational/AddPassPhoto.tsx","Shared/Utilities/FileUtils.ts","Guests/Components/Presentational/AddPassField.tsx","Guests/Components/Presentational/AddPassRow.tsx","Guests/Components/Presentational/PassFields/ShortStayPassFields.tsx","Guests/Components/Presentational/PassFields/CarPassFields.tsx","Guests/Components/Presentational/PassFields/SeasonPassFields.tsx","Guests/Components/Presentational/AddPassModal.tsx","Guests/Components/Container/AddPass.tsx","Shared/Components/Presentational/Description.tsx","Api/Calls/PostGetSeasonPassesCall.ts","Guests/Components/Presentational/RenewPassModal.tsx","Guests/Components/Container/RenewPass.tsx","Guests/Components/Presentational/MyGuestsPage.tsx","Guests/Components/Presentational/MyGuestsPage.mobile.tsx","Constants/PassStatus.ts","Guests/Components/Presentational/PassStatusColumnCellRenderer.tsx","Guests/Components/Presentational/RemovePassColumnCellRenderer.tsx","Guests/Components/Presentational/CoOwnerAccessCellRenderer.tsx","Guests/Components/Presentational/PassRenewColumnCellRenderer.tsx","Guests/Components/Presentational/PassNameMobileColumnCellRenderer.tsx","Guests/Components/Presentational/PassStatusMobileColumnCellRenderer.tsx","Api/Calls/PutUpdateSeasonPassCall.ts","Api/Calls/GetCoOwnerAccessTypesCall.ts","Guests/Components/Container/MyGuests.tsx","Guests/Components/Presentational/MyMembershipsContainers/FinaliseContainer.tsx","Constants/MembershipStates.ts","Guests/Components/Presentational/MyMembershipsContainers/MembershipDashboardCard.tsx","Guests/Components/Presentational/MyMembershipsContainers/GenericDisplayContainer.tsx","Shared/Components/Presentational/RemainingMemberships.tsx","Guests/Components/Presentational/MyMembershipsContainers/FinaliseDisplayContainer.tsx","Modal/Components/Presentational/ReferMembershipsPromptModal.tsx","Modal/Components/Container/ReferMembershipsPrompt.tsx","Modal/Components/Container/DeleteMembershipPromptModal.tsx","Api/Calls/GetMembershipPaymentSummaryCall.ts","Api/Calls/CheckFriendMembershipQuotaCall.ts","Modal/Components/Container/FriendMembershipQuotaModal.tsx","Guests/Components/Presentational/MyMembershipsContainers/ExpiredMembershipCard.tsx","Guests/Components/Presentational/MyMembershipsContainers/ExpiredMembershipContainer.tsx","Constants/MembershipTypes.ts","Guests/Components/Container/MyMembershipsDashboard.tsx","Shared/Components/Presentational/Details.tsx","Information/Components/Presentational/ImportantInformationWidget.tsx","Information/Components/Presentational/MyParkAndHomePage.tsx","Information/Components/Presentational/MyParkAndHomePage.mobile.tsx","Information/Components/Container/MyParkAndHome.tsx","Api/Calls/PostDownloadStatementCall.ts","Api/Calls/PostDownloadStatementPdfCall.ts","Api/Calls/GetMyBankDetailsCall.ts","Api/Calls/GetHaulfrynBankDetailsCall.ts","Api/Calls/PostConfirmPaymentCall.ts","Account/Hooks/useMyAccountPage.ts","Account/Components/Presentational/MyBankDetailsModal.tsx","Account/Components/Container/MyBankDetails.tsx","Shared/Components/Presentational/DateColumnCellRenderer.tsx","Account/Components/Presentational/TransactionAmountCellRenderer.tsx","Account/Components/Presentational/MakeAPaymentModalDefault.tsx","Api/Calls/GetCountriesCall.ts","Api/Calls/PostMakeAPaymentCall.ts","Account/Components/Presentational/MakeAPaymentModalCardAddress.tsx","Account/Components/Container/MakeAPaymentModalCardAddressContainer.tsx","Account/Components/Presentational/MakeAPaymentModalCard.tsx","Account/Components/Presentational/MakeAPaymentModalBank.tsx","Account/Components/Presentational/MakeAPaymentModal.tsx","Account/Components/Presentational/TransactionBalance.tsx","Contentful/Calls/GetTransactionCategoriesCall.ts","Account/Components/Presentational/TransactionFilter.tsx","Account/Components/Presentational/TransactionInvoiceCellRenderer.tsx","Account/Components/Presentational/TransactionTypeCellRenderer.tsx","Account/Components/Presentational/MyAccountPage.tsx","Account/Components/Presentational/MyAccountPage.mobile.tsx","Account/Components/Presentational/TransactionTypeMobileCellRenderer.tsx","Account/Components/Container/MyAccount.tsx","Account/Redux/ActionCreators.ts","RequestsAndQueries/Components/Presentational/TicketList.tsx","Constants/FreshDeskSourceTypes.ts","RequestsAndQueries/Components/Presentational/SelectedTicketTable.tsx","RequestsAndQueries/Components/Presentational/ConversationList.tsx","RequestsAndQueries/Components/Presentational/MyRequestsAndQueriesPage.tsx","RequestsAndQueries/Components/Presentational/TicketListMobile.tsx","RequestsAndQueries/Components/Presentational/MyRequestsAndQueriesPage.mobile.tsx","Api/Calls/PostFreshDeskTicketsSearchCall.ts","Api/Calls/PostFreshDeskConversationSearchCall.ts","Api/Calls/PostFreshDeskTicketReplyCall.ts","Shared/Components/Presentational/ShortenedTextCellRenderer.tsx","RequestsAndQueries/Components/Presentational/QuickReplyModal.tsx","RequestsAndQueries/Components/Container/MyRequestsAndQueries.tsx","Shared/Components/Presentational/Layout.tsx","DefaultLayoutRoute.tsx","Api/Calls/PostConfirmEmailCall.ts","Api/Calls/PostResendConfirmEmailCall.ts","ConfirmEmail.tsx","Api/Calls/PostForgotPasswordEmailCall.ts","Api/Calls/PostResetPasswordCall.ts","ForgottenPassword.tsx","Information/Components/Presentational/ImportantInformationPage.tsx","Information/Components/Presentational/ImportantInformationPage.mobile.tsx","Information/Components/Container/ImportantInformation.tsx","Contentful/Calls/GetNewsArticleCall.ts","Information/Components/Presentational/ParkNewsPage.tsx","Information/Components/Presentational/ParkNewsPage.mobile.tsx","Information/Components/Container/ParkNews.tsx","Api/Calls/PostRegisterCall.ts","Login/Components/Presentational/RegisterDetails.tsx","Login/Components/Presentational/RegisterPassword.tsx","Api/Calls/PostResendConfirmAccountCall.ts","Login/Components/Presentational/RegisterPopup.tsx","Login/Components/Presentational/RegisterPage.tsx","Login/Components/Presentational/RegisterPage.mobile.tsx","Login/Components/Container/Register.tsx","Api/Calls/PostConfirmAccountCall.ts","ConfirmAccount.tsx","Shared/Components/Presentational/CookiePopup.tsx","Guests/Components/Presentational/AddMembershipSubPages/FormInputs/DateInputField.tsx","Guests/Components/Presentational/AddMembershipSubPages/FormInputs/InputField.tsx","Api/Calls/GetMembershipEndDateCall.ts","Guests/Components/Presentational/AddMembershipSubPages/PersonalDetails.tsx","Shared/Components/Presentational/Breadcrumb.tsx","Guests/Components/Presentational/AddMembershipSubPages/SelectMembershipType.tsx","Shared/Components/Presentational/FileUpload.tsx","Guests/Components/Presentational/AddMembershipSubPages/AgeVerification.tsx","Guests/Components/Presentational/AddMembershipSubPages/Vehicles.tsx","Api/Calls/GetPhotoPassCall.ts","Guests/Components/Presentational/AddMembershipSubPages/Summary.tsx","Modal/Components/Presentational/MembershipFlowContactPromptModal.tsx","Modal/Components/Container/MembershipFlowContactPrompt.tsx","Guests/Components/Presentational/AddMembershipSubPages/FinalisePage.tsx","Modal/Components/Presentational/ExitPromptModal.tsx","Modal/Components/Container/ExitPrompt.tsx","Shared/Components/Presentational/SimpleImageCropper.tsx","Api/Calls/GetPhotoByMemberIdCall.ts","Api/Calls/Member/UpdateMemberPhotoCall.ts","Guests/Components/Presentational/AddMembershipSubPages/PhotoUpload.tsx","Guests/Components/Container/AddMembership.tsx","Guests/Components/Presentational/ManageActiveMemberSubPages/ManageDigitalPass.tsx","Guests/Components/Container/ManageActiveMember.tsx","Guests/Components/Presentational/ReferMembershipSubPages/MemberDetails.tsx","Modal/Components/Presentational/ReferralSentAlertModal.tsx","Modal/Components/Container/ReferralSentAlert.tsx","Api/Calls/PostReferralMembership.ts","Modal/Components/Presentational/ErrorPromptModal.tsx","Modal/Components/Container/ErrorPrompt.tsx","Guests/Components/Container/ReferMembership.tsx","Shared/Components/Presentational/RadioButtonGroup.tsx","Api/Calls/PostSetParQInformation.ts","ParQForm/Components/Container/ParQForm.tsx","ParQForm/Redux/ActionCreators.ts","Guests/Components/LandingPages/PaymentSuccess.tsx","Guests/Components/LandingPages/PaymentCancelled.tsx","Api/Calls/GetStripeMembershipCheckoutUrlCall.ts","Guests/Components/LandingPages/DocuSignSigned.tsx","Api/Calls/PostSetPaymentMethodCall.ts","Guests/Components/Presentational/AddMembershipSubPages/MemberBreakdownContainer.tsx","Constants/FrequencyFormula.ts","Guests/Components/Presentational/AddMembershipSubPages/MemberPaymentContainer.tsx","Api/Calls/GetUpdateTermsAndConditionsSignedDateCall.ts","Api/Calls/GetStripeCheckoutUrlsCall.ts","Guests/Components/Presentational/AddMembershipSubPages/SelectPayment.tsx","Guests/Components/LandingPages/MembershipAgreement.tsx","Guests/Components/LandingPages/InvalidSessionPage.tsx","Api/Calls/PostConfirmMemberAccountCall.ts","Login/Components/Container/ConfirmMembership.tsx","Guests/Components/Presentational/AddMembershipSubPages/SelectMembershipTypeForm.tsx","Guests/Components/Container/RenewMembership.tsx","Guests/Components/Presentational/AddMembershipSubPages/RenewalSummary.tsx","Api/Calls/GetMemberIdByCall.ts","Api/Calls/PostMembershipRenewalCall.ts","Api/Calls/PostPhotoFacialRecognitionCheckCall.ts","Api/Calls/Member/GetMemberPersonalDetailsCall.ts","Guests/Components/Presentational/ManageActiveMemberSubPages/PersonalDetailsForm.tsx","Api/Calls/Member/UpdateMemberPersonalDetailsCall.ts","Guests/Components/Presentational/AddMembershipSubPages/UpdateMemberPersonalDetails.tsx","Guests/Components/Presentational/AddMembershipSubPages/FormFooter.tsx","Api/Calls/Member/GetMemberVehiclesCals.ts","Guests/Components/Presentational/AddMembershipSubPages/VehiclesForm.tsx","Api/Calls/Member/UpdateMemberVehiclesCall.ts","Guests/Components/Presentational/AddMembershipSubPages/UpdateMemberVehicles.tsx","Guests/Components/Container/EditMember.tsx","App.tsx","index.tsx"],"names":["Boolean","window","location","hostname","match","createHistory","initialState","loggingIn","loggedIn","loginFailureMessage","undefined","onWelcomePage","sessionHasExpired","loginMethod","loginEmail","ownerId","firstname","lastName","phoneNumber","userRoles","hasOwnMembership","lodges","lodge","park","myContactDetails","marketingPreferences","isGettingContactDetails","gettingContactDetailsError","isSavingContactDetails","updatingContactDetailsError","isUpdatingPassword","isUpdatePasswordSuccessModalOpen","updatingPasswordError","showMembershipPrompt","isGettingShowMembershipPrompt","gettingShowMembershipPromptError","isSettingDontShowAgainMembershipModal","settingDontShowAgainMembershipModalError","isGettingOwnerMembershipAvailability","gettingOwnerMembershipAvailabilityError","ownerMembershipsAvailability","membershipNumber","canRefer","canReferWithMemberships","canReferWithOutMemberships","forcedToMakeMembership","permissionCallSuccess","decommissionedParks","ContentfulClient","Contentful","space","process","accessToken","environment","GetEntryCall","id","a","getEntry","result","CheckoutStates","MembershipForm","contentfulMembershipTypeId","myHaulfrynAccess","membershipState","startDate","transferredMemberships","marketing","firstName","dateOfBirth","email","phonenumber","vehicles","payment","photoURL","contentfulAgeBracketPriceId","ageVerificationSent","termFormula","hasValueErrorForm","errors","this","value","Date","membershipData","membership","Id","ContentfulMembershipTypeId","Payment","PhotoURL","MyHaulfrynAccess","MembershipState","StartDate","Marketing","FirstName","LastName","DateOfBirth","Email","PhoneNumber","Vehicles","vehicle","concat","registration","Registration","description","Description","ContentfulAgeBracketPriceId","duration","label","fields","termDescription","AgeVerificationSent","EditMemberDetailsForm","autoRenew","editMemberDetails","AutoRenew","ReferMembershipForm","contentfulmembershipTypeId","allowFurtherReferrals","TransferredMemberships","AllowFurtherReferrals","data","length","passes","Dtos","Total","passesFilter","Page","PageSize","SortField","SortDirection","isLoadingParkPassTypes","selectedParkPassType","parkPassTypes","PassPhotoSizeLimitInKb","analyzingPassPhotoError","parkPassTypeError","passesSearchError","isSearchingPasses","successfulPasses","isAddPassModalOpen","isAddPassPhotoModalOpen","isSavingPass","isFetchingPassPhotoSizeLimit","isAnalyzingPassPhoto","isAddPassSuccessfulModalOpen","isAddPassErrorModalOpen","isRenewPassModalOpen","isRenewPassSuccessfulModalOpen","isRenewPassErrorModalOpen","isDeletePassModalOpen","isAnalyzingPassPhotoSuccessful","isAddingMembership","addingMembershipError","addingMembershipErrorMessage","membershipFormPage","referMembershipFormPage","newMembership","referMembership","membershipForm","membershipColumns","fieldName","displayName","isGettingMemberships","gettingMembershipsFailure","memberships","isGettingReferredMemberships","gettingReferredMembershipsFailure","filteredMemberships","isGettingAddMembershipById","gettingAddMembershipByIdError","gettingAddMembershipByIdSuccess","membershipBasket","basketId","showDraftMemberships","showExpiredMemberships","ageVerificationFile","File","isAddingAgeVerificationImage","addingAgeVerificationImageSuccess","addingAgeVerificationImageError","addingAgeVerificationImageErrorMessage","editMemberDetailsForm","isGettingEditMemberDetailsById","gettingEditMemberDetailsByIdSuccess","gettingEditMemberDetailsByIdError","isUpdatingEditMemberDetails","updateEditMemberDetailsSuccess","updateEditMemberDetailsFailure","isCreatingMembershipBasket","createMembershipBasketSuccess","createMembershipBasketFailure","validateAndUploadPhoto","sessionId","docuSignMessage","membershipContainers","finaliseNowContainers","finaliseLaterContainers","referredMemberships","paymentSummary","checkoutSession","state","Expired","isPaymentRequired","contentfulMembershipTypes","useMemberships","termDurations","lodgeDetails","lodgeId","descrption","details","lodgeDetailsList","isContactParkModalOpen","faqs","isLoadingFaqs","gettingFaqsError","importantInformation","gettingInformationError","isLoadingInformation","selectedImportantInformationId","news","gettingNewsError","isLoadingNews","selectedNewsItemId","isLoadingParkInformation","parkInformation","parkInformationError","events","offers","eventsLoading","offersLoading","selectedCalendarWidget","pageNumber","isEventDetailsModalOpen","isAddBookingModalOpen","isAddingBooking","isAddBookingSuccessModalOpen","addBookingErrorMessage","isHeaderOpen","transactions","transactionFilter","FromDate","moment","startOf","subtract","format","ToDate","AccountId","AccountNumber","TransactionCategory","isSearchingTransactions","transactionSearchError","isMyBankDetailsModalOpen","myBankDetails","isGettingBankDetails","gettingBankDetailsError","isDownloadingStatement","downloadStatementError","isDownloadingPdfStatement","downloadPdfStatementError","isMakeAPaymentModalOpen","haulfrynBankDetails","isGettingHaulfrynBankDetails","paymentDetails","isOpen","contactHaulfryn","exit","error","referralSent","updatePasswordSuccess","marketingPreferencesWarningModalIsOpen","membershipflowContactprompt","type","membershipContactPromptNextStep","nextStep","membershipKey","parQFormDTO","parQFormInputs","heartConditionHistory","chestPainActivity","chestPainNoActivity","loseBalance","boneJointProblem","bloodPressureHeartMedication","otherReason","otherReasonComment","setParQInformationRequest","setParQInformationSuccess","setParQInformationFailure","rootReducer","combineReducers","login","action","payload","loginDetails","loginFailureMessaage","user","currentUserDetails","AccountBalance","gettingShowMembershipPrompt","isGettingOwnerMembershipAvailabiliy","guests","ParkPassTypeId","FunctionalityCode","LodgeId","isAddingAgeVerifcationImage","gettingMembershipsError","gettingMembershipsSuccess","gettingReferredMembershipsError","gettingReferredMembershipsSuccess","isUdpatingEditMemberDetails","updateEditMemberDetailssuccess","Active","filteredTypes","information","calendar","application","account","modal","parQForm","i18nPromise","i18n","use","XHR","LanguageDetector","initReactI18next","Backend","init","interpolation","escapeValue","lng","whitelist","debug","react","wait","fallbackLng","load","backend","backends","LocalStorageBackend","backendOptions","prefix","expirationTime","versions","store","sessionStorage","loadPath","changeLanguage","registerLocale","enGB","setDefaultLocale","ClickableIcon","props","className","onClick","clickAction","icon","size","Component","EditIcon","classNames","disabled","faEdit","PreviousIcon","faChevronLeft","NextIcon","faChevronRight","TransactionIcon","faIcon","iconName","Icon","split","replace","library","add","fas","far","style","color","backgroundColor","BackgroundColour","Button","isLoading","height","fontSize","width","margin","text","alternateText","PrimaryButton","SecondaryButton","children","TertiaryButton","OutlineButton","BackLinkButton","href","faArrowAltCircleLeft","BackButton","LinkButton","ModalBackButton","onBackButtonClick","faArrowLeft","ErrorBoundary","hasError","errorInfo","history","push","faExclamationCircle","useIsDesktop","useState","innerWidth","setWidth","mounted","setMounted","useEffect","listener","addEventListener","removeEventListener","Mobile","isDesktop","Desktop","Get","request","promise","axios","get","url","headers","catch","err","response","status","logoutOn401","dispatch","logout","Post","properties","post","body","Put","put","Delete","delete","ApiCall","isExternal","token","getItem","GetApiCall","params","objToQueryString","obj","keyValuePairs","key","encodeURIComponent","toString","join","PostApiCall","JSON","stringify","PutApiCall","DeleteApiCall","DeleteApiCall2","PostEmailLoginApiCall","PostGoogleLoginApiCall","PostFacebookLoginApiCall","Clients","Owner","UserRoles","name","find","role","GetMyContactDetailsCall","PostMyContactDetailsCall","newDetails","PostSetPasswordCall","setPasswordDto","GetMarketingPreferencesCall","PostMarketingPreferencesCall","newMarketingPreferences","GetShowMembershipPromptCall","PostDontShowAgainMembershipModalCall","GetOwnerMembershipAvailabilityCall","setUserLodge","setUserPark","getMyContactDetails","getState","then","getMarketingPreferences","success","console","log","getOwnerMembershipAvailability","ownerAvailability","allocated","Allocated","numberUsed","NumberUsed","available","Available","r","getPermissionsFromUserRoles","password","userLogin","Password","ClientName","loginCall","LoginEmail","OwnerId","Lodges","HasOwnMembership","map","userRole","Name","contentfulUserTypeId","ContentfulUserTypeId","selectedLodge","LodgeName","ContractEndDate","HasSublettings","AccountNo","RecentTransactions","Balance","selectedPark","parkCode","ParkCode","parkName","ParkName","parkFeatures","ParkFeatures","currentLodgeId","l","IsOwner","MembershipNumber","LodgeDetails","setItem","TokenDetails","AccessToken","failurePayload","Message","trim","sessionExpired","removeItem","userRoleDTOs","ownerMembershipAvailability","userType","filter","referralsRequireAllocatedMemberships","availableMembershipTypes","forceCreateMemberForThemselves","Widget","gridColumnStart","position","columnIndex","msGridColumn","gridColumnEnd","columnSpan","msGridColumnSpan","gridRowStart","rowIndex","msGridRow","gridRowEnd","rowSpan","msGridRowSpan","containerClassName","contentClassName","contentsStyle","WidgetList","WidgetListItem","WidgetHeader","title","LinkWidget","to","ClickableWidget","MyAccount","Toggle","active","customClassName","toggleClicked","newValue","setState","onChange","localizer","momentLocalizer","Calendar","DateCellWrapper","React","Children","child","cloneElement","onTouchEnd","event","preventDefault","onSelect","t","selectable","min","minDate","max","maxDate","culture","e","canShowEvent","temp","Object","assign","end","dateString","substr","resources","resourceIdAccessor","resourceTitleAccessor","components","dateCellWrapper","onSelectSlot","eventWrapper","bind","toolbar","views","month","longPressThreshold","onRangeChange","onNavigate","defaultDate","drilldownView","onDoubleClickEvent","resource","canToggle","toggleValue","toggleChanged","eventWrapperProps","isEndingOnFirstWeekDay","day","isStartOnLastWeekDay","start","onClickEvent","clickableEvents","allDay","continuesPrior","continuesAfter","clickable","toolbarProps","navigate","date","isSameOrBefore","isSameOrAfter","faArrowRight","resourceId","CalendarWidget","currentMonth","WelcomeMessageWidget","left","dangerouslySetInnerHTML","__html","userFirstName","Alert","content","MenuWidget","useSelector","alertTitle","myHaulfrynAlert","alertContent","documentToReactComponents","canShowAlert","useAlert","right","ReactModal","setAppElement","Modal","listen","onRequestClose","shouldCloseOnOverlayClick","onAfterOpen","overlayClassName","ModalHeader","ModalFooter","SuccessModal","onSubmit","closeModal","stopPropagation","importantInfo","faExclamationTriangle","message","buttonText","ErrorModal","ConfirmModal","submitted","onClose","cancelButtonText","confirmButtonText","CalendarItemDetailsModal","useTranslation","calenderItem","item","publicName","subHeading","itemType","bookingPhoneNumber","src","image","file","onError","errorEvent","target","onImageError","alt","termsAndConditions","faFileContract","price","faPoundSign","faInfo","faCalendarAlt","accessibility","faAccessibleIcon","dogFriendly","faPaw","eventTime","faClock","linkButtonText","linkButtonUrl","linkUrl","open","CalendarItemDetails","connect","feature","featureProps","WrappedComponent","WrapperComponent","replacementComponent","featureNames","Array","isArray","features","replacement","featuresFound","fn","includes","Features","Events","Offers","Passes","Memberships","Activities","Spa","Restaurant","News","Transactions","MyRequests","ParkInfo","ContactHaulfryn","LodgesDropdown","OwnerBookings","SubletBookings","CalendarList","selectedItem","openEventDetailsModal","selectedFilter","widgetHeader","canLoadMore","goPrevious","goNext","currentPage","lastPage","eventsOrOffers","x","i","getImageSrc","closeEventDetailsModal","PostAddBookingApiCall","booking","TagsFilter","metadata","tags","audienceTags","Set","forEach","tag","sys","startsWith","has","GetParkCall","content_type","getEntries","items","GetParkEventsCall","page","pageSize","parkDetail","links_to_entry","skip","limit","indexToBeRemoved","removeContent","val","index","splice","GetParkOffersCall","getEvents","getOffers","CalendarListWidget","setPageNumber","prevProps","newPageNumber","fetchData","listItems","eventTotal","Math","ceil","offerTotal","widgetComponents","total","FeatureToggle","Feature","NavOption","iconAlt","PostDownloadInvoiceCall","useDownloadInvoice","invoiceNo","accountId","InvoiceNo","invoice","fileName","FileExtension","byteCharacters","atob","Document","byteNumbers","charCodeAt","byteArray","Uint8Array","blob","Blob","navigator","msSaveOrOpenBlob","URL","createObjectURL","link","document","createElement","setAttribute","appendChild","click","remove","formatDateString","input","formatDate","getAmount","amount","abs","toFixed","TransactionItem","transaction","showDownload","download","TransactionDate","HasInvoice","CategoryKey","Amount","Spinner","PostTransactionSearchCall","TransactionWidget","accountBalance","fetchTransactions","accountNumber","results","balance","setAccountBalance","Routes","withTranslation","selectedWidget","setSelectedWidget","selected","setSelectedCalendarWidget","ButtonContainer","InputContainer","IconLinkContainer","rel","iconSrc","GetOutletPromotionsCall","ParkContentfulId","include","ParkRestaurantButton","restaurant","onRestaurantsFetched","onRestaurantSelected","restaurants","setRestaurants","setIsLoading","setHasError","contentfulPark","OutletPromotionsResult","flatMap","pr","outlets","o","bookAheadDays","bookingHelp","reduce","acc","ar","ObtainRestaurants","RichTextRenderOptions","renderNode","BLOCKS","EMBEDDED_ASSET","node","asset","contentType","RestaurantDetails","menus","openTableBookingModal","isMemberWithOutMembershipNumber","outletType","onlineBookingLink","zonalCode","menu","windowReference","pdf","openMenu","RestaurantDetailModal","restaurantMenus","setRestaurantMenus","ContentfulMenuIds","GetContentfultMenusCall","m","isValidDate","isValid","isUnder10Characters","vehicleValidation","hasValue","isTextOnly","test","isValidEmail","isNotFutureDate","diff","isDateNotInPast","isAfterDate","dateAfter","isAfter","CreateXDaysValidator","days","isValidUKPhoneNumber","search","parseFloat","Honorifics","GetRestaurantAvailabilityCall","restaurantCode","session","numOfAdults","numOfChildren","GetRestaurantSessionsCall","NativeDatePicker","placeholder","invalid","openToDate","tabIndex","valueChanged","currentTarget","toDate","isNaN","getTime","defaultValue","onFocus","SelectableChip","isSelected","itemKey","styles","control","provided","border","isFocused","boxShadow","borderColor","option","singleValue","DropdownList","selectionChanged","options","classNamePrefix","selectedOption","isSearchable","hideSelectedOptions","isDisabled","actionMeta","onSelectionChanged","RestaurantReservationModals","BookTableForm","bookingDetails","setBookingDetails","minBookingDate","maxBookingDate","availableTimeSlots","setAvailableTimeSlots","setAvailableSessions","availableSessions","selectedDate","setSelectedDate","dateValid","setDateValid","selectedTimeSlot","setSelectedTimeSlot","timeSlotMessage","setTimeSlotMessage","isTimeSlotsLoading","setIsTimeSlotsLoading","isSessiosnLoading","setIsSessionsLoading","numberRange","from","_","handleInputChangeEvent","validate","checked","classList","dataset","fallback","required","handleBookingDateChange","handleTimeSlotChange","timeslot","bookingDateString","BookingDate","RestaurantCode","getAvailableSessions","getDate","NumOfAdults","SessionName","NumOfChildren","getAvailableTimeSlots","htmlFor","n","opt","parseInt","placeholderText","dateFormat","as","values","h","Title","maxLength","Surname","v","PostBookTableCall","BookTableModal","defaultBookingDetals","isSubmitting","setIsSubmitting","isSuccessModalOpen","setIsSuccessModalOpen","bookingRefNum","setBookingRefNum","goBack","isFormValid","every","finally","ReservationLinksWidget","None","activeRestaurantReservationModal","setActiveRestaurantReservationModal","setHasRestaurants","selectedRestaurant","setSelectedRestaurant","updateHasRestaurants","useCallback","showHeader","ParkRestaurantsModal","myHaulfrynActivityLabel","myHaulfrynActivityBookingUrl","myHaulfrynSpaBookingUrl","isMember","GetImportantInformationCall","select","htmlContentBlocks","GetParkFAQsCall","faQs","faq","GetParkInformationCall","setLodgeDetails","ld","getParkInformation","ReservationLinks","HomePage","hasSublettings","calendarEvents","Number","DropdownListWidget","defaultItem","HomePageMobile","showMyDetailsLink","openMyContactDetailsModal","onContactHaulfrynClick","contractEndDate","PostPassesSearchCall","PostAddCarPassesCall","GetParkPassTypesCall","PostAddSeasonPassesCall","formData","FormData","itemObject","append","PostAddShortStayPassesCall","DeleteCarPassCall","DeleteShortStayPassCall","passFriendlyName","PutRenewSeasonPassesCall","DeleteSeasonPassCall","PostAnalyzeFaceCall","GetPassPhotoSizeLimit","PostAddMembershipCall","GetMembershipsCall","GetAddMembershipByIdCall","membershipId","PostAgeVerificationFileCall","set","GetEditMemberDetailsByIdCall","PostUpdateEditMemberDetailsCall","PostCreateMembershipBasket","FinaliseStates","DraftStates","ActiveStates","ReferredStates","ExpiredStates","StatesOrder","DeleteMembershipCall","GetMembershipTypesCall","order","GetReferralCall","PostAssociateMembershipWithReferredUserCall","FilterMembershipTermTimesForOwnersFromDecommissionedParksCall","setSelectedPassType","selectedPassType","callback","getPasses","getPassPhotoSizeLimit","PhotoPassSizeLimit","getParkPassTypes","pt","analyzePassPhoto","passPhotoFile","addMembership","getTimezoneOffset","getHours","setMinutes","getMinutes","newReferredMembership","Data","memberId","MemberId","parkId","ParkId","form","associateMembershipWithReferredUser","apiSucceeded","createMembershipBasket","membershipIds","BasketId","getReferredMembershipsByOwner","tempReferrals","referralId","transferredMembershipsCount","usedMembership","availableMemberships","referred1Memberships","getContentfulMembershipTypes","withTerms","membershipTypes","parks","p","code","filterMembershipTypesFromUserTypes","getTermDurations","types","filteredMembershipTypes","distinctTypeIds","indexOf","findIndex","debitsQuota","ageGroup","ageGroups","prices","priceDuration","term","c","dto","membershipTerms","terms","ClickableLabel","MobileSideNav","selectOptions","ReactDOM","createPortal","collapse","when","faTimes","ContactModal","contactDetails","Address","HomeButton","withRouter","setHeaderOpen","isContactHaulfrynModalOpen","setContactHaulfrynModalOpen","backgroundContainerClassName","backgroundImgSrc","top","pathname","faBars","faUserCircle","logoutClick","timeout","distance","faSignOutAlt","PasswordRequirements","requirements","onPasswordChange","requirement","PasswordRequirement","faCheckCircle","MyContactDetailsModal","isEdit","setIsEdit","setButtonText","isContactDetailsFormValid","setIsContactDetailsFormValid","isPasswordFormValid","setIsPasswordFormValid","passwordsMatch","setPasswordsMatch","isOwner","isEmail","currentTab","setCurrentTab","PendingEmailAddress","pendingEmailAddress","setPendingEmailAddress","dayPhone","DaytimeTelephone","evePhone","EveningTelephone","mobilePhone","MobileTelephone","emailAddr","CommunicationEmailAddress","newContacDetails","setnewContacDetails","ContactMethodType","CanUseAddress","CanUseEmail","CanUseMobilePhone","CanUseSMS","CanUSePhoneNumberDayTime","CanUsePhoneNumberEvening","setMarketingPreferences","formValidDetails","setnewFormValidDetails","currentPassword","setCurrentPassword","newPassword","setNewPassword","isNewPasswordValid","setIsNewPasswordValid","confirmPassword","setConfirmPassword","marketingPreferencesChanged","setMarketingPreferencesChanged","marketingPreferencesDeselected","setIsAnyMarketingPreferencesDeselected","originalPreferences","newPreferences","entries","anyMarketingPreferencesChanged","keys","anyMarketingPreferencesDeselected","handlePrimaryClick","onUpdateContactDetailsClick","EmailAddress","prev","onUpdatePasswordClick","NewPassword","CurrentPassword","updateMarketingPreferences","getInput","handleInputChange","persist","inputName","handleMarketingPreferenceInputChange","handlePasswordChange","formContents","defaultIndex","show","toLowerCase","AddressLine1","AddressLine2","AddressLine3","AddressLine4","PostCode","autoComplete","MyContactDetails","initiateUpdateMarketingPreferences","showWarning","toggleMarketingPreferencesWarningModal","updateContactDetails","updatePassword","toggleUpdatePasswordSuccessModal","confirmed","closeSuccessModal","newContactDetails","updateMyContactDetails","passwordDetails","PostSearchLodgeBookingsCall","MyMembershipsCreatePromptModal","setOpen","handleClick1","clearMembershipForm","updateMembershipFormPage","handleClick2","handleClick3","setDontShowAgainMembershipModal","modalText","GetHTMlContentBlockCall","contentfulObject","MyMembershipsCreatePrompt","getModalText","contentLoaded","Promise","all","Home","searchBookings","endOf","bookings","calendarBookings","IsOwnerBooking","IsPendingBooking","onSelectedLodgeChanged","setContentfulMembershipTypes","setCalendarFilter","getShowMembershipPrompt","isEmptyOrUndefined","lodgeOptions","showContactDetailsModal","setSelectedNewsItem","closeMyContactDetailsModal","showCreateMembershipsPrompt","setSelectedPark","setSelectedLodge","newBalance","MemberMobileSideNav","Grid","display","gridTemplateColumns","columnCount","gridTemplateRows","rowCount","msGridColumns","msGridRows","NewsCard","navigateTo","setNavigateTo","published","setNews","GetNewsArticlesCall","ReferredCreateMembershipModal","setModalText","setContentLoaded","modalOpen","setModalOpen","DesktopContents","padding","overflowY","MobileContents","VerticalBackground","ImageBackground","Version","googleClientId","env","GoogleClientId","sagepayUrl","FacebookAppId","SagepayUrl","LoginPopup","emailAddress","isRegister","handleChange","handleSubmit","responseGoogle","responseFacebook","loginClick","tokenId","useParkSelection","availableParks","parkSelected","parksLoading","selectedParkCode","clientId","render","renderProps","isLoggingIn","onSuccess","onFailure","CustomerPortalUrls","LoginPage","getWelcomeText","welcomeText","WelcomePageMobile","goToLoginClick","LoginPageMobile","autoLoad","GetParksCall","GetSettingCall","settings","isLoggedIn","query","URLSearchParams","useLocation","selectedParkContentfulCode","redirectUrl","contentfulParks","setContentfulParks","setSelectedParkCode","selectPark","setSelectPark","setParksLoading","setAvailableParks","getParks","selectParkString","dropwDownParks","customerPortalUrl","parkOption","getPortalUrlFromParkCode","origin","selectedContentfulPark","Url1","Url2","ProtectedRoute","path","protectedComponent","encodeURI","Fab","GetHotTubServiceTypesCall","GetBookingTypesCall","AddBookingModalBookingForm","hotTubServiceTypes","setHotTubServiceTypes","bookingTypes","setBookingTypes","setStartDate","endDate","setEndDate","modalCalendarDate","setModalCalendarDate","startDateValid","setStartDateValid","endDateValid","setEndDateValid","htst","bt","popaulateInitialData","range","setBookingFilter","oldFilter","hasBookingConflict","handleStartDateInputChange","date2","startDateChange","validResult","setDatesValid","handleEndDateInputChange","endDateChange","bookingTypeChange","bookingTypeId","hotTubServiceTypeChange","hotTubServiceTypeId","Chip","onRemove","chips","AddBookingModalMobileNumbersForm","isChipValid","chipValue","handleChipsChange","mobileNumbers","setHasPendingMobileNumber","setMobileNumbers","invalidMobileNumbers","setInvalidMobileNumbers","createChipKeys","shouldRenderSuggestions","pendingChipValue","renderChip","hasPendingMobileNumber","showMobileNumbersError","carRegistrationNumber1","carRegistrationNumber1Change","toUpperCase","carRegistrationNumber2","carRegistrationNumber2Change","AddBookingsModalForms","BookingForm","MobileNumbersForm","VehicleAccessForm","AddBookingModal","EndDate","HotTubServiceTypeId","BookingTypeId","PhoneNumbers","CarRegistrationNumber1","CarRegistrationNumber2","newBookingDetails","setnewBookingDetails","isNoVehiclesModalOpen","setIsNoVehiclesModalOpen","isNoPhoneNumbersModalOpen","setIsNoPhoneNumbersModalOpen","setCalendarEvents","datesValid","modalCurrentForm","setModalCurrentForm","setShowMobileNumbersError","bookingFilter","currentInvalidNumbers","num","handleProceed","addBooking","hasANPRFeature","handleStartDateChange","setAddingBookingErrorMessage","handleEndDateChange","handleHotTubServiceChange","handleBookingTypeChange","handleCarRegistrationNumber1Change","handleCarRegistrationNumber2Change","handleBackButton","toggleBookingModal","formIsValid","AddBookingModalVehicleAccessForm","SubletBookingInfoModal","setSelectedCalendarEvent","bookingStartDate","bookingDuration","selectedCalendarEvent","faCoins","subletIncome","subletCharges","MyCalendarPage","faPlus","toogleBookingModal","toggleBookingSuccessModal","calendarDate","MyCalendarPageMobile","PassFunctionalityTypes","SeasonOwner","SeasonResort","Car","ShortStay","OwnerMembership","ResortMembership","MyCalendar","selectedEvent","contentfulParkData","getContentfulParkDetails","SubletCharges","SubletIncome","isSubletBooking","onCalendarNavigate","myHaulfrynShowSubletBookingValue","TableFilterPosition","Inline","Below","Table","filterComponent","filterPosition","descriptionComponent","rowValue","onRowClick","totalPages","getTotalPages","renderFilter","renderDescription","columns","canShowColumn","column","headerClassname","flex","fitContent","textAlign","headerAlignment","pagedResults","pageStart","loadMore","appendNextPage","hasMore","loader","row","renderRows","noResultsMessage","Fragment","handleRowClick","bold","cellClassname","customCellRenderer","customCellClickAction","globalCellProps","translateField","onFilterChange","PassesFilter","filters","NameTranslationKey","onFilterSelected","CurrentNumberOfPasses","MaxNumberOfPasses","AddPassModalHeader","headerText","AddPassModalFooter","isRenew","addAnotherDisabled","addAnotherClick","primaryButtonText","submitDisabled","helperText","ImageCropper","crop","setCrop","completedCrop","setCompletedCrop","aspect","imgRef","useRef","componentRef","scale","rotate","setRotate","previewCanvasRef","srcImg","setSrcImg","srcFileName","setSrcFileName","isCropping","setIsCropping","isInitial","setIsInitial","hiddenFileInput","handleUpload","current","handleCrop","handleCanvas","imageDataUrl","toDataURL","resizeBlobImage","img","onload","canvas","ctx","getContext","drawImage","toBlob","onSizeError","onPhotoCrop","centerAspectCrop","mediaWidth","mediaHeight","offsetX","initialCrop","centerCrop","makeAspectCrop","unit","imageElement","canvasElement","div","TO_RADIANS","PI","clientWidth","context","scaleX","naturalWidth","scaleY","naturalHeight","pixelRatio","devicePixelRatio","floor","cropX","cropY","y","rotateRads","centerX","centerY","imageSmoothingQuality","save","translate","restore","photoUrl","hiddenElements","accept","ref","files","objectFit","minWidth","minHeight","percentCrop","onComplete","onLoad","transform","faUpload","faTrash","faRedo","newAngleInDegrees","faCrop","fileRestrictions","marginTop","instructions","AddPassPhoto","srcPhotoFile","setPhotoFile","hasSubmitted","setHasSubmitted","isNewPhoto","setIsNewPhoto","hasSizeError","setHasSizeError","analyzePassPhotoRequest","onPhotoUpload","submittedOption","passName","justifyContent","submitErrorText","exception","photoFile","fileToUrl","urlToFile","fetch","AddPassField","photo","field","clickableIconClassName","uploadLater","fieldValue","getter","pass","handleUploadLaterChange","setter","resolve","setTimeout","formState","isDirty","updateFormState","openAddPassPhotoModal","handlePhotoUploadChange","closeAddPassPhotoModal","placeholderTranslationKey","dropdown","handleDropdownChange","handleDatepickerChange","convertToDate","validator","forceUpdate","fieldState","FormContext","Consumer","flexBasis","marginLeft","marginRight","labelTranslationKey","createContext","AddPassRow","passForm","fieldList","requirePassPhoto","setFormState","Provider","fieldId","updatePasses","showDeleteButton","onDeleteClick","ShortStayPassFields","PassLengthDays","Photo","CarPassFields","RegistrationNumber","SeasonPassFields","AddPassModal","getFieldList","functionalityCode","filterFieldList","createNewPass","PassTypeFriendlyName","newPasses","setNewPasses","numberOfPasses","setNumberOfPasses","formObject","prevPasses","addPassesRequest","tp","deleteRow","newArray","newPassForm","np","AddPass","canAddPassForSelectedType","openErrorModal","listEmails","emails","successfulMessage","originalMessage","emailsToSend","closeErrorModal","maximumNumberOfPasses","addCarPassesRequest","addSeasonPassesRequest","addShortStayPassesRequest","parkPassType","addCarPasses","dob","DOBDay","DOBMonth","DOBYear","addSeasonPasses","StartDay","StartMonth","StartYear","addShortStayPasses","descriptionContainerClassName","descriptionHeaderClassName","descriptionHeader","descriptionSubHeaderClassName","descriptionSubHeader","hasHtml","descriptionClassName","PostGetSeasonPassesCall","passIds","RenewPassModal","setPasses","passesToRenew","PassId","passFormsToAdd","renewPassesRequest","RenewPass","hasRenewed","canRenewPassForSelectedType","onPassesRenewed","renewSeasonPassesRequest","renewSeasonPasses","MyGuestsPage","isRenewable","openAddPassesModal","coOwnerAccessTypes","DescriptionTranslationKey","openRenewPassesModal","closeAddPassesModal","closeRenewPassesModal","MyGuestsPageMobile","PassStatus","AwaitingApproval","AwaitingPhoto","Approved","PendingDeletion","Deleted","getIconByStatusCode","faQuestionCircle","getClassNameStatusCode","PassStatusColumnCellRenderer","StatusCode","Status","RemovePassColumnCellRenderer","opacity","CoOwnerAccessCellRenderer","dropdownOptions","CoOwnerAccessTypeCode","PassRenewColumnCellRenderer","PassNameMobileColumnCellRenderer","isSeasonPass","PassDates","PassStatusMobileColumnCellRenderer","PutUpdateSeasonPassCall","coOwnerAccessType","GetCoOwnerAccessTypesCall","MyGuests","updateSeasonPassCoOwnerAccess","rowVal","showCoOwnerAccessGrantedModal","openDeletePassModal","rowToDelete","toggleRenewPass","myHaulfrynAllowPermissionDelegation","mobileColumns","accessTypes","Code","myHaulfrynRequireGuestPhotos","removeCarPass","friendlyName","translatedFriendlyName","removeShortStayPass","removeSeasonPass","closeDeletePassModal","onDeletePass","searchResults","compose","passType","newFilter","passId","fontWeight","float","cursor","deleteFunction","wordWrap","membershipType","showDate","marginBottom","membershipText","editButtonFunction","bottom","isNow","nowlaterButtonFunction","MembershipStates","Finalise","Draft","Referrals","referredMembership","member","buttonFunction","canRenew","renewFunction","renderComponent","referredContainer","flexWrap","paymentRequired","setPaymentRequired","willRequirePayment","signAndPay","ReferMembershipsPromptModal","setReferMembershipModalOpen","canAdd","ReferMembershipsPrompt","showReferPrompt","DeleteMembershipPrompt","membershipToDelete","deleteMembership","GetMembershipPaymentSummaryCall","membershipBasketId","CheckFriendMembershipQuotaCall","FriendMembershipModal","datesExceededFriendQuota","quota","dates","dateRanges","dateMinusOne","dateExceeded","setDate","dateRange","d","toLocaleDateString","quotaExceededBy","quotaUsed","authorisedOverlaps","organiseDates","membershipsExceedingQuota","setMembershipExceedingQuota","tempArray","membershipsOnDate","handleClick","toPluralise","array","String","getMonth","getFullYear","isFinalisePage","clear","mt","getMembershipText","MembershipTypes","Club","Friend","Guest","MyMembershipsDashboard","getContentBlock","isDraft","isDeleteModalOpen","changePage","pageToChangeTo","descriptionText","noMembershipText","isFriendMembershipQuotaModalOpen","showAddButton","getMembershipsThenMapToContainers","prevState","snapshot","setFinaliseNowContainers","setFinaliseLaterContainers","requirePayment","container","updateMembershipBasket","datesExceedingFriendQuota","DOMException","setPaymentDetailsDTO","checkRouting","targetDate","currentDate","endOfToday","endMinusFourDate","subWeeks","isWithinInterval","toDateString","isCurrentDateWithinFourWeeksOfTargetDate","getAddMembership","nowLaterOnClick","setDeleteMembershipModalOpen","getAddMembershipById","getEditMemberDetailsById","willbasketRequirePayment","isReferPromptOpen","DeleteMembershipPromptModal","tempMemberships","createdDate","CreatedDate","MembershipType","HasRenewed","sort","b","fromAddMembership","fromEditMemberDetailsDTOBack","cardNumber","CardNumber","Details","createDetails","detailrows","detailValue","detailKey","detailKeyClassName","detailValueClassName","detailsContainerClassName","ImportantInformationWidget","fontAwesomeIcon","setFontAwesomeIcon","fab","MyParkAndHomePage","setSelectedImportantInformation","INLINES","HYPERLINK","uri","aboutThePark","openMyContactParkModal","navigateToImportantInfo","allowMultipleExpanded","allowZeroExpanded","f","question","answer","closeMyContactParkModal","postalAddress","MyParkAndHomePageMobile","MyParkAndHome","getImportantInformation","Map","detail","Key","Value","PostDownloadStatementCall","PostDownloadStatementPdfCall","GetMyBankDetailsCall","GetHaulfrynBankDetailsCall","PostConfirmPaymentCall","useMyAccountPage","paymentResultModalOpen","setPaymentResultModalOpen","paymentResultModalText","setPaymentResultModalText","refreshPage","setRefreshPage","paymentResult","setPaymentWindowOpen","paymentSuccess","confirmPaymentDetails","ownerAccountId","ThirdPartyPaymentReference","thirdPartyPaymentRef","paymentConfirming","paymentConfirmed","CurrentRentLedgerBalance","closePaymentResultModal","MyBankDetailsModal","sortCode","SortCode","bankDetails","MyBankDetails","DateColumnCellRenderer","TransactionAmountCellRenderer","MakeAPaymentModalDefault","paymentTypeClickEvent","GetCountriesCall","PostMakeAPaymentCall","accountNo","MakeAPaymentModalCardAddress","createRef","address","surname","addressLine1","addressLine2","city","postCode","country","countries","paymentRequestDetails","VPSProtocol","TxType","Vendor","Crypt","hasValidAddress","proceed","ddlo","paymentAmount","City","Country","res","makePayment","submit","MakeAPaymentModalCardAddressContainer","MakeAPaymentModalCard","addressModalOpen","handleAmountInputChange","handleAddressBackButton","formatInput","currentBalance","newAmount","amountFromState","onBlur","MakeAPaymentModalBank","bankAccountDetails","AccountName","MakeAPaymentModal","paymentType","onBackBtnClick","setPaymentType","bankTransferClick","haulfryBankDetails","TransactionBalance","downloadStatement","downloadPdfStatement","isPaymentWindowOpen","finalResult","categoryName","TransactionFilter","fromDate","fromDateValid","toDateValid","transactionCategories","GetTransactionCategoriesCall","unshift","searchButtonClicked","TransactionInvoiceCellRenderer","faFileDownload","TransactionType","MyAccountPage","ownerAccountNumber","openMyBankDetailsModal","MyAccountPageMobile","getMyBankDetails","lodgeName","now","responseType","selectedAccountId","selectedAccountnumber","updateTransactionFilter","TicketList","contactEmail","onTicketClicked","FreshDeskSourceTypes","Reply","Note","CreatedFromTweets","CreatedFromSurveyFeedback","CreatedFromFaceBookPost","CreatedFromForwardedEmail","CreatedFromPhone","ECommerce","SelectedTicketTable","selectedTicket","Subject","GroupName","GetCreatedAt","GetUpdatedAt","ConversationList","selectdTicket","loadMoreResults","openQuickReplyModal","conversations","con","Private","UserName","source","isPrivate","obtainStraplineText","Source","Body","Attachments","attachment","attachment_url","onBackPress","MyRequestsAndQueriesPage","ticketsLoading","setSelectedTicket","conversationLoading","loadMoreConvesations","TicketListMobile","MyRequestsAndQueriesPageMobile","PostFreshDeskTicketsSearchCall","PostFreshDeskConversationSearchCall","ticketId","PostFreshDeskTicketReplyCall","MessageContent","ShortenedTextCellRenderer","substring","QuickReplyModal","setMessage","sendReply","MyRequestsAndQueries","getConversations","conversationFilter","postQuickReply","postReplyLoading","showQuickReplyModal","getTickets","onTicketSelect","ticket","loadingResults","Layout","DefaultLayoutRoute","PostConfirmEmailCall","PostResendConfirmEmailCall","ConfirmEmail","userId","codeConfirmed","readyToRedirect","requestFailed","emailResent","UserId","resendConfirmationEmail","PostForgotPasswordEmailCall","userName","PostResetPasswordCall","resetPasswordDto","ForgottenPassword","onEmailSubmit","emailSent","onPasswordSubmit","ConfirmedNewPassword","cPassword","ResetPasswordToken","passwordChanged","passwordsMatchAndIsValid","handleEmailChange","sendForgottenPasswordEmail","resendForgottenPasswordEmail","setPasswordMatch","ImportantInformationPage","selectedId","scrollTo","ImportantInformationPageMobile","GetNewsArticleCall","ContentfulId","ParkNewsPage","newsItem","ParkNewsPageMobile","PostRegisterCall","RegisterDetails","setFirstName","setLastName","setEmail","isEmailValid","setIsEmailValid","ContinueButton","isMobile","onEmailChange","getErrorMessage","errorPlaceholder","RegisterPassword","setPassword","isPasswordValid","setPasswordValid","CreateAccountButton","autoFocus","errorMessage","isRegistering","PostResendConfirmAccountCall","RegisterPopup","isOnDetails","registerComplete","redirectLogin","newUserId","onDetailsEntered","handleBack","mobile","RegisterPage","RegisterPageMobile","Register","prevLocation","PostConfirmAccountCall","ConfirmAccount","AcceptButton","CookiePopup","cookieValue","cookieName","disableButtonStyles","sameSite","ButtonComponent","DateInputField","updateValue","validators","onInput","containerClass","labeltranslationKey","formInput","tabindex","showErrors","InputField","setInput","GetMembershipEndDateCall","age","todayPlus30","getEndDate","displayEndDate","calculateAge","today","birthDate","ageNow","valueToBool","detailsDescription","membershipExist","marketingPreferencesText","defaultChecked","section","selectedDurations","setSelectedDurations","handleMembershipSelection","handleButtonColour","screen","handleButtonText","columnPercentages","percentage","calcColumns","ownerMembershipsLeft","isUploaded","setIsUploaded","inputRef","hidden","handleFile","textOverride","disableSaveFunc","uploadSuccess","uploadFile","vehicle1","setVehicle1","vehicle2","setVehicle2","formFields","setFormFields","handleFormChange","updateChange","vehicleName","trimmedErrors","bypassAge","GetPhotoPassCall","fileUrl","setFileUrl","getPhotoPassCall","startNewMembership","summary","prop","PhotoUrl","proceedDescription","MembershipFlowContactPromptModal","setMembershipContactWarningModalOpen","onNextStep","promptType","modalTextWOutEmail","modalTextWOutMobile","modalTextWOutBoth","MembershipFlowContactPrompt","showContactEmptyPrompt","setPromptNextStep","ExitPromptModal","setExitModalOpen","saveAndExit","ExitPrompt","showExitPrompt","SimpleImageCropper","forwardRef","cropperRef","pixelCrop","setPixelCrop","containerRef","checkedForExistingImage","setCheckedForExistingImage","useImperativeHandle","getFile","fileFromCrop","dataURItoBlob","filename","dataURI","byteString","unescape","mimeString","ia","hiddenFileInputElement","photoSizeLimitInKb","reader","FileReader","dataUrl","readAsDataURL","setNewImage","partialCrop","initial","imageLoaded","onImageRemoved","GetPhotoByMemberIdCall","UpdateMemberPhotoCall","PhotoUpload","setphotoSizeLimitInKb","setErrorMessage","isSubmittingPhoto","setIsSubmittingPhoto","getPhotoPassSizeLimit","enableSaveAndContinue","submitPhotoPass","triggerNextPage","onSaveError","disableSaveAndContinue","AddMembership","ageVerificationPage","vehiclePage","summaryPage","finalisePage","photoUploadRef","onSaveAndContinue","sections","changeSectionsOnBasisOfBirthDate","scrollPosition","createMembershipDTO","addMembershipRequest","flowFinished","onAddNewMember","memberDetailsDescriptionText","ownerResponsibilities","photoUploadInstructions","photoUploadFileRestrictions","photoUploadException","ageVerificationDescription","vehicleDescription","disableSaveButton","userEmail","updateMembershipForm","userLastName","userPhoneNumber","localSection","ageVerificationOperation","vehiclesOperation","memberAgeInYears","getPaymentBreakdownsDetails","arg0","Error","ms","getAgeBracketPriceId","priceId","minimumAge","maximumAge","onTypeNextStep","disable","onBack","s","uploadAgeVerificationFile","disableSaveButtonFunc","Summary","onSaveAndExit","isMembershipContactWarningPromptOpen","moveToNextStep","isExitPromptOpen","promptNextStep","isValidated","pageNo","updateMembershipFormBasket","basket","updateMembershipBasketField","maxSizeMB","maxWidthOrHeight","useWebWorker","imageCompression","compressedFile","addAgeVerificationFile","isDecommissionedPark","ManageActiveMember","isEditting","titleDescription","vehicleTitleDescription","passTitleDescription","editmembership","createEditMemberDetailsDTO","updateEditMemberDetailsRequest","updateEditMemberDetailsForm","onTabSwitch","onSave","getReferredDropdownList","remainingMemberships","minValue","isReferred","referWOutMemberships","list","getSelectedOption","manageMemberText","memberDetailText","referWMemberships","reallocateMemberText","transferMemberText","remainingMembership","ReferralSentAlertModal","setReferralSentModalOpen","ReferralSentAlert","createModalText","updateModalText","operationType","showReferSentPrompt","applyModalText","PostReferralMembership","ReferMembership","ErrorPromptModal","setErrorModalOpen","ErrorPrompt","showErrorPrompt","transferText","transferMembershipText","isReferringinProcess","isButtonDisabled","referMembershipForm","queryParams","KVParams","slice","keyValue","queryParam","resolveQueryParams","idFound","fromReferDTO","resolveReferralId","updateReferMembershipFormPage","IsNotValid","referMembershipDTO","onSendReferral","isReferSentPromptOpen","isErrorPrompt","RadioButtonGroup","PostSetParQInformationCall","setMembershipKey","updateParQFormInputs","updateParQForm","updateParQFormDTO","setParQInformation","setShowErrors","isSubmitted","setIsSubmitted","rows","formDTO","createParQFormDTO","setSessionId","setPaymentSuccess","paymentCancelled","setPaymentCancelled","GetStripeMembershipCheckoutUrlCall","setDocuSignMessage","completeMembership","GetStripeUrl","CheckoutUrl","PostSetPaymentMethodCall","paymentMethodDTO","MembershipName","TermDescription","Notes","note","FrequencyFormula","OneOff","Monthly","Annually","MemberPaymentContainer","PaymentPlans","plan","frequencyFormula","paymentPlan","InitialFee","InitialPayment","RecurringFee","currencySymbol","GetUpdateTermsAndConditionsSignedDateCall","GetStripeCheckoutUrlsCall","setTitleDescription","noPaymentDescription","setNoPaymentDescription","paymentDescription","setPaymentDescription","isAgreementChecked","setisAgreementChecked","setPaymentPlan","setDatesExceededFriendQuota","isFriendQuotaModalOpen","setIsFriendQuotaModalOpen","setPaymentMethod","paymentMethod","updateTermsAndConditionsSignedDate","finaliseAndPay","PaymentTypes","CheckoutRequired","InitialCheckoutLink","CompleteLink","getFormulaText","paymentTypes","DueToday","Recurring","faChevronDown","PaymentCurrencySymbol","isAnnually","NextPaymentDate","PostConfirmMemberAccountCall","memberDetails","setResponse","createPassword","setCreatePassword","passwordConfirmed","setPasswordConfirmed","apiError","setApiError","setForm","confirmMembership","createMemberDetailsDTO","postConfirmMembership","FriendlyMessage","RenewPage","noSelectionError","setNoSelectionError","onValueSelected","setEditMemberChecked","updateValueEditMemberCheck","onEditMemberCheckChange","dayPlus30","newDate","onBackButton","memberName","memberEmail","membershipTypeName","onStartDateUpdate","minDatePickerDate","onConfirm","GetMemberByIdCall","PostMembershipRenewalCall","renewalDto","PostPhotoFacialRecognitionCheckCall","setPage","setMemberId","setMembershipType","setTermFormula","membershipStartDate","setMembershipStartDate","setMembershipTypeName","setMember","membershipTermLabel","setMembershipTermLabel","editMemberChecked","redirectToDashboard","setRedirectToDashboard","redirectToEditMember","setRedirectToEditMember","existingEndDate","setExistingEndDate","getMemberCall","membershipTypeId","constentfulMembershipType","RenewalSummary","termDuration","GetMemberPersonalDetailsCall","PersonalDetailsForm","existingDetails","dtoToForm","returnValue","formToDto","k","isFormError","returnErrorState","validationError","UpdateMemberPersonalDetailsCall","memberPersonalDetails","UpdateMemberPersonalDetails","personalDetails","setPersonalDetails","isFormErrors","setIsFormErrors","setErrorGettingDetails","showFormErrors","setShowFormErrors","detailsChanged","setDetailsChanged","setValidationError","onSaveCancelled","onSaveComplete","FormFooter","showExitButton","exitButtonText","onExitClick","showContinueButton","continueButtonText","disableContinueButton","onContinueClick","showContinueButtonLoading","GetMemberVehicles","onVehicle1Update","onVehicle2Update","allowVehicles","UpdateMemberVehiclesCall","memberVehicles","UpdateMemberVehicles","setVehicles","vehicleList","updateVehicles","setPageNo","saveSpinnerOn","setSaveSpinnerOn","childPageRef","setphotoUploadInstructions","setphotoUploadFileRestrictions","setPhotoUploadException","restoreLogin","exact","MemberHomePage","component","Login","ParQForm","ConfirmMembership","ImportantInformation","ParkNews","EditMember","RenewMembership","PaymentSuccess","PaymentCancelled","SelectPayment","MembershipAgreement","DocuSignSigned","InvalidSessionPage","persistConfig","storage","storageSession","LanguageChangeDetector","api","next","removeResourceBundle","hasResourceBundle","addResourceBundle","persistedReducer","persistReducer","createStore","composeWithDevTools","applyMiddleware","thunk","persistor","persistStore","loading","getElementById","RootApp","serviceWorker","ready","unregister"],"mappings":"qwEAYoBA,QACW,cAA7BC,OAAOC,SAASC,UAEe,UAA7BF,OAAOC,SAASC,UAEhBF,OAAOC,SAASC,SAASC,MACvB,2D,oBChBSC,gB,uoBCiBf,IAAMC,EAA2B,CAC7BC,WAAW,EACXC,UAAU,EACVC,yBAAqBC,EACrBC,eAAe,EACfC,mBAAmB,EACnBC,iBAAaH,G,yjBCcjB,IAAMJ,EAAe,CACnBQ,gBAAYJ,EACZK,aAASL,EACTM,eAAWN,EACXO,cAAUP,EACVQ,iBAAaR,EACbS,eAAWT,EACXU,sBAAkBV,EAClBW,YAAQX,EACRY,WAAOZ,EACPa,UAAMb,EACNc,sBAAkBd,EAClBe,0BAAsBf,EACtBgB,yBAAyB,EACzBC,4BAA4B,EAC5BC,wBAAwB,EACxBC,6BAA6B,EAC7BC,oBAAoB,EACpBC,kCAAkC,EAClCC,uBAAuB,EACvBC,sBAAsB,EACtBC,+BAA+B,EAC/BC,kCAAkC,EAClCC,uCAAuC,EACvCC,0CAA0C,EAC1CC,sCAAsC,EACtCC,yCAAyC,EACzCC,kCAA8B9B,EAC9B+B,sBAAkB/B,EAClBgC,UAAU,EACVC,yBAAyB,EACzBC,4BAA4B,EAC5BC,wBAAwB,EACxBC,uBAAuB,EACvBC,oBAAqB,CAAC,KAAM,O,sCClEfC,E,OALUC,EAAwB,CAC7CC,MAAOC,iCACPC,YAAaD,uCACbE,YAAaF,yCCHV,SAAeG,EAAtB,kC,4CAAO,WAA4BC,GAA5B,eAAAC,EAAA,sEAEkBR,EAAiBS,SAAcF,GAFjD,cAEGG,EAFH,yBAIIA,GAJJ,4C,sBCAA,ICFKC,EDECC,EAAb,WAqDI,aAAe,yBApDfL,QAoDc,OAnDdM,gCAmDc,OAlDdC,sBAkDc,OAjDdC,qBAiDc,OAhDdC,eAgDc,OA/CdC,4BA+Cc,OA9CdC,eA8Cc,OA7CdC,eA6Cc,OA5CdlD,cA4Cc,OA3CdmD,iBA2Cc,OA1CdC,WA0Cc,OAzCdC,iBAyCc,OAxCdC,cAwCc,OAvCdC,aAuCc,OAtCdC,cAsCc,OArCdC,iCAqCc,OApCdC,yBAoCc,OAnCdC,iBAmCc,OAjCNC,kBAA+B,CAAEC,OAAQ,CAAC,aAkC9CC,KAAKlB,2BAA6B,CAAEiB,OAAQ,IAC5CC,KAAKP,QAAU,CAAEM,OAAQ,IACzBC,KAAKN,SAAW,CAAEK,OAAQ,IAC1BC,KAAKjB,iBAAmB,CAAEgB,OAAQ,IAClCC,KAAKf,UAAY,CAAEgB,MAAO,IAAIC,KAAQH,OAAQ,IAC9CC,KAAKb,UAAY,CAAEY,OAAQ,IAC3BC,KAAKZ,UAAYY,KAAKF,kBACtBE,KAAK9D,SAAW8D,KAAKF,kBACrBE,KAAKX,YAAcW,KAAKF,kBACxBE,KAAKV,MAAQ,CAAES,OAAQ,IACvBC,KAAKT,YAAc,CAAEQ,OAAQ,IAC7BC,KAAKR,SAAW,CAAEO,OAAQ,IAC1BC,KAAKH,YAAc,CAAEE,OAAQ,IAlErC,4GAsB0CI,GAtB1C,yFAuBYC,EAAa,IAAIJ,MACVxB,GAAK2B,EAAeE,GAC/BD,EAAWtB,2BAA8BqB,EAAeG,2BAA6B,CAAEL,MAAOE,EAAeG,2BAA4BP,OAAQ,IAAO,CAAEA,OAAQ,IAClKK,EAAWX,QAAWU,EAAeI,QAAU,CAAEN,MAAOE,EAAeI,QAASR,OAAQ,IAAO,CAAEA,OAAQ,IACzGK,EAAWV,SAAYS,EAAeK,SAAW,CAAEP,MAAOE,EAAeK,SAAUT,OAAQ,IAAO,CAAEA,OAAQ,IAC5GK,EAAWrB,iBAAwD,OAApCoB,EAAeM,iBAA4B,CAAER,MAAOE,EAAeM,iBAAkBV,OAAQ,IAAO,CAAEA,OAAQ,IAC7IK,EAAWpB,gBAAkBmB,EAAeO,gBAC5CN,EAAWnB,UAAakB,EAAeQ,UAAY,CAAEV,MAAO,IAAIC,KAAKC,EAAeQ,WAAYZ,OAAQ,IAAO,CAAEA,OAAQ,CAAC,aAC1HK,EAAWlB,uBAAyB,EACpCkB,EAAWjB,UAA0C,OAA7BgB,EAAeS,UAAqB,CAAEX,MAAOE,EAAeS,UAAWb,OAAQ,IAAO,CAAEA,OAAQ,IACxHK,EAAWhB,UAAae,EAAeU,UAAY,CAAEZ,MAAOE,EAAeU,UAAWd,OAAQ,IAAO,CAAEA,OAAQ,CAAC,aAChHK,EAAWlE,SAAYiE,EAAeW,SAAW,CAAEb,MAAOE,EAAeW,SAAUf,OAAQ,IAAO,CAAEA,OAAQ,CAAC,aAC7GK,EAAWf,YAAec,EAAeY,YAAc,CAAEd,MAAO,IAAIC,KAAKC,EAAeY,aAAchB,OAAQ,IAAO,CAAEA,OAAQ,CAAC,aAChIK,EAAWd,MAASa,EAAea,MAAQ,CAAEf,MAAOE,EAAea,MAAOjB,OAAQ,IAAO,CAAEA,OAAQ,IACnGK,EAAWb,YAAeY,EAAec,YAAc,CAAEhB,MAAOE,EAAec,YAAalB,OAAQ,IAAO,CAAEA,OAAQ,KACjHI,EAAee,SAtC3B,iBAwCY,IADAd,EAAWZ,SAAW,CAAES,MAAO,GAAIF,OAAQ,IAvCvD,6BAwCY,EAAoBI,EAAee,SAAnC,+CAASC,EAAoC,QACzCf,EAAWZ,SAAUS,MAAQG,EAAWZ,SAAUS,MAAMmB,OAAO,CAAC,CAAE5C,GAAI2C,EAAQd,GAAIgB,aAAcF,EAAQG,aAAcC,YAAaJ,EAAQK,eAzC3J,8OA4CYrB,EAAesB,4BA5C3B,wBA6CYrB,EAAWT,4BAA8BQ,EAAesB,4BA7CpE,UA8CiClD,EAAa4B,EAAesB,6BA9C7D,QA8CgBC,EA9ChB,OA+CYtB,EAAWP,YAAc,CAAEI,MAAO,CAAE0B,MAAOD,EAASE,OAAOC,gBAAiB5B,MAAOyB,EAASE,OAAO/B,aAAqCE,OAAQ,IA/C5J,eAiDQK,EAAWR,oBAAsBO,EAAe2B,qBAAuB,IAAI5B,KAAKC,EAAe2B,qBAjDvG,kBAkDe1B,GAlDf,2IEFa2B,EAAb,WA2BI,aAAe,yBA1BfvD,QA0Bc,OAzBdY,eAyBc,OAxBdlD,cAwBc,OAvBdoD,WAuBc,OAtBdC,iBAsBc,OArBdC,cAqBc,OApBdwC,eAoBc,EACVhC,KAAKZ,UAAY,CAAEW,OAAQ,IAC3BC,KAAK9D,SAAW,CAAE6D,OAAQ,IAC1BC,KAAKV,MAAQ,CAAES,OAAQ,IACvBC,KAAKT,YAAc,CAAEQ,OAAQ,IAC7BC,KAAKR,SAAW,CAAEO,OAAQ,IAhClC,8EAS+CI,GACvC,IAAI8B,EAAoB,IAAIjC,KAO5B,GANAiC,EAAkBzD,GAAK2B,EAAeE,IAAMF,EAAeE,GAC3D4B,EAAkB7C,UAAYe,EAAeU,UAAY,CAAEZ,MAAOE,EAAeU,UAAWd,OAAQ,IAAO,CAAEA,OAAQ,IACrHkC,EAAkB/F,SAAWiE,EAAeW,SAAW,CAAEb,MAAOE,EAAeW,SAAUf,OAAQ,IAAO,CAAEA,OAAQ,IAClHkC,EAAkB3C,MAAQa,EAAea,MAAQ,CAAEf,MAAOE,EAAea,MAAOjB,OAAQ,IAAO,CAAEA,OAAQ,IACzGkC,EAAkB1C,YAAcY,EAAec,YAAc,CAAEhB,MAAOE,EAAec,YAAalB,OAAQ,IAAO,CAAEA,OAAQ,IAC3HkC,EAAkBD,UAAY7B,EAAe+B,WAAa/B,EAAe+B,UACrE/B,EAAee,SAAU,CACzBe,EAAkBzC,SAAW,CAAES,MAAO,GAAIF,OAAQ,IADzB,2BAEzB,YAAoBI,EAAee,SAAnC,+CAA6C,CAAC,IAArCC,EAAoC,QACzCc,EAAkBzC,SAAUS,MAAQgC,EAAkBzC,SAAUS,MAAMmB,OAAO,CAAC,CAAE5C,GAAI2C,EAAQd,GAAIgB,aAAcF,EAAQG,aAAcC,YAAaJ,EAAQK,gBAHpI,mFAM7B,OAAOS,MAvBf,KCAaE,EAAb,WAoCE,aAAe,yBAnCf3D,QAmCc,OAlCdY,eAkCc,OAjCdlD,cAiCc,OAhCdoD,WAgCc,OA/BdnD,iBA+Bc,OA9BdiG,gCA8Bc,OA7BdlD,4BA6Bc,OA5BdmD,2BA4Bc,EACZrC,KAAKoC,2BAA6B,CAAEnC,MAAO,GAAIF,OAAQ,IACvDC,KAAKd,uBAAyB,CAAEe,MAAO,EAAGF,OAAQ,IAClDC,KAAKZ,UAAY,CAAEa,MAAO,GAAIF,OAAQ,CAAC,aACvCC,KAAK9D,SAAW,CAAE+D,MAAO,GAAIF,OAAQ,CAAC,aACtCC,KAAKV,MAAQ,CAAEW,MAAO,GAAIF,OAAQ,CAAC,aACnCC,KAAK7D,YAAc,CAAE8D,MAAO,GAAIF,OAAQ,IACxCC,KAAKqC,sBAAwB,CAAEpC,OAAO,EAAMF,OAAQ,IA3CxD,qEAUoCI,GAChC,IAAIC,EAAa,IAAIJ,KASrB,OARAI,EAAW5B,GAAK2B,EAAeE,GAC/BD,EAAWgC,2BAA8BjC,EAAeG,2BAA6B,CAAEL,MAAOE,EAAeG,2BAA4BP,OAAQ,IAAO,CAAEA,OAAQ,IAClKK,EAAWlB,uBAA0BiB,EAAemC,uBAAyB,CAAErC,MAAOE,EAAemC,uBAAwBvC,OAAQ,IAAO,CAAEA,OAAQ,IACtJK,EAAWhB,UAAae,EAAeU,UAAY,CAAEZ,MAAOE,EAAeU,UAAWd,OAAQ,IAAO,CAAEA,OAAQ,CAAC,aAChHK,EAAWlE,SAAYiE,EAAeW,SAAW,CAAEb,MAAOE,EAAeW,SAAUf,OAAQ,IAAO,CAAEA,OAAQ,CAAC,aAC7GK,EAAWjE,YAAegE,EAAec,YAAc,CAAEhB,MAAOE,EAAec,YAAalB,OAAQ,IAAO,CAAEA,OAAQ,IACrHK,EAAWd,MAASa,EAAea,MAAQ,CAAEf,MAAOE,EAAea,MAAOjB,OAAQ,IAAO,CAAEA,OAAQ,CAAC,aACpGK,EAAWiC,sBAAyBlC,EAAeoC,sBAAwB,CAAEtC,MAAOE,EAAeoC,sBAAuBxC,OAAQ,IAAO,CAAEA,OAAQ,CAAC,aAC7IK,IApBX,mCAuB6BoC,GACzB,IAAIpC,EAAa,IAAIJ,KASrB,OARAI,EAAW5B,GAAKgE,EAAKhE,GACrB4B,EAAWlB,4BAA0DvD,IAAhC6G,EAAKtD,uBAAuC,CAAEe,MAAOuC,EAAKtD,uBAAwBa,OAAQ,IAAO,CAAEA,OAAQ,IAChJK,EAAWhB,UAAaoD,EAAKpD,UAAY,CAAEa,MAAOuC,EAAKpD,UAAWW,OAAQ,IAAO,CAAEA,OAAQ,IAC3FK,EAAWlE,SAAYsG,EAAKtG,SAAW,CAAE+D,MAAOuC,EAAKtG,SAAU6D,OAAQ,IAAO,CAAEA,OAAQ,IACxFK,EAAWiC,sBAAyBG,EAAKH,sBAAwB,CAAEpC,MAAOuC,EAAKH,sBAAuBtC,OAAQ,IAAO,CAAEA,OAAQ,IAC/HK,EAAWd,MAAQkD,EAAKlD,MAAQ,CAAEW,MAAOuC,EAAKlD,MAAOS,OAAQ,IAAO,CAAEA,OAAQ,IAC9EK,EAAWjE,YAAcqG,EAAKrG,YAAc,CAAE8D,MAAOuC,EAAKrG,YAAa4D,OAAQ,IAAO,CAAEA,OAAQ,IAChGK,EAAWgC,2BAA6B,CAAErC,OAAQ,IAC3CK,MAjCX,kDA+CI,SAAIJ,KAAKZ,WAAaY,KAAKZ,UAAUW,OAAO0C,OAAS,QAE1CzC,KAAK9D,UAAY8D,KAAK9D,SAAS6D,OAAO0C,OAAS,QAE/CzC,KAAKV,OAASU,KAAKV,MAAMS,OAAO0C,OAAS,QAEzCzC,KAAK7D,aAAe6D,KAAK7D,YAAY4D,OAAO0C,OAAS,QAErDzC,KAAKoC,4BAA8BpC,KAAKoC,2BAA2BrC,OAAO0C,OAAS,OAEnFzC,KAAKd,wBAA0Bc,KAAKd,uBAAuBa,OAAO0C,OAAS,WAzD1F,K,mkBFAY7D,O,mBAAAA,I,sBAAAA,M,KG4FZ,IAAMrD,EAAe,CACnBmH,OAAQ,CACNC,KAAM,GACNC,MAAO,GAETC,aAAc,CACZC,KAAM,EACNC,SAAU,GACVC,UAAW,OACXC,cAAe,OAEjBC,4BAAwBvH,EACxBwH,qBAAsB,CACpB9C,QAAI1E,GAENyH,cAAe,GACfC,4BAAwB1H,EACxB2H,6BAAyB3H,EACzB4H,uBAAmB5H,EACnB6H,uBAAmB7H,EACnB8H,uBAAmB9H,EACnB+H,iBAAkB,GAClBC,oBAAoB,EACpBC,yBAAyB,EACzBC,cAAc,EACdC,8BAA8B,EAC9BC,sBAAsB,EACtBC,8BAA8B,EAC9BC,yBAAyB,EACzBC,sBAAsB,EACtBC,gCAAgC,EAChCC,2BAA2B,EAC3BC,uBAAuB,EACvBC,gCAAgC,EAEhCC,oBAAoB,EACpBC,uBAAuB,EACvBC,kCAA8B9I,EAC9B+I,mBAAoB,EACpBC,wBAAyB,EACzBC,cAAe,CACb5F,gBAAiB,UACjBE,uBAAwB,GAE1B2F,gBAAiB,CACf3F,uBAAwB,GAE1B4F,eAAgB,IAAIjG,EACpBkG,kBAAmB,CACjB,CACEC,UAAW,YACXC,YAAa,2BAEf,CACED,UAAW,WACXC,YAAa,0BAEf,CACED,UAAW,6BACXC,YAAa,gCAEf,CACED,UAAW,kBACXC,YAAa,iCAEf,CACED,UAAW,UACXC,YAAa,yBAEf,CACED,UAAW,WACXC,YAAa,KAIjBC,sBAAsB,EACtBC,2BAA2B,EAC3BC,YAAa,GACbC,8BAA8B,EAC9BC,mCAAmC,EACnCC,oBAAqB,GACrBC,4BAA4B,EAC5BC,+BAA+B,EAC/BC,iCAAiC,EACjCC,iBAAkB,GAClBC,SAAU,GACVC,sBAAsB,EACtBC,wBAAwB,EACxBC,oBAAqBC,KACrBC,8BAA8B,EAC9BC,mCAAmC,EACnCC,iCAAiC,EACjCC,uCAAwC,GACxCnE,kBAAmB,GACnBoE,sBAAuB,IAAItE,EAC3BuE,gCAAgC,EAChCC,qCAAqC,EACrCC,mCAAmC,EACnCC,6BAA6B,EAC7BC,gCAAgC,EAChCC,gCAAgC,EAChCC,4BAA4B,EAC5BC,+BAA+B,EAC/BC,+BAA+B,EAC/BC,wBAAwB,EACxBC,UAAW,GACXC,gBAAiB,GACjBC,qBAAsB,GACtBC,sBAAuB,GACvBC,wBAAyB,GACzBC,oBAAoB,GACpBC,oBAAgB3L,EAChB4L,gBAAiB,CAAEP,UAAW,GAAIQ,MAAO5I,EAAe6I,SACxDC,mBAAmB,EACnBC,+BAA2BhM,EAC3BiM,gBAAgB,EAChBC,mBAAelM,G,yjBC3LjB,IAAMJ,EAAe,CACjBuM,aAAc,CACVC,aAASpM,EACTqM,gBAAYrM,EACZsM,QAAS,IAEbC,iBAAkB,GAClBC,wBAAwB,EACxBC,KAAM,GACNC,eAAe,EACfC,sBAAkB3M,EAClB4M,qBAAsB,GACtBC,6BAAyB7M,EACzB8M,sBAAsB,EACtBC,oCAAgC/M,EAChCgN,KAAM,GACNC,sBAAkBjN,EAClBkN,eAAe,EACfC,wBAAoBnN,EACpBoN,0BAA0B,EAC1BC,qBAAiBrN,EACjBsN,0BAAsBtN,G,yjBCP1B,IAAMJ,EAA8B,CAChC2N,YAAQvN,EACRwN,YAAQxN,EACRyN,eAAe,EACfC,eAAe,EACfC,uBAAwB,SACxBC,WAAY,EACZC,yBAAyB,EACzBC,uBAAuB,EACvBC,iBAAiB,EACjBC,8BAA8B,EAC9BC,4BAAwBjO,G,yjBC1C5B,IAAMJ,EAAe,CACjBsO,cAAc,G,0kBCwClB,IAAMtO,EAA6B,CAC/BuO,aAAc,CACVnH,KAAM,GACNC,MAAO,EACPG,SAAU,IAEdgH,kBAAmB,CACfjH,KAAM,EACNC,SAAU,GACVC,UAAW,kBACXC,cAAe,OACf+G,SAAUC,MAASC,QAAQ,SAASC,SAAS,EAAG,UAAUC,OAAO,cACjEC,OAAQJ,MAASG,OAAO,cACxBE,UAAW,EACXC,cAAe,GACfC,oBAAqB,IAEzBC,yBAAyB,EACzBC,4BAAwB/O,EACxBgP,0BAA0B,EAC1BC,mBAAejP,EACfkP,sBAAsB,EACtBC,yBAAyB,EACzBC,wBAAwB,EACxBC,4BAAwBrP,EACxBsP,2BAA2B,EAC3BC,+BAA2BvP,EAC3BwP,yBAAyB,EACzBC,yBAAqBzP,EACrB0P,8BAA8B,EAC9BC,oBAAgB3P,G,6jBC9DpB,IAAMJ,GAAe,CACnBkB,iBAAkB,CAAE8O,QAAQ,GAC5BC,gBAAiB,CAAED,QAAQ,GAC3B1G,gBAAiB,CAAC0G,QAAQ,GAC1BE,KAAM,CAACF,QAAQ,GACfG,MAAO,CAACH,QAAQ,GAChBI,aAAc,CAAEJ,QAAQ,GACxBK,sBAAuB,CAAEL,QAAQ,GACjCM,wCAAwC,EACxCC,4BAA6B,CAAEP,QAAQ,EAAOQ,KAAM,IACpDC,gCAAiC,CAAEC,UAAU,I,6jBCT/C,IAAM1Q,GAA0B,CAC9B2Q,cAAe,GACfC,iBAAaxQ,EACbyQ,eAAgB,ICPd,aAAe,yBATfC,2BASc,OARdC,uBAQc,OAPdC,yBAOc,OANdC,iBAMc,OALdC,sBAKc,OAJdC,kCAIc,OAHdC,iBAGc,OAFdC,wBAEc,EACV5M,KAAKqM,sBAAwB,CAAEtM,OAAQ,CAAC,aACxCC,KAAKsM,kBAAoB,CAAEvM,OAAQ,CAAC,aACpCC,KAAKuM,oBAAsB,CAAExM,OAAQ,CAAC,aACtCC,KAAKwM,YAAc,CAAEzM,OAAQ,CAAC,aAC9BC,KAAKyM,iBAAmB,CAAE1M,OAAQ,CAAC,aACnCC,KAAK0M,6BAA+B,CAAE3M,OAAQ,CAAC,aAC/CC,KAAK2M,YAAc,CAAE5M,OAAQ,CAAC,aAC9BC,KAAK4M,mBAAqB,CAAE7M,OAAQ,KDA1C8M,2BAA2B,EAC3BC,2BAA2B,EAC3BC,2BAA2B,GEThBC,GAAcC,0BAAgB,CACvCC,MhBgBW,WAAyC,IAAxC1F,EAAuC,uDAA/BjM,EAAc4R,EAAiB,uCACtD,OAAQA,EAAOpB,MACR,IiB9BqB,gBjB+BjB,OAAO,EAAP,GAAYvE,EAAZ,CAAmBhM,UAAW2R,EAAOC,QAAS3R,UAAU,EAAO4R,kBAAc1R,EAAWD,yBAAqBC,EAAWE,mBAAmB,IAC/I,IiB/BqB,gBjBgCjB,OAAO,EAAP,GAAY2L,EAAZ,CAAmBhM,WAAW,EAAOC,SAAU0R,EAAOC,QAASE,0BAAsB3R,EAAWE,mBAAmB,IACvH,IiBhCqB,gBjBiCjB,OAAO,EAAP,GAAY2L,EAAZ,CAAmBhM,WAAW,EAAOC,UAAU,EAAO4R,kBAAc1R,EAAWD,oBAAqByR,EAAOC,QAASvR,mBAAmB,IAC3I,IiBjCmB,cjBkCf,OAAO,EAAP,GAAY2L,EAAZ,CAAmB5L,eAAe,IACtC,IiBlCc,SjBmCV,OAAO,EAAP,GAAY4L,EAAZ,CAAmBhM,WAAW,EAAOC,UAAU,EAAO4R,kBAAc1R,EAAW2R,0BAAsB3R,EAAWC,eAAe,EAAMC,kBAAmBsR,EAAOC,QAAStR,iBAAaH,IACzL,IiBnCwB,mBjBoCpB,OAAO,EAAP,GAAY6L,EAAZ,CAAmB1L,YAAaqR,EAAOC,UACjD,QACC,OAAO5F,IgB9BN+F,Kf+DW,WAAwC,IAAvC/F,EAAsC,uDAA9BjM,EAAc4R,EAAgB,uCACpD,OAAQA,EAAOpB,MACb,IiB9EyB,gBjB+EvB,OAAO,KAAKvE,EAAZ,CAAmBvL,UAAWkR,EAAOC,QAAQ,GAAIlR,SAAUiR,EAAOC,QAAQ,KAC5E,IiB9E2B,kBjB+EzB,OAAO,KAAK5F,EAAZ,CAAmBzL,WAAYoR,EAAOC,QAAQ,GAAIjR,YAAagR,EAAOC,QAAQ,KAChF,IiBjFwB,ejBkFtB,OAAO,KAAK5F,EAAZ,CAAmBxL,QAASmR,EAAOC,UACrC,IiBjF2B,kBjBkFzB,OAAO,KAAK5F,EAAZ,CAAmBlL,OAAQ6Q,EAAOC,UACpC,IiBlF8B,qBjBmF5B,OAAO,KAAK5F,EAAZ,CAAmBjL,MAAO4Q,EAAOC,UACnC,IiBnF6B,oBjBoF3B,OAAO,KAAK5F,EAAZ,CAAmBhL,KAAM2Q,EAAOC,UAClC,IiBpF0B,iBjBqFxB,OAAO,KAAK5F,EAAZ,CAAmBpL,UAAW+Q,EAAOC,UACvC,IiBvDgC,uBjBwD9B,OAAO,KAAK5F,EAAZ,CAAmBnL,iBAAkB8Q,EAAOC,UAC9C,IiBvDyB,gBjBwDvB,OAAO,KAAK5F,EAAZ,CAAmB7J,SAAUwP,EAAOC,UACtC,IiB1DiC,wBjB2D/B,OAAO,KAAK5F,EAAZ,CAAmB9J,iBAAkByP,EAAOC,UAC9C,IgB9FkB,ShB+FhB,OAAO,KACF5F,EADL,CAEEgG,wBAAoB7R,EACpBc,sBAAkBd,IAEtB,IiBvFF,oCjBwFI,OAAO,KACF6L,EADL,CAEE9K,0BAAsBf,IAE1B,IiB1FF,oCjB+FE,IiB3FF,oCjB4FI,OAAO,KACF6L,EADL,CAEE9K,qBAAsByQ,EAAOC,UAEjC,IiBhH0C,iCjBiHxC,OAAO,KACF5F,EADL,CAEE/K,sBAAkBd,EAClBiB,4BAA4B,EAC5BD,yBAAyB,IAE7B,IiBtH0C,iCjBuHxC,OAAO,KACF6K,EADL,CAEE/K,iBAAkB0Q,EAAOC,QACzBvC,sBAAsB,IAE1B,IiB3H0C,iCjB4HxC,OAAO,KACFrD,EADL,CAEE/K,sBAAkBd,EAClBiB,4BAA4B,EAC5BD,yBAAyB,IAE7B,IiBhIF,oCjBiII,OAAO,KACF6K,EADL,CAEE1K,6BAA6B,EAC7BD,wBAAwB,IAE5B,IiBpIF,oCjBqII,OAAO,KACF2K,EADL,CAEE/K,iBAAkB0Q,EAAOC,QACzBvQ,wBAAwB,IAE5B,IiBxIF,oCjByII,OAAO,KACF2K,EADL,CAEE1K,6BAA6B,EAC7BH,yBAAyB,IAE7B,IiBrImC,0BjBsIjC,OAAO,KACF6K,EADL,CAEEvK,uBAAuB,EACvBF,oBAAoB,IAExB,IiB1ImC,0BjB2IjC,OAAO,KAAKyK,EAAZ,CAAmBzK,oBAAoB,IACzC,IiB3ImC,0BjB4IjC,OAAO,KACFyK,EADL,CAEEvK,uBAAuB,EACvBF,oBAAoB,IAExB,IkBrJ6B,oBlBsJ7B,IiBjJ+B,sBjBkJ7B,OAAO,KACFyK,EADL,CAEEjL,MAAM,KAAOiL,EAAMjL,MAAd,CAA6BkR,eAAgBN,EAAOC,YAE7D,IiBrJ8C,qCjBsJ5C,OAAO,KACF5F,EADL,CAEErK,+BAA+B,EAC/BuQ,6BAA6B,IAEjC,IiB1J8C,qCjB2J5C,OAAO,KACFlG,EADL,CAEEtK,qBAAsBiQ,EAAOC,QAC7BM,6BAA6B,IAEjC,IiB/J8C,qCjBgK5C,OAAO,KACFlG,EADL,CAEErK,+BAA+B,EAC/BuQ,6BAA6B,IAEjC,IiBpKwD,+CjBqKtD,OAAO,KACFlG,EADL,CAEEnK,uCAAuC,EACvCC,0CAA0C,IAE9C,IiBzKwD,+CjB0KtD,OAAO,KACFkK,EADL,CAEEtK,qBAAsBiQ,EAAOC,QAC7B/P,uCAAuC,IAE3C,IiB9KwD,+CjB+KtD,OAAO,KACFmK,EADL,CAEEnK,uCAAuC,EACvCC,0CAA0C,IAE9C,IiBnLqD,4CjBoLnD,OAAO,KACFkK,EADL,CAEEjK,sCAAsC,EACtCC,yCAAyC,IAE7C,IiBxLqD,4CjByLnD,OAAO,KACFgK,EADL,CAEEjK,sCAAsC,EACtCE,6BAA8B0P,EAAOC,UAEzC,IiB7LqD,4CjB8LnD,OAAO,KACF5F,EADL,CAEEmG,qCAAqC,EACrCnQ,yCAAyC,IAE7C,IiB/LgC,uBjBgM9B,OAAO,KACFgK,EADL,CAEE7J,SAAUwP,EAAOC,QAAQ,IAAMD,EAAOC,QAAQ,GAC9CxP,wBAAyBuP,EAAOC,QAAQ,GACxCvP,2BAA4BsP,EAAOC,QAAQ,GAC3CtP,uBAAwBqP,EAAOC,QAAQ,GACvCrP,uBAAuB,IAE3B,QACE,OAAOyJ,IenOToG,ORqMW,WAAwC,IAAvCpG,EAAsC,uDAA9BjM,EAAc4R,EAAgB,uCACpD,OAAQA,EAAOpB,MACb,IYrNiC,wBZsN/B,OAAO,KAAKvE,EAAZ,CAAmB/D,kBAAmB0J,EAAOC,UAC/C,IYtNiC,wBZuN/B,OAAO,KAAK5F,EAAZ,CAAmB9E,OAAQyK,EAAOC,QAAS3J,mBAAmB,IAChE,IYvNiC,wBZwN/B,OAAO,KAAK+D,EAAZ,CAAmBhE,kBAAmB2J,EAAOC,QAAS3J,mBAAmB,IAC3E,IYxN6B,oBZyN3B,OAAO,KAAK+D,EAAZ,CAAmB3E,aAAcsK,EAAOC,QAAS3J,uBAAmB9H,IACtE,IYzNsC,6BZ0NpC,OAAO,KAAK6L,EAAZ,CAAmBtE,uBAAwBiK,EAAOC,UACpD,IY1NsC,6BZ2NpC,OAAO,KAAK5F,EAAZ,CAAmBpE,cAAe+J,EAAOC,QAASlK,wBAAwB,IAC5E,IY3NsC,6BZ4NpC,OAAO,KAAKsE,EAAZ,CAAmBjE,kBAAmB4J,EAAOC,QAASlK,wBAAwB,IAChF,IY5NuC,8BZ6NrC,OAAO,KACFsE,EADL,CAEErE,qBAAsBgK,EAAOC,QAC7BvK,aAAa,KACR2E,EAAM3E,aADC,CAEVgL,eAAgBV,EAAOC,QAAUD,EAAOC,QAAQ/M,QAAK1E,EACrDmS,kBAAmBX,EAAOC,QAAUD,EAAOC,QAAQU,uBAAoBnS,EACvEmH,KAAM,IAERW,uBAAmB9H,IAEvB,IY9NsC,6BZ+NpC,OAAO,KAAK6L,EAAZ,CAAmB7D,mBAAoBwJ,EAAOC,UAChD,IY/N4C,mCZgO1C,OAAO,KAAK5F,EAAZ,CAAmB5D,wBAAyBuJ,EAAOC,UACrD,IY9NwC,+BZ+NtC,OAAO,KAAK5F,EAAZ,CAAmBtD,qBAAsBiJ,EAAOC,UAClD,IYrNsC,6BZsNpC,OAAO,KAAK5F,EAAZ,CAAmBzD,sBAAsB,IAC3C,IYpN6C,oCZqN3C,OAAO,KAAKyD,EAAZ,CAAmB1D,8BAA8B,IACnD,IY9OmC,0BZ+OnC,IY5OuC,8BZ6OvC,IY9NqC,4BZ+NnC,OAAO,KAAK0D,EAAZ,CAAmB3D,cAAc,IACnC,IY5NsC,6BZ6NpC,OAAO,KACF2D,EADL,CAEEzD,sBAAsB,EACtBO,gCAAgC,EAChChB,6BAAyB3H,IAE7B,IYhO6C,oCZiO3C,OAAO,KACF6L,EADL,CAEEnE,uBAAwB8J,EAAOC,QAC/BtJ,8BAA8B,IAElC,IYrO6C,oCZsO3C,OAAO,KACF0D,EADL,CAEE1D,8BAA8B,IAElC,IY7OsC,6BZ8OpC,OAAO,KACF0D,EADL,CAEEzD,sBAAsB,EACtBO,gCAAgC,EAChChB,wBAAyB6J,EAAOC,UAEpC,IY1QmC,0BZ2QnC,IYxQuC,8BZyQvC,IY1PqC,4BZ2PnC,OAAO,KACF5F,EADL,CAEE3D,cAAc,EACdH,iBAAkByJ,EAAOC,QACzB3J,uBAAmB9H,EACnBuH,4BAAwBvH,IAE5B,IYnRmC,0BZoRnC,IYjRuC,8BZkRvC,IYnQqC,4BZoQnC,OAAO,KAAK6L,EAAZ,CAAmB3D,cAAc,IACnC,IYjR8C,qCZkR5C,OAAO,KACF2D,EADL,CAEExD,6BAA8BmJ,EAAOC,QACrC1J,iBAAkByJ,EAAOC,QAAU5F,EAAM9D,iBAAmB,KAEhE,IYtRyC,gCZuRvC,OAAO,KAAK8D,EAAZ,CAAmBvD,wBAAyBkJ,EAAOC,UACrD,IYtRgD,uCZuR9C,OAAO,KAAK5F,EAAZ,CAAmBrD,+BAAgCgJ,EAAOC,UAC5D,IYvR2C,kCZwRzC,OAAO,KAAK5F,EAAZ,CAAmBpD,0BAA2B+I,EAAOC,UACvD,IYrRmD,0CZsRjD,OAAO,KAAK5F,EAAZ,CAAmBnD,sBAAuB8I,EAAOC,UACnD,IU9S8B,qBV+S5B,OAAO,KACF5F,EADL,CAEE3E,aAAa,KACR2E,EAAM3E,aADC,CAEVkL,QAASZ,EAAOC,QAAQW,QACxBzD,UAAW6C,EAAOC,QAAQ9C,UAC1BxH,KAAM,MAIZ,IYvRkC,yBZwRhC,OAAO,KACF0E,EADL,CAEEjD,mBAAoB4I,EAAOC,QAC3B5I,uBAAuB,IAE3B,IY5RkC,yBZ6RhC,OAAO,KACFgD,EADL,CAEEjD,oBAAoB,EACpBK,cAAeuI,EAAOC,QACtB5I,uBAAuB,IAE3B,IYlSkC,yBZmShC,OAAO,KACFgD,EADL,CAEEjD,oBAAoB,EACpBC,uBAAuB,EACvBC,6BAA8B0I,EAAOC,UAEzC,IYvSuC,8BZwSrC,OAAO,KACF5F,EADL,CAEE9C,mBAAoByI,EAAOC,UAE/B,IYjS6C,oCZkS3C,OAAO,KACF5F,EADL,CAEE7C,wBAAyBwI,EAAOC,UAEpC,IYlTyB,gBZmTvB,OAAO,KACF5F,EADL,CAEE5C,cAAe,CACb5F,gBAAiB,UACjBE,uBAAwB,GAE1B2F,gBAAiB,CACf3F,uBAAwB,GAE1B4F,eAAgB,IAAIjG,EACpBsD,oBAAqB,IAAIA,EACzBwD,iBAAkB,GAClBjB,mBAAoB,EACpBC,wBAAyB,EACzBuB,mCAAmC,IAEvC,IYhUiC,wBZiU/B,OAAO,KACFsB,EADL,CAEE5C,cAAeuI,EAAOC,UAE1B,IYtUkC,yBZuUhC,OAAO,KACF5F,EADL,CAEE1C,eAAgBqI,EAAOC,UAE3B,IY5TwC,+BZ6TtC,OAAO,KACF5F,EADL,CAEEwG,6BAA6B,EAC7B9H,mCAAmC,EACnCC,iCAAiC,IAErC,IYlUwC,+BZmUtC,OAAO,KACFqB,EADL,CAEEvB,8BAA8B,EAC9BC,mCAAmC,EACnCC,iCAAiC,EACjCJ,oBAAqBoH,EAAOC,UAEhC,IYzUsC,6BZ0UpC,OAAO,KACF5F,EADL,CAEEvB,8BAA8B,EAC9BC,mCAAmC,EACnCC,iCAAiC,EACjCC,uCAAwC+G,EAAOC,UAGnD,IYjWsC,6BZkWpC,OAAO,KACF5F,EADL,CAEEyG,yBAAyB,EACzB/I,sBAAsB,EACtBgJ,2BAA2B,IAE/B,IYvWsC,6BZwWpC,OAAO,KACF1G,EADL,CAEEpC,YAAa+H,EAAOC,QACpBc,2BAA2B,IAE/B,IY5WsC,6BZ6WpC,OAAO,KACF1G,EADL,CAEEyG,yBAAyB,EACzB/I,sBAAsB,EACtBgJ,2BAA2B,IAE/B,IY9UmC,0BZ+UjC,OAAO,KACF1G,EADL,CAEE2G,iCAAiC,EACjC9I,8BAA8B,EAC9B+I,mCAAmC,IAEvC,IYpVmC,0BZqVjC,OAAO,KACF5G,EADL,CAEEH,oBAAqB8F,EAAOC,QAC5BgB,mCAAmC,IAEvC,IYzVmC,0BZ0VjC,OAAO,KACF5G,EADL,CAEE2G,iCAAiC,EACjC9I,8BAA8B,EAC9B+I,mCAAmC,IAEvC,IYtY4C,mCZuY1C,OAAO,KACF5G,EADL,CAEEhC,4BAA4B,EAC5BC,+BAA+B,EAC/BC,iCAAiC,IAErC,IY5Y4C,mCZ8Y1C,OAAO,KACF8B,EADL,CAEEhC,4BAA4B,EAC5BZ,cAAeuI,EAAOC,QAAQxI,cAC9BE,eAAgBqI,EAAOC,QAAQtI,eAC/BY,iCAAiC,IAErC,IYpZ4C,mCZqZ1C,OAAO,KACF8B,EADL,CAEEhC,4BAA4B,EAC5BC,+BAA+B,EAC/BC,iCAAiC,IAErC,IY1ZoC,2BZ2ZlC,OAAO,KACF8B,EADL,CAEE7B,iBAAkBwH,EAAOC,UAE7B,IY9ZuC,8BZ+ZrC,OAAO,KACF5F,EADL,CAEE9C,mBAAoByI,EAAOC,UAE/B,IYjaiC,uBZka/B,OAAO,KACF5F,EADL,CAEE1C,eAAgB,IAAIjG,EACpB+F,cAAe,CACb5F,gBAAiB,UACjBE,uBAAwB,GAE1BwF,mBAAoB,IAExB,IY1ayC,gCZ2avC,OAAO,KACF8C,EADL,CAEE3B,qBAAsBsH,EAAOC,UAEjC,IY9a2C,kCZ+azC,OAAO,KACF5F,EADL,CAEE1B,uBAAwBqH,EAAOC,UAEnC,IYlbuC,8BZmbrC,OAAO,KACF5F,EADL,CAEEjC,oBAAqB4H,EAAOC,UAEhC,IYnb6C,oCZob3C,OAAO,KACF5F,EADL,CAEElB,gCAAgC,EAChCE,mCAAmC,EACnCD,qCAAqC,IAEzC,IYzb6C,oCZ0b3C,OAAO,KACFiB,EADL,CAEElB,gCAAgC,EAChCrE,kBAAmBkL,EAAOC,QAAQnL,kBAClCoE,sBAAuB8G,EAAOC,QAAQ/G,sBACtCE,qCAAqC,IAEzC,IYhc6C,oCZic3C,OAAO,KACFiB,EADL,CAEElB,gCAAgC,EAChCE,mCAAmC,EACnCD,qCAAqC,IAEzC,IYtckC,yBZuchC,OAAO,KACFiB,EADL,CAEEvF,kBAAmBkL,EAAOC,UAE9B,IY1cuC,8BZ2crC,OAAO,KACF5F,EADL,CAEEnB,sBAAuB8G,EAAOC,UAElC,IY9c0C,8BZ+cxC,OAAO,KACF5F,EADL,CAEEf,6BAA6B,EAC7BC,gCAAgC,EAChCC,gCAAgC,IAEpC,IYpd0C,8BZqdxC,OAAO,KACFa,EADL,CAEE6G,6BAA6B,EAC7BC,gCAAgC,IAEpC,IYzd0C,iCZ0dxC,OAAO,KACF9G,EADL,CAEEf,6BAA6B,EAC7BE,gCAAgC,IAEpC,IY9d4C,mCZ+d1C,OAAO,KACFa,EADL,CAEEZ,4BAA4B,EAC5BC,+BAA+B,EAC/BC,+BAA+B,IAEnC,IYpe4C,mCZqe1C,OAAO,KACFU,EADL,CAEEZ,4BAA4B,EAC5BC,+BAA+B,EAC/BC,+BAA+B,EAC/BlB,SAAUuH,EAAOC,QACjB7F,gBAAiB,CAAEP,UAAWmG,EAAOC,QAAS5F,MAAO5I,EAAe2P,UAExE,IY5e4C,mCZ6e1C,OAAO,KACF/G,EADL,CAEEZ,4BAA4B,EAC5BE,+BAA+B,IAEnC,IYjf0B,iBZkfxB,OAAO,KACFU,EADL,CAEER,UAAWmG,EAAOC,UAEtB,IYrfiC,wBZsf/B,OAAO,KACF5F,EADL,CAEEP,gBAAiBkG,EAAOC,UAE5B,IYzfmC,0BZ0fjC,OAAO,KACF5F,EADL,CAEEF,eAAgB6F,EAAOC,UAE3B,IY7fqC,4BZ8fnC,OAAO,KACF5F,EADL,CAEEN,qBAAsBiG,EAAOC,QAC7BlI,sBAAsB,IAE1B,IY3f8C,qCZ4f5C,OAAO,KACFsC,EADL,CAEEH,oBAAqB8F,EAAOC,UAEhC,IYvgBuC,8BZwgBrC,OAAO,KACF5F,EADL,CAEEL,sBAAuBgG,EAAOC,UAElC,IY3gByC,gCZ4gBvC,OAAO,KACF5F,EADL,CAEEJ,wBAAyB+F,EAAOC,UAEpC,IY5gBgC,uBZ6gB9B,OAAO,KACF5F,EADL,CAEEE,kBAAmByF,EAAOC,UAE9B,IYhhB2C,kCZihBzC,OAAO,KACF5F,EADL,CAEEG,0BAA2BwF,EAAOC,QAAQoB,cAC1C5G,eAAgBuF,EAAOC,QAAQxF,iBAEnC,IYjhB8B,qBZkhB5B,OAAO,KACFJ,EADL,CAEEK,cAAesF,EAAOC,UAE1B,QACE,OAAO5F,IQ/lBTiH,YP8BW,WAAwC,IAAvCjH,EAAsC,uDAA9BjM,EAAc4R,EAAgB,uCAClD,OAAQA,EAAOpB,MACX,IY/CyB,oBZgDrB,OAAO,KAAKvE,EAAZ,CAAmBM,aAAcqF,EAAOC,UAC5C,IYhD8B,yBZiD1B,OAAO,KAAK5F,EAAZ,CAAmBU,iBAAkBiF,EAAOC,UAChD,IYjDsC,iCZkDlC,OAAO,KAAK5F,EAAZ,CAAmBW,uBAAwBgF,EAAOC,UACtD,IYlDwB,mBZmDpB,OAAO,KAAK5F,EAAZ,CAAmBa,eAAe,EAAMD,KAAM,KAClD,IYnDwB,mBZoDpB,OAAO,KAAKZ,EAAZ,CAAmBY,KAAM+E,EAAOC,QAAS/E,eAAe,IAC5D,IYpDwB,mBZqDpB,OAAO,KAAKb,EAAZ,CAAmBc,iBAAkB6E,EAAOC,QAAS/E,eAAe,IACxE,IYrDyC,oCZsDrC,OAAO,KAAKb,EAAZ,CAAmBiB,sBAAsB,EAAMF,qBAAsB,KACzE,IYtDyC,oCZuDrC,OAAO,KAAKf,EAAZ,CAAmBe,qBAAsB4E,EAAOC,QAAS3E,sBAAsB,IACnF,IYvDyC,oCZwDrC,OAAO,KAAKjB,EAAZ,CAAmBgB,wBAAyB2E,EAAOC,QAAS3E,sBAAsB,IACtF,IYrD0C,qCZsDtC,OAAO,KAAKjB,EAAZ,CAAmBkB,+BAAgCyE,EAAOC,UAC9D,IY1DoC,+BZ2DhC,OAAO,KAAK5F,EAAZ,CAAmBuB,0BAA0B,EAAMC,qBAAiBrN,EAAWsN,0BAAsBtN,IACzG,IY3DoC,+BZ4DhC,OAAO,KAAK6L,EAAZ,CAAmBuB,0BAA0B,EAAOC,gBAAiBmE,EAAOC,UAChF,IY5DoC,+BZ6DhC,OAAO,KAAK5F,EAAZ,CAAmBuB,0BAA0B,EAAOE,qBAAsBkE,EAAOC,UACrF,IY5DwB,mBZ6DpB,OAAO,KAAK5F,EAAZ,CAAmBqB,eAAe,EAAMF,KAAM,KAClD,IY7DwB,mBZ8DpB,OAAO,KAAKnB,EAAZ,CAAmBmB,KAAMwE,EAAOC,QAAQzK,KAAMkG,eAAe,IACjE,IY9DwB,mBZ+DpB,OAAO,KAAKrB,EAAZ,CAAmBoB,iBAAkBuE,EAAOC,QAASvE,eAAe,IACxE,IY/D8B,yBZgE1B,OAAO,KAAKrB,EAAZ,CAAmBsB,mBAAoBqE,EAAOC,UAClD,QACI,OAAO5F,IOlEfkH,SNiCW,WAAuE,IAAtElH,EAAqE,uDAA7DjM,EAAc4R,EAA+C,uCACjF,OAAQA,EAAOpB,MACX,IYhD6B,wBZiDzB,OAAO,KAAKvE,EAAZ,CAAmB4B,cAAe+D,EAAOC,UAC7C,IY9C6B,wBZ+CzB,OAAO,KAAK5F,EAAZ,CAAmB6B,cAAe8D,EAAOC,UAC7C,IYnD6B,wBZoDzB,OAAO,KAAK5F,EAAZ,CAAmB4B,eAAe,EAAOF,OAAQiE,EAAOC,UAC5D,IYjD6B,wBZkDzB,OAAO,KAAK5F,EAAZ,CAAmB6B,eAAe,EAAOF,OAAQgE,EAAOC,UAC5D,IYtD6B,wBZuD7B,IYnD6B,wBZoDzB,OAAO,KAAK5F,GAChB,IYxDuC,kCZyDnC,OAAO,KAAKA,EAAZ,CAAmBgC,wBAAyB2D,EAAOC,UACvD,IYrDoC,+BZsDhC,OAAO,KAAK5F,EAAZ,CAAmB8B,uBAAwB6D,EAAOC,UACtD,IYtDuB,kBZuDnB,OAAO,KAAK5F,EAAZ,CAAmB+B,WAAY4D,EAAOC,UAC1C,IYvDqC,gCZwDjC,OAAO,KAAK5F,EAAZ,CAAmBiC,sBAAuB0D,EAAOC,QAASxD,4BAAwBjO,IACtF,IYxD2B,sBZyDvB,OAAO,KAAK6L,EAAZ,CAAmBkC,gBAAiByD,EAAOC,UAC/C,IYzD2B,sBZ0DvB,OAAO,KAAK5F,EAAZ,CAAmBkC,iBAAiB,EAAOC,6BAA8BwD,EAAOC,UACpF,IY1D2B,sBZ2DvB,OAAO,KAAK5F,EAAZ,CAAmBkC,iBAAiB,EAAOC,8BAA8B,EAAOC,uBAAwBuD,EAAOC,UACnH,IY3D4C,wCZ4DxC,OAAO,KAAK5F,EAAZ,CAAmBmC,6BAA8BwD,EAAOC,UAC5D,IY5DqC,gCZ6DjC,OAAO,KAAK5F,EAAZ,CAAmBoC,uBAAwBuD,EAAOC,UACtD,QACI,OAAO5F,IMhEfmH,YLTW,WAAwC,IAAvCnH,EAAsC,uDAA9BjM,EAAc4R,EAAgB,uCAClD,OAAQA,EAAOpB,MACX,IYV4B,uBZWxB,OAAO,KAAKvE,EAAZ,CAAmBqC,aAAcsD,EAAOC,UAC5C,QACI,OAAO5F,IKKfoH,QJ4DW,WAAqE,IAApEpH,EAAmE,uDAA3DjM,EAAc4R,EAA6C,uCAC/E,OAAQA,EAAOpB,MACX,IO9EmC,8BP+E/B,OAAO,KAAKvE,EAAZ,CAAmBiD,wBAAyB0C,EAAOC,UACvD,IO/EmC,8BPgF/B,OAAO,KAAK5F,EAAZ,CAAmBsC,aAAcqD,EAAOC,QAAS3C,yBAAyB,IAC9E,IOhFmC,8BPiF/B,OAAO,KAAKjD,EAAZ,CAAmBkD,uBAAwByC,EAAOC,QAAS3C,yBAAyB,IACxF,IOjF8B,yBPkF1B,OAAO,KAAKjD,EAAZ,CAAmBuC,kBAAmBoD,EAAOC,UACjD,IOlFyC,oCPmFrC,OAAO,KAAK5F,EAAZ,CAAmBmD,yBAA0BwC,EAAOC,UACxD,IOnFmC,8BPoF/B,OAAO,KAAK5F,EAAZ,CAAmBoD,mBAAejP,EAAWmP,yBAAyB,EAAOD,sBAAsB,IACvG,IOpFmC,8BPqF/B,OAAO,KAAKrD,EAAZ,CAAmBoD,cAAeuC,EAAOC,QAASvC,sBAAsB,IAC5E,IOrFmC,8BPsF/B,OAAO,KAAKrD,EAAZ,CAAmBoD,mBAAejP,EAAWmP,yBAAyB,EAAMD,sBAAsB,IACtG,IOlFmC,8BPoFnC,IOnFmC,8BPoF/B,OAAO,KAAKrD,EAAZ,CAAmBuD,uBAAwBoC,EAAOC,UACtD,IOpFmC,8BPqF/B,OAAO,KAAK5F,EAAZ,CAAmBwD,uBAAwBmC,EAAOC,QAASrC,wBAAwB,IACvF,IOrFuC,kCPuFvC,IOtFuC,kCPuFnC,OAAO,KAAKvD,EAAZ,CAAmByD,0BAA2BkC,EAAOC,UACzD,IOvFuC,kCPwFnC,OAAO,KAAK5F,EAAZ,CAAmB0D,0BAA2BiC,EAAOC,QAASnC,2BAA2B,IAC7F,IOlG+C,0CPmG3C,OAAO,KAAKzD,EAAZ,CAAmB2D,wBAAyBgC,EAAOC,UACvD,IOnGyC,oCPoGrC,OAAO,KAAK5F,EAAZ,CAAmB4D,yBAAqBzP,EAAW0P,8BAA8B,IACrF,IOpGyC,oCPqGrC,OAAO,KAAK7D,EAAZ,CAAmB4D,oBAAqB+B,EAAOC,QAAS/B,8BAA8B,IAC1F,IOrGyC,oCPsGrC,OAAO,KAAK7D,EAAZ,CAAmB4D,yBAAqBzP,EAAW0P,8BAA8B,IACrF,IOhGoB,ePiGhB,OAAO,KAAK7D,EAAZ,CAAmB8D,eAAgB6B,EAAOC,UAC9C,IOjG0B,qBPkGtB,OAAO,KAAK5F,EAAZ,CAAmB8D,oBAAgB3P,IACvC,QACI,OAAO6L,IItGfqH,MHOW,WAAwC,IAAvCrH,EAAsC,uDAA9BjM,GAAc4R,EAAgB,uCACpD,OAAQA,EAAOpB,MACb,IW1BF,uCX2BI,OAAO,MACFvE,EADL,CAEE/K,iBAAiB,MAAM+K,EAAM/K,iBAAb,CAA+B8O,OAAQ4B,EAAOC,YAElE,IWhBgC,uBXiB9B,OAAO,MACF5F,EADL,CAEEiE,KAAK,MAAMjE,EAAMiE,KAAb,CAAmBF,OAAQ4B,EAAOC,YAE1C,IWpBiC,wBXqB/B,OAAO,MACF5F,EADL,CAEEkE,MAAM,MAAMlE,EAAMkE,MAAb,CAAoBH,OAAQ4B,EAAOC,YAE5C,IWvCF,kCXwCI,OAAO,MACF5F,EADL,CAEEgE,gBAAgB,MAAMhE,EAAMgE,gBAAb,CAA8BD,OAAQ4B,EAAOC,YAEhE,IWtCF,oCXuCI,OAAO,MACF5F,EADL,CAEE3C,gBAAgB,MAAK2C,EAAM3C,gBAAZ,CAA6B0G,OAAQ4B,EAAOC,YAE/D,IWzCF,6BX0CI,OAAO,MACF5F,EADL,CAEEmE,aAAa,MAAKnE,EAAMmE,aAAZ,CAA0BJ,OAAQ4B,EAAOC,YAEzD,IW5CF,2CX6CI,OAAO,MACF5F,EADL,CAEEsE,4BAA4B,MAAMtE,EAAMsE,4BAAb,CAA0CP,OAAQ4B,EAAOC,QAAQ7B,OAAQQ,KAAMoB,EAAOC,QAAQrB,SAE7H,IW/CF,2CXgDI,OAAO,MACFvE,EADL,CAEEwE,gCAAgC,MAAMxE,EAAMwE,gCAAb,CAA8CC,SAAUkB,EAAOC,YAElG,IW9DF,8CX+DI,OAAO,MACF5F,EADL,CAEEoE,sBAAsB,MACjBpE,EAAMoE,sBADU,CAEnBL,OAAQ4B,EAAOC,YAGrB,IWpEF,kDXqEI,OAAO,MACF5F,EADL,CAEEqE,uCAAwCsB,EAAOC,UAEnD,QACE,OAAO5F,IG9DTsH,SFGW,WAAwC,IAAvCtH,EAAsC,uDAA9BjM,GAAc4R,EAAgB,uCACpD,OAAQA,EAAOpB,MACb,IWzB8B,qBX0B5B,OAAO,MACFvE,EADL,CAEE0E,cAAeiB,EAAOC,UAE1B,IW7ByC,gCX8BvC,OAAO,MACF5F,EADL,CAEEqF,2BAA2B,EAC3BC,2BAA2B,EAC3BC,2BAA2B,IAE/B,IWnCyC,gCXoCvC,OAAO,MACFvF,EADL,CAEEqF,2BAA2B,EAC3BC,2BAA2B,IAE/B,IWxCyC,gCXyCvC,OAAO,MACFtF,EADL,CAEEqF,2BAA2B,EAC3BE,2BAA2B,IAE/B,IW7C6B,oBX8C3B,OAAO,MACFvF,EADL,CAEE4E,eAAgBe,EAAOC,UAE3B,IWjDiC,wBXkD/B,OAAO,MACF5F,EADL,CAEE2E,YAAagB,EAAOC,UAExB,QACE,OAAO5F,M,kGYlDPuH,GAAcC,KACfC,IAAIC,MACJD,IAAIE,MACJF,IAAIG,MACJH,IAAII,MACJC,KAAK,CACFC,cAAe,CACXC,aAAa,GAEjBC,IAAK,QACLC,WAAW,EACXC,OAAO,EACPC,MAAO,CACHC,MAAM,GAEVC,YAAa,CAAC,SACdC,KAAM,cACNC,QAAS,CACLC,SAAU,CAACC,KAAqBhB,MAChCiB,eAAgB,CACZ,CACIC,OAAQ,WACRC,eAAgB,OAChBC,SAAU,GACVC,MAAOrV,OAAOsV,gBAElB,CACIC,SAAU,8CAM9BzB,KAAK0B,eAAe,SAEpBC,0BAAe,OAAQC,MACvBC,4BAAiB,QAEF9B,U,yGC7BF+B,I,OAAb,oLAEQ,OACI,yBAAKtS,GAAIwB,KAAK+Q,MAAMvS,IAAMwB,KAAK+Q,MAAMvS,GAAIwS,UAAWhR,KAAK+Q,MAAMC,UAAWC,QAASjR,KAAK+Q,MAAMG,aAC1F,kBAAC,KAAD,CAAiBC,KAAMnR,KAAK+Q,MAAMI,KAAMC,KAAMpR,KAAK+Q,MAAMK,YAJzE,GAAmCC,cAetBC,GAAb,oLAEQ,OACI,kBAAC,GAAD,CACIN,UAAWO,KAAW,YAAa,CAAEC,SAAUxR,KAAK+Q,MAAMS,WAC1DL,KAAMM,KACNP,YAAalR,KAAK+Q,MAAMS,SAAW,aAAWxR,KAAK+Q,MAAMG,kBANzE,GAA8BG,aAiBjBK,GAAb,oLAEQ,OACI,kBAAC,GAAD,CACIV,UAAWO,KAAW,gBAAiB,CAAEC,SAAUxR,KAAK+Q,MAAMS,WAC9DL,KAAMQ,KACNT,YAAalR,KAAK+Q,MAAMS,SAAW,aAAWxR,KAAK+Q,MAAMG,kBANzE,GAAkCG,aAiBrBO,GAAb,oLAEQ,OACI,kBAAC,GAAD,CACIZ,UAAWO,KAAW,YAAa,CAAEC,SAAUxR,KAAK+Q,MAAMS,WAC1DL,KAAMU,KACNX,YAAalR,KAAK+Q,MAAMS,SAAW,aAAWxR,KAAK+Q,MAAMG,kBANzE,GAA8BG,aAgBjBS,GAAb,oLAEQ,IAAIC,EAAqB,CAAE3B,OAAQ,GAAkB4B,SAAU,IAW/D,OATIhS,KAAK+Q,MAAMI,MAAQnR,KAAK+Q,MAAMI,KAAKc,OACnCF,EAAS,CACL3B,OAAQpQ,KAAK+Q,MAAMI,KAAKc,KAAKC,MAAM,KAAK,GACxCF,SAAUhS,KAAK+Q,MAAMI,KAAKc,KAAKC,MAAM,KAAK,GAAGC,QAAQ,MAAO,KAEhEC,KAAQC,IAAIC,MACZF,KAAQC,IAAIE,OAIZ,yBACIvB,UAAU,mBACVwB,MAAO,CAAEC,MAAO,OAAQC,gBAAiB1S,KAAK+Q,MAAMI,KAAKwB,mBAEzD,kBAAC,KAAD,CAAiBxB,KAAMY,SAlBvC,GAAqCV,aC3DxBuB,GAAb,oLAEQ,IAAIb,EAAqB,CAAE3B,OAAQ,GAAkB4B,SAAU,IAW/D,OATIhS,KAAK+Q,MAAMI,OACXY,EAAS,CACL3B,OAAQpQ,KAAK+Q,MAAMI,KAAKe,MAAM,KAAK,GACnCF,SAAUhS,KAAK+Q,MAAMI,KAAKe,MAAM,KAAK,GAAGC,QAAQ,MAAO,KAE3DC,KAAQC,IAAIC,MACZF,KAAQC,IAAIE,OAIZ,4BACI/T,GAAIwB,KAAK+Q,MAAMvS,IAAMwB,KAAK+Q,MAAMvS,GAChCuN,KAAM/L,KAAK+Q,MAAMhF,KAAO/L,KAAK+Q,MAAMhF,KAAO,SAC1CiF,UAAWO,KAAW,MAAOvR,KAAK+Q,MAAMC,UAAW,CAAE,aAAchR,KAAK+Q,MAAM8B,YAC9ErB,SAAUxR,KAAK+Q,MAAMS,SACrBP,QAASjR,KAAK+Q,MAAME,QACpBuB,MAAO,CAAEM,OAAQ9S,KAAK+Q,MAAM+B,OAAQC,SAAU/S,KAAK+Q,MAAMgC,SAAUC,MAAOhT,KAAK+Q,MAAMiC,MAAOC,OAAQjT,KAAK+Q,MAAMkC,SAE9GjT,KAAK+Q,MAAMI,MACR,yBAAKH,UAAU,YACX,kBAAC,KAAD,CAAiBG,KAAMA,aAAKY,MAGnC/R,KAAK+Q,MAAMmC,KACZ,yBAAKlC,UAAU,sBAAsBhR,KAAK+Q,MAAMoC,cAAgBnT,KAAK+Q,MAAMoC,cAAgB,IAC3F,mCA7BhB,GAA4B9B,aA+Cf+B,GAAb,oLAEQ,OACI,kBAAC,GAAD,CACI5U,GAAIwB,KAAK+Q,MAAMvS,IAAMwB,KAAK+Q,MAAMvS,GAChCwS,UAAWO,KAAW,cAAevR,KAAK+Q,MAAMC,WAChDjF,KAAM/L,KAAK+Q,MAAMhF,KACjBmH,KAAMlT,KAAK+Q,MAAMmC,KACjB1B,SAAUxR,KAAK+Q,MAAMS,SACrBqB,UAAW7S,KAAK+Q,MAAM8B,UACtB5B,QAASjR,KAAK+Q,MAAME,QACpB+B,MAAOhT,KAAK+Q,MAAMiC,MAClBC,OAAQjT,KAAK+Q,MAAMkC,aAZnC,GAAmC5B,aAkCtBgC,GAAb,oLAEQ,OACI,kBAAC,GAAD,CACI7U,GAAIwB,KAAK+Q,MAAMvS,IAAMwB,KAAK+Q,MAAMvS,GAChC2S,KAAMnR,KAAK+Q,MAAMI,KACjBH,UAAWO,KAAW,gBAAiBvR,KAAK+Q,MAAMC,WAClDjF,KAAM/L,KAAK+Q,MAAMhF,KACjBmH,KAAMlT,KAAK+Q,MAAMmC,KACjBC,cAAenT,KAAK+Q,MAAMoC,cAC1B3B,SAAUxR,KAAK+Q,MAAMS,SACrBqB,UAAW7S,KAAK+Q,MAAM8B,UACtB5B,QAASjR,KAAK+Q,MAAME,QACpB6B,OAAQ9S,KAAK+Q,MAAM+B,OACnBC,SAAU/S,KAAK+Q,MAAMgC,SACrBC,MAAOhT,KAAK+Q,MAAMiC,MAClBC,OAAQjT,KAAK+Q,MAAMkC,QAElBjT,KAAK+Q,MAAMuC,cAlB5B,GAAqCjC,aAiCxBkC,GAAb,oLAEQ,OACI,yBAAKvC,UAAWO,KAAW,eAAgBvR,KAAK+Q,MAAMC,UAAW,CAAE,aAAchR,KAAK+Q,MAAM8B,WAAa,CAAE,SAAY7S,KAAK+Q,MAAMS,WAAcP,QAASjR,KAAK+Q,MAAME,SAC/JjR,KAAK+Q,MAAMmC,KACZ,mCALhB,GAAoC7B,aAoBvBmC,GAAb,oLAEQ,OACI,kBAAC,GAAD,CACIxC,UAAWO,KAAW,cAAevR,KAAK+Q,MAAMC,WAChDjF,KAAM/L,KAAK+Q,MAAMhF,KACjBmH,KAAMlT,KAAK+Q,MAAMmC,KACjB1B,SAAUxR,KAAK+Q,MAAMS,SACrBqB,UAAW7S,KAAK+Q,MAAM8B,UACtB5B,QAASjR,KAAK+Q,MAAME,cATpC,GAAmCI,aAqBtBoC,GAAb,oLAEQ,OACI,yBAAKzC,UAAWO,KAAW,wBAAyBvR,KAAK+Q,MAAMC,YAC3D,uBAAG0C,KAAM1T,KAAK+Q,MAAM2C,MAChB,kBAAC,KAAD,CAAiBvC,KAAMwC,KAAsB3C,UAAU,sBACtDhR,KAAK+Q,MAAMmC,WANhC,GAAoC7B,aAmBvBuC,GAAb,oLAEQ,OACI,yBAAK5C,UAAWO,KAAW,wBAAyBvR,KAAK+Q,MAAMC,YAC3D,4BAAQjF,KAAK,SAASkF,QAASjR,KAAK+Q,MAAME,SACtC,kBAAC,KAAD,CAAiBE,KAAMwC,KAAsB3C,UAAU,sBACtDhR,KAAK+Q,MAAMmC,WANhC,GAAgC7B,aAmBnBwC,GAAb,oLAEQ,IAAM7C,EAAYhR,KAAK+Q,MAAMC,WAAa,GAC1C,OACI,4BAAQjF,KAAK,SAASkF,QAASjR,KAAK+Q,MAAME,QAASD,UAAS,mBAAcA,IACrEhR,KAAK+Q,MAAMmC,UAL5B,GAAgC7B,aAgBnByC,GAAb,6MACI5C,YAAc,WACN,EAAKH,MAAMgD,mBACX,EAAKhD,MAAMgD,qBAHvB,yEAOQ,OACI,kBAAC,GAAD,CACI/C,UAAWO,KAAW,oBAAqBvR,KAAK+Q,MAAMC,WACtDG,KAAM6C,KACN9C,YAAalR,KAAKkR,kBAXlC,GAAqCG,aC3LtB4C,G,YAnCX,WAAYlD,GAAa,IAAD,8BACpB,8CAAMA,KACDvJ,MAAQ,CAAE0M,UAAU,GAFL,E,gFASNxI,EAAYyI,M,+BAG1B,OAAInU,KAAKwH,MAAM0M,SAEP,0BACIjD,QAAS,WACLmD,EAAQC,KAAK,MAEjBrD,UAAU,kBAEV,kBAAC,KAAD,CAAiBG,KAAMmD,KAAqB7B,MAAM,UAAUrB,KAAK,QACjE,oDACA,wIAIA,kBAAC,GAAD,CAAerF,KAAK,SAASmH,KAAK,kBAKvClT,KAAK+Q,MAAMuC,Y,gDA1BU5H,GAC5B,MAAO,CAAEwI,UAAU,O,GAPC7C,a,iBCRfkD,GAAe,WAAO,IAAD,EACJC,mBAAStZ,OAAOuZ,YADZ,oBACvBzB,EADuB,KAChB0B,EADgB,OAEAF,oBAAS,GAFT,oBAEvBG,EAFuB,KAEdC,EAFc,KA0B9B,OAtBAC,qBAAU,WAIN,IAAMC,EAAW,WACTH,GACAD,EAASxZ,OAAOuZ,aASxB,OALAvZ,OAAO6Z,iBAAiB,SAAUD,GAK3B,WACH5Z,OAAO8Z,oBAAoB,SAAUF,GACrCF,GAAW,MAGhB,IAEI5B,GAAS,KAEPiC,GAAS,SAAC,GAAuB,IAArB3B,EAAoB,EAApBA,SACf4B,EAAYX,KAClB,OAAQ,oCAAGW,EAAY,KAAO5B,IAGrB6B,GAAU,SAAC,GAAuB,IAArB7B,EAAoB,EAApBA,SAChB4B,EAAYX,KAClB,OAAQ,oCAAGW,EAAY5B,EAAW,O,oPCjC/B,SAAS8B,GAAeC,GAE3B,IAAIC,EAAUC,KAAMC,IAAeH,EAAQI,IAAK,CAC5CC,QAASL,EAAQK,UASrB,OANAJ,EAAQK,OAAM,SAACC,GACPA,GAAOA,EAAIC,UAAoC,MAAxBD,EAAIC,SAASC,QAAkBT,EAAQU,aAC9DxF,GAAMyF,SAASC,IAAO,OAIvBX,EAGJ,SAASY,GAAgBb,EAAsBc,GAElD,IAAIb,EAAUC,KAAMa,KAAKf,EAAQI,IAAKJ,EAAQgB,K,2VAAhC,EACVX,QAASL,EAAQK,SACdS,IAUP,OANAb,EAAQK,OAAM,SAACC,GACPA,GAAOA,EAAIC,UAAoC,MAAxBD,EAAIC,SAASC,QAAkBT,EAAQU,aAC9DxF,GAAMyF,SAASC,IAAO,OAIvBX,EAGJ,SAASgB,GAAejB,GAE3B,IAAIC,EAAUC,KAAMgB,IAAIlB,EAAQI,IAAKJ,EAAQgB,KAAM,CAC/CX,QAASL,EAAQK,UASrB,OANAJ,EAAQK,OAAM,SAACC,GACPA,GAAOA,EAAIC,UAAoC,MAAxBD,EAAIC,SAASC,QAAkBT,EAAQU,aAC9DxF,GAAMyF,SAASC,IAAO,OAIvBX,EAGJ,SAASkB,GAAkBnB,GAE9B,IAAIC,EAAUC,KAAMkB,OAAOpB,EAAQI,IAAK,CACpCC,QAASL,EAAQK,UASrB,OANAJ,EAAQK,OAAM,SAACC,GACPA,GAAOA,EAAIC,UAAoC,MAAxBD,EAAIC,SAASC,QAAkBT,EAAQU,aAC9DxF,GAAMyF,SAASC,IAAO,OAIvBX,EChEJ,IAAMoB,GACT,WAAYjB,EAAakB,GAKrB,GAL2C,yBAcxClB,SAduC,OAevCC,aAfuC,OAgBvCK,aAAuB,EAhBgB,KAiBvCY,gBAjBuC,EAC1C3W,KAAK2W,WAAaA,EAClB3W,KAAKyV,IAAMzV,KAAK2W,WAAalB,EAAM,QAAUA,EAC7CzV,KAAK0V,QAAU,IAEV1V,KAAK2W,WAAY,CAClB,IAAMC,EAAQpG,eAAeqG,QAAQ,gBAEjCD,IACA5W,KAAK0V,QAAL,cAAgC,UAAUtU,OAAOwV,MAWpDE,GAAb,YACI,WAAYrB,GAAkH,IAAD,EAApGsB,EAAoG,uDAAjC,GAAIJ,EAA6B,mFACzH,8CAAMlB,EAAKkB,IAEPI,IACA,EAAKtB,KAAL,WAAgB,EAAKuB,iBAAiBD,KAJ+E,EADjI,+EAS6BE,GACrB,IAAMC,EAAgB,GACtB,IAAK,IAAMC,KAAOF,EACdC,EAAc7C,KAAK+C,mBAAmBD,GAAO,IAAMC,mBAAmBH,EAAIE,GAAOF,EAAIE,GAAKE,WAAa,KAE3G,OAAOH,EAAcI,KAAK,SAdlC,GAAgCZ,IAkBnBa,GAAb,YACI,WAAY9B,GAA2C,IAAD,EAA7BkB,EAA6B,oFAClD,8CAAMlB,EAAKkB,KAMRN,UAP+C,EAGlD,EAAKX,QAAL,OAAyB,mBACzB,EAAKA,QAAQ,gBAAkB,mBAJmB,EAD1D,yEAWQ,OAAO8B,KAAKC,UAAUzX,KAAKqW,UAXnC,GAAiCK,IAepBgB,GAAb,YACI,WAAYjC,GAA2C,IAAD,EAA7BkB,EAA6B,oFAClD,8CAAMlB,EAAKkB,KAMRN,UAP+C,EAGlD,EAAKX,QAAL,OAAyB,mBACzB,EAAKA,QAAQ,gBAAkB,mBAJmB,EAD1D,yEAWQ,OAAO8B,KAAKC,UAAUzX,KAAKqW,UAXnC,GAAgCK,IAenBiB,GAAb,yIAAmCjB,IAEtBkB,GAAb,YACI,WAAYnC,GAAkH,IAAD,EAApGsB,EAAoG,uDAAjC,GAAIJ,EAA6B,mFACzH,8CAAMlB,EAAKkB,IAEPI,IACA,EAAKtB,KAAL,WAAgB,EAAKuB,iBAAiBD,KAJ+E,EADjI,+EAS6BE,GACrB,IAAMC,EAAgB,GACtB,IAAK,IAAMC,KAAOF,EACdC,EAAc7C,KAAK+C,mBAAmBD,GAAO,IAAMC,mBAAmBH,EAAIE,GAAOF,EAAIE,GAAKE,WAAa,KAE3G,OAAOH,EAAcI,KAAK,SAdlC,GAAoCZ,ICrEvBmB,GAAb,YAEI,WAAYxK,GAAyB,IAAD,6BAEhC,8CADkB,WAGbgJ,KAAOhJ,EACZ,EAAK0I,aAAc,EALa,EAFxC,4BAA2CwB,IAW9BO,GAAb,YAEI,WAAYzK,GAAyB,IAAD,6BAEhC,8CADkB,iBAGbgJ,KAAOhJ,EACZ,EAAK0I,aAAc,EALa,EAFxC,4BAA4CwB,IAW/BQ,GAAb,YAEI,WAAY1K,GAAyB,IAAD,6BAEhC,8CADkB,mBAGbgJ,KAAOhJ,EACZ,EAAK0I,aAAc,EALa,EAFxC,4BAA8CwB,ICxBzBS,G,kCAAAA,GACHC,MAAgB,c,cCDbC,G,0GACU9b,GACvB,OAA4B,IAArBA,EAAUqG,QAAsC,WAAtBrG,EAAU,GAAG+b,O,8BAE5B/b,GAClB,YAAyDT,IAAlDS,EAAUgc,MAAK,SAAAC,GAAI,MAAkB,UAAdA,EAAKF,Y,KCH9BG,GAAb,YACE,aAAe,oBAAD,mDACG,2BAFnB,4BAA6CxB,ICAhCyB,GAAb,YACI,WAAYC,GAAsC,IAAD,6BAG7C,8CAFkB,4BAIbnC,KAAOmC,EALiC,EADrD,4BAA8CjB,ICAjCkB,GAAb,YACI,WAAYC,GAAiC,IAAD,6BAGxC,8CAFS,yBAIJrC,KAAOqC,EACZ,EAAK3C,aAAc,EANqB,EADhD,4BAAyCwB,ICA5BoB,GAAb,YACE,WAAY3c,GAAkB,oBAC5B,IAAIyZ,EAAW,kBAAczZ,EAAd,yBADY,mDAGrByZ,IAJV,4BAAiDqB,ICApC8B,GAAb,YACE,WACE7Q,EACA8Q,GACC,IAAD,sBACA,IAAIpD,EAAW,kBAAc1N,EAAd,yBADf,OAGA,8CAAM0N,KAEDY,KAAOwC,EALZ,EAJJ,4BAAkDtB,ICArCuB,GAAb,YACI,aAAe,oBAAD,mDACQ,oCAF1B,4BAAiDhC,ICApCiC,GAAb,YACI,aAAe,oBAAD,mDACQ,wCAF1B,4BAA0DjC,ICA7CkC,GAAb,YACI,aAAe,oBAAD,mDACQ,8CAF1B,4BAAwDlC,ICc3CmC,GACX,SAAC1c,GAAD,8CACA,WAAOyZ,GAAP,SAAAvX,EAAA,sDACEuX,EAAS,CACPjK,K1BhB4B,qB0BiB5BqB,QAAS7Q,IAHb,2CADA,uDAQW2c,GACX,SAAC1c,GAAD,8CAKA,WAAOwZ,GAAP,SAAAvX,EAAA,sDACEuX,EAAS,CAAEjK,K1B3BkB,oB0B2BmBqB,QAAS5Q,IAD3D,2CALA,uDASW2c,GACX,yDACA,WAAOnD,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CACPjK,K1BhCwC,iC0BiCxCqB,SAAS,IAEXgI,GACE,IAAIkD,IAEHe,MAAK,SAACxD,GACLG,EAAS,CACPjK,K1BvCoC,iC0BwCpCqB,QAASyI,EAASrT,UAGrBmT,OAAM,SAACjK,GACNsK,EAAS,CACPjK,K1B5CoC,iC0B6CpCqB,QAAS1B,OAjBjB,2CADA,yDA+CW4N,GAA0B,yDACrC,WAAOtD,EAAUoD,GAAjB,SAAA3a,EAAA,sDACE2W,GAA6B,IAAIuD,GAA4BS,IAAW7L,KAAKvR,UAC1Eqd,MAAK,SAACE,GACLvD,EAAS,CACPjK,K1BrER,oC0BsEQqB,QAASmM,EAAQ/W,UAGpBmT,OAAM,SAACjK,GACN8N,QAAQC,IAAI,sCAAuC/N,MATzD,2CADqC,yDAgG1BgO,GACX,yDACE,WAAO1D,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CAAEjK,K1BpJwC,8C0BqJnDqJ,GACE,IAAI4D,IAEHK,MAAK,SAACxD,GACL,IAAM8D,EAAoB,CAAEC,UAAW/D,EAASrT,KAAKqX,UAAWC,WAAYjE,EAASrT,KAAKuX,WAAYC,UAAWnE,EAASrT,KAAKyX,WAC/HjE,EAAS,CACPjK,K1B1J6C,4C0B2J7CqB,QAASuM,OAGZN,MAAK,SAAAa,GACJlE,EAASmE,SAEVxE,OAAM,SAACjK,GACNsK,EAAS,CACPjK,K1BlK6C,4C0BmK7CqB,QAAS1B,OAlBjB,2CADF,yDC3IWwB,GACX,SACE5N,EACA8a,EACArO,GAHF,8CAKE,WAAOiK,EAAUoD,GAAjB,iBAAA3a,EAAA,sDACEuX,EAAS,CAAEjK,K5BhDY,gB4BgDSqB,SAAS,IAErCiN,EAAsB,CACxBrZ,MAAO1B,EACPgb,SAAUF,EACVG,WAAYvC,GAAQC,OANxB,KAUUlM,EAVV,OAWS,WAXT,OAcS,aAdT,6BAYMyO,EAAY,IAAI1C,GAAuBuC,GAZ7C,mCAeMG,EAAY,IAAIzC,GAAyBsC,GAf/C,4BAkBMG,EAAY,IAAI3C,GAAsBwC,GAlB5C,QAqBEnE,GAAuBsE,GACpBnB,MAAK,SAACxD,GACLG,EAAS,CAAEjK,K3BpEU,kB2BoEaqB,QAAS,CAACyI,EAASrT,KAAKiY,WAAY5E,EAASrT,KAAKvB,eACpF+U,EAAS,CAAEjK,K3BtEO,e2BsEaqB,QAASyI,EAASrT,KAAKkY,UACtD1E,EAAS,CAAEjK,K3BxEQ,gB2BwEaqB,QAAS,CAACyI,EAASrT,KAAK3B,UAAWgV,EAASrT,KAAK1B,YACjFkV,EAAS,CAAEjK,K3BtEU,kB2BsEaqB,QAASyI,EAASrT,KAAKmY,SACzD3E,EAAS,CAAEjK,K5BrEW,mB4BqEaqB,QAASrB,IAC5CiK,EAAS,CAAEjK,K3BtCe,uB2BsCaqB,QAASyI,EAASrT,KAAKoY,mBAE9D,IAAIxe,EAA2B,GAQ/B,GAPAyZ,EAASrT,KAAK0V,UAAU2C,KAAI,SAAAC,GAAQ,OAAI1e,EAAUiY,KAAK,CAAE8D,KAAM2C,EAASC,KAAMC,qBAAsBF,EAASG,0BAC7GjF,EAAS,CAAEjK,K3BzES,iB2ByEaqB,QAAShR,IAMtCyZ,EAASrT,KAAKmY,OAAOlY,OAAS,EAAG,CACnC,IAAIyY,EAAkC,CACpCnN,QAAS8H,EAASrT,KAAKmY,OAAO,GAAG5M,QACjCoN,UAAWtF,EAASrT,KAAKmY,OAAO,GAAGI,KACnCK,gBAAiBvF,EAASrT,KAAKmY,OAAO,GAAGS,gBACzCC,eAAgBxF,EAASrT,KAAKmY,OAAO,GAAGU,eACxC/Q,UAAWuL,EAASrT,KAAKmY,OAAO,GAAGrQ,UACnCgR,UAAWzF,EAASrT,KAAKmY,OAAO,GAAGW,UACnC7N,eAAgBoI,EAASrT,KAAKmY,OAAO,GAAGY,mBAAmB,GACvD1F,EAASrT,KAAKmY,OAAO,GAAGY,mBAAmB,GAAGC,aAC9C7f,GAEF8f,EAAe,CACjBC,SAAU7F,EAASrT,KAAKmY,OAAO,GAAGgB,SAClCC,SAAU/F,EAASrT,KAAKmY,OAAO,GAAGkB,SAClCC,aAAcjG,EAASrT,KAAKmY,OAAO,GAAGoB,cAGxC,GAAI3C,IAAW7L,MAAQ6L,IAAW7L,KAAKhR,MAAO,CAC5C,IAAMyf,EAAiB5C,IAAW7L,KAAKhR,MAAMwR,QAE7C,GAAIiO,GAAkBnG,EAASrT,KAAM,CACnC,IAAMjG,EAAQsZ,EAASrT,KAAKmY,OAAOvC,MACjC,SAAC6D,GAAD,OAAOA,EAAElO,QAAQsJ,aAAe2E,KAG9Bzf,IACF2e,EAAgB,CACdnN,QAASxR,EAAMwR,QACfoN,UAAW5e,EAAMwe,KACjBK,gBAAiB7e,EAAM6e,gBACvBC,eAAgB9e,EAAM8e,eACtB/Q,UAAW/N,EAAM+N,UACjBgR,UAAW/e,EAAM+e,UACjB7N,eAAgBlR,EAAMgf,mBAAmB,GACrChf,EAAMgf,mBAAmB,GAAGC,aAC5B7f,GAEN8f,EAAe,CACbC,SAAUnf,EAAMof,SAChBC,SAAUrf,EAAMsf,SAChBC,aAAcvf,EAAMwf,gBAM5B/F,EAAS,CAAEjK,K3BhIW,qB2BgIeqB,QAAS8N,IAC9ClF,EAAS,CAAEjK,K3BhIU,oB2BgIeqB,QAASqO,SAE7C,IAAKvD,GAAUgE,QAAQ9f,GAAY,CAOjC4Z,EAAS,CAAEjK,K3BzIQ,oB2ByIiBqB,QANjB,CACjBsO,SAAU,KACVE,SAAU,aACVE,aAAc,CAAC,SAAU,SAAU,cAAe,aAAc,aAAc,MAAO,YAAa,YAAa,OAAQ,OAAQ,WAAY,iBAAkB,aAI/J9F,EAAS,CAAEjK,K3BzGY,wB2ByGiBqB,QAASyI,EAASrT,KAAK2Z,mBAK/DtG,EAASrT,KAAK4Z,aAAa3Z,OAAS,IACtCuT,EAAS,CACPjK,KxBrJwB,yBwBsJxBqB,QAASyI,EAASrT,KAAK4Z,eAEzBpG,EAAS,CACPjK,KxB1JmB,oBwB2JnBqB,QAASyI,EAASrT,KAAK4Z,aAAa,MAIxC5L,KAAe6L,QACb,eACAxG,EAASrT,KAAK8Z,aAAaC,aAE7BvG,EAAS,CAAEjK,K5BlKQ,gB4BkKaqB,SAAS,OAE1CiM,MAAK,SAAAa,GACJlE,EAAS0D,SAEV/D,OAAM,SAACjK,GACN8N,QAAQC,IAAI/N,GACZ,IAAI8Q,EAAiB,+BAErB,GAAI9Q,GAASA,EAAMmK,SAEjB,OADA2D,QAAQC,IAAI/N,EAAMmK,UACVnK,EAAMmK,SAASC,QACrB,KAAK,IAEqC,yBAAtCpK,EAAMmK,SAASrT,KAAKia,QAAQC,OAE5BF,EAAiB,2BAEqB,qBAAtC9Q,EAAMmK,SAASrT,KAAKia,QAAQC,SAE5BF,EAAiB,qCAMzBxG,EAAS,CAAEjK,K5B3LQ,gB4B2LaqB,QAASoP,OA9I/C,4CALF,yDA4JWvG,GACX,SAAC0G,GAAD,8CACE,WAAO3G,GAAP,SAAAvX,EAAA,sDACE+R,KAAeoM,WAAW,gBAC1BpM,KAAeoM,WAAW,gBAC1B5G,EAAS,CAAEjK,K5BvMK,S4BuMSqB,QAASuP,IAHpC,2CADF,uDAOWxC,GACX,yDACE,WAAOnE,EAAUoD,GAAjB,uCAAA3a,EAAA,sDACMoe,EAA8BzD,IAAW7L,KAAKnR,UAC9C0gB,EAA8D1D,IAAW7L,KAAK9P,6BAC9ErB,EAAyC,GAH/C,uCAMqBygB,EANrB,yEAMaxE,EANb,kBAO2B9Z,EAAa8Z,EAAK2C,sBAP7C,QAOU+B,EAPV,OAQM3gB,EAAUiY,KAAK0I,GARrB,6QAUQnf,EAA0BxB,EAAU4gB,QAAO,SAAA3E,GAAI,OACjDA,EAAKzW,OAAOqb,sCACT5E,EAAKzW,OAAOsb,yBAAyBza,OAAS,GAC9Cqa,EAA4BlD,UAAY,KAC3CnX,OAAS,EACP5E,EAA6BzB,EAAU4gB,QAAO,SAAA3E,GAAI,OACnDA,EAAKzW,OAAOqb,wCACbxa,OAAS,EACP3E,EAAyB1B,EAAU4gB,QAAO,SAAA3E,GAAI,OAAIA,EAAKzW,OAAOub,kCAAgC1a,SAAWrG,EAAUqG,OAEvHuT,EAAS,CAAEjK,K3B5LiB,uB2B4LWqB,QADhB,CAACxP,EAAyBC,EAA4BC,KAnBjF,4EAsBW,GAtBX,mFADF,yD,kBC5LWsf,GAAb,6MACU5K,MAAa,CACnB6K,gBAAiB,EAAKtM,MAAMuM,SAAW,EAAKvM,MAAMuM,SAASC,YAAc,EACzEC,aAAc,EAAKzM,MAAMuM,SAAW,EAAKvM,MAAMuM,SAASC,YAAc,EACtEE,cACE,SAAW,EAAK1M,MAAMuM,SAAW,EAAKvM,MAAMuM,SAASI,WAAa,GACpEC,iBAAkB,EAAK5M,MAAMuM,SAAW,EAAKvM,MAAMuM,SAASI,WAAa,EACzEE,aAAc,EAAK7M,MAAMuM,SAAW,EAAKvM,MAAMuM,SAASO,SAAW,EACnEC,UAAW,EAAK/M,MAAMuM,SAAW,EAAKvM,MAAMuM,SAASO,SAAW,EAChEE,WACE,SAAW,EAAKhN,MAAMuM,SAAW,EAAKvM,MAAMuM,SAASU,QAAU,GACjEC,cAAe,EAAKlN,MAAMuM,SAAW,EAAKvM,MAAMuM,SAASU,QAAU,GAXvE,yEAeI,OACE,yBACEhN,UAAWO,KAAW,SAAUvR,KAAK+Q,MAAMmN,oBAC3C1L,MAAOxS,KAAKwS,OAEZ,yBACExB,UAAWO,KAAW,kBAAmBvR,KAAK+Q,MAAMoN,kBACpD3L,MAAOxS,KAAK+Q,MAAMqN,eAEjBpe,KAAK+Q,MAAMuC,eAxBtB,GAA4BjC,aAoCfgN,GAAb,6MACU7L,MAAa,CACnB6K,gBAAiB,EAAKtM,MAAMuM,SAASC,YACrCC,aAAc,EAAKzM,MAAMuM,SAASC,YAClCE,cAAe,QAAU,EAAK1M,MAAMuM,SAASI,WAC7CC,iBAAkB,EAAK5M,MAAMuM,SAASI,WACtCE,aAAc,EAAK7M,MAAMuM,SAASO,SAClCC,UAAW,EAAK/M,MAAMuM,SAASO,SAC/BE,WAAY,QAAU,EAAKhN,MAAMuM,SAASU,QAC1CC,cAAe,EAAKlN,MAAMuM,SAASU,SATvC,yEAaI,OACE,yBACEhN,UAAWO,KAAW,cAAevR,KAAK+Q,MAAMmN,oBAChD1L,MAAOxS,KAAKwS,OAEXxS,KAAK+Q,MAAMuC,cAlBpB,GAAgCjC,aA0BnBiN,GAAb,oLAEI,OAAO,yBAAKtN,UAAU,oBAAoBhR,KAAK+Q,MAAMuC,cAFzD,GAAoCjC,aAUvBkN,GAAb,oLAEI,OAAO,yBAAKvN,UAAU,iBAAiBhR,KAAK+Q,MAAMyN,WAFtD,GAAkCnN,aAuBrBoN,IAbqBpN,YAalC,oLAEI,OACE,kBAAC,GAAWrR,KAAK+Q,MACf,kBAAC,KAAD,CAAMC,UAAU,cAAc0N,GAAI1e,KAAK+Q,MAAM2N,GAAIlgB,GAAIwB,KAAK+Q,MAAMvS,IAC7DwB,KAAK+Q,MAAMuC,eALtB,GAAgCjC,cAkBnBsN,GAAb,oLAEI,OACE,kBAAC,GAAW3e,KAAK+Q,MACf,yBAAKC,UAAU,cAAcC,QAASjR,KAAK+Q,MAAME,SAC9CjR,KAAK+Q,MAAMuC,eALtB,GAAqCjC,aC7HxBuN,GAAoB,a,UCOpBC,I,cAAb,6MACWrX,MAAqB,CACxBvH,MAAO,EAAK8Q,MAAM9Q,QAAS,GAFnC,yEAKkC,IAAD,OACzB,OACI,yBACI+Q,UAAWO,KAAW,mBAAoB,CAAEuN,OAAQ9e,KAAKwH,MAAMvH,OAASD,KAAK+Q,MAAMgO,iBACnF9N,QAAS,kBAAM,EAAK+N,kBAEpB,4BAAQhO,UAAU,mBAXlC,sCAiBQ,IAAMiO,GAAYjf,KAAKwH,MAAMvH,MAE7BD,KAAKkf,SAAS,CAAEjf,MAAOgf,IAEW,mBAAvBjf,KAAK+Q,MAAMoO,UACjBnf,KAAK+Q,MAAMoO,SAAsCF,OAtB9D,GAA4B5N,cCEtB+N,I,OAAYC,aAAgBpV,MAmCrBqV,GAAb,6MAoFUC,gBAAuB,SAACxO,GAAD,OAC7ByO,IAAMC,SAAS5E,IAAI9J,EAAMuC,UAAU,SAACoM,GAAD,OACjCF,IAAMG,aAAaD,EAAO,CACxBE,WAAY,SAACC,GACXA,EAAMC,iBACN/O,EAAMgP,SAAShP,EAAM9Q,cAzF/B,yEACgC,IAAD,OAC3B,OACE,kBAAC,KAAD,MACG,SAAC+f,GACA,OACE,yBACEhP,UAAWO,KACT,qBACA,EAAKR,MAAMmN,qBAGb,kBAAC,KAAD,CACE+B,WAAY,EAAKlP,MAAMkP,WACvBC,IAAK,EAAKnP,MAAMoP,QAChBC,IAAK,EAAKrP,MAAMsP,QAChBrP,UAAW,EAAKD,MAAMC,UACtBoO,UAAWA,GACXkB,QAAQ,QACRpX,OAAQ,EAAK6H,MAAM7H,OAChB8T,QAAO,SAACuD,GAAD,OAAO,EAAKC,aAAaD,MAChC1F,KAAI,SAACgF,GACJ,IAAIY,EAAOC,OAAOC,OAAO,GAAId,GAC7B,GAAIY,EAAKG,IAAK,CACZ,IAAIC,EAAqBJ,EAAKG,IAC9BC,EACEA,EAAWC,OAAO,EAAGD,EAAWpe,OAAS,GAAK,IAChDge,EAAKG,IAAMC,EAEb,OAAOJ,KAEXM,UAAW,EAAKhQ,MAAMgQ,UACtBC,mBAAmB,KACnBC,sBAAsB,QACtBC,WAAY,CACVC,gBAAiB,SAACpQ,GAAD,OACf,kBAAC,EAAKwO,gBAAN,eACEQ,SAAU,EAAKhP,MAAMqQ,cACjBrQ,KAGRsQ,aAAc,EAAKA,aAAaC,KAAK,GACrCC,QAAS,EAAKA,QAAQD,KAAK,IAE7BE,MAAO,CAAEC,OAAO,GAChBL,aAAc,EAAKrQ,MAAMqQ,aACzBM,mBAAoB,EACpBC,cAAe,EAAK5Q,MAAM4Q,cAC1BC,WAAY,EAAK7Q,MAAM6Q,WACvBC,YAAa,EAAK9Q,MAAM8Q,YACxBC,cAAe,KACfC,mBAAoB,eAEtB,yBAAK/Q,UAAU,iBACZ,EAAKD,MAAMgQ,UAAUlG,KAAI,SAACmH,GAAD,OACxB,0BACE7K,IAAK,YAAc6K,EAASxjB,GAC5BwS,UACE,gBACCgR,EAAShR,UAAY,IAAMgR,EAAShR,UAAY,KAGlDgR,EAASC,UACR,kBAAC,GAAD,CACEhiB,MAAO+hB,EAASE,YAChB/C,SAAU,SAACF,GAAD,OACR,EAAKkD,cAAcH,EAAU/C,IAE/BF,gBAAiBiD,EAAShR,YAG5B,uBAAGA,UAAU,oBAEdgP,EAAEgC,EAASxD,kBAzEhC,mCA8FuB4D,GAAsC,IAAD,OACpDC,EAC4C,IAA9CpY,IAAOmY,EAAkBvC,MAAMe,KAAK0B,MAClCC,EAC8C,IAAhDtY,IAAOmY,EAAkBvC,MAAM2C,OAAOF,MACxC,OACE,yBACEtR,UAAU,oBACVC,QAAS,SAACsP,GAAD,OACP,EAAKxP,MAAM0R,cACX,EAAK1R,MAAM2R,iBACX,EAAK3R,MAAM0R,aAAaL,EAAkBvC,MAAOU,KAGnD,yBACEvP,UAAWO,KACT,YACA6Q,EAAkBvC,MAAM7O,UACxB,CACE,mBAAoBoR,EAAkBvC,MAAM8C,OAC5C,4BAA6BP,EAAkBQ,eAC/C,4BAA6BR,EAAkBS,eAC/C,+BAAgCR,EAChC,+BAAgCE,EAChCO,UAAW9iB,KAAK+Q,MAAM2R,mBAI1B,yBAAK1R,UAAU,0BA1HzB,8BAgIkB+R,GACd,IAAMC,EAAW,SAAC7V,GAChB4V,EAAanB,WAAWzU,IAG1B,OACE,yBAAK6D,UAAU,eACb,0BAAMA,UAAU,qBAAqB+R,EAAaphB,OAClD,0BAAMqP,UAAU,iBACd,4BACEjF,KAAK,SACLkF,QAAS+R,EAAS1B,KAAK,KAAM,QAC7B9P,SACExR,KAAK+Q,MAAMoP,SACXlW,IAAO8Y,EAAaE,MAAMC,eACxBljB,KAAK+Q,MAAMoP,QACX,UAIJ,kBAAC,KAAD,CAAiBhP,KAAM6C,QAEzB,4BAAQjI,KAAK,SAASkF,QAAS+R,EAAS1B,KAAK,KAAM,UAAnD,SAGA,4BACEvV,KAAK,SACLkF,QAAS+R,EAAS1B,KAAK,KAAM,QAC7B9P,SACExR,KAAK+Q,MAAMsP,SACXpW,IAAO8Y,EAAaE,MAAME,cACxBnjB,KAAK+Q,MAAMsP,QACX,UAIJ,kBAAC,KAAD,CAAiBlP,KAAMiS,YApKnC,oCA2KwBpB,EAA4B/C,GAChD+C,EAASE,YAAcjD,EACvBjf,KAAKkf,SAAS,MA7KlB,mCAgLuBW,GACnB,OAAK7f,KAAK+Q,MAAMgQ,YAAc/gB,KAAK+Q,MAAMgQ,UAAUte,QAKjDzC,KAAK+Q,MAAMgQ,UACR/D,QAAO,SAAC9C,GAAD,OAAOA,EAAE1b,KAAOqhB,EAAMwD,cAC7BrG,QAAO,SAAC9C,GAAD,OAAQA,EAAE+H,WAAc/H,EAAE+H,WAAa/H,EAAEgI,eAAczf,OACjE,MAzLN,GAA8B4O,aCdfiS,I,2LArBD,IAAD,OACL,OACI,kBAAC,KAAD,MAEQ,SAACtD,GACG,OACI,kBAAC,GAAD,CAAQ1C,SAAU,EAAKvM,MAAMuM,UACzB,kBAAC,GAAD,CAAckB,MAAOwB,EAAE,0BAA2B,CAAEuD,aAActZ,MAASG,OAAO,iBAClF,yBAAK4G,UAAU,mBACX,kBAAC,GAAD,CAAU9H,OAAQ,EAAK6H,MAAM7H,OAAQ6X,UAAW,EAAKhQ,MAAMgQ,YAC3D,kBAAC,KAAD,CAAMrC,GHvBR,eGuBgCsB,EAAE,4C,GAXvC3O,c,6BCkBdmS,G,oLAnBD,IAAD,OACL,OACI,kBAAC,KAAD,MAEQ,SAACxD,GACG,OACI,kBAAC,GAAD,CAAQ9B,mBAAmB,iBAAiBZ,SAAU,EAAKvM,MAAMuM,UAC7D,kBAAC,KAAD,CAAMmG,MAAI,GACN,0BAAMC,wBAAyB,CAAEC,OAAQ3D,EAAE,kBAAmB,CAAE/jB,UAAW,EAAK8U,MAAM6S,cAAerU,cAAe,CAAEC,aAAa,iB,GATpI6B,a,yBCLpB,SAASwS,GAAT,GAAgD,IAA/BrF,EAA8B,EAA9BA,MAAOsF,EAAuB,EAAvBA,QACnC,OACI,yBAAK9S,UAAU,sCACVwN,GAAS,uBAAGkF,wBAAyB,CAAEC,OAAQnF,KAC/CsF,GAAWA,GCCT,SAASC,GAAWhT,GAAyB,IAAD,ECT5C,WACb,IAAM/H,EAAkBgb,aAAY,SAACxc,GAAD,OAAgBA,EAAMiH,YAAYzF,mBAChEib,EAAajb,GAAmBA,EAAgBpH,QAAUoH,EAAgBpH,OAAOsiB,iBAAmBlb,EAAgBpH,OAAOsiB,gBAAgBtiB,OAAO4c,MAClJ2F,EAAenb,GAAmBA,EAAgBpH,QAAUoH,EAAgBpH,OAAOsiB,iBAAmBE,qCAA0Bpb,EAAgBpH,OAAOsiB,gBAAgBtiB,OAAOkiB,SAGpL,MAAO,CAAEG,aAAYE,eAAcE,aAFdJ,GAAcE,GDMgBG,GAA3CL,EADiD,EACjDA,WAAYE,EADqC,EACrCA,aAAcE,EADuB,EACvBA,aAE5B7R,EAAQ,CACZ6K,gBAAiBtM,EAAMuM,SAASC,YAChCC,aAAczM,EAAMuM,SAASC,YAC7BE,cAAe,QAAU1M,EAAMuM,SAASI,WACxCC,iBAAkB5M,EAAMuM,SAASI,WACjCE,aAAc7M,EAAMuM,SAASO,SAC7BC,UAAW/M,EAAMuM,SAASO,SAC1BE,WAAY,QAAUhN,EAAMuM,SAASU,QACrCC,cAAelN,EAAMuM,SAASU,SAGhC,OACE,yBAAKhN,UAAU,wBAAwBwB,MAAOA,GAC5C,6BACE,kBAAC,KAAD,CAAM+R,OAAK,GACT,yBAAKvT,UAAU,iBAAiBD,EAAMuC,WAEvC+Q,GAAgB,kBAAC,GAAD,CAAO7F,MAAOyF,EAAYH,QAASK,M,uCEnB5DK,KAAWC,cAAc,SASlB,IAAMC,GAA8B,SAAC3T,GAQ1C,OAPAqD,EAAQuQ,QAAO,SAACxpB,GAEV4V,EAAM6T,gBACR7T,EAAM6T,oBAKR,oCACE,kBAAC,GAAD,KACE,kBAAC,KAAD,CACEC,2BAA2B,EAC3BtZ,OAAQwF,EAAMxF,OACduZ,YAAa/T,EAAM+T,YACnBF,eAAgB7T,EAAM6T,eACtB5T,UAAWO,KAAW,QAASR,EAAMC,WACrC+T,iBAAiB,iBAEhBhU,EAAMuC,WAGX,kBAAC,GAAD,KACE,kBAAC,KAAD,CACEuR,2BAA2B,EAC3BtZ,OAAQwF,EAAMxF,OACduZ,YAAa/T,EAAM+T,YACnBF,eAAgB7T,EAAM6T,eACtB5T,UAAWO,KAAW,QAASR,EAAMC,WACrC+T,iBAAiB,sCAEhBhU,EAAMuC,aAWJ0R,GAA0C,SAAC,GAAc,IAAZ9R,EAAW,EAAXA,KACxD,OAAO,4BAAQlC,UAAU,gBAAgBkC,IAQ9B+R,GAA0C,SAAC,GAIjD,IAHLlR,EAGI,EAHJA,kBACA/C,EAEI,EAFJA,UACAsC,EACI,EADJA,SAEA,OACE,4BAAQtC,UAAWO,KAAW,eAAgBP,IAC5C,kBAAC,GAAD,CACEA,UAAU,cACVG,KAAM6C,KACN9C,YAAa6C,IAEdT,IAaM4R,GAA4C,SAACnU,GAOxD,OACE,kBAAC,KAAD,CACExF,OAAQwF,EAAMxF,OACduZ,YAAa/T,EAAM+T,YACnBF,eAAgB7T,EAAM6T,eACtB5T,UAAWO,KAAW,gBAAiBR,EAAMC,WAC7C+T,iBAAiB,iBAEjB,0BAAMI,SAdS,SAACtF,GAClB9O,EAAMqU,aACNvF,EAAMC,iBACND,EAAMwF,oBAYDtU,EAAMuU,eACL,yBAAKtU,UAAWO,KAAW,mBACzB,kBAAC,KAAD,CAAiBJ,KAAMoU,OACvB,2BAAIxU,EAAMuU,gBAGd,4BAAKvU,EAAMyN,OACX,uBAAGkF,wBAAyB,CAAEC,OAAQ5S,EAAMyU,WAC3CzU,EAAMuC,SACP,kBAAC,GAAD,CAAevH,KAAK,SAASmH,KAAMnC,EAAM0U,gBAapCC,GAAwC,SAAC3U,GAOpD,OACE,kBAAC,KAAD,CACExF,OAAQwF,EAAMxF,OACduZ,YAAa/T,EAAM+T,YACnBF,eAAgB7T,EAAM6T,eACtB5T,UAAWO,KAAW,gBAAiBR,EAAMC,WAC7C+T,iBAAiB,iBAEjB,0BAAMI,SAdS,SAACtF,GAClB9O,EAAMqU,aACNvF,EAAMC,iBACND,EAAMwF,oBAYF,4BAAKtU,EAAMyN,OACX,2BAAIzN,EAAMyU,SACTzU,EAAMuC,SACP,kBAAC,GAAD,CAAevH,KAAK,SAASmH,KAAMnC,EAAM0U,gBAcpCE,GAA4C,SAAC5U,GACxD,IAAMqU,EAAa,SAACvF,EAAuB+F,GACzC/F,EAAMC,iBACND,EAAMwF,kBACNtU,EAAM8U,QAAQD,IAGhB,OACE,kBAAC,KAAD,CACEra,OAAQwF,EAAMxF,OACduZ,YAAa/T,EAAM+T,YACnBF,eAAgB7T,EAAM6T,eACtB5T,UAAWO,KAAW,gBAAiBR,EAAMC,WAC7C+T,iBAAiB,iBAEjB,0BAAMI,SAAU,SAAC5E,GAAD,OAAO6E,EAAW7E,GAAG,KACnC,4BAAKxP,EAAMyN,OACX,2BAAIzN,EAAMyU,SACTzU,EAAMuC,SACP,yBAAKtC,UAAU,4BACb,4BACEA,UAAU,iBACVjF,KAAK,SACLkF,QAAS,SAACsP,GAAD,OAAO6E,EAAW7E,GAAG,KAE7BxP,EAAM+U,kBAET,kBAAC,GAAD,CAAe/Z,KAAK,SAASmH,KAAMnC,EAAMgV,wB,mBCWpCC,GAhL2D,SACxEjV,GACI,IACIiP,EAAMiG,eAANjG,EACFkG,EAAenV,EAAMoV,MAAQpV,EAAMoV,KAAKvkB,OAC9C,GAAoB,MAAhBskB,QAAwCvqB,GAAhBuqB,EAA4B,OAAO,qCAsB/D,OACE,kBAAC,GAAD,CACElV,UAAWO,KAAW,qBAAsBR,EAAMC,WAClDzF,OAAQwF,EAAMxF,OACdqZ,eAAgB7T,EAAM6T,gBAEtB,yBAAK5T,UAAU,wBACb,4BAAKkV,EAAaE,YAClB,yBAAKpV,UAAU,qBACb,6BACGkV,EAAaG,YACZ,yBAAKrV,UAAU,gBACb,yBAAKA,UAAU,mBAAmBkV,EAAaG,aAGlDH,EAAa3kB,aACZ,yBAAKyP,UAAU,gBACb,yBAAKA,UAAU,cACO,WAAnBD,EAAMuV,SACHtG,EAAE,sCACFA,EAAE,uCAER,yBAAKhP,UAAU,4BACZkV,EAAa3kB,cAInB2kB,EAAaK,oBACZ,yBAAKvV,UAAU,gBACb,yBAAKA,UAAU,cACZgP,EAAE,8BAEL,yBAAKhP,UAAU,6BACb,uBAAG0C,KAAI,cAASwS,EAAaK,qBAAuBL,EAAaK,uBAMzE,yBAAKvV,UAAU,yBACb,yBACEA,UAAU,aACVwV,IAnDNN,EAAaO,MACRP,EAAaO,MAAM7kB,OAAO8kB,KAAKjR,IAEZ,WAAnB1E,EAAMuV,SACT,kCACA,kCA+CIK,QAAS,SAACC,GAAD,OA/DA,SACnBA,GAEApN,QAAQC,IAAI,oBAAsBmN,GACjCA,EAAWC,OAAeL,IACN,WAAnBzV,EAAMuV,SACF,kCACA,kCAwD6BQ,CAAaF,IACtCG,IAAI,YAIV,yBAAK/V,UAAU,wBACb,yBAAKA,UAAU,+BACZkV,EAAac,oBACZ,yBAAKhW,UAAU,gBACb,yBAAKA,UAAU,cACb,kBAAC,KAAD,CAAiBG,KAAM8V,OAAmB,IACzCjH,EAAE,yCAEL,yBAAKhP,UAAU,oBACZkV,EAAac,qBAInBd,EAAagB,OACZ,yBAAKlW,UAAU,gBACb,yBAAKA,UAAU,cACb,kBAAC,KAAD,CAAiBG,KAAMgW,OAAgB,IACtCnH,EAAE,4BAEL,yBAAKhP,UAAU,oBAAoBkV,EAAagB,QAYnDhB,EAAazX,aACZ,yBAAKuC,UAAU,gBACb,yBAAKA,UAAU,cACb,kBAAC,KAAD,CAAiBG,KAAMiW,OAAW,IACjCpH,EAAE,kCAEL,yBAAKhP,UAAU,oBAAoBkV,EAAazX,eAItD,yBAAKuC,UAAU,+BACZkV,EAAajD,MACZ,yBAAKjS,UAAU,gBACb,yBAAKA,UAAU,cACb,kBAAC,KAAD,CAAiBG,KAAMkW,OAAkB,IACxCrH,EAAE,2BAEL,yBAAKhP,UAAU,oBAAoBkV,EAAajD,OAGnDiD,EAAaoB,eACZ,yBAAKtW,UAAU,gBACb,yBAAKA,UAAU,cACb,kBAAC,KAAD,CAAiBG,KAAMoW,OAAqB,IAC3CvH,EAAE,oCAEL,yBAAKhP,UAAU,oBAAoBkV,EAAaoB,gBAGnDpB,EAAasB,aACZ,yBAAKxW,UAAU,gBACb,yBAAKA,UAAU,cACb,kBAAC,KAAD,CAAiBG,KAAMsW,OAAU,IAChCzH,EAAE,kCAEL,yBAAKhP,UAAU,oBACZkV,EAAasB,YAAcxH,EAAE,eAAiBA,EAAE,iBAKzD,yBAAKhP,UAAU,+BACZkV,EAAawB,WACZ,yBAAK1W,UAAU,gBACb,yBAAKA,UAAU,cACb,kBAAC,KAAD,CAAiBG,KAAMwW,OAAY,IAClC3H,EAAE,2BAEL,yBAAKhP,UAAU,oBAAoBkV,EAAawB,cAKvDxB,EAAa0B,iBACb1B,EAAa2B,eAAiB3B,EAAa4B,UAC5C,kBAAC,GAAD,CACI9W,UAAWO,KAAW,cAAe,gCACrC2B,KAAMgT,EAAa0B,eACnB3W,QAAS,kBAAM/V,OAAO6sB,KAAK7B,EAAa2B,eAAiB3B,EAAa4B,QAAQ,aAElF,kBAAC,GAAD,CACE9W,UAAU,yCACVG,KAAM6C,KACN9C,YAAaH,EAAMgD,uBC1LvBiU,G,oLAIE,OACI,oCAEQhoB,KAAK+Q,MAAMxF,QACX,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIA,QAAQ,EACR4a,KAAMnmB,KAAK+Q,MAAMoV,KACjBpS,kBAAmB/T,KAAK+Q,MAAMgD,kBAC9B6Q,eAAgB5kB,KAAK+Q,MAAMgD,kBAC3BuS,SAAUtmB,KAAK+Q,MAAMuV,YAE7B,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI/a,QAAQ,EACR4a,KAAMnmB,KAAK+Q,MAAMoV,KACjBpS,kBAAmB/T,KAAK+Q,MAAMgD,kBAC9BuS,SAAUtmB,KAAK+Q,MAAMuV,kB,GAtBnBjV,aAqCnB4W,gBANS,SAACzgB,GACrB,MAAO,CACH+D,OAAQ/D,EAAMkH,SAASlF,2BAIhBye,CAAyBD,ICvCzB,SAASE,GAAqBC,GACzC,OAAO,SAACC,GACJ,IAMMC,EAPwB,oLASI,IAEtBC,EAFqB,OAGrBC,EAAyB,GAEA,kBAAjBJ,GAA8BA,GAAgBK,MAAMC,QAAQN,EAAaO,WACjFH,EAAeJ,EAAaO,SAC5BJ,EAAuBH,EAAaQ,aACL,oBAAjBR,IACdI,EAAeJ,EAAanoB,KAAK+Q,OAAc2X,SAC/CJ,EAAuBH,EAAanoB,KAAK+Q,OAAc4X,aAG3D,IAAIC,EAAgBL,EAAa1N,KAAI,SAAAgO,GAAE,OAAI,EAAK9X,MAAM+K,aAAagN,SAASD,MAE5E,OAAID,EAAcnmB,OAAS,GAAKmmB,EAAcE,UAAS,GAC5C,kBAACV,EAAqBpoB,KAAK+Q,OAC3BuX,GAGA,yCA7BW,GAOC9I,IAAMnO,WA2BrC,OAAO4W,aAjCiB,SAACzgB,GACrB,MAAO,CACHsU,aAActU,EAAM+F,MAAQ/F,EAAM+F,KAAK/Q,KAAOgL,EAAM+F,KAAK/Q,KAAKsf,aAAe,MA+B9EmM,CAAyBI,I,OChDnBU,G,kCAAAA,GACHC,OAAiB,SADdD,GAEHE,OAAiB,SAFdF,GAGHG,OAAiB,SAHdH,GAIHI,YAAsB,cAJnBJ,GAKHK,WAAqB,aALlBL,GAMHM,IAAc,MANXN,GAOHO,WAAqB,aAPlBP,GAQHQ,KAAe,OARZR,GASHS,aAAuB,eATpBT,GAUHU,WAAqB,aAVlBV,GAWHnK,UAAoB,YAXjBmK,GAYHW,SAAmB,WAZhBX,GAaHY,gBAA0B,kBAbvBZ,GAcHa,eAAyB,iBAdtBb,GAeHc,cAAwB,gBAfrBd,GAgBHe,eAAyB,iB,ICuG5BC,GApFd7B,GAAQ,CAAEQ,SAAU,CAACK,GAASC,OAAQD,GAASE,S,gBAG5C,WAAYlY,GAA2B,IAAD,8BAClC,8CAAMA,KAEDvJ,MAAQ,CACTwiB,kBAAcruB,GAJgB,E,oFAQhBwqB,GAClBnmB,KAAKkf,SAAS,CAAE8K,aAAc7D,IAC9BnmB,KAAK+Q,MAAMkZ,0B,mCAGFrD,GACyB,WAA9B5mB,KAAK+Q,MAAMmZ,eACVtD,EAAWC,OAAeL,IAAM,kCAEhCI,EAAWC,OAAeL,IAAM,oC,kCAI7BL,GACR,MAAkC,WAA9BnmB,KAAK+Q,MAAMmZ,eACJ/D,EAAKvkB,OAAO6kB,MAAQN,EAAKvkB,OAAO6kB,MAAM7kB,OAAO8kB,KAAKjR,IAAM,kCAExD0Q,EAAKvkB,OAAO6kB,MAAQN,EAAKvkB,OAAO6kB,MAAM7kB,OAAO8kB,KAAKjR,IAAM,oC,+BAG7D,IAAD,OACL,OACI,gBAAC,KAAD,MAEQ,SAACuK,GACG,OACI,gCACI,gBAAC,GAAD,CAAcxB,MAAOwB,EAAE,6BAA8B,CAAEpE,SAAU,EAAK7K,MAAMvU,MAAQ,EAAKuU,MAAMvU,KAAKof,SAAW,EAAK7K,MAAMvU,KAAKof,SAAWoE,EAAE,uBAC5I,gBAAC,GAAD,CAAY1C,SAAU,EAAKvM,MAAMuM,UAC5B,EAAKvM,MAAMmQ,YAAc,EAAKnQ,MAAMmQ,WAAWiJ,aAC/C,EAAKpZ,MAAMqZ,aAAe,EAAKrZ,MAAMsZ,YAAc,EAAKtZ,MAAMuZ,QAAU,uBAAKtZ,UAAU,oBACpF,gBAAC,GAAD,CAAcE,YAAa,EAAKH,MAAMsZ,WAAY7Y,SAAqC,IAA3B,EAAKT,MAAMwZ,cACvE,gBAAC,GAAD,CAAUrZ,YAAa,EAAKH,MAAMuZ,OAAQ9Y,SAAU,EAAKT,MAAMwZ,cAAgB,EAAKxZ,MAAMyZ,aAGzF,EAAKzZ,MAAM0Z,eAAehoB,QAAU,gBAAC,GAAD,KACjC,uBAAKuO,UAAU,sBACX,uBAAKA,UAAU,gBACX,uBAAKA,UAAU,cACoB,WAA9B,EAAKD,MAAMmZ,eAA8BlK,EAAE,8BAAgCA,EAAE,kCAO9F,EAAKjP,MAAM0Z,eAAe5P,KAAI,SAAC6P,EAAGC,GAC9B,OACI,gBAAC,GAAD,CAAgBxT,IAAKwT,GACjB,uBAAK3Z,UAAU,qBAAqBC,QAAS,kBAAM,EAAKgZ,sBAAsBS,KAC1E,uBAAK1Z,UAAU,yBACX,uBAAKwV,IAAK,EAAKoE,YAAYF,GAAI3D,IAAI,GAAGJ,QAAS,SAAAC,GAAU,OAAI,EAAKE,aAAaF,OAEnF,uBAAK5V,UAAU,gBACX,uBAAKA,UAAU,cAAc0Z,EAAE9oB,OAAOwkB,YACtC,uBAAKpV,UAAU,oBAAoB0Z,EAAE9oB,OAAOL,aACb,WAA9B,EAAKwP,MAAMmZ,gBAA+B,uBAAKlZ,UAAU,cAAe0Z,EAAE9oB,OAA2BqhB,YAM9H,gBAAC,GAAD,CAAqBlP,kBAAmB,kBAAM,EAAKhD,MAAM8Z,0BAA0B1E,KAAM,EAAK3e,MAAMwiB,aAAe1D,SAAU,EAAKvV,MAAMmZ,0B,GAxEjJ7Y,e,GClCdyZ,GAAb,YAEI,WAAY/iB,EAAiBgjB,GAAsB,IAAD,sBAC9C,IAAItV,EAAc,WAAa1N,EAAU,cADK,OAE9C,8CAAM0N,KAEDY,KAAO0U,EAJkC,EAFtD,4BAA2CxT,ICA9ByT,GAAb,sGAEyBlH,EAAa1nB,GAC9B,GAAG0nB,EAAQmH,UAAYnH,EAAQmH,SAASC,MAAyC,IAAjCpH,EAAQmH,SAASC,KAAKzoB,OAAa,CAE/E,IAAI0oB,EAA4B,IAAIC,IAQpC,OAPAtH,EAAQmH,SAASC,KAAKG,SAAQ,SAACC,GAC3B,IAAI9sB,EAAa8sB,EAAIC,IAAI/sB,GACtBA,EAAGgtB,WAAW,aACbL,EAAa9Y,IAAI7T,MAItB2sB,EAAa/Z,KAAO,IACf8G,GAAUgE,QAAQ9f,IAMZ8b,GAAUgE,QAAQ9f,KACrB+uB,EAAaM,IAAI,mBANjBN,EAAaM,IAAI,oBAmB5B,OAAO,MAlCnB,KCAO,SAAeC,GAAtB,mC,8CAAO,WAA2BhQ,GAA3B,iBAAAjd,EAAA,6DACCue,EAAQ,CACR2O,aAAc,OACd,cAAejQ,GAHhB,SAMmBzd,EAAiB2tB,WAA2B5O,GAN/D,YAMGre,EANH,QAQQoB,OARR,qBASO,CAACylB,QAAS,+BAAgCzlB,OAAQpB,EAAOoB,QAThE,gCAWIpB,EAAOktB,MAAM,IAXjB,4C,sBCEA,SAAeC,GAAtB,yC,8CAAO,WAAiCtvB,EAA4BuvB,EAAcC,EAAiB5vB,GAA5F,qBAAAqC,EAAA,sEACsBitB,GAAYlvB,EAAKkf,UADvC,cACGuQ,EADH,OAECjP,EAAS,CACT2O,aAAc,QACdO,eAAgBD,EAAWV,IAAI/sB,GAC/B2tB,KAAMJ,EAAOC,EACbI,MAAOJ,GANR,SASmB/tB,EAAiB2tB,WAA4B5O,GAThE,YASGre,EATH,QAWQoB,OAXR,qBAYO,CAACylB,QAAS,qCAAsCzlB,OAAQpB,EAAOoB,QAZtE,cAeCssB,EAAkC,GACnCjwB,EAAUqG,OAAS,GAClB9D,EAAOktB,MAAMR,SAAQ,SAACvH,IACf,IAAIkH,IAAasB,cAAcxI,EAAQ1nB,IACtCiwB,EAAiBhY,KAAKyP,EAAQyH,IAAI/sB,OAMd,IAA5B6tB,EAAiB5pB,QACjB4pB,EAAiBhB,SAAQ,SAACkB,GACtB5tB,EAAOktB,MAAMR,SAAQ,SAACvH,EAAQ0I,GACvB1I,EAAQyH,IAAI/sB,KAAO+tB,GAClB5tB,EAAOktB,MAAMY,OAAOD,EAAM,SA7BvC,kBAmCI7tB,GAnCJ,6C,sBCDA,SAAe+tB,GAAtB,uC,8CAAO,WAAiClwB,EAA4BuvB,EAAcC,GAA3E,mBAAAvtB,EAAA,sEACsBitB,GAAYlvB,EAAKkf,UADvC,cACGuQ,EADH,OAECjP,EAAS,CACT2O,aAAc,QACdO,eAAgBD,EAAWV,IAAI/sB,GAC/B2tB,KAAMJ,EAAOC,EACbI,MAAOJ,GANR,SASmB/tB,EAAiB2tB,WAA4B5O,GAThE,YASGre,EATH,QAWQoB,OAXR,qBAYO,CAACylB,QAAS,qCAAsCzlB,OAAQpB,EAAOoB,QAZtE,gCAeIpB,GAfJ,6C,mlBCmBA,I,GAAMguB,GACT,SAACX,EAAiB5vB,GAAlB,8CACA,WAAO4Z,EAAUoD,GAAjB,iBAAA3a,EAAA,sDACUjC,EAAO4c,IAAW7L,KAAK/Q,KACvB+M,EAAa6P,IAAW1K,SAASnF,WAAa,EAEhD/M,IACAwZ,EAAS,CAAEjK,K5C1Bc,wB4C0BeqB,SAAS,IACjD0e,GAAkBtvB,EAAM+M,EAAYyiB,EAAS5vB,GAC5Cid,MAAK,SAACxD,GACHG,EAAS,CAAEjK,K5C5BU,wB4C4BmBqB,QAASyI,OAEpDF,OAAM,SAACjK,GACJsK,EAAS,CAAEjK,K5C9BU,wB4C8BmBqB,QAAS1B,QAX7D,2CADA,yDAiBSkhB,GACT,SAACZ,GAAD,8CACA,WAAOhW,EAAUoD,GAAjB,iBAAA3a,EAAA,sDACUjC,EAAO4c,IAAW7L,KAAK/Q,KACvB+M,EAAa6P,IAAW1K,SAASnF,WAAa,EAEhD/M,IACAwZ,EAAS,CAAEjK,K5CxCc,wB4CwCeqB,SAAS,IACjDsf,GAAkBlwB,EAAM+M,EAAYyiB,GACnC3S,MAAK,SAACxD,GACHG,EAAS,CAAEjK,K5C1CU,wB4C0CmBqB,QAASyI,OAEpDF,OAAM,SAACjK,GACJsK,EAAS,CAAEjK,K5C5CU,wB4C4CmBqB,QAAS1B,QAX7D,2CADA,yDCXEmhB,G,+LAGM7sB,KAAK+Q,MAAMvU,OACXwD,KAAK+Q,MAAM+b,cAAc,GACzB9sB,KAAK+Q,MAAM4b,UAAU3sB,KAAK+Q,MAAM3U,WAChC4D,KAAK+Q,MAAM6b,e,yCAIOG,GAClBA,EAAUvwB,OAASwD,KAAK+Q,MAAMvU,OAC9BwD,KAAK+Q,MAAM+b,cAAc,GACzB9sB,KAAK+Q,MAAM4b,UAAU3sB,KAAK+Q,MAAM3U,WAChC4D,KAAK+Q,MAAM6b,e,+BAKf,IAAMI,EAAgBhtB,KAAK+Q,MAAMxH,WAAa,EAE9CvJ,KAAK+Q,MAAM+b,cAAcE,GACzBhtB,KAAKitB,c,mCAIL,IAAMD,EAAgBhtB,KAAK+Q,MAAMxH,WAAa,EAE9CvJ,KAAK+Q,MAAM+b,cAAcE,GACzBhtB,KAAKitB,c,kCAI6B,WAA9BjtB,KAAK+Q,MAAMmZ,eACXlqB,KAAK+Q,MAAM4b,UAAU3sB,KAAK+Q,MAAM3U,WAEhC4D,KAAK+Q,MAAM6b,c,+BAMf,IAAIM,EAAoE,GACpE1C,EAAW,EACXJ,GAAc,EAWlB,MAVkC,WAA9BpqB,KAAK+Q,MAAMmZ,gBACXgD,EAAYltB,KAAK+Q,MAAM7H,OACvBshB,EAAWxqB,KAAK+Q,MAAMoc,WAAaC,KAAKC,KAAKrtB,KAAK+Q,MAAMoc,WAAantB,KAAK+Q,MAAMib,UAAY,EAC5F5B,EAAcpqB,KAAK+Q,MAAMqZ,eAAiBpqB,KAAK+Q,MAAMoc,YAAcntB,KAAK+Q,MAAMoc,WAAantB,KAAK+Q,MAAMib,WAEtGkB,EAAYltB,KAAK+Q,MAAM5H,OACvBqhB,EAAWxqB,KAAK+Q,MAAMuc,WAAaF,KAAKC,KAAKrtB,KAAK+Q,MAAMuc,WAAattB,KAAK+Q,MAAMib,UAAY,EAC5F5B,EAAcpqB,KAAK+Q,MAAMqZ,eAAiBpqB,KAAK+Q,MAAMuc,YAActtB,KAAK+Q,MAAMuc,WAAattB,KAAK+Q,MAAMib,UAI1G,kBAAC,GAAD,CAAQ1O,SAAUtd,KAAK+Q,MAAMuM,UACzB,kBAAC,GAAD,CACIA,SAAUtd,KAAK+Q,MAAMuM,SACrB9gB,KAAMwD,KAAK+Q,MAAMvU,KAAOwD,KAAK+Q,MAAMvU,KAAO,GAC1CiuB,eAAgByC,GAAwB,GACxC3C,YAAavqB,KAAK+Q,MAAMxH,WACxBihB,SAAUA,EACVJ,YAAaA,EACbE,OAAQtqB,KAAKsqB,OAAOhJ,KAAKthB,MACzBqqB,WAAYrqB,KAAKqqB,WAAW/I,KAAKthB,MACjCkhB,WAAYlhB,KAAK+Q,MAAMwc,iBACvBtD,sBAAuBjqB,KAAK+Q,MAAMkZ,sBAAwBjqB,KAAK+Q,MAAMkZ,sBAAwB,aAC7FY,uBAAwB7qB,KAAK+Q,MAAM8Z,uBAAyB7qB,KAAK+Q,MAAM8Z,uBAAyB,aAChGX,eAAgBlqB,KAAK+Q,MAAMmZ,sB,GArEV7Y,aAkGlB4W,gBAXS,SAACzgB,GAAD,MAAsB,CAC1C0B,OAAQ1B,EAAMkH,SAASxF,OAAS1B,EAAMkH,SAASxF,OAAO2iB,MAAQ,GAC9DsB,WAAY3lB,EAAMkH,SAASxF,OAAS1B,EAAMkH,SAASxF,OAAOskB,MAAQ,EAClEhxB,KAAMgL,EAAM+F,KAAK/Q,KACjB+M,WAAY/B,EAAMkH,SAASnF,WAC3B2gB,eAAgB1iB,EAAMkH,SAASpF,uBAC/BH,OAAQ3B,EAAMkH,SAASvF,OAAS3B,EAAMkH,SAASvF,OAAO0iB,MAAQ,GAC9DyB,WAAY9lB,EAAMkH,SAASvF,OAAS3B,EAAMkH,SAASvF,OAAOqkB,MAAQ,EAClEpxB,UAAWoL,EAAM+F,KAAKnR,cAlBC,SAAC4Z,EAAejF,GACvC,MAAO,CACH4b,UAAW,SAACvwB,GAAD,OAA8B4Z,EAAS2W,GAAU5b,EAAMib,SAAU5vB,KAC5EwwB,UAAW,kBAAM5W,EAAS4W,GAAU7b,EAAMib,YAC1C/B,sBAAuB,kBAAMjU,EAAS,CAAEjK,K7CzGD,kC6CyGwCqB,SAAS,KACxFyd,uBAAwB,kBAAM7U,EAAS,CAAEjK,K7C1GF,kC6C0GyCqB,SAAS,KACzF0f,cAAe,SAACvjB,GAAD,OAAwByM,EAAS,CAAEjK,K7CrG3B,kB6CqGkDqB,QAAS7D,QAe3E0e,CAA6C4E,ICvHvCY,GADpBC,IAA4B,SAAA3c,GAAK,MAAK,CAAE2X,SAAU3X,EAAM2X,SAAUC,YAAa5X,EAAM4X,e,wLAG9E,OAAO3oB,KAAK+Q,MAAMuC,a,GAFiBjC,e,GCa5Bsc,I,cAb6B,SAAC,GAA6B,IAA3Bza,EAA0B,EAA1BA,KAAM/B,EAAoB,EAApBA,KAAMyc,EAAc,EAAdA,QACvD,OACI,yBAAK5c,UAAU,wBACX,yBAAKA,UAAU,kBACX,yBAAKA,UAAU,QACX,yBAAKwV,IAAG,kBAAarV,GAAQ4V,IAAK6G,MAG1C,2BAAI1a,MCfH2a,GAAb,YACI,WAAY7Q,GAAsC,IAAD,sBAC7C,IAAIvH,EAAc,WAAauH,EAAO1S,UAAY,oBADL,OAG7C,8CAAMmL,KAEDY,KAAO2G,EALiC,EADrD,4BAA6CzF,ICG9B,SAASuW,GAAmBC,GACvC,IAAMC,EAAYhK,aAAY,SAACxc,GAAD,OAAqBA,EAAM+F,KAAKhR,MAAM+N,aAqCpE,OAnCc,uCAAG,4CAAA7L,EAAA,+EAEayX,GAClB,IAAI2X,GAAwB,CAAEvjB,UAAW0jB,EAAWC,UAAWF,KAH1D,OAUT,IARMG,EAFG,OAMHC,EANG,kBAMmBJ,EANnB,YAMgCG,EAAQ1rB,KAAK4rB,eAChDC,EAAiBC,KAAKJ,EAAQ1rB,KAAK+rB,UACrCC,EAAc,IAAIhG,MAAM6F,EAAe5rB,QAElCkoB,EAAI,EAAGA,EAAI0D,EAAe5rB,OAAQkoB,IACvC6D,EAAY7D,GAAK0D,EAAeI,WAAW9D,GAGzC+D,EAAY,IAAIC,WAAWH,GAC3BI,EAAO,IAAIC,KAAK,CAACH,GAAY,CAAE3iB,KAAK,eAAD,OAAiBmiB,EAAQ1rB,KAAK4rB,iBAEnElzB,OAAO4zB,WAAa5zB,OAAO4zB,UAAUC,iBAErC7zB,OAAO4zB,UAAUC,iBAAiBH,EAAMT,IAGlC1Y,EAAMva,OAAO8zB,IAAIC,gBAAgBL,IACjCM,EAAOC,SAASC,cAAc,MAC/B1b,KAAO+B,EACZyZ,EAAKG,aAAa,WAAYlB,GAC9BgB,SAAS9Y,KAAKiZ,YAAYJ,GAC1BA,EAAKK,QACLL,EAAKM,UA5BA,kDA+BThW,QAAQ9N,MAAR,MA/BS,0DAAH,qDCNX,SAAS+jB,GAAiBC,GAA+C,IAAhCtlB,EAA+B,uDAAtB,aAEvD,OADaH,IAAOylB,GACRtlB,OAAOA,GAGd,SAASulB,GAAWD,GAA6C,IAAhCtlB,EAA+B,uDAAtB,aAE/C,OADaH,IAAOylB,GACRtlB,OAAOA,GCTd,SAASwlB,GAAUC,GACtB,YAAel0B,IAAXk0B,EACO,GAGPA,EAAS,EACH,QAAN,OAAYzC,KAAK0C,IAAID,GAAQE,QAAQ,IAE/B,OAAN,OAAWF,EAAOE,QAAQ,I,OCMnB,SAASC,GAAT,GAA+E,IAApDC,EAAmD,EAAnDA,YAAaC,EAAsC,EAAtCA,aAC3ClQ,EAAMiG,eAANjG,EACFmQ,EAAWrC,GAAmBmC,EAAYhC,WAEhD,OACI,yBAAKjd,UAAU,oBACX,yBAAKA,UAAU,wBACX,uBAAGA,UAAU,oBAAoBye,GAAiBQ,EAAYG,kBAC7DF,GAAgBD,EAAYI,YACzB,kBAAC,GAAD,CAAYnd,KAAK,mBAAmBjC,QAASkf,EAAUnf,UAAU,kBAGzE,yBAAKA,UAAU,uBACX,kBAAC,GAAD,CAAiBG,KAAM8e,EAAYhe,OACnC,yBAAKjB,UAAU,8BACX,uBAAGA,UAAU,oBAAoBgP,EAAEiQ,EAAYK,cAC/C,uBAAGtf,UAAU,kBAAkBif,EAAYhC,YAE/C,uBAAGjd,UAAU,sBAAsB4e,GAAUK,EAAYM,W,kBCpB1DC,GATW,SAAAzf,GACtB,OACI,yBAAKC,UAAU,WACX,8BACA,gCCLCyf,GAAb,YACI,WAAYzT,GAA+B,IAAD,sBACtC,IAAIvH,EAAc,WAAauH,EAAO1S,UAAY,UADZ,OAGtC,8CAAMmL,KAEDY,KAAO2G,EAL0B,EAD9C,4BAA+CzF,ICuBzCmZ,G,6MACFlpB,MAAgC,CAC5BqL,WAAW,EACX8d,oBAAgBh1B,EAChBmO,aAAc,I,oFAId9J,KAAK4wB,sB,yCAGU7D,GACXA,EAAUiB,YAAchuB,KAAK+Q,MAAMid,WACnChuB,KAAK4wB,sB,qKAKT5wB,KAAKkf,SAAS,CAAErM,WAAW,IACrBmK,EAA+B,CACjCla,KAAM,EACNC,SAAU,EACVuH,UAAWtK,KAAK+Q,MAAMid,UACtBzjB,cAAevK,KAAK+Q,MAAM8f,cAC1B7mB,SAAUC,MAASE,SAAS,EAAG,UAAUC,OAAO,cAChDC,OAAQJ,MAASG,OAAO,cACxBI,oBAAqB,I,kBAIC0L,GAAqB,IAAIua,GAA0BzT,I,QAAnE8T,E,QACMtuB,KAAKG,KAAKF,OAAS,IACrBsuB,EAAUD,EAAQtuB,KAAKG,KAAK,GAAG6Y,QACrCxb,KAAKkf,SAAS,CAAEpV,aAAcgnB,EAAQtuB,KAAKG,KAAMguB,eAAgBI,IACjE/wB,KAAK+Q,MAAMigB,kBAAkBD,I,gDAGjC/wB,KAAKkf,SAAS,CAAEpV,aAAc,K,yBAE9B9J,KAAKkf,SAAS,CAAErM,WAAW,I,iKAIzB,IAAD,EACmB7S,KAAK+Q,MAArBiP,EADH,EACGA,EAAG1C,EADN,EACMA,SADN,EAEoCtd,KAAKwH,MAAtCsC,EAFH,EAEGA,aAAc6mB,EAFjB,EAEiBA,eAEtB,OACI,kBAAC,GAAD,CAAQrT,SAAUA,GACd,kBAAC,GAAD,CAAckB,MAAOwB,EAAE,iCACtBhgB,KAAKwH,MAAMqL,UACR,yBAAK7B,UAAU,uBACX,kBAAC,GAAD,OAEJlH,EAAarH,OAAS,EACtB,oCACKqH,EAAa+Q,KAAI,SAACoV,EAAatF,GAAd,OACd,kBAAC,GAAD,CAAiBxT,IAAG,sBAAiBwT,GAAKsF,YAAaA,YAEvCt0B,IAAnBg1B,GACG,yBAAK3f,UAAU,uBACVgP,EAAE,gCADP,QAC0C2Q,EAAeZ,QAAQ,KAKzE,yBAAK/e,UAAU,mBAAmBgP,EAAE,wCAGxC,yBAAKhP,UAAU,0BACX,kBAAC,KAAD,CAAM0N,GAAIuS,GAAkBjgB,UAAU,gBACjCgP,EAAE,6C,GAvEK3O,aA+EjB6f,kBAAkBR,IC3ClBzI,gBANS,SAACzgB,GAAD,MAAsB,CAC1C2pB,eAAgB3pB,EAAMkH,SAASpF,uBAC/BsS,SAAWpU,EAAM+F,KAAK/Q,MAAQgL,EAAM+F,KAAK/Q,KAAKof,UAAa,YAC3Dxf,UAAWoL,EAAM+F,KAAKnR,cAVC,SAAC4Z,EAAejF,GACvC,MAAO,CACHqgB,kBAAmB,SAACC,GAAD,OACfrb,EZQR,SAACqb,EAAyCrF,EAAkB5vB,GAA5D,8CACA,WAAO4Z,EAAUoD,GAAjB,eAAA3a,EAAA,sDACU8rB,EAAcnR,IAAW1K,SAASnF,WAMxCyM,EAJqD,CACjDjK,KAAM,+BACNqB,QAASikB,IAQbrb,EAJ2C,CACvCjK,KAAM,kBACNqB,QAAS,IAITmd,EAAc,GAIVvU,EADa,WAAbqb,EACS1E,GAAUX,EAAS5vB,GAEnBwwB,GAAUZ,IArB/B,2CADA,wDYRiBsF,CAA0BD,EAAUtgB,EAAMib,SAAUjb,EAAM3U,gBAUhE6rB,EA1CqD,SAAAlX,GAChE,OACI,kBAAC,KAAD,MACK,SAAAiP,GAAC,OACE,yBAAKhP,UAAWD,EAAMC,WAClB,yBAAKA,UAAU,gBACX,kBAAC,GAAD,CAAe0X,SAAU,CAACK,GAASC,SAC/B,kBAAC,GAAD,CACIjd,KAAK,SACLmH,KAAM8M,EAAE,gCACR/O,QAAS,kBAAMF,EAAMqgB,kBAAkB,SAAUrgB,EAAMib,WACvDhb,UAAWO,KAAW,CAAEuN,OAAiC,WAAzB/N,EAAMogB,oBAG9C,kBAAC,GAAD,CAAezI,SAAU,CAACK,GAASE,SAC/B,kBAAC,GAAD,CACIld,KAAK,SACLmH,KAAM8M,EAAE,gCACR/O,QAAS,kBAAMF,EAAMqgB,kBAAkB,SAAUrgB,EAAMib,WACvDhb,UAAWO,KAAW,CAAEuN,OAAiC,WAAzB/N,EAAMogB,4B,6BC5BzDI,GAAb,oLAEQ,OAAO,yBAAKvgB,UAAWO,KAAW,mBAAoBvR,KAAK+Q,MAAMC,YAAahR,KAAK+Q,MAAMuC,cAFjG,GAAqCjC,aAUxBmgB,GAAb,oLAEQ,OAAO,yBAAKxgB,UAAWO,KAAW,kBAAmBvR,KAAK+Q,MAAMC,YAAahR,KAAK+Q,MAAMuC,cAFhG,GAAoCjC,aAavBogB,GAAb,6MACIxgB,QAAU,SAACsP,GACH,EAAKxP,MAAME,UACXsP,EAAET,iBACF,EAAK/O,MAAME,YAJvB,yEAQQ,OACI,yBAAKD,UAAWO,KAAW,sBAAuBvR,KAAK+Q,MAAMC,YACzD,uBAAG0C,KAAM1T,KAAK+Q,MAAM2C,KAAMmT,OAAO,SAAS6K,IAAI,sBAAsBzgB,QAASjR,KAAKiR,SAC9E,yBAAKD,UAAU,2BACX,kBAAC,KAAD,KACI,yBAAKA,UAAU,mBACX,yBAAKwV,IAAKxmB,KAAK+Q,MAAM4gB,QAAS5K,IAAI,QAI9C,yBAAK/V,UAAU,SAAShR,KAAK+Q,MAAMpP,aAlBvD,GAAuC0P,a,SC/BhC,SAAiBugB,GAAxB,mC,8CAAQ,WAAwCC,GAAxC,iBAAApzB,EAAA,6DACAue,EAAQ,CACR2O,aAAc,0BACdO,eAAgB2F,EAChBC,QAAS,GAJT,SAOiB7zB,EAAiB2tB,WAAsC5O,GAPxE,YAOEre,EAPF,QASOoB,OATP,qBAUM,CAAEylB,QAAS,2CAA4CzlB,OAAQpB,EAAOoB,QAV5E,gCAYGpB,GAZH,4C,iCCmBOozB,GAZmD,SAAC,GAA6B,IAA3BC,EAA0B,EAA1BA,WAAY/gB,EAAc,EAAdA,QAC/DgV,eAANjG,EACR,OACI,yBAAKhP,UAAU,oBAAoBC,QAASA,GACxC,yBAAKD,UAAU,oBACX,yBAAKwV,IAAKwL,EAAWpwB,OAAO6kB,MAAQuL,EAAWpwB,OAAO6kB,MAAM7kB,OAAO8kB,KAAKjR,IAAM,uCAAwCsR,IAAI,gBAE9H,uBAAG/V,UAAU,mBAAoBghB,EAAWpwB,OAAOuW,Q,okBCC/D,IAqEe8P,gBANS,SAACzgB,GACrB,MAAO,CACHkU,SAAUlU,EAAM+F,KAAK/Q,KAAKkf,YAInBuM,EArEmD,SAAC,GAM5D,IALHvM,EAKE,EALFA,SACAuW,EAIE,EAJFA,qBACAC,EAGE,EAHFA,qBACA3mB,EAEE,EAFFA,OACAqZ,EACE,EADFA,eAEQ5E,EAAMiG,eAANjG,EADN,EAEoCxL,mBAA+B,IAFnE,oBAEK2d,EAFL,KAEkBC,EAFlB,OAGgC5d,oBAAS,GAHzC,oBAGK3B,EAHL,KAGgBwf,EAHhB,OAI8B7d,oBAAS,GAJvC,oBAIKN,EAJL,KAIeoe,EAJf,KAKFzd,qBAAU,YACiB,uCAAG,gCAAApW,EAAA,0DAClBid,EADkB,wBAElB2W,GAAa,GACbC,GAAY,GAHM,kBAKe5G,GAAYhQ,GAL3B,cAKR6W,EALQ,gBAMuBX,GAAwBW,EAAehH,IAAI/sB,IANlE,OAMRg0B,EANQ,OASdL,GADIA,EAAcK,EAAuB3G,MAAM4G,SAAQ,SAACC,GAAD,OAAQA,EAAG9wB,OAAO+wB,QAAQ9X,KAAI,SAAA+X,GAAO,OAAO,MAAKA,EAAZ,CAAeC,cAAeH,EAAG9wB,OAAOixB,cAAeC,YAAaJ,EAAG9wB,OAAOkxB,qBAChJC,QAAO,SAACC,EAAK9Y,GAAN,OAAY8Y,EAAIhW,QAAO,SAAAiW,GAAE,OAAIA,EAAG1H,IAAI/sB,IAAM0b,EAAEqR,IAAI/sB,MAAIiE,OAAS,EAAIuwB,EAArD,uBAA+DA,GAA/D,CAAoE9Y,MAAI,IACrHkY,EAAeD,GAEfE,GAAa,GACbJ,EAAqBE,EAAY1vB,OAAS,GAb5B,kDAgBd4vB,GAAa,GACbC,GAAY,GACZL,GAAqB,GAlBP,0DAAH,qDAuBvBiB,KAED,CAACxX,EAAUuW,IAMd,OACI,kBAAC,GAAD,CAAO1mB,OAAQA,EAAQyF,UAAU,oBAC7B,yBAAKA,UAAU,8BACX,kBAAC,GAAD,CAAakC,KAAM8M,EAAE,mCACnBnN,IAAcqB,GAAmC,IAAvBie,EAAY1vB,QACpC,uBAAGuO,UAAU,sBAAsBgP,EAAE,yCAExCnN,GAAa,kBAAC,GAAD,OACZA,GAAaqB,GAAY,uBAAGlD,UAAU,sBAAsBgP,EAAE,iCAChE,yBAAKhP,UAAU,mBACVmhB,EAAYtX,KAAI,SAACX,EAAGyQ,GACjB,OAAO,kBAAC,GAAD,CAAsBqH,WAAY9X,EAAG/C,IAAKwT,EAAG1Z,QAAS,kBAAMihB,EAAqBhY,UAGhG,kBAAC,GAAD,CAAanG,kBAlBC,WACtB6Q,GAAkBA,Y,yBC1BXuO,GA1BwB,CACnCC,WAAW,eACNC,UAAOC,gBAAiB,SAACC,EAAsBjgB,GAC5C,IAAMkgB,EAAQD,EAAK/wB,KAAKqkB,OACxB,OAAQ2M,EAAM5xB,OAAO8kB,KAAK+M,YAAYvhB,MAAM,KAAK,IAC7C,IAAK,QACD,OACI,yBACIsU,IAAG,kBAAagN,EAAM5xB,OAAO8kB,KAAKjR,KAClCsR,IAAKyM,EAAM5xB,OAAOL,YAClBid,MAAOgV,EAAM5xB,OAAO4c,QAGhC,IAAK,OACD,OACI,uBACIA,MAAOgV,EAAM5xB,OAAO4c,MACpB9K,KAAM8f,EAAM5xB,OAAO8kB,KAAKjR,KAC1B+d,EAAM5xB,OAAO8kB,KAAKyH,eC6E7BuF,GApFiD,SAAC,GAA+G,IAA7G1B,EAA4G,EAA5GA,WAAY2B,EAAgG,EAAhGA,MAAOC,EAAyF,EAAzFA,sBAAuBC,EAAkE,EAAlEA,gCACjG7T,EAAMiG,eAANjG,EAaR,OACI,oCACI,yBAAKhP,UAAU,sBACX,yBAAKA,UAAU,WACX,yBAAKA,UAAU,SACX,yBAAKwV,IAAKwL,EAAWpwB,OAAO6kB,MAAOuL,EAAWpwB,OAAO6kB,MAAM7kB,OAAO8kB,KAAKjR,IAAM,uCAAwCsR,IAAI,gBAE7H,yBAAK/V,UAAU,gBACX,6BACI,uBAAGA,UAAU,SAASgP,EAAE,wCACxB,uBAAGhP,UAAU,SAASghB,EAAWpwB,OAAOkyB,aAE5C,6BACI,uBAAG9iB,UAAU,SAASgP,EAAE,+CACxB,uBAAGtM,KAAI,cAASse,EAAWpwB,OAAOzF,aAAe6U,UAAU,SACtDghB,EAAWpwB,OAAOzF,cAG1B61B,EAAWpwB,OAAOmyB,oBAAsB/B,EAAWpwB,OAAOoyB,WACvD,6BACI,kBAAC,GAAD,CACIhjB,UAAU,eACVkC,KAAM8M,EAAE,6CACR/O,QAAS,WA1BrC/V,OAAO6sB,KAAKiK,EAAWpwB,OAAOmyB,kBAAmB,cA+BhC/B,EAAWpwB,OAAOoyB,WACf,6BACI,kBAAC,GAAD,CACIhjB,UAAU,eACVkC,KAAM8M,EAAE,4CACR/O,QAAS,kBAAM2iB,KACfpiB,SAAUqiB,IAEbA,GACG,2DAOpB,yBAAK7iB,UAAU,iBACX,uBAAGA,UAAU,SAASgP,EAAE,+CACxB,uBAAGhP,UAAU,eAAb,IAA6BoT,qCAA0B4N,EAAWpwB,OAAOL,YAAa4xB,MAEzFQ,EAAMlxB,OAAS,GACZ,yBAAKuO,UAAU,iBACX,uBAAGA,UAAU,SAASgP,EAAE,+CACxB,yBAAKhP,UAAU,aACV2iB,EAAM9Y,KAAI,SAACoZ,EAAMtJ,GACd,OACI,kBAAC,GAAD,CACIxT,IAAKwT,EACL5e,KAAK,SACLmH,KAAM+gB,EAAKryB,OAAOwkB,WAClBnV,QAAS,kBArE5B,SAACgjB,GACd,IAAMC,EAAkBh5B,OAAO6sB,OAC3BkM,IACAC,EAAiB/4B,SAASuY,KAAOugB,EAAKryB,OAAOuyB,IAAIvyB,OAAO8kB,KAAKjR,KAkElB2e,CAASH,cCvEhE,IAqDeI,GArDqD,SAAC,GAAoG,IAAlGrC,EAAiG,EAAjGA,WAAYpN,EAAqF,EAArFA,eAAgBrZ,EAAqE,EAArEA,OAAQqoB,EAA6D,EAA7DA,sBAAuBC,EAAsC,EAAtCA,gCACtH7T,EAAMiG,eAANjG,EAD4J,EAElIxL,oBAAS,GAFyH,oBAE7J3B,EAF6J,KAElJwf,EAFkJ,OAGpI7d,oBAAS,GAH2H,oBAG7JN,EAH6J,KAGnJoe,EAHmJ,OAItH9d,mBAAkC,IAJoF,oBAI7J8f,EAJ6J,KAI5IC,EAJ4I,KAMpK1f,qBAAU,WACHmd,IACKA,EAAWpwB,OAAO+xB,OAClBrB,GAAY,GACZD,GAAa,GCzBtB,SAAiCmC,GAEpC,IAAIxX,EAAQ,CACR2O,aAAc,SACd,aAAc6I,EAAkBld,KAAK,MAGzC,OAAOrZ,EAAiB2tB,WAA2B5O,GDoBvCyX,CAAwBzC,EAAWpwB,OAAO+xB,MAAM9Y,KAAI,SAAA6Z,GAAC,OAAGA,EAAEnJ,IAAI/sB,OAAK6a,MAC/D,SAAA1a,GACI0zB,GAAa,GACV1zB,EAAOoB,QACNsyB,GAAa,GACbC,GAAY,IAEZiC,EAAmB51B,EAAOktB,UAGlC,SAAAjW,GACIyc,GAAa,GACbC,GAAY,QAIpBiC,EAAmB,IACnBjC,GAAY,GACZD,GAAa,OAItB,CAACL,IAMJ,OACI,kBAAC,GAAD,CAAOzmB,OAAQA,EAAQyF,UAAU,oBAC7B,kBAAC,GAAD,CAAakC,KAAM8e,EAAWpwB,OAAOuW,OACpCtF,GAAa,kBAAC,GAAD,OACZA,IAAcqB,GAAY8d,GAAc,kBAAC,GAAD,CAAmBA,WAAYA,EAAY2B,MAAOW,EAAiBV,sBAAuBA,EAAuBC,gCAAiCA,KAC1LhhB,GAAaqB,GACX,uBAAGlD,UAAU,sBAAsBgP,EAAE,yCAEzC,kBAAC,GAAD,CAAajM,kBAZK,WACtB6Q,GAAkBA,SEpDnB,SAAS+P,GAAY1R,GACxB,OAAOA,EAAKxgB,OAAS,GAAKwH,IAAOgZ,EAAM,cAAc,GAAM2R,UAGxD,SAASC,GAAoB50B,GAChC,OAAOA,GAASA,EAAMoB,aAAaoB,QAAU,GAG1C,SAASqyB,GAAkB70B,GAC9B,OAAQA,EAAMsB,aAAetB,EAAMoB,eAAmBpB,EAAMsB,cAAgBtB,EAAMoB,cAAkBpB,EAAMoB,eAAiBpB,EAAMsB,YAO9H,SAASwzB,GAAS90B,GACrB,OAAOA,EAAMoX,WAAW5U,OAAS,EAG9B,SAASuyB,GAAW/0B,GACvB,OAAQ,KAAKg1B,KAAKh1B,GAOf,SAASi1B,GAAa51B,GACzB,MAAa,KAAVA,GAG2D,MAAvDA,EAAMjE,MAAM,wCAOhB,SAAS85B,GAAgBlS,GAC5B,QAAKA,IAGDhZ,IAAOgZ,GAAMmS,KAAKnrB,MAAU,OAAS,GAA4C,GAAtCA,IAAOgZ,GAAMmS,KAAKnrB,MAAU,QAAeA,IAAOgZ,GAAMmS,KAAKnrB,MAAU,SAAW,GAO9H,SAASorB,GAAgBpS,GAC5B,QAAKA,GAGDhZ,IAAOgZ,GAAMmS,KAAKnrB,MAAU,QAAU,EAMvC,SAASqrB,GAAYrS,EAAcsS,GACtC,OAAOZ,GAAY1R,IAAS0R,GAAYY,IAActrB,IAAOgZ,EAAM,cAAc,GAAMuS,QAAQvrB,IAAOsrB,EAAW,cAAc,GAAO,OAGnI,SAASE,GAAqBC,GACjC,OAAO,SAAgCzS,GACnC,QAAKA,GAGDhZ,IAAOgZ,GAAMmS,KAAKnrB,MAAU,QAAWyrB,EAAK,GAYjD,SAASC,GAAqBx5B,GAGjC,IADA,IAAIwC,GAAS,GACqB,GAA5BxC,EAAYy5B,OAAO,MAErBz5B,EAAcA,EAAYgW,QAAQ,IAAI,KAEtChW,EAAYqvB,WAAW,QAAUrvB,EAAYqvB,WAAW,YACpDrvB,EAAYqvB,WAAW,WACvBrvB,EAAcA,EAAYgW,QAAQ,IAAK,IAAIA,QAAQ,IAAK,KAG5DxT,EAAsC,KADvBk3B,WAAW15B,GACVkb,WAAW5U,QAS/B,OAPItG,EAAYqvB,WAAW,OACvB7sB,EAAgC,KAAvBxC,EAAYsG,QAEL,KAAhBtG,IACAwC,GAAS,GAGNA,E,+NCtGJ,ICFKm3B,GDECC,GAAb,YACI,WAAYC,EAAwBC,EAAiBhT,EAAciT,EAAqBC,GAAyB,oBAC7G,IAEIpf,EAAc,CAAEif,iBAAgBC,UAAShT,OAAMiT,eAHyD,OAKxGC,IACApf,E,2VAAM,IAAOA,EAAP,CAAeof,mBANmF,4CAC1F,uCAQPpf,IAVnB,4BAAmDD,IEAtCsf,GAAb,YACI,WAAYJ,EAAyB/S,GAAe,oBAAD,mDAC7B,8BAEP,CAAE+S,iBAAiB/S,UAJtC,4BAA+CnM,ICcxC,SAASuf,GAAT,GAA8I,IACnHpT,EADC9K,EAAiH,EAAjHA,KAAMme,EAA2G,EAA3GA,YAAajF,EAA8F,EAA9FA,SAAUkF,EAAoF,EAApFA,QAASpX,EAA2E,EAA3EA,SAAUqX,EAAiE,EAAjEA,WAAYrW,EAAqD,EAArDA,QAASE,EAA4C,EAA5CA,QAASoW,EAAmC,EAAnCA,SASvGC,EAAe,SAAU7W,GAC3B,IAAMoD,EAAahZ,IAAO4V,EAAM8W,cAAc12B,MAAO,cAAc22B,SACnEzX,EAAS8D,IASb,OACI,2BACI9K,KAAMA,EACNme,YAAaA,EACbr2B,OAvBsBgjB,EAuBHoO,GAtBlBpO,GAAQ4T,MAAM5T,EAAK6T,WACb,GAEQ7sB,IAAOgZ,GAAM7Y,OAAO,eAoBnC2B,KAAK,OACLoT,SAAU,SAACoB,GAAD,OAAOmW,EAAanW,IAC9BvP,UAAWO,KAAW,aAAc,CAAEglB,QAASA,IAC/CQ,aAAc9sB,IAAO,IAAI/J,MAAQkK,OAAO,cACxC4sB,QAAS,YAdT3F,GAAYmF,GACZrX,EAASqX,IAcTtW,IAAKC,EAAUlW,IAAOkW,GAAS/V,OAAO,mBAAgBzO,EACtDykB,IAAKC,EAAUpW,IAAOoW,GAASjW,OAAO,mBAAgBzO,EACtD86B,SAAUA,K,SFhDVX,K,QAAAA,E,UAAAA,E,YAAAA,E,QAAAA,E,QAAAA,E,UAAAA,E,SAAAA,Q,gBGwBGmB,GAfuC,SAAClmB,GACrD,OACE,yBACEC,UACED,EAAMmmB,WAAa,2BAA6B,kBAElDjmB,QAAS,WACPF,EAAMgP,UAAYhP,EAAMgP,SAAShP,EAAMomB,WAGzC,6BAAMpmB,EAAMuC,Y,glBCDlB,IAAM8jB,GAAS,CACXC,QAAS,SAACC,EAAe9vB,GAAhB,aACF8vB,EADE,CAELC,OAAQ/vB,EAAMgwB,UAAY,oBAAsB,oBAChDC,UAAWjwB,EAAMgwB,UAAY,sBAAwB,OACrD,UAAW,CACPE,YAAalwB,EAAMgwB,UAAY,UAAY,cAGnDlB,YAAa,SAACgB,GAAD,aACNA,EADM,CAET7kB,MAAO,aAEXklB,OAAQ,SAACL,GAAD,aACDA,EADC,CAEJ5kB,gBAAiB,OACjB,UAAW,CACPA,gBAAiB,WAErB,UAAW,CACPA,gBAAiB,cAGzBklB,YAAa,SAACN,GAAD,aACNA,EADM,CAET7kB,MAAO,cAITolB,G,YACF,WAAY9mB,GAA2B,IAAD,8BAClC,8CAAMA,KAED+mB,iBAAmB,EAAKA,iBAAiBxW,KAAtB,iBAHU,E,uEAMR,IAGAyW,EAFlB/X,EAAMhgB,KAAK+Q,MAAXiP,EAOR,OACI,yBAAKhP,UAAWO,KAAW,mBAAoBvR,KAAK+Q,MAAMC,YACtD,kBAAC,KAAD,CACIgnB,gBAAiBh4B,KAAK+Q,MAAMinB,gBAAkBh4B,KAAK+Q,MAAMinB,gBAAkB,GAC3EjB,aAAc/2B,KAAK+Q,MAAMknB,gBAAkBj4B,KAAK+Q,MAAMknB,eACtD9gB,IACInX,KAAK+Q,MAAMknB,eACLj4B,KAAK+Q,MAAMknB,eAAeh4B,MAC1BD,KAAK+Q,MAAMgnB,QAAQ,GACnB/3B,KAAK+Q,MAAMgnB,QAAQ,GAAG93B,MACtB,WAEV83B,SAjBcA,EAiBY/3B,KAAK+Q,MAAMgnB,QAhB7CA,EAAQ1M,SAAQ,SAACuH,GAAD,OAAQA,EAAEjxB,MAAQqe,EAAE4S,EAAEjxB,UAC/Bo2B,GAgBC5Y,SAAUnf,KAAK83B,iBACfI,cAAc,EACdC,qBAAqB,EACrB7B,YAAat2B,KAAK+Q,MAAMulB,YACxBc,OAAQA,GACRgB,WAAYp4B,KAAK+Q,MAAMqnB,WACvBvlB,UAAW7S,KAAK+Q,MAAM8B,e,uCAMboM,EAAuDoZ,GACxEr4B,KAAK+Q,MAAMunB,oBACXt4B,KAAK+Q,MAAMunB,mBAAmBrZ,O,GA1Cf5N,aA+CZ6f,kBAAkB2G,I,6jBChEjC,IC9BYU,GD8RGC,GAhQqC,SAAC,GACwH,IAAxKxnB,EAAuK,EAAvKA,UAAWynB,EAA4J,EAA5JA,eAAgBC,EAA4I,EAA5IA,kBAAmBC,EAAyH,EAAzHA,eAAgBC,EAAyG,EAAzGA,eAAgBC,EAAyF,EAAzFA,mBAAoBC,EAAqE,EAArEA,sBAAuBC,EAA8C,EAA9CA,qBAAsBC,EAAwB,EAAxBA,kBAAwB,EAEhIxkB,qBAFgI,oBAEjKykB,EAFiK,KAEnJC,EAFmJ,OAGtI1kB,oBAAkB,GAHoH,oBAGjK2kB,EAHiK,KAGtJC,EAHsJ,OAKxH5kB,qBALwH,oBAKjK6kB,EALiK,KAK/IC,EAL+I,OAO1H9kB,qBAP0H,oBAOjK+kB,EAPiK,KAOhJC,EAPgJ,OAQpHhlB,oBAAkB,GARkG,oBAQjKilB,EARiK,KAQ7IC,EAR6I,OAUtHllB,oBAAkB,GAVoG,oBAUjKmlB,EAViK,KAU9IC,EAV8I,KAYhK5Z,EAAMiG,eAANjG,EAEF6Z,EAAc,SAAC3Z,EAAaE,GAC9B,OAAOoI,MAAMsR,KAAKtR,MAAMpI,EAAIF,EAAM,IAAI,SAAC6Z,EAAGpP,GAAJ,OAAUA,EAAEzK,MAIhD8Z,EAAyB,SAACna,EAAYoa,GAExC,IAAMpT,EAAShH,EAAMgH,OACjB5mB,EAAwB,aAAhB4mB,EAAO9a,KAAsB8a,EAAOqT,QAAUrT,EAAO5mB,MAC3DkY,EAAO0O,EAAO1O,KAEflY,OAMkBtE,GAAZs+B,GAA0BA,EAASh6B,GAG1C4mB,EAAOsT,UAAU3K,OAAO,WAFxB3I,EAAOsT,UAAU9nB,IAAI,WANjBwN,EAAMgH,OAAOuT,QAAQC,SACrBp6B,EAAQ4mB,EAAOuT,QAAQC,SAChBxT,EAAOyT,UACdzT,EAAOsT,UAAU9nB,IAAI,WAQ7BqmB,EAAkB,MACXD,EADU,eAEZtgB,EAAOlY,MAIVs6B,EAA0B,SAACtX,GAC7BiW,EAAgBjW,GAChBmW,EAAsB,OAATnW,IAGXuX,EAAuB,SAACC,GAC1BnB,EAAoBmB,GAEpB,IAAIC,EAAoB,GAEpBD,GAAYxB,IACZyB,EAAiB,UAAMzwB,IAAOgvB,GAAe7uB,OAAO,cAAnC,YAAoDqwB,IAGzE/B,EAAkB,MACXD,EADU,CAEbkC,YAAaD,MA6DrB,OAzDA7lB,qBAAU,YACoB,uCAAG,4BAAApW,EAAA,0DACrBw6B,EADqB,wBAErBW,GAAqB,GAFA,kBAIIxkB,GAA4B,IAAIghB,GACjDqC,EAAemC,eAAgB3wB,IAAOgvB,GAAe7uB,OAAO,gBAL/C,OAIXzL,EAJW,OAOjBo6B,EAAqBp6B,EAAO6D,MAPX,gDASjBgX,QAAQC,IAAR,MACAsf,EAAqB,IAVJ,QAYrBa,GAAqB,GAZA,yEAAH,qDAkB1BiB,KACD,CAAC5B,IAEJpkB,qBAAU,YACqB,uCAAG,4BAAApW,EAAA,2DACtBw6B,GAAgBA,EAAa6B,WAAarC,EAAesC,aAAe,GAAKtC,EAAeuC,aADtE,wBAEtBtB,GAAsB,GACtBc,OAAqB7+B,GAHC,kBAKGyZ,GAAc,IAAI2gB,GACnC0C,EAAemC,eACfnC,EAAeuC,YACf/wB,IAAOgvB,GAAe7uB,OAAO,cAC7BquB,EAAesC,YACftC,EAAewC,gBAVD,OAKZt8B,EALY,OAYlBm6B,EAAsBn6B,EAAO6D,MAEzB7D,EAAO6D,KAAKC,OAAS,EACrB+2B,EAAmBxZ,EAAE,uDAErBwZ,EAAmB,MAjBL,kDAqBlBA,EAAmBxZ,EAAE,6DArBH,QAuBtB0Z,GAAsB,GAvBA,wBAyBtBF,EAAmBxZ,EAAE,yDAzBC,0DAAH,qDA6B3Bkb,KACD,CAACjC,EAAcR,EAAesC,YAAatC,EAAewC,cAAgBxC,EAAeuC,cAKxF,0BAAMhqB,UAAWA,GACT,yBAAKA,UAAU,qBACX,2BAAOmqB,QAAQ,eAAenb,EAAE,oDAC/B,kBAAC,GAAD,CACG+X,QAAS8B,EAAY,EAAE,IAAIhf,KAAI,SAAAugB,GAAK,MAAO,CAACz5B,MAAOy5B,EAAE/jB,WAAYpX,MAAOm7B,EAAE/jB,eAC1E2gB,gBAAgB,GAChBM,mBAAoB,SAAC+C,GAAD,OAAQ3C,EAAkB,MAAKD,EAAN,CAAqBsC,YAAaO,SAASD,EAAIp7B,WAC5Fg4B,eAAgB,CAACt2B,MAAO82B,EAAesC,YAAY1jB,WAAYpX,MAAOw4B,EAAesC,YAAY1jB,eAGzG,yBAAKrG,UAAU,qBACX,2BAAOmqB,QAAQ,iBAAiBnb,EAAE,sDAClC,kBAAC,GAAD,CACI+X,QAAS8B,EAAY,EAAE,IAAIhf,KAAI,SAAAugB,GAAK,MAAO,CAACz5B,MAAOy5B,EAAE/jB,WAAYpX,MAAOm7B,EAAE/jB,eAC1E2gB,gBAAgB,GAChBM,mBAAoB,SAAC+C,GAAD,OAAQ3C,EAAkB,MAAKD,EAAN,CAAqBwC,cAAeK,SAASD,EAAIp7B,WAC9Fg4B,eAAgB,CAACt2B,MAAO82B,EAAewC,cAAc5jB,WAAYpX,MAAOw4B,EAAewC,cAAc5jB,eAG7G,yBAAKrG,UAAU,qBACX,2BAAOmqB,QAAQ,eAAenb,EAAE,gDAChC,kBAAC,GAAD,KACI,kBAAC,KAAD,CACI7H,KAAK,cACLnH,UAAWmoB,EAAY,aAAe,qBACtCmB,UAAQ,EACRjJ,SAAU4H,EACV9Z,SAAU,SAAC8D,GAAD,OAAUsX,EAAwBtX,IAC5CsY,gBAAgB,aAChBC,WAAW,aACXrb,QAASwY,EACTtY,QAASuY,KAGjB,kBAAC,GAAD,KACI,kBAACvC,GAAD,CACIle,KAAK,cACLme,YAAY,YACZjF,SAAU4H,QAA8Bt9B,EACxCwjB,SAAU,SAAC8D,GAAD,OAAUsX,EAAwBtX,IAC5CsT,SAAU4C,EACVhZ,QAASwY,EACTtY,QAASuY,MAIrB,yBAAK5nB,UAAU,qBACX,2BAAOmqB,QAAQ,SAASnb,EAAE,6CAC1B,kBAAC,GAAD,CACI+X,QAASiB,EAAkBne,KAAI,SAAA4gB,GAAM,MAAO,CAAC95B,MAAO85B,EAAG1gB,KAAM9a,MAAOw7B,EAAG1gB,SACvEid,gBAAgB,GAChBM,mBAAoB,SAAC+C,GAAD,OAAQ3C,EAAkB,MAAKD,EAAN,CAAqBuC,YAAaK,EAAIp7B,UACnFg4B,eAAgB,CAACt2B,MAAQ82B,EAAeuC,YAAa/6B,MAAOw4B,EAAeuC,aAC3E5C,YAAaa,EACbpmB,UAAW8mB,KAGnB,yBAAK3oB,UAAU,0BACX,2BAAOmqB,QAAQ,aAAanb,EAAE,0CAC9B,yBAAKhP,UAAU,sBACVyoB,GAAsB,kBAAC,GAAD,QACdF,GACDV,EAAmBhe,KAAI,SAAC5a,GACpB,OACI,kBAAC,GAAD,CACIi3B,WAAYmC,GAAoBp5B,EAChCk3B,QAASl3B,EACT8f,SAAUya,GAETv6B,OAGV,uBAAG+Q,UAAU,oBAAoBuoB,KAKpD,yBAAKvoB,UAAU,qBACX,2BAAOmqB,QAAQ,SAASnb,EAAE,2CAC1B,kBAAC,GAAD,CACI+X,QAASrX,OAAOgb,OAAO5F,IAAYjb,KAAI,SAAA8gB,GAAK,MAAO,CAACh6B,MAAOg6B,EAAG17B,MAAO07B,MACrE3D,gBAAgB,GAChBM,mBAAoB,SAAC+C,GAAD,OAAQ3C,EAAkB,MAAKD,EAAN,CAAqBmD,MAAOP,EAAIp7B,UAC7Eg4B,eAAgB,CAACt2B,MAAQ82B,EAAemD,MAAO37B,MAAOw4B,EAAemD,UAG7E,yBAAK5qB,UAAU,qBACX,2BAAOmqB,QAAQ,aAAanb,EAAE,+CAC9B,2BACI7H,KAAK,YACLpM,KAAK,OACLiF,UAAU,aACVspB,UAAQ,EACRr6B,MAAOw4B,EAAe53B,UACtBse,SAAU6a,EACV6B,UAAW,MAGnB,yBAAK7qB,UAAU,qBACX,2BAAOmqB,QAAQ,WAAWnb,EAAE,8CAC5B,2BACI7H,KAAK,UACLpM,KAAK,OACLiF,UAAU,aACVspB,UAAQ,EACRr6B,MAAOw4B,EAAeqD,QACtB3c,SAAU6a,EACV6B,UAAW,MAGnB,yBAAK7qB,UAAU,qBACX,2BAAOmqB,QAAQ,SAASnb,EAAE,2CAC1B,2BACI7H,KAAK,QACLpM,KAAK,QACLiF,UAAU,aACV/Q,MAAOw4B,EAAez3B,MACtBme,SAAU,SAACoB,GAAD,OAAOyZ,EAAuBzZ,GAAG,SAACwb,GAAD,OAAO7G,GAAa6G,UAGvE,yBAAK/qB,UAAU,qBACX,2BAAOmqB,QAAQ,eAAenb,EAAE,+CAChC,2BACI7H,KAAK,cACLpM,KAAK,MACLiF,UAAU,aACVspB,UAAQ,EACRr6B,MAAOw4B,EAAex3B,YACtBke,SAAU6a,OEtRrBgC,GAAb,YACI,WAAY3lB,GAAqB,IAAD,6BAG5B,8CAFe,wBAIVA,KAAOA,EACZ,EAAKN,aAAc,EANS,EADpC,4BAAuCwB,ICmLxB0kB,I,OA9JuC,SAAC,GAA6F,IAA3FjK,EAA0F,EAA1FA,WAAYpN,EAA8E,EAA9EA,eAAgBrZ,EAA8D,EAA9DA,OAAmBxD,GAA2C,EAAtDiJ,UAAsD,EAA3CjJ,SAASimB,EAAkC,EAAlCA,UAAWtwB,EAAuB,EAAvBA,iBAGlHw+B,EAAqC,CACvCN,MAAO,GACP/6B,UAAW,GACXi7B,QAAS,GACT76B,YAAa,GACbD,MAAO,GACP45B,eAAgB5I,EAAWpwB,OAAOoyB,UAClCgH,YAAa,GACbL,YAAa,GACbI,YAAa,EACbE,cAAe,EACfltB,QAAShG,GAAW,EACpBuC,UAAW0jB,GAAa,EACxB7R,iBAAkBze,GAhByH,EAmBnG8W,mBAAuB0nB,GAnB4E,oBAmBxIzD,EAnBwI,KAmBxHC,EAnBwH,OAoBvGlkB,oBAAkB,GApBqF,oBAoBxI2nB,EApBwI,KAoB1HC,EApB0H,OAqB3F5nB,oBAAkB,GArByE,oBAqBxI6nB,EArBwI,KAqBpHC,EArBoH,OAsB/G9nB,oBAAkB,GAtB6F,oBAsBxIN,EAtBwI,KAsB9Hoe,EAtB8H,OAuBrG9d,mBAAiB,IAvBoF,oBAuBxI+nB,EAvBwI,KAuBzHC,EAvByH,OAyB3FhoB,mBAAmB,IAzBwE,oBAyBxIqkB,EAzBwI,KAyBpHC,EAzBoH,OA0B7FtkB,mBAAiC,IA1B4D,oBA0BxIwkB,EA1BwI,KA0BrHD,EA1BqH,KA8BvI/Y,GAFUzL,KAEJ0R,eAANjG,GAEF2Y,EAAiB1uB,MAAS2sB,SAC1BgC,EAAiB5G,EAAWa,cAAgB5oB,MAASoI,IAAI2f,EAAWa,cAAgB,EAAG,QAAQ+D,cAAWj7B,EAE1G8gC,EAAS,WACX7X,GAAkBA,KAGhB8X,EAAc,WAChB,GAAiC,IAA7BjE,EAAenuB,WAA8C,IAA3BmuB,EAAe1qB,QACjD,OAAO2S,OAAOgb,OAAOjD,GAAgBkE,OAAM,SAAAZ,GAAC,OAAS,MAALA,GAAmB,KAANA,MACtD7G,GAAauD,EAAez3B,QAC5By3B,EAAesC,aAAe,EAErC,IAAI9yB,EAAUwwB,EAEd,OADAxwB,EAAQkU,iBAAmB,IACpBuE,OAAOgb,OAAOzzB,GAAS00B,OAAM,SAAAZ,GAAC,OAAS,MAALA,GAAmB,KAANA,MACnD7G,GAAajtB,EAAQjH,QACrBiH,EAAQ8yB,aAAe,GAI5B5V,EAAW,WACTuX,MACAN,GAAgB,GAChBlmB,GAAa,IAAI8lB,GAAkBvD,IAC9Bpf,MAAK,SAACE,GACH+Y,GAAY,GACZkK,EAAiBjjB,EAAQ/W,MACzB85B,GAAsB,MACvB,SAAC5wB,GACA8N,QAAQC,IAAI/N,GACZ4mB,GAAY,MACbsK,SAAQ,kBAAMR,GAAgB,QAY7C,OARAvnB,qBAAU,WACFtJ,IACAmtB,EAAkBwD,GAClB5J,GAAY,MAEjB,CAAC/mB,IAIA,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAOA,OAAQA,EAAQyF,UAAW,oBAC9B,kBAAC,GAAD,CAAakC,KAAM8e,EAAWpwB,OAAOuW,OACpC6Z,EAAWc,aACR,yBAAK9hB,UAAU,qBACVoT,qCAA0B4N,EAAWc,cAG9C,kBAAC,GAAD,CACI2F,eAAgBA,EAChBC,kBAAmBA,EACnBC,eAAgBA,EAChBC,eAAgBA,EAChBC,mBAAoBA,EACpBC,sBAAuBA,EACvBE,kBAAmBA,EACnBD,qBAAsBA,IAE1B,uBAAG/nB,UAAWkD,EAAW,qBAAuB,iBAC3C8L,EAAE,yDAEP,kBAAC,GAAD,CAAajM,kBAAmB0oB,GAC5B,kBAAC,GAAD,CACIvpB,KAAM8M,EAAE,4CACRhP,UAAU,gBACVQ,UAAWkrB,IACXzrB,QAASkU,EACTtS,UAAWspB,OAK3B,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAO5wB,OAAQA,EAAQyF,UAAW,2BAC9B,kBAAC,GAAD,CAAakC,KAAM8e,EAAWpwB,OAAOuW,OACpC6Z,EAAWc,aACR,yBAAK9hB,UAAU,qBACVoT,qCAA0B4N,EAAWc,cAG9C,kBAAC,GAAD,CACI9hB,UAAU,gCACVynB,eAAgBA,EAChBC,kBAAmBA,EACnBC,eAAgBA,EAChBC,eAAgBA,EAChBC,mBAAoBA,EACpBC,sBAAuBA,EACvBE,kBAAmBA,EACnBD,qBAAsBA,IAE1B,uBAAG/nB,UAAWkD,EAAW,qBAAuB,iBAC3C8L,EAAE,yDAEP,kBAAC,GAAD,CAAajM,kBAAmB0oB,GAC5B,kBAAC,GAAD,CACIvpB,KAAM8M,EAAE,4CACRhP,UAAU,gBACVQ,UAAWkrB,IACXzrB,QAASkU,EACTtS,UAAWspB,OAK3B,kBAAC,GAAD,CACI5wB,OAAQ8wB,EACRjX,WAAY,WACRkX,GAAsB,GACtBG,KAEJzrB,UAAW,gBACXwN,MAAOwB,EAAE,sDACTwF,QAASxF,EAAE,oDAAqD,CAAEuc,kBAClE9W,WAAYzF,EAAE,oB,SF/KlBuY,O,eAAAA,I,+CAAAA,I,iDAAAA,I,oCAAAA,Q,KGuBZ,IAkFesE,GAlFuD,SAAA9rB,GAAU,IAAD,EACKyD,mBAAsC+jB,GAA4BuE,MADvE,oBACpEC,EADoE,KAClCC,EADkC,OAE/BxoB,oBAAS,GAFsB,oBAEpDyoB,GAFoD,aAGvBzoB,qBAHuB,oBAGpE0oB,EAHoE,KAGhDC,EAHgD,KAInEnd,EAAMiG,eAANjG,EAGFod,EAAuBC,uBAAY,SAAC1+B,GACtCs+B,EAAkBt+B,KACnB,IAOH,OACI,oCACI,yBAAKqS,UAAWO,KAAWR,EAAMmN,qBAC5BnN,EAAMusB,YAAc,uBAAGtsB,UAAU,kCAAkCgP,EAAE,mCACtE,yBAAKhP,UAAU,0BACX,kBAAC,GAAD,CAAe0X,SAAU,CAACK,GAASO,aAC/B,kBAAC,GAAD,CACI3nB,MAAOqe,EAAE,kCACTtM,KAAK,IACL1C,UAAU,mBACV2gB,QAAQ,qBACR1gB,QAAS,kBAAM+rB,EAAoCzE,GAA4BgF,0BAItFxsB,EAAM/H,iBAAmB,kBAAC,GAAD,CAAe0f,SAAU,CAACK,GAASK,aACzD,kBAAC,GAAD,CACIznB,MAAOoP,EAAM/H,gBAAgBpH,OAAO47B,wBACpC9pB,KAAM3C,EAAM/H,gBAAgBpH,OAAO67B,6BACnCzsB,UAAU,mBACV2gB,QAAQ,4BAGf5gB,EAAM/H,iBAAmB,kBAAC,GAAD,CAAe0f,SAAU,CAACK,GAASM,MACzD,kBAAC,GAAD,CACI1nB,MAAOqe,EAAE,+BACTtM,KAAM3C,EAAM/H,gBAAgBpH,OAAO87B,wBACnC1sB,UAAU,mBACV2gB,QAAQ,uBAKxB,kBAAC,GAAD,CACIpmB,OAAQwxB,GAAoCxE,GAA4BgF,qBACxE3Y,eAAgB,kBAAMoY,EAAoCzE,GAA4BuE,OACtF7K,qBAAsBmL,EACtBlL,qBA1CiB,SAACgL,GAC1BC,EAAsBD,GACtBF,EAAoCzE,GAA4BlE,0BA0C3D6I,GACG,oCACI,kBAAC,GAAD,CACI3xB,OAAQwxB,GAAoCxE,GAA4BlE,sBACxEzP,eAAgB,WACZoY,EAAoCzE,GAA4BgF,uBAEpEvL,WAAYkL,EACZtJ,sBAAuB,kBAAMoJ,EAAoCzE,GAA4B0D,iBAC7FpI,gCAAiC9iB,EAAM4sB,eAAuChiC,IAA3BoV,EAAMrT,mBAE7D,kBAAC,GAAD,CACI6N,OAAQwxB,GAAoCxE,GAA4B0D,eACxErX,eAAgB,WACZoY,EAAoCzE,GAA4BlE,wBAEpEtsB,QAASgJ,EAAMhJ,QACfimB,UAAWjd,EAAMid,UACjBgE,WAAYkL,EACZx/B,iBAAkBqT,EAAMrT,sBC7FzC,SAAgBkgC,GAAvB,qC,8CAAO,WAA4CliB,EAAiBtf,GAA7D,mBAAAqC,EAAA,6DACCue,EAAS,CACT2O,aAAc,OACd,cAAejQ,EACfmiB,OAAO,CACH,6BALL,SAQmB5/B,EAAiB2tB,WAA2B5O,GAR/D,YAQGre,EARH,QAUQoB,OAVR,qBAWO,CAACylB,QAAS,+CAAgDzlB,OAAQpB,EAAOoB,QAXhF,cAcCssB,EAAkC,GACnCjwB,EAAUqG,OAAS,GAClB9D,EAAOktB,MAAM,GAAGjqB,OAAOk8B,kBAAkBzS,SAAQ,SAACvH,IAC3C,IAAIkH,IAAasB,cAAcxI,EAAQ1nB,IACtCiwB,EAAiBhY,KAAKyP,EAAQyH,IAAI/sB,OAKd,IAA5B6tB,EAAiB5pB,QACjB4pB,EAAiBhB,SAAQ,SAACkB,GACtB5tB,EAAOktB,MAAM,GAAGjqB,OAAOk8B,kBAAkBzS,SAAQ,SAACvH,EAAQ0I,GACnD1I,EAAQyH,IAAI/sB,KAAO+tB,GAClB5tB,EAAOktB,MAAM,GAAGjqB,OAAOk8B,kBAAkBrR,OAAOD,EAAM,SA3BnE,kBAiCI7tB,EAAOktB,MAAM,GAAGjqB,OAAOk8B,mBAjC3B,6C,sBCCA,SAAgBC,GAAvB,qC,8CAAO,WAAgCriB,EAAiBtf,GAAjD,mBAAAqC,EAAA,6DACCue,EAAS,CACT2O,aAAc,OACd,cAAejQ,EACfmiB,OAAO,CACH,gBALL,SAQiB5/B,EAAiB2tB,WAA2B5O,GAR7D,YAQCre,EARD,QAUQoB,OAVR,qBAWO,CAACylB,QAAS,mCAAoCzlB,OAAQpB,EAAOoB,QAXpE,cAcCssB,EAAkC,GACnCjwB,EAAUqG,OAAS,GAClB9D,EAAOktB,MAAM,GAAGjqB,OAAOo8B,KAAK3S,SAAQ,SAAC4S,IAC9B,IAAIjT,IAAasB,cAAc2R,EAAI7hC,IAClCiwB,EAAiBhY,KAAK4pB,EAAI1S,IAAI/sB,OAKV,IAA5B6tB,EAAiB5pB,QACjB4pB,EAAiBhB,SAAQ,SAACkB,GACtB5tB,EAAOktB,MAAM,GAAGjqB,OAAOo8B,KAAK3S,SAAQ,SAAC4S,EAAIzR,GAClCyR,EAAI1S,IAAI/sB,KAAO+tB,GACd5tB,EAAOktB,MAAM,GAAGjqB,OAAOo8B,KAAKvR,OAAOD,EAAM,SA3BtD,kBAiCI7tB,EAAOktB,MAAM,GAAGjqB,OAAOo8B,MAjC3B,6C,sBCHA,SAAgBE,GAAvB,mC,8CAAO,WAAuCxiB,GAAvC,iBAAAjd,EAAA,6DACCue,EAAS,CACT2O,aAAc,OACd,cAAejQ,EACfmiB,OAAO,CACH,yBACA,sCACA,iCACA,iCACA,sBACA,qBACA,uBACA,sBACA,iBAbL,SAgBmB5/B,EAAiB2tB,WAAsC5O,GAhB1E,YAgBGre,EAhBH,QAkBQoB,OAlBR,qBAmBO,CAACylB,QAAS,0CAA2CzlB,OAAQpB,EAAOoB,QAnB3E,gCAsBIpB,EAAOktB,MAAM,IAtBjB,4C,sBCsBA,I,GAAMsS,GAAkB,SAACp2B,GAAD,8CAAgE,WAC3FiO,EACAoD,GAF2F,iBAAA3a,EAAA,sDAIrFyJ,EAAqCkR,IAAW3K,YAAYvG,kBAC5DJ,EAAeI,EAAiBkQ,MAAK,SAAAgmB,GAAE,OAAIA,EAAGrwB,QAAQsJ,aAAetP,OAGvEiO,EAAS,CAAEjK,KjFhCc,oBiFgCWqB,QAAStF,IAR0C,2CAAhE,yDA4ClBu2B,GAAqB,yDAAiD,WAAOroB,EAAUoD,GAAjB,eAAA3a,EAAA,sDACzEjC,EAAO4c,IAAW7L,KAAK/Q,KAE7BwZ,EAAS,CAAEjK,KjF9D6B,iCiF+DxCvP,GAAQ0hC,GAAuB1hC,EAAKkf,UAC/BrC,MAAK,SAAAxD,GACFG,EAAS,CAAEjK,KjFhEqB,+BiFgEeqB,QAASyI,OAE3DF,OAAM,SAAAjK,GACHsK,EAAS,CAAEjK,KjFlEqB,+BiFkEeqB,QAAS1B,OATe,2CAAjD,yDC5C5B4yB,GADLpW,GAAQ,CAAEQ,SAAU,CAACK,GAASO,WAAYP,GAASM,IAAKN,GAASK,a,iNAEvD5hB,MAA+B,G,oFAGlCxH,KAAK+Q,MAAMstB,uB,+BAIX,OACI,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAwBr1B,gBAAiBhJ,KAAK+Q,MAAM/H,gBAAiBs0B,WAAYt9B,KAAK+Q,MAAMusB,WAAYtP,UAAWhuB,KAAK+Q,MAAMid,UAAWjmB,QAAS/H,KAAK+Q,MAAMhJ,QAASrK,iBAAkBsC,KAAK+Q,MAAMrT,iBAAkBigC,UAAWzlB,GAAUgE,QAAQlc,KAAK+Q,MAAM3U,cAEjQ,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAwB4M,gBAAiBhJ,KAAK+Q,MAAM/H,gBAAiBs0B,WAAYt9B,KAAK+Q,MAAMusB,WAAYpf,mBAAmB,2BAA2B8P,UAAWhuB,KAAK+Q,MAAMid,UAAWjmB,QAAS/H,KAAK+Q,MAAMhJ,QAASrK,iBAAkBsC,KAAK+Q,MAAMrT,iBAAkBigC,UAAWzlB,GAAUgE,QAAQlc,KAAK+Q,MAAM3U,mB,GAdhSiV,e,GAiChB4W,gBAZS,SAACzgB,GAAD,MAAiB,CACrCwB,gBAAiBxB,EAAMiH,YAAYzF,gBACnC5M,UAAWoL,EAAM+F,KAAKnR,cAGC,SAAC4Z,GACxB,MAAO,CACHqoB,mBAAoB,kBAAMroB,EAASqoB,UAK5BpW,CAA6CqW,IC6L7CC,GA7M2B,SAACxtB,GAAW,IAC5CiP,EAAMiG,eAANjG,EAER,OACE,oCACE,yBAAKhP,UAAU,uBACb,yBAAKA,UAAU,oBACb,kBAAC,GAAD,CACE4S,cAAe7S,EAAM6S,cACrBtG,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,KAGb,kBAAC,GAAD,CAAe0K,SAAU,CAACK,GAASS,eACjC,kBAAC,GAAD,CACElM,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,GAEXgQ,UAAWjd,EAAMid,UACjB6C,cAAe9f,EAAM8f,cACrBG,kBAAmBjgB,EAAMigB,qBAI7B,kBAAC,GAAD,CACE1T,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,IAGX,kBAAC,GAAD,CAAe0K,SAAU,CAACK,GAASW,WACjC,kBAAC,GAAD,CACEhL,GzD3EqB,iByD4ErBR,mBAAmB,mBAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,4BACR7O,KAAK,uBACLyc,QAAQ,uBAIb7c,EAAMnJ,eACL,kBAAC,GAAD,CACE8W,GzDzFgB,iByD0FhBR,mBAAmB,kBACnB1f,GAAG,iBAEH,kBAAC,GAAD,CACE0U,KAAM8M,EAAE,4BACR7O,KAAK,gBACLyc,QAAQ,gBAIZ,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASG,SACjC,kBAAC,GAAD,CACExK,GzDrGe,YyDsGfR,mBAAmB,kBACnB1f,GAAG,YAEH,kBAAC,GAAD,CACE0U,KAAM8M,EAAE,uBACR7O,KAAK,gBACLyc,QAAQ,gBAKf7c,EAAMytB,gBACL,kBAAC,GAAD,CAAe9V,SAAU,CAACK,GAASe,eAAgBf,GAASc,gBAC5D,kBAAC,GAAD,CACEnL,GzDtHkB,cyDuHlBR,mBAAmB,mBAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,yBACR7O,KAAK,kBACLyc,QAAQ,kBAKd,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASnK,YACjC,kBAAC,GAAD,CACEF,GAAIuS,GACJ/S,mBAAmB,mBAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,wBACR7O,KAAK,iBACLyc,QAAQ,iBAId,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASU,aACjC,kBAAC,GAAD,CACE/K,GzDrI4B,wByDsI5BR,mBAAmB,mBAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,yBACR7O,KAAK,kBACLyc,QAAQ,mBAKf7c,EAAMytB,gBACL,kBAAC,GAAD,CAAe9V,SAAU,CAACK,GAASe,eAAgBf,GAASc,gBAC5D,kBAAC,GAAD,CACE3gB,OAAQ6H,EAAM0tB,eACd1d,UAAWhQ,EAAMgQ,UACjBzD,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,OAMbjN,EAAMytB,gBACN,kBAAC,GAAD,CACE9V,SAAU,CACRK,GAASO,WACTP,GAASK,WACTL,GAASM,KAEXV,YACE,kBAAC,GAAD,CACEzK,mBAAmB,mCACnBZ,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,4BACb,kBAAC,GAAD,CAAcwN,MAAOwB,EAAE,sBAEzB,yBAAKhP,UAAU,kCACb,kBAAC,KAAD,KACE,yBACEwV,IAAKxG,EAAE,kBACP+G,IAAI,0BAOd,kBAAC,GAAD,CACE7I,mBAAmB,qCACnBZ,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,4BACb,kBAAC,GAAD,CACEwN,MAAOwB,EAAE,qCAGb,kBAAC,GAAD,CACEsd,YAAY,EACZv1B,QAAS22B,OAAO3tB,EAAMmK,cAAcjb,OACpC+tB,UAAWjd,EAAMid,cAKzB,kBAAC,GAAD,CAAetF,SAAU,CAACK,GAASC,OAAQD,GAASE,SAClD,kBAAC,GAAD,CACE3L,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,GAEXgO,SAAU,EACV5B,aAAa,EACbmD,iBAAkB,CAChBpD,aAAc,kBAAC,GAAD,CAAsB6B,SAAU,YClM/C2S,I,kMAxBD,IAAD,EAC+D3+B,KAAK+Q,MAAjEpP,EADH,EACGA,MAAOi9B,EADV,EACUA,YAAa7G,EADvB,EACuBA,QAAS/mB,EADhC,EACgCA,UAAWgnB,EAD3C,EAC2CA,gBAEhD,OACI,gBAAC,GAAD,CAAQ9Z,mBAAoB,uBAAwBZ,SAAUtd,KAAK+Q,MAAMuM,UACrE,yBAAI3b,GACJ,gBAAC,GAAD,CACIqP,UAAWO,KAAWP,GACtBinB,eAAgB2G,EAChB5G,gBAAiBA,GAAoC,GACrDD,QAASA,EACTO,mBAAoBt4B,KAAKs4B,mBAAmBhX,KAAKthB,W,yCAMtCif,GACnBjf,KAAK+Q,MAAMunB,oBACXt4B,KAAK+Q,MAAMunB,mBAAmBrZ,O,GApBT5N,cC+B3BwtB,G,oLAGM,IAAD,OACC7e,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACE,oCACE,yBAAKhP,UAAU,qDACb,kBAAC,GAAD,CACE4S,cAAe5jB,KAAK+Q,MAAM6S,cAC1BtG,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,MAIf,kBAAC,GAAD,CACEV,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,qBACb,yBAAKA,UAAU,2BACb,kBAAC,GAAD,CAAe0X,SAAU,CAACK,GAASW,WACjC,kBAAC,GAAD,CACEhL,G3DxEmB,iB2DyEnBR,mBAAmB,cAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,4BACR7O,KAAK,uBACLyc,QAAQ,wBAKf5tB,KAAK+Q,MAAMnJ,eACV,yBAAKoJ,UAAU,2BACb,kBAAC,GAAD,CACE0N,G3DxFc,iB2DyFdlgB,GAAG,gBACH0f,mBAAmB,cAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,4BACR7O,KAAK,gBACLyc,QAAQ,iBAKd,yBAAK5c,UAAU,2BACb,kBAAC,GAAD,CAAe0X,SAAU,CAACK,GAASG,SACjC,kBAAC,GAAD,CACExK,G3DtGa,Y2DuGblgB,GAAG,WACH0f,mBAAmB,cAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,uBACR7O,KAAK,gBACLyc,QAAQ,iBAMjB5tB,KAAK+Q,MAAMytB,gBACV,yBAAKxtB,UAAU,2BACb,kBAAC,GAAD,CAAe0X,SAAU,CAACK,GAASe,eAAgBf,GAASc,gBAC5D,kBAAC,GAAD,CACEnL,G3DzHgB,c2D0HhBR,mBAAmB,cAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,yBACR7O,KAAK,kBACLyc,QAAQ,mBAMf5tB,KAAK+Q,MAAM+tB,kBACV,yBAAK9tB,UAAU,2BACb,kBAAC,GAAD,CACEkN,mBAAmB,aACnBjN,QAASjR,KAAK+Q,MAAMguB,2BAEpB,kBAAC,GAAD,CACE7rB,KAAM8M,EAAE,qBACR7O,KAAK,iBACLyc,QAAQ,iBAIZ,KACJ,yBAAK5c,UAAU,2BACb,kBAAC,GAAD,CAAe0X,SAAU,CAACK,GAASnK,YACjC,kBAAC,GAAD,CAAYF,GAAIuS,GAAkB/S,mBAAmB,cACnD,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,wBACR7O,KAAK,iBACLyc,QAAQ,kBAKhB,yBAAK5c,UAAU,2BACb,kBAAC,GAAD,CAAe0X,SAAU,CAACK,GAASY,kBACjC,kBAAC,GAAD,CACEzL,mBAAmB,aACnBjN,QAAS,kBAAM,EAAKF,MAAMiuB,wBAAuB,KAEjD,kBAAC,GAAD,CACE9rB,KAAM8M,EAAE,yBACR7O,KAAK,uBACLyc,QAAQ,wBAKhB,yBAAK5c,UAAU,2BACb,kBAAC,GAAD,CAAe0X,SAAU,CAACK,GAASU,aACjC,kBAAC,GAAD,CACE/K,G3DrK0B,wB2DsK1BR,mBAAmB,cAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,yBACR7O,KAAK,kBACLyc,QAAQ,qBAYpB,6BACE,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASa,iBACF,IAA9B5pB,KAAK+Q,MAAMgnB,QAAQt1B,OAClB,kBAAC,GAAD,CACE6a,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,GAEXE,mBAAmB,oCAEnB,6BAAMle,KAAK+Q,MAAMgnB,QAAQ,GAAGp2B,QAG9B,kBAAC,GAAD,CACEqP,UAAU,0BACVgnB,gBAAgB,gBAChBr2B,MAAO,GACPo2B,QAAS/3B,KAAK+Q,MAAMgnB,QACpB6G,YAAa5+B,KAAK+Q,MAAMmK,cACxBod,mBAAoBt4B,KAAK+Q,MAAMunB,mBAC/Bhb,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,MAKjB,kBAAC,GAAD,CAAe0K,SAAU,CAACK,GAASS,eACjC,kBAAC,GAAD,CACElM,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,GAEXgQ,UAAWhuB,KAAK+Q,MAAMid,UACtB6C,cAAe7wB,KAAK+Q,MAAM8f,cAC1BG,kBAAmBhxB,KAAK+Q,MAAMigB,qBAGjChxB,KAAK+Q,MAAMytB,gBACV,kBAAC,GAAD,CAAe9V,SAAU,CAACK,GAASe,eAAgBf,GAASc,gBAC5D,kBAAC,GAAD,CACE3gB,OAAQlJ,KAAK+Q,MAAM0tB,eACnB1d,UAAW/gB,KAAK+Q,MAAMgQ,UACtBzD,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,GACVG,QAAS,OAKbhe,KAAK+Q,MAAMytB,gBACX,kBAAC,GAAD,CACEtgB,mBAAmB,qCACnBZ,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,GACVG,QAAS,IAGX,kBAAC,GAAD,CACEQ,MAAOwB,EAAE,oCAEX,kBAAC,GAAD,CACEsd,YAAY,EACZv1B,QAAS22B,OAAO1+B,KAAK+Q,MAAMmK,cAAcjb,OACzC+tB,UAAWhuB,KAAK+Q,MAAMid,aAI3BhuB,KAAK+Q,MAAMkuB,iBACV,kBAAC,GAAD,CACE3hB,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,GACVG,QAAS,GAEXE,mBAAmB,oCAEnB,6BAAM8B,EAAE,wBACR,yBAAKhP,UAAU,wBACZhR,KAAK+Q,MAAMkuB,wB,GA9OC5tB,aAyPd6f,kBAAkB2N,ICvSpBK,GAAb,YACI,WAAYliB,GAAwB,IAAD,sBAC/B,IAAIvH,EAAc,UAAYuH,EAAOjP,QAAU,UADhB,OAG/B,8CAAM0H,KAEDY,KAAO2G,EALmB,EADvC,4BAA0CzF,ICA7B4nB,GAAb,YACI,WAAYp3B,EAAiBrF,GAA0B,IAAD,sBAClD,IAAI+S,EAAc,UAAY1N,EAAU,WADU,OAGlD,8CAAM0N,KAEDY,KAAO3T,EALsC,EAD1D,4BAA0C6U,ICA7B6nB,GAAb,YACI,WAAY1jB,EAAkB3T,EAAiBimB,GAAoB,oBAC/D,IAAIvY,EAAc,eAAiBiG,EAAW,SADgB,mDAGxDjG,EAAK,CAAE1N,UAASimB,eAJ9B,4BAA0ClX,ICA7BuoB,GAAb,YACI,WAAYt3B,EAAiBrF,GAA6B,IAAD,sBACrD,IAAI+S,EAAc,eAAiB1N,EAEnC,8CAAM0N,IAEN,IAAM6pB,EAAW,IAAIC,SALgC,OAOrD78B,EAAO2oB,SAAQ,SAAClF,EAAMqG,GAClB,IAAM,IAAIrV,KAAOgP,EAAM,CACnB,IAAIqZ,EAAarZ,EACjBmZ,EAASG,OAAO,IAAMjT,EAAQ,KAAOrV,EAAKqoB,EAAWroB,QAI7D,EAAKd,KAAOipB,EAdyC,EAD7D,4BAA6C/nB,ICChCmoB,GAAb,YACI,WAAY33B,EAAiBrF,GAAgC,IAAD,sBACxD,IAAI+S,EAAc,mBAAqB1N,EAEvC,8CAAM0N,IAEN,IAAM6pB,EAAW,IAAIC,SALmC,OAOxD78B,EAAO2oB,SAAQ,SAAClF,EAAMqG,GAClB,IAAM,IAAIrV,KAAOgP,EAAM,CACnB,IAAIqZ,EAAarZ,EACjBmZ,EAASG,OAAO,IAAMjT,EAAQ,KAAOrV,EAAKqoB,EAAWroB,QAI7D,EAAKd,KAAOipB,EAd4C,EADhE,4BAAgD/nB,ICDnCooB,GAAb,YACI,WAAY53B,EAAiBvJ,GAAa,oBACtC,IAAIiX,EAAW,iBAAa1N,EAAb,oBAAgCvJ,GADV,mDAG/BiX,GAAK,IAJnB,4BAAuCkC,ICA1BioB,GAAb,YACI,WAAY73B,EAAiBvJ,EAAYqhC,GAA2B,oBAChE,IAAIpqB,EAAW,iBAAa1N,EAAb,sBAAkCvJ,EAAlC,YAAwCqhC,GADQ,mDAEzDpqB,GAAK,IAHnB,4BAA6CkC,ICAhCmoB,GAAb,YACI,WAAY/3B,EAAiBrF,GAA6B,IAAD,sBACrD,IAAI+S,EAAc,UAAY1N,EAAU,mBADa,OAGrD,8CAAM0N,KAEDY,KAAO3T,EALyC,EAD7D,4BAA8CgV,ICAjCqoB,GAAb,YACI,WAAYh4B,EAAiBvJ,GAAa,oBACtC,IAAIiX,EAAW,iBAAa1N,EAAb,uBAAmCvJ,GADb,mDAG/BiX,GAAK,IAJnB,4BAA0CkC,ICA7BqoB,GAAb,YACI,WAAYtZ,GAAa,IAAD,sBACpB,IAEIlkB,EAAO,IAAI+8B,SAHK,OAIpB/8B,EAAKi9B,OAAO,OAAQ/Y,IAEpB,8CALkB,8BAObrQ,KAAO7T,EARQ,EAD5B,4BAAyC+U,ICA5B0oB,GAAb,YACI,aAAe,oBAAD,mDACQ,iBAF1B,4BAA2CnpB,ICA9BopB,GAAb,YACI,WAAY9/B,GAA+B,IAAD,6BAGtC,8CAFkB,8BAIbiW,KAAOjW,EAL0B,EAD9C,4BAA2CmX,ICA9B4oB,GAAb,YACI,aAAe,oBAAD,mDACQ,sCAF1B,4BAAwCrpB,ICA3BspB,GAAb,YACI,WAAYC,GAAuB,oBAC/B,IAEItpB,EAAc,CAAEspB,gBAHU,mDACZ,mCAIPtpB,IANnB,4BAA8CD,ICAjCwpB,GAAb,YACI,WAAY5Z,EAAW2Z,EAAsBloB,EAAc9Y,GAAoB,IAAD,sBAE1E,8CADkB,0CAGlB,IAAIigC,EAAW,IAAIC,SAJuD,OAK1ED,EAASiB,IAAI,eAAgBF,GAC7Bf,EAASG,OAAO,OAAQtnB,GACxBmnB,EAASG,OAAO,cAAepgC,GAC/BigC,EAASG,OAAO,OAAQ/Y,EAAMA,EAAKvO,MAEnC,EAAK9B,KAAOipB,EAV8D,EADlF,4BAAiD/nB,ICApCipB,GAAb,YACI,WAAYH,GAAuB,oBAC/B,IAEItpB,EAAc,CAAEspB,gBAHU,mDACZ,iDAIPtpB,IANnB,4BAAkDD,ICArC2pB,GAAb,YACI,WAAYx+B,GAA0C,IAAD,6BAGjD,8CAFkB,kCAIboU,KAAOpU,EALqC,EADzD,4BAAqDsV,ICAxCmpB,GAAb,YACI,WAAY/6B,GAAwC,IAAD,6BAG/C,8CAFkB,uCAIb0Q,KAAO1Q,EALmC,EADvD,4BAAgD4R,ICDnCopB,GAAiB,CAAC,mBAAoB,2BAA4B,yBAClEC,GAAc,CAAC,QAAS,iBACxBC,GAAe,CAAC,SAAU,cAC1BC,GAAiB,CAAC,YAClBC,GAAgB,CAAC,YAAa,WCL9BC,GAAc,CAAC,WAAY,QAAS,SAAU,WCE9CC,GAAb,YACI,WAAYZ,GAAuB,oBAC/B,IAEItpB,EAAc,CAAEspB,gBAHU,mDACZ,+BAGPtpB,IALnB,4BAA0Ca,I,UCAnC,SAAespB,KAAtB,gC,8CAAO,8BAAAziC,EAAA,6DACCue,EAAQ,CACR2O,aAAc,iBACdwV,MAAO,uBAHR,SAKmBljC,EAAiB2tB,WAAqC5O,GALzE,YAKGre,EALH,QAOQoB,OAPR,qBAQO,CAACylB,QAAS,sCAAuCzlB,OAAQpB,EAAOoB,QARvE,gCAUIpB,EAAOktB,OAVX,4C,sBCAA,IAAMuV,GAAb,YACI,aAAe,oBAAD,mDACQ,4BAF1B,4BAAqCtqB,ICAxBuqB,GAAb,YACI,WAAYjhC,GAA+B,IAAD,6BAGtC,8CAFkB,mDAIbiW,KAAOjW,EAL0B,EAD9C,4BAAiEmX,ICApD+pB,GAAb,YACI,WAAYjrB,GAA+B,IAAD,6BAGtC,8CAFe,6CAIVA,KAAOA,EACZ,EAAKN,aAAc,EANmB,EAD9C,4BAAmFwB,I,6jBCqC5E,IAAMgqB,GACX,SACEC,GADF,IAEEC,EAFF,4DAE4E9lC,EAF5E,8CAIE,WAAOqa,GAAP,SAAAvX,EAAA,sDACEuX,EAAS,CAAEjK,KhHtC0B,8BgHsCqBqB,QAASo0B,IAE/DC,GACFzrB,EAASyrB,KAJb,2CAJF,uDAmBWC,GAAY,yDAAiD,WAAO1rB,EAAUoD,GAAjB,eAAA3a,EAAA,uDAClEue,EAAwB5D,IAAWxL,OAAO/K,cAErCgL,iBACTmI,EAAS,CAAEjK,KhH/DsB,wBgH+DmBqB,SAAS,IAC7D8I,GAAoB,IAAIgpB,GAAqBliB,IAC1C3D,MAAK,SAACxD,GACLG,EAAS,CAAEjK,KhHjEkB,wBgHiEuBqB,QAASyI,EAASrT,UAEvEmT,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhHnEkB,wBgHmEuBqB,QAAS1B,QAVK,2CAAjD,yDAeZi2B,GAAwB,yDAAiD,WAAO3rB,EAAUoD,GAAjB,SAAA3a,EAAA,sDACpFuX,EAAS,CAAEjK,KhHxCoC,oCgHwCiBqB,SAAS,IACzEgI,GAAS,IAAI6qB,IACV5mB,MAAK,SAACxD,GACLG,EAAS,CAAEjK,KhH1CgC,oCgH0CqBqB,QAASyI,EAASrT,KAAKo/B,wBAExFjsB,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhH5CgC,oCgH4CqBqB,QAAS1B,OAPO,2CAAjD,yDAWxBm2B,GAAmB,yDAAiD,WAAO7rB,EAAUoD,GAAjB,iBAAA3a,EAAA,sDACzEjC,EAAO4c,IAAW7L,KAAK/Q,KACvBD,EAA0B6c,IAAW7L,KAAKhR,MAEhDyZ,EAAS,CAAEjK,KhHrF6B,6BgHqFiBqB,SAAS,IAClEgI,GAAuB,IAAIgqB,GAAqB5iC,EAAKkf,SAAUnf,EAAMwR,QAAQsJ,WAAY9a,EAAM+N,YAC5F+O,MAAK,SAACxD,GACL,IAAM2rB,EAAmBpoB,IAAWxL,OAAOzK,sBAGxCq+B,GACAA,IACEA,EAAiBnhC,IACqD,IAAvEwV,EAASrT,KAAKwa,QAAO,SAAC8kB,GAAD,OAAQA,EAAGzhC,KAAOmhC,EAAiBnhC,MAAIoC,OAE1DoT,EAASrT,MAAQqT,EAASrT,KAAKC,OAAS,GAC1CuT,EAASurB,GAAoB1rB,EAASrT,KAAK,GAAIk/B,MAGjD1rB,EACEurB,GACE1rB,EAASrT,KAAK4V,MAAK,SAAC0pB,GAAD,OAAQA,EAAGzhC,KAAOmhC,EAAiBnhC,MACtDqhC,KAGJ1rB,EAAS0rB,OAGX1rB,EAAS,CAAEjK,KhH5GyB,6BgH4GqBqB,QAASyI,EAASrT,UAE5EmT,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhH9GyB,6BgH8GqBqB,QAAS1B,OA/BS,2CAAjD,yDAkMnBq2B,GACX,SAACC,GAAD,8CACE,WAAOhsB,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CAAEjK,KhH1PyB,6BgH0PqBqB,SAAS,IAClE8I,GAAU,IAAI8pB,GAAoBgC,IAC/B3oB,MAAK,SAACxD,GACLG,EAAS,CAAEjK,KhH5PqB,6BgH4PyBqB,QAASyI,EAASrT,UAE5EmT,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhH9PqB,6BgH8PyBqB,QAAS1B,EAAMmK,SAASrT,UAPvF,2CADF,yDAaWy/B,GACX,SAAC7hC,GAAD,8CACE,WAAO4V,EAAUoD,GAAjB,iBAAA3a,EAAA,6DACEuX,EAAS,CAAEjK,KhHlQqB,yBgHkQqBqB,SAAS,IAC1DhN,EAAWf,cACuC,KAAhDe,EAAWf,YAAY6iC,qBAA+B9hC,EAAWf,YAAa8iC,YAAc,GAC9F/hC,EAAWf,YAAa+iC,WAAWhiC,EAAWf,YAAagjC,aAAe,IAI1EjiC,EAAWnB,YACqC,KAA9CmB,EAAWnB,UAAUijC,qBAA+B9hC,EAAWnB,UAAUkjC,YAAc,GACzF/hC,EAAWnB,UAAWmjC,WAAWhiC,EAAWnB,UAAWojC,aAAe,IAItEC,GAAyBlpB,IAAW7L,KAAKlR,kBAAmD,YAA/B+D,EAAWpB,gBAd9E,SAgB2BkX,GAAU,IAAIgqB,GAAsB9/B,IAC1DiZ,MAAK,SAACxD,GACLzV,EAAWpB,gBAAkB6W,EAASrT,KAAK+/B,KAAK7hC,gBAChDN,EAAW5B,GAAKqX,EAASrT,KAAK+/B,KAAKliC,GACnCD,EAAWoiC,SAAW3sB,EAASrT,KAAK+/B,KAAKE,SACzCriC,EAAWR,oBAAsB,IAAIM,KAAK2V,EAASrT,KAAK+/B,KAAKzgC,qBAC7D1B,EAAWT,4BAA8BkW,EAASrT,KAAK+/B,KAAK9gC,4BAC5DrB,EAAWsiC,OAAS7sB,EAASrT,KAAK+/B,KAAKI,OACvCviC,EAAWoiC,SAAW3sB,EAASrT,KAAK+/B,KAAKE,SACzC,IAAIG,EAAI,MAAQxpB,IAAWxL,OAAO9I,gBAIlC,GAHA89B,EAAKpkC,GAAKqX,EAASrT,KAAK+/B,KAAKliC,GAC7BuiC,EAAK5jC,gBAAkB6W,EAASrT,KAAK+/B,KAAK7hC,gBAC1CkiC,EAAKjjC,4BAA8BkW,EAASrT,KAAK+/B,KAAK9gC,4BAClDoU,EAASrT,KAAK+/B,KAAKrhC,SAAU,CAC/B0hC,EAAKpjC,SAAW,CAAES,MAAO,GAAIF,OAAQ,IADN,2BAE/B,YAAoB8V,EAASrT,KAAK+/B,KAAKrhC,SAAvC,+CAAiD,CAAC,IAAzCC,EAAwC,QAC/CyhC,EAAKpjC,SAAUS,MAAQ2iC,EAAKpjC,SAAUS,MAAMmB,OAAO,CAAC,CAAE5C,GAAI2C,EAAQd,GAAIgB,aAAcF,EAAQG,aAAcC,YAAaJ,EAAQK,gBAHlG,mFAajC,OAPI8gC,GACElpB,IAAW7L,KAAKxR,aAAeqE,EAAWd,OAC5C0W,EAAS6sB,GAAoCziC,IAGjD4V,EAAS,CAAEjK,KhHpSiB,yBgHoSyBqB,QAASw1B,IAC9D5sB,EAAS,CAAEjK,KhHzSiB,yBgHySyBqB,QAAShN,KACvD,KAERuV,OAAM,SAACjK,GAEN,OADAsK,EAAS,CAAEjK,KhH5SiB,yBgH4SyBqB,QAAS1B,EAAMmK,SAASrT,KAAKia,WAC3E,KA9Cb,cAgBMqmB,EAhBN,yBAgDSA,GAhDT,2CADF,yDAoDWD,GACX,SAACziC,GAAD,8CACE,WAAO4V,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEyX,GAAU,IAAImrB,GAA4CjhC,IACvDiZ,MAAK,SAACxD,GACLG,EAAS,CAAEjK,KlH1Te,uBkH0TaqB,SAAS,OAHtD,2CADF,yDA6CW21B,GACX,SAACC,GAAD,8CACE,WAAOhtB,EAAUoD,GAAjB,iBAAA3a,EAAA,6DACMkH,EAAmB,CAAEq9B,cAAeA,GAExChtB,EAAS,CAAEjK,KhHxU+B,qCgHqU5C,SAIuBmK,GAAgB,IAAIwqB,GAA2B/6B,IACjE0T,MAAK,SAACxD,GAEL,OADAG,EAAS,CAAEjK,KhH1U2B,mCgH0UyBqB,QAASyI,EAASrT,KAAKygC,WAC/EptB,EAASrT,KAAKygC,YAEtBttB,OAAM,SAACjK,GAEN,OADAsK,EAAS,CAAEjK,KhH7U2B,qCgH8U/B,MAXb,cAIMnG,EAJN,yBAaSA,GAbT,2CADF,yDA2JWs9B,GACX,yDACE,WAAOltB,EAAUoD,GAAjB,SAAA3a,EAAA,sEACQuX,EA5FR,uCAAO,WAAOA,EAAUoD,GAAjB,eAAA3a,EAAA,6DAELuX,EAAS,CACPjK,KhH1X+B,0BgH2X/BqB,SAAS,IAJN,SAM2CgI,GAAmB,IAAIgsB,IACpE/nB,MAAK,SAACxD,GACL,IAAIstB,EAA+B,GAqBnC,OAnBAttB,EAASrT,KAAK6oB,SAAQ,SAACjrB,GACrB+iC,EAAc9uB,KAAK,CACjB7V,GAAI4B,EAAWgjC,WACfhkC,UAAWgB,EAAWhB,UACtBlD,SAAUkE,EAAWlE,SACrBoD,MAAOc,EAAWd,MAClBnD,YAAaiE,EAAWjE,YACxB+C,uBAAwBkB,EAAWijC,4BACnChhC,sBAAuBjC,EAAWiC,sBAClCihC,eAAgBljC,EAAWkjC,eAC3BC,qBAAsBnjC,EAAWmjC,qBACjCn+B,YAAahF,EAAWgF,cAE1Bo+B,EAAuBL,KAEzBntB,EAAS,CACPjK,KhHhZ2B,0BgHiZ3BqB,QAASo2B,IAEJA,KAER7tB,OAAM,SAACjK,GAKN,OAJAsK,EAAS,CACPjK,KhHtZ2B,0BgHuZ3BqB,QAAS1B,IAEJ,MApCN,cAMD83B,EANC,yBAsCEA,GAtCF,2CAAP,qDAAM,IA6FDnqB,MAAK,SAACa,GArBb,IAAC7S,EAsBO2O,GAtBP3O,EAsB2C6S,EAtB5C,uCACE,WAAOlE,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CACPjK,KhHnc0C,qCgHoc1CqB,QAAS/F,IAHb,2CADF,6DAmBE,2CADF,yDAuLWo8B,GACX,SAACC,GAAD,8CACE,WAAO1tB,EAAUoD,GAAjB,qBAAA3a,EAAA,6DACQid,EAAWtC,IAAW7L,KAAK/Q,MAAQ4c,IAAW7L,KAAK/Q,KAAKkf,SADhE,SAEgCwlB,KAFhC,cAEQyC,EAFR,OAGMn1B,EAAmD,GACnDm1B,GAAmBA,EAAgBlhC,OAAS,IAE5C+L,EADEkN,EACcioB,EAAgB3mB,QAAO,SAAA0X,GAAC,YAA6D/4B,IAAzD+4B,EAAE9yB,OAAOgiC,MAAMxrB,MAAK,SAAAyrB,GAAC,OAAIA,EAAEjiC,OAAOkiC,OAASpoB,QAEvEioB,GAGhB/7B,EAAiB4G,EAAc/L,OAAS,EAX9C,SAYwBuT,EAAS+tB,GAAmCv1B,IAZpE,OAYEA,EAZF,OAaMk1B,GACF1tB,EAASguB,GAAiBx1B,IAE5BwH,EAAS,CAAEjK,KhH5pB8B,kCgH4pBqBqB,QAAS,CAAEoB,cAAeA,EAAe5G,eAAgBA,KAhBzH,4CADF,yDAoBWm8B,GACX,SAACJ,GAAD,8CACE,WAAO3tB,EAAUoD,GAAjB,mCAAA3a,EAAA,sDACQrC,EAA2Bgd,IAAW7L,KAAKnR,UAC3C6nC,EAAkB,GACpBC,EAA6D,GAHnE,8BAKmB9nC,EALnB,yEAKWic,EALX,kBAMyB9Z,EAAa8Z,EAAK2C,sBAN3C,SAMQ+B,EANR,QAOiBnb,OAAOsb,0BAClBH,EAASnb,OAAOsb,yBAAyBrC,KAAI,SAAA9O,GAAI,OAAIk4B,EAAM5vB,KAAKtI,EAAKwf,IAAI/sB,OAR/E,oRAWQ2lC,EAAkBF,EAAMjnB,QAAO,SAACjR,EAAMygB,GAAP,OAAiByX,EAAMG,QAAQr4B,KAAUygB,KAE9E0X,EAA0BP,EAAgB3mB,QAAO,SAAAgD,GAAC,OAAImkB,EAAgBE,WAAU,SAAA7lC,GAAE,OAAIwhB,EAAEuL,IAAI/sB,KAAOA,MAAO,KAGxE,KADF4a,IAAW7L,KAAK9P,6BAA+B2b,IAAW7L,KAAK9P,6BAA6Bmc,UAAY,KAEtIsqB,EAA0BA,EAAwBlnB,QAAO,SAAAgD,GAAC,OAAKA,EAAEpe,OAAO0iC,gBAjB5E,kBAoBSJ,GApBT,4EADF,yDAwBWF,GACX,SAACL,GAAD,8CACE,WAAO3tB,EAAUoD,GAAjB,yBAAA3a,EAAA,sDACMoJ,EAAwC,GAD9C,SAGakE,EAAO,EAHpB,YAGuBA,EAAO43B,EAAgBlhC,QAH9C,iBAIe8hC,EAAW,EAJ1B,YAI6BA,EAAWZ,EAAgB53B,GAAMnK,OAAO4iC,UAAU/hC,QAJ/E,qBAKYkhC,EAAgB53B,GAAMnK,OAAO4iC,UAAUD,GAAU3iC,OAAO6iC,OALpE,qBAAAhmC,EAAA,iBAMmByoB,GANnB,eAAAzoB,EAAA,sEAOsCF,EAAaolC,EAAgB53B,GAAMnK,OAAO4iC,UAAUD,GAAU3iC,OAAO6iC,OAAOvd,GAAOqE,IAAI/sB,IAP7H,OAOgBkmC,EAPhB,OAQgB78B,EAAckE,GACZlE,EAAckE,GAAMiR,QAAO,SAAA2nB,GAAI,OAAIA,EAAK1kC,QAAUykC,EAAc9iC,OAAO/B,eAAa4C,OAAS,IAC/FoF,EAAckE,GAAQlE,EAAckE,GAAM3K,OAAO,CAAEO,MAAO+iC,EAAc9iC,OAAOC,gBAAiB5B,MAAOykC,EAAc9iC,OAAO/B,eAG9HgI,EAAckE,GAAQ,CAAC,CAAEpK,MAAO+iC,EAAc9iC,OAAOC,gBAAiB5B,MAAOykC,EAAc9iC,OAAO/B,cAbhH,0CAMmBqnB,EAAQ,EAN3B,YAM8BA,EAAQyc,EAAgB53B,GAAMnK,OAAO4iC,UAAUD,GAAU3iC,OAAO6iC,OAAOhiC,QANrG,0CAMmBykB,GANnB,iBAM6GA,IAN7G,uBAIuFqd,IAJvF,uBAGsDx4B,IAHtD,yEAoBIyN,QAAQC,IAAR,MApBJ,YAuBML,IAAW7L,KAAKvP,oBAAoBoa,MAAK,SAAAwsB,GAAC,OAAIA,GAAKxrB,IAAW7L,KAAK/Q,KAAKkf,YAvB9E,wBAwBQmpB,EAA8B,CAChCC,gBAAiBj9B,EACjBo3B,gBAAiB7lB,IAAW7L,KAAKhR,MAAM6e,iBA1B7C,UA4BUlF,GAAU,IAAIorB,GAA8DuD,IAC/ExrB,MAAK,SAAC0rB,GACLvrB,QAAQC,IAAIsrB,GACZl9B,EAAgBk9B,EAAMviC,QAEvBmT,OAAM,SAACjK,GACN8N,QAAQC,IAAI/N,MAlCpB,QAsCEsK,EAAS,CAAEjK,KhH3tBiB,qBgH2tBqBqB,QAASvF,IAtC5D,0DADF,yDC/vBWm9B,I,OAAb,oLAGQ,OACI,yBAAKh0B,UAAWhR,KAAK+Q,MAAMC,UAAWC,QAASjR,KAAK+Q,MAAMG,aACrDlR,KAAK+Q,MAAMuC,SACZ,+BAAQtT,KAAK+Q,MAAMmC,WANnC,GAAoC7B,c,qCCsLrB4zB,GAtKqC,SAAC,GAW9C,IAVLC,EAUI,EAVJA,cACAjN,EASI,EATJA,eACAK,EAQI,EARJA,mBACAzS,EAOI,EAPJA,QACAhc,EAMI,EANJA,aACAk1B,EAKI,EALJA,0BACAD,EAII,EAJJA,kBACAE,EAGI,EAHJA,uBACAR,EAEI,EAFJA,eACA52B,EACI,EADJA,eAEAiN,qBAAU,WAKR,OAHIhL,GACFslB,SAAS9Y,KAAK8jB,UAAU9nB,IAAI,eAEvB,WACL8c,SAAS9Y,KAAK8jB,UAAU3K,OAAO,kBAEhC,CAAC3lB,IATA,IAWImW,EAAMiG,eAANjG,EAER,OAAOmlB,IAASC,aACd,kBAAC,KAAD,CAAO3hB,MAAI,EAAC4hB,UAAQ,EAACC,KAAMz7B,GACzB,yBAAKmH,UAAU,mBACb,yBAAKA,UAAU,2BACb,6BACE,kBAAC,GAAD,CACEG,KAAMo0B,KACNr0B,YAAa2U,EACb7U,UAAU,2BAGd,yBAAKA,UAAU,2BACb,kBAAC,GAAD,CAAe0X,SAAU,CAACK,GAASa,iBAChCsb,GAAiB5M,EACS,IAAzB4M,EAAcziC,OACZ,kBAAC,GAAD,CACE6a,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,GAEXE,mBAAmB,2CAEnB,6BAAMgnB,EAAc,GAAGvjC,QAGzB,kBAAC,GAAD,CACEqP,UAAU,0BACVgnB,gBAAgB,gBAChBC,eAAgBA,EAChBF,QAASmN,EACT5M,mBAAoBA,IAGtB,MAEN,kBAAC,GAAD,CAAYpa,mBAAmB,aAAaQ,GvFzF5B,KuF0Fd,kBAAC,GAAD,CACExL,KAAM8M,EAAE,yBACR7O,KAAK,mBACLyc,QAAQ,kBAGZ,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASW,WACjC,kBAAC,GAAD,CACExL,mBAAmB,aACnBQ,GvF7FqB,kBuF+FrB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,4BACR7O,KAAK,uBACLyc,QAAQ,uBAIbhmB,EACC,kBAAC,GAAD,CAAYsW,mBAAmB,aAAaQ,GvFzG1B,kBuF0GhB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,4BACR7O,KAAK,gBACLyc,QAAQ,gBAIZ,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASG,SACjC,kBAAC,GAAD,CAAYhL,mBAAmB,aAAaQ,GvFjH3B,auFkHf,kBAAC,GAAD,CACExL,KAAM8M,EAAE,uBACR7O,KAAK,gBACLyc,QAAQ,gBAKf4Q,GACC,kBAAC,GAAD,CAAe9V,SAAU,CAACK,GAASe,eAAgBf,GAASc,gBAC5D,kBAAC,GAAD,CACE3L,mBAAmB,aACnBQ,GvFhIkB,euFkIlB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,yBACR7O,KAAK,kBACLyc,QAAQ,kBAKbkR,EACC,kBAAC,GAAD,CACE5gB,mBAAmB,aACnBjN,QAAS8tB,GAET,kBAAC,GAAD,CACE7rB,KAAM8M,EAAE,qBACR7O,KAAK,kBACLyc,QAAQ,gBAGV,KACJ,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASnK,YACjC,kBAAC,GAAD,CAAYV,mBAAmB,aAAaQ,GAAIuS,IAC9C,kBAAC,GAAD,CACE/d,KAAM8M,EAAE,wBACR7O,KAAK,iBACLyc,QAAQ,iBAId,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASY,kBACjC,kBAAC,GAAD,CACEzL,mBAAmB,aACnBjN,QAAS+tB,GAET,kBAAC,GAAD,CACE9rB,KAAM8M,EAAE,yBACR7O,KAAK,uBACLyc,QAAQ,uBAId,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASU,aACjC,kBAAC,GAAD,CACEvL,mBAAmB,aACnBQ,GvFpK4B,yBuFsK5B,kBAAC,GAAD,CACExL,KAAM8M,EAAE,yBACR7O,KAAK,iBACLyc,QAAQ,sBAQtBuB,SAAS9Y,OCnLPmvB,I,2LACQ,IACExlB,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACI,kBAAC,GAAD,CAAOzU,OAAQvL,KAAK+Q,MAAMxF,OAAQyF,UAAU,iBACxC,kBAAC,GAAD,CAAakC,KAAMlT,KAAK+Q,MAAM00B,eAAe7J,QAC7C,6BAAS5qB,UAAU,2BAEXhR,KAAK+Q,MAAM00B,eAAejkC,YAAc,uBAAGwP,UAAU,eAAehR,KAAK+Q,MAAM00B,eAAejkC,aAAmB,qCAErH,yBAAKwP,UAAU,mBACX,6BACI,uBAAGA,UAAU,SAASgP,EAAE,wBACxB,uBAAGtM,KAAI,cAAS1T,KAAK+Q,MAAM00B,eAAexkC,aAAe+P,UAAU,SAC9DhR,KAAK+Q,MAAM00B,eAAexkC,cAGnC,6BACI,uBAAG+P,UAAU,SAASgP,EAAE,oBACxB,uBAAGhP,UAAU,iBAAiBhR,KAAK+Q,MAAM00B,eAAeC,UAE5D,6BACI,uBAAG10B,UAAU,SAASgP,EAAE,yBACxB,uBAAGtM,KAAI,iBAAY1T,KAAK+Q,MAAM00B,eAAezkC,OAASgQ,UAAU,SAC3DhR,KAAK+Q,MAAM00B,eAAezkC,UAK3C,kBAAC,GAAD,CAAa+S,kBAAmB/T,KAAK+Q,MAAMgD,yB,GA7BhC1C,cAmCZ6f,kBAAkBsU,ICjClBG,GATc,kBACzB,yBAAK30B,UAAU,yBACX,kBAAC,KAAD,CAAM0N,GzFNc,KyFOhB,yBAAK8H,IAAI,8BAA8BO,IAAI,QCqTxC6e,gBAlRuB,SAAC70B,GAAW,IAE9CgnB,EASEhnB,EATFgnB,QACAE,EAQElnB,EARFknB,eACA98B,EAOE4V,EAPF5V,SACA0O,EAMEkH,EANFlH,aACAg8B,EAKE90B,EALF80B,cACAC,EAIE/0B,EAJF+0B,2BACAC,EAGEh1B,EAHFg1B,4BACAhH,EAEEhuB,EAFFguB,0BACAP,EACEztB,EADFytB,eAEMxe,EAAMiG,eAANjG,EAER5L,EAAQuQ,QAAO,WAETkhB,IACFA,GAAc,GACdE,GAA4B,OAchC,OACE,oCACE,kBAAC,GAAD,KACE,yBAAK/0B,UAAU,UACb,yBACEA,UAAWO,KACT,wBACAR,EAAMi1B,6BACN,CACE,cAAen8B,KAIlBkH,EAAMk1B,iBACL,yBACEj1B,UAAU,8BACVwV,IAAKzV,EAAMk1B,iBACXlf,IAAI,KAEJ,MAEN,kBAAC,KAAD,CAAMmf,KAAG,GACP,yBAAKl1B,UAAU,oBACZ7V,GAAkC,MAAtBA,EAASgrC,UACpB,yBAAKn1B,UAAU,yBACb,kBAAC,GAAD,CACEG,KAAMi1B,KACNl1B,YAAa,kBAAM20B,GAAeh8B,IAClCmH,UAAU,iBAIhB,kBAAC,GAAD,MACA,yBAAKA,UAAU,yBACb,kBAAC,GAAD,CACEA,UACE,4DACCD,EAAM+tB,kBAAoB,OAAS,QAEtC5rB,KAAM8M,EAAE,qBACR9O,YAAa6tB,GAEb,kBAAC,KAAD,CAAiB5tB,KAAMk1B,QAEzB,kBAAC,GAAD,CAAe3d,SAAU,CAACK,GAASY,kBACjC,kBAAC,GAAD,CACE3Y,UAAU,qCACVkC,KAAM8M,EAAE,yBACR9O,YAAa,kBAAM60B,GAA4B,OAGnD,kBAAC,GAAD,CAAerd,SAAU,CAACK,GAASa,iBAChCmO,GAAWhnB,EAAMunB,mBACG,IAAnBP,EAAQt1B,OACN,yBAAKuO,UAAU,eACb,+BAAQ+mB,EAAQ,GAAGp2B,QAGrB,kBAAC,GAAD,CACEqP,UAAU,+CACVgnB,gBAAgB,gBAChBC,eAAgBA,EAChBF,QAASA,EACTO,mBAAoBvnB,EAAMunB,qBAG5B,MAELvnB,EAAMkuB,iBACL,yBAAKjuB,UAAU,kCACb,6BAAMgP,EAAE,wBACR,yBAAKhP,UAAU,qBACZD,EAAMkuB,kBAIb,kBAAC,GAAD,CACEjuB,UAAU,qCACVkC,KAAM8M,EAAE,mBACR9O,YAAaH,EAAMu1B,gBAIzB,kBAAC,KAAD,CACEJ,KAAG,EACHb,UAAQ,EACRC,KAAMz7B,EACN08B,QAAS,IACTC,SAAS,SAET,yBACEx1B,UAAWO,KAAW,cAAe,CAAEwW,KAAMle,KAE7C,kBAAC,GAAD,CAAYqU,mBAAmB,aAAaQ,G1FvKhC,K0FwKV,kBAAC,GAAD,CACExL,KAAM8M,EAAE,yBACR7O,KAAK,mBACLyc,QAAQ,kBAGZ,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASW,WACjC,kBAAC,GAAD,CACExL,mBAAmB,aACnBQ,G1F3KiB,kB0F6KjB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,4BACR7O,KAAK,uBACLyc,QAAQ,uBAIb7c,EAAMnJ,eACL,yBAAKoJ,UAAU,2BACb,kBAAC,GAAD,CACE0N,G1FzLU,iB0F0LVlgB,GAAG,gBACH0f,mBAAmB,cAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,4BACR7O,KAAK,gBACLyc,QAAQ,iBAKd,yBAAK5c,UAAU,2BACb,kBAAC,GAAD,CAAe0X,SAAU,CAACK,GAASG,SACjC,kBAAC,GAAD,CACExK,G1FvMS,Y0FwMTlgB,GAAG,WACH0f,mBAAmB,cAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,uBACR7O,KAAK,gBACLyc,QAAQ,iBAMjB4Q,GACC,kBAAC,GAAD,CAAe9V,SAAU,CAACK,GAASe,eAAgBf,GAASc,gBAC5D,kBAAC,GAAD,CACE3L,mBAAmB,aACnBQ,G1F1Nc,e0F4Nd,kBAAC,GAAD,CACExL,KAAM8M,EAAE,yBACR7O,KAAK,kBACLyc,QAAQ,kBAKd,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASnK,YACjC,kBAAC,GAAD,CACEV,mBAAmB,aACnBQ,GAAIuS,IAEJ,kBAAC,GAAD,CACE/d,KAAM8M,EAAE,wBACR7O,KAAK,iBACLyc,QAAQ,iBAId,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASU,aACjC,kBAAC,GAAD,CACEvL,mBAAmB,aACnBQ,G1FzOwB,yB0F2OxB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,yBACR7O,KAAK,kBACLyc,QAAQ,uBASxB,kBAAC,GAAD,KACE,yBACE5c,UAAWO,KACT,wBACAR,EAAMi1B,gCAGV,yBAAKh1B,UAAU,2BACb,6BACG7V,GAAkC,MAAtBA,EAASgrC,UACpB,kBAAC,GAAD,CACEn1B,UAAU,+BACVG,KAAMi1B,KACNl1B,YAAa,kBAAM20B,GAAeh8B,OAIxC,kBAAC,GAAD,CAAe6e,SAAU,CAACK,GAASa,iBACjC,yBAAK5Y,UAAU,uBACZinB,EAAiBA,EAAet2B,MAAQ,KAG7C,kBAAC,GAAD,CACEqP,UAAU,+BACVG,KAAMs1B,KACNv1B,YAAaH,EAAMu1B,cAErB,kBAAC,GAAD,CACEzgB,QAAS,kBAAMggB,GAAc,IAC7Bh8B,aAAcA,EACdq7B,cAAenN,EACfE,eAAgBA,EAChBK,mBAAoBvnB,EAAMunB,mBAC1ByG,0BAhOiB,WACzB8G,GAAc,GACd9G,KA+NQD,kBAAmB/tB,EAAM+tB,kBACzBE,uBAvOyB,WACjC6G,GAAc,GACdE,GAA4B,IAsOpBvH,eAAgBA,EAChB52B,eAAgBmJ,EAAMnJ,mBAI5B,kBAAC,GAAD,CACE2D,OAAQu6B,EACR/xB,kBAAmB,kBAAMgyB,GAA4B,IACrDN,eAAgB,CACd7J,MAAO5b,EAAE,yBACTxe,YAAawe,EAAE,+BACf0lB,QAAS1lB,EAAE,gCACX/e,YAAa+e,EAAE,oCACfhf,MAAOgf,EAAE,4CCnQJiI,gBANS,SAACzgB,GAAD,MAAsB,CAC1CqC,aAAcrC,EAAMmH,YAAY9E,aAChCi8B,2BAA4Bt+B,EAAMqH,MAAMrD,gBAAgBD,OACxDnP,UAAWoL,EAAM+F,KAAKnR,cAXC,SAAC4Z,GACxB,MAAO,CACH6vB,cAAe,SAACt6B,GAAD,OAAqByK,EAAS,CAAEjK,KnHtCnB,uBmHsC+CqB,QAAS7B,KACpFw6B,4BAA6B,SAACx6B,GAAD,OACzByK,EAAS,CAAEjK,KlHpCrB,kCkHoC4DqB,QAAS7B,QAUxD0c,EAzByC,SAAClX,GAAD,OACpD,kBAAC,GAAD,iBACQA,EADR,CAEIlH,aAAckH,EAAMlH,aACpBg8B,cAAe90B,EAAM80B,cACrB9G,0BAA2BhuB,EAAMguB,0BACjCgH,4BAA6Bh1B,EAAMg1B,4BACnCn+B,eAAgBmJ,EAAMnJ,qB,uBCrBf,SAAS8+B,GAAqB31B,GAAmC,IACpEiP,EAAMiG,eAANjG,EAEF2mB,EAAe,CACjB,CAAE/R,QAAS,QAAQK,KAAKlkB,EAAMqJ,UAAWlH,KAAM8M,EAAE,kDACjD,CAAE4U,QAAS,QAAQK,KAAKlkB,EAAMqJ,UAAWlH,KAAM8M,EAAE,kDACjD,CAAE4U,QAAS,KAAKK,KAAKlkB,EAAMqJ,UAAWlH,KAAM8M,EAAE,yCAC9C,CAAE4U,QAAS7jB,EAAMqJ,SAAS3X,QAAU,EAAGyQ,KAAM8M,EAAE,iDAKnD,OAFAjP,EAAM61B,kBAA8D,IAA7CD,EAAatC,WAAU,SAAA3Z,GAAC,OAAKA,EAAEkK,YAGlD,yBAAK5jB,UAAU,0BACX,uBAAGA,UAAU,sBAAsBgP,EAAE,wCACpC2mB,EAAa9rB,KAAI,SAACgsB,EAAalc,GAAd,OACd,kBAACmc,GAAD,CAAqBlS,QAASiS,EAAYjS,QAAS1hB,KAAM2zB,EAAY3zB,KAAMiE,IAAKwT,QAWhG,SAASmc,GAAoB/1B,GAAkC,IACnD6jB,EAAkB7jB,EAAlB6jB,QAAS1hB,EAASnC,EAATmC,KACjB,OACI,yBAAKlC,UAAU,eACX,kBAAC,KAAD,CAAiBG,KAAM41B,KAAet0B,MAAOmiB,EAAU,uBAAyB,2BAChF,2BAAI1hB,I,6jBCjBhB,IAmiBe8zB,GAniBqD,SAACj2B,GAAW,IACtEiP,EAAMiG,eAANjG,EADqE,EAEjDxL,oBAAS,GAFwC,oBAEtEyyB,EAFsE,KAE9DC,EAF8D,OAGzC1yB,mBAASwL,EAAE,0BAH8B,oBAGtEyF,EAHsE,KAG1D0hB,EAH0D,OAK3E3yB,oBAAS,GALkE,oBAItE4yB,EAJsE,KAI3CC,EAJ2C,OAMvB7yB,oBAAS,GANc,oBAMtE8yB,EANsE,KAMjDC,EANiD,OAOjC/yB,oBAAS,GAPwB,oBAOtEgzB,EAPsE,KAOtDC,EAPsD,OAQzCjzB,oBAAWzD,EAAM22B,SAAW32B,EAAM42B,QAAW,WAAa,kBARjB,oBAQtEC,EARsE,KAQ1DC,EAR0D,OAUvBrzB,mBACpDzD,EAAMtU,iBAAiBqrC,qBAXoD,oBAUtEC,EAVsE,KAUjDC,EAViD,OAc7BxzB,mBAAS,CACvDyzB,SAAUl3B,EAAMtU,iBAAiByrC,iBACjCC,SAAUp3B,EAAMtU,iBAAiB2rC,iBACjCC,YAAat3B,EAAMtU,iBAAiB6rC,gBACpCC,UAAWx3B,EAAMtU,iBAAiB+rC,4BAlByC,oBActEC,EAdsE,KAcpDC,EAdoD,OAqBrBl0B,mBACtDzD,EAAMrU,qBACF,CACEisC,kBAAmB53B,EAAMrU,qBAAqBisC,kBAC9CC,cAAe73B,EAAMrU,qBAAqBksC,cAC1CC,YAAa93B,EAAMrU,qBAAqBmsC,YACxCC,kBAAmB/3B,EAAMrU,qBAAqBosC,kBAC9CC,UAAWh4B,EAAMrU,qBAAqBqsC,UACtCC,yBACEj4B,EAAMrU,qBAAqBssC,yBAC7BC,yBACEl4B,EAAMrU,qBAAqBusC,+BAE/BttC,GAlCuE,oBAqBtEe,EArBsE,KAqBhDwsC,EArBgD,OAqC1B10B,mBAAS,CAC1DyzB,UAAU,EACVE,UAAU,EACVE,aAAa,EACbE,WAAW,IAzCgE,oBAqCtEY,EArCsE,KAqCpDC,EArCoD,OA4C/B50B,mBAAS,IA5CsB,oBA4CtE60B,EA5CsE,KA4CrDC,EA5CqD,OA6CvC90B,mBAAS,IA7C8B,oBA6CtE+0B,EA7CsE,KA6CzDC,GA7CyD,QA8CzBh1B,oBAAS,GA9CgB,sBA8CtEi1B,GA9CsE,MA8ClDC,GA9CkD,SA+C/Bl1B,mBAAS,IA/CsB,sBA+CtEm1B,GA/CsE,MA+CrDC,GA/CqD,SAgDPp1B,oBAAS,GAhDF,sBAgDtEq1B,GAhDsE,MAgDzCC,GAhDyC,SAiDIt1B,oBAAS,GAjDb,sBAiDtEu1B,GAjDsE,MAiDtCC,GAjDsC,MAmD7En1B,qBAAU,WACRwyB,EACE8B,EAAiBlB,UACfkB,EAAiBZ,WACjBY,EAAiBhB,UACjBgB,EAAiBd,eAEpB,CAACc,IAEJt0B,qBAAU,WACR0yB,EACEkC,IACEF,IAAgBI,IAChBN,EAAgB5mC,OAAS,KAE5B,CAACgnC,GAAoBF,EAAaF,EAAiBM,KAEtD90B,qBAAU,WACJnY,IACFotC,GAcJ,SAAwCG,EAA0BC,GAChE,cAA2BxpB,OAAOypB,QAAQD,GAA1C,eAA2D,CAAC,IAAD,2BAA/C/yB,EAA+C,KAA1ClX,EAA0C,KACzD,GAAIgqC,EAAoB9yB,IAAQlX,EAC9B,OAAO,EAGX,OAAO,EAnBHmqC,CAA+Br5B,EAAMrU,qBAAsBA,IAE7DstC,GAqBJ,SAA2CC,EAA0BC,GACnE,cAAkBxpB,OAAO2pB,KAAKH,GAA9B,eAA+C,CAA1C,IAAM/yB,EAAG,KACZ,GAAI8yB,EAAoB9yB,KAAS+yB,EAAe/yB,GAC9C,OAAO,EAGX,OAAO,EA1BHmzB,CAAkCv5B,EAAMrU,qBAAsBA,OAGjE,CAACA,IAEJmY,qBAAU,WACR4yB,EAAkB8B,IAAgBI,MACjC,CAACJ,EAAaI,KAsBjB,IAAMY,GAAkB,uCAAG,sBAAA9rC,EAAA,2DACjBmpC,EADiB,OAElB,mBAFkB,OAgClB,aAhCkB,OAuClB,YAvCkB,OA4ClB,cA5CkB,+BAGjBX,GACFC,GAAU,GACVC,EAAcnnB,EAAE,0BAEhBjP,EAAMy5B,4BAA4B,CAChCtC,iBAAkBO,EAAiBR,SACnCG,iBAAkBK,EAAiBN,SACnCG,gBAAiBG,EAAiBJ,YAClCoC,aAAchC,EAAiBF,YAI/BE,EAAiBF,YACjBx3B,EAAMtU,iBAAiB+rC,2BAEvBR,EAAuBS,EAAiBF,WAG1CG,GAAoB,SAACgC,GACnB,OAAO,MACFA,EADL,CAEEnC,UAAWx3B,EAAMtU,iBAAiB+rC,iCAItCtB,GAAU,GACVC,EAAcnnB,EAAE,yBA7BG,mCAiCrBmnB,EAAcnnB,EAAE,0BAChBjP,EAAM45B,sBAAsB,CAC1BC,YAAarB,EACbsB,gBAAiBxB,IApCE,4BAwCrB,IACEnuC,OAAO6sB,KAAK3pB,yCACZ,UA1CmB,2CA6CjB2S,EAAM22B,SACR32B,EAAM+5B,2BAA2BpuC,EAAsBqtC,IA9CpC,iEAAH,qDAwElBgB,GAAW,SAAC5yB,EAAclY,EAAY8L,GAC1C,GAAIk7B,EAAQ,CAEV,OACE,2BACE9uB,KAAMA,EACNpM,KAAMA,EACNiF,UALe,yCAMfspB,UAAQ,EACRr6B,MAAOA,EACPkf,SAAU6rB,KAId,OAAO,8BAAO/qC,IAIZ+qC,GAAoB,SAACnrB,GACzBA,EAAMorB,UACN,IAAMC,EAAYrrB,EAAMgH,OAAO1O,KAE/BuwB,GAAoB,SAACgC,GACnB,OAAO,MAAKA,EAAZ,eAAmBQ,EAAYrrB,EAAMgH,OAAO5mB,WAG9C,IAAI20B,EACoB,UAAtB/U,EAAMgH,OAAO9a,KACTgpB,GAASlV,EAAMgH,OAAO5mB,QAAUi1B,GAAarV,EAAMgH,OAAO5mB,OAC1D80B,GAASlV,EAAMgH,OAAO5mB,OAEvB20B,EAGH/U,EAAMgH,OAAOsT,UAAU3K,OAAO,WAF9B3P,EAAMgH,OAAOsT,UAAU9nB,IAAI,WAK7B+2B,GAAuB,SAACsB,GACtB,OAAO,MAAKA,EAAZ,eAAmBQ,EAAYtW,QAI7BuW,GAAuC,SAACtrB,GAC5CA,EAAMorB,UACN,IAAMC,EAAYrrB,EAAMgH,OAAO1O,KAE/B+wB,GAAwB,SAACwB,GACvB,OAAO,MAAKA,EAAZ,eAAmBQ,EAAYrrB,EAAMgH,OAAOqT,cAI1CkR,GAAuB,SAAC7qB,GAA4C,IAAD,EAC/CA,EAAEsG,OAAlB1O,EAD+D,EAC/DA,KAAMlY,EADyD,EACzDA,MACD,aAATkY,GACFmxB,EAAmBrpC,GAER,YAATkY,GACFqxB,GAAevpC,GAEJ,gBAATkY,GACFyxB,GAAmB3pC,IAkCjBorC,GACJ,oCACE,kBAAC,GAAD,CAAan4B,KAAM8M,EAAE,0BACrB,kBAAC,KAAD,CACED,SAtHc,SAACyM,GACL,IAAVA,GAAezb,EAAM22B,SACvBR,GAAU,GACVW,EAAc,kBACdV,EAAcnnB,EAAE,2BACG,IAAVwM,GAAezb,EAAM22B,SAC9BR,GAAU,GACVW,EAAc,WACdV,EAAcnnB,EAAE,kCACG,IAAVwM,GAAezb,EAAM42B,SAC9BT,GAAU,GACVW,EAAc,YACdV,EAAcnnB,EAAE,4BACG,IAAVwM,GAA0B,IAAVA,IAAgBzb,EAAM22B,WAC/CR,GAAU,GACVW,EAAc,aACdV,EAAcnnB,EAAE,4BAuGdsrB,aAA6B,YAAf1D,EAA2B,EAAI,GAE7C,kBAAC,KAAD,KACG72B,EAAM22B,SACL,oCACE,kBAAC,KAAD,KACE,kBAAC,GAAD,KAAU1nB,EAAE,wCACZ,kBAAC,GAAD,KAASA,EAAE,+CAEb,kBAAC,KAAD,KAAMA,EAAE,qBAGXjP,EAAM42B,SACL,kBAAC,KAAD,KAAM3nB,EAAE,kCAETjP,EAAM22B,SACL,kBAAC,KAAD,KACE,kBAAC,GAAD,KACG1nB,EAAE,8CAEL,kBAAC,GAAD,KACGA,EAAE,sDAKVjP,EAAM22B,SACL,oCACE,kBAAC,KAAD,KACE,yBAAK12B,UAAU,2CACb,2BAAOmqB,QAAQ,aAAanb,EAAE,yBAC7B+qB,GAAS,YAAatC,EAAiBF,UAAW,UAErD,yBAAKv3B,UAAU,+BACb,2BAAOmqB,QAAQ,YAAYnb,EAAE,4BAC5B+qB,GAAS,WAAYtC,EAAiBR,SAAU,SAEnD,yBAAKj3B,UAAU,+BACb,2BAAOmqB,QAAQ,YAAYnb,EAAE,gCAC5B+qB,GAAS,WAAYtC,EAAiBN,SAAU,SAEnD,yBAAKn3B,UAAU,4CACb,2BAAOmqB,QAAQ,eACZnb,EAAE,+BAEJ+qB,GAAS,cAAetC,EAAiBJ,YAAa,SAExDN,GACC,uBACE/2B,UAAWO,KAAW,eAAgB,CACpCg6B,KAAMxD,KAGP/nB,EAAE,2CACH,IACA+nB,EAAoByD,gBAK1B,kBAAC,KAAD,KACE,2BAAIxrB,EAAE,mDACN,yBAAKhP,UAAU,8CACb,2BAAOmqB,QAAQ,WAAWnb,EAAE,4BAC5B,8BAAOjP,EAAMtU,iBAAiBgvC,eAEhC,yBAAKz6B,UAAU,8CACb,2BAAOmqB,QAAQ,WAAWnb,EAAE,4BAC5B,8BAAOjP,EAAMtU,iBAAiBivC,eAEhC,yBAAK16B,UAAU,0CACb,2BAAOmqB,QAAQ,aAAanb,EAAE,4BAC9B,8BAAOjP,EAAMtU,iBAAiBkvC,eAEhC,yBAAK36B,UAAU,+BACb,2BAAOmqB,QAAQ,YAAYnb,EAAE,4BAC7B,8BAAOjP,EAAMtU,iBAAiBmvC,eAEhC,yBAAK56B,UAAU,+BACb,2BAAOmqB,QAAQ,YAAYnb,EAAE,4BAC7B,8BAAOjP,EAAMtU,iBAAiBovC,aAKrC96B,EAAM42B,SACL,kBAAC,KAAD,KACE,uBAAG32B,UAAU,yBACVgP,EAAE,uCAEL,yBAAKhP,UAAU,8CACb,2BAAOmqB,QAAQ,YACZnb,EAAE,mCAEL,2BACE7H,KAAK,WACLpM,KAAK,WACLiF,UAAU,kDACVspB,UAAQ,EACRr6B,MAAOopC,EACPlqB,SAAUisB,GACVU,aAAa,kBAIhB/6B,EAAM9T,uBACL,uBAAG+T,UAAU,sBACVgP,EAAE,uCAGP,kBAAC,GAAD,CACE5F,SAAUmvB,EACV3C,iBAAkB,SAAChS,GAAD,OAAa8U,GAAsB9U,MAEvD,yBAAK5jB,UAAU,8CACb,2BAAOmqB,QAAQ,WAAWnb,EAAE,+BAC5B,2BACE7H,KAAK,UACLpM,KAAK,WACLiF,UAAU,kDACVspB,UAAQ,EACRr6B,MAAOspC,EACPpqB,SAAUisB,GACVU,aAAa,kBAIjB,yBAAK96B,UAAU,8CACb,2BAAOmqB,QAAQ,eACZnb,EAAE,mCAEL,2BACE7H,KAAK,cACLpM,KAAK,WACLiF,UAAU,kDACVspB,UAAQ,EACRr6B,MAAO0pC,GACPxqB,SAAUisB,GACVU,aAAa,mBAGftE,GACA,uBAAGx2B,UAAU,qBACVgP,EAAE,wCAKVjP,EAAM22B,SACL,kBAAC,KAAD,CAAU12B,UAAU,mCAClB,kHAIA,yBAAKA,UAAU,mCACb,yBAAKA,UAAU,+BACb,2BAAOmqB,QAAQ,iBACZnb,EAAE,+CAEL,2BACExO,SAAmD,OAAzCT,EAAMtU,iBAAkBgvC,aAClC1/B,KAAK,WACLoM,KAAK,gBACLmiB,UAAQ,EACRJ,QAASx9B,EAAsBksC,cAC/BzpB,SAAUgsB,MAGd,yBAAKn6B,UAAU,+BACb,2BAAOmqB,QAAQ,4BACZnb,EAAE,sDAEL,2BACExO,SAAuD,OAA7CT,EAAMtU,iBAAkByrC,iBAClC/vB,KAAK,2BACLpM,KAAK,WACLuuB,UAAQ,EACRJ,QAASx9B,EAAsBssC,yBAC/B7pB,SAAUgsB,MAGd,yBAAKn6B,UAAU,+BACb,2BAAOmqB,QAAQ,aACZnb,EAAE,4CAEL,2BACExO,SAAsD,OAA5CT,EAAMtU,iBAAkB6rC,gBAClCnwB,KAAK,YACLpM,KAAK,WACLuuB,UAAQ,EACRJ,QAASx9B,EAAsBqsC,UAC/B5pB,SAAUgsB,MAGd,yBAAKn6B,UAAU,+BACb,2BAAOmqB,QAAQ,qBACZnb,EAAE,wDAEL,2BACExO,SAAsD,OAA5CT,EAAMtU,iBAAkB6rC,gBAClCnwB,KAAK,oBACLpM,KAAK,WACLuuB,UAAQ,EACRJ,QAASx9B,EAAsBosC,kBAC/B3pB,SAAUgsB,MAGd,yBAAKn6B,UAAU,+BACb,2BAAOmqB,QAAQ,eACZnb,EAAE,8CAEL,2BACExO,SAAgE,OAAtDT,EAAMtU,iBAAkB+rC,0BAClCrwB,KAAK,cACLpM,KAAK,WACLuuB,UAAQ,EACRJ,QAASx9B,EAAsBmsC,YAC/B1pB,SAAUgsB,MAGd,yBAAKn6B,UAAU,+BACb,2BAAOmqB,QAAQ,4BACZnb,EAAE,sDAEL,2BACExO,SAAuD,OAA7CT,EAAMtU,iBAAkB2rC,iBAClCjwB,KAAK,2BACLpM,KAAK,WACLuuB,UAAQ,EACRJ,QAASx9B,EAAsBusC,yBAC/B9pB,SAAUgsB,SAOtB,kBAAC,GAAD,CAAap3B,kBAhRQ,WACnBkzB,GACFyB,EAAoB,CAClBT,SAAUl3B,EAAMtU,iBAAiByrC,iBACjCC,SAAUp3B,EAAMtU,iBAAiB2rC,iBACjCC,YAAat3B,EAAMtU,iBAAiB6rC,gBACpCC,UAAWx3B,EAAMtU,iBAAiB+rC,4BAEpCU,EACEn4B,EAAMrU,qBACF,CACEisC,kBAAmB53B,EAAMrU,qBAAqBisC,kBAC9CC,cAAe73B,EAAMrU,qBAAqBksC,cAC1CC,YAAa93B,EAAMrU,qBAAqBmsC,YACxCC,kBAAmB/3B,EAAMrU,qBAAqBosC,kBAC9CC,UAAWh4B,EAAMrU,qBAAqBqsC,UACtCC,yBACEj4B,EAAMrU,qBAAqBssC,yBAC7BC,yBACEl4B,EAAMrU,qBAAqBusC,+BAE/BttC,GAENurC,GAAU,GACVC,EAAcnnB,EAAE,2BAEhBjP,EAAMgD,uBAuPFhD,EAAM22B,SAA0B,aAAfE,IACjB,kBAAC,GAAD,CACE10B,KAAMuS,EACNzU,UAAU,gBACVQ,SACkB,mBAAfo2B,GAAmCX,IAAWG,GAC/B,aAAfQ,IAA8BN,GACf,cAAfM,IAA+BiC,GAElC54B,QAASs5B,OAOnB,OACE,oCACE,kBAAC,GAAD,CACEh/B,OAAQwF,EAAMxF,OACdyF,UAAWO,KAAW,8BAA+BR,EAAMC,YAE3D,kBAAC,GAAD,KACE,8BAAOq6B,KAET,kBAAC,GAAD,KACE,0BAAMr6B,UAAU,2CACbq6B,QChhBPU,G,6MACJlzB,wBAAmD,G,yEAErB,IAAD,OACnBmH,EAAMhgB,KAAK+Q,MAAXiP,EAIFgsB,EAAqC,SACzCtvC,EACAuvC,GACIA,GACF,EAAKpzB,wBAA0Bnc,EAC/B,EAAKqU,MAAMm7B,uCAAuCD,IAElD,EAAKl7B,MAAM+5B,2BAA2BpuC,IAI1C,OACE,oCACGsD,KAAK+Q,MAAMxF,QACV,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEA,QAAQ,EACRo8B,QAAoC,UAA3B3nC,KAAK+Q,MAAMjV,YACpBW,iBAAkBuD,KAAK+Q,MAAMtU,iBAC7BsX,kBAAmB/T,KAAK+Q,MAAMgD,kBAC9By2B,4BAA6BxqC,KAAK+Q,MAAMo7B,qBACxCxB,sBAAuB3qC,KAAK+Q,MAAMq7B,eAClCnvC,sBAAuB+C,KAAK+Q,MAAM9T,sBAClCyqC,QAAS1nC,KAAK+Q,MAAM/U,QAAU,EAC9BU,qBAAsBsD,KAAK+Q,MAAMrU,qBACjCouC,2BAA4BkB,KAGhC,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEh7B,UAAU,kDACVzF,QAAQ,EACRo8B,QAAoC,UAA3B3nC,KAAK+Q,MAAMjV,YACpBW,iBAAkBuD,KAAK+Q,MAAMtU,iBAC7BsX,kBAAmB/T,KAAK+Q,MAAMgD,kBAC9By2B,4BAA6BxqC,KAAK+Q,MAAMo7B,qBACxCxB,sBAAuB3qC,KAAK+Q,MAAMq7B,eAClCnvC,sBAAuB+C,KAAK+Q,MAAM9T,sBAClCyqC,QAAS1nC,KAAK+Q,MAAM/U,QAAU,EAC9BU,qBAAsBsD,KAAK+Q,MAAMrU,qBACjCouC,2BAA4BkB,KAGhC,kBAAC,GAAD,CACEzgC,OAAQvL,KAAK+Q,MAAM/T,iCACnBooB,WAAY,WACV,EAAKrU,MAAMs7B,kCAAiC,IAE9C7tB,MAAOwB,EAAE,6CACTwF,QAASxF,EAAE,+CACXyF,WAAYzF,EAAE,gBAEhB,kBAAC,GAAD,CACEzU,OAAQvL,KAAK+Q,MAAMlF,uCAEnBga,QAAS,SAACymB,GACR9yB,QAAQC,IAAR,qBAA0B6yB,IAEtBA,GACF,EAAKv7B,MAAM+5B,2BAA2B,EAAKjyB,yBAG7C,EAAK9H,MAAMm7B,wCAAuC,IAGpD1tB,MAAOwB,EAAE,oDACTwF,QAASxF,EAAE,sDACX8F,iBAAkB9F,EAAE,mDACpB+F,kBAAmB/F,EAAE,4D,GA7EJ3O,aA6HhB6f,kBACbjJ,aAxCsB,SAACzgB,GACvB,MAAO,CACL+D,OAAQ/D,EAAMqH,MAAMpS,iBAAiB8O,OACrCzP,YAAa0L,EAAM0F,MAAMpR,YACzBkB,iCAAkCwK,EAAMqH,MAAMjD,sBAAsBL,OACpEM,uCAAwCrE,EAAMqH,MAAMhD,uCACpD5O,sBAAuBuK,EAAM+F,KAAKtQ,sBAClCjB,QAASwL,EAAM+F,KAAKvR,YAIG,SAACga,GAC1B,MAAO,CACLu2B,kBAAmB,WACjBv2B,EAAS,CAAEjK,KrHvIf,uCqHuI2DqB,SAAS,KAElE++B,qBAAsB,SAACK,GAAD,OACpBx2B,EjGhFJ,SACEw2B,GADF,8CAGA,WAAOx2B,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CACPjK,K1BtDJ,oC0BuDIqB,SAAS,IAEX8I,GAA0B,IAAIqC,GAAyBi0B,IACpDnzB,MAAK,SAACxD,GACLG,EAAS,CACPjK,K1B1DR,oC0B2DQqB,QAASyI,EAASrT,UAGrBmT,OAAM,SAACjK,GACNsK,EAAS,CACPjK,K1B9DR,oC0B+DQqB,QAAS1B,OAfjB,2CAHA,wDiGgFa+gC,CAAuBD,KAClC1B,2BAA4B,SAACjyB,GAAD,OAC1B7C,GjG5CHk0B,EiG4CuCrxB,EjG5CxC,uCACA,WAAO7C,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEyX,GAA8B,IAAI0C,GAA6BQ,IAAW7L,KAAKvR,QAASkuC,IACrF7wB,MAAK,SAAC1a,GACLqX,EAAS,CACPjK,K1BhFR,oC0BiFQqB,QAASzO,EAAO6D,OAElBwT,EAAS,CACPjK,KpBrGR,8CoBsGQqB,SAAS,OAGZuI,OAAM,SAACjK,GACN8N,QAAQC,IAAI,qCAAsC/N,MAbxD,2CADA,8DAACw+B,GiG6CCkC,eAAgB,SAACM,GjG1BnB,IAACnD,EiG2BGvzB,GjG3BHuzB,EiG2B6BmD,EjG3B9B,uCACA,WAAO12B,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CAAEjK,K1B/FwB,0B0B+FmBqB,SAAS,IAC/D8I,GAAqB,IAAIuC,GAAoB8wB,IAC1ClwB,MAAK,SAACxD,GACLG,EAAS,CAAEjK,K1BjGoB,4B0BkG/BiK,EAAS,CACPjK,KpBtHR,8CoBuHQqB,SAAS,OAGZuI,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,K1BvGoB,0B0BuGuBqB,QAAS1B,OAXrE,2CADA,2DiG6BE2gC,iCAAkC,SAACtkB,GACjC/R,EAAS,CACPjK,KrH9IN,8CqH+IMqB,QAAS2a,IAEX/R,EAAS,CAAEjK,KrHrJf,uCqHqJ2DqB,SAAS,KAElE8+B,uCAAwC,SAAC3gC,GACvCyK,EAAS,CACPjK,KrHnJN,kDqHoJMqB,QAAS7B,QAOf0c,CAA6C8jB,KCjKlCY,GAAb,YACI,WAAY3vB,GAA2B,IAAD,sBAClC,IAAIvH,EAAc,WAAauH,EAAOjP,QAAU,uBADd,OAGlC,8CAAM0H,KAEDY,KAAO2G,EALsB,EAD1C,4BAAiDzF,IC6FlCq1B,I,OA1EuE,SAAC77B,GAAW,IACxFiP,EAAMiG,eAANjG,EADuF,EAEvExL,mBAASzD,EAAMxF,QAFwD,oBAExFwc,EAFwF,KAElF8kB,EAFkF,KAIzFC,EAAY,uCAAG,sBAAAruC,EAAA,sDACnBsS,EAAMg8B,sBACNh8B,EAAMi8B,yBAAyB,GAFZ,2CAAH,qDAKZC,EAAY,uCAAG,sBAAAxuC,EAAA,sDACnBouC,GAAQ,GADW,2CAAH,qDAIZK,EAAY,uCAAG,sBAAAzuC,EAAA,sDACnBouC,GAAQ,GACR97B,EAAMo8B,kCAFa,2CAAH,qDAKZ9B,EACJ,yBAAKr6B,UAAU,oBACb,yBAAKA,UAAU,aACb,kBAAC,GAAD,CAAakC,KAAM8M,EAAE,8BACrB,6BACGoE,qCAA0BrT,EAAMq8B,UAAUtpB,UAE7C,yBAAK9S,UAAU,wBACb,kBAAC,KAAD,CAAM0N,GhGjCqB,kBgGkCzB,kBAAC,GAAD,CACElgB,GAAG,MACH0U,KAAM8M,EAAE,eACRhP,UAAU,gBACVC,QAAS67B,EACT75B,OAAQ,UAGZ,kBAAC,GAAD,CACEzU,GAAG,KACH0U,KAAM8M,EAAE,cACRhP,UAAU,gBACVC,QAASg8B,EACTh6B,OAAQ,SAEV,kBAAC,GAAD,CACEzU,GAAG,gBACH0U,KAAM8M,EAAE,oCACRhP,UAAU,gBACVC,QAASi8B,EACTj6B,OAAQ,YAOlB,OACE,oCACE,kBAAC,GAAD,CACE1H,OAAQwc,EACR/W,UAAWO,KAAW,8BAA+BR,EAAMC,YAE3D,kBAAC,GAAD,KACE,8BAAOq6B,IAET,kBAAC,GAAD,KACE,0BAAMr6B,UAAU,2CACbq6B,QCpFN,SAAegC,GAAtB,qC,8CAAO,WAAuCl1B,EAAcxW,GAArD,qBAAAlD,EAAA,6DACCue,EAAS,CACT2O,aAAc,mBACd,cAAexT,GAHhB,SAKkBla,EAAiB2tB,WAAgB5O,GALnD,UAKGre,EALH,4BAOO,CAAE6mB,QAAQ,qCAAD,OAAuCrN,EAAvC,YAPhB,WASCxZ,EAAOoB,OATR,qBAUO,CAAEylB,QAAQ,qCAAD,OAAuCrN,EAAvC,sBAAiEpY,OAAQpB,EAAOoB,QAVhG,UAYGpB,EAAOktB,MAAMppB,OAAS,EAZzB,sBAaO,CAAE+iB,QAAQ,qCAAD,OAAuCrN,EAAvC,sBAbhB,eAgBCgO,EAAOxnB,EAAOktB,MAAM,GAClByhB,EAAmB,CACrBn1B,KAAMxW,EACN6c,MAAO2H,EAAKvkB,OAAO4c,MACnBsF,QAASqC,EAAKvkB,OAAOkiB,SApBtB,kBAuBIwpB,GAvBJ,6C,yPCoBDC,G,YACJ,WAAYx8B,GAAa,IAAD,8BACtB,8CAAMA,KAcRy8B,aAfwB,uCAeT,WAAOr1B,EAAcxW,GAArB,eAAAlD,EAAA,sEACW4uC,GAAwBl1B,EAAMxW,GADzC,cACPyrC,EADO,yBAENA,GAFM,2CAfS,wDAGtB,EAAK5lC,MAAQ,CACX4lC,eAAWzxC,EACX8xC,eAAe,GAEjBC,QAAQC,IAAI,CACV,EAAKH,aAAa,8CAA+C,eAChEn0B,MAAK,SAAAa,GACNA,EAAEmR,SAAQ,SAAAuZ,GAAC,OAAI,EAAK1lB,S,2VAAL,IAAmB,EAAK1X,MAAxB,eAAgCo9B,EAAEzsB,KAAOysB,QACxD,EAAK1lB,SAAS,CAAEuuB,eAAe,OAXX,E,uEAoBM,IAAD,OAGrBN,GAFQntC,KAAK+Q,MAAXiP,EAEgC,WACtC,EAAKjP,MAAMo8B,oCAGb,OACE,oCACGntC,KAAKwH,MAAMimC,cACZ,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEliC,OAAQvL,KAAK+Q,MAAM7T,qBACnBiwC,gCAAiCA,EACjCH,yBAA0BhtC,KAAK+Q,MAAMi8B,yBACrCD,oBAAqB/sC,KAAK+Q,MAAMg8B,oBAChCK,UAAWptC,KAAKwH,MAAM4lC,aAG1B,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEp8B,UAAU,kDACVzF,OAAQvL,KAAK+Q,MAAM7T,qBACnBiwC,gCAAiCA,EACjCH,yBAA0BhtC,KAAK+Q,MAAMi8B,yBACrCD,oBAAqB/sC,KAAK+Q,MAAMg8B,oBAChCK,UAAWptC,KAAKwH,MAAM4lC,cAK1B,yBAAKp8B,UAAU,uBACb,kBAAC,GAAD,Y,GAtD4BK,aAoFzB6f,kBACbjJ,aAtBsB,SAACzgB,GACvB,MAAO,CACLtK,qBAAsBsK,EAAM+F,KAAKrQ,yBAIV,SAAC8Y,GAC1B,MAAO,CACLm3B,gCAAiC,WAC/Bn3B,ErGgEJ,uCACA,WAAOA,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CACPjK,K1BlIsD,+C0BmItDqB,SAAS,IAEXgI,GAAa,IAAI2D,IACdM,MAAK,SAACxD,GACLG,EAAS,CACPjK,K1BvIkD,+C0BwIlDqB,QAASyI,EAASrT,UAGrBmT,OAAM,SAACjK,GACNsK,EAAS,CACPjK,K1B5IkD,+C0B6IlDqB,QAAS1B,OAfjB,2CADA,0DqG9DEshC,yBAA0B,SAACjhB,GACzB/V,EAAS,CAAEjK,K7H7C0B,8B6H6CqBqB,QAAS2e,KAErEghB,oBAAqB,WACnB/2B,EAAS,CAAEjK,K7H3DY,sB6HkE3Bkc,CAA6CslB,KCrBzCK,G,YACJ,WAAY78B,GAAmB,IAAD,8BAC5B,8CAAMA,KA2BDvJ,MAAmB,CACxBi3B,eAAgB,GAChB1d,UAAW,CACT,CACEviB,GAAI,EACJggB,MAAO,uCACPxN,UAAW,mBAEb,CACExS,GAAI,EACJggB,MAAO,mCACPxN,UAAW,eAEb,CACExS,GAAI,EACJggB,MAAO,0CACPxN,UAAW,yBA5Ca,EAiD9B68B,eAjD8B,sBAiDb,gCAAApvC,EAAA,sEAEPue,EAA2B,CAC/BjP,QAAS2wB,OAAO,EAAK3tB,MAAMmK,cAAcjb,OACzC+J,SAAUC,MACPC,QAAQ,SACRA,QAAQ,QACRE,OAAO,cACVC,OAAQJ,MAAS6jC,MAAM,SAASA,MAAM,QAAQ1jC,OAAO,eAR1C,SAUU8L,GACrB,IAAIy2B,GAA4B3vB,IAXrB,OAUP+wB,EAVO,OAcPC,EAAoCD,EAASvrC,KAAKqY,KAAI,SAACkQ,GAC3D,MAAO,CACLpI,QAAQ,EACRH,MAAOuI,EAAQ/gB,SACf4W,IAAKmK,EAAQ1gB,OACbgZ,WAAY0H,EAAQkjB,eAChBljB,EAAQmjB,iBACN,EACA,EACF,EACJl9B,UAAW+Z,EAAQkjB,eACfljB,EAAQmjB,iBACN,sBACA,cACF,sBAIR,EAAKhvB,SAAS,CAAEuf,eAAgBuP,IAhCnB,yGA9Cf,EAAKG,uBAAyB,EAAKA,uBAAuB7sB,KAA5B,iBAHF,E,kFAO5BthB,KAAK+Q,MAAMq9B,+BACXpuC,KAAK+Q,MAAMs9B,kBAAkB,UAC7BruC,KAAK+Q,MAAMoI,sBACXnZ,KAAK+Q,MAAMu9B,0BAEPtuC,KAAK+Q,MAAM/U,QAAU,GACvBgE,KAAK+Q,MAAMuI,0BAGbtZ,KAAK6tC,iBAEL7tC,KAAK+Q,MAAMiF,SAAS,CAAEjK,K7HxFS,wB6HyF/B/L,KAAK+Q,MAAMiF,SAASqoB,Q,yCAGHtR,GACbA,EAAU7R,gBAAkBlb,KAAK+Q,MAAMmK,eACzClb,KAAK6tC,mB,yCA6DiB52B,GACxB,YAAYtb,IAARsb,GACiC,IAA5ByJ,OAAO2pB,KAAKpzB,GAAKxU,S,gDAO1B,MAAoC,UAA3BzC,KAAK+Q,MAAMjV,aAA2BkE,KAAK+Q,MAAM/U,QAAU,GAAOgE,KAAK+Q,MAAM/U,QAAU,IAAMgE,KAAKuuC,mBAAmBvuC,KAAK+Q,MAAMrU,wBAA0BsD,KAAKuuC,mBAAmBvuC,KAAK+Q,MAAMtU,oB,oDAItM,OAAOuD,KAAK+Q,MAAM7T,sBAAwB8C,KAAK+Q,MAAMpJ,2BAA6B3H,KAAK+Q,MAAMpJ,0BAA0BlF,OAAS,I,+BAGpG,IAAD,EACyCzC,KAAK+Q,MAAjEu1B,EADmB,EACnBA,YAAa1iB,EADM,EACNA,cAAe4qB,EADT,EACSA,aAActzB,EADvB,EACuBA,cAElD,OACE,oCACGlb,KAAK+Q,MAAMpJ,0BACV,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEs3B,gBAAiBj/B,KAAK+Q,MAAMkuB,gBAC5BhH,eAAgB/c,EAChB6c,QAASyW,EACTlW,mBAAoBt4B,KAAKmuC,uBACzB7H,YAAaA,EACbN,6BAA6B,uBAC7BlH,kBAAmB9+B,KAAKyuC,0BACxB1P,0BAA2B/+B,KAAK+Q,MAAMguB,0BACtCP,eAAgBx+B,KAAK+Q,MAAMytB,eAC3B52B,eAAgB5H,KAAK+Q,MAAMnJ,iBAE7B,kBAAC,GAAD,CACE62B,eAAgBz+B,KAAKwH,MAAMi3B,eAC3B1d,UAAW/gB,KAAKwH,MAAMuZ,UACtB6C,cAAeA,EACf1I,cAAeA,EACfsjB,eAAgBx+B,KAAK+Q,MAAMytB,eAC3BxQ,UAAWhuB,KAAK+Q,MAAMid,UACtB6C,cAAe7wB,KAAK+Q,MAAM8f,cAC1BG,kBAAmBhxB,KAAK+Q,MAAMigB,kBAC9B0d,oBAAqB1uC,KAAK+Q,MAAM29B,oBAChC9mC,eAAgB5H,KAAK+Q,MAAMnJ,kBAG/B,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEq3B,gBAAiBj/B,KAAK+Q,MAAMkuB,gBAC5BhH,eAAgB/c,EAChB6c,QAASyW,EACTlW,mBAAoBt4B,KAAKmuC,uBACzB7H,YAAaA,EACbN,6BAA6B,8BAC7BlH,kBAAmB9+B,KAAKyuC,0BACxB1P,0BAA2B/+B,KAAK+Q,MAAMguB,0BACtCP,eAAgBx+B,KAAK+Q,MAAMytB,eAC3B52B,eAAgB5H,KAAK+Q,MAAMnJ,iBAE7B,kBAAC,GAAD,CACE8mC,oBAAqB1uC,KAAK+Q,MAAM29B,oBAChCjQ,eAAgBz+B,KAAKwH,MAAMi3B,eAC3B1d,UAAW/gB,KAAKwH,MAAMuZ,UACtB6C,cAAeA,EACf1I,cAAeA,EACf6c,QAASyW,EACTlW,mBAAoBt4B,KAAKmuC,uBACzBlP,gBAAiBj/B,KAAK+Q,MAAMkuB,gBAC5BH,kBAAmB9+B,KAAKyuC,0BACxB1P,0BAA2B/+B,KAAK+Q,MAAMguB,0BACtCC,uBAAwBh/B,KAAK+Q,MAAMg1B,4BACnCvH,eAAgBx+B,KAAK+Q,MAAMytB,eAC3BxQ,UAAWhuB,KAAK+Q,MAAMid,UACtB6C,cAAe7wB,KAAK+Q,MAAM8f,cAC1BG,kBAAmBhxB,KAAK+Q,MAAMigB,kBAC9BppB,eAAgB5H,KAAK+Q,MAAMnJ,kBAG7B5H,KAAKyuC,2BACL,kBAAC,GAAD,CACEhyC,iBAAkBuD,KAAK+Q,MAAMtU,iBAC7BsX,kBAAmB/T,KAAK+Q,MAAM49B,2BAC9BjyC,qBAAsBsD,KAAK+Q,MAAMrU,uBAGpCsD,KAAK4uC,+BACJ,kBAAC,GAAD,OAIJ,yBAAK59B,UAAU,uBACb,kBAAC,GAAD,U,6CAOqBiO,GAC7B,GAAIA,EAAU,CACZ,IAAM/D,EAAgBlb,KAAK+Q,MAAMzU,OAAO8b,MACtC,SAAC6D,GAAD,OAAOA,EAAElO,QAAQsJ,aAAe4H,EAAShf,SAGvCib,IACFlb,KAAK+Q,MAAM89B,gBACT3zB,EAAcS,SACdT,EAAcW,SACdX,EAAca,cAEhB/b,KAAK+Q,MAAM+9B,iBAAiB,CAC1B/gC,QAASmN,EAAcnN,QACvBoN,UAAWD,EAAcH,KACzBK,gBAAiBF,EAAcE,gBAC/BC,eAAgBH,EAAcG,eAC9B/Q,UAAW4Q,EAAc5Q,UACzBgR,UAAWJ,EAAcI,UACzB7N,eAAgByN,EAAcK,mBAAmB,GAC7CL,EAAcK,mBAAmB,GAAGC,aACpC7f,KAIRyY,EAAQC,KAAK,U,GApNAhD,aA0TJ4W,gBAzDS,SAACzgB,GACvB,IAAIoc,EAAwB,GACxBtnB,EAAqB,GACrB4e,EAAoC,CAAEjb,MAAO,GAAI0B,MAAO,IACxD6sC,EAAqC,CAAC,CAAEvuC,MAAO,GAAI0B,MAAO,KAC1Ds9B,EAAkB,GAClBT,GAAiB,EACjBxQ,EAAY,EACZ6C,EAAgB,GAEpB,GAAIrpB,EAAM+F,KAAM,CACdqW,EAAgBpc,EAAM+F,KAAKtR,UAAYuL,EAAM+F,KAAKtR,UAAY,GAC9DK,EAASkL,EAAM+F,KAAKjR,OAASkL,EAAM+F,KAAKjR,OAAS,GAEjD,IAAK,IAAIquB,EAAI,EAAGA,EAAIruB,EAAOmG,OAAQkoB,IACjC6jB,EAAa7jB,GAAK,CAChB1qB,MAAO3D,EAAOquB,GAAG5c,QAAQsJ,WACzB1V,MAAOrF,EAAOquB,GAAG5P,MAGfvT,EAAM+F,KAAKhR,OAASiL,EAAM+F,KAAKhR,MAAMwR,UAAYzR,EAAOquB,GAAG5c,UAC7DmN,EAAgBszB,EAAa7jB,IAKnC,GAAInjB,EAAM+F,KAAKhR,MAAO,CACpB0iC,EAAkBz3B,EAAM+F,KAAKhR,MAAM6e,gBACnC,IAAMF,EAA0B1T,EAAM+F,KAAKjR,OAAO8b,MAChD,SAACsS,GAAD,OAAiBA,EAAE3c,UAAYvG,EAAM+F,KAAKhR,MAAMwR,WAE9CmN,IACF8S,EAAY9S,EAAc5Q,UAC1BumB,EAAgB3V,EAAcI,UAC9BkjB,EAAiBtjB,EAAcG,gBAInC,MAAO,CACLuI,gBACAtnB,SACA4e,gBACAszB,eACAvP,kBACAxiC,iBAAkB+K,EAAM+F,KAAK9Q,kBAAoB,GACjDC,qBAAsB8K,EAAM+F,KAAK7Q,qBACjCV,QAASwL,EAAM+F,KAAKvR,QACpBwiC,iBACAxQ,YACA6C,gBACA/0B,YAAa0L,EAAM0F,MAAMpR,YACzBoB,qBAAsBsK,EAAM+F,KAAKrQ,qBACjCyK,0BAA2BH,EAAMoG,OAAOjG,0BACxCC,eAAgBJ,EAAMoG,OAAOhG,mBA7FN,SAACoO,GAC1B,MAAO,CACLswB,YAAa,WACXtwB,EAASC,IAAO,KAElB64B,iBAAkB,SAACvyC,GACjByZ,EAASiD,GAAa1c,IACtByZ,EAASmoB,GAAgB5hC,EAAMwR,QAAQsJ,aACvCrB,EAAS6rB,OAEXgN,gBAAiB,SACfnzB,EACAE,EACAE,GAEA9F,EAASkD,GAAY,CAAEwC,WAAUE,WAAUE,mBAE7CuyB,kBAAmB,SAAChd,GAAD,OACjBrb,EAAS,CAAEjK,K5HtT2B,+B4HsTSqB,QAASikB,KAC1DlY,oBAAqB,kBAAMnD,EAASmD,OACpCG,wBAAyB,kBAAMtD,EAASsD,OACxCylB,0BAA2B,kBACzB/oB,EAAS,CAAEjK,K1HnUf,uC0HmU2DqB,SAAS,KAClEuhC,2BAA4B,kBAC1B34B,EAAS,CAAEjK,K1HrUf,uC0HqU2DqB,SAAS,KAClE24B,4BAA6B,SAACx6B,GAAD,OAC3ByK,EAAS,CAAEjK,K1HrUf,kC0HqUsDqB,QAAS7B,KAC7DylB,kBAAmB,SAAC+d,GAAD,OACjB/4B,EAAS,CAAEjK,KhIhTkB,sBgIgTSqB,QAAS2hC,KACjDT,wBAAyB,kBAAMt4B,EtGtMjC,uCACA,WAAOA,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CACPjK,K1B7G4C,qC0B8G5CqB,SAAS,IAEXgI,GACE,IAAI0D,IAEHO,MAAK,SAACxD,GACLG,EAAS,CACPjK,K1BpHwC,qC0BqHxCqB,QAASyI,EAASrT,UAGrBmT,OAAM,SAACjK,GACNsK,EAAS,CACPjK,K1BzHwC,qC0B0HxCqB,QAAS1B,OAjBjB,2CADA,0DsGuMEgjC,oBAAqB,SAAC5lC,GAAD,OACnBkN,EAAS,CAAEjK,K7H9TqB,yB6H8TSqB,QAAStE,KACpDslC,6BAA8B,WAC5Bp4B,EAASytB,OAEXtpB,4BAA6B,kBAC3BnE,EAASmE,UA6DA8N,CAA6C2lB,ICtT7CoB,GAvEiD,SAAC,GAG1D,IAFLnpB,EAEI,EAFJA,QACAhc,EACI,EADJA,aAEAgL,qBAAU,WAIR,OAHIhL,GACFslB,SAAS9Y,KAAK8jB,UAAU9nB,IAAI,eAEvB,WACL8c,SAAS9Y,KAAK8jB,UAAU3K,OAAO,kBAEhC,CAAC3lB,IARA,IAUImW,EAAMiG,eAANjG,EAER,OAAOmlB,IAASC,aACd,kBAAC,KAAD,CAAO3hB,MAAI,EAAC4hB,UAAQ,EAACC,KAAMz7B,GACzB,yBAAKmH,UAAU,mBACb,yBAAKA,UAAU,2BACb,6BACE,kBAAC,GAAD,CACEG,KAAMo0B,KACNr0B,YAAa2U,EACb7U,UAAU,2BAGd,yBAAKA,UAAU,2BACb,kBAAC,GAAD,CAAYkN,mBAAmB,aAAaQ,GpG9C5B,KoG+Cd,kBAAC,GAAD,CACExL,KAAM8M,EAAE,yBACR7O,KAAK,mBACLyc,QAAQ,kBAGZ,kBAAC,GAAD,CACE1P,mBAAmB,aACnBQ,GpGjDuB,kBoGmDvB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,qBACR7O,KAAK,uBACLyc,QAAQ,sBAGZ,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASG,SACjC,kBAAC,GAAD,CAAYhL,mBAAmB,aAAaQ,GpG5D1B,kBoG6DhB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,4BACR7O,KAAK,gBACLyc,QAAQ,iBAId,kBAAC,GAAD,CACE1P,mBAAmB,aACnBQ,GpG7D8B,yBoG+D9B,kBAAC,GAAD,CACExL,KAAM8M,EAAE,yBACR7O,KAAK,iBACLyc,QAAQ,qBAOpBuB,SAAS9Y,OC6FEuvB,eAAW3d,aAZF,SAACzgB,GACvB,MAAO,CACLqC,aAAcrC,EAAMmH,YAAY9E,iBAIT,SAACmM,GAC1B,MAAO,CACL6vB,cAAe,SAACt6B,GAAD,OAAqByK,EAAS,CAAEjK,K7H/Kf,uB6H+K2CqB,QAAS7B,QAI9D0c,EApJwB,SAAClX,GAAW,IACpD5V,EAA0C4V,EAA1C5V,SAAU0O,EAAgCkH,EAAhClH,aAAcg8B,EAAkB90B,EAAlB80B,cACxB7lB,EAAMiG,eAANjG,EAQR,OANA5L,EAAQuQ,QAAO,WACTkhB,GACFA,GAAc,MAKhB,oCACE,kBAAC,GAAD,KACE,yBAAK70B,UAAU,UACb,yBACEA,UAAWO,KACT,wBACAR,EAAMi1B,6BACN,CACE,cAAen8B,KAIlBkH,EAAMk1B,iBACL,yBACEj1B,UAAU,8BACVwV,IAAKzV,EAAMk1B,iBACXlf,IAAI,KAEJ,MAEN,kBAAC,KAAD,CAAMmf,KAAG,GACP,yBAAKl1B,UAAU,oBACZ7V,GAAkC,MAAtBA,EAASgrC,UACpB,yBAAKn1B,UAAU,yBACb,kBAAC,GAAD,CACEG,KAAMi1B,KACNl1B,YAAa,kBAAM20B,GAAeh8B,IAClCmH,UAAU,iBAIhB,kBAAC,GAAD,MACA,yBAAKA,UAAU,yBACb,kBAAC,GAAD,CACEA,UAAU,qCACVkC,KAAM8M,EAAE,mBACR9O,YAAaH,EAAMu1B,gBAKzB,kBAAC,KAAD,CACEJ,KAAG,EACHb,UAAQ,EACRC,KAAMz7B,EACN08B,QAAS,IACTC,SAAS,SAET,yBAAKx1B,UAAWO,KAAW,cAAe,CAAEwW,KAAMle,KAChD,kBAAC,GAAD,CAAYqU,mBAAmB,aAAaQ,GrG3FhC,KqG4FV,kBAAC,GAAD,CACExL,KAAM8M,EAAE,yBACR7O,KAAK,mBACLyc,QAAQ,kBAGZ,kBAAC,GAAD,CACE1P,mBAAmB,aACnBQ,GrG9FmB,kBqGgGnB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,qBACR7O,KAAK,uBACLyc,QAAQ,sBAGZ,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASI,cACjC,kBAAC,GAAD,CACEjL,mBAAmB,aACnBQ,GrG3GY,kBqG6GZ,kBAAC,GAAD,CACExL,KAAM8M,EAAE,4BACR7O,KAAK,gBACLyc,QAAQ,qBAId,kBAAC,GAAD,CACE1P,mBAAmB,aACnBQ,GrG7G0B,yBqG+G1B,kBAAC,GAAD,CACExL,KAAM8M,EAAE,yBACR7O,KAAK,kBACLyc,QAAQ,sBAQtB,kBAAC,GAAD,KACE,yBACE5c,UAAWO,KACT,wBACAR,EAAMi1B,gCAGV,yBAAKh1B,UAAU,2BACb,6BACG7V,GAAkC,MAAtBA,EAASgrC,UACpB,kBAAC,GAAD,CACEn1B,UAAU,+BACVG,KAAMi1B,KACNl1B,YAAa,kBAAM20B,GAAeh8B,OAIxC,kBAAC,GAAD,CACEmH,UAAU,+BACVG,KAAMs1B,KACNv1B,YAAaH,EAAMu1B,cAErB,kBAAC,GAAD,CACEzgB,QAAS,kBAAMggB,GAAc,IAC7Bh8B,aAAcA,WCvIXolC,GAfmB,SAAAl+B,GAC9B,IAAMyB,EAA6B,CAC/B08B,QAAS,OACTC,oBAAoB,UAAD,OAAYp+B,EAAMq+B,YAAlB,wBACnBC,iBAAiB,UAAD,OAAYt+B,EAAMu+B,SAAlB,yBAChBC,cAAc,gCAAD,OAAkCx+B,EAAMq+B,YAAxC,MACbI,WAAW,kCAAD,OAAoCz+B,EAAMu+B,SAA1C,QAEd,OACI,yBAAK98B,MAAOA,EAAOxB,UAAWO,KAAWR,EAAMC,YAC1CD,EAAMuC,W,8CCfZ,WAAoCue,EAA0Bz1B,GAA9D,mBAAAqC,EAAA,6DACCue,EAAQ,CACR2O,aAAc,cACdO,eAAgB2F,EAChBsP,MAAM,qBAJP,SAOgBljC,EAAiB2tB,WAA8B5O,GAP/D,cAOCre,EAPD,OASC0tB,EAAkC,GACnCjwB,EAAUqG,OAAS,GAClB9D,EAAOktB,MAAMR,SAAQ,SAACvH,IACf,IAAIkH,IAAasB,cAAcxI,EAAQ1nB,IACtCiwB,EAAiBhY,KAAKyP,EAAQyH,IAAI/sB,OAKd,IAA5B6tB,EAAiB5pB,QACjB4pB,EAAiBhB,SAAQ,SAACkB,GACtB5tB,EAAOktB,MAAMR,SAAQ,SAACvH,EAAQ0I,GACvB1I,EAAQyH,IAAI/sB,KAAO+tB,GAClB5tB,EAAOktB,MAAMY,OAAOD,EAAM,SAtBvC,kBA4BK7tB,GA5BL,4C,iCCkCQ8wC,GA1B2B,SAAC,GAAmC,IAAjC9mC,EAAgC,EAAhCA,KAAM+lC,EAA0B,EAA1BA,oBAA0B,EACrCl6B,mBAAS,IAD4B,oBAClEk7B,EADkE,KACtDC,EADsD,KAUzE,OACI,oCACKD,GAAc,kBAAC,IAAD,CAAUhxB,GAAIgxB,IAC7B,yBAAK1+B,UAAU,YAAYC,QAVR,WACnBtI,GAAQA,EAAK4iB,IAAI/sB,KACjBkwC,EAAoB/lC,EAAK4iB,IAAI/sB,IAC7BmxC,ExGPoB,gBwGehB,yBAAK3+B,UAAU,cACX,yBAAKwV,IAAK7d,EAAK/G,OAAO6kB,MAAQ9d,EAAK/G,OAAO6kB,MAAM7kB,OAAO8kB,KAAKjR,IAAM,uCAAwCsR,IAAI,UAElH,yBAAK/V,UAAU,yBACX,uBAAGA,UAAU,SAASrI,EAAK/G,OAAO4c,OAClC,uBAAGxN,UAAU,gBAAgBye,GAAiB9mB,EAAK/G,OAAOguC,gBCqC/D3nB,gBAPS,SAACzgB,GACrB,MAAO,CACHhL,KAAMgL,EAAM+F,KAAK/Q,KACjBJ,UAAWoL,EAAM+F,KAAKnR,aAIf6rB,EApD6C,SAAC,GAA8C,IAA5CzrB,EAA2C,EAA3CA,KAAMkyC,EAAqC,EAArCA,oBAAqBtyC,EAAgB,EAAhBA,UAAgB,EAC9EoY,mBAAqC,IADyC,oBAC/F7L,EAD+F,KACzFknC,EADyF,OAEpEr7B,oBAAS,GAF2D,oBAE/F3B,EAF+F,KAEpFwf,EAFoF,OAGtE7d,oBAAS,GAH6D,oBAG/FN,EAH+F,KAGrFoe,EAHqF,KAM9FtS,EAAMiG,eAANjG,EA0BR,OAxBAnL,qBAAU,WAEFrY,GAAQA,EAAKkf,WACb2W,GAAa,GACbC,GAAY,GACZ5G,GAAYlvB,GAAQA,EAAKkf,UAAUrC,MAAK,SAAC7c,IFzB9C,SAAP,sCE0BgBszC,CAAoBtzC,EAAK+uB,IAAI/sB,GAAGpC,GAAWid,MACvC,SAAC1a,GACGkxC,EAAQlxC,EAAOktB,OACfwG,GAAa,MAEjB,SAACzc,GACGyc,GAAa,GACbC,GAAY,SAGrB3c,OAAM,WACL0c,GAAa,GACbC,GAAY,SAIrB,CAAC91B,GAAQA,EAAKkf,WAGb,oCACK7I,GAAa,kBAAC,GAAD,OACZA,GAAaqB,GAAY,uBAAGlD,UAAU,cAAcgP,EAAE,6BACtDnN,IACGqB,GACDvL,EAAKkS,KAAI,SAACugB,EAAGzQ,GACT,OAAO,kBAAC,GAAD,CAAUhiB,KAAMyyB,EAAGsT,oBAAqBA,EAAqBv3B,IAAKwT,WCoC9EolB,GAxEqE,SAACh/B,GAA+C,IAC1HiP,EAAMiG,eAANjG,EADyH,EAG/FxL,qBAH+F,oBAG1H44B,EAH0H,KAG/G4C,EAH+G,OAIvFx7B,oBAAS,GAJ8E,oBAI1Hi5B,EAJ0H,KAI3GwC,EAJ2G,KAMjIp7B,qBAAU,WACR64B,QAAQC,IAAI,CACVH,EAAa,wDAAyD,eACrEn0B,MAAK,SAAAa,GACN81B,EAAa91B,EAAE,IACf+1B,GAAiB,QAElB,IAEH,IAAMzC,EAAY,uCAAG,WAAOr1B,EAAcxW,GAArB,eAAAlD,EAAA,sEACK4uC,GAAwBl1B,EAAMxW,GADnC,cACbyrC,EADa,yBAEZA,GAFY,2CAAH,wDAWZ/B,EACJ,yBAAKr6B,UAAU,yBAAyBwB,MAAO,CAAE08B,QAAS,UACvDzB,EACC,yBAAKz8B,UAAU,aACb,kBAAC,GAAD,CAAakC,KAAMk6B,EAAYA,EAAU5uB,MAAQ,KACjD,yBAAKxN,UAAU,mBACZoT,qCAA0BgpB,EAAWtpB,UAGxC,kBAAC,KAAD,CAAMpF,G1GxCqB,kB0GyCzB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,oBACR/O,QAlBQ,WAClBF,EAAMqU,YAAW,GACjBrU,EAAMg8B,sBACNh8B,EAAMi8B,yBAAyB,QAoB3B,yBAAKh8B,UAAU,uBACb,kBAAC,GAAD,QAMR,OACE,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEzF,OAAQwF,EAAMxF,OACdyF,UAAWO,KAAW,gCAErB85B,IAGL,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE9/B,OAAQwF,EAAMxF,OACdyF,UAAWO,KAAW,oDAErB85B,MC4UIpjB,gBAnES,SAACzgB,GACvB,IAAIoc,EAAwB,GACxB1I,EAAoC,CAAEjb,MAAO,GAAI0B,MAAO,IACxDrF,EAAqB,GACrBkyC,EAAqC,CAAC,CAAEvuC,MAAO,GAAI0B,MAAO,KAM9D,GAAI6F,EAAM+F,KAAM,CACdqW,EAAgBpc,EAAM+F,KAAKtR,UAAYuL,EAAM+F,KAAKtR,UAAY,GAC9DK,EAASkL,EAAM+F,KAAKjR,OAASkL,EAAM+F,KAAKjR,OAAS,GAEjD,IAAK,IAAIquB,EAAI,EAAGA,EAAIruB,EAAOmG,OAAQkoB,IACjC6jB,EAAa7jB,GAAK,CAChB1qB,MAAO3D,EAAOquB,GAAG5c,QAAQsJ,WACzB1V,MAAOrF,EAAOquB,GAAG5P,MAGfvT,EAAM+F,KAAKhR,OAASiL,EAAM+F,KAAKhR,MAAMwR,UAAYzR,EAAOquB,GAAG5c,UAC7DmN,EAAgBszB,EAAa7jB,IAKnC,GAAInjB,EAAM+F,KAAKhR,MAAO,CACFiL,EAAM+F,KAAKhR,MAAM6e,gBACnC,IAAMF,EAA0B1T,EAAM+F,KAAKjR,OAAO8b,MAChD,SAACsS,GAAD,OAAiBA,EAAE3c,UAAYvG,EAAM+F,KAAKhR,MAAMwR,WAE9CmN,IACUA,EAAc5Q,UACV4Q,EAAcI,UACbJ,EAAcG,gBAInC,MAAO,CACLuI,gBACAxnB,UAAWoL,EAAM+F,KAAKnR,UACtBC,iBAAkBmL,EAAM+F,KAAKlR,iBAC7B6e,gBACAxd,iBAAkB8J,EAAM+F,KAAK7P,iBAC7BK,sBAAuByJ,EAAM+F,KAAKxP,sBAClCD,uBAAwB0J,EAAM+F,KAAKzP,2BAIZ,SAACkY,GAC1B,MAAO,CACLswB,YAAa,WACXtwB,EAASC,IAAO,KAElBy4B,oBAAqB,SAAC5lC,GAAD,OACnBkN,EAAS,CAAEjK,KrIpYqB,yBqIoYSqB,QAAStE,KACpDikC,oBAAqB,WACnB/2B,EAAS,CAAEjK,KtI7WY,mBsI+WzBihC,yBAA0B,SAACjhB,GACzB/V,EAAS,CAAEjK,KtIrW0B,8BsIqWqBqB,QAAS2e,KAErE5R,4BAA6B,kBAC3BnE,EAASmE,UAIA8N,EA5WuC,SAAClX,GAAW,IACxDiP,EAAMiG,eAANjG,EADuD,EAG7BxL,oBAAS,GAHoB,oBAGxD07B,EAHwD,KAG7CC,EAH6C,OAIzB37B,qBAJyB,8BAM/DK,qBAAU,WACR9D,EAAMiF,SAAS,CAAEjK,KrI1Cc,wBqI2C/BgF,EAAMiF,SAASqoB,MACf8R,EAAap/B,EAAMjT,yBAA2BiT,EAAM1U,oBACnD,IAEH,IAAM+zC,EACJ,oCACE,kBAAC,GAAD,CACE9J,YAAav1B,EAAMu1B,YACnBN,6BAA6B,yBAE/B,yBAAKh1B,UAAU,uBACb,yBAAKA,UAAU,oBACb,kBAAC,GAAD,CACE4S,cAAe7S,EAAM6S,cACrBtG,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,KAGb,kBAAC,GAAD,CACEV,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,IAGX,kBAAC,GAAD,CACEU,G3GpFuB,iB2GqFvBR,mBAAmB,mBAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,qBACR7O,KAAK,uBACLyc,QAAQ,aAGZ,kBAAC,GAAD,CACElP,G3GhGkB,iB2GiGlBR,mBAAmB,kBACnB1f,GAAG,iBAEH,kBAAC,GAAD,CACE0U,KAAM8M,EAAE,4BACR7O,KAAK,gBACLyc,QAAQ,gBAGZ,kBAAC,GAAD,CACElP,G3GlG8B,wB2GmG9BR,mBAAmB,mBAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,yBACR7O,KAAK,kBACLyc,QAAQ,kBAId,kBAAC,GAAD,CAAelF,SAAU,CAACK,GAASC,OAAQD,GAASE,SAClD,kBAAC,GAAD,CACE3L,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,GAEXgO,SAAU,EACV5B,aAAa,EACbmD,iBAAkB,CAChBpD,aAAc,kBAAC,GAAD,CAAsB6B,SAAU,QAIpD,kBAAC,GAAD,CAAY1O,SAAU,CAAEC,YAAa,EAAGG,WAAY,EAAGG,SAAU,EAAGG,QAAS,IAE3E,kBAAC,GAAD,CAAcQ,MAAOwB,EAAE,gCACvB,6BACA,yBAAKhP,UAAU,sBAAsBwB,MAAO,CAAE69B,QAAS,OAAQC,UAAW,SAAUx9B,OAAQ,UAC1F,kBAAC,GAAD,CAAmB47B,oBAAqB39B,EAAM29B,wBAIlD,kBAAC,GAAD,CACEhmB,SAAU,CACRK,GAASO,WACTP,GAASK,WACTL,GAASM,KAEXV,YACE,kBAAC,GAAD,CACEzK,mBAAmB,mCACnBZ,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,4BACb,kBAAC,GAAD,CAAcwN,MAAOwB,EAAE,sBAEzB,yBAAKhP,UAAU,kCACb,kBAAC,KAAD,KACE,yBACEwV,IAAKxG,EAAE,kBACP+G,IAAI,0BAOd,kBAAC,GAAD,CACE7I,mBAAmB,qCACnBZ,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,4BACb,kBAAC,GAAD,CACEwN,MAAOwB,EAAE,qCAGb,kBAAC,GAAD,CACEsd,YAAY,EACZ5/B,iBAAkBqT,EAAMrT,wBAShC6yC,EACJ,oCACE,kBAAC,GAAD,CACEjK,YAAav1B,EAAMu1B,cAErB,yBAAKt1B,UAAU,qDACb,kBAAC,GAAD,CACE4S,cAAe7S,EAAM6S,cACrBtG,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,MAIf,kBAAC,GAAD,CACEV,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,qBACb,yBAAKA,UAAU,2BACb,kBAAC,GAAD,CACE0N,G3G7NuB,iB2G8NvBR,mBAAmB,cAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,qBACR7O,KAAK,uBACLyc,QAAQ,cAId,yBAAK5c,UAAU,2BACb,kBAAC,GAAD,CACE0N,G3G3OkB,iB2G4OlBR,mBAAmB,cAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,4BACR7O,KAAK,gBACLyc,QAAQ,iBAId,yBAAK5c,UAAU,2BACb,kBAAC,GAAD,CACE0N,G3G9O8B,wB2G+O9BR,mBAAmB,cAEnB,kBAAC,GAAD,CACEhL,KAAM8M,EAAE,yBACR7O,KAAK,kBACLyc,QAAQ,oBAMlB,kBAAC,GAAD,CACE5c,UAAU,+BACVs+B,SAAU,EACVF,YAAa,IAEb,kBAAC,GAAD,CAAe1mB,SAAU,CAACK,GAASC,OAAQD,GAASE,SAClD,kBAAC,GAAD,CACE3L,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,GAEXgO,SAAU,EACV5B,aAAa,EACbmD,iBAAkB,CAChBpD,aAAc,kBAAC,GAAD,CAAsB6B,SAAU,QAIpD,kBAAC,GAAD,CACE9N,mBAAmB,qCACnBZ,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,kBAAC,GAAD,CACEQ,MAAOwB,EAAE,oCAEX,kBAAC,GAAD,CACEsd,YAAY,EACZ5/B,iBAAkBqT,EAAMrT,mBAE1B,8BAEF,kBAAC,GAAD,CAAY4f,SAAU,CAAEC,YAAa,EAAGG,WAAY,GAAIG,SAAU,GAAIG,QAAS,IAE7E,kBAAC,GAAD,CAAcQ,MAAOwB,EAAE,gCACvB,6BACA,kBAAC,GAAD,CAAmB0uB,oBAAqB39B,EAAM29B,yBAOtD,OACE,oCACG39B,EAAMhT,sBACL,oCACE,kBAAC,GAAD,KACGqyC,GAEH,kBAAC,GAAD,KACGG,GAEH,kBAAC,GAAD,CACEhlC,OAAQ2kC,EACR9qB,WAAY+qB,EACZpD,oBAAqBh8B,EAAMg8B,oBAC3BC,yBAA0Bj8B,EAAMi8B,4BAIpC,yBAAKh8B,UAAU,oBACb,kBAAC,GAAD,CACEsM,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,uBACb,kBAAC,GAAD,aCzUDw/B,I,OAAb,oLAEQ,OACI,yBAAKx/B,UAAWO,KAAW,gCAAiCvR,KAAK+Q,MAAMmN,qBACnE,kBAAC,KAAD,KACI,yBAAKlN,UAAU,4BAA4BwV,IAAKxmB,KAAK+Q,MAAMyV,IAAKO,IAAI,MAExE,yBAAK/V,UAAU,gCAAgChR,KAAK+Q,MAAMuC,eAP1E,GAAwCjC,cAa3Bo/B,GAAb,oLAEQ,OACI,yBAAKz/B,UAAWO,KAAW,6BAA8BvR,KAAK+Q,MAAMmN,qBAChE,yBAAKlN,UAAU,mBAAmBwV,IAAKxmB,KAAK+Q,MAAMyV,IAAKO,IAAI,KAC3D,yBAAK/V,UAAU,6BAA6BhR,KAAK+Q,MAAMuC,eALvE,GAAqCjC,a,OCpBtB,SAASq/B,KAAW,IACvB1wB,EAAMiG,eAANjG,EAER,OACI,uBAAGhP,UAAU,iBAAiBwN,MAAOpgB,SAAiC4hB,EAAE,uBAAxE,IAAiG5hB,gC,yBCR5FuyC,GAAkBz1C,OAAe01C,IAAIC,eAErCC,IADiB51C,OAAe01C,IAAIG,cACtB71C,OAAe01C,IAAII,YCqCxCC,G,YACJ,WAAYlgC,GAAyB,IAAD,8BAClC,8CAAMA,KAQDvJ,MAAoB,CACzB0pC,aAAc,GACd92B,SAAU,GACV+2B,YAAY,GATZ,EAAKC,aAAe,EAAKA,aAAa9vB,KAAlB,iBACpB,EAAK+vB,aAAe,EAAKA,aAAa/vB,KAAlB,iBACpB,EAAKgwB,eAAiB,EAAKA,eAAehwB,KAApB,iBACtB,EAAKiwB,iBAAmB,EAAKA,iBAAiBjwB,KAAtB,iBANU,E,2EAeff,GAAmC,IAAD,EAC7BA,EAAEsG,OAAlB1O,EAD6C,EAC7CA,KAAMlY,EADuC,EACvCA,MACdD,KAAKkf,SAAL,eAAiB/G,EAAOlY,M,mCAGLsgB,GACnBA,EAAET,iBAEF,IAAMvS,EAAOvN,KAAKwH,MACd+F,EAAK2jC,cAAgB3jC,EAAK6M,UAC5Bpa,KAAK+Q,MAAMygC,WAAWjkC,EAAK2jC,aAAc3jC,EAAK6M,SAAU,W,qCAIrCvE,GACjBA,EAAS47B,SACXzxC,KAAK+Q,MAAMygC,WAAW,GAAI37B,EAAS47B,QAAS,Y,uCAIvB57B,GACnBA,EAASxX,aACX2B,KAAK+Q,MAAMygC,WAAW,GAAI37B,EAASxX,YAAa,c,+BAI1C,IAAD,OACC2hB,EAAMhgB,KAAK+Q,MAAXiP,EAER,OAAIhgB,KAAKwH,MAAM2pC,WACN,kBAAC,IAAD,CAAUzyB,G/GzES,c+G6E1B,yBAAK1N,UAAU,yBACb,kBAAC,GAAD,CACE0C,KAAMsM,EAAE,iBACR9M,KAAM8M,EAAE,cACRhP,UAAU,eAIZ,yBAAKA,UAAU,+BACbhR,KAAK+Q,MAAM2gC,kBACN,kBAAC,GAAD,CAAgB1gC,UAAU,yBACzB,mDACA,kBAAC,GAAD,CACI+mB,QAAS/3B,KAAK+Q,MAAM4gC,eACpB3Z,gBAAgB,GAChBhnB,UAAU,sBACVsnB,mBAAoBt4B,KAAK+Q,MAAM6gC,aAC/B/+B,UAAW7S,KAAK+Q,MAAM8gC,aACtB5Z,eAAgBj4B,KAAK+Q,MAAM4gC,eAAev5B,MAC1C,SAACyrB,GAAD,OAAOA,EAAE5jC,OAAS,EAAK8Q,MAAM+gC,0BAOpC9xC,KAAK+Q,MAAM2gC,kBAAoB1xC,KAAK+Q,MAAM+gC,mBAC7C,oCACE,yBAAK9gC,UAAU,4BAsBb,yBAAKA,UAAU,iCACb,kBAAC,KAAD,CACE+gC,SAAUpB,GACVqB,OAAQ,SAACC,GAAD,OACN,4BACEjhC,UAAW,sBACXC,QAASghC,EAAYhhC,QACrBO,SACEygC,EAAYzgC,UACZ,EAAKT,MAAMmhC,cACP,EAAKnhC,MAAM+gC,kBAAoB,EAAK/gC,MAAM2gC,kBAGhD,yBAAKlrB,IAAI,6BAA6BO,IAAI,WAC1C,wDAGJorB,UAAWnyC,KAAKsxC,eAChBc,UAAWpyC,KAAKsxC,kBAGpB,yBAAKtgC,UAAU,kBACb,0BAAMA,UAAU,SAChB,0BAAMA,UAAU,QAAhB,MACA,0BAAMA,UAAU,WAGpB,0BAAMmH,KAAK,OAAOgN,SAAUnlB,KAAKqxC,cAC/B,kBAAC,GAAD,CAAgBrgC,UAAU,yBACxB,2BACEmH,KAAK,eACLnH,UAAU,aACVjF,KAAK,QACLuqB,YAAatW,EAAE,iCACf/f,MAAOD,KAAKwH,MAAM0pC,aAClB/xB,SAAUnf,KAAKoxC,aACD5/B,UAAWxR,KAAK+Q,MAAM+gC,kBAAoB9xC,KAAK+Q,MAAM2gC,mBAErE,2BACEv5B,KAAK,WACLnH,UAAU,aACVjF,KAAK,WACLuqB,YAAatW,EAAE,6BACf/f,MAAOD,KAAKwH,MAAM4S,SAClB+E,SAAUnf,KAAKoxC,aACD5/B,UAAWxR,KAAK+Q,MAAM+gC,kBAAoB9xC,KAAK+Q,MAAM2gC,oBAGvE,yBAAK1gC,UAAU,2BAEX,kBAAC,KAAD,CAAM0N,G/G3LiB,qB+G2La1N,UAAU,cAC3CgP,EAAE,8BAIT,uBACEhP,UAAWO,KAAW,gBAAiB,CACrCg6B,KACEvrC,KAAK+Q,MAAMrV,qBACXsE,KAAK+Q,MAAMlV,oBAEf6nB,wBAAyB,CACvBC,OAAQ3jB,KAAK+Q,MAAMlV,kBACfmkB,EAAE,wBACFA,EAAEhgB,KAAK+Q,MAAMrV,wBAGrB,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEqQ,KAAK,SACLyF,UACGxR,KAAKwH,MAAM0pC,eACXlxC,KAAKwH,MAAM4S,UACZpa,KAAK+Q,MAAMmhC,cACPlyC,KAAK+Q,MAAM+gC,kBAAoB9xC,KAAK+Q,MAAM2gC,iBAEhDx+B,KAAM8M,EACJhgB,KAAK+Q,MAAMmhC,YACP,kBACA,qBAENr/B,UAAW7S,KAAK+Q,MAAMmhC,eAG1B,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEh/B,KAAM8M,EAAE,wBACR/O,QAAS,kBAAM,EAAKiO,SAAS,CAAEiyB,YAAY,KAC7B3/B,UAAWxR,KAAK+Q,MAAM+gC,kBAAoB9xC,KAAK+Q,MAAM2gC,oBAGvE,uBAAG1gC,UAAU,kBACVgP,EAAE,iCAKX,yBAAKhP,UAAU,kBACb,kBAAC,GAAD,Y,GAtMeK,aA6MV6f,kBAAkB+f,I,0OCpPrBoB,GCyFGC,G,YA9Db,WAAYvhC,GAAa,IAAD,8BACtB,8CAAMA,KAaRwhC,eAdwB,uCAcP,WAAOp6B,EAAcxW,GAArB,eAAAlD,EAAA,sEACW4uC,GAAwBl1B,EAAMxW,GADzC,cACT6wC,EADS,yBAERA,GAFQ,2CAdO,wDAGtB,EAAKhrC,MAAQ,CACXgrC,iBAAa72C,EACb8xC,eAAe,GAEjBC,QAAQC,IAAI,CACV,EAAK4E,eAAe,uCAAwC,iBAC3Dl5B,MAAK,SAAAa,GACNA,EAAEmR,SAAQ,SAAAuZ,GAAC,aAAI,EAAK1lB,S,2VAAL,IAAmB,EAAK1X,OAAxB,mBAAgCo9B,EAAEzsB,KAAOysB,GAAzC,+BAA2D,GAA3D,WAVK,E,uEAmBd,IAAD,OACP,OACE,oCACG5kC,KAAKwH,MAAMimC,cACV,kBAAC,KAAD,MACG,SAACztB,GACA,OACE,yBAAKhP,UAAU,wBACb,kBAAC,GAAD,CACEwV,IAAI,kCACJtI,mBAAmB,kCAEnB,4BAAK8B,EAAE,uBACP,yBAAKhP,UAAU,yBACZoT,qCAA0B,EAAK5c,MAAMgrC,YAAa1uB,WAIvD,kBAAC,GAAD,CACE0tB,WAAY,EAAKzgC,MAAMygC,WACvBU,YAAa,EAAKnhC,MAAMmhC,YACxBx2C,oBAAqB,EAAKqV,MAAMrV,oBAChCG,kBAAmB,EAAKkV,MAAMlV,kBAC9Bg2C,aAAc,EAAK9gC,MAAM8gC,aACzBF,eAAgB,EAAK5gC,MAAM4gC,eAC3BG,iBAAkB,EAAK/gC,MAAM+gC,iBAC7BF,aAAc,EAAK7gC,MAAM6gC,aACzBF,iBAAkB,EAAK3gC,MAAM2gC,uBAOvC,yBAAK1gC,UAAU,uBACb,kBAAC,GAAD,Y,GAvDYK,aCTlBohC,I,mBACF,WAAY1hC,GAA0B,IAAD,8BACjC,8CAAMA,KAKHvJ,MAA0B,CAC7B2pC,YAAY,GAJZ,EAAKE,aAAe,EAAKA,aAAa/vB,KAAlB,iBAHa,E,2EAUhBf,GACjBA,EAAET,iBAEF9f,KAAK+Q,MAAM2hC,mB,+BAGL,IAAD,OACG1yB,EAAMhgB,KAAK+Q,MAAXiP,EAER,OAAIhgB,KAAKwH,MAAM2pC,WACJ,kBAAC,IAAD,CAAUzyB,GlH1BG,ckH6BpB,kBAAC,GAAD,CAAiB8H,IAAI,iCAAiCtI,mBAAmB,sBACrE,kBAAC,GAAD,CACIxK,KAAMsM,EAAE,iBACR9M,KAAM8M,EAAE,cACRhP,UAAU,sBAEd,0BAAMmU,SAAUnlB,KAAKqxC,cACjB,4BAAKrxB,EAAE,uBACP,uBAAGhP,UAAU,yBAAyBgP,EAAE,yBACxC,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAiBjU,KAAK,SAASmH,KAAM8M,EAAE,uBACvC,kBAAC,GAAD,CACI9M,KAAM8M,EAAE,wBACR/O,QAAS,kBAAM,EAAKiO,SAAS,CAAEiyB,YAAY,c,GArCvC9/B,cA8CjB6f,kBAAkBuhB,ICoMlBE,G,YA3Nb,WAAY5hC,GAAoB,IAAD,8BAC7B,8CAAMA,KAQDvJ,MAAoB,CACzB0pC,aAAc,GACd92B,SAAU,GACV+2B,YAAY,GATZ,EAAKC,aAAe,EAAKA,aAAa9vB,KAAlB,iBACpB,EAAK+vB,aAAe,EAAKA,aAAa/vB,KAAlB,iBACpB,EAAKgwB,eAAiB,EAAKA,eAAehwB,KAApB,iBACtB,EAAKiwB,iBAAmB,EAAKA,iBAAiBjwB,KAAtB,iBANK,E,2EAeVf,GAAmC,IAAD,EAC7BA,EAAEsG,OAAlB1O,EAD6C,EAC7CA,KAAMlY,EADuC,EACvCA,MACdD,KAAKkf,SAAL,eAAiB/G,EAAOlY,M,mCAGLsgB,GACnBA,EAAET,iBAEF,IAAMvS,EAAOvN,KAAKwH,MACd+F,EAAK2jC,cAAgB3jC,EAAK6M,UAC5Bpa,KAAK+Q,MAAMygC,WAAWjkC,EAAK2jC,aAAc3jC,EAAK6M,SAAU,W,qCAIrCvE,GACjBA,EAAS47B,SACXzxC,KAAK+Q,MAAMygC,WAAW,GAAI37B,EAAS47B,QAAS,Y,uCAIvB57B,GACnBA,EAASxX,aACX2B,KAAK+Q,MAAMygC,WAAW,GAAI37B,EAASxX,YAAa,c,+BAI1C,IAAD,OACP,OAAI2B,KAAKwH,MAAM2pC,WACN,kBAAC,IAAD,CAAUzyB,GnHvES,cmH2E1B,kBAAC,GAAD,CACE8H,IAAI,iCACJtI,mBAAmB,oBAEnB,kBAAC,KAAD,MACG,SAAC8B,GACA,OACI,oCACI,yBAAKhP,UAAU,sCACf,EAAKD,MAAM2gC,kBACR,kBAAC,GAAD,CAAgB1gC,UAAU,yBACrB,mDACA,kBAAC,GAAD,CACI+mB,QAAS,EAAKhnB,MAAM4gC,eACpB3Z,gBAAgB,GAChBhnB,UAAU,sBACVsnB,mBAAoB,EAAKvnB,MAAM6gC,aAC/B/+B,UAAW,EAAK9B,MAAM8gC,aACtB5Z,eAAgB,EAAKlnB,MAAM4gC,eAAev5B,MACtC,SAACyrB,GAAD,OAAOA,EAAE5jC,OAAS,EAAK8Q,MAAM+gC,0BAO5C,EAAK/gC,MAAM2gC,kBAAoB,EAAK3gC,MAAM+gC,mBAC7C,oCACE,yBAAK9gC,UAAU,mCA2Bb,yBAAKA,UAAU,iCACb,kBAAC,KAAD,CACE+gC,SAAUpB,GACViC,UAAU,EACVZ,OAAQ,SAACC,GAAD,OACN,4BACEjhC,UAAU,sBACVC,QAASghC,EAAYhhC,QACrBO,SACEygC,EAAYzgC,WACR,EAAKT,MAAM+gC,kBAAoB,EAAK/gC,MAAM2gC,kBAGhD,yBACElrB,IAAI,6BACJO,IAAI,WAEN,0BAAM/V,UAAU,UAAhB,0BAKJmhC,UAAW,EAAKb,eAChBc,UAAW,EAAKd,kBAGpB,yBAAKtgC,UAAU,aACb,0BAAMA,UAAU,SAChB,0BAAMA,UAAU,QAAhB,MACA,0BAAMA,UAAU,WAGpB,0BAAMmU,SAAU,EAAKksB,cACnB,kBAAC,GAAD,KACE,2BACEl5B,KAAK,eACLnH,UAAU,yBACVjF,KAAK,QACLuqB,YAAatW,EAAE,iCACf/f,MAAO,EAAKuH,MAAM0pC,aAClB/xB,SAAU,EAAKiyB,aACf5/B,UAAW,EAAKT,MAAM+gC,kBAAoB,EAAK/gC,MAAM2gC,mBAEvD,2BACEv5B,KAAK,WACLnH,UAAU,yBACVjF,KAAK,WACLuqB,YAAatW,EAAE,6BACf/f,MAAO,EAAKuH,MAAM4S,SAClB+E,SAAU,EAAKiyB,aACf5/B,UAAW,EAAKT,MAAM+gC,kBAAoB,EAAK/gC,MAAM2gC,oBAGzD,yBAAK1gC,UAAU,2BAEX,kBAAC,KAAD,CACE0N,GnHpMa,qBmHqMb1N,UAAU,qBAETgP,EAAE,8BAIT,uBACEhP,UAAWO,KACT,uBACA,wBACA,CACEg6B,KACE,EAAKx6B,MAAMrV,qBACX,EAAKqV,MAAMlV,qBAIhB,EAAKkV,MAAMlV,kBACRmkB,EAAE,wBACFA,EAAE,EAAKjP,MAAMrV,sBAEnB,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEqQ,KAAK,SACLyF,UACG,EAAKhK,MAAM0pC,eACX,EAAK1pC,MAAM4S,UACZ,EAAKrJ,MAAMmhC,cACT,EAAKnhC,MAAM+gC,kBAAoB,EAAK/gC,MAAM2gC,iBAE9Cx+B,KAAM8M,EACJ,EAAKjP,MAAMmhC,YACP,kBACA,qBAENr/B,UAAW,EAAK9B,MAAMmhC,eAG1B,uBAAGlhC,UAAU,iBACVgP,EAAE,+BAEL,kBAAC,GAAD,CAAiBhP,UAAU,6BACzB,kBAAC,GAAD,CACEkC,KAAM8M,EAAE,wBACR/O,QAAS,kBAAM,EAAKiO,SAAS,CAAEiyB,YAAY,KAC3C3/B,UAAW,EAAKT,MAAM+gC,kBAAoB,EAAK/gC,MAAM2gC,+B,GA7MjDrgC,aCrCvB,SAAewhC,KAAtB,gC,8CAAO,8BAAAp0C,EAAA,6DACDue,EAAS,CACT2O,aAAc,OACdwV,MAAO,cACPtD,OAAO,CACL,cACA,mBACA,cACA,0CACA,6CACA,sBACA,6BAXD,SAcgB5/B,EAAiB2tB,WAA2B5O,GAd5D,YAcCre,EAdD,QAgBMoB,OAhBN,qBAiBG,CAAEylB,QAAS,gCAAiCzlB,OAAQpB,EAAOoB,QAjB9D,gCAmBEpB,EAAOktB,OAnBT,4C,sBCAA,SAAeinB,GAAtB,mC,8CAAO,WAA8B37B,GAA9B,iBAAA1Y,EAAA,6DACCue,EAAQ,CACR2O,aAAc,UACd,aAAcxU,GAHf,SAMoBlZ,EAAiB2tB,WAA8B5O,GANnE,cAMG+1B,EANH,yBAQIA,EAASlnB,MAAM,IARnB,4C,gCLFKwmB,K,YAAAA,E,aAAAA,Q,KMgCZ,IAqKepqB,gBAtBS,SAACzgB,GACvB,MAAO,CACL5L,cAAe4L,EAAM0F,MAAMtR,cAC3Bs2C,YAAa1qC,EAAM0F,MAAM1R,UACzBw3C,WAAYxrC,EAAM0F,MAAMzR,SACxBC,oBAAqB8L,EAAM0F,MAAMxR,oBACjCG,kBAAmB2L,EAAM0F,MAAMrR,kBAC/BO,UAAWoL,EAAM+F,KAAKnR,cAIC,SAAC4Z,GAC1B,MAAO,CACLw7B,WAAY,SAAClyC,EAAe8a,EAAkBrO,GAC5CiK,EAAS9I,GAAM5N,EAAO8a,EAAUrO,KAElC2mC,eAAgB,WACd18B,ExHEJ,uCAAiD,WAAOA,GAAP,SAAAvX,EAAA,sDAC/CuX,EAAS,CAAEjK,K5BhMY,gB4B+LwB,2CAAjD,2DwHGakc,EAnKD,SAAClX,GAUTA,EARF5V,SAF6B,IAG7Bq2C,EAOEzgC,EAPFygC,WACAkB,EAME3hC,EANF2hC,eACAM,EAKEjiC,EALFiiC,WACAd,EAIEnhC,EAJFmhC,YACAx2C,EAGEqV,EAHFrV,oBACAG,EAEEkV,EAFFlV,kBACAD,EACEmV,EADFnV,cAGIq3C,EAde,IAAIC,gBAAgBC,cAAcvd,QAgBjDwd,EAA6BH,EAAMz9B,IAAI,KACvC69B,EAAcJ,EAAMz9B,IAAI,KAfA,EAiBgBhB,mBAE5C,IAnB4B,oBAiBvB8+B,EAjBuB,KAiBNC,EAjBM,OAqBkB/+B,qBArBlB,oBAqBvBs9B,EArBuB,KAqBL0B,EArBK,OAsBMh/B,oBAAkB,GAtBxB,oBAsBvBi/B,EAtBuB,KAsBXC,EAtBW,OAuBUl/B,oBAAkB,GAvB5B,oBAuBvBq9B,EAvBuB,KAuBT8B,EAvBS,OAwBcn/B,mBAC1C,IAzB4B,oBAwBvBm9B,EAxBuB,KAwBPiC,EAxBO,KA4BxBC,EAAQ,uCAAG,gCAAAp1C,EAAA,6DACfk1C,GAAgB,GADD,SAGcb,GAAe,8BAH7B,cAGXgB,EAHW,OAIfJ,EAAqE,SAAvDI,EAAiBlyC,OAAO3B,MAAMyc,OAAO8uB,eAJpC,SAMGqH,KANH,OAMXjP,EANW,OAOXmQ,EAAiBnQ,EAClB5mB,QAAO,SAAC6mB,GAAD,QAASA,EAAEjiC,OAAOoyC,qBACzBn5B,KAAI,SAACgpB,GACJ,MAAO,CACLliC,MAAOkiC,EAAEjiC,OAAOuW,KAChBlY,MAAO4jC,EAAEjiC,OAAOkiC,SAIlBsP,GACFI,EAAoBJ,GAGtBG,EAAmB3P,GACnBgQ,EAAkBG,GAElBJ,GAAgB,GAvBD,4CAAH,qDA0BR/B,EAAe,SAACqC,GACpB,IAAIx+B,EAAMy+B,EAAyBD,EAAWh0C,OAE9C,GAAIwV,GAAOA,GAAOva,OAAOC,SAASg5C,OAShC,OARA1+B,GAAG,mBAAgBw+B,EAAWh0C,OAE1BozC,IACF59B,GAAG,aAAU49B,IAGfG,OAAoB73C,QACpBT,OAAO6sB,KAAKtS,EAAK,SAInB+9B,EAAoBS,EAAWh0C,QAG3Bi0C,EAA2B,SAACx4B,GAChC,IAAM04B,EAAyBd,EAAgBl7B,MAC7C,SAACyrB,GAAD,OAAOA,EAAEjiC,OAAOkiC,MAAQpoB,KAG1B,GAAK04B,EAIL,OAAQA,EAAuBxyC,OAAOoyC,mBACpC,KAAK3B,GAAmBgC,KACtB,MAAOj2C,qCACT,KAAKi0C,GAAmBiC,KACtB,MAAOl2C,qCACT,QACE,SAQN,OAJAyW,qBAAU,WACRg/B,MACC,IAECb,EAEA,kBAAC,IAAD,CACEt0B,GAAI,CACFynB,SAAUkN,GAA4B,OAM1C,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE7B,WAAYA,EACZU,YAAaA,EACbx2C,oBAAqBA,EACrBG,kBAAmBA,EACnBg2C,aAAcA,EACdF,eAAgBA,EAChBG,iBAAkBA,EAClBF,aAAcA,EACdF,iBAAkB+B,KAGtB,kBAAC,GAAD,KACG73C,EACC,kBAAC,GAAD,CAAmB82C,eAAgBA,IAEnC,kBAAC,GAAD,CACElB,WAAYA,EACZU,YAAaA,EACbx2C,oBAAqBA,EACrBG,kBAAmBA,EACnBg2C,aAAcA,EACdF,eAAgBA,EAChBG,iBAAkBA,EAClBF,aAAcA,EACdF,iBAAkB+B,SC3J1Bc,G,oLACM,IAAD,OACP,OACE,kBAAC,IAAD,eACEC,KAAMx0C,KAAK+Q,MAAMyjC,MACbx0C,KAAK+Q,MAFX,CAGEihC,OAAQ,SAACjhC,GACP,OAAO,EAAKA,MAAMtV,SAChB,kBAAC,EAAKsV,MAAM0jC,mBAAuB,EAAK1jC,OAExC,kBAAC,IAAD,CACE2N,GAAI,CACFynB,SAAS,YAAD,OAAcuO,UAAU,EAAK3jC,MAAMyjC,OAE3ChtC,MAAO,CACLkE,MAAO,uC,GAfI2F,aAgCd4W,gBANS,SAACzgB,GACvB,MAAO,CACL/L,SAAU+L,EAAM0F,MAAMzR,YAIXwsB,CAAyBssB,ICnBzBI,I,cAXiB,SAAA5jC,GAC5B,OACI,kBAAC,GAAD,CACIvS,GAAIuS,EAAMvS,GACV2S,KAAMJ,EAAMI,KACZH,UAAWO,KAAW,MAAOR,EAAMC,WACnCE,YAAaH,EAAMG,gBCjBlB0jC,I,OAAb,YACI,aAAe,oBAAD,mDACQ,+BAF1B,4BAA+C99B,KCAlC+9B,GAAb,YACI,aAAe,oBAAD,mDACQ,yBAF1B,4BAAyC/9B,I,+NCwCzC,IA8Neg+B,GA9N+D,SAAC/jC,GAAW,IAC9EiP,EAAMiG,eAANjG,EAD6E,EAGjCxL,mBAA+B,IAHE,oBAG9EugC,EAH8E,KAG1DC,EAH0D,OAI7CxgC,mBAA+B,IAJc,oBAI9EygC,EAJ8E,KAIhEC,EAJgE,OAMnD1gC,wBAA2B7Y,GANwB,oBAM9EsD,EAN8E,KAMnEk2C,EANmE,OAOvD3gC,wBAA2B7Y,GAP4B,oBAO9Ey5C,EAP8E,KAOrEC,EAPqE,OAQnC7gC,mBAA2BzD,EAAMkoB,cARE,oBAQ9Eqc,EAR8E,KAQ3DC,EAR2D,OAUzC/gC,oBAAkB,GAVuB,oBAU9EghC,EAV8E,KAU9DC,EAV8D,OAW7CjhC,oBAAkB,GAX2B,oBAW9EkhC,EAX8E,KAWhEC,EAXgE,KAcrF9gC,qBAAU,WAAM,4CACZ,8BAAApW,EAAA,6DAEQsS,EAAM9R,WACNk2C,EAAalrC,IAAO8G,EAAM9R,UAAW,cAAc23B,UAEnD7lB,EAAMqkC,SACNC,EAAWprC,IAAO8G,EAAMqkC,QAAS,cAAcxe,UANvD,SAQqCxhB,GAAsB,IAAIw/B,IAR/D,cAQUG,EARV,gBAS+B3/B,GAAsB,IAAIy/B,IATzD,OASUI,EATV,OAWID,EACID,EAAmBvyC,KAAKqY,KAAI,SAAC+6B,GACzB,MAAO,CAAEj0C,MAAOi0C,EAAK76B,KAAM9a,MAAO21C,EAAKv1C,QAG/C60C,EACID,EAAazyC,KAAKqY,KAAI,SAACg7B,GACnB,MAAO,CAAEl0C,MAAOk0C,EAAG96B,KAAM9a,MAAO41C,EAAGx1C,QAlB/C,6CADY,sBAuBR0Q,EAAMxF,QAvBG,WAAD,wBAwBRuqC,KAEL,CAAC/kC,EAAMxF,SAEV,IAAMoW,EAAgB,SAACo0B,GACnBhlC,EAAMilC,kBAAiB,SAACC,GAAD,O,2VAAA,IAChBA,EADgB,CAEnBjsC,SAAUC,IAAO8rC,EAAMvzB,OAAOpY,OAAO,cACrCC,OAAQJ,IAAO8rC,EAAMn1B,KAAKxW,OAAO,oBAInC8rC,EAAqB,WACvB,YAAwCv6C,IAAjCoV,EAAMnH,wBAAwE,oBAAhCmH,EAAMnH,wBAGzDusC,EAA6B,SAAClzB,GAChC,IAAIpC,EAAa,GACbu1B,OAAQz6C,EACC,OAATsnB,IACApC,EAAa5W,IAAOgZ,GAAM7Y,OAAO,cACjCgsC,EAAQnzB,GAGZlS,EAAMslC,gBAAgBx1B,GAEtBs0B,EAAaiB,GAEb,IAAME,OACQ36C,IAAVy6C,GACA9gB,GAAYrrB,IAAOmsC,GAAOhsC,OAAO,cAAeH,MAASoI,IAAI,EAAG,QAAQjI,OAAO,eACnFqrC,EAAkBa,GAClBvlC,EAAMwlC,cAAcb,GAAgBY,IAGlCE,EAA2B,SAACvzB,GAC9B,IAAIpC,EAAa,GACbu1B,OAAQz6C,EACC,OAATsnB,IACApC,EAAa5W,IAAOgZ,GAAM7Y,OAAO,cACjCgsC,EAAQnzB,GAGZlS,EAAM0lC,cAAc51B,GAEpBw0B,EAAWe,GAEX,IAAME,OACQ36C,IAAVy6C,GAAuB9gB,GAAYrrB,IAAOmsC,GAAOhsC,OAAO,cAAe2G,EAAM9R,WACjF02C,EAAgBW,GAChBvlC,EAAMwlC,cAAcf,GAAkBc,IAKpCn2B,EAAUlW,MAASC,QAAQ,SAAS0sB,SACpCvW,EAAUpW,MAASoI,IAAI,GAAI,SAASy7B,MAAM,SAASlX,SAEzD,OACI,0BAAM5lB,UAAWD,EAAMC,WACnB,kBAAC,GAAD,CAAakC,KAAM8M,EAAE,qCAErB,kBAAC,GAAD,KACI,yBAAKhP,UAAU,+CACX,kBAAC,GAAD,CACIA,UAAU,uBACVmP,QAASA,EACTE,QAASA,EACTnX,OAAQ6H,EAAM0tB,eACd1d,UAAW,GACXY,cAAeA,EACfC,WAAY,SAACqB,GAAD,OAAgBsyB,EAAqBtyB,IACjDpB,YAAayzB,MAKzB,kBAAC,GAAD,KACI,yBAAKtkC,UAAU,sDACX,kBAAC,GAAD,CACIA,UAAU,uCACVmP,QAASA,EACTE,QAASA,EACTnX,OAAQ6H,EAAM0tB,eACd1d,UAAW,GACXY,cAAeA,EACfC,WAAY,SAACqB,GAAD,OAAgBsyB,EAAqBtyB,IACjDpB,YAAayzB,MAKzB,kBAAC,GAAD,CAAapiC,KAAM8M,EAAE,iCAErB,uBACIhP,UAAWO,KAAW,qBACtBmS,wBAAyB,CAAEC,OAAQ3D,EAAE,2CAGzC,yBAAKhP,UAAU,qBACX,2BAAOmqB,QAAQ,aAAanb,EAAE,sBAC9B,kBAAC,GAAD,KACI,kBAAC,KAAD,CACIqR,SAAUpyB,EACVq7B,UAAU,EACVnb,SAAUg3B,EACV5a,gBAAgB,aAChBvqB,WAAYwkC,GAAkBU,IAAuB,qBAAuB,aAC5E1a,WAAW,aACXhF,WAAa8e,KAGrB,kBAAC,GAAD,KACI,kBAACjf,GAAD,CACIle,KAAK,YACLme,YAAY,aACZnX,SAAUg3B,EACV9kB,SAAUpyB,EACVs3B,SAAUif,GAAkBU,IAC5B1f,WAAa8e,MAIzB,yBAAKtkC,UAAU,qBACX,2BAAOmqB,QAAQ,WAAWnb,EAAE,oBAC5B,kBAAC,GAAD,KACI,kBAAC,KAAD,CACIqR,SAAU+jB,EACV9a,UAAU,EACVnb,SAAUq3B,EACVjb,gBAAgB,aAChBvqB,WAAY0kC,GAAgBQ,IAAuB,qBAAuB,aAC1E1a,WAAW,aACXhF,WAAav3B,GAAaq2C,KAIlC,kBAAC,GAAD,KACI,kBAACjf,GAAD,CACIle,KAAK,UACLme,YAAY,aACZnX,SAAUq3B,EACVnlB,SAAU+jB,EACV7e,SAAUmf,GAAgBQ,IAC1B1f,WAAav3B,GAAaq2C,MAKtC,yBAAKtkC,UAAU,qBACX,2BAAOmqB,QAAQ,eAAenb,EAAE,0CAChC,kBAAC,GAAD,CACI+X,QAASkd,EACTjd,gBAAgB,GAChBM,mBAAoBvnB,EAAM2lC,kBAC1Bze,eACIgd,GAAgBA,EAAa78B,MAAK,SAACwa,GAAD,OAAOA,EAAE3yB,QAAU8Q,EAAM4lC,oBAIvE,yBAAK3lC,UAAU,qBACX,2BAAOmqB,QAAQ,iBAAiBnb,EAAE,wCAClC,kBAAC,GAAD,CACI+X,QAASgd,EACT/c,gBAAgB,GAChBM,mBAAoBvnB,EAAM6lC,wBAC1B3e,eACI8c,GACAA,EAAmB38B,MAAK,SAACwa,GAAD,OAAOA,EAAE3yB,QAAU8Q,EAAM8lC,0BAK7D,uBAAG7lC,UAAWD,EAAMnH,uBAAyB,qBAAuB,iBAC/DssC,IACKl2B,EAAE,yCACFjP,EAAMnH,uBACFoW,EAAE,sCACF,M,qBCvOX82B,I,OAhBmB,SAAA/lC,GAM9B,OACI,yBAAKC,UAAWD,EAAM6jB,QAAU,OAAS,gBACrC,6BAAM7jB,EAAMuC,UACZ,yBAAKtC,UAAU,cAAcC,QAPhB,WACjBF,EAAMgmC,SAAShmC,EAAMimC,SAOb,kBAAC,KAAD,CAAiB7lC,KAAMo0B,WCmExB0R,GAlE2E,SAAClmC,GAAW,IAC1FiP,EAAMiG,eAANjG,EAEFk3B,EAAc,SAACC,GACjB,MrFqDU,gDACDliB,KAF0B94B,EqFpDDg7C,IrFsDJxhB,GAAqBx5B,GAFpD,IAAoCA,GqFjDjCi7C,EAAoB,SAACJ,GACpBA,EAAMv0C,OAASsO,EAAMsmC,cAAc50C,QAClCsO,EAAMumC,2BAA0B,GAEpCvmC,EAAMwmC,iBAAiBP,GAEnBA,EAAMv0C,OAAS,EACfu0C,EAAM3rB,SAAQ,SAAC8rB,GACND,EAAYC,KAES,GADApmC,EAAMymC,qBAAqBpT,QAAQ+S,IAErDpmC,EAAM0mC,wBAAN,uBAAkC1mC,EAAMymC,sBAAyB,CAACL,QAK9EpmC,EAAM0mC,wBAAwB,KAYtC,OACI,0BAAMzmC,UAAWD,EAAMC,WACnB,kBAAC,GAAD,CAAakC,KAAM8M,EAAE,8CACrB,uBACIhP,UAAWO,KAAW,qBACtBmS,wBAAyB,CAAEC,OAAQ3D,EAAE,wDAEzC,kBAAC,KAAD,CACI/f,MAAO8Q,EAAMsmC,cACb/gB,YAAY,8CACZnX,SAAUi4B,EACVM,eAAgB,CAAC,GAAI,GACrBC,wBApBc,SAACC,GACpBA,EACC7mC,EAAMumC,2BAA0B,GAEhCvmC,EAAMumC,2BAA0B,IAiB5BO,WAAY,SAAC53C,GAAD,OACR,kBAAC,GAAD,CACI+2C,MAAOjmC,EAAMsmC,cACbziB,SAAuD,GAA9C7jB,EAAMymC,qBAAqBpT,QAAQnkC,GAC5C82C,SAAUK,GAETn3C,MAIb,uBAAG+Q,UAAWD,EAAM+mC,uBAAyB,mBAAoB,eAAjE,wCACA,uBAAG9mC,UAAWD,EAAMgnC,uBAAyB,qBAAuB,iBAC/D/3B,EAAE,8CC1BJi3B,GA1C2E,SAAClmC,GAAW,IAC1FiP,EAAMiG,eAANjG,EAER,OACI,0BAAMhP,UAAWD,EAAMC,WACnB,kBAAC,GAAD,CAAakC,KAAM8M,EAAE,8CACrB,uBACIhP,UAAWO,KAAW,qBACtBmS,wBAAyB,CAAEC,OAAQ3D,EAAE,8CAEzC,yBAAKhP,UAAU,0BACX,2BAAOmqB,QAAQ,6BACVnb,EAAE,yCAEP,2BACI7H,KAAK,4BACLpM,KAAK,OACLiF,UAAU,aACV6qB,UAAW,GACX57B,MAAO8Q,EAAMinC,uBACb74B,SAAU,SAACoB,GAAD,OAAMxP,EAAMknC,6BAA6B13B,EAAEsG,OAAO5mB,MAAMi4C,gBAClE5hB,YAAatW,EAAE,sDAGvB,yBAAKhP,UAAU,0BACX,2BAAOmqB,QAAQ,6BACVnb,EAAE,yCAEP,2BACI7H,KAAK,4BACLpM,KAAK,OACLiF,UAAU,aACV6qB,UAAW,GACX57B,MAAO8Q,EAAMonC,uBACbh5B,SAAU,SAACoB,GAAD,OAAMxP,EAAMqnC,6BAA6B73B,EAAEsG,OAAO5mB,MAAMi4C,gBAClE5hB,YAAatW,EAAE,wDCjDdq4B,G,+lBAAAA,GACHC,YAAsB,EADnBD,GAEHE,kBAA4B,EAFzBF,GAGHG,kBAA4B,EC8B9C,IAoUeC,GApUyC,SAAC1nC,GAAW,IACxDiP,EAAMiG,eAANjG,EADuD,EAGbxL,mBAAqB,CACnE7T,UAAW,GACX+3C,QAAS,GACTC,oBAAqB,GACrBC,cAAe,GACfC,aAAc,GACdC,uBAAwB,GACxBC,uBAAwB,GACxBzuC,UAAWyG,EAAMid,YAX0C,oBAGxDgrB,EAHwD,KAGrCC,EAHqC,OAcLzkC,oBAAkB,GAdb,oBAcxD0kC,EAdwD,KAcjCC,EAdiC,OAeG3kC,oBAAkB,GAfrB,oBAexD4kC,EAfwD,KAe7BC,EAf6B,OAgBnB7kC,mBAA0B,IAhBP,oBAgBxDiqB,EAhBwD,KAgBxC6a,EAhBwC,OAiB3B9kC,oBAAkB,GAjBS,oBAiBxD+kC,EAjBwD,KAiB5ChD,EAjB4C,OAkBf/hC,mBAAiB6jC,GAAsBC,aAlBxB,oBAkBxDkB,EAlBwD,KAkBtCC,EAlBsC,OAmBrBjlC,mBAAmB,IAnBE,oBAmBxD6iC,EAnBwD,KAmBzCE,EAnByC,OAoBP/iC,mBAAmB,IApBZ,oBAoBxDgjC,EApBwD,KAoBlCC,EApBkC,OAqBHjjC,oBAAkB,GArBf,oBAqBxDsjC,EArBwD,KAqBhCR,EArBgC,OAsBH9iC,oBAAkB,GAtBf,oBAsBxDujC,EAtBwD,KAsBhC2B,EAtBgC,OAuBrBllC,mBAA2B,CACjEzG,QAASgD,EAAMhJ,QACfiC,SAAUC,MAASC,QAAQ,SAASA,QAAQ,QAAQE,OAAO,cAC3DC,OAAQJ,MAAS6jC,MAAM,SAASA,MAAM,QAAQ1jC,OAAO,gBA1BM,oBAuBxDuvC,EAvBwD,KAuBzC3D,EAvByC,KA6B/DnhC,qBAAU,WACF9D,EAAMxF,QACN0tC,EAAqB,CACjBt4C,UAAW,GACX+3C,QAAS,GACTC,oBAAqB,GACrBC,cAAe,GACfC,aAAc,GACdC,uBAAwB,GACxBC,uBAAwB,GACxBzuC,UAAWyG,EAAMid,cAG1B,CAACjd,EAAMxF,SAEVsJ,qBAAU,WACN6kC,EAA0BlC,EAAqB/0C,OAAS,KACzD,CAAC+0C,IAEJ3iC,qBAAU,WACN,IAAM+kC,EAAwBpC,EAAqBx6B,QAAO,SAAC68B,GACvD,OAAOxC,EAAcjT,QAAQyV,IAAQ,KAGzCpC,EAAwBmC,KACzB,CAACvC,IAEJxiC,qBAAU,WAAM,4CACZ,8BAAApW,EAAA,sEAC2ByX,GAA2B,IAAIy2B,GAA4BgN,IADtF,OACU5L,EADV,OAGUC,EAAoCD,EAASvrC,KAAKqY,KAAI,SAACkQ,GACzD,MAAO,CACHpI,QAAQ,EACRH,MAAOuI,EAAQ/gB,SACf4W,IAAKmK,EAAQ1gB,OACbgZ,WAAY0H,EAAQkjB,eAAiB,EAAI,EACzCj9B,UAAW+Z,EAAQkjB,eAAiB,cAAgB,sBAI5DqL,EAAkBtL,GAbtB,4CADY,sBAiBRj9B,EAAMxF,QAjBG,WAAD,wBAkBRsiC,KAEL,CAAC8L,EAAe5oC,EAAMxF,SAEzB,IAAMuuC,EAAa,uCAAG,sBAAAr7C,EAAA,2DACV+6C,EADU,cAETnB,GAAsBG,kBAFb,SASTH,GAAsBE,kBATb,wBAGNS,EAAkBF,wBAA0BE,EAAkBF,uBAC9DiB,IAEAZ,GAAyB,GANnB,kCAUN9B,EAAc50C,OAAS,EAClBsO,EAAMipC,eAGPP,EAAoBD,EAAmB,GAFvCO,IAKJV,GAA6B,GAjBvB,kCAqBVI,EAAoBD,EAAmB,GArB7B,+DAAH,qDAyBbO,EAAa,WACff,EAAkBH,aAAexB,EACjCtmC,EAAMgpC,WAAWf,GACjBzB,EAAiB,IACjBE,EAAwB,IACxBgC,EAAoBpB,GAAsBC,cAqBxC2B,EAAwB,SAACp5B,GAC3Bo4B,GAAqB,SAACvO,GAClB,OAAO,MAAKA,EAAZ,CAAkB/pC,UAAWkgB,OAEjC9P,EAAMmpC,kCAA6Bv+C,IAGjCw+C,GAAsB,SAACt5B,GACzBo4B,GAAqB,SAACvO,GAClB,OAAO,MAAKA,EAAZ,CAAkBgO,QAAS73B,OAE/B9P,EAAMmpC,kCAA6Bv+C,IAGjCy+C,GAA4B,SAACniB,GAC/BghB,GAAqB,SAACvO,GAClB,OAAO,MAAKA,EAAZ,CAAkBiO,oBAAqB1gB,EAAeh4B,YAIxDo6C,GAA0B,SAACpiB,GAC7BghB,GAAqB,SAACvO,GAClB,OAAO,MAAKA,EAAZ,CAAkBkO,cAAe3gB,EAAeh4B,YAIlDq6C,GAAqC,SAAC/tB,GACxC0sB,GAAqB,SAACvO,GAClB,OAAO,MAAKA,EAAZ,CAAkBoO,uBAAwBvsB,QAI5CguB,GAAqC,SAAChuB,GACxC0sB,GAAqB,SAACvO,GAClB,OAAO,MAAKA,EAAZ,CAAkBqO,uBAAwBxsB,QAI5CiuB,GAAmB,WACjBhB,IAAqBnB,GAAsBC,aAC3Cf,EAAiB,IACjBE,EAAwB,IACxB1mC,EAAM0pC,oBAAmB,IAEzBhB,EAAoBD,EAAmB,IAIzCkB,GAAc,WAChB,OAAQlB,GACJ,KAAKnB,GAAsBC,YACvB,OACIU,EAAkBr4C,UAAU8B,OAAS,GACrCu2C,EAAkBN,QAAQj2C,OAAS,GACnCu2C,EAAkBJ,cAAcn2C,OAAS,GACzCu2C,EAAkBL,oBAAoBl2C,OAAS,GAC/C82C,EAER,KAAKlB,GAAsBE,kBACvB,OAAsC,GAA/Bf,EAAqB/0C,SAAgBq1C,EAChD,KAAKO,GAAsBG,kBACvB,OAAO,EACX,QACI,OAAO,IAInB,OACI,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAOjtC,OAAQwF,EAAMxF,OAAQyF,UAAWO,KAAW,oBAAqBR,EAAMC,YACzEwoC,GAAoBnB,GAAsBC,aACvC,kBAAC,GAAD,CACIvwC,QAASgJ,EAAMhJ,QACfwD,OAAQwF,EAAMxF,OACdtM,UAAW+5C,EAAkBr4C,UAC7B01C,gBAAiB4D,EACjB7E,QAAS4D,EAAkBN,QAC3BjC,cAAe0D,GACftD,oBAAqBmC,EAAkBL,oBACvC/B,wBAAyBwD,GACzBzD,cAAeqC,EAAkBJ,cACjClC,kBAAmB2D,GACnBzwC,uBAAwBmH,EAAMnH,uBAC9B2vC,WAAYA,EACZhD,cAAeA,EACfP,iBAAkBA,EAClBvX,eAAgBA,EAChBxF,aAAcloB,EAAMkoB,eAG3BugB,GAAoBnB,GAAsBE,mBACvC,kBAAC,GAAD,CACIlB,cAAeA,EACfE,iBAAkBA,EAClBC,qBAAsBA,EACtBC,wBAAyBA,EACzBM,uBAAwBA,EACxBT,0BAA2BA,EAC3BQ,uBAAwBA,IAG/B0B,GAAoBnB,GAAsBG,mBACvC,kBAACmC,GAAD,CACI3C,uBAAwBgB,EAAkBF,uBAC1Cb,6BAA8BqC,GAC9BnC,uBAAwBa,EAAkBD,uBAC1CX,6BAA8BmC,KAGtC,kBAAC,GAAD,CAAaxmC,kBAAmBymC,IAC5B,kBAAC,GAAD,CACItnC,KAAM8M,EAAE,mBACRhP,UAAU,wBACVQ,UAAWkpC,KACXzpC,QAAS6oC,OAMzB,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAOvuC,OAAQwF,EAAMxF,OAAQyF,UAAWO,KAAW,2BAA4BR,EAAMC,YAChFwoC,GAAoBnB,GAAsBC,aACvC,kBAAC,GAAD,CACItnC,UAAU,gCACVjJ,QAASgJ,EAAMhJ,QACfwD,OAAQwF,EAAMxF,OACdtM,UAAW+5C,EAAkBr4C,UAC7B01C,gBAAiB4D,EACjB7E,QAAS4D,EAAkBN,QAC3BjC,cAAe0D,GACftD,oBAAqBmC,EAAkBL,oBACvC/B,wBAAyBwD,GACzBzD,cAAeqC,EAAkBJ,cACjClC,kBAAmB2D,GACnBzwC,uBAAwBmH,EAAMnH,uBAC9B2vC,WAAYA,EACZhD,cAAeA,EACfP,iBAAkBA,EAClBvX,eAAgBA,EAChBxF,aAAcloB,EAAMkoB,eAG3BugB,GAAoBnB,GAAsBE,mBACvC,kBAAC,GAAD,CACIvnC,UAAU,gCACVqmC,cAAeA,EACfE,iBAAkBA,EAClBC,qBAAsBA,EACtBC,wBAAyBA,EACzBM,uBAAwBA,EACxBT,0BAA2BA,EAC3BQ,uBAAwBA,IAG/B0B,GAAoBnB,GAAsBG,mBACvC,kBAACmC,GAAD,CACI3pC,UAAU,gCACVgnC,uBAAwBgB,EAAkBF,uBAC1Cb,6BAA8BqC,GAC9BnC,uBAAwBa,EAAkBD,uBAC1CX,6BAA8BmC,KAGtC,kBAAC,GAAD,CAAaxmC,kBAAmBymC,IAC5B,kBAAC,GAAD,CACItnC,KAAM8M,EAAE,mBACRhP,UAAU,gBACVQ,UAAWkpC,KACXzpC,QAAS6oC,OAKzB,kBAAC,GAAD,CACIvuC,OAAQ2tC,EACR16B,MAAOwB,EAAE,qDACTwF,QAASxF,EAAE,uDACX+F,kBAAmB/F,EAAE,mBACrB8F,iBAAkB9F,EAAE,kBACpB6F,QAvMiB,SAACymB,GAC1B6M,GAAyB,GACrB7M,GACAyN,OAsMA,kBAAC,GAAD,CACIxuC,OAAQ6tC,EACR56B,MAAOwB,EAAE,yDACTwF,QAASxF,EAAE,2DACX+F,kBAAmB/F,EAAE,eACrB8F,iBAAkB9F,EAAE,cACpB6F,QAxMqB,SAACymB,GAC9B+M,GAA6B,GACzB/M,IACKv7B,EAAMipC,eAGPP,EAAoBD,EAAmB,GAFvCO,UClFDa,GA7CuD,SAAC7pC,GAAW,IACtEiP,EAAMiG,eAANjG,EAEFw6B,EAAmB,WACrBzpC,EAAM8pC,8BAAyBl/C,IAI/Bm/C,EAAkB,KAClBC,EAAkB,KAOtB,OALGhqC,EAAMiqC,wBAELD,GADAD,EAAmB/pC,EAAMiqC,sBAAsBx4B,MAAQvY,IAAO8G,EAAMiqC,sBAAsBx4B,OAAS,OAC7DzR,EAAMiqC,sBAAsBp6B,IAAM3W,IAAO8G,EAAMiqC,sBAAsBp6B,KAAKwU,KAAKrkB,EAAMiqC,sBAAsBx4B,MAAO,QAAU,MAIlK,oCACKzR,EAAMiqC,uBAA0B,kBAAC,GAAD,CAAOzvC,OAAQwF,EAAMxF,OAAQqZ,eAAgB41B,EAAkBxpC,UAAWO,KAAW,4BAA6BR,EAAMC,YACjJ,yBAAMA,UAAU,8BACZ,yBAAKA,UAAU,uBACf,kBAAC,KAAD,CAAiBG,KAAM8pC,KAAS7pC,KAAM,QAEtC,4BACK0pC,EAAmBA,EAAiB1wC,OAAO,eAAiB,IAC5D2wC,GAAmBA,EAAkB,EAArC,eAAgDA,EAAhD,YAA4E,UAGvCp/C,GAA5CoV,EAAMiqC,sBAAsBE,mBAA0Ev/C,GAA7CoV,EAAMiqC,sBAAsBG,cACvF,oCACI,8BAAOn7B,EAAE,6CACT,oCAAiDrkB,GAA5CoV,EAAMiqC,sBAAsBE,aAA5B,cAA2DnqC,EAAMiqC,sBAAsBE,aAAcnrB,QAAQ,IAAO,KAGzH,uBAAG/e,UAAU,4BAA4BgP,EAAE,uCAE1C,2BAAIA,EAAE,gDACX,yBAAKhP,UAAU,kCAAkCC,QAASupC,GACtD,kBAAC,KAAD,CAAiBrpC,KAAMo0B,KAASn0B,KAAM,WC1BxDgqC,G,oLAC4B,IAAD,OACjBp7B,EAAMhgB,KAAK+Q,MAAXiP,EAER,OACI,oCACI,yBAAKhP,UAAU,qBACThR,KAAK+Q,MAAMlH,cACT,oCACI,wBAAImH,UAAU,uBAAuBgP,EAAE,qBACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,wBAGhD,kBAAC,GAAD,CACI1C,SAAU,CACNC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,KAGb,kBAAC,GAAD,CACI7M,KAAMkqC,KACNnqC,YAAa,kBAAM,EAAKH,MAAMuqC,oBAAmB,IACjDtqC,UAAU,gBAEd,kBAAC,GAAD,CACIA,UAAU,cACVmP,QAASngB,KAAK+Q,MAAMoP,QACpBE,QAASrgB,KAAK+Q,MAAMsP,QACpBnX,OAAQlJ,KAAK+Q,MAAM7H,OACnB6X,UAAW/gB,KAAK+Q,MAAMgQ,UACtBY,cAAe3hB,KAAK+Q,MAAM4Q,cAC1BC,WAAY5hB,KAAK+Q,MAAM6Q,WACvBa,aAAcziB,KAAK+Q,MAAM8pC,yBACzBn4B,gBAAiB1iB,KAAK+Q,MAAM2R,kBAEhC,uBAAG1R,UAAU,aAAagP,EAAE,0BAEhC,kBAAC,GAAD,CACI9B,mBAAmB,qCACnBZ,SAAU,CACNC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,IAGb,kBAAC,GAAD,CAAkBsf,YAAY,EAAOv1B,QAAS/H,KAAK+Q,MAAMhJ,QAAUimB,UAAWhuB,KAAK+Q,MAAMid,aAE7F,kBAAC,GAAD,CACI1Q,SAAU,CACNC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,GAEbgO,SAAU,EACV5B,aAAa,EACbmD,iBAAkB,CAAEpD,aAAc,kBAAC,GAAD,CAAsB6B,SAAU,QAI1E,kBAAC,GAAD,CACIzgB,OAAQvL,KAAK+Q,MAAMtH,sBACnBgxC,mBAAoBz6C,KAAK+Q,MAAMuqC,mBAC/BvB,WAAY/5C,KAAK+Q,MAAMgpC,WACvBwB,0BAA2Bv7C,KAAK+Q,MAAMwqC,0BACtCxzC,QAAS/H,KAAK+Q,MAAMhJ,QACpB6B,uBAAwB5J,KAAK+Q,MAAMnH,uBACnCswC,6BAA8Bl6C,KAAK+Q,MAAMmpC,6BACzCF,eAAgBh6C,KAAK+Q,MAAMipC,eAC3B/gB,aAAcj5B,KAAK+Q,MAAMyqC,aACzBxtB,UAAWhuB,KAAK+Q,MAAMid,YAG1B,kBAAC,GAAD,CACIziB,OAAQvL,KAAK+Q,MAAMpH,6BACnByb,WAAY,WACR,EAAKrU,MAAMuqC,oBAAmB,GAC9B,EAAKvqC,MAAMwqC,2BAA0B,IAEzCj2B,cAAetF,EAAE,qDACjBxB,MAAOwB,EAAE,6CACTwF,QAASxF,EAAE,+CACXyF,WAAYzF,EAAE,gBAElB,kBAAC,GAAD,CACCzU,SAAUvL,KAAK+Q,MAAMiqC,sBACrBH,yBAA0B76C,KAAK+Q,MAAM8pC,yBACrCG,sBAAuBh7C,KAAK+Q,MAAMiqC,6B,GA1FtB3pC,aAkGd6f,kBAAkBkqB,ICClBK,G,oLArGmB,IAAD,OACzB,OACI,kBAAC,KAAD,MACK,SAACz7B,GACE,OACI,oCACI,yBAAKhP,UAAU,4CACX,wBAAIA,UAAU,uBAAuBgP,EAAE,qBACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,uBACxC,kBAAC,GAAD,CACI7O,KAAMkqC,KACNnqC,YAAa,kBAAM,EAAKH,MAAM0pC,oBAAmB,IACjDzpC,UAAU,gBAEd,kBAAC,GAAD,CACIsM,SAAU,CACNC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGb,kBAAC,GAAD,CACIhN,UAAU,8BACVmP,QAAS,EAAKpP,MAAMoP,QACpBE,QAAS,EAAKtP,MAAMsP,QACpBnX,OAAQ,EAAK6H,MAAM7H,OACnB6X,UAAW,EAAKhQ,MAAMgQ,UACtBa,WAAY,EAAK7Q,MAAM6Q,WACvBD,cAAe,EAAK5Q,MAAM4Q,cAC1Bc,aAAc,EAAK1R,MAAM8pC,yBACzBn4B,gBAAiB,EAAK3R,MAAM2R,kBAEhC,uBAAG1R,UAAU,aAAagP,EAAE,0BAEhC,kBAAC,GAAD,CACI9B,mBAAmB,qCACnBZ,SAAU,CACNC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGb,kBAAC,GAAD,CAAkBsf,YAAY,EAAMtP,UAAW,EAAKjd,MAAMid,UAAWjmB,QAAS,EAAKgJ,MAAMhJ,WAE7F,kBAAC,GAAD,CACIuV,SAAU,CACNC,YAAa,EACbG,WAAY,GACZG,SAAU,GACVG,QAAS,GAEbgO,SAAU,EACV5B,aAAa,EACbmD,iBAAkB,CACdpD,aACI,kBAAC,GAAD,CAAsBnZ,UAAU,uBAAuBgb,SAAU,QAMjF,kBAAC,GAAD,CACIzgB,OAAQ,EAAKwF,MAAMtH,sBACnBgxC,mBAAoB,EAAK1pC,MAAM0pC,mBAC/BV,WAAY,EAAKhpC,MAAMgpC,WACvBwB,0BAA2B,EAAKxqC,MAAMwqC,0BACtCxzC,QAAS,EAAKgJ,MAAMhJ,QACpB6B,uBAAwB,EAAKmH,MAAMnH,uBACnCswC,6BAA8B,EAAKnpC,MAAMmpC,6BACzCF,eAAgB,EAAKjpC,MAAMipC,eAC3BhsB,UAAW,EAAKjd,MAAMid,UACtBiL,aAAc,EAAKloB,MAAMyqC,eAG7B,kBAAC,GAAD,CACIxqC,UAAU,uBACVzF,OAAQ,EAAKwF,MAAMpH,6BACnByb,WAAY,WACR,EAAKrU,MAAMwqC,2BAA0B,GACrC,EAAKxqC,MAAM0pC,oBAAmB,IAElCn1B,cAAetF,EAAE,qDACjBxB,MAAOwB,EAAE,6CACTwF,QAASxF,EAAE,+CACXyF,WAAYzF,EAAE,gBAElB,kBAAC,GAAD,CACIzU,SAAU,EAAKwF,MAAMiqC,sBACrBH,yBAA0B,EAAK9pC,MAAM8pC,yBACrCG,sBAAuB,EAAKjqC,MAAMiqC,gC,GA5F/B3pC,aCrCdqqC,G,+lBAAAA,GACHC,YAAsB,cADnBD,GAEHE,aAAuB,eAFpBF,GAGHG,IAAc,MAHXH,GAIHI,UAAoB,YAJjBJ,GAKHK,gBAA0B,kBALvBL,GAMHM,iBAA2B,mB,IC6CvCC,G,6MACKz0C,MAAyB,CAC5B2Y,QAASlW,MAASE,SAAS,EAAG,UAAUysB,SACxCvW,QAASpW,MAASoI,IAAI,GAAI,UAAUukB,SACpC4kB,kBAAc7/C,EACduN,OAAQ,GACR9F,cAAe,GACf84C,mBAAevgD,EACfwgD,wBAAoBxgD,EACpBolB,UAAW,CACP,CACIviB,GAAI,EACJggB,MAAO,gCACPxN,UAAW,mBAEf,CACIxS,GAAI,EACJggB,MAAO,gCACPxN,UAAW,cACXiR,WAAW,EACXC,aAAa,GAEjB,CACI1jB,GAAI,EACJggB,MAAO,uCACPxN,UAAW,sBACXiR,WAAW,EACXC,aAAa,IAGrBlF,OAAQ,CACJjP,QAAS,EAAKgD,MAAMhJ,QACpBiC,SAAUC,MAASC,QAAQ,SAASA,QAAQ,QAAQE,OAAO,cAC3DC,OAAQJ,MAAS6jC,MAAM,SAASA,MAAM,QAAQ1jC,OAAO,gB,EAiB7DgyC,yB,sBAA2B,4BAAA39C,EAAA,sEACMitB,GAAY,EAAK3a,MAAM0K,aAAaC,UAD1C,OACjB6W,EADiB,OAEvB,EAAKrT,SAAS,CAAEi9B,mBAAoB5pB,IAFb,2C,EAK3Bsb,e,sBAAiB,8BAAApvC,EAAA,+EAEcyX,GAA2B,IAAIy2B,GAA4B,EAAKnlC,MAAMwV,SAFpF,OAEH+wB,EAFG,OAIHC,EAAoCD,EAASvrC,KAAKqY,KAAI,SAACkQ,GACzD,MAAO,CACHpI,QAAQ,EACRH,MAAOuI,EAAQ/gB,SACf4W,IAAK3W,IAAO8gB,EAAQ1gB,QAAQyjC,MAAM,OAAO1jC,SACzCiZ,WAAY0H,EAAQkjB,eAAkBljB,EAAQmjB,iBAAmB,EAAI,EAAK,EAC1EiN,cAAepwB,EAAQsxB,cACvBnB,aAAcnwB,EAAQuxB,aACtBC,iBAAkBxxB,EAAQkjB,eAC1Bj9B,UAAW+Z,EAAQkjB,eACbljB,EAAQmjB,iBACJ,sBACA,cACJ,sBAGd,EAAKhvB,SAAS,CAAEhW,OAAQ8kC,IApBf,yG,EAwBjBnM,iB,sBAAmB,sBAAApjC,EAAA,sDACf2W,GACI,IAAIgqB,GACA,EAAKruB,MAAM0K,aAAaC,SACxB,EAAK3K,MAAMhJ,QAAQsP,WACnB,EAAKtG,MAAMid,YAEjB3U,MAAK,SAACxD,GACJ,EAAKqJ,SAAS,CAAE9b,cAAeyS,EAASrT,UAR7B,2C,EAYnBw3C,eAAiB,WACb,OAAO,EAAKxyC,MAAMpE,cAAcyX,KAAI,SAACgpB,GAAD,OAAOA,EAAE/1B,qBAAmBgb,SAAS4yB,GAAuBG,M,EAGpGl6B,cAAgB,SAACo0B,GACb,EAAK72B,SACD,CACIlC,OAAO,MACA,EAAKxV,MAAMwV,OADZ,CAEFhT,SAAUC,IAAO8rC,EAAMvzB,OAAOpY,OAAO,cACrCC,OAAQJ,IAAO8rC,EAAMn1B,KAAKxW,OAAO,iBAGzC,EAAKyjC,iB,EAIb2O,mBAAqB,SAACv5B,GAClB,EAAK/D,SAAS,CAAEs8B,aAAcv4B,K,EAGlC43B,yBAA2B,SAACh7B,GACrBA,IAAU,EAAKrY,MAAM20C,qBAAuB,EAAK30C,MAAM20C,mBAAmBv6C,OAAO66C,mCAAqC58B,EAAM08B,kBAG/H,EAAKr9B,SAAS,CAAEg9B,cAAer8B,K,oFA9E/B7f,KAAKo8C,2BACLp8C,KAAK6tC,iBACL7tC,KAAK6hC,mBACL7hC,KAAK+Q,MAAMiF,SAAS,CAAEjK,K/J3EK,0B,yC+J8EZghB,GACXA,EAAUtjB,wBAA0BzJ,KAAK+Q,MAAMtH,uBAC/CzJ,KAAK6tC,mB,+BA0ET,OACI,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIhkC,aAAc7J,KAAK+Q,MAAMlH,aACzBsW,QAASngB,KAAKwH,MAAM2Y,QACpBE,QAASrgB,KAAKwH,MAAM6Y,QACpBnX,OAAQlJ,KAAKwH,MAAM0B,OACnB6X,UAAW/gB,KAAKwH,MAAMuZ,UACtBoQ,eAAgBnxB,KAAK+Q,MAAMogB,eAC3BmqB,mBAAoBt7C,KAAK+Q,MAAM0pC,mBAC/BhxC,sBAAuBzJ,KAAK+Q,MAAMtH,sBAClCswC,WAAY/5C,KAAK+Q,MAAMgpC,WACvBwB,0BAA2Bv7C,KAAK+Q,MAAMwqC,0BACtC5xC,6BAA8B3J,KAAK+Q,MAAMpH,6BACzCgY,cAAe3hB,KAAK2hB,cACpB5Z,QAAS/H,KAAK+Q,MAAMhJ,QACpB6B,uBAAwB5J,KAAK+Q,MAAMnH,uBACnCswC,6BAA8Bl6C,KAAK+Q,MAAMmpC,6BACzCF,eAAgBh6C,KAAKg6C,iBACrBp4B,WAAY5hB,KAAKw8C,mBACjBhB,aAAcx7C,KAAKwH,MAAMg0C,aACzBxtB,UAAWhuB,KAAK+Q,MAAMid,UACtBgtB,sBAAuBh7C,KAAKwH,MAAM00C,cAClCrB,yBAA0B76C,KAAK66C,yBAC/Bn4B,mBAAoB1iB,KAAKwH,MAAM20C,qBAAsBn8C,KAAKwH,MAAM20C,mBAAmBv6C,OAAO66C,qCAGlG,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI5yC,aAAc7J,KAAK+Q,MAAMlH,aACzBsW,QAASngB,KAAKwH,MAAM2Y,QACpBE,QAASrgB,KAAKwH,MAAM6Y,QACpBnX,OAAQlJ,KAAKwH,MAAM0B,OACnB6X,UAAW/gB,KAAKwH,MAAMuZ,UACtB05B,mBAAoBz6C,KAAK+Q,MAAM0pC,mBAC/BhxC,sBAAuBzJ,KAAK+Q,MAAMtH,sBAClCswC,WAAY/5C,KAAK+Q,MAAMgpC,WACvBwB,0BAA2Bv7C,KAAK+Q,MAAMwqC,0BACtC5xC,6BAA8B3J,KAAK+Q,MAAMpH,6BACzCgY,cAAe3hB,KAAK2hB,cACpB5Z,QAAS/H,KAAK+Q,MAAMhJ,QACpB6B,uBAAwB5J,KAAK+Q,MAAMnH,uBACnCswC,6BAA8Bl6C,KAAK+Q,MAAMmpC,6BACzCF,eAAgBh6C,KAAKg6C,iBACrBp4B,WAAY5hB,KAAKw8C,mBACjBhB,aAAcx7C,KAAKwH,MAAMg0C,aACzBxtB,UAAWhuB,KAAK+Q,MAAMid,UACtBgtB,sBAAuBh7C,KAAKwH,MAAM00C,cAClCrB,yBAA0B76C,KAAK66C,yBAC/Bn4B,mBAAoB1iB,KAAKwH,MAAM20C,qBAAsBn8C,KAAKwH,MAAM20C,mBAAmBv6C,OAAO66C,0C,GA1KzFprC,aAyMV4W,gBAvBS,SAACzgB,GAAD,MAAsB,CAC1C2pB,eAAgB3pB,EAAMkH,SAASpF,uBAC/BO,aAAcrC,EAAMmH,YAAY9E,aAChCJ,sBAAuBjC,EAAMkH,SAASjF,sBACtCE,6BAA8BnC,EAAMkH,SAAS/E,6BAC7C5B,QAASP,EAAM+F,KAAKhR,MAAMwR,QAC1BigB,UAAWxmB,EAAM+F,KAAKhR,MAAM+N,UAC5BV,uBAAwBpC,EAAMkH,SAAS9E,uBACvC6R,aAAcjU,EAAM+F,KAAK/Q,SAGF,SAACwZ,GACxB,MAAO,CACHykC,mBAAoB,SAAClvC,GAAD,OAAqByK,EAAS,CAAEjK,K9JrOf,gC8JqOoDqB,QAAS7B,KAClGgwC,0BAA2B,SAAChwC,GAAD,OACvByK,EAAS,CAAEjK,K9JnO6B,wC8JmOeqB,QAAS7B,KACpEwuC,WAAY,SAAChvB,GAAD,OAAyB/U,ElH9JzC,SAAC+U,GAAD,8CACA,WAAO/U,EAAUoD,GAAjB,eAAA3a,EAAA,uDACUlC,EAAQ6c,IAAW7L,KAAKhR,SAG1ByZ,EAAS,CAAEjK,K5C9EY,sB4C8EeqB,SAAS,IAC/C8I,GAAS,IAAI4U,GAAsBvuB,EAAMwR,QAAhC,MAA8Cgd,EAA9C,CAAuDzgB,UAAW/N,EAAM+N,cAC5E+O,MAAK,WACFrD,EAAS,CAAEjK,K5ChFI,sB4CgFuBqB,SAAS,OAElDuI,OAAM,SAACjK,GACJsK,EAAS,CAAEjK,K5ClFI,sB4CkFuBqB,QAAS1B,EAAMmK,SAASrT,WAV9E,2CADA,wDkH8JkDu3C,CAAWhvB,KACzDmvB,6BAA8B,SAAC10B,GAC3BxP,EAAS,CAAEjK,K9JrOsB,gC8JqOeqB,QAASoY,QAKtDyC,CAA6Cg0B,I,qCC5PvCS,G,+lBAAAA,GACHC,OAAiB,SADdD,GAEHE,MAAgB,Q,IC+C5BC,G,0LAEF,OACE78C,KAAK+Q,MAAM+rC,iBACT98C,KAAK+Q,MAAMgsC,gBACX/8C,KAAK+Q,MAAMgsC,iBAAmBL,GAAoBC,OAIpD38C,KAAK+Q,MAAMisC,sBACXh9C,KAAK+Q,MAAMgsC,gBACX/8C,KAAK+Q,MAAMgsC,iBAAmBL,GAAoBE,MAE3C,yBAAK5rC,UAAU,UAAUhR,KAAK+Q,MAAMisC,sBAEpC,8BARA,yBAAKhsC,UAAU,UAAUhR,KAAK+Q,MAAM+rC,mB,0CAa7C,OACE98C,KAAK+Q,MAAMisC,sBACTh9C,KAAK+Q,MAAMgsC,gBACX/8C,KAAK+Q,MAAMgsC,iBAAmBL,GAAoBC,OAMpD38C,KAAK+Q,MAAM+rC,iBACX98C,KAAK+Q,MAAMgsC,gBACX/8C,KAAK+Q,MAAMgsC,iBAAmBL,GAAoBE,MAE3C,yBAAK5rC,UAAU,eAAehR,KAAK+Q,MAAM+rC,iBAEzC,8BATL,yBAAK9rC,UAAU,eAAehR,KAAK+Q,MAAMisC,wB,qCAazBC,GAChBj9C,KAAK+Q,MAAMmsC,YACbl9C,KAAK+Q,MAAMmsC,WAAWD,K,+BAII,IAAD,OACrB1yB,EAAcvqB,KAAK+Q,MAAMiM,OAAOla,KAChCq6C,EAAan9C,KAAKo9C,gBAExB,OACE,yBAAKpsC,UAAU,SACb,kBAAC,GAAD,KACGhR,KAAK+Q,MAAMyN,OACV,yBAAKxN,UAAU,UACb,yBAAKA,UAAU,iBACb,yBAAKA,UAAU,SAAShR,KAAK+Q,MAAMyN,OAClCxe,KAAKq9C,gBAEPr9C,KAAKs9C,qBAGV,yBAAKtsC,UAAU,gBACZhR,KAAK+Q,MAAMwsC,QACTvgC,QAAO,SAAC4nB,GAAD,OAAQA,EAAE4Y,eAAgB5Y,EAAE4Y,cAAc,EAAKzsC,MAAMiM,WAC5DnC,KAAI,SAAC4iC,EAAQ9yB,GACZ,OACE,yBACExT,IAAK,UAAYwT,EACjB3Z,UAAWO,KACT,gBACAksC,EAAOC,iBAETlrC,MAAO,CACLmrC,KAAMF,EAAOG,WAAa,IAAM,MAChCC,UAAWJ,EAAOK,gBACdL,EAAOK,gBACP,WAENt/C,GAAIi/C,EAAOz4C,UAAY,OAEtB,EAAK+L,MAAMiP,EAAEy9B,EAAOx4C,kBAK9BjF,KAAK+Q,OACN/Q,KAAK+Q,MAAMgtC,cACX/9C,KAAK+Q,MAAMgtC,aAAap7C,KAAKF,OAC3B,kBAAC,KAAD,CACEu7C,UAAW,EACXC,SAAUj+C,KAAKk+C,eAAe58B,KAAKthB,MACnCm+C,QAAS5zB,IAAgB4yB,EACzBiB,OACE,yBAAKptC,UAAU,SAASmG,IAAK,GAC1BnX,KAAK+Q,MAAMiP,EAAE,qBAIjBhgB,KAAK+Q,MAAMgtC,aAAap7C,KAAKkY,KAAI,SAACwjC,EAAK1zB,GAAN,OAChC,EAAK2zB,WAAW,EAAKvtC,MAAMiP,EAAGq+B,EAAK1zB,OAIvC,yBAAK3Z,UAAU,sBACZhR,KAAK+Q,MAAMwtC,mBAIlB,kBAAC,GAAD,KACGv+C,KAAK+Q,MAAMyN,OACV,yBAAKxN,UAAU,gBAAgBhR,KAAK+Q,MAAMyN,OAE3Cxe,KAAK+Q,MAAM+rC,gBACV,yBAAK9rC,UAAU,wBACZhR,KAAK+Q,MAAM+rC,iBAGd,8BAED98C,KAAK+Q,MAAMisC,qBACV,yBAAKhsC,UAAU,eAAehR,KAAK+Q,MAAMisC,sBAEzC,8BAEDh9C,KAAK+Q,OACN/Q,KAAK+Q,MAAMgtC,cACX/9C,KAAK+Q,MAAMgtC,aAAap7C,KAAKF,OAC3B,kBAAC,KAAD,CACEu7C,UAAW,EACXC,SAAUj+C,KAAKk+C,eAAe58B,KAAKthB,MACnCm+C,QAAS5zB,IAAgB4yB,EACzBiB,OACE,yBAAKptC,UAAU,SAASmG,IAAK,GAC1BnX,KAAK+Q,MAAMiP,EAAE,qBAIjBhgB,KAAK+Q,MAAMgtC,aAAap7C,KAAKkY,KAAI,SAACwjC,EAAK1zB,GAAN,OAChC,EAAK2zB,WAAW,EAAKvtC,MAAMiP,EAAGq+B,EAAK1zB,OAIvC,yBAAK3Z,UAAU,sBACZhR,KAAK+Q,MAAMwtC,sB,iCAStBv+B,EACAq+B,EACA1zB,GACc,IAAD,OACb,OACE,kBAAC,IAAM6zB,SAAP,CAAgBrnC,IAAG,cAASwT,IAC1B,kBAAC,GAAD,KACE,yBACE3Z,UAAWO,KAAW,MAAO,CAAEuR,UAAW9iB,KAAK+Q,MAAMmsC,aACrDjsC,QAAS,kBAAM,EAAKwtC,eAAeJ,KAElCr+C,KAAK+Q,MAAMwsC,QACTvgC,QAAO,SAAC4nB,GAAD,OAAQA,EAAE4Y,eAAgB5Y,EAAE4Y,cAAc,EAAKzsC,MAAMiM,WAC5DnC,KAAI,SAAC4iC,EAAQ/yB,GACZ,OACE,yBACEvT,IAAK,QAAUuT,EACf1Z,UAAWO,KACT,OACA,CAAEmtC,KAAMjB,EAAOiB,MACfjB,EAAOkB,eAETnsC,MAAO,CAAEmrC,KAAMF,EAAOG,WAAa,IAAM,OACzCp/C,GAAIi/C,EAAOz4C,UAAY,OAED,aAArBy4C,EAAOz4C,WAA6B,kBAAC,GAAD,CACnCkM,YAAa,eAEM,YAApBusC,EAAOz4C,WAA2By4C,EAAOmB,mBACtCp/B,IAAM4P,cAAcquB,EAAOmB,mBAAoB,CAC7C3B,SAAUoB,EACVntC,YAAausC,EAAOoB,sBACpB7+B,IACAhD,OAAQ,EAAKjM,MAAMiM,OACnB8hC,gBAAiB,EAAK/tC,MAAM+tC,kBAE9BrB,EAAOsB,eACP/+B,EAAEq+B,EAAIZ,EAAOz4C,YACbq5C,EAAIZ,EAAOz4C,iBAM3B,kBAAC,GAAD,KACE,yBACEgM,UAAWO,KAAW,aAAc,MAAO,CACzCuR,UAAW9iB,KAAK+Q,MAAMmsC,aAExBjsC,QAAS,kBAAM,EAAKwtC,eAAeJ,KAElCr+C,KAAK+Q,MAAMwsC,QACTvgC,QAAO,SAAC4nB,GAAD,OAAQA,EAAE4Y,eAAgB5Y,EAAE4Y,cAAc,EAAKzsC,MAAMiM,WAC5DnC,KAAI,SAAC4iC,EAAQ/yB,GACZ,OACE,yBACEvT,IAAK,QAAUuT,EACf1Z,UAAWO,KACT,cACA,OACA,CAAEmtC,KAAMjB,EAAOiB,MACfjB,EAAOkB,eAETnsC,MAAO,CAAEmrC,KAAMF,EAAOG,WAAa,IAAM,QAExCH,EAAOmB,mBACJp/B,IAAM4P,cAAcquB,EAAOmB,mBAAoB,CAC7C3B,SAAUoB,EACVntC,YAAausC,EAAOoB,sBACpB7+B,IACAhD,OAAQ,EAAKjM,MAAMiM,SAErBygC,EAAOsB,eACP/+B,EAAEq+B,EAAIZ,EAAOz4C,YACbq5C,EAAIZ,EAAOz4C,oB,yCAW/B,GAAIhF,KAAK+Q,MAAMiM,OAAOla,KAAO,EAAG,CAC9B,IAAMka,EAAM,MAAQhd,KAAK+Q,MAAMiM,QAE/BA,EAAOla,OAEP9C,KAAK+Q,MAAMiuC,eAAehiC,M,qCAK5B,IAAMmgC,EAAan9C,KAAKo9C,gBAExB,GAAIp9C,KAAK+Q,MAAMiM,OAAOla,KAAOq6C,EAAY,CACvC,IAAMngC,EAAM,MAAQhd,KAAK+Q,MAAMiM,QAE/BA,EAAOla,OACPka,EAAOja,SAAW/C,KAAK+Q,MAAMib,SAE7BhsB,KAAK+Q,MAAMiuC,eAAehiC,M,uCAK5B,GAAKhd,KAAK+Q,OAAU/Q,KAAK+Q,MAAMgtC,eAAgB/9C,KAAK+Q,MAAM8B,UAA1D,CAIA,IAAMsqC,EAAan9C,KAAKo9C,gBAExB,GAAIp9C,KAAK+Q,MAAMiM,OAAOla,KAAOq6C,EAAY,CACvC,IAAMngC,EAAM,MAAQhd,KAAK+Q,MAAMiM,QAE/BA,EAAOla,KAAO,EACVka,EAAOja,SAAW/C,KAAK+Q,MAAMib,SAC/BhP,EAAOja,SAAW/C,KAAK+Q,MAAMib,SAE7BhP,EAAOja,UAAY/C,KAAK+Q,MAAMib,SAGhChsB,KAAK+Q,MAAMiuC,eAAehiC,O,sCAK5B,OAAOoQ,KAAKhN,IACV,EACAgN,KAAKC,KAAKrtB,KAAK+Q,MAAMgtC,aAAan7C,MAAQ5C,KAAK+Q,MAAMiM,OAAOja,e,GA3R9CsO,aAgSL6f,kBAAkB2rB,ICrU3BoC,I,2LAC4B,IAAD,OACjBj/B,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACI,yBAAKhP,UAAU,sCACVhR,KAAK+Q,MAAMmuC,QAAQrkC,KAAI,SAACmC,EAAQ2N,GAAT,OACpB,kBAAC,GAAD,CACIxT,IAAKwT,EACL5e,KAAK,SACLmH,KAAM8M,EAAEhD,EAAOmiC,oBACfnuC,UAAWO,KAAW,CAClBuN,OAAQ,EAAK/N,MAAMmZ,gBAAkB,EAAKnZ,MAAMmZ,eAAe7pB,KAAO2c,EAAO3c,KAEjF4Q,QAAS,EAAKF,MAAMquC,iBAAiB99B,KAAK,EAAMtE,GAChD7L,KAAM6L,EAAO/K,KACbkB,cAAe6J,EAAOqiC,sBAAwB,IAAMriC,EAAOsiC,4B,GAfxDjuC,cAuBZ6f,kBAAkB+tB,ICxBlBM,I,OAJ+C,SAAAxuC,GAC1D,OAAO,wBAAIC,UAAU,yBAAyBD,EAAMyuC,cCkDzCC,I,OAxC+C,SAAA1uC,GAC1D,OACI,kBAAC,KAAD,MACK,SAACiP,GACE,OACI,oCACI,yBAAKhP,UAAU,0BACTD,EAAM2uC,SACJ,yBAAK1uC,UAAU,mCACX,kBAAC,GAAD,CACIkC,KAAM8M,EAAE,+BACRxO,SAAUT,EAAM4uC,mBAChB1uC,QAASF,EAAM6uC,mBAK3B,yBAAK5uC,UAAU,8BACX,kBAAC,GAAD,CACIA,UAAU,cACVG,KAAM6C,KACN9C,YAAaH,EAAMgD,oBAEvB,kBAAC,GAAD,CACIhI,KAAK,SACLmH,KAAMnC,EAAM8uC,kBACZruC,SAAUT,EAAM+uC,gBAAkB/uC,EAAM8B,UACxCA,UAAW9B,EAAM8B,aAIxB9B,EAAMgvC,YAAc,2BAAIhvC,EAAMgvC,mB,qCCqN5CC,GAjPmC,SAAAjvC,GAAU,IAAD,EACjCyD,qBADiC,oBAClDyrC,EADkD,KAC5CC,EAD4C,OAEf1rC,qBAFe,oBAElD2rC,EAFkD,KAEnCC,EAFmC,OAG7B5rC,mBAA6B,GAAK,IAHL,oBAGlD6rC,EAHkD,KAInDC,GAJmD,KAI1CC,iBAAyB,OAClCC,EAAeD,iBAAuB,MALa,EAM/B/rC,mBAAS,GANsB,oBAMlDisC,EANkD,aAO7BjsC,mBAAS,IAPoB,oBAOlDksC,EAPkD,KAO1CC,EAP0C,KAQnDC,EAAmBL,iBAA0B,MARM,EAS7B/rC,qBAT6B,oBASlDqsC,EATkD,KAS1CC,EAT0C,OAUnBtsC,qBAVmB,oBAUlDusC,EAVkD,KAUrCC,EAVqC,OAWrBxsC,oBAAkB,GAXG,oBAWlDysC,EAXkD,KAWtCC,EAXsC,OAYvB1sC,oBAAkB,GAZK,oBAYlD2sC,EAZkD,KAYvCC,EAZuC,KAcnDC,EAAkBd,iBAAyB,MAI3Ce,EAAe,SAACzhC,GAAD,OAAgBwhC,GAAmBA,EAAgBE,SAAWF,EAAgBE,QAAQhyB,SAkBrGiyB,EAAU,uCAAG,WAAO3hC,GAAP,eAAAphB,EAAA,sDACjB6hD,EAAOiB,SAAWX,EAAiBW,SAAWpB,GAAiBK,EAAae,SACvEE,EAAanB,EAAOiB,QAASX,EAAiBW,QAASpB,EAAeK,EAAae,SAEpFR,GAAeH,EAAiBW,UAC9BG,EAAed,EAAiBW,QAAQI,YAC5CC,EAAgBF,IAND,2CAAH,sDAUVE,EAAkB,SAACF,GACvB,IAEIG,EAAM1yB,SAASC,cAAc,OACjCyyB,EAAIC,OAAS,SAACjiC,GACZ,IAAIkiC,EAAS5yB,SAASC,cAAc,UACpC2yB,EAAO/uC,MALQ,IAMf+uC,EAAOjvC,OALS,IAMhB,IAAIkvC,EAAMD,EAAOE,WAAW,MAC5BD,GAAOA,EAAIE,UAAUL,EAAK,EAAG,EARd,IACC,KAQhBd,GAAegB,EAAOI,QAAO,SAAUvzB,GACrC,IAAIlI,EAAO,IAAI1gB,KAAK,CAAC4oB,GAAOmyB,EAAa,CAAEh1C,KAAM6iB,EAAK7iB,OAClD2a,EAAKtV,KAAsC,IAA/BL,EAAM1N,uBACpB0N,EAAMqxC,cAGNrxC,EAAMsxC,YAAY37B,OAKxBm7B,EAAIr7B,IAAMk7B,GAwBNY,EAAmB,SAACC,EAAoBC,EAAqBC,EAAiBpC,GAClF,IAAIqC,EAAcC,sBAAWC,0BAAe,CAAEC,KAAM,KAAM7vC,MAAqB,KAAdwvC,GAAuBnC,EAAQkC,EAAYC,GAAcD,EAAYC,GAEtI,OADAE,EAAYh4B,GAAK+3B,EACVC,GAGHjB,EAAe,SAACqB,EAAgCC,EAAkC9C,EAAiB+C,GACvG,IAAMC,EAAa71B,KAAK81B,GAAK,IACzBT,GAAWO,EAAIG,YAAcL,EAAa9vC,OAAS,EAEjDowC,EAAUL,EAAcd,WAAW,MAEnCoB,EAASP,EAAaQ,aAAeR,EAAa9vC,MAClDuwC,EAAST,EAAaU,cAAgBV,EAAahwC,OAEnD2wC,EAAavoD,OAAOwoD,iBAE1BX,EAAc/vC,MAAQoa,KAAKu2B,MAAM1D,EAAKjtC,MAAQqwC,EAASI,GACvDV,EAAcjwC,OAASsa,KAAKu2B,MAAM1D,EAAKntC,OAASywC,EAASE,GAEzDxD,EAAKv1B,GAAK+3B,EAEV,IAAMmB,EAAQ3D,EAAKv1B,EAAI24B,EACjBQ,EAAQ5D,EAAK6D,EAAIP,EAEjBQ,EAAarD,EAASuC,EACtBe,EAAUlB,EAAaQ,aAAe,EACtCW,EAAUnB,EAAaU,cAAgB,EAE9B,MAAXJ,QAA8BznD,GAAXynD,IAEvBA,EAAQ3C,MAAMgD,EAAYA,GAC1BL,EAAQc,sBAAwB,OAEhCd,EAAQe,OACRf,EAAQgB,WAAWR,GAAQC,GAC3BT,EAAQgB,UAAUJ,EAASC,GAC3Bb,EAAQ1C,OAAOqD,GACfX,EAAQ3C,MAAMA,EAAOA,GACrB2C,EAAQgB,WAAWJ,GAAUC,GAC7Bb,EAAQlB,UAAUY,EAAc,EAAG,EAAGA,EAAaQ,aAAcR,EAAaU,cAAe,EAAG,EAC9FV,EAAaQ,aAAcR,EAAaU,eAC1CJ,EAAQiB,YAGY,IAAlBtzC,EAAMuzC,eAA4B3oD,GAAVklD,GAAuBM,IACjDL,EAAU/vC,EAAMuzC,UAChBtD,EAAejwC,EAAMuzC,UACrBlD,GAAa,IAGf,IAAMmD,EAAiB,oCACrB,2BACE/lD,GAAG,cACHuN,KAAK,OACLy4C,OAAO,UACPC,IAAKpD,EACLliC,SA9EgB,SAACU,GACnB,QAA6BlkB,GAAzBkkB,EAAMgH,OAAO69B,MAAM,GAAvB,CACA,GAAI7kC,EAAMgH,OAAO69B,MAAM,GAAGtzC,KAAsC,IAA/BL,EAAM1N,uBAGrC,OAFA0N,EAAMqxC,mBACNd,IAGFR,EAAU9xB,IAAIC,gBAAgBpP,EAAMgH,OAAO69B,MAAM,KACjD1D,EAAenhC,EAAMgH,OAAO69B,MAAM,GAAGvsC,MACrC+oC,GAAc,KAsEZ1uC,MAAO,CAAE08B,QAAS,UAEpB,4BAAQuV,IAAK7D,EAAkBpuC,MAAO,CACpC08B,QAAS,OACTyV,UAAW,UACX3xC,MAAOmtC,GAAiBA,EAAentC,MACvCF,OAAQqtC,GAAiBA,EAAertC,WAIxC9B,EAAY,iBACF,MAAV6vC,QAA4BllD,GAAVklD,GAAiC,IAAVA,IAC3C7vC,GAAa,aAEf,IAAI4zC,EAAW,IACXC,EAAY,IACZvE,GAAUA,EAAOiB,SACK,GAAxBjB,EAAOiB,QAAQvuC,OACU,GAAzBstC,EAAOiB,QAAQzuC,SAIf8xC,GAHatE,EAAOiB,QAAQ+B,aAAehD,EAAOiB,QAAQvuC,MAI1D6xC,GAHavE,EAAOiB,QAAQiC,cAAgBlD,EAAOiB,QAAQzuC,QAK7D,OACE,yBAAK2xC,IAAKjE,EAAcxvC,UAAWA,GAChCuzC,EACD,kBAAC,KAAD,CACEtE,KAAMA,EACNzuC,UAAWyvC,EACXjwC,UAAU,iBACV4zC,SAAUA,EACVC,UAAWA,EACX1lC,SAAU,SAAC4a,EAAG+qB,GAAJ,OAAoB5E,EAAQ4E,IACtCC,WAAY,SAACngB,GAAD,OAAOwb,EAAiBxb,IACpCyb,OAAQA,GACR,yBACE7hD,GAAG,mBACHimD,IAAKnE,EACL95B,IAAKq6B,EACLmE,OA3GY,SAACzkC,GACnB,GAAI8/B,EAAQ,CAAC,IAAD,EACgB9/B,EAAEoW,cAApB3jB,EADE,EACFA,MAAOF,EADL,EACKA,OACT2vC,EAAUjC,EAAae,SAAWjB,EAAOiB,UAAYf,EAAae,QAAQ4B,YAAc7C,EAAOiB,QAAQvuC,OAAS,EACtHyvC,GAAWvC,EAAQoC,EAAiBtvC,EAAOF,EAAQ2vC,EAASpC,MAwGxD7tC,MAAO,CAAEyyC,UAAU,SAAD,OAAWxE,EAAX,oBAA4BC,EAA5B,YAGtB,kBAAC,GAAD,CACEliD,GAAG,oBACHwS,UAAWO,KAAW,gBAAiBtW,QAAQ4lD,GAAU,cAAgB,IACzE1vC,KAAM+zC,KACNh0C,YAAaowC,IAEf,yBAAKtwC,UAAU,eACb,kBAAC,GAAD,CACEA,UAAWO,KAAW,gBAAiB,iBACvCJ,KAAMg0C,KACNj0C,YAxLa,SAAC2O,GAChBwhC,GAAmBA,EAAgBE,SAAWF,EAAgBE,QAAQthD,QACxEohD,EAAgBE,QAAQthD,MAAQ,IAElC6gD,OAAUnlD,GACVoV,EAAMsxC,iBAAY1mD,MAqLd,kBAAC,GAAD,CACEqV,UAAWO,KAAW,gBAAiB0vC,EAAa,GAAK,eACzD9vC,KAAMi0C,KACNl0C,YArLa,SAAC2O,GACpB,IAAIwlC,EAAoB3E,EAAS,GACR,KAArB2E,IACFA,EAAoB,GAEtB1E,EAAU0E,MAkLN,kBAAC,GAAD,CACEr0C,UAAWO,KAAW,gBAAiB0vC,EAAa,GAAK,eACzD9vC,KAAMm0C,KACNp0C,YAAaswC,IAEf,kBAAC,GAAD,CACExwC,UAAWO,KAAW,gBAAiB0vC,EAAa,cAAgB,IACpE9vC,KAAMM,KACNP,YA3MW,SAAC2O,GAAD,OAAgBqhC,GAAc,SCUpChwB,I,OAAAA,gBA7BoD,SAAAngB,GACnDA,EAANiP,EAER,OACE,yBAAKhP,UAAU,+BAEb,yBAAKA,UAAU,mBACZoT,qCAA0BrT,EAAMw0C,iBAAiBzhC,UAGpD,yBAAK9S,UAAU,eACZD,EAAMgD,mBAAqB,kBAAC,GAAD,CAC1B/C,UAAU,cACVG,KAAM6C,KACN9C,YAAaH,EAAMgD,oBAErB,kBAAC,GAAD,CACE/C,UAAU,gBACVjF,KAAK,SACLmH,KAAMnC,EAAM8uC,kBACZruC,SAAUT,EAAM+uC,gBAAkB/uC,EAAM8B,UACxCA,UAAW9B,EAAM8B,UACjB5B,QAASF,EAAMoU,iBCQV+L,I,OAAAA,gBAtCoD,SAAAngB,GAAU,IACnEiP,EAAMjP,EAANiP,EAER,OACE,oCACE,yBAAKhP,UAAU,kBACb,yBAAKA,UAAU,+BACb,4BAAKD,EAAMyuC,YACX,yBAAKxuC,UAAU,cACb,wBAAIwB,MAAO,CAAEgzC,UAAW,QAAUxlC,EAAE,qCAEtC,6BACA,6BACA,6BACA,yBAAKhP,UAAU,mBACZoT,qCAA0BrT,EAAM00C,aAAa3hC,YAMpD,yBAAK9S,UAAU,iBACb,yBAAKA,UAAU,+BACb,4BAAKD,EAAMyuC,YACX,6BACE,wBAAIhtC,MAAO,CAAEgzC,UAAW,MAAO3H,UAAW,WAAa79B,EAAE,qCAE3D,6BACA,yBAAKhP,UAAU,mBACZoT,qCAA0BrT,EAAM00C,aAAa3hC,iBC4E3C4hC,I,OAzFwC,SAAA30C,GAAU,IAAD,EACzByD,qBADyB,oBACvDmxC,EADuD,KACzCC,EADyC,OAEtBpxC,oBAAkB,GAFI,oBAEvDqxC,EAFuD,KAEzCC,EAFyC,OAG1BtxC,oBAAkB,GAHQ,oBAGvDuxC,EAHuD,KAG3CC,EAH2C,OAItBxxC,oBAAkB,GAJI,oBAIvDyxC,EAJuD,KAIzCC,EAJyC,KAMtDlmC,EAAMiG,eAANjG,EAqBJ6lC,IAAiB90C,EAAMzM,qCAAmE3I,GAAjCoV,EAAMo1C,2BACjEL,GAAgB,GAChBE,GAAc,GANdL,GAAgB50C,EAAMq1C,cAAcT,GACpC50C,EAAMgD,mBAAqBhD,EAAMgD,qBAiBnC,OACE,yBAAK/C,UAAU,wBACb,yBAAKA,UAAU,kBACb,kBAAC,GAAD,CACEwuC,WAAYzuC,EAAMs1C,gBAAkBrmC,EAAE,6BAA8B,CAClEsmC,SAAUtmC,EAAEjP,EAAMs1C,gBAAgBlH,oBAClC5vC,cAAe,CAAEC,aAAa,KAC3BuB,EAAMyuC,WAAazuC,EAAMyuC,WAAa,GAC3CiG,aAAc10C,EAAM00C,gBAGxB,yBAAKz0C,UAAU,iBACb,yBAAKwB,MAAO,CAAEgzC,UAAW,SACvB,kBAAC,GAAD,CACEhG,WAAYzuC,EAAMs1C,gBAAkBrmC,EAAE,6BAA8B,CAClEsmC,SAAUtmC,EAAEjP,EAAMs1C,gBAAgBlH,oBAClC5vC,cAAe,CAAEC,aAAa,KAC3BuB,EAAMyuC,WAAazuC,EAAMyuC,WAAa,GAC3CiG,aAAc10C,EAAM00C,iBAI1B,yBAAKjzC,MAAO,CAAE08B,QAAS,QAASqX,eAAgB,WAC7CN,GAAgBl1C,EAAMy1C,iBACrB,yBAAKx1C,UAAU,sCACZoT,qCAA0BrT,EAAM01C,UAAU3iC,UAK9C+hC,GAAgB90C,EAAMzN,yBAA2B,uBAAG0N,UAAU,sBAAsBD,EAAMzN,wBAAwBmZ,SACnH,kBAAC,GAAD,CACE6nC,SAAUvzC,EAAM9Q,MAAQ8Q,EAAM9Q,MAAQ,GACtCoD,uBAAwB0N,EAAM1N,uBAC9B++C,YA1CY,kBAAM8D,GAAgB,IA2ClC7D,YAzCgB,SAACqE,GACvBd,EAAac,GACbV,OAA2BrqD,GAAb+qD,GACdA,GAAaR,GAAgB,MAuCzB,kBAAC,GAAD,CACEpG,oBAAgCnkD,GAAhBgqD,IAA8BI,EAC9ClG,kBAAmB7/B,EAAE,0CACrBmF,SAjEa,WACnB2gC,GAAgB,GAChBH,GAAgB50C,EAAMo1C,yBAA2Bp1C,EAAMo1C,wBAAwBR,IAgEzE9yC,UAAW9B,EAAMhN,qBACjBgQ,kBAAmBhD,EAAMgD,mBAxED,WAC9B6xC,OAAajqD,GACboV,EAAMgD,mBAAqBhD,EAAMgD,qBAuE3BwxC,iBAAkBx0C,EAAMw0C,uBC7G3B,SAASoB,GAAUj3B,GACtB,YAAY/zB,GAAT+zB,EAA6B,GACzBV,IAAIC,gBAAgBS,GAExB,SAAek3B,GAAtB,mC,8CAAO,WAAyBl3B,GAAzB,iBAAAjxB,EAAA,yDACS,IAATixB,EADA,8CACsB/zB,GADtB,uBAEoBkrD,MAAMn3B,GAF1B,cAEG7Z,EAFH,gBAGgBA,EAAS+Y,OAHzB,cAGGA,EAHH,yBAII,IAAI5oB,KAAK,CAAC4oB,GAAOc,EAAO,CAAE3jB,KAAM6iB,EAAK7iB,QAJzC,4C,0BCuOQ+6C,G,YAzMX,WAAY/1C,GAAa,IAAD,8BACpB,8CAAMA,KA6DVg2C,MAAQ,SAAC/mC,EAA4BgnC,GACjC,IAAIC,EAAyB,GAC1B,EAAKz/C,MAAM0/C,cACVD,EAAyB,YAG7B,IAAIE,EAAa,EAAKp2C,MAAMi2C,MAAMI,OAAO,EAAKhE,QAAQxgB,KAAKykB,MACvDr2C,EAAY,iBACE,MAAdm2C,QAAoCxrD,GAAdwrD,GAAyC,IAAdA,IACjDn2C,GAAa,aAGjB,IACMs2C,EAAuB,uCAAG,4BAAA7oD,EAAA,yDACxBwgB,GAAY,EAAKzX,MAAM0/C,YAC3B,EAAKhoC,SAAS,CAAEgoC,YAAajoC,KAC1BA,EAHyB,uBAIxB,EAAKlO,MAAMi2C,MAAMO,OAAO,EAAKnE,QAAQxgB,KAAKykB,KAAM,IAJxB,SAKlB,IAAI3Z,SAAQ,SAAA8Z,GAAO,OAAIC,WAAWD,EAAS,QALzB,OAO5B,EAAKpE,QAAQsE,UAAU,EAAK32C,MAAMi2C,MAAMxoD,IAAM,CAAEo2B,QAAS3V,EAAU0oC,SAAS,GAC5E,EAAKvE,QAAQwE,gBAAgB,EAAKxE,SARN,2CAAH,qDAW7B,OACI,oCACI,yBAAKpyC,UAAWA,GACZ,yBAAKwV,IAAK2gC,IACV,kBAAC,GAAD,CACIn2C,UAAWO,KAAW,gBAAiB01C,GACvC91C,KAAM+zC,KACNh0C,YAnBoB,kBAAO,EAAK1J,MAAM0/C,aAAe,EAAKn2C,MAAM82C,4BAsBxE,yBAAK72C,UAAU,oBACX,2BACIjF,KAAK,WAAWvN,GAAG,cACnB07B,QAAS,EAAK1yB,MAAM0/C,YACpB/nC,SAAUmoC,IACd,2BAAOnsB,QAAQ,eAAf,iBAEJ,kBAAC,GAAD,CAAO5vB,OAAQ,EAAKwF,MAAMnN,yBACtB,kBAAC,GAAD,CACIyiD,gBAAiB,EAAKt1C,MAAMs1C,gBAC5BtiD,qBAAsB,EAAKgN,MAAMhN,qBACjCT,wBAAyB,EAAKyN,MAAMzN,wBACpCgB,+BAAgC,EAAKyM,MAAMzM,+BAC3C8hD,cAAe,EAAK0B,wBAAwBxmC,KAA7B,iBACfvN,kBAAmB,EAAKhD,MAAMg3C,uBAC9B9nD,MAAO,EAAK8Q,MAAMi2C,MAAMI,OAAO,EAAKhE,QAAQxgB,KAAKykB,MACjDhkD,uBAAwB,EAAK0N,MAAM1N,uBACnC8iD,wBAAyB,SAACz/B,GAAD,OAAgB,EAAK3V,MAAMo1C,wBAAwBz/B,IAC5E++B,aAAc,CAAEttC,KAAM,GAAIqG,MAAO,GAAIsF,QAAS,IAC9CyhC,iBAAkB,CAAEptC,KAAM,GAAIqG,MAAO,GAAIsF,QAAS,IAClD2iC,UAAW,CAAEtuC,KAAM,GAAIqG,MAAO,GAAIsF,QAAS,SApHvC,EA0HxB4L,MAAQ,SAAC1P,EAA4BgnC,GAA7B,OACJ,2BACI7uC,KAAM,EAAKpH,MAAMi2C,MAAMxoD,GACvBA,GAAI,EAAKuS,MAAMi2C,MAAMxoD,GACrBwS,WAAY,EAAK4jB,WAAa,EAAK+yB,UAAY,qBAAuB,aACtE57C,KAAM,EAAKgF,MAAMi2C,MAAMj7C,KACvBuuB,UAAQ,EACRuB,UAAW,EAAK9qB,MAAMi2C,MAAMnrB,UAC5BvF,YAAatW,EAAE,EAAKjP,MAAMi2C,MAAMgB,2BAChC7oC,SAAU,EAAK6rB,kBAAkB1pB,KAAvB,iBACVrhB,MAAO,EAAK8Q,MAAMi2C,MAAMI,OAAO,EAAKhE,QAAQxgB,KAAKykB,SApIjC,EAuIxBY,SAAW,SAACjoC,EAA4BgnC,GAA7B,OACP,kBAAC,GAAD,CACIjvB,QAASivB,EAAMjvB,QACfC,gBAAgB,cAChBM,mBAAoB,EAAK4vB,qBAAqB5mC,KAA1B,iBACpB2W,eACI+uB,EAAMjvB,SAAWivB,EAAMjvB,QAAQ/a,QAAO,SAAC4V,GAAD,OAAOA,EAAE3yB,QAAU+mD,EAAMI,OAAO,EAAKhE,QAAQxgB,KAAKykB,SAAO,MA7InF,EAiJxBpkC,KAAO,SAACjD,EAA4BgnC,GAA7B,OACH,oCACI,kBAAC,GAAD,KACI,kBAAC,KAAD,CACI7nC,SAAU,EAAKgpC,uBAAuB7mC,KAA5B,iBACVtQ,WAAY,EAAK4jB,WAAa,EAAK+yB,UAAY,qBAAuB,aACtEnsB,WAAW,aACXD,gBAAiBvb,EAAE,EAAKjP,MAAMi2C,MAAMgB,2BACpC32B,SAAU,EAAK+2B,cAAc,EAAKr3C,MAAMi2C,MAAMI,OAAO,EAAKhE,QAAQxgB,KAAKykB,UAG/E,kBAAC,GAAD,KACI,kBAAChxB,GAAD,CACIle,KAAK,UACLme,YAAY,aACZnX,SAAU,EAAKgpC,uBAAuB7mC,KAA5B,iBACV+P,SAAU,EAAK+2B,cAAc,EAAKr3C,MAAMi2C,MAAMI,OAAO,EAAKhE,QAAQxgB,KAAKykB,OACvE9wB,SAAU,EAAK3B,WAAa,EAAK+yB,eA/J7C,EAAKngD,MAAQ,CAAE0/C,aAAc,GAHT,E,gFAMN3mC,GACd,IAAMtB,EAAWsB,EAAEsG,OAAO5mB,MAC1BD,KAAKoxC,aAAanyB,K,2CAGDA,GACjBjf,KAAKoxC,aAAanyB,EAAShf,S,uFAGDymB,G,gFACtBzH,EAAW0nC,GAAUjgC,GACnBkO,EAAU50B,KAAK+Q,MAAMi2C,MAAMqB,UAAUppC,GAE3Cjf,KAAKojD,QAAQsE,UAAU1nD,KAAK+Q,MAAMi2C,MAAMxoD,IAAM,CAAEo2B,UAAS+yB,SAAS,GAElE3nD,KAAK+Q,MAAMi2C,MAAMO,OAAOvnD,KAAKojD,QAAQxgB,KAAKykB,KAAMpoC,G,SAC1C,IAAIyuB,SAAQ,SAAA8Z,GAAO,OAAIC,WAAWD,EAAS,Q,OACjDxnD,KAAKojD,QAAQwE,gBAAgB5nD,KAAKojD,SAClCpjD,KAAKsoD,cAELtoD,KAAK+Q,MAAMg3C,yB,oJAGQ9oC,GACnBjf,KAAKoxC,aAAannC,IAAOgV,GAAU7U,OAAO,iB,mCAGjC6U,GACT,IAAM2V,EAAU50B,KAAK+Q,MAAMi2C,MAAMqB,UAAUppC,GAE3Cjf,KAAKojD,QAAQsE,UAAU1nD,KAAK+Q,MAAMi2C,MAAMxoD,IAAM,CAAEo2B,UAAS+yB,SAAS,GAElE3nD,KAAK+Q,MAAMi2C,MAAMO,OAAOvnD,KAAKojD,QAAQxgB,KAAKykB,KAAMpoC,GAChDjf,KAAKojD,QAAQwE,gBAAgB5nD,KAAKojD,SAClCpjD,KAAKsoD,gB,gCAIL,OAAOtoD,KAAKuoD,YAAcvoD,KAAKuoD,WAAW3zB,U,gCAI1C,OAAO50B,KAAKuoD,YAAcvoD,KAAKuoD,WAAWZ,U,oCAGhC1nD,GACV,GAAIA,EACA,OAAOgK,IAAOhK,EAAO,cAAc22B,W,+BAkHjC,IAAD,OACL,OACI,kBAAC4xB,GAAYC,SAAb,MACK,SAACrF,GAAD,OACG,kBAAC,KAAD,MACK,SAACpjC,GAEE,OADA,EAAKojC,QAAUA,EAEX,yBACIpyC,UAAU,iBACVwB,MAAO,CACHk2C,UAAW,EAAK33C,MAAMi2C,MAAM0B,UAC5BC,WAAY,EAAK53C,MAAMi2C,MAAM2B,WAC7BC,YAAa,EAAK73C,MAAMi2C,MAAM4B,cAGlC,2BAAOztB,QAAS,EAAKpqB,MAAMi2C,MAAMxoD,IAC5BwhB,EAAE,EAAKjP,MAAMi2C,MAAM6B,sBAEG,aAA1B,EAAK93C,MAAMi2C,MAAMj7C,MAAuB,EAAKk8C,SAASjoC,EAAG,EAAKjP,MAAMi2C,OAC1C,SAA1B,EAAKj2C,MAAMi2C,MAAMj7C,MAAmB,EAAK2jB,MAAM1P,EAAG,EAAKjP,MAAMi2C,OACnC,UAA1B,EAAKj2C,MAAMi2C,MAAMj7C,MAAoB,EAAK2jB,MAAM1P,EAAG,EAAKjP,MAAMi2C,OACpC,SAA1B,EAAKj2C,MAAMi2C,MAAMj7C,MAAmB,EAAKkX,KAAKjD,EAAG,EAAKjP,MAAMi2C,OAClC,UAA1B,EAAKj2C,MAAMi2C,MAAMj7C,MAAoB,EAAKg7C,MAAM/mC,EAAG,EAAKjP,MAAMi2C,gB,iCAnI3F,OAAOhnD,KAAKojD,QAAQsE,UAAU1nD,KAAK+Q,MAAMi2C,MAAMxoD,Q,GA5D5BghB,IAAMnO,WCApBm3C,GAAchpC,IAAMspC,cAAc,IA8DhCC,GA5D+B,SAAAh4C,GAC1C,IADmD,EAWjByD,mBAASzD,EAAMi4C,SAASC,UAAUl2B,QAV3C,SAACp0B,EAAaqoD,GACnC,YAA8BrrD,GAA1BoV,EAAMm4C,kBACoB,MAA1Bn4C,EAAMm4C,kBACoB,GAA1Bn4C,EAAMm4C,kBAA0C,aAAZlC,EAAMxoD,IAG9CG,EAAOqoD,EAAMxoD,IAAM,GACnBG,EAAOqoD,EAAMxoD,IAAIo2B,QAAU7jB,EAAM2uC,QAC1B/gD,GAJIA,IAM8E,KAX1C,oBAW5C+oD,EAX4C,KAWjCyB,EAXiC,KA8BnD,OACI,kBAACX,GAAYY,SAAb,CAAsBnpD,MAAO,CAAE2iC,KAAM7xB,EAAMi4C,SAAUtB,YAAWE,gBAnB5C,SAACxE,GAGrB,IAAK,IAAIiG,KAFTjG,EAAQxgB,KAAKhO,SAAU,EAEHwuB,EAAQsE,UAAW,CAChBtE,EAAQsE,UAAU2B,GAErBz0B,UACZwuB,EAAQxgB,KAAKhO,SAAU,GAG/B7jB,EAAMu4C,aAAalG,EAAQxgB,MAC3BumB,EAAa/F,EAAQsE,cASjB,yBAAK12C,UAAU,gBACVD,EAAMi4C,SAASC,UAAUpuC,KAAI,SAAAmsC,GAAK,OAAiB,aAAZA,EAAMxoD,IAAqBuS,EAAMm4C,mBACrE,kBAAC,GAAD,CACI/xC,IAAK6vC,EAAMxoD,GACXwoD,MAAOA,EACPX,gBAAiBt1C,EAAMs1C,gBACvBtiD,qBAAsBgN,EAAMhN,qBAC5BT,wBAAyByN,EAAMzN,wBAC/BgB,+BAAgCyM,EAAMzM,+BACtCV,wBAAyBmN,EAAMnN,wBAC/BikD,sBAAuB92C,EAAM82C,sBAC7BE,uBAAwBh3C,EAAMg3C,uBAC9B5B,wBAAyB,SAACz/B,GAAD,OAAgB3V,EAAMo1C,wBAAwBz/B,IACvErjB,uBAAwB0N,EAAM1N,4BAGrC0N,EAAMw4C,kBACH,yBAAKv4C,UAAU,mBACX,yBAAKC,QAAS,WAxB1BF,EAAMy4C,eACNz4C,EAAMy4C,cAAcz4C,EAAMi4C,YAwBV,kBAAC,KAAD,CAAiB73C,KAAMo0B,YCYpCkkB,GA/F+C,CAC1D,CACIjrD,GAAI,YACJuN,KAAM,OACN8vB,UAAW,GACXgtB,oBAAqB,uCACrBb,0BAA2B,uCAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKxmD,WACvB0mD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKxmD,UAAYZ,GAC1CyoD,UAAW,OAEf,CACIlqD,GAAI,WACJuN,KAAM,OACN8vB,UAAW,GACXgtB,oBAAqB,sCACrBb,0BAA2B,sCAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKvmD,UACvBymD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKvmD,SAAWb,GACzCyoD,UAAW,OAEf,CACIlqD,GAAI,cACJuN,KAAM,OACN8vB,UAAW,GACXgtB,oBAAqB,yCACrBb,0BAA2B,wCAC3BK,UAAW,SAACpoD,GAAD,OAAW00B,GAAY10B,IAClCmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKtmD,aACvBwmD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKtmD,YAAcd,GAC5CyoD,UAAW,OAEf,CACIlqD,GAAI,eACJuN,KAAM,OACN8vB,UAAW,IACXgtB,oBAAqB,yCACrBb,0BAA2B,yCAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKpmD,aACvBsmD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKpmD,YAAchB,GAC5CyoD,UAAW,OAEf,CACIlqD,GAAI,QACJuN,KAAM,QACN8vB,UAAW,IACXgtB,oBAAqB,mCACrBb,0BAA2B,mCAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKrmD,OACvBumD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKrmD,MAAQf,GACtCyoD,UAAW,OAEf,CACIlqD,GAAI,YACJuN,KAAM,OACN8vB,UAAW,GACXgtB,oBAAqB,oBACrBb,0BAA2B,wCAC3BK,UAAW,SAACpoD,GAAD,O1G3BR00B,GADkB1R,E0G4BchjB,I1G3BXgK,IAAOgZ,EAAM,cAAc,GAAME,cAAclZ,MAAU,OADlF,IAAsBgZ,G0G6BrBmkC,OAAQ,SAACC,GAAD,OAAUA,EAAK1mD,WACvB4mD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAK1mD,UAAYV,GAC1CyoD,UAAW,OAEf,CACIlqD,GAAI,iBACJuN,KAAM,WACN88C,oBAAqB,wCACrBb,0BAA2B,wCAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,KAAW42B,MAAMyE,SAASr7B,KACzDmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKqC,eAAiBrC,EAAKqC,eAAeryC,WAAa,IACzEkwC,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKqC,eAAiBpuB,SAASr7B,IACxDyoD,UAAW,MACX3wB,QAAS,CACL,CAAEp2B,MAAO,WAAY1B,MAAO,KAC5B,CAAE0B,MAAO,WAAY1B,MAAO,KAC5B,CAAE0B,MAAO,WAAY1B,MAAO,KAC5B,CAAE0B,MAAO,YAAa1B,MAAO,QAGrC,CACIzB,GAAI,YACJuN,KAAM,QACN88C,oBAAqB,eACrBb,0BAA2B,eAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUV,GAAUU,EAAKsC,QACjCpC,OAAQ,SAACF,EAAMpnD,GAAP,OAAiB2mD,GAAU3mD,GAAOoZ,MAAK,SAAA0tC,GAAK,OAAIM,EAAKsC,MAAQ5C,MACrE2B,UAAW,QCxDJkB,GApCmC,CAC9C,CACIprD,GAAI,YACJuN,KAAM,OACN8vB,UAAW,GACXgtB,oBAAqB,uCACrBb,0BAA2B,uCAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKxmD,WACvB0mD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKxmD,UAAYZ,GAC1CyoD,UAAW,OAEf,CACIlqD,GAAI,WACJuN,KAAM,OACN8vB,UAAW,GACXgtB,oBAAqB,sCACrBb,0BAA2B,sCAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKvmD,UACvBymD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKvmD,SAAWb,GACzCyoD,UAAW,OAEf,CACIlqD,GAAI,qBACJuN,KAAM,OACN8vB,UAAW,GACXgtB,oBAAqB,gDACrBb,0BAA2B,gDAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKwC,oBACvBtC,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKwC,mBAAqB5pD,GACnDyoD,UAAW,QCuCJoB,GAtEyC,CACpD,CACItrD,GAAI,YACJuN,KAAM,OACN8vB,UAAW,GACXgtB,oBAAqB,uCACrBb,0BAA2B,uCAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKxmD,WACvB0mD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKxmD,UAAYZ,GAC1CyoD,UAAW,OAEf,CACIlqD,GAAI,WACJuN,KAAM,OACN8vB,UAAW,GACXgtB,oBAAqB,sCACrBb,0BAA2B,sCAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKvmD,UACvBymD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKvmD,SAAWb,GACzCyoD,UAAW,OAEf,CACIlqD,GAAI,cACJuN,KAAM,OACN8vB,UAAW,GACXgtB,oBAAqB,yCACrBb,0BAA2B,wCAC3BK,UAAW,SAACpoD,GAAD,OAAW00B,GAAY10B,IAClCmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKtmD,aACvBwmD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKtmD,YAAcd,GAC5CyoD,UAAW,OAEf,CACIlqD,GAAI,QACJuN,KAAM,QACN8vB,UAAW,IACXgtB,oBAAqB,mCACrBb,0BAA2B,mCAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKrmD,OACvBumD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKrmD,MAAQf,GACtCyoD,UAAW,MACXE,YAAa,OAEjB,CACIpqD,GAAI,eACJuN,KAAM,OACN8vB,UAAW,IACXgtB,oBAAqB,yCACrBb,0BAA2B,yCAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUA,EAAKpmD,aACvBsmD,OAAQ,SAACF,EAAMpnD,GAAP,OAAiBonD,EAAKpmD,YAAchB,GAC5CyoD,UAAW,OAEf,CACIlqD,GAAI,YACJuN,KAAM,QACN88C,oBAAqB,eACrBb,0BAA2B,eAC3BK,UAAW,SAACpoD,GAAD,OAAW80B,GAAS90B,IAC/BmnD,OAAQ,SAACC,GAAD,OAAUV,GAAUU,EAAKsC,QACjCpC,OAAQ,SAACF,EAAMpnD,GAAP,OAAiB2mD,GAAU3mD,GAAOoZ,MAAK,SAAA0tC,GAAK,OAAIM,EAAKsC,MAAQ5C,MACrE2B,UAAW,MACXC,WAAY,QC2FLoB,I,OAlImC,SAAAh5C,GAAU,IAChDiP,EAAMiG,eAANjG,EAEFgqC,EAAe,SAACC,GAClB,OAAQA,GACJ,KAAKvO,GAAuBI,UACxB,OAAOoO,EAAgBT,IAC3B,KAAK/N,GAAuBG,IACxB,OAAO+N,GACX,KAAKlO,GAAuBC,YAC5B,KAAKD,GAAuBE,aACxB,OAAOsO,EAAgBJ,IAC3B,QACI,MAAO,KAIbI,EAAkB,SAACjB,GACrB,OAAOA,GAGLkB,EAAgB,WAClB,MAAO,CACHv1B,SAAS,EACTyyB,KAAM,CACFxmD,UAAW,GACXC,SAAU,GACV+M,eAAgB,GAChBE,QAAS,EACTq8C,qBAAsBpqC,EAAEjP,EAAMs1C,gBAAgBlH,qBAElD8J,UAAWe,EAAaj5C,EAAMs1C,gBAAgBv4C,qBA/BC,EAmCrB0G,mBAAS,CAAC21C,MAnCW,oBAmChDE,EAnCgD,KAmCrCC,EAnCqC,OAoCX91C,mBAASzD,EAAMs1C,gBAAgBhH,sBAAwB,GApC5C,oBAoChDkL,EApCgD,KAoChCC,EApCgC,KAsCjDlB,EAAe,SAACmB,GAClBH,GAAa,SAAAI,GAET,OADAA,EAAWA,EAAWtmB,QAAQqmB,IAAa71B,QAAU61B,EAAW71B,QACzD,aAAI81B,OAIbrZ,EAAe,SAAC9wB,GAClBA,EAAET,iBACF/O,EAAM45C,iBACFN,EAAUxvC,KAAI,SAAA+vC,GACV,OAAOA,EAAGvD,UAUhBwD,EAAY,SAACxD,GACf,IAAIyD,EAAQ,aAAOT,GACb79B,EAAQs+B,EAAS1mB,QAAQijB,GAC3B76B,GAAS,IACTs+B,EAASr+B,OAAOD,EAAO,GACvBg+B,EAAkBD,EAAiB,GACnCD,EAAaQ,KAIfzf,EACF,oCACI,kBAAC,GAAD,CACImU,WAAYx/B,EAAE,6BAA8B,CACxCsmC,SAAUtmC,EAAEjP,EAAMs1C,gBAAgBlH,oBAClC5vC,cAAe,CAAEC,aAAa,OAGrC66C,EAAUxvC,KAAI,SAACkwC,EAAav+B,GAAd,OACX,kBAAC,IAAMgyB,SAAP,CAAgBrnC,IAAG,mBAAcqV,IAC7B,kBAAC,GAAD,CACIrV,IAAK,OAASqV,EACdw8B,SAAU+B,EACVvB,cAAeqB,EACftB,iBAAkBc,EAAUjmB,QAAQ2mB,GAAe,EACnDzB,aAAcA,EACd1lD,wBAAyBmN,EAAMnN,wBAC/BikD,sBAAuB92C,EAAM82C,sBAC7BE,uBAAwBh3C,EAAMg3C,uBAC9B1B,gBAAiBt1C,EAAMs1C,gBACvBtiD,qBAAsBgN,EAAMhN,qBAC5BT,wBAAyByN,EAAMzN,wBAC/BgB,+BAAgCyM,EAAMzM,+BACtC6hD,wBAAyB,SAACz/B,GAAD,OAAgB3V,EAAMo1C,wBAAwBz/B,IACvErjB,uBAAwB0N,EAAM1N,uBAC9B6lD,iBAAkBn4C,EAAMm4C,mBAE3B18B,IAAU69B,EAAU5nD,OAAS,EAAI,KAAO,yBAAKuO,UAAU,wCAGhE,kBAAC,GAAD,CACI+C,kBAAmBhD,EAAMgD,kBACzB+rC,eACIuK,EAAU5nD,OAAS,GACnB4nD,EAAUrtC,QAAO,SAAAguC,GACb,OAAQA,EAAGp2B,WACZnyB,OAAS,EAEhBk9C,mBAAoB4K,GAAkBx5C,EAAMs1C,gBAAgB/G,kBAC5DM,gBAtDO,WACf4K,EAAkBD,EAAiB,GACnCD,GAAa,SAAAI,GAAU,6BAAQA,GAAR,CAAoBP,UAqDnCpK,WAAY//B,EAAE,4BACd6/B,kBAAmB7/B,EAAE,8BACrBnN,UAAW9B,EAAM8B,aAK7B,OACI,kBAAC,GAAD,CAAOtH,OAAQwF,EAAMxF,OAAQyF,UAAWO,KAAW,iBAAkBR,EAAMC,YACvE,kBAAC,GAAD,KACI,0BAAMmU,SAAUksB,GAAehG,IAEnC,kBAAC,GAAD,KACI,0BAAMr6B,UAAU,6BAA6BmU,SAAUksB,GAClDhG,OC/Gf4f,G,6MACIC,0BAA4B,SAAClhC,GACnC,IAAIrrB,EAASqrB,EAAaq1B,sBAAwBr1B,EAAas1B,kBAM/D,OAJK3gD,GACH,EAAKoS,MAAMo6C,iBAGNxsD,G,EAGDysD,WAAa,SAACC,GAAD,OAAsBA,EAAO/zC,KAAK,MAAMnF,QAAQ,cAAe,Y,EAE5Em5C,kBAAoB,SAACC,GAC3B,IAAIC,EAAe,EAAKz6C,MAAMrN,iBAC3BsZ,QAAO,SAAAve,GAAC,OAAe,MAAXA,EAAEkrD,YAA4BhuD,GAAX8C,EAAEkrD,SACjC9uC,KAAI,SAAApc,GAAC,OAAIA,EAAEuC,SAEd,OAA2B,GAAvBwqD,EAAa/oD,QAAiB,EAAKsO,MAAMm4C,iBAEtC,4BAA8B,EAAKkC,WAAWI,GAAgB,wCAFID,G,yEAK7C,IAAD,OAC3B,OACE,kBAAC,KAAD,MACG,SAACvrC,GACA,OACE,oCACG,EAAKjP,MAAMxF,QAAU,EAAK2/C,0BAA0B,EAAKn6C,MAAMs1C,kBAC9D,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE96C,QAAQ,EACRwI,kBAAmB,EAAKhD,MAAMgD,kBAC9B42C,iBAAkB,SAAAjoD,GAAM,OACtB,EAAKioD,iBAAiB,EAAK55C,MAAMs1C,gBAAiB3jD,IAEpD2jD,gBAAiB,EAAKt1C,MAAMs1C,gBAC5BxzC,UAAW,EAAK9B,MAAMlN,aACtBR,uBAAwB,EAAK0N,MAAM1N,uBACnCU,qBAAsB,EAAKgN,MAAMhN,qBACjCT,wBAAyB,EAAKyN,MAAMzN,wBACpCgB,+BAAgC,EAAKyM,MAAMzM,+BAC3CV,wBAAyB,EAAKmN,MAAMnN,wBACpCikD,sBAAuB,EAAK92C,MAAM82C,sBAClCE,uBAAwB,EAAKh3C,MAAMg3C,uBACnC5B,wBAAyB,SAACz/B,GAAD,OAAgB,EAAK3V,MAAMo1C,wBAAwBz/B,IAC5EwiC,iBAAkB,EAAKn4C,MAAMm4C,oBAGjC,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEl4C,UAAU,eACVzF,QAAQ,EACRwI,kBAAmB,EAAKhD,MAAMgD,kBAC9B42C,iBAAkB,SAAAjoD,GAAM,OACtB,EAAKioD,iBAAiB,EAAK55C,MAAMs1C,gBAAiB3jD,IAEpDyjD,wBAAyB,SAACz/B,GAAD,OAAgB,EAAK3V,MAAMo1C,wBAAwBz/B,IAC5E2/B,gBAAiB,EAAKt1C,MAAMs1C,gBAC5BxzC,UAAW,EAAK9B,MAAMlN,aACtBR,uBAAwB,EAAK0N,MAAM1N,uBACnCU,qBAAsB,EAAKgN,MAAMhN,qBACjCT,wBAAyB,EAAKyN,MAAMzN,wBACpCgB,+BAAgC,EAAKyM,MAAMzM,+BAC3CV,wBAAyB,EAAKmN,MAAMnN,wBACpCikD,sBAAuB,EAAK92C,MAAM82C,sBAClCE,uBAAwB,EAAKh3C,MAAMg3C,uBACnCmB,iBAAkB,EAAKn4C,MAAMm4C,qBAKpC,EAAKn4C,MAAMxF,SAAW,EAAK2/C,0BAA0B,EAAKn6C,MAAMs1C,kBAC/D,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE96C,OAAQ,EAAKwF,MAAM9M,wBACnB2gB,eAAgB,EAAK7T,MAAM06C,gBAC3BrmC,WAAY,EAAKrU,MAAM06C,gBACvBjtC,MAAOwB,EAAE,kCACTwF,QAASxF,EAAE,gDAAiD,CAC1D0rC,sBAAuB,EAAK36C,MAAMs1C,gBAAgB/G,oBAEpD75B,WAAYzF,EAAE,iBAGlB,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEhP,UAAU,qBACVzF,OAAQ,EAAKwF,MAAM9M,wBACnB2gB,eAAgB,EAAK7T,MAAM06C,gBAC3BrmC,WAAY,EAAKrU,MAAM06C,gBACvBjtC,MAAOwB,EAAE,kCACTwF,QAASxF,EAAE,gDAAiD,CAC1D0rC,sBAAuB,EAAK36C,MAAMs1C,gBAAgB/G,oBAEpD75B,WAAYzF,EAAE,kBAMpB,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEzU,OAAQ,EAAKwF,MAAM/M,6BACnB4gB,eAAgB,EAAK7T,MAAMw7B,kBAC3BnnB,WAAY,EAAKrU,MAAMw7B,kBACvB/tB,MAAOwB,EAAE,oCACTwF,QAAS,EAAK8lC,kBAAkBtrC,EAAE,uCAClCyF,WAAYzF,EAAE,iBAGlB,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEhP,UAAU,uBACVzF,OAAQ,EAAKwF,MAAM/M,6BACnB4gB,eAAgB,EAAK7T,MAAMw7B,kBAC3BnnB,WAAY,EAAKrU,MAAMw7B,kBACvB/tB,MAAOwB,EAAE,oCACTwF,QAAS,EAAK8lC,kBAAkBtrC,EAAE,uCAClCyF,WAAYzF,EAAE,wB,uCAYVqmC,EAAkC3jD,GACxD,OAAQ2jD,EAAgBv4C,mBACtB,KAAK4tC,GAAuBG,IAC1B77C,KAAK+Q,MAAM46C,oBAAqBjpD,GAChC,MACF,KAAKg5C,GAAuBC,YAC5B,KAAKD,GAAuBE,aAC1B57C,KAAK+Q,MAAM66C,uBAAwBlpD,GACnC,MACF,KAAKg5C,GAAuBI,UAC1B97C,KAAK+Q,MAAM86C,0BAA2BnpD,Q,GAjJxB2O,aA2MP4W,gBAlDS,SAACzgB,GACvB,MAAO,CACL+D,OAAQ/D,EAAMoG,OAAOjK,mBACrBM,wBAAyBuD,EAAMoG,OAAO3J,wBACtCD,6BAA8BwD,EAAMoG,OAAO5J,6BAC3CJ,wBAAyB4D,EAAMoG,OAAOhK,wBACtCC,aAAc2D,EAAMoG,OAAO/J,aAC3BE,qBAAsByD,EAAMoG,OAAO7J,qBACnCO,+BAAgCkD,EAAMoG,OAAOtJ,+BAC7ChB,wBAAyBkE,EAAMoG,OAAOtK,wBACtCD,uBAAwBmE,EAAMoG,OAAOvK,uBACrCK,iBAAkB8D,EAAMoG,OAAOlK,qBAIR,SAACsS,GAC1B,MAAO,CACL21C,oBAAqB,SAACjpD,GACpBsT,EjE5FJ,SAACtT,GAAD,8CACE,WAAOsT,EAAUoD,GAAjB,qBAAA3a,EAAA,wDACiC2a,IAAW7L,KAAKhR,MAAvCwR,EADV,EACUA,QAASzD,EADnB,EACmBA,UACXwhD,EAAe1yC,IAAWxL,OAAOzK,qBAEvCT,EAASA,EAAOmY,KAAI,SAACwsC,GACnB,OAAO,MAAKA,EAAZ,CAAkBt5C,UAASzD,YAAWuD,eAAgBi+C,EAAazrD,QAGrE2V,EAAS,CAAEjK,KhH1HmB,uBgH0HqBqB,SAAS,IAC5D8I,GAAsB,IAAIipB,GAAqBpxB,EAASrL,IACrD2W,MAAK,SAACxD,GACLG,EAAS,CAAEjK,KhHpHqB,6BgHoHyBqB,SAAS,IAClE4I,EAAS,CAAEjK,KhH7He,uBgH6HyBqB,QAASyI,EAASrT,OACrEwT,EAAS,CAAEjK,KhHpH6B,qCgHoHyBqB,SAAS,IAC1E4I,EAAS6rB,SAEVlsB,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhHjIe,uBgHiIyBqB,QAAS1B,OAjBlE,2CADF,wDiE4FaqgD,CAAarpD,KAExBkpD,uBAAwB,SAAClpD,GACvBsT,EjExEJ,SAACtT,GAAD,8CACE,WAAOsT,EAAUoD,GAAjB,qBAAA3a,EAAA,wDACiC2a,IAAW7L,KAAKhR,MAAvCwR,EADV,EACUA,QAASzD,EADnB,EACmBA,UACXwhD,EAAe1yC,IAAWxL,OAAOzK,sBAEvCT,EAASA,EAAOmY,KAAI,SAACwsC,GACnB,OAAO,MAAKA,EAAZ,CAAkBt5C,UAASzD,YAAWuD,eAAgBi+C,EAAazrD,SAG9DgrB,SAAQ,SAACg8B,GACd,IAAI2E,EAAM3E,EAAKtmD,YAAYmR,MAAM,KACjCm1C,EAAK4E,OAAS3wB,SAAS0wB,EAAI,IAC3B3E,EAAK6E,SAAW5wB,SAAS0wB,EAAI,IAC7B3E,EAAK8E,QAAU7wB,SAAS0wB,EAAI,IAC5B3E,EAAKtmD,YAAc,MAGrBiV,EAAS,CAAEjK,KhHtJsB,0BgHsJqBqB,SAAS,IAC/D8I,GAAyB,IAAImpB,GAAwBtxB,EAASrL,IAC3D2W,MAAK,SAACxD,GACLG,EAAS,CAAEjK,KhHnJqB,6BgHmJyBqB,SAAS,IAClE4I,EAAS,CAAEjK,KhHzJkB,0BgHyJyBqB,QAASyI,EAASrT,OACxEwT,EAAS,CAAEjK,KhHnJ6B,qCgHmJyBqB,SAAS,IAC1E4I,EAAS6rB,SAEVlsB,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhH7JkB,0BgH6JyBqB,QAAS1B,OAzBrE,2CADF,wDiEwEa0gD,CAAgB1pD,KAE3BmpD,0BAA2B,SAACnpD,GAC1BsT,EjE5CJ,SAACtT,GAAD,8CACE,WAAOsT,EAAUoD,GAAjB,qBAAA3a,EAAA,wDACiC2a,IAAW7L,KAAKhR,MAAvCwR,EADV,EACUA,QAASzD,EADnB,EACmBA,UACXwhD,EAAe1yC,IAAWxL,OAAOzK,sBAEvCT,EAASA,EAAOmY,KAAI,SAACwsC,GACnB,OAAO,MAAKA,EAAZ,CAAkBt5C,UAASzD,YAAWuD,eAAgBi+C,EAAazrD,SAG9DgrB,SAAQ,SAACg8B,GACd,IAAI2E,EAAM3E,EAAKtmD,YAAYmR,MAAM,KACjCm1C,EAAK4E,OAAS3wB,SAAS0wB,EAAI,IAC3B3E,EAAK6E,SAAW5wB,SAAS0wB,EAAI,IAC7B3E,EAAK8E,QAAU7wB,SAAS0wB,EAAI,IAC5B3E,EAAKtmD,YAAc,GACnB,IAAIyhB,EAAQ6kC,EAAK1mD,UAAUuR,MAAM,KACjCm1C,EAAKgF,SAAW/wB,SAAS9Y,EAAM,IAC/B6kC,EAAKiF,WAAahxB,SAAS9Y,EAAM,IACjC6kC,EAAKkF,UAAYjxB,SAAS9Y,EAAM,IAChC6kC,EAAK1mD,UAAY,MAGnBqV,EAAS,CAAEjK,KhHvL0B,8BgHuLqBqB,SAAS,IACnE8I,GAA4B,IAAIwpB,GAA2B3xB,EAASrL,IACjE2W,MAAK,SAACxD,GACLG,EAAS,CAAEjK,KhHvLqB,6BgHuLyBqB,SAAS,IAClE4I,EAAS,CAAEjK,KhH1LsB,8BgH0LyBqB,QAASyI,EAASrT,OAE5EwT,EAAS,CAAEjK,KhHxL6B,qCgHwLyBqB,SAAS,IAC1E4I,EAAS6rB,SAEVlsB,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhH/LsB,8BgH+LyBqB,QAAS1B,OA/BzE,2CADF,wDiE4Ca8gD,CAAmB9pD,KAE9B6pC,kBAAmB,WACjBv2B,EAAS,CAAEjK,KjL3MiC,qCiL2MSqB,SAAS,KAEhEq+C,gBAAiB,WACfz1C,EAAS,CAAEjK,KjL7M4B,gCiL6MSqB,SAAS,IACzD4I,EAAS,CAAEjK,KjLjNyB,6BiLiNSqB,SAAS,KAExD+9C,eAAgB,WACdn1C,EAAS,CAAEjK,KjLjN4B,gCiLiNSqB,SAAS,KAE3Dy6C,sBAAuB,WACrB7xC,EAAS,CAAEjK,KjLtN+B,mCiLsNSqB,SAAS,KAE9D26C,uBAAwB,WACtB/xC,EAAS,CAAEjK,KjLzN+B,mCiLyNSqB,SAAS,IAC5D4I,EAAS,CAAEjK,KjL3MyB,6BiL2MSqB,SAAS,IACtD4I,EAAS,CAAEjK,KjL3MyB,6BiL2MSqB,aAASzR,KAExDwqD,wBAAyB,SAACnkB,GACxBhsB,EAAS+rB,GAAiBC,QAKjB/Z,CAA6CgjC,ICrOvCzpD,I,2LAEb,OACI,oCACI,kBAAC,GAAD,KACI,yBAAKwP,UAAWO,KAAWvR,KAAK+Q,MAAM07C,gCAClC,yBAAKz7C,UAAWO,KAAWvR,KAAK+Q,MAAM27C,6BACjC1sD,KAAK+Q,MAAM47C,mBAEhB,yBAAK37C,UAAWO,KAAWvR,KAAK+Q,MAAM67C,gCACjC5sD,KAAK+Q,MAAM87C,sBAEf7sD,KAAK+Q,MAAM+7C,QACR,yBACI97C,UAAWO,KAAWvR,KAAK+Q,MAAMg8C,sBACjCrpC,wBAAyB,CAAEC,OAAQ3jB,KAAK+Q,MAAMxP,eAGlD,yBAAKyP,UAAWO,KAAWvR,KAAK+Q,MAAMg8C,uBAAwB/sD,KAAK+Q,MAAMxP,eAIrF,kBAAC,GAAD,KACI,yBAAKyP,UAAWO,KAAWvR,KAAK+Q,MAAM07C,gCAClC,yBAAKz7C,UAAWO,KAAWvR,KAAK+Q,MAAM27C,6BACjC1sD,KAAK+Q,MAAM47C,mBAEhB,yBAAK37C,UAAWO,KAAWvR,KAAK+Q,MAAM67C,gCACjC5sD,KAAK+Q,MAAM87C,sBAEf7sD,KAAK+Q,MAAM+7C,QACR,yBACI97C,UAAWO,KAAWvR,KAAK+Q,MAAMg8C,sBACjCrpC,wBAAyB,CAAEC,OAAQ3jB,KAAK+Q,MAAMxP,eAGlD,yBAAKyP,UAAWO,KAAWvR,KAAK+Q,MAAMg8C,uBAAwB/sD,KAAK+Q,MAAMxP,oB,GApC5D8P,cCd5B27C,GAAb,YACI,WAAYjlD,EAAiBklD,GAAoB,IAAD,sBAC5C,IAAIx3C,EAAc,UAAY1N,EAAU,mBADI,OAG5C,8CAAM0N,KAEDY,KAAO42C,EALgC,EADpD,4BAA6C11C,ICuK9B21C,GAvIuC,SAACn8C,GAAW,IACtDiP,EAAMiG,eAANjG,EAEFgqC,EAAe,SAACC,GAClB,OAAQA,GACJ,KAAKvO,GAAuBI,UACxB,OAAOoO,EAAgBT,IAC3B,KAAK/N,GAAuBG,IACxB,OAAO+N,GACX,KAAKlO,GAAuBC,YAC5B,KAAKD,GAAuBE,aACxB,OAAOsO,EAAgBJ,IAC3B,QACI,MAAO,KAIbI,EAAkB,SAACjB,GACrB,OAAGl4C,EAAMm4C,iBAA2BD,EAC7BA,EAAUjsC,QAAO,SAAAve,GAAC,MAAa,cAATA,EAAED,OAnB0B,EAoCjCgW,mBAAoC,CAbrD,CACHogB,SAAS,EACTyyB,KAAM,CACFxmD,UAAW,GACXC,SAAU,GACV+M,eAAgB,GAChBE,QAAS,EACTq8C,qBAAsBpqC,EAAEjP,EAAMs1C,gBAAgBlH,qBAElD8J,UAAWe,EAAaj5C,EAAMs1C,gBAAgBv4C,sBAhCO,oBAoCtDpL,EApCsD,KAoC9CyqD,EApC8C,KAsC7Dt4C,qBAAU,WACF9D,EAAMq8C,eAAiBr8C,EAAMq8C,cAAc3qD,OAAS,GACpDyT,GACI,IAAI82C,GACAj8C,EAAMhJ,QACNgJ,EAAMq8C,cAAcvyC,KAAI,SAAC6P,GAAD,OAAOA,EAAE2iC,YAEvCh0C,MAAK,SAACxD,GACJ,GAAIA,EAASrT,MAAQqT,EAASrT,KAAKC,OAAS,EAAG,CAE3C,IADA,IAAM6qD,EAA4C,GACzC3iC,EAAI,EAAGA,EAAI9U,EAASrT,KAAKC,OAAQkoB,IAAK,CAC3C,IAAM08B,EAAOxxC,EAASrT,KAAKmoB,GAC3B08B,EAAK+C,qBAAuBpqC,EAAEjP,EAAMs1C,gBAAgBlH,oBACpDmO,EAAej5C,KAAK,CAChBgzC,OACA4B,UAAWe,EAAaj5C,EAAMs1C,gBAAgBv4C,mBAC9C8mB,SAAS,IAGjBu4B,EAAUG,SAIvB,CAACv8C,EAAMq8C,cAAer8C,EAAMs1C,gBAAiBrmC,IAEhD,IAAMspC,EAAe,SAACmB,GAClB0C,GAAU,SAACzC,GAEP,OADAA,EAAWA,EAAWtmB,QAAQqmB,IAAa71B,QAAU61B,EAAW71B,QACzD,aAAI81B,OAIbrZ,EAAe,SAAC9wB,GAClBA,EAAET,iBAEF/O,EAAMw8C,mBACF7qD,EAAOmY,KAAI,SAAC+vC,GACR,OAAOA,EAAGvD,UAKhBhc,EACF,oCACI,kBAAC,GAAD,CAAoBmU,WAAYx/B,EAAE,kCAClC,2BAAIA,EAAE,sCACLtd,EAAOmY,KAAI,SAACkwC,EAAav+B,GAAd,OACR,kBAAC,IAAMgyB,SAAP,CAAgBrnC,IAAG,mBAAcqV,IAC7B,kBAAC,GAAD,CACIrV,IAAK,OAASqV,EACdw8B,SAAU+B,EACVxB,kBAAkB,EAClBD,aAAcA,EACd5J,SAAS,EACT37C,qBAAsBgN,EAAMhN,qBAC5BT,wBAAyByN,EAAMzN,wBAC/BgB,+BAAgCyM,EAAMzM,+BACtCV,wBAAyBmN,EAAMnN,wBAC/BikD,sBAAuB92C,EAAM82C,sBAC7BE,uBAAwBh3C,EAAMg3C,uBAC9B5B,wBAAyB,SAACz/B,GAAD,OAAgB3V,EAAMo1C,wBAAwBz/B,IACvE2/B,gBAAiBt1C,EAAMs1C,gBACvBhjD,uBAAwB0N,EAAM1N,yBAEjCmpB,IAAU9pB,EAAOD,OAAS,EAAI,KAAO,yBAAKuO,UAAU,wCAG7D,kBAAC,GAAD,CACI+C,kBAAmBhD,EAAMgD,kBACzB+rC,eACIp9C,EAAOD,OAAS,GAChBC,EAAOsa,QAAO,SAACguC,GACX,OAAQA,EAAGp2B,WACZnyB,OAAS,EAEhBk9C,oBAAoB,EACpBD,SAAS,EACTG,kBAAmB7/B,EAAE,gCACrBnN,UAAW9B,EAAM8B,aAK7B,OACI,kBAAC,GAAD,CAAOtH,OAAQwF,EAAMxF,OAAQyF,UAAWO,KAAW,iBAAkBR,EAAMC,YACvE,kBAAC,GAAD,KACI,0BAAMmU,SAAUksB,GAAehG,IAEnC,kBAAC,GAAD,KACI,0BAAMr6B,UAAU,6BAA6BmU,SAAUksB,GAClDhG,MCpHfmiB,G,6MACKhmD,MAAwB,CAC3BimD,YAAY,G,EAcRC,4BAA8B,SAAC1jC,GACnC,IAAMrrB,EAASqrB,EAAaq1B,sBAAwBr1B,EAAas1B,kBAMjE,OAJK3gD,GACD,EAAKoS,MAAMo6C,iBAGRxsD,G,mFAlBQouB,GACX/sB,KAAK+Q,MAAM5M,iCAAmCnE,KAAKwH,MAAMimD,aACzDztD,KAAKkf,SAAS,CAAEuuC,YAAY,IAC5BztD,KAAK+Q,MAAM48C,mBAGX5gC,EAAU5oB,iCAAmCnE,KAAK+Q,MAAM5M,gCACxDnE,KAAKkf,SAAS,CAAEuuC,YAAY,M,+BAcN,IAAD,OACzB,OACI,kBAAC,KAAD,MACK,SAACztC,GACE,OACI,oCACK,EAAKjP,MAAMxF,QAAU,EAAKmiD,4BAA4B,EAAK38C,MAAMs1C,kBAC9D,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI96C,QAAQ,EACRwI,kBAAmB,EAAKhD,MAAMgD,kBAC9Bw5C,mBAAoB,SAAA7qD,GAAM,OAAI,EAAK6qD,mBAAmB,EAAKx8C,MAAMs1C,gBAAiB3jD,IAClF2jD,gBAAiB,EAAKt1C,MAAMs1C,gBAC5B+G,cAAe,EAAKr8C,MAAMq8C,cAC1BrlD,QAAS,EAAKgJ,MAAMhJ,QACpB8K,UAAW,EAAK9B,MAAMlN,aACtBE,qBAAsB,EAAKgN,MAAMhN,qBACjCT,wBAAyB,EAAKyN,MAAMzN,wBACpCD,uBAAwB,EAAK0N,MAAM1N,uBACnCiB,+BAAgC,EAAKyM,MAAMzM,+BAC3CV,wBAAyB,EAAKmN,MAAMnN,wBACpCikD,sBAAuB,EAAK92C,MAAM82C,sBAClCE,uBAAwB,EAAKh3C,MAAMg3C,uBACnC5B,wBAAyB,SAACz/B,GAAD,OAAgB,EAAK3V,MAAMo1C,wBAAwBz/B,IAC5EwiC,iBAAkB,EAAKn4C,MAAMm4C,oBAErC,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIl4C,UAAU,eACVzF,QAAQ,EACRwI,kBAAmB,EAAKhD,MAAMgD,kBAC9Bw5C,mBAAoB,SAAA7qD,GAAM,OACtB,EAAK6qD,mBAAmB,EAAKx8C,MAAMs1C,gBAAiB3jD,IAExD2jD,gBAAiB,EAAKt1C,MAAMs1C,gBAC5B+G,cAAe,EAAKr8C,MAAMq8C,cAC1BrlD,QAAS,EAAKgJ,MAAMhJ,QACpB8K,UAAW,EAAK9B,MAAMlN,aACtBR,uBAAwB,EAAK0N,MAAM1N,uBACnCU,qBAAsB,EAAKgN,MAAMhN,qBACjCT,wBAAyB,EAAKyN,MAAMzN,wBACpCgB,+BAAgC,EAAKyM,MAAMzM,+BAC3CV,wBAAyB,EAAKmN,MAAMnN,wBACpCikD,sBAAuB,EAAK92C,MAAM82C,sBAClCE,uBAAwB,EAAKh3C,MAAMg3C,uBACnC5B,wBAAyB,SAACz/B,GAAD,OAAgB,EAAK3V,MAAMo1C,wBAAwBz/B,IAC5EwiC,iBAAkB,EAAKn4C,MAAMm4C,qBAK5C,EAAKn4C,MAAMxF,SAAW,EAAKmiD,4BAA4B,EAAK38C,MAAMs1C,kBAC/D,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI96C,OAAQ,EAAKwF,MAAM3M,0BACnBwgB,eAAgB,EAAK7T,MAAM06C,gBAC3BrmC,WAAY,EAAKrU,MAAM06C,gBACvBjtC,MAAOwB,EAAE,kCACTwF,QAASxF,EAAE,gDAAiD,CACxD0rC,sBAAuB,EAAK36C,MAAMs1C,gBAAgB/G,oBAEtD75B,WAAYzF,EAAE,iBAGtB,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIhP,UAAU,qBACVzF,OAAQ,EAAKwF,MAAM3M,0BACnBwgB,eAAgB,EAAK7T,MAAM06C,gBAC3BrmC,WAAY,EAAKrU,MAAM06C,gBACvBjtC,MAAOwB,EAAE,kCACTwF,QAASxF,EAAE,gDAAiD,CACxD0rC,sBAAuB,EAAK36C,MAAMs1C,gBAAgB/G,oBAEtD75B,WAAYzF,EAAE,kBAM1B,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIzU,OAAQ,EAAKwF,MAAM5M,+BACnBygB,eAAgB,EAAK7T,MAAMw7B,kBAC3BnnB,WAAY,EAAKrU,MAAMw7B,kBACvB/tB,MAAOwB,EAAE,sCACTwF,QAASxF,EAAE,wCACXyF,WAAYzF,EAAE,iBAGtB,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIhP,UAAU,uBACVzF,OAAQ,EAAKwF,MAAM5M,+BACnBygB,eAAgB,EAAK7T,MAAMw7B,kBAC3BnnB,WAAY,EAAKrU,MAAMw7B,kBACvB/tB,MAAOwB,EAAE,sCACTwF,QAASxF,EAAE,wCACXyF,WAAYzF,EAAE,wB,yCAY5BqmC,EAAkC3jD,GACxD,OAAQ2jD,EAAgBv4C,mBACpB,KAAK4tC,GAAuBC,YAC5B,KAAKD,GAAuBE,aACxB57C,KAAK+Q,MAAM68C,yBAA0BlrD,Q,GA/I7B2O,aAmMT4W,gBA5CS,SAACzgB,GACrB,MAAO,CACH+D,OAAQ/D,EAAMoG,OAAO1J,qBACrBE,0BAA2BoD,EAAMoG,OAAOxJ,0BACxCD,+BAAgCqD,EAAMoG,OAAOzJ,+BAC7C4D,QAASP,EAAM+F,KAAKhR,MAAMwR,QAC1BlK,aAAc2D,EAAMoG,OAAO/J,aAC3BD,wBAAyB4D,EAAMoG,OAAOhK,wBACtCG,qBAAsByD,EAAMoG,OAAO7J,qBACnCO,+BAAgCkD,EAAMoG,OAAOtJ,+BAC7ChB,wBAAyBkE,EAAMoG,OAAOtK,wBACtCD,uBAAwBmE,EAAMoG,OAAOvK,2BAIlB,SAAC2S,GACxB,MAAO,CACHu2B,kBAAmB,WACfv2B,EAAS,CAAEjK,KrLjM6B,uCqLiMeqB,SAAS,KAEpEq+C,gBAAiB,WACbz1C,EAAS,CAAEjK,KrLnMwB,kCqLmMeqB,SAAS,IAC3D4I,EAAS,CAAEjK,KrLtMqB,+BqLsMeqB,SAAS,KAE5D+9C,eAAgB,WACZn1C,EAAS,CAAEjK,KrLvMwB,kCqLuMeqB,SAAS,KAE/DwgD,yBAA0B,SAAClrD,GACvBsT,ErEgCV,SAACtT,GAAD,8CACE,WAAOsT,EAAUoD,GAAjB,iBAAA3a,EAAA,sDACQsJ,EAAUqR,IAAW7L,KAAKhR,MAAMwR,QAChC+9C,EAAe1yC,IAAWxL,OAAOzK,qBAEvCT,EAASA,EAAOmY,KAAI,SAACwsC,GACnB,OAAO,MAAKA,EAAZ,CAAkBt5C,QAAShG,EAAS8F,eAAgBi+C,EAAazrD,QAGnE2V,EAAS,CAAEjK,KhH7OwB,4BgH6OqBqB,SAAS,IACjEkJ,GAAwB,IAAIwpB,GAAyB/3B,EAASrF,IAC3D2W,MAAK,SAACxD,GACLG,EAAS,CAAEjK,KhHxPuB,+BgHwPyBqB,SAAS,IACpE4I,EAAS,CAAEjK,KhHhPoB,4BgHgPyBqB,QAASyI,EAASrT,OAC1EwT,EAAS,CAAEjK,KhHzP+B,uCgHyPyBqB,SAAS,IAC5E4I,EAAS6rB,SAEVlsB,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhHpPoB,4BgHoPyBqB,QAAS1B,OAjBvE,2CADF,wDqEhCmBmiD,CAAkBnrD,KAE/BmlD,sBAAuB,WACnB7xC,EAAS,CAAEjK,KrLlNyB,mCqLkNeqB,SAAS,KAEhE26C,uBAAwB,WACpB/xC,EAAS,CAAEjK,KrLrNyB,mCqLqNeqB,SAAS,IAC5D4I,EAAS,CAAEjK,KrLvMmB,6BqLuMeqB,SAAS,IACtD4I,EAAS,CAAEjK,KrLvMmB,6BqLuMeqB,aAASzR,KAE1DwqD,wBAAyB,SAACnkB,GACtBhsB,EAAS+rB,GAAiBC,QAKvB/Z,CAA6CulC,IC7MtDM,G,oLAC0B,IAAD,OACnB9tC,EAAMhgB,KAAK+Q,MAAXiP,EACF+tC,EACJ/tD,KAAK+Q,MAAMmZ,gBACXlqB,KAAK+Q,MAAMq8C,cAAc3qD,OACvBzC,KAAK+Q,MAAMmZ,eAAem1B,sBAC1Br/C,KAAK+Q,MAAMmZ,eAAeo1B,kBAC9B,OACE,yBAAKtuC,UAAU,qBACXhR,KAAK+Q,MAAMlH,cACX,oCACE,wBAAImH,UAAU,uBAAuBgP,EAAE,mBACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,sBAG5C,kBAAC,GAAD,CACE1C,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,kBAAC,GAAD,CACE7M,KAAMkqC,KACNnqC,YAAa,kBAAM,EAAKH,MAAMi9C,sBAC9Bh9C,UAAU,aAEZ,kBAAC,GAAD,CACEwN,MAAOwB,EACLhgB,KAAK+Q,MAAMmZ,eACPlqB,KAAK+Q,MAAMmZ,eAAei1B,mBAC1B,IAEN5B,QAASv9C,KAAK+Q,MAAMwsC,QACpBQ,aAAc/9C,KAAK+Q,MAAMgtC,aACzB/gC,OAAQhd,KAAK+Q,MAAMiM,OACnBgiC,eAAgBh/C,KAAK+Q,MAAMiuC,eAC3BhzB,SAAUhsB,KAAK+Q,MAAMib,SACrB8yB,gBAAiB,CACfmP,mBAAoBjuD,KAAK+Q,MAAMk9C,oBAEjC1P,kBACmC,IAAjCv+C,KAAK+Q,MAAMtN,kBACPuc,EAAE,oCACF,GAEN88B,gBACE,kBAAC,GAAD,CACE5yB,eAAgBlqB,KAAK+Q,MAAMmZ,eAC3Bg1B,QAASl/C,KAAK+Q,MAAMmuC,QACpBE,iBAAkBp/C,KAAK+Q,MAAMquC,mBAGjCpC,qBACE,kBAAC,GAAD,CACE2P,kBAAmB3sC,EAAE,qCACrBze,YACEvB,KAAK+Q,MAAMmZ,eACPlK,EAAEhgB,KAAK+Q,MAAMmZ,eAAegkC,0BAA2B,CACrD3+C,cAAe,CAAEC,aAAa,KAEhC,GAENs9C,SAAS,EACTC,qBAAqB,qBACrBL,2BAA2B,4BAC3BD,8BAA8B,iCAGlC55C,UAAW7S,KAAK+Q,MAAMtN,oBAEvBzD,KAAK+Q,MAAMq8C,eACVptD,KAAK+Q,MAAMq8C,cAAc3qD,OAAS,IAChCsrD,EAeA,yBAAK/8C,UAAU,yBAAf,+DAC+D,IAC5DhR,KAAK+Q,MAAMmZ,eAAeo1B,kBAF7B,uBAdA,yBAAKtuC,UAAU,cACb,kBAAC,GAAD,CACEkC,KAAM8M,EAAE,iCACRjU,KAAK,SACLiF,UAAU,iBACVC,QAAS,kBAAM,EAAKF,MAAMo9C,wBAC1B38C,SACExR,KAAK+Q,MAAMq8C,cAAc3qD,OACvBzC,KAAK+Q,MAAMmZ,eAAem1B,sBAC5Br/C,KAAK+Q,MAAMmZ,eAAeo1B,sBAUpC,kBAAC,GAAD,CACE4J,iBAAkBlpD,KAAK+Q,MAAMm4C,iBAC7B7C,gBAAiBrmD,KAAK+Q,MAAMmZ,eAC5BnW,kBAAmB,kBAAM,EAAKhD,MAAMq9C,yBAEtC,kBAAC,GAAD,CACElF,iBAAkBlpD,KAAK+Q,MAAMm4C,iBAC7BkE,cAAeptD,KAAK+Q,MAAMq8C,cAC1B/G,gBAAiBrmD,KAAK+Q,MAAMmZ,eAC5BnW,kBAAmB,kBAAM,EAAKhD,MAAMs9C,yBACpCV,gBAAiB3tD,KAAK+Q,MAAM48C,wB,GAzGbt8C,aAiHZ6f,kBAAkB48B,ICZlBQ,G,oLAvGmB,IAAD,OACnBP,EACF/tD,KAAK+Q,MAAMmZ,gBACXlqB,KAAK+Q,MAAMq8C,cAAc3qD,OAASzC,KAAK+Q,MAAMmZ,eAAem1B,sBACxDr/C,KAAK+Q,MAAMmZ,eAAeo1B,kBAClC,OACI,kBAAC,KAAD,MACK,SAACt/B,GACE,OACI,yBAAKhP,UAAU,4CACX,wBAAIA,UAAU,uBAAuBgP,EAAE,mBACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,qBACxC,kBAAC,GAAD,CACI1C,SAAU,CACNC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,KAGb,kBAAC,GAAD,CACI7M,KAAMkqC,KACNnqC,YAAa,kBAAM,EAAKH,MAAMi9C,sBAC9Bh9C,UAAU,aAEd,kBAAC,GAAD,CACIwN,MAAOwB,EACH,EAAKjP,MAAMmZ,eAAiB,EAAKnZ,MAAMmZ,eAAei1B,mBAAqB,IAE/E5B,QAAS,EAAKxsC,MAAMwsC,QACpBQ,aAAc,EAAKhtC,MAAMgtC,aACzB/gC,OAAQ,EAAKjM,MAAMiM,OACnBgiC,eAAgB,EAAKjuC,MAAMiuC,eAC3BhzB,SAAU,EAAKjb,MAAMib,SACrBuyB,kBACqC,IAAjC,EAAKxtC,MAAMtN,kBACLuc,EAAE,oCACF,GAEV88B,gBACI,kBAAC,GAAD,CACI5yB,eAAgB,EAAKnZ,MAAMmZ,eAC3Bg1B,QAAS,EAAKnuC,MAAMmuC,QACpBE,iBAAkB,EAAKruC,MAAMquC,mBAGrCpC,qBACI,kBAAC,GAAD,CACI2P,kBAAmB3sC,EAAE,qCACrBze,YAAaye,EAAE,EAAKjP,MAAMmZ,eAAegkC,0BAA2B,CAChE3+C,cAAe,CAAEC,aAAa,KAElCs9C,SAAS,EACTC,qBAAqB,qBACrBL,2BAA2B,4BAC3BD,8BAA8B,wCAGtC55C,UAAW,EAAK9B,MAAMtN,oBAEzB,EAAKsN,MAAMq8C,eACR,EAAKr8C,MAAMq8C,cAAc3qD,OAAS,IAChCsrD,EAeE,yBAAK/8C,UAAU,gCAAf,+DACiE,IAC5D,EAAKD,MAAMmZ,eAAeo1B,kBAF/B,uBAdA,yBAAKtuC,UAAU,cACX,kBAAC,GAAD,CACIkC,KAAM8M,EAAE,iCACRjU,KAAK,SACLiF,UAAU,iBACVC,QAAS,kBAAM,EAAKF,MAAMo9C,wBAC1B38C,SACI,EAAKT,MAAMq8C,cAAc3qD,OACrB,EAAKsO,MAAMmZ,eAAem1B,sBAC9B,EAAKtuC,MAAMmZ,eAAeo1B,sBAU9C,kBAAC,GAAD,CACI4J,iBAAkB,EAAKn4C,MAAMm4C,iBAC7B7C,gBAAiB,EAAKt1C,MAAMmZ,eAC5BnW,kBAAmB,kBAAM,EAAKhD,MAAMq9C,yBAExC,kBAAC,GAAD,CACIlF,iBAAkB,EAAKn4C,MAAMm4C,iBAC7BkE,cAAe,EAAKr8C,MAAMq8C,cAC1B/G,gBAAiB,EAAKt1C,MAAMmZ,eAC5BnW,kBAAmB,kBAAM,EAAKhD,MAAMs9C,yBACpCV,gBAAiB,EAAK58C,MAAM48C,2B,GA7F/Bt8C,aCjCZk9C,I,0CAAAA,GACHC,iBAA2B,mBADxBD,GAEHE,cAAwB,gBAFrBF,GAGH9mD,QAAkB,UAHf8mD,GAIHG,SAAmB,WAJhBH,GAKHI,gBAA0B,kBALvBJ,GAMHK,QAAkB,UCMpC,IAAMC,GAAsB,SAAC/qB,GACzB,OAAQA,GACJ,KAAKyqB,GAAWC,iBAChB,KAAKD,GAAWE,cACZ,OAAOK,KACX,KAAKP,GAAW9mD,QACZ,OAAO6M,KACX,KAAKi6C,GAAWG,SACZ,OAAO3nB,KACX,QACI,OAAO+nB,OAIbC,GAAyB,SAACjrB,GAC5B,OAAQA,GACJ,KAAKyqB,GAAWC,iBAChB,KAAKD,GAAWE,cACZ,MAAO,oBACX,KAAKF,GAAW9mD,QACZ,MAAO,UACX,KAAK8mD,GAAWG,SACZ,MAAO,WACX,QACI,MAAO,KAIbM,GAAwE,SAAAj+C,GAC1E,OACI,yBAAKC,UAAW,oBAAsB+9C,GAAuBh+C,EAAMksC,SAASgS,aACxE,kBAAC,KAAD,CAAiB99C,KAAM09C,GAAoB99C,EAAMksC,SAASgS,cAC1D,yBAAKj+C,UAAU,0BAA0BD,EAAMksC,SAASiS,UCPrDC,I,OA7BsB,SAACp+C,GAA0C,IACpEksC,EAA0BlsC,EAA1BksC,SAAU/rC,EAAgBH,EAAhBG,YACZ8L,EAASjM,EAAMiM,OAoBrB,OACI,yBAAKhM,UAAU,mBAAmBwB,MAAO,CAAE48C,QAXvCpyC,EAAOlP,oBAAsB4tC,GAAuBG,KACpD7+B,EAAOlP,oBAAsB4tC,GAAuBI,WAMjDmB,EAASgS,aAAeV,GAAW9mD,QAI4B,EAAI,IACtE,kBAAC,GAAD,CAAe0J,KAAMo0B,KAASv0B,UAAU,aAAaE,YApB1C,WACXA,GACAA,EAAY+rC,S,sOCRxB,IAgCeoS,GAhC4D,SACzEt+C,GACI,IACIG,EAA0BH,EAA1BG,YAAa+rC,EAAalsC,EAAbksC,SAEfqS,EACHv+C,EAAM+tC,iBAAmB/tC,EAAM+tC,gBAAgBmP,oBAAuB,GAEzE,OACE,yBAAKj9C,UAAU,+BACZ,CAACu9C,GAAWC,iBAAkBD,GAAWG,SAAUH,GAAWE,eAAe3lC,SAC5Em0B,EAASgS,aAET,kBAAC,GAAD,CACEl3B,QAASu3B,EACTh3B,mBAAoB,SAAC+C,GAAD,OAClBnqB,EACIA,E,2VAAY,IAAK+rC,EAAN,CAAgBsS,sBAAuBl0B,EAAIp7B,SACtD,MAENg4B,eACEq3B,EAAgBl3C,MACd,SAACwa,GAAD,OAAOA,EAAE3yB,OAASg9C,EAASsS,0BACxBD,EAAgBl3C,MAAK,SAACwa,GAAD,MAAkB,QAAXA,EAAE3yB,SAErC4S,UAAWy8C,GAAmB,OCVzBE,I,OAhB8D,SAACz+C,GAAW,IAC7EG,EAA0BH,EAA1BG,YAAa+rC,EAAalsC,EAAbksC,SAQrB,OACI,yBAAKjsC,UAAU,iBAAiBwB,MAAO,CAAE48C,QAASnS,EAASgS,aAAeV,GAAW9mD,QAAU,EAAI,IAC/F,2BAAO0Q,KAAK,YAAY3Z,GAAE,oBAAey+C,EAAS58C,IAAM0L,KAAK,WAAWoT,SARhE,SAACU,GACTo9B,EAASgS,aAAeV,GAAW9mD,SAAWyJ,GAC9CA,EAAY+rC,S,OCJT,SAASwS,GAAiC1+C,GACrD,IAAMiM,EAASjM,EAAMiM,OAEb9L,EAA0BH,EAA1BG,YAAa+rC,EAAalsC,EAAbksC,SACfyS,EACF1yC,EAAOlP,oBAAsB4tC,GAAuBC,aACpD3+B,EAAOlP,oBAAsB4tC,GAAuBE,aAWxD,OACI,yBAAK5qC,UAAU,aACV0+C,GACG,2BACI1+C,UAAU,iBACVmH,KAAK,YACL3Z,GAAE,oBAAey+C,EAAS58C,IAC1B0L,KAAK,WACLoT,SAjBA,SAACU,GAITo9B,EAASgS,aAAeV,GAAW9mD,SAAWyJ,GAC9CA,EAAY+rC,IAaJzqC,MAAO,CAAE48C,QAASnS,EAASgS,aAAeV,GAAW9mD,QAAU,EAAI,KAI3E,6BACI,uBAAGuJ,UAAU,aACRgM,EAAOlP,oBAAsB4tC,GAAuBG,IAC/C9qC,EAAMksC,SAAS4M,mBACf94C,EAAMksC,SAAS0S,WAEzB,uBAAG3+C,UAAU,aAAaD,EAAMksC,SAASliC,QChClD,SAAS60C,GAAmC7+C,GAAuC,IAC9EksC,EAA0BlsC,EAA1BksC,SAAU/rC,EAAgBH,EAAhBG,YACZ8L,EAASjM,EAAMiM,OAoBrB,OACI,6BACI,yBAAKhM,UAAW,2BAA6B+9C,GAAuB9R,EAASgS,aACzE,kBAAC,KAAD,CAAiB99C,KAAM09C,GAAoB5R,EAASgS,cACpD,yBAAKj+C,UAAU,0BAA0BisC,EAASiS,UAdtDlyC,EAAOlP,oBAAsB4tC,GAAuBG,KACpD7+B,EAAOlP,oBAAsB4tC,GAAuBI,WAMjDmB,EAASgS,aAAeV,GAAW9mD,UASlB,kBAAC,GAAD,CAAe0J,KAAMo0B,KAASv0B,UAAU,aAAaE,YAxB9D,WACXA,GACAA,EAAYH,EAAMksC,cCdvB,IAAM4S,GAAb,YACE,WAAY9nD,EAAiBvJ,EAAYsxD,GAA4B,IAAD,sBAClE,IAAIr6C,EAAW,iBAAa1N,EAAb,2BADmD,OAGlE,8CAAM0N,KACDY,KAAO,CAAEy5C,oBAAmBtxD,MAJiC,EADtE,4BAA6CkZ,ICAhCq4C,GAAb,YACE,aAAe,oBAAD,mDACM,8BAFtB,4BAA+Cj5C,ICqFzCk5C,G,6MAgCJC,8BAAgC,SAACC,GAC/B55C,GACE,IAAIu5C,GACF,EAAK9+C,MAAMmK,cAAcnN,QACzBmiD,EAAO7vD,GACP6vD,EAAOX,wBAETl2C,MAAK,WAC+B,cAAhC62C,EAAOX,uBACT,EAAKrwC,SAAS,CAAEixC,+BAA+B,Q,EAKrD/Q,iBAAmB,SAAC0M,GAClB,EAAK5sC,SAAS,CAAEkuC,cAAe,KAC/B,EAAKr8C,MAAMquC,iBAAiB0M,I,EAG9BsE,oBAAsB,SAACF,GACrB,EAAKhxC,SAAS,CAAEmxC,YAAaH,IAC7B,EAAKn/C,MAAMq/C,uB,EAGbE,gBAAkB,SAACJ,GACb,EAAK1oD,MAAM4lD,cAAc/oB,WAAU,SAACR,GAAD,OAAOA,EAAExjC,KAAO6vD,EAAO7vD,OAAO,EACnE,EAAK6e,UAAS,SAACwrB,GACb,MAAO,CACL0iB,cAAe1iB,EAAK0iB,cAAcpwC,QAAO,SAAC6mB,GAAD,OAAOA,EAAExjC,KAAO6vD,EAAO7vD,UAIpE,EAAK6e,UAAS,SAACwrB,GACb,MAAO,CAAE0iB,cAAc,GAAD,oBAAM1iB,EAAK0iB,eAAX,CAA0B8C,S,EAKtDvC,gBAAkB,WAChB,EAAKzuC,SAAS,CAAEkuC,cAAe,M,EAG1B5lD,MAAuB,CAC5B+1C,QAAS,CACP,CACEv4C,UAAW,QACXC,YAAa,GACbu4C,cAAe,SAACxgC,GAAD,MACb,CACE0+B,GAAuBE,aACvBF,GAAuBC,aACvB7yB,SAAU9L,EAAyBlP,oBACvC8wC,mBAAoB4Q,GACpB3Q,sBAAuB,EAAKyR,gBAC5B1S,YAAY,EACZF,gBAAiB,wBACjBiB,cAAe,yBAEjB,CACE35C,UAAW,OACXC,YAAa,6BACby5C,MAAM,EACNlB,cAAe,SAACzjB,GAAD,OAAO,IAExB,CACE/0B,UAAW,YACXC,YAAa,kCACbu4C,cAAe,SAACxgC,GAAD,MACb,CACE0+B,GAAuBI,UACvBJ,GAAuBC,YACvBD,GAAuBE,cACvB9yB,SAAU9L,EAAyBlP,qBAEzC,CACE9I,UAAW,qBACXC,YAAa,2CACbu4C,cAAe,SAACxgC,GAAD,MACb,CAAC0+B,GAAuBG,KAAK/yB,SAC1B9L,EAAyBlP,qBAGhC,CACE9I,UAAW,oBACXC,YAAa,oCACb25C,mBAAoByQ,GACpB7R,cAAe,SAACxgC,GAAD,MACb,CACE0+B,GAAuBC,YACvBD,GAAuBE,cACvB9yB,SAAU9L,EAAyBlP,sBACnC,EAAKiD,MAAMxD,KAAKvR,WAChB,EAAKwL,MAAM+qB,kBACX,EAAK/qB,MAAM+qB,eAAgB3wB,OAC1B2uD,qCACL1R,sBAAuB,EAAKoR,+BAE9B,CACEjrD,UAAW,SACXC,YAAa,+BACb85C,gBAAgB,EAChBH,mBAAoBoQ,GACpBxR,cAAe,SAACzjB,GAAD,OAAO,IAExB,CACE/0B,UAAW,SACXC,YAAa,GACbu4C,cAAe,SAACzjB,GAAD,OAAO,GACtB6kB,mBAAoBuQ,GACpBtQ,sBAAuB,EAAKuR,oBAC5BxS,YAAY,EACZF,gBAAiB,4BAGrB8S,cAAe,CACb,CACExrD,UAAW,OACXC,YAAa,6BACbu4C,cAAe,SAACzjB,GAAD,OAAO,GACtB6kB,mBAAoB6Q,GACpB5Q,sBAAuB,EAAKyR,iBAE9B,CACEtrD,UAAW,SACXC,YAAa,+BACbu4C,cAAe,SAACzjB,GAAD,OAAO,GACtB6kB,mBAAoBgR,GACpB/Q,sBAAuB,EAAKuR,oBAC5BxS,YAAY,EACZe,cAAe,sCAGnB0R,iBAAa10D,EACbyxD,cAAe,GACfa,mBAAoB,GACpB17B,oBAAgB52B,EAChBw0D,+BAA+B,G,oFAvKC,IAAD,OAC/B/6C,GAA0B,IAAI26C,IAA6B12C,MACzD,SAAC1a,GACC,IAAI8xD,EAAc9xD,EAAO6D,KAAKqY,KAAI,SAAC+pB,GACjC,MAAO,CAAEjjC,MAAOijC,EAAE7pB,KAAM9a,MAAO2kC,EAAE8rB,SAGnC,EAAKxxC,SAAS,CACZ+uC,mBAAoBwC,OAGxB,SAAC76C,OAGH8V,GAAY1rB,KAAK+Q,MAAM0K,aAAaC,UAAUrC,MAAK,SAAC1a,GAClD,EAAKugB,SAAS,CACZqT,eAAgB5zB,EAChBuqD,iBAAkBvqD,EAAOiD,OAAO+uD,kCAIpC3wD,KAAK+Q,MAAMiF,SAAS,CAClBjK,KjM9G+B,wBiM+G/BqB,aAASzR,IAGPqE,KAAK+Q,MAAM0K,cACbzb,KAAK+Q,MAAMiF,SAAS6rB,MAEtB7hC,KAAK+Q,MAAMiF,SAAS2rB,Q,mCA6IF/b,GAClB,GAAIA,GAAa5lB,KAAKwH,MAAM6oD,YAC1B,GACErwD,KAAK+Q,MAAMmZ,eAAepc,oBAC1B4tC,GAAuBG,IAEvB77C,KAAK+Q,MAAM6/C,cAAc5wD,KAAKwH,MAAM6oD,YAAYhD,aAC3C,GACLrtD,KAAK+Q,MAAMmZ,eAAepc,oBAC1B4tC,GAAuBI,UACvB,CACA,IAAM+U,EAAe7wD,KAAK+Q,MAAMmZ,eAAei1B,mBACzC2R,EAAyB9wD,KAAK+Q,MAAMiP,EAAE6wC,GAC5C7wD,KAAK+Q,MAAMggD,oBACT/wD,KAAKwH,MAAM6oD,YAAYhD,OACvByD,QAIF9wD,KAAK+Q,MAAMigD,iBAAiBhxD,KAAKwH,MAAM6oD,YAAYhD,QAGvDrtD,KAAK+Q,MAAMkgD,yB,+BAGiB,IAAD,OACnBjxC,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACE,oCACE,kBAAC,GAAD,CACEzU,OAAQvL,KAAK+Q,MAAM1M,sBACnBma,MAAOwB,EAAE,gCACTwF,QAASxF,EAAE,sCACX8F,iBAAkB9F,EAAE,kBACpB+F,kBAAmB/F,EAAE,iCACrB6F,QAAS,SAACD,GAAD,OAAe,EAAKsrC,aAAatrC,MAE5C,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE23B,QAASv9C,KAAKwH,MAAM+1C,QACpBQ,aAAc/9C,KAAK+Q,MAAMogD,cACzBn0C,OAAQhd,KAAK+Q,MAAMiM,OACnBkN,eAAgBlqB,KAAK+Q,MAAMmZ,eAC3Bg1B,QAASl/C,KAAK+Q,MAAMmuC,QACpBE,iBAAkBp/C,KAAKo/C,iBACvBJ,eAAgBh/C,KAAK+Q,MAAMiuC,eAC3BhzB,SAAU,GACVvoB,kBAAmBzD,KAAK+Q,MAAMtN,kBAC9BuqD,mBAAoBhuD,KAAK+Q,MAAMi9C,mBAC/BI,oBAAqBpuD,KAAK+Q,MAAMq9C,oBAChCvkD,aAAc7J,KAAK+Q,MAAMlH,aACzBujD,cAAeptD,KAAKwH,MAAM4lD,cAC1Be,qBAAsBnuD,KAAK+Q,MAAMo9C,qBACjCE,sBAAuBruD,KAAK+Q,MAAMs9C,sBAClCV,gBAAiB3tD,KAAK2tD,gBACtBM,mBAAoBjuD,KAAKwH,MAAMymD,mBAC/B/E,iBAAkBlpD,KAAKwH,MAAM0hD,oBAGjC,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE3L,QAASv9C,KAAKwH,MAAMgpD,cACpBzS,aAAc/9C,KAAK+Q,MAAMogD,cACzBn0C,OAAQhd,KAAK+Q,MAAMiM,OACnBkN,eAAgBlqB,KAAK+Q,MAAMmZ,eAC3Bg1B,QAASl/C,KAAK+Q,MAAMmuC,QACpBE,iBAAkBp/C,KAAKo/C,iBACvBJ,eAAgBh/C,KAAK+Q,MAAMiuC,eAC3BhzB,SAAU,GACVvoB,kBAAmBzD,KAAK+Q,MAAMtN,kBAC9BuqD,mBAAoBhuD,KAAK+Q,MAAMi9C,mBAC/BI,oBAAqBpuD,KAAK+Q,MAAMq9C,oBAChCvkD,aAAc7J,KAAK+Q,MAAMlH,aACzBujD,cAAeptD,KAAKwH,MAAM4lD,cAC1Be,qBAAsBnuD,KAAK+Q,MAAMo9C,qBACjCE,sBAAuBruD,KAAK+Q,MAAMs9C,sBAClCV,gBAAiB3tD,KAAK2tD,gBACtBzE,iBAAkBlpD,KAAKwH,MAAM0hD,oBAGjC,kBAAC,GAAD,CACE39C,OAAQvL,KAAKwH,MAAM2oD,8BACnB/qC,WAAY,WACV,EAAKlG,SAAS,CAAEixC,+BAA+B,KAEjD3xC,MAAOwB,EAAE,mDACTwF,QAASxF,EAAE,kDACXyF,WAAYzF,EAAE,qB,GAlQD3O,aA+TR+/C,qBACblgC,eACAjJ,aAxDsB,SAACzgB,GACvB,MAAO,CACLwV,OAAQxV,EAAMoG,OAAO/K,aACrBqnB,eAAgB1iB,EAAMoG,OAAOzK,qBAC7B+7C,QAAS13C,EAAMoG,OAAOxK,cACtB+tD,cAAe3pD,EAAMoG,OAAOlL,OAC5BwY,cAAe1T,EAAM+F,KAAKhR,MAC1Bkf,aAAcjU,EAAM+F,KAAK/Q,KACzB+Q,KAAM/F,EAAM+F,KACZrK,uBAAwBsE,EAAMoG,OAAO1K,uBACrCO,kBAAmB+D,EAAMoG,OAAOnK,kBAChCoG,aAAcrC,EAAMmH,YAAY9E,aAChCxF,sBAAuBmD,EAAMoG,OAAOvJ,0BAIb,SAAC2R,GAC1B,MAAO,CACL0rB,aACAC,yBACAE,oBACAud,iBAAkB,SAACiS,GACjBr7C,EAASurB,GAAoB8vB,EAAU3vB,MAEzCsd,eAAgB,SAAChiC,GjFnUnB,IAACs0C,EiFoUOt0C,GACFhH,GjFrULs7C,EiFqU2Bt0C,EjFrU5B,uCACE,WAAOhH,GAAP,SAAAvX,EAAA,sDACEuX,EAAS,CAAEjK,KhHpDgB,oBgHoDqBqB,QAASkkD,IACzDt7C,EAAS0rB,MAFX,2CADF,yDiFwUEssB,mBAAoB,kBAClBh4C,EAAS,CAAEjK,KjM7WyB,6BiM6WSqB,SAAS,KACxDghD,oBAAqB,kBACnBp4C,EAAS,CAAEjK,KjM/WyB,6BiM+WSqB,SAAS,KACxD+gD,qBAAsB,kBACpBn4C,EAAS,CAAEjK,KjM7W2B,+BiM6WSqB,SAAS,KAC1DihD,sBAAuB,kBACrBr4C,EAAS,CAAEjK,KjM/W2B,+BiM+WSqB,SAAS,KAC1DgjD,oBAAqB,kBACnBp6C,EAAS,CACPjK,KjM5W+C,0CiM6W/CqB,SAAS,KAEb6jD,qBAAsB,kBACpBj7C,EAAS,CACPjK,KjMjX+C,0CiMkX/CqB,SAAS,KAEbwjD,cAAe,SAACW,GAAD,OAAoBv7C,EjF3LrC,SAACu7C,GAAD,8CACE,WAAOv7C,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CAAEjK,KhH3LsC,0CgH2LqBqB,SAAS,IAC/E4I,EAAS,CAAEjK,KhH/LkB,wBgHgM7ByK,GAAO,IAAImpB,GAAkBvmB,IAAW7L,KAAKhR,MAAMwR,QAASwjD,IACzDl4C,MAAK,WACJrD,EAAS,CAAEjK,KhHjMc,wBgHkMzBiK,EAAS6rB,SAEVlsB,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhHpMc,sBgHoMyBqB,QAAS1B,OATjE,2CADF,wDiF2L8CklD,CAAcW,KAC1DP,iBAAkB,SAACO,GAAD,OAAoBv7C,EjF7KxC,SAACu7C,GAAD,8CACE,WAAOv7C,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CAAEjK,KhH1MsC,0CgH0MqBqB,SAAS,IAC/E4I,EAAS,CAAEjK,KhH9MkB,wBgH+M7ByK,GAAO,IAAIupB,GAAqB3mB,IAAW7L,KAAKhR,MAAMwR,QAASwjD,IAC5Dl4C,MAAK,WACJrD,EAAS,CAAEjK,KhHhNc,wBgHiNzBiK,EAAS6rB,SAEVlsB,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhHnNc,sBgHmNyBqB,QAAS1B,OATjE,2CADF,wDiF6KiDslD,CAAiBO,KAChER,oBAAqB,SAACQ,EAAgB1xB,GAAjB,OACnB7pB,EjFhKJ,SAACu7C,EAAgB1xB,GAAjB,8CACE,WAAO7pB,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CAAEjK,KhHzNsC,0CgHyNqBqB,SAAS,IAC/E4I,EAAS,CAAEjK,KhH7NkB,wBgH8N7ByK,GAAO,IAAIopB,GAAwBxmB,IAAW7L,KAAKhR,MAAMwR,QAASwjD,EAAQ1xB,IACvExmB,MAAK,WACJrD,EAAS,CAAEjK,KhH/Nc,wBgHgOzBiK,EAAS6rB,SAEVlsB,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhHlOc,sBgHkOyBqB,QAAS1B,OATjE,2CADF,wDiFgKaqlD,CAAoBQ,EAAQ1xB,SAI5BuxB,CAGbpB,ICxYF,IA6De9+B,mBA7D6C,SAACngB,GAAmC,IACpFiP,EAAMjP,EAANiP,EAgCR,OACI,oCACI,wBAAIxN,MAAO,CAAEg/C,WAAY,SAAWzgD,EAAM3Q,WAAWhB,UAArD,IAAiE2R,EAAM3Q,WAAWlE,SAAlF,IAA4F,yBAAKsW,MAAO,CAAEi/C,MAAO,QAASC,OAAQ,UAAW9I,YAAa,OAAQpD,UAAW,OAASv0C,QAxBzK,WACjBF,EAAM3Q,YAAc2Q,EAAM4gD,gBAAkB5gD,EAAM4gD,gBAAe,EAAM5gD,EAAM3Q,WAAW5B,MAuByH,kBAAC,KAAD,CAAiB2S,KAAMg0C,SACpO,uBAAG3yC,MAAO,CAAEo/C,SAAU,eAAiB7gD,EAAM3Q,YAAc2Q,EAAM3Q,WAAWd,OAC5E,2BAAIyR,EAAM3Q,YAAc2Q,EAAM3Q,WAAWyxD,gBACzC,2BAAI9gD,EAAM3Q,YAvBD,WACb,IAAInB,EAAoB,GACpBm2C,EAAkB,GAStB,OARGrkC,EAAM3Q,YAAc2Q,EAAM3Q,WAAWnB,YACpCA,EAAY0wB,GAAW5e,EAAM3Q,WAAWnB,YAGxC8R,EAAM3Q,YAAc2Q,EAAM3Q,WAAWg1C,UACrCA,EAAUzlB,GAAW5e,EAAM3Q,WAAWg1C,UAGxB,KAAdn2C,GAAgC,KAAZm2C,EACbn2C,EAAY,OAASm2C,EAEzB,GASqB0c,IACxB,uBAAGt/C,MAAO,CAAEi/C,MAAO,OAAQM,aAAc,QAAUhhD,EAAMihD,gBACxDjhD,EAAMkhD,oBACH,yBAAKz/C,MAAO,CAAE8K,SAAU,WAAY40C,OAAQ,IAAK3tC,MAAO,MACpD,kBAAC,GAAD,CACIrR,KAAM8M,EAAE,iBAAmBjP,EAAMvJ,OAASuJ,EAAMohD,MAAQ,eAAiB,eACzElhD,QAzCQ,WACxBF,EAAMqhD,uBAAuBrhD,EAAM3Q,WAAY2Q,EAAMohD,QAyCrCnhD,UAAW,gBACX8B,OAAQ,OACRC,SAAU,SAEd,kBAAC,GAAD,CACIG,KAAM8M,EAAE,iBAAmBjP,EAAMvJ,MAAQ,mBACzCyJ,QA5CI,WACpBF,EAAMkhD,oBAAsBlhD,EAAMkhD,mBAAmB,CAAEzqD,MAAOuJ,EAAMvJ,MAAOpH,WAAY2Q,EAAM3Q,cA4C7E0S,OAAQ,OACRC,SAAU,cCtEbs/C,G,kCAAAA,GACMC,SAAmB,WADzBD,GAEME,MAAgB,QAFtBF,GAGM9jD,OAAiB,SAHvB8jD,GAIM5qD,QAAkB,UAJxB4qD,GAKMG,UAAoB,YCgB/C,IA0FethC,mBA1FyD,SAACngB,GAAyC,IACxGiP,EAAMjP,EAANiP,EAkCR,OACE,oCACE,wBAAIxN,MAAO,CAAEg/C,WAAY,SAbvBzgD,EAAM3Q,WACD2Q,EAAM3Q,WAAWhB,UAAY,IAAM2R,EAAM3Q,WAAWlE,SAGzD6U,EAAM0hD,mBACD1hD,EAAM0hD,mBAAmBrzD,UAAY,IAAM2R,EAAM0hD,mBAAmBv2D,SAGtE,GAOF6U,EAAMvJ,QAAU6qD,GAAiBE,OAChC,yBACE//C,MAAO,CAAEi/C,MAAO,QAASC,OAAQ,UAAW9I,YAAa,OAAQpD,UAAW,OAC5Ev0C,QAnCW,WACnBF,EAAM3Q,YAAc2Q,EAAM4gD,gBAAkB5gD,EAAM4gD,gBAAe,EAAM5gD,EAAM3Q,WAAW5B,MAoChF,kBAAC,KAAD,CAAiB2S,KAAMg0C,SAI7B,uBAAG3yC,MAAO,CAAEo/C,SAAU,eAAiB7gD,EAAM3Q,YAAc2Q,EAAM3Q,WAAWd,OAC5E,2BAAIyR,EAAM3Q,YAAc2Q,EAAM3Q,WAAWyxD,gBACzC,2BAAI9gD,EAAM3Q,aAlCR2Q,EAAM3Q,YAAc2Q,EAAM3Q,WAAWnB,WAAa8R,EAAM3Q,WAAWg1C,QAC/D,GAAN,OAAUzlB,GAAW5e,EAAM3Q,WAAWnB,WAAtC,eAAuD0wB,GAAW5e,EAAM3Q,WAAWg1C,UAE5E,KAgCP,uBAAG5iC,MAAO,CAAEi/C,MAAO,OAAQM,aAAc,QAAUhhD,EAAMihD,gBAGvDjhD,EAAM0hD,oBACN,oCACE,2DAAiC1hD,EAAM0hD,mBAAmBvzD,uBAA1D,IAAsI,GAAnD6R,EAAM0hD,mBAAmBvzD,uBAA8B,IAAM6R,EAAM0hD,mBAAmBlvB,qBAAuB,cAAgB,IAChN,gDACA,4BACGxyB,EAAM0hD,mBAAmBrtD,YAAYyV,KAAI,SAAC63C,GACzC,OAAO,wBAAIlgD,MAAO,CAAEg/C,WAAY,SAAWkB,EAAOtzD,UAA3C,IAAuDszD,EAAOx2D,SAA9D,MAA2Ew2D,EAAOb,qBAKhG9gD,EAAM4hD,gBACL,yBAAKngD,MAAO,CAAE8K,SAAU,WAAY40C,OAAQ,IAAK3tC,MAAO,MACrDxT,EAAM6hD,UACL,kBAAC,KAAD,CAAMl0C,GAAIuS,+BAAyClgB,EAAM3Q,WAAYoiC,SAAW,oBAAsBzxB,EAAM3Q,WAAYg1C,SACtH,kBAAC,GAAD,CACEliC,KAAMnC,EAAM3Q,WAAYqtD,WAAc,UAAYztC,EAAE,iBAAmBqyC,GAAiB5qD,QAAU,eAClGwJ,QA5DM,WAClBF,EAAM8hD,eAAiB9hD,EAAM8hD,cAAc,CAAErrD,MAAOuJ,EAAMvJ,MAAOpH,WAAY2Q,EAAM3Q,cA4DvE0S,OAAQ,OACRC,SAAU,OACVvB,SAAUT,EAAM3Q,WAAYqtD,cAIlC,kBAAC,GAAD,CACEv6C,KAAM8M,EAAE,iBAAmBjP,EAAMvJ,MAAQ,eACzCyJ,QA7EU,WAClBF,EAAM4hD,gBAAkB5hD,EAAM4hD,eAAe,CAAEnrD,MAAOuJ,EAAMvJ,MAAOpH,WAAY2Q,EAAM3Q,cA6E7E0S,OAAQ,OACRC,SAAU,cC9EPme,mBAfgE,SAACngB,GAAyC,IAC/GiP,EAAMjP,EAANiP,EAER,OACE,yBAAKxN,MAAO,CAAES,OAAQ,OAAQuyC,UAAW,OAAQuM,aAAc,SAC7D,wBAAI/gD,UAAU,mBAAmBgP,EAAE,iBAAmBjP,EAAMvJ,MAAQ,WAEpE,yBAAKwJ,UAAU,eACZD,EAAM7J,sBAAwB6J,EAAM7J,qBAAqB2T,KAAI,SAAAza,GAAU,OAAI2Q,EAAM+hD,gBAAgB1yD,OAAYzE,MAC7GoV,EAAMgiD,mBAAqBhiD,EAAMgiD,kBAAkBl4C,KAAI,SAAA43C,GAAkB,OAAI1hD,EAAM+hD,qBAAgBn3D,OAAWA,EAAW82D,WCyCnHxqC,I,cAAAA,aAfS,SAACzgB,GACvB,MAAO,CACL/J,6BAA8B+J,EAAM+F,KAAK9P,6BACzCrB,UAAWoL,EAAM+F,KAAKnR,cAIC,SAAC4Z,GAC1B,MAAO,CACL0D,+BAAgC,WAC9B1D,EAAS0D,UAKAuO,EAhDmD,SAAClX,GASjE,OARKA,EAAMtT,8BACTsT,EAAM2I,iCAGR7E,qBAAU,WACR9D,EAAM2I,mCACL,IAGD,oCACG3I,EAAM3U,WAAa2U,EAAMtT,+BAAiCya,GAAUgE,QAAQnL,EAAM3U,YAAc2U,EAAMtT,6BAA6Bmc,UAAY,IAC9I,yBAAK5I,UAAU,yCACZD,EAAMtT,8BACL,yBAAK+U,MAAO,CAAE08B,QAAS,OAAQ8jB,SAAU,SAEtCjiD,EAAMtT,6BACL,uBAAGuT,UAAU,WAAWwB,MAAO,CAAEm2C,WAAY,QAC1C53C,EAAMtT,8BAAgCsT,EAAMtT,6BAA6Bqc,WAD5E,OAC4F/I,EAAMtT,8BAAgCsT,EAAMtT,6BAA6Bmc,UADrK,0BAIA,uBAAG5I,UAAU,WAAWwB,MAAO,CAAEm2C,WAAY,QAA7C,iDCoCDz3B,mBAvD2D,SAACngB,GAA0C,IAC3GiP,EAAMjP,EAANiP,EAD0G,EAEpExL,oBAAS,GAF2D,oBAE3Gy+C,EAF2G,KAE1FC,EAF0F,KAIlHr+C,qBAAU,WACJ9D,EAAM5J,uBACR4J,EAAMoiD,mBAAmBpiD,EAAM5J,uBAC5BkS,MAAK,SAAAa,GACJg5C,EAAmBh5C,QAGxB,CAACnJ,EAAM5J,wBAMV,OACE,oCACG4J,EAAM5J,uBAAyB4J,EAAM5J,sBAAsB1E,OAAS,GACnE,yBAAK+P,MAAO,CAAES,OAAQ,OAAQuyC,UAAW,OAAQuM,aAAc,SAC7D,yBAAK/gD,UAAU,+BACb,kBAAC,GAAD,OAEF,wBAAIA,UAAU,mBAAmBgP,EAAE,iBAAmBjP,EAAMvJ,MAAQ,cAEpE,6BACE,yBAAKwJ,UAAU,eACZD,EAAM5J,uBAAyB4J,EAAM5J,sBAAsB0T,KAAI,SAACza,EAAY+W,GAAb,OAAqBpG,EAAM+hD,gBAAgB1yD,GAAY,OAEzH,yBAAK4Q,UAAU,yBACb,kBAAC,GAAD,CACEkC,KAAM8M,EAAE,iBAAmBizC,EAAkB,uBAAyB,mBACtEhiD,QApBgB,WAC5BF,EAAMqiD,YAAcriD,EAAMqiD,cAoBdpgD,MAAO,aAMhBjC,EAAM3J,yBAA2B2J,EAAM3J,wBAAwB3E,OAAS,GACvE,yBAAK+P,MAAO,CAAES,OAAQ,OAAQuyC,UAAW,OAAQuM,aAAc,SAC7D,wBAAI/gD,UAAU,mBAAmBgP,EAAE,iBAAmBjP,EAAMvJ,MAAQ,gBAEpE,6BACE,yBAAKwJ,UAAU,eACZD,EAAM3J,yBAA2B2J,EAAM3J,wBAAwByT,KAAI,SAAAza,GAAU,OAAI2Q,EAAM+hD,gBAAgB1yD,OAAYzE,aC8BnH03D,GAtEiE,SAACtiD,GAAW,IAClFiP,EAAMiG,eAANjG,EACF+H,EAAOhX,EAAMxF,OACb+nD,EAA8BviD,EAAMuiD,4BACpCxmB,EAAY,uCAAG,sBAAAruC,EAAA,sDACnB60D,GAA4B,GAC5BviD,EAAMg8B,sBAFa,2CAAH,qDAKZE,EAAY,uCAAG,sBAAAxuC,EAAA,sDACnB60D,GAA4B,GAC5BviD,EAAMg8B,sBAFa,2CAAH,qDASZ1B,EACJ,yBAAKr6B,UAAU,0BACb,yBAAKA,UAAU,YAAYwB,MAAO,CAAEqrC,UAAW,WAC7C,kBAAC,GAAD,CAAa3qC,KAAMnC,EAAMq8B,UAAU5uB,QACjC,6BACG4F,qCAA0BrT,EAAMq8B,UAAUtpB,UAE9C/S,EAAMwiD,QAAU,kBAAC,KAAD,CAAM70C,G7K/BM,kB6KgC3B,kBAAC,GAAD,CACElgB,GAAG,MACH0U,KAAM8M,EAAE,eACRhP,UAAU,gBACVC,QAAS67B,KAGZ/7B,EAAMpT,UAAY,kBAAC,KAAD,CAAM+gB,G7KpCM,oB6KqC7B,kBAAC,GAAD,CACElgB,GAAG,QACH0U,KAAM8M,EAAE,iBACRhP,UAAU,gBACVC,QAASg8B,KAGb,kBAAC,GAAD,CACEzuC,GAAG,QACH0U,KAAM,QACNlC,UAAU,gBACVC,QA/Ba,WACnBqiD,GAA4B,QAoC9B,OACE,oCACE,kBAAC,GAAD,CACE/nD,OAAQwc,EACR/W,UAAWO,KAAW,8BAA+BR,EAAMC,YAE3D,kBAAC,GAAD,KACE,8BAAOq6B,IAET,kBAAC,GAAD,KACE,0BAAMr6B,UAAU,2CACbq6B,O,mOC1DPmoB,G,YACJ,WAAYziD,GAAa,IAAD,8BACtB,8CAAMA,KAcRy8B,aAfwB,uCAeT,WAAOr1B,EAAcxW,GAArB,eAAAlD,EAAA,sEACW4uC,GAAwBl1B,EAAMxW,GADzC,cACPyrC,EADO,yBAENA,GAFM,2CAfS,wDAGtB,EAAK5lC,MAAQ,CACX4lC,eAAWzxC,EACX8xC,eAAe,GAEjBC,QAAQC,IAAI,CACV,EAAKH,aAAa,0CAA2C,eAC5Dn0B,MAAK,SAAAa,GACNA,EAAEmR,SAAQ,SAAAuZ,GAAC,OAAI,EAAK1lB,S,2VAAL,IAAmB,EAAK1X,MAAxB,eAAgCo9B,EAAEzsB,KAAOysB,QACxD,EAAK1lB,SAAS,CAAEuuB,eAAe,OAXX,E,uEAsBRztC,KAAK+Q,MAAXiP,EACR,OACE,oCACGhgB,KAAKwH,MAAMimC,eACV,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEliC,OAAQvL,KAAK+Q,MAAM0iD,gBACnBH,4BAA6BtzD,KAAK+Q,MAAMuiD,4BACxCvmB,oBAAqB/sC,KAAK+Q,MAAMg8B,oBAChCK,UAAWptC,KAAKwH,MAAM4lC,UACtBmmB,OAAQvzD,KAAK+Q,MAAMpJ,2BAA6B3H,KAAK+Q,MAAMpJ,0BAA0BlF,OAAS,EAC9F9E,SAAUqC,KAAK+Q,MAAMpT,YAGzB,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEqT,UAAU,kDACVzF,OAAQvL,KAAK+Q,MAAM0iD,gBACnBH,4BAA6BtzD,KAAK+Q,MAAMuiD,4BACxCvmB,oBAAqB/sC,KAAK+Q,MAAMg8B,oBAChCK,UAAWptC,KAAKwH,MAAM4lC,UACtBmmB,OAAQvzD,KAAK+Q,MAAMpJ,2BAA6B3H,KAAK+Q,MAAMpJ,0BAA0BlF,OAAS,EAC9F9E,SAAUqC,KAAK+Q,MAAMpT,kB,GA9CA0T,aA6EtB6f,kBACbjJ,aAtBsB,SAACzgB,GACvB,MAAO,CACLisD,gBAAiBjsD,EAAMqH,MAAMhK,gBAAgB0G,OAC7C5D,0BAA2BH,EAAMoG,OAAOjG,0BACxChK,SAAU6J,EAAM+F,KAAK3P,yBAA2B4J,EAAM+F,KAAK1P,+BAKpC,SAACmY,GAC1B,MAAO,CACLs9C,4BAA6B,SAAC/nD,GAC5ByK,EAAS,CAAEjK,KrMlFf,oCqMkFwDqB,QAAS7B,KAE/DwhC,oBAAqB,WACnB/2B,EAAS,CAAEjK,KzMtDY,sByM6D3Bkc,CAA6CurC,KChChCE,GAxDuD,SAAC3iD,GAAW,IACtEiP,EAAMiG,eAANjG,EAWFqrB,EACF,yBAAKr6B,UAAU,yBAAyBwB,MAAO,CAAE08B,QAAS,UACtD,yBAAKl+B,UAAU,aACX,kBAAC,GAAD,CAAakC,KAAM8M,EAAE,sCACrB,uBAAGxN,MAAO,CAAEO,SAAU,SAAWiN,EAAE,sCAGnC,kBAAC,GAAD,CACI9M,KAAM8M,EAAE,mBACR/O,QAlBM,WAClBF,EAAM4iD,oBAAsB5iD,EAAM6iD,iBAAiB7iD,EAAM4iD,oBACzD5iD,EAAMqU,YAAW,OAAOzpB,MAkBhB,kBAAC,GAAD,CACIuX,KAAM8M,EAAE,kBACR/O,QAjBK,WACjBF,EAAMqU,YAAW,OAAOzpB,QAsB5B,OACI,oCAEI,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI4P,OAAQwF,EAAMxF,OACdyF,UAAWO,KAAW,gCAEtB,8BAAO85B,KAGf,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI9/B,OAAQwF,EAAMxF,OACdyF,UAAWO,KAAW,oDAEtB,0BAAMP,UAAU,2CACXq6B,OC5DZwoB,GAAb,YACE,WAAYC,GAA6B,oBACvC,IACI/8C,EAAc,CAAE+8C,sBAFkB,mDACpB,0CAGP/8C,IALf,4BAAqDD,ICAxCi9C,GAAb,YACE,WAAYD,GAA6B,oBACvC,IACI/8C,EAAc,CAAE+8C,sBAFkB,mDACpB,wCAGP/8C,IALf,4BAAoDD,IC8HrCk9C,GA7GqD,SAACjjD,GAAuC,IAClGiP,EAAMiG,eAANjG,EADiG,EAuB/ExL,mBAASzD,EAAMkjD,yBAAyB,GAAGC,OAvBoC,oBAuBlGA,EAvBkG,aAwBrE1/C,mBArBd,SAAC2/C,GACrB,IAAIC,EAA0B,GAD2B,uBAEzD,IAFyD,IAEzD,EAFyD,iBAEhDnxC,EAFgD,QAGnDoxC,EAAe,IAAIn0D,KAAK+iB,EAAKqxC,cACjCD,EAAaE,QAAQF,EAAav5B,UAAY,GAC9C,IAAI05B,EAAYJ,EAAWh8C,MAAK,SAAAq8C,GAAC,OAAIA,EAAErf,QAAQsf,uBAAyBL,EAAaK,sBAAwBD,EAAEE,kBAAqB1xC,EAAK2xC,UAAY3xC,EAAK4xC,mBAAqB5xC,EAAKixC,cAClKv4D,IAAd64D,GACFA,EAAY,CACVv1D,UAAWgkB,EAAKqxC,aAChBlf,QAASnyB,EAAKqxC,aACdK,gBAAiB1xC,EAAK2xC,UAAY3xC,EAAK4xC,mBAAqB5xC,EAAKixC,OAEnEE,EAAaA,EAAWhzD,OAAOozD,IAE/BA,EAAUpf,QAAUnyB,EAAKqxC,cAZ7B,EAAiBH,EAAjB,+CAAyB,IAFgC,kFAiBzD,OAAOC,EAIoCU,CAAc/jD,EAAMkjD,4BAxBwC,oBAwBlGG,EAxBkG,aAyBxC5/C,mBAAgC,KAzBQ,oBAyBlGugD,EAzBkG,KAyBvEC,EAzBuE,KA4BzGngD,qBAAU,WACR,IAAIogD,EAAmC,GACvClkD,EAAMkjD,yBAAyBp5C,KAAI,SAAAoI,GAAS,IAAD,uBACzC,IADyC,IACzC,EADyC,iBAChC7iB,EADgC,SAEmB,IAAtD60D,EAAU5wB,WAAU,SAAA3P,GAAC,OAAIA,EAAEl2B,KAAO4B,EAAW5B,OAC/Cy2D,EAAU5gD,KAAKjU,IAFnB,EAAuB6iB,EAAKiyC,kBAA5B,+CAAgD,IADP,sFAO3CF,EAA4BC,KAC3B,CAAClkD,EAAMkjD,2BAEV,IAAMkB,EAAc,WAClBpkD,EAAMqU,cAGFgwC,EAAc,SAACC,GACnB,OAAOA,EAAM5yD,OAAS,GAGlB4oC,EACJ,yBAAKr6B,UAAU,yBAAyBwB,MAAO,CAAE08B,QAAS,UACxD,yBAAKl+B,UAAU,aACb,kBAAC,GAAD,CAAakC,KAAM,gDACnB,6BACE,uBAAGV,MAAO,CAAEu/C,aAAc,QAA1B,8BAA+DqD,EAAYL,GAA6B,GAAK,MAA7G,oBAAqIK,EAAYL,GAA6B,IAAM,GAApL,wCAA6Nb,EAA7N,OAAwOkB,EAAYrkD,EAAMkjD,0BAA4B,QAAU,OAAhS,QAA6SmB,EAAYrkD,EAAMkjD,0BAA4B,IAAM,GAAjW,KACA,wBAAIzhD,MAAO,CAAEqrC,UAAW,SACrBuW,EAAWv5C,KAAI,SAAC25C,GAAD,OAEd,uCAAaA,EAAUv1D,UAAU67B,UAAUzjB,WAAa,IAAMi+C,OAAOd,EAAUv1D,UAAUs2D,WAAa,GAAK,IAAMf,EAAUv1D,UAAUu2D,cAAcn+C,WAAnJ,QAAoKm9C,EAAUpf,QAAQta,UAAUzjB,WAAa,IAAMi+C,OAAOd,EAAUpf,QAAQmgB,WAAa,GAAK,IAAMf,EAAUpf,QAAQogB,cAAcn+C,WAApS,6BAA0Um9C,EAAUG,sBAK1V,yBAAKniD,MAAO,CAAE08B,QAAS,OAAQqX,eAAgB,WAC5Cx1C,EAAM0kD,eACL,kBAAC,KAAD,CAAM/2C,GlL/Ec,iBkL+EOlM,MAAO,CAAEQ,MAAO,SACzC,kBAAC,GAAD,CACEE,KAAK,OACLjC,QAASkkD,EACTniD,MAAM,WAIV,kBAAC,GAAD,CACEE,KAAM8M,EAAE,iBACR/O,QAASkkD,EACTniD,MAAM,aAQlB,OACE,oCACG+hD,GAA6BA,EAA0BtyD,OAAS,GAC/D,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE8I,OAAQwF,EAAMxF,OACdyF,UAAWO,KAAW,gCAErB85B,IAGL,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE9/B,OAAQwF,EAAMxF,OACdyF,UAAWO,KAAW,oDAErB85B,OClDAna,mBApDqD,SAACngB,GAAuC,IAClGiP,EAAMjP,EAANiP,EAeR,OACE,yBACEhP,UAAU,gBACVwB,MAAO,CAACE,gBAAiB,YAEzB,6BACE,wBAAIF,MAAO,CAAEg/C,WAAY,SACtBzgD,EAAM3Q,WAAWhB,UAAY,IAAM2R,EAAM3Q,WAAWlE,SACrD,yBACEsW,MAAO,CAAEi/C,MAAO,QAASC,OAAQ,UAAW9I,YAAa,OAAQpD,UAAW,OAC5Ev0C,QAvBW,WACnBF,EAAM3Q,YAAc2Q,EAAM4gD,gBAAkB5gD,EAAM4gD,gBAAe,EAAM5gD,EAAM3Q,WAAW5B,MAwBhF,kBAAC,KAAD,CAAiB2S,KAAMg0C,SAI3B,yBAAK3yC,MAAO,CAAE8K,SAAU,WAAY40C,OAAQ,IAAK3tC,MAAO,MACtD,kBAAC,KAAD,CAAM7F,GAAIuS,+BAAyClgB,EAAM3Q,WAAWoiC,UAClE,kBAAC,GAAD,CACEtvB,KAAMnC,EAAM3Q,WAAWqtD,WAAa,UAAYztC,EAAE,iBAAmBqyC,GAAiB5qD,QAAU,eAChGqL,OAAQ,OACRC,SAAU,OACVvB,SAAUT,EAAM3Q,WAAWqtD,gBAMnC,uBAAGj7C,MAAO,CAAEo/C,SAAU,aAAc8D,MAAO,SAAW3kD,EAAM3Q,YAAc2Q,EAAM3Q,WAAWd,OAC3F,2BAAIyR,EAAM3Q,WAAWyxD,gBACrB,qCAAOliC,GAAW5e,EAAM3Q,WAAWnB,WAAnC,eAAoD0wB,GAAW5e,EAAM3Q,WAAWg1C,WAChF,uBAAG5iC,MAAO,CAAEi/C,MAAO,OAAQM,aAAc,QAxCnB,SAAChmD,GACzB,IAAImH,EAAO,GACP2+C,EAAiB9gD,EAAMpJ,0BAA0ByQ,MAAK,SAAAu9C,GAAE,OAAIA,EAAGpqC,IAAI/sB,KAAOuN,KAI9E,OAHI8lD,IACF3+C,EAAO2+C,EAAejwD,OAAOwkB,YAExBlT,EAkC8C0iD,CAAkB7kD,EAAM3Q,WAAWtB,iCChC7EoyB,mBApB+D,SAACngB,GAA4C,IACjHiP,EAAMjP,EAANiP,EAER,OACE,yBAAKxN,MAAO,CAAES,OAAQ,OAAQuyC,UAAW,OAAQuM,aAAc,SAC7D,wBAAI/gD,UAAU,mBAAmBgP,EAAE,iBAAmBqyC,GAAiB5qD,QAAU,WAEjF,yBAAKuJ,UAAU,eACZD,EAAM3L,YAAYyV,KAAI,SAAA6Z,GAAC,OACtB,kBAAC,GAAD,CACEt0B,WAAYs0B,EACZ/sB,0BAA2BoJ,EAAMpJ,0BACjCgqD,eAAgB5gD,EAAM4gD,yB,8BCxBbkE,G,iQAAAA,GACMC,KAAe,wBADrBD,GAEME,OAAiB,yBAFvBF,GAGMG,MAAgB,yB,IC6FrCC,G,YACJ,WAAYllD,GAAa,IAAD,8BACtB,8CAAMA,KA8BRmlD,gBA/BwB,uCA+BN,WAAO/9C,EAAcxW,GAArB,eAAAlD,EAAA,sEACG4uC,GAAwBl1B,EAAMxW,GADjC,cACVuR,EADU,yBAETA,GAFS,2CA/BM,wDAGtB,EAAK1L,MAAQ,CACXqL,WAAW,EACXsjD,SAAS,EACTC,mBAAmB,EACnBzC,mBAAoB,GACpB0C,YAAY,EACZC,eAAgB,GAChB9W,gBAAY7jD,EACZ46D,qBAAiB56D,EACjB66D,sBAAkB76D,EAClB8xC,eAAe,EACfwmB,8BAA0Bt4D,EAC1B86D,kCAAkC,EAClCC,mBAAe/6D,GAGjB,EAAKoV,MAAM4lD,oCACX,EAAK5lD,MAAMmyB,gCACXwK,QAAQC,IAAI,CACV,EAAKuoB,gBAAgB,wCAAyC,cAC9D,EAAKA,gBAAgB,wDAAyD,mBAC9E,EAAKA,gBAAgB,+CAAgD,sBACpE78C,MAAK,SAAAa,GACNA,EAAEmR,SAAQ,SAAAuZ,GAAC,OAAI,EAAK1lB,S,2VAAL,IAAmB,EAAK1X,MAAxB,eAAgCo9B,EAAEzsB,KAAOysB,QACxD,EAAK1lB,SAAS,CAAEuuB,eAAe,OA3BX,E,kFAqCjBztC,KAAK+Q,MAAMpJ,2BACd3H,KAAK+Q,MAAMq9B,+BAEbpuC,KAAKkf,SAAS,CAAErM,WAAW,IAC3B7S,KAAK02D,kB,sCAID12D,KAAK+Q,MAAMpJ,2BACb3H,KAAKkf,SAAS,CAAEw3C,cAAe12D,KAAK+Q,MAAMpT,UAAYqC,KAAK+Q,MAAMpJ,0BAA0BlF,OAAS,M,yCAIrFsqB,EAAkD6pC,EAAkDC,IAEhH9pC,EAAUvnB,4BAA8BunB,EAAUzmB,mCAEjDtG,KAAK+Q,MAAMvL,4BAA8BxF,KAAK+Q,MAAMrL,kCACpD1F,KAAK+Q,MAAMzK,gCAAkCtG,KAAK+Q,MAAMxK,uCAE5DvG,KAAKwH,MAAM2uD,QAAUn2D,KAAKkf,SAAS,CAAEo3C,etL5IN,iBsL4I4CD,YAAY,IAAUr2D,KAAKkf,SAAS,CAAEo3C,etL3ItE,6BsL2IwHD,YAAY,KAG7Kr2D,KAAKwH,MAAMqL,WAAa7S,KAAK+Q,MAAMpJ,2BACrC3H,KAAKkf,SAAS,CAAErM,WAAW,KAGzB7S,KAAK+Q,MAAM7J,sBAA0BlH,KAAK+Q,MAAM5J,uBAAyB4lB,EAAU7lB,uBAAyBlH,KAAK+Q,MAAM7J,uBACzHlH,KAAK+Q,MAAM+lD,yBAAyB92D,KAAK+Q,MAAM7J,qBAAqB8V,QAAO,SAAA5c,GAAU,OAAIA,EAAWoH,QAAU6qD,GAAiBC,aAC/HtyD,KAAK+Q,MAAMgmD,2BAA2B,UAGPp7D,IAA7BqE,KAAKwH,MAAMkvD,eACV12D,KAAK+Q,MAAMpJ,2BACd3H,KAAK02D,kB,sCAKOt2D,EAA2BmhD,GACrCA,GACFvhD,KAAK+Q,MAAM+lD,yBAAyB92D,KAAK+Q,MAAM5J,sBAAsB6V,QAAO,SAAA0X,GAAC,OAAIA,EAAEt0B,WAAW5B,KAAO4B,EAAW5B,OAEhHwB,KAAK+Q,MAAMgmD,2BACT/2D,KAAK+Q,MAAM3J,wBACTpH,KAAK+Q,MAAM3J,wBAAwBhG,OAAO,CAAEoG,MAAO6qD,GAAiBC,SAAUlyD,WAAYA,IAC1F,CAAC,CAAEoH,MAAO6qD,GAAiBC,SAAUlyD,WAAYA,OAGrDJ,KAAK+Q,MAAMgmD,2BAA2B/2D,KAAK+Q,MAAM3J,wBAAwB4V,QAAO,SAAA0X,GAAC,OAAIA,EAAEt0B,WAAW5B,KAAO4B,EAAW5B,OAEpHwB,KAAK+Q,MAAM+lD,yBACT92D,KAAK+Q,MAAM5J,sBACTnH,KAAK+Q,MAAM5J,sBAAsB/F,OAAO,CAAEoG,MAAO6qD,GAAiBC,SAAUlyD,WAAYA,IACxF,CAAC,CAAEoH,MAAO6qD,GAAiBC,SAAUlyD,WAAYA,Q,wFAK1B8G,G,mFACzB8vD,GAAiB,E,8BACC9vD,E,yEAAb+vD,E,kBACqE14D,EAAa04D,EAAU72D,WAAWT,6B,oBAC1FiC,OAAOslB,MAAQ,G,wBACjC8vC,GAAiB,E,ySAIrBh3D,KAAK+Q,MAAMmiD,mBAAmB8D,G,kBACvBA,G,0SAOP,IAHIh0B,EAA0B,GAC1Br9B,EAAoC,G,4BAExC,EAAsB3F,KAAK+Q,MAAM5J,sBAAjC,+CAAS8vD,EAA+C,QACtDj0B,EAAgBA,EAAc5hC,OAAO61D,EAAU72D,YAAc62D,EAAU72D,WAAW5B,IAClFmH,EAAmBA,EAAiBvE,OAAO61D,EAAU72D,YAAc62D,EAAU72D,Y,8OAG/EJ,KAAKkf,SAAS,CAAErM,WAAW,I,oBAGF7S,KAAK+Q,MAAMgyB,uBAAuBC,G,eAAnDp9B,E,iBACA5F,KAAK+Q,MAAMmmD,uBAAuBvxD,G,yBACCyP,GAA8B,IAAI2+C,GAA+BnuD,I,cAApGuxD,E,OAAgH30D,MACxFC,OAAS,G,uBACrC00D,EAA0Bt8C,KAAI,SAAAq5C,GAAWA,EAAMI,aAAe,IAAIp0D,KAAKg0D,EAAMI,iBAC7Et0D,KAAKkf,SAAS,CAAE+0C,yBAA0BkD,EAA2BV,kCAAkC,IACjG,IAAIW,aAAa,0C,yBAEIhiD,GAAS,IAAIy+C,GAAgCjuD,I,eAApE0B,E,iBACAtH,KAAK+Q,MAAMsmD,qBAAqB/vD,EAAe9E,M,QACrDxC,KAAKs3D,aAAahwD,G,mDAElBkS,QAAQC,IAAR,M,4KAISnS,GACmB,MAA1BA,EAAewO,QACjB9V,KAAKkf,SAAS,CAAEo3C,etLnNe,kBsLmNuBD,YAAY,M,mDAIzC9qD,EAAiB80B,GAC5CrgC,KAAKkf,SAAS,CAAEk3C,kBAAmB7qD,EAAQooD,mBAAoBtzB,GAA8B,O,wCAG7Et0B,GAChB,IAAImH,EAAO,GACP2+C,EAAiB7xD,KAAK+Q,MAAMpJ,0BAA0ByQ,MAAK,SAAAu9C,GAAE,OAAIA,EAAGpqC,IAAI/sB,KAAOuN,KAInF,OAHI8lD,IACF3+C,EAAO2+C,EAAejwD,OAAOwkB,YAExBlT,I,+DAGgCqkD,GACvCA,EAAa,IAAIr3D,KAAKq3D,GACtB,IAAIC,EAAcC,eACdC,EAAmBC,mBAASJ,EAAY,GAC5C,OAAOK,mBAAiBJ,EAAa,CAAEh1C,MAAOk1C,EAAkB92C,IAAK22C,KAAiBC,EAAYK,iBAAmBN,EAAWM,iB,+BAGzHz3D,GACP,OAAOJ,KAAK83D,yCAAyC13D,EAAWg1C,UAC3Dh1C,EAAWtB,4BAA8B+2D,GAAgBC,O,+BAGlC,IAAD,OAGrBhD,GAFQ9yD,KAAK+Q,MAAXiP,EAEgB,SACtB5f,EACA+xD,EACAM,GAEA,GAAIryD,EAAY,CACd,IAAI4xD,EAAiB,EAAK4D,kBAAkBx1D,EAAWA,WAAWtB,4BAClE,OAAIsB,EAAWoH,QAAU6qD,GAAiBC,SAEtC,yBAAKthD,UAAU,gBAAgBwB,MAAO,CAAEE,gBAAiBy/C,EAAQ,UAAY,YAC3E,kBAAC,GAAD,CACE/xD,WAAYA,EAAWA,WACvB6xD,mBAAoB8F,EAAiBz2C,KAAK,GAC1C9Z,MAAOpH,EAAWoH,MAClB2qD,MAAOA,IAAS,EAChBC,uBAAwB,EAAK4F,gBAAgB12C,KAAK,GAClDqwC,eAAgB,EAAKsG,6BAA6B32C,KAAK,GACvD0wC,eAAgBA,KAMpB,yBACEhhD,UAAU,gBACVwB,MAAO,CAAEE,gBAAiBtS,EAAWoH,QAAU6qD,GAAiBE,MAAQ,UAAYnyD,EAAWoH,QAAU6qD,GAAiB9jD,OAAS,eAAY5S,IAE/I,kBAAC,GAAD,CACEyE,WAAYA,EAAWA,WACvBuyD,eAAgBvyD,EAAWoH,QAAU6qD,GAAiB5qD,QAAUswD,EAAiBz2C,KAAK,QAAQ3lB,EAC9F6L,MAAOpH,EAAWoH,MAClBmqD,eAAgB,EAAKsG,6BAA6B32C,KAAK,GACvD0wC,eAAgBA,EAChBY,SAAU,EAAKA,SAASxyD,EAAWA,eAO3C,GAAIqyD,EACF,OACE,yBAAKzhD,UAAU,gBAAgBwB,MAAO,CAAEE,gBAAiB,YACvD,kBAAC,GAAD,CACE+/C,mBAAoBA,EACpBjrD,MAAO6qD,GAAiBG,UACxBG,eAAgB,SAAC52B,GACf,EAAK7c,SAAS,CAAEm3C,YAAY,EAAMC,eAAgBrlC,uBAAkCwhC,EAAmBj0D,WAS/Gu5D,EAAmB,SAAC33D,GACpBA,GAAcA,EAAWA,WAAW5B,KAClC4B,EAAWoH,QAAU6qD,GAAiBE,OAASnyD,EAAWoH,QAAU6qD,GAAiBC,UACvF,EAAKvhD,MAAMmnD,qBAAqB93D,EAAWA,WAAW5B,IACtD,EAAKuS,MAAMi8B,yBAAyB,GACpC,EAAK9tB,SAAS,CAAErM,WAAW,EAAMsjD,SAAS,KACjC/1D,EAAWoH,QAAU6qD,GAAiB9jD,SAC/C,EAAKwC,MAAMonD,yBAAyB/3D,EAAWA,WAAW5B,IAC1D,EAAK0gB,SAAS,CAAEi3C,SAAS,OAK/B,OAAIn2D,KAAKwH,MAAM6uD,WAEX,kBAAC,IAAD,CAAU33C,GAAI1e,KAAKwH,MAAM8uD,iBAIzB,oCACIt2D,KAAKwH,MAAMimC,eAAiBztC,KAAK+Q,MAAMpJ,0BACvC,yBAAKqJ,UAAU,oBACb,kBAAC,GAAD,MACIhR,KAAK+Q,MAAMlH,cACX,oCACE,wBAAImH,UAAU,uBAAuBhR,KAAKwH,MAAMg4C,WAAYhhC,OAC5D,uBAAGxN,UAAU,yBAAyBoT,qCAA0BpkB,KAAKwH,MAAMg4C,WAAY17B,YAI7F,kBAAC,GAAD,CACExG,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGVhe,KAAKwH,MAAMkvD,eACV,kBAAC,GAAD,CACEvlD,KAAMkqC,KACNnqC,YAAa,WACX,EAAKH,MAAMuiD,6BAA4B,IAEzCtiD,UAAU,WACVxS,GAAI,kBAGNwB,KAAKwH,MAAMqL,WAAa7S,KAAK+Q,MAAM7L,qBACnC,yBAAK8L,UAAU,uBACb,kBAAC,GAAD,OAEChR,KAAK+Q,MAAM7C,2BACd,oCACE,yBAAK8C,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cACb,wBAAIwB,MAAO,CAAES,OAAQ,OAAQR,MAAO,YAAczS,KAAKwH,MAAM+uD,gBAAiB/3C,SAGlF,yBAAKxN,UAAU,MAAMwB,MAAO,CAAEm2C,WAAY,OAAQnD,UAAW,OAAQoD,YAAa,SAC/ExkC,qCAA0BpkB,KAAKwH,MAAM+uD,gBAAiBzyC,WAGvD9jB,KAAK+Q,MAAM7J,sBAAwI,IAAhHlH,KAAK+Q,MAAM7J,qBAAqB8V,QAAO,SAAA5c,GAAU,OAAIA,EAAWoH,QAAU6qD,GAAiBC,YAAU7vD,QACxI,yBAAKuO,UAAU,+BACb,kBAAC,GAAD,OAIFhR,KAAK+Q,MAAM3L,aAAepF,KAAK+Q,MAAM7J,sBAAwBlH,KAAK+Q,MAAM7J,qBAAqBzE,OAAS,EACtG,oCAEGzC,KAAK+Q,MAAM7J,qBAAqB8V,QAAO,SAAA5c,GAAU,OAAIA,EAAWoH,QAAU6qD,GAAiBC,YAAU7vD,OAAS,GAC7G,kBAAC,GAAD,CACE0E,sBAAuBnH,KAAK+Q,MAAM5J,sBAClCC,wBAAyBpH,KAAK+Q,MAAM3J,wBACpCI,MAAO6qD,GAAiBC,SACxBQ,gBAAiBA,EAAgBxxC,KAAKthB,MACtCmzD,mBAAoBnzD,KAAKo4D,yBAAyB92C,KAAKthB,MACvDozD,WAAYpzD,KAAKozD,WAAW9xC,KAAKthB,QAKpCA,KAAK+Q,MAAM7J,qBAAqB8V,QAAO,SAAC5c,GAAD,OAAgBA,EAAWoH,QAAU6qD,GAAiBE,SAAO9vD,OAAS,GAC5G,kBAAC,GAAD,CACEyE,qBAAsBlH,KAAK+Q,MAAM7J,qBAAqB8V,QAAO,SAAC5c,GAAD,OAAgBA,EAAWoH,QAAU6qD,GAAiBE,SACnH/qD,MAAO6qD,GAAiBE,MACxBO,gBAAiBA,EAAgBxxC,KAAKthB,QAIzCA,KAAK+Q,MAAM7J,qBAAqB8V,QAAO,SAAA5c,GAAU,OAAIA,EAAWoH,QAAU6qD,GAAiB9jD,UAAQ9L,OAAS,GAC3G,kBAAC,GAAD,CACEyE,qBAAsBlH,KAAK+Q,MAAM7J,qBAAqB8V,QAAO,SAAC5c,GAAD,OAAgBA,EAAWoH,QAAU6qD,GAAiB9jD,UACnH/G,MAAO6qD,GAAiB9jD,OACxBukD,gBAAiBA,EAAgBxxC,KAAKthB,QAKzCA,KAAK+Q,MAAM7J,qBAAqB8V,QAAO,SAAA5c,GAAU,OAAIA,EAAWoH,QAAU6qD,GAAiB5qD,WAAShF,OAAS,GAC5G,kBAAC,GAAD,CACE2C,YACEpF,KAAK+Q,MAAM7J,qBACR8V,QAAO,SAAC5c,GAAD,OAAgBA,EAAWoH,QAAU6qD,GAAiB5qD,WAC7DoT,KAAI,SAAAo8C,GAAS,OAAIA,EAAU72D,cAEhCuH,0BAA2B3H,KAAK+Q,MAAMpJ,0BACtCgqD,eAAgB3xD,KAAKi4D,6BAA6B32C,KAAKthB,SAM7D,oCACE,yBAAKgR,UAAU,yBAAyBwB,MAAO,CAAEm2C,WAAY,OAAQnD,UAAW,MAAOoD,YAAa,SACjGxkC,qCAA0BpkB,KAAKwH,MAAMgvD,iBAAkB1yC,WAM5D9jB,KAAK+Q,MAAM1J,qBAAuBrH,KAAK+Q,MAAM1J,oBAAoB5E,OAAS,GAC1E,kBAAC,GAAD,CACEswD,kBAAmB/yD,KAAK+Q,MAAM1J,oBAC9BG,MAAO6qD,GAAiBG,UACxBM,gBAAiBA,EAAgBxxC,KAAKthB,WASlD,yBAAKgR,UAAU,uBACb,kBAAC,GAAD,OAIHhR,KAAK+Q,MAAMsnD,mBAAsB,kBAAC,GAAD,MAElC,kBAACC,GAAD,CACE/sD,OAAQvL,KAAKwH,MAAM4uD,kBACnBzC,mBAAoB3zD,KAAKwH,MAAMmsD,mBAC/BvuC,WAAYplB,KAAKi4D,6BAA6B32C,KAAKthB,MACnD4zD,iBAAkB5zD,KAAK+Q,MAAM6iD,iBAAiBtyC,KAAKthB,QAGpDA,KAAKwH,MAAMysD,0BACV,kBAAC,GAAD,CACE1oD,OAAQvL,KAAKwH,MAAMivD,iCACnBrxC,WAAY,kBAAM,EAAKlG,SAAS,CAAEu3C,kCAAkC,KACpExC,yBAA0Bj0D,KAAKwH,MAAMysD,yBACrCwB,gBAAgB,S,GA/XOpkD,aA6ctB+/C,qBACblgC,eACAjJ,aAvEsB,SAACzgB,GACvB,MAAO,CACLpC,YAAaoC,EAAMoG,OAAOxI,YAC1BF,qBAAsBsC,EAAMoG,OAAO1I,qBACnCgJ,0BAA2B1G,EAAMoG,OAAOM,0BACxC/I,0BAA2BqC,EAAMoG,OAAOzI,0BACxCK,2BAA4BgC,EAAMoG,OAAOpI,2BACzCE,gCAAiC8B,EAAMoG,OAAOlI,gCAC9CY,+BAAgCkB,EAAMoG,OAAOtH,+BAC7CC,oCAAqCiB,EAAMoG,OAAOrH,oCAClD8xD,kBAAmB7wD,EAAMqH,MAAMhK,gBAAgB0G,OAC/CrE,qBAAsBM,EAAMoG,OAAO1G,qBACnCG,oBAAqBG,EAAMoG,OAAOvG,oBAClCF,sBAAuBK,EAAMoG,OAAOzG,sBACpCC,wBAAyBI,EAAMoG,OAAOxG,wBACtCxB,SAAU4B,EAAMoG,OAAOhI,SACvB+B,0BAA2BH,EAAMoG,OAAOjG,0BACxCvL,UAAWoL,EAAM+F,KAAKnR,UACtBuB,SAAU6J,EAAM+F,KAAK5P,aAIE,SAACqY,GAC1B,MAAO,CACLktB,8BAA+B,WAAQltB,EAASktB,OAChDyzB,kCAAmC,WAAQ3gD,EjG2B7C,uCACE,WAAOA,EAAUoD,GAAjB,SAAA3a,EAAA,sEACQuX,EAlIR,uCAAO,WAAOA,EAAUoD,GAAjB,eAAA3a,EAAA,6DACLuX,EAAS,CACPjK,KhHjXkC,6BgHkXlCqB,SAAS,IAHN,SAKoCgI,GAAqB,IAAI+qB,IAC/D9mB,MAAK,SAACxD,GACL,IAAI0iD,EAAmC,GAuBvC,OAtBA1iD,EAASrT,KAAK6oB,SAAQ,SAACjrB,GACrBm4D,EAAgBlkD,KAAK,CACnB7V,GAAI4B,EAAWC,GACfmiC,SAAUpiC,EAAWqiC,SACrB3jC,2BAA4BsB,EAAWE,2BACvCX,4BAA6BS,EAAWqB,4BACxCzC,gBAAiBoB,EAAWM,gBAC5BtB,UAAWgB,EAAWS,UACtB3E,SAAUkE,EAAWU,SACrB03D,YAAap4D,EAAWq4D,YACxBrjB,QAASh1C,EAAWs4C,QACpBp5C,MAAOc,EAAWY,MAClB6wD,eAAgBzxD,EAAWs4D,eAC3Bz5D,UAAWmB,EAAWO,UACtB8sD,WAAYrtD,EAAWu4D,aAEzBvzD,EAAcmzD,KAEhBviD,EAAS,CACPjK,KhHzY8B,6BgH0Y9BqB,QAAShI,IAEJA,KAERuQ,OAAM,SAACjK,GAKN,OAJAsK,EAAS,CACPjK,KhH/Y8B,6BgHgZ9BqB,QAAS1B,IAEJ,MArCN,cAKDtG,EALC,yBAuCEA,GAvCF,2CAAP,qDAAM,IAmIDiU,MAAK,SAACa,GAzCb,IAAC9U,EA0CO4Q,GA1CP5Q,EA0C6C8U,EA1C9C,uCACE,WAAOlE,EAAUoD,GAAjB,2BAAA3a,EAAA,yDACMyI,EAA0D,KAC1D9B,GAAeA,EAAY3C,OAAS,GAF1C,iBAGI,IAHJ,4BAGI,EAAuB2C,EAAvB,+CAAShF,EAA2B,QAC9BiyD,GAAgCvpC,SAAS1oB,EAAWpB,mBAA6F,IAAzEqzD,GAAgCjuB,QAAQhkC,EAAWpB,iBAC7HkI,EAAuBA,EAAqB9F,OAAO,CAAEoG,MAAO,WAAYpH,WAAYA,IAC3EiyD,GAA6BvpC,SAAS1oB,EAAWpB,mBAA0F,IAAtEqzD,GAA6BjuB,QAAQhkC,EAAWpB,iBAC9HkI,EAAuBA,EAAqB9F,OAAO,CAAC,CAAEoG,MAAO,QAASpH,WAAYA,KACzEiyD,GAA8BvpC,SAAS1oB,EAAWpB,mBAA2F,IAAvEqzD,GAA8BjuB,QAAQhkC,EAAWpB,iBAChIkI,EAAuBA,EAAqB9F,OAAO,CAAC,CAAEoG,MAAO,SAAUpH,WAAYA,KAC1EiyD,GAAgCvpC,SAAS1oB,EAAWpB,mBAA6F,IAAzEqzD,GAAgCjuB,QAAQhkC,EAAWpB,iBACpIkI,EAAuBA,EAAqB9F,OAAO,CAAC,CAAEoG,MAAO,WAAYpH,WAAYA,MAC5EiyD,GAA+BvpC,SAAS1oB,EAAWpB,mBAA4F,IAAxEqzD,GAA+BjuB,QAAQhkC,EAAWpB,oBAClIkI,EAAuBA,EAAqB9F,OAAO,CAAC,CAAEoG,MAAO,UAAWpH,WAAYA,MAb5F,uOAgBI8G,EAAqB0xD,MAAK,SAACn6D,EAAwBo6D,GAAzB,OAAoD73B,GAAwBoD,QAAQ3lC,EAAE+I,OAASw5B,GAAwBoD,QAAQy0B,EAAErxD,UAhB/J,QAkBMN,EAAqBzE,OAAS,IAChCyE,OAAuBvL,GAEzBqa,EAAS,CACPjK,KhHlciC,4BgHmcjCqB,QAASlG,IAvBb,2EADF,6DAuCE,2CADF,0DiG1BEgxD,qBAAsB,SAAC73B,GAAD,OAA0BrqB,EjG+ElD,SAACqqB,GAAD,8CACE,WAAOrqB,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CACPjK,KhHpiBwC,mCgHqiBxCqB,SAAS,IAEXgI,GACE,IAAIgrB,GAAyBC,IAE5BhnB,KAHH,uCAGQ,WAAOxD,GAAP,6BAAApX,EAAA,sEACuBI,EAAei6D,kBAAkBjjD,EAASrT,MADjE,UACAsC,EADA,OAEAF,EAAkC,CACpCpG,GAAIqX,EAASrT,KAAKnC,GAClBvB,2BAA4B+W,EAASrT,KAAKlC,2BAC1CvB,iBAAkB8W,EAASrT,KAAK/B,iBAChCzB,gBAAiB6W,EAASrT,KAAK9B,gBAC/BzB,UAAW4W,EAASrT,KAAK7B,UACzBxB,UAAW0W,EAASrT,KAAK5B,UACzBxB,UAAWyW,EAASrT,KAAK3B,UACzB3E,SAAU2Z,EAASrT,KAAK1B,SACxBzB,YAAawW,EAASrT,KAAKzB,YAC3BzB,MAAOuW,EAASrT,KAAKxB,MACrBzB,YAAasW,EAASrT,KAAKvB,YAC3BtB,4BAA6BkW,EAASrT,KAAKf,4BAC3C7B,oBAAqB,IAAIM,KAAK2V,EAASrT,KAAK5C,qBAC5C4iC,SAAU3sB,EAASrT,KAAKigC,WAEtB5sB,EAASrT,KAAKtB,SAlBd,iBAoBF,IADA0D,EAAcpF,SAAW,GAnBvB,4BAoBF,EAAoBqW,EAASrT,KAAKtB,SAAlC,+CAASC,EAAmC,QAC1CyD,EAAcpF,SAAWoF,EAAcpF,SAAU4B,OAAO,CAAC,CAAEC,aAAcF,EAAQG,aAAwBC,YAAaJ,EAAQK,eArB9H,yOAwBJwU,EAAS,CACPjK,KhHlkBoC,mCgHmkBpCqB,QAAS,CAAExI,cAAeA,EAAeE,eAAgBA,KA1BvD,4EAHR,uDAgCG6Q,OAAM,SAACjK,GACNsK,EAAS,CACPjK,KhHvkBoC,mCgHwkBpCqB,QAAS1B,OAxCjB,2CADF,wDiG/E2DwsD,CAAqB73B,KAC9E0M,oBAAqB,WACnB/2B,EAAS,CAAEjK,KjN3dY,mBiN6dzBihC,yBAA0B,SAACjhB,GACzB/V,EAAS,CAAEjK,KjNnd0B,8BiNmdqBqB,QAAS2e,KAErEunC,4BAA6B,SAAC/nD,GAC5ByK,EAAS,CAAEjK,K7MhgBf,oC6MggBwDqB,QAAS7B,KAE/D4sD,yBAA0B,SAAC93B,GACzBrqB,EjGmHJ,SAACqqB,GAAD,8CACE,WAAOrqB,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CACPjK,KhHtkByC,oCgHukBzCqB,SAAS,IAEXgI,GACE,IAAIorB,GAA6BH,IAEhChnB,MAAK,SAACxD,GACL,IAAIxP,EAAwBtE,EAAsBg3D,6BAA6BljD,EAASrT,MACpFP,EAA0C,CAC5CzD,GAAIqX,EAASrT,KAAKnC,GAClBjB,UAAWyW,EAASrT,KAAK3B,UACzB3E,SAAU2Z,EAASrT,KAAK1B,SACxBxB,MAAOuW,EAASrT,KAAKxB,MACrBzB,YAAasW,EAASrT,KAAKvB,YAC3B5B,YAAa,IAAIa,KAAK2V,EAASrT,KAAKzB,aACpCi4D,WAAYnjD,EAASrT,KAAKy2D,YAE5B,GAAIpjD,EAASrT,KAAKtB,SAAU,CAC1Be,EAAkBzC,SAAW,GADH,2BAE1B,YAAoBqW,EAASrT,KAAKtB,SAAlC,+CAA4C,CAAC,IAApCC,EAAmC,QAC1Cc,EAAkBzC,SAAWyC,EAAkBzC,SAAU4B,OAAO,CAAC,CAAEC,aAAcF,EAAQG,aAAwBC,YAAaJ,EAAQK,gBAH9G,mFAM5BwU,EAAS,CACPjK,KhH7lBqC,oCgH8lBrCqB,QAAS,CAAEnL,kBAAmBA,EAAmBoE,sBAAuBA,QAG3EsP,OAAM,SAACjK,GACNsK,EAAS,CACPjK,KhHlmBqC,oCgHmmBrCqB,QAAS1B,OAjCjB,2CADF,wDiGnHaysD,CAAyB93B,KAEpCy2B,yBAA0B,SAAC3vD,GACzB6O,EAAS,CAAEjK,KjNpc0B,8BiNocqBqB,QAASjG,KAErE4vD,2BAA4B,SAAC3vD,GAC3B4O,EAAS,CAAEjK,KjNtc4B,gCiNscqBqB,QAAShG,KAEvEwsD,iBAAkB,SAACvzB,GACjBrqB,EjGwBJ,SAACqqB,GAAD,8CACE,WAAOrqB,EAAUoD,GAAjB,qBAAA3a,EAAA,uDACMyI,EAAuBkS,IAAWxL,OAAO1G,sBACpBkR,MAAK,SAACsc,GAAD,OAA4BA,EAAEt0B,WAAW5B,KAAO6hC,MAAoH,aAAnGn5B,EAAqBkR,MAAK,SAACsc,GAAD,OAA4BA,EAAEt0B,WAAW5B,KAAO6hC,KAAe74B,QAClLL,EAAwBiS,IAAWxL,OAAOzG,sBAC1CC,EAA0BgS,IAAWxL,OAAOxG,wBAC5CD,EAAsBiR,MAAK,SAACsc,GAAD,OAA4BA,EAAEt0B,WAAW5B,KAAO6hC,MAC7El5B,EAAsBslB,OAAOtlB,EAAsBk9B,WAAU,SAAC3P,GAAD,OAA4BA,EAAEt0B,WAAW5B,KAAO6hC,KAAe,GAC5HrqB,EAAS,CACPjK,KhH3e+B,8BgH4e/BqB,QAASjG,KAEFC,EAAwBgR,MAAK,SAACsc,GAAD,OAA4BA,EAAEt0B,WAAW5B,KAAO6hC,OACtFj5B,EAAwBqlB,OAAOrlB,EAAwBi9B,WAAU,SAAC3P,GAAD,OAA4BA,EAAEt0B,WAAW5B,KAAO6hC,KAAe,GAChIrqB,EAAS,CACPjK,KhHhfiC,gCgHifjCqB,QAAShG,MAIfF,EAAqBulB,OAAOvlB,EAAqBm9B,WAAU,SAAC3P,GAAD,OAA4BA,EAAEt0B,WAAW5B,KAAO6hC,KAAe,GAC1HrqB,EAAS,CACPjK,KhHzfiC,4BgH0fjCqB,QAASlG,KAEP9B,EAAcgU,IAAWxL,OAAOxI,aACxBqnB,OAAOrnB,EAAYi/B,WAAU,SAAC3P,GAAD,OAAsBA,EAAEl2B,KAAO6hC,KAAe,GACvFrqB,EAAS,CACPjK,KhH5hBkC,6BgH6hBlCqB,QAAShI,IAEXoR,GAAY,IAAIyqB,GAAqBZ,IA9BvC,2CADF,wDiGxBauzB,CAAiBvzB,KAE5B0C,uBAAuB,WAAD,4BAAE,WAAOC,GAAP,eAAAvkC,EAAA,sEACDuX,EAAS+sB,GAAuBC,IAD/B,cAClBp9B,EADkB,yBAEf8nC,QAAQ8Z,QAAQ5hD,IAFD,2CAAF,mDAAC,GAIvBsxD,uBAAwB,SAACvxD,GAEvB,OADAqQ,EAAS,CAAEjK,KjN1euB,2BiN0eqBqB,QAASzH,IACzD+nC,QAAQ8Z,WAEjB6P,qBAAsB,SAAC/rD,GAErB,OADA0K,EAAS,CAAEjK,KjNvdsB,0BiNudqBqB,QAAS9B,IACxDoiC,QAAQ8Z,WAEjB0L,mBAAoB,SAACxrD,GACnBsO,EAAS,CAAEjK,KjNpdmB,uBiNodqBqB,QAAS1F,KAE9D0mC,6BAA8B,WAC5Bp4B,EAASytB,WAKA2tB,CAGb6E,I,SCniBmBiD,I,oNACjBC,cAAgB,SAACn5C,GACb,IAAIo5C,EAA4B,GAahC,OAXA,EAAKroD,MAAM9I,QAAQojB,SAAQ,SAACguC,EAAaC,GACjCD,GACAD,EAAW/kD,KACP,yBAAKrD,UAAU,aAAamG,IAAKmiD,GAC7B,0BAAMtoD,UAAWO,KAAW,EAAKR,MAAMwoD,qBAAsBv5C,EAAEs5C,IAC/D,0BAAMtoD,UAAWO,KAAW,EAAKR,MAAMyoD,uBAAwBH,QAMxED,G,yEAGD,IAAD,OACL,OACI,kBAAC,KAAD,MACK,SAACp5C,GACE,OACI,oCACI,kBAAC,GAAD,KACI,yBAAKhP,UAAWO,KAAW,oBAAqB,EAAKR,MAAM0oD,4BACtD,EAAKN,cAAcn5C,KAG5B,kBAAC,GAAD,KACI,yBACIhP,UAAWO,KACP,2BACA,EAAKR,MAAM0oD,4BAGd,EAAKN,cAAcn5C,a,GApCnB3O,cCwDtBqoD,I,OArD+D,SAAC,GAIxE,IAHHnxD,EAGE,EAHFA,qBACA0I,EAEE,EAFFA,QACAiN,EACE,EADFA,mBACE,EAC4C1J,qBAD5C,oBACKmlD,EADL,KACsBC,EADtB,KA4BF,OA1BA/kD,qBAAU,WACN,IAAI9C,EAAqB,CAAE3B,OAAQ,GAAkB4B,SAAU,IAC/D,GAAIzJ,EAAqB3G,OAAOuP,KAAM,CAClC,IAAMe,EAAQ3J,EAAqB3G,OAAOuP,KAAKe,MAAM,KACrD,GAAqB,IAAjBA,EAAMzP,OACNsP,EAAS,CACL3B,OAAQ8B,EAAM,GACdF,SAAUE,EAAM,GAAGC,QAAQ,MAAO,KAEtCC,KAAQC,IAAIC,MACZF,KAAQC,IAAIwnD,MAEZD,EAAmBzoD,aAAKY,QACrB,CACH,IAAMG,EAAQ3J,EAAqB3G,OAAOuP,KAAKe,MAAM,KACjDH,EAAqB,CACrB3B,OAAQ8B,EAAMua,OAAO,EAAG,GAAGpV,WAC3BrF,SAAUE,EAAMoF,KAAK,MAEzBlF,KAAQC,IAAIC,MACZF,KAAQC,IAAIwnD,MACZD,EAAmBzoD,aAAKY,QAGjC,CAACxJ,EAAqB3G,OAAOuP,OAG5B,oCACI,kBAAC,GAAD,KACI,yBAAKH,UAAWO,KAAW,2BAA4B2M,GAAqBjN,QAASA,GACjF,yBAAKD,UAAU,uBACV2oD,GAAmB,kBAAC,KAAD,CAAiBxoD,KAAMwoD,KAE/C,yBAAK3oD,UAAU,wBAAwBzI,EAAqB3G,OAAO4c,SAEjE,kBAAC,GAAD,KACN,yBAAKxN,UAAWO,KAAW,kCAAmC2M,GAAqBjN,QAASA,GACxF,yBAAKD,UAAU,uBACV2oD,GAAmB,kBAAC,KAAD,CAAiBxoD,KAAMwoD,KAE/C,yBAAK3oD,UAAU,+BAA+BzI,EAAqB3G,OAAO4c,YCjBxFs7C,I,oNACKtyD,MAAgC,CACnCkoC,gBAAY/zC,G,wFAGQ8S,GAChBA,GAAeA,EAAY8c,IAAI/sB,KAC/BwB,KAAK+Q,MAAMgpD,gCAAgCtrD,EAAY8c,IAAI/sB,IAC3DwB,KAAKkf,SAAS,CAAEwwB,WzL3CgB,6B,+ByL+CV,IAAD,OACjB1vB,EAAMhgB,KAAK+Q,MAAXiP,EACF+X,EAAU,CACZ3E,WAAW,eACN4mC,WAAQC,WAAY,WAAgB3mD,GAAmB,IAAhC9Q,EAA+B,EAA/BA,KACpB,OAAO,uBAAGkR,KAAMlR,EAAK03D,IAAKrzC,OAAQrkB,EAAK03D,IAAI1uC,WAAWtwB,OAAOi5C,QAAU,GAAK,UAAW7gC,OAKnG,OACI,oCACKtT,KAAKwH,MAAMkoC,YAAc,kBAAC,IAAD,CAAUhxB,GAAI1e,KAAKwH,MAAMkoC,cACjD1vC,KAAKwH,MAAMkoC,YACT,yBAAK1+B,UAAU,qBACThR,KAAK+Q,MAAMlH,eAAkBqO,GAAUgE,QAAQlc,KAAK+Q,MAAM3U,WAMxD,oCACI,wBAAI4U,UAAU,uBAAuBgP,EAAE,wBACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,2BAP5C,oCACI,wBAAIhP,UAAU,uBAAuBgP,EAAE,8BACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,kCAQhD,kBAAC,GAAD,CACI1C,SAAU,CAAEC,YAAa,EAAGG,WAAY,EAAGG,SAAU,EAAGG,QAAS,IACjEE,mBAAmB,iBAEnB,yBAAKlN,UAAU,mBACX,yBAAKA,UAAU,eACVhR,KAAK+Q,MAAM/H,iBAAmB,kBAAC,GAAD,CAC3B2jD,kBAAmB3sD,KAAK+Q,MAAM6K,SAC9Bra,YAAavB,KAAK+Q,MAAM/H,gBAAgBpH,OAAOu4D,aAC/CzN,2BAA2B,kBAC3BK,qBAAqB,wBACrBN,8BAA8B,wBAC9BI,qBAAsB7sC,EAAE,8BACxB4sC,8BAA8B,wBAElC,kBAAC,GAAD,CACI57C,UAAU,yBACVC,QAASjR,KAAK+Q,MAAMqpD,uBACpBlnD,KAAM8M,EAAE,gCAIhB,yBAAKhP,UAAU,kCACVhR,KAAK+Q,MAAM/H,iBAAmBhJ,KAAK+Q,MAAM/H,gBAAgBpH,OAAO6kB,OAAS,kBAAC,KAAD,KACtE,yBAAKD,IAAKxmB,KAAK+Q,MAAM/H,gBAAgBpH,OAAO6kB,MAAM7kB,OAAO8kB,KAAKjR,IAAKsR,IAAI,yBAInF,6BACK/mB,KAAK+Q,MAAMxI,sBAAwBvI,KAAK+Q,MAAMxI,qBAAqB9F,OAAS,EACzE,oCACI,yBAAKuO,UAAU,yBACVgP,EAAE,uCAEP,yBAAKhP,UAAU,mBACVhR,KAAK+Q,MAAMxI,qBAAqBsS,KAAI,SAACpM,EAAakc,GAAd,OACjC,kBAAC,GAAD,CACIxT,IAAKwT,EACLpiB,qBAAsBkG,EACtBwC,QAAS,kBAAM,EAAKopD,wBAAwB5rD,WAK5D,MAEPyJ,GAAUgE,QAAQlc,KAAK+Q,MAAM3U,YAC1B,yBAAK4U,UAAU,2BACX,kBAAC,GAAD,CACI/I,QAASjI,KAAK+Q,MAAMjJ,aACpB2xD,0BAA0B,6BAGrCz5D,KAAK+Q,MAAM3I,MAAQpI,KAAK+Q,MAAM3I,KAAK3F,OAAS,EACzC,oCACI,yBAAKuO,UAAU,aAAagP,EAAE,2BAC9B,kBAAC,KAAD,CACIhP,UAAU,gBACVspD,uBAAuB,EACvBC,mBAAmB,GAElBv6D,KAAK+Q,MAAM3I,KAAKyS,KAAI,SAAA2/C,GAAC,OAClB,kBAAC,KAAD,CAAerjD,IAAKqjD,EAAEjvC,IAAI/sB,IACtB,kBAAC,KAAD,KACI,kBAAC,KAAD,KACI,yBAAKgoB,IAAI,uBAAuBO,IAAI,UACpC,8BAAOyzC,EAAE54D,OAAO64D,YAGxB,kBAAC,KAAD,KACKr2C,qCAA0Bo2C,EAAE54D,OAAO84D,OAAQ3iC,UAMhE,MAER,kBAAC,GAAD,CAAYza,SAAU,CAAEC,YAAa,GAAIG,WAAY,EAAGG,SAAU,EAAGG,QAAS,KAC1E,uBAAGhN,UAAU,mBAAmBgP,EAAE,+BAClC,kBAAC,GAAD,CAAmB0uB,oBAAqB1uC,KAAK+Q,MAAM29B,uBAEtD1uC,KAAK+Q,MAAM/H,iBAAmB,kBAAC,GAAD,CAC3BuC,OAAQvL,KAAK+Q,MAAM5I,uBACnB4L,kBAAmB,kBAAM,EAAKhD,MAAM4pD,2BACpCl1B,eAAgB,CACZ7J,MAAO5b,EAAE,6BACT0lB,QAAS1lC,KAAK+Q,MAAM/H,gBAAgBpH,OAAOg5D,cAC3C35D,YAAajB,KAAK+Q,MAAM/H,gBAAgBpH,OAAOzF,YAC/C6E,MAAOhB,KAAK+Q,MAAM/H,gBAAgBpH,OAAOsvC,sB,GA/HzC7/B,cAyIjB6f,kBAAkB4oC,ICzI3Be,I,oNACKrzD,MAAsC,CACzCkoC,gBAAY/zC,G,wFAGQ8S,GAChBA,GAAeA,EAAY8c,IAAI/sB,KAC/BwB,KAAK+Q,MAAMgpD,gCAAgCtrD,EAAY8c,IAAI/sB,IAC3DwB,KAAKkf,SAAS,CAAEwwB,W1L3CgB,6B,+B0L+CV,IAAD,OACjB1vB,EAAMhgB,KAAK+Q,MAAXiP,EACF+X,EAAU,CACZ3E,WAAW,eACR4mC,WAASC,WAAY,WAAgB3mD,GAAmB,IAAhC9Q,EAA+B,EAA/BA,KACvB,OAAO,uBAAIkR,KAAMlR,EAAK03D,IAAKrzC,OAAQrkB,EAAK03D,IAAI1uC,WAAWtwB,OAAOi5C,QAAU,GAAK,UAAW7gC,OAIhG,OACI,oCACKtT,KAAKwH,MAAMkoC,YAAc,kBAAC,IAAD,CAAUhxB,GAAI1e,KAAKwH,MAAMkoC,cACjD1vC,KAAKwH,MAAMkoC,YACT,yBAAK1+B,UAAU,oEACTkH,GAAUgE,QAAQlc,KAAK+Q,MAAM3U,WAM3B,oCACI,wBAAI4U,UAAU,uBAAuBgP,EAAE,wBACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,2BAP5C,oCACI,wBAAIhP,UAAU,uBAAuBgP,EAAE,8BACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,iCAQhD,kBAAC,GAAD,CAAQ1C,SAAU,CAAEC,YAAa,EAAGG,WAAY,GAAIG,SAAU,EAAGG,QAAS,KACrEhe,KAAK+Q,MAAM/H,iBAAmBhJ,KAAK+Q,MAAM/H,gBAAgBpH,OAAO6kB,OAAS,kBAAC,KAAD,KACtE,yBACIzV,UAAU,8BACVwV,IAAKxmB,KAAK+Q,MAAM/H,gBAAgBpH,OAAO6kB,MAAM7kB,OAAO8kB,KAAKjR,IACzDsR,IAAI,8BAIX/mB,KAAK+Q,MAAM/H,iBAAmB,kBAAC,GAAD,CAC3B2jD,kBAAmB3sD,KAAK+Q,MAAM6K,SAC9Bra,YAAavB,KAAK+Q,MAAM/H,gBAAgBpH,OAAOu4D,aAC/CzN,2BAA2B,qDAC3BK,qBAAqB,+BACrBN,8BAA8B,+BAC9BI,qBAAsB7sC,EAAE,8BACxB4sC,8BAA8B,+BAGlC,kBAAC,GAAD,CACI57C,UAAU,gCACVC,QAASjR,KAAK+Q,MAAMqpD,uBACpBlnD,KAAM8M,EAAE,+BAQZ,6BACKhgB,KAAK+Q,MAAMxI,sBAAwBvI,KAAK+Q,MAAMxI,qBAAqB9F,OAAS,EACzE,kBAAC,GAAD,CACI6a,SAAU,CAAEC,YAAa,EAAGG,WAAY,GAAIG,SAAU,GAAIG,QAAS,KAEnE,6BACI,yBAAKhN,UAAU,gCACVgP,EAAE,uCAENhgB,KAAK+Q,MAAMxI,qBAAqBsS,KAAI,SAACpM,EAAakc,GAAd,OACjC,kBAAC,GAAD,CACIxT,IAAKwT,EACLpiB,qBAAsBkG,EACtBwC,QAAS,kBAAM,EAAKopD,wBAAwB5rD,WAK5D,MAEPzO,KAAK+Q,MAAM3I,MAAQpI,KAAK+Q,MAAM3I,KAAK3F,OAAS,EACzC,oCACI,yBAAKuO,UAAU,aAAagP,EAAE,2BAC9B,kBAAC,KAAD,CACIhP,UAAU,gBACVspD,uBAAuB,EACvBC,mBAAmB,GAElBv6D,KAAK+Q,MAAM3I,KAAKyS,KAAI,SAAA2/C,GAAC,OAClB,kBAAC,KAAD,CAAerjD,IAAKqjD,EAAEjvC,IAAI/sB,IACtB,kBAAC,KAAD,KACI,kBAAC,KAAD,KACI,yBAAKgoB,IAAI,uBAAuBO,IAAI,UACpC,8BAAOyzC,EAAE54D,OAAO64D,YAGxB,kBAAC,KAAD,KACKr2C,qCAA0Bo2C,EAAE54D,OAAO84D,OAAQ3iC,UAMhE,MAER,kBAAC,GAAD,CAAYza,SAAU,CAAEC,YAAa,EAAGG,WAAY,GAAIG,SAAU,GAAIG,QAAS,KAC3E,uBAAGhN,UAAU,0BAA0BgP,EAAE,+BACzC,kBAAC,GAAD,CAAmB0uB,oBAAqB1uC,KAAK+Q,MAAM29B,uBAGtD1uC,KAAK+Q,MAAM/H,iBAAmB,kBAAC,GAAD,CAC3BuC,OAAQvL,KAAK+Q,MAAM5I,uBACnB4L,kBAAmB,kBAAM,EAAKhD,MAAM4pD,2BACpCl1B,eAAgB,CACZ7J,MAAO5b,EAAE,6BACT0lB,QAAS1lC,KAAK+Q,MAAM/H,gBAAgBpH,OAAOg5D,cAC3C35D,YAAajB,KAAK+Q,MAAM/H,gBAAgBpH,OAAOzF,YAC/C6E,MAAOhB,KAAK+Q,MAAM/H,gBAAgBpH,OAAOsvC,sB,GA5HnC7/B,cAsIvB6f,kBAAkB2pC,ICpJ3BC,G,+LpIWiB,IAAC1+D,EoIThB4D,KAAK+Q,MAAMiF,UpISK5Z,EoITY4D,KAAK+Q,MAAM3U,UpISxB,uCAAyE,WAAO4Z,EAAUoD,GAAjB,eAAA3a,EAAA,sDACtFjC,EAAO4c,IAAW7L,KAAK/Q,KAE7BwZ,EAAS,CAAEjK,KjF1CiB,qBiF2C5BvP,GAAQuhC,GAAgBvhC,EAAKkf,SAAStf,GACjCid,MAAK,SAAAxD,GACFG,EAAS,CAAEjK,KjF5CS,mBiF4CeqB,QAASyI,OAE/CF,OAAM,SAAAjK,GACHsK,EAAS,CAAEjK,KjF9CS,mBiF8CeqB,QAAS1B,OATwC,2CAAzE,0DoIRf1L,KAAK+Q,MAAMiF,SpIqBoB,SAAC5Z,GAAD,8CAAyE,WAAO4Z,EAAUoD,GAAjB,eAAA3a,EAAA,sDACtGjC,EAAO4c,IAAW7L,KAAK/Q,KAE7BwZ,EAAS,CAAEjK,KjFpDkC,sCiFqD7CvP,GAAQohC,GAA4BphC,EAAKkf,SAAStf,GAC7Cid,MAAK,SAAAxD,GACFG,EAAS,CAAEjK,KjFtD0B,oCiFsDeqB,QAASyI,OAEhEF,OAAM,SAAAjK,GACHsK,EAAS,CAAEjK,KjFxD0B,oCiFwDeqB,QAAS1B,OATuC,2CAAzE,wDoIrBXqvD,CAAwB/6D,KAAK+Q,MAAM3U,YACvD4D,KAAK+Q,MAAMiF,SAASqoB,MAEpBr+B,KAAK+Q,MAAMiF,SAAS,CAAEjK,KrNpBK,0B,+BqNuB3B,OACI,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI5D,uBAAwBnI,KAAK+Q,MAAM5I,uBACnCwyD,wBAAyB36D,KAAK+Q,MAAM4pD,wBACpCP,uBAAwBp6D,KAAK+Q,MAAMqpD,uBACnCx+C,SAAU5b,KAAK+Q,MAAM6K,SACrB9T,aAAc9H,KAAK+Q,MAAMjJ,aACzB+B,aAAc7J,KAAK+Q,MAAMlH,aACzBzB,KAAMpI,KAAK+Q,MAAM3I,KACjBG,qBAAsBvI,KAAK+Q,MAAMxI,qBACjCS,gBAAiBhJ,KAAK+Q,MAAM/H,gBAC5B+wD,gCAAiC/5D,KAAK+Q,MAAMgpD,gCAC5CrrB,oBAAqB1uC,KAAK+Q,MAAM29B,oBAChCtyC,UAAW4D,KAAK+Q,MAAM3U,aAG9B,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI+L,uBAAwBnI,KAAK+Q,MAAM5I,uBACnCwyD,wBAAyB36D,KAAK+Q,MAAM4pD,wBACpCP,uBAAwBp6D,KAAK+Q,MAAMqpD,uBACnCx+C,SAAU5b,KAAK+Q,MAAM6K,SACrB9T,aAAc9H,KAAK+Q,MAAMjJ,aACzB+B,aAAc7J,KAAK+Q,MAAMlH,aACzBzB,KAAMpI,KAAK+Q,MAAM3I,KACjBG,qBAAsBvI,KAAK+Q,MAAMxI,qBACjCS,gBAAiBhJ,KAAK+Q,MAAM/H,gBAC5B+wD,gCAAiC/5D,KAAK+Q,MAAMgpD,gCAC5CrrB,oBAAqB1uC,KAAK+Q,MAAM29B,oBAChCtyC,UAAW4D,KAAK+Q,MAAM3U,kB,GAxClBiV,aAkFb4W,gBAlCS,SAACzgB,GACrB,IAAIS,EAAU,IAAI+yD,IAQlB,OANIxzD,EAAMiH,YAAY3G,cAAgBN,EAAMiH,YAAY3G,aAAaoxD,SACjE1xD,EAAMiH,YAAY3G,aAAaoxD,QAAQ7tC,SAAQ,SAAC4vC,GAC5ChzD,EAAQs4B,IAAI,iBAAmB06B,EAAOC,IAAKD,EAAOE,UAInD,CACHrzD,aAAcG,EACd4B,aAAcrC,EAAMmH,YAAY9E,aAChC6R,SAAUlU,EAAM+F,KAAK/Q,KAAOgL,EAAM+F,KAAK/Q,KAAKmf,cAAWhgB,EACvDigB,SAAWpU,EAAM+F,KAAK/Q,MAAQgL,EAAM+F,KAAK/Q,KAAKof,UAAa,YAC3DzT,uBAAwBX,EAAMiH,YAAYtG,uBAC1CC,KAAMZ,EAAMiH,YAAYrG,KACxBG,qBAAsBf,EAAMiH,YAAYlG,qBACxCS,gBAAiBxB,EAAMiH,YAAYzF,gBACnCL,KAAMnB,EAAMiH,YAAY9F,KACxBvM,UAAWoL,EAAM+F,KAAKnR,cAIH,SAAC4Z,GACxB,MAAO,CACHokD,uBAAwB,kBAAMpkD,EAAS,CAAEjK,KrNtGH,iCqNsGyCqB,SAAS,KACxFutD,wBAAyB,kBAAM3kD,EAAS,CAAEjK,KrNvGJ,iCqNuG0CqB,SAAS,KACzF2sD,gCAAiC,SAACrxD,GAAD,OAC7BsN,EAAS,CAAEjK,KrN/F2B,qCqN+FeqB,QAAS1E,KAClEgmC,oBAAqB,SAAC5lC,GAAD,OACjBkN,EAAS,CAAEjK,KrN7Fe,yBqN6FeqB,QAAStE,QAI/Cmf,CAA6C6yC,IC/G/CM,GAAb,YACI,WAAYp+C,GAA+B,IAAD,sBACtC,IAAIvH,EAAc,WAAauH,EAAO1S,UAAY,sBADZ,OAGtC,8CAAMmL,KAEDY,KAAO2G,EAL0B,EAD9C,4BAA+CzF,ICAlC8jD,GAAb,YACI,WAAYr+C,GAA+B,IAAD,sBACtC,IAAIvH,EAAc,WAAauH,EAAO1S,UAAY,yBADZ,OAGtC,8CAAMmL,KACDC,QAAL,OAAyB,kBACzB,EAAKW,KAAO2G,EAL0B,EAD9C,4BAAkDzF,ICArC+jD,GAAb,YACI,WAAYvzD,GAAkB,oBAC1B,IAAI0N,EAAc,WAAa1N,EAAU,eADhB,mDAGnB0N,IAJd,4BAA0CqB,ICA7BykD,GAAb,YACI,aAAe,oBAAD,mDACQ,gCAF1B,4BAAgDzkD,ICAnC0kD,GAAb,YACI,WAAYlwD,GAAoC,IAAD,6BAG3C,8CAFkB,4BAIb+K,KAAO/K,EAL+B,EADnD,4BAA4CiM,ICK7B,SAASkkD,GAAiB1qD,GAAuD,IAAD,EAC/ByD,oBAAS,GADsB,oBACpFknD,EADoF,KAC5DC,EAD4D,OAE/BnnD,mBAAS,IAFsB,oBAEpFonD,EAFoF,KAE5DC,EAF4D,OAGrDrnD,oBAAS,GAH4C,oBAGpFsnD,EAHoF,KAGvEC,EAHuE,KAInF/7C,EAAMiG,eAANjG,EAERnL,qBAAU,WACN9D,EAAMiuC,eAAejuC,EAAMiM,QAE3B,IAAM4Y,EAAS16B,OAAOC,SAASy6B,OAEzBomC,EADS,IAAI9oB,gBAAgBtd,GACNpgB,IAAI,kBAEjC,GAAIwmD,EAAe,CACfjrD,EAAMkrD,sBAAqB,GAC3B,IAAMC,EAAmC,SAAlBF,EACvB,GAAIE,GAAkBnrD,EAAMzF,eAAgB,CACxC,IAAM6wD,EAA2C,CAC7C7xD,UAAWyG,EAAMqrD,eACjB7rC,OAAQxf,EAAMzF,eAAeukB,OAC7BwsC,2BAA4BtrD,EAAMzF,eAAegxD,sBAErDvrD,EAAMwrD,oBACNrmD,GAA8B,IAAIslD,GAAuBW,IAAwB9iD,MAAK,SAAC1a,GACnFoS,EAAMyrD,iBAAiB79D,EAAO6D,KAAKi6D,0BACnC1rD,EAAMiuC,eAAejuC,EAAMiM,WAGnC2+C,GAA0B,GAC1BE,EACqB77C,EAAjBk8C,EAAmB,mCAAwC,wCAGpE,IAQH,MAAO,CACHQ,wBAP4B,WAC5Bf,GAA0B,GAC1BE,EAA0B,IAC1BE,GAAe,IAKfL,yBACAE,yBACAE,e,WCcOa,GAjD+C,SAAA5rD,GAAU,IAC5DiP,EAAMiG,eAANjG,EAD2D,EAE7CxL,mBAAS,CAC3Bqc,cAAe9f,EAAMnG,cAAcL,cACnCqyD,SAAU7rD,EAAMnG,cAAciyD,WAF3BC,EAF4D,qBAO7D/xB,EAAW,SAAC5yB,EAAclY,GAC5B,OAAO,8BAAOA,IAOZorC,EACF,oCACI,kBAAC,GAAD,CAAan4B,KAAM8M,EAAE,mCAErB,yBAAKhP,UAAU,4BACX,yBAAKA,UAAU,4BACX,2BAAOmqB,QAAQ,iBAAiBnb,EAAE,0CACjC+qB,EAAS,EAAiB+xB,EAAYjsC,gBAE3C,yBAAK7f,UAAU,4BACX,2BAAOmqB,QAAQ,YAAYnb,EAAE,qCAC5B+qB,EAAS,EAAY+xB,EAAYF,YAI1C,kBAAC,GAAD,CAAa7oD,kBAnBI,WACtBhD,EAAMgD,wBAuBT,OACI,oCACI,kBAAC,GAAD,CAAOxI,OAAQwF,EAAMxF,OAAQyF,UAAWO,KAAW,wBAAyBR,EAAMC,YAC9E,kBAAC,GAAD,KACI,8BAAOq6B,IAEX,kBAAC,GAAD,KACI,0BAAMr6B,UAAU,qCAAqCq6B,OC/CnE0xB,G,oLAEE,OACI,oCACK/8D,KAAK+Q,MAAMxF,QACR,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIA,QAAQ,EACRX,cAAe5K,KAAK+Q,MAAMnG,cAC1BmJ,kBAAmB/T,KAAK+Q,MAAMgD,qBAGtC,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI/C,UAAU,4CACVzF,QAAQ,EACRX,cAAe5K,KAAK+Q,MAAMnG,cAC1BmJ,kBAAmB/T,KAAK+Q,MAAMgD,2B,GAlBlC1C,aAwCb4W,gBAZS,SAACzgB,GACrB,MAAO,CACH+D,OAAQ/D,EAAMoH,QAAQjE,6BAIH,SAACqL,GACxB,MAAO,CACHjC,kBAAmB,kBAAMiC,EAAS,CAAEjK,K/N1CK,oC+N0CoCqB,SAAS,QAI/E6a,CAA6C80C,ICrC7CC,GAXyD,SAAC,GAElE,IADL/f,EACI,EADJA,SAOA,OAAO,6BAJQhzC,IAAOgzC,EAAS7sB,iBACjBhmB,OAAO,gBCDR6yD,I,OAJgE,SAAC,GAAkB,IAAhBhgB,EAAe,EAAfA,SAC9E,OAAO,yBAAKzqC,MAAO,CAAEqrC,UAAW,UAAYjuB,GAAUqtB,EAAS1sB,WCM7D2sC,I,kMACQ,IAAD,OACGl9C,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACI,oCACI,kBAAC,GAAD,CAAa9M,KAAM8M,EAAE,2BACrB,6BAAShP,UAAU,2BACf,yBAAKA,UAAU,kBAAkBwB,MAAO,CAAE+zC,eAAgB,WACtD,yBAAKv1C,UAAU,gBACX,kBAAC,GAAD,CACIkC,KAAM8M,EAAE,8BACRhP,UAAU,aACVC,QAAS,kBAAM,EAAKF,MAAMosD,sBAAsB,WAEpD,kBAAC,GAAD,CACIjqD,KAAM8M,EAAE,8BACRhP,UAAU,aACVC,QAAS,kBAAM,EAAKF,MAAMosD,sBAAsB,cAKhE,kBAAC,GAAD,CAAappD,kBAAmB/T,KAAK+Q,MAAMgD,yB,GAtBpB1C,cA4BxB6f,kBAAkBgsC,ICrCpBE,GAAb,YACE,aAAe,oBAAD,mDACM,sBAFtB,4BAAsCtmD,ICAzBumD,GAAb,YACI,WAAYC,EAAmBhyD,GAA2C,IAAD,sBACrE,IAAImK,EAAc,WAAa6nD,EAAY,gBAD0B,OAGrE,8CAAM7nD,KAEDY,KAAO/K,EALyD,EAD7E,4BAA0CiM,I,ikBCkCpCgmD,G,YACJ,WAAYxsD,GAA2C,IAAD,8BACpD,8CAAMA,KAOA6xB,KAAOpjB,IAAMg+C,YARiC,EAU/Ch2D,MAA2C,CAChDi2D,QAAS,CACPxhE,UAAW,GACXyhE,QAAS,GACTC,aAAc,GACdC,aAAc,GACdC,KAAM,GACNC,SAAU,GACVC,QAAS,IAEXC,UAAW,GACXC,sBAAuB,CACrBC,YAAa,GACbC,OAAQ,GACRC,OAAQ,GACRC,MAAO,GACPhC,2BAA4B,IAE9BiC,iBAAiB,GAzBjB,EAAKtzB,kBAAoB,EAAKA,kBAAkB1pB,KAAvB,iBACzB,EAAK4mC,qBAAuB,EAAKA,qBAAqB5mC,KAA1B,iBAC5B,EAAKi9C,QAAU,EAAKA,QAAQj9C,KAAb,iBALqC,E,kFA+BjC,IAAD,OAClBlM,GAA0B,IAAIgoD,IAAoB/jD,MAChD,SAAC1a,GACC,IAAI8+D,EAAO,MAAQ,EAAKj2D,MAAMi2D,SAC9BA,EAAQM,QAAU,KAElB,EAAK7+C,SAAS,CACZ8+C,UAAWr/D,EAAO6D,KAAKqY,KAAI,SAAC+pB,GAC1B,MAAO,CAAEjjC,MAAOijC,EAAE7pB,KAAM9a,MAAO2kC,EAAE8rB,SAEnC+M,QAASA,OAGb,SAAC7nD,S,wCAIa2K,GAAmC,IAAD,EAC1BA,EAAEsG,OAAlB1O,EAD0C,EAC1CA,KAAMlY,EADoC,EACpCA,MACVw9D,EAAO,MAAQz9D,KAAKwH,MAAMi2D,SAC9BA,EAAQtlD,GAAQlY,EAChBD,KAAKkf,SAAS,CAAEu+C,c,2CAGGe,GACnB,GAAIA,EAAM,CACR,IAAIf,EAAO,MAAQz9D,KAAKwH,MAAMi2D,SAC9BA,EAAQM,QAAUS,EAAKv+D,MAEvBD,KAAKkf,SAAS,CAAEu+C,e,gCAIT,IAAD,OACFnyD,EAAiB,CACrBilB,OAAQvwB,KAAK+Q,MAAM0tD,cACnB59D,UAAWb,KAAKwH,MAAMi2D,QAAQxhE,UAC9B6/B,QAAS97B,KAAKwH,MAAMi2D,QAAQC,QAC5BjyB,aAAczrC,KAAKwH,MAAMi2D,QAAQE,aACjCjyB,aAAc1rC,KAAKwH,MAAMi2D,QAAQG,aACjCc,KAAM1+D,KAAKwH,MAAMi2D,QAAQI,KACzBhyB,SAAU7rC,KAAKwH,MAAMi2D,QAAQK,SAC7Ba,QAAS3+D,KAAKwH,MAAMi2D,QAAQM,SAG9B7nD,GACE,IAAImnD,GAAqBr9D,KAAK+Q,MAAM8f,cAAevlB,IACnD+N,MAAK,SAACulD,GAEN,EAAK1/C,SAAS,CAAE++C,sBAAuBW,EAAIp8D,OAAQ,WAC7C,EAAKgF,MAAMy2D,sBAAsBC,cACnC,EAAKntD,MAAM8tD,YAAY,CACrBhvC,OAAQ,EAAK9e,MAAM0tD,cACnBnC,qBAAsBsC,EAAIp8D,KAAK65D,6BAEhC,EAAKz5B,KAAa2e,QAAQud,kB,+BAMzB,IAAD,OACC9+C,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACE,oCACE,kBAAC,GAAD,CAAa9M,KAAM8M,EAAE,kCACrB,6BAAShP,UAAU,2BACjB,yBAAKA,UAAU,gCACb,0BAAM7D,OAAQ2jC,GAAYhF,aAAa,KAAK2Y,IAAKzkD,KAAK4iC,MACpD,2BACE72B,KAAK,SACLoM,KAAK,cACLlY,MAAOD,KAAKwH,MAAMy2D,sBAAsBC,cAE1C,2BACEnyD,KAAK,SACLoM,KAAK,SACLlY,MAAOD,KAAKwH,MAAMy2D,sBAAsBE,SAE1C,2BACEpyD,KAAK,SACLoM,KAAK,SACLlY,MAAOD,KAAKwH,MAAMy2D,sBAAsBG,SAE1C,2BACEryD,KAAK,SACLoM,KAAK,QACLlY,MAAOD,KAAKwH,MAAMy2D,sBAAsBI,QAG1C,yBAAKrtD,UAAU,gDACb,2BAAOmqB,QAAQ,aACZnb,EAAE,4BADL,KAGA,2BACExhB,GAAG,YACH2Z,KAAK,YACLpM,KAAK,OACLiF,UAAU,aACV86B,aAAa,oBACbxR,UAAQ,EACRr6B,MAAOD,KAAKwH,MAAMi2D,QAAQxhE,UAC1BkjB,SAAUnf,KAAKgrC,qBAEfhrC,KAAKwH,MAAMi2D,QAAQxhE,WACnB,2BAAO+U,UAAU,SACdgP,EAAE,4BADL,iBAKJ,yBAAKhP,UAAU,8CACb,2BAAOmqB,QAAQ,WAAWnb,EAAE,0BAA5B,KACA,2BACExhB,GAAG,UACH2Z,KAAK,UACLpM,KAAK,OACLiF,UAAU,aACV86B,aAAa,kBACbxR,UAAQ,EACRr6B,MAAOD,KAAKwH,MAAMi2D,QAAQC,QAC1Bv+C,SAAUnf,KAAKgrC,qBAEfhrC,KAAKwH,MAAMi2D,QAAQC,SACnB,2BAAO1sD,UAAU,SACdgP,EAAE,0BADL,iBAKJ,yBAAKhP,UAAU,qDACb,2BAAOmqB,QAAQ,gBACZnb,EAAE,2BADL,KAGA,2BACExhB,GAAG,eACH2Z,KAAK,eACLpM,KAAK,OACLiF,UAAU,aACV86B,aAAa,mBACbxR,UAAQ,EACRr6B,MAAOD,KAAKwH,MAAMi2D,QAAQE,aAC1Bx+C,SAAUnf,KAAKgrC,qBAEfhrC,KAAKwH,MAAMi2D,QAAQE,cACnB,2BAAO3sD,UAAU,SACdgP,EAAE,2BADL,iBAKJ,yBAAKhP,UAAU,qDACb,2BAAOmqB,QAAQ,gBACZnb,EAAE,4BAEL,2BACExhB,GAAG,eACH2Z,KAAK,eACLpM,KAAK,OACLiF,UAAU,aACV86B,aAAa,mBACbxR,UAAQ,EACRr6B,MAAOD,KAAKwH,MAAMi2D,QAAQG,aAC1Bz+C,SAAUnf,KAAKgrC,qBAGnB,yBAAKh6B,UAAU,iDACb,2BAAOmqB,QAAQ,QAAQnb,EAAE,2BAAzB,KACA,2BACExhB,GAAG,OACH2Z,KAAK,OACLpM,KAAK,OACLiF,UAAU,aACV86B,aAAa,eACbxR,UAAQ,EACRr6B,MAAOD,KAAKwH,MAAMi2D,QAAQI,KAC1B1+C,SAAUnf,KAAKgrC,qBAEfhrC,KAAKwH,MAAMi2D,QAAQI,MACnB,2BAAO7sD,UAAU,SACdgP,EAAE,2BADL,iBAKJ,yBAAKhP,UAAU,sCACb,2BAAOmqB,QAAQ,YACZnb,EAAE,2BADL,KAGA,2BACExhB,GAAG,WACH2Z,KAAK,WACLpM,KAAK,OACLiF,UAAU,aACV86B,aAAa,mBACbxR,UAAQ,EACRr6B,MAAOD,KAAKwH,MAAMi2D,QAAQK,SAC1B3+C,SAAUnf,KAAKgrC,qBAEfhrC,KAAKwH,MAAMi2D,QAAQK,UACnB,2BAAO9sD,UAAU,SACdgP,EAAE,2BADL,iBAKJ,yBAAKhP,UAAU,8CACb,2BAAOmqB,QAAQ,WAAWnb,EAAE,0BAA5B,KACA,kBAAC,GAAD,CACE+X,QAAS/3B,KAAKwH,MAAMw2D,UACpB1lC,mBAAoBt4B,KAAKkoD,qBACzBjwB,eACEj4B,KAAKwH,MAAMw2D,WACXh+D,KAAKwH,MAAMw2D,UAAUhhD,QACnB,SAAC4nB,GAAD,OAAOA,EAAE3kC,QAAU,EAAKuH,MAAMi2D,QAAQM,WACtC,MAGJ/9D,KAAKwH,MAAMi2D,QAAQM,SACnB,2BAAO/sD,UAAU,SACdgP,EAAE,0BADL,oBAQV,kBAAC,GAAD,CAAajM,kBAAmB/T,KAAK+Q,MAAMgD,mBACzC,kBAAC,GAAD,CACE9C,QAASjR,KAAKu+D,QACdvtD,UAAU,gBACVQ,UACGxR,KAAKwH,MAAMi2D,QAAQxhE,YACnB+D,KAAKwH,MAAMi2D,QAAQC,UACnB19D,KAAKwH,MAAMi2D,QAAQE,eACnB39D,KAAKwH,MAAMi2D,QAAQI,OACnB79D,KAAKwH,MAAMi2D,QAAQK,WACnB99D,KAAKwH,MAAMi2D,QAAQM,QAEtB7qD,KAAM8M,EAAE,2B,GA1QuB3O,aAkR5B6f,kBAAkBqsC,ICzS3BwB,G,oLAEE,OACI,kBAAC,GAAD,CACIN,cAAez+D,KAAK+Q,MAAM0tD,cAC1B5tC,cAAe7wB,KAAK+Q,MAAM8f,cAC1B9c,kBAAmB/T,KAAK+Q,MAAMgD,kBAC9B8qD,YAAa7+D,KAAK+Q,MAAM8tD,kB,GAPYxtD,aA2BrC4W,gBAdS,SAACzgB,GACrB,MAAO,CACHqpB,cAAerpB,EAAM+F,KAAKhR,MAAM+e,cAIb,SAACtF,GACxB,MAAO,CACH6oD,YAAa,SAACvzD,GACV0K,EAAS,CAAEjK,KtOfK,esOeeqB,QAAS9B,QAKrC2c,CAA6C82C,ICrBtDC,G,YACF,WAAYjuD,GAAoC,IAAD,8BAC3C,8CAAMA,KASHvJ,MAAoC,CACvCqoB,OAAQ,EACRovC,kBAAkB,GATlB,EAAKC,wBAA0B,EAAKA,wBAAwB59C,KAA7B,iBAC/B,EAAK69C,wBAA0B,EAAKA,wBAAwB79C,KAA7B,iBAE/B,EAAK89C,YAAc,EAAKA,YAAY99C,KAAjB,iBACnB,EAAKi9C,QAAU,EAAKA,QAAQj9C,KAAb,iBAP4B,E,kFAgB3CthB,KAAKkf,SAAS,CAAE2Q,OAAQ7vB,KAAK+Q,MAAMsuD,eAAetvC,QAAQ,O,8CAGtCxP,GACpB,IAAM++C,EAAY/+C,EAAEsG,OAAO5mB,MAC3BD,KAAKkf,SAAS,CAAE2Q,OAAQyvC,M,gDAIxBt/D,KAAKkf,SAAS,CAAE+/C,kBAAkB,M,oCAIlC,IAAMM,EAAkBv/D,KAAKwH,MAAMqoB,OACnC7vB,KAAKkf,SAAS,CAAE2Q,OAAQgG,WAAW0pC,EAAgBloD,YAAY0Y,QAAQ,O,gCAIvE/vB,KAAKkf,SAAS,CAAE+/C,kBAAkB,M,+BAG5B,IACEj/C,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACI,qCACMhgB,KAAKwH,MAAMy3D,kBACT,oCACI,kBAAC,GAAD,CAAa/rD,KAAM8M,EAAE,+BACrB,6BAAShP,UAAU,2BACf,yBAAKA,UAAU,wBACX,2BAAOA,UAAU,QAAQmqB,QAAQ,UAC5Bnb,EAAE,6BAEP,2BACI7H,KAAK,SACLpM,KAAK,SACLiF,UAAU,aACVspB,UAAQ,EACRhE,YAAY,OACZr2B,MAAOD,KAAKwH,MAAMqoB,OAClB1Q,SAAUnf,KAAKk/D,wBACfM,OAAQx/D,KAAKo/D,gBAIzB,kBAAC,GAAD,CAAarrD,kBAAmB/T,KAAK+Q,MAAMgD,mBACvC,kBAAC,GAAD,CACI9C,QAASjR,KAAKu+D,QACdvtD,UAAU,gBACVQ,UAAWxR,KAAKwH,MAAMqoB,QAAU7vB,KAAKwH,MAAMqoB,QAAU,EACrD3c,KAAM8M,EAAE,uBAKvBhgB,KAAKwH,MAAMy3D,kBACR,kBAAC,GAAD,CACIR,cAAez+D,KAAKwH,MAAMqoB,OAC1B9b,kBAAmB/T,KAAKm/D,+B,GA3EZ9tD,aAmFrB6f,kBAAkB8tC,IC5F3BS,G,oLACQ,IACEz/C,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACI,oCACI,kBAAC,GAAD,CAAa9M,KAAM8M,EAAE,kCACrB,2BAAIA,EAAE,mCACN,6BAAShP,UAAU,2BACdhR,KAAK+Q,MAAM2uD,oBACR,yBAAK1uD,UAAU,mBACX,6BACI,uBAAGA,UAAU,SAASgP,EAAE,0BACxB,uBAAGhP,UAAU,SAAShR,KAAK+Q,MAAM2uD,mBAAmBC,cAExD,6BACI,uBAAG3uD,UAAU,SAASgP,EAAE,qCACxB,uBAAGhP,UAAU,SAAShR,KAAK+Q,MAAM2uD,mBAAmB7C,WAExD,6BACI,uBAAG7rD,UAAU,SAASgP,EAAE,0CACxB,uBAAGhP,UAAU,SAAShR,KAAK+Q,MAAM2uD,mBAAmBn1D,kBAKpE,kBAAC,GAAD,CAAawJ,kBAAmB/T,KAAK+Q,MAAMgD,yB,GAzBvB1C,aA+BrB6f,kBAAkBuuC,ICpB3BG,G,6MACKp4D,MAA2B,CAC9Bq4D,iBAAalkE,G,EAGjBmkE,eAAiB,WACb,EAAK5gD,SAAS,CAAE2gD,iBAAalkE,K,EAGjCokE,eAAiB,SAACF,GACM,SAAhBA,GACA,EAAK9uD,MAAMivD,oBAEf,EAAK9gD,SAAS,CAAE2gD,iB,yEAIhB,OACI,kBAAC,GAAD,CAAOt0D,OAAQvL,KAAK+Q,MAAMxF,OAAQyF,UAAU,kBACtChR,KAAKwH,MAAMq4D,aACT,kBAAC,GAAD,CACI1C,sBAAuBn9D,KAAK+/D,eAC5BhsD,kBAAmB/T,KAAK+Q,MAAMgD,oBAGV,SAA3B/T,KAAKwH,MAAMq4D,aACR,kBAAC,GAAD,CACI9rD,kBAAmB/T,KAAK8/D,eACxBJ,mBAAoB1/D,KAAK+Q,MAAMkvD,qBAGX,SAA3BjgE,KAAKwH,MAAMq4D,aACR,kBAAC,GAAD,CACIhvC,cAAe7wB,KAAK+Q,MAAM8f,cAC1BwuC,eAAgBr/D,KAAK+Q,MAAMsuD,eAAiBr/D,KAAK+Q,MAAMsuD,eAAiB,EACxEtrD,kBAAmB/T,KAAK8/D,sB,GAnChBzuD,aA2CjB6f,kBAAkB0uC,IC7C3BM,G,oLACQ,IAAD,EAWDlgE,KAAK+Q,MATLiP,EAFC,EAEDA,EACA+Q,EAHC,EAGDA,QACAovC,EAJC,EAIDA,kBACAC,EALC,EAKDA,qBACAr1D,EANC,EAMDA,uBACAE,EAPC,EAODA,0BACA+0D,EARC,EAQDA,kBACAK,EATC,EASDA,oBACApE,EAVC,EAUDA,qBAEJ,OACI,oCACI,yBAAKjrD,UAAU,8BACX,yBAAKA,UAAU,SAASgP,EAAE,6BACFrkB,IAAvBqE,KAAK+Q,MAAMggB,SACR,yBAAK/f,UAAU,WAAf,OAA4B+f,EAAmBhB,QAAQ,IAE3D,kBAAC,GAAD,CACI7c,KAAM8M,EAAE,0BACRhP,UAAU,aACVC,QAAS,kBAAMgrD,GAAqB,MAEvC,kBAAC,GAAD,CACG/oD,KAAM8M,EAAE,kCACR/O,QAASmvD,EACTvtD,UAAW5H,EACX+F,UAAU,aACVQ,SAAUvG,IAEd,kBAAC,GAAD,CACIiI,KAAM8M,EAAE,+BACR/O,QAASkvD,EACTttD,UAAW9H,EACXiG,UAAU,aACVQ,SAAUzG,KAIlB,kBAAC,GAAD,CACIQ,OAAQ80D,EACRtsD,kBAAmB,kBAAMkoD,GAAqB,IAC9C+D,kBAAmBA,EACnBC,mBAAoBjgE,KAAK+Q,MAAMkvD,mBAC/BZ,eAAgBr/D,KAAK+Q,MAAMggB,QAC3BF,cAAe7wB,KAAK+Q,MAAM8f,qB,GA/Cbxf,aAsDlB6f,kBAAkBgvC,I,qDCvE1B,gCAAAzhE,EAAA,6DACCue,EAAQ,CACR2O,aAAc,4BACdkS,OAAQ,uBAHT,SAKmB5/B,EAAiB2tB,WAAgB5O,GALpD,YAKGre,EALH,QAOQoB,OAPR,qBAQO,CAACylB,QAAS,gDAAiDzlB,OAAQpB,EAAOoB,QARjF,cAUGugE,EAAc3hE,EAAOktB,MAAMhR,KAAI,SAAA6P,GAAC,OAAEA,EAAE9oB,OAAO2+D,gBAAwBvjD,QAAO,SAAC0N,EAAGC,EAAGlsB,GAAP,OAAaA,EAAE2lC,QAAQ1Z,IAAMC,KAV1G,kBAYI21C,GAZJ,4C,yPC0BDE,G,6MACKh5D,MAAgC,CACnCi5D,SAAUx2D,IAAO,EAAK8G,MAAMiM,OAAOhT,SAAU,cAAc4sB,SAC3DA,OAAQ3sB,IAAO,EAAK8G,MAAMiM,OAAO3S,OAAQ,cAAcusB,SACvD8pC,eAAe,EACfC,aAAa,EACbz2C,eAAgB,GAChB02C,sBAAuB,I,EAmB3B1Y,qBAAuB,SAACjpC,GACpB,EAAKC,SAAS,CAAEgL,eAAgBjL,EAAShf,QAAS,kBAAM,EAAK21B,a,EAqBjEA,OAAS,WACL,IAAM07B,E,2VAA+B,IAC9B,EAAKvgD,MAAMiM,OADmB,CAEjChT,SAAUC,IAAO,EAAKzC,MAAMi5D,UAAUr2D,OAAO,cAC7CC,OAAQJ,IAAO,EAAKzC,MAAMovB,QAAQxsB,OAAO,cACzCI,oBAAqB,EAAKhD,MAAM0iB,eAChCnnB,SAAU,KAEd,EAAKgO,MAAMiuC,eAAesS,I,oFA9CT,IAAD,QDpCjB,WAAP,iCCsCOuP,GAA+BxnD,MAAK,SAACyX,GAChC,IAAM8vC,EAAwB9vC,EAAQjW,KAAI,SAACmF,GACvC,MAAO,CACHre,MAAOqe,EACP/f,MAAO+f,MAIf4gD,EAAsBE,QAAQ,CAAEn/D,MAAO,GAAI1B,MAAO,KAElD,EAAKif,SAAS,CAAE0hD,+B,8BAQhB39C,EAAmBlX,GACvB,IAAM6oB,EAAUO,GAAgBlS,GAC5BmzB,OAAQz6C,EACC,OAATsnB,IACAmzB,EAAQnzB,GAEC,SAATlX,EACA/L,KAAKkf,SAAS,CAAEuhD,SAAUrqB,EAAOsqB,cAAe9rC,IAEhD50B,KAAKkf,SAAS,CAAE0X,OAAQwf,EAAOuqB,YAAa/rC,M,0CAIhC/U,GAChBA,EAAMC,iBACN9f,KAAK41B,W,+BAcC,IAAD,OACL,OACI,0BAAMzQ,SAAU,SAACtF,GAAD,OAAW,EAAKkhD,oBAAoBlhD,KAChD,yBAAK7O,UAAU,oBACX,yBAAKA,UAAU,eACX,2BAAOmqB,QAAQ,YAAYn7B,KAAK+Q,MAAMiP,EAAE,8BACxC,kBAAC,GAAD,KACI,kBAAC,KAAD,CACIqR,SAAUrxB,KAAKwH,MAAMi5D,SACrBthD,SAAU,SAACoB,GAAD,OAAO,EAAKg0C,QAAQh0C,EAAG,SACjCvP,UAAWO,KAAW,aAAc,cAAe,CAC/CglB,SAAUv2B,KAAKwH,MAAMk5D,gBAEzBllC,WAAW,gBAGnB,kBAAC,GAAD,KACI,kBAACnF,GAAD,CACIle,KAAK,WACLme,YAAY,aACZnX,SAAU,SAACoB,GAAD,OAAO,EAAKg0C,QAAQh0C,EAAG,SACjC8Q,SAAUrxB,KAAKwH,MAAMi5D,SACrBlqC,SAAUv2B,KAAKwH,MAAMk5D,kBAIjC,yBAAK1vD,UAAU,eACX,2BAAOmqB,QAAQ,UAAUn7B,KAAK+Q,MAAMiP,EAAE,4BACtC,kBAAC,GAAD,KACI,kBAAC,KAAD,CACIqR,SAAUrxB,KAAKwH,MAAMovB,OACrBzX,SAAU,SAACoB,GAAD,OAAO,EAAKg0C,QAAQh0C,EAAG,OACjCvP,UAAWO,KAAW,aAAc,cAAe,CAC/CglB,SAAUv2B,KAAKwH,MAAMm5D,cAEzBnlC,WAAW,gBAGnB,kBAAC,GAAD,KACI,kBAACnF,GAAD,CACIle,KAAK,SACLme,YAAY,aACZnX,SAAU,SAACoB,GAAD,OAAO,EAAKg0C,QAAQh0C,EAAG,OACjC8Q,SAAUrxB,KAAKwH,MAAMovB,OACrBL,SAAUv2B,KAAKwH,MAAMm5D,gBAIjC,yBAAK3vD,UAAU,iBACX,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIkC,KAAMlT,KAAK+Q,MAAMiP,EAAE,2BACnBxO,UAAWxR,KAAKwH,MAAMk5D,gBAAkB1gE,KAAKwH,MAAMm5D,YACnD50D,KAAK,aAIjB,yBAAKiF,UAAU,eACX,2BAAOmqB,QAAQ,mBAAmBn7B,KAAK+Q,MAAMiP,EAAE,uCAC/C,kBAAC,GAAD,CACIgY,gBAAgB,WAChBC,eAAgBj4B,KAAK+Q,MAAMiP,EAAE,wCAC7B+X,QAAS/3B,KAAKwH,MAAMo5D,sBACpBtoC,mBAAoBt4B,KAAKkoD,8B,GA1HrB72C,aAmIjB6f,kBAAkBsvC,IC1IlBQ,I,OAdiE,SAAC,GAAkB,IAAhB/jB,EAAe,EAAfA,SACzE9sB,EAAWrC,GAAmBmvB,EAAShvB,WAE7C,OAAKgvB,EAAS5sB,WAKV,yBAAK7d,MAAO,CAAEqrC,UAAW,UACrB,kBAAC,GAAD,CAAe1sC,KAAM8vD,KAAgB/vD,YAAaif,EAAUnf,UAAU,sBALnE,OCAFkwD,I,OAAkD,SAAC,GAA2B,IAAzB/vD,EAAwB,EAAxBA,KAAM5P,EAAkB,EAAlBA,YAC5Dye,EAAMiG,eAANjG,EACR,OACI,yBAAKhP,UAAU,kBACX,kBAAC,GAAD,CAAiBG,KAAMA,IACvB,yBAAKH,UAAU,eAAegP,EAAEze,OCYtCg8C,GAA8B,CAClC,CACEv4C,UAAW,cACXC,YAAa,kCACby5C,MAAM,EACNlB,cAAe,SAACzjB,GAAD,OAAO,GACtB6kB,mBDbyE,SAAC,GAAkB,IAAhB3B,EAAe,EAAfA,SAC5E,OAAO,kBAAC,GAAD,CAAiB9rC,KAAM8rC,EAAShrC,KAAM1Q,YAAa07C,EAAS3sB,gBCcrE,CACEtrB,UAAW,kBACXC,YAAa,kCACbu4C,cAAe,SAACzjB,GAAD,OAAO,GACtB6kB,mBAAoBoe,IAEtB,CACEh4D,UAAW,YACXC,YAAa,oCACbu4C,cAAe,SAACzjB,GAAD,OAAO,IAExB,CACE/0B,UAAW,SACXC,YAAa,oCACbu4C,cAAe,SAACzjB,GAAD,OAAO,GACtB6kB,mBAAoBqe,GACpBnf,gBAAiB,SAEnB,CACE94C,UAAW,aACXC,YAAa,UACbu4C,cAAe,SAACzjB,GAAD,OAAO,GACtB6kB,mBAAoBoiB,GACpBljB,gBAAiB,UA6BN,SAASqjB,GAAcpwD,GAA4B,IAAD,EAM3D0qD,GAAiB1qD,GAJnB2rD,EAF6D,EAE7DA,wBACAhB,EAH6D,EAG7DA,uBACAE,EAJ6D,EAI7DA,uBACAE,EAL6D,EAK7DA,YAGM97C,EAAMiG,eAANjG,EACA2Q,EAAmB5f,EAAnB4f,eAER,OACE,yBAAK3f,UAAU,qBACXD,EAAMlH,cACN,oCACE,wBAAImH,UAAU,uBAAuBgP,EAAE,oBACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,uBAG5C,kBAAC,GAAD,CACE1C,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,GAEXE,mBAAmB,iCACnBC,iBAAiB,2BAEjB,kBAAC,GAAD,CACEK,MAAOwB,EAAE,0BACTu9B,QAASA,GACTQ,aAAchtC,EAAMogD,cACpBn0C,OAAQjM,EAAMiM,OACdgiC,eAAgBjuC,EAAMiuC,eACtBhzB,SAAUjb,EAAMib,SAChBuyB,kBACoC,IAAlCxtC,EAAMtG,wBACFuV,EAAE,8BACF,GAEN88B,gBACE,kBAAC,GAAD,CACEkC,eAAgBjuC,EAAMiuC,eACtBhiC,OAAQjM,EAAMiM,SAGlB+/B,eAAgBL,GAAoBE,MACpC/pC,UAAW9B,EAAMtG,2BAGrB,kBAAC,GAAD,CACE6S,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,wBACZgP,EAAE,2BAA6B,MAAQjP,EAAMqwD,oBAEhD,kBAAC,GAAD,CACEf,oBAAqBtvD,EAAM5F,wBAC3Bg1D,kBAAmBpvD,EAAMovD,kBACzBp1D,uBAAwBgG,EAAMhG,uBAC9Bq1D,qBAAsBrvD,EAAMqvD,qBAC5Bn1D,0BAA2B8F,EAAM9F,0BACjC8lB,QAASJ,EACTqvC,kBAAmBjvD,EAAMivD,kBACzB/D,qBAAsBlrD,EAAMkrD,qBAC5BgE,mBAAoBlvD,EAAMkvD,mBAC1BpvC,cAAe9f,EAAMqwD,qBAEtBrwD,EAAMnG,eACL,kBAAC,GAAD,CACEqG,QAAS,kBAAMF,EAAMswD,0BACrBnuD,KAAM8M,EAAE,gCAIbjP,EAAMnG,eACL,kBAAC,GAAD,CAAeA,cAAemG,EAAMnG,gBAGtC,kBAAC,GAAD,KACE,kBAAC,GAAD,CAAOW,OAAQmwD,GACb,kBAAC,GAAD,CAAaxoD,KAAM8M,EAAE,qCACrB,yBAAKhP,UAAU,kBACb,2BAAI4qD,GACJ,kBAAC,GAAD,CACE1oD,KAAM8M,EAAE,cACR/O,QAASyrD,OAMhBZ,GAAe,kBAAC,IAAD,CAAUp9C,GAAIuS,M,WC1K9BssB,GAA8B,CAChC,CACIv4C,UAAW,cACXC,YAAa,oCACbu4C,cAAe,SAACzjB,GAAD,OAAO,GACtB6kB,mBChB2E,SAAC,GAAkB,IAAhB3B,EAAe,EAAfA,SAClF,OAAO,kBAAC,GAAD,CAAiBhtB,YAAagtB,EAAU/sB,cAAY,OD2ChD,SAASoxC,GAAoBvwD,GAAkC,IAAD,EACwB0qD,GAC7F1qD,GADI2rD,EADiE,EACjEA,wBAAyBhB,EADwC,EACxCA,uBAAwBE,EADgB,EAChBA,uBAAwBE,EADR,EACQA,YAGzE97C,EAAMiG,eAANjG,EACA2Q,EAAmB5f,EAAnB4f,eAER,OACI,yBAAK3f,UAAU,4CACX,wBAAIA,UAAU,uBAAuBgP,EAAE,oBACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,sBACxC,kBAAC,GAAD,CACI1C,SAAU,CACNC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGb,yBAAKhN,UAAU,wBACVgP,EAAE,2BAA6B,MAAQjP,EAAMqwD,oBAElD,kBAAC,GAAD,CACIf,oBAAqBtvD,EAAM5F,wBAC3Bg1D,kBAAmBpvD,EAAMovD,kBACzBp1D,uBAAwBgG,EAAMhG,uBAC9Bq1D,qBAAsBrvD,EAAMqvD,qBAC5Bn1D,0BAA2B8F,EAAM9F,0BACjC8lB,QAASJ,EACTqvC,kBAAmBjvD,EAAMivD,kBACzB/D,qBAAsBlrD,EAAMkrD,qBAC5BgE,mBAAoBlvD,EAAMkvD,mBAC1BpvC,cAAe9f,EAAMqwD,qBAExBrwD,EAAMnG,eACH,yBAAKoG,UAAU,wBAAwBC,QAAS,kBAAMF,EAAMswD,2BACvDrhD,EAAE,+BAIf,kBAAC,GAAD,CACI1C,SAAU,CACNC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,KAGb,kBAAC,GAAD,CACIQ,MAAOwB,EAAE,0BACTu9B,QAASA,GACTQ,aAAchtC,EAAMogD,cACpBn0C,OAAQjM,EAAMiM,OACdgiC,eAAgBjuC,EAAMiuC,eACtBhzB,SAAUjb,EAAMib,SAChBuyB,kBAAoD,IAAlCxtC,EAAMtG,wBAAoCuV,EAAE,8BAAgC,GAC9F88B,gBAAiB,kBAAC,GAAD,CAAmBkC,eAAgBjuC,EAAMiuC,eAAgBhiC,OAAQjM,EAAMiM,SACxFnK,UAAW9B,EAAMtG,2BAGxBsG,EAAMnG,eAAiB,kBAAC,GAAD,CAAeA,cAAemG,EAAMnG,gBAE5D,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAOW,OAAQmwD,GACX,kBAAC,GAAD,CAAaxoD,KAAM8M,EAAE,qCACrB,yBAAKhP,UAAU,kBACX,2BAAI4qD,GACJ,kBAAC,GAAD,CAAe5qD,UAAU,SAASkC,KAAM8M,EAAE,cAAe/O,QAASyrD,OAK7EZ,GAAe,kBAAC,IAAD,CAAUp9C,GAAIuS,M,IEjFpCrS,G,+LAEE5e,KAAK+Q,MAAMwwD,qB,+BAGX,OACI,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI13D,aAAc7J,KAAK+Q,MAAMlH,aACzBmiB,SAAUhsB,KAAK+Q,MAAMiM,OAAOja,SAC5B0H,wBAAyBzK,KAAK+Q,MAAMtG,wBACpCuS,OAAQhd,KAAK+Q,MAAMiM,OACnBgiC,eAAgBh/C,KAAK+Q,MAAMiuC,eAC3BmS,cAAenxD,KAAK+Q,MAAMogD,cAC1BvmD,cAAe5K,KAAK+Q,MAAMnG,cAC1By2D,uBAAwBrhE,KAAK+Q,MAAMswD,uBACnClB,kBAAmBngE,KAAK+Q,MAAMovD,kBAC9Bp1D,uBAAwB/K,KAAK+Q,MAAMhG,uBACnCq1D,qBAAsBpgE,KAAK+Q,MAAMqvD,qBACjCn1D,0BAA2BjL,KAAK+Q,MAAM9F,0BACtCm2D,mBAAoBphE,KAAK+Q,MAAMmK,cAAcI,UAC7C8gD,eAAgBp8D,KAAK+Q,MAAMmK,cAAc5Q,UACzCqmB,eAAgB3wB,KAAK+Q,MAAMmK,cAAczN,eACzCuyD,kBAAmBhgE,KAAK+Q,MAAMivD,kBAC9B/D,qBAAsBj8D,KAAK+Q,MAAMkrD,qBACjC9wD,wBAAyBnL,KAAK+Q,MAAM5F,wBACpC80D,mBAAoBjgE,KAAK+Q,MAAMkvD,mBAC/B30D,eAAgBtL,KAAK+Q,MAAMzF,eAC3BkxD,iBAAkBx8D,KAAK+Q,MAAMyrD,iBAC7BD,kBAAmBv8D,KAAK+Q,MAAMwrD,qBAGtC,kBAAC,GAAD,KACI,kBAAC+E,GAAD,CACIt1C,SAAUhsB,KAAK+Q,MAAMiM,OAAOja,SAC5B0H,wBAAyBzK,KAAK+Q,MAAMtG,wBACpCuS,OAAQhd,KAAK+Q,MAAMiM,OACnBgiC,eAAgBh/C,KAAK+Q,MAAMiuC,eAC3BmS,cAAenxD,KAAK+Q,MAAMogD,cAC1BvmD,cAAe5K,KAAK+Q,MAAMnG,cAC1By2D,uBAAwBrhE,KAAK+Q,MAAMswD,uBACnClB,kBAAmBngE,KAAK+Q,MAAMovD,kBAC9Bp1D,wBAAwB,EACxBq1D,qBAAsBpgE,KAAK+Q,MAAMqvD,qBACjCn1D,0BAA2BjL,KAAK+Q,MAAM9F,0BACtCm2D,mBAAoBphE,KAAK+Q,MAAMmK,cAAcI,UAC7C8gD,eAAgBp8D,KAAK+Q,MAAMmK,cAAc5Q,UACzCqmB,eAAgB3wB,KAAK+Q,MAAMmK,cAAczN,eACzCuyD,kBAAmBhgE,KAAK+Q,MAAMivD,kBAC9B/D,qBAAsBj8D,KAAK+Q,MAAMkrD,qBACjC9wD,wBAAyBnL,KAAK+Q,MAAM5F,wBACpC80D,mBAAoBjgE,KAAK+Q,MAAMkvD,mBAC/B30D,eAAgBtL,KAAK+Q,MAAMzF,eAC3BkxD,iBAAkBx8D,KAAK+Q,MAAMyrD,iBAC7BD,kBAAmBv8D,KAAK+Q,MAAMwrD,0B,GAvD9BlrD,aAiGT4W,gBAlCS,SAACzgB,GACrB,MAAO,CACH0T,cAAe1T,EAAM+F,KAAKhR,MAC1BsN,aAAcrC,EAAMmH,YAAY9E,aAChCmT,OAAQxV,EAAMoH,QAAQ7E,kBACtBonD,cAAe3pD,EAAMoH,QAAQ9E,aAC7BW,wBAAyBjD,EAAMoH,QAAQnE,wBACvCG,cAAepD,EAAMoH,QAAQhE,cAC7BG,uBAAwBvD,EAAMoH,QAAQ7D,uBACtCE,0BAA2BzD,EAAMoH,QAAQ3D,0BACzCE,wBAAyB3D,EAAMoH,QAAQzD,wBACvC80D,mBAAoBz4D,EAAMoH,QAAQxD,oBAClCE,eAAgB9D,EAAMoH,QAAQtD,mBAIX,SAAC0K,GACxB,MAAO,CACHmqD,kBAAmB,kBAAMnqD,EC7DA,uCAAiD,WAAOA,EAAUoD,GAAjB,mBAAA3a,EAAA,sDACxEue,EAAS5D,IAAWxK,QAAQ7E,kBAC5By3D,EAAYpoD,IAAW7L,KAAKhR,MAAM4e,UAClCsmD,EAAMx3D,MAASG,OAAO,cAE5B4L,EAAS,CAAEjK,KnPnD4B,8BmPmDmBqB,SAAS,IACnE8I,GAAkB,IAAIklD,GAA0Bp+C,IAC3C3D,MAAK,SAACxD,GACHG,EAAS,CAAEjK,KnPrDoB,8BmPqD2BqB,SAAS,IAEnE,IAAMwhB,EAAO,IAAIC,KAAK,CAAChZ,EAASrT,MAAO,CAAEuJ,KAAM,2BACzC0J,EAAMva,OAAO8zB,IAAIC,gBAAgBL,GACjCM,EAAOC,SAASC,cAAc,KACpCF,EAAKxb,KAAO+B,EACZ,IAAM0Y,EAAQ,UAAMqzC,EAAY,IAAMC,EAAxB,QACdvyC,EAAKG,aAAa,WAAYlB,GAC9BgB,SAAS9Y,KAAKiZ,YAAYJ,GAC1BA,EAAKK,QACLL,EAAKM,YAER7Z,OAAM,SAACjK,GACJsK,EAAS,CAAEjK,KnPjEoB,8BmPiE2BqB,QAAS1B,OArBG,2CAAjD,0DD8DzB00D,qBAAsB,kBAAMpqD,ECrCA,uCAAiD,WAAOA,EAAUoD,GAAjB,mBAAA3a,EAAA,sDAC3Eue,EAAS5D,IAAWxK,QAAQ7E,kBAC5By3D,EAAYpoD,IAAW7L,KAAKhR,MAAM4e,UAClCsmD,EAAMx3D,MAASG,OAAO,cAE5B4L,EAAS,CAAEjK,KnPzEgC,kCmPyEmBqB,SAAS,IACvE8I,GAAkB,IAAImlD,GAA6Br+C,GAAS,CAAC0kD,aAAc,SACtEroD,MAAK,SAACxD,GACHG,EAAS,CAAEjK,KnP3EwB,kCmP2E2BqB,SAAS,IAEvE,IAAMwhB,EAAO,IAAIC,KAAK,CAAChZ,EAASrT,MAAO,CAAEuJ,KAAM,6BACzC0J,EAAMva,OAAO8zB,IAAIC,gBAAgBL,GACjCM,EAAOC,SAASC,cAAc,KACpCF,EAAKxb,KAAO+B,EACZ,IAAM0Y,EAAQ,UAAMqzC,EAAY,IAAMC,EAAxB,QACdvyC,EAAKG,aAAa,WAAYlB,GAC9BgB,SAAS9Y,KAAKiZ,YAAYJ,GAC1BA,EAAKK,QACLL,EAAKM,YAER7Z,OAAM,SAACjK,GACJsK,EAAS,CAAEjK,KnPvFwB,kCmPuF2BqB,QAAS1B,OArBE,2CAAjD,0DDsC5B61D,iBAAkB,kBAAMvrD,ECvFA,uCAAiD,WAAOA,EAAUoD,GAAjB,eAAA3a,EAAA,sDACvElC,EAA0B6c,IAAW7L,KAAKhR,MAEhDyZ,EAAS,CAAEjK,KnPhC4B,8BmPgCmBqB,SAAS,IACnEgI,GAAsB,IAAIkmD,GAAqB/+D,EAAMwR,QAAQsJ,aACxDgC,MAAK,SAACxD,GACHG,EAAS,CAAEjK,KnPlCoB,8BmPkC2BqB,QAASyI,EAASrT,UAE/EmT,OAAM,SAACjK,GACJsK,EAAS,CAAEjK,KnPpCoB,8BmPoC2BqB,QAAS1B,OATE,2CAAjD,0DDwFxB21D,uBAAwB,kBAAMrrD,EAAS,CAAEjK,KlPtHA,oCkPsHyCqB,SAAS,KAC3F4yD,kBAAmB,kBAAMhqD,EC5EK,uCAAiD,WAAOA,GAAP,SAAAvX,EAAA,sDACnFuX,EAAS,CAAEjK,KnPvCkC,oCmPuCmBqB,SAAS,IACzEgI,GAA4B,IAAImmD,IAC3BliD,MAAK,SAACxD,GACHG,EAAS,CAAEjK,KnPzC0B,oCmPyC2BqB,QAASyI,EAASrT,UAErFmT,OAAM,SAACjK,GACJsK,EAAS,CAAEjK,KnP3C0B,oCmP2C2BqB,QAAS1B,OAPE,2CAAjD,wDD6E9BszC,eAAgB,SAACsS,GACbt7C,ECtG2B,SACnCs7C,GADmC,8CAES,WAAOt7C,EAAUoD,GAAjB,iBAAA3a,EAAA,sDACtCkjE,EAAoBvoD,IAAW7L,KAAKhR,MAAM+N,UAC1Cs3D,EAAwBxoD,IAAW7L,KAAKhR,MAAM+e,UACpDg2C,EAAUhnD,UAAYq3D,EACtBrQ,EAAU/mD,cAAgBq3D,EAC1B5rD,EAAS,CAAEjK,KnP3BuB,yBmP2BmBqB,QAASkkD,IAC9Dt7C,EArB2B,uCAAiD,WAAOA,EAAUoD,GAAjB,eAAA3a,EAAA,sDACxEue,EAAS5D,IAAWxK,QAAQ7E,kBAChCiM,EAAS,CAAEjK,KnPZ4B,8BmPYmBqB,SAAS,IAEnE8I,GAAqB,IAAIua,GAA0BzT,IAC9C3D,MAAK,SAACxD,GACHG,EAAS,CAAEjK,KnPfoB,8BmPe2BqB,QAASyI,EAASrT,UAE/EmT,OAAM,SAACjK,GACJsK,EAAS,CAAEjK,KnPjBoB,8BmPiB2BqB,QAAS1B,OATC,2CAAjD,yDAeiB,2CAFT,wDDsGlBm2D,CAAwBvQ,KAErC2K,qBAAsB,SAAC1wD,GACnByK,EAAS,CAAEjK,KlPxHgC,0CkPwHeqB,QAAS7B,KAEvEixD,iBAAkB,SAACztB,GAAD,OAAwB/4B,EAAS,CAAEjK,KlP9G5B,oBkP8GqDqB,QAAS2hC,KACvFwtB,kBAAmB,kBAAMvmD,EAAS,CAAEjK,KlPhHV,2BkPoHnBkc,CAA6CrJ,IE/B7CkjD,I,OAvF+B,SAAC/wD,GAAW,IAChDgxD,EAAiBhxD,EAAjBgxD,aACA/hD,EAAMiG,eAANjG,EAER,OACE,sCACM+hD,GACF,oCACE,kBAAC,GAAD,CACEzkD,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,8BAAf,sBACA,uBAAGA,UAAU,+BACVgP,EAAE,0CAA2C,CAAE+hD,kBAElD,uBAAG/wD,UAAU,uCACVgP,EAAE,oDAGL,kBAAC,GAAD,CACE9M,KAAM8M,EAAE,4CACR/O,QAAS,kBAAM/V,OAAO6sB,KAAP,iBAAsBg6C,KACrC/wD,UAAU,6BAGd,kBAAC,GAAD,CACEsM,SAAU,CACRC,YAAa,EACbG,WAAY,EACZG,SAAU,EACVG,QAAS,IAGX,kBAAC,GAAD,CACEu/B,QAASxsC,EAAMwsC,QACfQ,aAAchtC,EAAMgtC,aACpB/gC,OAAQjM,EAAMiM,OACdgiC,eAAgBjuC,EAAMiuC,eACtBhzB,SAAUjb,EAAMiM,OAAOja,SACvBw7C,kBACsB,IAApBxtC,EAAM8B,UACFmN,EAAE,+CACF,GAENnN,UAAW9B,EAAM8B,UACjBqqC,WAAY,SAACD,GAAD,OACVlsC,EAAMixD,gBAAgB/kB,SAM9B,kBAAC,GAAD,CACE3/B,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,kBAAC,GAAD,CACEu/B,QAASxsC,EAAMwsC,QACfQ,aAAchtC,EAAMgtC,aACpB/gC,OAAQjM,EAAMiM,OACdgiC,eAAgBjuC,EAAMiuC,eACtBhzB,SAAUjb,EAAMiM,OAAOja,SACvBw7C,kBACsB,IAApBxtC,EAAM8B,UACFmN,EAAE,+CACF,GAENnN,UAAW9B,EAAM8B,UACjBqqC,WAAY,SAACD,GAAD,OACVlsC,EAAMixD,gBAAgB/kB,UCjGfglB,G,kCAAAA,GACLC,MAAQ,QADHD,GAELE,KAAO,OAFFF,GAGLG,kBAAoB,oBAHfH,GAILI,0BAA4B,4BAJvBJ,GAKLK,wBAA0B,0BALrBL,GAMLM,0BAA4B,4BANvBN,GAOLO,iBAAmB,mBAPdP,GAQLQ,UAAY,YCI5B,IA0EeC,GA1EiD,SAAC,GAE1D,IADLC,EACI,EADJA,eAEQ3iD,EAAMiG,eAANjG,EACR,OACE,oCACE,kBAAC,GAAD,KACE,2BAAOhP,UAAU,eACf,+BACE,wBAAIA,UAAU,cACZ,4BAAKgP,EAAE,4CACP,4BAAKA,EAAE,uCACP,4BAAKA,EAAE,qCACP,4BAAKA,EAAE,sCACP,4BAAKA,EAAE,6CACP,4BAAKA,EAAE,6CAGX,+BACE,4BACE,4BACE,2BAAI2iD,EAAetiE,KAErB,4BACE,2BAAIsiE,EAAeC,UAErB,4BAAKD,EAAeE,WACpB,4BAAKF,EAAe1T,YACpB,4BACGhlD,IAAO04D,EAAeG,cAAc14D,OAAO,eAE9C,4BACGH,IAAO04D,EAAeI,cAAc34D,OAAO,mBAMtD,kBAAC,GAAD,KACE,2BAAO4G,UAAU,eACf,4BACE,4BAAKgP,EAAE,4CACP,4BACE,2BAAI2iD,EAAetiE,MAGvB,4BACE,4BAAK2f,EAAE,uCACP,4BACE,2BAAI2iD,EAAeC,WAGvB,4BACE,4BAAK5iD,EAAE,qCACP,4BAAK2iD,EAAeE,YAEtB,4BACE,4BAAK7iD,EAAE,sCACP,4BAAK2iD,EAAe1T,aAEtB,4BACE,4BAAKjvC,EAAE,6CACP,4BAAK/V,IAAO04D,EAAeG,cAAc14D,OAAO,gBAElD,4BACE,4BAAK4V,EAAE,2CACP,4BAAK/V,IAAO04D,EAAeI,cAAc34D,OAAO,oBCiE7C44D,GArH2C,SAACjyD,GA+BzD,OACE,oCACE,kBAAC,GAAD,CACEuM,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,GAEXG,iBAAiB,0BACjBD,mBAAmB,sBAEnB,kBAAC,GAAD,CAAqBykD,eAAgB5xD,EAAMkyD,gBAC3C,6BAASjyD,UAAU,iBACjB,kBAAC,KAAD,CACEitC,SAAUltC,EAAMmyD,gBAChBllB,UAAW,EACXI,OAAQ,kBAAC,GAAD,OAER,kBAAC,GAAD,CACElrC,KAAK,cACLlC,UAAU,qBACVC,QAASF,EAAMoyD,uBAEfpyD,EAAM8B,WACN9B,EAAMqyD,eACLryD,EAAMqyD,cAAczgE,KAAoCkY,KACvD,SAACwoD,GAAD,OACE,6BACEryD,UAAW,gBAAkBqyD,EAAIC,QAAU,WAAa,KAExD,kBAAC,GAAD,KACE,0BAAMtyD,UAAU,aACb/G,IAAOo5D,EAAIP,cAAc14D,OACxB,6BAIN,kBAAC,GAAD,KACE,yBAAK4G,UAAU,YACb,8BACG/G,IAAOo5D,EAAIP,cAAc14D,OAAO,oBAIvC,4BAAKi5D,EAAIE,UAAY,QACrB,uBAAGvyD,UAAU,aACX,2BA7EQ,SAC1BwyD,EACAC,GAEA,GAAIA,EACF,MAAO,uBAGT,OAAQD,GACN,KAAKvB,GAAqBC,MACxB,MAAO,0BACT,KAAKD,GAAqBE,KACxB,MAAO,eACT,KAAKF,GAAqBG,kBACxB,MAAO,mBACT,KAAKH,GAAqBI,0BACxB,MAAO,6BACT,KAAKJ,GAAqBK,wBACxB,MAAO,2BACT,KAAKL,GAAqBM,0BACxB,MAAO,uBACT,KAAKN,GAAqBO,iBACxB,MAAO,oBACT,KAAKP,GAAqBQ,UACxB,MAAO,sBACT,QACE,MAAO,IAmDWiB,CAAoBL,EAAIM,OAAQN,EAAIC,WAEzCD,EAAIC,SAAW,uBAAGtyD,UAAU,WAAb,iBACdqyD,EAAIC,SACJ,yBACEtyD,UAAU,UACV0S,wBAAyB,CAAEC,OAAQ0/C,EAAIO,QAI1CP,EAAIQ,YAAYphE,OAAS,GACxB,yBAAKuO,UAAU,wBACZqyD,EAAIQ,YAAYhpD,KAAI,SAACipD,GAAD,OACnB,kBAAC,GAAD,CACE3sC,QAAS2sC,EAAWzjE,GACpB0f,SAAU,SAACga,GAAD,OACR7+B,OAAO6sB,KAAK+7C,EAAWC,kBAGxBD,EAAW/oD,iBAWlC,kBAAC,GAAD,CACE/J,UAAU,cACVG,KAAM6C,KACN9C,YAAaH,EAAMizD,gBC1GrBC,G,oLAC0B,IAAD,SAC6BjkE,KAAK+Q,MAArDiP,EADmB,EACnBA,EAAG+hD,EADgB,EAChBA,aAAcY,EADE,EACFA,eAAgB5mE,EADd,EACcA,WAEzC,OACE,yBAAKiV,UAAU,0CACXhR,KAAK+Q,MAAMlH,cACX,oCACE,wBAAImH,UAAU,uBACXgP,EAAE,6BAEL,uBAAGhP,UAAU,yBACVgP,EAAE,6BAA8B,CAAEjkB,kBAIvC4mE,GACA,kBAAC,GAAD,CACEZ,aAAcA,EACdC,gBAAiBhiE,KAAK+Q,MAAMixD,gBAC5BnvD,UAAW7S,KAAK+Q,MAAMmzD,eACtB3mB,QAASv9C,KAAK+Q,MAAMwsC,QACpBQ,aAAc/9C,KAAK+Q,MAAMgtC,aACzB/gC,OAAQhd,KAAK+Q,MAAMiM,OACnBgiC,eAAgBh/C,KAAK+Q,MAAMiuC,iBAG9B2jB,GACC,kBAAC,GAAD,CACEQ,oBAAqBnjE,KAAK+Q,MAAMoyD,oBAChCa,YAAa,kBAAM,EAAKjzD,MAAMozD,qBAC9BlB,cAAejjE,KAAK+Q,MAAM4xD,eAC1B9vD,UAAW7S,KAAK+Q,MAAMqzD,oBACtBhB,cAAepjE,KAAK+Q,MAAMqyD,cAC1BpmD,OAAQhd,KAAK+Q,MAAMiM,OACnBkmD,gBAAiBljE,KAAK+Q,MAAMszD,4B,GAnCDhzD,aA2CxB6f,kBAAkB+yC,IC8BlBK,GAtF2C,SAACvzD,GAAW,IAC5DgxD,EAAiBhxD,EAAjBgxD,aACA/hD,EAAMiG,eAANjG,EACR,OACE,sCACM+hD,GACF,oCACE,kBAAC,GAAD,CACEzkD,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,KAGX,yBAAKhN,UAAU,8BAAf,sBACA,uBAAGA,UAAU,+BACVgP,EAAE,0CAA2C,CAAE+hD,kBAElD,uBAAG/wD,UAAU,uCACVgP,EAAE,oDAGL,kBAAC,GAAD,CACE9M,KAAM8M,EAAE,4CACR/O,QAAS,kBAAM/V,OAAO6sB,KAAP,iBAAsBg6C,KACrC/wD,UAAU,oCAGd,kBAAC,GAAD,CACEsM,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,GACVG,QAAS,IAGX,kBAAC,GAAD,CACEu/B,QAASxsC,EAAMwsC,QACfQ,aAAchtC,EAAMgtC,aACpB/gC,OAAQjM,EAAMiM,OACdgiC,eAAgBjuC,EAAMiuC,eACtBhzB,SAAUjb,EAAMiM,OAAOja,SACvBw7C,kBACsB,IAApBxtC,EAAM8B,UACFmN,EAAE,+CACF,GAENnN,UAAW9B,EAAM8B,UACjBqqC,WAAY,SAACD,GAAD,OACVlsC,EAAMixD,gBAAgB/kB,SAM9B,kBAAC,GAAD,CACE3/B,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,KAGX,kBAAC,GAAD,CACEu/B,QAASxsC,EAAMwsC,QACfQ,aAAchtC,EAAMgtC,aACpB/gC,OAAQjM,EAAMiM,OACdgiC,eAAgBjuC,EAAMiuC,eACtBhzB,SAAUjb,EAAMiM,OAAOja,SACvBw7C,kBACsB,IAApBxtC,EAAM8B,UACFmN,EAAE,+CACF,GAENnN,UAAW9B,EAAM8B,UACjBqqC,WAAY,SAACD,GAAD,OACVlsC,EAAMixD,gBAAgB/kB,SCjBrBsnB,G,oLA/CiB,IAAD,SAC0BvkE,KAAK+Q,MAAlDgxD,EADmB,EACnBA,aAAcY,EADK,EACLA,eAAgB5mE,EADX,EACWA,WACtC,OACE,kBAAC,KAAD,MACG,SAACikB,GACA,OACE,yBAAKhP,UAAU,wDACX,EAAKD,MAAMlH,cACX,oCACE,wBAAImH,UAAU,uBACXgP,EAAE,6BAEL,uBAAGhP,UAAU,yBACVgP,EAAE,6BAA8B,CAAEjkB,kBAIvC4mE,GACA,kBAAC,GAAD,CACEZ,aAAcA,EACdC,gBAAiB,EAAKjxD,MAAMixD,gBAC5BnvD,UAAW,EAAK9B,MAAMmzD,eACtB3mB,QAAS,EAAKxsC,MAAMwsC,QACpBQ,aAAc,EAAKhtC,MAAMgtC,aACzB/gC,OAAQ,EAAKjM,MAAMiM,OACnBgiC,eAAgB,EAAKjuC,MAAMiuC,iBAG9B2jB,GACC,kBAAC,GAAD,CACEQ,oBAAqB,EAAKpyD,MAAMoyD,oBAChCa,YAAa,kBAAM,EAAKjzD,MAAMozD,qBAC9BlB,cAAe,EAAKlyD,MAAM4xD,eAC1B9vD,UAAW,EAAK9B,MAAMqzD,oBACtBhB,cAAe,EAAKryD,MAAMqyD,cAC1BpmD,OAAQ,EAAKjM,MAAMiM,OACnBkmD,gBAAiB,EAAKnyD,MAAMszD,+B,GArCDhzD,aC5BhCmzD,GAAb,YACE,WAAYxnD,GAA2B,IAAD,6BAGpC,8CAFkB,gCAIb3G,KAAO2G,EALwB,EADxC,4BAAoDzF,ICAvCktD,GAAb,YACE,WAAYC,EAAkB1nD,GAA2B,IAAD,sBACtD,IAAIvH,EAAW,qCAAiCivD,EAAjC,kBADuC,OAGtD,8CAAMjvD,KAEDY,KAAO2G,EAL0C,EAD1D,4BAAyDzF,ICA5CotD,GAAb,YACE,WAAYD,EAAkBl/C,GAAkB,IAAD,sBAC7C,IAAI/P,EAAW,qCAAiCivD,EAAjC,UAD8B,OAG7C,8CAAMjvD,KAEDY,KAAO,CAAEuuD,eAAgBp/C,GALe,EADjD,4BAAkDjO,ICcnCstD,GAZ4D,SAAC,GAErE,IADL5nB,EACI,EADJA,SAEA,OACE,0BAAMz+B,MAAOy+B,EAAS2lB,SACnB3lB,EAAS2lB,QAAQngE,OAAS,GACvBw6C,EAAS2lB,QAAQkC,UAAU,EAAG,IAAM,MACpC7nB,EAAS2lB,UCoFJmC,GA1EyC,SAACh0D,GAAW,IAC1DiP,EAAMiG,eAANjG,EADyD,EAEnCxL,mBAAiB,IAFkB,oBAE1DgR,EAF0D,KAEjDw/C,EAFiD,KAc3D35B,EACJ,oCACE,kBAAC,GAAD,CAAan4B,KAAM8M,EAAE,iDAErB,yBAAKhP,UAAU,2BACb,yBAAKA,UAAU,wCACb,2BAAOmqB,QAAQ,QACZnb,EAAE,kDAEL,8BACE7H,KAAK,OACLlY,MAAOulB,EACPrG,SAAU,SAACoB,GACTykD,EAAWzkD,EAAEsG,OAAO5mB,QAEtB+Q,UAAU,aACVspB,UAAQ,EACRuB,UAAW,QAKjB,kBAAC,GAAD,CAAa9nB,kBAhCQ,WACvBhD,EAAMgD,oBACNixD,EAAW,MA+BP,kBAAC,GAAD,CACE/zD,QA7BM,WACZF,EAAMk0D,UAAUz/C,GAChBw/C,EAAW,KA4BLh0D,UAAU,gBACVQ,UAAWgU,GAAWA,EAAQ/iB,OAAS,GAAKsO,EAAM8B,UAClDK,KAAM8M,EAAE,mBACRnN,UAAW9B,EAAM8B,cAMzB,OACE,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEtH,OAAQwF,EAAMxF,OACdyF,UAAWO,KAAW,oBAAqBR,EAAMC,YAEjD,kBAAC,GAAD,KACE,8BAAOq6B,MAIb,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE9/B,OAAQwF,EAAMxF,OACdyF,UAAWO,KAAW,2BAA4BR,EAAMC,YAExD,kBAAC,GAAD,KACE,8BAAOq6B,Q,0OC5Cb65B,G,6MAeJC,iBAAmB,SAACT,GAClBxuD,GACE,IAAIuuD,GACFC,EACA,EAAKl9D,MAAM49D,qBAGZ/rD,MAAK,SAACE,GACL,EAAK2F,SAAS,CAAEkkD,cAAe7pD,EAAQ/W,UAExCo6B,SAAQ,WACP,EAAK1d,SAAS,CAAEklD,qBAAqB,Q,EAI3CiB,eAAiB,SAAC7/C,GACiB,MAA7B,EAAKhe,MAAMm7D,iBAIf,EAAKzjD,SAAS,CAAEomD,kBAAkB,IAClCpvD,GACE,IAAIyuD,GAA6B,EAAKn9D,MAAMm7D,eAAetiE,GAAImlB,IAE9DnM,MAAK,SAAC0gB,GACL,EAAKorC,iBAAiB,EAAK39D,MAAMm7D,eAAgBtiE,OAElDu8B,SAAQ,WACP,EAAK1d,SAAS,CAAEomD,kBAAkB,EAAOC,qBAAqB,S,EAIpEvmB,eAAiB,SAAChiC,GAChB,EAAKkC,SAAS,CAAElC,WAChB,EAAKwoD,c,EAYPC,eAAiB,SAACC,GAChB,EAAKxmD,SAAS,CAAEyjD,eAAgB+C,EAAQtB,qBAAqB,IAC7D,EAAKe,iBAAiBO,EAAOrlE,K,EAG/BgkE,qBAAuB,WACrB,GACG,EAAK78D,MAAMm7D,gBACX,EAAKn7D,MAAM47D,gBACZ,EAAK57D,MAAM48D,oBAHb,CAQA,IAAMjnB,EAAa/vB,KAAKhN,IACtB,EACAgN,KAAKC,KACH,EAAK7lB,MAAM47D,cAAcxgE,MAAQ,EAAK4E,MAAM49D,mBAAmBriE,WAInE,GAAI,EAAKyE,MAAM49D,mBAAmBtiE,KAAOq6C,EAAY,CACnD,IAAMngC,E,2VAAM,IAAQ,EAAKxV,MAAM49D,oBAE/BpoD,EAAOla,KAAO,EACVka,EAAOja,SAAW,GACpBia,EAAOja,SAAW,GAElBia,EAAOja,UAAY,GAGrB,EAAKmc,SAAS,CAAEkmD,mBAAoBpoD,IACpC,EAAKmoD,iBAAiB,EAAK39D,MAAMm7D,eAAetiE,O,EAI7CmH,MAAgC,CACrC+1C,QAAS,CACP,CACEv4C,UAAW,KACXC,YAAa,0CACbu4C,cAAe,SAACzjB,GAAD,OAAO,GACtB2kB,MAAM,GAER,CACE15C,UAAW,UACXC,YAAa,qCACbu4C,cAAe,SAACzjB,GAAD,OAAO,GACtB6kB,mBAAoBimB,GACpBnmB,MAAM,GAER,CACE15C,UAAW,YACXC,YAAa,mCACbu4C,cAAe,SAACzjB,GAAD,OAAO,IAExB,CACE/0B,UAAW,aACXC,YAAa,oCACbu4C,cAAe,SAACzjB,GAAD,OAAO,IAExB,CACE/0B,UAAW,eACXC,YAAa,2CACb25C,mBAAoBoe,GACpBxf,cAAe,SAACzjB,GAAD,OAAO,IAExB,CACE/0B,UAAW,eACXC,YAAa,yCACb25C,mBAAoBoe,GACpBxf,cAAe,SAACzjB,GAAD,OAAO,KAG1Bs2B,iBAAa10D,EACb42B,oBAAgB52B,EAChBqhB,OAAQ,CAAEja,SAAU,GAAID,KAAM,GAC9BsiE,mBAAoB,CAAEriE,SAAU,GAAID,KAAM,GAC1Ci7C,aAAc,CAAEn7C,MAAO,EAAGG,SAAU,GAAIJ,KAAM,IAC9CgjE,gBAAgB,EAChBhD,oBAAgBhnE,EAChBynE,mBAAeznE,EACfyoE,qBAAqB,EACrBkB,kBAAkB,EAClBC,qBAAqB,G,6EA7IF,IAAD,OAClBvlE,KAAKkf,SAAS,CAAEymD,gBAAgB,IAChCzvD,GAAqB,IAAIsuD,GAA+BxkE,KAAKwH,MAAMwV,SAChE3D,MAAK,SAACE,GACL,EAAK2F,SAAS,CAAE6+B,aAAcxkC,EAAQ/W,UAEvCo6B,SAAQ,WACP,EAAK1d,SAAS,CAAEymD,gBAAgB,S,0CAyCV,IAAD,OACzBj6C,GAAY1rB,KAAK+Q,MAAM0K,aAAaC,UAAUrC,MAAK,SAAC1a,GAClD,EAAKugB,SAAS,CACZqT,eAAgB5zB,OAGpBqB,KAAKwlE,e,+BA0FuB,IAAD,OAC3B,OACE,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACErC,oBAAqB,WACnB,EAAKjkD,SAAS,CAAEqmD,qBAAqB,KAEvCpB,kBAAmB,SAACuB,GAAD,OACjB,EAAKxmD,SAAS,CAAEyjD,eAAgB+C,KAElCrB,qBAAsBrkE,KAAKqkE,qBAC3B9mB,QAASv9C,KAAKwH,MAAM+1C,QACpBolB,eAAgB3iE,KAAKwH,MAAMm7D,eAC3B5kB,aAAc/9C,KAAKwH,MAAMu2C,aACzB/gC,OAAQhd,KAAKwH,MAAMwV,OACnBgiC,eAAgBh/C,KAAKg/C,eACrBhzB,SAAU,GACVk4C,eAAgBlkE,KAAKwH,MAAMm+D,eAC3BvB,oBAAqBpkE,KAAKwH,MAAM48D,oBAChChB,cAAepjE,KAAKwH,MAAM47D,cAC1Bv5D,cAAc,EACdm4D,gBAAiBhiE,KAAKylE,eACtB1pE,WAAYiE,KAAK+Q,MAAMhV,WACvBgmE,aACE/hE,KAAKwH,MAAM+qB,eACPvyB,KAAKwH,MAAM+qB,eAAgB3wB,OAAOsvC,kBAClCv1C,KAIV,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEwnE,oBAAqB,WACnB,EAAKjkD,SAAS,CAAEqmD,qBAAqB,KAEvCpB,kBAAmB,SAACuB,GAAD,OACjB,EAAKxmD,SAAS,CAAEyjD,eAAgB+C,KAElCrB,qBAAsBrkE,KAAKqkE,qBAC3B9mB,QAASv9C,KAAKwH,MAAM+1C,QAAQvgC,QAC1B,SAAC4nB,GAAD,OAAQ,CAAC,aAAc,gBAAgB9b,SAAS8b,EAAE5/B,cAEpD29D,eAAgB3iE,KAAKwH,MAAMm7D,eAC3B5kB,aAAc/9C,KAAKwH,MAAMu2C,aACzB/gC,OAAQhd,KAAKwH,MAAMwV,OACnBgiC,eAAgBh/C,KAAKg/C,eACrBhzB,SAAU,GACVk4C,eAAgBlkE,KAAKwH,MAAMm+D,eAC3BvB,oBAAqBpkE,KAAKwH,MAAM48D,oBAChChB,cAAepjE,KAAKwH,MAAM47D,cAC1Bv5D,cAAc,EACdm4D,gBAAiBhiE,KAAKylE,eACtB1pE,WAAYiE,KAAK+Q,MAAMhV,WACvBgmE,aACE/hE,KAAKwH,MAAM+qB,eACPvyB,KAAKwH,MAAM+qB,eAAgB3wB,OAAOsvC,kBAClCv1C,KAIV,kBAAC,GAAD,CACE4P,OAAQvL,KAAKwH,MAAM+9D,oBACnBxxD,kBAAmB,WACjB,EAAKmL,SAAS,CAAEqmD,qBAAqB,KAEvCN,UAAWjlE,KAAKqlE,eAChBxyD,UAAW7S,KAAKwH,MAAM89D,wB,GAvNGj0D,aAsOpB+/C,qBACblgC,eACAjJ,aAVsB,SAACzgB,GACvB,MAAO,CAAEiU,aAAcjU,EAAM+F,KAAK/Q,KAAMT,WAAYyL,EAAM+F,KAAKxR,eAGtC,SAACia,GAC1B,MAAO,MAGMo7C,CAGb8T,I,WC3PmBU,G,oLAEjB,OAAK1tD,GAAUgE,QAAQlc,KAAK+Q,MAAM3U,WA4B9B,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE6iC,gBAAiBj/B,KAAK+Q,MAAMkuB,gBAC5BhH,eAAgBj4B,KAAK+Q,MAAMmK,cAC3B6c,QAAS/3B,KAAK+Q,MAAMy9B,aACpBlW,mBAAoBt4B,KAAKmuC,uBAAuB7sB,KAAKthB,MACrDsmC,YAAatmC,KAAK+Q,MAAMu1B,YACxBxH,kBAAmB9+B,KAAK+Q,MAAM09B,wBAC9B1P,0BAA2B/+B,KAAK+Q,MAAMguB,0BACtCP,eAAgBx+B,KAAK+Q,MAAMytB,eAC3B52B,eAAgB5H,KAAK+Q,MAAMnJ,iBAE7B,yBAAKoJ,UAAU,oBACb,yBAAKA,UAAU,6BACZhR,KAAK+Q,OAAS/Q,KAAK+Q,MAAMuC,SAAWtT,KAAK+Q,MAAMuC,SAAW,wCAIjE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE2rB,gBAAiBj/B,KAAK+Q,MAAMkuB,gBAC5BhH,eAAgBj4B,KAAK+Q,MAAMmK,cAC3B6c,QAAS/3B,KAAK+Q,MAAMy9B,aACpBlW,mBAAoBt4B,KAAKmuC,uBAAuB7sB,KAAKthB,MACrDsmC,YAAatmC,KAAK+Q,MAAMu1B,YACxBN,6BAA6B,oBAC7BlH,kBAAmB9+B,KAAK+Q,MAAM09B,wBAC9B1P,0BAA2B/+B,KAAK+Q,MAAMguB,0BACtCP,eAAgBx+B,KAAK+Q,MAAMytB,eAC3B52B,eAAgB5H,KAAK+Q,MAAMnJ,iBAE7B,yBAAKoJ,UAAU,oBACb,yBAAKA,UAAU,6BACZhR,KAAK+Q,OAAS/Q,KAAK+Q,MAAMuC,SAAWtT,KAAK+Q,MAAMuC,SAAW,yCA5DnE,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEgzB,YAAatmC,KAAK+Q,MAAMu1B,cAE1B,yBAAKt1B,UAAU,oBACb,yBAAKA,UAAU,6BACZhR,KAAK+Q,OAAS/Q,KAAK+Q,MAAMuC,SAAWtT,KAAK+Q,MAAMuC,SAAW,wCAIjE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEgzB,YAAatmC,KAAK+Q,MAAMu1B,YACxBN,6BAA6B,sBAE/B,yBAAKh1B,UAAU,oBACb,yBAAKA,UAAU,6BACZhR,KAAK+Q,OAAS/Q,KAAK+Q,MAAMuC,SAAWtT,KAAK+Q,MAAMuC,SAAW,2C,6CAmD1C2L,GAC7B,GAAIA,EAAU,CACZ,IAAM/D,EAAgBlb,KAAK+Q,MAAMzU,OAAO8b,MAAK,SAAC6D,GAAD,OAAOA,EAAElO,QAAQsJ,aAAe4H,EAAShf,SAElFib,IACFlb,KAAK+Q,MAAM89B,gBAAgB3zB,EAAcS,SAAUT,EAAcW,SAAUX,EAAca,cACzF/b,KAAK+Q,MAAM+9B,iBAAiB,CAC1B/gC,QAASmN,EAAcnN,QACvBoN,UAAWD,EAAcH,KACzBK,gBAAiBF,EAAcE,gBAC/BC,eAAgBH,EAAcG,eAC9B/Q,UAAW4Q,EAAc5Q,UACzBgR,UAAWJ,EAAcI,UACzB7N,eAAgByN,EAAcK,mBAAmB,GAC7CL,EAAcK,mBAAmB,GAAGC,aACpC7f,KAGRyY,EAAQC,KAAK,U,GA3FiBhD,aCgB9Bw0D,G,+LAEG7lE,KAAK+Q,MAAMtU,kBACduD,KAAK+Q,MAAMoI,uBAGRnZ,KAAK+Q,MAAMrU,sBAAwBsD,KAAK+Q,MAAM/U,QAAU,GAC3DgE,KAAK+Q,MAAMuI,4B,yCAIWrC,GACxB,YAAYtb,IAARsb,GACiC,IAA5ByJ,OAAO2pB,KAAKpzB,GAAKxU,S,gDAO1B,MAAoC,UAA3BzC,KAAK+Q,MAAMjV,aAA2BkE,KAAK+Q,MAAM/U,QAAU,GAAOgE,KAAK+Q,MAAM/U,QAAU,IAAMgE,KAAKuuC,mBAAmBvuC,KAAK+Q,MAAMrU,wBAA0BsD,KAAKuuC,mBAAmBvuC,KAAK+Q,MAAMtU,oB,+BAG9L,IAAD,OACP,OACE,kBAAC,IAAD,CACE+3C,KAAK,IACLxC,OAAQ,cAAG32C,MAASoa,IAAZ,OACN,kBAAC,GAAD,CACEnZ,OAAQ,EAAKyU,MAAMzU,OACnBkyC,aAAc,EAAKz9B,MAAMy9B,aACzBtzB,cAAe,EAAKnK,MAAMmK,cAC1B4zB,iBAAkB,EAAK/9B,MAAM+9B,iBAC7BD,gBAAiB,EAAK99B,MAAM89B,gBAC5BvI,YAAa,EAAKv1B,MAAMu1B,YACxBrH,gBAAiB,EAAKluB,MAAMkuB,gBAC5BxiC,iBAAkB,EAAKsU,MAAMtU,iBAC7BsiC,0BAA2B,EAAKhuB,MAAMguB,0BACtCP,eAAgB,EAAKztB,MAAMytB,eAC3BxiC,QAAS,EAAK+U,MAAM/U,QACpByyC,wBAAyB,EAAKA,0BAC9BryC,UAAW,EAAK2U,MAAM3U,UACtBwL,eAAgB,EAAKmJ,MAAMnJ,gBAE1B,EAAKmJ,MAAMuC,SACV,EAAKm7B,2BACL,kBAAC,GAAD,CACEhyC,iBAAkB,EAAKsU,MAAMtU,iBAC7BsX,kBAAmB,EAAKhD,MAAM49B,2BAC9BjyC,qBAAsB,EAAKqU,MAAMrU,+B,GAjDhB2U,aAqIlB4W,gBAhDS,SAACzgB,GACvB,IAAIlL,EAAqB,GACrB4e,EAAoC,CAAEjb,MAAO,GAAI0B,MAAO,IACxD6sC,EAAqC,CAAC,CAAEvuC,MAAO,GAAI0B,MAAO,KAC1Ds9B,EAA0B,GAC1BT,GAAiB,EAErB,GAAIh3B,EAAM+F,KAAM,CACdjR,EAASkL,EAAM+F,KAAKjR,OAASkL,EAAM+F,KAAKjR,OAAS,GAEjD,IAAK,IAAIquB,EAAI,EAAGA,EAAIruB,EAAOmG,OAAQkoB,IACjC6jB,EAAa7jB,GAAK,CAChB1qB,MAAO3D,EAAOquB,GAAG5c,QAAQsJ,WACzB1V,MAAOrF,EAAOquB,GAAG5P,MAGfvT,EAAM+F,KAAKhR,OAASiL,EAAM+F,KAAKhR,MAAMwR,UAAYzR,EAAOquB,GAAG5c,UAC7DmN,EAAgBszB,EAAa7jB,IAIjC,GAAInjB,EAAM+F,KAAKhR,MAAO,CACpB0iC,EAAkBz3B,EAAM+F,KAAKhR,MAAM6e,gBAEnC,IAAMF,EAA0B1T,EAAM+F,KAAKjR,OAAO8b,MAChD,SAACsS,GAAD,OAAiBA,EAAE3c,UAAYvG,EAAM+F,KAAKhR,MAAMwR,WAE9CmN,IACFsjB,EAAiBtjB,EAAcG,iBAKrC,MAAO,CACL/e,SACA4e,gBACAszB,eACAvP,kBACAxiC,iBAAkB+K,EAAM+F,KAAK9Q,kBAAoB,GACjDC,qBAAsB8K,EAAM+F,KAAK7Q,qBACjCV,QAASwL,EAAM+F,KAAKvR,QACpBwiC,iBACA1iC,YAAa0L,EAAM0F,MAAMpR,YACzBM,UAAWoL,EAAM+F,KAAKnR,UACtBwL,eAAgBJ,EAAMoG,OAAOhG,mBAtEN,SAACoO,GAC1B,MAAO,CACLswB,YAAa,WACXtwB,EAASC,IAAO,KAElB64B,iBAAkB,SAACvyC,GACjByZ,EAASiD,GAAa1c,IACtByZ,EAASmoB,GAAgB5hC,EAAMwR,QAAQsJ,aACvCrB,EAAS6rB,OAEXgN,gBAAiB,SACfnzB,EACAE,EACAE,GAEA9F,EAASkD,GAAY,CAAEwC,WAAUE,WAAUE,mBAE7C3C,oBAAqB,kBAAMnD,EAASmD,OACpCG,wBAAyB,kBAAMtD,EAASsD,OACxCylB,0BAA2B,kBACzB/oB,EAAS,CAAEjK,K7PtHf,uC6PsH2DqB,SAAS,KAClEuhC,2BAA4B,kBAC1B34B,EAAS,CAAEjK,K7PxHf,uC6PwH2DqB,SAAS,QAoDvD6a,CAA6C49C,I,UC5K/CC,GAAb,YACI,WAAYzvD,GAAmB,IAAD,6BAG1B,8CAFe,0BAIVA,KAAOA,EACZ,EAAKN,aAAc,EANO,EADlC,4BAA0CwB,ICA7BwuD,GAAb,YACI,WAAY1vD,GAAmB,IAAD,6BAG1B,8CAFe,gCAIVA,KAAOA,EACZ,EAAKN,aAAc,EANO,EADlC,4BAAgDwB,ICqB1CyuD,I,mBACF,WAAYj1D,GAAa,IAAD,sBACpB,8CAAMA,IAEN,IAAM6kB,EAAS16B,OAAOC,SAASy6B,OACzB7e,EAAS,IAAIm8B,gBAAgBtd,GAC7BqwC,EAASlvD,EAAOvB,IAAI,UACpBsuB,EAAO/sB,EAAOvB,IAAI,QANJ,OAQpB,EAAKhO,MAAQ,CACT0+D,eAAe,EACfC,iBAAiB,EACjBC,eAAe,EACfC,aAAa,EACbJ,OAAQA,EACRniC,KAAMA,GAGV5tB,GAAS,IAAI4vD,GAAqB,CAAEQ,OAAQL,EAAQvV,KAAM5sB,KACrDzqB,MAAK,WACF,EAAK6F,SAAS,CAAEgnD,eAAe,IAE/Bze,uBAAW,WACP,EAAKvoC,SAAS,CAAEinD,iBAAiB,MAClC,QAENxwD,OAAM,WACH,EAAKuJ,SAAS,CAAEknD,eAAe,OA1BnB,E,wFA8BW,IAAD,OAC9BpmE,KAAKkf,SAAS,CAAEmnD,aAAa,IAE7B,IAAMviC,EAAO9jC,KAAKwH,MAAMs8B,KAClBmiC,EAASjmE,KAAKwH,MAAMy+D,OAE1B/vD,GAAS,IAAI6vD,GAA2B,CAAEO,OAAQL,EAAQvV,KAAM5sB,KAASzqB,MAAK,WAC1E,EAAK6F,SAAS,CAAEmnD,aAAa,S,+BAI3B,IAAD,OACGrmD,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACI,oCACI,kBAAC,GAAD,KACI,yBAAKhP,UAAU,0BACX,kBAAC,GAAD,CACIwV,IAAI,kCACJtI,mBAAmB,oCAEnB,4BAAK8B,EAAE,uBACP,2BAAIA,EAAE,0BAEV,yBAAKhP,UAAU,kCACVhR,KAAKwH,MAAM0+D,eACR,6BACI,4BAAKlmD,EAAE,oCACP,wBAAIhP,UAAU,WAAWgP,EAAE,4BAGjChgB,KAAKwH,MAAM0+D,gBAAkBlmE,KAAKwH,MAAM4+D,eACtC,6BACI,4BAAKpmD,EAAE,uBACP,wBAAIhP,UAAU,WAAWgP,EAAE,yBAGjChgB,KAAKwH,MAAM0+D,eAAiBlmE,KAAKwH,MAAM4+D,eACrC,6BACI,wBAAIp1D,UAAU,kBAAkBgP,EAAE,kCAClC,wBAAIhP,UAAU,kBAAkBgP,EAAE,2BAClC,kBAAC,GAAD,CACIhP,UAAU,eACVC,QAAS,kBAAM,EAAKs1D,2BACpBrzD,KAAM8M,EAAE,wBACRxO,SAAUxR,KAAKwH,MAAM6+D,cAExBrmE,KAAKwH,MAAM6+D,aAAe,4BAAKrmD,EAAE,mCAGzChgB,KAAKwH,MAAM2+D,iBAAmB,kBAAC,IAAD,CAAUznD,GzOvGxC,cyO2Gb,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI8H,IAAI,iCACJtI,mBAAmB,6BAEnB,yBAAKlN,UAAU,yCACVhR,KAAKwH,MAAM0+D,eACR,6BACI,4BAAKlmD,EAAE,oCACP,wBAAIhP,UAAU,WAAWgP,EAAE,4BAGjChgB,KAAKwH,MAAM0+D,gBAAkBlmE,KAAKwH,MAAM4+D,eACtC,6BACI,4BAAKpmD,EAAE,uBACP,wBAAIhP,UAAU,WAAWgP,EAAE,yBAGjChgB,KAAKwH,MAAM0+D,eAAiBlmE,KAAKwH,MAAM4+D,eACrC,6BACI,wBAAIp1D,UAAU,kBAAkBgP,EAAE,kCAClC,wBAAIhP,UAAU,kBAAkBgP,EAAE,2BAClC,kBAAC,GAAD,CACIhP,UAAU,sBACVC,QAAS,kBAAM,EAAKs1D,2BACpBrzD,KAAM8M,EAAE,wBACRxO,SAAUxR,KAAKwH,MAAM6+D,cAExBrmE,KAAKwH,MAAM6+D,aAAe,4BAAKrmD,EAAE,mCAGzChgB,KAAKwH,MAAM2+D,iBAAmB,kBAAC,IAAD,CAAUznD,GzO1IxC,mB,GyOsBFrN,cA6HZ6f,kBAAkB80C,IClJpBQ,GAAb,YACI,WAAYC,GAAsC,IAAD,6BAG7C,8CAFS,mCAIJpwD,KAAOowD,EALiC,EADrD,4BAAiDlvD,ICApCmvD,GAAb,YACI,WAAYC,GAA8C,IAAD,6BAGrD,8CAFS,4BAIJtwD,KAAOswD,EACZ,EAAK5wD,aAAc,EANkC,EAD7D,4BAA2CwB,ICsZ5BqvD,I,mBA5XX,WAAY71D,GAAa,IAAD,uBACpB,8CAAMA,KAmFF81D,cAAgB,SAACtmD,GACrBA,EAAET,iBACF,EAAKZ,SAAS,CAAE4nD,WAAW,IAC3B,EAAK5nD,SAAS,CAAEknD,eAAe,IAE/B,IAAMO,EAA8C,CAChDl8B,aAAc,EAAKjjC,MAAM0pC,cAG7Bh7B,GAAS,IAAIswD,GAA4BG,IACpCttD,MAAK,WACF,EAAK6F,SAAS,CAAE4nD,WAAW,OAE9BnxD,OAAM,gBAjGS,EAoGhBoxD,iBAAmB,SAACxmD,GACxBA,EAAET,iBACF,EAAKZ,SAAS,CAAEknD,eAAe,IAE/B,IAAMO,EAA8C,CAChDl8B,aAAc,EAAKjjC,MAAM0pC,aACzBtG,YAAa,EAAKpjC,MAAM+hC,YACxBy9B,qBAAsB,EAAKx/D,MAAMy/D,UACjCC,mBAAoB,EAAK1/D,MAAMs8B,MAEnC5tB,GAAS,IAAIwwD,GAAsBC,IAC9BttD,MAAK,WACF,EAAK6F,SAAS,CAAEioD,iBAAiB,EAAML,WAAW,IAClDrf,YAAW,WACP,EAAKvoC,SAAS,CAAEinD,iBAAiB,MAClC,QAENxwD,OAAM,WACH,EAAKuJ,SAAS,CAAEknD,eAAe,IAC/B,EAAKlnD,SAAS,CAAEioD,iBAAiB,EAAOhB,iBAAiB,QApHjE,IAAMvwC,EAAS16B,OAAOC,SAASy6B,OACzB7e,EAAS,IAAIm8B,gBAAgBtd,GAC7Bsb,EAAen6B,EAAOvB,IAAI,gBAC1BsuB,EAAO/sB,EAAOvB,IAAI,QANJ,OAQpB,EAAKhO,MAAQ,CACT2/D,iBAAiB,EACjBhB,iBAAiB,EACjBC,eAAe,EACfU,YAAWhjC,EACXA,KAAMA,EACNjxB,WAAW,EACX02B,YAAa,GACb09B,UAAW,GACXG,0BAA0B,EAC1Bl2B,aAAcA,GAA8B,IAGhD,EAAKm2B,kBAAoB,EAAKA,kBAAkB/lD,KAAvB,iBACzB,EAAK8pB,qBAAuB,EAAKA,qBAAqB9pB,KAA1B,iBAC5B,EAAKgmD,2BAA6B,EAAKA,2BAA2BhmD,KAAhC,iBAClC,EAAKimD,6BAA+B,EAAKA,6BAA6BjmD,KAAlC,iBACpC,EAAKulD,cAAgB,EAAKA,cAAcvlD,KAAnB,iBACrB,EAAKylD,iBAAmB,EAAKA,iBAAiBzlD,KAAtB,iBACxB,EAAKkmD,iBAAmB,EAAKA,iBAAiBlmD,KAAtB,iBA3BJ,E,gFA8BEf,GAAmC,IACjDtgB,EAAUsgB,EAAEsG,OAAZ5mB,MACRD,KAAKkf,SAAS,CAAEgyB,aAAcjxC,M,2CAGLsgB,GAAmC,IAAD,SACnCA,EAAEsG,OAAlB1O,EADmD,EACnDA,KAAMlY,EAD6C,EAC7CA,MACD,aAATkY,GACAnY,KAAKkf,SAAS,CAAEqqB,YAAatpC,IAAS,WAClC,EAAKunE,sBAGA,eAATrvD,GACAnY,KAAKkf,SAAS,CAAE+nD,UAAWhnE,IAAS,WAChC,EAAKunE,wB,yCAMTxnE,KAAKwH,MAAM+hC,cAAgBvpC,KAAKwH,MAAMy/D,WAAajnE,KAAKwH,MAAM+hC,YAAY9mC,OAAS,EACnFzC,KAAKkf,SAAS,CAAEkoD,0BAA0B,IAE1CpnE,KAAKkf,SAAS,CAAEkoD,0BAA0B,M,mDAIZ,IAAD,OACjCpnE,KAAKkf,SAAS,CAAE4nD,WAAW,IAC3B9mE,KAAKkf,SAAS,CAAEknD,eAAe,IAE/B,IAAMO,EAA8C,CAChDl8B,aAAczqC,KAAKwH,MAAM0pC,cAG7Bh7B,GAAS,IAAIswD,GAA4BG,IACpCttD,MAAK,WACF,EAAK6F,SAAS,CAAE4nD,WAAW,OAE9BnxD,OAAM,iB,qDAGyB,IAAD,OAC7BgxD,EAA8C,CAChDl8B,aAAczqC,KAAKwH,MAAM0pC,cAG7Bh7B,GAAS,IAAIswD,GAA4BG,IACpCttD,MAAK,WACF,EAAK6F,SAAS,CAAE4nD,WAAW,OAE9BnxD,OAAM,iB,+BA0CL,IAAD,OACL,OACI,kBAAC,KAAD,MACK,SAACqK,GACE,OACI,oCACI,kBAAC,GAAD,KACI,yBAAKhP,UAAU,kCACX,kBAAC,GAAD,CACIwV,IAAI,kCACJtI,mBAAmB,4CAEnB,4BAAK8B,EAAE,uBACP,uBAAGhP,UAAU,yBAAyBgP,EAAE,0BAE5C,yBAAKhP,UAAU,8BACT,EAAKxJ,MAAMs/D,aAAe,EAAKt/D,MAAMs8B,MAAQ,EAAKt8B,MAAM0pC,eACtD,yBAAKlgC,UAAU,IACX,kBAAC,GAAD,CACI0C,KAAK,SACLR,KAAM8M,EAAE,cACRhP,UAAU,eAEd,0BAAMmH,KAAK,OAAOgN,SAAU,EAAK0hD,eAC7B,kBAAC,GAAD,CAAgB71D,UAAU,6BACtB,4BAAKgP,EAAE,+CACP,4BACKA,EAAE,0DAEP,2BACI7H,KAAK,eACLnH,UAAU,aACVjF,KAAK,QACLuqB,YAAatW,EAAE,iCACf/f,MAAO,EAAKuH,MAAM0pC,aAClB/xB,SAAU,EAAKkoD,qBAGvB,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIt7D,KAAK,SACLyF,UAAW,EAAKhK,MAAM0pC,aACtBh+B,KAAM8M,EAAE,oCACRnN,UAAW,EAAKrL,MAAMqL,eAMzC,EAAKrL,MAAMs/D,YAAc,EAAKt/D,MAAMs8B,MACjC,yBAAK9yB,UAAU,IACX,kBAAC,GAAD,CACI0C,KAAK,SACLR,KAAM8M,EAAE,cACRhP,UAAU,eAEd,0BAAMmH,KAAK,OAAOgN,SAAU,EAAK0hD,eAC7B,kBAAC,GAAD,CAAgB71D,UAAU,6BACtB,4BACKgP,EAAE,sDAEP,uBAAGhP,UAAU,eACRgP,EAAE,0CACH,uBAAG/O,QAAS,EAAKs2D,8BACZ,IACAvnD,EAAE,2CAO1B,EAAKxY,MAAMs8B,MAAQ,EAAKt8B,MAAM0pC,eAAiB,EAAK1pC,MAAM2/D,iBACvD,yBAAKn2D,UAAU,IACX,kBAAC,GAAD,CACI0C,KAAK,SACLR,KAAM8M,EAAE,cACRhP,UAAU,eAEd,0BAAMmH,KAAK,OAAOgN,SAAU,EAAK4hD,kBAC7B,kBAAC,GAAD,CAAgB/1D,UAAU,6BACtB,4BAAKgP,EAAE,0CACP,4BAAKA,EAAE,mDACP,kBAAC,GAAD,CACI5F,SAAU,EAAK5S,MAAM+hC,YACrB3C,iBAAkB,SAAAhS,GAAO,OAAIA,KAEjC,2BACIzc,KAAK,WACLnH,UAAU,aACVjF,KAAK,WACLuqB,YAAatW,EAAE,6BACfb,SAAU,EAAKisB,uBAEnB,2BACIjzB,KAAK,aACLnH,UAAU,aACVjF,KAAK,WACLuqB,YAAatW,EAAE,yBACf/f,MAAO,EAAKuH,MAAMy/D,UAClB9nD,SAAU,EAAKisB,uBAEnB,wBAAIp6B,UAAU,SACT,EAAKxJ,MAAM4+D,cACNpmD,EAAE,iCACF,KAGd,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIjU,KAAK,SACLyF,UAAW,EAAKhK,MAAM4/D,yBACtBl0D,KAAM8M,EACF,yCACFk4B,cACFrlC,UAAW,EAAKrL,MAAMqL,eAMzC,EAAKrL,MAAMs8B,MAAQ,EAAKt8B,MAAM0pC,cAAgB,EAAK1pC,MAAM2/D,iBACtD,yBAAKn2D,UAAU,IACX,kBAAC,GAAD,CACI0C,KAAK,SACLR,KAAM8M,EAAE,cACRhP,UAAU,eAEd,0BAAMmH,KAAK,OAAOgN,SAAU,EAAK0hD,eAC7B,kBAAC,GAAD,CAAgB71D,UAAU,6BACtB,4BAAKgP,EAAE,+CACP,wBAAIhP,UAAU,WAAWgP,EAAE,6BAK1C,EAAKxY,MAAM2+D,iBAAmB,kBAAC,IAAD,CAAUznD,G5O9RpD,c4OkSD,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI8H,IAAI,iCACJtI,mBAAmB,oBAEnB,yBAAKlN,UAAU,8BACT,EAAKxJ,MAAMs/D,aAAe,EAAKt/D,MAAMs8B,MAAQ,EAAKt8B,MAAM0pC,eACtD,yBAAKlgC,UAAU,oBACX,0BAAMmH,KAAK,OAAOgN,SAAU,EAAK0hD,eAC7B,kBAAC,GAAD,CAAgB71D,UAAU,6BACtB,4BAAKgP,EAAE,+CACP,4BACKA,EAAE,0DAEP,2BACI7H,KAAK,eACLnH,UAAU,yBACVjF,KAAK,QACLuqB,YAAatW,EAAE,iCACf/f,MAAO,EAAKuH,MAAM0pC,aAClB/xB,SAAU,EAAKkoD,qBAGvB,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIt7D,KAAK,SACLyF,UAAW,EAAKhK,MAAM0pC,aACtBh+B,KAAM8M,EAAE,oCACRnN,UAAW,EAAKrL,MAAMqL,eAMzC,EAAKrL,MAAMs/D,YAAc,EAAKt/D,MAAMs8B,MACjC,yBAAK9yB,UAAU,IACX,0BAAMmH,KAAK,OAAOgN,SAAU,EAAK0hD,eAC7B,kBAAC,GAAD,CAAgB71D,UAAU,6BACtB,4BACKgP,EAAE,sDAEP,uBAAGhP,UAAU,eACRgP,EAAE,0CACH,uBAAG/O,QAAS,EAAKs2D,8BACZvnD,EAAE,2CAO1B,EAAKxY,MAAMs8B,MAAQ,EAAKt8B,MAAM0pC,eAAiB,EAAK1pC,MAAM2/D,iBACvD,yBAAKn2D,UAAU,IACX,0BAAMmH,KAAK,OAAOgN,SAAU,EAAK4hD,kBAC7B,kBAAC,GAAD,CAAgB/1D,UAAU,6BACtB,4BAAKgP,EAAE,0CACP,4BAAKA,EAAE,mDACP,kBAAC,GAAD,CACI5F,SAAU,EAAK5S,MAAM+hC,YACrB3C,iBAAkB,SAAAhS,GAAO,OAAIA,KAEjC,2BACIzc,KAAK,WACLnH,UAAU,yBACVjF,KAAK,WACLuqB,YAAatW,EAAE,6BACfb,SAAU,EAAKisB,uBAEnB,2BACIjzB,KAAK,aACLnH,UAAU,yBACVjF,KAAK,WACLuqB,YAAatW,EAAE,yBACf/f,MAAO,EAAKuH,MAAMy/D,UAClB9nD,SAAU,EAAKisB,uBAEnB,wBAAIp6B,UAAU,SACT,EAAKxJ,MAAM4+D,cACNpmD,EAAE,iCACF,KAGd,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIjU,KAAK,SACLyF,UAAW,EAAKhK,MAAM4/D,yBACtBl0D,KAAM8M,EACF,yCACFk4B,cACFrlC,UAAW,EAAKrL,MAAMqL,eAMzC,EAAKrL,MAAMs8B,MAAQ,EAAKt8B,MAAM0pC,cAAgB,EAAK1pC,MAAM2/D,iBACtD,yBAAKn2D,UAAU,IACX,0BAAMmH,KAAK,OAAOgN,SAAU,EAAK0hD,eAC7B,kBAAC,GAAD,CAAgB71D,UAAU,6BACtB,4BAAKgP,EAAE,+CACP,wBAAIhP,UAAU,WAAWgP,EAAE,6BAK1C,EAAKxY,MAAM2+D,iBAAmB,kBAAC,IAAD,CAAUznD,G5O3YpD,sB,G4O0BGrN,cCmDjBo2D,I,OA1D2D,SAAC,GAKpE,IAJHC,EAIE,EAJFA,WACAn/D,EAGE,EAHFA,qBACAsB,EAEE,EAFFA,aACAkwD,EACE,EADFA,gCAEAllD,qBAAU,WACN3Z,OAAOysE,SAAS,EAAG,KACpB,IACH,IAAM39C,EAAezhB,EAAqB6P,MAAK,SAAA3Z,GAAC,OAAIA,EAAE8sB,IAAI/sB,IAAMkpE,KAExD1nD,EAAMiG,eAANjG,EACF+X,EAAU,CACZ3E,WAAW,eACR4mC,WAASC,WAAY,WAAgB3mD,GAAmB,IAAhC9Q,EAA+B,EAA/BA,KACvB,OAAO,uBAAIkR,KAAMlR,EAAK03D,IAAKrzC,OAAQrkB,EAAK03D,IAAI1uC,WAAWtwB,OAAOi5C,QAAU,GAAK,UAAW7gC,OAIhG,OACI,yBAAKtC,UAAU,qBACTnH,GACE,oCACI,wBAAImH,UAAU,uBAAuBgP,EAAE,wBACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,2BAIhD,kBAAC,GAAD,CACI1C,SAAU,CAAEC,YAAa,EAAGG,WAAY,EAAGG,SAAU,EAAGG,QAAS,IACjEE,mBAAmB,iBAEnB,yBAAKlN,UAAU,uBACVgZ,GAAgB,wBAAIhZ,UAAU,SAASgZ,EAAapoB,OAAO4c,OAC3DwL,GAAgB5F,qCAA0B4F,EAAapoB,OAAOkiB,QAASiU,IAE5E,yBAAK/mB,UAAU,oBACX,kBAAC,KAAD,CAAM0N,G7OnDW,kB6OoDb,kBAAC,GAAD,SAIZ,kBAAC,GAAD,CAAYpB,SAAU,CAAEC,YAAa,GAAIG,WAAY,EAAGG,SAAU,EAAGG,QAAS,KACzEzV,EACIyU,QAAO,SAAA0N,GAAC,OAAIA,EAAEa,IAAI/sB,KAAOkpE,KACzB7sD,KAAI,SAACpM,EAAakc,GAAd,OACD,kBAAC,GAAD,CACIxT,IAAKwT,EACLpiB,qBAAsBkG,EACtBwC,QAAS,kBAAM8oD,EAAgCtrD,EAAY8c,IAAI/sB,KAC/D0f,mBAAmB,mBCRhC0pD,GAjDiE,SAAC,GAI1E,IAHHF,EAGE,EAHFA,WACAn/D,EAEE,EAFFA,qBACAwxD,EACE,EADFA,gCAEAllD,qBAAU,WACN3Z,OAAOysE,SAAS,EAAG,KACpB,IACH,IAAM39C,EAAezhB,EAAqB6P,MAAK,SAAA3Z,GAAC,OAAIA,EAAE8sB,IAAI/sB,IAAMkpE,KAExD1nD,EAAMiG,eAANjG,EACF+X,EAAU,CACZ3E,WAAW,eACR4mC,WAASC,WAAY,WAAgB3mD,GAAmB,IAAhC9Q,EAA+B,EAA/BA,KACvB,OAAO,uBAAIkR,KAAMlR,EAAK03D,IAAKrzC,OAAQrkB,EAAK03D,IAAI1uC,WAAWtwB,OAAOi5C,QAAU,GAAK,UAAW7gC,OAIhG,OACI,yBAAKtC,UAAU,2BACX,wBAAIA,UAAU,uBAAuBgP,EAAE,wBACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,0BACxC,kBAAC,GAAD,CAAQ1C,SAAU,CAAEC,YAAa,EAAGG,WAAY,GAAIG,SAAU,EAAGG,QAAS,KACtE,yBAAKhN,UAAU,uBACVgZ,GAAgB,wBAAIhZ,UAAU,SAASgZ,EAAapoB,OAAO4c,OAC3DwL,GAAgB5F,qCAA0B4F,EAAapoB,OAAOkiB,QAASiU,IAE5E,yBAAK/mB,UAAU,oBACX,kBAAC,KAAD,CAAM0N,G9OnCW,kB8OoCb,kBAAC,GAAD,SAIZ,kBAAC,GAAD,CAAYpB,SAAU,CAAEC,YAAa,EAAGG,WAAY,GAAIG,SAAU,GAAIG,QAAS,IAC1EzV,EACIyU,QAAO,SAAA0N,GAAC,OAAIA,EAAEa,IAAI/sB,KAAOkpE,KACzB7sD,KAAI,SAACpM,EAAakc,GAAd,OACD,kBAAC,GAAD,CACIxT,IAAKwT,EACLpiB,qBAAsBkG,EACtBwC,QAAS,kBAAM8oD,EAAgCtrD,EAAY8c,IAAI/sB,KAC/D0f,mBAAmB,kBCehC+J,gBARS,SAACzgB,GACrB,MAAO,CACHkgE,WAAYlgE,EAAMiH,YAAY/F,+BAC9BH,qBAAsBf,EAAMiH,YAAYlG,qBACxCsB,aAAcrC,EAAMmH,YAAY9E,iBAbb,SAACmM,GACxB,MAAO,CACH+jD,gCAAiC,SAACrxD,GAC9BsN,EAAS,CAAEjK,KzQ3C2B,qCyQ2CeqB,QAAS1E,IAC9DxN,OAAOysE,SAAS,EAAG,OAahB1/C,CAA6C2d,aApDM,SAAC,GAM5D,IALH8hC,EAKE,EALFA,WACAn/D,EAIE,EAJFA,qBACA6L,EAGE,EAHFA,QACAvK,EAEE,EAFFA,aACAkwD,EACE,EADFA,gCAQA,OANAllD,qBAAU,WACD6yD,GACDtzD,EAAQC,K/OpBiB,oB+OsB9B,CAACqzD,EAAYtzD,IAGZ,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIvK,aAAcA,EACdtB,qBAAsBA,EACtBm/D,WAAYA,EACZ3N,gCAAiCA,KAGzC,kBAAC,GAAD,KACI,kBAAC,GAAD,CACIlwD,aAAcA,EACdtB,qBAAsBA,EACtBm/D,WAAYA,EACZ3N,gCAAiCA,U,OC3C9C,SAAS8N,GAAmBC,GAI/B,OAAO7pE,EAAiBS,SAAsBopE,EAHlC,CACRn8C,aAAc,gBCkBtB,IAmEeo8C,GAnEmC,SAAC,GAAmD,IAAjDL,EAAgD,EAAhDA,WAAsBh5B,GAA0B,EAApCs5B,SAAoC,EAA1Bt5B,qBACvE75B,qBAAU,WACN3Z,OAAOysE,SAAS,EAAG,KACpB,IAH8F,MAKzEnzD,mBAA6BkM,QAL4C,oBAK1F/X,EAL0F,KAKpFknC,EALoF,OAM/Dr7B,oBAAS,GANsD,oBAM1F3B,EAN0F,KAM/Ewf,EAN+E,KAOzFrS,EAAMiG,eAANjG,EAkBR,OAhBAnL,qBAAU,WACF6yD,EACAG,GAAmBH,GAAYruD,MAC3B,SAAA1a,GACIkxC,EAAQlxC,GACR0zB,GAAa,MAEjB,SAAAzc,GACIyc,GAAa,MAIrBA,GAAa,KAElB,CAACq1C,IAGA,yBAAK12D,UAAU,oBACX,wBAAIA,UAAU,uBAAuBgP,EAAE,wBACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,0BACxC,kBAAC,GAAD,CACI1C,SAAU,CAAEC,YAAa,EAAGG,WAAY,EAAGG,SAAU,EAAGG,QAAS,IACjEE,mBAAmB,kBAErBrL,GACE,yBAAK7B,UAAU,kBACX,yBAAKA,UAAU,iBACX,yBAAKwV,IAAK7d,EAAK/G,OAAO6kB,MAAQ9d,EAAK/G,OAAO6kB,MAAM7kB,OAAO8kB,KAAKjR,IAAM,uCAAwCsR,IAAI,UAElH,yBAAK/V,UAAU,6BACX,yBAAKA,UAAU,SAASrI,EAAK/G,OAAO4c,OACpC,yBAAKxN,UAAU,kBAAf,UAAwCye,GAAiB9mB,EAAK/G,OAAOguC,YACrE,yBAAK5+B,UAAU,qBACVoT,qCAA0Bzb,EAAK/G,OAAOkiB,QAASqP,OAK/DtgB,GACG,yBAAK7B,UAAU,yCACX,kBAAC,GAAD,OAIJ,yBAAKA,UAAU,oBACX,kBAAC,KAAD,CAAM0N,GjPtEW,kBiPuEb,kBAAC,GAAD,SAIZ,kBAAC,GAAD,CAAYpB,SAAU,CAAEC,YAAa,GAAIG,WAAY,EAAGG,SAAU,EAAGG,QAAS,KAC1E,uBAAGhN,UAAU,mBAAmBgP,EAAE,+BAClC,kBAAC,GAAD,CAAmB0uB,oBAAqBA,OCLzCu5B,GA1DyC,SAAC,GAAmD,IAAjDP,EAAgD,EAAhDA,WAAgD,EAApCM,SAAoC,EAA1Bt5B,oBAC7E75B,qBAAU,WACN3Z,OAAOysE,SAAS,EAAG,KACpB,IAHoG,MAK/EnzD,mBAA6BkM,QALkD,oBAKhG/X,EALgG,KAK1FknC,EAL0F,OAMrEr7B,oBAAS,GAN4D,oBAMhG3B,EANgG,KAMrFwf,EANqF,KAOzFpM,eAANjG,EAmBR,OAjBAnL,qBAAU,WACF6yD,GACAr1C,GAAa,GACbw1C,GAAmBH,GAAYruD,MAC3B,SAAA1a,GACIkxC,EAAQlxC,GACR0zB,GAAa,MAEjB,SAAAzc,GACIyc,GAAa,OAIrBA,GAAa,KAElB,CAACq1C,IAGA,yBAAK12D,UAAU,2BACX,kBAAC,GAAD,CAASsM,SAAU,CAAEC,YAAa,EAAGG,WAAY,GAAIG,SAAU,EAAGG,QAAS,MACzEnL,GACE,yBAAK7B,UAAU,kBACX,yBAAKA,UAAU,iBACX,yBAAKwV,IAAK7d,EAAK/G,OAAO6kB,MAAQ9d,EAAK/G,OAAO6kB,MAAM7kB,OAAO8kB,KAAKjR,IAAM,uCAAwCsR,IAAI,UAElH,yBAAK/V,UAAU,6BACX,yBAAKA,UAAU,SAASrI,EAAK/G,OAAO4c,OACpC,yBAAKxN,UAAU,kBAAf,UAAwCye,GAAiB9mB,EAAK/G,OAAOguC,YACrE,yBAAK5+B,UAAU,qBACVoT,qCAA0Bzb,EAAK/G,OAAOkiB,YAKtDjR,GACG,yBAAK7B,UAAU,yCACX,kBAAC,GAAD,OAGJ,yBAAKA,UAAU,oBACX,kBAAC,KAAD,CAAM0N,GlP/DW,kBkPgEb,kBAAC,GAAD,WCpBTuJ,gBAPS,SAACzgB,GACrB,MAAO,CACHkgE,WAAYlgE,EAAMiH,YAAY3F,mBAC9BH,KAAMnB,EAAMiH,YAAY9F,SAZL,SAACqN,GACxB,MAAO,CACH04B,oBAAqB,SAAC5lC,GAClBkN,EAAS,CAAEjK,K7QrBe,yB6QqBeqB,QAAStE,IAClD5N,OAAOysE,SAAS,EAAG,OAYhB1/C,CAA6C2d,aAlClB,SAAC,GAAwD,IAAtD8hC,EAAqD,EAArDA,WAAY/+D,EAAyC,EAAzCA,KAAMyL,EAAmC,EAAnCA,QAASs6B,EAA0B,EAA1BA,oBAMpE,OALA75B,qBAAU,WACD6yD,GACDtzD,EAAQC,KnPbiB,oBmPe9B,CAACqzD,EAAYtzD,IAEZ,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAc4zD,SAAUr/D,EAAM++D,WAAYA,EAAYh5B,oBAAqBA,KAE/E,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAoBs5B,SAAUr/D,EAAM++D,WAAYA,EAAYh5B,oBAAqBA,UC1BpFw5B,GAAb,YACI,WAAYjgE,GAAmB,IAAD,6BAG1B,8CAFkB,sBAIboO,KAAOpO,EACZ,EAAK8N,aAAc,EANO,EADlC,4BAAsCwB,I,OCevB,SAAS4wD,GAAgBp3D,GAA8B,IAAD,EAC/ByD,mBAASzD,EAAM3R,WADgB,oBAC1DA,EAD0D,KAC/CgpE,EAD+C,OAEjC5zD,mBAASzD,EAAM7U,UAFkB,oBAE1DA,EAF0D,KAEhDmsE,EAFgD,OAGvC7zD,mBAASzD,EAAMzR,OAHwB,oBAG1DA,EAH0D,KAGnDgpE,EAHmD,OAIzB9zD,oBAAS,GAJgB,oBAI1D+zD,EAJ0D,KAI5CC,EAJ4C,KAM3DC,EAAiB13D,EAAM23D,SAAWr1D,GAAkBD,GAElD4M,EAAMiG,eAANjG,EAaR,OACI,0BAAM7H,KAAK,OAAOgN,SANH,SAAC5E,GAChBA,EAAET,iBACF/O,EAAMoU,SAAS7lB,EAAOF,EAAWlD,KAK7B,uBAAG8U,UAAU,uBAAuBgP,EAAE,yBAEtC,kBAAC,GAAD,CAAgBhP,UAAU,yBACtB,2BACImH,KAAK,YACLnH,UAAWD,EAAM23D,SAAW,yBAA2B,aACvD38D,KAAK,OACLuqB,YAAatW,EAAE,iCACf/f,MAAOb,EACP+f,SAAU,SAAAoB,GAAC,OAAI6nD,EAAa7nD,EAAEsG,OAAO5mB,QACrC47B,UAAW,KAEf,2BACI1jB,KAAK,WACLnH,UAAWD,EAAM23D,SAAW,yBAA2B,aACvD38D,KAAK,OACLuqB,YAAatW,EAAE,gCACf/f,MAAO/D,EACPijB,SAAU,SAAAoB,GAAC,OAAI8nD,EAAY9nD,EAAEsG,OAAO5mB,QACpC47B,UAAW,KAEf,2BACI1jB,KAAK,eACLnH,UAAWO,KAAWR,EAAM23D,SAAW,yBAA2B,aAAc,CAC5EnyC,SAAUgyC,IAEdx8D,KAAK,QACLuqB,YAAatW,EAAE,oCACf/f,MAAOX,EACP6f,SAAU,SAAAoB,GAAC,OA1CL,SAACA,GACnB+nD,EAAS/nD,EAAEsG,OAAO5mB,OAElBuoE,EAAgBtzC,GAAa3U,EAAEsG,OAAO5mB,QAuCX0oE,CAAcpoD,IAC7Bsb,UAAW,OAGnB,uBACI7qB,UAAWO,KAAWR,EAAM23D,SAAW,6CAA+C,gBAAiB,CACnGn9B,MAAOg9B,KAGVvoD,EAAE,+CAGP,kBAAC,GAAD,CAAiBhP,UAAU,mBACvB,kBAACy3D,EAAD,CACI18D,KAAK,SACLyF,UAAWlS,IAAUF,IAAclD,IAAaqsE,GAAgBx3D,EAAMmhC,YACtEh/B,KAAM8M,EAAE,2BACRnN,UAAW9B,EAAMmhC,eAGzB,yBAAKlhC,UAAU,kBACX,kBAAC,GAAD,QC3EhB,IAAM43D,GAAkB,SAACC,GACrB,OAAQA,GACJ,IAAK,eACD,MAAO,sBACX,IAAK,iBACD,MAAO,6BACX,IAAK,eACL,QACI,MAAO,0BAIJ,SAASC,GAAiB/3D,GAA+B,IAAD,EACnCyD,mBAAS,IAD0B,oBAC5D4F,EAD4D,KAClD2uD,EADkD,OAErBv0D,mBAAS,IAFY,oBAE5Dm1B,EAF4D,KAE3CC,EAF2C,OAGvBp1B,oBAAS,GAHc,oBAG5Dw0D,EAH4D,KAG3CC,EAH2C,KAK7DC,EAAsBn4D,EAAM23D,SAAWr1D,GAAkBD,GAEvD4M,EAAMiG,eAANjG,EAER,OACI,0BAAM7H,KAAK,OAAOgN,SAAU,SAAA5E,GAAC,OAAIxP,EAAMoU,SAAS5E,EAAGnG,KAC/C,uBAAGpJ,UAAU,uBAAuBgP,EAAE,6BACtC,6BACI,kBAAC,GAAD,CAAsB5F,SAAUA,EAAUwsB,iBAAkB,SAAAhS,GAAO,OAAIq0C,EAAiBr0C,MACxF,kBAAC,GAAD,KACI,2BACIzc,KAAK,WACLnH,UAAWD,EAAM23D,SAAW,yBAA2B,aACvD38D,KAAK,WACLuqB,YAAatW,EAAE,gCACf/f,MAAOma,EACP+E,SAAU,SAAAoB,GAAC,OAAIwoD,EAAYxoD,EAAEsG,OAAO5mB,QACpCkpE,WAAW,IAEf,2BACIhxD,KAAK,kBACLnH,UAAWD,EAAM23D,SAAW,yBAA2B,aACvD38D,KAAK,WACLuqB,YAAatW,EAAE,uCACf/f,MAAO0pC,EACPxqB,SAAU,SAAAoB,GAAC,OAAIqpB,EAAmBrpB,EAAEsG,OAAO5mB,WAGnD,uBACI+Q,UAAWO,KACPR,EAAM23D,SAAW,4DAA8D,gBAC/E,CACIn9B,KAAMnxB,IAAauvB,GAAmB54B,EAAMq4D,gBAInDhvD,IAAauvB,GAAmB3pB,EAAE,oDAClC5F,IAAauvB,GAAmB54B,EAAMq4D,cAAgB,6BACtDr4D,EAAMq4D,cAAgB,0BAAMp4D,UAAU,4BAA4B0S,wBAAyB,CAAEC,OAAQ3D,EAAE4oD,GAAgB73D,EAAMq4D,oBAGtI,kBAAC,GAAD,CAAiBp4D,UAAU,mBACvB,kBAACk4D,EAAD,CACIn9D,KAAK,SACLyF,UACK4I,IACAuvB,IACAq/B,GACD5uD,IAAauvB,GACb54B,EAAMs4D,cAEVn2D,KAAM8M,EAAE,0BACRnN,UAAW9B,EAAMs4D,iBAGzB,yBAAKr4D,UAAU,kBACX,kBAAC,GAAD,QCtFT,IAAMs4D,GAAb,YACI,WAAYjzD,GAAmB,IAAD,6BAG1B,8CAFe,kCAIVA,KAAOA,EACZ,EAAKN,aAAc,EANO,EADlC,4BAAkDwB,ICmC5CgyD,G,YAEF,WAAYx4D,GAA4B,IAAD,8BACnC,8CAAMA,KAMHvJ,MAA4B,CAC/BlI,MAAO,GACPF,UAAW,GACXlD,SAAU,GACVstE,aAAa,EACbC,kBAAkB,EAClBJ,eAAe,EACfD,aAAc,GACdM,eAAe,EACfC,UAAW,IAhBwB,EAmBvCC,iBAAmB,SAACtqE,EAAeF,EAAmBlD,GAClD,EAAKgjB,SAAS,CAAE5f,QAAOF,YAAWlD,WAAUstE,aAAa,KApBtB,EAuBvCrkD,SAvBuC,uCAuB5B,WAAO5E,EAAQnG,GAAf,eAAA3b,EAAA,6DACP8hB,EAAET,iBACF,EAAKZ,SAAS,CAAEmqD,eAAe,IAEzBphE,EAAmB,CACrBjH,MAAO,EAAKwG,MAAMlI,MAClBuB,UAAW,EAAK2G,MAAMpI,UACtB0B,SAAU,EAAK0G,MAAMtL,SACrBoe,SAAUF,GARP,kBAYGlE,GAAa,IAAIgyD,GAAiBjgE,IAAUoR,MAAK,SAAA4sD,GACnD,EAAK/mD,SAAS,CAAEuqD,kBAAkB,EAAME,UAAW1D,EAAOzjE,UAb3D,uDAgBH,EAAK0c,SAAS,CAAEkqD,aAAc,KAAEvzD,SAASrT,OAhBtC,yBAkBH,EAAK0c,SAAS,CAAEmqD,eAAe,IAlB5B,4EAvB4B,0DA6CvCQ,WAAa,WACL,EAAKriE,MAAMiiE,kBAAoB,EAAKjiE,MAAMgiE,YAC1C,EAAKtqD,SAAS,CAAEwqD,eAAe,IAE/B,EAAKxqD,SAAS,CAAEsqD,aAAa,KAjDE,EAqDvCjD,wBAA0B,WAEtB,IAAMN,EAAS,EAAKz+D,MAAMmiE,UAE1BzzD,GAAS,IAAIozD,GAA6B,CAAEhD,OAAQL,EAAQvV,KAAM,MAAOr3C,MAAK,gBAtD9E,EAAKi4B,eAAiB,EAAKA,eAAehwB,KAApB,iBACtB,EAAKiwB,iBAAmB,EAAKA,iBAAiBjwB,KAAtB,iBAJW,E,6EA6DhBzL,GACfA,EAAS47B,SACTzxC,KAAK+Q,MAAMygC,WAAW,GAAI37B,EAAS47B,QAAS,Y,uCAI3B57B,GACjBA,EAASxX,aACT2B,KAAK+Q,MAAMygC,WAAW,GAAI37B,EAASxX,YAAa,c,+BAI9C,IAAD,OACG2hB,EAAMhgB,KAAK+Q,MAAXiP,EAER,OAAIhgB,KAAKwH,MAAMkiE,cACJ,kBAAC,IAAD,CAAUhrD,GxPnHA,WwPuHjB,yBAAK1N,UAAU,4BACX,kBAAC,GAAD,CAAYC,QAASjR,KAAK6pE,WAAY32D,KAAM8M,EAAE,cAAehP,UAAU,eAEvE,uBAAGA,UAAWO,KAAW,uBAAwBvR,KAAK+Q,MAAM23D,SAAW,SAAW,IAAKhlD,wBAAyB,CAAEC,OAAQ,2NAH9H,IAKI,yBAAK3S,UAAWO,KAAW,2BAA4B,WAAY,CAAEu4D,OAAQ9pE,KAAK+Q,MAAM23D,YAkBpF,yBAAK13D,UAAU,iCACX,kBAAC,KAAD,CACI+gC,SAAUpB,GACVqB,OAAQ,SAAAC,GAAW,OACf,4BACIjhC,UAAW,sBACXC,QAASghC,EAAYhhC,QACrBO,SAAUygC,EAAYzgC,UAAY,EAAKT,MAAMmhC,aAE7C,yBAAK1rB,IAAI,6BAA6BO,IAAI,WAC1C,0BAAM/V,UAAWO,KAAW,CAAEu4D,OAAQ,EAAK/4D,MAAM23D,YAAjD,0BAGRv2B,UAAWnyC,KAAKsxC,eAChBc,UAAWpyC,KAAKsxC,kBAGxB,uBACItgC,UAAWO,KAAWvR,KAAK+Q,MAAM23D,SAAW,wBAA0B,gBAAiB,uBAAwB,CAC3Gn9B,KAAMvrC,KAAK+Q,MAAMrV,uBAGpBskB,EAAEhgB,KAAK+Q,MAAMrV,wBAIpBsE,KAAKwH,MAAMiiE,kBAAoBzpE,KAAKwH,MAAMgiE,aACxC,kBAACrB,GAAD,CACI/oE,UAAWY,KAAKwH,MAAMpI,UACtBlD,SAAU8D,KAAKwH,MAAMtL,SACrBoD,MAAOU,KAAKwH,MAAMlI,MAClB6lB,SAAUnlB,KAAK4pE,iBACflB,SAAU1oE,KAAK+Q,MAAM23D,SACrBx2B,YAAalyC,KAAK+Q,MAAMmhC,eAG9BlyC,KAAKwH,MAAMiiE,mBAAqBzpE,KAAKwH,MAAMgiE,aACzC,kBAACV,GAAD,CACI3jD,SAAUnlB,KAAKmlB,SACfkkD,cAAerpE,KAAKwH,MAAM6hE,cAC1BD,aAAcppE,KAAKwH,MAAM4hE,aACzBV,SAAU1oE,KAAK+Q,MAAM23D,WAG5B1oE,KAAKwH,MAAMiiE,kBACR,yBAAKz4D,UAAU,yBACX,uBAAGA,UAAU,gCAAgCgP,EAAE,kCAC/C,uBAAGhP,UAAU,kDACRgP,EAAE,8BAEP,uBAAGhP,UAAU,0BAA0BgP,EAAE,4BACzC,uBAAGhP,UAAU,4BACT,8BAAOgP,EAAE,0BAAT,KACA,kBAAC,GAAD,CAAY/O,QAASjR,KAAKumE,wBAAyBrzD,KAAM8M,EAAE,gC,GA/J3D3O,aAwKb6f,kBAAkBq4C,IClM3BQ,G,oLACQ,IACE/pD,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACI,yBAAKhP,UAAU,wBACX,kBAAC,GAAD,CACIwV,IAAI,kCACJtI,mBAAmB,kCAEnB,4BAAK8B,EAAE,oBAEX,kBAAC,GAAD,CAAekyB,YAAalyC,KAAK+Q,MAAMmhC,YAAaV,WAAYxxC,KAAK+Q,MAAMygC,WAAY91C,oBAAqBsE,KAAK+Q,MAAMrV,oBAAqBgtE,UAAU,S,GAX3Ir3D,aAiBZ6f,kBAAkB64C,ICZlBC,GAN8C,SAACj5D,GAAD,OACzD,kBAAC,GAAD,CAAiByV,IAAI,iCAAiCtI,mBAAmB,oBACrE,kBAAC,GAAD,CAAeg0B,YAAanhC,EAAMmhC,YAAaV,WAAYzgC,EAAMygC,WAAY91C,oBAAqBqV,EAAMrV,oBAAqBgtE,UAAU,MCIzIuB,G,oLACQ,IAAD,EAE4BjqE,KAAK+Q,MAA9B5V,EAFH,EAEGA,SAAUq2C,EAFb,EAEaA,WAElB,OAAIxxC,KAAK+Q,MAAMiiC,WACH,kBAAC,IAAD,CACJt0B,GAAI,CACAynB,SAAUhrC,GAAYA,EAASqM,OAASrM,EAASqM,MAAM0iE,aAAe/uE,EAASqM,MAAM0iE,aAAe,OAKxG,oCACI,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAch4B,YAAalyC,KAAK+Q,MAAMmhC,YAAaV,WAAYA,EAAY91C,oBAAqBsE,KAAK+Q,MAAMrV,uBAE/G,kBAAC,GAAD,KACI,kBAAC,GAAD,CAAoBw2C,YAAalyC,KAAK+Q,MAAMmhC,YAAaV,WAAYA,EAAY91C,oBAAqBsE,KAAK+Q,MAAMrV,4B,GAlBlH8jB,IAAMnO,WA0Cd4W,gBAhBS,SAACzgB,GACrB,MAAO,CACH0qC,YAAa1qC,EAAM0F,MAAM1R,UACzBE,oBAAqB8L,EAAM0F,MAAMxR,oBACjCs3C,WAAYxrC,EAAM0F,MAAMzR,aAIL,SAACua,GACxB,MAAO,CACHw7B,WAAY,SAAClyC,EAAe8a,EAAkBrO,GAC1CiK,EAAS9I,GAAM5N,EAAO8a,EAAUrO,QAK7Bkc,CAA6CgiD,ICxD/CE,GAAb,YACI,WAAY9zD,GAAmB,IAAD,6BAG1B,8CAFe,4BAIVA,KAAOA,EACZ,EAAKN,aAAc,EANO,EADlC,4BAA4CwB,ICqBtC6yD,G,YACF,WAAYr5D,GAAa,IAAD,sBACpB,8CAAMA,IAEN,IAAM6kB,EAAS16B,OAAOC,SAASy6B,OACzB7e,EAAS,IAAIm8B,gBAAgBtd,GAC7BqwC,EAASlvD,EAAOvB,IAAI,UACpBsuB,EAAO/sB,EAAOvB,IAAI,QANJ,OAQpB,EAAKhO,MAAQ,CACT0+D,eAAe,EACfC,iBAAiB,EACjBC,eAAe,EACfC,aAAa,EACbJ,OAAQA,EACRniC,KAAMA,GAGV5tB,GAAS,IAAIi0D,GAAuB,CAAE7D,OAAQL,EAAQvV,KAAM5sB,KACvDzqB,MAAK,WACF,EAAK6F,SAAS,CAAEgnD,eAAe,IAE/Bze,uBAAW,WACP,EAAKvoC,SAAS,CAAEinD,iBAAiB,MAClC,QAENxwD,OAAM,WACH,EAAKuJ,SAAS,CAAEknD,eAAe,OA1BnB,E,wFA8BW,IAAD,OAC9BpmE,KAAKkf,SAAS,CAAEmnD,aAAa,IAE7B,IAAMviC,EAAO9jC,KAAKwH,MAAMs8B,KAClBmiC,EAASjmE,KAAKwH,MAAMy+D,OAE1B/vD,GAAS,IAAIozD,GAA6B,CAAEhD,OAAQL,EAAQvV,KAAM5sB,KAASzqB,MAAK,WAC5E,EAAK6F,SAAS,CAAEmnD,aAAa,S,+BAI3B,IAAD,OACGrmD,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACI,oCACI,kBAAC,GAAD,KACI,yBAAKhP,UAAU,0BACX,kBAAC,GAAD,CACIwV,IAAI,kCACJtI,mBAAmB,oCAEnB,4BAAK8B,EAAE,uBACP,2BAAIA,EAAE,0BAEV,yBAAKhP,UAAU,kCACVhR,KAAKwH,MAAM0+D,eACR,6BACI,4BAAKlmD,EAAE,kCACP,wBAAIhP,UAAU,WAAWgP,EAAE,4BAGjChgB,KAAKwH,MAAM0+D,gBAAkBlmE,KAAKwH,MAAM4+D,eACtC,6BACI,4BAAKpmD,EAAE,+BACP,wBAAIhP,UAAU,WAAWgP,EAAE,yBAGjChgB,KAAKwH,MAAM0+D,eAAiBlmE,KAAKwH,MAAM4+D,eACrC,6BACI,wBAAIp1D,UAAU,kBAAkBgP,EAAE,gCAClC,wBAAIhP,UAAU,kBAAkBgP,EAAE,qCAClC,kBAAC,GAAD,CACIhP,UAAU,eACVC,QAAS,kBAAM,EAAKs1D,2BACpBrzD,KAAM8M,EAAE,wBACRxO,SAAUxR,KAAKwH,MAAM6+D,cAExBrmE,KAAKwH,MAAM6+D,aAAe,4BAAKrmD,EAAE,iCAGzChgB,KAAKwH,MAAM2+D,iBAAmB,kBAAC,IAAD,CAAUznD,G7PvGxC,c6P2Gb,kBAAC,GAAD,KACI,kBAAC,GAAD,CACI8H,IAAI,iCACJtI,mBAAmB,6BAEnB,yBAAKlN,UAAU,yCACVhR,KAAKwH,MAAM0+D,eACR,6BACI,4BAAKlmD,EAAE,kCACP,wBAAIhP,UAAU,WAAWgP,EAAE,4BAGjChgB,KAAKwH,MAAM0+D,gBAAkBlmE,KAAKwH,MAAM4+D,eACtC,6BACI,4BAAKpmD,EAAE,+BACP,wBAAIhP,UAAU,WAAWgP,EAAE,yBAGjChgB,KAAKwH,MAAM0+D,eAAiBlmE,KAAKwH,MAAM4+D,eACrC,6BACI,wBAAIp1D,UAAU,kBAAkBgP,EAAE,gCAClC,wBAAIhP,UAAU,kBAAkBgP,EAAE,qCAClC,kBAAC,GAAD,CACIhP,UAAU,sBACVC,QAAS,kBAAM,EAAKs1D,2BACpBrzD,KAAM8M,EAAE,wBACRxO,SAAUxR,KAAKwH,MAAM6+D,cAExBrmE,KAAKwH,MAAM6+D,aAAe,4BAAKrmD,EAAE,mCAGzChgB,KAAKwH,MAAM2+D,iBAAmB,kBAAC,IAAD,CAAUznD,G7P1IxC,mB,G6PsBArN,aA6Hd6f,kBAAkBk5C,I,qBC/I3BC,GAAe,SAACt5D,GAClB,OACI,kBAAC,KAAD,MACK,SAACiP,GACE,OACI,kBAAC,GAAD,iBAAqBjP,EAArB,CAA4BC,UAAU,gBAAgBkC,KAAM8M,EAAE,0BAMnE,SAASsqD,KACpB,OACI,kBAAC,KAAD,MACK,SAACtqD,GACE,OACI,kBAAC,KAAD,CACIuqD,YAAa,UACbC,WAAY,uBACZC,qBAAmB,EACnBC,SAAS,MACTC,gBAAiBN,IAAerqD,EAAE,uB,WC2C3C4qD,GAjDuC,SAAC75D,GAErD,SAAS85D,EAAY5nD,GACnB,IAAMljB,EAAmB,GADM,uBAE/B,YAAsBgR,EAAM+5D,WAA5B,+CAAwC,CAAC,IAAhCziB,EAA+B,QACjCA,EAAUA,UAAUplC,IACvBljB,EAAOsU,KAAKg0C,EAAUlwC,OAJK,kFAO/BpH,EAAMg6D,QAAQ9nD,EAAMlS,EAAMoH,KAAMpY,GATkD,IAY5EigB,EAAMiG,eAANjG,EAER,OACE,yBAAKhP,UAAWD,EAAMi6D,gBACpB,2BAAO7vC,QAASpqB,EAAMoH,KAAMnH,UAAU,aACnCgP,EAAEjP,EAAMk6D,sBAEX,6BACA,kBAAC,GAAD,KACE,kBAAC50C,GAAD,CACEle,KAAMpH,EAAMoH,KACZgH,SAAU0rD,EACVv0C,YAAY,aACZjF,SAAUtgB,EAAMm6D,UAAUjrE,OAAS,IAAIC,KAAK6Q,EAAMm6D,UAAUjrE,OAC5Dw2B,SAAU1lB,EAAMo6D,SAChB50C,SAAS,EACTpW,QAASpP,EAAMoP,QACfE,QAAStP,EAAMsP,WAInB,kBAAC,GAAD,KACE,kBAACgW,GAAD,CACEle,KAAMpH,EAAMoH,KACZme,YAAY,aACZnX,SAAU0rD,EACVx5C,SAAUtgB,EAAMm6D,UAAUjrE,OAAS,IAAIC,KAAK6Q,EAAMm6D,UAAUjrE,OAC5Ds2B,SAAS,EACTpW,QAASpP,EAAMoP,QACfE,QAAStP,EAAMsP,WAGhBtP,EAAMq6D,YAAer6D,EAAMm6D,UAAUnrE,QAAUgR,EAAMm6D,UAAUnrE,OAAO0C,OAAS,GAAO,uBAAG+P,MAAO,CAAEqrC,UAAW,OAAQprC,MAAO,QAAU1B,EAAMm6D,WAAalrD,EAAE,wBAA0BjP,EAAMm6D,UAAUnrE,OAAO,OCKtMsrE,GAjD+B,SAACt6D,GAA4B,IAAD,EAC9CyD,mBAASzD,EAAMm6D,UAAYn6D,EAAMm6D,UAAUjrE,MAAQ,IADL,oBACjEyvB,EADiE,KAC1D47C,EAD0D,KAGxEz2D,qBAAU,WACJ9D,EAAMm6D,WAAan6D,EAAMm6D,UAAUjrE,QAAUyvB,GAC/C47C,EAASv6D,EAAMm6D,UAAUjrE,SAE1B,CAAC8Q,EAAMm6D,YAP8D,IAoBhElrD,EAAMiG,eAANjG,EAER,OACE,yBAAKhP,UAAWD,EAAMi6D,gBACpB,2BAAO7vC,QAASpqB,EAAMoH,KAAMnH,UAAU,aACnCgP,EAAEjP,EAAMk6D,sBAEX,6BACCl6D,EAAMS,SACL,uBAAGgB,MAAO,CAAEgzC,UAAW,OAAQmD,WAAY,OAAQiJ,SAAU,eAAiBliC,GAE9E,2BACElxB,GAAIuS,EAAMoH,KACVA,KAAMpH,EAAMoH,KACZpM,KAAMgF,EAAMhF,KAAOgF,EAAMhF,KAAO,SAChC9L,MAAOyvB,EACPvQ,SA3BR,SAAqBoB,GACnB,IAAMxgB,EAAmB,GAD4B,uBAErD,YAAsBgR,EAAM+5D,WAA5B,+CAAwC,CAAC,IAAhCziB,EAA+B,QACjCA,EAAUA,UAAU9nC,EAAEsG,OAAO5mB,QAChCF,EAAOsU,KAAKg0C,EAAUlwC,OAJ2B,kFAOrDmzD,EAAS/qD,EAAEsG,OAAO5mB,OAClB8Q,EAAMg6D,QAAQxqD,EAAEsG,OAAO5mB,MAAO8Q,EAAMoH,KAAMpY,IAoBpCiR,UAAU,4BACVQ,SAAUT,EAAMS,SAChBilB,SAAU1lB,EAAMo6D,WAGlBp6D,EAAMq6D,YAAer6D,EAAMm6D,UAAUnrE,QAAUgR,EAAMm6D,UAAUnrE,OAAO0C,OAAS,GAC/E,uBAAG+P,MAAO,CAAEqrC,UAAW,OAAQprC,MAAO,QAAU1B,EAAMm6D,WAAalrD,EAAE,wBAA0BjP,EAAMm6D,UAAUnrE,OAAO,OC7DjHwrE,I,OAAb,YACI,WAAYtoD,EAAYpjB,GAAsB,oBAC1C,IAEIkX,EAAc,CAAC9X,UADM,OAATgkB,EAAgBA,EAAK40C,eAAiB,KACxBh4D,eAHW,mDACvB,sCAIPkX,IANnB,4BAA8CD,KCgZ/Boa,mBAxXyC,SAACngB,GAAiC,IAChFiP,EAAMjP,EAANiP,EAEJwrD,EAAc,EAHqE,EAI7Dh3D,mBAAS,MAJoD,iCAK3CA,mBAAS,KALkC,iCAMzDA,mBAAS,KANgD,oBAMhF4gC,EANgF,KAMvEC,EANuE,OAOjD7gC,mBAAS,IAAItU,MAPoC,oBAOhFurE,EAPgF,UASvF52D,qBAAU,WACJ42D,GACFA,EAAYlX,QAAQkX,EAAY3wC,UAAY,MAE7C,IAEH,IAAM4wC,EAAU,uCAAG,WAAOzsE,EAAiBY,GAAxB,iBAAApB,EAAA,sEACG2W,GAAS,IAAIm2D,GAAyBtsE,EAAWY,IAClEwZ,MAAK,SAAAxD,GACJ,OAAOA,EAASrT,QAEhBmT,OAAM,eALO,QACby/B,EADa,UAUXu2B,EAAiBh8C,GAAWylB,GAChCC,EAAWs2B,IAXI,2CAAH,wDAgBhB92D,qBAAU,WACJ22D,GAAOA,EAAM,GACXz6D,EAAMjM,gBAAkBiM,EAAMjM,eAAe3F,YAAc4R,EAAMjM,eAAe3F,UAAUc,OAC5F8Q,EAAMg6D,SAAQ,EAAO,YAAa,IAE3BS,GAAOA,EAAM,IACtBz6D,EAAMg6D,aAAQpvE,EAAW,YAAa,MAEvC,CAACoV,EAAMjM,eAAezF,YAAYY,QAErC4U,qBAAU,WACJ9D,EAAMjM,gBAAkBiM,EAAMjM,eAAe7F,WAAa8R,EAAMjM,eAAejF,aACjF6rE,EAAW36D,EAAMjM,eAAe7F,UAAUgB,MAAO8Q,EAAMjM,eAAejF,YAAYI,MAAMA,SAEzF,CAAC8Q,EAAMjM,eAAe7F,UAAUgB,QAEnC4U,qBAAU,WACR3Z,OAAOysE,SAAS,EAAG,KAClB,IAEH,IAAMiE,EAAe,SAACvsE,GACpB,IAAIwsE,EAAQ,IAAI3rE,KACZ4rE,EAAY,IAAI5rE,KAAKb,GACrB0sE,EAASF,EAAMrW,cAAgBsW,EAAUtW,cACzC9gC,EAAIm3C,EAAMtW,WAAauW,EAAUvW,WAIrC,OAHI7gC,EAAI,GAAY,IAANA,GAAWm3C,EAAM/wC,UAAYgxC,EAAUhxC,YACnDixC,IAEKA,GAST,SAASlB,EAAYtqD,GACnB,IAAMyrD,KAAczrD,EAAEsG,OAAO5mB,OAA4B,MAAnBsgB,EAAEsG,OAAO5mB,OAC/C8Q,EAAMg6D,QAAQiB,EAAazrD,EAAEsG,OAAO1O,KAAM,IAQ5C,OAfEqzD,EADEz6D,EAAMjM,eAAezF,aAAe0R,EAAMjM,eAAezF,YAAYY,MACjE2rE,EAAa76D,EAAMjM,eAAezF,YAAYY,OAE9C,EAcN,oCACE,kBAAC,GAAD,KACE,yBAAK+Q,UAAU,kBACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cACb,wBAAIxS,GAAG,UAAUgU,MAAO,CAAES,OAAQ,QAAU+M,EAAE,0CAIlD,yBAAKhP,UAAU,uBACZoT,qCAA0BrT,EAAMk7D,qBAGnC,yBAAKj7D,UAAU,OACb,yBAAKA,UAAU,cACb,kBAAC,GAAD,CACEmH,KAAK,YACL+yD,UAAWn6D,EAAMjM,eAAe1F,UAChC2rE,QAASh6D,EAAMg6D,QACfE,oBAAoB,iDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBD,SAAU,EACVL,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,aAAckwC,UAAWrzB,OAGzFjkB,EAAMm7D,iBAAmBn7D,EAAM1U,kBAAoB6b,GAAUgE,QAAQnL,EAAM3U,WAC3E,kBAAC,GAAD,CACE+b,KAAK,QACL+yD,UAAWn6D,EAAMjM,eAAexF,MAChCyrE,QAASh6D,EAAMg6D,QACfE,oBAAoB,mDACpBD,eAAe,QACfG,SAAU,EACVC,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,UAAWkwC,UAAWnzB,OAG7C,yBAAKlkB,UAAU,0BACb,2BAAOA,UAAU,aACdgP,EAAE,qDAEL,uBAAGhP,UAAU,yBACVD,EAAMjM,eAAexF,MAAMW,QAKlC,kBAAC,GAAD,CACEkY,KAAK,YACL+yD,UAAWn6D,EAAMjM,eAAe7F,UAChC8rE,QAASh6D,EAAMg6D,QACfE,oBAAoB,2DACpBD,eAAe,QACfG,SAAU,EACVC,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,kBAAmBkwC,UAAWhzB,IAAmB,CAAEld,KAAM,qBAAsBkwC,UAAW5yB,GAAqB,MACpItV,QAAS,IAAIjgB,KACbmgB,QAASorD,KAKb,yBAAKz6D,UAAU,cAEb,kBAAC,GAAD,CACEmH,KAAK,WACL+yD,UAAWn6D,EAAMjM,eAAe5I,SAChC6uE,QAASh6D,EAAMg6D,QACfE,oBAAoB,gDACpBD,eAAe,QACfG,SAAU,EACVC,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,aAAckwC,UAAWrzB,OAG3F,kBAAC,GAAD,CACE7c,KAAK,cACL+yD,UAAWn6D,EAAMjM,eAAevF,YAChCwrE,QAASh6D,EAAMg6D,QACfE,oBAAoB,sDACpBD,eAAe,QACfG,SAAU,EACVC,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,YAAakwC,UAAW1yB,OAG/C,yBAAK3kB,UAAU,0BACb,2BAAOA,UAAU,aAAjB,uBAGA,uBAAGA,UAAU,yBACVokC,KAMP,yBAAKpkC,UAAU,cACb,kBAAC,GAAD,CACEmH,KAAK,cACL+yD,UAAWn6D,EAAMjM,eAAezF,YAChC0rE,QA5Gd,SAAqB9qE,EAAYkY,EAAWpY,GAC1CyrE,EAAMvrE,EAAQ2rE,EAAa3rE,GAAS,EACpC8Q,EAAMg6D,QAAQ9qE,EAAOkY,EAAMpY,IA2GfkrE,oBAAoB,mDACpBD,eAAe,QACfG,SAAU,EACVC,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,kBAAmBkwC,UAAWlzB,KACnD9U,QAAS,IAAIngB,SAKnB,6BACA,yBAAK8Q,UAAU,OACZw6D,GAAO,IACN,yBAAKx6D,UAAU,UACb,yBAAKA,UAAU,mBACb,2BAAOA,UAAU,aACdgP,EAAE,gEAEL,6BACA,6BACA,6BACGoE,qCAA0BrT,EAAMo7D,yBAAyBroD,UAI5D,6BACE,2BACEtlB,GAAG,gBACHuN,KAAK,QACL9L,MAAO,EACPkY,KAAM,YACNi0D,eAAgBr7D,EAAMjM,eAAe3F,YAAsD,IAAzC4R,EAAMjM,eAAe3F,UAAUc,MACjFkf,SAAU0rD,IAEZ,0BAAM75D,UAAU,eAAhB,OACA,2BACExS,GAAG,iBACHuN,KAAK,QACL9L,MAAO,EACPkY,KAAM,YACNi0D,oBAAyDzwE,IAAzCoV,EAAMjM,eAAe3F,UAAUc,OAAuB8Q,EAAMjM,eAAe3F,YAAsD,IAAzC4R,EAAMjM,eAAe3F,UAAUc,MACvIkf,SAAU0rD,IAAe,0BAAM75D,UAAU,eAAhB,QAG7BD,EAAMq6D,YAAer6D,EAAMjM,eAAe3F,UAAUY,QAAUgR,EAAMjM,eAAe3F,UAAUY,OAAO0C,OAAS,GAC7G,sCAAYsO,EAAMjM,eAAe3F,WAAa4R,EAAMjM,eAAe3F,UAAUY,YAOzF,kBAAC,GAAD,KACE,yBAAKiR,UAAU,iBACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,OAAQvM,UAAW,SAC7D,yBAAKx0C,UAAU,gBACb,wBAAIwB,MAAO,CAAES,OAAQ,QAAU+M,EAAE,0CAIrC,yBAAKhP,UAAU,uBACZoT,qCAA0BrT,EAAMk7D,qBAGnC,yBAAKj7D,UAAU,WACb,kBAAC,GAAD,CACEmH,KAAK,YACL+yD,UAAWn6D,EAAMjM,eAAe1F,UAChC2rE,QAASh6D,EAAMg6D,QACfE,oBAAoB,iDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,aAAckwC,UAAWrzB,OAG3F,kBAAC,GAAD,CACE7c,KAAK,WACL+yD,UAAWn6D,EAAMjM,eAAe5I,SAChC6uE,QAASh6D,EAAMg6D,QACfE,oBAAoB,gDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,aAAckwC,UAAWrzB,OAG3F,kBAAC,GAAD,CACE7c,KAAK,cACL+yD,UAAWn6D,EAAMjM,eAAezF,YAChC0rE,QAASh6D,EAAMg6D,QACfE,oBAAoB,mDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,kBAAmBkwC,UAAWlzB,KACnD9U,QAAS,IAAIngB,OAGb6Q,EAAM1U,kBAAoB6b,GAAUgE,QAAQnL,EAAM3U,WAClD,kBAAC,GAAD,CACE+b,KAAK,QACL+yD,UAAWn6D,EAAMjM,eAAexF,MAChCyrE,QAASh6D,EAAMg6D,QACfE,oBAAoB,mDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,UAAWkwC,UAAWnzB,OAG7C,yBAAKlkB,UAAU,kBACb,2BAAOA,UAAU,aACdgP,EAAE,qDAEL,uBAAGhP,UAAU,wBAAwBwB,MAAO,CAAEO,SAAU,SACrDhC,EAAMjM,eAAexF,MAAMW,QAKlC,kBAAC,GAAD,CACEkY,KAAK,cACL+yD,UAAWn6D,EAAMjM,eAAevF,YAChCwrE,QAASh6D,EAAMg6D,QACfE,oBAAoB,sDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,YAAakwC,UAAW1yB,OAG/C,kBAAC,GAAD,CACExd,KAAK,YACL+yD,UAAWn6D,EAAMjM,eAAe7F,UAChC8rE,QAASh6D,EAAMg6D,QACfE,oBAAoB,2DACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,kBAAmBkwC,UAAWhzB,IAAmB,CAAEld,KAAM,qBAAsBkwC,UAAW5yB,GAAqB,MACpItV,QAAS,IAAIjgB,KACbmgB,QAASorD,IAGX,yBAAKz6D,UAAU,kBACb,2BAAOA,UAAU,aAAjB,uBAGA,uBAAGA,UAAU,iBACVokC,IAIJo2B,GAAO,IACN,yBAAKh5D,MAAO,CAAEgzC,UAAW,SACvB,6BACE,2BAAOx0C,UAAU,aACdgP,EAAE,gEAEL,6BACA,6BACA,6BACGoE,qCAA0BrT,EAAMo7D,yBAAyBroD,UAI5D,6BACE,2BACEtlB,GAAG,gBACHuN,KAAK,QACL9L,MAAO,EACPkY,KAAM,YACNi0D,eAAgBr7D,EAAMjM,eAAe3F,YAAsD,IAAzC4R,EAAMjM,eAAe3F,UAAUc,MACjFkf,SAAU0rD,IAEZ,0BAAM75D,UAAU,eAAhB,OACA,2BACExS,GAAG,iBACHuN,KAAK,QACL9L,MAAO,EACPkY,KAAM,YACNi0D,oBAAyDzwE,IAAzCoV,EAAMjM,eAAe3F,UAAUc,OAAuB8Q,EAAMjM,eAAe3F,YAAsD,IAAzC4R,EAAMjM,eAAe3F,UAAUc,MACvIkf,SAAU0rD,IAAe,0BAAM75D,UAAU,eAAhB,QAI7BD,EAAMq6D,YAAer6D,EAAMjM,eAAe3F,UAAUY,QAAUgR,EAAMjM,eAAe3F,UAAUY,OAAO0C,OAAS,GAC7G,sCAAYsO,EAAMjM,eAAe3F,WAAa4R,EAAMjM,eAAe3F,UAAUY,gBCzWhFmxB,I,OAAAA,gBAb+B,SAACngB,GAAW,IAChDiP,EAAMjP,EAANiP,EAER,OACE,wBACEhP,UAAS,2BAAsBD,EAAMsgB,SAAW,YAAc,cAE7DrR,EAAEjP,EAAMyN,OAHX,YAIGzN,EAAMs7D,QAAQl1D,KAAQpG,EAAMtO,OAAO,GAAM,kBAAC,KAAD,CAAiB0O,KAAMU,Y,okBCFvE,IA6Peqf,mBA7PmD,SAACngB,GAAsC,IAC/FiP,EAAMjP,EAANiP,EAD8F,EAEpDxL,mBAAgB,IAFoC,oBAE/F83D,EAF+F,KAE5EC,EAF4E,KAItG13D,qBAAU,WAIR,IADA,IAAIwgD,EAAe,GACV1qC,EAAI,EAAGA,EAAI5Z,EAAMpJ,0BAA0BlF,OAAQkoB,IACpB,IAAlC5Z,EAAMlJ,cAAc8iB,GAAGloB,OACzB4yD,EAAM1qC,GAAK5Z,EAAMlJ,cAAc8iB,GAAG,GAE9B5Z,EAAM6xB,KAAK9jC,4BAA8BiS,EAAM6xB,KAAK/iC,aAAekR,EAAM6xB,KAAK9jC,2BAA2BmB,QAAU8Q,EAAMpJ,0BAA0BgjB,GAAGY,IAAI/sB,GAC5J62D,EAAM1qC,GAAK5Z,EAAM6xB,KAAK/iC,YAAYI,MAElCo1D,EAAM1qC,QAAKhvB,EAIjB4wE,EAAqBlX,KACpB,CAACtkD,EAAMlJ,gBAEVgN,qBAAU,iBAC4ClZ,IAAhDoV,EAAM6xB,KAAK9jC,2BAA2BmB,OACQ,KAAhD8Q,EAAM6xB,KAAK9jC,2BAA2BmB,OACc,qBAApD8Q,EAAM6xB,KAAK9jC,2BAA2BiB,OAAO,KAC7CgR,EAAMg6D,QAAQ,GAAIh6D,EAAMoH,KAAM,CAAC,wBAInCtD,qBAAU,WACR3Z,OAAOysE,SAAS,EAAG,KAClB,IAEH,IAAM6E,EAA4B,SAACzgE,GAC7BgF,EAAMpJ,iCACwBhM,IAA5B2wE,EAAkBvgE,IACpBgF,EAAMg6D,QAAQh6D,EAAMpJ,0BAA0BoE,GAAMwf,IAAI/sB,GAAIuS,EAAMoH,KAAM,IACxEpH,EAAMg6D,QAAQuB,EAAkBvgE,GAAO,cAAe,IACtDgF,EAAM9E,YAEN8E,EAAMg6D,QAAQh6D,EAAMpJ,0BAA0BoE,GAAMwf,IAAI/sB,GAAIuS,EAAMoH,KAAM,CAAC,iBAKzEs0D,EAAqB,SAAC1gE,EAAc2gE,GACxC,OAAI37D,EAAMpJ,+BACqChM,GAAzCoV,EAAM6xB,KAAK9jC,4BAA2CiS,EAAM6xB,KAAK9jC,2BAA2BmB,QAAU8Q,EAAMpJ,0BAA0BoE,GAAMwf,IAAI/sB,GACnI,YAAXkuE,EACK,8CAEA,iCAIM,YAAXA,EACK,8BAEA,iBAIN,kBAGHC,EAAmB,SAAC5gE,GACxB,OAAIgF,EAAM6xB,KAAK9jC,2BAA2BmB,OAAS8Q,EAAMpJ,2BACnDoJ,EAAM6xB,KAAK9jC,2BAA2BmB,QAAU8Q,EAAMpJ,0BAA0BoE,GAAMwf,IAAI/sB,GACrF,WAGJ,UAeT,OACE,oCACIuS,EAAMpJ,2BAA6BoJ,EAAMlJ,eACzC,oCACE,kBAAC,GAAD,KACE,yBAAKmJ,UAAU,kBACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cACb,wBAAIxS,GAAG,UAAUgU,MAAO,CAAES,OAAQ,QAAU+M,EAAE,qCAIlD,yBAAKhP,UAAU,sBAAsBwB,MAAO,CAAEM,OAAQ,MAAOq8B,oBAxBrD,WAClB,IAAIy9B,EAAoB,GACxB,GAAI77D,EAAMpJ,0BAGR,IAFA,IAAI41C,EAAUxsC,EAAMpJ,0BAA0BlF,OAC1CoqE,EAAa,IAAMtvB,EACd5yB,EAAI,EAAGA,EAAI4yB,EAAS5yB,IAC3BiiD,GAAqBC,EAAWx1D,WAAa,KAGjD,OAAOu1D,EAeqFE,KAC/E/7D,EAAMpJ,0BAA0BkT,KAAI,SAAA9O,GAAI,OACvC,yBAAKiF,UAAU,kCACb,4BAAKjF,EAAKnK,OAAOwkB,YAChBra,EAAKnK,OAAOL,YAAYuiB,SACvB,yBAAK9S,UAAU,mCACZoT,qCAA0BrY,EAAKnK,OAAOL,kBAM9CwP,EAAMpJ,0BAA0BkT,KAAI,SAAC9O,EAAMoL,GAAP,OACnC,yBAAKnG,UAAU,kCACXD,EAAMlJ,eAAiBkJ,EAAMlJ,cAAcsP,IAAQpG,EAAMlJ,cAAcsP,GAAK1U,OAAS,EACrF,yBAAK+P,MAAO,CAAEgzC,UAAW,OAAQZ,SAAU,UACzC,kBAAC,GAAD,CACE7sB,QAAShnB,EAAMlJ,cAAcsP,GAC7Bmf,YAAa,kBACbgC,mBAAoB,SAACqM,GAAD,OAAU4nC,EAAqB,MAAKD,EAAN,eAA0Bn1D,EAAMwtB,MAClF1M,eAAgBq0C,EAAkBn1D,MAGnCpG,EAAMlJ,eAAiBkJ,EAAMlJ,cAAcsP,IAA4C,IAApCpG,EAAMlJ,cAAcsP,GAAK1U,OAC/E,yBAAK+P,MAAO,CAAEgzC,UAAW,OAAQZ,SAAU,QAAS/G,UAAW,WAC7D,uBAAGrrC,MAAO,CAAES,OAAQ,MAAQlC,EAAMlJ,cAAcsP,GAAK,GAAGxV,QAG1D,yBAAK6Q,MAAO,CAAEgzC,UAAW,OAAQZ,SAAU,QAAS/G,UAAW,WAC7D,uBAAGrrC,MAAO,CAAES,OAAQ,MAApB,qBAMPlC,EAAMpJ,0BAA0BkT,KAAI,SAAC9O,EAAMoL,GAAP,OACnC,yBAAKnG,UAAU,kCACb,6BACGjF,EAAKnK,OAAO0iC,YACX,uBAAG9xB,MAAO,CAAES,OAAQ,MACjBlC,EAAMtT,8BAAgCsT,EAAMtT,6BAA6Bqc,WAD5E,OAC4F/I,EAAMtT,8BAAgCsT,EAAMtT,6BAA6Bmc,UADrK,0BAIA,uBAAGpH,MAAO,CAAES,OAAQ,YAM3BlC,EAAMpJ,0BAA0BkT,KAAI,SAAC9O,EAAMoL,GAAP,OACnC,yBAAKnG,UAAU,gDACb,8BACKjF,EAAKnK,OAAO0iC,aAAgBvzB,EAAMg8D,sBAAyBh8D,EAAM6xB,KAAK9jC,4BAA8BiS,EAAM6xB,KAAK9jC,2BAA2BmB,QAAU8L,EAAKwf,IAAI/sB,GAC9J,yBAAKgU,MAAO,CAAEqrC,UAAW,SAAU2T,WAAY,SAC7C,yBAAKxgD,UAAU,OACb,kBAAC,GAAD,CACEkC,KAAMy5D,EAAiBx1D,GACvB3Y,GAAG,SACHuN,KAAK,SACLkF,QAAS,WACPu7D,EAA0Br1D,IAE5BnG,UAAWy7D,EAAmBt1D,EAAK,eAMzC,uBAAG3E,MAAO,CAAEC,MAAO,MAAO+yC,UAAW,SAArC,uCAMRz0C,EAAMq6D,YAAer6D,EAAM6xB,KAAK9jC,2BAA2BiB,QAAUgR,EAAM6xB,KAAK9jC,2BAA2BiB,OAAO0C,OAAS,GAC3H,oCACE,6BACA,uBAAG+P,MAAO,CAAEqrC,UAAW,SAAUprC,MAAO,QAAU1B,EAAM6xB,MAAQ7xB,EAAM6xB,KAAK9jC,4BAA8BkhB,EAAE,wBAA0BjP,EAAM6xB,KAAK9jC,2BAA2BiB,YAKnL,kBAAC,GAAD,KACE,yBAAKiR,UAAU,iBACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,OAAQvM,UAAW,SAC7D,yBAAKx0C,UAAU,gBACb,wBAAIwB,MAAO,CAAES,OAAQ,QAAU+M,EAAE,qCAIpCjP,EAAMpJ,0BAA0BkT,KAAI,SAAC9O,EAAMoL,GAAP,OACnC,yBAAKnG,UAAU,gBAAgBwB,MAAO2E,EAAOpG,EAAMpJ,0BAA0BlF,OAAQ,EAAK,CAAEsvD,aAAc,aAAUp2D,GAClH,wBAAI6W,MAAO,CAAEqrC,UAAW,WAAa9xC,EAAKnK,OAAOwkB,YAChDra,EAAKnK,OAAOL,YAAYuiB,SACvB,yBAAK9S,UAAU,mCACZoT,qCAA0BrY,EAAKnK,OAAOL,cAIzCwP,EAAMlJ,eAAiBkJ,EAAMlJ,cAAcsP,IAAQpG,EAAMlJ,cAAcsP,GAAK1U,OAAS,EACrF,yBAAK+P,MAAO,CAAEgzC,UAAW,SACvB,kBAAC,GAAD,CACEztB,QAAShnB,EAAMlJ,cAAcsP,GAC7Bmf,YAAa,kBACbgC,mBAAoB,SAACqM,GAAD,OAAU4nC,EAAqB,MAAKD,EAAN,eAA0Bn1D,EAAMwtB,MAClF1M,eAAgBq0C,EAAkBn1D,MAGnCpG,EAAMlJ,eAAiBkJ,EAAMlJ,cAAcsP,IAA4C,IAApCpG,EAAMlJ,cAAcsP,GAAK1U,OAC/E,yBAAK+P,MAAO,CAAEgzC,UAAW,OAAQZ,SAAU,QAAS/G,UAAW,WAC7D,uBAAGrrC,MAAO,CAAES,OAAQ,MAAQlC,EAAMlJ,cAAcsP,GAAK,GAAGxV,QAG1D,yBAAK6Q,MAAO,CAAEgzC,UAAW,OAAQZ,SAAU,QAAS/G,UAAW,WAC7D,uBAAGrrC,MAAO,CAAES,OAAQ,MAApB,iBAIJ,yBAAKT,MAAO,CAAEqrC,UAAW,SAAU2T,WAAY,UAC1CzlD,EAAKnK,OAAO0iC,aAAgBvzB,EAAMg8D,sBAAyBh8D,EAAM6xB,KAAK9jC,4BAA8BiS,EAAM6xB,KAAK9jC,2BAA2BmB,QAAU8L,EAAKwf,IAAI/sB,GAC9J,6BACE,kBAAC,GAAD,CACE0U,KAAMy5D,EAAiBx1D,GACvB3Y,GAAG,SACHuN,KAAK,SACLkF,QAAS,WACPu7D,EAA0Br1D,IAE5BnG,UAAWy7D,EAAmBt1D,EAAK,YAErC,6BACGpL,EAAKnK,OAAO0iC,YACX,uBAAG9xB,MAAO,CAAES,OAAQ,MACjBlC,EAAMtT,8BAAgCsT,EAAMtT,6BAA6Bqc,WAD5E,OAC4F/I,EAAMtT,8BAAgCsT,EAAMtT,6BAA6Bmc,UADrK,0BAIA,uBAAGpH,MAAO,CAAES,OAAQ,SAK1B,uBAAGT,MAAO,CAAEC,MAAO,MAAO+yC,UAAW,SAArC,6CCtNPt0B,mBArC+B,SAACngB,GAC7BA,EAANiP,EAD8C,IAAD,EAGjBxL,oBAAS,GAHQ,oBAG9Cw4D,EAH8C,KAGlCC,EAHkC,KAK/CC,EAAW3sB,iBAAY,MAa7B,OACI,6BACI,kBAAC,GAAD,CAAertC,KAAK,cAAcjC,QANvB,WACfi8D,EAAS3rB,QAAQhyB,WAMb,2BACI/wB,GAAIuS,EAAMvS,IAAMuS,EAAMvS,GACtB2uE,QAAM,EACN1oB,IAAKyoB,EACLnhE,KAAK,OACLy4C,OAAO,UACPrlC,SApBc,SAACU,GACnBA,EAAMgH,OAAO69B,OAAS7kC,EAAMgH,OAAO69B,MAAM,IACzC3zC,EAAMsvB,cAAgBtvB,EAAMq8D,WAAWvtD,EAAMgH,OAAO69B,MAAO,GAAI3zC,EAAMsvB,cAEzE4sC,GAAc,MAkBTD,IAAej8D,EAAMs8D,cAClB,gDCmDDn8C,mBAxEyC,SAACngB,GAAW,IAC1DiP,EAAMjP,EAANiP,EAERnL,qBAAU,WACR9D,EAAMu8D,iBAAiBv8D,EAAM6xB,KAAKhjC,sBAAwBmR,EAAMw8D,eAChEryE,OAAOysE,SAAS,EAAG,KAClB,IAEH,IARiE,EAuB3CnzD,mBAASzD,EAAM6xB,KAAKvjC,YAfrB,SAACA,GACpB,IAAIwsE,EAAQ,IAAI3rE,KACZ4rE,EAAY,IAAI5rE,KAAKb,GACrB0sE,EAASF,EAAMrW,cAAgBsW,EAAUtW,cACzC9gC,EAAIm3C,EAAMtW,WAAauW,EAAUvW,WAIrC,OAHI7gC,EAAI,GAAY,IAANA,GAAWm3C,EAAM/wC,UAAYgxC,EAAUhxC,YACnDixC,IAEKA,EAO+CH,CAAa76D,EAAM6xB,KAAKvjC,YAAYY,OAAS,GAvBpC,8BAyBjE,OACE,yBAAK+Q,UAAU,QACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,gBACb,kBAAC,GAAD,KACE,wBAAIwB,MAAO,CAAES,OAAQ,QAAU+M,EAAE,yCAEnC,kBAAC,GAAD,KACE,wBAAIxN,MAAO,CAAES,OAAQ,MAAOuyC,UAAW,SAAWxlC,EAAE,2CAK1D,yBAAKhP,UAAU,mBACZoT,qCAA0BrT,EAAMxP,YAAYuiB,UAE9C/S,EAAM6xB,MAAQ7xB,EAAMw8D,cACnB,uBAAG/6D,MAAO,CAAEgzC,UAAW,SAAvB,iBAEA,kBAAC,GAAD,CACE4nB,WA1Ba,SAAC1mD,EAAW2Z,GAC/BtvB,EAAM6xB,MAAQ7xB,EAAMy8D,WAAW9mD,EAAM2Z,EAActvB,EAAM6xB,KAAKxjC,UAAWa,MAAO8Q,EAAM6xB,KAAK1mC,SAAU+D,MAAO8Q,EAAM6xB,KAAKvjC,YAAaY,QA0B9HogC,aAActvB,EAAM6xB,KAAKpkC,GACzBA,GAAG,aACH6uE,cAAc,IAIjBt8D,EAAM6xB,MAAQ7xB,EAAM6xB,KAAKhjC,qBACxB,oDAGDmR,EAAM5K,iCACL,uBAAGqM,MAAO,CAAEC,MAAO,QAAU1B,EAAM3K,wCAGpC2K,EAAM8B,YAAc9B,EAAMw8D,eACzB,yBAAK/6D,MAAO,CAAEg/C,WAAY,OAAQhM,UAAW,SAA7C,sBAIDz0C,EAAMq6D,YACL,uBAAG54D,MAAO,CAAEqrC,UAAW,OAAQprC,MAAO,QAAtC,gD,6jBChER,IAgQeye,mBAhQmC,SAACngB,GAAW,IACpDiP,EAAMjP,EAANiP,EADmD,EAE3BxL,mBAAmBzD,EAAMjM,gBAAkBiM,EAAMjM,eAAetF,SAASS,OAAS8Q,EAAMjM,eAAetF,SAASS,MAAM,GAAM8Q,EAAMjM,eAAetF,SAASS,MAAM,GAAK,CAAEoB,aAAc,GAAIE,YAAa,KAF3K,oBAEpDksE,EAFoD,KAE1CC,EAF0C,OAG3Bl5D,mBAAmBzD,EAAMjM,gBAAkBiM,EAAMjM,eAAetF,SAASS,OAAS8Q,EAAMjM,eAAetF,SAASS,MAAM,GAAM8Q,EAAMjM,eAAetF,SAASS,MAAM,GAAK,CAAEoB,aAAc,GAAIE,YAAa,KAH3K,oBAGpDosE,EAHoD,KAG1CC,EAH0C,OAIvBp5D,mBAAoB,CAACi5D,EAAUE,IAJR,oBAIpDE,EAJoD,KAIxCC,EAJwC,OAKft5D,mBAAS,IALM,oBAOrDs2D,GAPqD,UAO3B,CAAC,CAAE3yD,KAAM,sBAAuBkwC,UAAWxzB,IAAuB,CAAE1c,KAAM,oBAAqBkwC,UAAWvzB,MAP/E,EAoBrCtgB,mBAASzD,EAAMjM,gBAAkBiM,EAAMjM,eAAezF,YAXvD,SAACA,GACpB,IAAIwsE,EAAQ,IAAI3rE,KACZ4rE,EAAY,IAAI5rE,KAAKb,GACrB0sE,EAASF,EAAMrW,cAAgBsW,EAAUtW,cACzC9gC,EAAIm3C,EAAMtW,WAAauW,EAAUvW,WAIrC,OAHI7gC,EAAI,GAAY,IAANA,GAAWm3C,EAAM/wC,UAAYgxC,EAAUhxC,YACnDixC,IAEKA,EAGiFH,CAAa76D,EAAMjM,eAAezF,YAAYY,OAAS,GApBtF,oBAoBpDurE,EApBoD,KAsBrDuC,GAtBqD,KAsBlC,SAACxtD,EAAkCiM,GAC1D,IAAMrV,EAAMoJ,EAAEsG,OAAO1O,KACrB,OAAQqU,GACN,KAAK,EACH,OAAQrV,GACN,IAAK,eACHu2D,EAAY,MAAKD,EAAN,CAAgBpsE,aAAckf,EAAEsG,OAAO5mB,SAClD,MACF,QACEytE,EAAY,MAAKD,EAAN,CAAgBlsE,YAAagf,EAAEsG,OAAO5mB,SAErD,MACF,QACE,OAAQkX,GACN,IAAK,eACHy2D,EAAY,MAAKD,EAAN,CAAgBtsE,aAAckf,EAAEsG,OAAO5mB,SAClD,MACF,QACE2tE,EAAY,MAAKD,EAAN,CAAgBpsE,YAAagf,EAAEsG,OAAO5mB,aAM3D4U,qBAAU,WACRi5D,EAAc,CAACL,EAAUE,MACxB,CAACF,IACJ54D,qBAAU,WACRi5D,EAAc,CAACL,EAAUE,MACxB,CAACA,IACJ94D,qBAAU,WACRm5D,MACC,CAACH,IACJh5D,qBAAU,WACR3Z,OAAOysE,SAAS,EAAG,KAClB,IAEH,IAAMqG,EAAe,WAEnB,IAAMjuE,EAAmB,GAFA,uBAGzB,YAAsB+qE,EAAtB,+CAAkC,CAAC,IAA1BziB,EAAyB,+BAChC,YAAoBwlB,EAApB,+CAAgC,CAAC,IAAxB1sE,EAAuB,QACzBknD,EAAUA,UAAUlnD,IACvBpB,EAAOsU,KAAKg0C,EAAUlwC,OAHM,oFAHT,kFAUzBpH,EAAMg6D,QAAQ8C,EAAY98D,EAAMk9D,YAAaluE,IAczCmuE,EAAgB,SAACnuE,GACrB,OAAOA,EAAOid,QAAO,SAACuP,EAAK/tB,EAAI62D,GAAV,OAAoBA,EAAMjxB,QAAQ7X,IAAQ/tB,MAGjE,OACE,oCACE,kBAAC,GAAD,KACE,yBAAKwS,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cACb,wBAAIwB,MAAO,CAAES,OAAQ,QAAU+M,EAAE,oCAIvC,kBAAC,GAAD,KACE,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,OAAQvM,UAAW,SAC7D,yBAAKx0C,UAAU,gBACb,wBAAIwB,MAAO,CAAES,OAAQ,QAAU+M,EAAE,oCAKtCwrD,GAAO,IAAMz6D,EAAMo9D,UAClB,oCACE,kBAAC,GAAD,KACGp9D,EAAMxP,aACL,yBAAKyP,UAAU,mBACZoT,qCAA0BrT,EAAMxP,YAAYuiB,UAIjD,0CACA,2BAAO9S,UAAU,iBACf,+BACE,4BACE,mDACA,uDAEF,4BACE,wBAAIwB,MAAO,CAAEQ,MAAO,QAClB,2BACEmF,KAAK,eACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAOwtE,EAASpsE,aAChB2P,UAAU,+BAId,wBAAIwB,MAAO,CAAEQ,MAAO,QAClB,2BACEmF,KAAK,cACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAOwtE,EAASlsE,YAChByP,UAAU,kCAMpB,0CACA,2BAAOA,UAAU,iBACf,+BACE,4BACE,mDACA,uDAEF,4BACE,wBAAIwB,MAAO,CAAEQ,MAAO,QAClB,2BACEmF,KAAK,eACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAO0tE,EAAStsE,aAChB2P,UAAU,+BAId,wBAAIwB,MAAO,CAAEQ,MAAO,QAClB,2BACEmF,KAAK,cACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAO0tE,EAASpsE,YAChByP,UAAU,iCAKlB,6BACED,EAAMq6D,YAAer6D,EAAMjM,eAAetF,SAASO,QAAUgR,EAAMjM,eAAetF,SAASO,OAAO0C,OAAS,GAC3G,uBAAG+P,MAAO,CAAEqrC,UAAW,OAAQprC,MAAO,QAAU1B,EAAMjM,gBAAkBkb,EAAE,wBAA0BkuD,EAAcn9D,EAAMjM,eAAetF,SAASO,YAGtJ,kBAAC,GAAD,KACGgR,EAAMxP,aACL,yBAAKyP,UAAU,mBACZoT,qCAA0BrT,EAAMxP,YAAYuiB,UAGjD,0CACA,2BAAO9S,UAAU,iBACf,+BACE,4BACE,oDAEF,4BACE,4BACE,2BACEmH,KAAK,eACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAOwtE,EAASpsE,aAChB2P,UAAU,gCAIhB,4BACE,uDAEF,4BACE,4BACE,2BACEmH,KAAK,cACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAOwtE,EAASlsE,YAChByP,UAAU,kCAMpB,0CACA,2BAAOA,UAAU,iBACf,+BACE,4BACE,oDAEF,4BACE,4BACE,2BACEmH,KAAK,eACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAO0tE,EAAStsE,aAChB2P,UAAU,gCAIhB,4BACE,uDAEF,4BACE,4BACE,2BACEmH,KAAK,cACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAO0tE,EAASpsE,YAChByP,UAAU,iCAKlB,6BACED,EAAMq6D,YAAer6D,EAAMjM,eAAetF,SAASO,QAAUgR,EAAMjM,eAAetF,SAASO,OAAO0C,OAAS,GAC3G,uBAAG+P,MAAO,CAAEqrC,UAAW,OAAQprC,MAAO,QAAU1B,EAAMjM,gBAAkBkb,EAAE,wBAA0BkuD,EAAcn9D,EAAMjM,eAAetF,SAASO,aAKxJ,oCACE,gGACA,uEC7QGquE,GAAb,YACE,WAAY/tC,GAAuB,oBACjC,IAAI5qB,EAAc,cAAgB4qB,EADF,mDAG1B5qB,IAJV,4BAAsCqB,ICsLvBoa,mBAvK6B,SAACngB,GAAW,IAC9CiP,EAAMjP,EAANiP,EAD6C,EAETxL,mBAAS,IAFA,iCAGvBA,mBAAS,KAHc,oBAG9C65D,EAH8C,KAGrCC,EAHqC,KAIrDz5D,qBAAU,WACR3Z,OAAOysE,SAAS,EAAG,GACnB4G,MACC,IACH,IAAMtsC,EAAgB,WACpBlxB,EAAMy9D,mBAAmBz9D,EAAMjM,iBAG7B2pE,EAAe,GAEnB,IAAK,IAAMC,KAAQ39D,EAAMjM,eACV,OAAT4pE,GAA0B,oBAATA,GAAuC,2BAATA,GAA8C,wBAATA,IACtFD,EAAQC,QAAuC/yE,IAA/BoV,EAAMjM,eAAe4pE,GAAsB39D,EAAMjM,eAAe4pE,GAAMzuE,MAAQ,IAIlG,IAAMsuE,EAAmB,kBAAMn5D,GAAkB,IAAIg5D,GAAiBr9D,EAAMjM,eAAetG,KACxF6a,MAAK,SAAA1a,GACJ2vE,EAAW3vE,EAAO6D,KAAKmsE,aAExBh5D,OAAM,gBAGT,OACE,oCACE,kBAAC,GAAD,KACE,yBAAK3E,UAAU,kBACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cACb,wBAAIwB,MAAO,CAAES,OAAQ,QAAU+M,EAAE,kCAIrC,yBAAKxhB,GAAG,sBACN,yBAAKA,GAAG,oBACN,2BAAOwS,UAAU,iBACf,wBAAIA,UAAU,qBACZ,wBAAIA,UAAU,wBACZ,+BACE,4BACE,4BAAI,qCACJ,4BACGD,EAAMjM,eAAe1F,WAAa2R,EAAMjM,eAAe1F,UAAUa,MADpE,IAC4E8Q,EAAMjM,eAAe5I,UAAY6U,EAAMjM,eAAe5I,SAAS+D,QAG7I,4BACE,4BAAI,sCACJ,4BACG8Q,EAAMjM,eAAexF,OAASyR,EAAMjM,eAAexF,MAAMW,QAG9D,4BACE,4BAAI,iDACJ,4BACG8Q,EAAMjM,eAAehG,4BAA8BiS,EAAMpJ,0BAA0BqV,QAAO,SAAAjR,GAAI,OAAIA,EAAKwf,IAAI/sB,KAAOuS,EAAMjM,eAAehG,2BAA2BmB,SAAO,GAAG2B,OAAOwkB,aAGxL,4BACE,4BAAI,8CACJ,4BACGrV,EAAMjM,eAAejF,aAAekR,EAAMjM,eAAejF,YAAYI,OAAS8Q,EAAMjM,eAAejF,YAAYI,MAAM0B,QAI1H,4BACE,4BAAI,sDACJ,4BACGoP,EAAMjM,eAAe3F,WAAqD,GAAxC4R,EAAMjM,eAAe3F,UAAUc,MAAgB,MAAQ,SAKlG,wBAAI+Q,UAAU,wBACE,KAAZq9D,GACA,yBAAK7nD,IAAK6nD,EAAStnD,IAAI,iBAAiB/V,UAAU,gBAAgB8B,OAAO,aAKjF,yBAAK9B,UAAU,MAAMwB,MAAO,CAAEgzC,UAAW,SACvC,6BACGphC,qCAA0BrT,EAAM69D,mBAAmB9qD,aAM5D,yBAAKtR,MAAO,CAAEi/C,MAAO,UACnB,kBAAC,GAAD,CACEjzD,GAAG,aACHyS,QAASgxB,EACT/uB,KAAM8M,EAAE,6BACRhP,UAAU,wBACVgC,MAAM,YAKd,kBAAC,GAAD,KACE,yBAAKhC,UAAU,iBACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,OAAQvM,UAAW,SAC7D,yBAAKx0C,UAAU,gBACb,wBAAIwB,MAAO,CAAES,OAAQ,QAAU+M,EAAE,kCAIrC,yBAAKxN,MAAO,CAAEqrC,UAAW,WACT,KAAZwwB,GACA,yBAAK7nD,IAAK6nD,EAAStnD,IAAI,iBAAiB/V,UAAU,gBAAgB8B,OAAO,WAI7E,yBAAKN,MAAO,CAAEgzC,UAAW,SACvB,2BAAOx0C,UAAU,gBAEf,6BACE,yBAAKA,UAAU,oCAAmC,qCAClD,yBAAKA,UAAU,sCAAsCD,EAAMjM,eAAe1F,WAAa2R,EAAMjM,eAAe1F,UAAUa,MAAtH,IAA8H8Q,EAAMjM,eAAe5I,UAAY6U,EAAMjM,eAAe5I,SAAS+D,QAG/L,6BACE,yBAAK+Q,UAAU,oCAAmC,sCAClD,yBAAKA,UAAU,sCAAsCD,EAAMjM,eAAexF,OAASyR,EAAMjM,eAAexF,MAAMW,QAGhH,6BACE,yBAAK+Q,UAAU,oCAAmC,gDAClD,yBAAKA,UAAU,sCAAsCD,EAAMjM,eAAehG,4BAA8BiS,EAAMpJ,0BAA0BqV,QAAO,SAAAjR,GAAI,OAAIA,EAAKwf,IAAI/sB,KAAOuS,EAAMjM,eAAehG,2BAA2BmB,SAAO,GAAG2B,OAAOwkB,aAG1O,6BACE,yBAAKpV,UAAU,oCAAmC,8CAClD,yBAAKA,UAAU,sCAAsCD,EAAMjM,eAAejF,aAAekR,EAAMjM,eAAejF,YAAYI,OAAS8Q,EAAMjM,eAAejF,YAAYI,MAAM0B,QAG5K,6BACE,yBAAKqP,UAAU,oCAAmC,sDAClD,yBAAKA,UAAU,sCAAsCD,EAAMjM,eAAe3F,WAAqD,GAAxC4R,EAAMjM,eAAe3F,UAAUc,MAAgB,MAAQ,QAIlJ,yBAAK+Q,UAAU,MAAMwB,MAAO,CAAEgzC,UAAW,SACvC,6BACGphC,qCAA0BrT,EAAM69D,mBAAmB9qD,YAK1D,yBAAKtR,MAAO,CAAEqrC,UAAW,SAAU2H,UAAW,SAC5C,kBAAC,GAAD,CACEhnD,GAAG,aACHyS,QAASgxB,EACT/uB,KAAM8M,EAAE,6BACRhP,UAAU,wBACVgC,MAAM,gBC/EL67D,GA3E2E,SAAC99D,GAAW,IAC5FiP,EAAMiG,eAANjG,EACF+H,EAAOhX,EAAMxF,OACbujE,EAAuC/9D,EAAM+9D,qCAC7ChiC,EAAY,uCAAG,sBAAAruC,EAAA,sDACnBqwE,GAAqC,GADlB,2CAAH,qDAIZ7hC,EAAY,uCAAG,sBAAAxuC,EAAA,sDACnBqwE,GAAqC,GACrC/9D,EAAMg+D,WAAWh+D,EAAM6xB,MAFJ,2CAAH,qDAKZyI,EACJ,yBAAKr6B,UAAU,0BACb,yBAAKA,UAAU,YAAYwB,MAAO,CAAEqrC,UAAW,WAEvB,SAApB9sC,EAAMi+D,YACN,kBAAC,GAAD,CAAa97D,KAAMnC,EAAMk+D,mBAAmBzwD,QAIxB,SAApBzN,EAAMi+D,YAAyB5qD,qCAA0BrT,EAAMk+D,mBAAmBnrD,SAG9D,SAApB/S,EAAMi+D,YACN,kBAAC,GAAD,CAAa97D,KAAMnC,EAAMm+D,oBAAoB1wD,QAGzB,SAApBzN,EAAMi+D,YAAyB5qD,qCAA0BrT,EAAMm+D,oBAAoBprD,SAG/D,iBAApB/S,EAAMi+D,YACN,kBAAC,GAAD,CAAa97D,KAAMnC,EAAMo+D,kBAAkB3wD,QAGvB,iBAApBzN,EAAMi+D,YAAiC5qD,qCAA0BrT,EAAMo+D,kBAAkBrrD,SAI3F,kBAAC,GAAD,CACEtlB,GAAG,WACH0U,KAAM8M,EAAE,oBACRhP,UAAU,gBACVC,QAASg8B,IAEX,kBAAC,GAAD,CACEzuC,GAAG,QACH0U,KAAM8M,EAAE,iBACRhP,UAAU,gBACVC,QAAS67B,MAMjB,OACE,oCACE,kBAAC,GAAD,CACEvhC,OAAQwc,EACR/W,UAAWO,KAAW,yCAA0CR,EAAMC,YAEtE,kBAAC,GAAD,KACE,8BAAOq6B,IAET,kBAAC,GAAD,KACE,0BAAMr6B,UAAU,2CACbq6B,O,mOChEP+jC,G,YACJ,WAAYr+D,GAAa,IAAD,8BACtB,8CAAMA,KAmBRy8B,aApBwB,uCAoBT,WAAOr1B,EAAcxW,GAArB,eAAAlD,EAAA,sEACW4uC,GAAwBl1B,EAAMxW,GADzC,cACPyrC,EADO,yBAENA,GAFM,2CApBS,wDAGtB,EAAK5lC,MAAQ,CACXynE,wBAAoBtzE,EACpBuzE,yBAAqBvzE,EACrBwzE,uBAAmBxzE,EACnB8xC,eAAe,GAGjBC,QAAQC,IAAI,CACV,EAAKH,aAAa,uCAAwC,sBAC1D,EAAKA,aAAa,+CAAgD,uBAClE,EAAKA,aAAa,uDAAwD,uBACzEn0B,MAAK,SAAAa,GACNA,EAAEmR,SAAQ,SAAAuZ,GAAC,OAAI,EAAK1lB,S,2VAAL,IAAmB,EAAK1X,MAAxB,eAAgCo9B,EAAEzsB,KAAOysB,QACxD,EAAK1lB,SAAS,CAAEuuB,eAAe,OAhBX,E,uEA0BRztC,KAAK+Q,MAAXiP,EAER,OACE,oCACGhgB,KAAKwH,MAAMimC,eACV,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEliC,OAAQvL,KAAK+Q,MAAMs+D,uBACnBL,WAAYhvE,KAAK+Q,MAAMi+D,WACvBF,qCAAsC9uE,KAAK+Q,MAAM+9D,qCACjDC,WAAY/uE,KAAK+Q,MAAMg+D,WACvBnsC,KAAM5iC,KAAK+Q,MAAM6xB,KACjBqsC,mBAAoBjvE,KAAKwH,MAAMynE,mBAC/BC,oBAAqBlvE,KAAKwH,MAAM0nE,oBAChCC,kBAAmBnvE,KAAKwH,MAAM2nE,qBAGlC,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEn+D,UAAU,kDACVzF,OAAQvL,KAAK+Q,MAAMs+D,uBACnBL,WAAYhvE,KAAK+Q,MAAMi+D,WACvBF,qCAAsC9uE,KAAK+Q,MAAM+9D,qCACjDC,WAAY/uE,KAAK+Q,MAAMg+D,WACvBnsC,KAAM5iC,KAAK+Q,MAAM6xB,KACjBqsC,mBAAoBjvE,KAAKwH,MAAMynE,mBAC/BC,oBAAqBlvE,KAAKwH,MAAM0nE,oBAChCC,kBAAmBnvE,KAAKwH,MAAM2nE,2B,GAvDJ99D,aAqF3B6f,kBACbjJ,aArBsB,SAACzgB,GACvB,MAAO,CACL6nE,uBAAwB7nE,EAAMqH,MAAM/C,4BAA4BP,OAChEyjE,WAAYxnE,EAAMqH,MAAM/C,4BAA4BC,SAK7B,SAACiK,GAC1B,MAAO,CACL84D,qCAAsC,SAACvjE,GACrCyK,EAAS,CAAEjK,KlStFf,2CkSsF+DqB,QAAS,CAAE7B,OAAQA,EAAQQ,KAAM,OAE9FujE,kBAAmB,SAACrjE,GAClB+J,EAAS,CAAEjK,KlSvFf,2CkSuF+DqB,QAASnB,QAOxEgc,CAA6CmnD,KC9EhCl+C,mBAxBmC,SAACngB,GAAW,IAClDiP,EAAMjP,EAANiP,EAER,OACI,oCACI,yBAAKhP,UAAU,OACX,yBAAKA,UAAU,gBACX,kBAAC,GAAD,KACI,wBAAIwB,MAAO,CAAES,OAAQ,QAAU+M,EAAE,sCAErC,kBAAC,GAAD,KACI,wBAAIxN,MAAO,CAAES,OAAQ,MAAOuyC,UAAW,SAAWxlC,EAAE,wCAKhE,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEgzC,UAAW,SACrC,2BAAIxlC,EAAE,4CCiDPuvD,GAzDyC,SAACx+D,GAAW,IAC1DiP,EAAMiG,eAANjG,EACF+H,EAAOhX,EAAMxF,OACbikE,EAAmBz+D,EAAMy+D,iBACzB1iC,EAAY,uCAAG,sBAAAruC,EAAA,sDACnB+wE,GAAiB,GACjBz+D,EAAM0+D,cAFa,2CAAH,qDASZpkC,EACJ,yBAAKr6B,UAAU,0BACb,yBAAKA,UAAU,YAAYwB,MAAO,CAAEqrC,UAAW,WAC7C,kBAAC,GAAD,CAAa3qC,KAAMnC,EAAMq8B,UAAU5uB,QACnC,6BACG4F,qCAA0BrT,EAAMq8B,UAAUtpB,UAE7C,kBAAC,KAAD,CAAMpF,G7QjCkB,kB6QkCtB,kBAAC,GAAD,CACElgB,GAAG,OACH0U,KAAM8M,EAAE,gBACRhP,UAAU,gBACVC,QAAS67B,KAGb,kBAAC,GAAD,CACEtuC,GAAG,aACH0U,KAAM,QACNlC,UAAU,gBACVC,QAvBa,WACnBu+D,GAAiB,QA4BnB,OACE,oCACE,kBAAC,GAAD,CACEjkE,OAAQwc,EACR/W,UAAWO,KAAW,8BAA+BR,EAAMC,YAE3D,kBAAC,GAAD,KACE,8BAAOq6B,IAET,kBAAC,GAAD,KACE,0BAAMr6B,UAAU,2CACbq6B,O,mOC7CPqkC,G,YACJ,WAAY3+D,GAAa,IAAD,8BACtB,8CAAMA,KAcRy8B,aAfwB,uCAeT,WAAOr1B,EAAcxW,GAArB,eAAAlD,EAAA,sEACW4uC,GAAwBl1B,EAAMxW,GADzC,cACPyrC,EADO,yBAENA,GAFM,2CAfS,wDAGtB,EAAK5lC,MAAQ,CACX4lC,eAAWzxC,EACX8xC,eAAe,GAEjBC,QAAQC,IAAI,CACV,EAAKH,aAAa,mCAAoC,eACrDn0B,MAAK,SAAAa,GACNA,EAAEmR,SAAQ,SAAAuZ,GAAC,OAAI,EAAK1lB,S,2VAAL,IAAmB,EAAK1X,MAAxB,eAAgCo9B,EAAEzsB,KAAOysB,QACxD,EAAK1lB,SAAS,CAAEuuB,eAAe,OAXX,E,uEAqBRztC,KAAK+Q,MAAXiP,EACR,OACE,oCACGhgB,KAAKwH,MAAMimC,eACV,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEliC,OAAQvL,KAAK+Q,MAAM4+D,eACnBH,iBAAkBxvE,KAAK+Q,MAAMy+D,iBAC7BC,YAAazvE,KAAK+Q,MAAM0+D,YACxBriC,UAAWptC,KAAKwH,MAAM4lC,aAG1B,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEp8B,UAAU,kDACVzF,OAAQvL,KAAK+Q,MAAM4+D,eACnBH,iBAAkBxvE,KAAK+Q,MAAMy+D,iBAC7BC,YAAazvE,KAAK+Q,MAAM0+D,YACxBriC,UAAWptC,KAAKwH,MAAM4lC,mB,GAzCb/7B,aAsEV6f,kBACbjJ,aApBsB,SAACzgB,GACvB,MAAO,CACLmoE,eAAgBnoE,EAAMqH,MAAMpD,KAAKF,WAKV,SAACyK,GAC1B,MAAO,CACLw5D,iBAAkB,SAACjkE,GACjByK,EAAS,CAAEjK,KrSjEmB,uBqSiESqB,QAAS7B,KAElDkkE,YAAa,WACXz5D,EAAS,CAAEjK,KzS5CY,sBySmD3Bkc,CAA6CynD,KCqKhCE,I,OApOYpwD,IAAMqwD,YAAmD,SAAC9+D,EAAO++D,GAAgB,IAAD,EACjFt7D,qBADiF,oBAClGyrC,EADkG,KAC5FC,EAD4F,OAEvE1rC,qBAFuE,oBAElGu7D,EAFkG,KAEvFC,EAFuF,KAGnGC,EAAe1vB,iBAAuB,MAItCc,EAAkBd,iBAAyB,MAG3CD,EAASC,iBAAyB,MAViE,EAW7E/rC,mBAAiB,IAX4D,oBAWlGqsC,EAXkG,KAW1FC,EAX0F,OAY7EtsC,mBAAS,GAZoE,oBAYlGksC,EAZkG,KAY1FC,EAZ0F,OAa3CnsC,oBAAS,GAbkC,oBAalG07D,EAbkG,KAazEC,EAbyE,KAenGvvB,EAAmBL,iBAA0B,MAEnD6vB,8BAAoBN,GAAY,iBAAO,CACrCO,QADqC,WAEnCC,SAIJz7D,qBAAU,WACHq7D,GAA6C,KAAlBn/D,EAAMs9D,UACpCvtB,EAAU/vC,EAAMs9D,SAChB8B,GAA2B,OA2E/B,IAAMG,EAAe,WACnB,IAAM7pD,EAA0B65B,EAAOiB,QACjCtB,EAAkB8vB,EAClBhuB,EAA4BnB,EAAiBW,QAE7CS,EAAMD,EAAOE,WAAW,MAExBxB,EAAQh6B,EAAM68B,aAAe78B,EAAMzT,MACzC+uC,EAAO/uC,MAAQoa,KAAKu2B,MAAM1D,EAAKjtC,MAAQytC,GACvCsB,EAAOjvC,OAASsa,KAAKu2B,MAAM1D,EAAKntC,OAAS2tC,GAEzCuB,EAAIkC,sBAAwB,OAE5B,IACMzB,IADcwtB,EAAa1uB,SAAW0uB,EAAa1uB,QAAQ4B,aAAe,GACjD18B,EAAMzT,OAAS,EAC9CitC,EAAKv1B,GAAK+3B,EAEVT,EAAIE,UAAUz7B,EAAQw5B,EAAKv1B,EAAI+1B,EAASR,EAAK6D,EAAIrD,EAASR,EAAKjtC,MAAQytC,EAASR,EAAKntC,OAAS2tC,EAAQ,EAAG,EAAGsB,EAAO/uC,MAAO+uC,EAAOjvC,QACjIkvC,EAAIqC,UAEJ,IAAI5uC,EAAMssC,EAAOJ,UAAU,aAAc,IACrC/yB,EAAO2hD,EAAc96D,GAEnB+6D,EAAmB,SAAU,IAAItwE,MAAO42B,UAAUzf,WACpDqP,EAAO,IAAI1gB,KAAK,CAAC4oB,GAAO4hD,EAAU,CAAEzkE,KAAM6iB,EAAK7iB,OACnDgF,EAAMu/D,aAAa5pD,IAGf6pD,EAAgB,SAACE,GAErB,IAAIC,EAEFA,EADED,EAAQv+D,MAAM,KAAK,GAAGkyB,QAAQ,WAAa,EAChC9V,KAAKmiD,EAAQv+D,MAAM,KAAK,IAExBy+D,SAASF,EAAQv+D,MAAM,KAAK,IAK3C,IAHA,IAAI0+D,EAAaH,EAAQv+D,MAAM,KAAK,GAAGA,MAAM,KAAK,GAAGA,MAAM,KAAK,GAE5D2+D,EAAK,IAAIliD,WAAW+hD,EAAWjuE,QAC1BkoB,EAAI,EAAGA,EAAI+lD,EAAWjuE,OAAQkoB,IACrCkmD,EAAGlmD,GAAK+lD,EAAWjiD,WAAW9D,GAEhC,OAAO,IAAIkE,KAAK,CAACgiD,GAAK,CAAE9kE,KAAM6kE,KAG1BE,EAAyB,oCAC7B,2BACEtyE,GAAG,cACHuN,KAAK,OACLy4C,OAAO,UACPC,IAAKpD,EACLliC,SA1HmB,SAACoB,GACtB,GAAIA,EAAEsG,OAAO69B,OAASnkC,EAAEsG,OAAO69B,MAAMjiD,OAAS,EAAG,CAC/C,GAAI8d,EAAEsG,OAAO69B,MAAM,GAAGtzC,KAAkC,IAA3BL,EAAMggE,mBAEjC,YADAhgE,EAAMqxC,cAIRlC,OAAQvkD,GACR,IAAMq1E,EAAS,IAAIC,WACnBD,EAAOj8D,iBAAiB,QAAQ,WAC9B,IAAMm8D,EAAkBF,EAAOryE,OAASqyE,EAAOryE,OAAO0Y,WAAa,GACnEypC,EAAUowB,MAEZF,EAAOG,cAAc5wD,EAAEsG,OAAO69B,MAAM,MA8GpClyC,MAAO,CAAE08B,QAAS,UAEnB6gC,GACC,4BACEtrB,IAAK7D,EACLpuC,MAAO,CACL+kB,OAAQ,kBACRotB,UAAW,UACX3xC,MAAO+8D,EAAU/8D,MACjBF,OAAQi9D,EAAUj9D,OAClBo8B,QAAS,WAMbl+B,EAAY,iBAKhB,OAJc,MAAV6vC,QAA4BllD,GAAVklD,GAAiC,IAAVA,IAC3C7vC,GAAa,aAIb,6BACE,yBAAKA,UAAWA,EAAWyzC,IAAKwrB,EAAch/D,QAAS,WACnC,4BAAdD,GAzK4BqwC,EAAgBE,SAAWF,EAAgBE,QAAQhyB,UA6KlFuhD,EACD,kBAAC,KAAD,CACE9/D,UAAU,iBACVivC,KAAMA,EACN9gC,SAAU,SAAC4a,EAAG+qB,GACZ5E,EAAQ4E,GACR/zC,EAAMqgE,eAERrsB,WAAY,SAACngB,GAAD,OAAOorC,EAAaprC,IAChCigB,UAAW,GACXD,SAAU,GACVvE,OA5LY,GAAK,IA8LjB,yBACE7hD,GAAG,mBACHimD,IAAKnE,EACL95B,IAAKq6B,EACLruC,MAAO,CAAEyyC,UAAU,UAAD,OAAYvE,EAAZ,SAClBsE,OAxIY,SAACzkC,GAA+C,IAAD,EACzCA,EAAEoW,cAApB3jB,EAD2D,EAC3DA,MAAOF,EADoD,EACpDA,OAETu+D,EAA6B,CAAExuB,KAAM,MAC3C7vC,EAAQF,EAASu+D,EAAYv+D,OAASA,EAASu+D,EAAYr+D,MAAQA,EAEnE,IAAMyvC,EACJwtB,EAAa1uB,SACbjB,EAAOiB,UACN0uB,EAAa1uB,QAAQ4B,YAAc7C,EAAOiB,QAAQvuC,OAAS,EAE9DktC,EAKF,SACEqC,EACAC,EACAnC,EACAgxB,EACA5uB,GAEA,IAAM6uB,EAAU3uB,sBACdC,0BACEyuB,EACAhxB,EACAkC,EACAC,GAEFD,EACAC,GAIF,OADA8uB,EAAQ5mD,GAAK+3B,EACN6uB,EAxBChvB,CAAiBtvC,EAAOF,EAtEd,GAAK,GAsE8Bu+D,EAAa5uB,GAAW,IAE7E1xC,EAAMwgE,kBA+HF,kBAAC,GAAD,CACE/yE,GAAG,oBACHwS,UAAWO,KAAW,gBAAiBtW,QAAQ4lD,GAAU,cAAgB,IACzE1vC,KAAM+zC,KAENh0C,YAAa,kBAAM,QAGrB,yBAAKF,UAAU,eACb,kBAAC,GAAD,CACEA,UAAWO,KAAW,gBAAiB,iBACvCJ,KAAMg0C,KACNj0C,YAxKW,WACfmwC,GAAmBA,EAAgBE,SAAWF,EAAgBE,QAAQthD,QACxEohD,EAAgBE,QAAQthD,MAAQ,IAElC6gD,EAAU,IACV/vC,EAAMygE,oBAqKA,kBAAC,GAAD,CACExgE,UAAWO,KAAW,iBACtBJ,KAAMi0C,KACNl0C,YArKW,WACnB,IAAIm0C,EAAoB3E,EAAS,GACR,KAArB2E,IACFA,EAAoB,GAEtB1E,EAAU0E,aCvFDosB,I,OAAb,YACE,WAAYjvC,GAAmB,oBAC7B,IAAI/sB,EAAc,qBAAuB+sB,EADb,mDAGtB/sB,IAJV,4BAA4CqB,KCA/B46D,GAAb,YACE,WAAYlvC,EAAkB9b,GAAa,IAAD,sBACxC,IAAIjR,EAAc,2BAA6B+sB,EAE3ChgC,EAAO,IAAI+8B,SAHyB,OAIxC/8B,EAAKi9B,OAAO,OAAQ/Y,IAEpB,8CAAMjR,KAEDY,KAAO7T,EAR4B,EAD5C,4BAA2C+U,ICiK5Bo6D,GA3IKnyD,IAAMqwD,YAA4C,SAAC9+D,EAAO0zC,GAAS,IAAD,EAChCjwC,mBAAiB,KADe,oBAC7Eu8D,EAD6E,KACzDa,EADyD,OAEtDp9D,mBAAiB,IAFqC,oBAE7E65D,EAF6E,KAEpEC,EAFoE,OAG5C95D,oBAAkB,GAH0B,oBAG7E40D,EAH6E,KAG/DyI,EAH+D,OAIhDr9D,oBAAkB,GAJ8B,oBAI7EuxC,EAJ6E,KAIjEC,EAJiE,KAK9E8pB,EAAavvB,iBAAsB,MAL2C,EAMlC/rC,oBAAkB,GANgB,oBAM7Es9D,EAN6E,KAM1DC,EAN0D,KAQpFl9D,qBAAU,WACQ,KAAZw5D,IACFE,IACAyD,KAEF92E,OAAOysE,SAAS,EAAG,KAClB,IAUHyI,8BAAoB3rB,GAAK,iBAAO,CAC9BN,KAD8B,YAEvB2tB,GAAqB/rB,GAAc+pB,EAAWvuB,UACjDwwB,GAAqB,GACrBjC,EAAWvuB,QAAQ8uB,gBAKzB,IAoBM9B,EAAmB,kBAAMn5D,GAAkB,IAAIq8D,GAAuB1gE,EAAMyxB,WAC/EnpB,MAAK,SAAA1a,GACJ2vE,EAAW3vE,EAAO6D,KAAKmsE,UACvB3oB,GAAc,GACd+rB,GAAqB,GACrBhhE,EAAMkhE,2BAEPt8D,OAAM,WACL24D,EAAW,IACXtoB,GAAc,GACd+rB,GAAqB,OAGnBC,EAAwB,kBAAM58D,GAAS,IAAI6qB,IAC9C5mB,MAAK,SAACxD,GACL+7D,EAAsB/7D,EAASrT,KAAKo/B,uBAErCjsB,OAAM,SAACjK,GAAD,OAAW8N,QAAQC,IAAI/N,OAE1BwmE,EAAe,uCAAG,WAAOxrB,GAAP,SAAAjoD,EAAA,sEAChByX,GAAa,IAAIw7D,GAAsB3gE,EAAMyxB,SAAUkkB,IAC1DrtC,MAAK,SAACxD,GACL9E,EAAMshB,cAAa,GACnBthB,EAAMohE,qBAEPx8D,OAAM,SAACjK,GACNqF,EAAMqhE,cACNrhE,EAAMshB,cAAa,GACnBthB,EAAMshE,yBACNN,GAAqB,GACrBF,GAAgB,MAXE,2CAAH,sDAerB,OACE,yBAAKrzE,GAAG,gBACN,yBAAKwS,UAAU,wBACb,yBAAKA,UAAU,kBACb,kBAAC,GAAD,CACEwuC,WAAY,GACZiG,aAAc10C,EAAM00C,gBAIxB,yBAAKz0C,UAAU,iBACb,yBAAKwB,MAAO,CAAEgzC,UAAW,SACvB,kBAAC,GAAD,CACEhG,WAAY,GACZiG,aAAc10C,EAAM00C,iBAK1B,yBAAKjzC,MAAO,CAAE08B,QAAS,QAASqX,eAAgB,WAC7C6iB,GACC,yBAAKp4D,UAAU,sCACZoT,qCAA0BrT,EAAM01C,UAAU3iC,UAI/C,kBAAC,GAAD,CACEitD,mBAAoBA,EACpBT,aAlFW,SAAC5pB,GACpB31C,EAAMshB,cAAa,GACnB6/C,EAAgBxrB,IAiFRjC,IAAKqrB,EACLzB,QAASA,EACTmD,eA5Ea,WAErBzgE,EAAMshE,yBACNrsB,GAAc,IA0ENurB,YAvEU,WAClBxgE,EAAMkhE,wBACNjsB,GAAc,IAsENorB,YAAa,WACXrgE,EAAMkhE,yBAER7vB,YArFU,eAwFZ,yBAAKpxC,UAAU,mBACZoT,qCAA0BrT,EAAMw0C,iBAAiBzhC,UAGnD/S,EAAM8B,WACL,yBAAKL,MAAO,CAAEg/C,WAAY,SAA1B,6B,ikBCpDN8gB,G,YAQJ,WAAYvhE,GAAa,IAAD,EAkDtB,GAlDsB,qBACtB,8CAAMA,KARAwhE,yBAOgB,IANhBC,iBAMgB,IALhBC,iBAKgB,IAJhBC,kBAIgB,IAHhBC,oBAGgB,IAFhBzG,qBAEgB,IAkGxBN,aAAe,SAACvsE,GACd,IAAIwsE,EAAQ,IAAI3rE,KACZ4rE,EAAY,IAAI5rE,KAAKb,GACrB0sE,EAASF,EAAMrW,cAAgBsW,EAAUtW,cACzC9gC,EAAIm3C,EAAMtW,WAAauW,EAAUvW,WAIrC,OAHI7gC,EAAI,GAAY,IAANA,GAAWm3C,EAAM/wC,UAAYgxC,EAAUhxC,YACnDixC,IAEKA,GA1Ge,EA8LxB7V,gBA9LwB,uCA8LN,WAAO/9C,EAAcxW,GAArB,eAAAlD,EAAA,sEACG4uC,GAAwBl1B,EAAMxW,GADjC,cACVuR,EADU,yBAETA,GAFS,2CA9LM,0DAiRxB0/D,kBAjRwB,sBAiRJ,wCAAAn0E,EAAA,yDACuC,eAArD,EAAKo0E,SAAS,EAAK9hE,MAAMrM,oBAAoByT,KAD/B,uBAEoB,OAAhC,EAAKw6D,eAAepxB,SACtB,EAAKoxB,eAAepxB,QAAQ4C,OAHd,0BAQlB,EAAKjlC,SAAS,CAAErM,WAAW,IAC3B,EAAKigE,mCACDv8C,GAAU,EACVj3B,EAAgB,GACM,GACtByzE,EAAyB,EAEzB,EAAKhiE,MAAMrM,qBAAuB,EAAK6tE,sBACpC,EAAKxhE,MAAM7K,mCAAuC,EAAK6K,MAAMjM,eAAmClF,sBACnG22B,GAAU,IAjBI,OAAA93B,EAAA,KAqBK,EAAKsS,MAAMjM,gBArBhB,oDAsBG,uBADZ2lD,EArBS,aAuBC,OAAfA,GACe,oBAAfA,GAAmD,+BAAfA,GAA8D,gCAAfA,GAA8D,uBAAdA,GAClI,EAAK15C,MAAMjM,eAAe2lD,IAAe,EAAK15C,MAAMjM,eAAe2lD,GAAY1qD,OAAO0C,OAAS,GAzBlF,wBA0Bd8zB,GAAU,EAES,UAAfk0B,GAAyC,gBAAfA,IAC5BsoB,EAAiB,KA7BL,6BAkCG,UAAftoB,QACiD9uD,GAA/C,EAAKoV,MAAMjM,eAAe2lD,GAAYxqD,QACxCX,EAAQ,EAAKyR,MAAMjM,eAAe2lD,GAAYxqD,OAG/B,gBAAfwqD,QACiD9uD,GAA/C,EAAKoV,MAAMjM,eAAe2lD,GAAYxqD,OAC1B,EAAK8Q,MAAMjM,eAAe2lD,GAAYxqD,MAzCxC,4BA8Cds2B,EA9Cc,oBA+CsB,IAAlC,EAAKxlB,MAAMrM,mBA/CC,kCAgDe,EAAKsuE,oBAAoB,EAAKjiE,MAAMjM,gBAhDnD,eAgDRA,EAhDQ,iBAiDa,EAAKiM,MAAMkiE,qBAAqBnuE,GAjD7C,eAkDd,EAAKoa,SAAS,CAAErM,WAAW,IAEvB,EAAK9B,MAAMrM,mBAAqB,EAAI,EAAKmuE,SAASpwE,QACpD,EAAKsO,MAAMi8B,yBAAyB,EAAKj8B,MAAMrM,mBAAqB,GAEtE,EAAKwa,SAAS,CAAErM,WAAW,IAvDb,+BAyDd,EAAKqM,SAAS,CAAEksD,YAAY,EAAMv4D,WAAW,IAC7C3X,OAAOysE,SAAS,IAAKoL,GA1DP,mDA8DhB,EAAK7zD,SAAS,CAAEksD,YAAY,IA9DZ,WAiEoB,IAAlC,EAAKr6D,MAAMrM,mBAjEG,oBAkEF,KAAVpF,EAlEY,iBAmEd,EAAKyR,MAAM+9D,sCAAqC,EAAM,SACtD,EAAK5vD,SAAS,CAAErM,WAAW,IApEb,yCAsEe,EAAKmgE,oBAAoB,EAAKjiE,MAAMjM,gBAtEnD,eAsERA,EAtEQ,iBAuEa,EAAKiM,MAAMkiE,qBAAqBnuE,GAvE7C,0CAyER,EAAKiM,MAAMtM,8BAA4E,6DAA5C,EAAKsM,MAAMtM,8BACxD,EAAKomE,YAAY/lE,EAAexF,MAAQ,QAAS,CAAC,mBAClDyzE,EAAiB,KACR,EAAKhiE,MAAMtM,8BAA4E,6DAA5C,EAAKsM,MAAMtM,+BAC/D,EAAKomE,YAAY/lE,EAAevF,YAAc,cAAe,CAAC,oBAC9DwzE,EAAiB,KAEnB,EAAK7zD,SAAS,CAAEksD,YAAY,EAAMv4D,WAAW,IAC7C3X,OAAOysE,SAAS,IAAKoL,GAjFT,2BAoFd,EAAK7zD,SAAS,CAAErM,WAAW,IAEvB,EAAK9B,MAAMrM,mBAAqB,EAAI,EAAKmuE,SAASpwE,QACpD,EAAKsO,MAAMi8B,yBAAyB,EAAKj8B,MAAMrM,mBAAqB,GAvFxD,iDA2Fa,EAAKsuE,oBAAoB,EAAKjiE,MAAMjM,gBA3FjD,eA2FVA,EA3FU,iBA4FW,EAAKiM,MAAMkiE,qBAAqBnuE,GA5F3C,eA6FhB,EAAKoa,SAAS,CAAErM,WAAW,IAEvB,EAAK9B,MAAMrM,qBAAuB,EAAK+tE,aACzC,EAAKvzD,SAAS,CAAEg0D,cAAc,IAG5B,EAAKniE,MAAMrM,mBAAqB,EAAI,EAAKmuE,SAASpwE,QACpD,EAAKsO,MAAMi8B,yBAAyB,EAAKj8B,MAAMrM,mBAAqB,GApGtD,QAwGlB,EAAKouE,mCAxGa,4CAjRI,EAqcxBK,eArcwB,sBAqcP,4BAAA10E,EAAA,sEACc,EAAKu0E,oBAAoB,EAAKjiE,MAAMjM,gBADlD,cACTA,EADS,gBAEY,EAAKiM,MAAMkiE,qBAAqBnuE,GAF5C,cAGf,EAAKoa,SAAS,CAAErM,WAAW,IAC3B,EAAK9B,MAAM0+D,cACX,EAAK1+D,MAAMy9D,qBALI,2CArcO,EA6dxBqE,SACE,CACE,CACE17D,IAAK,EACLqH,MAAO,iCACPrG,KAAM,kBAER,CACEhB,IAAK,EACLqH,MAAO,sCACPrG,KAAM,mBAER,CACEhB,IAAK,EACLqH,MAAO,kCACPrG,KAAM,eAER,CACEhB,IAAK,EACLqH,MAAO,+BACPrG,KAAM,YAER,CACEhB,IAAK,EACLqH,MAAO,8BACPrG,KAAM,YAnfV,EAAKw6D,eAAiBnzD,IAAMg+C,YAE5B,EAAKh2D,MAAQ,CACX4jE,YAAY,EACZ8H,cAAc,EACdrgE,WAAW,EACX0jD,qBAAiB56D,EACjBy3E,kCAA8Bz3E,EAC9B03E,2BAAuB13E,EACvB23E,6BAAyB33E,EACzB43E,iCAA6B53E,EAC7B63E,0BAAsB73E,EACtB83E,gCAA4B93E,EAC5BwwE,8BAA0BxwE,EAC1B+3E,wBAAoB/3E,EACpBizE,wBAAoBjzE,EACpB8xC,eAAe,EACfkmC,mBAAmB,GAGrB,EAAKpB,qBAAuB,EAC5B,EAAKC,aAAe,EACpB,EAAKC,aAAe,EACpB,EAAKC,cAAgB,EACrB,EAAKxG,iBAAkB,EACvB,EAAK4G,mCAELplC,QAAQC,IAAI,CACV,EAAKuoB,gBAAgB,oCAAqC,gCAC1D,EAAKA,gBAAgB,mCAAoC,mBACzD,EAAKA,gBAAgB,0DAA2D,yBAChF,EAAKA,gBAAgB,mDAAoD,2BACzE,EAAKA,gBAAgB,iDAAkD,+BACvE,EAAKA,gBAAgB,yCAA0C,wBAC/D,EAAKA,gBAAgB,gDAAiD,8BACtE,EAAKA,gBAAgB,0CAA2C,4BAChE,EAAKA,gBAAgB,uCAAwC,sBAC7D,EAAKA,gBAAgB,oCAAqC,wBACzD78C,MAAK,SAAAa,GACNA,EAAEmR,SAAQ,SAAAuZ,GAAC,OAAI,EAAK1lB,SAAL,MAAmB,EAAK1X,MAAxB,eAAgCo9B,EAAEzsB,KAAOysB,QACxD,EAAK1lB,SAAS,CAAEuuB,eAAe,OAG7B,EAAK18B,MAAM7K,mCACb,EAAKgZ,SAAS,CAAEy0D,mBAAmB,KAGhCz7D,GAAUgE,QAAQ,EAAKnL,MAAM3U,aAA8C,IAAhC,EAAK2U,MAAM1U,iBAA4B,CACrF,IAAMumC,EAAO,EAAK7xB,MAAMjM,eAGpB,EAAKiM,MAAM7J,sBACb,EAAK6J,MAAM7J,qBAAqBmkB,SAAQ,SAACjrB,GACnCA,EAAWA,WAAWd,QAAU,EAAKyR,MAAM6iE,YAC7C,EAAK1H,iBAAkB,MAKxB,EAAKA,kBACqB,OAAzB,EAAKn7D,MAAM6iE,WAAwBhxC,EAAKtjC,SAASsjC,EAAKtjC,OAAUsjC,EAAKtjC,MAAMW,QAC7E,EAAK8Q,MAAM8iE,qBAAqB,EAAK9iE,MAAM6iE,UAAW,QAAS,IAEhC,OAA7B,EAAK7iE,MAAM6S,eAA4Bgf,EAAKxjC,aAAawjC,EAAKxjC,WAAcwjC,EAAKxjC,UAAUa,QAC7F,EAAK8Q,MAAM8iE,qBAAqB,EAAK9iE,MAAM6S,cAAe,YAAa,IAEzC,OAA5B,EAAK7S,MAAM+iE,cAA2BlxC,EAAK1mC,YAAY0mC,EAAK1mC,UAAa0mC,EAAK1mC,SAAS+D,QACzF,EAAK8Q,MAAM8iE,qBAAqB,EAAK9iE,MAAM+iE,aAAc,WAAY,IAEpC,OAA/B,EAAK/iE,MAAMgjE,iBAA8BnxC,EAAKrjC,eAAeqjC,EAAKrjC,aAAgBqjC,EAAKrjC,YAAYU,QACrG,EAAK8Q,MAAM8iE,qBAAqB,EAAK9iE,MAAMgjE,gBAAiB,cAAe,KAzE3D,S,sHA+EHjvE,G,uFACA9E,KAAKgzE,oBAAoBluE,G,cAAtC89B,E,gBACmB5iC,KAAK+Q,MAAMkiE,qBAAqBrwC,G,yCAGnD5iC,KAAK+Q,MAAMtM,8BAA4E,uEAA5CzE,KAAK+Q,MAAMtM,6BACxDzE,KAAK6qE,YAAYjoC,EAAKtjC,MAAQ,QAAS,CAAC,mBAC/BU,KAAK+Q,MAAMtM,8BAA4E,uEAA5CzE,KAAK+Q,MAAMtM,8BAC/DzE,KAAK6qE,YAAYjoC,EAAKrjC,YAAc,cAAe,CAAC,oBAEtDS,KAAKkf,SAAS,CAAEksD,YAAY,EAAMv4D,WAAW,I,2BAI3C7S,KAAK+Q,MAAMrM,mBAAqB,EAAI1E,KAAK6yE,SAASpwE,QACpDzC,KAAK+Q,MAAMi8B,yBAAyBhtC,KAAK+Q,MAAMrM,mBAAqB,G,qSAgBlEsvE,EAA0B,GAC1BC,EAAmC,GACnCC,EAA4B,QAE0Cv4E,IAArEqE,KAAK+Q,MAAMjM,eAAmCzF,YAAaY,M,uBAC1Dk0E,EAA2Bn0E,KAAK4rE,aAAa,IAAI1rE,KAAMF,KAAK+Q,MAAMjM,eAAmCzF,YAAaY,UAC9F,I,iBAGtBg0E,EAA2B,SAC3BC,EAAoB,M,2BAMlBA,EAHuB,KAArBC,EAGkB,MAKA,UAIjBn0E,KAAK+Q,MAAMjM,eAAmCnF,4B,kCACiBpB,EAAcyB,KAAK+Q,MAAMjM,eAAmCnF,6B,QAA1HunB,E,OAEF+sD,GADE/sD,EAAMtlB,OAAOslB,MACY,U,QAQ5BlnB,KAAK+Q,MAAMjM,eAAmChG,6BAC7C+yD,EAAiB7xD,KAAK+Q,MAAMpJ,0BAA0ByQ,MAAK,SAAAsc,GAAC,OAAIA,EAAEnJ,IAAI/sB,KAAQ,EAAKuS,MAAMjM,eAAmChG,2BAA4BmB,WACtI4xD,EAAejwD,OAAO0iC,cAC1C2vC,EAA2B,UAK/BD,EAAa,GAAKh0E,KAAK6yE,SAAS,GAChCmB,EAAa,GAAKh0E,KAAK6yE,SAAS,GAChCmB,EAAa,GAAKh0E,KAAK6yE,SAAS,GACC,QAA7BoB,GACFj0E,KAAKuyE,oBAAsByB,EAAavxE,OACxCuxE,EAAaA,EAAavxE,QAAU,CAClC0U,IAAK68D,EAAavxE,OAClB+b,MAAO,sCACPrG,KAAM,oBAIRnY,KAAKuyE,qBAAuB,EAGJ,QAAtB2B,GACFl0E,KAAKwyE,YAAcwB,EAAavxE,OAChCuxE,EAAaA,EAAavxE,QAAU,CAClC0U,IAAK68D,EAAavxE,OAClB+b,MAAO,+BACPrG,KAAM,aAGRnY,KAAKwyE,aAAe,EAGtBxyE,KAAKyyE,YAAcuB,EAAavxE,OAChCuxE,EAAaA,EAAavxE,QAAU,CAClC0U,IAAK68D,EAAavxE,OAClB+b,MAAO,8BACPrG,KAAM,WAERnY,KAAK6yE,SAAWmB,E,iJAUlBh0E,KAAK+Q,MAAMq9B,8BAA6B,GACxCpuC,KAAK+Q,MAAM2I,mC,yCAGMqT,EAAyC6pC,EAAyCC,IAC9F9pC,GAAaA,EAAUnnB,aAAe5F,KAAK+Q,MAAMnL,UAAY5F,KAAK+Q,MAAMnL,WAC3E5F,KAAK+Q,MAAMnL,UAAY5F,KAAKo0E,4BAA4Bp0E,KAAK+Q,MAAMnL,UAMjEmnB,EAAUroB,qBAAuB1E,KAAK+Q,MAAMrM,qBACW,eAArD1E,KAAK6yE,SAAS7yE,KAAK+Q,MAAMrM,oBAAoByT,KAC/CnY,KAAKkf,SAAS,CAAEy0D,mBAAmB,IAEnC3zE,KAAKkf,SAAS,CAAEy0D,mBAAmB,MAIlC5mD,EAAU7mB,mCAAqClG,KAAK+Q,MAAM7K,oCAC7DlG,KAAKkf,SAAS,CAAEy0D,mBAAmB,IACnC3zE,KAAKkf,SAAS,CAAErM,WAAW,MAGxBka,EAAU5mB,iCAAmCnG,KAAK+Q,MAAM5K,iCAC3DnG,KAAKkf,SAAS,CAAEy0D,mBAAmB,EAAO9gE,WAAW,M,kCAI7C7N,EAAgB/E,EAAYF,GACtCC,KAAK+Q,MAAM8iE,qBAAqB7uE,EAAW/E,EAAOF,K,kDAGxB+zD,GAC1B1+C,GAAS,IAAIy+C,GAAgCC,IAC1Cz6C,MAAK,SAACxD,GAEL,OA+jBR,SAAkBw+D,GAChB,MAAM,IAAIC,MAAM,6BAjkBVt+D,CAA+DH,EAASrT,MACjEqT,EAASrT,QAEjBmT,OAAM,SAACjK,GAAD,OAAW8N,QAAQC,IAAI/N,Q,+BAKhC,GADA1L,KAAKkf,SAAS,CAAEksD,YAAY,IACxBprE,KAAK+Q,MAAMrM,mBAAqB,GAAK,EAAG,CAC1C,OAAQ1E,KAAK+Q,MAAMrM,oBACjB,KAAK,EACG1E,KAAK+Q,MAAMjM,eAAmChG,2BAA4BmB,OAC9ED,KAAK6qE,YAAY,GAAI,6BAA8B,IAErD,MACF,KAAK,EACG7qE,KAAK+Q,MAAMjM,eAAmC/F,iBAAkBkB,OACpED,KAAK6qE,YAAY,GAAI,mBAAoB,IAErC7qE,KAAK+Q,MAAMjM,eAAmC3F,UAAWc,OAC7DD,KAAK6qE,YAAY,GAAI,YAAa,IAMxC7qE,KAAK+Q,MAAMi8B,yBAAyBhtC,KAAK+Q,MAAMrM,mBAAqB,M,uCAKlE1E,KAAK+Q,MAAMrM,mBAAqB,EAAI1E,KAAK6yE,SAASpwE,QACpDzC,KAAK+Q,MAAMi8B,yBAAyBhtC,KAAK+Q,MAAMrM,mBAAqB,K,4BAIlE6vE,GACJ,OAAO,IAAI7mC,SAAQ,SAAA8Z,GAAO,OAAIC,WAAWD,EAAS+sB,Q,mFA8G1B3xC,G,+EACpB5jC,EAAkBgB,KAAK+Q,MAAMnM,cAAc5F,gBAC3CgB,KAAK+Q,MAAMrM,qBAAuB1E,KAAK0yE,cAAgB1yE,KAAK+Q,MAAMrM,qBAAuB1E,KAAKyyE,cAE9FzzE,EADEA,EAAiB8pB,SAAS,YACV,2BAEA,oBAGlBlkB,EACJ,CACEpG,GAAIwB,KAAK+Q,MAAMnM,cAAcpG,GAC7BQ,gBAAiBA,EACjBY,oBAAqBI,KAAK+Q,MAAMnM,cAAchF,oBAC9C8iC,OAAQ1iC,KAAK+Q,MAAMnM,cAAc89B,OACjCF,SAAUxiC,KAAK+Q,MAAMnM,cAAc49B,U,cAEdI,G,iDACF,QADZ6nB,E,aACmC,oBAAfA,GAAmD,wBAAfA,E,qBACzD7nB,EAAK6nB,G,oBACY,gBAAfA,E,kCACkBzqD,KAAKw0E,qBAAqB5xC,G,SAA1C6xC,E,SACuB,KAAZA,IACb7vE,EAAa,MAAQA,EAAR,eAAwB,8BAAgC6vE,K,wBAGvE7vE,EAAa,MAAQA,EAAR,eAAwB6lD,EAAa7nB,EAAK6nB,GAAYxqD,Q,+BAK3E,GAAI2E,GAAiBA,EAAcpF,SACjC,IAASmrB,EAAI,EAAGA,EAAI/lB,EAAcpF,SAAUiD,OAAQkoB,IACF,KAA5C/lB,EAAcpF,SAAUmrB,GAAGtpB,cAAkE,KAA3CuD,EAAcpF,SAAUmrB,GAAGppB,cAC3EqD,EAAcpF,SAAUmrB,GAAGnsB,IAC7BoG,EAAcpF,SAAUmrB,GAAGtpB,kBAAe1F,EAC1CiJ,EAAcpF,SAAUmrB,GAAGppB,iBAAc5F,IAEzCiJ,EAAcpF,SAAUitB,OAAO9B,EAAG,GAClCA,M,yBAMD/lB,G,4LAGkBg+B,G,uFACrBjjC,EAAsC,GACpCoM,EAAO/L,KAAK+Q,MAAMpJ,0BAA0BqV,QAAO,SAAAjR,GAAI,OAAIA,EAAKwf,IAAI/sB,KAAOokC,EAAK9jC,2BAA2BmB,SAAO,GACpHskC,OAAkE5oC,E,8BACrDoQ,EAAKnK,OAAO4iC,U,qEAAxBD,E,QACCinC,EAAMxrE,KAAK4rE,aAAahpC,EAAKvjC,YAAYY,SACzCskC,EAAS3iC,OAAO8yE,YAAclJ,GAAOA,GAAOjnC,EAAS3iC,OAAO+yE,Y,8TAI9DpwC,E,kCACehmC,EAAagmC,EAAShZ,IAAI/sB,I,SAA3C+lC,E,QACa3iC,OAAO6iC,QACd7B,EAAK/iC,YAAYI,QACnBN,EAA8B4kC,EAAS3iC,OAAO6iC,OAAOznB,QAAO,SAAAkK,GAAK,OAAIA,EAAMtlB,OAAO/B,cAAgB+iC,EAAK/iC,YAAYI,MAAMA,SAAO,GAAGsrB,IAAI/sB,I,iCAItImB,G,yKAIPK,KAAK+Q,MAAMy+D,kBAAiB,K,8CAY5BxvE,KAAKkf,SAAS,CAAEy0D,mBAAmB,M,+CAInC3zE,KAAKkf,SAAS,CAAEy0D,mBAAmB,M,wCAInC3zE,KAAK40E,mB,mCAGM/hE,GACX7S,KAAKkf,SAAS,CAAErM,UAAWA,M,4CAkCPgiE,GACpB70E,KAAKkf,SAAS,CAAEy0D,kBAAmBkB,M,gDAGXnuD,EAAW2Z,EAAsBjhC,EAAmBlD,EAAkBmD,GAC9FW,KAAKkf,SAAS,CAAErM,WAAW,IAC3B7S,KAAK+Q,MAAMy8D,WAAW9mD,EAAM2Z,EAAcjhC,EAAWlD,EAAUmD,K,+BAGnC,IAAD,OACnB2gB,EAAMhgB,KAAK+Q,MAAXiP,EAER,OAAIhgB,KAAKwH,MAAM0rE,aAEX,kBAAC,IAAD,CACEx0D,GnRtnBsB,mBmR4nB1B,oCACI1e,KAAKwH,MAAMimC,eAAiBztC,KAAK+Q,MAAMlJ,eAAiB7H,KAAK+Q,MAAMlJ,cAAcpF,OAAS,EAC1F,yBAAKuO,UAAU,oBACb,kBAAC,GAAD,MACIhR,KAAK+Q,MAAMlH,cACX,oCACE,wBAAImH,UAAU,uBAAuBgP,EAAE,wBACvC,yBAAKhP,UAAU,yBACZoT,qCAA0BpkB,KAAKwH,MAAM+uD,gBAAiBzyC,YAM/D,kBAAC,GAAD,CACExG,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGThe,KAAK+Q,MAAMrM,mBAAqB,GAChC,kBAAC,GAAD,CACEyM,KAAMwC,KACNzC,YAAalR,KAAK80E,OAAOxzD,KAAKthB,MAC9BgR,UAAU,cACVI,KAAM,OAIV,yBAAKJ,UAAU,cACZhR,KAAK6yE,SAASh4D,KAAI,SAACk6D,GAAD,OACjB,kBAAC,GAAD,CAAYv2D,MAAOu2D,EAAEv2D,MAAOrH,IAAK49D,EAAE59D,IAAK1U,OAAQ,EAAKowE,SAASpwE,OAAQ4uB,SAAU0jD,EAAE59D,KAAO,EAAKpG,MAAMrM,mBAAoB2nE,QAAS0I,QAIrI,yBAAK/jE,UAAU,kBACsB,IAAlChR,KAAK+Q,MAAMrM,oBACV,kBAAC,GAAD,CACEqmE,QAAS/qE,KAAK6qE,YAAYvpD,KAAKthB,MAC/BmY,KAAK,6BACLyqB,KAAM5iC,KAAK+Q,MAAMjM,eACjBsmE,WAAYprE,KAAKwH,MAAM4jE,WACvBn/D,SAAUjM,KAAK40E,eAAetzD,KAAKthB,MACnC+sE,qBAAsB/sE,KAAK+Q,MAAMtT,8BAAiCuC,KAAK+Q,MAAMtT,6BAA6Bqc,WAAa9Z,KAAK+Q,MAAMtT,6BAA6Bmc,UAC/Jnc,6BAA8BuC,KAAK+Q,MAAMtT,6BACzCkK,0BAA2B3H,KAAK+Q,MAAMpJ,0BACtCE,cAAe7H,KAAK+Q,MAAMlJ,cAC1BzL,UAAW4D,KAAK+Q,MAAM3U,YAIS,IAAlC4D,KAAK+Q,MAAMrM,oBACV,kBAAC,GAAD,CACEqmE,QAAS/qE,KAAK6qE,YAAYvpD,KAAKthB,MAC/B8E,eAAgB9E,KAAK+Q,MAAMjM,eAC3BsmE,WAAYprE,KAAKwH,MAAM4jE,WACvBe,yBAA0BnsE,KAAKwH,MAAM2kE,yBACrC9vE,iBAAkB2D,KAAK+Q,MAAM1U,iBAC7B6vE,gBAAiBlsE,KAAKksE,gBACtB9vE,UAAW4D,KAAK+Q,MAAM3U,UACtB6vE,mBAAoBjsE,KAAKwH,MAAM4rE,6BAA8BtvD,UAI9B,IAAlC9jB,KAAK+Q,MAAMrM,oBACV,kBAAC,GAAD,CACE+/C,IAAKzkD,KAAK2yE,eACVV,sBAAuBjyE,KAAKiyE,sBAAsB3wD,KAAKthB,MACvDwiC,SAAUxiC,KAAK+Q,MAAMnM,cAAc49B,SACnCijB,aAAczlD,KAAKwH,MAAM8rE,wBACzB/tB,iBAAkBvlD,KAAKwH,MAAM+rE,4BAC7B9sB,UAAWzmD,KAAKwH,MAAMgsE,qBACtBrB,gBAAiBnyE,KAAKmyE,gBAAgB7wD,KAAKthB,MAC3CqyE,uBAAwBryE,KAAKqyE,uBAAuB/wD,KAAKthB,MACzDqyB,aAAcryB,KAAKqyB,aAAa/Q,KAAKthB,MACrC6S,UAAW7S,KAAKwH,MAAMqL,UACtBu/D,YAAa,eAIhBpyE,KAAK+Q,MAAMrM,qBAAuB1E,KAAKuyE,qBACtC,kBAAC,GAAD,CACE3vC,KAAM5iC,KAAK+Q,MAAMjM,eACjB0oE,WAAYxtE,KAAKg1E,0BAA0B1zD,KAAKthB,MAChDorE,WAAYprE,KAAKwH,MAAM4jE,WACvB7pE,YAAavB,KAAKwH,MAAMisE,2BACxBlG,cAAevtE,KAAK+Q,MAAM7K,kCAC1BonE,gBAAiBttE,KAAKi1E,sBAAsB3zD,KAAKthB,MACjD6S,UAAW7S,KAAKwH,MAAMqL,UACtB1M,gCAAiCnG,KAAK+Q,MAAM5K,gCAC5CC,uCAAwCpG,KAAK+Q,MAAM3K,yCAItDpG,KAAK+Q,MAAMrM,qBAAuB1E,KAAKwyE,aACtC,kBAACtxE,GAAD,CACE+sE,YAAY,WACZnpE,eAAgB9E,KAAK+Q,MAAMjM,eAC3BimE,QAAS/qE,KAAK6qE,YAAYvpD,KAAKthB,MAC/BorE,WAAYprE,KAAKwH,MAAM4jE,WACvB7pE,YAAavB,KAAKwH,MAAMksE,qBAI3B1zE,KAAK+Q,MAAMrM,qBAAuB1E,KAAKyyE,aACtC,kBAACyC,GAAD,CACEpwE,eAAgB9E,KAAK+Q,MAAMjM,eAC3B0pE,mBAAoBxuE,KAAKmzE,eAAe7xD,KAAKthB,MAC7CvC,6BAA8BuC,KAAK+Q,MAAMtT,6BACzCkK,0BAA2B3H,KAAK+Q,MAAMpJ,0BACtCinE,mBAAoB5uE,KAAKwH,MAAMonE,qBAIlC5uE,KAAK+Q,MAAMrM,qBAAuB1E,KAAK0yE,cACtC,kBAAC,GAAD,CACE5tE,eAAgB9E,KAAK+Q,MAAMjM,kBAMjC,yBAAKkM,UAAU,iBACb,kBAAC,GAAD,KACGhR,KAAK+Q,MAAMrM,qBAAuB1E,KAAKyyE,aACtC,kBAAC,GAAD,CACEj0E,GAAG,UACH0U,KAAM8M,EAAE,gBACRjU,KAAK,SACLkF,QAASjR,KAAKm1E,cAAc7zD,KAAKthB,MACjCgR,UAAU,4BAIoB,GAAjChR,KAAK+Q,MAAMrM,oBAEV,kBAAC,GAAD,CACEwO,KAAMlT,KAAK+Q,MAAMrM,qBAAuB1E,KAAKyyE,YAAc,UAAYzyD,EAAE,8BACzExhB,GAAG,kBACHuN,KAAK,SACLyF,SAAUxR,KAAKwH,MAAMqL,WAAa7S,KAAKwH,MAAMmsE,kBAC7C1iE,QAASjR,KAAK4yE,kBAAkBtxD,KAAKthB,MACrCgR,UAAU,8BACV6B,UAAW7S,KAAKwH,MAAMqL,aAI5B,kBAAC,GAAD,KACoC,GAAjC7S,KAAK+Q,MAAMrM,oBACV,kBAAC,GAAD,CACEwO,KAAMlT,KAAK+Q,MAAMrM,qBAAuB1E,KAAKyyE,YAAc,UAAYzyD,EAAE,8BACzExhB,GAAG,kBACHuN,KAAK,SACLyF,SAAUxR,KAAKwH,MAAMqL,WAAa7S,KAAKwH,MAAMmsE,kBAC7C1iE,QAASjR,KAAK4yE,kBAAkBtxD,KAAKthB,MACrCgR,UAAU,iBACV6B,UAAW7S,KAAKwH,MAAMqL,YAIzB7S,KAAK+Q,MAAMrM,qBAAuB1E,KAAKyyE,aACtC,kBAAC,GAAD,CACEj0E,GAAG,UACH0U,KAAM8M,EAAE,gBACRjU,KAAK,SACLkF,QAASjR,KAAKm1E,cAAc7zD,KAAKthB,MACjCgR,UAAU,sBAMnBhR,KAAK+Q,MAAMqkE,sCAAyC,kBAAC,GAAD,CAA6BrG,WAAY/uE,KAAKq1E,eAAe/zD,KAAKthB,MAAO4iC,KAAM5iC,KAAK+Q,MAAMjM,iBAG7I9E,KAAK+Q,MAAMukE,kBAAqB,kBAAC,GAAD,OAIpC,yBAAKtkE,UAAU,oBACb,kBAAC,GAAD,CACEsM,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,uBACb,kBAAC,GAAD,c,GAxtBYK,aA6yBb+/C,qBACblgC,eACAjJ,aA7EsB,SAACzgB,GACvB,MAAO,CACLqC,aAAcrC,EAAMmH,YAAY9E,aAChCnF,mBAAoB8C,EAAMoG,OAAOlJ,mBACjCE,cAAe4C,EAAMoG,OAAOhJ,cAC5BE,eAAgB0C,EAAMoG,OAAO9I,eAC7Ba,iBAAkB6B,EAAMoG,OAAOjI,iBAC/BlI,6BAA8B+J,EAAM+F,KAAK9P,6BACzCmI,SAAU4B,EAAMoG,OAAOhI,SACvBwvE,qCAAsC5tE,EAAMqH,MAAM/C,4BAA4BP,OAC9EgqE,eAAgB/tE,EAAMqH,MAAM7C,gCAAgCC,SAC5DupE,YAAahuE,EAAMoG,OAAO7G,uBAC1BY,0BAA2BH,EAAMoG,OAAOjG,0BACxC1B,6BAA8BuB,EAAMoG,OAAO3H,6BAC3CC,kCAAmCsB,EAAMoG,OAAO1H,kCAChDovE,iBAAkB9tE,EAAMqH,MAAMpD,KAAKF,OACnC9G,6BAA8B+C,EAAMoG,OAAOnJ,6BAC3CpI,iBAAkBmL,EAAM+F,KAAKlR,iBAC7BunB,cAAepc,EAAM+F,KAAKtR,UAC1B63E,aAActsE,EAAM+F,KAAKrR,SACzB03E,UAAWpsE,EAAM+F,KAAKxR,WACtBg4E,gBAAiBvsE,EAAM+F,KAAKpR,YAC5BC,UAAWoL,EAAM+F,KAAKnR,UACtB8K,qBAAsBM,EAAMoG,OAAO1G,qBACnCf,gCAAiCqB,EAAMoG,OAAOzH,gCAC9CC,uCAAwCoB,EAAMoG,OAAOxH,uCACrDyB,cAAeL,EAAMoG,OAAO/F,kBAIL,SAACmO,GAC1B,MAAO,CACLg3B,yBAA0B,SAACyoC,GACzBz/D,EAAS,CAAEjK,K9Sh0B0B,8B8Sg0BSqB,QAASqoE,KAEzDxC,qBAAqB,WAAD,4BAAE,WAAO7yE,GAAP,eAAA3B,EAAA,6DAChBE,EAASqX,EAASisB,GAAc7hC,IADhB,kBAEbzB,GAFa,2CAAF,mDAAC,GAIrB6wE,iBAAkB,SAACjkE,GACjByK,EAAS,CAAEjK,K1Sh2BmB,uB0Sg2BSqB,QAAS7B,KAElDkkE,YAAa,WACXz5D,EAAS,CAAEjK,K9S30BY,mB8S60BzB8nE,qBAAuB,SAAC7uE,EAAgB/E,EAAYF,GAClDiW,E9L5gBJ,SAAChR,EAAgB/E,EAAYF,GAA7B,8CACE,WAAOiW,EAAUoD,GAAjB,eAAA3a,EAAA,uDACQmkC,EADR,MACoBxpB,IAAWxL,OAAO9I,iBAC/B7E,GAAS,CAAEA,MAAO+E,EAAWjF,OAAQA,GAC1CiW,EAAS,CAAEjK,KhHpUqB,yBgHoUqBqB,QAASw1B,IAHhE,2CADF,wD8L4gBaixC,CAAqB7uE,EAAW/E,EAAOF,KAElD21E,2BAA6B,SAAC5wE,EAA8Ca,GAC1EqQ,E9LvgBJ,SAAClR,EAAkCa,GAAnC,8CACE,WAAOqQ,EAAUoD,GAAjB,eAAA3a,EAAA,sDACMk3E,EAASv8D,IAAWxL,OAAOjI,iBAC3Bb,EACF6wE,EAAM,uBAAOA,GAAP,CAAe7wE,IACZa,IACTgwE,EAAShwE,GAEXqQ,EAAS,CAAEjK,KhHxUuB,2BgHwUqBqB,QAASuoE,IAPlE,2CADF,wD8LugBaD,CAA2B5wE,EAAgBa,KAEtDiwE,4BAA8B,SAACppD,EAAexnB,EAAgB/E,GAC5D+V,E9L9fJ,SAACwW,EAAexnB,EAAgB/E,GAAhC,8CACE,WAAO+V,EAAUoD,GAAjB,iBAAA3a,EAAA,sDACMk3E,EAASv8D,IAAWxL,OAAOjI,kBAC3Bi9B,EAAO+yC,EAAOnpD,IACbxnB,GAAW/E,MAAQA,EACxB01E,EAAOnpD,GAASoW,EAChB5sB,EAAS,CAAEjK,KhHlVuB,2BgHkVqBqB,QAASuoE,IALlE,2CADF,wD8L8faC,CAA4BppD,EAAOxnB,EAAW/E,KAEzDuuE,mBAAoB,WAClBx4D,EAAS,CAAEjK,K9S10BoB,0B8S40BjC2N,+BAAgC,WAC9B1D,EAAS0D,OAEX8zD,WAAY,SAAC9mD,EAAW2Z,EAAsBjhC,EAAmBlD,EAAkBmD,GACjF2W,E9LjMJ,SAAC0Q,EAAW2Z,EAAsBjhC,EAAmBlD,EAAkBmD,GAAvE,8CACE,WAAO2W,EAAUoD,GAAjB,mBAAA3a,EAAA,6DACEuX,EAAS,CAAEjK,KhH7oB2B,iCgH8oBlCoM,EAAO/Y,EAAY,IAAMlD,EAEvB67B,EAAU,CACd89C,UAAW,EACXC,iBAAkB,IAClBC,cAAc,GAPlB,SAU+BC,aAAiBtvD,EAAMqR,GAVtD,OAUQk+C,EAVR,OAYE//D,GAAU,IAAIoqB,GAA4B21C,EAAgB51C,EAAcloB,EAAM9Y,IAC3Ega,MAAK,WACJrD,EAAS,CAAEjK,KhHzpBuB,+BgHypByBqB,QAAS6oE,OAErEtgE,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhH3pBqB,6BgH2pByBqB,QAAS1B,EAAMmK,SAASrT,KAAKia,aAjB5F,2CADF,wD8LiMay5D,CAAuBxvD,EAAM2Z,EAAcjhC,EAAWlD,EAAUmD,KAE3EyvE,qCAAsC,SAACvjE,EAAiBQ,GACtDiK,EAAS,CAAEjK,K1S33Bf,2C0S23B+DqB,QAAS,CAAE7B,OAAQA,EAAQQ,KAAMA,MAE9FujE,kBAAmB,SAACrjE,GAClB+J,EAAS,CAAEjK,K1S53Bf,2C0S43B+DqB,QAASnB,KAEtEmiC,6BAA8B,SAAC1K,GAC7B1tB,EAASytB,GAA6BC,SAK7B0tB,CAGbkhB,ICn5BF,IAkEephD,mBAzD6C,SAACngB,GAC7CA,EAANiP,EAER,OACE,oCACE,yBAAKhP,UAAU,OACb,yBAAKA,UAAU,cACZD,EAAMxP,aACL,wBAAIiR,MAAO,CAAEm2C,WAAY,SAAW53C,EAAMxP,YAAYid,SAK5D,yBAAKxN,UAAU,OACZD,EAAMxP,aACL,yBAAKyP,UAAU,kBAAkBwB,MAAO,CAAEm2C,WAAY,KAAMC,YAAa,KAAMmJ,aAAc,OAC1F3tC,qCAA0BrT,EAAMxP,YAAYuiB,WAKnD,yBAAKtR,MAAO,CAAEm2C,WAAY,KAAMC,YAAa,OAC3C,yBAAKp2C,MAAO,CAAEu/C,aAAc,KAAM/+C,MAAO,QAASC,OAAQ,OAAQo9B,QAAS,SACzE,uBAAG38B,KAA+B,+BAAiC3C,EAAMyxB,SAAU3b,OAAO,UACxF,kBAAC,GAAD,CACE3T,KAAK,wBACL1B,UAAWT,EAAMioD,WACjBhmD,MAAM,aAKVjC,EAAMolE,sBACN,yBAAK3jE,MAAO,CAAEu/C,aAAc,KAAMpJ,WAAY,MAAOC,YAAa,QAC/D73C,EAAMioD,WACL,uBAAGtlD,KAA+B,8BAAgC3C,EAAMyxB,SAAU3b,OAAO,UACvF,yBAAKL,IAAG,UA7CkB,WA6ClB,2BAAwCO,IAAI,sBAAsB/T,MAAM,QAAQF,OAAO,UAQjG,wEAKJ/B,EAAMioD,YACN,uE,ikBCzBJod,G,YACJ,WAAYrlE,GAAa,IAAD,8BACtB,8CAAMA,KAqBRmlD,gBAtBwB,uCAsBN,WAAO/9C,EAAcxW,GAArB,eAAAlD,EAAA,sEACG4uC,GAAwBl1B,EAAMxW,GADjC,cACVuR,EADU,yBAETA,GAFS,2CAtBM,0DAsGxB04D,aAAe,SAACvsE,GACd,IAAIwsE,EAAQ,IAAI3rE,KACZ4rE,EAAY,IAAI5rE,KAAKb,GACrB0sE,EAASF,EAAMrW,cAAgBsW,EAAUtW,cACzC9gC,EAAIm3C,EAAMtW,WAAauW,EAAUvW,WAIrC,OAHI7gC,EAAI,GAAY,IAANA,GAAWm3C,EAAM/wC,UAAYgxC,EAAUhxC,YACnDixC,IAEKA,GA3GP,EAAKvkE,MAAQ,CACXogC,WAAY,cACZyuC,YAAY,EACZjL,YAAY,EACZkL,sBAAkB36E,EAClB46E,6BAAyB56E,EACzB66E,0BAAsB76E,EACtB8xC,eAAe,GAGjBC,QAAQC,IAAI,CACV,EAAKuoB,gBAAgB,2DAA4D,2BACjF,EAAKA,gBAAgB,+DAAgE,0BACpF78C,MAAK,SAAAa,GACNA,EAAEmR,SAAQ,SAAAuZ,GAAC,OAAI,EAAK1lB,SAAL,MAAmB,EAAK1X,MAAxB,eAAgCo9B,EAAEzsB,KAAOysB,QACxD,EAAK1lB,SAAS,CAAEuuB,eAAe,OAlBX,E,iFA2BL1gB,EAA6C6pC,EAA6CC,M,kCAIjGrqC,GACV,OAAQA,GACN,KAAK,EACHxsB,KAAKkf,SAAS,CAAE0oB,WAAY,gBAC5B,MACF,KAAK,EACH5nC,KAAKkf,SAAS,CAAE0oB,WAAY,gB,sEAWpBrnB,GACZ,IAAIgW,GAAU,EAEd,IAAK,IAAIk0B,KAAczqD,KAAK+Q,MAAM1K,sBAChC,GAAmB,aAAfokD,GAA8BzqD,KAAK+Q,MAAM1K,sBAAsBokD,IAAezqD,KAAK+Q,MAAM1K,sBAAsBokD,GAAY1qD,OAAO0C,OAAS,EAAI,CACjJ8zB,GAAU,EACV,MAIJ,GAAIA,EAGF,OAFAv2B,KAAKkf,SAAS,CAAEksD,YAAY,SAC5B7qD,EAAET,iBAGF9f,KAAKkf,SAAS,CAAEksD,YAAY,IAE9B,IAAMqL,EAAiBz2E,KAAK02E,2BAA2B12E,KAAK+Q,MAAM1K,uBAElErG,KAAK+Q,MAAM4lE,+BAA+BF,K,iDAGjB7zC,GACzB,IAAI3gC,EACJ,CACEzD,GAAIwB,KAAK+Q,MAAM9O,mBAAqBjC,KAAK+Q,MAAM9O,kBAAkBzD,IAEnE,IAAK,IAAIisD,KAAc7nB,EACF,OAAf6nB,GAAsC,cAAfA,IACzBxoD,EAAiB,MAAQA,EAAR,eAA4BwoD,EAAa7nB,EAAK6nB,GAAYxqD,SAI/E,GAAIgC,GAAqBA,EAAkBzC,SACzC,IAAK,IAAImrB,EAAI,EAAGA,EAAI1oB,EAAkBzC,SAAUiD,OAAQkoB,IACF,KAAhD1oB,EAAkBzC,SAAUmrB,GAAGtpB,cAAsE,KAA/CY,EAAkBzC,SAAUmrB,GAAGppB,cACnFU,EAAkBzC,SAAUmrB,GAAGnsB,IACjCyD,EAAkBzC,SAAUmrB,GAAGtpB,kBAAe1F,EAC9CsG,EAAkBzC,SAAUmrB,GAAGppB,iBAAc5F,IAE7CsG,EAAkBzC,SAAUitB,OAAO9B,EAAG,GACtCA,MAMR,OAAO1oB,I,kCAGG+C,EAAmB/E,EAAYF,GACzCC,KAAK+Q,MAAM6lE,4BAA4B5xE,EAAW/E,EAAOF,K,+BAe7B,IAAD,OACnBigB,EAAMhgB,KAAK+Q,MAAXiP,EAER,OACE,oCACGhgB,KAAKwH,MAAMimC,cACV,yBAAKz8B,UAAU,oBACb,kBAAC,GAAD,MACIhR,KAAK+Q,MAAMlH,cACX,oCACE,wBAAImH,UAAU,uBAAuBgP,EAAE,yBACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,6BAI9C,kBAAC,GAAD,CACE1C,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,kBAAC,KAAD,CACE+B,SAAU/f,KAAK62E,YAAYv1D,KAAKthB,MAChCsrC,aAAc,GAEd,kBAAC,KAAD,CAAS94B,MAAO,CAAEm2C,WAAY,QAASC,YAAa,QAClD,kBAAC,KAAD,KACE,kBAAC,GAAD,KAAU5oC,EAAE,qCACZ,kBAAC,GAAD,KAASA,EAAE,4CAEZhgB,KAAK+Q,MAAM9O,mBAAqBjC,KAAK+Q,MAAM9O,kBAAkB5C,aAAeW,KAAK4rE,aAAa5rE,KAAK+Q,MAAM9O,kBAAkB5C,cAAgB,IAC1I,kBAAC,KAAD,KAAM2gB,EAAE,mCAIZ,kBAAC,KAAD,KACE,kBAAC,GAAD,CACEwiB,SAAUxiC,KAAK+Q,MAAM9O,kBAAkBzD,GACvC+C,YAAavB,KAAKwH,MAAMgvE,qBACxBxd,WAAYh5D,KAAK+Q,MAAM9O,kBAAkB+2D,WACzCmd,qBAAsBn2E,KAAK+Q,MAAM/S,oBAAoBgf,QAAO,SAAA6mB,GAAC,OAAIA,GAAK,EAAK9yB,MAAM2K,YAAUjZ,OAAS,KAGvGzC,KAAK+Q,MAAM9O,mBAAqBjC,KAAK+Q,MAAM9O,kBAAkB5C,aAAeW,KAAK4rE,aAAa5rE,KAAK+Q,MAAM9O,kBAAkB5C,cAAgB,IAC1I,kBAAC,KAAD,KACE,yBAAKmT,MAAO,CAAES,OAAQ,SACpB,kBAAC/R,GAAD,CACE4D,eAAgB9E,KAAK+Q,MAAM1K,sBAC3B0kE,QAAS/qE,KAAK6qE,YAAYvpD,KAAKthB,MAC/BiuE,YAAY,WACZE,WAAW,EACX/C,WAAYprE,KAAKwH,MAAM4jE,WACvB7pE,YAAavB,KAAKwH,MAAM+uE,6BAOlC,yBAAKvlE,UAAU,iBACb,kBAAC,KAAD,CAAM0N,GrRnNU,iBqRmNWzN,QAASjR,KAAKm1E,cAAc7zD,KAAKthB,OAC1D,kBAAC,GAAD,CACEkT,KAAM8M,EAAE,8BACRjU,KAAK,SACLkF,QAASjR,KAAK82E,OAAOx1D,KAAKthB,MAC1BgR,UAAU,oCAOpB,yBAAKA,UAAU,uBACb,kBAAC,GAAD,Y,GA9LqBK,aA+NlB+/C,qBACblgC,eACAjJ,aA1BsB,SAACzgB,GACvB,MAAO,CACLqC,aAAcrC,EAAMmH,YAAY9E,aAChC5H,kBAAmBuF,EAAMoG,OAAO3L,kBAChCoE,sBAAuBmB,EAAMoG,OAAOvH,sBACpCrI,oBAAqBwJ,EAAM+F,KAAKvP,oBAChC0d,SAAUlU,EAAM+F,KAAK/Q,KAAKkf,aAIH,SAAC1F,GAC1B,MAAO,CACL2gE,+BAAgC,SAAC10E,GAC/B+T,EhM6bJ,SAAC/T,GAAD,8CACE,WAAO+T,EAAUoD,GAAjB,SAAA3a,EAAA,sDACEuX,EAAS,CAAEjK,KhHvnB6B,gCgHynBxCmK,GAAU,IAAIuqB,GAAgCx+B,IAC3CoX,MAAK,WACJrD,EAAS,CAAEjK,KhH1nByB,mCgH4nBrC4J,OAAM,SAACjK,GACNsK,EAAS,CAAEjK,KhH5nByB,iCgH4nByBqB,QAAS1B,OAR5E,2CADF,wDgM7bairE,CAA+B10E,KAE1CwtE,YAAa,aAGbmH,4BAA6B,SAAC5xE,EAAgB/E,EAAYF,GACxDiW,EhM+aJ,SAAChR,EAAgB/E,EAAYF,GAA7B,8CACE,WAAOiW,EAAUoD,GAAjB,eAAA3a,EAAA,uDACQmkC,EAAOxpB,IAAWxL,OAAOvH,uBAC1BpG,GAAS,CAAEA,MAAO+E,EAAWjF,OAAQA,GAC1CiW,EAAS,CAAEjK,KhHlnB0B,8BgHknBqBqB,QAASw1B,IAHrE,2CADF,wDgM/aag0C,CAA4B5xE,EAAW/E,EAAOF,SAK9CqxD,CAGbglB,ICmCallD,I,OAAAA,gBA7QqC,SAACngB,GAA+B,IAC1EiP,EAAMjP,EAANiP,EADyE,EAEvDxL,mBAAS,MAF8C,oBAI3EuiE,GAJ2E,UAIjD,SAACC,GAG/B,IAFA,IAAIC,EAAWlmE,EAAMmmE,WAAcnmE,EAAM7R,uBAAyB6R,EAAMwyB,qBAAyBxyB,EAAMomE,qBAAuB,EAAI,EAC9HC,EAAkC,IAAI5uD,MACjCmC,EAAIssD,EAAUtsD,EAAKqsD,EAAuB,EAAIrsD,IACrDysD,EAAK/iE,KAAK,CAAEpU,MAAO0qB,EAAGhpB,MAAOgpB,EAAEtT,aAEjC,OAAO+/D,IAGHC,EAAoB,WACxB,IAAIp/C,EAA4C,KAWhD,OAAsB,OATpBA,EADElnB,EAAMmmE,WACS,CAAEj3E,MAAO8Q,EAAMjM,eAAe5F,uBAAuBe,MAAO0B,MAAOoP,EAAMjM,eAAe5F,uBAAuBe,MAAMoX,YAElItG,EAAMomE,qBACS,CAAEl3E,MAAO,IAAK0B,MAAO,KAErB,CAAE1B,MAAO,IAAK0B,MAAO,OAKxCoP,EAAMg6D,QAAQ9yC,EAAeh4B,MAAO,yBAA0B,IACvDg4B,GAEA,CAAEh4B,MAAO,IAAK0B,MAAO,MAIhC,OACE,oCACE,yBAAKqP,UAAU,kBACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,OAAQvM,UAAW,SAC7D,yBAAKx0C,UAAU,cACb,wBAAIxS,GAAG,UAAUgU,MAAO,CAAES,OAAQ,QAAUlC,EAAMmmE,WAAanmE,EAAMumE,iBAAiB94D,MAAQzN,EAAMwmE,iBAAiB/4D,OACrH,6BACA,6BACGzN,EAAMmmE,WAAa9yD,qCAA0BrT,EAAMumE,iBAAiBxzD,SAAWM,qCAA0BrT,EAAMwmE,iBAAiBzzD,YAIvI,yBAAK9S,UAAU,OACb,yBAAKA,UAAU,UACb,kBAAC,GAAD,CACEmH,KAAK,YACL+yD,UAAWn6D,EAAMjM,eAAe1F,UAChC2rE,QAASh6D,EAAMg6D,QACfv5D,SAAUT,EAAMmmE,WAChBjM,oBAAoB,iDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBD,SAAU,EACVL,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,aAAckwC,UAAWrzB,OAG3F,kBAAC,GAAD,CACE7c,KAAK,QACL+yD,UAAWn6D,EAAMjM,eAAexF,MAChCyrE,QAASh6D,EAAMg6D,QACfv5D,SAAUT,EAAMmmE,WAChBjM,oBAAoB,oDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBD,SAAU,EACVL,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,UAAWkwC,UAAWnzB,QAI1F,yBAAKlkB,UAAU,UACb,kBAAC,GAAD,CACEmH,KAAK,WACL+yD,UAAWn6D,EAAMjM,eAAe5I,SAChC6uE,QAASh6D,EAAMg6D,QACfv5D,SAAUT,EAAMmmE,WAChBjM,oBAAoB,gDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBD,SAAU,EACVL,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,aAAckwC,UAAWrzB,OAG3F,kBAAC,GAAD,CACE7c,KAAK,cACL+yD,UAAWn6D,EAAMjM,eAAe3I,YAChC4uE,QAASh6D,EAAMg6D,QACfv5D,SAAUT,EAAMmmE,WAChBjM,oBAAoB,mDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBD,SAAU,EACVL,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,YAAakwC,UAAW1yB,SAI7F5kB,EAAMymE,mBACL,yBAAKxmE,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cACb,wBAAIxS,GAAG,UAAUgU,MAAO,CAAES,OAAQ,MAAOuyC,UAAW,SAAWz0C,EAAMmmE,WAAanmE,EAAM0mE,qBAAqBj5D,MAAQzN,EAAM2mE,mBAAmBl5D,OAC9I,6BACA,6BACGzN,EAAMmmE,WAAa9yD,qCAA0BrT,EAAM0mE,qBAAqB3zD,SAAWM,qCAA0BrT,EAAM2mE,mBAAmB5zD,UAGzI,6BACI/S,EAAM7R,wBAA0B6R,EAAM7R,uBAAyB,EAC9B,IAAjC6R,EAAM7R,uBACJ,4DAAkC6R,EAAM7R,uBAAxC,uBAAoF6R,EAAMjM,eAAe1F,UAAUa,MAAQ,IAAM8Q,EAAMjM,eAAe5I,SAAS+D,MAA/J,KAEA,4DAAkC8Q,EAAM7R,uBAAxC,wBAAqF6R,EAAMjM,eAAe1F,UAAUa,MAAQ,IAAM8Q,EAAMjM,eAAe5I,SAAS+D,MAAhK,iBAAqL8Q,EAAMmmE,WAAanmE,EAAM4mE,oBAAsB5mE,EAAM+L,6BAA+B/L,EAAM+L,4BAA4B9C,UAA3S,qCAEAre,GAGN,yBAAK6W,MAAO,CAAEgzC,UAAW,IAAKxyC,MAAO,OAAQF,OAAQ,MAAOo8B,QAAS,SACnE,uBAAG18B,MAAO,CAAEgzC,UAAW,SAAWz0C,EAAMmmE,WAAa,wBAA0B,YADjF,WAEGnmE,EAAMjM,gBAAkBiM,EAAMjM,eAAe5F,wBAC5C,kBAAC,GAAD,CACE8R,UAAU,qBACV+mB,QAASg/C,EAAwBhmE,EAAMmmE,WAAanmE,EAAM4mE,oBAAsB5mE,EAAM+L,4BAA4B9C,WAClHie,eAAgBo/C,IAChB/+C,mBAAoB,SAACrZ,GACnBlO,EAAMg6D,QAAQ9rD,EAAShf,MAAO,yBAA0B,OARhE,WAaE,uBAAGuS,MAAO,CAAEgzC,UAAW,SAAvB,SAAuC,2BAAIz0C,EAAMmmE,WAAanmE,EAAM4mE,oBAAsB5mE,EAAM+L,6BAA+B/L,EAAM+L,4BAA4B9C,WAAjK,iCAEF,yBAAKxH,MAAO,CAAEi/C,MAAO,OAAQjM,UAAW,UACtC,6BACA,6BACIz0C,EAAMq6D,YAAer6D,EAAMjM,eAAe5F,uBAAuBa,QAAUgR,EAAMjM,eAAe5F,uBAAuBa,OAAO0C,OAAS,GACvI,uBAAG+P,MAAO,CAAEqrC,UAAW,OAAQprC,MAAO,QAAU1B,EAAMjM,eAAe5F,wBAA0B8gB,EAAE,wBAA0BjP,EAAMjM,eAAe5F,uBAAuBa,OAAO,MAGlL,6BACGgR,EAAMwyB,qBAAuBxyB,EAAM7R,yBAClC6R,EAAMwyB,qBAAuB,EAC3B,2BAAG,oCAAH,2JAEAxyB,EAAM7R,uBAAyB,EAC7B,2BAAG,oCAAH,yIAEA,2BAAG,oCAAH,qIAUlB,yBAAK8R,UAAU,iBACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,OAAQvM,UAAW,SAC7D,yBAAKx0C,UAAU,cACb,wBAAIxS,GAAG,UAAUgU,MAAO,CAAES,OAAQ,QAAUlC,EAAMmmE,WAAanmE,EAAMumE,iBAAiB94D,MAAQzN,EAAMwmE,iBAAiB/4D,QAEvH,6BACA,yBAAKhM,MAAO,CAAEgzC,UAAW,SACtBz0C,EAAMmmE,WAAa9yD,qCAA0BrT,EAAMumE,iBAAiBxzD,SAAWM,qCAA0BrT,EAAMwmE,iBAAiBzzD,WAGrI,yBAAK9S,UAAU,WACb,kBAAC,GAAD,CACEmH,KAAK,YACL+yD,UAAWn6D,EAAMjM,eAAe1F,UAChC2rE,QAASh6D,EAAMg6D,QACfv5D,SAAUT,EAAMmmE,WAChBjM,oBAAoB,iDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,aAAckwC,UAAWrzB,OAG3F,kBAAC,GAAD,CACE7c,KAAK,WACL+yD,UAAWn6D,EAAMjM,eAAe5I,SAChC6uE,QAASh6D,EAAMg6D,QACfv5D,SAAUT,EAAMmmE,WAChBjM,oBAAoB,gDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,aAAckwC,UAAWrzB,OAG3F,kBAAC,GAAD,CACE7c,KAAK,QACL+yD,UAAWn6D,EAAMjM,eAAexF,MAChCyrE,QAASh6D,EAAMg6D,QACfv5D,SAAUT,EAAMmmE,WAChBjM,oBAAoB,oDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,UAAWkwC,UAAWnzB,OAGxF,kBAAC,GAAD,CACE/c,KAAK,cACL+yD,UAAWn6D,EAAMjM,eAAe3I,YAChC4uE,QAASh6D,EAAMg6D,QACfv5D,SAAUT,EAAMmmE,WAChBjM,oBAAoB,mDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,YAAakwC,UAAW1yB,OAG9C5kB,EAAMymE,mBACL,yBAAKxmE,UAAU,cACb,wBAAIxS,GAAG,UAAUgU,MAAO,CAAES,OAAQ,MAAOuyC,UAAW,SAAWz0C,EAAMmmE,WAAanmE,EAAM0mE,qBAAqBj5D,MAAQzN,EAAM2mE,mBAAmBl5D,OAC9I,yBAAKhM,MAAO,CAAEgzC,UAAW,SACtBz0C,EAAMmmE,WAAa9yD,qCAA0BrT,EAAM0mE,qBAAqB3zD,SAAWM,qCAA0BrT,EAAM2mE,mBAAmB5zD,UAGzI,yBAAKtR,MAAO,CAAEu/C,aAAc,UACxBhhD,EAAM7R,wBAA0B6R,EAAM7R,uBAAyB,GAC/D6R,EAAM7R,uBACJ,4DAAkC6R,EAAM7R,uBAAxC,wBAAqF6R,EAAMjM,eAAe1F,UAAUa,MAAQ,IAAM8Q,EAAMjM,eAAe5I,SAAS+D,MAAhK,iBAAqL8Q,EAAMmmE,WAAanmE,EAAM4mE,oBAAsB5mE,EAAM+L,6BAA+B/L,EAAM+L,4BAA4B9C,UAA3S,sCAIAre,GAGN,uBAAG6W,MAAO,CAAE08B,QAAS,WAAan+B,EAAMmmE,WAAa,wBAA0B,YAC9EnmE,EAAMjM,gBAAkBiM,EAAMjM,eAAe5F,wBAC5C,kBAAC,GAAD,CACE8R,UAAU,qBACV+mB,QAASg/C,EAAwBhmE,EAAMmmE,WAAanmE,EAAM4mE,oBAAsB5mE,EAAM+L,4BAA4B9C,WAClHie,eAAgBo/C,IAChB/+C,mBAAoB,SAACrZ,GACnBlO,EAAMg6D,QAAQ9rD,EAAShf,MAAO,yBAA0B,OAI9D,uBAAGuS,MAAO,CAAE8K,SAAU,WAAY4xB,QAAS,WAA3C,SAA6D,2BAAIn+B,EAAMmmE,WAAanmE,EAAM4mE,oBAAsB5mE,EAAM+L,6BAA+B/L,EAAM+L,4BAA4B9C,WAAvL,gCAEA,yBAAKxH,MAAO,CAAEkjD,MAAO,OAAQlQ,UAAW,SACpCz0C,EAAMq6D,YAAer6D,EAAMjM,eAAe5F,uBAAuBa,QAAUgR,EAAMjM,eAAe5F,uBAAuBa,OAAO0C,OAAS,GACvI,uBAAG+P,MAAO,CAAEqrC,UAAW,OAAQprC,MAAO,QAAU1B,EAAMjM,eAAe5F,wBAA0B8gB,EAAE,wBAA0BjP,EAAMjM,eAAe5F,uBAAuBa,OAAO,KAEhL,6BACGgR,EAAMwyB,qBAAuBxyB,EAAM7R,yBAClC6R,EAAMwyB,qBAAuB,EAC3B,2BAAG,oCAAH,2JAEAxyB,EAAM7R,uBAAyB,EAC7B,2BAAG,oCAAH,yIAEA,2BAAG,oCAAH,0ICtNT04E,GArDuD,SAAC7mE,GAAW,IACxEiP,EAAMiG,eAANjG,EACF+H,EAAOhX,EAAMxF,OACbssE,EAA2B9mE,EAAM8mE,yBACjC/qC,EAAY,uCAAG,sBAAAruC,EAAA,sDACnBo5E,GAAyB,GADN,2CAAH,qDAIZxsC,EACJ,yBAAKr6B,UAAU,0BACb,yBAAKA,UAAU,YAAYwB,MAAO,CAAEqrC,UAAW,WAC7C,kBAAC,GAAD,CAAa3qC,KAAMnC,EAAMq8B,UAAU5uB,QAEnC,6BACG4F,qCAA0BrT,EAAMq8B,UAAUtpB,UAG7C,kBAAC,KAAD,CAAMpF,GvR9BkB,kBuR+BtB,kBAAC,GAAD,CACElgB,GAAG,QACH0U,KAAM8M,EAAE,iBACRhP,UAAU,gBACVC,QAAS67B,OAOnB,OACE,oCAEE,kBAAC,GAAD,KAEE,kBAAC,GAAD,CACEvhC,OAAQwc,EACR/W,UAAWO,KAAW,8CAA+CR,EAAMC,YAE3E,8BAAOq6B,KAGX,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE9/B,OAAQwc,EACR/W,UAAWO,KAAW,gEAAiER,EAAMC,YAE5Fq6B,M,mOCzCLysC,G,YACJ,WAAY/mE,GAAa,IAAD,8BACtB,8CAAMA,KAiBRy8B,aAlBwB,uCAkBT,WAAOr1B,EAAcxW,GAArB,eAAAlD,EAAA,sEACW4uC,GAAwBl1B,EAAMxW,GADzC,cACPyrC,EADO,yBAENA,GAFM,2CAlBS,wDAGtB,EAAK5lC,MAAQ,CACXuwE,qBAAiBp8E,EACjBq8E,qBAAiBr8E,EACjB8xC,eAAe,GAGjBC,QAAQC,IAAI,CACV,EAAKH,aAAa,8DAA+D,mBACjF,EAAKA,aAAa,4DAA6D,qBAC9En0B,MAAK,SAAAa,GACNA,EAAEmR,SAAQ,SAAAuZ,GAAC,OAAI,EAAK1lB,S,2VAAL,IAAmB,EAAK1X,MAAxB,eAAgCo9B,EAAEzsB,KAAOysB,QACxD,EAAK1lB,SAAS,CAAEuuB,eAAe,OAdX,E,+EAwBtB,MAAgC,WAA7BztC,KAAK+Q,MAAMknE,cACLj4E,KAAKwH,MAAMuwE,gBACkB,WAA7B/3E,KAAK+Q,MAAMknE,cACXj4E,KAAKwH,MAAMwwE,gBAEX,CACLx5D,MAAO,GACPsF,QAAS,GACT3L,KAAM,M,+BAMInY,KAAK+Q,MAAXiP,EACR,OACE,oCACGhgB,KAAKwH,MAAMimC,cACZ,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEliC,OAAQvL,KAAK+Q,MAAMmnE,oBACnBL,yBAA4B73E,KAAK+Q,MAAM8mE,yBACvCzqC,UAAWptC,KAAKm4E,oBAGpB,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEnnE,UAAU,kDACVzF,OAAQvL,KAAK+Q,MAAMmnE,oBACnBL,yBAA4B73E,KAAK+Q,MAAM8mE,yBACvCzqC,UAAWptC,KAAKm4E,qBAKpB,yBAAKnnE,UAAU,uBACb,kBAAC,GAAD,Y,GA9DoBK,aAsFjB6f,kBACbjJ,aAjBsB,SAACzgB,GACrB,MAAO,CACH0wE,oBAAqB1wE,EAAMqH,MAAMlD,aAAaJ,WAKzB,SAACyK,GAC1B,MAAO,CACH6hE,yBAA0B,SAACtsE,GACvByK,EAAS,CAAEjK,K/S1FrB,6B+S0FuDqB,QAAS7B,QAOhE0c,CAA6C6vD,KC3GlCM,GAAb,YACI,WAAYC,GAAsC,IAAD,6BAG7C,8CAFkB,gCAIbhiE,KAAOgiE,EALiC,EADrD,4BAA4C9gE,ICqE7B+gE,GAzD2C,SAACvnE,GACzCkV,eAANjG,EAD0D,IAE5D+H,EAAOhX,EAAMxF,OACbgtE,EAAoBxnE,EAAMwnE,kBAC1BzrC,EAAY,uCAAG,sBAAAruC,EAAA,sDACjB85E,GAAkB,GADD,2CAAH,qDAIZltC,EACJ,yBAAKr6B,UAAU,0BACb,yBAAKA,UAAU,YAAYwB,MAAO,CAACqrC,UAAW,WAC5C,kBAAC,GAAD,CAAa3qC,KAAM,4BACnB,6BACE,+FAEA,kBAAC,KAAD,CAAMwL,G1RzBc,kB0R0BlB,kBAAC,GAAD,CACIlgB,GAAG,OACH0U,KAAM,OACNlC,UAAU,gBACVC,QAAS67B,KAGb,kBAAC,GAAD,CACItuC,GAAG,MACH0U,KAAM,YACNlC,UAAU,gBACVC,QAAS67B,MAMvB,OACE,oCAEI,kBAAC,GAAD,KAEE,kBAAC,GAAD,CACEvhC,OAAQwc,EACR/W,UAAWO,KAAW,8BAA+BR,EAAMC,YAE3D,8BAAOq6B,KAGX,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE9/B,OAAQwc,EACR/W,UAAWO,KAAW,0CAA2CR,EAAMC,YAEtEq6B,MClDTmtC,G,oLAEYx4E,KAAK+Q,MAAXiP,EACR,OACE,oCACE,oCACE,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEzU,OAAQvL,KAAK+Q,MAAM0nE,gBACnBF,kBAAqBv4E,KAAK+Q,MAAMwnE,qBAGpC,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEvnE,UAAU,kDACVzF,OAAQvL,KAAK+Q,MAAM0nE,gBACnBF,kBAAqBv4E,KAAK+Q,MAAMwnE,2B,GAhBpBlnE,aA0CX6f,kBACbjJ,aAlBsB,SAACzgB,GAErB,MAAO,CACHixE,gBAAiBjxE,EAAMqH,MAAMnD,MAAMH,WAKd,SAACyK,GAC1B,MAAO,CACHuiE,kBAAmB,SAAChtE,GAChByK,EAAS,CAAEjK,KlThCc,wBkTgCeqB,QAAS7B,QAO3D0c,CAA6CuwD,K,mOCWzCH,G,YAEJ,WAAYtnE,GAAa,IAAD,8BACtB,8CAAMA,KAqERmlD,gBAtEwB,uCAsEN,WAAO/9C,EAAcxW,GAArB,eAAAlD,EAAA,sEACW4uC,GAAwBl1B,EAAMxW,GADzC,cACV+2E,EADU,yBAETA,GAFS,2CAtEM,0DAwKxB7F,SACE,CACE,CACE17D,IAAK,EACLqH,MAAO,sCACPrG,KAAM,iBAER,CACEhB,IAAK,EACLqH,MAAO,mCACPrG,KAAM,kBAER,CACEhB,IAAK,EACLqH,MAAO,iCACPrG,KAAM,YAER,CACEhB,IAAK,EACLqH,MAAO,gCACPrG,KAAM,YA1LV,EAAK3Q,MAAQ,CACX4jE,YAAY,EACZuN,4BAAwBh9E,EACxB8xC,eAAe,EACfmrC,sBAAsB,EACtBC,kBAAkB,EAClBptE,MAAM,EACNqtE,oBAAqB,IAAI32E,EACzB+0E,YAAY,EACZ5zC,eAAgB,EAChBi0C,sBAAkB57E,EAClB27E,sBAAkB37E,EAClB87E,0BAAsB97E,EACtBq7E,sBAAuB,EACvBzzC,sBAAuB,EACvBrkC,wBAAyB,GAE3B,EAAK6R,MAAM2I,iCACXg0B,QAAQC,IAAI,CACV,EAAKuoB,gBAAgB,uDAAwD,0BAC7E,EAAKA,gBAAgB,6CAA8C,oBACnE,EAAKA,gBAAgB,wDAAyD,oBAC9E,EAAKA,gBAAgB,yDAA0D,0BAC9E78C,MAAK,SAAAa,GACNA,EAAEmR,SAAQ,SAAAuZ,GAAC,OAAI,EAAK1lB,S,2VAAL,IAAmB,EAAK1X,MAAxB,eAAgCo9B,EAAEzsB,KAAOysB,QACxD,EAAK1lB,SAAS,CAAEuuB,eAAe,OA3BX,E,iFA+BLsrC,GACjB,IAAIC,EAEA,GAEAD,EAAYvtD,WAAW,IAAK,KAC9ButD,EAAcA,EAAYE,MAAM,IACG/mE,MAAM,KAClCmZ,SAAQ,SAACwY,GACd,IAAIq1C,EAAWr1C,EAAE3xB,MAAM,KACC,IAApBgnE,EAASz2E,SACXu2E,EAASE,EAAS,IAAMA,EAAS,OAIvC,OAAOF,I,0CAGY,IAAD,OACdG,EAAqBj+E,OAAOC,SAASy6B,OACrC7e,EAAqC/W,KAAKo5E,mBAAmBD,GAC7Dv2C,EAAO,IAAIzgC,EACXk3E,GAAmB,EACnBr5E,KAAK+Q,MAAM1J,qBACbrH,KAAK+Q,MAAM1J,oBAAoBgkB,SAAQ,SAACo5B,GAClCA,EAAIjmD,IAAMuY,EAAM,KAAW0tC,EAAIjmD,KACjCokC,EAAOzgC,EAAoBm3E,aAAa70B,GACxC,EAAKvlC,SAAS,CAAE45D,oBAAqBl2C,IACrC,EAAK1jB,SAAS,CAAEokB,eAAgBmhB,EAAInhB,iBACpC,EAAKpkB,SAAS,CAAEqkB,qBAAsBkhB,EAAIlhB,qBAAsBrkC,uBAAwBulD,EAAIvlD,yBAC5Fm6E,GAAU,MAIZA,GACFr5E,KAAKkf,SAAS,CAAEg4D,YAAY,M,0CAU9Bl3E,KAAKu5E,sB,yCAGYxsD,EAA2C6pC,EAA2CC,GACnG72D,KAAK+Q,MAAMtT,+BAAqE,IAArCuC,KAAKwH,MAAMwvE,sBAA+Bh3E,KAAKwH,MAAMsxE,0BAAqDn9E,IAA9BqE,KAAKwH,MAAM87B,gBACpItjC,KAAKkf,SAAS,CAAE83D,qBAAuBh3E,KAAK+Q,MAAMtT,6BAA6Buc,UAAYha,KAAKwH,MAAMsxE,oBAAoB55E,uBAAuBe,QAG/I8sB,EAAUtvB,+BAAiCuC,KAAK+Q,MAAMtT,8BACxDuC,KAAKkf,SAAS,CAAE83D,qBAAuBh3E,KAAK+Q,MAAMtT,6BAA6Buc,UAAYha,KAAKwH,MAAMsxE,oBAAoB55E,uBAAuBe,U,+BAMnJ,GADAD,KAAKkf,SAAS,CAAEksD,YAAY,IACxBprE,KAAK+Q,MAAMpM,wBAA0B,GAAK,EAAG,CAC/C,OAAQ3E,KAAK+Q,MAAMpM,yBACjB,KAAK,EACG3E,KAAKwH,MAAMsxE,oBAAwCh6E,2BAA4BmB,OACnFD,KAAK6qE,YAAY,GAAI,6BAA8B,IAMzD7qE,KAAK+Q,MAAMyoE,8BAA8Bx5E,KAAK+Q,MAAMpM,wBAA0B,M,yCAI/Dm0E,GAWjB,MATA,CACEz4E,GAAIy4E,EAAoBt6E,GACxBqC,UAAWi4E,EAAoB15E,UAAUa,MACzCa,SAAUg4E,EAAoB58E,SAAS+D,MACvCe,MAAO83E,EAAoBx5E,MAAMW,MACjCgB,YAAa63E,EAAoB38E,YAAY8D,MAC7CqC,uBAAwBw2E,EAAoB55E,uBAAuBe,MACnEsC,sBAAuBu2E,EAAoBz2E,sBAAsBpC,S,uCAKnD,IAAD,OACfD,KAAKkf,SAAS,CAAE05D,sBAAsB,EAAMC,kBAAkB,IAC9D,IAAItiD,EAAUv2B,KAAKwH,MAAMsxE,oBAAoBW,aACzC72C,EAAO5iC,KAAKwH,MAAMsxE,oBAUtB,GATIl2C,EAAK1jC,wBACHc,KAAK+Q,MAAMtT,8BACRuC,KAAKwH,MAAM0vE,YAAct0C,EAAK1jC,uBAAuBe,MAAQD,KAAKwH,MAAMwvE,sBAAyBp0C,EAAK1jC,uBAAuBe,MAAQ,IACxID,KAAK6qE,YAAYjoC,EAAK1jC,uBAAuBe,MAAO,yBAA0B,CAAC,wBAC/Es2B,GAAU,GAKZA,EAGF,OAFAv2B,KAAKkf,SAAS,CAAEksD,YAAY,SAC5BprE,KAAKkf,SAAS,CAAE05D,sBAAsB,EAAOC,kBAAkB,IAG/D74E,KAAKkf,SAAS,CAAEksD,YAAY,IAC5Bl1D,GAAa,IAAIkiE,GAAuBp4E,KAAK05E,mBAAmB15E,KAAKwH,MAAMsxE,uBACxEz/D,MAAK,SAACxD,GACmB,MAApBA,EAASC,QACX,EAAKoJ,SAAS,CAAE05D,sBAAsB,EAAOC,kBAAkB,IAC/D,EAAK9nE,MAAM8mE,0BAAyB,KAEpC,EAAK34D,SAAS,CAAE05D,sBAAsB,EAAOC,kBAAkB,IAC/D,EAAK9nE,MAAMwnE,mBAAkB,OAE9B5iE,OAAM,SAACjK,GACR,EAAKwT,SAAS,CAAE05D,sBAAsB,EAAOC,kBAAkB,IAC/D,EAAK9nE,MAAMwnE,mBAAkB,Q,sCAOnCv4E,KAAKkf,SAAS,CAACzT,MAAM,M,kCAGXxL,EAAY+E,EAAgBjF,GACtC,IAAM6iC,EAAO5iC,KAAKwH,MAAMsxE,oBAEtBl2C,EAAK59B,GADW,gBAAdA,GAAyC,KAAV/E,EACf,CAAEA,MAAOA,EAAOF,OAAQ,IAExB,CAAEE,MAAOA,EAAOF,OAAQA,K,+BA4BhB,IACpBigB,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACE,oCACGhgB,KAAKwH,MAAMiE,MAAQ,kBAAC,IAAD,CAAUiT,G5RtQN,mB4RuQvB1e,KAAKwH,MAAMimC,cACV,yBAAKz8B,UAAU,oBACb,kBAAC,GAAD,MACIhR,KAAK+Q,MAAMlH,cACX,sCAOJ,kBAAC,GAAD,CACEyT,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAIThe,KAAK+Q,MAAMpM,wBAA0B,GACrC,kBAAC,GAAD,CACEwM,KAAMwC,KACNzC,YAAalR,KAAK80E,OAAOxzD,KAAKthB,MAC9BgR,UAAU,cACVI,KAAM,OAIV,yBAAKJ,UAAU,kBAC2B,IAAvChR,KAAK+Q,MAAMpM,yBACV,kBAAC,GAAD,CACEuyE,WAAYl3E,KAAKwH,MAAM0vE,WACvBI,iBAAkBt3E,KAAKwH,MAAM8vE,iBAC7BG,qBAAsBz3E,KAAKwH,MAAMiwE,qBACjCE,oBAAqB33E,KAAKwH,MAAMwvE,qBAChCjM,QAAS/qE,KAAK6qE,YAAYvpD,KAAKthB,MAC/B8E,eAAgB9E,KAAKwH,MAAMsxE,oBAC3B1N,WAAYprE,KAAKwH,MAAM4jE,WACvBsM,mBAAoB13E,KAAKwH,MAAMmxE,uBAC/BpB,iBAAkBv3E,KAAKwH,MAAM+vE,iBAC7Bz6D,4BAA6B9c,KAAK+Q,MAAMtT,6BACxC6lC,eAAgBtjC,KAAKwH,MAAM87B,eAC3BpkC,uBAAwBc,KAAKwH,MAAMtI,uBACnCqkC,qBAAsBvjC,KAAKwH,MAAM+7B,qBACjCi0C,kBAAmBx3E,KAAK+Q,MAAMnT,wBAC9Bu5E,qBAAsBn3E,KAAK+Q,MAAMlT,8BAKvC,yBAAKmT,UAAU,iBACb,kBAAC,GAAD,KACE,kBAAC,GAAD,CACExS,GAAG,UACH0U,KAAM8M,EAAE,gBACRjU,KAAK,SACLkF,QAASjR,KAAKm1E,cAAc7zD,KAAKthB,MACjCgR,UAAU,4BAEZ,kBAAC,GAAD,CACEkC,KAAMlT,KAAKwH,MAAM0vE,WAAa,kBAAoBl3D,EAAE,gCACpDxhB,GAAG,kBACHuN,KAAK,SACLyF,SAAUxR,KAAKwH,MAAMqxE,iBACrBhmE,UAAW7S,KAAKwH,MAAMoxE,qBACtB3nE,QAASjR,KAAK25E,eAAer4D,KAAKthB,MAClCgR,UAAU,iCAGd,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEkC,KAAMlT,KAAKwH,MAAM0vE,WAAa,kBAAoBl3D,EAAE,gCACpDxhB,GAAG,kBACHuN,KAAK,SACLyF,SAAUxR,KAAKwH,MAAMqxE,iBACrBhmE,UAAW7S,KAAKwH,MAAMoxE,qBACtB3nE,QAASjR,KAAK25E,eAAer4D,KAAKthB,MAClCgR,UAAU,mBAEZ,kBAAC,GAAD,CACExS,GAAG,UACH0U,KAAM8M,EAAE,gBACRjU,KAAK,SACLkF,QAASjR,KAAKm1E,cAAc7zD,KAAKthB,MACjCgR,UAAU,sBAOjBhR,KAAK+Q,MAAM6oE,uBACV,kBAAC,GAAD,CAAmB3B,cAAej4E,KAAKwH,MAAM0vE,WAAa,SAAW,WAEtEl3E,KAAK+Q,MAAM8oE,eACV,kBAAC,GAAD,OAIJ,yBAAK7oE,UAAU,uBACb,kBAAC,GAAD,Y,GA5SkBK,aA0Vf+/C,qBACblgC,eACA0U,IACA3d,aAvCsB,SAACzgB,GACvB,MAAO,CACLqC,aAAcrC,EAAMmH,YAAY9E,aAChC+vE,sBAAuBpyE,EAAMqH,MAAMlD,aAAaJ,OAChD5G,wBAAyB6C,EAAMoG,OAAOjJ,wBACtCE,gBAAiB2C,EAAMoG,OAAO/I,gBAC9BpH,6BAA8B+J,EAAM+F,KAAK9P,6BACzC4J,oBAAqBG,EAAMoG,OAAOvG,oBAClCwyE,cAAeryE,EAAMqH,MAAMnD,MAAMH,OACjC3N,wBAAyB4J,EAAM+F,KAAK3P,wBACpCC,2BAA4B2J,EAAM+F,KAAK1P,+BAKhB,SAACmY,GAC1B,MAAO,CACLktB,8BAA+B,WAAQltB,EAASktB,OAChDs2C,8BAA+B,SAAC/D,GAC9Bz/D,EAAS,CAAEjK,KvTxVgC,oCuTwVSqB,QAASqoE,KAE/DhG,YAAa,WACXz5D,EAAS,CAAEjK,KvTvWY,mBuTyWzBwsE,kBAAmB,SAAChtE,GAClByK,EAAS,CAAEjK,KnTjYoB,wBmTiYSqB,QAAS7B,KAEnDmO,+BAAgC,WAC9B1D,EAAS0D,OAEXm+D,yBAA0B,SAACtsE,GACzByK,EAAS,CAAEjK,KnT7Yf,6BmT6YiDqB,QAAS7B,SAK7C6lD,CAIbinB,ICjZIyB,G,YACJ,WAAY/oE,GAA+B,uEACnCA,I,uEAIsB,IAAD,OACnBiP,EAAMhgB,KAAK+Q,MAAXiP,EACR,OACE,yBAAKhP,UAAWO,KAAW,mBAAoBvR,KAAK+Q,MAAMC,YACvDhR,KAAK+Q,MAAMgnB,QAAQld,KAAI,SAACkhB,GAAD,OACtB,oCACE,2BACEhwB,KAAK,QACLvN,GAAI,EAAKuS,MAAMoH,KAAO4jB,EAAEp6B,MACxBwW,KAAM,EAAKpH,MAAMoH,KACjBlY,MAAO87B,EAAE97B,MACTi6B,QAAS,EAAKnpB,MAAMknB,gBAAkB8D,EAAE97B,MACxCkf,SAAU,EAAKpO,MAAMi6B,oBAEvB,2BAAO7P,QAAS,EAAKpqB,MAAMoH,KAAO4jB,EAAEp6B,MAAOqP,UAAU,eAAegP,EAAE+b,EAAEp6B,iB,GApBrD0P,aA4BhB6f,kBAAkB4oD,IC3CpBC,GAAb,YACI,WAAYjrE,GAAwB,IAAD,6BAG/B,8CAFkB,mCAIbuH,KAAOvH,EALmB,EADvC,4BAAgDyI,I,0nCCuBhD,IA0Te2Z,kBAAkBjJ,aA3BT,SAACzgB,GACvB,MAAO,CACL0E,cAAe1E,EAAMsH,SAAS5C,cAC9BC,YAAa3E,EAAMsH,SAAS3C,YAC5BC,eAAgB5E,EAAMsH,SAAS1C,eAC/BU,0BAA2BtF,EAAMsH,SAAShC,0BAC1CC,0BAA2BvF,EAAMsH,SAAS/B,8BAInB,SAACiJ,GAC1B,MAAO,CACLgkE,iBAAkB,SAAC9tE,GACjB8J,EAAS,CAAEjK,KrTrUiB,qBqTqUqBqB,QAASlB,KAE5D+tE,qBAAsB,SAACj1E,EAAgB/E,EAAYF,GACjDiW,ECpTF,SAAChR,EAAgB/E,EAAYF,GAA7B,8CACI,WAAOiW,EAAUoD,GAAjB,eAAA3a,EAAA,uDACUmkC,EADV,MACsBxpB,IAAWtK,SAAS1C,iBACjCpH,GAAa,CAAE/E,MAAOA,EAAOF,OAAQA,GAC1CiW,EAAS,CAAEjK,KtTpBU,oBsToB2BqB,QAASw1B,IAH7D,2CADJ,wDDoTWs3C,CAAel1E,EAAW/E,EAAOF,KAE5Co6E,kBAAmB,SAACt1C,GAClB7uB,EAAS,CAAEjK,KrTtUoB,wBqTsUqBqB,QAASy3B,KAE/Du1C,mBAAoB,SAACv1C,GCrUrB,IAAC/1B,EDsUCkH,GCtUDlH,EDsU4B+1B,ECtU7B,uCACI,WAAO7uB,EAAUoD,GAAjB,SAAA3a,EAAA,sDACIyX,GAAU,IAAI6jE,GAA2BjrE,IACpCuK,MAAK,SAACxD,GACHG,EAAS,CAAEjK,KtTVc,qCsTY5B4J,OAAM,SAACjK,GACJsK,EAAS,CAAEjK,KtTZc,qCsTMrC,2CADJ,8DD2U6Bkc,EAxTS,SAAClX,GAAW,IAC5CiP,EAAMjP,EAANiP,EAD2C,EAEfxL,oBAAS,GAFM,oBAE5C42D,EAF4C,KAEhCiP,EAFgC,OAGb7lE,oBAAS,GAHI,oBAG5C8lE,EAH4C,KAG/BC,EAH+B,OAIT/lE,mBAAoB,CAAEvU,MAAO,GAAIF,OAAQ,CAAC,cAJjC,oBAI5CmM,EAJ4C,KAI7B8tE,EAJ6B,KAM7C7iE,EARe,IAAI+7B,gBAAgBC,cAAcvd,QAQrCpgB,IAAI,OACtBzE,EAAMipE,iBAAiB7iE,GAEvB,IAuCM0zD,EAAc,SAACtqD,GACnB,IAAItgB,EAAQ,KASZ,GAPEA,EADoB,QAAlBsgB,EAAEsG,OAAO5mB,OAEgB,SAAlBsgB,EAAEsG,OAAO5mB,OAGVsgB,EAAEsG,OAAO5mB,MAGG,kBAAlBsgB,EAAEsG,OAAO1O,KAA0B,CACrC,IAAMpY,EAAmB,GACJ,eAAjBwgB,EAAEsG,OAAO1O,OACN4c,GAASxU,EAAEsG,OAAO5mB,QACrBF,EAAOsU,KAAK,aAGhBtD,EAAMkpE,qBAAqB15D,EAAEsG,OAAO1O,KAAMlY,EAAOF,OAC5C,CACL,IAAMA,EAAmB,GACpBg1B,GAASxU,EAAEsG,OAAO5mB,QACrBF,EAAOsU,KAAK,YAEd2lE,EAAiB,CAAE/5E,MAAOsgB,EAAEsG,OAAO5mB,MAAOF,OAAQA,MAItD,OACE,yBAAKiR,UAAU,aACb,kBAAC,GAAD,CACEsM,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,yBAAKxL,MAAO,CAAES,OAAQ,SACpB,yBAAKjC,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cACb,wBAAIwB,MAAO,CAAES,OAAQ,OAAQR,MAAO,UAAYuN,EAAE,qBAGpDs6D,GAAgBvpE,EAAMjE,0BAmLtB,oCACE,2BAAIkT,EAAE,kCACN,kBAAC,KAAD,CAAMtB,G/R1SS,U+R2Sb,kBAAC,GAAD,CACExL,KAAM8M,EAAE,wBAtLd,qCACI7I,GACA,yBAAKnG,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,2BAAO52B,QAAQ,iBAAf,sBACA,2BACEpvB,KAAK,SACLoM,KAAK,gBACL3Z,GAAG,gBACH2gB,SAAU0rD,EACV75D,UAAU,8BAEZ,6BACCo6D,GAAcl/D,GAAiBA,EAAcnM,OAAO0C,OAAS,GAC5D,uBAAG+P,MAAO,CAAEC,MAAO,QAAUuN,EAAE,mCAIrC,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,2BAAI/xC,EAAE,6BAER,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,eACb,2BAAOmqB,QAAQ,yBAAyBnb,EAAE,oCAC1C,8BAEF,yBAAKhP,UAAU,eACb,kBAAC,GAAD,CACEmH,KAAK,wBACL4f,QAAS,CAAC,CAAE93B,OAAO,EAAM0B,MAAO,eAAiB,CAAE1B,OAAO,EAAO0B,MAAO,eACxEqpC,kBAAmB6/B,EACnB5yC,eAAgBlnB,EAAM3E,eAAN,uBAAiD2E,EAAM3E,eAAN,sBAA8CnM,QAEjH,6BACCmrE,GAAcr6D,EAAM3E,eAAN,uBAAiD2E,EAAM3E,eAAN,sBAA8CrM,OAAO0C,OAAS,GAC5H,uBAAG+P,MAAO,CAAEC,MAAO,QAAUuN,EAAE,oCAIrC,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,eACb,2BAAOmqB,QAAQ,qBAAqBnb,EAAE,uCACtC,8BAEF,yBAAKhP,UAAU,eACb,kBAAC,GAAD,CACEmH,KAAK,oBACL4f,QAAS,CAAC,CAAE93B,OAAO,EAAM0B,MAAO,eAAiB,CAAE1B,OAAO,EAAO0B,MAAO,eACxEqpC,kBAAmB6/B,EACnB5yC,eAAgBlnB,EAAM3E,eAAN,mBAA6C2E,EAAM3E,eAAN,kBAA0CnM,QAEzG,6BACCmrE,GAAcr6D,EAAM3E,eAAN,mBAA6C2E,EAAM3E,eAAN,kBAA0CrM,OAAO0C,OAAS,GACpH,uBAAG+P,MAAO,CAAEC,MAAO,QAAUuN,EAAE,oCAIrC,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,eACb,2BAAOmqB,QAAQ,uBAAwBnb,EAAE,yCACzC,8BAEF,yBAAKhP,UAAU,eACb,kBAAC,GAAD,CACEmH,KAAK,sBACL4f,QAAS,CAAC,CAAE93B,OAAO,EAAM0B,MAAO,eAAiB,CAAE1B,OAAO,EAAO0B,MAAO,eACxEqpC,kBAAmB6/B,EACnB5yC,eAAgBlnB,EAAM3E,eAAN,qBAA+C2E,EAAM3E,eAAN,oBAA4CnM,QAE7G,6BACCmrE,GAAcr6D,EAAM3E,eAAN,qBAA+C2E,EAAM3E,eAAN,oBAA4CrM,OAAO0C,OAAS,GACxH,uBAAG+P,MAAO,CAAEC,MAAO,QAAUuN,EAAE,oCAIrC,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,eACb,2BAAOmqB,QAAQ,eAAgBnb,EAAE,iCACjC,8BAEF,yBAAKhP,UAAU,eACb,kBAAC,GAAD,CACEmH,KAAK,cACL4f,QAAS,CAAC,CAAE93B,OAAO,EAAM0B,MAAO,eAAiB,CAAE1B,OAAO,EAAO0B,MAAO,eACxEqpC,kBAAmB6/B,EACnB5yC,eAAgBlnB,EAAM3E,eAAN,aAAuC2E,EAAM3E,eAAN,YAAoCnM,QAE7F,6BACCmrE,GAAcr6D,EAAM3E,eAAN,aAAuC2E,EAAM3E,eAAN,YAAoCrM,OAAO0C,OAAS,GACxG,uBAAG+P,MAAO,CAAEC,MAAO,QAAUuN,EAAE,oCAIrC,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,eACb,2BAAOmqB,QAAQ,oBAAqBnb,EAAE,sCACtC,8BAEF,yBAAKhP,UAAU,eACb,kBAAC,GAAD,CACEmH,KAAK,mBACL4f,QAAS,CAAC,CAAE93B,OAAO,EAAM0B,MAAO,eAAiB,CAAE1B,OAAO,EAAO0B,MAAO,eACxEqpC,kBAAmB6/B,EACnB5yC,eAAgBlnB,EAAM3E,eAAN,kBAA4C2E,EAAM3E,eAAN,iBAAyCnM,QAEvG,6BACCmrE,GAAcr6D,EAAM3E,eAAN,kBAA4C2E,EAAM3E,eAAN,iBAAyCrM,OAAO0C,OAAS,GAClH,uBAAG+P,MAAO,CAAEC,MAAO,QAAUuN,EAAE,oCAIrC,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,eACb,2BAAOmqB,QAAQ,gCAAiCnb,EAAE,0CAClD,8BAEF,yBAAKhP,UAAU,eACb,kBAAC,GAAD,CACEmH,KAAK,+BACL4f,QAAS,CAAC,CAAE93B,OAAO,EAAM0B,MAAO,eAAiB,CAAE1B,OAAO,EAAO0B,MAAO,eACxEqpC,kBAAmB6/B,EACnB5yC,eAAgBlnB,EAAM3E,eAAN,8BAAwD2E,EAAM3E,eAAN,6BAAqDnM,QAE/H,6BACCmrE,GAAcr6D,EAAM3E,eAAN,8BAAwD2E,EAAM3E,eAAN,6BAAqDrM,OAAO0C,OAAS,GAC1I,uBAAG+P,MAAO,CAAEC,MAAO,QAAUuN,EAAE,oCAIrC,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,eACb,2BAAOmqB,QAAQ,eAAgBnb,EAAE,iCACjC,8BAEF,yBAAKhP,UAAU,eACb,kBAAC,GAAD,CACEmH,KAAK,cACL4f,QAAS,CAAC,CAAE93B,OAAO,EAAM0B,MAAO,eAAiB,CAAE1B,OAAO,EAAO0B,MAAO,eACxEqpC,kBAAmB6/B,EACnB5yC,eAAgBlnB,EAAM3E,eAAN,aAAuC2E,EAAM3E,eAAN,YAAoCnM,QAE7F,6BACCmrE,GAAcr6D,EAAM3E,eAAN,aAAuC2E,EAAM3E,eAAN,YAAoCrM,OAAO0C,OAAS,GACxG,uBAAG+P,MAAO,CAAEC,MAAO,QAAUuN,EAAE,oCAIrC,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,eACb,2BAAOmqB,QAAQ,sBAAuBnb,EAAE,gCACxC,8BAEF,yBAAKhP,UAAU,eACb,8BACExS,GAAG,qBACHg8E,KAAM,EACNr7D,SAAU0rD,EACV1yD,KAAK,qBACLlY,MAAO8Q,EAAM3E,eAAN,oBAA8C2E,EAAM3E,eAAN,mBAA2CnM,QAElG,+BAGJ,yBAAK+Q,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,2BAAG,2BAAI/xC,EAAE,2BAA+BA,EAAE,2BAC1C,2BAAG,2BAAIA,EAAE,0BAA8BA,EAAE,0BACzC,2BAAIA,EAAE,0CAER,yBAAKhP,UAAU,eACb,kBAAC,GAAD,CACEkC,KAAM8M,EAAE,wBACR/O,QA9OI,WAClB,IAAM2xB,EAAO7xB,EAAM3E,eACfmqB,GAAU,EACd,IAAK,IAAIk0B,KAAc7nB,EACrB,GAAIA,EAAK6nB,IAAe7nB,EAAK6nB,GAAY1qD,OAAO0C,OAAS,EAAG,CAC1D8zB,GAAU,EACV,MAMJ,GAH4B,KAAxBrqB,EAAcjM,OAAiBkX,IACjCof,GAAU,GAERA,EACF8jD,GAAc,OADhB,CAIEA,GAAc,GACdE,GAAe,GAEjB,IAAM11C,EAlCkB,SAACjC,GACzB,IAAI63C,EAAU,GAMd,IAAK,IAAI/qD,KALLvY,EACFsjE,EAAQvuE,cAAgB6E,EAAM7E,cAE9BuuE,EAAQ/8E,iBAAmBwO,EAAcjM,MAEzB2iC,EACF,kBAAVlT,IACF+qD,EAAO,MAAQA,EAAR,eAAkB/qD,EAAQkT,EAAKlT,GAAOzvB,SAGjD,OAAOw6E,EAsBKC,CAAkB3pE,EAAM3E,gBACpC2E,EAAMopE,kBAAkBt1C,GACxB9zB,EAAMqpE,mBAAmBv1C,OA2NZ9zB,EAAMhE,2BACL,uBAAGyF,MAAO,CAAEC,MAAO,QAAWuN,EAAE,mCE1LnCkR,kBAAkBjJ,aAhBT,SAACzgB,GACvB,MAAO,CACLqC,aAAcrC,EAAMmH,YAAY9E,aAChCnC,kBAAmBF,EAAMoG,OAAOlG,kBAChCH,gBAAiBC,EAAMoG,OAAOrG,oBAIP,SAACyO,GAC1B,MAAO,CACL2kE,aAAc,SAAC3zE,GACbgP,EAAS,CAAEjK,K5T7Ba,iB4T6BqBqB,QAASpG,QAK3BihB,EAlFqB,SAAClX,GAAW,IACxDiP,EAAMjP,EAANiP,EACFizB,EAJe,IAAIC,gBAAgBC,cAAcvd,QAMjDhwB,GADYqtC,EAAMz9B,IAAI,cACXy9B,EAAMz9B,IAAI,cAJoC,EAKnBhB,mBAAmB5O,IAAamL,EAAMxJ,gBAAgBP,WAAe+J,EAAMxJ,gBAAgBC,QAAU5I,EAAe2P,QALjG,iCAOrBiG,oBAAS,IAPY,oBAOxDi5B,EAPwD,KAOzCwC,EAPyC,OAQnBz7B,wBAA8C7Y,GAR3B,oBAQxDugE,EARwD,KAQxC0e,EARwC,KAW/D/lE,qBAAU,WACR64B,QAAQC,IAAI,CACVuoB,EAAgB,wDAAyD,oBACxE78C,MAAK,SAAAa,GACN0gE,EAAkB1gE,EAAE,IACpB+1B,GAAiB,QAElB,IAEH,IAAMimB,EAAe,uCAAG,WAAO/9C,EAAcxW,GAArB,eAAAlD,EAAA,sEACH4uC,GAAwBl1B,EAAMxW,GAD3B,cAChBuR,EADgB,yBAEfA,GAFe,2CAAH,wDAKrB,OACE,oCACGu6B,EACC,yBAAKz8B,UAAU,oBACb,kBAAC,GAAD,CACEsM,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,OACb,yBAAKA,UAAU,gBACb,wBAAIwB,MAAO,CAAES,OAAQ,OAAQR,MAAO,YAAcypD,EAAgB19C,SAGtE,yBAAKxN,UAAU,8BAA8BwB,MAAO,CAAEm2C,WAAY,OAAQC,YAAa,SAEpFxkC,qCAA0B83C,EAAgBp4C,UAE7C,yBAAKtR,MAAO,CAAEm2C,WAAY,OAAQnD,UAAW,SAC3C,kBAAC,KAAD,CAAM9mC,GjSnEY,kBiSoEhB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,sDASlB,yBAAKhP,UAAU,uBACb,kBAAC,GAAD,YCuBKkgB,kBAAkBjJ,aAZT,SAACzgB,GACvB,MAAO,CACLqC,aAAcrC,EAAMmH,YAAY9E,iBAIT,SAACmM,GAC1B,MAAO,KAKwBiS,EAtFyB,SAAClX,GAAW,IAC5DiP,EAAMjP,EAANiP,EAD2D,EAGzBxL,oBAAS,GAHgB,oBAG5Di5B,EAH4D,KAG7CwC,EAH6C,OAInBz7B,wBAA8C7Y,GAJ3B,oBAI5Dk/E,EAJ4D,KAI1CC,EAJ0C,KAMnEjmE,qBAAU,WACR64B,QAAQC,IAAI,CACVuoB,EAAgB,wDAAyD,sBACxE78C,MAAK,SAAAa,GACN4gE,EAAoB5gE,EAAE,IACtB+1B,GAAiB,QAElB,IAEH,IAAMimB,EAAe,uCAAG,WAAO/9C,EAAcxW,GAArB,eAAAlD,EAAA,sEACH4uC,GAAwBl1B,EAAMxW,GAD3B,cAChBuR,EADgB,yBAEfA,GAFe,2CAAH,wDAKrB,OACE,oCACGu6B,EACC,yBAAKz8B,UAAU,oBACb,kBAAC,GAAD,MACID,EAAMlH,cACN,oCACE,wBAAImH,UAAU,uBAAuBgP,EAAE,kCAK7C,kBAAC,GAAD,CACE1C,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,OACb,yBAAKA,UAAU,cACb,wBAAIwB,MAAO,CAAES,OAAQ,OAAQR,MAAO,YAAcooE,EAAkBr8D,SAGxE,yBAAKxN,UAAU,8BAA8BwB,MAAO,CAAEm2C,WAAY,OAAQC,YAAa,SAEpFxkC,qCAA0By2D,EAAkB/2D,UAE/C,yBAAKtR,MAAO,CAAEgzC,UAAW,SACvB,kBAAC,KAAD,CAAM9mC,GlS7CiB,mBkS8CrB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,qDAGZ,kBAAC,KAAD,CAAMtB,GlSvEY,kBkSwEhB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,sDASlB,yBAAKhP,UAAU,uBACb,kBAAC,GAAD,YCrFG+pE,GAAb,YACI,WAAYjnB,GAA6B,oBACrC,IAEI/8C,EAAc,CAAE+8C,sBAHgB,mDAClB,+BAIP/8C,IANnB,4BAAwDD,ICwHzCoa,kBAAkBjJ,aAlBT,SAACzgB,GACvB,MAAO,CACLqC,aAAcrC,EAAMmH,YAAY9E,aAChC5C,gBAAiBO,EAAMoG,OAAO3G,gBAC9BrB,SAAU4B,EAAMoG,OAAOhI,SACvB2B,gBAAiBC,EAAMoG,OAAOrG,gBAC9BG,kBAAmBF,EAAMoG,OAAOlG,sBAIT,SAACsO,GAC1B,MAAO,CACLglE,mBAAoB,SAACx1D,GACnBxP,EAAS,CAAEjK,K/T5CoB,wB+T4CqBqB,QAASoY,QAKlCyC,EAjGqB,SAAClX,GAAW,IACxDiP,EAAMjP,EAANiP,EADuD,EAG7BxL,oBAAS,GAHoB,oBAGxD3B,EAHwD,KAG7Cwf,EAH6C,OAIX7d,oBAAS,GAJE,oBAIxDymE,EAJwD,KAMzDhoC,GANyD,KAF1C,IAAIC,gBAAgBC,cAAcvd,SASjD/V,EAAQozB,EAAMz9B,IAAI,SACpBzE,EAAM9J,kBAAoB4Y,GAC5B9O,EAAMiqE,mBAAmBn7D,GAE3B,IAAM7Y,EAAYisC,EAAMz9B,IAAI,aAE5B,GAAIylE,EAEF,OADAzhE,QAAQC,IAAR,UpSnBkC,mBoSmBlC,8BAA0DzS,IAExD,kBAAC,IAAD,CACE0X,GAAIuS,8BAAwCjqB,IAKlD,IAIMk0E,EAAe,WACnB7oD,GAAa,GACbjd,GAAS,IAAI2lE,GAAmChqE,EAAMnL,WACnDyT,MAAK,SAAAxD,GACJ3a,OAAOC,SAASwlB,OAAO9K,EAASrT,KAAK24E,gBAEtCxlE,OAAM,WACL0c,GAAa,OAInB,OACE,yBAAKrhB,UAAU,oBACb,kBAAC,GAAD,MACID,EAAMlH,cACN,wBAAImH,UAAU,sBAAsBwB,MAAO,CAAEC,MAAO,UAAYuN,EAAE,6CAItE,kBAAC,GAAD,CACE1C,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,QAC1C,yBAAK/gD,UAAU,cACb,wBAAIwB,MAAO,CAAES,OAAQ,OAAQR,MAAO,YAApC,sBAGJ,yBAAKzB,UAAU,MAAMwB,MAAO,CAAES,OAAQ,SACpC,2BAAIlC,EAAMrJ,kBAAoBsY,EAAE,yDAA2DA,EAAE,sDAE/F,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,OAAQpJ,WAAY,SAC9D,kBAAC,GAAD,CACEz1C,KAAK,WACLjC,QA1CM,WACdiqE,KA0CQroE,UAAWA,EACXrB,SAAUqB,IAEZ,kBAAC,KAAD,CAAM6L,GpSzFgB,kBoS0FpB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,0DC7FTo7D,GAAb,YACI,WAAYC,GAAqC,IAAD,6BAG5C,8CAFkB,iCAIbhlE,KAAOglE,EALgC,EADpD,4BAA8C9jE,IC0B/B2Z,mBAnB2D,SAACngB,GAC3DA,EAANiP,EAER,OACE,yBAAKhP,UAAU,8BACb,4BAAKD,EAAM9I,QAAQpH,UAAY,IAAMkQ,EAAM9I,QAAQnH,UACnD,4BAAKiQ,EAAM9I,QAAQqzE,eAAiB,IAAMvqE,EAAM9I,QAAQszE,iBACxD,4BACGxqE,EAAM9I,QAAQtH,WACb,4BAAI,qDAA4B,IAAIT,KAAK6Q,EAAM9I,QAAQtH,WAAYk3D,iBAEpE9mD,EAAM9I,QAAQuzE,MAAM/4E,OAAS,GAAKsO,EAAM9I,QAAQuzE,MAAM3gE,KAAI,SAAA4gE,GAAI,OAC7D,4BAAI,oCAAUA,YCrBHC,G,kCAAAA,GACMC,OAAiB,SADvBD,GAEME,QAAkB,UAFxBF,GAGMG,SAAmB,WCM9C,IAsCeC,GAtCuD,SAAC/qE,GAAwC,IAAD,EACtEyD,mBAASzD,EAAM3Q,WAAW27E,aAAa3jE,MAAK,SAAA4jE,GAAI,OAAIA,EAAKN,mBAAqB3qE,EAAMkrE,qBADd,oBACrGC,EADqG,UAG5G,OAAIA,IAAgBA,EAAYC,WAAa,GAAKD,EAAYE,eAAiB,GAAKF,EAAYG,aAAe,GAE3G,yBAAKrrE,UAAU,8BACZD,EAAMkrE,mBAAqBP,GAAiBC,OAC3C,2BAAI5qE,EAAM3Q,WAAWS,UAAY,IAAMkQ,EAAM3Q,WAAWU,SAAW,KAAOiQ,EAAMurE,eAAiBJ,EAAYE,gBAE7G,oCACE,4BAAKrrE,EAAM3Q,WAAWS,UAAY,IAAMkQ,EAAM3Q,WAAWU,UACzD,4BACIo7E,GAAeA,EAAYC,WAAa,IACvCD,EAAYG,aAAe,EAC1B,4BAAI,2CAAiBtrE,EAAMurE,eAAiBJ,EAAYE,iBAExD,4BAAI,2CAAiBrrE,EAAMurE,eAAiBJ,EAAYE,kBAE3DF,GAAeA,EAAYG,aAAe,GACzC,oCACGH,EAAYR,mBAAqBA,GAAiBE,SACjD,4BAAI,2CAAiB7qE,EAAMurE,eAAiBJ,EAAYG,eAEzDH,EAAYR,mBAAqBA,GAAiBG,UACjD,4BAAI,0CAAgB9qE,EAAMurE,eAAiBJ,EAAYG,mBAUhE,MCzCEE,GAAb,YACI,WAAY32E,GAAmB,oBAC3B,IAEImR,EAAc,CAAEnR,YAHM,mDACR,gDAIPmR,IANnB,4BAA+DD,ICClD0lE,GAAb,YAEE,WAAY1oB,EAA4BmoB,GAAqC,oBAC3E,IAEIllE,EAAc,CAAE+8C,sBAHsD,mDACxD,gCAIP/8C,IAPf,4BAA+CD,IC2YhCoa,kBAAkBjJ,aAjBT,SAACzgB,GACvB,MAAO,CACLqC,aAAcrC,EAAMmH,YAAY9E,aAChCjE,SAAU4B,EAAMoG,OAAOhI,SACvB0F,eAAgB9D,EAAMoG,OAAOtG,mBAIN,SAAC0O,GAC1B,MAAO,CACLqhD,qBAAsB,SAAC/rD,GAErB,OADA0K,EAAS,CAAEjK,KtU9TsB,0BsU8TqBqB,QAAS9B,IACxDoiC,QAAQ8Z,cAKYv/B,EAjXmB,SAAClX,GAA+B,IAC1EiP,EAAMjP,EAANiP,EADyE,EAE/CxL,oBAAS,GAFsC,oBAE1E3B,EAF0E,KAE/Dwf,EAF+D,OAIjC7d,wBAAS7Y,GAJwB,oBAI1E26E,EAJ0E,KAIxDmG,EAJwD,OAKzBjoE,wBAAS7Y,GALgB,oBAK1E+gF,EAL0E,KAKpDC,EALoD,OAM7BnoE,wBAAS7Y,GANoB,oBAM1EihF,EAN0E,KAMtDC,EANsD,OAOvCroE,oBAAS,GAP8B,oBAO1Ei5B,EAP0E,KAO3DwC,EAP2D,OAS7Bz7B,oBAAS,GAToB,oBAS1EsoE,EAT0E,KAStDC,EATsD,OAU3CvoE,wBAAkC7Y,GAVS,oBAU1EugF,EAV0E,KAU7Dc,EAV6D,OAYjBxoE,qBAZiB,oBAY1Ey/C,EAZ0E,KAYhDgpB,EAZgD,OAarBzoE,oBAAS,GAbY,oBAa1E0oE,EAb0E,KAalDC,EAbkD,KAgBjFtoE,qBAAU,WACR64B,QAAQC,IAAI,CACVuoB,EAAgB,0EAA2E,oBAC3FA,EAAgB,iFAAkF,wBAClGA,EAAgB,8EAA+E,wBAC9F78C,MAAK,SAAAa,GACNuiE,EAAoBviE,EAAE,IACtByiE,EAAwBziE,EAAE,IAC1B2iE,EAAsB3iE,EAAE,IACxB+1B,GAAiB,QAElB,IAEH,IAAMlY,EAAU,CACd3E,WAAW,eACR4mC,WAASC,WAAY,WAAgB3mD,GAAmB,IAAhC9Q,EAA+B,EAA/BA,KACvB,OAAO,uBAAIkR,KAAMlR,EAAK03D,IAAKrzC,OAAQrkB,EAAK03D,IAAI1uC,WAAWtwB,OAAOi5C,QAAU,GAAK,UAAW7gC,OAKxF4iD,EAAe,uCAAG,WAAO/9C,EAAcxW,GAArB,eAAAlD,EAAA,sEACH4uC,GAAwBl1B,EAAMxW,GAD3B,cAChBuR,EADgB,yBAEfA,GAFe,2CAAH,wDAKfkqE,EAAgB,uCAAG,WAAOx3E,EAAkBy3E,GAAzB,iBAAA5+E,EAAA,6DACnB48E,EAAmB,CAAEz1E,SAAUA,EAAUy3E,cAAeA,GADrC,SAGLnnE,GAAU,IAAIklE,GAAyBC,IACtDhiE,MAAK,WACJ,OAAO,KAER1D,OAAM,WACL,OAAO,KARY,cAGnB1V,EAHmB,yBAWhBA,GAXgB,2CAAH,wDAchBq9E,EAAkC,uCAAG,WAAO13E,GAAP,eAAAnH,EAAA,sEACvB2W,GAAS,IAAImnE,GAA0C32E,IACtEyT,MAAK,WACJ,OAAO,KAER1D,OAAM,WACL,OAAO,KAN8B,cACrC1V,EADqC,yBAQlCA,GARkC,2CAAH,sDAWlCs9E,EAAc,uCAAG,4BAAA9+E,EAAA,6DACrB4zB,GAAa,GADQ,SAEfirD,EAAmCvsE,EAAMnL,UAF1B,UAOnBq2E,EADEC,EACiBnrE,EAAMzF,eAAekyE,aAAa,GAAG9B,iBAErCA,GAAiBC,QAGlCO,EAZiB,iCAaDkB,EAAiBlB,EAAYt2E,SAAUs2E,EAAYmB,eAblD,yCAe8B,IAA7CtsE,EAAMzF,eAAekyE,aAAa/6E,OAfnB,oBAgBbsO,EAAMzF,eAAekyE,aAAa,GAAG9B,mBAAqBA,GAAiBC,OAhB9D,kCAiBGyB,EAAiBrsE,EAAMnL,SAAU,QAjBpC,0CAkBNmL,EAAMzF,eAAekyE,aAAa,GAAG9B,mBAAqBA,GAAiBE,QAlBrE,kCAmBGwB,EAAiBrsE,EAAMnL,SAAU,eAnBpC,0CAoBNmL,EAAMzF,eAAekyE,aAAa,GAAG9B,mBAAqBA,GAAiBG,SApBrE,kCAqBGuB,EAAiBrsE,EAAMnL,SAAU,QArBpC,+CAyBjBysB,GAAa,GAzBI,QA6BrB6oD,EAAae,GA7BQ,4CAAH,qDAgCdf,EAAe,SAACe,GACpB7mE,GAA0D,IAAIonE,GAA0BzrE,EAAMnL,SAAUq2E,IACrG5iE,MAAK,SAAAxD,GACJ,IAAIrT,EAAQqT,EAASrT,KACrB,QAA8B7G,IAA1B6G,EAAKi7E,iBAAgC,CACvC,IAAItpB,EAAQt+C,EAASrT,KACrB2xD,EAAMt5C,KAAI,SAAAq5C,GAAWA,EAAMI,aAAe,IAAIp0D,KAAKg0D,EAAMI,iBACzD2oB,EAA4B9oB,GAC5B9hC,GAAa,GACb8qD,GAA0B,QAEtB36E,EAAKi7E,iBACPviF,OAAOC,SAASwlB,OAAOne,EAAKk7E,qBAE5BxiF,OAAOC,SAASwlB,OAAOne,EAAKm7E,iBAIjChoE,OAAM,WACL0c,GAAa,OAYburD,EAAiB,SAAC3B,GACtB,OAAIA,IAAqBP,GAAiBC,OACjC,UACEM,IAAqBP,GAAiBE,QACxC,UAEA,UAIL/Q,EAAc,SAACtqD,GACI,MAAnBA,EAAEsG,OAAO5mB,MACX+8E,EAAe,CAAEp3E,SAAUmL,EAAMnL,SAAUy3E,cAAe,SAC9B,MAAnB98D,EAAEsG,OAAO5mB,MAClB+8E,EAAe,CAAEp3E,SAAUmL,EAAMnL,SAAUy3E,cAAe,gBAC9B,MAAnB98D,EAAEsG,OAAO5mB,OAClB+8E,EAAe,CAAEp3E,SAAUmL,EAAMnL,SAAUy3E,cAAe,UAIxD31E,EAAoB,SAACm2E,GACzB,IAAK,IAAIlzD,EAAI,EAAGA,EAAIkzD,EAAap7E,OAAQkoB,IAAK,CAC5C,GAAIkzD,EAAalzD,GAAGmzD,SAAW,EAC7B,OAAO,EACF,GAAID,EAAalzD,GAAGozD,UAAY,EACrC,OAAO,EAGX,OAAO,GAGT,OACE,oCACGtwC,EACC,yBAAKz8B,UAAU,oBACb,kBAAC,GAAD,MACID,EAAMlH,cACN,oCACE,wBAAImH,UAAU,uBAAuBgP,EAAE,8BACvC,uBAAGhP,UAAU,yBAAyBgP,EAAE,iCAK9C,kBAAC,GAAD,CACE1C,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,yBAAKxL,MAAO,CAAES,OAAQ,SAEpB,yBAAKjC,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cACb,wBAAIxS,GAAG,UAAUgU,MAAO,CAAES,OAAQ,QAAUqjE,EAAkB93D,SAIlE,yBAAKxN,UAAU,sBAAsBwB,MAAO,CAAEu/C,aAAc,SACzD3tC,qCAA0BkyD,EAAkBxyD,QAASiU,IAGvDhnB,EAAMzF,gBACL,oCACE,yBAAK0F,UAAU,8BACb,yBAAKA,UAAU,gBACb,iCACE,gDAAqB,kBAAC,KAAD,CAAiBA,UAAU,kBAAkBwB,MAAO,CAAEi/C,MAAO,SAAWtgD,KAAM6sE,OAAnG,KACCjtE,EAAMzF,eAAe6d,YAAYtO,KAAI,SAAA63C,GAAM,OAC1C,kBAAC,GAAD,CACE4pB,eAAgBvrE,EAAMzF,eAAe2yE,sBACrCh2E,QAASyqD,EACTwrB,YAAY,QAIjBntE,EAAMzF,eAAekyE,aAAa/6E,OAAS,GAAKiF,EAAkBqJ,EAAMzF,eAAekyE,eACtF,oCACGzsE,EAAMzF,eAAekyE,aAAa/6E,OAAS,GAC1C,wBAAI+P,MAAO,CAAEgzC,UAAW,SAAxB,kBAEDz0C,EAAMzF,eAAekyE,aAAa3iE,KAAI,SAAAglD,GAAW,OAChD,oCACG9uD,EAAMzF,eAAekyE,aAAa/6E,OAAS,GAC1C,wBAAI+P,MAAO,CAAEu/C,aAAc,OAAQvM,UAAW,SAAWo4B,EAAe/d,EAAY6b,kBAAoB,KAE1G,iCACE,iCACG7b,EAAYie,SAAW,GACtB,yCAAe/sE,EAAMzF,eAAe2yE,sBAAwBpe,EAAYie,SAAS,kBAAC,KAAD,CAAiB9sE,UAAU,kBAAkBwB,MAAO,CAAEi/C,MAAO,SAAWtgD,KAAM6sE,QAEhKne,EAAYke,UAAY,GACvB,2BAAIH,EAAe/d,EAAY6b,kBAAoB,SAAW3qE,EAAMzF,eAAe2yE,sBAAwBpe,EAAYke,YAG1HhtE,EAAMzF,eAAe6d,YAAYtO,KAAI,SAAAza,GAAU,OAC9C,kBAAC,GAAD,CACEk8E,eAAgBvrE,EAAMzF,eAAe2yE,sBACrC79E,WAAYA,EACZ67E,iBAAkBpc,EAAY6b,sBAGjC7b,EAAYse,iBACX,uBAAGntE,UAAU,qBAAb,mCAAmE,IAAI9Q,KAAK2/D,EAAYse,iBAAkBtmB,iBAG9G,yBAAK7mD,UAAU,2BAOvB,yBAAKwB,MAAO,CAAEu/C,aAAc,SACzBhhD,EAAMzF,eAAekyE,aAAa/6E,OAAS,GAAKiF,EAAkBqJ,EAAMzF,eAAekyE,eACtF,oCACE,gEAGA,6BACGzsE,EAAMzF,eAAekyE,aAAa3iE,KAAI,SAAAglD,GAAW,OAChD,yBAAKrtD,MAAO,CAAEgzC,UAAW,SACvB,2BACEhnD,GAAIo/E,EAAe/d,EAAY6b,kBAC/B3vE,KAAK,QACL9L,MAAO4/D,EAAY6b,iBACnBvjE,KAAK,gBACLgH,SAAU0rD,IAEZ,8BAAO+S,EAAe/d,EAAY6b,0BAQ9C,yBAAK1qE,UAAU,OAEb,uBAAGwB,MAAO,CAAEqrC,UAAW,WACnB9sC,EAAMzF,eAAekyE,aAAa/6E,OAAS,GAAKiF,EAAkBqJ,EAAMzF,eAAekyE,cAAiBp5D,qCAA0Bw4D,EAAoB94D,QAASiU,GAAW3T,qCAA0Bs4D,EAAsB54D,QAASiU,IAGvO,yBAAK/mB,UAAU,sBACb,2BACExS,GAAG,oBACHuN,KAAK,WACLoM,KAAK,mBACLmiB,UAAQ,EACRnb,SA/JF,SAACU,GACnBA,EAAMgH,OAAOqT,QACf6iD,GAAsB,GAEtBA,GAAsB,MA6JF,2BAAO5hD,QAAQ,qBAAf,uCAIJ,kBAAC,GAAD,KACE,yBAAKnqB,UAAU,gBACb,yBAAKwB,MAAO,CAAEg/C,WAAY,SACxB,kBAAC,GAAD,CACEhzD,GAAG,OACH0U,KAAOnC,EAAMzF,eAAekyE,aAAa/6E,OAAS,GAAKiF,EAAkBqJ,EAAMzF,eAAekyE,cAAiBZ,EAAoBp+D,MAAQk+D,EAAsBl+D,MACjKvN,QAASssE,EACT1qE,UAAWA,EACXrB,SAAUqB,IAAciqE,EACxB9pE,MAAM,eAQlB,kBAAC,GAAD,KACE,yBAAKhC,UAAU,OAYb,yBAAKwB,MAAO,CAAEg/C,WAAY,OAAQ3T,UAAW,WAC3C,kBAAC,GAAD,CACEr/C,GAAG,OACH0U,KAAOnC,EAAMzF,eAAekyE,aAAa/6E,OAAS,GAAKiF,EAAkBqJ,EAAMzF,eAAekyE,cAAiBZ,EAAoBp+D,MAAQk+D,EAAsBl+D,MACjKvN,QAASssE,EACT1qE,UAAWA,EACXrB,SAAUqB,IAAciqE,EACxB9pE,MAAM,iBAYxB,yBAAKhC,UAAU,uBACb,kBAAC,GAAD,OAGHijD,GACC,kBAAC,GAAD,CACE1oD,OAAQ2xE,EACR93D,WAAY,kBAAM+3D,GAA0B,IAC5ClpB,yBAA0BA,EAC1BwB,gBAAgB,S,WCtPXvkC,kBAAkBjJ,aAbT,SAACzgB,GACrB,MAAO,CACHqC,aAAcrC,EAAMmH,YAAY9E,aAChCjE,SAAU4B,EAAMoG,OAAOhI,aAIJ,SAACoQ,GACxB,MAAO,KAKsBiS,EAhH+B,SAAClX,GAAW,IAEhEiP,EAAMjP,EAANiP,EAKR,OACI,oCACI,yBAAKhP,UAAU,oBACX,kBAAC,GAAD,CACIsM,SAAU,CACNC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGb,kBAAC,GAAD,KACI,yBAAKhN,UAAU,wBACTD,EAAMlH,cACJ,wBAAImH,UAAU,sBAAsBwB,MAAO,CAAEC,MAAO,UAAWk2C,WAAY,IAAK6I,WAAY,SAAWxxC,EAAE,4CAE7G,4JACA,yBAAKhP,UAAU,iBAAf,kcAEI,6BAAM,6BAFV,s2BAII,6BAAM,6BAJV,+8BAMI,6BAAM,6BANV,i1BAQI,6BAAM,6BARV,y6CAWI,6BAAM,6BAXV,s2BAaI,6BAAM,6BAbV,+8BAeI,6BAAM,6BAfV,i1BAiBI,6BAAM,6BAjBV,0+BAqBA,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SACxC,kBAAC,KAAD,CAAMrzC,G5SrCD,mB4SsCD,kBAAC,GAAD,CACIxL,KAAK,OACLlC,UAAW,kCAM/B,kBAAC,GAAD,KACI,yBAAKA,UAAU,8BACX,yBAAKwB,MAAO,CAAEgzC,UAAW,KAAMnV,QAAS,MAAOuY,YAAa,QAA5D,+HACA,yBAAK53C,UAAU,wBAAf,kcAEI,6BAAM,6BAFV,s2BAII,6BAAM,6BAJV,+8BAMI,6BAAM,6BANV,i1BAQI,6BAAM,6BARV,y6CAWI,6BAAM,6BAXV,s2BAaI,6BAAM,6BAbV,+8BAeI,6BAAM,6BAfV,i1BAiBI,6BAAM,6BAjBV,0+BAqBA,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,OAAQlU,UAAW,WAC3D,kBAAC,KAAD,CAAMn/B,G5SvED,mB4SwED,kBAAC,GAAD,CACIxL,KAAK,OACLlC,UAAW,gDC/BpCkgB,kBAAkBjJ,aAZT,SAACzgB,GACvB,MAAO,CACLqC,aAAcrC,EAAMmH,YAAY9E,iBAIT,SAACmM,GAC1B,MAAO,KAKwBiS,EAvD6B,SAAClX,GAAW,IAChEiP,EAAMjP,EAANiP,EAER,OACE,yBAAKhP,UAAU,oBACb,kBAAC,GAAD,MACID,EAAMlH,cACN,wBAAImH,UAAU,sBAAsBwB,MAAO,CAAEC,MAAO,UAAYuN,EAAE,6CAItE,kBAAC,GAAD,CACE1C,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,yBAAKxL,MAAO,CAAES,OAAQ,SACpB,yBAAKjC,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cACb,wBAAIwB,MAAO,CAAES,OAAQ,OAAQR,MAAO,YAAcuN,EAAE,oDAK1D,yBAAKhP,UAAU,MAAMwB,MAAO,CAAES,OAAQ,SACpC,2BAAI+M,EAAE,oDAER,yBAAKhP,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,OAAQpJ,WAAY,SAC9D,kBAAC,KAAD,CAAMjqC,G7SxCgB,kB6SyCpB,kBAAC,GAAD,CACExL,KAAM8M,EAAE,0DC5CTo+D,I,OAAb,YACI,WAAYC,GAAyC,IAAD,6BAGhD,8CAFkB,oCAIbhoE,KAAOgoE,EALoC,EADxD,4BAAkD9mE,K,6jBCsBlD,IA4Oe2Z,kBAAkBjJ,aAXT,SAACzgB,GACvB,MAAO,CACLwrC,WAAYxrC,EAAM0F,MAAMzR,aAID,SAACua,GAC1B,MAAO,KAIwBiS,EA1O2B,SAAClX,GAAW,IAC9DiP,EAAMjP,EAANiP,EACA7kB,EAAa4V,EAAb5V,SAF6D,EAIrCqZ,mBAAS,IAJ4B,oBAI9DqB,EAJ8D,KAIpDyoE,EAJoD,OAKzB9pE,wBAAS7Y,GALgB,oBAK9D4iF,EAL8D,KAK9CC,EAL8C,OAMnBhqE,wBAAS7Y,GANU,oBAM9D8iF,EAN8D,KAM3CC,EAN2C,OAO3BlqE,oBAAS,GAPkB,oBAO9Di5B,EAP8D,KAO/CwC,EAP+C,KAS/DgD,EAXe,IAAIC,gBAAgBC,cAAcvd,QAYjDqwC,EAAShzB,EAAMz9B,IAAI,UACnBsuB,EAAOmP,EAAMz9B,IAAI,QAX8C,EAanChB,oBAAS,GAb0B,oBAa9D3B,EAb8D,KAanDwf,EAbmD,OAcrC7d,qBAdqC,oBAc9DmqE,EAd8D,KAcpDC,EAdoD,KAgB/D9T,EAAa,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,KAhBkB,EAkBjCvgB,oBAAS,GAlBwB,oBAkB9D42D,EAlB8D,KAkBlDiP,EAlBkD,OAmBzB7lE,oBAAS,GAnBgB,oBAmB9Dw0D,EAnB8D,KAmB7CC,EAnB6C,OAoB7Cz0D,mBAAS,CAC/B4F,SAAU,CAAEna,MAAO,GAAIF,OAAQ,CAAC,aAChC4pC,gBAAiB,CAAE1pC,MAAO,GAAIF,OAAQ,CAAC,eAtB4B,oBAoB9D6iC,EApB8D,KAoBxDi8C,EApBwD,KAyB/D9T,EAAU,SAAC9qE,EAAYkY,EAAWpY,GACtC8+E,EAAQ,MAAKj8C,EAAN,eAAazqB,EAAO,CAAElY,MAAOA,EAAOF,OAAQA,OAG/Cm2D,EAAe,uCAAG,WAAO/9C,EAAcxW,GAArB,eAAAlD,EAAA,sEACH4uC,GAAwBl1B,EAAMxW,GAD3B,cAChBuR,EADgB,yBAEfA,GAFe,2CAAH,wDAKrB2B,qBAAU,WACR64B,QAAQC,IAAI,CACVuoB,EAAgB,+CAAgD,kBAChEA,EAAgB,qDAAsD,uBACrE78C,MAAK,SAAAa,GACNskE,EAAkBtkE,EAAE,IACpBwkE,EAAqBxkE,EAAE,IACvB+1B,GAAiB,QAElB,IAEH,IAAM6uC,EAAiB,uCAAG,gCAAArgF,EAAA,yDACpB83B,GAAU,EACVqM,EAAKxoB,SAASra,QAAU6iC,EAAKxoB,SAASra,OAAO0C,OAAS,EACxD8zB,GAAU,EACDqM,EAAK+G,gBAAgB5pC,QAAU6iC,EAAK+G,gBAAgB5pC,OAAO0C,OAAS,IAC7E8zB,GAAU,GAERqM,EAAKxoB,UAAYwoB,EAAK+G,kBACpB/G,EAAKxoB,SAASna,QAAU2iC,EAAK+G,gBAAgB1pC,OAC/C4+E,EAAQ,MAAKj8C,EAAN,CAAY+G,gBAAiB,CAAE1pC,MAAO2iC,EAAK+G,gBAAgB1pC,MAAOF,OAAQ,CAAC,+BAClFw2B,GAAU,IAEVsoD,EAAQ,MAAKj8C,EAAN,CAAY+G,gBAAiB,CAAE1pC,MAAO2iC,EAAK+G,gBAAgB1pC,MAAOF,OAAQ,OACjFw2B,GAAU,KAIVA,EAjBoB,uBAkBtB8jD,GAAc,GAlBQ,0BAqBtBA,GAAc,GArBQ,cAwBpBgE,EAAgBU,EAAuB9Y,EAASniC,EAAOlB,EAAKxoB,SAASna,OACzEoyB,GAAa,GAzBW,UA0BH2sD,EAAsBX,GA1BnB,QA0BpBxoE,EA1BoB,OA2BxByoE,EAAYzoE,GA3BY,4CAAH,qDA8BjBkpE,EAAyB,SAAC9Y,EAAgBniC,EAAc1pB,GAC5D,MAAO,CACL6rD,OAAQA,EACRniC,KAAMA,EACN1pB,SAAUA,IAIR4kE,EAAqB,uCAAG,WAAOX,GAAP,eAAA5/E,EAAA,sEACPyX,GAAU,IAAIkoE,GAA6BC,IAC7DhlE,MAAK,SAACa,GAEL,OADA0kE,EAAY,IACL,SAERjpE,OAAM,SAACjK,GAGN,OAFAkzE,EAAYlzE,EAAMmK,SAASrT,KAAOkJ,EAAMmK,SAASrT,KAAKy8E,gBAAkB,iGACxE5sD,GAAa,GACN3mB,EAAMmK,SAASC,UATE,cACxBD,EADwB,yBAWrBA,GAXqB,2CAAH,sDAc3B,OAAI9E,EAAMiiC,WAEN,kBAAC,IAAD,CACEt0B,GAAI,CAAEynB,SAAUhrC,GAAYA,EAASqM,OAASrM,EAASqM,MAAM0iE,aAAe/uE,EAASqM,MAAM0iE,aAAe,OAExF,QAAbr0D,EAEP,oCACG43B,EACC,yBAAKz8B,UAAU,wBACb,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEwV,IAAI,kCACJtI,mBAAmB,kCAEnB,4BAAK8B,EAAE,iDAGX,yBAAKhP,UAAU,4BACb,yBAAKA,UAAU,aACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cACb,wBAAIwB,MAAO,CAAES,OAAQ,MAAOR,MAAO,YAAcgsE,EAAmBjgE,SAGxE,yBAAKxN,UAAU,sBAAsBwB,MAAO,CAAES,OAAQ,SACnDmR,qCAA0Bq6D,EAAmB36D,UAEhD,yBAAK9S,UAAU,OACb,kBAAC,KAAD,CAAM0N,G/SvJK,U+SwJT,kBAAC,GAAD,CACE3S,KAAK,SACLmH,KAAK,wBAIG,KAAbyrE,GACC,uBAAGnsE,MAAO,CAAEqrC,UAAW,OAAQprC,MAAO,QAAUksE,MAMxD,yBAAK3tE,UAAU,uBACb,kBAAC,GAAD,QAON,oCACGy8B,EACC,yBAAKz8B,UAAU,wBACb,kBAAC,GAAD,KACE,kBAAC,GAAD,CACEwV,IAAI,kCACJtI,mBAAmB,kCAEnB,4BAAK8B,EAAE,iDAGX,yBAAKhP,UAAU,4BACb,yBAAKA,UAAU,aACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cACb,wBAAIwB,MAAO,CAAES,OAAQ,MAAOR,MAAO,YAAc8rE,EAAgB//D,SAMrE,kBAAC,GAAD,CAAsBpE,SAAUwoB,EAAKxoB,SAASna,MAAO2mC,iBAAkB,SAAAhS,GAAO,OAAIq0C,EAAiBr0C,MACnG,yBAAK5jB,UAAU,MAAMwB,MAAO,CAAEgzC,UAAU,OAAQuM,aAAc,SAC5D,kBAAC,GAAD,CACEhmD,KAAK,WACLoM,KAAK,WACL+yD,UAAWtoC,EAAKxoB,SAChB6wD,oBAAoB,6BACpBF,QAASA,EACTD,WAAYA,EACZM,WAAYA,KAGhB,yBAAKp6D,UAAU,OACb,kBAAC,GAAD,CACEjF,KAAK,WACLoM,KAAK,kBACL+yD,UAAWtoC,EAAK+G,gBAChBshC,oBAAoB,oCACpBF,QAASA,EACTD,WAAYA,EACZM,WAAYA,KAGhB,yBAAKp6D,UAAU,OACb,kBAAC,GAAD,CACEjF,KAAK,SACLiH,MAAM,MACNhC,UAAU,gBACVkC,KAAM8M,EAAE,mBACR/O,QAAS6tE,EACTjsE,UAAWA,EACXrB,SACEqB,IACC+vB,EAAKxoB,SAASna,QACd+oE,KAIO,KAAb2V,GACC,uBAAGnsE,MAAO,CAAEqrC,UAAW,OAAQprC,MAAO,QAAUksE,MAMxD,yBAAK3tE,UAAU,uBACb,kBAAC,GAAD,Y,okBChOZ,ICaKkuE,GD2LUhuD,mBAxM2D,SAACngB,GAA0C,IAC3GiP,EAAMjP,EAANiP,EAD0G,EAEhExL,mBAAgB,IAFgD,oBAE3G83D,EAF2G,KAExFC,EAFwF,OAGlE/3D,oBAAkB,GAHgD,oBAG3G2qE,EAH2G,KAGzFC,EAHyF,KAuBlHvqE,qBAAU,WAIR,IADA,IAAIwgD,EAAe,GACV1qC,EAAI,EAAGA,EAAI5Z,EAAMpJ,0BAA0BlF,OAAQkoB,IACpB,IAAlC5Z,EAAMlJ,cAAc8iB,GAAGloB,SACzB4yD,EAAM1qC,GAAK5Z,EAAMlJ,cAAc8iB,GAAG,IAGtC4hD,EAAqBlX,KACpB,CAACtkD,EAAMlJ,gBAEV,IAAM2kE,EAA4B,SAACzgE,GACjC,QAAgCpQ,IAA5B2wE,EAAkBvgE,GAAqB,CACzC,IAAM8lD,EAAiB9gD,EAAMpJ,0BAA0BoE,GAAMwf,IAAI/sB,GAC3DqB,EAAcysE,EAAkBvgE,GACtCgF,EAAMsuE,gBAAgBxtB,EAAgBhyD,QAEtCu/E,GAAoB,IAIxB,OACE,oCACE,kBAAC,GAAD,KACE,yBAAKpuE,UAAU,sBAAsBwB,MAAO,CAAEM,OAAQ,MAAO0yC,UAAW,OAAQrW,oBArClE,WAClB,IAAIy9B,EAAoB,GACxB,GAAI77D,EAAMpJ,0BAGR,IAFA,IAAI41C,EAAUxsC,EAAMpJ,0BAA0BlF,OAC1CoqE,EAAa,IAAMtvB,EACd5yB,EAAI,EAAGA,EAAI4yB,EAAS5yB,IAC3BiiD,GAAqBC,EAAWx1D,WAAa,KAGjD,OAAOu1D,EA4BkGE,KAClG/7D,EAAMpJ,0BAA0BkT,KAAI,SAAA9O,GAAI,OACvC,yBAAKiF,UAAU,kCACb,4BAAKjF,EAAKnK,OAAOwkB,YAChBra,EAAKnK,OAAOL,YAAYuiB,SACvB,yBAAK9S,UAAU,mCACZoT,qCAA0BrY,EAAKnK,OAAOL,kBAM9CwP,EAAMpJ,0BAA0BkT,KAAI,SAAC9O,EAAMoL,GAAP,OACnC,yBAAKnG,UAAU,kCACXD,EAAMlJ,eAAiBkJ,EAAMlJ,cAAcsP,IAAQpG,EAAMlJ,cAAcsP,GAAK1U,OAAS,EACrF,yBAAK+P,MAAO,CAAEgzC,UAAW,OAAQZ,SAAU,UACzC,kBAAC,GAAD,CACE7sB,QAAShnB,EAAMlJ,cAAcsP,GAC7Bmf,YAAa,kBACbgC,mBAAoB,SAACqM,GAAD,OAAU4nC,EAAqB,MAAKD,EAAN,eAA0Bn1D,EAAMwtB,MAClF1M,eAAgBq0C,EAAkBn1D,MAGnCpG,EAAMlJ,eAAiBkJ,EAAMlJ,cAAcsP,IAA4C,IAApCpG,EAAMlJ,cAAcsP,GAAK1U,OAC/E,yBAAK+P,MAAO,CAAEgzC,UAAW,OAAQZ,SAAU,QAAS/G,UAAW,WAC7D,uBAAGrrC,MAAO,CAAES,OAAQ,MAAQlC,EAAMlJ,cAAcsP,GAAK,GAAGxV,QAG1D,yBAAK6Q,MAAO,CAAEgzC,UAAW,OAAQZ,SAAU,QAAS/G,UAAW,WAC7D,uBAAGrrC,MAAO,CAAES,OAAQ,MAApB,qBAMPlC,EAAMpJ,0BAA0BkT,KAAI,SAAC9O,EAAMoL,GAAP,OACnC,yBAAKnG,UAAU,kCACb,6BACGjF,EAAKnK,OAAO0iC,YACX,uBAAG9xB,MAAO,CAAES,OAAQ,MACjBlC,EAAMtT,6BAA6Bqc,WADtC,OACsD/I,EAAMtT,6BAA6Bmc,UADzF,0BAIA,uBAAGpH,MAAO,CAAES,OAAQ,YAM3BlC,EAAMpJ,0BAA0BkT,KAAI,SAAC9O,EAAMoL,GAAP,OACnC,yBAAKnG,UAAU,gDACb,8BACKjF,EAAKnK,OAAO0iC,aA7FlBvzB,EAAMtT,8BACbsT,EAAMtT,6BAA6Bqc,WAAa/I,EAAMtT,6BAA6Bmc,UA6FvE,yBAAKpH,MAAO,CAAEqrC,UAAW,SAAU2T,WAAY,SAC7C,yBAAKxgD,UAAU,OACb,kBAAC,GAAD,CACEkC,KAAM,SACN1U,GAAG,SACHuN,KAAK,SACLkF,QAAS,WACPu7D,EAA0Br1D,IAE5BnG,UAAW,qBAMjB,uBAAGwB,MAAO,CAAEC,MAAO,MAAO+yC,UAAW,SAArC,uCAMT25B,GACC,oCACE,6BACA,uBAAG3sE,MAAO,CAAEqrC,UAAW,SAAUprC,MAAO,QAGpCuN,EAAE,4CAOZ,kBAAC,GAAD,KACE,yBAAKxN,MAAO,CAAEgzC,UAAW,SACtBz0C,EAAMpJ,0BAA0BkT,KAAI,SAAC9O,EAAMoL,GAAP,OACnC,yBAAKnG,UAAU,gBAAgBwB,MAAO2E,EAAOpG,EAAMpJ,0BAA0BlF,OAAS,EAAK,CAAEsvD,aAAc,aAAWp2D,GACpH,wBAAI6W,MAAO,CAAEqrC,UAAW,WAAa9xC,EAAKnK,OAAOwkB,YAChDra,EAAKnK,OAAOL,YAAYuiB,SACvB,yBAAK9S,UAAU,mCACZoT,qCAA0BrY,EAAKnK,OAAOL,cAIzCwP,EAAMlJ,eAAiBkJ,EAAMlJ,cAAcsP,IAAQpG,EAAMlJ,cAAcsP,GAAK1U,OAAS,EACrF,yBAAK+P,MAAO,CAAEgzC,UAAW,SACvB,kBAAC,GAAD,CACEztB,QAAShnB,EAAMlJ,cAAcsP,GAC7Bmf,YAAa,kBACbgC,mBAAoB,SAACqM,GAAD,OAAU4nC,EAAqB,MAAKD,EAAN,eAA0Bn1D,EAAMwtB,MAClF1M,eAAgBq0C,EAAkBn1D,MAGnCpG,EAAMlJ,eAAiBkJ,EAAMlJ,cAAcsP,IAA4C,IAApCpG,EAAMlJ,cAAcsP,GAAK1U,OAC/E,yBAAK+P,MAAO,CAAEgzC,UAAW,OAAQZ,SAAU,QAAS/G,UAAW,WAC7D,uBAAGrrC,MAAO,CAAES,OAAQ,MAAQlC,EAAMlJ,cAAcsP,GAAK,GAAGxV,QAG1D,yBAAK6Q,MAAO,CAAEgzC,UAAW,OAAQZ,SAAU,QAAS/G,UAAW,WAC7D,uBAAGrrC,MAAO,CAAES,OAAQ,MAApB,iBAIJ,yBAAKT,MAAO,CAAEqrC,UAAW,SAAU2T,WAAY,UAC1CzlD,EAAKnK,OAAO0iC,aACbvzB,EAAMtT,6BAA6Bqc,WAAa/I,EAAMtT,6BAA6Bmc,UACnF,6BACE,kBAAC,GAAD,CACE1G,KAAM,SACN1U,GAAG,SACHuN,KAAK,SACLkF,QAAS,WACPu7D,EAA0Br1D,IAE5BnG,UAAW,mBAEb,6BACGjF,EAAKnK,OAAO0iC,YACX,uBAAG9xB,MAAO,CAAES,OAAQ,MACjBlC,EAAMtT,8BAAgCsT,EAAMtT,6BAA6Bqc,WAD5E,OAC4F/I,EAAMtT,8BAAgCsT,EAAMtT,6BAA6Bmc,UADrK,0BAIA,uBAAGpH,MAAO,CAAES,OAAQ,SAK1B,uBAAGT,MAAO,CAAEC,MAAO,MAAO+yC,UAAW,SAArC,4CE2BHt0B,mBA3MuC,SAACngB,GACvCA,EAANiP,EADwD,IAAD,EAEbxL,oBAAkB,GAFL,oBAErC8qE,GAFqC,WAIzDC,EAA6B,SAACh/D,GAC9BA,EAAEsG,OAAOqT,SACXolD,GAAqB,GACrBvuE,EAAMyuE,yBAAwB,KAE9BF,GAAqB,GACrBvuE,EAAMyuE,yBAAwB,KAI5BC,EAAY,SAACx8D,GACjB,IAAIy8D,EAAU,IAAIx/E,KAAK+iB,GAEvB,OADAy8D,EAAQnrB,QAAQtxC,EAAK6X,UAAY,IAC1B4kD,GAGT,OACE,oCACE,yBAAKltE,MAAO,CAAE08B,QAAS,QAASp8B,OAAQ,SACtC,kBAAC,GAAD,CACE3B,KAAMwC,KACNzC,YAAaH,EAAM4uE,aACnB3uE,UAAU,cACVI,KAAM,QAIV,6BACE,kBAAC,GAAD,KACE,yBAAKJ,UAAU,kBACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cACb,wBAAIwB,MAAO,CAAES,OAAQ,QAAU,8BAInC,6BACE,yBAAKzU,GAAG,sBACN,yBAAKA,GAAG,oBACN,2BAAOwS,UAAU,iBACf,wBAAIA,UAAU,qBACZ,wBAAIA,UAAU,wBACZ,+BACE,4BACE,4BAAI,qCACJ,4BAAKD,EAAM6uE,aAGb,4BACE,4BAAI,sCACJ,4BAAK7uE,EAAM8uE,cAGb,4BACE,4BAAI,gDACJ,4BAAK9uE,EAAM+uE,qBAGb,4BACE,4BAAI,8CACJ,4BAAK/uE,EAAMlR,cAGb,4BACE,4BAAI,0CACJ,4BACE,kBAACw2B,GAAD,CACEle,KAAK,aACLgH,SAAUpO,EAAMgvE,kBAChBzpD,YAAY,aACZjF,SAAUtgB,EAAM9R,UAChBs3B,SAAS,EACTpW,QAASpP,EAAMivE,kBACf3/D,QAASo/D,EAAU1uE,EAAMivE,uBAK/B,4BACE,4BAAI,qDACJ,4BACE,2BACExhF,GAAG,qBACH2Z,KAAK,qBACLpM,KAAK,WACLqgE,gBAAgB,EAChBjtD,SAAUogE,QAOpB,wBAAIvuE,UAAU,wBACO,KAAlBD,EAAMs9D,SACL,yBAAK7nD,IAAKzV,EAAMs9D,QAAStnD,IAAI,iBAAiB/V,UAAU,gBAAgB8B,OAAO,eAQ3F,yBAAKN,MAAO,CAAEQ,MAAO,SACnB,kBAAC,GAAD,CACExU,GAAG,aACHyS,QAASF,EAAMkvE,UACf/sE,KAAM,UACNF,MAAM,QACNhC,UAAU,wCAOpB,kBAAC,GAAD,KACE,yBAAKA,UAAU,iBACb,yBAAKA,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,gBACb,wBAAIwB,MAAO,CAAES,OAAQ,QAAU,8BAInC,yBAAKT,MAAO,CAAEqrC,UAAW,WACJ,KAAlB9sC,EAAMs9D,SACL,yBAAK7nD,IAAKzV,EAAMs9D,QAAStnD,IAAI,iBAAiB/V,UAAU,gBAAgB8B,OAAO,WAInF,yBAAKN,MAAO,CAAEgzC,UAAW,SACvB,2BAAOx0C,UAAU,gBAEf,6BACE,yBAAKA,UAAU,oCAAmC,qCAClD,yBAAKA,UAAU,sCAAsCD,EAAM6uE,aAG7D,6BACE,yBAAK5uE,UAAU,oCAAmC,sCAClD,yBAAKA,UAAU,sCAAsCD,EAAM8uE,cAG7D,6BACE,yBAAK7uE,UAAU,oCAAmC,gDAClD,yBAAKA,UAAU,sCAAsCD,EAAM+uE,qBAG7D,6BACE,yBAAK9uE,UAAU,oCAAmC,8CAClD,yBAAKA,UAAU,sCAAsCD,EAAMlR,cAG7D,6BACE,yBAAKmR,UAAU,oCAAmC,2CAClD,yBAAKA,UAAU,sCACb,kBAACqlB,GAAD,CACEle,KAAK,aACLgH,SAAUpO,EAAMgvE,kBAChBzpD,YAAY,aACZjF,SAAUtgB,EAAM9R,UAChBs3B,SAAS,EACTpW,QAASpP,EAAMivE,kBACf3/D,QAASo/D,EAAU1uE,EAAMivE,uBAK/B,6BACE,yBAAKhvE,UAAU,oCAAmC,sDAClD,yBAAKA,UAAU,sCACb,2BACExS,GAAG,qBACH2Z,KAAK,qBACLpM,KAAK,WACLqgE,gBAAgB,EAChBjtD,SAAUogE,QAOpB,yBAAK/sE,MAAO,CAAEqrC,UAAW,SAAU2H,UAAW,SAC5C,kBAAC,GAAD,CACEhnD,GAAG,aACHyS,QAASF,EAAMkvE,UACf/sE,KAAM,UACNlC,UAAU,wBACVgC,MAAM,iBC7NTktE,GAAb,YACE,WAAY19C,GAAmB,oBAC7B,IAEIzrB,EAAc,CAAEyrB,YAHQ,mDACV,2BAIPzrB,IANf,4BAAuCD,ICA1BqpE,GAAb,YACE,WAAYC,GAAiC,IAAD,6BAE1C,8CADY,iCAGP/pE,KAAO+pE,EAJ8B,EAD9C,4BAA+C7oE,ICAlC8oE,GAAb,YACI,WAAY79C,GAAmB,oBAC3B,IAAI/sB,EAAc,0BAA4B+sB,EADpB,mDAGpB/sB,IAJd,4BAAyD8B,K,SJ4BpD2nE,O,mCAAAA,I,sBAAAA,Q,KAKL,IA6Me9tB,qBACblgC,eACA0U,IACA3d,aAvBsB,SAACzgB,GACvB,MAAO,CACLG,0BAA2BH,EAAMoG,OAAOjG,0BACxCE,cAAeL,EAAMoG,OAAO/F,cAC5BpK,6BAA8B+J,EAAM+F,KAAK9P,6BACzCoM,aAAcrC,EAAMmH,YAAY9E,iBAIT,SAACmM,GAC1B,MAAO,CACLo4B,6BAA8B,WAC5Bp4B,EAASytB,IAA6B,KAExC/pB,+BAAgC,WAC9B1D,EAAS0D,WAKA03C,EA3MyC,SAACrgD,GACvD,IAAMkiC,EAHe,IAAIC,gBAAgBC,cAAcvd,QAEgC,EAE/DphB,mBAAoB0qE,GAAUxmB,gBAFiC,oBAEhF3sC,EAFgF,KAE1Eu0D,EAF0E,OAGvD9rE,qBAHuD,oBAGhFguB,EAHgF,KAGtE+9C,EAHsE,OAI3C/rE,qBAJ2C,oBAIhFq9C,EAJgF,KAIhE2uB,EAJgE,OAKjDhsE,qBALiD,oBAKhF3U,EALgF,KAKnE4gF,EALmE,OAMjCjsE,qBANiC,oBAMhFksE,EANgF,KAM3DC,EAN2D,OAOnCnsE,qBAPmC,oBAOhFsrE,EAPgF,KAO5Dc,EAP4D,OAQ3DpsE,qBAR2D,oBAQhFk+C,EARgF,KAQxEmuB,EARwE,OASjCrsE,qBATiC,oBAShFssE,EATgF,KAS3DC,EAT2D,OAUrCvsE,oBAAkB,GAVmB,oBAUhFwsE,EAVgF,KAU7D1B,EAV6D,OAWjC9qE,oBAAkB,GAXe,oBAWhFysE,EAXgF,KAW3DC,EAX2D,OAY/B1sE,oBAAkB,GAZa,oBAYhF2sE,EAZgF,KAY1DC,EAZ0D,OAazC5sE,mBAAe,IAAItU,MAbsB,oBAahFmhF,EAbgF,KAa/DC,GAb+D,QAezD9sE,qBAfyD,sBAehF65D,GAfgF,MAevEC,GAfuE,SAgB5D95D,qBAhB4D,kCAkBvFK,qBAAU,WACR9D,EAAM2I,iCACN3I,EAAMq9B,+BAENuyC,EAAuB,IAAIzgF,MAE3B,IAAM1B,EAAKy0C,EAAMz9B,IAAI,aACfhX,IACJ+hF,EAAY/hF,GACZ+iF,GAAc/iF,IAGhB,IAAM6iF,EAAkBpuC,EAAMz9B,IAAI,mBAClC,GAAI6rE,EAAiB,CACnB,IAAIjsC,EAAU,IAAIl1C,KAAKmhF,GACvBjsC,EAAQmf,QAAQnf,EAAQta,UAAY,GACpCwmD,GAAmBlsC,GACnBurC,EAAuBvrC,MAGxB,IAEHvgC,qBAAU,WACR05D,OACC,CAAC/rC,IAEJ,IAAM+rC,GAAmB,kBAAMn5D,GAAkB,IAAIq8D,GAAuBjvC,IACzEnpB,MAAK,SAAA1a,GACJ2vE,GAAW3vE,EAAO6D,KAAKmsE,aAExBh5D,OAAM,gBAoBHsqE,GAAS,uCAAG,4BAAAxhF,EAAA,2DACZ+jC,GACF3iC,GACA6gF,GACA7uB,GAJc,uBAMRhtB,EAA0B,CAC9BrC,SAAUA,EACV3iC,YAAaA,EACbZ,UAAWyhF,EACX5hF,2BAA4B+yD,GAVhB,SAaR37C,GAA0C,IAAImqE,GAAoC79C,IACrFnpB,MAAK,SAAAa,GACJhE,GAAgC,IAAIiqE,GAA0Bt7C,IAC3DxrB,MAAK,SAAAa,GACJ8mE,EAAoBI,GAAwB,GAAQF,GAAuB,MAE5EvrE,OAAM,SAAA4K,UAEV5K,OAAM,SAAA4K,GACL6gE,GAAwB,MAtBd,2CAAH,qDA8BTG,GAAgB,SAAC/+C,GAAD,OAAsBptB,GAAe,IAAI8qE,GAAkB19C,IAC9EnpB,MAAK,SAAA1a,GACJkiF,EAAUliF,EAAO6D,SAElBmT,OAAM,SAAC4K,GAAO/G,QAAQC,IAAI8G,OAE7B,OACE,oCACG0gE,GAAuB,kBAAC,IAAD,CAAUviE,GjT3IR,mBiT6IxByiE,GACA,kBAAC,IAAD,CACEziE,GAAI,CACFynB,SjTpIsB,ciTqItB3+B,MAAO,CAAEg7B,SAAUA,MAKzB,yBAAKxxB,UAAU,oBACb,kBAAC,GAAD,MACID,EAAMlH,cACN,oCACE,wBAAImH,UAAU,uBAAuB,oBACrC,yBAAKA,UAAU,yBAAf,gEAON,kBAAC,GAAD,CACEsM,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGX,yBAAKhN,UAAU,kBAEX+a,IAASmzD,GAAUxmB,gBACnB3nD,EAAMlJ,eACNkJ,EAAMpJ,2BACNoJ,EAAMtT,8BACN+kC,GACA,kBAAC,GAAD,CACE76B,0BAA2BoJ,EAAMpJ,0BACjCE,cAAekJ,EAAMlJ,cACrBpK,6BAA8BsT,EAAMtT,6BACpC4hF,gBAlGmB,SAACmC,EAA0B3hF,GAC1D2gF,EAAkBgB,GAClBf,EAAe5gF,EAAYI,OAC3B8gF,EAAuBlhF,EAAY8B,OACnC2+E,EAAQpB,GAAUhK,SAClB,IAAMuM,EAA4B1wE,EAAMpJ,0BACrCqV,QAAO,SAAAjR,GAAI,OAAIA,EAAKwf,IAAI/sB,KAAOgjF,KAClCZ,EAAsBa,EAA0B,GAAG7/E,OAAOwkB,eAgGhD2F,IAASmzD,GAAUhK,SACnB1yC,GACA3iC,GACA6gF,GACAZ,GACAptB,GACAouB,GACA,kBAACY,GAAD,CACEl/C,SAAUA,EACVo9C,WAAYltB,EAAO7xD,UAAY,IAAM6xD,EAAO5xD,SAC5C++E,YAAantB,EAAO1xD,MAAQ0xD,EAAO1xD,MAAQ,GAC3C8+E,mBAAoBA,EACpB6B,aAAc9hF,EACdZ,UAAWyhF,EACXX,kBA3GY,SAAC9gF,GACzB0hF,EAAuB1hF,IA2GX0gF,aAxGc,WAC1BW,EAAQpB,GAAUxmB,iBAwGN74D,YAAaihF,EACbb,UAAWA,GACXT,wBAAyB,SAACv/E,GAAoBq/E,EAAqBr/E,IACnEouE,QAASA,GACT2R,kBAAmBqB,WKhNtBO,GAAb,YACE,WAAYp/C,GAAmB,uEACvB,0BAA2B,CAAEA,cAFvC,4BAAkD1rB,I,6jBCoBlD,IA2LgB+qE,GA3LgD,SAAC9wE,GAAqC,IAAD,EAC3EyD,qBAD2E,oBAC5FouB,EAD4F,KACtFi8C,EADsF,KAGnGhqE,qBAAU,WACJ9D,EAAM+wE,iBACRjD,EAAQkD,EAAUhxE,EAAM+wE,oBAEzB,IAEHjtE,qBAAU,WACR,GAAI+tB,EAAM,CACR7xB,EAAMixE,YAAYC,EAAUr/C,IAC5B,IACIs/C,EADAC,GAAc,EAElB,IAAKD,KAAKt/C,EACJA,EAAKs/C,GAAGniF,OAAO0C,OAAS,IAC1B0/E,GAAc,GAElBpxE,EAAMqxE,iBAAiBD,MAExB,CAACv/C,IAEJ/tB,qBAAU,WACR,GAAI9D,EAAMsxE,gBACR,GAA8B,mBAA1BtxE,EAAMsxE,gBAAsC,CAC9C,IAAI/iF,EAAmBsjC,EAAM5hC,MAC7B1B,EAAMS,OAAOsU,KAAKtD,EAAMsxE,iBACxBxD,EAAQ,MAAKj8C,EAAN,CAAa5hC,MAAO1B,UAExB,GAA8B,oBAA1ByR,EAAMsxE,gBAAuC,CACpD,IAAIlmF,EAAyBymC,EAAM3hC,YACnC9E,EAAY4D,OAAOsU,KAAKtD,EAAMsxE,iBAC9BxD,EAAQ,MAAKj8C,EAAN,CAAa3hC,YAAa9E,QAGpC,CAAC4U,EAAMsxE,kBAEV,IAAMN,EAAY,SAACl9C,GACjB,IAAMjC,EAAO,GAMb,OALAA,EAAK/hC,UAAY,CAAEd,OAAQ,GAAIE,MAAO4kC,EAAIhkC,WAC1C+hC,EAAK9hC,SAAW,CAAEf,OAAQ,GAAIE,MAAO4kC,EAAI/jC,UACzC8hC,EAAK5hC,MAAQ,CAAEjB,OAAQ,GAAIE,MAAO4kC,EAAI7jC,OACtC4hC,EAAK3hC,YAAc,CAAElB,OAAQ,GAAIE,MAAO4kC,EAAI5jC,aAC5C2hC,EAAK7hC,YAAc,CAAEhB,OAAQ,GAAIE,MAAO4kC,EAAI9jC,aACrC6hC,GAGHq/C,EAAY,SAACr/C,GACjB,IAAMiC,EAAM,GAMZ,OALAA,EAAIhkC,UAAY+hC,EAAK/hC,UAAUZ,MAC/B4kC,EAAI/jC,SAAW8hC,EAAK9hC,SAASb,MAC7B4kC,EAAI7jC,MAAQ4hC,EAAK5hC,MAAMf,MACvB4kC,EAAI5jC,YAAc2hC,EAAK3hC,YAAYhB,MACnC4kC,EAAI9jC,YAAc6hC,EAAK7hC,YAAYd,MAC5B4kC,GAGT,OACE,oCACGjC,GACC,6BACE,kBAAC,GAAD,KACE,yBAAK5xB,UAAU,OACb,yBAAKA,UAAU,cACb,kBAAC,GAAD,CACEmH,KAAK,YACL+yD,UAAWtoC,EAAK/hC,UAChBkqE,QAAS,SAAC9qE,EAAY+E,EAAmBjF,GAAhC,OAAqD8+E,EAAQ,MAAKj8C,EAAN,CAAY/hC,UAAW,CAAEZ,MAAOA,EAAOF,OAAQA,OACpHkrE,oBAAoB,iDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,aAAckwC,UAAWrzB,OAG3F,kBAAC,GAAD,CACE7c,KAAK,WACL+yD,UAAWtoC,EAAK9hC,SAChBiqE,QAAS,SAAC9qE,EAAY+E,EAAmBjF,GAAhC,OAAqD8+E,EAAQ,MAAKj8C,EAAN,CAAY9hC,SAAU,CAAEb,MAAOA,EAAOF,OAAQA,OACnHkrE,oBAAoB,gDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,aAAckwC,UAAWrzB,QAI7F,yBAAKhkB,UAAU,cACb,kBAAC,GAAD,CACEmH,KAAK,QACL+yD,UAAWtoC,EAAK5hC,MAChB+pE,QAAS,SAAC9qE,EAAY+E,EAAmBjF,GAAhC,OAAqD8+E,EAAQ,MAAKj8C,EAAN,CAAY5hC,MAAO,CAAEf,MAAOA,EAAOF,OAAQA,OAChHkrE,oBAAoB,mDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,UAAWkwC,UAAWnzB,OAGxF,kBAAC,GAAD,CACE/c,KAAK,cACL+yD,UAAWtoC,EAAK3hC,YAChB8pE,QAAS,SAAC9qE,EAAY+E,EAAmBjF,GAAhC,OAAqD8+E,EAAQ,MAAKj8C,EAAN,CAAY3hC,YAAa,CAAEhB,MAAOA,EAAOF,OAAQA,OACtHkrE,oBAAoB,sDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,YAAakwC,UAAW1yB,QAIjD,yBAAK3kB,UAAU,cACb,kBAAC,GAAD,CACEmH,KAAK,cACL+yD,UAAWtoC,EAAK7hC,YAChBgqE,QAAS,SAAC9qE,EAAYkY,EAAWpY,GAAxB,OAA6C8+E,EAAQ,MAAKj8C,EAAN,CAAY7hC,YAAa,CAAEd,MAAOA,EAAOF,OAAQA,OAC9GkrE,oBAAoB,mDACpBD,eAAe,QACfG,SAAU,EACVC,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,kBAAmBkwC,UAAWlzB,KACnD9U,QAAS,IAAIngB,UAMrB,kBAAC,GAAD,KACE,yBAAK8Q,UAAU,WACb,kBAAC,GAAD,CACEmH,KAAK,YACL+yD,UAAWtoC,EAAK/hC,UAChBkqE,QAAS,SAAC9qE,EAAY+E,EAAmBjF,GAAhC,OAAqD8+E,EAAQ,MAAKj8C,EAAN,CAAY/hC,UAAW,CAAEZ,MAAOA,EAAOF,OAAQA,OACpHkrE,oBAAoB,iDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,aAAckwC,UAAWrzB,OAG3F,kBAAC,GAAD,CACE7c,KAAK,WACL+yD,UAAWtoC,EAAK9hC,SAChBiqE,QAAS,SAAC9qE,EAAY+E,EAAmBjF,GAAhC,OAAqD8+E,EAAQ,MAAKj8C,EAAN,CAAY9hC,SAAU,CAAEb,MAAOA,EAAOF,OAAQA,OACnHkrE,oBAAoB,gDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,aAAckwC,UAAWrzB,OAG3F,kBAAC,GAAD,CACE7c,KAAK,QACL+yD,UAAWtoC,EAAK5hC,MAChB+pE,QAAS,SAAC9qE,EAAY+E,EAAmBjF,GAAhC,OAAqD8+E,EAAQ,MAAKj8C,EAAN,CAAY5hC,MAAO,CAAEf,MAAOA,EAAOF,OAAQA,OAChHkrE,oBAAoB,mDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,WAAYkwC,UAAWtzB,IAAY,CAAE5c,KAAM,UAAWkwC,UAAWnzB,OAGxF,kBAAC,GAAD,CACE/c,KAAK,cACL+yD,UAAWtoC,EAAK3hC,YAChB8pE,QAAS,SAAC9qE,EAAY+E,EAAmBjF,GAAhC,OAAqD8+E,EAAQ,MAAKj8C,EAAN,CAAY3hC,YAAa,CAAEhB,MAAOA,EAAOF,OAAQA,OACtHkrE,oBAAoB,sDACpBD,eAAe,QACfI,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,YAAakwC,UAAW1yB,OAG/C,kBAAC,GAAD,CACExd,KAAK,cACL+yD,UAAWtoC,EAAK7hC,YAChBgqE,QAAS,SAAC9qE,EAAYkY,EAAWpY,GAAxB,OAA6C8+E,EAAQ,MAAKj8C,EAAN,CAAY7hC,YAAa,CAAEd,MAAOA,EAAOF,OAAQA,OAC9GkrE,oBAAoB,mDACpBD,eAAe,QACfG,SAAU,EACVC,WAAYr6D,EAAMq6D,WAClBN,WAAY,CAAC,CAAE3yD,KAAM,kBAAmBkwC,UAAWlzB,KACnD9U,QAAS,IAAIngB,YClMhBoiF,GAAb,YACE,WAAYC,EAAiD//C,GAAmB,IAAD,8BAE7E,8CAAM,oCAAsCA,KACvCnsB,KAAOksE,EAHiE,EADjF,4BAAqDhrE,ICwGtCirE,GAtFqBhjE,IAAMqwD,YAAwD,SAAC9+D,EAAO0zC,GAAS,IAAD,EAClEjwC,qBADkE,oBACzGiuE,EADyG,KACxFC,EADwF,OAExEluE,oBAAkB,GAFsD,oBAEzGmuE,EAFyG,KAE3FC,EAF2F,OAG1DpuE,oBAAkB,GAHwC,oBAGpFquE,GAHoF,aAIpEruE,oBAAkB,GAJkD,oBAIzGsuE,EAJyG,KAIzFC,EAJyF,OAKpEvuE,oBAAkB,GALkD,oBAKzGwuE,EALyG,KAKzFC,EALyF,OAMlEzuE,qBANkE,oBAMzG6tE,EANyG,KAMxFa,EANwF,KAQhHruE,qBAAU,WACRO,GAA8B,IAAIwsE,GAA6B7wE,EAAMyxB,WAClEnpB,MAAK,SAAAa,GACJwoE,EAAmBxoE,EAAE1X,SAEtBmT,OAAM,SAAA4K,GAAOsiE,GAAuB,QACtC,IAmCH,OAhBAzS,8BAAoB3rB,GAAK,iBAAO,CAC9BN,KAD8B,WAE5B3qC,QAAQC,IAAI,iDACRupE,EACGL,GAGHI,GAAkB,GAClBhyE,EAAMoyE,mBAxBRV,GACFvsE,GAAK,IAAIosE,GAAgCG,EAAiB1xE,EAAMyxB,WAC7DnpB,MAAK,SAAAa,GAAC,OAAInJ,EAAMqyE,oBAChBztE,OAAM,SAAA4K,GACLxP,EAAMqhE,cACN2Q,GAAkB,GAClBG,EAAmB3iE,EAAE1K,SAASrT,SAqBhCuO,EAAMqyE,sBAMV,qCACIX,GAAmB,kBAAC,GAAD,MAEpBA,GACC,6BACE,kBAAC,GAAD,KACE,yBAAKzxE,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cAEb,wBAAIxS,GAAG,UAAUgU,MAAO,CAAES,OAAQ,QAAlC,uBAKN,kBAAC,GAAD,KACE,yBAAKjC,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,OAAQvM,UAAW,SAC7D,yBAAKx0C,UAAU,gBAEb,wBAAIxS,GAAG,UAAUgU,MAAO,CAAES,OAAQ,QAAlC,uBAKN,kBAAC,GAAD,CACE6uE,gBAAiBW,EACjBrX,WAAY0X,EACZd,YAhDU,SAAC/hF,GACnByiF,EAAmBziF,GACnBgjF,GAAkB,IA+CVb,iBAAkB,SAACniF,GAAD,OAAW2iF,EAAgB3iF,IAC7CoiF,gBAAiBA,SC5BdgB,GAtD+B,SAACtyE,GAC7C,OACE,oCACE,kBAAC,GAAD,KACGA,EAAMuyE,gBACL,kBAAC,GAAD,CACE9kF,GAAG,UACH0U,KAAMnC,EAAMwyE,eACZx3E,KAAK,SACLkF,QAASF,EAAMyyE,YACfxyE,UAAU,4BAIbD,EAAM0yE,oBACL,kBAAC,GAAD,CACEvwE,KAAMnC,EAAM2yE,mBACZllF,GAAG,kBACHuN,KAAK,SACLyF,SAAUT,EAAM4yE,sBAChB1yE,QAASF,EAAM6yE,gBACf5yE,UAAU,8BACV6B,UAAW9B,EAAM8yE,6BAKvB,kBAAC,GAAD,KACG9yE,EAAM0yE,oBACL,kBAAC,GAAD,CACEvwE,KAAMnC,EAAM2yE,mBACZllF,GAAG,kBACHuN,KAAK,SACLyF,SAAUT,EAAM4yE,sBAChB1yE,QAASF,EAAM6yE,gBACf5yE,UAAU,iBACV6B,UAAW9B,EAAM8yE,4BAIpB9yE,EAAMuyE,gBACL,kBAAC,GAAD,CACE9kF,GAAG,UACH0U,KAAMnC,EAAMwyE,eACZx3E,KAAK,SACLkF,QAASF,EAAMyyE,YACfxyE,UAAU,sBC5DT8yE,GAAb,YACE,WAAYthD,GAAmB,uEACvB,kBAAmB,CAAEA,cAF/B,4BAAuC1rB,I,6jBCWvC,IAsLeoa,mBAtLmC,SAACngB,GACnCA,EAANiP,EADoD,IAGtD+tD,EAAmB,SAACxtD,EAAkCiM,GAC1D,IAAMrV,EAAMoJ,EAAEsG,OAAO1O,KACrB,OAAQqU,GACN,KAAK,EACHzb,EAAMgzE,iBAAN,MAA4BhzE,EAAM08D,SAAlC,eAA6Ct2D,EAAMoJ,EAAEsG,OAAO5mB,SAC5D,MACF,KAAK,EACH8Q,EAAMizE,iBAAN,MAA4BjzE,EAAM08D,SAAlC,eAA6Ct2D,EAAMoJ,EAAEsG,OAAO5mB,WAKlE,OACE,oCAEE8Q,EAAMkzE,cACH,oCACD,kBAAC,GAAD,KAKI,wIAGF,0CACA,2BAAOjzE,UAAU,iBACf,+BACE,4BACE,mDACA,uDAEF,4BACE,wBAAIwB,MAAO,CAAEQ,MAAO,QAClB,2BACEmF,KAAK,eACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAO8Q,EAAM08D,SAASnsE,aACtB0P,UAAU,+BAId,wBAAIwB,MAAO,CAAEQ,MAAO,QAClB,2BACEmF,KAAK,cACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAO8Q,EAAM08D,SAASjsE,YACtBwP,UAAU,kCAMpB,0CACA,2BAAOA,UAAU,iBACf,+BACE,4BACE,mDACA,uDAEF,4BACE,wBAAIwB,MAAO,CAAEQ,MAAO,QAClB,2BACEmF,KAAK,eACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAO8Q,EAAM48D,SAASrsE,aACtB0P,UAAU,+BAId,wBAAIwB,MAAO,CAAEQ,MAAO,QAClB,2BACEmF,KAAK,cACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAO8Q,EAAM48D,SAASnsE,YACtBwP,UAAU,iCAMlB,+BAUJ,kBAAC,GAAD,KAKI,wIAEF,0CACA,2BAAOA,UAAU,iBACf,+BACE,4BACE,oDAEF,4BACE,4BACE,2BACEmH,KAAK,eACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAO8Q,EAAM08D,SAASnsE,aACtB0P,UAAU,gCAIhB,4BACE,uDAEF,4BACE,4BACE,2BACEmH,KAAK,cACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAO8Q,EAAM08D,SAASjsE,YACtBwP,UAAU,kCAMpB,0CACA,2BAAOA,UAAU,iBACf,+BACE,4BACE,oDAEF,4BACE,4BACE,2BACEmH,KAAK,eACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAO8Q,EAAM48D,SAASrsE,aACtB0P,UAAU,gCAIhB,4BACE,uDAEF,4BACE,4BACE,2BACEmH,KAAK,cACLgH,SAAU,SAAAU,GAAK,OAAIkuD,EAAiBluD,EAAO,IAC3C5f,MAAO8Q,EAAM48D,SAASnsE,YACtBwP,UAAU,iCAKlB,gCAWN,oCACE,gGACA,uEC1LKkzE,GAAb,YACE,WAAYC,EAA6B3hD,GAAmB,IAAD,8BAEzD,8CAAM,4BAA8BA,KAC/BnsB,KAAO8tE,EAH6C,EAD7D,4BAA8C5sE,ICyG/B6sE,GA3Fc5kE,IAAMqwD,YAAiD,SAAC9+D,EAAO0zC,GAAS,IAAD,EAClEjwC,mBAAyB,CAAEhT,YAAa,GAAIF,aAAc,KADQ,oBAC3FmsE,EAD2F,KACjFC,EADiF,OAElEl5D,mBAAyB,CAAEhT,YAAa,GAAIF,aAAc,KAFQ,oBAE3FqsE,EAF2F,KAEjFC,EAFiF,OAGtDp5D,oBAAkB,GAHoC,oBAG3FwuE,EAH2F,KAG3EC,EAH2E,KAKlGpuE,qBAAU,WACRO,GAAiB,IAAI0uE,GAAkB/yE,EAAMyxB,WAC1CnpB,MAAK,SAAAa,GAAC,OAAImqE,EAAYnqE,EAAE1X,SACxBmT,OAAM,SAAA4K,GAAC,OAAI/G,QAAQC,IAAI8G,QACzB,IAEH,IAAM8jE,EAAc,SAACx/C,GACfA,EAAI3jC,UAAY2jC,EAAI3jC,SAASuB,OAAS,IACxCirE,EAAY7oC,EAAI3jC,SAAS,IACrB2jC,EAAI3jC,SAASuB,OAAS,GACxBmrE,EAAY/oC,EAAI3jC,SAAS,MAkB/BkvE,8BAAoB3rB,GAAK,iBAAO,CAC9BN,KAD8B,WAExB6+B,EAfe,WACrB,IAAMsB,EAAc,GAChB7W,EAASnsE,aAAamB,OAAS,GACjC6hF,EAAYjwE,KAAKo5D,GAEfE,EAASrsE,aAAamB,OAAS,GACjC6hF,EAAYjwE,KAAKs5D,GAEnBz3D,GAAK,IAAIguE,GAAyB,CAAEhjF,SAAUojF,GAAevzE,EAAMyxB,WAChEnpB,MAAK,SAAAa,GAAC,OAAInJ,EAAMqyE,oBAChBztE,OAAM,SAAA4K,GAAC,OAAIxP,EAAMqhE,iBAMhBmS,GAEAxzE,EAAMqyE,sBAeZ,OACE,oCACE,6BACE,kBAAC,GAAD,KACE,yBAAKpyE,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,SAC1C,yBAAK/gD,UAAU,cAGb,wBAAIxS,GAAG,UAAUgU,MAAO,CAAES,OAAQ,QAAlC,eAKN,kBAAC,GAAD,KACE,yBAAKjC,UAAU,MAAMwB,MAAO,CAAEu/C,aAAc,OAAQvM,UAAW,SAC7D,yBAAKx0C,UAAU,gBAGb,wBAAIxS,GAAG,UAAUgU,MAAO,CAAES,OAAQ,QAAlC,eAKN,6BACE,kBAAC,GAAD,CACEgxE,eAAe,EACfxW,SAAUA,EACVE,SAAUA,EACVoW,iBAtCa,SAAChoD,GACtB2xC,EAAY3xC,GACZknD,GAAkB,IAqCVe,iBAlCa,SAACjoD,GACtB6xC,EAAY7xC,GACZknD,GAAkB,IAiCV7X,YAAY,UC7ElByH,GACJ,CACE,CACE17D,IAAK,EACLqH,MAAO,sCACPrG,KAAM,mBAER,CACEhB,IAAK,EACLqH,MAAO,+BACPrG,KAAM,YAER,CACEhB,IAAK,EACLqH,MAAO,kCACPrG,KAAM,gBAwLGi5C,qBACblgC,eACA0U,IACA3d,aAPsB,SAACzgB,OAEE,SAACwO,OAEbo7C,EApL+B,SAACrgD,GAA4B,IAAD,EAC5CyD,mBAAiB,GAD2B,oBACjEihE,EADiE,KACzD+O,EADyD,OAE9BhwE,oBAAkB,GAFY,oBAEjEiwE,EAFiE,KAElDC,EAFkD,KAGhE1kE,EAAMjP,EAANiP,EACF2kE,EAAepkC,iBAAkB,MAJiC,EAKlB/rC,oBAAkB,GALA,oBAKjEysE,EALiE,KAK5CC,EAL4C,OAMV1sE,qBANU,oBAMjE8+D,EANiE,KAMxCsR,EANwC,OAOFpwE,qBAPE,oBAOjE++D,EAPiE,KAOpCsR,EAPoC,OAQhBrwE,qBARgB,oBAQjEg/D,EARiE,KAQ3CsR,EAR2C,KAWxEjwE,qBAAU,WACRqhD,EAAgB,mDAAoD,2BACjE78C,MAAK,SAAAa,GAAC,OAAI0qE,EAA2B1qE,MACxCg8C,EAAgB,iDAAkD,+BAC/D78C,MAAK,SAAAa,GAAC,OAAI2qE,EAA+B3qE,MAC5Cg8C,EAAgB,yCAA0C,wBACvD78C,MAAK,SAAAa,GAAC,OAAI4qE,EAAwB5qE,QACpC,IAEH,IAAMg8C,EAAe,uCAAG,WAAO/9C,EAAcxW,GAArB,eAAAlD,EAAA,+EAED4uC,GAAwBl1B,EAAMxW,GAF7B,cAEduR,EAFc,yBAGbA,GAHa,gCAKpBsG,QAAQC,IAAR,MALoB,yDAAH,wDAef24D,EAAc,WAClBsS,GAAiB,IAGbvB,EAAkB,WACtBuB,GAAiB,IAiBbtB,EAAiB,WACjB3N,EAAS,GAAK5C,GAASpwE,OACzBy+E,GAAuB,IAEvBwD,GAAiB,GACjBF,EAAU/O,EAAS,KAWvB,OACE,oCACGwL,GACC,kBAAC,IAAD,CACEviE,G/TlHsB,mB+TqH1B,yBAAK1N,UAAU,oBACb,wBAAIA,UAAU,uBAAuBgP,EAAE,qBACvC,yBAAKhP,UAAU,yBAAf,4DAKA,kBAAC,GAAD,CACEsM,SAAU,CACRC,YAAa,EACbG,WAAY,GACZG,SAAU,EACVG,QAAS,IAGVy3D,EAAS,GACR,kBAAC,GAAD,CACEtkE,KAAMwC,KACNzC,YArES,WACfukE,EAAS,GAAK,GAChB+O,EAAU/O,EAAS,IAoEXzkE,UAAU,cACVI,KAAM,OAIV,yBAAKJ,UAAU,cACZ6hE,GAASh4D,KAAI,SAACk6D,GAAD,OACZ,kBAAC,GAAD,CACEv2D,MAAOu2D,EAAEv2D,MACTrH,IAAK49D,EAAE59D,IACP1U,OAAQowE,GAASpwE,OACjB4uB,SAAU0jD,EAAE59D,MAAQs+D,EAAQpJ,QAAS0I,QAI1ChkE,EAAM5V,SAASqM,MAAMg7B,UACpB,yBAAKxxB,UAAU,kBACD,IAAXykE,GACC,kBAAC,GAAD,CACEjzC,SAAUzxB,EAAM5V,SAASqM,MAAMg7B,SAC/BiiB,IAAKkgC,EACLvB,eAAgBA,EAChBhR,YAAaA,EACb+Q,gBAAiBA,IAGT,IAAX1N,GACC,6BACE,kBAAC,GAAD,CACEjzC,SAAUzxB,EAAM5V,SAASqM,MAAMg7B,SAC/BiiB,IAAKkgC,EACLvB,eAAgBA,EAChBhR,YAAaA,EACb+Q,gBAAiBA,KAKV,IAAX1N,GACAnC,GACAC,GACAC,GACA,kBAAC,GAAD,CACE/uB,IAAKkgC,EACL1S,sBA7Ec,aA8EdI,uBA3Ee,aA4Ef7vC,SAAUzxB,EAAM5V,SAASqM,MAAMg7B,SAC/BijB,aAAc6tB,EACd/tB,iBAAkBguB,EAClB9sB,UAAW+sB,EACXrB,gBAAiBiR,EACjB/wD,aAAc,SAAC0H,KACflnB,UAAW4xE,EACXrS,YAAaA,KAMrB,yBAAKphE,UAAU,iBACb,kBAAC,GAAD,CACEuyE,eAAe,OACfG,mBAAmB,oBACnBE,gBAnHa,WACvBc,GAAiB,GACY,OAAzBC,EAAapjC,SACf/nC,QAAQC,IAAI,eACZkrE,EAAapjC,QAAQ4C,QAErBugC,GAAiB,IA8GTlB,YAxHS,WACnBtC,GAAuB,IAwHbuC,oBAAoB,EACpBH,gBAAgB,EAChBO,0BAA2BY,EAC3Bd,sBAAuBc,WC1BtBx8D,gBAZS,SAACzgB,GACvB,MAAO,CACLpL,UAAWoL,EAAM+F,KAAKnR,cAIC,SAAC4Z,GAC1B,MAAO,CACL+uE,aAAc,kBAAM/uE,EAAS,CAAEjK,K9VjLN,gB8ViL2BqB,SAAS,QAIlD6a,EA3IyB,SAAClX,GAAW,IAC1Cg0E,EAAiBh0E,EAAjBg0E,aAOR,OANAlwE,qBAAU,WACJrE,eAAeqG,QAAQ,iBACzBkuE,MAED,CAACA,IAGF,oCACE,kBAAC,IAAD,KACIh0E,EAAM3U,YAAc8b,GAAUgE,QAAQnL,EAAM3U,WAC5C,kBAAC,GAAD,CACEo4C,KhUxDgB,IgUyDhBwwC,OAAO,EACPvwC,mBAAoBwwC,KAGtB,kBAAC,GAAD,CACEzwC,KhU9DgB,IgU+DhBwwC,OAAO,EACPvwC,mBAAoB7G,KAIxB,kBAAC,IAAD,CAAO4G,KhUnEc,SgUmEM0wC,UAAWC,KACtC,kBAAC,IAAD,CAAO3wC,KAAMvjB,iBAA2Bi0D,UAAWC,KACnD,kBAAC,IAAD,CAAO3wC,KhUpE0B,qBgUoEM0wC,UAAWte,KAClD,kBAAC,IAAD,CAAOpyB,KhU/DqB,gBgU+DM0wC,UAAWlf,KAC7C,kBAAC,IAAD,CAAOxxB,KhU/DuB,kBgU+DM0wC,UAAW9a,KAC/C,kBAAC,IAAD,CAAO51B,KhU7DiB,YgU6DM0wC,UAAWjb,KACzC,kBAAC,IAAD,CAAOz1B,KhUvDiB,cgUuDM0wC,UAAWE,KACzC,kBAAC,IAAD,CAAO5wC,KAAMvjB,sBAA8Bi0D,UAAWE,KACtD,kBAAC,IAAD,CAAO5wC,KhUhD0B,0BgUgDM0wC,UAAWG,KAClD,kBAAC,IAAD,CAAO7wC,KAAMvjB,kCAAuCi0D,UAAWG,KAC/D,kBAAC,GAAD,KACE,kBAAC,GAAD,CACE7wC,KhU7EsB,cgU8EtBC,mBAAoBwH,KAEtB,kBAAC,GAAD,CACEzH,KhU9EyB,iBgU+EzBC,mBAAoBqmB,KAEtB,kBAAC,GAAD,CACEtmB,KhUpFoB,iBgUqFpBC,mBAAoBwhB,KAEtB,kBAAC,GAAD,CACEzhB,KhUvFqB,YgUwFrBC,mBAAoBub,KAEtB,kBAAC,GAAD,CACExb,KAAMvjB,GACNwjB,mBAAoB71B,KAEtB,kBAAC,GAAD,CACE41B,KhU1FgC,wBgU2FhCC,mBAAoB6wC,KAEtB,kBAAC,GAAD,CACE9wC,KhU7FoB,YgU8FpBC,mBAAoB8wC,KAEtB,kBAAC,GAAD,CACE/wC,KhU/FgC,wBgUgGhCC,mBAAoBywB,KAEtB,kBAAC,GAAD,CACE1wB,KhUlGyB,iBgUmGzBC,mBAAoB69B,KAEtB,kBAAC,GAAD,CACE99B,KhUnG2B,mBgUoG3BC,mBAAoB4jC,KAEtB,kBAAC,GAAD,CACE7jC,KhUzGqC,6BgU0GrCC,mBAAoB2hC,KAEtB,kBAAC,GAAD,CACE5hC,KhU5GsB,cgU6GtBC,mBAAoB+wC,KAEtB,kBAAC,GAAD,CACEhxC,KhUnG2B,oBgUoG3BC,mBAAoBgxC,KAEtB,kBAAC,GAAD,CACEjxC,KhUhH0B,mBgUiH1BC,mBAAoBixC,KAEtB,kBAAC,GAAD,CACElxC,KAAMvjB,2BACNwjB,mBAAoBixC,KAEtB,kBAAC,GAAD,CACElxC,KhUvH4B,qBgUwH5BC,mBAAoBkxC,KAEtB,kBAAC,GAAD,CACEnxC,KhUvHyB,kBgUwHzBC,mBAAoBmxC,KAEtB,kBAAC,GAAD,CACEpxC,KhU1H+B,wBgU2H/BC,mBAAoBoxC,KAEtB,kBAAC,GAAD,CACErxC,KhUjI0B,mBgUkI1BC,mBAAoBqxC,KAEtB,kBAAC,GAAD,CACEtxC,KAAMvjB,2BACNwjB,mBAAoBqxC,KAEtB,kBAAC,GAAD,CACEtxC,KhUrI8B,mBgUsI9BC,mBAAoBsxC,OAI1B,kBAACzb,GAAD,U,OCrKN,+FAiCA,IAAM0b,GAAgB,CAClB7uE,IAAK,OACL8uE,QAASC,KAGAC,GAAqC,SAACC,GAAD,OAAS,SAACC,GAAD,OAAU,SAACl5E,GAClE,IAAIuO,OAA+B/f,EAInC,G9VtC6B,sB8VmCzBwR,EAAOpB,OACP2P,EAAWvO,EAAOC,QAAQsO,U/VxCL,kB+V0CrBvO,EAAOpB,M3V1BoB,wB2V0BMoB,EAAOpB,KAA8B,CACtE,IAAIvE,EAAQ4+E,EAAIhtE,WACZ5R,GAASA,EAAM+F,MAAQ/F,EAAM+F,KAAK/Q,OAClCkf,EAAWlU,EAAM+F,KAAK/Q,KAAKkf,UAkBnC,M3V/C+B,wB2ViC3BvO,EAAOpB,MACP2P,GAAY1M,KAAKs3E,qBAAqB5qE,EAAoB,eAG1DA,IACI1M,KAAKu3E,kBAAkB7qE,EAAU,eACjC1M,KAAK0B,eAAegL,GAEpBnG,KAAMC,IAAI,kCAAoCkG,GAAUrC,MAAK,SAAC1a,GAC1DqQ,KAAKw3E,kBAAkB9qE,EAAoB,cAAe/c,EAAO6D,MACjEwM,KAAK0B,eAAegL,OAIzB2qE,EAAKl5E,MAGVs5E,GAAmBC,YAAeV,GAAeh5E,IAC1CuD,GAAQo2E,sBAAYF,GAAkBG,8BAAoBC,0BAAgBC,IAAOX,MACxFY,GAAYC,YAAaz2E,IAQ/B,IAAMyhC,GAAS,SAAC3gC,GACZ,OAAO8zB,IAAS6M,OACZ,kBAAC,GAAD,KACI,kBAAC,IAAD,CAAUzhC,MAAOA,IACb,kBAAC,IAAD,CAAQ6D,QAASA,GACb,kBAAC,IAAD,CAAa6yE,QAAS,KAAMF,UAAWA,IACnC,kBAAC11E,EAAD,UAKhB8d,SAAS+3D,eAAe,UAIhCn4E,GAAYsK,MACR,WACI24B,GAAOm1C,OAEX,WACIn1C,GAAOm1C,OlXwCT,kBAAmBr4D,WACrBA,UAAUs4D,cAAcC,MAAMhuE,MAAK,SAAAhY,GACjCA,EAAaimF,kB","file":"static/js/main.bea899e8.chunk.js","sourcesContent":["// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n (process as { env: { [key: string]: string } }).env.PUBLIC_URL,\r\n window.location.href\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister();\r\n });\r\n }\r\n}\r\n","import { createBrowserHistory as createHistory } from 'history';\r\n\r\nexport default createHistory();","import {\r\n LOGIN_REQUEST,\r\n LOGIN_SUCCESS,\r\n LOGIN_FAILURE,\r\n GO_TO_LOGIN,\r\n LOGOUT,\r\n SET_LOGIN_METHOD\r\n} from './ActionTypes';\r\n\r\ninterface LoginState {\r\n loggingIn: boolean;\r\n loggedIn: boolean;\r\n loginFailureMessage?: string;\r\n onWelcomePage: boolean;\r\n loginDetails?: JWTDTO;\r\n sessionHasExpired: boolean;\r\n loginMethod?: string;\r\n}\r\n\r\nconst initialState: LoginState = {\r\n loggingIn: false,\r\n loggedIn: false,\r\n loginFailureMessage: undefined,\r\n onWelcomePage: true,\r\n sessionHasExpired: false,\r\n loginMethod: undefined\r\n};\r\n\r\nexport default (state = initialState, action: any) => {\r\n\tswitch (action.type) {\r\n case LOGIN_REQUEST:\r\n return { ...state, loggingIn: action.payload, loggedIn: false, loginDetails: undefined, loginFailureMessage: undefined, sessionHasExpired: false };\r\n case LOGIN_SUCCESS:\r\n return { ...state, loggingIn: false, loggedIn: action.payload, loginFailureMessaage: undefined, sessionHasExpired: false };\r\n case LOGIN_FAILURE:\r\n return { ...state, loggingIn: false, loggedIn: false, loginDetails: undefined, loginFailureMessage: action.payload, sessionHasExpired: false };\r\n case GO_TO_LOGIN:\r\n return { ...state, onWelcomePage: false };\r\n case LOGOUT:\r\n return { ...state, loggingIn: false, loggedIn: false, loginDetails: undefined, loginFailureMessaage: undefined, onWelcomePage: true, sessionHasExpired: action.payload, loginMethod: undefined }; \r\n case SET_LOGIN_METHOD:\r\n return { ...state, loginMethod: action.payload }\r\n\t\tdefault:\r\n\t\t\treturn state;\r\n\t}\r\n}","import { LOGOUT } from \"../../Login/Redux/ActionTypes\";\r\nimport {\r\n SET_SELECTED_LODGE,\r\n SET_SELECTED_PARK,\r\n SET_USER_LODGES,\r\n SET_USER_NAME,\r\n GET_MY_CONTACT_DETAILS_REQUEST,\r\n GET_MY_CONTACT_DETAILS_SUCCESS,\r\n GET_MY_CONTACT_DETAILS_FAILURE,\r\n UPDATE_MY_CONTACT_DETAILS_REQUEST,\r\n UPDATE_MY_CONTACT_DETAILS_SUCCESS,\r\n UPDATE_MY_CONTACT_DETAILS_FAILURE,\r\n SET_MY_PASSWORD_REQUEST,\r\n SET_MY_PASSWORD_SUCCESS,\r\n SET_MY_PASSWORD_FAILURE,\r\n SET_ACCOUNT_BALANCE,\r\n SET_OWNER_ID,\r\n GET_MARKETING_PREFERENCES_REQUEST,\r\n GET_MARKETING_PREFERENCES_SUCCESS,\r\n SET_MARKETING_PREFERENCES_SUCCESS,\r\n SET_LOGIN_EMAIL,\r\n GET_SHOW_MEMBERSHIP_PROMPT_REQUEST,\r\n GET_SHOW_MEMBERSHIP_PROMPT_FAILURE,\r\n GET_SHOW_MEMBERSHIP_PROMPT_SUCCESS,\r\n SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_REQUEST,\r\n SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_SUCCESS,\r\n SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_FAILURE,\r\n GET_OWNER_MEMBERSHIP_AVAILABILITY_REQUEST,\r\n GET_OWNER_MEMBERSHIP_AVAILABILITY_SUCCESS,\r\n GET_OWNER_MEMBERSHIP_AVAILABILITY_FAILURE,\r\n SET_USER_ROLES,\r\n SET_IS_REFERRED_USER,\r\n SET_MEMBERSHIP_NUMBER,\r\n SET_CAN_REFER,\r\n SET_USER_ROLE_CLAIMS,\r\n} from \"./ActionTypes\";\r\nimport { PAYMENT_CONFIRMED } from \"../../Account/Redux/ActionTypes\";\r\nimport { faTruckMonster } from \"@fortawesome/free-solid-svg-icons\";\r\n\r\nconst initialState = {\r\n loginEmail: undefined,\r\n ownerId: undefined,\r\n firstname: undefined,\r\n lastName: undefined,\r\n phoneNumber: undefined,\r\n userRoles: undefined as UserRoleDTO[] | undefined,\r\n hasOwnMembership: undefined,\r\n lodges: undefined,\r\n lodge: undefined,\r\n park: undefined,\r\n myContactDetails: undefined,\r\n marketingPreferences: undefined,\r\n isGettingContactDetails: false,\r\n gettingContactDetailsError: false,\r\n isSavingContactDetails: false,\r\n updatingContactDetailsError: false,\r\n isUpdatingPassword: false,\r\n isUpdatePasswordSuccessModalOpen: false,\r\n updatingPasswordError: false,\r\n showMembershipPrompt: true,\r\n isGettingShowMembershipPrompt: false,\r\n gettingShowMembershipPromptError: false,\r\n isSettingDontShowAgainMembershipModal: false,\r\n settingDontShowAgainMembershipModalError: false,\r\n isGettingOwnerMembershipAvailability: false,\r\n gettingOwnerMembershipAvailabilityError: false,\r\n ownerMembershipsAvailability: undefined as OwnerMembershipAvailabilityDTO | undefined,\r\n membershipNumber: undefined,\r\n canRefer: false,\r\n canReferWithMemberships: false,\r\n canReferWithOutMemberships: false,\r\n forcedToMakeMembership: false,\r\n permissionCallSuccess: false,\r\n decommissionedParks: [\"AB\", \"GR\"],\r\n};\r\n\r\nexport default (state = initialState, action: any) => {\r\n switch (action.type) {\r\n case SET_USER_NAME:\r\n return { ...state, firstname: action.payload[0], lastName: action.payload[1] };\r\n case SET_LOGIN_EMAIL:\r\n return { ...state, loginEmail: action.payload[0], phoneNumber: action.payload[1] };\r\n case SET_OWNER_ID:\r\n return { ...state, ownerId: action.payload };\r\n case SET_USER_LODGES:\r\n return { ...state, lodges: action.payload };\r\n case SET_SELECTED_LODGE:\r\n return { ...state, lodge: action.payload };\r\n case SET_SELECTED_PARK:\r\n return { ...state, park: action.payload };\r\n case SET_USER_ROLES:\r\n return { ...state, userRoles: action.payload };\r\n case SET_IS_REFERRED_USER:\r\n return { ...state, hasOwnMembership: action.payload };\r\n case SET_CAN_REFER:\r\n return { ...state, canRefer: action.payload };\r\n case SET_MEMBERSHIP_NUMBER:\r\n return { ...state, membershipNumber: action.payload };\r\n case LOGOUT:\r\n return {\r\n ...state,\r\n currentUserDetails: undefined,\r\n myContactDetails: undefined,\r\n };\r\n case GET_MARKETING_PREFERENCES_REQUEST:\r\n return {\r\n ...state,\r\n marketingPreferences: undefined,\r\n };\r\n case GET_MARKETING_PREFERENCES_SUCCESS:\r\n return {\r\n ...state,\r\n marketingPreferences: action.payload,\r\n };\r\n case SET_MARKETING_PREFERENCES_SUCCESS:\r\n return {\r\n ...state,\r\n marketingPreferences: action.payload,\r\n };\r\n case GET_MY_CONTACT_DETAILS_REQUEST:\r\n return {\r\n ...state,\r\n myContactDetails: undefined,\r\n gettingContactDetailsError: false,\r\n isGettingContactDetails: true,\r\n };\r\n case GET_MY_CONTACT_DETAILS_SUCCESS:\r\n return {\r\n ...state,\r\n myContactDetails: action.payload,\r\n isGettingBankDetails: false,\r\n };\r\n case GET_MY_CONTACT_DETAILS_FAILURE:\r\n return {\r\n ...state,\r\n myContactDetails: undefined,\r\n gettingContactDetailsError: true,\r\n isGettingContactDetails: false,\r\n };\r\n case UPDATE_MY_CONTACT_DETAILS_REQUEST:\r\n return {\r\n ...state,\r\n updatingContactDetailsError: false,\r\n isSavingContactDetails: true,\r\n };\r\n case UPDATE_MY_CONTACT_DETAILS_SUCCESS:\r\n return {\r\n ...state,\r\n myContactDetails: action.payload,\r\n isSavingContactDetails: false,\r\n };\r\n case UPDATE_MY_CONTACT_DETAILS_FAILURE:\r\n return {\r\n ...state,\r\n updatingContactDetailsError: true,\r\n isGettingContactDetails: false,\r\n };\r\n case SET_MY_PASSWORD_REQUEST:\r\n return {\r\n ...state,\r\n updatingPasswordError: false,\r\n isUpdatingPassword: true,\r\n };\r\n case SET_MY_PASSWORD_SUCCESS:\r\n return { ...state, isUpdatingPassword: false };\r\n case SET_MY_PASSWORD_FAILURE:\r\n return {\r\n ...state,\r\n updatingPasswordError: true,\r\n isUpdatingPassword: false,\r\n };\r\n case PAYMENT_CONFIRMED:\r\n case SET_ACCOUNT_BALANCE:\r\n return {\r\n ...state,\r\n lodge: { ...(state.lodge as any), AccountBalance: action.payload },\r\n };\r\n case GET_SHOW_MEMBERSHIP_PROMPT_REQUEST:\r\n return { \r\n ...state, \r\n isGettingShowMembershipPrompt: true,\r\n gettingShowMembershipPrompt: false,\r\n };\r\n case GET_SHOW_MEMBERSHIP_PROMPT_SUCCESS:\r\n return {\r\n ...state,\r\n showMembershipPrompt: action.payload,\r\n gettingShowMembershipPrompt: false,\r\n };\r\n case GET_SHOW_MEMBERSHIP_PROMPT_FAILURE:\r\n return {\r\n ...state,\r\n isGettingShowMembershipPrompt: false,\r\n gettingShowMembershipPrompt: true,\r\n };\r\n case SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_REQUEST:\r\n return { \r\n ...state, \r\n isSettingDontShowAgainMembershipModal: true, \r\n settingDontShowAgainMembershipModalError: false,\r\n };\r\n case SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_SUCCESS:\r\n return {\r\n ...state,\r\n showMembershipPrompt: action.payload,\r\n isSettingDontShowAgainMembershipModal: false,\r\n }\r\n case SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_FAILURE:\r\n return {\r\n ...state,\r\n isSettingDontShowAgainMembershipModal: false,\r\n settingDontShowAgainMembershipModalError: true,\r\n }\r\n case GET_OWNER_MEMBERSHIP_AVAILABILITY_REQUEST:\r\n return {\r\n ...state,\r\n isGettingOwnerMembershipAvailability: true,\r\n gettingOwnerMembershipAvailabilityError: false,\r\n }\r\n case GET_OWNER_MEMBERSHIP_AVAILABILITY_SUCCESS:\r\n return {\r\n ...state,\r\n isGettingOwnerMembershipAvailability: false,\r\n ownerMembershipsAvailability: action.payload,\r\n }\r\n case GET_OWNER_MEMBERSHIP_AVAILABILITY_FAILURE:\r\n return {\r\n ...state,\r\n isGettingOwnerMembershipAvailabiliy: false,\r\n gettingOwnerMembershipAvailabilityError: true,\r\n }\r\n case SET_USER_ROLE_CLAIMS:\r\n return {\r\n ...state,\r\n canRefer: action.payload[0] || action.payload[1],\r\n canReferWithMemberships: action.payload[0],\r\n canReferWithOutMemberships: action.payload[1],\r\n forcedToMakeMembership: action.payload[2],\r\n permissionCallSuccess: true,\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n","import * as Contentful from 'contentful';\r\n\r\nconst ContentfulClient = Contentful.createClient({\r\n space: process.env.REACT_APP_CONTENTFUL_SPACE as string,\r\n accessToken: process.env.REACT_APP_CONTENTFUL_ACCESSTOKEN as string,\r\n environment: process.env.REACT_APP_CONTENTFUL_ENVIRONMENT as string\r\n });\r\nexport default ContentfulClient;","import ContentfulClient from \"../ContentfulClient\";\r\n\r\nexport async function GetEntryCall(id: string) {\r\n \r\n const result = await ContentfulClient.getEntry(id);\r\n\r\n return result;\r\n}","import { GetEntryCall } from \"./Contentful/Calls/GetEntryCall\";\r\n\r\nexport class MembershipForm implements IMembershipForm {\r\n id?: string;\r\n contentfulMembershipTypeId?: FormInput;\r\n myHaulfrynAccess?: FormInput;\r\n membershipState?: string;\r\n startDate?: FormInput;\r\n transferredMemberships?: number;\r\n marketing?: FormInput;\r\n firstName?: FormInput;\r\n lastName?: FormInput;\r\n dateOfBirth?: FormInput;\r\n email?: FormInput;\r\n phonenumber?: FormInput;\r\n vehicles?: FormInput;\r\n payment?: FormInput;\r\n photoURL?: FormInput;\r\n contentfulAgeBracketPriceId?: string;\r\n ageVerificationSent?: Date;\r\n termFormula?: FormInput;\r\n\r\n private hasValueErrorForm: FormInput = { errors: [\"hasValue\"] };\r\n\r\n public static async fromAddMembership(membershipData: AddMembershipDTO): Promise {\r\n let membership = new this();\r\n membership.id = membershipData.Id;\r\n membership.contentfulMembershipTypeId = (membershipData.ContentfulMembershipTypeId ? { value: membershipData.ContentfulMembershipTypeId, errors: [] } : { errors: [] });\r\n membership.payment = (membershipData.Payment ? { value: membershipData.Payment, errors: [] } : { errors: [] });\r\n membership.photoURL = (membershipData.PhotoURL ? { value: membershipData.PhotoURL, errors: [] } : { errors: [] });\r\n membership.myHaulfrynAccess = (membershipData.MyHaulfrynAccess !== null ? { value: membershipData.MyHaulfrynAccess, errors: [] } : { errors: [] });\r\n membership.membershipState = membershipData.MembershipState;\r\n membership.startDate = (membershipData.StartDate ? { value: new Date(membershipData.StartDate), errors: [] } : { errors: [\"hasValue\"] });\r\n membership.transferredMemberships = 0;\r\n membership.marketing = (membershipData.Marketing !== null ? { value: membershipData.Marketing, errors: [] } : { errors: [] });\r\n membership.firstName = (membershipData.FirstName ? { value: membershipData.FirstName, errors: [] } : { errors: [\"hasValue\"] });\r\n membership.lastName = (membershipData.LastName ? { value: membershipData.LastName, errors: [] } : { errors: [\"hasValue\"] });\r\n membership.dateOfBirth = (membershipData.DateOfBirth ? { value: new Date(membershipData.DateOfBirth), errors: [] } : { errors: [\"hasValue\"] });\r\n membership.email = (membershipData.Email ? { value: membershipData.Email, errors: [] } : { errors: [] });\r\n membership.phonenumber = (membershipData.PhoneNumber ? { value: membershipData.PhoneNumber, errors: [] } : { errors: [] });\r\n if (membershipData.Vehicles) {\r\n membership.vehicles = { value: [], errors: []};\r\n for (let vehicle of membershipData.Vehicles) {\r\n membership.vehicles!.value = membership.vehicles!.value.concat([{ id: vehicle.Id, registration: vehicle.Registration, description: vehicle.Description }])\r\n }\r\n }\r\n if (membershipData.ContentfulAgeBracketPriceId) {\r\n membership.contentfulAgeBracketPriceId = membershipData.ContentfulAgeBracketPriceId;\r\n let duration = await GetEntryCall(membershipData.ContentfulAgeBracketPriceId);\r\n membership.termFormula = { value: { label: duration.fields.termDescription, value: duration.fields.termFormula } as DropdownListOption, errors: []};\r\n }\r\n membership.ageVerificationSent = membershipData.AgeVerificationSent && new Date(membershipData.AgeVerificationSent);\r\n return membership;\r\n }\r\n\r\n constructor() {\r\n this.contentfulMembershipTypeId = { errors: [] };\r\n this.payment = { errors: [] };\r\n this.photoURL = { errors: [] };\r\n this.myHaulfrynAccess = { errors: [] };\r\n this.startDate = { value: new Date(), errors: []};\r\n this.marketing = { errors: [] };\r\n this.firstName = this.hasValueErrorForm;\r\n this.lastName = this.hasValueErrorForm;\r\n this.dateOfBirth = this.hasValueErrorForm;\r\n this.email = { errors: [] };\r\n this.phonenumber = { errors: [] };\r\n this.vehicles = { errors: [] };\r\n this.termFormula = { errors: [] };\r\n }\r\n }","export enum CheckoutStates {\r\n Active,\r\n Expired,\r\n}","export class EditMemberDetailsForm implements IEditMemberDetailsForm {\r\n id?: string;\r\n firstName?: FormInput;\r\n lastName?: FormInput;\r\n email?: FormInput;\r\n phonenumber?: FormInput;\r\n vehicles?: FormInput;\r\n autoRenew?: boolean;\r\n\r\n public static fromEditMemberDetailsDTOBack(membershipData: EditMemberDetailsDTOBack): EditMemberDetailsForm {\r\n let editMemberDetails = new this();\r\n editMemberDetails.id = membershipData.Id && membershipData.Id;\r\n editMemberDetails.firstName = membershipData.FirstName ? { value: membershipData.FirstName, errors: [] } : { errors: [] };\r\n editMemberDetails.lastName = membershipData.LastName ? { value: membershipData.LastName, errors: [] } : { errors: [] };\r\n editMemberDetails.email = membershipData.Email ? { value: membershipData.Email, errors: [] } : { errors: [] };\r\n editMemberDetails.phonenumber = membershipData.PhoneNumber ? { value: membershipData.PhoneNumber, errors: [] } : { errors: [] };\r\n editMemberDetails.autoRenew = membershipData.AutoRenew && membershipData.AutoRenew;\r\n if (membershipData.Vehicles) {\r\n editMemberDetails.vehicles = { value: [], errors: []};\r\n for (let vehicle of membershipData.Vehicles) {\r\n editMemberDetails.vehicles!.value = editMemberDetails.vehicles!.value.concat([{ id: vehicle.Id, registration: vehicle.Registration, description: vehicle.Description }])\r\n }\r\n }\r\n return editMemberDetails;\r\n }\r\n\r\n\r\n constructor() {\r\n this.firstName = { errors: [] };\r\n this.lastName = { errors: [] };\r\n this.email = { errors: [] };\r\n this.phonenumber = { errors: [] };\r\n this.vehicles = { errors: [] };\r\n }\r\n}","export class ReferMembershipForm implements IReferMembership {\r\n id?: string;\r\n firstName: FormInput;\r\n lastName: FormInput;\r\n email: FormInput;\r\n phoneNumber: FormInput;\r\n contentfulmembershipTypeId: FormInput;\r\n transferredMemberships: FormInput;\r\n allowFurtherReferrals: FormInput;\r\n\r\n public static fromReferMembership(membershipData: ReferMembershipDTO): ReferMembershipForm {\r\n let membership = new this();\r\n membership.id = membershipData.Id;\r\n membership.contentfulmembershipTypeId = (membershipData.ContentfulMembershipTypeId ? { value: membershipData.ContentfulMembershipTypeId, errors: [] } : { errors: [] });\r\n membership.transferredMemberships = (membershipData.TransferredMemberships ? { value: membershipData.TransferredMemberships, errors: [] } : { errors: [] });\r\n membership.firstName = (membershipData.FirstName ? { value: membershipData.FirstName, errors: [] } : { errors: [\"hasValue\"] });\r\n membership.lastName = (membershipData.LastName ? { value: membershipData.LastName, errors: [] } : { errors: [\"hasValue\"] });\r\n membership.phoneNumber = (membershipData.PhoneNumber ? { value: membershipData.PhoneNumber, errors: [] } : { errors: [] });\r\n membership.email = (membershipData.Email ? { value: membershipData.Email, errors: [] } : { errors: [\"hasValue\"] });\r\n membership.allowFurtherReferrals = (membershipData.AllowFurtherReferrals ? { value: membershipData.AllowFurtherReferrals, errors: [] } : { errors: [\"hasValue\"] });\r\n return membership;\r\n }\r\n\r\n public static fromReferDTO(data: ReferralDTO): ReferMembershipForm {\r\n let membership = new this();\r\n membership.id = data.id;\r\n membership.transferredMemberships = (data.transferredMemberships !== undefined ? { value: data.transferredMemberships, errors: [] } : { errors: [] });\r\n membership.firstName = (data.firstName ? { value: data.firstName, errors: [] } : { errors: [] });\r\n membership.lastName = (data.lastName ? { value: data.lastName, errors: [] } : { errors: [] });\r\n membership.allowFurtherReferrals = (data.allowFurtherReferrals ? { value: data.allowFurtherReferrals, errors: [] } : { errors: [] });\r\n membership.email = data.email ? { value: data.email, errors: [] } : { errors: [] };\r\n membership.phoneNumber = data.phoneNumber ? { value: data.phoneNumber, errors: [] } : { errors: [] };\r\n membership.contentfulmembershipTypeId = { errors: [] };\r\n return membership;\r\n }\r\n\r\n constructor() {\r\n this.contentfulmembershipTypeId = { value: '', errors: [] };\r\n this.transferredMemberships = { value: 0, errors: [] };\r\n this.firstName = { value: '', errors: [\"hasValue\"] };\r\n this.lastName = { value: '', errors: [\"hasValue\"] };\r\n this.email = { value: '', errors: [\"hasValue\"] };\r\n this.phoneNumber = { value: '', errors: [] };\r\n this.allowFurtherReferrals = { value: true, errors: [] };\r\n }\r\n\r\n public IsNotValid(): boolean {\r\n if (this.firstName && this.firstName.errors.length > 0) {\r\n return true;\r\n } else if (this.lastName && this.lastName.errors.length > 0){\r\n return true;\r\n } else if (this.email && this.email.errors.length > 0){\r\n return true;\r\n } else if (this.phoneNumber && this.phoneNumber.errors.length > 0){\r\n return true;\r\n } else if (this.contentfulmembershipTypeId && this.contentfulmembershipTypeId.errors.length > 0){\r\n return true;\r\n } else if (this.transferredMemberships && this.transferredMemberships.errors.length > 0) {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n }\r\n}","import {\r\n SEARCH_PASSES_REQUEST,\r\n SEARCH_PASSES_SUCCESS,\r\n SEARCH_PASSES_FAILURE,\r\n SET_PASSES_FILTER,\r\n GET_PARK_PASS_TYPE_REQUEST,\r\n GET_PARK_PASS_TYPE_SUCCESS,\r\n GET_PARK_PASS_TYPE_FAILURE,\r\n SET_SELECTED_PARK_PASS_TYPE,\r\n SET_IS_ADD_PASS_MODAL_OPEN,\r\n SET_IS_ADD_PASS_PHOTO_MODAL_OPEN,\r\n SET_ADD_PASS_SUCCESSFUL_MODAL_OPEN,\r\n SET_ADD_PASS_ERROR_MODAL_OPEN,\r\n SET_IS_RENEW_PASS_MODAL_OPEN,\r\n SET_RENEW_PASS_SUCCESSFUL_MODAL_OPEN,\r\n SET_RENEW_PASS_ERROR_MODAL_OPEN,\r\n ADD_SEASON_PASS_REQUEST,\r\n ADD_SEASON_PASS_SUCCESS,\r\n ADD_SEASON_PASS_FAILURE,\r\n ADD_SHORT_STAY_PASS_REQUEST,\r\n ADD_SHORT_STAY_PASS_SUCCESS,\r\n ADD_SHORT_STAY_PASS_FAILURE,\r\n SET_DELETE_PASS_CONFIRMATION_MODAL_OPEN,\r\n RENEW_SEASON_PASS_REQUEST,\r\n RENEW_SEASON_PASS_SUCCESS,\r\n RENEW_SEASON_PASS_FAILURE,\r\n ANALYZE_PASS_PHOTO_REQUEST,\r\n ANALYZE_PASS_PHOTO_SUCCESS,\r\n ANALYZE_PASS_PHOTO_FAILURE,\r\n GET_PASS_PHOTO_SIZE_LIMIT_REQUEST,\r\n GET_PASS_PHOTO_SIZE_LIMIT_FAILURE,\r\n GET_PASS_PHOTO_SIZE_LIMIT_SUCCESS,\r\n ADD_MEMBERSHIP_REQUEST,\r\n ADD_MEMBERSHIP_SUCCESS,\r\n ADD_MEMBERSHIP_FAILURE,\r\n CHANGE_MEMBERSHIP_FORM_PAGE as CHANGE_MEMBERSHIP_FORM_PAGE,\r\n UPDATE_REFER_MEMBERSHIP_FORM_PAGE,\r\n SAVE_AND_EXIT,\r\n UPDATE_MEMBERSHIP_FORM,\r\n UPDATE_NEW_MEMBERSHIP,\r\n GET_MY_MEMBERSHIPS_FAILURE,\r\n GET_MY_MEMBERSHIPS_REQUEST,\r\n GET_MY_MEMBERSHIPS_SUCCESS,\r\n GET_ADD_MEMBERSHIP_BY_ID_REQUEST,\r\n GET_ADD_MEMBERSHIP_BY_ID_SUCCESS,\r\n GET_ADD_MEMBERSHIP_BY_ID_FAILURE,\r\n UPDATE_MEMBERSHIP_BASKET,\r\n UPDATE_MEMBERSHIP_FORM_PAGE,\r\n START_NEW_MEMBERSHIP,\r\n TOGGLE_SHOW_DRAFT_MEMBERSHIPS,\r\n TOGGLE_SHOW_EXPIRED_MEMBERSHIPS,\r\n UPDATE_FILTERED_MEMBERSHIPS,\r\n ADD_AGE_VERIFICATION_ERROR,\r\n ADD_AGE_VERIFICATION_REQUEST,\r\n ADD_AGE_VERIFICATION_SUCCESS,\r\n GET_EDIT_MEMBERSHIP_BY_ID_FAILURE,\r\n GET_EDIT_MEMBERSHIP_BY_ID_REQUEST,\r\n GET_EDIT_MEMBERSHIP_BY_ID_SUCCESS,\r\n UPDATE_EDIT_MEMBERSHIP,\r\n UPDATE_EDIT_MEMBERSHIP_FORM,\r\n UPDATE_EDIT_MEMBERSHIP_REQUEST,\r\n UPDATE_EDIT_MEMBERSHIP_SUCCESS,\r\n UPDATE_EDIT_MEMBERSHIP_FAILURE,\r\n CREATE_MEMBERSHIP_BASKET_REQUEST,\r\n CREATE_MEMBERSHIP_BASKET_SUCCESS,\r\n CREATE_MEMBERSHIP_BASKET_FAILURE,\r\n SET_SESSION_ID,\r\n SET_DOCU_SIGN_MESSAGE,\r\n SET_PAYMENT_SUMMARY_DTO,\r\n SET_MEMBERSHIP_COMPONENTS,\r\n SET_REFERRED_MEMBERSHIP_COMPONENTS,\r\n SET_FINALISE_LATER_CONTAINERS,\r\n SET_FINALISE_NOW_CONTAINERS,\r\n SET_MEMBERSHIP_TO_DELETE,\r\n SET_DELETE_MEMBERSHIP_MODAL_OPEN,\r\n SET_CHECKOUT_SESSION,\r\n SET_PAYMENT_REQUIRED,\r\n SET_CONTENTFUL_MEMBERSHIP_TYPES,\r\n GET_MY_REFERRAL_FAILURE,\r\n GET_MY_REFERRAL_REQUEST,\r\n GET_MY_REFERRAL_SUCCESS,\r\n SET_TERM_DURATIONS,\r\n} from './ActionTypes';\r\nimport { SET_SELECTED_LODGE } from '../../User/Redux/ActionTypes';\r\nimport { ColumnDefinition } from '../../Shared/Components/Presentational/Table';\r\nimport { MembershipForm } from '../../MembershipForm';\r\nimport { faLeaf, fas, faSearch } from '@fortawesome/free-solid-svg-icons';\r\nimport { EditMemberDetailsForm } from '../../EditMemberDetailsForm';\r\nimport { ReferMembershipForm } from '../../ReferMembershipForm';\r\nimport { CheckoutStates } from '../../Constants/CheckoutStates';\r\nimport { Entry } from 'contentful';\r\n\r\nconst initialState = {\r\n passes: {\r\n Dtos: [],\r\n Total: 0,\r\n },\r\n passesFilter: {\r\n Page: 1,\r\n PageSize: 20,\r\n SortField: 'Name',\r\n SortDirection: 'asc',\r\n } as PassFilterDTO,\r\n isLoadingParkPassTypes: undefined as any,\r\n selectedParkPassType: {\r\n Id: undefined,\r\n },\r\n parkPassTypes: [],\r\n PassPhotoSizeLimitInKb: undefined,\r\n analyzingPassPhotoError: undefined,\r\n parkPassTypeError: undefined,\r\n passesSearchError: undefined,\r\n isSearchingPasses: undefined as any,\r\n successfulPasses: [],\r\n isAddPassModalOpen: false,\r\n isAddPassPhotoModalOpen: false,\r\n isSavingPass: false,\r\n isFetchingPassPhotoSizeLimit: false,\r\n isAnalyzingPassPhoto: false,\r\n isAddPassSuccessfulModalOpen: false,\r\n isAddPassErrorModalOpen: false,\r\n isRenewPassModalOpen: false,\r\n isRenewPassSuccessfulModalOpen: false,\r\n isRenewPassErrorModalOpen: false,\r\n isDeletePassModalOpen: false,\r\n isAnalyzingPassPhotoSuccessful: false,\r\n // ** MEMBERSHIP **\r\n isAddingMembership: false,\r\n addingMembershipError: false,\r\n addingMembershipErrorMessage: undefined as string | undefined,\r\n membershipFormPage: 0,\r\n referMembershipFormPage: 0,\r\n newMembership: {\r\n membershipState: \"Initial\",\r\n transferredMemberships: 0,\r\n } as NewMembershipDTO,\r\n referMembership: {\r\n transferredMemberships: 0\r\n } as ReferMembershipDTO,\r\n membershipForm: new MembershipForm() as IMembershipForm,\r\n membershipColumns: [\r\n {\r\n fieldName: \"firstName\",\r\n displayName: \"myMemberships.firstName\",\r\n },\r\n {\r\n fieldName: \"lastName\",\r\n displayName: \"myMemberships.lastName\",\r\n },\r\n {\r\n fieldName: \"contentfulMembershipTypeId\",\r\n displayName: \"myMemberships.membershipType\",\r\n },\r\n {\r\n fieldName: \"membershipState\",\r\n displayName: \"myMemberships.membershipState\",\r\n },\r\n {\r\n fieldName: \"endDate\",\r\n displayName: \"myMemberships.endDate\",\r\n },\r\n {\r\n fieldName: \"editIcon\",\r\n displayName: \"\", \r\n }\r\n ] as ColumnDefinition[],\r\n //My Memberships Page\r\n isGettingMemberships: false,\r\n gettingMembershipsFailure: false,\r\n memberships: [] as MembershipDTO[],\r\n isGettingReferredMemberships: false,\r\n gettingReferredMembershipsFailure: false,\r\n filteredMemberships: [] as MembershipDTO[],\r\n isGettingAddMembershipById: false,\r\n gettingAddMembershipByIdError: false,\r\n gettingAddMembershipByIdSuccess: false,\r\n membershipBasket: [] as MembershipDTO[],\r\n basketId: \"\",\r\n showDraftMemberships: true,\r\n showExpiredMemberships: false,\r\n ageVerificationFile: File,\r\n isAddingAgeVerificationImage: false,\r\n addingAgeVerificationImageSuccess: false,\r\n addingAgeVerificationImageError: false,\r\n addingAgeVerificationImageErrorMessage: \"\",\r\n editMemberDetails: {} as EditMemberDetailsDTO,\r\n editMemberDetailsForm: new EditMemberDetailsForm() as IEditMemberDetailsForm,\r\n isGettingEditMemberDetailsById: false,\r\n gettingEditMemberDetailsByIdSuccess: false,\r\n gettingEditMemberDetailsByIdError: false,\r\n isUpdatingEditMemberDetails: false,\r\n updateEditMemberDetailsSuccess: false,\r\n updateEditMemberDetailsFailure: false,\r\n isCreatingMembershipBasket: false,\r\n createMembershipBasketSuccess: false,\r\n createMembershipBasketFailure: false,\r\n validateAndUploadPhoto: false,\r\n sessionId: \"\",\r\n docuSignMessage: \"\",\r\n membershipContainers: [] as MembershipContainer[],\r\n finaliseNowContainers: [] as MembershipContainer[],\r\n finaliseLaterContainers: [] as MembershipContainer[],\r\n referredMemberships:[] as ReferralDTO[],\r\n paymentSummary: undefined,\r\n checkoutSession: { sessionId: \"\", state: CheckoutStates.Expired } as CheckoutSession,\r\n isPaymentRequired: false,\r\n contentfulMembershipTypes: undefined,\r\n useMemberships: false,\r\n termDurations: undefined as DropdownListOption[][] | undefined,\r\n};\r\n\r\nexport default (state = initialState, action: any) => {\r\n switch (action.type) {\r\n case SEARCH_PASSES_REQUEST:\r\n return { ...state, isSearchingPasses: action.payload };\r\n case SEARCH_PASSES_SUCCESS:\r\n return { ...state, passes: action.payload, isSearchingPasses: false };\r\n case SEARCH_PASSES_FAILURE:\r\n return { ...state, passesSearchError: action.payload, isSearchingPasses: false };\r\n case SET_PASSES_FILTER:\r\n return { ...state, passesFilter: action.payload, isSearchingPasses: undefined as any };\r\n case GET_PARK_PASS_TYPE_REQUEST:\r\n return { ...state, isLoadingParkPassTypes: action.payload };\r\n case GET_PARK_PASS_TYPE_SUCCESS:\r\n return { ...state, parkPassTypes: action.payload, isLoadingParkPassTypes: false };\r\n case GET_PARK_PASS_TYPE_FAILURE:\r\n return { ...state, parkPassTypeError: action.payload, isLoadingParkPassTypes: false };\r\n case SET_SELECTED_PARK_PASS_TYPE:\r\n return {\r\n ...state,\r\n selectedParkPassType: action.payload,\r\n passesFilter: {\r\n ...state.passesFilter,\r\n ParkPassTypeId: action.payload ? action.payload.Id : undefined,\r\n FunctionalityCode: action.payload ? action.payload.FunctionalityCode : undefined,\r\n Page: 1,\r\n },\r\n isSearchingPasses: undefined as any,\r\n };\r\n case SET_IS_ADD_PASS_MODAL_OPEN:\r\n return { ...state, isAddPassModalOpen: action.payload };\r\n case SET_IS_ADD_PASS_PHOTO_MODAL_OPEN:\r\n return { ...state, isAddPassPhotoModalOpen: action.payload };\r\n case SET_IS_RENEW_PASS_MODAL_OPEN:\r\n return { ...state, isRenewPassModalOpen: action.payload };\r\n case ANALYZE_PASS_PHOTO_REQUEST:\r\n return { ...state, isAnalyzingPassPhoto: true };\r\n case GET_PASS_PHOTO_SIZE_LIMIT_REQUEST:\r\n return { ...state, isFetchingPassPhotoSizeLimit: true };\r\n case ADD_SEASON_PASS_REQUEST:\r\n case ADD_SHORT_STAY_PASS_REQUEST:\r\n case RENEW_SEASON_PASS_REQUEST:\r\n return { ...state, isSavingPass: true };\r\n case ANALYZE_PASS_PHOTO_SUCCESS:\r\n return {\r\n ...state,\r\n isAnalyzingPassPhoto: false,\r\n isAnalyzingPassPhotoSuccessful: true,\r\n analyzingPassPhotoError: undefined,\r\n };\r\n case GET_PASS_PHOTO_SIZE_LIMIT_SUCCESS:\r\n return {\r\n ...state,\r\n PassPhotoSizeLimitInKb: action.payload,\r\n isFetchingPassPhotoSizeLimit: false\r\n };\r\n case GET_PASS_PHOTO_SIZE_LIMIT_FAILURE:\r\n return {\r\n ...state,\r\n isFetchingPassPhotoSizeLimit: false\r\n };\r\n case ANALYZE_PASS_PHOTO_FAILURE:\r\n return {\r\n ...state,\r\n isAnalyzingPassPhoto: false,\r\n isAnalyzingPassPhotoSuccessful: false,\r\n analyzingPassPhotoError: action.payload,\r\n };\r\n case ADD_SEASON_PASS_SUCCESS:\r\n case ADD_SHORT_STAY_PASS_SUCCESS:\r\n case RENEW_SEASON_PASS_SUCCESS:\r\n return {\r\n ...state,\r\n isSavingPass: false,\r\n successfulPasses: action.payload,\r\n isSearchingPasses: undefined as any,\r\n isLoadingParkPassTypes: undefined as any,\r\n };\r\n case ADD_SEASON_PASS_FAILURE:\r\n case ADD_SHORT_STAY_PASS_FAILURE:\r\n case RENEW_SEASON_PASS_FAILURE:\r\n return { ...state, isSavingPass: false };\r\n case SET_ADD_PASS_SUCCESSFUL_MODAL_OPEN:\r\n return {\r\n ...state,\r\n isAddPassSuccessfulModalOpen: action.payload,\r\n successfulPasses: action.payload ? state.successfulPasses : []\r\n };\r\n case SET_ADD_PASS_ERROR_MODAL_OPEN:\r\n return { ...state, isAddPassErrorModalOpen: action.payload };\r\n case SET_RENEW_PASS_SUCCESSFUL_MODAL_OPEN:\r\n return { ...state, isRenewPassSuccessfulModalOpen: action.payload };\r\n case SET_RENEW_PASS_ERROR_MODAL_OPEN:\r\n return { ...state, isRenewPassErrorModalOpen: action.payload };\r\n case SET_DELETE_PASS_CONFIRMATION_MODAL_OPEN:\r\n return { ...state, isDeletePassModalOpen: action.payload };\r\n case SET_SELECTED_LODGE:\r\n return {\r\n ...state,\r\n passesFilter: {\r\n ...state.passesFilter,\r\n LodgeId: action.payload.LodgeId,\r\n AccountId: action.payload.AccountId,\r\n Page: 1,\r\n },\r\n };\r\n // ** MEMBERSHIP **\r\n case ADD_MEMBERSHIP_REQUEST:\r\n return {\r\n ...state,\r\n isAddingMembership: action.payload,\r\n addingMembershipError: false,\r\n }\r\n case ADD_MEMBERSHIP_SUCCESS:\r\n return {\r\n ...state,\r\n isAddingMembership: false,\r\n newMembership: action.payload,\r\n addingMembershipError: false,\r\n }\r\n case ADD_MEMBERSHIP_FAILURE:\r\n return {\r\n ...state,\r\n isAddingMembership: true,\r\n addingMembershipError: true,\r\n addingMembershipErrorMessage: action.payload,\r\n }\r\n case CHANGE_MEMBERSHIP_FORM_PAGE:\r\n return {\r\n ...state,\r\n membershipFormPage: action.payload,\r\n }\r\n case UPDATE_REFER_MEMBERSHIP_FORM_PAGE:\r\n return {\r\n ...state,\r\n referMembershipFormPage: action.payload,\r\n }\r\n case SAVE_AND_EXIT:\r\n return {\r\n ...state,\r\n newMembership: {\r\n membershipState: \"Initial\",\r\n transferredMemberships: 0,\r\n } as NewMembershipDTO,\r\n referMembership: {\r\n transferredMemberships: 0\r\n } as ReferMembershipDTO,\r\n membershipForm: new MembershipForm(),\r\n ReferMembershipForm: new ReferMembershipForm(),\r\n membershipBasket: [],\r\n membershipFormPage: 0,\r\n referMembershipFormPage: 0,\r\n addingAgeVerificationImageSuccess: false,\r\n }\r\n case UPDATE_NEW_MEMBERSHIP:\r\n return {\r\n ...state,\r\n newMembership: action.payload\r\n }\r\n case UPDATE_MEMBERSHIP_FORM:\r\n return {\r\n ...state,\r\n membershipForm: action.payload\r\n }\r\n case ADD_AGE_VERIFICATION_REQUEST:\r\n return {\r\n ...state,\r\n isAddingAgeVerifcationImage: true,\r\n addingAgeVerificationImageSuccess: false,\r\n addingAgeVerificationImageError: false,\r\n }\r\n case ADD_AGE_VERIFICATION_SUCCESS:\r\n return {\r\n ...state,\r\n isAddingAgeVerificationImage: false,\r\n addingAgeVerificationImageSuccess: true,\r\n addingAgeVerificationImageError: false,\r\n ageVerificationFile: action.payload,\r\n }\r\n case ADD_AGE_VERIFICATION_ERROR:\r\n return {\r\n ...state,\r\n isAddingAgeVerificationImage: false,\r\n addingAgeVerificationImageSuccess: false,\r\n addingAgeVerificationImageError: true,\r\n addingAgeVerificationImageErrorMessage: action.payload,\r\n }\r\n //My Memberships Page\r\n case GET_MY_MEMBERSHIPS_REQUEST:\r\n return {\r\n ...state,\r\n gettingMembershipsError: false,\r\n isGettingMemberships: true,\r\n gettingMembershipsSuccess: false,\r\n }\r\n case GET_MY_MEMBERSHIPS_SUCCESS:\r\n return {\r\n ...state,\r\n memberships: action.payload as MembershipDTO[],\r\n gettingMembershipsSuccess: true,\r\n }\r\n case GET_MY_MEMBERSHIPS_FAILURE:\r\n return {\r\n ...state,\r\n gettingMembershipsError: true,\r\n isGettingMemberships: false,\r\n gettingMembershipsSuccess: false,\r\n }\r\n case GET_MY_REFERRAL_REQUEST:\r\n return {\r\n ...state,\r\n gettingReferredMembershipsError: false,\r\n isGettingReferredMemberships: true,\r\n gettingReferredMembershipsSuccess: false,\r\n }\r\n case GET_MY_REFERRAL_SUCCESS:\r\n return {\r\n ...state,\r\n referredMemberships: action.payload as ReferralDTO[],\r\n gettingReferredMembershipsSuccess: true,\r\n }\r\n case GET_MY_REFERRAL_FAILURE:\r\n return {\r\n ...state,\r\n gettingReferredMembershipsError: true,\r\n isGettingReferredMemberships: false,\r\n gettingReferredMembershipsSuccess: false,\r\n } \r\n case GET_ADD_MEMBERSHIP_BY_ID_REQUEST:\r\n return {\r\n ...state,\r\n isGettingAddMembershipById: true,\r\n gettingAddMembershipByIdError: false,\r\n gettingAddMembershipByIdSuccess: false,\r\n }\r\n case GET_ADD_MEMBERSHIP_BY_ID_SUCCESS:\r\n\r\n return {\r\n ...state,\r\n isGettingAddMembershipById: false,\r\n newMembership: action.payload.newMembership as NewMembershipDTO,\r\n membershipForm: action.payload.membershipForm,\r\n gettingAddMembershipByIdSuccess: true,\r\n }\r\n case GET_ADD_MEMBERSHIP_BY_ID_FAILURE:\r\n return {\r\n ...state,\r\n isGettingAddMembershipById: false,\r\n gettingAddMembershipByIdError: true,\r\n gettingAddMembershipByIdSuccess: false,\r\n }\r\n case UPDATE_MEMBERSHIP_BASKET:\r\n return {\r\n ...state,\r\n membershipBasket: action.payload,\r\n }\r\n case UPDATE_MEMBERSHIP_FORM_PAGE:\r\n return {\r\n ...state,\r\n membershipFormPage: action.payload,\r\n }\r\n case START_NEW_MEMBERSHIP:\r\n return {\r\n ...state,\r\n membershipForm: new MembershipForm(),\r\n newMembership: {\r\n membershipState: \"Initial\",\r\n transferredMemberships: 0,\r\n } as NewMembershipDTO,\r\n membershipFormPage: 0,\r\n }\r\n case TOGGLE_SHOW_DRAFT_MEMBERSHIPS:\r\n return {\r\n ...state,\r\n showDraftMemberships: action.payload,\r\n }\r\n case TOGGLE_SHOW_EXPIRED_MEMBERSHIPS:\r\n return {\r\n ...state,\r\n showExpiredMemberships: action.payload,\r\n }\r\n case UPDATE_FILTERED_MEMBERSHIPS:\r\n return {\r\n ...state,\r\n filteredMemberships: action.payload,\r\n }\r\n case GET_EDIT_MEMBERSHIP_BY_ID_REQUEST:\r\n return {\r\n ...state,\r\n isGettingEditMemberDetailsById: true,\r\n gettingEditMemberDetailsByIdError: false,\r\n gettingEditMemberDetailsByIdSuccess: false,\r\n }\r\n case GET_EDIT_MEMBERSHIP_BY_ID_SUCCESS:\r\n return {\r\n ...state,\r\n isGettingEditMemberDetailsById: false,\r\n editMemberDetails: action.payload.editMemberDetails as NewMembershipDTO,\r\n editMemberDetailsForm: action.payload.editMemberDetailsForm,\r\n gettingEditMemberDetailsByIdSuccess: true,\r\n }\r\n case GET_EDIT_MEMBERSHIP_BY_ID_FAILURE:\r\n return {\r\n ...state,\r\n isGettingEditMemberDetailsById: false,\r\n gettingEditMemberDetailsByIdError: true,\r\n gettingEditMemberDetailsByIdSuccess: false,\r\n }\r\n case UPDATE_EDIT_MEMBERSHIP:\r\n return {\r\n ...state,\r\n editMemberDetails: action.payload\r\n }\r\n case UPDATE_EDIT_MEMBERSHIP_FORM:\r\n return {\r\n ...state,\r\n editMemberDetailsForm: action.payload,\r\n }\r\n case UPDATE_EDIT_MEMBERSHIP_REQUEST:\r\n return {\r\n ...state,\r\n isUpdatingEditMemberDetails: true,\r\n updateEditMemberDetailsSuccess: false,\r\n updateEditMemberDetailsFailure: false,\r\n }\r\n case UPDATE_EDIT_MEMBERSHIP_SUCCESS:\r\n return {\r\n ...state,\r\n isUdpatingEditMemberDetails: false,\r\n updateEditMemberDetailssuccess: true,\r\n }\r\n case UPDATE_EDIT_MEMBERSHIP_FAILURE:\r\n return {\r\n ...state,\r\n isUpdatingEditMemberDetails: false,\r\n updateEditMemberDetailsFailure: true,\r\n }\r\n case CREATE_MEMBERSHIP_BASKET_REQUEST:\r\n return {\r\n ...state,\r\n isCreatingMembershipBasket: true,\r\n createMembershipBasketSuccess: false,\r\n createMembershipBasketFailure: false,\r\n }\r\n case CREATE_MEMBERSHIP_BASKET_SUCCESS:\r\n return {\r\n ...state,\r\n isCreatingMembershipBasket: false,\r\n createMembershipBasketSuccess: true,\r\n createMembershipBasketFailure: false,\r\n basketId: action.payload,\r\n checkoutSession: { sessionId: action.payload, state: CheckoutStates.Active } as CheckoutSession,\r\n }\r\n case CREATE_MEMBERSHIP_BASKET_FAILURE:\r\n return {\r\n ...state,\r\n isCreatingMembershipBasket: false,\r\n createMembershipBasketFailure: true,\r\n }\r\n case SET_SESSION_ID:\r\n return {\r\n ...state,\r\n sessionId: action.payload,\r\n }\r\n case SET_DOCU_SIGN_MESSAGE:\r\n return {\r\n ...state,\r\n docuSignMessage: action.payload,\r\n }\r\n case SET_PAYMENT_SUMMARY_DTO:\r\n return {\r\n ...state,\r\n paymentSummary: action.payload,\r\n }\r\n case SET_MEMBERSHIP_COMPONENTS:\r\n return {\r\n ...state,\r\n membershipContainers: action.payload,\r\n isGettingMemberships: false,\r\n }\r\n case SET_REFERRED_MEMBERSHIP_COMPONENTS:\r\n return {\r\n ...state,\r\n referredMemberships: action.payload,\r\n }\r\n case SET_FINALISE_NOW_CONTAINERS:\r\n return {\r\n ...state,\r\n finaliseNowContainers: action.payload,\r\n }\r\n case SET_FINALISE_LATER_CONTAINERS:\r\n return {\r\n ...state,\r\n finaliseLaterContainers: action.payload,\r\n }\r\n case SET_PAYMENT_REQUIRED:\r\n return {\r\n ...state,\r\n isPaymentRequired: action.payload,\r\n }\r\n case SET_CONTENTFUL_MEMBERSHIP_TYPES:\r\n return {\r\n ...state,\r\n contentfulMembershipTypes: action.payload.filteredTypes,\r\n useMemberships: action.payload.useMemberships,\r\n }\r\n case SET_TERM_DURATIONS:\r\n return {\r\n ...state,\r\n termDurations: action.payload,\r\n }\r\n default:\r\n return state;\r\n }\r\n};\r\n","import {\r\n SET_LODGE_DETAILS,\r\n SET_LODGE_DETAILS_LIST,\r\n SET_IS_CONTACT_PARK_MODAL_OPEN,\r\n GET_FAQS_REQUEST,\r\n GET_FAQS_FAILURE,\r\n GET_FAQS_SUCCESS,\r\n GET_IMPORTANT_INFORMATION_REQUEST,\r\n GET_IMPORTANT_INFORMATION_SUCCESS,\r\n GET_IMPORTANT_INFORMATION_FAILURE,\r\n SET_SELECTED_IMPORTANT_INFORMATION,\r\n GET_NEWS_REQUEST,\r\n GET_NEWS_SUCCESS,\r\n GET_NEWS_FAILURE,\r\n SET_SELECTED_NEWS_ITEM,\r\n GET_PARK_INFORMATION_REQUEST,\r\n GET_PARK_INFORMATION_SUCCESS,\r\n GET_PARK_INFORMATION_FAILURE\r\n\r\n} from './ActionTypes';\r\n\r\nconst initialState = {\r\n lodgeDetails: {\r\n lodgeId: undefined,\r\n descrption: undefined,\r\n details: []\r\n },\r\n lodgeDetailsList: [],\r\n isContactParkModalOpen: false,\r\n faqs: [],\r\n isLoadingFaqs: false,\r\n gettingFaqsError: undefined,\r\n importantInformation: [],\r\n gettingInformationError: undefined,\r\n isLoadingInformation: false,\r\n selectedImportantInformationId: undefined,\r\n news: [],\r\n gettingNewsError: undefined,\r\n isLoadingNews: false,\r\n selectedNewsItemId: undefined,\r\n isLoadingParkInformation: false,\r\n parkInformation: undefined,\r\n parkInformationError: undefined\r\n};\r\n\r\nexport default (state = initialState, action: any) => {\r\n switch (action.type) {\r\n case SET_LODGE_DETAILS:\r\n return { ...state, lodgeDetails: action.payload };\r\n case SET_LODGE_DETAILS_LIST:\r\n return { ...state, lodgeDetailsList: action.payload };\r\n case SET_IS_CONTACT_PARK_MODAL_OPEN:\r\n return { ...state, isContactParkModalOpen: action.payload };\r\n case GET_FAQS_REQUEST:\r\n return { ...state, isLoadingFaqs: true, faqs: [] };\r\n case GET_FAQS_SUCCESS:\r\n return { ...state, faqs: action.payload, isLoadingFaqs: false };\r\n case GET_FAQS_FAILURE:\r\n return { ...state, gettingFaqsError: action.payload, isLoadingFaqs: false };\r\n case GET_IMPORTANT_INFORMATION_REQUEST:\r\n return { ...state, isLoadingInformation: true, importantInformation: [] };\r\n case GET_IMPORTANT_INFORMATION_SUCCESS:\r\n return { ...state, importantInformation: action.payload, isLoadingInformation: false };\r\n case GET_IMPORTANT_INFORMATION_FAILURE:\r\n return { ...state, gettingInformationError: action.payload, isLoadingInformation: false };\r\n case SET_SELECTED_IMPORTANT_INFORMATION:\r\n return { ...state, selectedImportantInformationId: action.payload };\r\n case GET_PARK_INFORMATION_REQUEST:\r\n return { ...state, isLoadingParkInformation: true, parkInformation: undefined, parkInformationError: undefined };\r\n case GET_PARK_INFORMATION_SUCCESS:\r\n return { ...state, isLoadingParkInformation: false, parkInformation: action.payload };\r\n case GET_PARK_INFORMATION_FAILURE:\r\n return { ...state, isLoadingParkInformation: false, parkInformationError: action.payload};\r\n case GET_NEWS_REQUEST:\r\n return { ...state, isLoadingNews: true, news: [] };\r\n case GET_NEWS_SUCCESS:\r\n return { ...state, news: action.payload.Dtos, isLoadingNews: false };\r\n case GET_NEWS_FAILURE:\r\n return { ...state, gettingNewsError: action.payload, isLoadingNews: false };\r\n case SET_SELECTED_NEWS_ITEM:\r\n return { ...state, selectedNewsItemId: action.payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { EntryCollection } from \"contentful\";\r\nimport {\r\n CalendarActionTypes,\r\n SEARCH_EVENTS_REQUEST,\r\n SEARCH_EVENTS_SUCCESS,\r\n SEARCH_EVENTS_FAILURE,\r\n SET_IS_EVENT_DETAILS_MODAL_OPEN,\r\n SET_SELECTED_CALENDAR_WIDGET,\r\n SelectedCalendarWidgetOptions,\r\n SEARCH_OFFERS_REQUEST,\r\n SEARCH_OFFERS_SUCCESS,\r\n SEARCH_OFFERS_FAILURE,\r\n SET_PAGE_NUMBER,\r\n SET_IS_ADD_BOOKING_MODAL_OPEN,\r\n ADD_BOOKING_REQUEST,\r\n ADD_BOOKING_FAILURE,\r\n ADD_BOOKING_SUCCESS,\r\n SET_IS_ADD_BOOKING_SUCCES_MODAL_OPEN,\r\n SET_ADD_BOOKING_ERROR_MESSAGE\r\n} from \"./ActionTypes\";\r\n\r\nexport interface CalendarState {\r\n events: undefined | EntryCollection;\r\n offers: undefined | EntryCollection;\r\n eventsLoading: boolean;\r\n offersLoading: boolean;\r\n selectedCalendarWidget: SelectedCalendarWidgetOptions;\r\n pageNumber: number;\r\n isEventDetailsModalOpen: boolean;\r\n isAddBookingModalOpen: boolean;\r\n isAddingBooking: boolean;\r\n isAddBookingSuccessModalOpen: boolean;\r\n addBookingErrorMessage: undefined | string;\r\n}\r\n\r\nconst initialState: CalendarState = {\r\n events: undefined,\r\n offers: undefined,\r\n eventsLoading: false,\r\n offersLoading: false,\r\n selectedCalendarWidget: 'events',\r\n pageNumber: 1,\r\n isEventDetailsModalOpen: false,\r\n isAddBookingModalOpen: false,\r\n isAddingBooking: false,\r\n isAddBookingSuccessModalOpen: false,\r\n addBookingErrorMessage: undefined\r\n}\r\n\r\nexport default (state = initialState, action: CalendarActionTypes): CalendarState => {\r\n switch (action.type) {\r\n case SEARCH_EVENTS_REQUEST:\r\n return { ...state, eventsLoading: action.payload };\r\n case SEARCH_OFFERS_REQUEST:\r\n return { ...state, offersLoading: action.payload };\r\n case SEARCH_EVENTS_SUCCESS:\r\n return { ...state, eventsLoading: false, events: action.payload };\r\n case SEARCH_OFFERS_SUCCESS:\r\n return { ...state, offersLoading: false, offers: action.payload };\r\n case SEARCH_EVENTS_FAILURE:\r\n case SEARCH_OFFERS_FAILURE:\r\n return { ...state };\r\n case SET_IS_EVENT_DETAILS_MODAL_OPEN:\r\n return { ...state, isEventDetailsModalOpen: action.payload };\r\n case SET_SELECTED_CALENDAR_WIDGET:\r\n return { ...state, selectedCalendarWidget: action.payload };\r\n case SET_PAGE_NUMBER:\r\n return { ...state, pageNumber: action.payload };\r\n case SET_IS_ADD_BOOKING_MODAL_OPEN:\r\n return { ...state, isAddBookingModalOpen: action.payload, addBookingErrorMessage: undefined };\r\n case ADD_BOOKING_REQUEST:\r\n return { ...state, isAddingBooking: action.payload };\r\n case ADD_BOOKING_SUCCESS:\r\n return { ...state, isAddingBooking: false, isAddBookingSuccessModalOpen: action.payload };\r\n case ADD_BOOKING_FAILURE:\r\n return { ...state, isAddingBooking: false, isAddBookingSuccessModalOpen: false, addBookingErrorMessage: action.payload };\r\n case SET_IS_ADD_BOOKING_SUCCES_MODAL_OPEN:\r\n return { ...state, isAddBookingSuccessModalOpen: action.payload };\r\n case SET_ADD_BOOKING_ERROR_MESSAGE:\r\n return { ...state, addBookingErrorMessage: action.payload };\r\n default:\r\n return state;\r\n }\r\n}","import {\r\n SET_HEADER_MENU_OPEN\r\n} from './ActionTypes';\r\n\r\nconst initialState = {\r\n isHeaderOpen: false\r\n};\r\n\r\nexport default (state = initialState, action: any) => {\r\n switch (action.type) {\r\n case SET_HEADER_MENU_OPEN:\r\n return { ...state, isHeaderOpen: action.payload };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import {\r\n SEARCH_TRANSACTIONS_REQUEST,\r\n SEARCH_TRANSACTIONS_SUCCESS,\r\n SEARCH_TRANSACTIONS_FAILURE,\r\n SET_TRANSACTION_FILTER,\r\n SET_IS_MY_BANK_DETAILS_MODAL_OPEN,\r\n GET_MY_BANK_DETAILS_REQUEST,\r\n GET_MY_BANK_DETAILS_SUCCESS,\r\n GET_MY_BANK_DETAILS_FAILURE,\r\n DOWNLOAND_STATEMENT_REQUEST,\r\n DOWNLOAND_STATEMENT_SUCCESS,\r\n DOWNLOAND_STATEMENT_FAILURE,\r\n DOWNLOAND_PDF_STATEMENT_REQUEST,\r\n DOWNLOAND_PDF_STATEMENT_SUCCESS,\r\n DOWNLOAND_PDF_STATEMENT_FAILURE,\r\n SET_IS_HAULFRYN_BANK_DETAILS_MODAL_OPEN,\r\n GET_HAULFRYN_BANK_DETAILS_REQUEST,\r\n GET_HAULFRYN_BANK_DETAILS_SUCCESS,\r\n GET_HAULFRYN_BANK_DETAILS_FAILURE,\r\n \r\n MAKE_PAYMENT,\r\n PAYMENT_CONFIRMING,\r\n AccountActionTypes,\r\n} from './ActionTypes';\r\nimport moment from 'moment';\r\n\r\ninterface AccountState {\r\n transactions: PagedResultDTO;\r\n transactionFilter: TransactionFilterDTO;\r\n isSearchingTransactions: boolean;\r\n transactionSearchError: string | undefined;\r\n isMyBankDetailsModalOpen: boolean;\r\n myBankDetails?: MyBankDetailsDTO;\r\n isGettingBankDetails: boolean;\r\n gettingBankDetailsError: boolean;\r\n isDownloadingStatement: boolean;\r\n downloadStatementError: string | undefined;\r\n isDownloadingPdfStatement: boolean;\r\n downloadPdfStatementError: string | undefined; \r\n isMakeAPaymentModalOpen: boolean;\r\n haulfrynBankDetails?: HaulfrynBankDetailsDTO;\r\n isGettingHaulfrynBankDetails: boolean;\r\n paymentDetails?: PaymentDetails;\r\n}\r\n\r\nconst initialState: AccountState = {\r\n transactions: {\r\n Dtos: [],\r\n Total: 0,\r\n PageSize: 10,\r\n },\r\n transactionFilter: {\r\n Page: 1,\r\n PageSize: 10,\r\n SortField: 'TransactionDate',\r\n SortDirection: 'desc',\r\n FromDate: moment().startOf('month').subtract(6, 'months').format('DD/MM/YYYY'),\r\n ToDate: moment().format('DD/MM/YYYY'),\r\n AccountId: 0,\r\n AccountNumber: '',\r\n TransactionCategory: '',\r\n },\r\n isSearchingTransactions: false,\r\n transactionSearchError: undefined,\r\n isMyBankDetailsModalOpen: false,\r\n myBankDetails: undefined,\r\n isGettingBankDetails: false,\r\n gettingBankDetailsError: false,\r\n isDownloadingStatement: false,\r\n downloadStatementError: undefined,\r\n isDownloadingPdfStatement: false,\r\n downloadPdfStatementError: undefined,\r\n isMakeAPaymentModalOpen: false,\r\n haulfrynBankDetails: undefined,\r\n isGettingHaulfrynBankDetails: false,\r\n paymentDetails: undefined,\r\n};\r\n\r\nexport default (state = initialState, action: AccountActionTypes): AccountState => {\r\n switch (action.type) {\r\n case SEARCH_TRANSACTIONS_REQUEST:\r\n return { ...state, isSearchingTransactions: action.payload };\r\n case SEARCH_TRANSACTIONS_SUCCESS:\r\n return { ...state, transactions: action.payload, isSearchingTransactions: false };\r\n case SEARCH_TRANSACTIONS_FAILURE:\r\n return { ...state, transactionSearchError: action.payload, isSearchingTransactions: false };\r\n case SET_TRANSACTION_FILTER:\r\n return { ...state, transactionFilter: action.payload };\r\n case SET_IS_MY_BANK_DETAILS_MODAL_OPEN:\r\n return { ...state, isMyBankDetailsModalOpen: action.payload };\r\n case GET_MY_BANK_DETAILS_REQUEST:\r\n return { ...state, myBankDetails: undefined, gettingBankDetailsError: false, isGettingBankDetails: true };\r\n case GET_MY_BANK_DETAILS_SUCCESS:\r\n return { ...state, myBankDetails: action.payload, isGettingBankDetails: false };\r\n case GET_MY_BANK_DETAILS_FAILURE:\r\n return { ...state, myBankDetails: undefined, gettingBankDetailsError: true, isGettingBankDetails: false };\r\n case DOWNLOAND_STATEMENT_REQUEST:\r\n return { ...state, isDownloadingStatement: action.payload };\r\n case DOWNLOAND_STATEMENT_SUCCESS:\r\n return { ...state, isDownloadingStatement: action.payload };\r\n case DOWNLOAND_STATEMENT_FAILURE:\r\n return { ...state, downloadStatementError: action.payload, isDownloadingStatement: false };\r\n case DOWNLOAND_PDF_STATEMENT_REQUEST:\r\n return { ...state, isDownloadingPdfStatement: action.payload };\r\n case DOWNLOAND_PDF_STATEMENT_SUCCESS:\r\n return { ...state, isDownloadingPdfStatement: action.payload };\r\n case DOWNLOAND_PDF_STATEMENT_FAILURE:\r\n return { ...state, downloadPdfStatementError: action.payload, isDownloadingPdfStatement: false };\r\n case SET_IS_HAULFRYN_BANK_DETAILS_MODAL_OPEN:\r\n return { ...state, isMakeAPaymentModalOpen: action.payload };\r\n case GET_HAULFRYN_BANK_DETAILS_REQUEST:\r\n return { ...state, haulfrynBankDetails: undefined, isGettingHaulfrynBankDetails: true };\r\n case GET_HAULFRYN_BANK_DETAILS_SUCCESS:\r\n return { ...state, haulfrynBankDetails: action.payload, isGettingHaulfrynBankDetails: false };\r\n case GET_HAULFRYN_BANK_DETAILS_FAILURE:\r\n return { ...state, haulfrynBankDetails: undefined, isGettingHaulfrynBankDetails: false };\r\n case MAKE_PAYMENT:\r\n return { ...state, paymentDetails: action.payload };\r\n case PAYMENT_CONFIRMING:\r\n return { ...state, paymentDetails: undefined };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import {\r\n SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN,\r\n SET_CONTACT_HAULFRYN_MODAL_OPEN,\r\n SET_IS_UPDATE_MY_PASSWORD_SUCCES_MODAL_OPEN,\r\n SET_IS_MARKETING_PREFERENCES_WARNING_MODAL_OPEN,\r\n SET_REFER_MEMBERSHIPS_PROMPT_OPEN,\r\n SET_MEMBERSHIPS_FLOW_CONTACT_PROMPT_OPEN,\r\n SET_MEMBERSHIPS_CONTACT_PROMPT_NEXT_STEP,\r\n SET_REFER_SENT_PROMPT_OPEN,\r\n SET_EXIT_PROMPT_OPEN,\r\n SET_ERROR_PROMPT_OPEN,\r\n} from \"./ActionTypes\";\r\n\r\nconst initialState = {\r\n myContactDetails: { isOpen: false },\r\n contactHaulfryn: { isOpen: false },\r\n referMembership: {isOpen: false},\r\n exit: {isOpen: false },\r\n error: {isOpen: false},\r\n referralSent: { isOpen: false },\r\n updatePasswordSuccess: { isOpen: false },\r\n marketingPreferencesWarningModalIsOpen: false,\r\n membershipflowContactprompt: { isOpen: false, type: \"\"},\r\n membershipContactPromptNextStep: { nextStep: false },\r\n};\r\n\r\nexport default (state = initialState, action: any) => {\r\n switch (action.type) {\r\n case SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN:\r\n return {\r\n ...state,\r\n myContactDetails: { ...state.myContactDetails, isOpen: action.payload },\r\n };\r\n case SET_EXIT_PROMPT_OPEN:\r\n return {\r\n ...state,\r\n exit: { ...state.exit, isOpen: action.payload },\r\n };\r\n case SET_ERROR_PROMPT_OPEN:\r\n return {\r\n ...state,\r\n error: { ...state.error, isOpen: action.payload },\r\n };\r\n case SET_CONTACT_HAULFRYN_MODAL_OPEN:\r\n return {\r\n ...state,\r\n contactHaulfryn: { ...state.contactHaulfryn, isOpen: action.payload },\r\n };\r\n case SET_REFER_MEMBERSHIPS_PROMPT_OPEN:\r\n return {\r\n ...state,\r\n referMembership: {...state.referMembership, isOpen: action.payload },\r\n };\r\n case SET_REFER_SENT_PROMPT_OPEN:\r\n return {\r\n ...state,\r\n referralSent: {...state.referralSent, isOpen: action.payload },\r\n };\r\n case SET_MEMBERSHIPS_FLOW_CONTACT_PROMPT_OPEN:\r\n return {\r\n ...state,\r\n membershipflowContactprompt: {...state.membershipflowContactprompt, isOpen: action.payload.isOpen, type: action.payload.type },\r\n }\r\n case SET_MEMBERSHIPS_CONTACT_PROMPT_NEXT_STEP:\r\n return {\r\n ...state,\r\n membershipContactPromptNextStep: {...state.membershipContactPromptNextStep, nextStep: action.payload },\r\n }\r\n case SET_IS_UPDATE_MY_PASSWORD_SUCCES_MODAL_OPEN:\r\n return {\r\n ...state,\r\n updatePasswordSuccess: {\r\n ...state.updatePasswordSuccess,\r\n isOpen: action.payload,\r\n },\r\n };\r\n case SET_IS_MARKETING_PREFERENCES_WARNING_MODAL_OPEN:\r\n return {\r\n ...state,\r\n marketingPreferencesWarningModalIsOpen: action.payload,\r\n };\r\n default:\r\n return state;\r\n }\r\n};\r\n","import { ParQFormInputs } from '../../ParQFormInputs';\r\nimport {\r\n SET_MEMBERSHIP_KEY, SET_PAR_Q_INFORMATION_FAILURE, SET_PAR_Q_INFORMATION_REQUEST, SET_PAR_Q_INFORMATION_SUCCESS, UPDATE_PAR_Q_FORM, UPDATE_PAR_Q_FORM_DTO\r\n} from './ActionTypes';\r\n\r\ninterface ParQState {\r\n membershipKey?: string;\r\n parQFormDTO: ParQFormDTO | undefined;\r\n parQFormInputs: IParQFormInputs;\r\n setParQInformationRequest: boolean;\r\n setParQInformationSuccess: boolean;\r\n setParQInformationFailure: boolean;\r\n}\r\n\r\nconst initialState: ParQState = {\r\n membershipKey: '',\r\n parQFormDTO: undefined,\r\n parQFormInputs: new ParQFormInputs(),\r\n setParQInformationRequest: false,\r\n setParQInformationSuccess: false,\r\n setParQInformationFailure: false,\r\n}\r\n\r\nexport default (state = initialState, action: any) => {\r\n switch (action.type) {\r\n case SET_MEMBERSHIP_KEY:\r\n return {\r\n ...state,\r\n membershipKey: action.payload,\r\n }\r\n case SET_PAR_Q_INFORMATION_REQUEST:\r\n return {\r\n ...state,\r\n setParQInformationRequest: true,\r\n setParQInformationSuccess: false,\r\n setParQInformationFailure: false,\r\n }\r\n case SET_PAR_Q_INFORMATION_SUCCESS:\r\n return {\r\n ...state,\r\n setParQInformationRequest: false,\r\n setParQInformationSuccess: true,\r\n }\r\n case SET_PAR_Q_INFORMATION_FAILURE:\r\n return {\r\n ...state,\r\n setParQInformationRequest: false,\r\n setParQInformationFailure: true,\r\n }\r\n case UPDATE_PAR_Q_FORM:\r\n return {\r\n ...state,\r\n parQFormInputs: action.payload,\r\n }\r\n case UPDATE_PAR_Q_FORM_DTO:\r\n return {\r\n ...state,\r\n parQFormDTO: action.payload,\r\n }\r\n default:\r\n return state;\r\n }\r\n}","export class ParQFormInputs implements IParQFormInputs {\r\n heartConditionHistory?: FormInput;\r\n chestPainActivity?: FormInput;\r\n chestPainNoActivity?: FormInput;\r\n loseBalance?: FormInput;\r\n boneJointProblem?: FormInput;\r\n bloodPressureHeartMedication?: FormInput;\r\n otherReason?: FormInput;\r\n otherReasonComment?: FormInput;\r\n\r\n constructor() {\r\n this.heartConditionHistory = { errors: [\"hasValue\"] };\r\n this.chestPainActivity = { errors: [\"hasValue\"] };\r\n this.chestPainNoActivity = { errors: [\"hasValue\"] };\r\n this.loseBalance = { errors: [\"hasValue\"] };\r\n this.boneJointProblem = { errors: [\"hasValue\"] };\r\n this.bloodPressureHeartMedication = { errors: [\"hasValue\"] };\r\n this.otherReason = { errors: [\"hasValue\"] };\r\n this.otherReasonComment = { errors: [] };\r\n }\r\n}","import { combineReducers } from 'redux';\r\nimport login from './Login/Redux/Reducers';\r\nimport user from './User/Redux/Reducers';\r\nimport guests from './Guests/Redux/Reducers';\r\nimport information from './Information/Redux/Reducers';\r\nimport calendar from './Calendar/Redux/Reducers';\r\nimport application from './Shared/Redux/Reducers';\r\nimport account from './Account/Redux/Reducers';\r\nimport modal from './Modal/Redux/Reducers';\r\nimport parQForm from './ParQForm/Redux/Reducers';\r\n\r\nexport const rootReducer = combineReducers({\r\n login,\r\n user,\r\n guests,\r\n information,\r\n calendar,\r\n application,\r\n account,\r\n modal,\r\n parQForm\r\n});\r\n\r\nexport type AppState = ReturnType;\r\n","export const LOGIN_REQUEST = 'LOGIN_REQUEST';\r\nexport const LOGIN_SUCCESS = 'LOGIN_SUCCESS';\r\nexport const LOGIN_FAILURE = 'LOGIN_FAILURE';\r\nexport const GO_TO_LOGIN = 'GO_TO_LOGIN';\r\nexport const LOGOUT = 'LOGOUT';\r\nexport const SET_LOGIN_METHOD = 'SET_LOGIN_METHOD';","export const SET_USER_NAME = \"SET_USER_NAME\";\r\nexport const SET_OWNER_ID = \"SET_OWNER_ID\";\r\nexport const SET_LOGIN_EMAIL = \"SET_LOGIN_EMAIL\";\r\nexport const SET_USER_LODGES = \"SET_USER_LODGES\";\r\nexport const SET_SELECTED_LODGE = \"SET_SELECTED_LODGE\";\r\nexport const SET_SELECTED_PARK = \"SET_SELECTED_PARK\";\r\nexport const SET_USER_ROLES = 'SET_USER_ROLES';\r\nexport const GET_MY_CONTACT_DETAILS_REQUEST = \"GET_MY_CONTACT_DETAILS_REQUEST\";\r\nexport const GET_MY_CONTACT_DETAILS_SUCCESS = \"GET_MY_CONTACT_DETAILS_SUCCESS\";\r\nexport const GET_MY_CONTACT_DETAILS_FAILURE = \"GET_MY_CONTACT_DETAILS_FAILURE\";\r\nexport const UPDATE_MY_CONTACT_DETAILS_REQUEST =\r\n \"UPDATE_MY_CONTACT_DETAILS_REQUEST\";\r\nexport const UPDATE_MY_CONTACT_DETAILS_SUCCESS =\r\n \"UPDATE_MY_CONTACT_DETAILS_SUCCESS\";\r\nexport const UPDATE_MY_CONTACT_DETAILS_FAILURE =\r\n \"UPDATE_MY_CONTACT_DETAILS_FAILURE\";\r\nexport const GET_MARKETING_PREFERENCES_REQUEST =\r\n \"GET_MARKETING_PREFERENCES_REQUEST\";\r\nexport const GET_MARKETING_PREFERENCES_SUCCESS =\r\n \"GET_MARKETING_PREFERENCES_SUCCESS\";\r\nexport const SET_MARKETING_PREFERENCES_REQUEST =\r\n \"SET_MARKETING_PREFERENCES_REQUEST\";\r\nexport const SET_MARKETING_PREFERENCES_SUCCESS =\r\n \"SET_MARKETING_PREFERENCES_SUCCESS\";\r\nexport const SET_MY_PASSWORD_REQUEST = \"SET_MY_PASSWORD_REQUEST\";\r\nexport const SET_MY_PASSWORD_SUCCESS = \"SET_MY_PASSWORD_SUCCESS\";\r\nexport const SET_MY_PASSWORD_FAILURE = \"SET_MY_PASSWORD_FAILURE\";\r\nexport const SET_ACCOUNT_BALANCE = \"SET_ACCOUNT_BALANCE\";\r\nexport const GET_SHOW_MEMBERSHIP_PROMPT_REQUEST = \"GET_SHOW_MEMBERSHIP_PROMPT_REQUEST\";\r\nexport const GET_SHOW_MEMBERSHIP_PROMPT_SUCCESS = \"GET_SHOW_MEMBERSHIP_PROMPT_SUCCESS\";\r\nexport const GET_SHOW_MEMBERSHIP_PROMPT_FAILURE = \"GET_SHOW_MEMBERSHIP_PROMPT_FAILURE\";\r\nexport const SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_REQUEST = \"SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_REQUEST\";\r\nexport const SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_SUCCESS = \"SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_SUCCESS\";\r\nexport const SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_FAILURE = \"SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_FAILURE\";\r\nexport const GET_OWNER_MEMBERSHIP_AVAILABILITY_REQUEST = \"GET_OWNER_MEMBERSHIP_AVAILABILITY_REQUEST\";\r\nexport const GET_OWNER_MEMBERSHIP_AVAILABILITY_SUCCESS = \"GET_OWNER_MEMBERSHIP_AVAILABILITY_SUCCESS\";\r\nexport const GET_OWNER_MEMBERSHIP_AVAILABILITY_FAILURE = \"GET_OWNER_MEMBERSHIP_AVAILABILITY_FAILURE\";\r\nexport const SET_IS_REFERRED_USER = 'SET_IS_REFERRED_USER';\r\nexport const SET_MEMBERSHIP_NUMBER = 'SET_MEMBERSHIP_NUMBER';\r\nexport const SET_CAN_REFER = 'SET_CAN_REFER';\r\nexport const SET_USER_ROLE_CLAIMS = 'SET_USER_ROLE_CLAIMS';\r\n\r\n","import { Action } from 'redux';\r\n\r\nexport const SEARCH_TRANSACTIONS_REQUEST = 'SEARCH_TRANSACTIONS_REQUEST';\r\nexport const SEARCH_TRANSACTIONS_SUCCESS = 'SEARCH_TRANSACTIONS_SUCCESS';\r\nexport const SEARCH_TRANSACTIONS_FAILURE = 'SEARCH_TRANSACTIONS_FAILURE';\r\nexport const SET_TRANSACTION_FILTER = 'SET_TRANSACTION_FILTER';\r\nexport const SET_IS_MY_BANK_DETAILS_MODAL_OPEN = 'SET_IS_MY_BANK_DETAILS_MODAL_OPEN';\r\nexport const GET_MY_BANK_DETAILS_REQUEST = 'GET_MY_BANK_DETAILS_REQUEST';\r\nexport const GET_MY_BANK_DETAILS_SUCCESS = 'GET_MY_BANK_DETAILS_SUCCESS';\r\nexport const GET_MY_BANK_DETAILS_FAILURE = 'GET_MY_BANK_DETAILS_FAILURE';\r\nexport const SET_IS_HAULFRYN_BANK_DETAILS_MODAL_OPEN = 'SET_IS_HAULFRYN_BANK_DETAILS_MODAL_OPEN';\r\nexport const GET_HAULFRYN_BANK_DETAILS_REQUEST = 'GET_HAULFRYN_BANK_DETAILS_REQUEST';\r\nexport const GET_HAULFRYN_BANK_DETAILS_SUCCESS = 'GET_HAULFRYN_BANK_DETAILS_SUCCESS';\r\nexport const GET_HAULFRYN_BANK_DETAILS_FAILURE = 'GET_HAULFRYN_BANK_DETAILS_FAILURE';\r\nexport const DOWNLOAND_STATEMENT_REQUEST = 'DOWNLOAND_STATEMENT_REQUEST';\r\nexport const DOWNLOAND_STATEMENT_SUCCESS = 'DOWNLOAND_STATEMENT_SUCCESS';\r\nexport const DOWNLOAND_STATEMENT_FAILURE = 'DOWNLOAND_STATEMENT_FAILURE';\r\nexport const DOWNLOAND_PDF_STATEMENT_REQUEST = 'DOWNLOAND_PDF_STATEMENT_REQUEST';\r\nexport const DOWNLOAND_PDF_STATEMENT_SUCCESS = 'DOWNLOAND_PDF_STATEMENT_SUCCESS';\r\nexport const DOWNLOAND_PDF_STATEMENT_FAILURE = 'DOWNLOAND_PDF_STATEMENT_FAILURE';\r\nexport const MAKE_PAYMENT = 'MAKE_PAYMENT';\r\nexport const PAYMENT_CONFIRMING = 'PAYMENT_CONFIRMING';\r\nexport const PAYMENT_CONFIRMED = 'PAYMENT_CONFIRMED';\r\n\r\nexport interface SearchTransactionsAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\nexport interface SearchTransactionsSuccessAction extends Action {\r\n payload: PagedResultDTO;\r\n}\r\n\r\nexport interface SearchTransactionsFailureAction extends Action {\r\n payload: any;\r\n}\r\n\r\nexport interface SetTransactionFilterAction extends Action {\r\n payload: TransactionFilterDTO;\r\n}\r\n\r\nexport interface SetIsMyBankDetailsModalOpenAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\nexport interface SetIsHaulfrynBankDetailsModalOpenAction\r\n extends Action {\r\n payload: boolean;\r\n}\r\n\r\nexport interface GetMyBankDetailsRequestAction extends Action {\r\n payload: any;\r\n}\r\n\r\nexport interface GetMyBankDetailsSuccessAction extends Action {\r\n payload: MyBankDetailsDTO;\r\n}\r\n\r\nexport interface GetMyBankDetailsFailureAction extends Action {\r\n payload: any;\r\n}\r\n\r\nexport interface GetHaulfrynBankDetailsRequestAction extends Action {\r\n payload: any;\r\n}\r\nexport interface GetHaulfrynBankDetailsSuccessAction extends Action {\r\n payload: HaulfrynBankDetailsDTO;\r\n}\r\n\r\nexport interface GetHaulfrynBankDetailsFailureAction extends Action {\r\n payload: any;\r\n}\r\n\r\nexport interface DownloadStatementAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\nexport interface DownloadStatementSuccessAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\nexport interface DownloadStatementFailureAction extends Action {\r\n payload: string;\r\n}\r\n\r\nexport interface DownloadPdfStatementAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\nexport interface DownloadPdfStatementSuccessAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\nexport interface DownloadPdfStatementFailureAction extends Action {\r\n payload: string;\r\n}\r\n\r\n\r\nexport interface MakePaymentAction extends Action {\r\n payload: PaymentDetails;\r\n}\r\nexport interface PaymentConfirmingAction extends Action {\r\n payload: any;\r\n}\r\nexport interface PaymentConfirmedAction extends Action {\r\n payload: number;\r\n}\r\n\r\nexport type AccountActionTypes =\r\n | SearchTransactionsAction\r\n | SearchTransactionsSuccessAction\r\n | SearchTransactionsFailureAction\r\n | SetTransactionFilterAction\r\n | SetIsMyBankDetailsModalOpenAction\r\n | GetMyBankDetailsRequestAction\r\n | GetMyBankDetailsSuccessAction\r\n | GetMyBankDetailsFailureAction\r\n | DownloadStatementAction\r\n | DownloadStatementSuccessAction\r\n | DownloadStatementFailureAction\r\n | DownloadPdfStatementAction\r\n | DownloadPdfStatementSuccessAction\r\n | DownloadPdfStatementFailureAction\r\n | SetIsHaulfrynBankDetailsModalOpenAction\r\n | GetHaulfrynBankDetailsRequestAction\r\n | GetHaulfrynBankDetailsSuccessAction\r\n | GetHaulfrynBankDetailsFailureAction\r\n | MakePaymentAction\r\n | PaymentConfirmingAction\r\n | PaymentConfirmedAction;\r\n","export const SEARCH_PASSES_REQUEST = 'SEARCH_PASSES_REQUEST';\r\nexport const SEARCH_PASSES_SUCCESS = 'SEARCH_PASSES_SUCCESS';\r\nexport const SEARCH_PASSES_FAILURE = 'SEARCH_PASSES_FAILURE';\r\nexport const SET_PASSES_FILTER = 'SET_PASSES_FILTER';\r\nexport const GET_PARK_PASS_TYPE_REQUEST = 'GET_PARK_PASS_TYPE_REQUEST';\r\nexport const GET_PARK_PASS_TYPE_SUCCESS = 'GET_PARK_PASS_TYPE_SUCCESS';\r\nexport const GET_PARK_PASS_TYPE_FAILURE = 'GET_PARK_PASS_TYPE_FAILURE';\r\nexport const SET_SELECTED_PARK_PASS_TYPE = 'SET_SELECTED_PARK_PASS_TYPE';\r\nexport const ADD_CAR_PASS_REQUEST = 'ADD_CAR_PASS_REQUEST';\r\nexport const ADD_CAR_PASS_SUCCESS = 'ADD_CAR_PASS_SUCCESS';\r\nexport const ADD_CAR_PASS_FAILURE = 'ADD_CAR_PASS_FAILURE';\r\nexport const ADD_SEASON_PASS_REQUEST = 'ADD_SEASON_PASS_REQUEST';\r\nexport const ADD_SEASON_PASS_SUCCESS = 'ADD_SEASON_PASS_SUCCESS';\r\nexport const ADD_SEASON_PASS_FAILURE = 'ADD_SEASON_PASS_FAILURE';\r\nexport const ADD_SHORT_STAY_PASS_REQUEST = 'ADD_SHORT_STAY_PASS_REQUEST';\r\nexport const ADD_SHORT_STAY_PASS_SUCCESS = 'ADD_SHORT_STAY_PASS_SUCCESS';\r\nexport const ADD_SHORT_STAY_PASS_FAILURE = 'ADD_SHORT_STAY_PASS_FAILURE';\r\nexport const SET_IS_ADD_PASS_MODAL_OPEN = 'SET_IS_ADD_PASS_MODAL_OPEN';\r\nexport const SET_IS_ADD_PASS_PHOTO_MODAL_OPEN = 'SET_IS_ADD_PASS_PHOTO_MODAL_OPEN';\r\nexport const SET_ADD_PASS_SUCCESSFUL_MODAL_OPEN = 'SET_ADD_PASS_SUCCESSFUL_MODAL_OPEN';\r\nexport const SET_ADD_PASS_ERROR_MODAL_OPEN = 'SET_ADD_PASS_ERROR_MODAL_OPEN';\r\nexport const SET_IS_RENEW_PASS_MODAL_OPEN = 'SET_IS_RENEW_PASS_MODAL_OPEN';\r\nexport const SET_RENEW_PASS_SUCCESSFUL_MODAL_OPEN = 'SET_RENEW_PASS_SUCCESSFUL_MODAL_OPEN';\r\nexport const SET_RENEW_PASS_ERROR_MODAL_OPEN = 'SET_RENEW_PASS_ERROR_MODAL_OPEN';\r\nexport const DELETE_PASS_REQUEST = 'DELETE_PASS_REQUEST';\r\nexport const DELETE_PASS_SUCCESS = 'DELETE_PASS_SUCCESS';\r\nexport const DELETE_PASS_FAILURE = 'DELETE_PASS_FAILURE';\r\nexport const SET_DELETE_PASS_CONFIRMATION_MODAL_OPEN = 'SET_DELETE_PASS_CONFIRMATION_MODAL_OPEN';\r\nexport const SET_DELETE_PASS_ERROR_MODAL_OPEN = 'SET_DELETE_PASS_ERROR_MODAL_OPEN';\r\nexport const RENEW_SEASON_PASS_REQUEST = 'RENEW_SEASON_PASS_REQUEST';\r\nexport const RENEW_SEASON_PASS_SUCCESS = 'RENEW_SEASON_PASS_SUCCESS';\r\nexport const RENEW_SEASON_PASS_FAILURE = 'RENEW_SEASON_PASS_FAILURE';\r\nexport const ANALYZE_PASS_PHOTO_REQUEST = 'ANALYZE_PASS_PHOTO_REQUEST';\r\nexport const ANALYZE_PASS_PHOTO_SUCCESS = 'ANALYZE_PASS_PHOTO_SUCCESS';\r\nexport const ANALYZE_PASS_PHOTO_FAILURE = 'ANALYZE_PASS_PHOTO_FAILURE';\r\nexport const GET_PASS_PHOTO_SIZE_LIMIT_REQUEST = 'GET_PASS_PHOTO_SIZE_LIMIT_REQUEST';\r\nexport const GET_PASS_PHOTO_SIZE_LIMIT_SUCCESS = 'GET_PASS_PHOTO_SIZE_LIMIT_SUCCESS';\r\nexport const GET_PASS_PHOTO_SIZE_LIMIT_FAILURE = 'GET_PASS_PHOTO_SIZE_LIMIT_FAILURE';\r\nexport const ADD_MEMBERSHIP_REQUEST = 'ADD_MEMBERSHIP_REQUEST';\r\nexport const ADD_MEMBERSHIP_SUCCESS = 'ADD_MEMBERSHIP_SUCCESS';\r\nexport const ADD_MEMBERSHIP_FAILURE = 'ADD_MEMBERSHIP_FAILURE';\r\nexport const SAVE_AND_EXIT = 'SAVE_AND_EXIT';\r\nexport const CHANGE_MEMBERSHIP_FORM_PAGE = 'UPDATE_MEMBERSHIP_FORM_PAGE';\r\nexport const UPDATE_MEMBERSHIP_FORM = 'UPDATE_MEMBERSHIP_FORM';\r\nexport const UPDATE_NEW_MEMBERSHIP = 'UPDATE_NEW_MEMBERSHIP';\r\nexport const GET_MY_MEMBERSHIPS_REQUEST = 'GET_MY_MEMBERSHIPS_REQUEST';\r\nexport const GET_MY_MEMBERSHIPS_SUCCESS = 'GET_MY_MEMBERSHIPS_SUCCESS';\r\nexport const GET_MY_MEMBERSHIPS_FAILURE = 'GET_MY_MEMBERSHIPS_FAILURE';\r\nexport const GET_ADD_MEMBERSHIP_BY_ID_REQUEST = 'GET_ADD_MEMBERSHIP_BY_ID_REQUEST';\r\nexport const GET_ADD_MEMBERSHIP_BY_ID_SUCCESS = 'GET_ADD_MEMBERSHIP_BY_ID_SUCCESS';\r\nexport const GET_ADD_MEMBERSHIP_BY_ID_FAILURE = 'GET_ADD_MEMBERSHIP_BY_ID_FAILURE';\r\nexport const UPDATE_MEMBERSHIP_BASKET = 'UPDATE_MEMBERSHIP_BASKET';\r\nexport const UPDATE_MEMBERSHIP_FORM_PAGE = 'UPDATE_MEMBERSHIP_FORM_PAGE';\r\nexport const UPDATE_REFER_MEMBERSHIP_FORM_PAGE = 'UPDATE_REFER_MEMBERSHIP_FORM_PAGE';\r\nexport const START_NEW_MEMBERSHIP = 'START_NEW_MEMBERSHIP';\r\nexport const TOGGLE_SHOW_DRAFT_MEMBERSHIPS = 'TOGGLE_SHOW_DRAFT_MEMBERSHIPS';\r\nexport const TOGGLE_SHOW_EXPIRED_MEMBERSHIPS = 'TOGGLE_SHOW_EXPIRED_MEMBERSHIPS';\r\nexport const UPDATE_FILTERED_MEMBERSHIPS = 'UPDATE_FILTERED_MEMBERSHIPS';\r\nexport const ADD_AGE_VERIFICATION_REQUEST = 'ADD_AGE_VERIFICATION_REQUEST';\r\nexport const ADD_AGE_VERIFICATION_SUCCESS = 'ADD_AGE_VERIFICATION_SUCCESS';\r\nexport const ADD_AGE_VERIFICATION_ERROR = 'ADD_AGE_VERIFICATION_ERROR';\r\nexport const GET_EDIT_MEMBERSHIP_BY_ID_REQUEST = 'GET_EDIT_MEMBERSHIP_BY_ID_REQUEST';\r\nexport const GET_EDIT_MEMBERSHIP_BY_ID_SUCCESS = 'GET_EDIT_MEMBERSHIP_BY_ID_SUCCESS';\r\nexport const GET_EDIT_MEMBERSHIP_BY_ID_FAILURE = 'GET_EDIT_MEMBERSHIP_BY_ID_FAILURE';\r\nexport const UPDATE_EDIT_MEMBERSHIP = 'UPDATE_EDIT_MEMBERSHIP';\r\nexport const UPDATE_EDIT_MEMBERSHIP_FORM = 'UPDATE_EDIT_MEMBERSHIP_FORM';\r\nexport const UPDATE_EDIT_MEMBERSHIP_REQUEST = 'UPDATE_EDIT_MEMBERSHIP_FORM';\r\nexport const UPDATE_EDIT_MEMBERSHIP_SUCCESS = 'UPDATE_EDIT_MEMBERSHIP_FORM';\r\nexport const UPDATE_EDIT_MEMBERSHIP_FAILURE = 'UPDATE_EDIT_MEMBERSHIP_FAILURE';\r\nexport const CREATE_MEMBERSHIP_BASKET_REQUEST = 'CREATE_MEMBERSHIP_BASKET_REQUEST';\r\nexport const CREATE_MEMBERSHIP_BASKET_SUCCESS = 'CREATE_MEMBERSHIP_BASKET_SUCCESS';\r\nexport const CREATE_MEMBERSHIP_BASKET_FAILURE = 'CREATE_MEMBERSHIP_BASKET_FAILURE';\r\nexport const SET_SESSION_ID = 'SET_SESSION_ID';\r\nexport const SET_DOCU_SIGN_MESSAGE = 'SET_DOCU_SIGN_MESSAGE';\r\nexport const SET_PAYMENT_SUMMARY_DTO = 'SET_PAYMENT_SUMMARY_DTO';\r\nexport const SET_MEMBERSHIP_COMPONENTS = 'SET_MEMBERSHIP_COMPONENTS';\r\nexport const SET_FINALISE_NOW_CONTAINERS = 'SET_FINALISE_NOW_CONTAINERS';\r\nexport const SET_FINALISE_LATER_CONTAINERS = 'SET_FINALISE_LATER_CONTAINERS';\r\nexport const SET_MEMBERSHIP_TO_DELETE = 'SET_MEMBERSHIP_TO_DELETE';\r\nexport const SET_DELETE_MEMBERSHIP_MODAL_OPEN = 'SET_DELETE_MEMBERSHIP_MODAL_OPEN';\r\nexport const SET_CHECKOUT_SESSION = 'SET_CHECKOUT_SESSION';\r\nexport const SET_PAYMENT_REQUIRED = 'SET_PAYMENT_REQUIRED';\r\nexport const SET_CONTENTFUL_MEMBERSHIP_TYPES = 'SET_CONTENTFUL_MEMBERSHIP_TYPES';\r\nexport const SET_REFERRED_MEMBERSHIP_COMPONENTS = 'SET_REFERRED_MEMBERSHIP_COMPONENTS';\r\nexport const GET_MY_REFERRAL_REQUEST = 'GET_MY_REFERRAL_REQUEST';\r\nexport const GET_MY_REFERRAL_SUCCESS = 'GET_MY_REFERRAL_SUCCESS';\r\nexport const GET_MY_REFERRAL_FAILURE = 'GET_MY_REFERRAL_FAILURE';\r\nexport const SET_TERM_DURATIONS = 'SET_TERM_DURATIONS';","export const SET_LODGE_DETAILS = 'SET_LODGE_DETAILS';\r\nexport const SET_LODGE_DETAILS_LIST = 'SET_LODGE_DETAILS_LIST';\r\nexport const SET_IS_CONTACT_PARK_MODAL_OPEN = 'SET_IS_CONTACT_PARK_MODAL_OPEN';\r\nexport const GET_FAQS_REQUEST = 'GET_FAQS_REQUEST';\r\nexport const GET_FAQS_SUCCESS = 'GET_FAQS_SUCCESS';\r\nexport const GET_FAQS_FAILURE = 'GET_FAQS_FAILURE';\r\nexport const GET_IMPORTANT_INFORMATION_REQUEST = 'GET_IMPORTANT_INFORMATION_REQUEST';\r\nexport const GET_IMPORTANT_INFORMATION_SUCCESS = 'GET_IMPORTANT_INFORMATION_SUCCESS';\r\nexport const GET_IMPORTANT_INFORMATION_FAILURE = 'GET_IMPORTANT_INFORMATION_FAILURE';\r\nexport const GET_PARK_INFORMATION_REQUEST = 'GET_PARK_INFORMATION_REQUEST';\r\nexport const GET_PARK_INFORMATION_SUCCESS = 'GET_PARK_INFORMATION_SUCCESS';\r\nexport const GET_PARK_INFORMATION_FAILURE = 'GET_PARK_INFORMATION_FAILURE';\r\nexport const SET_SELECTED_IMPORTANT_INFORMATION = 'SET_SELECTED_IMPORTANT_INFORMATION';\r\nexport const GET_NEWS_REQUEST = 'GET_NEWS_REQUEST';\r\nexport const GET_NEWS_SUCCESS = 'GET_NEWS_SUCCESS';\r\nexport const GET_NEWS_FAILURE = 'GET_NEWS_FAILURE';\r\nexport const SET_SELECTED_NEWS_ITEM = 'SET_SELECTED_NEWS_ITEM';\r\nexport const RELOAD_TRANSLATIONS = 'RELOAD_TRANSLATIONS';\r\n","import { EntryCollection } from \"contentful\";\r\nimport { Action } from \"redux\";\r\n\r\nexport const SEARCH_EVENTS_REQUEST = 'SEARCH_EVENTS_REQUEST';\r\nexport const SEARCH_EVENTS_SUCCESS = 'SEARCH_EVENTS_SUCCESS';\r\nexport const SEARCH_EVENTS_FAILURE = 'SEARCH_EVENTS_FAILURE';\r\nexport const SET_IS_EVENT_DETAILS_MODAL_OPEN = 'SET_IS_EVENT_DETAILS_MODAL_OPEN';\r\nexport const SEARCH_OFFERS_REQUEST = 'SEARCH_OFFERS_REQUEST';\r\nexport const SEARCH_OFFERS_SUCCESS = 'SEARCH_OFFERS_SUCCESS';\r\nexport const SEARCH_OFFERS_FAILURE = 'SEARCH_OFFERS_FAILURE';\r\nexport const UPDATE_CALENDAR_WIDGET_ITEMS = 'UPDATE_CALENDAR_WIDGET_ITEMS';\r\nexport const SET_SELECTED_CALENDAR_WIDGET = 'SET_SELECTED_CALENDAR_WIDGET';\r\nexport const SET_PAGE_NUMBER = 'SET_PAGE_NUMBER';\r\nexport const SET_IS_ADD_BOOKING_MODAL_OPEN = 'SET_IS_ADD_BOOKING_MODAL_OPEN';\r\nexport const ADD_BOOKING_REQUEST = 'ADD_BOOKING_REQUEST';\r\nexport const ADD_BOOKING_SUCCESS = 'ADD_BOOKING_SUCCESS';\r\nexport const ADD_BOOKING_FAILURE = 'ADD_BOOKING_FAILURE';\r\nexport const SET_IS_ADD_BOOKING_SUCCES_MODAL_OPEN = 'SET_IS_ADD_BOOKING_SUCCESS_MODAL_OPEN';\r\nexport const SET_ADD_BOOKING_ERROR_MESSAGE = 'SET_ADD_BOOKING_ERROR_MESSAGE';\r\n\r\nexport interface SearchEventsAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\nexport interface SearchEventsSuccessAction extends Action {\r\n payload: EntryCollection;\r\n}\r\n\r\nexport interface SearchEventsFailureAction extends Action {\r\n payload: any;\r\n}\r\n\r\ninterface SetIsEventDetailsModalOpenAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\ninterface SearchOffersRequestAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\ninterface SearchOffersSuccessAction extends Action {\r\n payload: EntryCollection;\r\n}\r\n\r\ninterface SearchOffersFailureAction extends Action {\r\n payload: any;\r\n}\r\n\r\nexport interface SetSelectedCalendarWidgetAction extends Action {\r\n payload: SelectedCalendarWidgetOptions;\r\n}\r\n\r\nexport interface SetPageNumberAction extends Action {\r\n payload: number;\r\n}\r\n\r\ninterface SetIsAddBookingModalOpenAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\ninterface AddBookingRequestAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\ninterface AddBookingSuccessAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\ninterface AddBookingFailureAction extends Action {\r\n payload: any;\r\n}\r\n\r\ninterface SetIsAddBookingSuccessModalOpenAction extends Action {\r\n payload: boolean;\r\n}\r\n\r\ninterface SetAddBookingErrorMessage extends Action {\r\n payload: any\r\n}\r\n\r\nexport type CalendarActionTypes = SearchEventsAction | SearchEventsSuccessAction | SearchEventsFailureAction\r\n | SetIsEventDetailsModalOpenAction | SearchOffersRequestAction | SearchOffersSuccessAction | SearchOffersFailureAction | SetSelectedCalendarWidgetAction\r\n | SetPageNumberAction | SetIsAddBookingModalOpenAction | AddBookingRequestAction | AddBookingSuccessAction | AddBookingFailureAction | SetIsAddBookingSuccessModalOpenAction | SetAddBookingErrorMessage;\r\n\r\nexport type SelectedCalendarWidgetOptions = 'events' | 'offers';","export const SET_HEADER_MENU_OPEN = 'SET_HEADER_MENU_OPEN';\r\n","export const SET_HEADER_MENU_OPEN = \"SET_HEADER_MENU_OPEN\";\r\nexport const SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN =\r\n \"SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN\";\r\nexport const SET_CONTACT_HAULFRYN_MODAL_OPEN =\r\n \"SET_CONTACT_HAULFRYN_MODAL_OPEN\";\r\nexport const SET_IS_UPDATE_MY_PASSWORD_SUCCES_MODAL_OPEN =\r\n \"SET_IS_UPDATE_MY_PASSWORD_SUCCES_MODAL_OPEN\";\r\nexport const SET_IS_MARKETING_PREFERENCES_WARNING_MODAL_OPEN =\r\n \"SET_IS_MARKETING_PREFERENCES_WARNING_MODAL_OPEN\";\r\nexport const SET_REFER_MEMBERSHIPS_PROMPT_OPEN =\r\n \"SET_REFER_MEMBERSHIPS_PROMPT_OPEN\";\r\nexport const SET_REFER_SENT_PROMPT_OPEN =\r\n \"SET_REFER_SENT_PROMPT_OPEN\";\r\nexport const SET_MEMBERSHIPS_FLOW_CONTACT_PROMPT_OPEN =\r\n \"SET_MEMBERSHIPS_FLOW_CONTACT_PROMPT_OPEN\";\r\nexport const SET_MEMBERSHIPS_CONTACT_PROMPT_NEXT_STEP =\r\n \"SET_MEMBERSHIPS_CONTACT_PROMPT_NEXT_STEP\";\r\nexport const SET_EXIT_PROMPT_OPEN = \"SET_EXIT_PROMPT_OPEN\"; \r\nexport const SET_ERROR_PROMPT_OPEN = \"SET_ERROR_PROMPT_OPEN\";","export const SET_MEMBERSHIP_KEY = 'SET_MEMBERSHIP_KEY';\r\nexport const SET_PAR_Q_INFORMATION_REQUEST = 'SET_PAR_Q_INFORMATION_REQUEST';\r\nexport const SET_PAR_Q_INFORMATION_SUCCESS = 'SET_PAR_Q_INFORMATION_SUCCESS';\r\nexport const SET_PAR_Q_INFORMATION_FAILURE = 'SET_PAR_Q_INFORMATION_FAILURE';\r\nexport const UPDATE_PAR_Q_FORM = 'UPDATE_PAR_Q_FORM';\r\nexport const UPDATE_PAR_Q_FORM_DTO = 'UPDATE_PAR_Q_FORM_DTO';","import i18n from \"i18next\";\r\nimport Backend from 'i18next-chained-backend';\r\nimport LocalStorageBackend from 'i18next-localstorage-backend';\r\nimport XHR from 'i18next-xhr-backend';\r\nimport LanguageDetector from 'i18next-browser-languagedetector';\r\nimport { initReactI18next } from \"react-i18next\";\r\n\r\nimport { registerLocale, setDefaultLocale } from \"react-datepicker\";\r\nimport enGB from 'date-fns/locale/en-GB';\r\n\r\nconst i18nPromise = i18n\r\n .use(XHR)\r\n .use(LanguageDetector)\r\n .use(initReactI18next)\r\n .use(Backend)\r\n .init({\r\n interpolation: {\r\n escapeValue: false\r\n },\r\n lng: 'en-GB',\r\n whitelist: false,\r\n debug: false,\r\n react: {\r\n wait: false\r\n },\r\n fallbackLng: ['en-GB'],\r\n load: \"currentOnly\",\r\n backend: {\r\n backends: [LocalStorageBackend, XHR],\r\n backendOptions: [\r\n {\r\n prefix: 'i18next_',\r\n expirationTime: 7 * 24 * 60 * 60 * 1000,\r\n versions: {},\r\n store: window.sessionStorage\r\n },\r\n {\r\n loadPath: '/api/translation/GetByLanguage/{{lng}}'\r\n }\r\n ]\r\n }\r\n });\r\n\r\ni18n.changeLanguage('en-GB');\r\n\r\nregisterLocale('enGB', enGB);\r\nsetDefaultLocale('enGB');\r\n\r\nexport default i18nPromise;","import { IconLookup, IconName, IconPrefix, IconProp, library } from '@fortawesome/fontawesome-svg-core';\r\nimport { faEdit, far } from '@fortawesome/free-regular-svg-icons';\r\nimport { faChevronLeft, faChevronRight, fas } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport classNames from 'classnames';\r\nimport React, { Component } from 'react';\r\nimport './Icons.scss';\r\n\r\ninterface IconProps {\r\n icon: IconProp;\r\n}\r\n\r\ninterface ClickableIconProps extends IconProps {\r\n clickAction: (item?: any) => void;\r\n className: string;\r\n size?: any;\r\n id?: string;\r\n}\r\n\r\nexport class ClickableIcon extends Component {\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\ninterface EditIconProps {\r\n clickAction: () => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport class EditIcon extends Component {\r\n render() {\r\n return (\r\n {} : this.props.clickAction}\r\n />\r\n );\r\n }\r\n}\r\n\r\ninterface PreviousIconProps {\r\n clickAction: () => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport class PreviousIcon extends Component {\r\n render() {\r\n return (\r\n {} : this.props.clickAction}\r\n />\r\n );\r\n }\r\n}\r\n\r\ninterface NextIconProps {\r\n clickAction: () => void;\r\n disabled?: boolean;\r\n}\r\n\r\nexport class NextIcon extends Component {\r\n render() {\r\n return (\r\n {} : this.props.clickAction}\r\n />\r\n );\r\n }\r\n}\r\n\r\ninterface TransactionIconProps {\r\n icon: TransactionIconDTO;\r\n}\r\n\r\nexport class TransactionIcon extends Component {\r\n render() {\r\n let faIcon: IconLookup = { prefix: '' as IconPrefix, iconName: '' as IconName };\r\n\r\n if (this.props.icon && this.props.icon.Icon) {\r\n faIcon = {\r\n prefix: this.props.icon.Icon.split(' ')[0] as IconPrefix,\r\n iconName: this.props.icon.Icon.split(' ')[1].replace('fa-', '') as IconName\r\n };\r\n library.add(fas);\r\n library.add(far);\r\n }\r\n\r\n return (\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Buttons.scss';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faArrowAltCircleLeft, far } from '@fortawesome/free-regular-svg-icons';\r\nimport { library, icon, IconPrefix, IconName, IconLookup } from '@fortawesome/fontawesome-svg-core';\r\nimport { fas, faArrowLeft } from '@fortawesome/free-solid-svg-icons';\r\nimport classNames from 'classnames';\r\nimport { ClickableIcon } from './Icons';\r\n\r\ninterface ButtonProps {\r\n id?: string;\r\n text: string;\r\n type?: 'submit' | 'reset' | 'button' | undefined;\r\n className: string;\r\n disabled?: boolean;\r\n isLoading?: boolean;\r\n onClick?: () => void;\r\n icon?: string;\r\n alternateText?: string;\r\n height?: string;\r\n fontSize?: string;\r\n width?: string;\r\n margin?: string;\r\n}\r\n\r\nexport class Button extends Component {\r\n render() {\r\n let faIcon: IconLookup = { prefix: '' as IconPrefix, iconName: '' as IconName };\r\n\r\n if (this.props.icon) {\r\n faIcon = {\r\n prefix: this.props.icon.split(' ')[0] as IconPrefix,\r\n iconName: this.props.icon.split(' ')[1].replace('fa-', '') as IconName,\r\n };\r\n library.add(fas);\r\n library.add(far);\r\n }\r\n\r\n return (\r\n \r\n {this.props.icon && (\r\n
\r\n \r\n
\r\n )}\r\n {this.props.text}\r\n
{this.props.alternateText ? this.props.alternateText : ''}
\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\ninterface PrimaryButtonProps {\r\n id?: string;\r\n text: string;\r\n disabled?: boolean;\r\n isLoading?: boolean;\r\n className?: string;\r\n type?: 'submit' | 'reset' | 'button' | undefined;\r\n onClick?: () => void;\r\n width?: string;\r\n margin?: string;\r\n}\r\n\r\nexport class PrimaryButton extends Component {\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\ninterface SecondaryButtonProps {\r\n id?: string;\r\n text: string;\r\n disabled?: boolean;\r\n isLoading?: boolean;\r\n type?: 'submit' | 'reset' | 'button' | undefined;\r\n className?: string;\r\n onClick?: () => void;\r\n icon?: string;\r\n alternateText?: string;\r\n height?: string;\r\n fontSize?: string;\r\n width?: string;\r\n margin?: string;\r\n}\r\n\r\nexport class SecondaryButton extends Component {\r\n render() {\r\n return (\r\n \r\n {this.props.children}\r\n \r\n );\r\n }\r\n}\r\n\r\n\r\ninterface TertiaryButtonProps {\r\n text: string;\r\n disabled?: boolean;\r\n isLoading?: boolean;\r\n className?: string;\r\n onClick?: () => void;\r\n}\r\n\r\nexport class TertiaryButton extends Component {\r\n render() {\r\n return (\r\n
\r\n {this.props.text}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\ninterface OutlineButtonProps {\r\n text: string;\r\n disabled?: boolean;\r\n isLoading?: boolean;\r\n type?: 'submit' | 'reset' | 'button' | undefined;\r\n onClick?: () => void;\r\n className?: string;\r\n}\r\n\r\nexport class OutlineButton extends Component {\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\ninterface BackLinkButtonProps {\r\n href: string;\r\n text: string;\r\n className: string;\r\n}\r\n\r\nexport class BackLinkButton extends Component {\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\ninterface BackButtonProps {\r\n onClick: () => void;\r\n text: string;\r\n className: string;\r\n}\r\n\r\nexport class BackButton extends Component {\r\n render() {\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\ninterface LinkButtonProps {\r\n onClick: () => void;\r\n text: string;\r\n className?: string;\r\n}\r\n\r\nexport class LinkButton extends Component {\r\n render() {\r\n const className = this.props.className || '';\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\ninterface ModalBackButtonProps {\r\n onBackButtonClick?: () => void;\r\n className?: string;\r\n}\r\n\r\nexport class ModalBackButton extends Component {\r\n clickAction = () => {\r\n if (this.props.onBackButtonClick) {\r\n this.props.onBackButtonClick();\r\n }\r\n };\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport './ErrorBoundary.scss';\r\nimport { PrimaryButton } from './Shared/Components/Presentational/Buttons';\r\nimport history from './History';\r\nimport { faExclamationCircle } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\ninterface ErrorBoundaryState {\r\n hasError: boolean;\r\n}\r\n\r\nclass ErrorBoundary extends Component<{}, ErrorBoundaryState> {\r\n constructor(props: any) {\r\n super(props);\r\n this.state = { hasError: false };\r\n }\r\n\r\n static getDerivedStateFromError(error: any) {\r\n return { hasError: true };\r\n }\r\n\r\n componentDidCatch(error: any, errorInfo: any) {}\r\n\r\n render() {\r\n if (this.state.hasError) {\r\n return (\r\n {\r\n history.push('/');\r\n }}\r\n className=\"error-boundary\"\r\n >\r\n \r\n

Something went wrong

\r\n

\r\n We're having some technical issues. Please click below to go back home or refresh the page and\r\n try again.\r\n

\r\n \r\n \r\n );\r\n }\r\n\r\n return this.props.children;\r\n }\r\n}\r\n\r\nexport default ErrorBoundary;\r\n","import React, { useState, useEffect } from 'react';\r\n\r\n\r\nexport const useIsDesktop = () => {\r\n const [width, setWidth] = useState(window.innerWidth);\r\n const [mounted, setMounted] = useState(true);\r\n\r\n useEffect(() => {\r\n //Credits to https://blog.logrocket.com/developing-responsive-layouts-with-react-hooks/\r\n /* Inside of a \"useEffect\" hook add an event listener that updates\r\n the \"width\" state variable when the window size changes */\r\n const listener = () => {\r\n if (mounted) {\r\n setWidth(window.innerWidth)\r\n }\r\n };\r\n\r\n window.addEventListener('resize', listener);\r\n /* passing an empty array as the dependencies of the effect will cause this\r\n effect to only run when the component mounts, and not each time it updates.\r\n We only want the listener to be added once */\r\n\r\n return () => {\r\n window.removeEventListener('resize', listener);\r\n setMounted(false);\r\n };\r\n\r\n }, []);\r\n\r\n return width >= 992;\r\n}\r\nexport const Mobile = ({ children }: any) => {\r\n const isDesktop = useIsDesktop();\r\n return (<>{isDesktop ? null : children});\r\n}\r\n\r\nexport const Desktop = ({ children }: any) => {\r\n const isDesktop = useIsDesktop();\r\n return (<>{isDesktop ? children : null});\r\n}\r\n","import axios, { AxiosResponse, AxiosRequestConfig, AxiosError } from 'axios';\r\nimport { GetApiCall, PostApiCall, DeleteApiCall, PutApiCall } from './Calls/ApiCall';\r\nimport { store } from '../index';\r\nimport { logout } from '../Login/Redux/ActionCreators';\r\n\r\nexport function Get(request: GetApiCall): Promise> {\r\n\r\n let promise = axios.get(request.url, {\r\n headers: request.headers\r\n } as AxiosRequestConfig);\r\n\r\n promise.catch((err: AxiosError) => {\r\n if (err && err.response && err.response.status === 401 && request.logoutOn401) {\r\n store.dispatch(logout(true) as any);\r\n }\r\n });\r\n\r\n return promise;\r\n}\r\n\r\nexport function Post(request: PostApiCall, properties?: AxiosRequestConfig): Promise> {\r\n\r\n let promise = axios.post(request.url, request.body, {\r\n headers: request.headers,\r\n ...properties\r\n \r\n } as AxiosRequestConfig);\r\n\r\n promise.catch((err: AxiosError) => {\r\n if (err && err.response && err.response.status === 401 && request.logoutOn401) {\r\n store.dispatch(logout(true) as any);\r\n }\r\n });\r\n\r\n return promise;\r\n}\r\n\r\nexport function Put(request: PutApiCall): Promise> {\r\n\r\n let promise = axios.put(request.url, request.body, {\r\n headers: request.headers\r\n } as AxiosRequestConfig);\r\n\r\n promise.catch((err: AxiosError) => {\r\n if (err && err.response && err.response.status === 401 && request.logoutOn401) {\r\n store.dispatch(logout(true) as any);\r\n }\r\n });\r\n\r\n return promise;\r\n}\r\n\r\nexport function Delete(request: DeleteApiCall): Promise> {\r\n\r\n let promise = axios.delete(request.url, {\r\n headers: request.headers\r\n } as AxiosRequestConfig);\r\n\r\n promise.catch((err: AxiosError) => {\r\n if (err && err.response && err.response.status === 401 && request.logoutOn401) {\r\n store.dispatch(logout(true) as any);\r\n }\r\n });\r\n\r\n return promise;\r\n}\r\n","export class ApiCall {\r\n constructor(url: string, isExternal: boolean) {\r\n this.isExternal = isExternal;\r\n this.url = this.isExternal ? url : '/api/' + url;\r\n this.headers = {};\r\n\r\n if (!this.isExternal) {\r\n const token = sessionStorage.getItem('access_token');\r\n\r\n if (token) {\r\n this.headers['Authorization'] = 'Bearer '.concat(token);\r\n }\r\n }\r\n }\r\n\r\n public url: string;\r\n public headers: any;\r\n public logoutOn401: boolean = true;\r\n public isExternal: boolean;\r\n}\r\n\r\nexport class GetApiCall extends ApiCall {\r\n constructor(url: string, params: { [propName: string]: string | number | boolean | Date } = {}, isExternal: boolean = false) {\r\n super(url, isExternal);\r\n\r\n if (params) {\r\n this.url += `?${this.objToQueryString(params)}`;\r\n }\r\n }\r\n\r\n private objToQueryString(obj: { [propName: string]: string | number | boolean | Date }): string {\r\n const keyValuePairs = [];\r\n for (const key in obj) {\r\n keyValuePairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key] ? obj[key].toString() : ''));\r\n }\r\n return keyValuePairs.join('&');\r\n }\r\n}\r\n\r\nexport class PostApiCall extends ApiCall {\r\n constructor(url: string, isExternal: boolean = false) {\r\n super(url, isExternal);\r\n\r\n this.headers['Accept'] = 'application/json';\r\n this.headers['Content-Type'] = 'application/json';\r\n }\r\n\r\n public body: any;\r\n\r\n public get bodyString(): any {\r\n return JSON.stringify(this.body);\r\n }\r\n}\r\n\r\nexport class PutApiCall extends ApiCall {\r\n constructor(url: string, isExternal: boolean = false) {\r\n super(url, isExternal);\r\n\r\n this.headers['Accept'] = 'application/json';\r\n this.headers['Content-Type'] = 'application/json';\r\n }\r\n\r\n public body: any;\r\n\r\n public get bodyString(): string {\r\n return JSON.stringify(this.body);\r\n }\r\n}\r\n\r\nexport class DeleteApiCall extends ApiCall {}\r\n\r\nexport class DeleteApiCall2 extends ApiCall {\r\n constructor(url: string, params: { [propName: string]: string | number | boolean | Date } = {}, isExternal: boolean = false) {\r\n super(url, isExternal);\r\n\r\n if (params) {\r\n this.url += `?${this.objToQueryString(params)}`;\r\n }\r\n }\r\n\r\n private objToQueryString(obj: { [propName: string]: string | number | boolean | Date }): string {\r\n const keyValuePairs = [];\r\n for (const key in obj) {\r\n keyValuePairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key] ? obj[key].toString() : ''));\r\n }\r\n return keyValuePairs.join('&');\r\n }\r\n}\r\n","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostEmailLoginApiCall extends PostApiCall {\r\n\r\n constructor(loginDetails: LoginDTO) {\r\n let url: string = \"login\";\r\n super(url);\r\n\r\n this.body = loginDetails;\r\n this.logoutOn401 = false;\r\n }\r\n}\r\n\r\nexport class PostGoogleLoginApiCall extends PostApiCall {\r\n\r\n constructor(loginDetails: LoginDTO) {\r\n let url: string = \"googlelogin\";\r\n super(url);\r\n\r\n this.body = loginDetails;\r\n this.logoutOn401 = false;\r\n }\r\n}\r\n\r\nexport class PostFacebookLoginApiCall extends PostApiCall {\r\n\r\n constructor(loginDetails: LoginDTO) {\r\n let url: string = \"facebooklogin\";\r\n super(url);\r\n\r\n this.body = loginDetails;\r\n this.logoutOn401 = false;\r\n }\r\n}\r\n\r\n","export default class Clients {\r\n public static Owner: string = 'OwnerClient';\r\n}\r\n","export default class UserRoles {\r\n public static IsOnlyMember(userRoles: UserRoleDTO[]) {\r\n return userRoles.length === 1 && userRoles[0].name === \"Member\";\r\n }\r\n public static IsOwner(userRoles: UserRoleDTO[]) {\r\n return userRoles.find(role => role.name === \"Owner\") !== undefined;\r\n }\r\n}","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetMyContactDetailsCall extends GetApiCall {\r\n constructor() {\r\n let url: string = `account/contactdetails`;\r\n\r\n super(url);\r\n }\r\n}\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostMyContactDetailsCall extends PostApiCall {\r\n constructor(newDetails: UpdateContactDetailsDTO) {\r\n let url: string = 'account/contactdetails';\r\n\r\n super(url);\r\n\r\n this.body = newDetails;\r\n }\r\n}\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostSetPasswordCall extends PostApiCall {\r\n constructor(setPasswordDto: SetPasswordDto) {\r\n const url = `account/setPassword`;\r\n\r\n super(url);\r\n\r\n this.body = setPasswordDto;\r\n this.logoutOn401 = false;\r\n }\r\n}\r\n","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetMarketingPreferencesCall extends GetApiCall {\r\n constructor(ownerId: string) {\r\n let url: string = `account/${ownerId}/marketingpreferences`;\r\n\r\n super(url);\r\n }\r\n}\r\n","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostMarketingPreferencesCall extends PostApiCall {\r\n constructor(\r\n lodgeId: string,\r\n newMarketingPreferences: MarketingPreferencesDTO\r\n ) {\r\n let url: string = `account/${lodgeId}/marketingpreferences`;\r\n\r\n super(url);\r\n\r\n this.body = newMarketingPreferences;\r\n }\r\n}\r\n","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetShowMembershipPromptCall extends GetApiCall {\r\n constructor() {\r\n let url: string = \"Membership/ShowMembershipPrompt\";\r\n\r\n super(url);\r\n }\r\n}","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class PostDontShowAgainMembershipModalCall extends GetApiCall {\r\n constructor() {\r\n let url: string = 'Membership/SetMembershipPromptToOff';\r\n\r\n super(url);\r\n\r\n // this.body = body;\r\n // this.logoutOn401 = false;\r\n }\r\n}","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetOwnerMembershipAvailabilityCall extends GetApiCall {\r\n constructor() {\r\n let url: string = \"Membership/GetOwnerMembershipAvailability\";\r\n\r\n super(url);\r\n }\r\n}","import * as ActionTypes from \"./ActionTypes\";\r\nimport { SET_IS_UPDATE_MY_PASSWORD_SUCCES_MODAL_OPEN } from \"../../Modal/Redux/ActionTypes\";\r\nimport { ThunkAction } from \"redux-thunk\";\r\nimport { AppState } from \"../../RootReducer\";\r\nimport { Action } from \"redux\";\r\nimport { Get, Post } from \"../../Api/ApiService\";\r\nimport { GetMyContactDetailsCall } from \"../../Api/Calls/GetMyContactDetailsCall\";\r\nimport { PostMyContactDetailsCall } from \"../../Api/Calls/PostMyContactDetailsCall\";\r\nimport { PostSetPasswordCall } from \"../../Api/Calls/PostSetPasswordCall\";\r\nimport { GetMarketingPreferencesCall } from \"../../Api/Calls/GetMarketingPreferencesCall\";\r\nimport { PostMarketingPreferencesCall } from \"../../Api/Calls/PostMarketingPreferencesCall\";\r\nimport { GetShowMembershipPromptCall } from \"../../Api/Calls/GetShowMembershipPromptCall\";\r\nimport { PostDontShowAgainMembershipModalCall } from \"../../Api/Calls/PostDontShowAgainMembershipModalCall\";\r\nimport { GetOwnerMembershipAvailabilityCall } from \"../../Api/Calls/GetOwnerMembershipAvailabilityCall\";\r\nimport { getPermissionsFromUserRoles } from \"../../Login/Redux/ActionCreators\";\r\n\r\nexport const setUserLodge =\r\n (lodge: SelectedLodgeDTO): ThunkAction =>\r\n async (dispatch) => {\r\n dispatch({\r\n type: ActionTypes.SET_SELECTED_LODGE,\r\n payload: lodge,\r\n });\r\n };\r\n\r\nexport const setUserPark =\r\n (park: {\r\n parkCode: string;\r\n parkName: string;\r\n parkFeatures: string[];\r\n }): ThunkAction =>\r\n async (dispatch) => {\r\n dispatch({ type: ActionTypes.SET_SELECTED_PARK, payload: park });\r\n };\r\n\r\nexport const getMyContactDetails =\r\n (): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({\r\n type: ActionTypes.GET_MY_CONTACT_DETAILS_REQUEST,\r\n payload: true,\r\n });\r\n Get(\r\n new GetMyContactDetailsCall()\r\n )\r\n .then((response) => {\r\n dispatch({\r\n type: ActionTypes.GET_MY_CONTACT_DETAILS_SUCCESS,\r\n payload: response.data,\r\n });\r\n })\r\n .catch((error) => {\r\n dispatch({\r\n type: ActionTypes.GET_MY_CONTACT_DETAILS_FAILURE,\r\n payload: error,\r\n });\r\n });\r\n };\r\n\r\nexport const updateMyContactDetails =\r\n (\r\n newContactDetails: UpdateContactDetailsDTO\r\n ): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({\r\n type: ActionTypes.UPDATE_MY_CONTACT_DETAILS_REQUEST,\r\n payload: true,\r\n });\r\n Post(new PostMyContactDetailsCall(newContactDetails))\r\n .then((response) => {\r\n dispatch({\r\n type: ActionTypes.UPDATE_MY_CONTACT_DETAILS_SUCCESS,\r\n payload: response.data,\r\n });\r\n })\r\n .catch((error) => {\r\n dispatch({\r\n type: ActionTypes.UPDATE_MY_CONTACT_DETAILS_FAILURE,\r\n payload: error,\r\n });\r\n });\r\n };\r\n\r\nexport const getMarketingPreferences = (): ThunkAction =>\r\n async (dispatch, getState) => {\r\n Get(new GetMarketingPreferencesCall(getState().user.ownerId))\r\n .then((success) => {\r\n dispatch({\r\n type: ActionTypes.GET_MARKETING_PREFERENCES_SUCCESS,\r\n payload: success.data,\r\n });\r\n })\r\n .catch((error) => {\r\n console.log(\"Error getting marketing preferences\", error);\r\n });\r\n };\r\n\r\nexport const updateMarketingPreferences = \r\n (newPreferences: MarketingPreferencesDTO): ThunkAction =>\r\n async (dispatch, getState) => {\r\n Post(new PostMarketingPreferencesCall(getState().user.ownerId, newPreferences))\r\n .then((result) => {\r\n dispatch({\r\n type: ActionTypes.SET_MARKETING_PREFERENCES_SUCCESS,\r\n payload: result.data,\r\n });\r\n dispatch({\r\n type: SET_IS_UPDATE_MY_PASSWORD_SUCCES_MODAL_OPEN,\r\n payload: true,\r\n });\r\n })\r\n .catch((error) => {\r\n console.log(\"Error saving marketing preferences\", error);\r\n });\r\n };\r\n\r\nexport const updateMyPassword =\r\n (newPassword: SetPasswordDto): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({ type: ActionTypes.SET_MY_PASSWORD_REQUEST, payload: true });\r\n Post(new PostSetPasswordCall(newPassword))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.SET_MY_PASSWORD_SUCCESS });\r\n dispatch({\r\n type: SET_IS_UPDATE_MY_PASSWORD_SUCCES_MODAL_OPEN,\r\n payload: true,\r\n });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.SET_MY_PASSWORD_FAILURE, payload: error });\r\n });\r\n };\r\n\r\nexport const getShowMembershipPrompt =\r\n (): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({\r\n type: ActionTypes.GET_SHOW_MEMBERSHIP_PROMPT_REQUEST,\r\n payload: true,\r\n });\r\n Get(\r\n new GetShowMembershipPromptCall()\r\n )\r\n .then((response) => {\r\n dispatch({\r\n type: ActionTypes.GET_SHOW_MEMBERSHIP_PROMPT_SUCCESS,\r\n payload: response.data,\r\n });\r\n })\r\n .catch((error) => {\r\n dispatch({\r\n type: ActionTypes.GET_SHOW_MEMBERSHIP_PROMPT_FAILURE,\r\n payload: error,\r\n });\r\n });\r\n };\r\n\r\nexport const setDontShowAgainMembershipModal = \r\n (): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({\r\n type: ActionTypes.SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_REQUEST,\r\n payload: true,\r\n });\r\n Get(new PostDontShowAgainMembershipModalCall())\r\n .then((response) => {\r\n dispatch({\r\n type: ActionTypes.SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_SUCCESS,\r\n payload: response.data,\r\n });\r\n })\r\n .catch((error) => {\r\n dispatch({\r\n type: ActionTypes.SET_DONT_SHOW_AGAIN_MEMBERSHIP_MODAL_FAILURE,\r\n payload: error,\r\n })\r\n })\r\n }\r\n\r\nexport const getOwnerMembershipAvailability =\r\n (): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({ type: ActionTypes.GET_OWNER_MEMBERSHIP_AVAILABILITY_REQUEST });\r\n Get(\r\n new GetOwnerMembershipAvailabilityCall()\r\n )\r\n .then((response) => {\r\n const ownerAvailability = { allocated: response.data.Allocated, numberUsed: response.data.NumberUsed, available: response.data.Available } as OwnerMembershipAvailabilityDTO;\r\n dispatch({\r\n type: ActionTypes.GET_OWNER_MEMBERSHIP_AVAILABILITY_SUCCESS,\r\n payload: ownerAvailability,\r\n })\r\n })\r\n .then(r => {\r\n dispatch(getPermissionsFromUserRoles());\r\n })\r\n .catch((error) => {\r\n dispatch({\r\n type: ActionTypes.GET_OWNER_MEMBERSHIP_AVAILABILITY_FAILURE,\r\n payload: error,\r\n })\r\n })\r\n }","import {\r\n LOGIN_REQUEST,\r\n LOGIN_SUCCESS,\r\n LOGIN_FAILURE,\r\n GO_TO_LOGIN,\r\n LOGOUT,\r\n} from \"./ActionTypes\";\r\nimport {\r\n SET_USER_LODGES,\r\n SET_USER_NAME,\r\n SET_SELECTED_PARK,\r\n SET_SELECTED_LODGE,\r\n SET_OWNER_ID,\r\n SET_LOGIN_EMAIL,\r\n SET_IS_REFERRED_USER,\r\n SET_MEMBERSHIP_NUMBER,\r\n SET_CAN_REFER,\r\n SET_USER_ROLES,\r\n SET_USER_ROLE_CLAIMS,\r\n} from \"../../User/Redux/ActionTypes\";\r\nimport { SET_LOGIN_METHOD } from \"../../Login/Redux/ActionTypes\";\r\nimport {\r\n SET_LODGE_DETAILS,\r\n SET_LODGE_DETAILS_LIST,\r\n} from \"../../Information/Redux/ActionTypes\";\r\nimport { ThunkAction } from \"redux-thunk\";\r\nimport { AppState } from \"../../RootReducer\";\r\nimport { Action } from \"redux\";\r\nimport { Post } from \"../../Api/ApiService\";\r\nimport {\r\n PostEmailLoginApiCall,\r\n PostGoogleLoginApiCall,\r\n PostFacebookLoginApiCall,\r\n} from \"../../Api/Calls/PostLoginApiCalls\";\r\nimport Clients from \"../../Constants/Clients\";\r\nimport sessionStorage from \"redux-persist/es/storage/session\";\r\nimport UserRoles from \"../../Constants/UserRoles\";\r\nimport { Entry } from \"contentful\";\r\nimport { GetEntryCall } from \"../../Contentful/Calls/GetEntryCall\";\r\nimport { getOwnerMembershipAvailability } from \"../../User/Redux/ActionCreators\";\r\n\r\nexport const login =\r\n (\r\n email: string,\r\n password: string,\r\n type: string\r\n ): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({ type: LOGIN_REQUEST, payload: true });\r\n\r\n let userLogin: LoginDTO = {\r\n Email: email,\r\n Password: password,\r\n ClientName: Clients.Owner,\r\n };\r\n\r\n var loginCall: any;\r\n switch (type) {\r\n case \"google\":\r\n loginCall = new PostGoogleLoginApiCall(userLogin);\r\n break;\r\n case \"facebook\":\r\n loginCall = new PostFacebookLoginApiCall(userLogin);\r\n break;\r\n default:\r\n loginCall = new PostEmailLoginApiCall(userLogin);\r\n }\r\n\r\n Post(loginCall)\r\n .then((response) => {\r\n dispatch({ type: SET_LOGIN_EMAIL, payload: [response.data.LoginEmail, response.data.PhoneNumber] });\r\n dispatch({ type: SET_OWNER_ID, payload: response.data.OwnerId });\r\n dispatch({ type: SET_USER_NAME, payload: [response.data.FirstName, response.data.LastName] });\r\n dispatch({ type: SET_USER_LODGES, payload: response.data.Lodges });\r\n dispatch({ type: SET_LOGIN_METHOD, payload: type });\r\n dispatch({ type: SET_IS_REFERRED_USER, payload: response.data.HasOwnMembership });\r\n // dispatch({ type: SET_CAN_REFER, payload: response.data.CanRefer });\r\n let userRoles: UserRoleDTO[] = [];\r\n response.data.UserRoles.map(userRole => userRoles.push({ name: userRole.Name, contentfulUserTypeId: userRole.ContentfulUserTypeId }));\r\n dispatch({ type: SET_USER_ROLES, payload: userRoles });\r\n \r\n \r\n\r\n\r\n\r\n if (response.data.Lodges.length > 0) {\r\n let selectedLodge: SelectedLodgeDTO = {\r\n LodgeId: response.data.Lodges[0].LodgeId,\r\n LodgeName: response.data.Lodges[0].Name,\r\n ContractEndDate: response.data.Lodges[0].ContractEndDate,\r\n HasSublettings: response.data.Lodges[0].HasSublettings,\r\n AccountId: response.data.Lodges[0].AccountId,\r\n AccountNo: response.data.Lodges[0].AccountNo,\r\n AccountBalance: response.data.Lodges[0].RecentTransactions[0]\r\n ? response.data.Lodges[0].RecentTransactions[0].Balance\r\n : undefined,\r\n };\r\n let selectedPark = {\r\n parkCode: response.data.Lodges[0].ParkCode,\r\n parkName: response.data.Lodges[0].ParkName,\r\n parkFeatures: response.data.Lodges[0].ParkFeatures,\r\n };\r\n\r\n if (getState().user && getState().user.lodge) {\r\n const currentLodgeId = getState().user.lodge.LodgeId;\r\n\r\n if (currentLodgeId && response.data) {\r\n const lodge = response.data.Lodges.find(\r\n (l) => l.LodgeId.toString() === currentLodgeId\r\n );\r\n\r\n if (lodge) {\r\n selectedLodge = {\r\n LodgeId: lodge.LodgeId,\r\n LodgeName: lodge.Name,\r\n ContractEndDate: lodge.ContractEndDate,\r\n HasSublettings: lodge.HasSublettings,\r\n AccountId: lodge.AccountId,\r\n AccountNo: lodge.AccountNo,\r\n AccountBalance: lodge.RecentTransactions[0]\r\n ? lodge.RecentTransactions[0].Balance\r\n : undefined,\r\n };\r\n selectedPark = {\r\n parkCode: lodge.ParkCode,\r\n parkName: lodge.ParkName,\r\n parkFeatures: lodge.ParkFeatures,\r\n };\r\n }\r\n }\r\n }\r\n\r\n dispatch({ type: SET_SELECTED_LODGE, payload: selectedLodge });\r\n dispatch({ type: SET_SELECTED_PARK, payload: selectedPark });\r\n } else {\r\n if (!UserRoles.IsOwner(userRoles)) {\r\n let selectedPark = {\r\n parkCode: \"TW\",\r\n parkName: \"The Warren\",\r\n parkFeatures: [\"Events\", \"Offers\", \"Memberships\", \"Activities\", \"Restaurant\", \"Spa\", \"Statement\", \"Park Info\", \"News\", \"FAQs\", \"ParkInfo\", \"SubletBookings\", \"Passes\"],\r\n }\r\n\r\n dispatch({ type: SET_SELECTED_PARK, payload: selectedPark });\r\n dispatch({ type: SET_MEMBERSHIP_NUMBER, payload: response.data.MembershipNumber });\r\n\r\n }\r\n }\r\n\r\n if (response.data.LodgeDetails.length > 0) {\r\n dispatch({\r\n type: SET_LODGE_DETAILS_LIST,\r\n payload: response.data.LodgeDetails,\r\n });\r\n dispatch({\r\n type: SET_LODGE_DETAILS,\r\n payload: response.data.LodgeDetails[0],\r\n });\r\n }\r\n\r\n sessionStorage.setItem(\r\n \"access_token\",\r\n response.data.TokenDetails.AccessToken\r\n );\r\n dispatch({ type: LOGIN_SUCCESS, payload: true });\r\n })\r\n .then(r => {\r\n dispatch(getOwnerMembershipAvailability());\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n let failurePayload = \"login.unexpectedErrorMessage\";\r\n\r\n if (error && error.response) {\r\n console.log(error.response);\r\n switch (error.response.status) {\r\n case 401:\r\n if (\r\n error.response.data.Message.trim() == \"PARCVU_USER_NOT_FOUND\"\r\n ) {\r\n failurePayload = \"register.userNotInParcVu\";\r\n } else if (\r\n error.response.data.Message.trim() == \"USER_LOGIN_FAILED\"\r\n ) {\r\n failurePayload = \"login.credentialsIncorrectMessage\";\r\n }\r\n break;\r\n }\r\n }\r\n\r\n dispatch({ type: LOGIN_FAILURE, payload: failurePayload });\r\n });\r\n };\r\n\r\nexport const goToLogin =\r\n (): ThunkAction => async (dispatch) => {\r\n dispatch({ type: GO_TO_LOGIN });\r\n };\r\n\r\nexport const logout =\r\n (sessionExpired: boolean): ThunkAction =>\r\n async (dispatch) => {\r\n sessionStorage.removeItem(\"access_token\");\r\n sessionStorage.removeItem(\"persist:root\");\r\n dispatch({ type: LOGOUT, payload: sessionExpired });\r\n };\r\n\r\nexport const getPermissionsFromUserRoles =\r\n (): ThunkAction =>\r\n async (dispatch, getState) => {\r\n let userRoleDTOs: UserRoleDTO[] = getState().user.userRoles;\r\n let ownerMembershipAvailability: OwnerMembershipAvailabilityDTO = getState().user.ownerMembershipsAvailability;\r\n let userRoles: Entry[] = [];\r\n\r\n try {\r\n for (let role of userRoleDTOs) {\r\n let userType = await GetEntryCall(role.contentfulUserTypeId) as unknown as Entry;\r\n userRoles.push(userType);\r\n }\r\n let canReferWithMemberships = userRoles.filter(role =>\r\n role.fields.referralsRequireAllocatedMemberships\r\n && role.fields.availableMembershipTypes.length > 0\r\n && ownerMembershipAvailability.allocated > 0\r\n ).length > 0;\r\n let canReferWithOutMemberships = userRoles.filter(role =>\r\n !role.fields.referralsRequireAllocatedMemberships\r\n ).length > 0;\r\n let forcedToMakeMembership = userRoles.filter(role => role.fields.forceCreateMemberForThemselves).length === userRoles.length;\r\n let array: boolean[] = [canReferWithMemberships, canReferWithOutMemberships, forcedToMakeMembership];\r\n dispatch({ type: SET_USER_ROLE_CLAIMS, payload: array });\r\n } catch (e) {\r\n return false;\r\n }\r\n }","import React, { Component } from \"react\";\r\nimport \"./Widget.scss\";\r\nimport { Link } from \"react-router-dom\";\r\nimport classNames from \"classnames\";\r\n\r\nexport interface WidgetPosition {\r\n columnIndex: number;\r\n columnSpan: number;\r\n rowIndex: number;\r\n rowSpan: number;\r\n}\r\n\r\ninterface WidgetProps {\r\n containerClassName?: string;\r\n position?: WidgetPosition;\r\n contentClassName?: string;\r\n contentsStyle?: any;\r\n}\r\n\r\nexport class Widget extends Component {\r\n private style: any = {\r\n gridColumnStart: this.props.position ? this.props.position.columnIndex : 0,\r\n msGridColumn: this.props.position ? this.props.position.columnIndex : 0,\r\n gridColumnEnd:\r\n \"span \" + (this.props.position ? this.props.position.columnSpan : 0),\r\n msGridColumnSpan: this.props.position ? this.props.position.columnSpan : 0,\r\n gridRowStart: this.props.position ? this.props.position.rowIndex : 0,\r\n msGridRow: this.props.position ? this.props.position.rowIndex : 0,\r\n gridRowEnd:\r\n \"span \" + (this.props.position ? this.props.position.rowSpan : 0),\r\n msGridRowSpan: this.props.position ? this.props.position.rowSpan : 0,\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n \r\n {this.props.children}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\ninterface WidgetListProps {\r\n containerClassName?: string;\r\n position: WidgetPosition;\r\n}\r\n\r\nexport class WidgetList extends Component {\r\n private style: any = {\r\n gridColumnStart: this.props.position.columnIndex,\r\n msGridColumn: this.props.position.columnIndex,\r\n gridColumnEnd: \"span \" + this.props.position.columnSpan,\r\n msGridColumnSpan: this.props.position.columnSpan,\r\n gridRowStart: this.props.position.rowIndex,\r\n msGridRow: this.props.position.rowIndex,\r\n gridRowEnd: \"span \" + this.props.position.rowSpan,\r\n msGridRowSpan: this.props.position.rowSpan,\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n {this.props.children}\r\n \r\n );\r\n }\r\n}\r\n\r\ninterface WidgetListItemProps {}\r\n\r\nexport class WidgetListItem extends Component {\r\n render() {\r\n return
{this.props.children}
;\r\n }\r\n}\r\n\r\ninterface WidgetHeaderProps {\r\n title: string;\r\n}\r\n\r\nexport class WidgetHeader extends Component {\r\n render() {\r\n return
{this.props.title}
;\r\n }\r\n}\r\n\r\ninterface WidgetFooterProps {\r\n title: string;\r\n}\r\n\r\nexport class WidgetFooter extends Component {\r\n render() {\r\n return
{this.props.title}
;\r\n }\r\n}\r\n\r\ninterface LinkWidgetProps extends WidgetProps {\r\n containerClassName?: string;\r\n position?: WidgetPosition;\r\n to: string;\r\n id?: string;\r\n}\r\n\r\nexport class LinkWidget extends Component {\r\n render() {\r\n return (\r\n \r\n \r\n {this.props.children}\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\ninterface ClickableWidgetProps extends WidgetProps {\r\n containerClassName?: string;\r\n position?: WidgetPosition;\r\n onClick: () => void;\r\n}\r\n\r\nexport class ClickableWidget extends Component {\r\n render() {\r\n return (\r\n \r\n
\r\n {this.props.children}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n","export const Home: string = '/';\r\nexport const Login: string = '/Login';\r\nexport const ForgottenPassword: string = '/ForgottenPassword';\r\nexport const MyCalendar: string = '/MyCalendar';\r\nexport const MyGuests: string = '/MyMemberships';\r\nexport const MyGuests2: string = '/MyGuests';\r\nexport const MyParkAndHome: string = '/MyParkAndHome';\r\nexport const MyAccount: string = '/MyAccount';\r\nexport const ConfirmEmail: string = '/ConfirmEmail';\r\nexport const ConfirmAccount: string = '/ConfirmAccount';\r\nexport const ImportantInformation: string = '/ImportantInformation';\r\nexport const ParkNews: string = '/ParkNews';\r\nexport const Register: string = '/Register';\r\nexport const MyRequestsAndQueries: string = '/MyRequestsAndQueries';\r\nexport const AddMembership: string = '/AddMembership';\r\nexport const ManageActiveMemberDetails: string = '/ManageActiveMemberDetails';\r\nexport const EditMember: string = '/EditMember';\r\nexport const ReferMembership: string = '/ReferMembership';\r\nexport const AddPassPhoto: string = '/upload-pass-photo';\r\nexport const ParQForm: string = '/par-Q-form';\r\nexport const PaymentSuccess: string = '/payment-success';\r\nexport const PaymentCancelled: string = '/payment-cancelled';\r\nexport const DocuSignAuthorised: string = '/auth-docuSign';\r\nexport const DocuSignSigned: string = '/docuSign-signed';\r\nexport const FinaliseMemberships: string = '/FinaliseMemberships';\r\nexport const SelectPayment: string = '/select-payment';\r\nexport const MembershipAgreement: string = '/membership-agreement';\r\nexport const InvalidSessionPage: string = '/invalid-session';\r\nexport const ConfirmMembership: string = '/confirm-member-account';\r\nexport const RenewMembership: string = '/renew-membership';","import React, { Component } from 'react';\r\nimport './Toggle.scss';\r\nimport classNames from 'classnames';\r\n\r\ninterface ToggleProps {\r\n value?: boolean;\r\n onChange?: (value?: boolean) => void;\r\n customClassName?: string;\r\n}\r\n\r\ninterface ToggleState {\r\n value: boolean;\r\n}\r\n\r\nexport class Toggle extends Component {\r\n public state: ToggleState = {\r\n value: this.props.value || false\r\n };\r\n\r\n public render(): JSX.Element {\r\n return (\r\n this.toggleClicked()}\r\n >\r\n \r\n \r\n );\r\n }\r\n\r\n private toggleClicked(): void {\r\n const newValue = !this.state.value;\r\n\r\n this.setState({ value: newValue });\r\n\r\n if (typeof this.props.onChange == 'function') {\r\n (this.props.onChange as (value: boolean) => void)(newValue);\r\n }\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport {\r\n Calendar as BigCalendar,\r\n momentLocalizer,\r\n Event,\r\n Views,\r\n} from \"react-big-calendar\";\r\nimport \"./Calendar.scss\";\r\nimport moment from \"moment\";\r\nimport { Toggle } from \"./Toggle\";\r\nimport { Translation } from \"react-i18next\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faArrowLeft, faArrowRight } from \"@fortawesome/free-solid-svg-icons\";\r\nimport classNames from \"classnames\";\r\nimport \"moment/locale/en-gb\";\r\n\r\nconst localizer = momentLocalizer(moment);\r\n\r\nexport interface CalendarProps {\r\n events: CalendarEvent[];\r\n resources: CalendarResource[];\r\n minDate?: Date;\r\n maxDate?: Date;\r\n className?: string;\r\n containerClassName?: string;\r\n selectable?: boolean | \"ignoreEvents\";\r\n onSelectSlot?: (selectedItem: any) => void;\r\n onClickEvent?: (event: any, e?: any) => void;\r\n onRangeChange?: (range: any) => void;\r\n onNavigate?: (date: Date) => void;\r\n defaultDate?: Date;\r\n clickableEvents?: boolean;\r\n}\r\n\r\nexport interface CalendarEvent extends Event {\r\n resourceId: number;\r\n className: string;\r\n isAddedRange?: boolean;\r\n subletCharges?: number;\r\n subletIncome?: number;\r\n isSubletBooking?: boolean;\r\n}\r\n\r\nexport interface CalendarResource {\r\n id: number;\r\n title: string;\r\n className?: string;\r\n canToggle?: boolean;\r\n toggleValue?: boolean;\r\n}\r\n\r\nexport class Calendar extends Component {\r\n public render(): JSX.Element {\r\n return (\r\n \r\n {(t: (key: string) => string) => {\r\n return (\r\n \r\n this.canShowEvent(e))\r\n .map((event) => {\r\n let temp = Object.assign({}, event);\r\n if (temp.end) {\r\n let dateString: string = temp.end as any;\r\n dateString =\r\n dateString.substr(0, dateString.length - 1) + \"1\"; //add one second due big calendar issue\r\n temp.end = dateString as any;\r\n }\r\n return temp;\r\n })}\r\n resources={this.props.resources}\r\n resourceIdAccessor=\"id\"\r\n resourceTitleAccessor=\"title\"\r\n components={{\r\n dateCellWrapper: (props) => (\r\n \r\n ),\r\n eventWrapper: this.eventWrapper.bind(this),\r\n toolbar: this.toolbar.bind(this),\r\n }}\r\n views={{ month: true }}\r\n onSelectSlot={this.props.onSelectSlot}\r\n longPressThreshold={1}\r\n onRangeChange={this.props.onRangeChange}\r\n onNavigate={this.props.onNavigate}\r\n defaultDate={this.props.defaultDate}\r\n drilldownView={null}\r\n onDoubleClickEvent={() => {}}\r\n />\r\n
\r\n {this.props.resources.map((resource) => (\r\n \r\n {resource.canToggle ? (\r\n \r\n this.toggleChanged(resource, newValue)\r\n }\r\n customClassName={resource.className}\r\n />\r\n ) : (\r\n \r\n )}\r\n {t(resource.title)}\r\n \r\n ))}\r\n
\r\n \r\n );\r\n }}\r\n
\r\n );\r\n }\r\n\r\n private DateCellWrapper: any = (props: any) =>\r\n React.Children.map(props.children, (child) =>\r\n React.cloneElement(child, {\r\n onTouchEnd: (event) => {\r\n event.preventDefault();\r\n props.onSelect(props.value);\r\n },\r\n })\r\n );\r\n\r\n private eventWrapper(eventWrapperProps: any): JSX.Element {\r\n let isEndingOnFirstWeekDay =\r\n moment(eventWrapperProps.event.end).day() === 1; // Ends on a Monday\r\n let isStartOnLastWeekDay =\r\n moment(eventWrapperProps.event.start).day() === 0; // Starts on a Sunday\r\n return (\r\n \r\n this.props.onClickEvent &&\r\n this.props.clickableEvents &&\r\n this.props.onClickEvent(eventWrapperProps.event, e)\r\n }\r\n >\r\n \r\n
\r\n
\r\n \r\n );\r\n }\r\n\r\n private toolbar(toolbarProps: any): JSX.Element {\r\n const navigate = (action: any) => {\r\n toolbarProps.onNavigate(action);\r\n };\r\n\r\n return (\r\n
\r\n {toolbarProps.label}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n );\r\n }\r\n\r\n private toggleChanged(resource: CalendarResource, newValue?: boolean): void {\r\n resource.toggleValue = newValue;\r\n this.setState({});\r\n }\r\n\r\n private canShowEvent(event: CalendarEvent): boolean {\r\n if (!this.props.resources || !this.props.resources.length) {\r\n return true;\r\n }\r\n\r\n return (\r\n this.props.resources\r\n .filter((r) => r.id === event.resourceId)\r\n .filter((r) => !r.canToggle || (r.canToggle && r.toggleValue)).length >\r\n 0\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Widget, WidgetHeader, WidgetPosition } from '../../../Shared/Components/Presentational/Widget';\r\nimport { Calendar, CalendarEvent, CalendarResource } from '../../../Shared/Components/Presentational/Calendar';\r\nimport { Link } from 'react-router-dom';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { Translation } from 'react-i18next';\r\nimport './CalendarWidget.scss';\r\nimport moment from 'moment';\r\n\r\ninterface CalendarWidgetProps {\r\n position: WidgetPosition;\r\n events: CalendarEvent[];\r\n resources: CalendarResource[];\r\n}\r\n\r\nclass CalendarWidget extends Component {\r\n render() {\r\n return (\r\n \r\n {\r\n (t: (key: string, args?: {}) => string) => {\r\n return (\r\n \r\n \r\n
\r\n \r\n {t('homePage.calendar.viewCalendar')}\r\n
\r\n
\r\n );\r\n }\r\n }\r\n
\r\n )\r\n };\r\n}\r\n\r\nexport default CalendarWidget;","import React, { Component } from 'react';\r\nimport { Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport { Translation } from 'react-i18next';\r\nimport { WidgetPosition } from '../../../Shared/Components/Presentational/Widget';\r\nimport './WelcomeMessageWidget.scss';\r\n//@ts-ignore\r\nimport Fade from 'react-reveal/Fade';\r\n\r\ninterface WelcomeMessageWidgetProps {\r\n position: WidgetPosition;\r\n userFirstName: string;\r\n}\r\n\r\nclass WelcomeMessageWidget extends Component {\r\n render() {\r\n return (\r\n \r\n {\r\n (t: (key: string, args?: {}) => string) => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n \r\n )\r\n };\r\n}\r\n\r\nexport default WelcomeMessageWidget;","import React, { ReactNode } from 'react';\r\nimport './Alert.scss';\r\n\r\ninterface AlertProps {\r\n title?: string;\r\n content?: ReactNode;\r\n}\r\n\r\nexport default function Alert({ title, content }: AlertProps) {\r\n return (\r\n
\r\n {title &&

}\r\n {content && content}\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { WidgetPosition } from '../../../Shared/Components/Presentational/Widget';\r\nimport './MenuWidget.scss';\r\n//@ts-ignore\r\nimport Fade from 'react-reveal/Fade';\r\nimport useAlert from '../../../Shared/Hooks/useAlert';\r\nimport Alert from '../../../Shared/Components/Presentational/Alert';\r\n\r\ninterface MenuWidgetProps {\r\n position: WidgetPosition;\r\n children?: React.ReactNode;\r\n}\r\n\r\nexport default function MenuWidget(props: MenuWidgetProps) {\r\n const { alertTitle, alertContent, canShowAlert } = useAlert();\r\n\r\n const style = {\r\n gridColumnStart: props.position.columnIndex,\r\n msGridColumn: props.position.columnIndex,\r\n gridColumnEnd: 'span ' + props.position.columnSpan,\r\n msGridColumnSpan: props.position.columnSpan,\r\n gridRowStart: props.position.rowIndex,\r\n msGridRow: props.position.rowIndex,\r\n gridRowEnd: 'span ' + props.position.rowSpan,\r\n msGridRowSpan: props.position.rowSpan,\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n
{props.children}
\r\n
\r\n {canShowAlert && }\r\n
\r\n
\r\n );\r\n}\r\n","import { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport { Entry } from 'contentful';\r\nimport { useSelector } from 'react-redux';\r\n\r\nexport default function useAlert() {\r\n const parkInformation = useSelector((state: any) => state.information.parkInformation) as Entry;\r\n const alertTitle = parkInformation && parkInformation.fields && parkInformation.fields.myHaulfrynAlert && parkInformation.fields.myHaulfrynAlert.fields.title;\r\n const alertContent = parkInformation && parkInformation.fields && parkInformation.fields.myHaulfrynAlert && documentToReactComponents(parkInformation.fields.myHaulfrynAlert.fields.content);\r\n const canShowAlert = alertTitle || alertContent;\r\n\r\n return { alertTitle, alertContent, canShowAlert };\r\n}\r\n","import React, { FormEvent } from \"react\";\r\nimport ReactModal from \"react-modal\";\r\nimport \"./Modal.scss\";\r\nimport { PrimaryButton } from \"./Buttons\";\r\nimport history from \"../../../History\";\r\nimport { Desktop, Mobile } from \"./ResponsiveViews\";\r\nimport classNames from \"classnames\";\r\nimport { ClickableIcon } from \"./Icons\";\r\nimport {\r\n faArrowLeft,\r\n faExclamationTriangle,\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\n\r\nReactModal.setAppElement(\"#root\");\r\n\r\nexport interface ModalProps {\r\n isOpen: boolean;\r\n onAfterOpen?: () => void;\r\n onRequestClose?: () => void;\r\n className?: string;\r\n}\r\n\r\nexport const Modal: React.FC = (props) => {\r\n history.listen((location) => {\r\n // close modal when route changes\r\n if (props.onRequestClose) {\r\n props.onRequestClose();\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n \r\n \r\n {props.children}\r\n \r\n \r\n \r\n \r\n {props.children}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport interface ModalHeaderProps {\r\n text: string;\r\n}\r\n\r\nexport const ModalHeader: React.FC = ({ text }) => {\r\n return
{text}
;\r\n};\r\n\r\nexport interface ModalFooterProps {\r\n onBackButtonClick: () => void;\r\n className?: string;\r\n}\r\n\r\nexport const ModalFooter: React.FC = ({\r\n onBackButtonClick,\r\n className,\r\n children,\r\n}) => {\r\n return (\r\n
\r\n \r\n {children}\r\n
\r\n );\r\n};\r\n\r\nexport interface SuccessModalProps extends ModalProps {\r\n importantInfo?: string;\r\n title: string;\r\n message: string;\r\n buttonText: string;\r\n closeModal: () => void;\r\n}\r\n\r\nexport const SuccessModal: React.FC = (props) => {\r\n const closeModal = (event: FormEvent) => {\r\n props.closeModal();\r\n event.preventDefault();\r\n event.stopPropagation();\r\n };\r\n\r\n return (\r\n \r\n
\r\n {props.importantInfo && (\r\n
\r\n \r\n

{props.importantInfo}

\r\n
\r\n )}\r\n

{props.title}

\r\n

{}

\r\n {props.children}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport interface ErrorModalProps extends ModalProps {\r\n title: string;\r\n message: string;\r\n buttonText: string;\r\n closeModal: () => void;\r\n}\r\n\r\nexport const ErrorModal: React.FC = (props) => {\r\n const closeModal = (event: FormEvent) => {\r\n props.closeModal();\r\n event.preventDefault();\r\n event.stopPropagation();\r\n };\r\n\r\n return (\r\n \r\n
\r\n

{props.title}

\r\n

{props.message}

\r\n {props.children}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport interface ConfirmModalProps extends ModalProps {\r\n title: string;\r\n message: string;\r\n confirmButtonText: string;\r\n cancelButtonText: string;\r\n onClose: (submited: boolean, item?: any) => void;\r\n}\r\n\r\nexport const ConfirmModal: React.FC = (props) => {\r\n const closeModal = (event: FormEvent, submitted: boolean) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n props.onClose(submitted);\r\n };\r\n\r\n return (\r\n \r\n
closeModal(e, true)}>\r\n

{props.title}

\r\n

{props.message}

\r\n {props.children}\r\n
\r\n closeModal(e, false)}\r\n >\r\n {props.cancelButtonText}\r\n \r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n","import React from \"react\";\r\nimport {\r\n Modal,\r\n ModalProps,\r\n} from \"../../../Shared/Components/Presentational/Modal\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport \"./CalendarItemDetailsModal.scss\";\r\nimport { ClickableIcon } from \"../../../Shared/Components/Presentational/Icons\";\r\nimport {\r\n faArrowLeft,\r\n faPoundSign,\r\n faCalendarAlt,\r\n faPaw,\r\n faInfo,\r\n faClock,\r\n faLocationArrow,\r\n faFileContract,\r\n} from \"@fortawesome/free-solid-svg-icons\";\r\nimport { faAccessibleIcon } from \"@fortawesome/free-brands-svg-icons\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { SelectedCalendarWidgetOptions } from \"../../Redux/ActionTypes\";\r\nimport classNames from \"classnames\";\r\nimport { Entry } from \"contentful\";\r\nimport { Button } from \"../../../Shared/Components/Presentational/Buttons\";\r\n\r\ninterface CalendarItemDetailsModalProps extends ModalProps {\r\n isOpen: boolean;\r\n item: Partial>;\r\n itemType: SelectedCalendarWidgetOptions;\r\n onBackButtonClick: () => void;\r\n}\r\n\r\nconst CalendarItemDetailsModal: React.FC = (\r\n props\r\n) => {\r\n const { t } = useTranslation();\r\n const calenderItem = props.item && props.item.fields!;\r\n if (calenderItem == null || calenderItem == undefined) {return <>;}\r\n\r\n const onImageError = (\r\n errorEvent: React.SyntheticEvent\r\n ) => {\r\n console.log(\"Error triggered: \" + errorEvent);\r\n (errorEvent.target as any).src =\r\n props.itemType === \"events\"\r\n ? \"/images/default-event-image.png\"\r\n : \"/images/default-offer-image.png\";\r\n };\r\n\r\n const getImageSrc = () => {\r\n if (calenderItem.image) {\r\n return calenderItem.image.fields.file.url;\r\n } else {\r\n return props.itemType === \"events\"\r\n ? \"/images/default-event-image.png\"\r\n : \"/images/default-offer-image.png\";\r\n }\r\n };\r\n \r\n return (\r\n \r\n
\r\n

{calenderItem.publicName}

\r\n
\r\n
\r\n {calenderItem.subHeading && (\r\n
\r\n
{calenderItem.subHeading}
\r\n
\r\n )}\r\n {calenderItem.description && (\r\n
\r\n
\r\n {props.itemType === \"events\"\r\n ? t(\"myCalendar.events.descriptionTitle\")\r\n : t(\"myCalendar.offers.descriptionTitle\")}\r\n
\r\n
\r\n {calenderItem.description}\r\n
\r\n
\r\n )}\r\n {calenderItem.bookingPhoneNumber && (\r\n
\r\n
\r\n {t(\"myCalendar.events.callNow\")}\r\n
\r\n \r\n
\r\n )}\r\n
\r\n\r\n
\r\n onImageError(errorEvent)}\r\n alt=\"error\"\r\n />\r\n
\r\n
\r\n
\r\n
\r\n {calenderItem.termsAndConditions && (\r\n
\r\n
\r\n {\" \"}\r\n {t(\"myCalendar.events.termsAndConditions\")}\r\n
\r\n
\r\n {calenderItem.termsAndConditions}\r\n
\r\n
\r\n )}\r\n {calenderItem.price && (\r\n
\r\n
\r\n {\" \"}\r\n {t(\"myCalendar.events.price\")}\r\n
\r\n
{calenderItem.price}
\r\n
\r\n )}\r\n {/* {calenderItem.Location && (\r\n
\r\n
\r\n {\" \"}\r\n {t(\"myCalendar.events.location\")}\r\n
\r\n
{calenderItem.Location}
\r\n
\r\n )} */}\r\n {calenderItem.information && (\r\n
\r\n
\r\n {\" \"}\r\n {t(\"myCalendar.events.information\")}\r\n
\r\n
{calenderItem.information}
\r\n
\r\n )}\r\n
\r\n
\r\n {calenderItem.date && (\r\n
\r\n
\r\n {\" \"}\r\n {t(\"myCalendar.events.date\")}\r\n
\r\n
{calenderItem.date}
\r\n
\r\n )}\r\n {calenderItem.accessibility && (\r\n
\r\n
\r\n {\" \"}\r\n {t(\"myCalendar.events.accessibility\")}\r\n
\r\n
{calenderItem.accessibility}
\r\n
\r\n )}\r\n {calenderItem.dogFriendly && (\r\n
\r\n
\r\n {\" \"}\r\n {t(\"myCalendar.events.dogFriendly\")}\r\n
\r\n
\r\n {calenderItem.dogFriendly ? t(\"general.yes\") : t(\"general.no\")}\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n {calenderItem.eventTime && (\r\n
\r\n
\r\n {\" \"}\r\n {t(\"myCalendar.events.time\")}\r\n
\r\n
{calenderItem.eventTime}
\r\n
\r\n )}\r\n
\r\n
\r\n {calenderItem.linkButtonText && \r\n (calenderItem.linkButtonUrl || calenderItem.linkUrl) && (\r\n window.open(calenderItem.linkButtonUrl || calenderItem.linkUrl,'_blank')}\r\n />)}\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default CalendarItemDetailsModal;\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport CalendarItemDetailsModal from '../Presentational/CalendarItemDetailsModal';\r\nimport { AppState } from '../../../RootReducer';\r\nimport { SelectedCalendarWidgetOptions } from '../../Redux/ActionTypes';\r\nimport { Entry } from 'contentful';\r\n\r\ninterface CalendarItemDetailsProps {\r\n isOpen: boolean;\r\n item: Entry;\r\n onBackButtonClick: () => void;\r\n itemType: SelectedCalendarWidgetOptions;\r\n}\r\n\r\nclass CalendarItemDetails extends Component {\r\n\r\n public render(): JSX.Element {\r\n\r\n return (\r\n <>\r\n {\r\n this.props.isOpen &&\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n );\r\n };\r\n}\r\n\r\nconst mapStateToProps = (state: AppState) => {\r\n return {\r\n isOpen: state.calendar.isEventDetailsModalOpen,\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(CalendarItemDetails);","import React from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { FeatureToggleProps } from \"../Components/Presentational/FeatureToggle\";\r\n\r\ninterface WrapperComponentProps {\r\n parkFeatures: string[];\r\n}\r\n\r\ninterface WrapperComponentState {\r\n featureNames: string[];\r\n replacementComponent?: React.ReactNode;\r\n}\r\n\r\nexport default function feature(featureProps: ((props: TProps) => FeatureToggleProps) | FeatureToggleProps) {\r\n return (WrappedComponent: any) => {\r\n const mapStateToProps = (state: any) => {\r\n return {\r\n parkFeatures: state.user && state.user.park ? state.user.park.parkFeatures : []\r\n };\r\n };\r\n \r\n class WrapperComponent extends React.Component {\r\n\r\n public render(): JSX.Element {\r\n\r\n let replacementComponent;\r\n let featureNames: string[] = [];\r\n\r\n if ((typeof featureProps === \"object\") && featureProps && Array.isArray(featureProps.features)) {\r\n featureNames = featureProps.features as string[];\r\n replacementComponent = featureProps.replacement;\r\n } else if (typeof featureProps === \"function\") {\r\n featureNames = featureProps(this.props as any).features;\r\n replacementComponent = featureProps(this.props as any).replacement;\r\n }\r\n\r\n let featuresFound = featureNames.map(fn => this.props.parkFeatures.includes(fn));\r\n \r\n if (featuresFound.length > 0 && featuresFound.includes(true)) {\r\n return ;\r\n } else if (replacementComponent) {\r\n return replacementComponent as any;\r\n } else {\r\n return <>;\r\n }\r\n }\r\n }\r\n\r\n return connect(mapStateToProps)(WrapperComponent) as typeof WrappedComponent;\r\n };\r\n};","export default class Features {\r\n public static Events: string = 'Events';\r\n public static Offers: string = 'Offers';\r\n public static Passes: string = 'Passes';\r\n public static Memberships: string = 'Memberships';\r\n public static Activities: string = 'Activities';\r\n public static Spa: string = 'Spa';\r\n public static Restaurant: string = 'Restaurant';\r\n public static News: string = 'News';\r\n public static Transactions: string = 'Transactions';\r\n public static MyRequests: string = 'MyRequests';\r\n public static MyAccount: string = 'MyAccount';\r\n public static ParkInfo: string = 'ParkInfo';\r\n public static ContactHaulfryn: string = 'ContactHaulfryn';\r\n public static LodgesDropdown: string = 'LodgesDropdown';\r\n public static OwnerBookings: string = 'OwnerBookings';\r\n public static SubletBookings: string = 'SubletBookings';\r\n}\r\n","import { Component, ReactNode } from 'react';\r\nimport * as React from 'react';\r\nimport { WidgetList, WidgetPosition, WidgetHeader, WidgetListItem } from '../../../Shared/Components/Presentational/Widget';\r\nimport { Translation } from 'react-i18next';\r\nimport './CalendarList.scss';\r\nimport { PreviousIcon, NextIcon } from '../../../Shared/Components/Presentational/Icons';\r\nimport CalendarItemDetails from '../Container/CalendarItemDetails';\r\nimport { SelectedCalendarWidgetOptions } from '../../Redux/ActionTypes';\r\nimport feature from '../../../Shared/Decorators/Feature';\r\nimport Features from '../../../Constants/Features';\r\nimport { Entry } from 'contentful';\r\n\r\ninterface CalendarListProps {\r\n position: WidgetPosition;\r\n park: any;\r\n eventsOrOffers: Entry[];\r\n currentPage: number;\r\n lastPage: number;\r\n canLoadMore: boolean;\r\n goNext?: () => void;\r\n goPrevious?: () => void;\r\n components?: CalendarListComponents;\r\n openEventDetailsModal: () => void;\r\n closeEventDetailsModal: () => void;\r\n selectedFilter: SelectedCalendarWidgetOptions;\r\n}\r\n\r\nexport interface CalendarListComponents {\r\n widgetHeader: ReactNode;\r\n}\r\n\r\ninterface CalendarListState {\r\n selectedItem: Entry | undefined;\r\n}\r\n\r\n@feature({ features: [Features.Events, Features.Offers]})\r\nclass CalendarList extends Component {\r\n\r\n constructor(props: CalendarListProps) {\r\n super(props);\r\n\r\n this.state = {\r\n selectedItem: undefined\r\n };\r\n }\r\n\r\n openEventDetailsModal(item: Entry) {\r\n this.setState({ selectedItem: item });\r\n this.props.openEventDetailsModal();\r\n }\r\n\r\n onImageError(errorEvent: React.SyntheticEvent) {\r\n if (this.props.selectedFilter === 'events') {\r\n (errorEvent.target as any).src = '/images/default-event-image.png';\r\n } else {\r\n (errorEvent.target as any).src = '/images/default-offer-image.png';\r\n }\r\n }\r\n\r\n getImageSrc(item: Entry): string {\r\n if (this.props.selectedFilter === 'events') {\r\n return item.fields.image ? item.fields.image.fields.file.url : '/images/default-event-image.png';\r\n } else {\r\n return item.fields.image ? item.fields.image.fields.file.url : '/images/default-offer-image.png';\r\n }\r\n }\r\n render() {\r\n return (\r\n \r\n {\r\n (t: (key: string, args?: {}) => string) => {\r\n return (\r\n <>\r\n \r\n \r\n {this.props.components && this.props.components.widgetHeader}\r\n {this.props.canLoadMore && this.props.goPrevious && this.props.goNext &&
\r\n \r\n \r\n
}\r\n {\r\n !this.props.eventsOrOffers.length && \r\n
\r\n
\r\n
\r\n {this.props.selectedFilter === 'events' ? t('myCalendar.events.noEvents') : t('myCalendar.offers.noOffers')}\r\n
\r\n
\r\n
\r\n
\r\n }\r\n {\r\n this.props.eventsOrOffers.map((x, i) => {\r\n return (\r\n \r\n
this.openEventDetailsModal(x)} >\r\n
\r\n \"\" this.onImageError(errorEvent)} />\r\n
\r\n
\r\n
{x.fields.publicName}
\r\n
{x.fields.description}
\r\n {this.props.selectedFilter === 'events' &&
{(x.fields as ContentfulEvent).date}
}\r\n
\r\n
\r\n
\r\n )\r\n })}\r\n this.props.closeEventDetailsModal()} item={this.state.selectedItem!} itemType={this.props.selectedFilter} />\r\n
\r\n \r\n );\r\n }\r\n }\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default CalendarList;","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostAddBookingApiCall extends PostApiCall {\r\n\r\n constructor(lodgeId: string, booking: BookingDTO) {\r\n let url: string = \"account/\" + lodgeId + \"/newBooking\";\r\n super(url);\r\n\r\n this.body = booking;\r\n }\r\n}\r\n\r\n","import UserRoles from \"../Constants/UserRoles\";\r\n\r\nexport class TagsFilter {\r\n\r\n public removeContent(content: any,userRoles: UserRoleDTO[]): boolean{\r\n if(content.metadata && content.metadata.tags && content.metadata.tags.length !== 0){\r\n \r\n let audienceTags: Set = new Set();\r\n content.metadata.tags.forEach((tag:any)=>{\r\n let id: string = tag.sys.id;\r\n if(id.startsWith(\"audience\")){\r\n audienceTags.add(id);\r\n }\r\n })\r\n \r\n if(audienceTags.size > 0) {\r\n if(!UserRoles.IsOwner(userRoles)){\r\n if(audienceTags.has(\"audienceMembers\")){\r\n return false;\r\n }else{\r\n return true;\r\n } \r\n }else if(!UserRoles.IsOwner(userRoles)){\r\n if(audienceTags.has(\"audienceOwners\")){\r\n return false;\r\n }else{\r\n return true;\r\n } \r\n }else{\r\n return false;\r\n }\r\n }else{\r\n return false; \r\n }\r\n \r\n }else{\r\n return false;\r\n }\r\n }\r\n}","import ContentfulClient from \"../ContentfulClient\";\r\n\r\nexport async function GetParkCall(parkCode : string) {\r\n let filter ={\r\n content_type: 'park',\r\n 'fields.code': parkCode,\r\n \r\n }\r\n const result = await ContentfulClient.getEntries(filter);\r\n\r\n if (result.errors){\r\n throw {message: \"GetParkCall returned error/s\", errors: result.errors} \r\n }\r\n return result.items[0];\r\n}","import ContentfulClient from \"../ContentfulClient\";\r\nimport { TagsFilter } from \"../TagsFilter\";\r\nimport { GetParkCall } from \"./GetParkCall\";\r\n\r\nexport async function GetParkEventsCall(park: { parkCode: string }, page: number, pageSize: number,userRoles: UserRoleDTO[]) { \r\n const parkDetail = await GetParkCall(park.parkCode);\r\n let filter = {\r\n content_type: 'event',\r\n links_to_entry: parkDetail.sys.id, \r\n skip: page * pageSize,\r\n limit: pageSize\r\n }\r\n \r\n const result = await ContentfulClient.getEntries(filter);\r\n\r\n if (result.errors) {\r\n throw {message: \"GetParkEventsCall returned error/s\", errors: result.errors} \r\n }\r\n\r\n let indexToBeRemoved: Array = [];\r\n if(userRoles.length > 0){\r\n result.items.forEach((content)=>{\r\n if(new TagsFilter().removeContent(content,userRoles)){\r\n indexToBeRemoved.push(content.sys.id);\r\n }\r\n });\r\n }\r\n \r\n\r\n if (indexToBeRemoved.length !== 0){\r\n indexToBeRemoved.forEach((val)=>{\r\n result.items.forEach((content,index)=>{\r\n if(content.sys.id === val){\r\n result.items.splice(index,1); \r\n }\r\n });\r\n })\r\n }\r\n\r\n return result;\r\n}","import ContentfulClient from \"../ContentfulClient\";\r\nimport { GetParkCall } from \"./GetParkCall\";\r\n\r\nexport async function GetParkOffersCall(park: { parkCode: string }, page: number, pageSize: number) { \r\n const parkDetail = await GetParkCall(park.parkCode);\r\n let filter = {\r\n content_type: 'offer',\r\n links_to_entry: parkDetail.sys.id, \r\n skip: page * pageSize,\r\n limit: pageSize\r\n }\r\n\r\n const result = await ContentfulClient.getEntries(filter);\r\n\r\n if (result.errors) {\r\n throw {message: \"GetParkOffersCall returned error/s\", errors: result.errors} \r\n }\r\n\r\n return result;\r\n}","import { ThunkAction } from 'redux-thunk';\r\nimport { AppState } from '../../RootReducer';\r\nimport { Action } from 'redux';\r\nimport { Get, Post } from '../../Api/ApiService';\r\nimport {\r\n SEARCH_OFFERS_REQUEST,\r\n SEARCH_OFFERS_SUCCESS,\r\n SEARCH_OFFERS_FAILURE,\r\n SetSelectedCalendarWidgetAction,\r\n SelectedCalendarWidgetOptions,\r\n SEARCH_EVENTS_REQUEST,\r\n SEARCH_EVENTS_SUCCESS,\r\n SEARCH_EVENTS_FAILURE,\r\n SetPageNumberAction,\r\n ADD_BOOKING_REQUEST,\r\n ADD_BOOKING_SUCCESS,\r\n ADD_BOOKING_FAILURE,\r\n} from './ActionTypes';\r\nimport { PostAddBookingApiCall } from '../../Api/Calls/PostAddBookingApiCall';\r\nimport { GetParkEventsCall } from '../../Contentful/Calls/GetParkEventsCall';\r\nimport { GetParkOffersCall } from '../../Contentful/Calls/GetParkOffersCall';\r\n\r\nexport const getEvents =\r\n (pageSize: number,userRoles: UserRoleDTO[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const park = getState().user.park;\r\n const pageNumber = getState().calendar.pageNumber - 1;\r\n\r\n if (park) {\r\n dispatch({ type: SEARCH_EVENTS_REQUEST, payload: true });\r\n GetParkEventsCall(park, pageNumber, pageSize,userRoles)\r\n .then((response) => {\r\n dispatch({ type: SEARCH_EVENTS_SUCCESS, payload: response });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: SEARCH_EVENTS_FAILURE, payload: error });\r\n });\r\n }\r\n };\r\n\r\nexport const getOffers =\r\n (pageSize: number): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const park = getState().user.park;\r\n const pageNumber = getState().calendar.pageNumber - 1;\r\n\r\n if (park) {\r\n dispatch({ type: SEARCH_OFFERS_REQUEST, payload: true });\r\n GetParkOffersCall(park, pageNumber, pageSize)\r\n .then((response) => {\r\n dispatch({ type: SEARCH_OFFERS_SUCCESS, payload: response });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: SEARCH_OFFERS_FAILURE, payload: error });\r\n });\r\n }\r\n };\r\n\r\nexport const setSelectedCalendarWidget =\r\n (selected: SelectedCalendarWidgetOptions, pageSize: number, userRoles: UserRoleDTO[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const currentPage = getState().calendar.pageNumber;\r\n\r\n const setSelected: SetSelectedCalendarWidgetAction = {\r\n type: 'SET_SELECTED_CALENDAR_WIDGET',\r\n payload: selected,\r\n };\r\n dispatch(setSelected);\r\n\r\n const setPageNumber: SetPageNumberAction = {\r\n type: 'SET_PAGE_NUMBER',\r\n payload: 1,\r\n };\r\n dispatch(setPageNumber);\r\n\r\n if (currentPage > 1) {\r\n // fetch the first page again for the filter you're changing from\r\n // prevents bug where you're on page 2, change filter to first, then change filter again - you still only have 2nd page of items\r\n if (selected === 'offers') {\r\n dispatch(getEvents(pageSize,userRoles));\r\n } else {\r\n dispatch(getOffers(pageSize));\r\n }\r\n }\r\n };\r\n\r\nexport const addBooking =\r\n (booking: BookingDTO): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const lodge = getState().user.lodge;\r\n\r\n if (lodge) {\r\n dispatch({ type: ADD_BOOKING_REQUEST, payload: true });\r\n Post<{}>(new PostAddBookingApiCall(lodge.LodgeId, { ...booking, AccountId: lodge.AccountId }))\r\n .then(() => {\r\n dispatch({ type: ADD_BOOKING_SUCCESS, payload: true });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ADD_BOOKING_FAILURE, payload: error.response.data });\r\n });\r\n }\r\n };\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport CalendarList, { CalendarListComponents } from '../Presentational/CalendarList';\r\nimport { getEvents, getOffers } from '../../Redux/ActionCreators';\r\nimport { WidgetPosition, Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport { SET_IS_EVENT_DETAILS_MODAL_OPEN, SET_PAGE_NUMBER, SelectedCalendarWidgetOptions } from '../../Redux/ActionTypes';\r\nimport { AppState } from '../../../RootReducer';\r\nimport { Entry } from 'contentful';\r\n\r\ninterface CalendarListWidgetProps {\r\n position: WidgetPosition;\r\n pageSize: number;\r\n canLoadMore: boolean;\r\n events: undefined | Entry[];\r\n eventTotal?: number;\r\n park?: any;\r\n getEvents: (userRoles: UserRoleDTO[]) => void;\r\n getOffers: () => void;\r\n loadMoreEvents?: (page: number) => void;\r\n widgetComponents?: CalendarListComponents;\r\n openEventDetailsModal?: () => void;\r\n closeEventDetailsModal?: () => void;\r\n setPageNumber: (pageNumber: number) => void;\r\n pageNumber: number;\r\n selectedFilter: SelectedCalendarWidgetOptions;\r\n offers: undefined | Entry[];\r\n offerTotal?: number;\r\n userRoles: UserRoleDTO[];\r\n}\r\n\r\nclass CalendarListWidget extends Component {\r\n\r\n public componentDidMount(): void {\r\n if (this.props.park) {\r\n this.props.setPageNumber(1);\r\n this.props.getEvents(this.props.userRoles);\r\n this.props.getOffers();\r\n }\r\n }\r\n\r\n public componentDidUpdate(prevProps: CalendarListWidgetProps): void {\r\n if (prevProps.park !== this.props.park) {\r\n this.props.setPageNumber(1);\r\n this.props.getEvents(this.props.userRoles);\r\n this.props.getOffers();\r\n }\r\n }\r\n\r\n public goNext(): void {\r\n const newPageNumber = this.props.pageNumber + 1;\r\n\r\n this.props.setPageNumber(newPageNumber);\r\n this.fetchData();\r\n }\r\n\r\n public goPrevious(): void {\r\n const newPageNumber = this.props.pageNumber - 1;\r\n\r\n this.props.setPageNumber(newPageNumber);\r\n this.fetchData();\r\n }\r\n\r\n public fetchData(): void {\r\n if (this.props.selectedFilter === 'events') {\r\n this.props.getEvents(this.props.userRoles);\r\n } else {\r\n this.props.getOffers();\r\n }\r\n }\r\n\r\n render() {\r\n\r\n let listItems: undefined | Entry[] = [];\r\n let lastPage = 0;\r\n let canLoadMore = false;\r\n if (this.props.selectedFilter === 'events') {\r\n listItems = this.props.events;\r\n lastPage = this.props.eventTotal ? Math.ceil(this.props.eventTotal / this.props.pageSize) : 0;\r\n canLoadMore = this.props.canLoadMore && !!this.props.eventTotal && this.props.eventTotal > this.props.pageSize;\r\n } else {\r\n listItems = this.props.offers;\r\n lastPage = this.props.offerTotal ? Math.ceil(this.props.offerTotal / this.props.pageSize) : 0;\r\n canLoadMore = this.props.canLoadMore && !!this.props.offerTotal && this.props.offerTotal > this.props.pageSize;\r\n }\r\n\r\n return (\r\n \r\n { }}\r\n closeEventDetailsModal={this.props.closeEventDetailsModal ? this.props.closeEventDetailsModal : () => { }}\r\n selectedFilter={this.props.selectedFilter}\r\n />\r\n \r\n )\r\n }\r\n}\r\n\r\n\r\nconst mapDispatchToProps = (dispatch: any, props: any) => {\r\n return {\r\n getEvents: (userRoles: UserRoleDTO[]) => dispatch(getEvents(props.pageSize, userRoles)),\r\n getOffers: () => dispatch(getOffers(props.pageSize)),\r\n openEventDetailsModal: () => dispatch({ type: SET_IS_EVENT_DETAILS_MODAL_OPEN, payload: true }),\r\n closeEventDetailsModal: () => dispatch({ type: SET_IS_EVENT_DETAILS_MODAL_OPEN, payload: false }),\r\n setPageNumber: (pageNumber: number) => dispatch({ type: SET_PAGE_NUMBER, payload: pageNumber })\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: AppState) => ({\r\n events: state.calendar.events ? state.calendar.events.items : [],\r\n eventTotal: state.calendar.events ? state.calendar.events.total : 0,\r\n park: state.user.park,\r\n pageNumber: state.calendar.pageNumber,\r\n selectedFilter: state.calendar.selectedCalendarWidget,\r\n offers: state.calendar.offers ? state.calendar.offers.items : [],\r\n offerTotal: state.calendar.offers ? state.calendar.offers.total : 0,\r\n userRoles: state.user.userRoles\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CalendarListWidget);","import { Component } from 'react';\r\nimport Feature from '../../Decorators/Feature';\r\n\r\nexport interface FeatureToggleProps {\r\n features: string[];\r\n replacement?: React.ReactNode;\r\n}\r\n\r\n@Feature(props => ({ features: props.features, replacement: props.replacement }))\r\nexport default class FeatureToggle extends Component {\r\n public render() {\r\n return this.props.children;\r\n };\r\n}","import React from 'react';\r\nimport './NavOption.scss';\r\n\r\ninterface NavOptionProps {\r\n text: string;\r\n icon: string;\r\n iconAlt: string;\r\n}\r\n\r\nconst NavOption: React.FC = ({ text, icon, iconAlt }) => {\r\n return (\r\n
\r\n
\r\n
\r\n {iconAlt}\r\n
\r\n
\r\n

{text}

\r\n
\r\n )\r\n};\r\n\r\nexport default NavOption;","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostDownloadInvoiceCall extends PostApiCall {\r\n constructor(filter: TransactionInvoiceFilterDTO) {\r\n let url: string = 'account/' + filter.AccountId + '/invoice/download';\r\n\r\n super(url);\r\n\r\n this.body = filter;\r\n }\r\n}\r\n","import { useSelector } from 'react-redux';\r\nimport { Post } from '../../Api/ApiService';\r\nimport { PostDownloadInvoiceCall } from '../../Api/Calls/PostDownloadInvoiceCall';\r\nimport { AppState } from '../../RootReducer';\r\n\r\nexport default function useDownloadInvoice(invoiceNo: string) {\r\n const accountId = useSelector((state: AppState) => state.user.lodge.AccountId);\r\n\r\n const download = async () => {\r\n try {\r\n const invoice = await Post(\r\n new PostDownloadInvoiceCall({ AccountId: accountId, InvoiceNo: invoiceNo })\r\n );\r\n\r\n const fileName = `invoice-${invoiceNo}.${invoice.data.FileExtension}`;\r\n const byteCharacters = atob(invoice.data.Document);\r\n let byteNumbers = new Array(byteCharacters.length);\r\n\r\n for (let i = 0; i < byteCharacters.length; i++) {\r\n byteNumbers[i] = byteCharacters.charCodeAt(i);\r\n }\r\n\r\n const byteArray = new Uint8Array(byteNumbers);\r\n const blob = new Blob([byteArray], { type: `application/${invoice.data.FileExtension}` });\r\n\r\n if (window.navigator && window.navigator.msSaveOrOpenBlob) {\r\n // this is for IE\r\n window.navigator.msSaveOrOpenBlob(blob, fileName);\r\n } else {\r\n // this is for Chromium/Firefox/Safari\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n link.setAttribute('download', fileName);\r\n document.body.appendChild(link);\r\n link.click();\r\n link.remove();\r\n }\r\n } catch (e) {\r\n console.error(e);\r\n }\r\n };\r\n\r\n return download;\r\n}\r\n","import moment from 'moment';\r\n\r\nexport function formatDateString(input: string, format = 'DD/MM/YYYY'): string {\r\n const date = moment(input);\r\n return date.format(format);\r\n}\r\n\r\nexport function formatDate(input: Date, format = 'DD/MM/YYYY'): string {\r\n const date = moment(input);\r\n return date.format(format);\r\n}\r\n\r\nexport function calculateAge(dateOfBirth: Date): number {\r\n let today = new Date();\r\n let birthDate = new Date(dateOfBirth);\r\n let ageNow = today.getFullYear() - birthDate.getFullYear();\r\n let m = today.getMonth() - birthDate.getMonth();\r\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\r\n ageNow--;\r\n }\r\n return ageNow;\r\n}\r\n","export function getAmount(amount: number | undefined): string {\r\n if (amount === undefined) {\r\n return '';\r\n }\r\n\r\n if (amount < 0) {\r\n return `-£${Math.abs(amount).toFixed(2)}`;\r\n } else {\r\n return `£${amount.toFixed(2)}`;\r\n }\r\n}\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport useDownloadInvoice from '../../../Account/Hooks/useDownloadInvoice';\r\nimport { LinkButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { TransactionIcon } from '../../../Shared/Components/Presentational/Icons';\r\nimport { formatDateString } from '../../../Shared/Utilities/DateUtils';\r\nimport { getAmount } from '../../../Shared/Utilities/TransactionUtils';\r\nimport './TransactionItem.scss';\r\n\r\ninterface TransactionItemProps {\r\n transaction: TransactionDTO;\r\n showDownload?: boolean;\r\n}\r\n\r\nexport default function TransactionItem({ transaction, showDownload }: TransactionItemProps) {\r\n const { t } = useTranslation();\r\n const download = useDownloadInvoice(transaction.InvoiceNo);\r\n\r\n return (\r\n
\r\n
\r\n

{formatDateString(transaction.TransactionDate)}

\r\n {showDownload && transaction.HasInvoice && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n
\r\n

{t(transaction.CategoryKey)}

\r\n

{transaction.InvoiceNo}

\r\n
\r\n

{getAmount(transaction.Amount)}

\r\n
\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport './Spinner.scss';\r\n\r\nconst Spinner: React.FC = props => {\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Spinner;\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostTransactionSearchCall extends PostApiCall {\r\n constructor(filter: TransactionFilterDTO) {\r\n let url: string = 'account/' + filter.AccountId + '/search';\r\n\r\n super(url);\r\n\r\n this.body = filter;\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { WidgetPosition, Widget, WidgetHeader } from '../../../Shared/Components/Presentational/Widget';\r\nimport TransactionItem from './TransactionItem';\r\nimport './TransactionWidget.scss';\r\nimport { Link } from 'react-router-dom';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\nimport { Post } from '../../../Api/ApiService';\r\nimport moment from 'moment';\r\nimport { PostTransactionSearchCall } from '../../../Api/Calls/PostTransactionSearchCall';\r\n\r\ninterface TransactionWidgetProps extends WithTranslation {\r\n position: WidgetPosition;\r\n accountId: number;\r\n accountNumber: string;\r\n setAccountBalance: (newBalance: number) => void;\r\n}\r\n\r\ninterface TransactionWidgetState {\r\n isLoading: boolean;\r\n accountBalance: undefined | number;\r\n transactions: TransactionDTO[];\r\n}\r\n\r\nclass TransactionWidget extends Component {\r\n state: TransactionWidgetState = {\r\n isLoading: true,\r\n accountBalance: undefined,\r\n transactions: [],\r\n };\r\n\r\n componentDidMount() {\r\n this.fetchTransactions();\r\n }\r\n\r\n componentDidUpdate(prevProps: TransactionWidgetProps) {\r\n if (prevProps.accountId !== this.props.accountId) {\r\n this.fetchTransactions();\r\n }\r\n }\r\n\r\n private async fetchTransactions() {\r\n this.setState({ isLoading: true });\r\n const filter: TransactionFilterDTO = {\r\n Page: 1,\r\n PageSize: 5,\r\n AccountId: this.props.accountId,\r\n AccountNumber: this.props.accountNumber,\r\n FromDate: moment().subtract(6, 'months').format('DD/MM/YYYY'),\r\n ToDate: moment().format('DD/MM/YYYY'),\r\n TransactionCategory: '',\r\n };\r\n\r\n try {\r\n const results = await Post(new PostTransactionSearchCall(filter));\r\n if (results.data.Dtos.length > 0) {\r\n const balance = results.data.Dtos[0].Balance;\r\n this.setState({ transactions: results.data.Dtos, accountBalance: balance });\r\n this.props.setAccountBalance(balance);\r\n }\r\n } catch {\r\n this.setState({ transactions: [] });\r\n } finally {\r\n this.setState({ isLoading: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { t, position } = this.props;\r\n const { transactions, accountBalance } = this.state;\r\n\r\n return (\r\n \r\n \r\n {this.state.isLoading ? (\r\n
\r\n \r\n
\r\n ) : transactions.length > 0 ? (\r\n <>\r\n {transactions.map((transaction, i) => (\r\n \r\n ))}\r\n {accountBalance !== undefined && (\r\n
\r\n {t('homePage.transaction.balance')} £{accountBalance.toFixed(2)}\r\n
\r\n )}\r\n \r\n ) : (\r\n
{t('homePage.transaction.noTransactions')}
\r\n )}\r\n\r\n
\r\n \r\n {t('homePage.transaction.viewMyAccount')}\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(TransactionWidget);\r\n","import React from 'react';\r\nimport { Translation } from 'react-i18next';\r\nimport { SecondaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { SelectedCalendarWidgetOptions } from '../../Redux/ActionTypes';\r\nimport { AppState } from '../../../RootReducer';\r\nimport { connect } from 'react-redux';\r\nimport { setSelectedCalendarWidget } from '../../Redux/ActionCreators';\r\nimport FeatureToggle from '../../../Shared/Components/Presentational/FeatureToggle';\r\nimport Features from '../../../Constants/Features';\r\nimport classNames from 'classnames';\r\n\r\ninterface MyCalendarEventsHeaderProps {\r\n className?: string;\r\n selectedWidget: SelectedCalendarWidgetOptions;\r\n setSelectedWidget: (selected: SelectedCalendarWidgetOptions, pageSize: number) => void;\r\n pageSize: number;\r\n userRoles: UserRoleDTO[];\r\n}\r\n\r\nconst MyCalendarListHeader: React.FC = props => {\r\n return (\r\n \r\n {t => (\r\n
\r\n
\r\n \r\n props.setSelectedWidget('events', props.pageSize)}\r\n className={classNames({ active: props.selectedWidget === 'events' })}\r\n />\r\n \r\n \r\n props.setSelectedWidget('offers', props.pageSize)}\r\n className={classNames({ active: props.selectedWidget === 'offers' })}\r\n />\r\n \r\n
\r\n
\r\n )}\r\n
\r\n );\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any, props: any) => {\r\n return {\r\n setSelectedWidget: (selected: SelectedCalendarWidgetOptions) =>\r\n dispatch(setSelectedCalendarWidget(selected, props.pageSize, props.userRoles))\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state: AppState) => ({\r\n selectedWidget: state.calendar.selectedCalendarWidget,\r\n parkName: (state.user.park && state.user.park.parkName) || 'your park',\r\n userRoles: state.user.userRoles\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MyCalendarListHeader);\r\n","import React, { Component } from 'react';\r\nimport './Containers.scss';\r\n//@ts-ignore\r\nimport Zoom from 'react-reveal/Zoom';\r\nimport classNames from 'classnames';\r\n\r\ninterface ButtonContainerProps {\r\n className?: string;\r\n}\r\n\r\nexport class ButtonContainer extends Component {\r\n render() {\r\n return
{this.props.children}
;\r\n }\r\n}\r\n\r\ninterface InputContainerProps {\r\n className?: string;\r\n}\r\n\r\nexport class InputContainer extends Component {\r\n render() {\r\n return
{this.props.children}
;\r\n }\r\n}\r\n\r\ninterface IconLinkContainerProps {\r\n className?: string;\r\n href: string;\r\n label: string;\r\n iconSrc: string;\r\n onClick?: () => void;\r\n}\r\nexport class IconLinkContainer extends Component {\r\n onClick = (e: any) => {\r\n if (this.props.onClick) {\r\n e.preventDefault();\r\n this.props.onClick();\r\n }\r\n };\r\n render() {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n","import ContentfulClient from \"../ContentfulClient\";\r\n\r\nexport async function GetOutletPromotionsCall(ParkContentfulId : string) {\r\n let filter ={\r\n content_type: 'fbOutletPromotionToPark',\r\n links_to_entry: ParkContentfulId,\r\n include: 1\r\n \r\n }\r\n const result = await ContentfulClient.getEntries(filter);\r\n\r\n if (result.errors){\r\n throw { message: \"GetOutletPromotionsCall returned error/s\", errors: result.errors } \r\n }\r\n return result;\r\n}\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport './ParkRestaurantButton.scss';\r\n\r\ninterface ParkRestaurantButtonProps {\r\n restaurant: PromotedRestaurant;\r\n onClick: () => void;\r\n}\r\n\r\nconst ParkRestaurantButton: React.FC = ({ restaurant, onClick }) => {\r\n const { t } = useTranslation();\r\n return (\r\n
\r\n
\r\n \"Restaurant\"\r\n
\r\n

{ restaurant.fields.name }

\r\n
\r\n );\r\n};\r\n\r\nexport default ParkRestaurantButton;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { GetParkCall } from '../../../Contentful/Calls/GetParkCall';\r\nimport { GetOutletPromotionsCall } from '../../../Contentful/Calls/GetOutletPromotionsCall';\r\nimport { Modal, ModalFooter, ModalHeader, ModalProps } from '../../../Shared/Components/Presentational/Modal';\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\nimport ParkRestaurantButton from '../Presentational/ParkRestaurantButton';\r\nimport './ParkRestaurantsModal.scss';\r\nimport { Entry } from 'contentful';\r\n\r\ninterface ParkRestaurantsModalProps extends ModalProps {\r\n parkCode: string;\r\n onRestaurantsFetched: (hasRestaurants: boolean) => void;\r\n onRestaurantSelected: (selectedRestaurant: PromotedRestaurant) => void;\r\n}\r\n\r\nconst ParkRestaurantsModal: React.FC = ({\r\n parkCode,\r\n onRestaurantsFetched,\r\n onRestaurantSelected,\r\n isOpen,\r\n onRequestClose\r\n}) => {\r\n const { t } = useTranslation();\r\n const [restaurants, setRestaurants] = useState([]);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [hasError, setHasError] = useState(false);\r\n useEffect(() => {\r\n const ObtainRestaurants = async () => {\r\n if (parkCode) {\r\n setIsLoading(true);\r\n setHasError(false);\r\n try {\r\n const contentfulPark = await GetParkCall(parkCode);\r\n const OutletPromotionsResult = await GetOutletPromotionsCall(contentfulPark.sys.id);\r\n\r\n let restaurants = OutletPromotionsResult.items.flatMap((pr) => pr.fields.outlets.map(o => { return { ...o, bookAheadDays: pr.fields.bookAheadDays, bookingHelp: pr.fields.bookingHelp } as PromotedRestaurant}));\r\n restaurants = restaurants.reduce((acc, r) => acc.filter(ar => ar.sys.id == r.sys.id).length > 0 ? acc : [...acc, r], [] as PromotedRestaurant[] )\r\n setRestaurants(restaurants);\r\n \r\n setIsLoading(false);\r\n onRestaurantsFetched(restaurants.length > 0);\r\n\r\n } catch{\r\n setIsLoading(false);\r\n setHasError(true);\r\n onRestaurantsFetched(false);\r\n }\r\n }\r\n \r\n }\r\n ObtainRestaurants()\r\n \r\n }, [parkCode, onRestaurantsFetched]);\r\n\r\n const onBackButtonClick = () => {\r\n onRequestClose && onRequestClose();\r\n };\r\n\r\n return (\r\n \r\n
\r\n \r\n {!isLoading && !hasError && restaurants.length === 0 && (\r\n

{t('myCalendar.restaurants.noneAvailable')}

\r\n )}\r\n {isLoading && }\r\n {!isLoading && hasError &&

{t('myCalendar.restaurants.error')}

}\r\n
\r\n {restaurants.map((r, i) => {\r\n return onRestaurantSelected(r)} />;\r\n })}\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n parkCode: state.user.park.parkCode\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ParkRestaurantsModal);\r\n","import { BLOCKS, Block, Inline } from '@contentful/rich-text-types'\r\nimport { Options, RenderNode } from '@contentful/rich-text-react-renderer';\r\nimport React, { ReactNode } from 'react';\r\nimport { Asset } from 'contentful';\r\n\r\nconst RichTextRenderOptions: Options = {\r\n renderNode: {\r\n [BLOCKS.EMBEDDED_ASSET]: (node: Block | Inline, children: ReactNode): ReactNode => {\r\n const asset = node.data.target as Asset;\r\n switch (asset.fields.file.contentType.split('/')[0]) {\r\n case 'image':\r\n return (\r\n \r\n );\r\n case 'text':\r\n return(\r\n {asset.fields.file.fileName}\r\n );\r\n }\r\n\r\n }\r\n }\r\n}\r\n\r\nexport default RichTextRenderOptions;","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { SecondaryButton, PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport './RestaurantDetails.scss';\r\nimport { Entry } from 'contentful';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport RichTextRenderOptions from '../../../Contentful/RichTextOptions';\r\nimport { props } from 'cypress/types/bluebird';\r\n\r\ninterface ParkRestaurantDetailsProps {\r\n restaurant: Entry;\r\n isMemberWithOutMembershipNumber: boolean;\r\n menus: Entry[],\r\n openTableBookingModal: () => void,\r\n}\r\n\r\nconst RestaurantDetails: React.FC = ({ restaurant, menus, openTableBookingModal, isMemberWithOutMembershipNumber }: ParkRestaurantDetailsProps) => {\r\n const { t } = useTranslation();\r\n\r\n const openMenu = (menu: Entry) => {\r\n const windowReference = window.open();\r\n if (menu) {\r\n windowReference!.location.href = menu.fields.pdf.fields.file.url;\r\n }\r\n };\r\n\r\n const bookOnline = () => {\r\n window.open(restaurant.fields.onlineBookingLink, \"_blank\");\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n \"Restaurant\"\r\n
\r\n
\r\n
\r\n

{t('myCalendar.restaurants.details.type')}

\r\n

{restaurant.fields.outletType}

\r\n
\r\n
\r\n

{t('myCalendar.restaurants.details.phoneNumber')}

\r\n \r\n {restaurant.fields.phoneNumber}\r\n \r\n
\r\n {restaurant.fields.onlineBookingLink && !restaurant.fields.zonalCode &&\r\n
\r\n bookOnline()}>\r\n \r\n \r\n
\r\n }\r\n {restaurant.fields.zonalCode &&\r\n
\r\n openTableBookingModal()}\r\n disabled={isMemberWithOutMembershipNumber} >\r\n \r\n {isMemberWithOutMembershipNumber && (\r\n

Membership Needed to book

\r\n )}\r\n
\r\n }\r\n \r\n
\r\n
\r\n
\r\n

{t('myCalendar.restaurants.details.description')}

\r\n

{documentToReactComponents(restaurant.fields.description, RichTextRenderOptions)}

\r\n
\r\n {menus.length > 0 && (\r\n
\r\n

{t('myCalendar.restaurants.details.viewTheMenu')}

\r\n
\r\n {menus.map((menu, i) => {\r\n return (\r\n openMenu(menu)}\r\n />\r\n );\r\n })}\r\n
\r\n
\r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default RestaurantDetails;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Get } from '../../../Api/ApiService';\r\nimport { Modal, ModalFooter, ModalHeader, ModalProps } from '../../../Shared/Components/Presentational/Modal';\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\nimport RestaurantDetails from '../Presentational/RestaurantDetails';\r\nimport './ParkRestaurantsModal.scss';\r\nimport {Entry} from 'contentful';\r\nimport {GetContentfultMenusCall} from '../../../Contentful/Calls/GetOutletMenusCall'\r\nimport { props } from 'cypress/types/bluebird';\r\n\r\nexport interface RestaurantDetailModalProps extends ModalProps {\r\n restaurant: Entry;\r\n isMemberWithOutMembershipNumber: boolean;\r\n openTableBookingModal: () => void,\r\n}\r\n\r\nconst RestaurantDetailModal: React.FC = ({ restaurant, onRequestClose, isOpen, openTableBookingModal, isMemberWithOutMembershipNumber }) => {\r\n const { t } = useTranslation();\r\n const [isLoading, setIsLoading] = useState(true);\r\n const [hasError, setHasError] = useState(false);\r\n const [restaurantMenus, setRestaurantMenus] = useState[]>([]);\r\n\r\n useEffect(() => {\r\n if(restaurant){\r\n if (restaurant.fields.menus) {\r\n setHasError(false);\r\n setIsLoading(true);\r\n \r\n GetContentfultMenusCall(restaurant.fields.menus.map(m=> m.sys.id)).then(\r\n result => {\r\n setIsLoading(false);\r\n if(result.errors){\r\n setIsLoading(false);\r\n setHasError(true);\r\n } else{\r\n setRestaurantMenus(result.items);\r\n }\r\n },\r\n err => {\r\n setIsLoading(false);\r\n setHasError(true);\r\n }\r\n );\r\n }else{\r\n setRestaurantMenus([]);\r\n setHasError(false);\r\n setIsLoading(false);\r\n }\r\n }\r\n \r\n }, [restaurant]);\r\n\r\n const onBackButtonClick = () => {\r\n onRequestClose && onRequestClose();\r\n };\r\n\r\n return (\r\n \r\n \r\n {isLoading && }\r\n {!isLoading && !hasError && restaurant && }\r\n {!isLoading && hasError && (\r\n

{t('myCalendar.restaurants.details.error')}

\r\n )}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default RestaurantDetailModal;\r\n","import ContentfulClient from \"../ContentfulClient\";\r\n\r\nexport function GetContentfultMenusCall(ContentfulMenuIds : string[]) {\r\n\r\n let filter ={\r\n content_type: 'fbMenu',\r\n 'sys.id[in]': ContentfulMenuIds.join(',')\r\n\r\n }\r\n return ContentfulClient.getEntries(filter);\r\n}","import moment from 'moment';\r\n\r\nexport function isValidDate(date: string): boolean {\r\n return date.length > 0 && moment(date, 'DD/MM/YYYY', true).isValid();\r\n}\r\n\r\nexport function isUnder10Characters(value: any): boolean {\r\n return value && value.registration.length <= 10;\r\n}\r\n\r\nexport function vehicleValidation(value: any): boolean {\r\n return (value.description && value.registration) || (!value.description && !value.registration) || (value.registration && !value.description);\r\n}\r\n\r\nexport function isMembershipType(value: any): boolean {\r\n return value.toString().length > 0;\r\n}\r\n\r\nexport function hasValue(value: any): boolean {\r\n return value.toString().length > 0;\r\n}\r\n\r\nexport function isTextOnly(value: any): boolean {\r\n return !/\\d/.test(value);\r\n}\r\n\r\nexport function numberisValid(value: number): boolean {\r\n return value >= 0 && value <= 10;\r\n}\r\n\r\nexport function isValidEmail(email: string): boolean {\r\n if(email === \"\"){\r\n return true;\r\n }\r\n return email.match(/^([\\w.%+-]+)@([\\w-]+\\.)+([\\w]{2,})$/i) != null;\r\n}\r\n\r\nexport function isFutureDate(date: string): boolean {\r\n return isValidDate(date) && moment(date, 'DD/MM/YYYY', true).isSameOrAfter(moment(), 'day'); \r\n}\r\n\r\nexport function isNotFutureDate(date: Date|undefined|null): boolean {\r\n if (!date) {\r\n return false;\r\n }\r\n if (moment(date).diff(moment(), 'day') < 0 || (moment(date).diff(moment(), 'day') == 0 && moment(date).diff(moment(), 'hour') <= 0)){\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\n\r\nexport function isDateNotInPast(date: Date|undefined|null): boolean {\r\n if (!date) {\r\n return false;\r\n }\r\n if (moment(date).diff(moment(), 'day') >= 0){\r\n return true;\r\n }\r\n return false;\r\n}\r\n\r\nexport function isAfterDate(date: string, dateAfter: string): boolean {\r\n return isValidDate(date) && isValidDate(dateAfter) && moment(date, 'DD/MM/YYYY', true).isAfter(moment(dateAfter, 'DD/MM/YYYY', true), 'day'); \r\n}\r\n\r\nexport function CreateXDaysValidator(days: number): any{\r\n return function isDateAfterWithinXDays(date: Date|undefined|null): boolean {\r\n if (!date) {\r\n return false;\r\n }\r\n if (moment(date).diff(moment(), 'day') <= (days-1)){\r\n return true;\r\n }\r\n return false;\r\n }\r\n}\r\n\r\nexport function isInternationalPhoneNumber(phoneNumber: string): boolean {\r\n const regex = /^\\+(\\(?)([0-9]){1,3}(\\)?)(\\ ?[0-9]\\ ?){3,20}$/;\r\n return regex.test(phoneNumber) && isValidUKPhoneNumber(phoneNumber);\r\n}\r\n\r\nexport function isValidUKPhoneNumber(phoneNumber: string): boolean {\r\n\r\n var result = false;\r\n while(phoneNumber.search(\" \") != -1)\r\n {\r\n phoneNumber = phoneNumber.replace(\" \",\"\");\r\n } \r\n if (phoneNumber.startsWith('+44') || phoneNumber.startsWith('+(44)')) {\r\n if (phoneNumber.startsWith('+(44)')) {\r\n phoneNumber = phoneNumber.replace('(', '').replace(')', '');\r\n }\r\n const number = parseFloat(phoneNumber);\r\n result = number.toString().length === 12;\r\n }\r\n if (phoneNumber.startsWith('0')) {\r\n result = phoneNumber.length === 11;\r\n }\r\n if (phoneNumber === \"\") {\r\n result = true;\r\n }\r\n\r\n return result;\r\n}","import { GetApiCall } from './ApiCall';\r\n\r\nexport class GetRestaurantAvailabilityCall extends GetApiCall {\r\n constructor(restaurantCode: string, session: string, date: string, numOfAdults: number, numOfChildren?: number) {\r\n let url: string = 'external/checkRestaurantAvailability';\r\n\r\n let params: any = { restaurantCode, session, date, numOfAdults}\r\n\r\n if (numOfChildren){\r\n params = {...params, numOfChildren}\r\n }\r\n\r\n super(url, params);\r\n }\r\n}\r\n","export enum Honorifics {\r\n Mr=\"Mr\",\r\n Mrs=\"Mrs\",\r\n Miss=\"Miss\",\r\n Ms=\"Ms\",\r\n Mx=\"Mx\",\r\n Sir=\"Sir\",\r\n Dr=\"Dr\"\r\n}","import { GetApiCall } from './ApiCall';\r\n\r\nexport class GetRestaurantSessionsCall extends GetApiCall {\r\n constructor(restaurantCode: string, date: string) {\r\n let url: string = 'external/restaurantsessions';\r\n\r\n super(url, { restaurantCode, date}); \r\n }\r\n}\r\n","import React from 'react';\r\nimport classNames from 'classnames';\r\nimport moment from 'moment';\r\n\r\ntype NativeDatePickerProps = {\r\n name: string;\r\n placeholder: string;\r\n selected?: Date;\r\n invalid: boolean;\r\n openToDate?: Date;\r\n onChange: (date: Date) => void;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n tabIndex?: number;\r\n};\r\n\r\nexport function NativeDatePicker({ name, placeholder, selected, invalid, onChange, openToDate, minDate, maxDate, tabIndex }: NativeDatePickerProps) {\r\n const convertDate = function (date: Date | undefined): string {\r\n if (!date || isNaN(date.getTime())) {\r\n return '';\r\n }\r\n const dateString = moment(date).format('YYYY-MM-DD');\r\n return dateString;\r\n };\r\n\r\n const valueChanged = function (event: React.FormEvent) {\r\n const date: Date = moment(event.currentTarget.value, 'YYYY-MM-DD').toDate();\r\n onChange(date);\r\n };\r\n\r\n const calendarOpen = ()=>{\r\n if(!selected && openToDate){\r\n onChange(openToDate)\r\n }\r\n }\r\n\r\n return (\r\n valueChanged(e)}\r\n className={classNames('form-input', { invalid: invalid })}\r\n defaultValue={moment(new Date()).format('YYYY-MM-DD')}\r\n onFocus={() => calendarOpen()}\r\n min={minDate ? moment(minDate).format('YYYY-MM-DD') : undefined}\r\n max={maxDate ? moment(maxDate).format('YYYY-MM-DD') : undefined}\r\n tabIndex={tabIndex}\r\n />\r\n );\r\n}\r\n","import React from \"react\";\r\nimport \"./SelectableChip.scss\";\r\n\r\ninterface SelectableChipProps {\r\n isSelected?: boolean;\r\n itemKey: string;\r\n onSelect?: (key: string) => void;\r\n}\r\n\r\nconst SelectableChip: React.FC = (props) => {\r\n return (\r\n {\r\n props.onSelect && props.onSelect(props.itemKey);\r\n }}\r\n >\r\n
{props.children}
\r\n \r\n );\r\n};\r\n\r\nexport default SelectableChip;\r\n","import React, { Component } from 'react';\r\nimport './DropdownList.scss';\r\nimport Select from 'react-select';\r\nimport { ValueType } from 'react-select/src/types';\r\nimport classNames from 'classnames';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\n\r\ninterface DropdownListProps extends WithTranslation {\r\n options: DropdownListOption[];\r\n selectedOption?: DropdownListOption;\r\n className?: string;\r\n classNamePrefix?: string;\r\n onSelectionChanged?: (newValue: DropdownListOption) => void;\r\n placeholder?: string;\r\n isDisabled?: boolean;\r\n isLoading?: boolean;\r\n}\r\n\r\nconst styles = {\r\n control: (provided: any, state: any) => ({\r\n ...provided,\r\n border: state.isFocused ? '1px solid #45417B' : '1px solid #E0E7EE',\r\n boxShadow: state.isFocused ? '0 2px 4px 0 #C2BFDE' : 'none',\r\n '&:hover': {\r\n borderColor: state.isFocused ? '#45417B' : '#E0E7EE'\r\n }\r\n }),\r\n placeholder: (provided: any) => ({\r\n ...provided,\r\n color: '#a0a0a0'\r\n }),\r\n option: (provided: any) => ({\r\n ...provided,\r\n backgroundColor: 'none',\r\n '&:focus': {\r\n backgroundColor: '#F5F6FB'\r\n },\r\n '&:hover': {\r\n backgroundColor: '#F5F6FB'\r\n }\r\n }),\r\n singleValue: (provided: any) => ({\r\n ...provided,\r\n color: '#184f6d'\r\n })\r\n};\r\n\r\nclass DropdownList extends Component {\r\n constructor(props: DropdownListProps) {\r\n super(props);\r\n\r\n this.selectionChanged = this.selectionChanged.bind(this);\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n\r\n const translateOptions = (options: DropdownListOption[]): DropdownListOption[] => {\r\n options.forEach((o) => (o.label = t(o.label)));\r\n return options;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n }\r\n\r\n private selectionChanged(newValue: ValueType<{ value: string; label: string }>, actionMeta: any) {\r\n if (this.props.onSelectionChanged) {\r\n this.props.onSelectionChanged(newValue as DropdownListOption);\r\n }\r\n }\r\n}\r\n\r\nexport default withTranslation()(DropdownList);","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Get } from '../../../Api/ApiService';\r\nimport { GetRestaurantAvailabilityCall } from '../../../Api/Calls/GetRestaurantAvailabilityCall';\r\nimport { GetRestaurantSessionsCall } from '../../../Api/Calls/GetRestaurantSessionsCall';\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\nimport { Entry } from 'contentful';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport moment from 'moment';\r\nimport DatePicker from 'react-datepicker';\r\nimport { NativeDatePicker } from '../../../Shared/Components/Presentational/NativeDatePicker';\r\nimport { isValidEmail } from '../../../Shared/Utilities/Validation';\r\nimport {Honorifics} from '../../../Constants/Honorifics';\r\n\r\n//@ts-ignore\r\nimport SelectableChip from '../../../Shared/Components/Presentational/SelectableChip';\r\nimport DropdownList from '../../../Shared/Components/Presentational/DropdownList';\r\n\r\ninterface BookTableFormProps {\r\n className?: string;\r\n bookingDetails: BookTableDTO;\r\n setBookingDetails: (prevState: BookTableDTO) => any;\r\n availableTimeSlots: string[];\r\n setAvailableTimeSlots: (prevState: string[]) => any;\r\n availableSessions: RestaurantSessionDTO[];\r\n setAvailableSessions: (prevState: RestaurantSessionDTO[]) => any;\r\n minBookingDate: Date;\r\n maxBookingDate?: Date;\r\n}\r\n\r\nconst BookTableForm: React.FC = (\r\n {className, bookingDetails, setBookingDetails, minBookingDate, maxBookingDate, availableTimeSlots, setAvailableTimeSlots, setAvailableSessions, availableSessions }) => {\r\n\r\n const [selectedDate, setSelectedDate] = useState();\r\n const [dateValid, setDateValid] = useState(true);\r\n\r\n const [selectedTimeSlot, setSelectedTimeSlot] = useState();\r\n\r\n const [timeSlotMessage, setTimeSlotMessage] = useState();\r\n const [isTimeSlotsLoading, setIsTimeSlotsLoading] = useState(false);\r\n\r\n const [isSessiosnLoading, setIsSessionsLoading] = useState(false);\r\n\r\n const { t } = useTranslation();\r\n\r\n const numberRange = (min: number, max: number) : number[] =>{\r\n return Array.from(Array(max-min + 1), (_, i) => i+min)\r\n }\r\n\r\n \r\n const handleInputChangeEvent = (event: any, validate?: (val: any) => boolean) => {\r\n \r\n const target = event.target;\r\n let value = target.type === 'checkbox' ? target.checked : target.value;\r\n const name = target.name;\r\n\r\n if (!value) {\r\n if (event.target.dataset.fallback) {\r\n value = target.dataset.fallback;\r\n } else if (target.required) {\r\n target.classList.add('invalid');\r\n }\r\n } else if (validate != undefined && !validate(value)) {\r\n target.classList.add('invalid');\r\n } else {\r\n target.classList.remove('invalid');\r\n }\r\n\r\n setBookingDetails({\r\n ...bookingDetails,\r\n [name]: value\r\n });\r\n }\r\n\r\n const handleBookingDateChange = (date: Date | null) => {\r\n setSelectedDate(date);\r\n setDateValid(date !== null);\r\n }\r\n\r\n const handleTimeSlotChange = (timeslot?: string) => {\r\n setSelectedTimeSlot(timeslot);\r\n\r\n let bookingDateString = \"\";\r\n\r\n if (timeslot && selectedDate) {\r\n bookingDateString = `${moment(selectedDate!).format('YYYY-MM-DD')} ${timeslot}`;\r\n }\r\n\r\n setBookingDetails({\r\n ...bookingDetails,\r\n BookingDate: bookingDateString\r\n });\r\n }\r\n\r\n useEffect(() => {\r\n const getAvailableSessions = async () => {\r\n if (selectedDate) {\r\n setIsSessionsLoading(true);\r\n try {\r\n const result = await Get(new GetRestaurantSessionsCall(\r\n bookingDetails.RestaurantCode, moment(selectedDate!).format('YYYY-MM-DD')));\r\n\r\n setAvailableSessions(result.data);\r\n } catch (e) {\r\n console.log(e);\r\n setAvailableSessions([]);\r\n }\r\n setIsSessionsLoading(false);\r\n } else {\r\n // FORM INCOMPLETE\r\n }\r\n\r\n }\r\n getAvailableSessions();\r\n }, [selectedDate])\r\n\r\n useEffect(() => {\r\n const getAvailableTimeSlots = async () => {\r\n if (selectedDate && selectedDate.getDate() && bookingDetails.NumOfAdults >= 1 && bookingDetails.SessionName) {\r\n setIsTimeSlotsLoading(true);\r\n handleTimeSlotChange(undefined);\r\n try {\r\n const result = await Get(new GetRestaurantAvailabilityCall(\r\n bookingDetails.RestaurantCode,\r\n bookingDetails.SessionName,\r\n moment(selectedDate!).format('YYYY-MM-DD'),\r\n bookingDetails.NumOfAdults,\r\n bookingDetails.NumOfChildren));\r\n\r\n setAvailableTimeSlots(result.data);\r\n\r\n if (result.data.length < 1) {\r\n setTimeSlotMessage(t('myCalendar.restaurants.bookTable.noTablesAvailable'));\r\n } else {\r\n setTimeSlotMessage(null);\r\n }\r\n\r\n } catch (e) {\r\n setTimeSlotMessage(t('myCalendar.restaurants.bookTable.errorOptainingTimeSlots'));\r\n }\r\n setIsTimeSlotsLoading(false);\r\n } else {\r\n setTimeSlotMessage(t('myCalendar.restaurants.bookTable.errorFormIncomplete'));\r\n }\r\n\r\n }\r\n getAvailableTimeSlots();\r\n }, [selectedDate, bookingDetails.NumOfAdults, bookingDetails.NumOfChildren, bookingDetails.SessionName])\r\n\r\n\r\n\r\n return (\r\n
\r\n
\r\n \r\n {return {label: n.toString(), value: n.toString()}})}\r\n classNamePrefix=\"\"\r\n onSelectionChanged={(opt)=> setBookingDetails({ ...bookingDetails,NumOfAdults: parseInt(opt.value)})}\r\n selectedOption={{label: bookingDetails.NumOfAdults.toString(), value: bookingDetails.NumOfAdults.toString()}}\r\n />\r\n
\r\n
\r\n \r\n {return {label: n.toString(), value: n.toString()}})}\r\n classNamePrefix=\"\"\r\n onSelectionChanged={(opt)=> setBookingDetails({ ...bookingDetails,NumOfChildren: parseInt(opt.value)})}\r\n selectedOption={{label: bookingDetails.NumOfChildren.toString(), value: bookingDetails.NumOfChildren.toString()}}\r\n />\r\n
\r\n
\r\n \r\n \r\n handleBookingDateChange(date)}\r\n placeholderText=\"dd/mm/yyyy\"\r\n dateFormat=\"dd/MM/yyyy\"\r\n minDate={minBookingDate}\r\n maxDate={maxBookingDate}\r\n />\r\n \r\n \r\n handleBookingDateChange(date)}\r\n invalid={!dateValid}\r\n minDate={minBookingDate}\r\n maxDate={maxBookingDate}\r\n />\r\n \r\n
\r\n
\r\n \r\n {return {label: as.Name, value: as.Name}})}\r\n classNamePrefix=\"\"\r\n onSelectionChanged={(opt)=> setBookingDetails({ ...bookingDetails,SessionName: opt.value})}\r\n selectedOption={{label: bookingDetails.SessionName, value: bookingDetails.SessionName}}\r\n isDisabled={!selectedDate}\r\n isLoading={isSessiosnLoading}\r\n />\r\n
\r\n
\r\n \r\n
\r\n {isTimeSlotsLoading && \r\n || (!timeSlotMessage &&\r\n availableTimeSlots.map((value) => {\r\n return (\r\n \r\n {value}\r\n )\r\n })\r\n ||

{timeSlotMessage}

)\r\n }\r\n
\r\n\r\n
\r\n
\r\n \r\n {return {label: h, value: h}})}\r\n classNamePrefix=\"\"\r\n onSelectionChanged={(opt)=> setBookingDetails({ ...bookingDetails,Title: opt.value})}\r\n selectedOption={{label: bookingDetails.Title, value: bookingDetails.Title}}\r\n />\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n handleInputChangeEvent(e, (v) => isValidEmail(v))}\r\n />\r\n
\r\n
\r\n \r\n \r\n
\r\n
);\r\n};\r\n\r\nexport default BookTableForm;\r\n","export enum RestaurantReservationModals {\r\n None = 0,\r\n ParkRestaurantsModal,\r\n RestaurantDetailModal,\r\n BookTableModal,\r\n}","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostBookTableCall extends PostApiCall {\r\n constructor(body: BookTableDTO) {\r\n let url: string = `external/booktable`;\r\n\r\n super(url);\r\n\r\n this.body = body;\r\n this.logoutOn401 = false;\r\n }\r\n}\r\n","import React, { useState, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Modal, ModalFooter, ModalHeader, ModalProps, SuccessModal } from '../../../Shared/Components/Presentational/Modal';\r\nimport { Desktop, Mobile, useIsDesktop } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport moment from 'moment';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport { isValidEmail } from '../../../Shared/Utilities/Validation';\r\nimport BookTableForm from '../Presentational/BookTableForm';\r\nimport { Post } from '../../../Api/ApiService';\r\nimport { PostBookTableCall } from '../../../Api/Calls/PostBookTableCall'\r\nimport './BookTableModal.scss';\r\n\r\n//@ts-ignore\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\n\r\ninterface BookTableModalProps extends ModalProps {\r\n restaurant: PromotedRestaurant;\r\n className?: string;\r\n lodgeId?: number;\r\n accountId?: number;\r\n membershipNumber?: string;\r\n}\r\n\r\nconst BookTableModal: React.FC = ({ restaurant, onRequestClose, isOpen, className, lodgeId, accountId, membershipNumber }) => {\r\n\r\n\r\n const defaultBookingDetals: BookTableDTO = {\r\n Title: \"\",\r\n FirstName: \"\",\r\n Surname: \"\",\r\n PhoneNumber: \"\",\r\n Email: \"\",\r\n RestaurantCode: restaurant.fields.zonalCode!,\r\n SessionName: \"\",\r\n BookingDate: \"\",\r\n NumOfAdults: 2,\r\n NumOfChildren: 0,\r\n LodgeId: lodgeId || 0,\r\n AccountId: accountId || 0,\r\n MembershipNumber: membershipNumber,\r\n }\r\n\r\n const [bookingDetails, setBookingDetails] = useState(defaultBookingDetals);\r\n const [isSubmitting, setIsSubmitting] = useState(false);\r\n const [isSuccessModalOpen, setIsSuccessModalOpen] = useState(false);\r\n const [hasError, setHasError] = useState(false);\r\n const [bookingRefNum, setBookingRefNum] = useState(\"\");\r\n\r\n const [availableTimeSlots, setAvailableTimeSlots] = useState([])\r\n const [availableSessions, setAvailableSessions] = useState([])\r\n\r\n const isDesktop = useIsDesktop();\r\n\r\n const { t } = useTranslation();\r\n\r\n const minBookingDate = moment().toDate();\r\n const maxBookingDate = restaurant.bookAheadDays ? moment().add(restaurant.bookAheadDays - 1, \"days\").toDate() : undefined;\r\n\r\n const goBack = () => {\r\n onRequestClose && onRequestClose();\r\n };\r\n\r\n const isFormValid = () => {\r\n if (bookingDetails.AccountId === 0 && bookingDetails.LodgeId === 0) {\r\n return Object.values(bookingDetails).every(v => v != null && v !== \"\")\r\n && isValidEmail(bookingDetails.Email)\r\n && bookingDetails.NumOfAdults >= 1\r\n } else {\r\n let details = bookingDetails;\r\n details.MembershipNumber = \"0\";\r\n return Object.values(details).every(v => v != null && v !== \"\")\r\n && isValidEmail(details.Email)\r\n && details.NumOfAdults >= 1\r\n }\r\n }\r\n\r\n const onSubmit = () => {\r\n if (isFormValid()) {\r\n setIsSubmitting(true);\r\n Post(new PostBookTableCall(bookingDetails))\r\n .then((success) => {\r\n setHasError(false);\r\n setBookingRefNum(success.data)\r\n setIsSuccessModalOpen(true);\r\n }, (error) => {\r\n console.log(error);\r\n setHasError(true);\r\n }).finally(() => setIsSubmitting(false))\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n if (isOpen) {\r\n setBookingDetails(defaultBookingDetals);\r\n setHasError(false);\r\n }\r\n }, [isOpen]);\r\n\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n {restaurant.bookingHelp &&\r\n
\r\n {documentToReactComponents(restaurant.bookingHelp!)}\r\n
\r\n }\r\n \r\n

\r\n {t('myCalendar.restaurants.bookTable.generalErrorMessage')}\r\n

\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n {restaurant.bookingHelp &&\r\n
\r\n {documentToReactComponents(restaurant.bookingHelp!)}\r\n
\r\n }\r\n \r\n

\r\n {t('myCalendar.restaurants.bookTable.generalErrorMessage')}\r\n

\r\n \r\n \r\n \r\n
\r\n
\r\n {\r\n setIsSuccessModalOpen(false);\r\n goBack();\r\n }}\r\n className={'success-modal'}\r\n title={t('myCalendar.restaurants.bookTable.successModalTitle')}\r\n message={t('myCalendar.restaurants.bookTable.successModalBody', { bookingRefNum })}\r\n buttonText={t('general.ok')}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default BookTableModal;\r\n","import classNames from 'classnames';\r\nimport React, { useState, useCallback, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport Features from '../../../Constants/Features';\r\nimport { IconLinkContainer } from '../../../Shared/Components/Presentational/Containers';\r\nimport FeatureToggle from '../../../Shared/Components/Presentational/FeatureToggle';\r\nimport ParkRestaurantsModal from '../Container/ParkRestaurantsModal';\r\nimport './ReservationLinksWidget.scss';\r\nimport RestaurantDetailModal from '../Container/RestaurantDetailModal';\r\nimport BookTableModal from '../Container/BookTableModal';\r\nimport { RestaurantReservationModals } from '../../../Constants/Calendar/RestaurantReservationModals'\r\nimport { Entry } from 'contentful';\r\n\r\ninterface ReservationLinksWidgetProps {\r\n containerClassName?: string;\r\n showHeader: boolean;\r\n lodgeId?: number;\r\n accountId?: number;\r\n parkInformation: Entry;\r\n membershipNumber?: string;\r\n isMember: boolean;\r\n}\r\n\r\nconst ReservationLinksWidget: React.FC = props => {\r\n const [activeRestaurantReservationModal, setActiveRestaurantReservationModal] = useState(RestaurantReservationModals.None);\r\n const [hasRestaurants, setHasRestaurants] = useState(false);\r\n const [selectedRestaurant, setSelectedRestaurant] = useState();\r\n const { t } = useTranslation();\r\n\r\n // this prevents the component calling search multiple times because this function will never change\r\n const updateHasRestaurants = useCallback((result: boolean) => {\r\n setHasRestaurants(result);\r\n }, []);\r\n\r\n const onRestaurantSelected = (selectedRestaurant: PromotedRestaurant) => {\r\n setSelectedRestaurant(selectedRestaurant);\r\n setActiveRestaurantReservationModal(RestaurantReservationModals.RestaurantDetailModal)\r\n };\r\n\r\n return (\r\n <>\r\n
\r\n {props.showHeader &&

{t('myCalendar.reservations.header')}

}\r\n
\r\n \r\n setActiveRestaurantReservationModal(RestaurantReservationModals.ParkRestaurantsModal)}\r\n \r\n />\r\n \r\n {props.parkInformation && \r\n \r\n }\r\n {props.parkInformation && \r\n \r\n }\r\n
\r\n
\r\n setActiveRestaurantReservationModal(RestaurantReservationModals.None)}\r\n onRestaurantsFetched={updateHasRestaurants}\r\n onRestaurantSelected={onRestaurantSelected}\r\n />\r\n {selectedRestaurant && (\r\n <>\r\n {\r\n setActiveRestaurantReservationModal(RestaurantReservationModals.ParkRestaurantsModal)\r\n }}\r\n restaurant={selectedRestaurant}\r\n openTableBookingModal={() => setActiveRestaurantReservationModal(RestaurantReservationModals.BookTableModal)}\r\n isMemberWithOutMembershipNumber={props.isMember && props.membershipNumber === undefined}\r\n />\r\n {\r\n setActiveRestaurantReservationModal(RestaurantReservationModals.RestaurantDetailModal)\r\n }}\r\n lodgeId={props.lodgeId}\r\n accountId={props.accountId}\r\n restaurant={selectedRestaurant}\r\n membershipNumber={props.membershipNumber}\r\n />\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default ReservationLinksWidget;\r\n","import UserRoles from \"../../Constants/UserRoles\";\r\nimport ContentfulClient from \"../ContentfulClient\";\r\nimport { TagsFilter } from \"../TagsFilter\";\r\n\r\nexport async function GetImportantInformationCall(parkCode: string,userRoles: UserRoleDTO[]) {\r\n let filter = {\r\n content_type: 'park',\r\n 'fields.code': parkCode,\r\n select:[\r\n 'fields.htmlContentBlocks',\r\n ]\r\n }\r\n const result = await ContentfulClient.getEntries(filter);\r\n\r\n if (result.errors) {\r\n throw {message: \"GetImportantInformationCall returned error/s\", errors: result.errors} \r\n }\r\n\r\n let indexToBeRemoved: Array = [];\r\n if(userRoles.length > 0) {\r\n result.items[0].fields.htmlContentBlocks.forEach((content)=>{\r\n if(new TagsFilter().removeContent(content,userRoles)){\r\n indexToBeRemoved.push(content.sys.id);\r\n }\r\n });\r\n }\r\n\r\n if (indexToBeRemoved.length !== 0) {\r\n indexToBeRemoved.forEach((val)=>{\r\n result.items[0].fields.htmlContentBlocks.forEach((content,index)=>{\r\n if(content.sys.id === val){\r\n result.items[0].fields.htmlContentBlocks.splice(index,1); \r\n }\r\n });\r\n })\r\n }\r\n\r\n return result.items[0].fields.htmlContentBlocks;\r\n}","import { faSleigh } from \"@fortawesome/free-solid-svg-icons\";\r\nimport UserRoles from \"../../Constants/UserRoles\";\r\nimport ContentfulClient from \"../ContentfulClient\";\r\nimport { TagsFilter } from \"../TagsFilter\";\r\n\r\nexport async function GetParkFAQsCall(parkCode: string,userRoles: UserRoleDTO[]) {\r\n let filter = {\r\n content_type: 'park',\r\n 'fields.code': parkCode,\r\n select:[\r\n 'fields.faQs',\r\n ]\r\n }\r\n let result = await ContentfulClient.getEntries(filter);\r\n\r\n if (result.errors) {\r\n throw {message: \"GetParkFAQsCall returned error/s\", errors: result.errors} \r\n }\r\n \r\n let indexToBeRemoved: Array = [];\r\n if(userRoles.length > 0){\r\n result.items[0].fields.faQs.forEach((faq)=>{\r\n if(new TagsFilter().removeContent(faq,userRoles)){\r\n indexToBeRemoved.push(faq.sys.id);\r\n }\r\n });\r\n }\r\n\r\n if (indexToBeRemoved.length !== 0){\r\n indexToBeRemoved.forEach((val)=>{\r\n result.items[0].fields.faQs.forEach((faq,index)=>{\r\n if(faq.sys.id === val){\r\n result.items[0].fields.faQs.splice(index,1); \r\n }\r\n });\r\n })\r\n }\r\n\r\n return result.items[0].fields.faQs;\r\n}","import ContentfulClient from \"../ContentfulClient\";\r\n\r\nexport async function GetParkInformationCall(parkCode: string) {\r\n let filter = {\r\n content_type: 'park',\r\n 'fields.code': parkCode,\r\n select:[\r\n 'fields.myHaulfrynAlert',\r\n 'fields.myHaulfrynActivityBookingUrl',\r\n 'fields.myHaulfrynActivityLabel',\r\n 'fields.myHaulfrynSpaBookingUrl',\r\n 'fields.emailAddress',\r\n 'fields.phoneNumber',\r\n 'fields.postalAddress',\r\n 'fields.aboutThePark',\r\n 'fields.image'\r\n ]\r\n }\r\n const result = await ContentfulClient.getEntries(filter);\r\n \r\n if (result.errors) {\r\n throw {message: \"GetParkInformationCall returned error/s\", errors: result.errors} \r\n }\r\n \r\n return result.items[0];\r\n}","import {\r\n SET_LODGE_DETAILS,\r\n SET_LODGE_DETAILS_LIST,\r\n GET_FAQS_REQUEST,\r\n GET_FAQS_SUCCESS,\r\n GET_FAQS_FAILURE,\r\n GET_IMPORTANT_INFORMATION_REQUEST,\r\n GET_IMPORTANT_INFORMATION_SUCCESS,\r\n GET_IMPORTANT_INFORMATION_FAILURE,\r\n GET_PARK_INFORMATION_REQUEST,\r\n GET_PARK_INFORMATION_SUCCESS,\r\n GET_PARK_INFORMATION_FAILURE\r\n} from './ActionTypes';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport { AppState } from '../../RootReducer';\r\nimport { Action } from 'redux';\r\nimport { Get } from '../../Api/ApiService';\r\nimport { GetFaqsCall } from '../../Api/Calls/GetFaqsCall';\r\nimport { GetInformationCall } from '../../Api/Calls/GetInformationCall';\r\nimport { GetImportantInformationCall } from '../../Contentful/Calls/GetImportantInformationCall';\r\nimport { GetParkFAQsCall } from '../../Contentful/Calls/GetParkFAQsCall';\r\nimport { GetParkInformationCall } from '../../Contentful/Calls/GetParkInformationCall';\r\nimport { stringOrDate } from 'react-big-calendar';\r\n\r\nexport const setLodgeDetails = (lodgeId: string): ThunkAction => async (\r\n dispatch,\r\n getState\r\n) => {\r\n const lodgeDetailsList: LodgeDetailDTO[] = getState().information.lodgeDetailsList;\r\n const lodgeDetails = lodgeDetailsList.find(ld => ld.LodgeId.toString() === lodgeId);\r\n\r\n if (lodgeDetails) {\r\n dispatch({ type: SET_LODGE_DETAILS, payload: lodgeDetails });\r\n }\r\n};\r\n\r\nexport const setLodgeDetailsList = (\r\n lodgeDetailsList: LodgeDetailDTO[]\r\n): ThunkAction => async dispatch => {\r\n dispatch({ type: SET_LODGE_DETAILS_LIST, payload: lodgeDetailsList });\r\n};\r\n\r\nexport const getFaqs = (userRoles: UserRoleDTO[]): ThunkAction => async (dispatch, getState) => {\r\n const park = getState().user.park;\r\n\r\n dispatch({ type: GET_FAQS_REQUEST });\r\n park && GetParkFAQsCall(park.parkCode,userRoles)\r\n .then(response => {\r\n dispatch({ type: GET_FAQS_SUCCESS, payload: response });\r\n })\r\n .catch(error => {\r\n dispatch({ type: GET_FAQS_FAILURE, payload: error });\r\n });\r\n};\r\n\r\nexport const getImportantInformation = (userRoles: UserRoleDTO[]): ThunkAction => async (dispatch, getState) => {\r\n const park = getState().user.park;\r\n \r\n dispatch({ type: GET_IMPORTANT_INFORMATION_REQUEST });\r\n park && GetImportantInformationCall(park.parkCode,userRoles)\r\n .then(response => {\r\n dispatch({ type: GET_IMPORTANT_INFORMATION_SUCCESS, payload: response });\r\n })\r\n .catch(error => {\r\n dispatch({ type: GET_IMPORTANT_INFORMATION_FAILURE, payload: error });\r\n });\r\n};\r\n\r\nexport const getParkInformation = (): ThunkAction => async (dispatch, getState) => {\r\n const park = getState().user.park;\r\n\r\n dispatch({ type: GET_PARK_INFORMATION_REQUEST });\r\n park && GetParkInformationCall(park.parkCode)\r\n .then(response => {\r\n dispatch({ type: GET_PARK_INFORMATION_SUCCESS, payload: response });\r\n })\r\n .catch(error => {\r\n dispatch({ type: GET_PARK_INFORMATION_FAILURE, payload: error });\r\n });\r\n}\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport ReservationLinksWidget from '../Presentational/ReservationLinksWidget';\r\nimport feature from '../../../Shared/Decorators/Feature';\r\nimport Features from '../../../Constants/Features';\r\nimport { getParkInformation } from '../../../Information/Redux/ActionCreators';\r\nimport { Entry } from 'contentful';\r\nimport UserRoles from '../../../Constants/UserRoles';\r\n\r\ninterface ReservationLinksProps {\r\n getParkInformation: any;\r\n showHeader: boolean;\r\n lodgeId?:number;\r\n accountId?:number;\r\n parkInformation: Entry;\r\n membershipNumber?: string;\r\n userRoles: UserRoleDTO[];\r\n}\r\n\r\ninterface ReservationLinksState {\r\n \r\n}\r\n@feature({ features: [Features.Restaurant, Features.Spa, Features.Activities] })\r\nclass ReservationLinks extends Component {\r\n public state: ReservationLinksState = {};\r\n\r\n public componentDidMount(): void {\r\n this.props.getParkInformation();\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n };\r\n}\r\n\r\nconst mapStateToProps = (state: any) => ({\r\n parkInformation: state.information.parkInformation,\r\n userRoles: state.user.userRoles,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n getParkInformation: () => dispatch(getParkInformation())\r\n };\r\n};\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ReservationLinks);","import React from \"react\";\r\nimport {\r\n LinkWidget,\r\n Widget,\r\n WidgetHeader,\r\n WidgetList,\r\n} from \"../../../Shared/Components/Presentational/Widget\";\r\nimport {\r\n CalendarEvent,\r\n CalendarResource,\r\n} from \"../../../Shared/Components/Presentational/Calendar\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport CalendarWidget from \"./CalendarWidget\";\r\nimport WelcomeMessageWidget from \"./WelcomeMessageWidget\";\r\nimport MenuWidget from \"./MenuWidget\";\r\nimport CalendarListWidget from \"../../../Calendar/Components/Container/CalendarListWidget\";\r\nimport Features from \"../../../Constants/Features\";\r\nimport FeatureToggle from \"../../../Shared/Components/Presentational/FeatureToggle\";\r\nimport \"./HomePage.scss\";\r\nimport NavOption from \"../../../Shared/Components/Presentational/NavOption\";\r\nimport TransactionWidget from \"./TransactionWidget\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport MyCalendarListHeader from \"../../../Calendar/Components/Container/MyCalendarListHeader\";\r\nimport ReservationLinks from \"../../../Calendar/Components/Container/ReservationLinks\";\r\n//@ts-ignore\r\nimport Zoom from \"react-reveal/Zoom\";\r\nimport NewsCardContainer from \"../../../Information/Components/Container/NewsCardContainer\";\r\n\r\ninterface HomePageProps {\r\n calendarEvents: CalendarEvent[];\r\n resources: CalendarResource[];\r\n userFirstName: string;\r\n selectedLodge: DropdownListOption;\r\n hasSublettings: boolean;\r\n accountId: number;\r\n accountNumber: string;\r\n setAccountBalance: (newBalance: number) => void;\r\n setSelectedNewsItem: (selectedNewsItemId: string) => void;\r\n useMemberships: boolean;\r\n}\r\n\r\nconst HomePage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.useMemberships ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {props.hasSublettings && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.hasSublettings && (\r\n \r\n \r\n \r\n )}\r\n\r\n {!props.hasSublettings && (\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n }\r\n >\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n )}\r\n \r\n ,\r\n }}\r\n />\r\n \r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default HomePage;\r\n","import { Component } from 'react';\r\nimport DropdownList from '../../../Shared/Components/Presentational/DropdownList';\r\nimport './DropdownListWidget.scss';\r\nimport * as React from 'react';\r\nimport { Widget, WidgetPosition } from '../../../Shared/Components/Presentational/Widget';\r\nimport classNames from 'classnames';\r\n\r\ninterface DropdownListWidgetProps {\r\n position: WidgetPosition;\r\n label: string;\r\n defaultItem: DropdownListOption;\r\n options: [DropdownListOption];\r\n className?: string;\r\n classNamePrefix?: string;\r\n onSelectionChanged: (newValue: DropdownListOption) => void;\r\n}\r\n\r\nclass DropdownListWidget extends Component {\r\n render() {\r\n const { label, defaultItem, options, className, classNamePrefix } = this.props;\r\n\r\n return (\r\n \r\n

{label}

\r\n \r\n
\r\n );\r\n }\r\n\r\n private onSelectionChanged(newValue: DropdownListOption): void {\r\n if (this.props.onSelectionChanged) {\r\n this.props.onSelectionChanged(newValue as DropdownListOption);\r\n }\r\n }\r\n}\r\n\r\nexport default DropdownListWidget;\r\n","import React, { Component } from \"react\";\r\nimport {\r\n LinkWidget,\r\n Widget,\r\n ClickableWidget,\r\n WidgetHeader,\r\n WidgetList,\r\n} from \"../../../Shared/Components/Presentational/Widget\";\r\nimport {\r\n CalendarEvent,\r\n CalendarResource,\r\n} from \"../../../Shared/Components/Presentational/Calendar\";\r\nimport { WithTranslation, withTranslation } from \"react-i18next\";\r\nimport CalendarWidget from \"./CalendarWidget\";\r\nimport WelcomeMessageWidget from \"./WelcomeMessageWidget\";\r\nimport MenuWidget from \"./MenuWidget\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport \"./HomePage.mobile.scss\";\r\nimport DropdownListWidget from \"./DropdownListWidget\";\r\nimport FeatureToggle from \"../../../Shared/Components/Presentational/FeatureToggle\";\r\nimport Features from \"../../../Constants/Features\";\r\nimport NavOption from \"../../../Shared/Components/Presentational/NavOption\";\r\nimport Grid from \"../../../Shared/Components/Presentational/Grid\";\r\nimport TransactionWidget from \"./TransactionWidget\";\r\nimport ReservationLinks from \"../../../Calendar/Components/Container/ReservationLinks\";\r\nimport CalendarListWidget from \"../../../Calendar/Components/Container/CalendarListWidget\";\r\nimport MyCalendarListHeader from \"../../../Calendar/Components/Container/MyCalendarListHeader\";\r\nimport NewsCardContainer from \"../../../Information/Components/Container/NewsCardContainer\";\r\n\r\ninterface HomePageMobileProps extends WithTranslation {\r\n calendarEvents: CalendarEvent[];\r\n resources: CalendarResource[];\r\n userFirstName: string;\r\n selectedLodge: DropdownListOption;\r\n options: [DropdownListOption];\r\n onSelectionChanged: (newValue: DropdownListOption) => void;\r\n contractEndDate: string;\r\n openMyContactDetailsModal: () => void;\r\n showMyDetailsLink: boolean;\r\n onContactHaulfrynClick: (isOpen: boolean) => void;\r\n hasSublettings: boolean;\r\n accountId: number;\r\n accountNumber: string;\r\n setAccountBalance: (newBalance: number) => void;\r\n setSelectedNewsItem: (selectedNewsItemId: string) => void;\r\n useMemberships: boolean;\r\n}\r\n\r\nclass HomePageMobile extends Component {\r\n\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n {this.props.useMemberships ? (\r\n
\r\n \r\n \r\n \r\n
\r\n ) : (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n )}\r\n {this.props.hasSublettings && (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n )}\r\n {this.props.showMyDetailsLink ? (\r\n
\r\n \r\n \r\n \r\n
\r\n ) : null}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n this.props.onContactHaulfrynClick(true)}\r\n >\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {/* */}\r\n
\r\n \r\n {this.props.options.length === 1 ? (\r\n \r\n
{this.props.options[0].label}
\r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n {this.props.hasSublettings && (\r\n \r\n \r\n \r\n )}\r\n {!this.props.hasSublettings && (\r\n \r\n \r\n \r\n \r\n )}\r\n {this.props.contractEndDate && (\r\n \r\n
{t(\"general.contractEnd\")}
\r\n
\r\n {this.props.contractEndDate}\r\n
\r\n \r\n )}\r\n
\r\n {/* */}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(HomePageMobile);\r\n","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostPassesSearchCall extends PostApiCall {\r\n constructor(filter: PassFilterDTO) {\r\n let url: string = \"passes/\" + filter.LodgeId + \"/search\";\r\n\r\n super(url);\r\n\r\n this.body = filter;\r\n }\r\n}","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostAddCarPassesCall extends PostApiCall {\r\n constructor(lodgeId: string, passes: AddCarPassDTO[]) {\r\n let url: string = \"passes/\" + lodgeId + \"/carPass\";\r\n\r\n super(url);\r\n\r\n this.body = passes;\r\n }\r\n}","import { GetApiCall } from './ApiCall';\r\n\r\nexport class GetParkPassTypesCall extends GetApiCall {\r\n constructor(parkCode: string, lodgeId: string, accountId: number) {\r\n let url: string = 'passes/park/' + parkCode + '/types';\r\n\r\n super(url, { lodgeId, accountId });\r\n }\r\n}\r\n","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostAddSeasonPassesCall extends PostApiCall {\r\n constructor(lodgeId: string, passes: AddSeasonPassDTO[]) {\r\n let url: string = \"season-pass/\" + lodgeId;\r\n\r\n super(url);\r\n\r\n const formData = new FormData();\r\n\r\n passes.forEach((item, index) => {\r\n for ( var key in item) {\r\n var itemObject = item as any;\r\n formData.append('[' + index + '].' + key, itemObject[key]);\r\n }\r\n });\r\n\r\n this.body = formData;\r\n }\r\n}","import moment from \"moment\";\r\nimport { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostAddShortStayPassesCall extends PostApiCall {\r\n constructor(lodgeId: string, passes: AddShortStayPassDTO[]) {\r\n let url: string = \"short-stay-pass/\" + lodgeId;\r\n\r\n super(url);\r\n\r\n const formData = new FormData();\r\n\r\n passes.forEach((item, index) => {\r\n for ( var key in item) {\r\n var itemObject = item as any;\r\n formData.append('[' + index + '].' + key, itemObject[key]);\r\n }\r\n });\r\n\r\n this.body = formData;\r\n }\r\n}","import { DeleteApiCall } from './ApiCall';\r\n\r\nexport class DeleteCarPassCall extends DeleteApiCall {\r\n constructor(lodgeId: string, id: string) {\r\n let url: string = `passes/${lodgeId}/carPass/${id}`;\r\n\r\n super(url, false);\r\n }\r\n}\r\n","import { DeleteApiCall } from './ApiCall';\r\n\r\nexport class DeleteShortStayPassCall extends DeleteApiCall {\r\n constructor(lodgeId: string, id: string, passFriendlyName: string) {\r\n let url: string = `passes/${lodgeId}/shortStay/${id}/${passFriendlyName}`;\r\n super(url, false);\r\n }\r\n}","import { PutApiCall } from './ApiCall';\r\n\r\nexport class PutRenewSeasonPassesCall extends PutApiCall {\r\n constructor(lodgeId: string, passes: AddSeasonPassDTO[]) {\r\n let url: string = 'passes/' + lodgeId + '/renewSeasonPass';\r\n\r\n super(url);\r\n\r\n this.body = passes;\r\n }\r\n}\r\n","import { DeleteApiCall } from './ApiCall';\r\n\r\nexport class DeleteSeasonPassCall extends DeleteApiCall {\r\n constructor(lodgeId: string, id: string) {\r\n let url: string = `passes/${lodgeId}/seasonPass/${id}`;\r\n\r\n super(url, false);\r\n }\r\n}\r\n","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostAnalyzeFaceCall extends PostApiCall {\r\n constructor(file: File) {\r\n let url: string = \"face-recognition/analyze\";\r\n \r\n var data = new FormData();\r\n data.append('file', file);\r\n\r\n super(url);\r\n\r\n this.body = data;\r\n }\r\n}","import { GetApiCall } from './ApiCall';\r\n\r\nexport class GetPassPhotoSizeLimit extends GetApiCall {\r\n constructor() {\r\n let url: string = 'app-settings';\r\n\r\n super(url);\r\n }\r\n}","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostAddMembershipCall extends PostApiCall {\r\n constructor(membership: NewMembershipDTO) {\r\n let url: string = \"Membership/AddMembership\";\r\n\r\n super(url);\r\n\r\n this.body = membership;\r\n }\r\n}","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetMembershipsCall extends GetApiCall {\r\n constructor() {\r\n let url: string = \"Membership/GetUsersMembershipList\";\r\n\r\n super(url);\r\n }\r\n}","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetAddMembershipByIdCall extends GetApiCall {\r\n constructor(membershipId: string) {\r\n let url: string = \"Membership/GetAddMembershipById/\";\r\n\r\n let params: any = { membershipId }\r\n\r\n super(url, params);\r\n }\r\n}","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostAgeVerificationFileCall extends PostApiCall {\r\n constructor(file: any, membershipId: string, name: string, dateOfBirth: Date) {\r\n let url: string = 'Membership/UploadAgeVerificationPhoto';\r\n super(url);\r\n \r\n let formData = new FormData();\r\n formData.set('membershipId', membershipId);\r\n formData.append('name', name);\r\n formData.append('dateOfBirth', dateOfBirth as unknown as string);\r\n formData.append('file', file, file.name);\r\n\r\n this.body = formData;\r\n }\r\n}","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetEditMemberDetailsByIdCall extends GetApiCall {\r\n constructor(membershipId: string) {\r\n let url: string = \"Membership/GetEditMemberDetailsByMembershipId/\";\r\n\r\n let params: any = { membershipId }\r\n\r\n super(url, params);\r\n }\r\n}","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostUpdateEditMemberDetailsCall extends PostApiCall {\r\n constructor(editMemberDetails: EditMemberDetailsDTO) {\r\n let url: string = \"Membership/EditMemberDetails\";\r\n\r\n super(url);\r\n\r\n this.body = editMemberDetails;\r\n }\r\n}","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostCreateMembershipBasket extends PostApiCall {\r\n constructor(membershipBasket: MembershipBasketDTO) {\r\n let url: string = \"Membership/CreateMembershipBasket\";\r\n \r\n super(url);\r\n\r\n this.body = membershipBasket;\r\n }\r\n}","export const HiddenStates = [\"PendingPayment\", \"Deleted\", \"AwaitingActivation\"];\r\nexport const FinaliseStates = [\"PendingAgreement\", \"TakeOverPendingAgreement\", \"EarlyPendingAgreement\"];\r\nexport const DraftStates = [\"Draft\", \"TakeOverDraft\"];\r\nexport const ActiveStates = [\"Active\", \"In Arrears\"];\r\nexport const ReferredStates = [\"Referred\"];\r\nexport const ExpiredStates = [\"Suspended\", \"Expired\"];","export const StatesOrder = [\"Finalise\", \"Draft\", \"Active\", \"Expired\"];","import { DeleteApiCall2 } from \"./ApiCall\";\r\n\r\nexport class DeleteMembershipCall extends DeleteApiCall2 {\r\n constructor(membershipId: string) {\r\n let url: string = 'Membership/delete-membership';\r\n \r\n let params: any = { membershipId };\r\n super(url, params);\r\n }\r\n}","import ContentfulClient from \"../ContentfulClient\";\r\n\r\nexport async function GetMembershipTypesCall() {\r\n let filter ={\r\n content_type: 'membershipType',\r\n order: 'fields.displayOrder'\r\n }\r\n const result = await ContentfulClient.getEntries(filter);\r\n\r\n if (result.errors){\r\n throw {message: \"GetMembershipTypes returned error/s\", errors: result.errors} \r\n }\r\n return result.items;\r\n}","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetReferralCall extends GetApiCall {\r\n constructor() {\r\n let url: string = \"Membership/GetReferrals\";\r\n\r\n super(url);\r\n }\r\n}","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostAssociateMembershipWithReferredUserCall extends PostApiCall {\r\n constructor(membership: NewMembershipDTO) {\r\n let url: string = \"Membership/AssociateMembershipWithReferedUser\";\r\n\r\n super(url);\r\n\r\n this.body = membership;\r\n }\r\n}","import { PostApiCall } from './ApiCall';\r\n\r\nexport class FilterMembershipTermTimesForOwnersFromDecommissionedParksCall extends PostApiCall {\r\n constructor(body: MembershipTermTimesDTO) {\r\n let url: string = `MembershipTerm/FilterValidTermsFromList`;\r\n\r\n super(url);\r\n\r\n this.body = body;\r\n this.logoutOn401 = false;\r\n }\r\n}\r\n","import * as ActionTypes from './ActionTypes';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport { AppState } from '../../RootReducer';\r\nimport { Action } from 'redux';\r\nimport { Get, Post, Delete, Put } from '../../Api/ApiService';\r\nimport { PostPassesSearchCall } from '../../Api/Calls/PostPassesSearchCall';\r\nimport { PostAddCarPassesCall } from '../../Api/Calls/PostAddCarPassesCall';\r\nimport { GetParkPassTypesCall } from '../../Api/Calls/GetParkPassTypesCall';\r\nimport { PostAddSeasonPassesCall } from '../../Api/Calls/PostAddSeasonPassesCall';\r\nimport { PostAddShortStayPassesCall } from '../../Api/Calls/PostAddShortStayPassesCall';\r\nimport { DeleteCarPassCall } from '../../Api/Calls/DeleteCarPassCall';\r\nimport { DeleteShortStayPassCall } from '../../Api/Calls/DeleteShortStayPassCall';\r\nimport { PutRenewSeasonPassesCall } from '../../Api/Calls/PutRenewSeasonPassesCall';\r\nimport { DeleteSeasonPassCall } from '../../Api/Calls/DeleteSeasonPassCall';\r\nimport { PostAnalyzeFaceCall } from '../../Api/Calls/PostAnalyzeFaceCall';\r\nimport { GetPassPhotoSizeLimit } from '../../Api/Calls/GetPassPhotoSizeLimit';\r\nimport { PostAddMembershipCall } from '../../Api/Calls/PostAddMembershipCall';\r\nimport { GetMembershipsCall } from '../../Api/Calls/GetMembershipsCall';\r\nimport { GetAddMembershipByIdCall } from '../../Api/Calls/GetAddMembershipByIdCall';\r\nimport { MembershipForm } from '../../MembershipForm';\r\nimport { Console } from 'console';\r\nimport { PostAgeVerificationFileCall } from '../../Api/Calls/PostAgeVerificationFileCall';\r\nimport { disableIncrementalParsing, isConstructorDeclaration } from 'typescript';\r\nimport { GetEditMemberDetailsByIdCall } from '../../Api/Calls/GetEditMemberDetailsByIdCall';\r\nimport { EditMemberDetailsForm } from '../../EditMemberDetailsForm';\r\nimport { PostUpdateEditMemberDetailsCall } from '../../Api/Calls/PostUpdateEditMemberDetailsCall';\r\nimport { PostCreateMembershipBasket } from '../../Api/Calls/PostCreateMembershipBasket';\r\nimport * as MembershipStates from '../../Constants/MembershipMappedStates';\r\nimport * as StatesOrder from '../../Constants/MembershipMappingStatesOrder';\r\nimport { DeleteMembershipCall } from '../../Api/Calls/DeleteMembershipCall';\r\nimport imageCompression from 'browser-image-compression';\r\nimport { GetMembershipTypesCall } from '../../Contentful/Calls/GetMembershipTypes';\r\nimport { Entry } from 'contentful';\r\nimport { GetReferralCall } from '../../Api/Calls/GetReferralCall';\r\nimport { GetEntryCall } from '../../Contentful/Calls/GetEntryCall';\r\nimport { PostAssociateMembershipWithReferredUserCall } from '../../Api/Calls/PostAssociateMembershipWithReferredUserCall';\r\nimport { SET_IS_REFERRED_USER } from '../../User/Redux/ActionTypes';\r\nimport { FilterMembershipTermTimesForOwnersFromDecommissionedParksCall } from '../../Api/Calls/FilterMembershipTermTimesForAberafonOwnersCall';\r\n\r\nexport const setSelectedPassType =\r\n (\r\n selectedPassType: ParkPassTypeDTO | undefined,\r\n callback: (() => ThunkAction) | undefined = undefined\r\n ): ThunkAction =>\r\n async (dispatch) => {\r\n dispatch({ type: ActionTypes.SET_SELECTED_PARK_PASS_TYPE, payload: selectedPassType });\r\n\r\n if (callback) {\r\n dispatch(callback());\r\n }\r\n };\r\n\r\nexport const updateFilter =\r\n (newFilter: PassFilterDTO): ThunkAction =>\r\n async (dispatch) => {\r\n dispatch({ type: ActionTypes.SET_PASSES_FILTER, payload: newFilter });\r\n dispatch(getPasses());\r\n };\r\n\r\nexport const getPasses = (): ThunkAction => async (dispatch, getState) => {\r\n const filter: PassFilterDTO = getState().guests.passesFilter;\r\n\r\n if (filter.ParkPassTypeId) {\r\n dispatch({ type: ActionTypes.SEARCH_PASSES_REQUEST, payload: true });\r\n Post(new PostPassesSearchCall(filter))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.SEARCH_PASSES_SUCCESS, payload: response.data });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.SEARCH_PASSES_FAILURE, payload: error });\r\n });\r\n }\r\n};\r\n\r\nexport const getPassPhotoSizeLimit = (): ThunkAction => async (dispatch, getState) => {\r\n dispatch({ type: ActionTypes.GET_PASS_PHOTO_SIZE_LIMIT_REQUEST, payload: true });\r\n Get(new GetPassPhotoSizeLimit())\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.GET_PASS_PHOTO_SIZE_LIMIT_SUCCESS, payload: response.data.PhotoPassSizeLimit });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.GET_PASS_PHOTO_SIZE_LIMIT_FAILURE, payload: error });\r\n });\r\n}\r\n\r\nexport const getParkPassTypes = (): ThunkAction => async (dispatch, getState) => {\r\n const park = getState().user.park;\r\n const lodge: SelectedLodgeDTO = getState().user.lodge;\r\n\r\n dispatch({ type: ActionTypes.GET_PARK_PASS_TYPE_REQUEST, payload: true });\r\n Get(new GetParkPassTypesCall(park.parkCode, lodge.LodgeId.toString(), lodge.AccountId))\r\n .then((response) => {\r\n const selectedPassType = getState().guests.selectedParkPassType;\r\n\r\n if (\r\n !selectedPassType ||\r\n (selectedPassType &&\r\n !selectedPassType.Id &&\r\n response.data.filter((pt) => pt.Id === selectedPassType.Id).length === 0)\r\n ) {\r\n if (response.data && response.data.length > 0) {\r\n dispatch(setSelectedPassType(response.data[0], getPasses));\r\n }\r\n } else {\r\n dispatch(\r\n setSelectedPassType(\r\n response.data.find((pt) => pt.Id === selectedPassType.Id),\r\n getPasses\r\n )\r\n );\r\n dispatch(getPasses());\r\n }\r\n\r\n dispatch({ type: ActionTypes.GET_PARK_PASS_TYPE_SUCCESS, payload: response.data });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.GET_PARK_PASS_TYPE_FAILURE, payload: error });\r\n });\r\n};\r\n\r\nexport const addCarPasses =\r\n (passes: AddCarPassDTO[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const { LodgeId, AccountId } = getState().user.lodge;\r\n const parkPassType = getState().guests.selectedParkPassType;\r\n\r\n passes = passes.map((pass) => {\r\n return { ...pass, LodgeId, AccountId, ParkPassTypeId: parkPassType.Id };\r\n });\r\n\r\n dispatch({ type: ActionTypes.ADD_CAR_PASS_REQUEST, payload: true });\r\n Post(new PostAddCarPassesCall(LodgeId, passes))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.SET_IS_ADD_PASS_MODAL_OPEN, payload: false });\r\n dispatch({ type: ActionTypes.ADD_CAR_PASS_SUCCESS, payload: response.data });\r\n dispatch({ type: ActionTypes.SET_ADD_PASS_SUCCESSFUL_MODAL_OPEN, payload: true });\r\n dispatch(getParkPassTypes());\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.ADD_CAR_PASS_FAILURE, payload: error });\r\n });\r\n };\r\n\r\nexport const addSeasonPasses =\r\n (passes: AddSeasonPassDTO[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const { LodgeId, AccountId } = getState().user.lodge;\r\n const parkPassType = getState().guests.selectedParkPassType;\r\n\r\n passes = passes.map((pass) => {\r\n return { ...pass, LodgeId, AccountId, ParkPassTypeId: parkPassType.Id };\r\n });\r\n\r\n passes.forEach((pass) => {\r\n var dob = pass.DateOfBirth.split(\"/\");\r\n pass.DOBDay = parseInt(dob[0]);\r\n pass.DOBMonth = parseInt(dob[1]);\r\n pass.DOBYear = parseInt(dob[2]);\r\n pass.DateOfBirth = \"\";\r\n })\r\n\r\n dispatch({ type: ActionTypes.ADD_SEASON_PASS_REQUEST, payload: true });\r\n Post(new PostAddSeasonPassesCall(LodgeId, passes))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.SET_IS_ADD_PASS_MODAL_OPEN, payload: false });\r\n dispatch({ type: ActionTypes.ADD_SEASON_PASS_SUCCESS, payload: response.data });\r\n dispatch({ type: ActionTypes.SET_ADD_PASS_SUCCESSFUL_MODAL_OPEN, payload: true });\r\n dispatch(getParkPassTypes());\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.ADD_SEASON_PASS_FAILURE, payload: error });\r\n });\r\n };\r\n\r\nexport const addShortStayPasses =\r\n (passes: AddShortStayPassDTO[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const { LodgeId, AccountId } = getState().user.lodge;\r\n const parkPassType = getState().guests.selectedParkPassType;\r\n\r\n passes = passes.map((pass) => {\r\n return { ...pass, LodgeId, AccountId, ParkPassTypeId: parkPassType.Id };\r\n });\r\n\r\n passes.forEach((pass) => {\r\n var dob = pass.DateOfBirth.split(\"/\");\r\n pass.DOBDay = parseInt(dob[0]);\r\n pass.DOBMonth = parseInt(dob[1]);\r\n pass.DOBYear = parseInt(dob[2]);\r\n pass.DateOfBirth = \"\";\r\n var start = pass.StartDate.split(\"/\");\r\n pass.StartDay = parseInt(start[0]);\r\n pass.StartMonth = parseInt(start[1]);\r\n pass.StartYear = parseInt(start[2]);\r\n pass.StartDate = \"\";\r\n })\r\n\r\n dispatch({ type: ActionTypes.ADD_SHORT_STAY_PASS_REQUEST, payload: true });\r\n Post(new PostAddShortStayPassesCall(LodgeId, passes))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.SET_IS_ADD_PASS_MODAL_OPEN, payload: false });\r\n dispatch({ type: ActionTypes.ADD_SHORT_STAY_PASS_SUCCESS, payload: response.data });\r\n\r\n dispatch({ type: ActionTypes.SET_ADD_PASS_SUCCESSFUL_MODAL_OPEN, payload: true });\r\n dispatch(getParkPassTypes());\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.ADD_SHORT_STAY_PASS_FAILURE, payload: error });\r\n });\r\n };\r\n\r\nexport const removeCarPass =\r\n (passId: string): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({ type: ActionTypes.SET_DELETE_PASS_CONFIRMATION_MODAL_OPEN, payload: false });\r\n dispatch({ type: ActionTypes.DELETE_PASS_REQUEST });\r\n Delete(new DeleteCarPassCall(getState().user.lodge.LodgeId, passId))\r\n .then(() => {\r\n dispatch({ type: ActionTypes.DELETE_PASS_SUCCESS });\r\n dispatch(getParkPassTypes());\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.DELETE_PASS_FAILURE, payload: error });\r\n });\r\n };\r\n\r\nexport const removeSeasonPass =\r\n (passId: string): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({ type: ActionTypes.SET_DELETE_PASS_CONFIRMATION_MODAL_OPEN, payload: false });\r\n dispatch({ type: ActionTypes.DELETE_PASS_REQUEST });\r\n Delete(new DeleteSeasonPassCall(getState().user.lodge.LodgeId, passId))\r\n .then(() => {\r\n dispatch({ type: ActionTypes.DELETE_PASS_SUCCESS });\r\n dispatch(getParkPassTypes());\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.DELETE_PASS_FAILURE, payload: error });\r\n });\r\n };\r\n\r\nexport const removeShortStayPass =\r\n (passId: string, passFriendlyName: string): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({ type: ActionTypes.SET_DELETE_PASS_CONFIRMATION_MODAL_OPEN, payload: false });\r\n dispatch({ type: ActionTypes.DELETE_PASS_REQUEST });\r\n Delete(new DeleteShortStayPassCall(getState().user.lodge.LodgeId, passId, passFriendlyName))\r\n .then(() => {\r\n dispatch({ type: ActionTypes.DELETE_PASS_SUCCESS });\r\n dispatch(getParkPassTypes());\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.DELETE_PASS_FAILURE, payload: error });\r\n });\r\n };\r\n\r\nexport const renewSeasonPasses =\r\n (passes: AddSeasonPassDTO[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const lodgeId = getState().user.lodge.LodgeId;\r\n const parkPassType = getState().guests.selectedParkPassType;\r\n\r\n passes = passes.map((pass) => {\r\n return { ...pass, LodgeId: lodgeId, ParkPassTypeId: parkPassType.Id };\r\n });\r\n\r\n dispatch({ type: ActionTypes.RENEW_SEASON_PASS_REQUEST, payload: true });\r\n Put(new PutRenewSeasonPassesCall(lodgeId, passes))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.SET_IS_RENEW_PASS_MODAL_OPEN, payload: false });\r\n dispatch({ type: ActionTypes.RENEW_SEASON_PASS_SUCCESS, payload: response.data });\r\n dispatch({ type: ActionTypes.SET_RENEW_PASS_SUCCESSFUL_MODAL_OPEN, payload: true });\r\n dispatch(getParkPassTypes());\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.RENEW_SEASON_PASS_FAILURE, payload: error });\r\n });\r\n };\r\n\r\nexport const analyzePassPhoto =\r\n (passPhotoFile: File): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({ type: ActionTypes.ANALYZE_PASS_PHOTO_REQUEST, payload: true });\r\n Post(new PostAnalyzeFaceCall(passPhotoFile))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.ANALYZE_PASS_PHOTO_SUCCESS, payload: response.data });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.ANALYZE_PASS_PHOTO_FAILURE, payload: error.response.data });\r\n });\r\n };\r\n\r\n\r\nexport const addMembership =\r\n (membership: NewMembershipDTO): ThunkAction, AppState, null, Action> =>\r\n async (dispatch, getState) => {\r\n dispatch({ type: ActionTypes.ADD_MEMBERSHIP_REQUEST, payload: true });\r\n if (membership.dateOfBirth) {\r\n if (membership.dateOfBirth.getTimezoneOffset() === -60 && membership.dateOfBirth!.getHours() <= 0) {\r\n membership.dateOfBirth!.setMinutes(membership.dateOfBirth!.getMinutes() + 60);\r\n }\r\n }\r\n\r\n if (membership.startDate) {\r\n if (membership.startDate.getTimezoneOffset() === -60 && membership.startDate.getHours() <= 0) {\r\n membership.startDate!.setMinutes(membership.startDate!.getMinutes() + 60);\r\n }\r\n }\r\n\r\n let newReferredMembership = !getState().user.hasOwnMembership && membership.membershipState === \"Initial\";\r\n\r\n let apiSucceeded = await Post(new PostAddMembershipCall(membership))\r\n .then((response) => {\r\n membership.membershipState = response.data.Data.MembershipState;\r\n membership.id = response.data.Data.Id;\r\n membership.memberId = response.data.Data.MemberId;\r\n membership.ageVerificationSent = new Date(response.data.Data.AgeVerificationSent);\r\n membership.contentfulAgeBracketPriceId = response.data.Data.ContentfulAgeBracketPriceId;\r\n membership.parkId = response.data.Data.ParkId;\r\n membership.memberId = response.data.Data.MemberId;\r\n let form = { ...getState().guests.membershipForm };\r\n form.id = response.data.Data.Id;\r\n form.membershipState = response.data.Data.MembershipState;\r\n form.contentfulAgeBracketPriceId = response.data.Data.ContentfulAgeBracketPriceId;\r\n if (response.data.Data.Vehicles) {\r\n form.vehicles = { value: [], errors: [] };\r\n for (let vehicle of response.data.Data.Vehicles) {\r\n form.vehicles!.value = form.vehicles!.value.concat([{ id: vehicle.Id, registration: vehicle.Registration, description: vehicle.Description }])\r\n }\r\n }\r\n if (newReferredMembership) {\r\n if (getState().user.loginEmail === membership.email) {\r\n dispatch(associateMembershipWithReferredUser(membership));\r\n }\r\n }\r\n dispatch({ type: ActionTypes.UPDATE_MEMBERSHIP_FORM, payload: form });\r\n dispatch({ type: ActionTypes.ADD_MEMBERSHIP_SUCCESS, payload: membership });\r\n return true;\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.ADD_MEMBERSHIP_FAILURE, payload: error.response.data.Message });\r\n return false;\r\n });\r\n return apiSucceeded;\r\n };\r\n\r\nexport const associateMembershipWithReferredUser =\r\n (membership: NewMembershipDTO): ThunkAction =>\r\n async (dispatch, getState) => {\r\n Post(new PostAssociateMembershipWithReferredUserCall(membership))\r\n .then((response) => {\r\n dispatch({ type: SET_IS_REFERRED_USER, payload: true });\r\n })\r\n }\r\n\r\nexport const updateNewMembership =\r\n (fieldName: any, value: any): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const form = getState().guests.newMembership;\r\n dispatch({ type: ActionTypes.UPDATE_NEW_MEMBERSHIP, payload: { ...form, [value]: fieldName } })\r\n }\r\n\r\nexport const updateMembershipForm =\r\n (fieldName: any, value: any, errors: string[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const form = { ...getState().guests.membershipForm };\r\n form[value] = { value: fieldName, errors: errors };\r\n dispatch({ type: ActionTypes.UPDATE_MEMBERSHIP_FORM, payload: form })\r\n }\r\n\r\nexport const updateMembershipFormBasket =\r\n (membershipForm?: IMembershipForm, membershipBasket?: IMembershipForm[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n let basket = getState().guests.membershipBasket;\r\n if (membershipForm) {\r\n basket = [...basket, membershipForm];\r\n } else if (membershipBasket) {\r\n basket = membershipBasket;\r\n }\r\n dispatch({ type: ActionTypes.UPDATE_MEMBERSHIP_BASKET, payload: basket });\r\n }\r\n\r\nexport const updateMembershipBasketField =\r\n (index: number, fieldName: any, value: any): ThunkAction =>\r\n async (dispatch, getState) => {\r\n let basket = getState().guests.membershipBasket;\r\n let form = basket[index];\r\n form[fieldName].value = value;\r\n basket[index] = form;\r\n dispatch({ type: ActionTypes.UPDATE_MEMBERSHIP_BASKET, payload: basket });\r\n }\r\n\r\nexport const createMembershipBasket =\r\n (membershipIds: string[]): ThunkAction, AppState, null, Action> =>\r\n async (dispatch, getState): Promise => {\r\n let membershipBasket = { membershipIds: membershipIds } as MembershipBasketDTO;\r\n\r\n dispatch({ type: ActionTypes.CREATE_MEMBERSHIP_BASKET_REQUEST });\r\n let basketId = await Post(new PostCreateMembershipBasket(membershipBasket))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.CREATE_MEMBERSHIP_BASKET_SUCCESS, payload: response.data.BasketId });\r\n return response.data.BasketId;\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.CREATE_MEMBERSHIP_BASKET_FAILURE });\r\n return \"\";\r\n })\r\n return basketId;\r\n }\r\n\r\nexport const getMyMemberships =\r\n (): ThunkAction, AppState, null, Action> => {\r\n return async (dispatch, getState): Promise => {\r\n dispatch({\r\n type: ActionTypes.GET_MY_MEMBERSHIPS_REQUEST,\r\n payload: true,\r\n });\r\n let memberships: MembershipDTO[] = await Get(new GetMembershipsCall())\r\n .then((response) => {\r\n let tempMemberships: MembershipDTO[] = [];\r\n response.data.forEach((membership: any) => {\r\n tempMemberships.push({\r\n id: membership.Id,\r\n memberId: membership.MemberId,\r\n contentfulMembershipTypeId: membership.ContentfulMembershipTypeId,\r\n contentfulAgeBracketPriceId: membership.ContentfulAgeBracketPriceId,\r\n membershipState: membership.MembershipState,\r\n firstName: membership.FirstName,\r\n lastName: membership.LastName,\r\n createdDate: membership.CreatedDate,\r\n endDate: membership.EndDate,\r\n email: membership.Email,\r\n membershipType: membership.MembershipType,\r\n startDate: membership.StartDate,\r\n hasRenewed: membership.HasRenewed,\r\n } as MembershipDTO);\r\n memberships = tempMemberships;\r\n });\r\n dispatch({\r\n type: ActionTypes.GET_MY_MEMBERSHIPS_SUCCESS,\r\n payload: memberships as MembershipDTO[],\r\n });\r\n return memberships;\r\n })\r\n .catch((error) => {\r\n dispatch({\r\n type: ActionTypes.GET_MY_MEMBERSHIPS_FAILURE,\r\n payload: error,\r\n });\r\n return [];\r\n });\r\n return memberships;\r\n };\r\n }\r\n\r\nexport const getMyReferrals =\r\n (): ThunkAction, AppState, null, Action> => {\r\n\r\n // API Integration is needed once datt is done with backend work.\r\n return async (dispatch, getState): Promise => {\r\n\r\n dispatch({\r\n type: ActionTypes.GET_MY_REFERRAL_REQUEST,\r\n payload: true,\r\n });\r\n let referred1Memberships: ReferralDTO[] = await Get(new GetReferralCall())\r\n .then((response) => {\r\n let tempReferrals: ReferralDTO[] = [];\r\n\r\n response.data.forEach((membership: any) => {\r\n tempReferrals.push({\r\n id: membership.referralId,\r\n firstName: membership.firstName,\r\n lastName: membership.lastName,\r\n email: membership.email,\r\n phoneNumber: membership.phoneNumber,\r\n transferredMemberships: membership.transferredMembershipsCount,\r\n allowFurtherReferrals: membership.allowFurtherReferrals,\r\n usedMembership: membership.usedMembership,\r\n availableMemberships: membership.availableMemberships,\r\n memberships: membership.memberships,\r\n } as ReferralDTO);\r\n referred1Memberships = tempReferrals;\r\n });\r\n dispatch({\r\n type: ActionTypes.GET_MY_REFERRAL_SUCCESS,\r\n payload: referred1Memberships as ReferralDTO[],\r\n });\r\n return referred1Memberships;\r\n })\r\n .catch((error) => {\r\n dispatch({\r\n type: ActionTypes.GET_MY_REFERRAL_FAILURE,\r\n payload: error,\r\n });\r\n return [];\r\n });\r\n return referred1Memberships;\r\n }\r\n }\r\n\r\nexport const mapMyMembershipsToComponents =\r\n (memberships: MembershipDTO[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n let membershipContainers: MembershipContainer[] | undefined = [];\r\n if (memberships && memberships.length > 0) {\r\n for (let membership of memberships) {\r\n if (MembershipStates.FinaliseStates.includes(membership.membershipState) || MembershipStates.FinaliseStates.indexOf(membership.membershipState) !== -1) {\r\n membershipContainers = membershipContainers.concat({ state: \"Finalise\", membership: membership });\r\n } else if (MembershipStates.DraftStates.includes(membership.membershipState) || MembershipStates.DraftStates.indexOf(membership.membershipState) !== -1) {\r\n membershipContainers = membershipContainers.concat([{ state: \"Draft\", membership: membership }]);\r\n } else if (MembershipStates.ActiveStates.includes(membership.membershipState) || MembershipStates.ActiveStates.indexOf(membership.membershipState) !== -1) {\r\n membershipContainers = membershipContainers.concat([{ state: \"Active\", membership: membership }]);\r\n } else if (MembershipStates.ReferredStates.includes(membership.membershipState) || MembershipStates.ReferredStates.indexOf(membership.membershipState) !== -1) {\r\n membershipContainers = membershipContainers.concat([{ state: \"Referred\", membership: membership }])\r\n } else if (MembershipStates.ExpiredStates.includes(membership.membershipState) || MembershipStates.ExpiredStates.indexOf(membership.membershipState) !== -1) {\r\n membershipContainers = membershipContainers.concat([{ state: \"Expired\", membership: membership }])\r\n }\r\n }\r\n membershipContainers.sort((a: MembershipContainer, b: MembershipContainer) => StatesOrder.StatesOrder.indexOf(a.state) - StatesOrder.StatesOrder.indexOf(b.state));\r\n }\r\n if (membershipContainers.length < 1) {\r\n membershipContainers = undefined;\r\n }\r\n dispatch({\r\n type: ActionTypes.SET_MEMBERSHIP_COMPONENTS,\r\n payload: membershipContainers\r\n });\r\n }\r\n\r\nexport const mapMyReferralsToComponents =\r\n (referredMemberships: ReferralDTO[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({\r\n type: ActionTypes.SET_REFERRED_MEMBERSHIP_COMPONENTS,\r\n payload: referredMemberships\r\n });\r\n }\r\n\r\nexport const getMembershipsThenMapToContainers =\r\n (): ThunkAction =>\r\n async (dispatch, getState) => {\r\n await dispatch(getMyMemberships())\r\n .then((r) => {\r\n dispatch(mapMyMembershipsToComponents(r));\r\n });\r\n }\r\n\r\nexport const getReferredMembershipsByOwner =\r\n (): ThunkAction =>\r\n async (dispatch, getState) => {\r\n await dispatch(getMyReferrals()) // getMyReferrals\r\n .then((r) => {\r\n dispatch(mapMyReferralsToComponents(r)); //mapReferredMembershipToComponents\r\n });\r\n }\r\n\r\nexport const deleteMembership =\r\n (membershipId: string): ThunkAction =>\r\n async (dispatch, getState) => {\r\n let membershipContainers = getState().guests.membershipContainers;\r\n if (membershipContainers.find((m: MembershipContainer) => m.membership.id === membershipId) && membershipContainers.find((m: MembershipContainer) => m.membership.id === membershipId)!.state === \"Finalise\") {\r\n let finaliseNowContainers = getState().guests.finaliseNowContainers;\r\n let finaliseLaterContainers = getState().guests.finaliseLaterContainers;\r\n if (finaliseNowContainers.find((m: MembershipContainer) => m.membership.id === membershipId)) {\r\n finaliseNowContainers.splice(finaliseNowContainers.findIndex((m: MembershipContainer) => m.membership.id === membershipId), 1);\r\n dispatch({\r\n type: ActionTypes.SET_FINALISE_NOW_CONTAINERS,\r\n payload: finaliseNowContainers,\r\n });\r\n } else if (finaliseLaterContainers.find((m: MembershipContainer) => m.membership.id === membershipId)) {\r\n finaliseLaterContainers.splice(finaliseLaterContainers.findIndex((m: MembershipContainer) => m.membership.id === membershipId), 1);\r\n dispatch({\r\n type: ActionTypes.SET_FINALISE_LATER_CONTAINERS,\r\n payload: finaliseLaterContainers,\r\n });\r\n }\r\n }\r\n membershipContainers.splice(membershipContainers.findIndex((m: MembershipContainer) => m.membership.id === membershipId), 1);\r\n dispatch({\r\n type: ActionTypes.SET_MEMBERSHIP_COMPONENTS,\r\n payload: membershipContainers,\r\n });\r\n let memberships = getState().guests.memberships;\r\n memberships.splice(memberships.findIndex((m: MembershipDTO) => m.id === membershipId), 1);\r\n dispatch({\r\n type: ActionTypes.GET_MY_MEMBERSHIPS_SUCCESS,\r\n payload: memberships,\r\n })\r\n Delete(new DeleteMembershipCall(membershipId));\r\n }\r\n\r\nexport const getAddMembershipById =\r\n (membershipId: string): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({\r\n type: ActionTypes.GET_ADD_MEMBERSHIP_BY_ID_REQUEST,\r\n payload: true,\r\n });\r\n Get(\r\n new GetAddMembershipByIdCall(membershipId)\r\n )\r\n .then(async (response) => {\r\n let membershipForm = await MembershipForm.fromAddMembership(response.data);\r\n let newMembership: NewMembershipDTO = {\r\n id: response.data.Id,\r\n contentfulMembershipTypeId: response.data.ContentfulMembershipTypeId,\r\n myHaulfrynAccess: response.data.MyHaulfrynAccess,\r\n membershipState: response.data.MembershipState,\r\n startDate: response.data.StartDate,\r\n marketing: response.data.Marketing,\r\n firstName: response.data.FirstName,\r\n lastName: response.data.LastName,\r\n dateOfBirth: response.data.DateOfBirth,\r\n email: response.data.Email,\r\n phonenumber: response.data.PhoneNumber,\r\n contentfulAgeBracketPriceId: response.data.ContentfulAgeBracketPriceId,\r\n ageVerificationSent: new Date(response.data.ageVerificationSent),\r\n memberId: response.data.MemberId\r\n }\r\n if (response.data.Vehicles) {\r\n newMembership.vehicles = [];\r\n for (let vehicle of response.data.Vehicles) {\r\n newMembership.vehicles = newMembership.vehicles!.concat([{ registration: vehicle.Registration as string, description: vehicle.Description as string }])\r\n }\r\n }\r\n dispatch({\r\n type: ActionTypes.GET_ADD_MEMBERSHIP_BY_ID_SUCCESS,\r\n payload: { newMembership: newMembership, membershipForm: membershipForm },\r\n });\r\n })\r\n .catch((error) => {\r\n dispatch({\r\n type: ActionTypes.GET_ADD_MEMBERSHIP_BY_ID_FAILURE,\r\n payload: error,\r\n });\r\n });\r\n };\r\n\r\nexport const getEditMemberDetailsById =\r\n (membershipId: string): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({\r\n type: ActionTypes.GET_EDIT_MEMBERSHIP_BY_ID_REQUEST,\r\n payload: true,\r\n });\r\n Get(\r\n new GetEditMemberDetailsByIdCall(membershipId)\r\n )\r\n .then((response) => {\r\n let editMemberDetailsForm = EditMemberDetailsForm.fromEditMemberDetailsDTOBack(response.data);\r\n let editMemberDetails: EditMemberDetailsDTO = {\r\n id: response.data.Id,\r\n firstName: response.data.FirstName,\r\n lastName: response.data.LastName,\r\n email: response.data.Email,\r\n phonenumber: response.data.PhoneNumber,\r\n dateOfBirth: new Date(response.data.DateOfBirth),\r\n cardNumber: response.data.CardNumber,\r\n }\r\n if (response.data.Vehicles) {\r\n editMemberDetails.vehicles = [];\r\n for (let vehicle of response.data.Vehicles) {\r\n editMemberDetails.vehicles = editMemberDetails.vehicles!.concat([{ registration: vehicle.Registration as string, description: vehicle.Description as string }])\r\n }\r\n }\r\n dispatch({\r\n type: ActionTypes.GET_EDIT_MEMBERSHIP_BY_ID_SUCCESS,\r\n payload: { editMemberDetails: editMemberDetails, editMemberDetailsForm: editMemberDetailsForm },\r\n });\r\n })\r\n .catch((error) => {\r\n dispatch({\r\n type: ActionTypes.GET_EDIT_MEMBERSHIP_BY_ID_FAILURE,\r\n payload: error,\r\n });\r\n });\r\n };\r\n\r\nexport const updateEditMemberDetails =\r\n (fieldName: any, value: any): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const form = getState().guests.editMemberDetails;\r\n dispatch({ type: ActionTypes.UPDATE_EDIT_MEMBERSHIP, payload: { ...form, [value]: fieldName } })\r\n }\r\n\r\nexport const updateEditMemberDetailsForm =\r\n (fieldName: any, value: any, errors: string[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const form = getState().guests.editMemberDetailsForm;\r\n form[value] = { value: fieldName, errors: errors };\r\n dispatch({ type: ActionTypes.UPDATE_EDIT_MEMBERSHIP_FORM, payload: form })\r\n }\r\n\r\nexport const updateEditMemberDetailsRequest =\r\n (editMemberDetails: EditMemberDetailsDTO): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({ type: ActionTypes.UPDATE_EDIT_MEMBERSHIP_REQUEST })\r\n\r\n Post(new PostUpdateEditMemberDetailsCall(editMemberDetails))\r\n .then(() => {\r\n dispatch({ type: ActionTypes.UPDATE_EDIT_MEMBERSHIP_SUCCESS });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.UPDATE_EDIT_MEMBERSHIP_FAILURE, payload: error })\r\n })\r\n }\r\n\r\nexport const addAgeVerificationFile =\r\n (file: any, membershipId: string, firstName: string, lastName: string, dateOfBirth: Date): ThunkAction =>\r\n async (dispatch, getState) => {\r\n dispatch({ type: ActionTypes.ADD_AGE_VERIFICATION_REQUEST });\r\n let name = firstName + \" \" + lastName;\r\n\r\n const options = {\r\n maxSizeMB: 1,\r\n maxWidthOrHeight: 700,\r\n useWebWorker: true,\r\n }\r\n\r\n const compressedFile = await imageCompression(file, options);\r\n\r\n Post(new PostAgeVerificationFileCall(compressedFile, membershipId, name, dateOfBirth))\r\n .then(() => {\r\n dispatch({ type: ActionTypes.ADD_AGE_VERIFICATION_SUCCESS, payload: compressedFile });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.ADD_AGE_VERIFICATION_ERROR, payload: error.response.data.Message })\r\n })\r\n\r\n }\r\n\r\nexport const getContentfulMembershipTypes =\r\n (withTerms?: boolean): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const parkCode = getState().user.park && getState().user.park.parkCode;\r\n const membershipTypes = await GetMembershipTypesCall();\r\n let filteredTypes: Entry[] = [];\r\n if (membershipTypes && membershipTypes.length > 0) {\r\n if (parkCode) {\r\n filteredTypes = membershipTypes.filter(m => m.fields.parks.find(p => p.fields.code === parkCode) !== undefined);\r\n } else {\r\n filteredTypes = membershipTypes;\r\n }\r\n }\r\n let useMemberships = filteredTypes.length > 0;\r\n filteredTypes = await dispatch(filterMembershipTypesFromUserTypes(filteredTypes));\r\n if (withTerms) {\r\n dispatch(getTermDurations(filteredTypes));\r\n }\r\n dispatch({ type: ActionTypes.SET_CONTENTFUL_MEMBERSHIP_TYPES, payload: { filteredTypes: filteredTypes, useMemberships: useMemberships } });\r\n }\r\n\r\nexport const filterMembershipTypesFromUserTypes =\r\n (membershipTypes: Entry[]): ThunkAction[]>, AppState, null, Action> =>\r\n async (dispatch, getState): Promise[]> => {\r\n const userRoles: UserRoleDTO[] = getState().user.userRoles;\r\n const types: string[] = [];\r\n let filteredMembershipTypes: Entry[] = [];\r\n\r\n for (let role of userRoles) {\r\n let userType = await GetEntryCall(role.contentfulUserTypeId) as unknown as Entry;\r\n if (userType.fields.availableMembershipTypes) {\r\n userType.fields.availableMembershipTypes.map(type => types.push(type.sys.id));\r\n }\r\n }\r\n const distinctTypeIds = types.filter((type, index) => types.indexOf(type) === index);\r\n\r\n filteredMembershipTypes = membershipTypes.filter(t => distinctTypeIds.findIndex(id => t.sys.id === id) >= 0);\r\n\r\n let ownerMembershipsAllocated = getState().user.ownerMembershipsAvailability ? getState().user.ownerMembershipsAvailability.allocated : 1;\r\n if (ownerMembershipsAllocated === 0) {\r\n filteredMembershipTypes = filteredMembershipTypes.filter(t => !t.fields.debitsQuota);\r\n }\r\n\r\n return filteredMembershipTypes;\r\n }\r\n\r\nexport const getTermDurations =\r\n (membershipTypes: Entry[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n let termDurations: DropdownListOption[][] = [];\r\n try {\r\n for (let type = 0; type < membershipTypes.length; type++) {\r\n for (let ageGroup = 0; ageGroup < membershipTypes[type].fields.ageGroups.length; ageGroup++) {\r\n if (membershipTypes[type].fields.ageGroups[ageGroup].fields.prices) {\r\n for (let price = 0; price < membershipTypes[type].fields.ageGroups[ageGroup].fields.prices.length; price++) {\r\n let priceDuration = await GetEntryCall(membershipTypes[type].fields.ageGroups[ageGroup].fields.prices[price].sys.id);\r\n if (termDurations[type]) {\r\n if (termDurations[type].filter(term => term.value === priceDuration.fields.termFormula).length < 1) {\r\n termDurations[type] = termDurations[type].concat({ label: priceDuration.fields.termDescription, value: priceDuration.fields.termFormula });\r\n }\r\n } else {\r\n termDurations[type] = [{ label: priceDuration.fields.termDescription, value: priceDuration.fields.termFormula }];\r\n }\r\n }\r\n }\r\n }\r\n }\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n\r\n if (getState().user.decommissionedParks.find(c => c == getState().user.park.parkCode)) {\r\n let dto: MembershipTermTimesDTO = {\r\n membershipTerms: termDurations,\r\n contractEndDate: getState().user.lodge.ContractEndDate\r\n }\r\n await Post(new FilterMembershipTermTimesForOwnersFromDecommissionedParksCall(dto))\r\n .then((terms) => {\r\n console.log(terms);\r\n termDurations = terms.data as unknown as DropdownListOption[][]\r\n })\r\n .catch((error) => {\r\n console.log(error);\r\n })\r\n }\r\n\r\n dispatch({ type: ActionTypes.SET_TERM_DURATIONS, payload: termDurations });\r\n }","import React, { Component } from \"react\";\r\nimport './Labels.scss';\r\n\r\ninterface LabelProps {\r\n text: string;\r\n className: string;\r\n}\r\n\r\ninterface ClickableLabelProps extends LabelProps {\r\n clickAction: () => void;\r\n}\r\n\r\nexport class ClickableLabel extends Component {\r\n \r\n render() {\r\n return (\r\n
\r\n {this.props.children}\r\n \r\n
\r\n )\r\n };\r\n}","import React, { useEffect } from \"react\";\r\nimport ReactDOM from \"react-dom\";\r\nimport \"./MobileSideNav.scss\";\r\nimport { ClickableIcon } from \"./Icons\";\r\nimport { faTimes } from \"@fortawesome/free-solid-svg-icons\";\r\n//@ts-ignore\r\nimport Slide from \"react-reveal/Slide\";\r\nimport { LinkWidget, Widget, ClickableWidget } from \"./Widget\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport DropdownList from \"./DropdownList\";\r\nimport NavOption from \"./NavOption\";\r\nimport FeatureToggle from \"./FeatureToggle\";\r\nimport Features from \"../../../Constants/Features\";\r\nimport { useTranslation } from \"react-i18next\";\r\n\r\ninterface MobileSideNavProps {\r\n onClose: () => void;\r\n isHeaderOpen: boolean;\r\n selectOptions?: DropdownListOption[];\r\n selectedOption?: DropdownListOption;\r\n onSelectionChanged?: (newValue: DropdownListOption) => void;\r\n openMyContactDetailsModal: () => void;\r\n showMyDetailsLink: boolean;\r\n onContactHaulfrynClick: () => void;\r\n hasSublettings: boolean;\r\n useMemberships: boolean;\r\n}\r\n\r\nconst MobileSideNav: React.FC = ({\r\n selectOptions,\r\n selectedOption,\r\n onSelectionChanged,\r\n onClose,\r\n isHeaderOpen,\r\n openMyContactDetailsModal,\r\n showMyDetailsLink,\r\n onContactHaulfrynClick,\r\n hasSublettings,\r\n useMemberships,\r\n}) => {\r\n useEffect(() => {\r\n // prevent scrolling content behind the nav\r\n if (isHeaderOpen) {\r\n document.body.classList.add(\"kill-scroll\");\r\n }\r\n return () => {\r\n document.body.classList.remove(\"kill-scroll\");\r\n };\r\n }, [isHeaderOpen]);\r\n\r\n const { t } = useTranslation();\r\n\r\n return ReactDOM.createPortal(\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n {selectOptions && onSelectionChanged ? (\r\n selectOptions.length === 1 ? (\r\n \r\n
{selectOptions[0].label}
\r\n \r\n ) : (\r\n \r\n )\r\n ) : null}\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {useMemberships ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {hasSublettings && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {showMyDetailsLink ? (\r\n \r\n \r\n \r\n ) : null}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
,\r\n document.body\r\n );\r\n};\r\n\r\nexport default MobileSideNav;\r\n","import React, { Component } from 'react';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { Modal, ModalFooter, ModalHeader } from './Modal';\r\nimport './ContactModal.scss';\r\n\r\ninterface ContactModalProps extends WithTranslation {\r\n isOpen: boolean;\r\n onBackButtonClick: () => void;\r\n contactDetails: ContactModalDTO\r\n}\r\n\r\nclass ContactModal extends Component {\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n \r\n \r\n
\r\n {\r\n this.props.contactDetails.Description ?

{this.props.contactDetails.Description}

: <>\r\n }\r\n
\r\n
\r\n

{t('general.phoneNumber')}

\r\n \r\n {this.props.contactDetails.PhoneNumber}\r\n \r\n
\r\n
\r\n

{t('general.address')}

\r\n

{this.props.contactDetails.Address}

\r\n
\r\n
\r\n

{t('general.emailAddress')}

\r\n \r\n {this.props.contactDetails.Email}\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(ContactModal);\r\n","import React from 'react';\r\nimport { Link } from 'react-router-dom';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\n\r\nconst HomeButton: React.FC = () => (\r\n
\r\n \r\n \r\n \r\n
\r\n)\r\n\r\n\r\nexport default HomeButton;","import React from \"react\";\r\nimport { Desktop, Mobile } from \"./ResponsiveViews\";\r\nimport { ClickableLabel } from \"./Labels\";\r\nimport { ClickableIcon } from \"./Icons\";\r\nimport DropdownList from \"./DropdownList\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { faSignOutAlt } from \"@fortawesome/free-solid-svg-icons\";\r\nimport \"./Header.scss\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { withRouter, RouteComponentProps } from \"react-router-dom\";\r\nimport { faBars, faUserCircle } from \"@fortawesome/free-solid-svg-icons\";\r\n//@ts-ignore\r\nimport Fade from \"react-reveal/Fade\";\r\nimport { LinkWidget } from \"./Widget\";\r\nimport history from \"../../../History\";\r\nimport MobileSideNav from \"./MobileSideNav\";\r\nimport NavOption from \"./NavOption\";\r\nimport classNames from \"classnames\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport ContactModal from \"./ContactModal\";\r\nimport HomeButton from \"./HomeButton\";\r\nimport FeatureToggle from \"./FeatureToggle\";\r\nimport Features from \"../../../Constants/Features\";\r\n\r\ninterface HeaderProps extends RouteComponentProps {\r\n logoutClick: () => void;\r\n options?: [DropdownListOption];\r\n selectedOption?: DropdownListOption;\r\n onSelectionChanged?: (newValue: DropdownListOption) => void;\r\n backgroundImgSrc?: string;\r\n backgroundContainerClassName?: string;\r\n isHeaderOpen: boolean;\r\n setHeaderOpen: (isOpen: boolean) => void;\r\n contractEndDate: string;\r\n showMyDetailsLink: boolean;\r\n openMyContactDetailsModal: () => void;\r\n setContactHaulfrynModalOpen: (isOpen: boolean) => void;\r\n isContactHaulfrynModalOpen: boolean;\r\n hasSublettings: boolean;\r\n useMemberships: boolean;\r\n}\r\n\r\nconst Header: React.FC = (props) => {\r\n const {\r\n options,\r\n selectedOption,\r\n location,\r\n isHeaderOpen,\r\n setHeaderOpen,\r\n isContactHaulfrynModalOpen,\r\n setContactHaulfrynModalOpen,\r\n openMyContactDetailsModal,\r\n hasSublettings,\r\n } = props;\r\n const { t } = useTranslation();\r\n\r\n history.listen(() => {\r\n // close modal when route changes\r\n if (setHeaderOpen) {\r\n setHeaderOpen(false);\r\n setContactHaulfrynModalOpen(false);\r\n }\r\n });\r\n\r\n const contactHaulfrynMobileClick = () => {\r\n setHeaderOpen(false);\r\n setContactHaulfrynModalOpen(true);\r\n };\r\n\r\n const viewMyDetailsClick = () => {\r\n setHeaderOpen(false);\r\n openMyContactDetailsModal();\r\n };\r\n\r\n return (\r\n <>\r\n \r\n
\r\n \r\n {props.backgroundImgSrc ? (\r\n \r\n ) : null}\r\n
\r\n \r\n
\r\n {location && location.pathname !== \"/\" && (\r\n
\r\n setHeaderOpen(!isHeaderOpen)}\r\n className=\"header-bars\"\r\n />\r\n
\r\n )}\r\n \r\n
\r\n \r\n \r\n \r\n \r\n setContactHaulfrynModalOpen(true)}\r\n />\r\n \r\n \r\n {options && props.onSelectionChanged ? (\r\n options.length === 1 ? (\r\n
\r\n \r\n
\r\n ) : (\r\n \r\n )\r\n ) : null}\r\n
\r\n {props.contractEndDate && (\r\n
\r\n
{t(\"general.contractEnd\")}
\r\n
\r\n {props.contractEndDate}\r\n
\r\n
\r\n )}\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {props.useMemberships ? (\r\n
\r\n \r\n \r\n \r\n
\r\n ) : (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n )}\r\n {hasSublettings && (\r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {location && location.pathname !== \"/\" && (\r\n setHeaderOpen(!isHeaderOpen)}\r\n />\r\n )}\r\n
\r\n \r\n
\r\n {selectedOption ? selectedOption.label : \"\"}\r\n
\r\n
\r\n \r\n setHeaderOpen(false)}\r\n isHeaderOpen={isHeaderOpen}\r\n selectOptions={options}\r\n selectedOption={selectedOption}\r\n onSelectionChanged={props.onSelectionChanged}\r\n openMyContactDetailsModal={viewMyDetailsClick}\r\n showMyDetailsLink={props.showMyDetailsLink}\r\n onContactHaulfrynClick={contactHaulfrynMobileClick}\r\n hasSublettings={hasSublettings}\r\n useMemberships={props.useMemberships}\r\n />\r\n
\r\n
\r\n setContactHaulfrynModalOpen(false)}\r\n contactDetails={{\r\n Title: t(\"contactHaulfryn.title\"),\r\n Description: t(\"contactHaulfryn.description\"),\r\n Address: t(\"contactHaulfryn.addressValue\"),\r\n PhoneNumber: t(\"contactHaulfryn.phoneNumberValue\"),\r\n Email: t(\"contactHaulfryn.emailAddressValue\"),\r\n }}\r\n />\r\n \r\n );\r\n};\r\n\r\nexport default withRouter(Header);\r\n","import React from 'react';\r\nimport { AppState } from '../../../RootReducer';\r\nimport { connect } from 'react-redux';\r\nimport { SET_HEADER_MENU_OPEN } from '../../Redux/ActionTypes';\r\nimport { SET_CONTACT_HAULFRYN_MODAL_OPEN } from '../../../Modal/Redux/ActionTypes';\r\nimport Header from '../Presentational/Header';\r\n\r\ninterface HeaderContainerProps {\r\n logoutClick: () => void;\r\n options?: [DropdownListOption];\r\n selectedOption?: DropdownListOption;\r\n onSelectionChanged?: (newValue: DropdownListOption) => void;\r\n backgroundImgSrc?: string;\r\n backgroundContainerClassName?: string;\r\n isHeaderOpen: boolean;\r\n setHeaderOpen: (isOpen: boolean) => void;\r\n contractEndDate: string;\r\n showMyDetailsLink: boolean;\r\n openMyContactDetailsModal: () => void;\r\n setContactHaulfrynModalOpen: (isOpen: boolean) => void;\r\n isContactHaulfrynModalOpen: boolean;\r\n hasSublettings: boolean;\r\n useMemberships: boolean;\r\n}\r\n\r\nconst HeaderContainer: React.FC = (props) => (\r\n \r\n);\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setHeaderOpen: (isOpen: boolean) => dispatch({ type: SET_HEADER_MENU_OPEN, payload: isOpen }),\r\n setContactHaulfrynModalOpen: (isOpen: boolean) =>\r\n dispatch({ type: SET_CONTACT_HAULFRYN_MODAL_OPEN, payload: isOpen }),\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state: AppState) => ({\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n isContactHaulfrynModalOpen: state.modal.contactHaulfryn.isOpen,\r\n userRoles: state.user.userRoles,\r\n});\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(HeaderContainer);\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport './PasswordRequirements.scss';\r\nimport { faCheckCircle } from '@fortawesome/free-solid-svg-icons';\r\n\r\ninterface PasswordRequirementsProps {\r\n password: string;\r\n onPasswordChange: (isValid: boolean) => void;\r\n}\r\n\r\nexport default function PasswordRequirements(props: PasswordRequirementsProps) {\r\n const { t } = useTranslation();\r\n\r\n const requirements = [\r\n { isValid: /[a-z]/.test(props.password), text: t('register.passwordRequirements.lowerCaseLetter') },\r\n { isValid: /[A-Z]/.test(props.password), text: t('register.passwordRequirements.upperCaseLetter') },\r\n { isValid: /\\d/.test(props.password), text: t('register.passwordRequirements.number') },\r\n { isValid: props.password.length >= 8, text: t('register.passwordRequirements.minimumLength') }\r\n ];\r\n\r\n props.onPasswordChange(requirements.findIndex(x => !x.isValid) === -1);\r\n\r\n return (\r\n
\r\n

{t('register.passwordRequirements.title')}

\r\n {requirements.map((requirement, i) => (\r\n \r\n ))}\r\n
\r\n );\r\n}\r\n\r\ninterface PasswordRequirementProps {\r\n isValid: boolean;\r\n text: string;\r\n}\r\n\r\nfunction PasswordRequirement(props: PasswordRequirementProps) {\r\n const { isValid, text } = props;\r\n return (\r\n
\r\n \r\n

{text}

\r\n
\r\n );\r\n}\r\n","import classNames from \"classnames\";\r\nimport React, { useState, useEffect } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Tab, TabList, TabPanel, Tabs } from \"react-tabs\";\r\nimport { Get } from \"../../../Api/ApiService\";\r\nimport { PrimaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { Modal, ModalFooter, ModalHeader, ModalProps } from \"../../../Shared/Components/Presentational/Modal\";\r\nimport \"./MyContactDetailsModal.scss\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { isValidEmail, hasValue } from \"../../../Shared/Utilities/Validation\";\r\nimport PasswordRequirements from \"../../../Shared/Components/Presentational/PasswordRequirements\";\r\n\r\ninterface MyContactDetailsModalProps extends ModalProps {\r\n onBackButtonClick: () => void;\r\n myContactDetails: MyContactDetailsDTO;\r\n onUpdateContactDetailsClick: (\r\n newContactDetails: UpdateContactDetailsDTO\r\n ) => void;\r\n onUpdatePasswordClick: (passwordDetails: SetPasswordDto) => void;\r\n isEmail: boolean;\r\n updatingPasswordError: string;\r\n isOwner: boolean;\r\n marketingPreferences: MarketingPreferencesDTO | undefined;\r\n updateMarketingPreferences: (preferences: any, showWarning: boolean) => void;\r\n}\r\n\r\nconst MyContactDetailsModal: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const [isEdit, setIsEdit] = useState(false);\r\n const [buttonText, setButtonText] = useState(t(\"myDetailsModal.update\"));\r\n const [isContactDetailsFormValid, setIsContactDetailsFormValid] =\r\n useState(true);\r\n const [isPasswordFormValid, setIsPasswordFormValid] = useState(true);\r\n const [passwordsMatch, setPasswordsMatch] = useState(true);\r\n const [currentTab, setCurrentTab] = useState((!props.isOwner && props.isEmail) ? \"password\" : \"contactDetails\");\r\n\r\n const [pendingEmailAddress, setPendingEmailAddress] = useState(\r\n props.myContactDetails.PendingEmailAddress\r\n );\r\n\r\n const [newContacDetails, setnewContacDetails] = useState({\r\n dayPhone: props.myContactDetails.DaytimeTelephone,\r\n evePhone: props.myContactDetails.EveningTelephone,\r\n mobilePhone: props.myContactDetails.MobileTelephone,\r\n emailAddr: props.myContactDetails.CommunicationEmailAddress,\r\n });\r\n\r\n const [marketingPreferences, setMarketingPreferences] = useState(\r\n props.marketingPreferences\r\n ? {\r\n ContactMethodType: props.marketingPreferences.ContactMethodType,\r\n CanUseAddress: props.marketingPreferences.CanUseAddress,\r\n CanUseEmail: props.marketingPreferences.CanUseEmail,\r\n CanUseMobilePhone: props.marketingPreferences.CanUseMobilePhone,\r\n CanUseSMS: props.marketingPreferences.CanUseSMS,\r\n CanUSePhoneNumberDayTime:\r\n props.marketingPreferences.CanUSePhoneNumberDayTime,\r\n CanUsePhoneNumberEvening:\r\n props.marketingPreferences.CanUsePhoneNumberEvening,\r\n }\r\n : undefined\r\n );\r\n\r\n const [formValidDetails, setnewFormValidDetails] = useState({\r\n dayPhone: true,\r\n evePhone: true,\r\n mobilePhone: true,\r\n emailAddr: true,\r\n });\r\n\r\n const [currentPassword, setCurrentPassword] = useState(\"\");\r\n const [newPassword, setNewPassword] = useState(\"\");\r\n const [isNewPasswordValid, setIsNewPasswordValid] = useState(false);\r\n const [confirmPassword, setConfirmPassword] = useState(\"\");\r\n const [marketingPreferencesChanged, setMarketingPreferencesChanged] = useState(false);\r\n const [marketingPreferencesDeselected, setIsAnyMarketingPreferencesDeselected] = useState(false);\r\n\r\n useEffect(() => {\r\n setIsContactDetailsFormValid(\r\n formValidDetails.dayPhone &&\r\n formValidDetails.emailAddr &&\r\n formValidDetails.evePhone &&\r\n formValidDetails.mobilePhone\r\n );\r\n }, [formValidDetails]);\r\n\r\n useEffect(() => {\r\n setIsPasswordFormValid(\r\n isNewPasswordValid &&\r\n newPassword === confirmPassword &&\r\n currentPassword.length > 0\r\n );\r\n }, [isNewPasswordValid, newPassword, currentPassword, confirmPassword]);\r\n\r\n useEffect(() => { \r\n if (marketingPreferences) {\r\n setMarketingPreferencesChanged(\r\n anyMarketingPreferencesChanged(props.marketingPreferences, marketingPreferences)\r\n );\r\n setIsAnyMarketingPreferencesDeselected(\r\n anyMarketingPreferencesDeselected(props.marketingPreferences, marketingPreferences)\r\n );\r\n }\r\n }, [marketingPreferences]);\r\n\r\n useEffect(() => {\r\n setPasswordsMatch(newPassword === confirmPassword);\r\n }, [newPassword, confirmPassword]);\r\n\r\n // newPreferences/local, do not have the willingToRecieveMarketing property\r\n function anyMarketingPreferencesChanged(originalPreferences: any, newPreferences: any) {\r\n for (const [key, value] of Object.entries(newPreferences)) {\r\n if (originalPreferences[key] != value) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n // newPreferences/local, do not have the willingToRecieveMarketing property\r\n function anyMarketingPreferencesDeselected(originalPreferences: any, newPreferences: any) {\r\n for (const key of Object.keys(newPreferences)) {\r\n if (originalPreferences[key] && !newPreferences[key]) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n const handlePrimaryClick = async () => {\r\n switch (currentTab) {\r\n case \"contactDetails\":\r\n if (isEdit) {\r\n setIsEdit(false);\r\n setButtonText(t(\"myDetailsModal.update\"));\r\n\r\n props.onUpdateContactDetailsClick({\r\n DaytimeTelephone: newContacDetails.dayPhone,\r\n EveningTelephone: newContacDetails.evePhone,\r\n MobileTelephone: newContacDetails.mobilePhone,\r\n EmailAddress: newContacDetails.emailAddr,\r\n });\r\n\r\n if (\r\n newContacDetails.emailAddr !==\r\n props.myContactDetails.CommunicationEmailAddress\r\n ) {\r\n setPendingEmailAddress(newContacDetails.emailAddr);\r\n }\r\n\r\n setnewContacDetails((prev: any) => {\r\n return {\r\n ...prev,\r\n emailAddr: props.myContactDetails.CommunicationEmailAddress,\r\n };\r\n });\r\n } else {\r\n setIsEdit(true);\r\n setButtonText(t(\"myDetailsModal.save\"));\r\n }\r\n break;\r\n case \"password\":\r\n setButtonText(t(\"myDetailsModal.update\"));\r\n props.onUpdatePasswordClick({\r\n NewPassword: newPassword,\r\n CurrentPassword: currentPassword,\r\n });\r\n break;\r\n case \"address\":\r\n try {\r\n window.open(process.env.REACT_APP_USER_ADDRESS_UPDATE_URL);\r\n } catch {}\r\n break;\r\n case \"marketing\":\r\n if (props.isOwner) {\r\n props.updateMarketingPreferences(marketingPreferences, marketingPreferencesDeselected);\r\n }\r\n break;\r\n }\r\n };\r\n\r\n const onTabSwitch = (index: number) => {\r\n if (index === 0 && props.isOwner) {\r\n setIsEdit(false);\r\n setCurrentTab(\"contactDetails\");\r\n setButtonText(t(\"myDetailsModal.update\"));\r\n } else if (index === 1 && props.isOwner) {\r\n setIsEdit(false);\r\n setCurrentTab(\"address\");\r\n setButtonText(t(\"myDetailsModal.changeAddress\"));\r\n } else if (index === 2 && props.isEmail) {\r\n setIsEdit(false);\r\n setCurrentTab(\"password\");\r\n setButtonText(t(\"myDetailsModal.update\"));\r\n } else if (index === 3 || (index === 2 && !props.isOwner)) {\r\n setIsEdit(false);\r\n setCurrentTab(\"marketing\");\r\n setButtonText(t(\"myDetailsModal.update\"));\r\n }\r\n };\r\n\r\n const getInput = (name: string, value: any, type: string) => {\r\n if (isEdit) {\r\n const classNames = \"form-input owner-contact-details-input\";\r\n return (\r\n \r\n );\r\n } else {\r\n return {value};\r\n }\r\n };\r\n\r\n const handleInputChange = (event: React.ChangeEvent) => {\r\n event.persist();\r\n const inputName = event.target.name;\r\n\r\n setnewContacDetails((prev: any) => {\r\n return { ...prev, [inputName]: event.target.value };\r\n });\r\n\r\n let isValid =\r\n event.target.type === \"email\"\r\n ? hasValue(event.target.value) && isValidEmail(event.target.value)\r\n : hasValue(event.target.value);\r\n\r\n if (!isValid) {\r\n event.target.classList.add(\"invalid\");\r\n } else {\r\n event.target.classList.remove(\"invalid\");\r\n }\r\n\r\n setnewFormValidDetails((prev: any) => {\r\n return { ...prev, [inputName]: isValid };\r\n });\r\n };\r\n\r\n const handleMarketingPreferenceInputChange = (event: React.ChangeEvent) => {\r\n event.persist();\r\n const inputName = event.target.name;\r\n\r\n setMarketingPreferences((prev: any) => {\r\n return { ...prev, [inputName]: event.target.checked };\r\n });\r\n };\r\n\r\n const handlePasswordChange = (e: React.ChangeEvent) => {\r\n const { name, value } = e.target;\r\n if (name === \"currPass\") {\r\n setCurrentPassword(value);\r\n }\r\n if (name === \"newPass\") {\r\n setNewPassword(value);\r\n }\r\n if (name === \"confirmPass\") {\r\n setConfirmPassword(value);\r\n }\r\n };\r\n\r\n const handleBackButton = () => {\r\n if (isEdit) {\r\n setnewContacDetails({\r\n dayPhone: props.myContactDetails.DaytimeTelephone,\r\n evePhone: props.myContactDetails.EveningTelephone,\r\n mobilePhone: props.myContactDetails.MobileTelephone,\r\n emailAddr: props.myContactDetails.CommunicationEmailAddress,\r\n });\r\n setMarketingPreferences(\r\n props.marketingPreferences\r\n ? {\r\n ContactMethodType: props.marketingPreferences.ContactMethodType,\r\n CanUseAddress: props.marketingPreferences.CanUseAddress,\r\n CanUseEmail: props.marketingPreferences.CanUseEmail,\r\n CanUseMobilePhone: props.marketingPreferences.CanUseMobilePhone,\r\n CanUseSMS: props.marketingPreferences.CanUseSMS,\r\n CanUSePhoneNumberDayTime:\r\n props.marketingPreferences.CanUSePhoneNumberDayTime,\r\n CanUsePhoneNumberEvening:\r\n props.marketingPreferences.CanUsePhoneNumberEvening,\r\n }\r\n : undefined\r\n );\r\n setIsEdit(false);\r\n setButtonText(t(\"myDetailsModal.update\"));\r\n } else {\r\n props.onBackButtonClick();\r\n }\r\n };\r\n\r\n const formContents = (\r\n <>\r\n \r\n \r\n \r\n {props.isOwner && (\r\n <>\r\n \r\n {t(\"myDetailsModal.contactDetailsHeader\")}\r\n {t(\"myDetailsModal.contactDetailsHeaderMobile\")}\r\n \r\n {t(\"general.address\")}\r\n \r\n )}\r\n {props.isEmail && (\r\n {t(\"myDetailsModal.passwordHeader\")}\r\n )}\r\n {props.isOwner && (\r\n \r\n \r\n {t(\"myDetailsModal.marketingPreferencesHeader\")}\r\n \r\n \r\n {t(\"myDetailsModal.marketingPrefernecesHeaderMobile\")}\r\n \r\n \r\n )}\r\n \r\n {props.isOwner && (\r\n <>\r\n \r\n
\r\n \r\n {getInput(\"emailAddr\", newContacDetails.emailAddr, \"email\")}\r\n
\r\n
\r\n \r\n {getInput(\"dayPhone\", newContacDetails.dayPhone, \"text\")}\r\n
\r\n
\r\n \r\n {getInput(\"evePhone\", newContacDetails.evePhone, \"text\")}\r\n
\r\n
\r\n \r\n {getInput(\"mobilePhone\", newContacDetails.mobilePhone, \"text\")}\r\n
\r\n {pendingEmailAddress && (\r\n \r\n {t(\"myDetailsModal.pendingEmailNotification\") +\r\n \" \" +\r\n pendingEmailAddress.toLowerCase()}\r\n

\r\n )}\r\n
\r\n \r\n \r\n

{t(\"myDetailsModal.requestAddressChangeDescription\")}

\r\n
\r\n \r\n {props.myContactDetails.AddressLine1}\r\n
\r\n
\r\n \r\n {props.myContactDetails.AddressLine2}\r\n
\r\n
\r\n \r\n {props.myContactDetails.AddressLine3}\r\n
\r\n
\r\n \r\n {props.myContactDetails.AddressLine4}\r\n
\r\n
\r\n \r\n {props.myContactDetails.PostCode}\r\n
\r\n
\r\n \r\n )}\r\n {props.isEmail && (\r\n \r\n

\r\n {t(\"myDetailsModal.updatePasswordTitle\")}\r\n

\r\n
\r\n \r\n \r\n
\r\n\r\n {props.updatingPasswordError && (\r\n

\r\n {t(\"myDetailsModal.passwordUpdateError\")}\r\n

\r\n )}\r\n setIsNewPasswordValid(isValid)}\r\n />\r\n
\r\n \r\n \r\n
\r\n\r\n
\r\n \r\n \r\n
\r\n {!passwordsMatch && (\r\n

\r\n {t(\"myDetailsModal.passwordsDoNotMatch\")}\r\n

\r\n )}\r\n
\r\n )}\r\n {props.isOwner && (\r\n \r\n

\r\n Adjust your preferences below by selecting the boxes for those you\r\n want to recieve.\r\n

\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n {(props.isOwner || currentTab === \"password\") && (\r\n \r\n )}\r\n \r\n \r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n
{formContents}
\r\n
\r\n \r\n
\r\n {formContents}\r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\nexport default MyContactDetailsModal;\r\n","import React, { Component, useEffect, useState } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport {\r\n SET_IS_MARKETING_PREFERENCES_WARNING_MODAL_OPEN,\r\n SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN,\r\n} from \"../../Redux/ActionTypes\";\r\nimport { SET_IS_UPDATE_MY_PASSWORD_SUCCES_MODAL_OPEN } from \"../../../Modal/Redux/ActionTypes\";\r\nimport MyContactDetailsModal from \"../Presentational/MyContactDetailsModal\";\r\nimport {\r\n updateMarketingPreferences,\r\n updateMyContactDetails,\r\n updateMyPassword,\r\n} from \"../../../User/Redux/ActionCreators\";\r\nimport { WithTranslation, withTranslation } from \"react-i18next\";\r\nimport {\r\n ConfirmModal,\r\n SuccessModal,\r\n} from \"../../../Shared/Components/Presentational/Modal\";\r\n\r\ninterface MyContactDetailsProps extends WithTranslation {\r\n isOpen: boolean;\r\n loginMethod: string;\r\n myContactDetails: any;\r\n marketingPreferences: MarketingPreferencesDTO | undefined;\r\n updateMarketingPreferences: (preferences: MarketingPreferencesDTO) => void;\r\n onBackButtonClick: () => void;\r\n updateContactDetails: (newContactDetails: UpdateContactDetailsDTO) => void;\r\n updatePassword: (passwordDetails: SetPasswordDto) => void;\r\n toggleUpdatePasswordSuccessModal: (isOpen: boolean) => void;\r\n isUpdatePasswordSuccessModalOpen: boolean;\r\n toggleMarketingPreferencesWarningModal: (isOpen: boolean) => void;\r\n marketingPreferencesWarningModalIsOpen: boolean;\r\n updatingPasswordError: string;\r\n ownerId: number;\r\n}\r\n\r\nclass MyContactDetails extends Component {\r\n newMarketingPreferences: MarketingPreferencesDTO = {} as MarketingPreferencesDTO;\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n\r\n\r\n\r\n const initiateUpdateMarketingPreferences = (\r\n marketingPreferences: MarketingPreferencesDTO,\r\n showWarning: boolean) => {\r\n if (showWarning) {\r\n this.newMarketingPreferences = marketingPreferences;\r\n this.props.toggleMarketingPreferencesWarningModal(showWarning);\r\n } else {\r\n this.props.updateMarketingPreferences(marketingPreferences);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {this.props.isOpen && (\r\n <>\r\n \r\n 0}\r\n marketingPreferences={this.props.marketingPreferences}\r\n updateMarketingPreferences={initiateUpdateMarketingPreferences}\r\n />\r\n \r\n \r\n 0}\r\n marketingPreferences={this.props.marketingPreferences}\r\n updateMarketingPreferences={initiateUpdateMarketingPreferences}\r\n />\r\n \r\n {\r\n this.props.toggleUpdatePasswordSuccessModal(false);\r\n }}\r\n title={t(\"myDetailsModal.passwordUpdateSuccessTitle\")}\r\n message={t(\"myDetailsModal.passwordUpdateSuccessMessage\")}\r\n buttonText={t(\"general.ok\")}\r\n />\r\n {\r\n console.log(`confirmed: ${confirmed}`);\r\n\r\n if (confirmed) {\r\n this.props.updateMarketingPreferences(this.newMarketingPreferences);\r\n }\r\n\r\n this.props.toggleMarketingPreferencesWarningModal(false);\r\n }}\r\n\r\n title={t(\"myDetailsModal.marketingPreferences.warningTitle\")}\r\n message={t(\"myDetailsModal.marketingPreferences.warningMessage\")}\r\n cancelButtonText={t(\"myDetailsModal.marketingPreferences.cancelation\")}\r\n confirmButtonText={t(\"myDetailsModal.marketingPreferences.confirmation\")}\r\n />\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isOpen: state.modal.myContactDetails.isOpen,\r\n loginMethod: state.login.loginMethod,\r\n isUpdatePasswordSuccessModalOpen: state.modal.updatePasswordSuccess.isOpen,\r\n marketingPreferencesWarningModalIsOpen: state.modal.marketingPreferencesWarningModalIsOpen,\r\n updatingPasswordError: state.user.updatingPasswordError,\r\n ownerId: state.user.ownerId,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n closeSuccessModal: () => {\r\n dispatch({ type: SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN, payload: false });\r\n },\r\n updateContactDetails: (newContactDetails: UpdateContactDetailsDTO) =>\r\n dispatch(updateMyContactDetails(newContactDetails)),\r\n updateMarketingPreferences: (newMarketingPreferences: MarketingPreferencesDTO) => \r\n dispatch(updateMarketingPreferences(newMarketingPreferences)),\r\n updatePassword: (passwordDetails: SetPasswordDto) => {\r\n dispatch(updateMyPassword(passwordDetails));\r\n },\r\n toggleUpdatePasswordSuccessModal: (open: boolean) => {\r\n dispatch({\r\n type: SET_IS_UPDATE_MY_PASSWORD_SUCCES_MODAL_OPEN,\r\n payload: open,\r\n });\r\n dispatch({ type: SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN, payload: false });\r\n },\r\n toggleMarketingPreferencesWarningModal: (isOpen: boolean) => {\r\n dispatch({\r\n type: SET_IS_MARKETING_PREFERENCES_WARNING_MODAL_OPEN,\r\n payload: isOpen,\r\n });\r\n },\r\n };\r\n};\r\n\r\nexport default withTranslation()(\r\n connect(mapStateToProps, mapDispatchToProps)(MyContactDetails)\r\n);\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostSearchLodgeBookingsCall extends PostApiCall {\r\n constructor(filter: BookingFilterDTO) {\r\n let url: string = 'account/' + filter.LodgeId + '/SearchLodgeBookings';\r\n\r\n super(url);\r\n\r\n this.body = filter;\r\n }\r\n}\r\n","import classNames from 'classnames';\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Get } from '../../../Api/ApiService';\r\nimport { PrimaryButton, SecondaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { Modal, ModalFooter, ModalHeader, ModalProps } from '../../../Shared/Components/Presentational/Modal';\r\nimport './MyMembershipsCreatePromptModal.scss';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { Link, Redirect } from 'react-router-dom';\r\nimport { Entry } from 'contentful';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\n\r\ninterface MyMembershipsCreatePromptModalProps extends ModalProps {\r\n isOpen: boolean;\r\n setDontShowAgainMembershipModal: () => void;\r\n updateMembershipFormPage: (page: number) => void;\r\n clearMembershipForm: () => void;\r\n modalText: ContentfulContentObject;\r\n}\r\n\r\nconst MyMembershipsCreatePromptModal: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const [open, setOpen] = useState(props.isOpen);\r\n\r\n const handleClick1 = async () => {\r\n props.clearMembershipForm();\r\n props.updateMembershipFormPage(0);\r\n }\r\n\r\n const handleClick2 = async () => {\r\n setOpen(false);\r\n }\r\n\r\n const handleClick3 = async () => {\r\n setOpen(false);\r\n props.setDontShowAgainMembershipModal();\r\n }\r\n\r\n const formContents = (\r\n
\r\n
\r\n \r\n
\r\n {documentToReactComponents(props.modalText.content)}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n )\r\n\r\n return (\r\n <>\r\n \r\n \r\n
{formContents}
\r\n
\r\n \r\n
\r\n {formContents}\r\n
\r\n
\r\n \r\n \r\n );\r\n};\r\n\r\n\r\nexport default MyMembershipsCreatePromptModal;","import ContentfulClient from \"../ContentfulClient\";\r\n\r\nexport async function GetHTMlContentBlockCall(name: string, label: string) {\r\n let filter = {\r\n content_type: \"htmlContentBlock\",\r\n \"fields.name\": name\r\n };\r\n const result = await ContentfulClient.getEntries(filter);\r\n if (!result) {\r\n throw { message: `GetHTMLContentBlockCall for block ${name} failed` };\r\n }\r\n if (result.errors) {\r\n throw { message: `GetHTMLContentBlockCall for block ${name} returned error(s)`, errors: result.errors };\r\n }\r\n if (!(result.items.length > 0)) {\r\n throw { message: `GetHTMLContentBlockCall for block ${name} returned no data` };\r\n }\r\n\r\n let item = result.items[0];\r\n const contentfulObject = {\r\n name: label,\r\n title: item.fields.title,\r\n content: item.fields.content\r\n } as ContentfulContentObject;\r\n\r\n return contentfulObject;\r\n \r\n}","import React, { Component, useEffect, useState } from \"react\";\r\nimport { connect } from 'react-redux';\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { WithTranslation, withTranslation } from \"react-i18next\";\r\nimport MyMembershipsCreatePromptModal from \"../Presentational/MyMembershipsCreatePromptModal\";\r\nimport { setDontShowAgainMembershipModal } from '../../../User/Redux/ActionCreators';\r\nimport * as ActionTypes from '../../../Guests/Redux/ActionTypes';\r\nimport { GetHTMlContentBlockCall } from \"../../../Contentful/Calls/GetHTMLContentBlockCall\";\r\nimport Spinner from \"../../../Shared/Components/Presentational/Spinner\";\r\n\r\ninterface MyMembershipsCreatePromptProps extends WithTranslation {\r\n showMembershipPrompt: boolean;\r\n setDontShowAgainMembershipModal: () => void;\r\n updateMembershipFormPage: (page: number) => void;\r\n clearMembershipForm: () => void;\r\n}\r\n\r\ninterface MyMembershipsCreatePromptState {\r\n modalText: ContentfulContentObject | undefined;\r\n contentLoaded: boolean;\r\n}\r\n\r\nclass MyMembershipsCreatePrompt extends Component {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n modalText: undefined,\r\n contentLoaded: false,\r\n }\r\n Promise.all([\r\n this.getModalText(\"My Haulfryn - Membership - My Haulfryn Home\", \"modalText\")\r\n ]).then(r => {\r\n r.forEach(c => this.setState({ ...this.state, [c.name]: c }));\r\n this.setState({ contentLoaded: true });\r\n })\r\n }\r\n\r\n getModalText = async (name: string, label: string) => {\r\n const modalText = await GetHTMlContentBlockCall(name, label);\r\n return modalText;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n\r\n const setDontShowAgainMembershipModal = () => {\r\n this.props.setDontShowAgainMembershipModal();\r\n }\r\n\r\n return (\r\n <>\r\n {this.state.contentLoaded ? (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n };\r\n\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n showMembershipPrompt: state.user.showMembershipPrompt,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setDontShowAgainMembershipModal: () => {\r\n dispatch(setDontShowAgainMembershipModal())\r\n },\r\n updateMembershipFormPage: (page: number) => {\r\n dispatch({ type: ActionTypes.UPDATE_MEMBERSHIP_FORM_PAGE, payload: page })\r\n },\r\n clearMembershipForm: () => {\r\n dispatch({ type: ActionTypes.SAVE_AND_EXIT })\r\n }\r\n \r\n }\r\n}\r\n\r\nexport default withTranslation()(\r\n connect(mapStateToProps, mapDispatchToProps)(MyMembershipsCreatePrompt)\r\n)","import React, { Component } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport {\r\n Desktop,\r\n Mobile,\r\n} from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { getPermissionsFromUserRoles, logout } from \"../../../Login/Redux/ActionCreators\";\r\nimport {\r\n CalendarEvent,\r\n CalendarResource,\r\n} from \"../../../Shared/Components/Presentational/Calendar\";\r\nimport HomePage from \"../Presentational/HomePage\";\r\nimport HomePageMobile from \"../Presentational/HomePage.mobile\";\r\nimport {\r\n getShowMembershipPrompt,\r\n getMarketingPreferences,\r\n setUserLodge,\r\n setUserPark,\r\n} from \"../../../User/Redux/ActionCreators\";\r\nimport history from \"../../../History\";\r\nimport {\r\n SET_SELECTED_CALENDAR_WIDGET,\r\n SelectedCalendarWidgetOptions,\r\n} from \"../../../Calendar/Redux/ActionTypes\";\r\nimport { getParkInformation, setLodgeDetails } from \"../../../Information/Redux/ActionCreators\";\r\nimport { getContentfulMembershipTypes, getParkPassTypes } from \"../../../Guests/Redux/ActionCreators\";\r\nimport HeaderContainer from \"../../../Shared/Components/Container/HeaderContainer\";\r\nimport MyContactDetails from \"../../../Modal/Components/Container/MyContactDetails\";\r\nimport { getMyContactDetails } from \"../../../User/Redux/ActionCreators\";\r\nimport {\r\n SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN,\r\n SET_CONTACT_HAULFRYN_MODAL_OPEN,\r\n} from \"../../../Modal/Redux/ActionTypes\";\r\nimport { Post } from \"../../../Api/ApiService\";\r\nimport { PostSearchLodgeBookingsCall } from \"../../../Api/Calls/PostSearchLodgeBookingsCall\";\r\nimport moment from \"moment\";\r\nimport { SET_ACCOUNT_BALANCE, SET_USER_ROLE_CLAIMS } from \"../../../User/Redux/ActionTypes\";\r\nimport { RELOAD_TRANSLATIONS, SET_SELECTED_NEWS_ITEM } from \"../../../Information/Redux/ActionTypes\";\r\nimport MyMembershipsCreatePrompt from \"../../../Modal/Components/Container/MyMembershipsCreatePrompt\";\r\nimport { Entry } from \"contentful\";\r\nimport { GetMembershipTypesCall } from \"../../../Contentful/Calls/GetMembershipTypes\";\r\nimport { SET_CONTENTFUL_MEMBERSHIP_TYPES } from \"../../../Guests/Redux/ActionTypes\";\r\nimport Spinner from \"../../../Shared/Components/Presentational/Spinner\";\r\n\r\ninterface HomeProps {\r\n logoutClick: () => void;\r\n lodges: LodgeDTO[];\r\n lodgeOptions: [DropdownListOption];\r\n dispatch: any;\r\n userFirstName: string;\r\n setSelectedLodge: (lodge: SelectedLodgeDTO) => void;\r\n setSelectedPark: (\r\n parkCode: string,\r\n parkName: string,\r\n parkFeatures: string[]\r\n ) => void;\r\n selectedLodge: DropdownListOption;\r\n setCalendarFilter: (selected: SelectedCalendarWidgetOptions) => void;\r\n contractEndDate: string;\r\n getMyContactDetails: any;\r\n myContactDetails: MyContactDetailsDTO;\r\n getMarketingPreferences: any;\r\n marketingPreferences: MarketingPreferencesDTO | undefined;\r\n openMyContactDetailsModal: () => void;\r\n closeMyContactDetailsModal: () => void;\r\n setContactHaulfrynModalOpen: (isOpen: boolean) => void;\r\n hasSublettings: boolean;\r\n accountId: number;\r\n accountNumber: string;\r\n setAccountBalance: (newBalance: number) => void;\r\n ownerId: number;\r\n loginMethod: string;\r\n showMembershipPrompt: boolean;\r\n getShowMembershipPrompt: any;\r\n setSelectedNewsItem: (selectedNewsItemId: string) => void;\r\n contentfulMembershipTypes: Entry[];\r\n setContentfulMembershipTypes: () => void;\r\n useMemberships: boolean;\r\n getPermissionsFromUserRoles: () => void;\r\n}\r\n\r\ninterface HomeState {\r\n calendarEvents: CalendarEvent[];\r\n resources: CalendarResource[];\r\n}\r\n\r\nclass Home extends Component {\r\n constructor(props: HomeProps) {\r\n super(props);\r\n\r\n this.onSelectedLodgeChanged = this.onSelectedLodgeChanged.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setContentfulMembershipTypes();\r\n this.props.setCalendarFilter(\"events\");\r\n this.props.getMyContactDetails();\r\n this.props.getShowMembershipPrompt();\r\n\r\n if (this.props.ownerId > 0) {\r\n this.props.getMarketingPreferences();\r\n }\r\n\r\n this.searchBookings();\r\n // reload translation file\r\n this.props.dispatch({ type: RELOAD_TRANSLATIONS });\r\n this.props.dispatch(getParkInformation());\r\n }\r\n\r\n componentDidUpdate(prevProps: HomeProps) {\r\n if (prevProps.selectedLodge !== this.props.selectedLodge) {\r\n this.searchBookings();\r\n }\r\n }\r\n\r\n public state: HomeState = {\r\n calendarEvents: [],\r\n resources: [\r\n {\r\n id: 1,\r\n title: \"homePage.calendar.key.subletbookings\",\r\n className: \"sublet-bookings\",\r\n },\r\n {\r\n id: 2,\r\n title: \"homePage.calendar.key.myHolidays\",\r\n className: \"my-holidays\",\r\n },\r\n {\r\n id: 3,\r\n title: \"homePage.calendar.key.myPendingHolidays\",\r\n className: \"my-holidays pending\",\r\n },\r\n ],\r\n };\r\n\r\n searchBookings = async () => {\r\n try {\r\n const filter: BookingFilterDTO = {\r\n LodgeId: Number(this.props.selectedLodge.value),\r\n FromDate: moment()\r\n .startOf(\"month\")\r\n .startOf(\"week\")\r\n .format(\"DD/MM/YYYY\"),\r\n ToDate: moment().endOf(\"month\").endOf(\"week\").format(\"DD/MM/YYYY\"),\r\n };\r\n const bookings = await Post(\r\n new PostSearchLodgeBookingsCall(filter)\r\n );\r\n\r\n const calendarBookings: CalendarEvent[] = bookings.data.map((booking) => {\r\n return {\r\n allDay: true,\r\n start: booking.FromDate,\r\n end: booking.ToDate,\r\n resourceId: booking.IsOwnerBooking\r\n ? booking.IsPendingBooking\r\n ? 3\r\n : 2\r\n : 1,\r\n className: booking.IsOwnerBooking\r\n ? booking.IsPendingBooking\r\n ? \"my-holidays pending\"\r\n : \"my-holidays\"\r\n : \"sublet-bookings\",\r\n };\r\n });\r\n\r\n this.setState({ calendarEvents: calendarBookings });\r\n } catch { }\r\n };\r\n\r\n public isEmptyOrUndefined(obj: {} | undefined) {\r\n if (obj !== undefined) {\r\n return Object.keys(obj).length === 0;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n public showContactDetailsModal() {\r\n return ((this.props.loginMethod === \"email\" && this.props.ownerId < 1) || (this.props.ownerId > 0 && !this.isEmptyOrUndefined(this.props.marketingPreferences) && !this.isEmptyOrUndefined(this.props.myContactDetails)));\r\n }\r\n\r\n showCreateMembershipsPrompt() {\r\n return this.props.showMembershipPrompt && this.props.contentfulMembershipTypes && this.props.contentfulMembershipTypes.length > 0;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { logoutClick, userFirstName, lodgeOptions, selectedLodge } = this.props;\r\n\r\n return (\r\n <>\r\n {this.props.contentfulMembershipTypes ? (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {(this.showContactDetailsModal()) && (\r\n \r\n )}\r\n {this.showCreateMembershipsPrompt() && (\r\n \r\n )}\r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n }\r\n\r\n private onSelectedLodgeChanged(newValue: DropdownListOption) {\r\n if (newValue) {\r\n const selectedLodge = this.props.lodges.find(\r\n (l) => l.LodgeId.toString() === newValue.value\r\n );\r\n\r\n if (selectedLodge) {\r\n this.props.setSelectedPark(\r\n selectedLodge.ParkCode,\r\n selectedLodge.ParkName,\r\n selectedLodge.ParkFeatures\r\n );\r\n this.props.setSelectedLodge({\r\n LodgeId: selectedLodge.LodgeId,\r\n LodgeName: selectedLodge.Name,\r\n ContractEndDate: selectedLodge.ContractEndDate,\r\n HasSublettings: selectedLodge.HasSublettings,\r\n AccountId: selectedLodge.AccountId,\r\n AccountNo: selectedLodge.AccountNo,\r\n AccountBalance: selectedLodge.RecentTransactions[0]\r\n ? selectedLodge.RecentTransactions[0].Balance\r\n : undefined,\r\n });\r\n }\r\n\r\n history.push(\"/\");\r\n }\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n logoutClick: () => {\r\n dispatch(logout(false));\r\n },\r\n setSelectedLodge: (lodge: SelectedLodgeDTO) => {\r\n dispatch(setUserLodge(lodge));\r\n dispatch(setLodgeDetails(lodge.LodgeId.toString()));\r\n dispatch(getParkPassTypes());\r\n },\r\n setSelectedPark: (\r\n parkCode: string,\r\n parkName: string,\r\n parkFeatures: string[]\r\n ) => {\r\n dispatch(setUserPark({ parkCode, parkName, parkFeatures }));\r\n },\r\n setCalendarFilter: (selected: SelectedCalendarWidgetOptions) =>\r\n dispatch({ type: SET_SELECTED_CALENDAR_WIDGET, payload: selected }),\r\n getMyContactDetails: () => dispatch(getMyContactDetails()),\r\n getMarketingPreferences: () => dispatch(getMarketingPreferences()),\r\n openMyContactDetailsModal: () =>\r\n dispatch({ type: SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN, payload: true }),\r\n closeMyContactDetailsModal: () =>\r\n dispatch({ type: SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN, payload: false }),\r\n setContactHaulfrynModalOpen: (isOpen: boolean) =>\r\n dispatch({ type: SET_CONTACT_HAULFRYN_MODAL_OPEN, payload: isOpen }),\r\n setAccountBalance: (newBalance: number) =>\r\n dispatch({ type: SET_ACCOUNT_BALANCE, payload: newBalance }),\r\n getShowMembershipPrompt: () => dispatch(getShowMembershipPrompt()),\r\n setSelectedNewsItem: (selectedNewsItemId: string) =>\r\n dispatch({ type: SET_SELECTED_NEWS_ITEM, payload: selectedNewsItemId }),\r\n setContentfulMembershipTypes: () => {\r\n dispatch(getContentfulMembershipTypes());\r\n },\r\n getPermissionsFromUserRoles: () =>\r\n dispatch(getPermissionsFromUserRoles()),\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n let userFirstName: string = \"\";\r\n let lodges: LodgeDTO[] = [];\r\n let selectedLodge: DropdownListOption = { value: \"\", label: \"\" };\r\n let lodgeOptions: [DropdownListOption] = [{ value: \"\", label: \"\" }];\r\n let contractEndDate = \"\";\r\n let hasSublettings = false;\r\n let accountId = 0;\r\n let accountNumber = \"\";\r\n\r\n if (state.user) {\r\n userFirstName = state.user.firstname ? state.user.firstname : \"\";\r\n lodges = state.user.lodges ? state.user.lodges : [];\r\n\r\n for (let i = 0; i < lodges.length; i++) {\r\n lodgeOptions[i] = {\r\n value: lodges[i].LodgeId.toString(),\r\n label: lodges[i].Name,\r\n };\r\n\r\n if (state.user.lodge && state.user.lodge.LodgeId === lodges[i].LodgeId) {\r\n selectedLodge = lodgeOptions[i];\r\n }\r\n }\r\n }\r\n\r\n if (state.user.lodge) {\r\n contractEndDate = state.user.lodge.ContractEndDate;\r\n const selectedLodge: LodgeDTO = state.user.lodges.find(\r\n (x: LodgeDTO) => x.LodgeId === state.user.lodge.LodgeId\r\n );\r\n if (selectedLodge) {\r\n accountId = selectedLodge.AccountId;\r\n accountNumber = selectedLodge.AccountNo;\r\n hasSublettings = selectedLodge.HasSublettings;\r\n }\r\n }\r\n\r\n return {\r\n userFirstName,\r\n lodges,\r\n selectedLodge,\r\n lodgeOptions,\r\n contractEndDate,\r\n myContactDetails: state.user.myContactDetails || {},\r\n marketingPreferences: state.user.marketingPreferences,\r\n ownerId: state.user.ownerId,\r\n hasSublettings,\r\n accountId,\r\n accountNumber,\r\n loginMethod: state.login.loginMethod,\r\n showMembershipPrompt: state.user.showMembershipPrompt,\r\n contentfulMembershipTypes: state.guests.contentfulMembershipTypes,\r\n useMemberships: state.guests.useMemberships,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Home);\r\n","import { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport React, { useEffect } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { useTranslation } from 'react-i18next';\r\n//@ts-ignore\r\nimport Slide from \"react-reveal/Slide\";\r\nimport { ClickableIcon } from './Icons';\r\nimport \"./MobileSideNav.scss\";\r\nimport { LinkWidget } from './Widget';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport NavOption from './NavOption';\r\nimport Features from '../../../Constants/Features';\r\nimport FeatureToggle from './FeatureToggle';\r\n\r\ninterface MemberMobileSideNavProps {\r\n onClose: () => void;\r\n isHeaderOpen: boolean;\r\n}\r\n\r\nconst MemberMobileSideNav: React.FC = ({\r\n onClose,\r\n isHeaderOpen,\r\n}) => {\r\n useEffect(() => {\r\n if (isHeaderOpen) {\r\n document.body.classList.add(\"kill-scroll\");\r\n }\r\n return () => {\r\n document.body.classList.remove(\"kill-scroll\");\r\n }\r\n }, [isHeaderOpen]);\r\n\r\n const { t } = useTranslation();\r\n\r\n return ReactDOM.createPortal(\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
,\r\n document.body\r\n )\r\n}\r\n\r\nexport default MemberMobileSideNav;","import { connect } from 'react-redux';\r\nimport React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { SET_HEADER_MENU_OPEN } from '../../Redux/ActionTypes';\r\nimport { Desktop, Mobile } from '../Presentational/ResponsiveViews';\r\nimport classNames from 'classnames';\r\nimport \"../Presentational/Header.scss\";\r\n//@ts-ignore\r\nimport Fade from \"react-reveal/Fade\";\r\nimport { faBars, faSignOutAlt } from '@fortawesome/free-solid-svg-icons';\r\nimport { ClickableIcon } from '../Presentational/Icons';\r\nimport history from \"../../../History\";\r\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\r\nimport HomeButton from '../Presentational/HomeButton';\r\nimport { ClickableLabel } from '../Presentational/Labels';\r\nimport NavOption from '../Presentational/NavOption';\r\nimport { LinkWidget } from '../Presentational/Widget';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport Features from '../../../Constants/Features';\r\nimport FeatureToggle from '../Presentational/FeatureToggle';\r\nimport MobileSideNav from '../Presentational/MobileSideNav';\r\nimport MemberMobileSideNav from '../Presentational/MemberMobileSideNav';\r\n\r\ninterface MemberHeaderProps extends RouteComponentProps {\r\n logoutClick: () => void;\r\n isHeaderOpen: boolean;\r\n setHeaderOpen: (isOpen: boolean) => void;\r\n backgroundImgSrc?: string;\r\n backgroundContainerClassName?: string;\r\n}\r\n\r\nconst MemberHeader: React.FC = (props) => {\r\n const { location, isHeaderOpen, setHeaderOpen } = props;\r\n const { t } = useTranslation();\r\n\r\n history.listen(() => {\r\n if (setHeaderOpen) {\r\n setHeaderOpen(false);\r\n }\r\n });\r\n\r\n return (\r\n <>\r\n \r\n
\r\n \r\n {props.backgroundImgSrc ? (\r\n \r\n ) : null}\r\n
\r\n \r\n
\r\n {location && location.pathname !== \"/\" && (\r\n
\r\n setHeaderOpen(!isHeaderOpen)}\r\n className=\"header-bars\"\r\n />\r\n
\r\n )}\r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n {location && location.pathname !== \"/\" && (\r\n setHeaderOpen(!isHeaderOpen)}\r\n />\r\n )}\r\n
\r\n \r\n setHeaderOpen(false)}\r\n isHeaderOpen={isHeaderOpen}\r\n />\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setHeaderOpen: (isOpen: boolean) => dispatch({ type: SET_HEADER_MENU_OPEN, payload: isOpen }),\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(MemberHeader));","import React from 'react';\r\nimport classNames from 'classnames';\r\n\r\ninterface GridProps {\r\n rowCount: number;\r\n columnCount: number;\r\n className?: string;\r\n}\r\n\r\nconst Grid: React.FC = props => {\r\n const style: React.CSSProperties = {\r\n display: 'grid',\r\n gridTemplateColumns: `repeat(${props.columnCount}, minmax(auto, 1fr))`,\r\n gridTemplateRows: `repeat(${props.rowCount}, minmax(75px, auto))`,\r\n msGridColumns: `#{\"minmax(max-content, 1fr))[${props.columnCount}]}`,\r\n msGridRows: `#{\"(minmax(75px, max-content))[${props.rowCount}]\"}`\r\n };\r\n return (\r\n
\r\n {props.children}\r\n
\r\n );\r\n};\r\n\r\nexport default Grid;\r\n","import UserRoles from \"../../Constants/UserRoles\";\r\nimport ContentfulClient from \"../ContentfulClient\";\r\nimport { TagsFilter } from \"../TagsFilter\";\r\n\r\nexport async function GetNewsArticlesCall(ParkContentfulId : string,userRoles: UserRoleDTO[]) {\r\n let filter ={\r\n content_type: 'newsArticle',\r\n links_to_entry: ParkContentfulId,\r\n order:'-fields.published'\r\n }\r\n\r\n let result = await ContentfulClient.getEntries(filter);\r\n\r\n let indexToBeRemoved: Array = [];\r\n if(userRoles.length > 0){\r\n result.items.forEach((content)=>{\r\n if(new TagsFilter().removeContent(content,userRoles)){\r\n indexToBeRemoved.push(content.sys.id);\r\n }\r\n });\r\n }\r\n\r\n if (indexToBeRemoved.length !== 0){\r\n indexToBeRemoved.forEach((val)=>{\r\n result.items.forEach((content,index)=>{\r\n if(content.sys.id === val){\r\n result.items.splice(index,1); \r\n }\r\n });\r\n })\r\n }\r\n\r\n return result;\r\n}","import React, { useState } from 'react';\r\nimport { Redirect } from 'react-router-dom';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { formatDateString } from '../../../Shared/Utilities/DateUtils';\r\nimport { Entry } from 'contentful';\r\nimport './NewsCard.scss';\r\n\r\ninterface NewsCardProps {\r\n news: Entry;\r\n setSelectedNewsItem: (selectedNewsItemId: string) => void;\r\n}\r\n\r\nconst NewsCard: React.FC = ({ news, setSelectedNewsItem }) => {\r\n const [navigateTo, setNavigateTo] = useState('');\r\n\r\n const navigateToNewsPage = (): void => {\r\n if (news && news.sys.id) {\r\n setSelectedNewsItem(news.sys.id);\r\n setNavigateTo(Routes.ParkNews);\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n {navigateTo && }\r\n
\r\n
\r\n \"news\"\r\n
\r\n
\r\n

{news.fields.title}

\r\n

{formatDateString(news.fields.published)}

\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default NewsCard;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { GetNewsArticlesCall } from '../../../Contentful/Calls/GetNewsArticlesCall'\r\nimport { GetParkCall } from '../../../Contentful/Calls/GetParkCall'\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\nimport NewsCard from '../Presentational/NewsCard';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { Entry } from 'contentful';\r\n\r\ninterface NewsCardContainerProps {\r\n park: any;\r\n userRoles: UserRoleDTO[];\r\n setSelectedNewsItem: (selectedNewsItemId: string) => void;\r\n}\r\n\r\nconst NewsCardContainer: React.FC = ({ park, setSelectedNewsItem, userRoles }) => {\r\n const [news, setNews] = useState[]>([]);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [hasError, setHasError] = useState(false);\r\n \r\n\r\n const { t } = useTranslation();\r\n \r\n useEffect(() => {\r\n \r\n if (park && park.parkCode) {\r\n setIsLoading(true);\r\n setHasError(false);\r\n GetParkCall(park && park.parkCode).then((park)=>{\r\n GetNewsArticlesCall(park.sys.id,userRoles).then(\r\n (result) => {\r\n setNews(result.items);\r\n setIsLoading(false);\r\n },\r\n (err) => {\r\n setIsLoading(false);\r\n setHasError(true);\r\n }\r\n );\r\n }).catch(() => {\r\n setIsLoading(false);\r\n setHasError(true);\r\n });\r\n \r\n }\r\n }, [park && park.parkCode]);\r\n\r\n return (\r\n <>\r\n {isLoading && }\r\n {!isLoading && hasError &&

{t('myParkAndHome.newsError')}

}\r\n {!isLoading &&\r\n !hasError &&\r\n news.map((n, i) => {\r\n return ;\r\n })}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n park: state.user.park,\r\n userRoles: state.user.userRoles,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(NewsCardContainer);\r\n","import classNames from 'classnames';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Link } from 'react-router-dom';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { Modal, ModalHeader, ModalProps } from '../../../Shared/Components/Presentational/Modal';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { GetHTMlContentBlockCall } from '../../../Contentful/Calls/GetHTMLContentBlockCall';\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\n\r\ninterface ReferredCreateMembershipModalProps extends ModalProps {\r\n isOpen: boolean;\r\n closeModal: (isOpen: boolean) => void;\r\n clearMembershipForm: () => void;\r\n updateMembershipFormPage: (page: number) => void;\r\n}\r\n\r\nconst ReferredCreateMembershipModal: React.FC = (props: ReferredCreateMembershipModalProps) => {\r\n const { t } = useTranslation();\r\n\r\n const [modalText, setModalText] = useState();\r\n const [contentLoaded, setContentLoaded] = useState(false);\r\n\r\n useEffect(() => {\r\n Promise.all([\r\n getModalText(\"My Haulfryn - Membership - Referee with no membership\", \"modalText\"),\r\n ]).then(r => {\r\n setModalText(r[0]);\r\n setContentLoaded(true);\r\n })\r\n }, []);\r\n\r\n const getModalText = async (name: string, label: string) => {\r\n const modalText = await GetHTMlContentBlockCall(name, label);\r\n return modalText;\r\n }\r\n\r\n const handleClick = () => {\r\n props.closeModal(false);\r\n props.clearMembershipForm();\r\n props.updateMembershipFormPage(0);\r\n }\r\n\r\n const formContents = (\r\n
\r\n {contentLoaded ? (\r\n
\r\n \r\n
\r\n {documentToReactComponents(modalText!.content)}\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n
\r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n {formContents}\r\n \r\n \r\n \r\n \r\n {formContents}\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default ReferredCreateMembershipModal;","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { getParkInformation } from '../../../Information/Redux/ActionCreators';\r\nimport { RELOAD_TRANSLATIONS, SET_SELECTED_NEWS_ITEM } from '../../../Information/Redux/ActionTypes';\r\nimport HeaderContainer from '../../../Shared/Components/Container/HeaderContainer';\r\nimport MemberHeader from '../../../Shared/Components/Container/MemberHeader';\r\nimport NavOption from '../../../Shared/Components/Presentational/NavOption';\r\nimport { Desktop, Mobile, useIsDesktop } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { LinkWidget, Widget, WidgetHeader, WidgetList } from '../../../Shared/Components/Presentational/Widget';\r\nimport MenuWidget from '../Presentational/MenuWidget';\r\nimport WelcomeMessageWidget from '../Presentational/WelcomeMessageWidget';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { getPermissionsFromUserRoles, logout } from '../../../Login/Redux/ActionCreators';\r\nimport CalendarListWidget from '../../../Calendar/Components/Container/CalendarListWidget';\r\nimport MyCalendarListHeader from '../../../Calendar/Components/Container/MyCalendarListHeader';\r\nimport Features from '../../../Constants/Features';\r\nimport FeatureToggle from '../../../Shared/Components/Presentational/FeatureToggle';\r\nimport ReservationLinks from '../../../Calendar/Components/Container/ReservationLinks';\r\n//@ts-ignore\r\nimport Zoom from \"react-reveal/Zoom\";\r\nimport Grid from '../../../Shared/Components/Presentational/Grid';\r\nimport NewsCardContainer from '../../../Information/Components/Container/NewsCardContainer';\r\nimport * as ActionTypes from '../../../Guests/Redux/ActionTypes';\r\nimport ReferredCreateMembershipModal from '../../../Modal/Components/Container/ReferredCreateMembershipModal';\r\nimport CalendarWidget from '../Presentational/CalendarWidget';\r\nimport { getMyMemberships } from '../../../Guests/Redux/ActionCreators';\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\n\r\n\r\ninterface MemberHomePageProps {\r\n userFirstName: string;\r\n logoutClick: () => void;\r\n setSelectedPark: (\r\n parkCode: string,\r\n parkName: string,\r\n parkFeatures: string[]\r\n ) => void;\r\n dispatch: any;\r\n hasOwnMembership: boolean;\r\n updateMembershipFormPage: (page: number) => void;\r\n selectedLodge: DropdownListOption;\r\n accountId: number;\r\n clearMembershipForm: () => void;\r\n setSelectedNewsItem: (selectedNewsItemId: string) => void;\r\n userRoles: UserRoleDTO[];\r\n membershipNumber: string;\r\n getPermissionsFromUserRoles: () => void;\r\n permissionCallSuccess: boolean;\r\n forcedToMakeMembership: boolean;\r\n}\r\n\r\nconst MemberHomePage: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n\r\n const [modalOpen, setModalOpen] = useState(false);\r\n const [memberships, setMemberships] = useState();\r\n\r\n useEffect(() => {\r\n props.dispatch({ type: RELOAD_TRANSLATIONS });\r\n props.dispatch(getParkInformation());\r\n setModalOpen(props.forcedToMakeMembership && !props.hasOwnMembership);\r\n }, []);\r\n\r\n const DesktopContents = (\r\n <>\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n }}\r\n />\r\n \r\n \r\n {/*

{t('myParkAndHome.parkNewsFeed')}

*/}\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n }\r\n >\r\n \r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n )\r\n\r\n const MobileContents = (\r\n <>\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n ,\r\n }}\r\n />\r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n {/*

{t('myParkAndHome.parkNewsFeed')}

*/}\r\n \r\n
\r\n \r\n
\r\n\r\n \r\n \r\n );\r\n\r\n return (\r\n <>\r\n {props.permissionCallSuccess ? (\r\n <>\r\n \r\n {DesktopContents}\r\n \r\n \r\n {MobileContents}\r\n \r\n \r\n \r\n ) : (\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n )}\r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n let userFirstName: string = \"\";\r\n let selectedLodge: DropdownListOption = { value: \"\", label: \"\" };\r\n let lodges: LodgeDTO[] = [];\r\n let lodgeOptions: [DropdownListOption] = [{ value: \"\", label: \"\" }];\r\n let contractEndDate = \"\";\r\n let accountId = 0;\r\n let hasSublettings = false;\r\n let accountNumber = \"\";\r\n\r\n if (state.user) {\r\n userFirstName = state.user.firstname ? state.user.firstname : \"\";\r\n lodges = state.user.lodges ? state.user.lodges : [];\r\n\r\n for (let i = 0; i < lodges.length; i++) {\r\n lodgeOptions[i] = {\r\n value: lodges[i].LodgeId.toString(),\r\n label: lodges[i].Name,\r\n };\r\n\r\n if (state.user.lodge && state.user.lodge.LodgeId === lodges[i].LodgeId) {\r\n selectedLodge = lodgeOptions[i];\r\n }\r\n }\r\n }\r\n\r\n if (state.user.lodge) {\r\n contractEndDate = state.user.lodge.ContractEndDate;\r\n const selectedLodge: LodgeDTO = state.user.lodges.find(\r\n (x: LodgeDTO) => x.LodgeId === state.user.lodge.LodgeId\r\n );\r\n if (selectedLodge) {\r\n accountId = selectedLodge.AccountId;\r\n accountNumber = selectedLodge.AccountNo;\r\n hasSublettings = selectedLodge.HasSublettings;\r\n }\r\n }\r\n\r\n return {\r\n userFirstName,\r\n userRoles: state.user.userRoles,\r\n hasOwnMembership: state.user.hasOwnMembership,\r\n selectedLodge,\r\n membershipNumber: state.user.membershipNumber,\r\n permissionCallSuccess: state.user.permissionCallSuccess,\r\n forcedToMakeMembership: state.user.forcedToMakeMembership,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n logoutClick: () => {\r\n dispatch(logout(false));\r\n },\r\n setSelectedNewsItem: (selectedNewsItemId: string) =>\r\n dispatch({ type: SET_SELECTED_NEWS_ITEM, payload: selectedNewsItemId }),\r\n clearMembershipForm: () => {\r\n dispatch({ type: ActionTypes.SAVE_AND_EXIT })\r\n },\r\n updateMembershipFormPage: (page: number) => {\r\n dispatch({ type: ActionTypes.UPDATE_MEMBERSHIP_FORM_PAGE, payload: page })\r\n },\r\n getPermissionsFromUserRoles: () =>\r\n dispatch(getPermissionsFromUserRoles()),\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MemberHomePage);","import React, { Component } from 'react';\r\nimport './Backgrounds.scss';\r\n//@ts-ignore\r\nimport Zoom from 'react-reveal/Zoom';\r\nimport classNames from 'classnames';\r\n\r\ninterface BackgroundProps {\r\n src?: string;\r\n containerClassName?: string;\r\n}\r\n\r\nexport class VerticalBackground extends Component {\r\n render() {\r\n return (\r\n
\r\n \r\n \"\"\r\n \r\n
{this.props.children}
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport class ImageBackground extends Component {\r\n render() {\r\n return (\r\n
\r\n \"\"\r\n
{this.props.children}
\r\n
\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport './Version.scss';\r\n\r\nexport default function Version() {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n

{t('login.versionNumber')} {process.env.REACT_APP_VERSION_NUMBER}

\r\n );\r\n}\r\n","export const googleClientId = (window as any).env.GoogleClientId;\r\nexport const facebookAppId = (window as any).env.FacebookAppId;\r\nexport const sagepayUrl = (window as any).env.SagepayUrl;\r\n\r\n\r\n","import classNames from \"classnames\";\r\nimport React, { ChangeEvent, Component, FormEvent } from \"react\";\r\nimport { WithTranslation, withTranslation } from \"react-i18next\";\r\nimport { Link, Redirect } from \"react-router-dom\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport {\r\n SecondaryButton,\r\n BackLinkButton,\r\n PrimaryButton,\r\n} from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport {\r\n ButtonContainer,\r\n InputContainer,\r\n} from \"../../../Shared/Components/Presentational/Containers\";\r\nimport Version from \"../../../Shared/Components/Presentational/Version\";\r\nimport GoogleLogin from \"react-google-login\";\r\nimport { googleClientId, facebookAppId } from \"../../../Shared/Environment\";\r\n//@ts-ignore\r\nimport FacebookLogin from \"react-facebook-login/dist/facebook-login-render-props\";\r\nimport DropdownList from \"../../../Shared/Components/Presentational/DropdownList\";\r\n\r\ninterface LoginState {\r\n emailAddress: string;\r\n password: string;\r\n isRegister: boolean;\r\n}\r\n\r\ninterface LoginPopupProps extends WithTranslation {\r\n loginClick: (email: string, password: string, type: string) => void;\r\n isLoggingIn: boolean;\r\n loginFailureMessage: string;\r\n sessionHasExpired: boolean;\r\n parksLoading: boolean;\r\n availableParks: DropdownListOption[];\r\n selectedParkCode: string | undefined;\r\n parkSelected: (parkOption: DropdownListOption) => void;\r\n useParkSelection: boolean;\r\n}\r\n\r\nclass LoginPopup extends Component {\r\n constructor(props: LoginPopupProps) {\r\n super(props);\r\n\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.responseGoogle = this.responseGoogle.bind(this);\r\n this.responseFacebook = this.responseFacebook.bind(this);\r\n }\r\n\r\n public state: LoginState = {\r\n emailAddress: \"\",\r\n password: \"\",\r\n isRegister: false,\r\n };\r\n\r\n private handleChange(e: ChangeEvent) {\r\n const { name, value } = e.target;\r\n this.setState({ [name]: value } as any);\r\n }\r\n\r\n private handleSubmit(e: FormEvent) {\r\n e.preventDefault();\r\n\r\n const user = this.state;\r\n if (user.emailAddress && user.password) {\r\n this.props.loginClick(user.emailAddress, user.password, \"email\");\r\n }\r\n }\r\n\r\n private responseGoogle(response: any) {\r\n if (response.tokenId) {\r\n this.props.loginClick(\"\", response.tokenId, \"google\");\r\n }\r\n }\r\n\r\n private responseFacebook(response: any) {\r\n if (response.accessToken) {\r\n this.props.loginClick(\"\", response.accessToken, \"facebook\");\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n\r\n if (this.state.isRegister) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n \r\n \r\n\r\n
\r\n {this.props.useParkSelection && (\r\n \r\n \r\n p.value == this.props.selectedParkCode\r\n )}\r\n />\r\n \r\n )}\r\n
\r\n\r\n {(!this.props.useParkSelection || this.props.selectedParkCode) && (\r\n <>\r\n
\r\n {/*
disabled as broken\r\n (\r\n \r\n \"Facebook\"\r\n Continue with Facebook\r\n \r\n )}\r\n />\r\n
*/}\r\n
\r\n (\r\n \r\n \"Google\"\r\n Continue with Google\r\n \r\n )}\r\n onSuccess={this.responseGoogle}\r\n onFailure={this.responseGoogle}\r\n />\r\n
\r\n
\r\n \r\n or\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n {\r\n \r\n {t(\"login.forgotPasswordLink\")}\r\n \r\n }\r\n
\r\n

\r\n \r\n \r\n \r\n \r\n this.setState({ isRegister: true })}\r\n disabled={!this.props.selectedParkCode && this.props.useParkSelection}\r\n />\r\n \r\n

\r\n {t(\"login.dontHaveAccountTitle\")}\r\n

\r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(LoginPopup);\r\n","export enum CustomerPortalUrls {\r\n Url1 = \"URL1\",\r\n Url2 = \"URL2\",\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { VerticalBackground } from \"../../../Shared/Components/Presentational/Backgrounds\";\r\nimport LoginPopup from \"./LoginPopup\";\r\nimport { Translation } from \"react-i18next\";\r\nimport \"./LoginPage.scss\";\r\nimport { GetHTMlContentBlockCall } from \"../../../Contentful/Calls/GetHTMLContentBlockCall\";\r\nimport { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\nimport Spinner from \"../../../Shared/Components/Presentational/Spinner\";\r\n\r\ninterface Props {\r\n loginClick: (email: string, password: string, type: string) => void;\r\n isLoggingIn: boolean;\r\n loginFailureMessage: string;\r\n sessionHasExpired: boolean;\r\n parksLoading: boolean;\r\n availableParks: DropdownListOption[];\r\n selectedParkCode: string | undefined;\r\n parkSelected: (parkOption: DropdownListOption) => void;\r\n useParkSelection: boolean;\r\n}\r\n\r\ninterface State {\r\n welcomeText: ContentfulContentObject | undefined;\r\n contentLoaded: boolean;\r\n}\r\n\r\nclass LoginPage extends Component {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n welcomeText: undefined,\r\n contentLoaded: false,\r\n }\r\n Promise.all([\r\n this.getWelcomeText(\"My Haulfryn - Membership - Pre login\", \"welcomeText\")\r\n ]).then(r => {\r\n r.forEach(c => this.setState({ ...this.state, [c.name]: c, contentLoaded: true }));\r\n })\r\n }\r\n\r\n getWelcomeText = async (name: string, label: string): Promise => {\r\n const welcomeText = await GetHTMlContentBlockCall(name, label);\r\n return welcomeText;\r\n }\r\n\r\n render() {\r\n return (\r\n <>\r\n {this.state.contentLoaded ? (\r\n \r\n {(t: (key: string) => string) => {\r\n return (\r\n
\r\n \r\n

{t(\"login.welcomeTitle\")}

\r\n
\r\n {documentToReactComponents(this.state.welcomeText!.content)}\r\n
\r\n\r\n \r\n \r\n
\r\n );\r\n }}\r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default LoginPage;\r\n","import React, { Component, FormEvent } from 'react';\r\nimport { ImageBackground } from '../../../Shared/Components/Presentational/Backgrounds';\r\nimport { SecondaryButton, OutlineButton, BackLinkButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { ButtonContainer } from '../../../Shared/Components/Presentational/Containers';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport './Login.scss';\r\nimport { Redirect } from 'react-router-dom';\r\nimport * as Routes from '../../../Constants/Routes';\r\n\r\ninterface WelcomePageProps extends WithTranslation {\r\n goToLoginClick: () => void;\r\n}\r\n\r\ninterface WelcomePageState {\r\n isRegister: boolean;\r\n}\r\n\r\nclass WelcomePageMobile extends Component {\r\n constructor(props: WelcomePageProps) {\r\n super(props);\r\n\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n }\r\n\r\n public state: WelcomePageState = {\r\n isRegister: false\r\n };\r\n\r\n private handleSubmit(e: FormEvent) {\r\n e.preventDefault();\r\n\r\n this.props.goToLoginClick();\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n\r\n if (this.state.isRegister) {\r\n return ;\r\n }\r\n return (\r\n \r\n \r\n
\r\n

{t('login.welcomeTitle')}

\r\n

{t('login.welcomeMessage')}

\r\n \r\n \r\n this.setState({ isRegister: true })}\r\n />\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(WelcomePageMobile);\r\n","import React, { Component, FormEvent, ChangeEvent } from \"react\";\r\nimport { ImageBackground } from \"../../../Shared/Components/Presentational/Backgrounds\";\r\nimport {\r\n SecondaryButton,\r\n OutlineButton,\r\n} from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport {\r\n ButtonContainer,\r\n InputContainer,\r\n} from \"../../../Shared/Components/Presentational/Containers\";\r\nimport { Translation } from \"react-i18next\";\r\nimport \"./Login.scss\";\r\nimport { Link, Redirect } from \"react-router-dom\";\r\nimport classNames from \"classnames\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport GoogleLogin from \"react-google-login\";\r\nimport { googleClientId, facebookAppId } from \"../../../Shared/Environment\";\r\n//@ts-ignore\r\nimport FacebookLogin from \"react-facebook-login/dist/facebook-login-render-props\";\r\nimport DropdownList from \"../../../Shared/Components/Presentational/DropdownList\";\r\n\r\ninterface LoginState {\r\n emailAddress: string;\r\n password: string;\r\n isRegister: boolean;\r\n}\r\n\r\ninterface LoginProps {\r\n loginClick: (email: string, password: string, type: string) => void;\r\n isLoggingIn: boolean;\r\n loginFailureMessage: string;\r\n sessionHasExpired: boolean;\r\n parksLoading: boolean;\r\n availableParks: DropdownListOption[];\r\n selectedParkCode: string | undefined;\r\n parkSelected: (parkOption: DropdownListOption) => void;\r\n useParkSelection: boolean;\r\n}\r\n\r\nclass LoginPageMobile extends Component {\r\n constructor(props: LoginProps) {\r\n super(props);\r\n\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.responseGoogle = this.responseGoogle.bind(this);\r\n this.responseFacebook = this.responseFacebook.bind(this);\r\n }\r\n\r\n public state: LoginState = {\r\n emailAddress: \"\",\r\n password: \"\",\r\n isRegister: false,\r\n };\r\n\r\n private handleChange(e: ChangeEvent) {\r\n const { name, value } = e.target;\r\n this.setState({ [name]: value } as any);\r\n }\r\n\r\n private handleSubmit(e: FormEvent) {\r\n e.preventDefault();\r\n\r\n const user = this.state;\r\n if (user.emailAddress && user.password) {\r\n this.props.loginClick(user.emailAddress, user.password, \"email\");\r\n }\r\n }\r\n\r\n private responseGoogle(response: any) {\r\n if (response.tokenId) {\r\n this.props.loginClick(\"\", response.tokenId, \"google\");\r\n }\r\n }\r\n\r\n private responseFacebook(response: any) {\r\n if (response.accessToken) {\r\n this.props.loginClick(\"\", response.accessToken, \"facebook\");\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.isRegister) {\r\n return ;\r\n }\r\n\r\n return (\r\n \r\n \r\n {(t: (key: string) => string) => {\r\n return (\r\n <>\r\n
\r\n {this.props.useParkSelection && (\r\n \r\n \r\n p.value == this.props.selectedParkCode\r\n )}\r\n />\r\n \r\n )}\r\n
\r\n\r\n {(!this.props.useParkSelection || this.props.selectedParkCode) && (\r\n <>\r\n
\r\n {/*
disabled as broken\r\n (\r\n \r\n \r\n \r\n Continue with Facebook\r\n \r\n \r\n )}\r\n />\r\n
*/}\r\n
\r\n (\r\n \r\n \r\n \r\n Continue with Google\r\n \r\n \r\n )}\r\n onSuccess={this.responseGoogle}\r\n onFailure={this.responseGoogle}\r\n />\r\n
\r\n
\r\n \r\n or\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n {\r\n \r\n {t(\"login.forgotPasswordLink\")}\r\n \r\n }\r\n
\r\n \r\n {this.props.sessionHasExpired\r\n ? t(\"login.sessionExpired\")\r\n : t(this.props.loginFailureMessage)}\r\n

\r\n \r\n \r\n \r\n

\r\n {t(\"login.dontHaveAccountTitle\")}\r\n

\r\n \r\n this.setState({ isRegister: true })}\r\n disabled={!this.props.selectedParkCode && this.props.useParkSelection}\r\n />\r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n }}\r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default LoginPageMobile;\r\n","import ContentfulClient from \"../ContentfulClient\";\r\n\r\nexport async function GetParksCall() {\r\n let filter = {\r\n content_type: \"park\",\r\n order: 'fields.name',\r\n select:[\r\n 'fields.name',\r\n 'fields.shortName',\r\n 'fields.code',\r\n 'fields.myHaulfrynShowSubletBookingValue',\r\n 'fields.myHaulfrynAllowPermissionDelegation',\r\n 'fields.emailAddress',\r\n 'fields.customerPortalUrl'\r\n ]\r\n };\r\n const result = await ContentfulClient.getEntries(filter);\r\n\r\n if (result.errors) {\r\n throw { message: \"GetParksCall returned error/s\", errors: result.errors };\r\n }\r\n return result.items;\r\n}\r\n","import ContentfulClient from \"../ContentfulClient\";\r\n\r\nexport async function GetSettingCall(key : string) {\r\n let filter ={\r\n content_type: 'setting',\r\n 'fields.key': key\r\n }\r\n\r\n const settings = await ContentfulClient.getEntries(filter);\r\n\r\n return settings.items[0]\r\n}","import React, { useEffect, useState } from \"react\";\r\nimport LoginPage from \"../Presentational/LoginPage\";\r\nimport WelcomePageMobile from \"../Presentational/WelcomePage.mobile\";\r\nimport LoginPageMobile from \"../Presentational/LoginPage.mobile\";\r\nimport {\r\n Desktop,\r\n Mobile,\r\n} from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { connect } from \"react-redux\";\r\nimport { login, goToLogin } from \"../../Redux/ActionCreators\";\r\nimport { Redirect, useLocation } from \"react-router\";\r\nimport { GetParksCall } from \"../../../Contentful/Calls/GetParksCall\";\r\nimport { GetSettingCall } from \"../../../Contentful/Calls/GetSettingCall\";\r\nimport { CustomerPortalUrls } from \"../../../Constants/Login/CustomerPortalUrls\";\r\nimport { Entry } from \"contentful\";\r\n\r\ninterface Props {\r\n loginClick: (email: string, password: string, type: string) => void;\r\n goToLoginClick: () => void;\r\n onWelcomePage: boolean;\r\n isLoggingIn: boolean;\r\n isLoggedIn: boolean;\r\n loginFailureMessage: string;\r\n location: any;\r\n sessionHasExpired: boolean;\r\n userRoles: UserRoleDTO[];\r\n}\r\n\r\ninterface LoginUrlParams {\r\n park?: string;\r\n}\r\n\r\nconst useQuery = () => new URLSearchParams(useLocation().search);\r\n\r\nconst Login = (props: Props) => {\r\n const {\r\n location,\r\n loginClick,\r\n goToLoginClick,\r\n isLoggedIn,\r\n isLoggingIn,\r\n loginFailureMessage,\r\n sessionHasExpired,\r\n onWelcomePage,\r\n } = props;\r\n\r\n const query = useQuery();\r\n\r\n const selectedParkContentfulCode = query.get(\"p\");\r\n const redirectUrl = query.get(\"r\");\r\n\r\n const [contentfulParks, setContentfulParks] = useState<\r\n Entry[]\r\n >([]);\r\n\r\n const [selectedParkCode, setSelectedParkCode] = useState();\r\n const [selectPark, setSelectPark] = useState(false);\r\n const [parksLoading, setParksLoading] = useState(false);\r\n const [availableParks, setAvailableParks] = useState(\r\n []\r\n );\r\n\r\n const getParks = async () => {\r\n setParksLoading(true);\r\n\r\n let selectParkString = await GetSettingCall('MyHaulfrynShowParkSelector');\r\n setSelectPark(selectParkString.fields.value.trim().toLowerCase() === 'true');\r\n\r\n let parks = await GetParksCall();\r\n let dropwDownParks = parks\r\n .filter((p) => !!p.fields.customerPortalUrl)\r\n .map((p) => {\r\n return {\r\n label: p.fields.name,\r\n value: p.fields.code,\r\n } as DropdownListOption;\r\n });\r\n\r\n if (selectedParkContentfulCode) {\r\n setSelectedParkCode(selectedParkContentfulCode);\r\n }\r\n\r\n setContentfulParks(parks);\r\n setAvailableParks(dropwDownParks);\r\n\r\n setParksLoading(false);\r\n };\r\n\r\n const parkSelected = (parkOption: DropdownListOption) => {\r\n let url = getPortalUrlFromParkCode(parkOption.value);\r\n\r\n if (url && url != window.location.origin) {\r\n url += `/Login?p=${parkOption.value}`;\r\n\r\n if (redirectUrl) {\r\n url += `&r=${redirectUrl}`;\r\n }\r\n\r\n setSelectedParkCode(undefined);\r\n window.open(url, \"_self\");\r\n return;\r\n }\r\n\r\n setSelectedParkCode(parkOption.value);\r\n };\r\n\r\n const getPortalUrlFromParkCode = (parkCode: string) => {\r\n const selectedContentfulPark = contentfulParks.find(\r\n (p) => p.fields.code == parkCode\r\n );\r\n\r\n if (!selectedContentfulPark) {\r\n return;\r\n }\r\n\r\n switch (selectedContentfulPark.fields.customerPortalUrl) {\r\n case CustomerPortalUrls.Url1:\r\n return process.env.REACT_APP_CUSTOMER_PORTAL_URL1;\r\n case CustomerPortalUrls.Url2:\r\n return process.env.REACT_APP_CUSTOMER_PORTAL_URL2;\r\n default:\r\n return;\r\n }\r\n };\r\n\r\n useEffect(() => {\r\n getParks();\r\n }, []);\r\n\r\n if (isLoggedIn) {\r\n return (\r\n \r\n );\r\n } else {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n {onWelcomePage ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n \r\n );\r\n }\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n onWelcomePage: state.login.onWelcomePage,\r\n isLoggingIn: state.login.loggingIn,\r\n isLoggedIn: state.login.loggedIn,\r\n loginFailureMessage: state.login.loginFailureMessage,\r\n sessionHasExpired: state.login.sessionHasExpired,\r\n userRoles: state.user.userRoles,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n loginClick: (email: string, password: string, type: string) => {\r\n dispatch(login(email, password, type));\r\n },\r\n goToLoginClick: () => {\r\n dispatch(goToLogin());\r\n },\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Login);\r\n","import React, { Component } from \"react\";\r\nimport { Route, Redirect } from \"react-router\";\r\nimport { connect } from \"react-redux\";\r\n\r\ninterface ProtectedRouteProps {\r\n protectedComponent: any;\r\n loggedIn: boolean;\r\n path: string;\r\n exact?: boolean;\r\n}\r\n\r\nclass ProtectedRoute extends Component {\r\n render() {\r\n return (\r\n {\r\n return this.props.loggedIn ? (\r\n \r\n ) : (\r\n \r\n );\r\n }}\r\n />\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n loggedIn: state.login.loggedIn,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps)(ProtectedRoute);\r\n","import React from 'react';\r\nimport './Fab.scss';\r\nimport { IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { ClickableIcon } from './Icons';\r\nimport classNames from 'classnames';\r\n\r\ninterface FabProps {\r\n icon: IconProp;\r\n clickAction: () => void;\r\n className: string;\r\n id?: string;\r\n}\r\n\r\nconst Fab: React.FC = props => {\r\n return (\r\n \r\n );\r\n};\r\n\r\nexport default Fab;\r\n","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetHotTubServiceTypesCall extends GetApiCall {\r\n constructor() {\r\n let url: string = \"account/hotTubServiceTypes\";\r\n\r\n super(url);\r\n }\r\n}","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetBookingTypesCall extends GetApiCall {\r\n constructor() {\r\n let url: string = \"account/bookingTypes\";\r\n\r\n super(url);\r\n }\r\n}","import classNames from 'classnames';\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ModalHeader } from '../../../Shared/Components/Presentational/Modal';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { Calendar, CalendarEvent } from '../../../Shared/Components/Presentational/Calendar';\r\nimport { Get, Post } from '../../../Api/ApiService';\r\nimport { PostSearchLodgeBookingsCall } from '../../../Api/Calls/PostSearchLodgeBookingsCall';\r\nimport { GetHotTubServiceTypesCall } from '../../../Api/Calls/GetHotTubServiceTypesCall';\r\nimport { GetBookingTypesCall } from '../../../Api/Calls/GetBookingTypesCall';\r\nimport moment from 'moment';\r\nimport DatePicker from 'react-datepicker';\r\nimport { NativeDatePicker } from '../../../Shared/Components/Presentational/NativeDatePicker';\r\nimport DropdownList from '../../../Shared/Components/Presentational/DropdownList';\r\nimport { isAfterDate } from '../../../Shared/Utilities/Validation';\r\n\r\n\r\n//@ts-ignore\r\nimport Chips from 'react-chips';\r\nimport Chip from '../../../Shared/Components/Presentational/Chip';\r\nimport { SIGFPE } from 'constants';\r\n\r\ninterface AddBookingModalBookingFormProps {\r\n className?: string;\r\n lodgeId: number;\r\n isOpen: boolean;\r\n startDate: string;\r\n startDateChange: (date: string) => void;\r\n endDate: string;\r\n endDateChange: (date: string) => void;\r\n hotTubServiceTypeId: string;\r\n hotTubServiceTypeChange: (type: DropdownListOption) => void,\r\n bookingTypeId: string;\r\n bookingTypeChange: (type: DropdownListOption) => void,\r\n addBookingErrorMessage: string | undefined;\r\n datesValid: boolean;\r\n setDatesValid: (datesValid: boolean) => void;\r\n calendarEvents: CalendarEvent[];\r\n setBookingFilter: (bookingFilter : any) => any;\r\n selectedDate?: Date;\r\n}\r\n\r\nconst AddBookingModalBookingForm: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n\r\n const [hotTubServiceTypes, setHotTubServiceTypes] = useState([]);\r\n const [bookingTypes, setBookingTypes] = useState([]);\r\n\r\n const [startDate, setStartDate] = useState(undefined);\r\n const [endDate, setEndDate] = useState(undefined);\r\n const [modalCalendarDate, setModalCalendarDate] = useState(props.selectedDate);\r\n\r\n const [startDateValid, setStartDateValid] = useState(true);\r\n const [endDateValid, setEndDateValid] = useState(true);\r\n \r\n\r\n useEffect(() => {\r\n async function popaulateInitialData() {\r\n\r\n if (props.startDate)\r\n setStartDate(moment(props.startDate, 'DD/MM/YYYY').toDate());\r\n\r\n if (props.endDate)\r\n setEndDate(moment(props.endDate, 'DD/MM/YYYY').toDate());\r\n\r\n const hotTubServiceTypes = await Get(new GetHotTubServiceTypesCall());\r\n const bookingTypes = await Get(new GetBookingTypesCall());\r\n\r\n setHotTubServiceTypes(\r\n hotTubServiceTypes.data.map((htst) => {\r\n return { label: htst.Name, value: htst.Id };\r\n })\r\n );\r\n setBookingTypes(\r\n bookingTypes.data.map((bt) => {\r\n return { label: bt.Name, value: bt.Id };\r\n })\r\n );\r\n }\r\n if (props.isOpen) {\r\n popaulateInitialData();\r\n }\r\n }, [props.isOpen]);\r\n\r\n const onRangeChange = (range: { start: any; end: any }) => {\r\n props.setBookingFilter((oldFilter: BookingFilterDTO) => ({\r\n ...oldFilter,\r\n FromDate: moment(range.start).format('DD/MM/YYYY'),\r\n ToDate: moment(range.end).format('DD/MM/YYYY'),\r\n }));\r\n };\r\n\r\n const hasBookingConflict = (): boolean => {\r\n return props.addBookingErrorMessage !== undefined && props.addBookingErrorMessage == 'EXISTING_BOOKING';\r\n };\r\n\r\n const handleStartDateInputChange = (date: Date | null) => {\r\n let dateString = '';\r\n let date2 = undefined;\r\n if (date !== null) {\r\n dateString = moment(date).format('DD/MM/YYYY');\r\n date2 = date;\r\n }\r\n\r\n props.startDateChange(dateString);\r\n\r\n setStartDate(date2);\r\n\r\n const validResult =\r\n date2 !== undefined &&\r\n isAfterDate(moment(date2).format('DD/MM/YYYY'), moment().add(2, 'days').format('DD/MM/YYYY'));\r\n setStartDateValid(validResult);\r\n props.setDatesValid(endDateValid || validResult);\r\n };\r\n\r\n const handleEndDateInputChange = (date: Date | null) => {\r\n let dateString = '';\r\n let date2 = undefined;\r\n if (date !== null) {\r\n dateString = moment(date).format('DD/MM/YYYY');\r\n date2 = date;\r\n }\r\n\r\n props.endDateChange(dateString);\r\n\r\n setEndDate(date2);\r\n\r\n const validResult =\r\n date2 !== undefined && isAfterDate(moment(date2).format('DD/MM/YYYY'), props.startDate);\r\n setEndDateValid(validResult);\r\n props.setDatesValid(startDateValid && validResult);\r\n\r\n\r\n };\r\n\r\n const minDate = moment().startOf('month').toDate();\r\n const maxDate = moment().add(12, 'month').endOf('month').toDate();\r\n\r\n return (\r\n
\r\n \r\n\r\n \r\n
\r\n setModalCalendarDate(date)}\r\n defaultDate={modalCalendarDate}\r\n />\r\n
\r\n
\r\n\r\n \r\n
\r\n setModalCalendarDate(date)}\r\n defaultDate={modalCalendarDate}\r\n />\r\n
\r\n
\r\n\r\n \r\n\r\n

\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n
\r\n \r\n o.value === props.bookingTypeId)\r\n }\r\n />\r\n
\r\n
\r\n \r\n o.value === props.hotTubServiceTypeId)\r\n }\r\n />\r\n
\r\n\r\n

\r\n {hasBookingConflict()\r\n ? t('myCalendar.addBooking.existingBooking')\r\n : props.addBookingErrorMessage\r\n ? t('myCalendar.addBooking.generalError')\r\n : ''}\r\n

\r\n )\r\n\r\n};\r\n\r\nexport default AddBookingModalBookingForm;","import React from 'react';\r\nimport './Chip.scss';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\ninterface ChipProps {\r\n onRemove: (chips: string[]) => void;\r\n chips: string[];\r\n isValid: boolean;\r\n}\r\n\r\nconst Chip: React.FC = props => {\r\n\r\n const handleRemove = (): void => {\r\n props.onRemove(props.chips);\r\n }\r\n\r\n return (\r\n
\r\n
{props.children}
\r\n
\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default Chip;","import classNames from 'classnames';\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ModalHeader } from '../../../Shared/Components/Presentational/Modal';\r\nimport { isInternationalPhoneNumber } from '../../../Shared/Utilities/Validation';\r\n\r\n\r\n//@ts-ignore\r\nimport Chips from 'react-chips';\r\nimport Chip from '../../../Shared/Components/Presentational/Chip';\r\n\r\ninterface AddBookingModalMobileNumbersFormProps {\r\n className?: string\r\n mobileNumbers: string[];\r\n setMobileNumbers: (mobileNumbers: string[]) => void;\r\n invalidMobileNumbers: string[];\r\n setInvalidMobileNumbers: (mobileNumbers: string[]) => void;\r\n showMobileNumbersError: boolean;\r\n setHasPendingMobileNumber: (hasPending: boolean) => void;\r\n hasPendingMobileNumber: boolean;\r\n}\r\n\r\nconst AddBookingModalMobileNumbersForm: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n\r\n const isChipValid = (chipValue: string): boolean => {\r\n return isInternationalPhoneNumber(chipValue);\r\n };\r\n\r\n const handleChipsChange = (chips: string[]) => {\r\n if(chips.length > props.mobileNumbers.length){\r\n props.setHasPendingMobileNumber(false)\r\n }\r\n props.setMobileNumbers(chips);\r\n \r\n if (chips.length > 0) {\r\n chips.forEach((chipValue) => {\r\n if (!isChipValid(chipValue)) {\r\n const existingIndex = props.invalidMobileNumbers.indexOf(chipValue);\r\n if (existingIndex == -1) {\r\n props.setInvalidMobileNumbers([...props.invalidMobileNumbers, ...[chipValue]]);\r\n }\r\n }\r\n });\r\n } else {\r\n props.setInvalidMobileNumbers([]);\r\n }\r\n };\r\n\r\n const renderSuggestions = (pendingChipValue: string) =>{\r\n if(pendingChipValue){\r\n props.setHasPendingMobileNumber(true)\r\n } else{\r\n props.setHasPendingMobileNumber(false)\r\n }\r\n }\r\n\r\n return (\r\n
\r\n \r\n

\r\n (\r\n \r\n {value}\r\n \r\n )}\r\n />\r\n

Please press tab or enter to proceed

\r\n

\r\n {t('myCalendar.addBooking.mobileNumberError')}\r\n

\r\n )\r\n\r\n};\r\n\r\nexport default AddBookingModalMobileNumbersForm;","import classNames from 'classnames';\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ModalHeader } from '../../../Shared/Components/Presentational/Modal';\r\nimport { isInternationalPhoneNumber } from '../../../Shared/Utilities/Validation';\r\n\r\ninterface AddBookingModalMobileNumbersFormProps {\r\n className?: string\r\n carRegistrationNumber1: string;\r\n carRegistrationNumber1Change: (val: string) => void;\r\n carRegistrationNumber2: string;\r\n carRegistrationNumber2Change: (val: string) => void;\r\n}\r\n\r\nconst AddBookingModalMobileNumbersForm: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n\r\n return (\r\n
\r\n \r\n

\r\n
\r\n \r\n props.carRegistrationNumber1Change(e.target.value.toUpperCase())}\r\n placeholder={t('myCalendar.addBooking.vehicleNumber1Placeholder')}\r\n />\r\n
\r\n
\r\n \r\n props.carRegistrationNumber2Change(e.target.value.toUpperCase())}\r\n placeholder={t('myCalendar.addBooking.vehicleNumber2Placeholder')}\r\n />\r\n
\r\n )\r\n\r\n};\r\n\r\nexport default AddBookingModalMobileNumbersForm;","export default class AddBookingsModalForms {\r\n public static BookingForm: number = 0;\r\n public static MobileNumbersForm: number = 1;\r\n public static VehicleAccessForm: number = 2;\r\n}","import classNames from 'classnames';\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { Modal, ModalFooter, ModalProps } from '../../../Shared/Components/Presentational/Modal';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport './AddBookingModal.scss';\r\nimport AddBookingModalBookingForm from './AddBookingModalBookingForm';\r\nimport AddBookingModalMobileNumbersForm from './AddBookingModalMobileNumbersForm';\r\nimport AddBookingModalVehicleAccessForm from './AddBookingModalVehicleAccessForm';\r\nimport AddBookingsModalForms from '../../../Constants/Calendar/AddBookingsModalForms';\r\nimport { CalendarEvent } from '../../../Shared/Components/Presentational/Calendar';\r\nimport { Get, Post } from '../../../Api/ApiService';\r\nimport { PostSearchLodgeBookingsCall } from '../../../Api/Calls/PostSearchLodgeBookingsCall';\r\nimport moment from 'moment';\r\nimport { ConfirmModal } from '../../../Shared/Components/Presentational/Modal';\r\n\r\n//@ts-ignore\r\nimport Chips from 'react-chips';\r\nimport Chip from '../../../Shared/Components/Presentational/Chip';\r\n\r\ninterface AddBookingModalProps extends ModalProps {\r\n toggleBookingModal: (isOpen: boolean) => void;\r\n addBooking: (booking: BookingDTO) => void;\r\n toggleBookingSuccessModal: (isOpen: boolean) => void;\r\n lodgeId: number;\r\n addBookingErrorMessage: undefined | string;\r\n setAddingBookingErrorMessage: (message: any) => void;\r\n hasANPRFeature: boolean;\r\n selectedDate?: Date;\r\n accountId: number;\r\n}\r\n\r\nconst AddBookingModal: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n\r\n const [newBookingDetails, setnewBookingDetails] = useState({\r\n StartDate: '',\r\n EndDate: '',\r\n HotTubServiceTypeId: '',\r\n BookingTypeId: '',\r\n PhoneNumbers: [],\r\n CarRegistrationNumber1: '',\r\n CarRegistrationNumber2: '',\r\n AccountId: props.accountId,\r\n });\r\n\r\n const [isNoVehiclesModalOpen, setIsNoVehiclesModalOpen] = useState(false);\r\n const [isNoPhoneNumbersModalOpen, setIsNoPhoneNumbersModalOpen] = useState(false);\r\n const [calendarEvents, setCalendarEvents] = useState([]);\r\n const [datesValid, setDatesValid] = useState(true);\r\n const [modalCurrentForm, setModalCurrentForm] = useState(AddBookingsModalForms.BookingForm);\r\n const [mobileNumbers, setMobileNumbers] = useState([]);\r\n const [invalidMobileNumbers, setInvalidMobileNumbers] = useState([]);\r\n const [hasPendingMobileNumber, setHasPendingMobileNumber] = useState(false);\r\n const [showMobileNumbersError, setShowMobileNumbersError] = useState(false);\r\n const [bookingFilter, setBookingFilter] = useState({\r\n LodgeId: props.lodgeId,\r\n FromDate: moment().startOf('month').startOf('week').format('DD/MM/YYYY'),\r\n ToDate: moment().endOf('month').endOf('week').format('DD/MM/YYYY'),\r\n });\r\n\r\n useEffect(() => {\r\n if (props.isOpen) {\r\n setnewBookingDetails({\r\n StartDate: '',\r\n EndDate: '',\r\n HotTubServiceTypeId: '',\r\n BookingTypeId: '',\r\n PhoneNumbers: [],\r\n CarRegistrationNumber1: '',\r\n CarRegistrationNumber2: '',\r\n AccountId: props.accountId,\r\n });\r\n }\r\n }, [props.isOpen]);\r\n\r\n useEffect(() => {\r\n setShowMobileNumbersError(invalidMobileNumbers.length > 0);\r\n }, [invalidMobileNumbers]);\r\n\r\n useEffect(() => {\r\n const currentInvalidNumbers = invalidMobileNumbers.filter((num) => {\r\n return mobileNumbers.indexOf(num) > -1;\r\n });\r\n\r\n setInvalidMobileNumbers(currentInvalidNumbers);\r\n }, [mobileNumbers]);\r\n\r\n useEffect(() => {\r\n async function searchBookings() {\r\n const bookings = await Post(new PostSearchLodgeBookingsCall(bookingFilter));\r\n\r\n const calendarBookings: CalendarEvent[] = bookings.data.map((booking) => {\r\n return {\r\n allDay: true,\r\n start: booking.FromDate,\r\n end: booking.ToDate,\r\n resourceId: booking.IsOwnerBooking ? 2 : 1,\r\n className: booking.IsOwnerBooking ? 'my-holidays' : 'sublet-bookings',\r\n };\r\n });\r\n\r\n setCalendarEvents(calendarBookings);\r\n }\r\n\r\n if (props.isOpen) {\r\n searchBookings();\r\n }\r\n }, [bookingFilter, props.isOpen]);\r\n\r\n const handleProceed = async () => {\r\n switch (modalCurrentForm) {\r\n case AddBookingsModalForms.VehicleAccessForm:\r\n if (newBookingDetails.CarRegistrationNumber1 || newBookingDetails.CarRegistrationNumber1) {\r\n addBooking();\r\n } else {\r\n setIsNoVehiclesModalOpen(true);\r\n }\r\n break;\r\n case AddBookingsModalForms.MobileNumbersForm:\r\n if (mobileNumbers.length > 0) {\r\n if (!props.hasANPRFeature) {\r\n addBooking();\r\n } else {\r\n setModalCurrentForm(modalCurrentForm + 1);\r\n }\r\n } else {\r\n setIsNoPhoneNumbersModalOpen(true);\r\n }\r\n break;\r\n default:\r\n setModalCurrentForm(modalCurrentForm + 1);\r\n break;\r\n }\r\n };\r\n const addBooking = () => {\r\n newBookingDetails.PhoneNumbers = mobileNumbers;\r\n props.addBooking(newBookingDetails);\r\n setMobileNumbers([]);\r\n setInvalidMobileNumbers([]);\r\n setModalCurrentForm(AddBookingsModalForms.BookingForm);\r\n };\r\n\r\n const noVehiclesModalClose = (confirmed: boolean) => {\r\n setIsNoVehiclesModalOpen(false);\r\n if (confirmed) {\r\n addBooking();\r\n }\r\n };\r\n\r\n const noPhoneNumbersModalClose = (confirmed: boolean) => {\r\n setIsNoPhoneNumbersModalOpen(false);\r\n if (confirmed) {\r\n if (!props.hasANPRFeature) {\r\n addBooking();\r\n } else {\r\n setModalCurrentForm(modalCurrentForm + 1);\r\n }\r\n }\r\n };\r\n\r\n const handleStartDateChange = (dateString: string) => {\r\n setnewBookingDetails((prev: any) => {\r\n return { ...prev, StartDate: dateString };\r\n });\r\n props.setAddingBookingErrorMessage(undefined);\r\n };\r\n\r\n const handleEndDateChange = (dateString: string) => {\r\n setnewBookingDetails((prev: any) => {\r\n return { ...prev, EndDate: dateString };\r\n });\r\n props.setAddingBookingErrorMessage(undefined);\r\n };\r\n\r\n const handleHotTubServiceChange = (selectedOption: DropdownListOption) => {\r\n setnewBookingDetails((prev: any) => {\r\n return { ...prev, HotTubServiceTypeId: selectedOption.value };\r\n });\r\n };\r\n\r\n const handleBookingTypeChange = (selectedOption: DropdownListOption) => {\r\n setnewBookingDetails((prev: any) => {\r\n return { ...prev, BookingTypeId: selectedOption.value };\r\n });\r\n };\r\n\r\n const handleCarRegistrationNumber1Change = (val: string) => {\r\n setnewBookingDetails((prev: any) => {\r\n return { ...prev, CarRegistrationNumber1: val };\r\n });\r\n };\r\n\r\n const handleCarRegistrationNumber2Change = (val: string) => {\r\n setnewBookingDetails((prev: any) => {\r\n return { ...prev, CarRegistrationNumber2: val };\r\n });\r\n };\r\n\r\n const handleBackButton = () => {\r\n if (modalCurrentForm === AddBookingsModalForms.BookingForm) {\r\n setMobileNumbers([]);\r\n setInvalidMobileNumbers([]);\r\n props.toggleBookingModal(false);\r\n } else {\r\n setModalCurrentForm(modalCurrentForm - 1);\r\n }\r\n };\r\n\r\n const formIsValid = (): boolean => {\r\n switch (modalCurrentForm) {\r\n case AddBookingsModalForms.BookingForm:\r\n return (\r\n newBookingDetails.StartDate.length > 0 &&\r\n newBookingDetails.EndDate.length > 0 &&\r\n newBookingDetails.BookingTypeId.length > 0 &&\r\n newBookingDetails.HotTubServiceTypeId.length > 0 &&\r\n datesValid\r\n );\r\n case AddBookingsModalForms.MobileNumbersForm:\r\n return invalidMobileNumbers.length == 0 && !hasPendingMobileNumber;\r\n case AddBookingsModalForms.VehicleAccessForm:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n {modalCurrentForm == AddBookingsModalForms.BookingForm && (\r\n \r\n )}\r\n {modalCurrentForm == AddBookingsModalForms.MobileNumbersForm && (\r\n \r\n )}\r\n {modalCurrentForm == AddBookingsModalForms.VehicleAccessForm && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {modalCurrentForm == AddBookingsModalForms.BookingForm && (\r\n \r\n )}\r\n {modalCurrentForm == AddBookingsModalForms.MobileNumbersForm && (\r\n \r\n )}\r\n {modalCurrentForm == AddBookingsModalForms.VehicleAccessForm && (\r\n \r\n )}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default AddBookingModal;\r\n","import classNames from 'classnames';\r\nimport React, { useState, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { Modal, ModalFooter, ModalProps } from '../../../Shared/Components/Presentational/Modal';\r\nimport './AddBookingModal.scss';\r\nimport AddBookingModalBookingForm from './AddBookingModalBookingForm';\r\nimport AddBookingModalMobileNumbersForm from './AddBookingModalMobileNumbersForm';\r\nimport AddBookingModalVehicleAccessForm from './AddBookingModalVehicleAccessForm';\r\nimport AddBookingsModalForms from '../../../Constants/Calendar/AddBookingsModalForms';\r\nimport { CalendarEvent } from '../../../Shared/Components/Presentational/Calendar';\r\nimport { Get, Post } from '../../../Api/ApiService';\r\nimport { PostSearchLodgeBookingsCall } from '../../../Api/Calls/PostSearchLodgeBookingsCall';\r\nimport moment from 'moment';\r\nimport { ConfirmModal } from '../../../Shared/Components/Presentational/Modal';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTimes, faCoins} from '@fortawesome/free-solid-svg-icons';\r\n\r\n\r\n//@ts-ignore\r\nimport Chips from 'react-chips';\r\nimport Chip from '../../../Shared/Components/Presentational/Chip';\r\n\r\ninterface SubletBookingInfoModalProps extends ModalProps {\r\n selectedCalendarEvent: CalendarEvent;\r\n setSelectedCalendarEvent: (event: CalendarEvent | undefined) => any\r\n}\r\n\r\nconst SubletBookingInfoModal: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n\r\n const handleBackButton = () => {\r\n props.setSelectedCalendarEvent(undefined);\r\n };\r\n \r\n\r\n let bookingStartDate =null;\r\n let bookingDuration = null;\r\n\r\n if(props.selectedCalendarEvent ){\r\n bookingStartDate = props.selectedCalendarEvent.start ? moment(props.selectedCalendarEvent.start) : null;\r\n bookingDuration = bookingStartDate && props.selectedCalendarEvent.end ? moment(props.selectedCalendarEvent.end).diff(props.selectedCalendarEvent.start, \"days\") : null;\r\n }\r\n\r\n return (\r\n <>\r\n {props.selectedCalendarEvent && \r\n
\r\n
\r\n \r\n
\r\n

\r\n {bookingStartDate ? bookingStartDate.format(\"DD MMM YYYY\") : '-'} \r\n {bookingDuration && bookingDuration > 0? ` for ${bookingDuration} night/s` : ''}\r\n

\r\n
\r\n {(props.selectedCalendarEvent.subletIncome != undefined || props.selectedCalendarEvent.subletCharges != undefined) ? (\r\n <>\r\n {t('myCalendar.subletBookingInfo.subletValue')}\r\n

{props.selectedCalendarEvent.subletIncome != undefined? `£${props.selectedCalendarEvent.subletIncome!.toFixed(2)}` : \"-\"}

\r\n {/* {t('myCalendar.subletBookingInfo.cleaningFee')}\r\n

{props.selectedCalendarEvent.subletCharges != undefined? `£${props.selectedCalendarEvent.subletCharges!.toFixed(2)}` : \"-\"}

*/}\r\n

{t('myCalendar.subletBookingInfo.note')}

\r\n \r\n ) :

{t('myCalendar.subletBookingInfo.bookingPending')}

}\r\n
\r\n \r\n
\r\n
}\r\n \r\n );\r\n};\r\n\r\nexport default SubletBookingInfoModal;\r\n","import React, { Component } from 'react';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { Calendar, CalendarEvent, CalendarResource } from '../../../Shared/Components/Presentational/Calendar';\r\nimport './MyCalendarPage.scss';\r\nimport { Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport CalendarListWidget from '../Container/CalendarListWidget';\r\nimport MyCalendarListHeader from '../Container/MyCalendarListHeader';\r\nimport { SelectedCalendarWidgetOptions } from '../../Redux/ActionTypes';\r\nimport ReservationLinks from '../Container/ReservationLinks';\r\nimport Fab from '../../../Shared/Components/Presentational/Fab';\r\nimport { faPlus } from '@fortawesome/free-solid-svg-icons';\r\nimport AddBookingModal from './AddBookingModal';\r\nimport { SuccessModal } from '../../../Shared/Components/Presentational/Modal';\r\nimport SubletBookingInfoModal from './SubletBookingInfoModal';\r\n\r\ninterface MyCalendarPageProps extends WithTranslation {\r\n minDate: Date;\r\n maxDate: Date;\r\n calendarDate?: Date | undefined;\r\n events: CalendarEvent[];\r\n resources: CalendarResource[];\r\n selectedWidget: SelectedCalendarWidgetOptions;\r\n isHeaderOpen: boolean;\r\n toogleBookingModal: (isOpen: boolean) => void;\r\n isAddBookingModalOpen: boolean;\r\n addBooking: (booking: BookingDTO) => void;\r\n toggleBookingSuccessModal: (isOpen: boolean) => void;\r\n isAddBookingSuccessModalOpen: boolean;\r\n onRangeChange?: (range: { start: any; end: any }) => void;\r\n onNavigate?: (date: Date) => void;\r\n lodgeId: number;\r\n addBookingErrorMessage: undefined | string;\r\n setAddingBookingErrorMessage: (message: any) => void;\r\n hasANPRFeature: boolean;\r\n accountId: number;\r\n selectedCalendarEvent?: CalendarEvent;\r\n setSelectedCalendarEvent: (event: CalendarEvent | undefined) => any\r\n clickableEvents: boolean;\r\n}\r\n\r\nclass MyCalendarPage extends Component {\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n \r\n return (\r\n <>\r\n
\r\n {!this.props.isHeaderOpen && (\r\n <>\r\n

{t('myCalendar.title')}

\r\n

{t('myCalendar.message')}

\r\n \r\n )}\r\n \r\n this.props.toogleBookingModal(true)}\r\n className=\"add-booking\"\r\n />\r\n \r\n

{t('myCalendar.guarantee')}

\r\n \r\n \r\n \r\n \r\n }}\r\n />\r\n
\r\n\r\n \r\n\r\n {\r\n this.props.toogleBookingModal(false);\r\n this.props.toggleBookingSuccessModal(false);\r\n }}\r\n importantInfo={t('myCalendar.addBooking.bookingSuccessImportantInfo')}\r\n title={t('myCalendar.addBooking.bookingSuccessTitle')}\r\n message={t('myCalendar.addBooking.bookingSuccessMessage')}\r\n buttonText={t('general.ok')}\r\n />\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(MyCalendarPage);\r\n","import React, { Component } from 'react';\r\nimport { Calendar, CalendarEvent, CalendarResource } from '../../../Shared/Components/Presentational/Calendar';\r\nimport { Translation } from 'react-i18next';\r\nimport { Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport CalendarListWidget from '../Container/CalendarListWidget';\r\nimport MyCalendarListHeader from '../Container/MyCalendarListHeader';\r\nimport ReservationLinks from '../Container/ReservationLinks';\r\nimport Fab from '../../../Shared/Components/Presentational/Fab';\r\nimport { faPlus } from '@fortawesome/free-solid-svg-icons';\r\nimport { SuccessModal } from '../../../Shared/Components/Presentational/Modal';\r\nimport AddBookingModal from './AddBookingModal';\r\nimport SubletBookingInfoModal from './SubletBookingInfoModal';\r\n\r\ninterface MyCalendarPageMobileProps {\r\n minDate: Date;\r\n maxDate: Date;\r\n events: CalendarEvent[];\r\n resources: CalendarResource[];\r\n isHeaderOpen: boolean;\r\n toggleBookingModal: (isOpen: boolean) => void;\r\n isAddBookingModalOpen: boolean;\r\n addBooking: (booking: BookingDTO) => void;\r\n toggleBookingSuccessModal: (isOpen: boolean) => void;\r\n isAddBookingSuccessModalOpen: boolean;\r\n onRangeChange?: (range: { start: any; end: any }) => void;\r\n onNavigate?: (date: Date) => void;\r\n lodgeId: number;\r\n accountId: number;\r\n addBookingErrorMessage: undefined | string;\r\n setAddingBookingErrorMessage: (message: any) => void;\r\n hasANPRFeature: boolean;\r\n calendarDate?: Date;\r\n selectedCalendarEvent?: CalendarEvent;\r\n setSelectedCalendarEvent: (event: CalendarEvent | undefined) => any;\r\n clickableEvents: boolean;\r\n}\r\n\r\nclass MyCalendarPageMobile extends Component {\r\n public render(): JSX.Element {\r\n return (\r\n \r\n {(t: (key: string) => string) => {\r\n return (\r\n <>\r\n
\r\n

{t('myCalendar.title')}

\r\n

{t('myCalendar.message')}

\r\n this.props.toggleBookingModal(true)}\r\n className=\"add-booking\"\r\n />\r\n \r\n \r\n

{t('myCalendar.guarantee')}

\r\n \r\n \r\n \r\n \r\n \r\n ),\r\n }}\r\n />\r\n
\r\n\r\n \r\n\r\n {\r\n this.props.toggleBookingSuccessModal(false);\r\n this.props.toggleBookingModal(false);\r\n }}\r\n importantInfo={t('myCalendar.addBooking.bookingSuccessImportantInfo')}\r\n title={t('myCalendar.addBooking.bookingSuccessTitle')}\r\n message={t('myCalendar.addBooking.bookingSuccessMessage')}\r\n buttonText={t('general.ok')}\r\n />\r\n \r\n \r\n );\r\n }}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default MyCalendarPageMobile;\r\n","export default class PassFunctionalityTypes {\r\n public static SeasonOwner: string = 'SeasonOwner';\r\n public static SeasonResort: string = 'SeasonResort';\r\n public static Car: string = 'Car';\r\n public static ShortStay: string = 'ShortStay';\r\n public static OwnerMembership: string = 'OwnerMembership';\r\n public static ResortMembership: string = 'ResortMembership';\r\n}\r\n","import React, { Component } from 'react';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { connect } from 'react-redux';\r\nimport MyCalendarPage from '../Presentational/MyCalendarPage';\r\nimport MyCalendarPageMobile from '../Presentational/MyCalendarPage.mobile';\r\nimport { CalendarEvent, CalendarResource } from '../../../Shared/Components/Presentational/Calendar';\r\nimport moment from 'moment';\r\nimport { AppState } from '../../../RootReducer';\r\nimport {\r\n SelectedCalendarWidgetOptions,\r\n SET_IS_ADD_BOOKING_MODAL_OPEN,\r\n SET_IS_ADD_BOOKING_SUCCES_MODAL_OPEN,\r\n SET_ADD_BOOKING_ERROR_MESSAGE,\r\n} from '../../Redux/ActionTypes';\r\nimport { addBooking } from '../../Redux/ActionCreators';\r\nimport { PostSearchLodgeBookingsCall } from '../../../Api/Calls/PostSearchLodgeBookingsCall';\r\nimport { Post, Get } from '../../../Api/ApiService';\r\nimport { RELOAD_TRANSLATIONS } from '../../../Information/Redux/ActionTypes';\r\nimport PassFunctionalityTypes from '../../../Constants/PassFunctionalityTypes';\r\nimport { GetParkPassTypesCall } from '../../../Api/Calls/GetParkPassTypesCall';\r\nimport { GetParkCall } from '../../../Contentful/Calls/GetParkCall';\r\nimport { Entry } from 'contentful';\r\n\r\ninterface MyCalendarProps {\r\n dispatch: any;\r\n selectedWidget: SelectedCalendarWidgetOptions;\r\n isHeaderOpen: boolean;\r\n toggleBookingModal: (isOpen: boolean) => void;\r\n isAddBookingModalOpen: boolean;\r\n isAddBookingSuccessModalOpen: boolean;\r\n addBooking: (booking: BookingDTO) => void;\r\n toggleBookingSuccessModal: (isOpen: boolean) => void;\r\n lodgeId: number;\r\n accountId: number;\r\n addBookingErrorMessage: undefined | string;\r\n setAddingBookingErrorMessage: (message: any) => void;\r\n selectedPark: any;\r\n}\r\n\r\ninterface MyCalendarState {\r\n minDate: Date;\r\n maxDate: Date;\r\n calendarDate: Date | undefined;\r\n events: CalendarEvent[];\r\n resources: CalendarResource[];\r\n filter: BookingFilterDTO;\r\n parkPassTypes: ParkPassTypeDTO[];\r\n selectedEvent?: CalendarEvent;\r\n contentfulParkData?: Entry;\r\n}\r\n\r\nclass MyCalendar extends Component {\r\n public state: MyCalendarState = {\r\n minDate: moment().subtract(4, 'months').toDate(),\r\n maxDate: moment().add(12, 'months').toDate(),\r\n calendarDate: undefined,\r\n events: [],\r\n parkPassTypes: [],\r\n selectedEvent: undefined,\r\n contentfulParkData: undefined,\r\n resources: [\r\n {\r\n id: 1,\r\n title: 'myCalendar.key.subletbookings',\r\n className: 'sublet-bookings',\r\n },\r\n {\r\n id: 2,\r\n title: 'myCalendar.key.showMyHolidays',\r\n className: 'my-holidays',\r\n canToggle: true,\r\n toggleValue: true,\r\n },\r\n {\r\n id: 3,\r\n title: 'myCalendar.key.showMyPendingHolidays',\r\n className: 'my-holidays pending',\r\n canToggle: true,\r\n toggleValue: true,\r\n },\r\n ],\r\n filter: {\r\n LodgeId: this.props.lodgeId,\r\n FromDate: moment().startOf('month').startOf('week').format('DD/MM/YYYY'),\r\n ToDate: moment().endOf('month').endOf('week').format('DD/MM/YYYY'),\r\n },\r\n };\r\n\r\n componentDidMount() {\r\n this.getContentfulParkDetails();\r\n this.searchBookings();\r\n this.getParkPassTypes();\r\n this.props.dispatch({ type: RELOAD_TRANSLATIONS });\r\n }\r\n\r\n componentDidUpdate(prevProps: MyCalendarProps) {\r\n if (prevProps.isAddBookingModalOpen && !this.props.isAddBookingModalOpen) {\r\n this.searchBookings();\r\n }\r\n }\r\n\r\n getContentfulParkDetails = async ()=>{\r\n const contentfulPark = await GetParkCall(this.props.selectedPark.parkCode);\r\n this.setState({ contentfulParkData: contentfulPark})\r\n }\r\n\r\n searchBookings = async () => {\r\n try {\r\n const bookings = await Post(new PostSearchLodgeBookingsCall(this.state.filter));\r\n\r\n const calendarBookings: CalendarEvent[] = bookings.data.map((booking) => {\r\n return {\r\n allDay: true,\r\n start: booking.FromDate,\r\n end: moment(booking.ToDate).endOf('day').format() as any,\r\n resourceId: booking.IsOwnerBooking ? (booking.IsPendingBooking ? 3 : 2) : 1,\r\n subletCharges: booking.SubletCharges,\r\n subletIncome: booking.SubletIncome,\r\n isSubletBooking: !booking.IsOwnerBooking,\r\n className: booking.IsOwnerBooking\r\n ? booking.IsPendingBooking\r\n ? 'my-holidays pending'\r\n : 'my-holidays'\r\n : 'sublet-bookings',\r\n };\r\n });\r\n this.setState({ events: calendarBookings });\r\n } catch {}\r\n };\r\n\r\n getParkPassTypes = async () => {\r\n Get(\r\n new GetParkPassTypesCall(\r\n this.props.selectedPark.parkCode,\r\n this.props.lodgeId.toString(),\r\n this.props.accountId\r\n )\r\n ).then((response) => {\r\n this.setState({ parkPassTypes: response.data });\r\n });\r\n };\r\n\r\n hasANPRFeature = () => {\r\n return this.state.parkPassTypes.map((p) => p.FunctionalityCode).includes(PassFunctionalityTypes.Car);\r\n };\r\n\r\n onRangeChange = (range: { start: any; end: any }) => {\r\n this.setState(\r\n {\r\n filter: {\r\n ...this.state.filter,\r\n FromDate: moment(range.start).format('DD/MM/YYYY'),\r\n ToDate: moment(range.end).format('DD/MM/YYYY'),\r\n },\r\n },\r\n this.searchBookings\r\n );\r\n };\r\n\r\n onCalendarNavigate = (date: Date) => {\r\n this.setState({ calendarDate: date });\r\n };\r\n\r\n setSelectedCalendarEvent = (event?: CalendarEvent)=>{\r\n if(event && (this.state.contentfulParkData && !this.state.contentfulParkData.fields.myHaulfrynShowSubletBookingValue || !event.isSubletBooking)){\r\n return;\r\n }\r\n this.setState({ selectedEvent: event} )\r\n };\r\n\r\n public render(): JSX.Element {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: AppState) => ({\r\n selectedWidget: state.calendar.selectedCalendarWidget,\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n isAddBookingModalOpen: state.calendar.isAddBookingModalOpen,\r\n isAddBookingSuccessModalOpen: state.calendar.isAddBookingSuccessModalOpen,\r\n lodgeId: state.user.lodge.LodgeId,\r\n accountId: state.user.lodge.AccountId,\r\n addBookingErrorMessage: state.calendar.addBookingErrorMessage,\r\n selectedPark: state.user.park,\r\n});\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n toggleBookingModal: (isOpen: boolean) => dispatch({ type: SET_IS_ADD_BOOKING_MODAL_OPEN, payload: isOpen }),\r\n toggleBookingSuccessModal: (isOpen: boolean) =>\r\n dispatch({ type: SET_IS_ADD_BOOKING_SUCCES_MODAL_OPEN, payload: isOpen }),\r\n addBooking: (booking: BookingDTO) => dispatch(addBooking(booking)),\r\n setAddingBookingErrorMessage: (message: any) => {\r\n dispatch({ type: SET_ADD_BOOKING_ERROR_MESSAGE, payload: message });\r\n },\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MyCalendar);\r\n","export default class TableFilterPosition {\r\n public static Inline: string = 'Inline';\r\n public static Below: string = 'Below';\r\n}\r\n","import React, { Component, ReactNode, FC } from \"react\";\r\nimport \"./Table.scss\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { Desktop, Mobile } from \"./ResponsiveViews\";\r\nimport InfiniteScroll from \"react-infinite-scroller\";\r\nimport TableFilterPosition from \"../../../Constants/TableFilterPosition\";\r\nimport classNames from \"classnames\";\r\nimport { TextAlignProperty } from \"csstype\";\r\nimport { EditIcon } from \"./Icons\";\r\n\r\n\r\nexport interface CustomColumnCellRendererProps {\r\n rowValue: any;\r\n clickAction?: (rowValue?: any) => void;\r\n t: any;\r\n filter: OrderedFilterDTO;\r\n globalCellProps?: any;\r\n}\r\n\r\nexport interface ColumnDefinition {\r\n fieldName: string;\r\n displayName: string;\r\n bold?: boolean;\r\n translateField?: boolean;\r\n customCellRenderer?: FC;\r\n canShowColumn?: (filter: OrderedFilterDTO) => boolean;\r\n customCellClickAction?: (item?: any) => any;\r\n fitContent?: boolean;\r\n headerAlignment?: TextAlignProperty;\r\n cellClassname?: string;\r\n headerClassname?: string;\r\n}\r\n\r\ninterface TableProps extends WithTranslation {\r\n title?: string;\r\n columns: ColumnDefinition[];\r\n pagedResults: PagedResultDTO;\r\n filter: OrderedFilterDTO;\r\n onFilterChange: (newFilter: OrderedFilterDTO) => void;\r\n pageSize: number;\r\n noResultsMessage?: string;\r\n filterComponent?: ReactNode;\r\n descriptionComponent?: ReactNode;\r\n filterPosition?: string;\r\n isLoading: boolean;\r\n onRowClick?: (rowValue: any) => void;\r\n globalCellProps?: any;\r\n}\r\n\r\nclass Table extends Component {\r\n public renderFilter(): JSX.Element {\r\n if (\r\n this.props.filterComponent &&\r\n (!this.props.filterPosition ||\r\n this.props.filterPosition === TableFilterPosition.Inline)\r\n ) {\r\n return
{this.props.filterComponent}
;\r\n } else if (\r\n this.props.descriptionComponent &&\r\n this.props.filterPosition &&\r\n this.props.filterPosition === TableFilterPosition.Below\r\n ) {\r\n return
{this.props.descriptionComponent}
;\r\n } else {\r\n return
;\r\n }\r\n }\r\n\r\n public renderDescription() {\r\n if (\r\n this.props.descriptionComponent &&\r\n (!this.props.filterPosition ||\r\n this.props.filterPosition === TableFilterPosition.Inline)\r\n ) {\r\n return (\r\n
{this.props.descriptionComponent}
\r\n );\r\n } else if (\r\n this.props.filterComponent &&\r\n this.props.filterPosition &&\r\n this.props.filterPosition === TableFilterPosition.Below\r\n ) {\r\n return
{this.props.filterComponent}
;\r\n } else {\r\n return
;\r\n }\r\n }\r\n\r\n public handleRowClick(rowValue: any) {\r\n if (this.props.onRowClick) {\r\n this.props.onRowClick(rowValue);\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const currentPage = this.props.filter.Page;\r\n const totalPages = this.getTotalPages();\r\n\r\n return (\r\n
\r\n \r\n {this.props.title && (\r\n
\r\n
\r\n
{this.props.title}
\r\n {this.renderFilter()}\r\n
\r\n {this.renderDescription()}\r\n
\r\n )}\r\n
\r\n {this.props.columns\r\n .filter((c) => (c.canShowColumn ? c.canShowColumn(this.props.filter): true))\r\n .map((column, i) => {\r\n return (\r\n \r\n {this.props.t(column.displayName)}\r\n
\r\n );\r\n })}\r\n
\r\n {this.props &&\r\n this.props.pagedResults &&\r\n this.props.pagedResults.Dtos.length ? (\r\n \r\n {this.props.t(\"general.loading\")}\r\n \r\n }\r\n >\r\n {this.props.pagedResults.Dtos.map((row, i) =>\r\n this.renderRows(this.props.t, row, i)\r\n )}\r\n \r\n ) : (\r\n
\r\n {this.props.noResultsMessage}\r\n
\r\n )}\r\n \r\n \r\n {this.props.title && (\r\n
{this.props.title}
\r\n )}\r\n {this.props.filterComponent ? (\r\n
\r\n {this.props.filterComponent}\r\n
\r\n ) : (\r\n
\r\n )}\r\n {this.props.descriptionComponent ? (\r\n
{this.props.descriptionComponent}
\r\n ) : (\r\n
\r\n )}\r\n {this.props &&\r\n this.props.pagedResults &&\r\n this.props.pagedResults.Dtos.length ? (\r\n \r\n {this.props.t(\"general.loading\")}\r\n \r\n }\r\n >\r\n {this.props.pagedResults.Dtos.map((row, i) =>\r\n this.renderRows(this.props.t, row, i)\r\n )}\r\n \r\n ) : (\r\n
\r\n {this.props.noResultsMessage}\r\n
\r\n )}\r\n
\r\n \r\n );\r\n }\r\n\r\n private renderRows(\r\n t: (key: string) => string,\r\n row: any,\r\n i: number\r\n ): JSX.Element {\r\n return (\r\n \r\n \r\n this.handleRowClick(row)}\r\n >\r\n {this.props.columns\r\n .filter((c) => (c.canShowColumn ? c.canShowColumn(this.props.filter): true))\r\n .map((column, x) => {\r\n return (\r\n \r\n {column.fieldName === \"editIcon\" && ({}}\r\n />)}\r\n {column.fieldName != \"editIcon\" && column.customCellRenderer\r\n ? React.createElement(column.customCellRenderer, {\r\n rowValue: row,\r\n clickAction: column.customCellClickAction,\r\n t,\r\n filter: this.props.filter,\r\n globalCellProps: this.props.globalCellProps,\r\n })\r\n : column.translateField\r\n ? t(row[column.fieldName])\r\n : row[column.fieldName]}\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n this.handleRowClick(row)}\r\n >\r\n {this.props.columns\r\n .filter((c) => (c.canShowColumn ? c.canShowColumn(this.props.filter): true))\r\n .map((column, x) => {\r\n return (\r\n \r\n {column.customCellRenderer\r\n ? React.createElement(column.customCellRenderer, {\r\n rowValue: row,\r\n clickAction: column.customCellClickAction,\r\n t,\r\n filter: this.props.filter,\r\n })\r\n : column.translateField\r\n ? t(row[column.fieldName])\r\n : row[column.fieldName]}\r\n \r\n );\r\n })}\r\n \r\n \r\n \r\n );\r\n }\r\n\r\n public goToPreviousPage(): void {\r\n if (this.props.filter.Page > 1) {\r\n const filter = { ...this.props.filter };\r\n\r\n filter.Page--;\r\n\r\n this.props.onFilterChange(filter);\r\n }\r\n }\r\n\r\n public goToNextPage(): void {\r\n const totalPages = this.getTotalPages();\r\n\r\n if (this.props.filter.Page < totalPages) {\r\n const filter = { ...this.props.filter };\r\n\r\n filter.Page++;\r\n filter.PageSize = this.props.pageSize;\r\n\r\n this.props.onFilterChange(filter);\r\n }\r\n }\r\n\r\n public appendNextPage(): void {\r\n if (!this.props || !this.props.pagedResults || this.props.isLoading) {\r\n return;\r\n }\r\n\r\n const totalPages = this.getTotalPages();\r\n\r\n if (this.props.filter.Page < totalPages) {\r\n const filter = { ...this.props.filter };\r\n\r\n filter.Page = 1;\r\n if (filter.PageSize < this.props.pageSize) {\r\n filter.PageSize = this.props.pageSize;\r\n } else {\r\n filter.PageSize += this.props.pageSize;\r\n }\r\n\r\n this.props.onFilterChange(filter);\r\n }\r\n }\r\n\r\n private getTotalPages(): number {\r\n return Math.max(\r\n 1,\r\n Math.ceil(this.props.pagedResults.Total / this.props.filter.PageSize)\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(Table);\r\n","import React, { Component } from 'react';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { SecondaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport './PassesFilter.scss';\r\nimport classNames from 'classnames';\r\n\r\ninterface PassesFilterProps extends WithTranslation {\r\n selectedFilter: ParkPassTypeDTO;\r\n filters: ParkPassTypeDTO[];\r\n onFilterSelected: (filter: ParkPassTypeDTO) => void;\r\n}\r\n\r\nclass PassesFilter extends Component {\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n return (\r\n
\r\n {this.props.filters.map((filter, i) => (\r\n \r\n ))}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(PassesFilter);\r\n","import React from 'react';\r\nimport './AddPassModalHeader.scss';\r\n\r\ninterface AddPassModalHeaderProps {\r\n headerText: string;\r\n}\r\n\r\nconst AddPassModalHeader: React.FC = props => {\r\n return

{props.headerText}

;\r\n};\r\n\r\nexport default AddPassModalHeader;","import React from 'react';\r\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons';\r\nimport { ClickableIcon } from '../../../Shared/Components/Presentational/Icons';\r\nimport { PrimaryButton, SecondaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { Translation } from 'react-i18next';\r\nimport './AddPassModalFooter.scss';\r\n\r\ninterface AddPassModalFooterProps {\r\n onBackButtonClick: () => void;\r\n submitDisabled: boolean;\r\n addAnotherDisabled: boolean;\r\n addAnotherClick?: () => void;\r\n helperText?: string;\r\n isRenew?: boolean;\r\n isLoading?:boolean;\r\n primaryButtonText: string;\r\n}\r\n\r\nconst AddPassModalFooter: React.FC = props => {\r\n return (\r\n \r\n {(t: (key: string) => string) => {\r\n return (\r\n <>\r\n
\r\n {!props.isRenew && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n
\r\n \r\n \r\n
\r\n\r\n {props.helperText &&

{props.helperText}

}\r\n
\r\n \r\n );\r\n }}\r\n
\r\n );\r\n};\r\n\r\nexport default AddPassModalFooter;\r\n","import { faEdit } from '@fortawesome/free-regular-svg-icons';\r\nimport { faCrop, faRedo, faTrash, faUpload } from '@fortawesome/free-solid-svg-icons';\r\nimport classNames from 'classnames';\r\nimport React, { useState, useRef } from 'react';\r\nimport { ClickableIcon } from './Icons';\r\nimport './ImageCropper.scss';\r\nimport 'react-image-crop/dist/ReactCrop.css';\r\nimport ReactCrop, {\r\n centerCrop,\r\n makeAspectCrop,\r\n Crop,\r\n PixelCrop,\r\n} from 'react-image-crop';\r\n\r\ninterface ImageCropperProps {\r\n photoUrl: string;\r\n PassPhotoSizeLimitInKb: number;\r\n onSizeError: () => void;\r\n onPhotoCrop: (photoFile: File | undefined) => void;\r\n}\r\n\r\nconst ImageCropper: React.FC = props => {\r\n const [crop, setCrop] = useState();\r\n const [completedCrop, setCompletedCrop] = useState();\r\n const [aspect, setAspect] = useState(35 / 45);\r\n const imgRef = useRef(null);\r\n const componentRef = useRef(null);\r\n const [scale, setScale] = useState(1);\r\n const [rotate, setRotate] = useState(0);\r\n const previewCanvasRef = useRef(null);\r\n const [srcImg, setSrcImg] = useState();\r\n const [srcFileName, setSrcFileName] = useState();\r\n const [isCropping, setIsCropping] = useState(false);\r\n const [isInitial, setIsInitial] = useState(true);\r\n\r\n const hiddenFileInput = useRef(null);\r\n\r\n const handleEdit = (event: any) => setIsCropping(true);\r\n\r\n const handleUpload = (event: any) => hiddenFileInput && hiddenFileInput.current && hiddenFileInput.current.click();\r\n\r\n const handleRemove = (event: any) => {\r\n if (hiddenFileInput && hiddenFileInput.current && hiddenFileInput.current.value) {\r\n hiddenFileInput.current.value = '';\r\n }\r\n setSrcImg(undefined);\r\n props.onPhotoCrop(undefined);\r\n }\r\n\r\n const handleRotate = (event: any) => {\r\n var newAngleInDegrees = rotate + 90;\r\n if (newAngleInDegrees == 360) {\r\n newAngleInDegrees = 0;\r\n }\r\n setRotate(newAngleInDegrees);\r\n };\r\n\r\n const handleCrop = async (event: any) => {\r\n imgRef.current && previewCanvasRef.current && completedCrop && componentRef.current\r\n && handleCanvas(imgRef.current, previewCanvasRef.current, completedCrop, componentRef.current);\r\n\r\n if (srcFileName && previewCanvasRef.current) {\r\n var imageDataUrl = previewCanvasRef.current.toDataURL();\r\n resizeBlobImage(imageDataUrl);\r\n }\r\n }\r\n\r\n const resizeBlobImage = (imageDataUrl: any) => {\r\n const IMGWIDTH = 700;\r\n const IMGHEIGHT = 900;\r\n var img = document.createElement(\"img\");\r\n img.onload = (event: Event) => {\r\n var canvas = document.createElement(\"canvas\");\r\n canvas.width = IMGWIDTH;\r\n canvas.height = IMGHEIGHT;\r\n var ctx = canvas.getContext(\"2d\");\r\n ctx && ctx.drawImage(img, 0, 0, IMGWIDTH, IMGHEIGHT);\r\n srcFileName && canvas.toBlob(function (blob: any) {\r\n let file = new File([blob], srcFileName, { type: blob.type });\r\n if (file.size > props.PassPhotoSizeLimitInKb * 1000) {\r\n props.onSizeError();\r\n } else {\r\n //setIsCropping(false); \r\n props.onPhotoCrop(file);\r\n //setSrcImg(URL.createObjectURL(file));\r\n }\r\n });\r\n }\r\n img.src = imageDataUrl;\r\n }\r\n\r\n const handleImage = (event: any) => {\r\n if (event.target.files[0] == undefined) { return; }\r\n if (event.target.files[0].size > props.PassPhotoSizeLimitInKb * 1000) {\r\n props.onSizeError();\r\n handleUpload(null);\r\n return;\r\n }\r\n setSrcImg(URL.createObjectURL(event.target.files[0]));\r\n setSrcFileName(event.target.files[0].name);\r\n setIsCropping(true);\r\n }\r\n\r\n // Called on change event of element\r\n const onImageLoad = (e: React.SyntheticEvent) => {\r\n if (aspect) {\r\n const { width, height } = e.currentTarget;\r\n const offsetX = componentRef.current && imgRef.current && (componentRef.current.clientWidth - imgRef.current.width) / 2;\r\n offsetX && setCrop(centerAspectCrop(width, height, offsetX, aspect));\r\n }\r\n }\r\n\r\n const centerAspectCrop = (mediaWidth: number, mediaHeight: number, offsetX: number, aspect: number) => {\r\n let initialCrop = centerCrop(makeAspectCrop({ unit: 'px', width: mediaHeight * 0.778 }, aspect, mediaWidth, mediaHeight), mediaWidth, mediaHeight);\r\n initialCrop.x += offsetX;\r\n return initialCrop;\r\n }\r\n\r\n const handleCanvas = (imageElement: HTMLImageElement, canvasElement: HTMLCanvasElement, crop: PixelCrop, div: HTMLDivElement) => {\r\n const TO_RADIANS = Math.PI / 180;\r\n var offsetX = (div.clientWidth - imageElement.width) / 2;\r\n\r\n const context = canvasElement.getContext('2d');\r\n\r\n const scaleX = imageElement.naturalWidth / imageElement.width;\r\n const scaleY = imageElement.naturalHeight / imageElement.height;\r\n\r\n const pixelRatio = window.devicePixelRatio;\r\n\r\n canvasElement.width = Math.floor(crop.width * scaleX * pixelRatio);\r\n canvasElement.height = Math.floor(crop.height * scaleY * pixelRatio);\r\n\r\n crop.x -= offsetX;\r\n\r\n const cropX = crop.x * scaleX;\r\n const cropY = crop.y * scaleY;\r\n\r\n const rotateRads = rotate * TO_RADIANS;\r\n const centerX = imageElement.naturalWidth / 2;\r\n const centerY = imageElement.naturalHeight / 2;\r\n\r\n if (context == null || context == undefined) { return; }\r\n\r\n context.scale(pixelRatio, pixelRatio);\r\n context.imageSmoothingQuality = 'high';\r\n\r\n context.save();\r\n context.translate(-cropX, -cropY);\r\n context.translate(centerX, centerY);\r\n context.rotate(rotateRads);\r\n context.scale(scale, scale);\r\n context.translate(-centerX, -centerY);\r\n context.drawImage(imageElement, 0, 0, imageElement.naturalWidth, imageElement.naturalHeight, 0, 0,\r\n imageElement.naturalWidth, imageElement.naturalHeight);\r\n context.restore();\r\n }\r\n\r\n if (props.photoUrl != '' && srcImg == undefined && isInitial) {\r\n setSrcImg(props.photoUrl);\r\n setSrcFileName(props.photoUrl);\r\n setIsInitial(false);\r\n }\r\n\r\n const hiddenElements = <>\r\n \r\n \r\n ;\r\n\r\n var className = \"add-pass-photo\";\r\n if (srcImg == null || srcImg == undefined || srcImg == '') {\r\n className += \" no-photo\";\r\n }\r\n var minWidth = 140;\r\n var minHeight = 180;\r\n if (imgRef && imgRef.current &&\r\n imgRef.current.width != 0 &&\r\n imgRef.current.height != 0) {\r\n var scaleX = imgRef.current.naturalWidth / imgRef.current.width;\r\n var scaleY = imgRef.current.naturalHeight / imgRef.current.height;\r\n\r\n minWidth = minWidth / scaleX;\r\n minHeight = minHeight / scaleY;\r\n }\r\n return (\r\n
\r\n {hiddenElements}\r\n setCrop(percentCrop)}\r\n onComplete={(c) => setCompletedCrop(c)}\r\n aspect={aspect}>\r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n {\r\n /*\r\n \r\n \r\n */\r\n }\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ImageCropper;\r\n\r\n\r\n","import { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport { faArrowLeft } from '@fortawesome/free-solid-svg-icons';\r\nimport React from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { ClickableIcon } from '../../../Shared/Components/Presentational/Icons';\r\nimport './AddPassPhotoFooter.scss';\r\n\r\ninterface AddPassPhotoModalFooterProps extends WithTranslation {\r\n // footerText: string;\r\n submitDisabled: boolean;\r\n isLoading?: boolean;\r\n primaryButtonText: string;\r\n onBackButtonClick?: () => void;\r\n onSubmit: () => void;\r\n fileRestrictions: ContentfulContentObject;\r\n}\r\n\r\nconst AddPassPhotoFooter: React.FC = props => {\r\n const { t } = props;\r\n\r\n return (\r\n
\r\n {/*

{t(\"addMembership.photoUpload.guidelinesTitle\")}

*/}\r\n
\r\n {documentToReactComponents(props.fileRestrictions.content)}\r\n
\r\n {/*

{t(\"addMembership.photoUpload.guidelines\")}

*/}\r\n
\r\n {props.onBackButtonClick && }\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default withTranslation()(AddPassPhotoFooter);","import { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport React from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport './AddPassPhotoHeader.scss';\r\n\r\ninterface AddPassPhotoModalHeaderProps extends WithTranslation {\r\n headerText: string;\r\n instructions: ContentfulContentObject;\r\n}\r\n\r\nconst AddPassPhotoHeader: React.FC = props => {\r\n const { t } = props;\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n

{props.headerText}

\r\n
\r\n

{t(\"addMembership.photoUpload.title\")}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {documentToReactComponents(props.instructions.content)}\r\n
\r\n {/*

{t(\"addMembership.photoUpload.headerMessage\")} {passPhotoSizeLimitInMB}MB:

*/}\r\n
\r\n
\r\n\r\n
\r\n
\r\n

{props.headerText}

\r\n
\r\n

{t(\"addMembership.photoUpload.title\")}

\r\n
\r\n
\r\n
\r\n {documentToReactComponents(props.instructions.content)}\r\n
\r\n {/*

{t(\"addMembership.photoUpload.headerMessage\")} {passPhotoSizeLimitInMB}MB:

*/}\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default withTranslation()(AddPassPhotoHeader);","import React, { FormEvent, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport ImageCropper from '../../../Shared/Components/Presentational/ImageCropper';\r\nimport AddPassPhotoFooter from './AddPassPhotoFooter';\r\nimport AddPassPhotoHeader from './AddPassPhotoHeader';\r\nimport './AddPassPhoto.scss';\r\nimport { vehicleValidation } from '../../../Shared/Utilities/Validation';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\n\r\ninterface AddPassPhotoModalProps {\r\n onBackButtonClick?: () => void;\r\n onPhotoUpload: (photoFile: File) => void;\r\n value?: string;\r\n headerText?: string;\r\n submitErrorText?: string;\r\n submittedOption?: ParkPassTypeDTO;\r\n isAnalyzingPassPhoto?: boolean;\r\n analyzingPassPhotoError?: any;\r\n isAnalyzingPassPhotoSuccessful?: boolean;\r\n PassPhotoSizeLimitInKb: number;\r\n analyzePassPhotoRequest?: (passPhotoFile: File) => void;\r\n instructions: ContentfulContentObject;\r\n fileRestrictions: ContentfulContentObject;\r\n exception: ContentfulContentObject;\r\n}\r\n\r\nconst AddPassPhoto: React.FC = props => {\r\n const [srcPhotoFile, setPhotoFile] = useState();\r\n const [hasSubmitted, setHasSubmitted] = useState(false);\r\n const [isNewPhoto, setIsNewPhoto] = useState(false);\r\n const [hasSizeError, setHasSizeError] = useState(false);\r\n\r\n const { t } = useTranslation();\r\n\r\n\r\n\r\n const handleOnBackButtonClick = () => {\r\n setPhotoFile(undefined);\r\n props.onBackButtonClick && props.onBackButtonClick();\r\n }\r\n\r\n const handleSubmit = () => {\r\n setHasSubmitted(true);\r\n srcPhotoFile && props.analyzePassPhotoRequest && props.analyzePassPhotoRequest(srcPhotoFile);\r\n }\r\n\r\n\r\n\r\n const onAnalyzingSuccess = () => {\r\n srcPhotoFile && props.onPhotoUpload(srcPhotoFile);\r\n props.onBackButtonClick && props.onBackButtonClick();\r\n }\r\n\r\n if (hasSubmitted && (props.isAnalyzingPassPhotoSuccessful || props.analyzePassPhotoRequest == undefined)) {\r\n setHasSubmitted(false);\r\n setIsNewPhoto(false);\r\n onAnalyzingSuccess();\r\n }\r\n\r\n const onSizeError = () => setHasSizeError(true);\r\n\r\n const handlePhotoCrop = (photoFile: File | undefined) => {\r\n setPhotoFile(photoFile);\r\n setIsNewPhoto(photoFile != undefined);\r\n photoFile && setHasSizeError(false);\r\n }\r\n\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {hasSizeError || props.submitErrorText && (\r\n
\r\n {documentToReactComponents(props.exception.content)}\r\n
\r\n )}\r\n {/* {hasSizeError &&

The file's size has been exceeded

} */}\r\n {/* {props.submitErrorText &&

{props.submitErrorText}

} */}\r\n {hasSubmitted && props.analyzingPassPhotoError &&

{props.analyzingPassPhotoError.Message}

}\r\n \r\n \r\n
\r\n
\r\n );\r\n}\r\n\r\nexport default AddPassPhoto;","export function fileToUrl(input: File | undefined): string {\r\n if(input == undefined) { return ''; }\r\n return URL.createObjectURL(input);\r\n}\r\nexport async function urlToFile(input: string): Promise {\r\n if(input == '') { return undefined; }\r\n const response = await fetch(input);\r\n const blob = await response.blob();\r\n return new File([blob], input, { type: blob.type });\r\n}","import React, { ChangeEvent, useRef, useState } from 'react';\r\nimport { Translation } from 'react-i18next';\r\nimport { FormContext } from './AddPassRow';\r\nimport DropdownList from '../../../Shared/Components/Presentational/DropdownList';\r\nimport DatePicker from 'react-datepicker';\r\nimport moment from 'moment';\r\nimport { Mobile, Desktop } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { NativeDatePicker } from '../../../Shared/Components/Presentational/NativeDatePicker';\r\nimport { ClickableIcon } from '../../../Shared/Components/Presentational/Icons';\r\nimport { faArrowLeft, faArrowUp, faCamera, faCameraRetro, faUpload } from '@fortawesome/free-solid-svg-icons';\r\nimport AddPassPhoto from './AddPassPhoto';\r\nimport { fileToUrl, urlToFile } from '../../../Shared/Utilities/FileUtils';\r\nimport { Toggle } from '../../../Shared/Components/Presentational/Toggle';\r\nimport classNames from 'classnames';\r\nimport { Modal } from '../../../Shared/Components/Presentational/Modal';\r\n\r\ninterface AddPassFieldProps {\r\n analyzingPassPhotoError?: any;\r\n isAnalyzingPassPhoto?: boolean;\r\n isAnalyzingPassPhotoSuccessful?: boolean;\r\n field: FormField;\r\n submittedOption: ParkPassTypeDTO;\r\n isAddPassPhotoModalOpen: boolean;\r\n openAddPassPhotoModal: () => void;\r\n closeAddPassPhotoModal: () => void;\r\n PassPhotoSizeLimitInKb: number;\r\n analyzePassPhotoRequest: (passPhotoFile: File) => void;\r\n}\r\n\r\ninterface AddPassFieldState {\r\n uploadLater: boolean;\r\n}\r\n\r\nclass AddPassField extends React.Component {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = { uploadLater : false };\r\n\r\n }\r\n handleInputChange(e: ChangeEvent) {\r\n const newValue = e.target.value;\r\n this.handleChange(newValue);\r\n }\r\n\r\n handleDropdownChange(newValue: DropdownListOption) {\r\n this.handleChange(newValue.value);\r\n }\r\n\r\n async handlePhotoUploadChange(file: File | undefined) {\r\n var newValue = fileToUrl(file);\r\n const isValid = this.props.field.validator(newValue);\r\n\r\n this.context.formState[this.props.field.id] = { isValid, isDirty: true };\r\n\r\n this.props.field.setter(this.context.form.pass, newValue);\r\n await new Promise(resolve => setTimeout(resolve, 500));\r\n this.context.updateFormState(this.context);\r\n this.forceUpdate();\r\n\r\n this.props.closeAddPassPhotoModal();\r\n }\r\n\r\n handleDatepickerChange(newValue: Date) {\r\n this.handleChange(moment(newValue).format('DD/MM/YYYY'));\r\n }\r\n\r\n handleChange(newValue: string) {\r\n const isValid = this.props.field.validator(newValue);\r\n\r\n this.context.formState[this.props.field.id] = { isValid, isDirty: true };\r\n\r\n this.props.field.setter(this.context.form.pass, newValue);\r\n this.context.updateFormState(this.context);\r\n this.forceUpdate();\r\n }\r\n\r\n isValid(): boolean {\r\n return this.fieldState && this.fieldState.isValid;\r\n }\r\n\r\n isDirty(): boolean {\r\n return this.fieldState && this.fieldState.isDirty;\r\n }\r\n\r\n convertToDate(value: string): Date | undefined {\r\n if (value) {\r\n return moment(value, 'DD/MM/YYYY').toDate();\r\n }\r\n return undefined;\r\n }\r\n\r\n get fieldState() {\r\n return this.context.formState[this.props.field.id];\r\n }\r\n\r\n photo = (t: (key: string) => string, field: FormField) => {\r\n var clickableIconClassName = \"\";\r\n if(this.state.uploadLater) {\r\n clickableIconClassName = \"disabled\";\r\n }\r\n\r\n var fieldValue = this.props.field.getter(this.context.form.pass);\r\n var className = \"add-pass-photo\";\r\n if (fieldValue == null || fieldValue == undefined || fieldValue == '') {\r\n className += \" no-photo\";\r\n }\r\n\r\n const handleOpenAddPassPhotoModal = () => !this.state.uploadLater && this.props.openAddPassPhotoModal();\r\n const handleUploadLaterChange = async () => {\r\n var newValue = !this.state.uploadLater;\r\n this.setState({ uploadLater: newValue });\r\n if(newValue) {\r\n this.props.field.setter(this.context.form.pass, '');\r\n await new Promise(resolve => setTimeout(resolve, 500));\r\n }\r\n this.context.formState[this.props.field.id] = { isValid: newValue, isDirty: true };\r\n this.context.updateFormState(this.context);\r\n }\r\n \r\n return (\r\n <>\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n this.props.analyzePassPhotoRequest(file)}\r\n instructions={{ name: \"\", title: \"\", content: \"\"}}\r\n fileRestrictions={{ name: \"\", title: \"\", content: \"\"}}\r\n exception={{ name: \"\", title: \"\", content: \"\"}}/>\r\n \r\n\r\n \r\n\r\n )};\r\n input = (t: (key: string) => string, field: FormField) => (\r\n \r\n );\r\n dropdown = (t: (key: string) => string, field: FormField) => (\r\n o.value === field.getter(this.context.form.pass))[0]\r\n }\r\n />\r\n );\r\n date = (t: (key: string) => string, field: FormField) => (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n render() {\r\n return (\r\n \r\n {(context) => (\r\n \r\n {(t: (key: string) => string) => {\r\n this.context = context;\r\n return (\r\n \r\n \r\n {this.props.field.type === 'dropdown' && this.dropdown(t, this.props.field)}\r\n {this.props.field.type === 'text' && this.input(t, this.props.field)}\r\n {this.props.field.type === 'email' && this.input(t, this.props.field)}\r\n {this.props.field.type === 'date' && this.date(t, this.props.field)}\r\n {this.props.field.type === 'photo' && this.photo(t, this.props.field)}\r\n \r\n );\r\n }}\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default AddPassField;\r\n","import React, { useState } from 'react';\r\nimport AddPassField from './AddPassField';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\n\r\ninterface AddPassRowProps {\r\n passForm: AddPassForm;\r\n onDeleteClick?: (pass: AddPassForm) => void;\r\n showDeleteButton: boolean;\r\n updatePasses: (pass: AddPassForm) => void;\r\n isRenew?: boolean;\r\n isAddPassPhotoModalOpen: boolean;\r\n submittedOption: ParkPassTypeDTO;\r\n isAnalyzingPassPhoto?: boolean;\r\n analyzingPassPhotoError?: any;\r\n isAnalyzingPassPhotoSuccessful?: boolean;\r\n PassPhotoSizeLimitInKb: number;\r\n requirePassPhoto?: boolean;\r\n openAddPassPhotoModal: () => void;\r\n closeAddPassPhotoModal: () => void;\r\n analyzePassPhotoRequest: (passPhotoFile: File) => void;\r\n}\r\n\r\ninterface AddPassContext {\r\n form: AddPassForm;\r\n formState: {\r\n [fieldId: string]: {\r\n isValid: boolean;\r\n isDirty: boolean;\r\n };\r\n };\r\n}\r\n\r\nexport const FormContext = React.createContext({});\r\n\r\nconst AddPassRow: React.FC = props => {\r\n const fieldListReducer = (result: any, field: FormField) => {\r\n if((props.requirePassPhoto == undefined || \r\n props.requirePassPhoto == null || \r\n props.requirePassPhoto == false) && field.id == \"passPhoto\") {\r\n return result;\r\n }\r\n result[field.id] = {};\r\n result[field.id].isValid = props.isRenew;\r\n return result;\r\n };\r\n const [formState, setFormState] = useState(props.passForm.fieldList.reduce(fieldListReducer, {}));\r\n const updateFormState = (context: AddPassContext) => {\r\n context.form.isValid = true;\r\n\r\n for (let fieldId in context.formState) {\r\n const fieldState = context.formState[fieldId];\r\n\r\n if (!fieldState.isValid) {\r\n context.form.isValid = false;\r\n }\r\n }\r\n props.updatePasses(context.form);\r\n setFormState(context.formState);\r\n };\r\n const onDelete = () => {\r\n if (props.onDeleteClick) {\r\n props.onDeleteClick(props.passForm);\r\n }\r\n };\r\n return (\r\n \r\n
\r\n {props.passForm.fieldList.map(field => (field.id != \"passPhoto\" || props.requirePassPhoto) && (\r\n props.analyzePassPhotoRequest(file)}\r\n PassPhotoSizeLimitInKb={props.PassPhotoSizeLimitInKb}>\r\n \r\n ))}\r\n {props.showDeleteButton && (\r\n
\r\n
onDelete()}>\r\n \r\n
\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default AddPassRow;\r\n","import { fileToUrl, urlToFile } from \"../../../../Shared/Utilities/FileUtils\";\r\nimport { hasValue, isValidDate, isFutureDate } from \"../../../../Shared/Utilities/Validation\";\r\n\r\nconst ShortStayPassFields: FormField[] = [\r\n {\r\n id: 'firstname',\r\n type: 'text',\r\n maxLength: 50,\r\n labelTranslationKey: 'myGuests.passes.add.fields.firstname',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.firstname',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => pass.FirstName,\r\n setter: (pass, value) => pass.FirstName = value,\r\n flexBasis: '33%'\r\n },\r\n {\r\n id: 'lastname',\r\n type: 'text',\r\n maxLength: 50,\r\n labelTranslationKey: 'myGuests.passes.add.fields.lastname',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.lastname',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => pass.LastName,\r\n setter: (pass, value) => pass.LastName = value,\r\n flexBasis: '33%'\r\n },\r\n {\r\n id: 'dateofbirth',\r\n type: 'date',\r\n maxLength: 10,\r\n labelTranslationKey: 'myGuests.passes.add.fields.dateOfBirth',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.dateFormat',\r\n validator: (value) => isValidDate(value),\r\n getter: (pass) => pass.DateOfBirth,\r\n setter: (pass, value) => pass.DateOfBirth = value,\r\n flexBasis: '33%'\r\n },\r\n {\r\n id: 'phonenuumber',\r\n type: 'text',\r\n maxLength: 100,\r\n labelTranslationKey: 'myGuests.passes.add.fields.phoneNumber',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.phoneNumber',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => pass.PhoneNumber,\r\n setter: (pass, value) => pass.PhoneNumber = value,\r\n flexBasis: '33%'\r\n },\r\n {\r\n id: 'email',\r\n type: 'email',\r\n maxLength: 255,\r\n labelTranslationKey: 'myGuests.passes.add.fields.email',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.email',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => pass.Email,\r\n setter: (pass, value) => pass.Email = value,\r\n flexBasis: '66%'\r\n },\r\n {\r\n id: 'startdate',\r\n type: 'date',\r\n maxLength: 10,\r\n labelTranslationKey: 'general.startDate',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.dateFormat',\r\n validator: (value) => isFutureDate(value),\r\n getter: (pass) => pass.StartDate!,\r\n setter: (pass, value) => pass.StartDate = value,\r\n flexBasis: '33%'\r\n },\r\n {\r\n id: 'passlengthdays',\r\n type: 'dropdown',\r\n labelTranslationKey: 'myGuests.passes.add.fields.passLength',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.passLength',\r\n validator: (value) => hasValue(value) && !isNaN(parseInt(value)),\r\n getter: (pass) => pass.PassLengthDays ? pass.PassLengthDays.toString() : '',\r\n setter: (pass, value) => pass.PassLengthDays = parseInt(value),\r\n flexBasis: '33%',\r\n options: [\r\n { label: '3 nights', value: '3' },\r\n { label: '4 nights', value: '4' },\r\n { label: '7 nights', value: '7' },\r\n { label: '14 nights', value: '14' }\r\n ]\r\n },\r\n {\r\n id: 'passPhoto',\r\n type: 'photo',\r\n labelTranslationKey: 'Photo Upload',\r\n placeholderTranslationKey: 'Photo Upload',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => fileToUrl(pass.Photo),\r\n setter: (pass, value) => urlToFile(value).then(photo => pass.Photo = photo),\r\n flexBasis: '32%',\r\n }\r\n];\r\n\r\nexport default ShortStayPassFields;","import { hasValue } from \"../../../../Shared/Utilities/Validation\";\r\n\r\nconst CarPassFields: FormField[] = [\r\n {\r\n id: 'firstname',\r\n type: 'text',\r\n maxLength: 50,\r\n labelTranslationKey: 'myGuests.passes.add.fields.firstname',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.firstname',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => pass.FirstName,\r\n setter: (pass, value) => pass.FirstName = value,\r\n flexBasis: '50%'\r\n },\r\n {\r\n id: 'lastname',\r\n type: 'text',\r\n maxLength: 50,\r\n labelTranslationKey: 'myGuests.passes.add.fields.lastname',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.lastname',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => pass.LastName,\r\n setter: (pass, value) => pass.LastName = value,\r\n flexBasis: '50%'\r\n },\r\n {\r\n id: 'registrationnumber',\r\n type: 'text',\r\n maxLength: 10,\r\n labelTranslationKey: 'myGuests.passes.add.fields.registrationNumber',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.registrationNumber',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => pass.RegistrationNumber,\r\n setter: (pass, value) => pass.RegistrationNumber = value,\r\n flexBasis: '80%'\r\n }\r\n];\r\n\r\nexport default CarPassFields;","import { fileToUrl, urlToFile } from \"../../../../Shared/Utilities/FileUtils\";\r\nimport { hasValue, isValidDate } from \"../../../../Shared/Utilities/Validation\";\r\n\r\nconst SeasonPassFields: FormField[] = [\r\n {\r\n id: 'firstname',\r\n type: 'text',\r\n maxLength: 50,\r\n labelTranslationKey: 'myGuests.passes.add.fields.firstname',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.firstname',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => pass.FirstName,\r\n setter: (pass, value) => pass.FirstName = value,\r\n flexBasis: '33%'\r\n },\r\n {\r\n id: 'lastname',\r\n type: 'text',\r\n maxLength: 50,\r\n labelTranslationKey: 'myGuests.passes.add.fields.lastname',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.lastname',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => pass.LastName,\r\n setter: (pass, value) => pass.LastName = value,\r\n flexBasis: '33%'\r\n },\r\n {\r\n id: 'dateofbirth',\r\n type: 'date',\r\n maxLength: 10,\r\n labelTranslationKey: 'myGuests.passes.add.fields.dateOfBirth',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.dateFormat',\r\n validator: (value) => isValidDate(value),\r\n getter: (pass) => pass.DateOfBirth,\r\n setter: (pass, value) => pass.DateOfBirth = value,\r\n flexBasis: '33%'\r\n },\r\n {\r\n id: 'email',\r\n type: 'email',\r\n maxLength: 255,\r\n labelTranslationKey: 'myGuests.passes.add.fields.email',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.email',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => pass.Email,\r\n setter: (pass, value) => pass.Email = value,\r\n flexBasis: '66%',\r\n marginRight: '33%'\r\n },\r\n {\r\n id: 'phonenuumber',\r\n type: 'text',\r\n maxLength: 100,\r\n labelTranslationKey: 'myGuests.passes.add.fields.phoneNumber',\r\n placeholderTranslationKey: 'myGuests.passes.add.fields.phoneNumber',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => pass.PhoneNumber,\r\n setter: (pass, value) => pass.PhoneNumber = value,\r\n flexBasis: '33%'\r\n },\r\n {\r\n id: 'passPhoto',\r\n type: 'photo',\r\n labelTranslationKey: 'Photo Upload',\r\n placeholderTranslationKey: 'Photo Upload',\r\n validator: (value) => hasValue(value),\r\n getter: (pass) => fileToUrl(pass.Photo),\r\n setter: (pass, value) => urlToFile(value).then(photo => pass.Photo = photo),\r\n flexBasis: '33%',\r\n marginLeft: '33%'\r\n }\r\n];\r\n\r\nexport default SeasonPassFields;","import React, { FormEvent, useState } from 'react';\r\nimport { Modal, ModalProps } from '../../../Shared/Components/Presentational/Modal';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport AddPassModalHeader from './AddPassModalHeader';\r\nimport AddPassModalFooter from './AddPassModalFooter';\r\nimport AddPassRow from './AddPassRow';\r\nimport ShortStayPassFields from './PassFields/ShortStayPassFields';\r\nimport CarPassFields from './PassFields/CarPassFields';\r\nimport SeasonPassFields from './PassFields/SeasonPassFields';\r\nimport './AddPassModal.scss';\r\nimport PassFunctionalityTypes from '../../../Constants/PassFunctionalityTypes';\r\nimport classNames from 'classnames';\r\n\r\ninterface AddPassModalProps extends ModalProps {\r\n onBackButtonClick: () => void;\r\n addPassesRequest: (passes: AddPassDTO[]) => void;\r\n submittedOption: ParkPassTypeDTO;\r\n isLoading?: boolean;\r\n isAnalyzingPassPhoto?: boolean;\r\n analyzingPassPhotoError?: any;\r\n isAnalyzingPassPhotoSuccessful?: boolean;\r\n isAddPassPhotoModalOpen: boolean;\r\n PassPhotoSizeLimitInKb: number;\r\n openAddPassPhotoModal: () => void;\r\n closeAddPassPhotoModal: () => void;\r\n analyzePassPhotoRequest: (passPhotoFile: File) => void;\r\n requirePassPhoto?: boolean;\r\n}\r\n\r\nconst AddPassModal: React.FC = props => {\r\n const { t } = useTranslation();\r\n\r\n const getFieldList = (functionalityCode: string): FormField[] => {\r\n switch (functionalityCode) {\r\n case PassFunctionalityTypes.ShortStay:\r\n return filterFieldList(ShortStayPassFields);\r\n case PassFunctionalityTypes.Car:\r\n return CarPassFields;\r\n case PassFunctionalityTypes.SeasonOwner:\r\n case PassFunctionalityTypes.SeasonResort:\r\n return filterFieldList(SeasonPassFields);\r\n default:\r\n return [];\r\n }\r\n };\r\n\r\n const filterFieldList = (fieldList: FormField[]): FormField[] => {\r\n return fieldList;\r\n };\r\n\r\n const createNewPass = (): AddPassForm => {\r\n return {\r\n isValid: false,\r\n pass: {\r\n FirstName: '',\r\n LastName: '',\r\n ParkPassTypeId: '',\r\n LodgeId: 0,\r\n PassTypeFriendlyName: t(props.submittedOption.NameTranslationKey)\r\n } as AddPassDTO,\r\n fieldList: getFieldList(props.submittedOption.FunctionalityCode)\r\n };\r\n };\r\n\r\n const [newPasses, setNewPasses] = useState([createNewPass()]);\r\n const [numberOfPasses, setNumberOfPasses] = useState(props.submittedOption.CurrentNumberOfPasses + 1);\r\n\r\n const updatePasses = (formObject: AddPassForm) => {\r\n setNewPasses(prevPasses => {\r\n prevPasses[prevPasses.indexOf(formObject)].isValid = formObject.isValid;\r\n return [...prevPasses];\r\n });\r\n };\r\n\r\n const handleSubmit = (e: FormEvent) => {\r\n e.preventDefault();\r\n props.addPassesRequest(\r\n newPasses.map(tp => {\r\n return tp.pass;\r\n })\r\n );\r\n };\r\n\r\n const addAnother = () => {\r\n setNumberOfPasses(numberOfPasses + 1);\r\n setNewPasses(prevPasses => [...prevPasses, createNewPass()]);\r\n };\r\n\r\n const deleteRow = (pass: AddPassForm) => {\r\n let newArray = [...newPasses];\r\n const index = newArray.indexOf(pass);\r\n if (index > -1) {\r\n newArray.splice(index, 1);\r\n setNumberOfPasses(numberOfPasses - 1);\r\n setNewPasses(newArray);\r\n }\r\n };\r\n \r\n const formContents = (\r\n <>\r\n \r\n {newPasses.map((newPassForm, index) => (\r\n \r\n 0}\r\n updatePasses={updatePasses}\r\n isAddPassPhotoModalOpen={props.isAddPassPhotoModalOpen}\r\n openAddPassPhotoModal={props.openAddPassPhotoModal}\r\n closeAddPassPhotoModal={props.closeAddPassPhotoModal}\r\n submittedOption={props.submittedOption}\r\n isAnalyzingPassPhoto={props.isAnalyzingPassPhoto}\r\n analyzingPassPhotoError={props.analyzingPassPhotoError}\r\n isAnalyzingPassPhotoSuccessful={props.isAnalyzingPassPhotoSuccessful}\r\n analyzePassPhotoRequest={(file: File) => props.analyzePassPhotoRequest(file)}\r\n PassPhotoSizeLimitInKb={props.PassPhotoSizeLimitInKb}\r\n requirePassPhoto={props.requirePassPhoto}\r\n >\r\n {index === newPasses.length - 1 ? null :
}\r\n
\r\n ))}\r\n {\r\n return !np.isValid;\r\n }).length > 0\r\n }\r\n addAnotherDisabled={numberOfPasses >= props.submittedOption.MaxNumberOfPasses}\r\n addAnotherClick={addAnother}\r\n helperText={t('myGuests.passes.add.help')}\r\n primaryButtonText={t('myGuests.passes.add.passes')}\r\n isLoading={props.isLoading}\r\n />\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n
{formContents}
\r\n
\r\n \r\n
\r\n {formContents}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default AddPassModal;\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport AddPassModal from '../Presentational/AddPassModal';\r\nimport { SuccessModal, ErrorModal } from '../../../Shared/Components/Presentational/Modal';\r\nimport { addCarPasses, addSeasonPasses, addShortStayPasses, analyzePassPhoto } from '../../Redux/ActionCreators';\r\nimport { Translation } from 'react-i18next';\r\nimport {\r\n SET_ADD_PASS_SUCCESSFUL_MODAL_OPEN,\r\n SET_ADD_PASS_ERROR_MODAL_OPEN,\r\n SET_IS_ADD_PASS_MODAL_OPEN,\r\n SET_IS_ADD_PASS_PHOTO_MODAL_OPEN,\r\n ANALYZE_PASS_PHOTO_SUCCESS,\r\n ANALYZE_PASS_PHOTO_FAILURE\r\n} from '../../Redux/ActionTypes';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport PassFunctionalityTypes from '../../../Constants/PassFunctionalityTypes';\r\n\r\ninterface AddPassProps {\r\n isOpen: boolean;\r\n onBackButtonClick: () => void;\r\n addCarPassesRequest: (passes: AddCarPassDTO[]) => void;\r\n addSeasonPassesRequest: (passes: AddSeasonPassDTO[]) => void;\r\n addShortStayPassesRequest: (passes: AddShortStayPassDTO[]) => void;\r\n analyzePassPhotoRequest: (passPhotoFile: File) => void;\r\n isAddPassSuccessfulModalOpen: boolean;\r\n closeSuccessModal: () => void;\r\n isAddPassErrorModalOpen: boolean;\r\n isAddPassPhotoModalOpen: boolean;\r\n closeErrorModal: () => void;\r\n openErrorModal: () => void;\r\n openAddPassPhotoModal: () => void;\r\n closeAddPassPhotoModal: () => void;\r\n submittedOption: ParkPassTypeDTO;\r\n isSavingPass: boolean;\r\n isAnalyzingPassPhoto: boolean;\r\n isAnalyzingPassPhotoSuccessful: boolean;\r\n analyzingPassPhotoError: any;\r\n PassPhotoSizeLimitInKb: number;\r\n successfulPasses: any[];\r\n requirePassPhoto?: boolean;\r\n}\r\n\r\nclass AddPass extends Component {\r\n private canAddPassForSelectedType = (selectedItem: ParkPassTypeDTO): boolean => {\r\n let result = selectedItem.CurrentNumberOfPasses < selectedItem.MaxNumberOfPasses;\r\n\r\n if (!result) {\r\n this.props.openErrorModal();\r\n }\r\n\r\n return result;\r\n };\r\n\r\n private listEmails = (emails: string[]) => emails.join(\", \").replace(/,\\s([^,]+)$/, ' and $1');\r\n\r\n private successfulMessage = (originalMessage: string): string => {\r\n var emailsToSend = this.props.successfulPasses\r\n .filter(a => a.Photo == null || a.Photo == undefined)\r\n .map(a => a.Email);\r\n\r\n if (emailsToSend.length == 0 || (!this.props.requirePassPhoto)) { return originalMessage; }\r\n\r\n return 'An email will be sent to ' + this.listEmails(emailsToSend) + ' with instructions to upload a photo.';\r\n }\r\n\r\n public render(): JSX.Element {\r\n return (\r\n \r\n {(t: (key: string, args?: {}) => string) => {\r\n return (\r\n <>\r\n {this.props.isOpen && this.canAddPassForSelectedType(this.props.submittedOption) && (\r\n <>\r\n \r\n \r\n this.addPassesRequest(this.props.submittedOption, passes)\r\n }\r\n submittedOption={this.props.submittedOption}\r\n isLoading={this.props.isSavingPass}\r\n PassPhotoSizeLimitInKb={this.props.PassPhotoSizeLimitInKb}\r\n isAnalyzingPassPhoto={this.props.isAnalyzingPassPhoto}\r\n analyzingPassPhotoError={this.props.analyzingPassPhotoError}\r\n isAnalyzingPassPhotoSuccessful={this.props.isAnalyzingPassPhotoSuccessful}\r\n isAddPassPhotoModalOpen={this.props.isAddPassPhotoModalOpen}\r\n openAddPassPhotoModal={this.props.openAddPassPhotoModal}\r\n closeAddPassPhotoModal={this.props.closeAddPassPhotoModal}\r\n analyzePassPhotoRequest={(file: File) => this.props.analyzePassPhotoRequest(file)}\r\n requirePassPhoto={this.props.requirePassPhoto}\r\n />\r\n \r\n \r\n \r\n this.addPassesRequest(this.props.submittedOption, passes)\r\n }\r\n analyzePassPhotoRequest={(file: File) => this.props.analyzePassPhotoRequest(file)}\r\n submittedOption={this.props.submittedOption}\r\n isLoading={this.props.isSavingPass}\r\n PassPhotoSizeLimitInKb={this.props.PassPhotoSizeLimitInKb}\r\n isAnalyzingPassPhoto={this.props.isAnalyzingPassPhoto}\r\n analyzingPassPhotoError={this.props.analyzingPassPhotoError}\r\n isAnalyzingPassPhotoSuccessful={this.props.isAnalyzingPassPhotoSuccessful}\r\n isAddPassPhotoModalOpen={this.props.isAddPassPhotoModalOpen}\r\n openAddPassPhotoModal={this.props.openAddPassPhotoModal}\r\n closeAddPassPhotoModal={this.props.closeAddPassPhotoModal}\r\n requirePassPhoto={this.props.requirePassPhoto}\r\n />\r\n \r\n \r\n )}\r\n {this.props.isOpen && !this.canAddPassForSelectedType(this.props.submittedOption) && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n );\r\n }}\r\n \r\n );\r\n }\r\n\r\n public addPassesRequest(submittedOption: ParkPassTypeDTO, passes: AddPassDTO[]) {\r\n switch (submittedOption.FunctionalityCode) {\r\n case PassFunctionalityTypes.Car:\r\n this.props.addCarPassesRequest((passes as any[]) as AddCarPassDTO[]);\r\n break;\r\n case PassFunctionalityTypes.SeasonOwner:\r\n case PassFunctionalityTypes.SeasonResort:\r\n this.props.addSeasonPassesRequest((passes as any[]) as AddSeasonPassDTO[]);\r\n break;\r\n case PassFunctionalityTypes.ShortStay:\r\n this.props.addShortStayPassesRequest((passes as any[]) as AddShortStayPassDTO[]);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isOpen: state.guests.isAddPassModalOpen,\r\n isAddPassErrorModalOpen: state.guests.isAddPassErrorModalOpen,\r\n isAddPassSuccessfulModalOpen: state.guests.isAddPassSuccessfulModalOpen,\r\n isAddPassPhotoModalOpen: state.guests.isAddPassPhotoModalOpen,\r\n isSavingPass: state.guests.isSavingPass,\r\n isAnalyzingPassPhoto: state.guests.isAnalyzingPassPhoto,\r\n isAnalyzingPassPhotoSuccessful: state.guests.isAnalyzingPassPhotoSuccessful,\r\n analyzingPassPhotoError: state.guests.analyzingPassPhotoError,\r\n PassPhotoSizeLimitInKb: state.guests.PassPhotoSizeLimitInKb,\r\n successfulPasses: state.guests.successfulPasses\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n addCarPassesRequest: (passes: AddCarPassDTO[]) => {\r\n dispatch(addCarPasses(passes));\r\n },\r\n addSeasonPassesRequest: (passes: AddSeasonPassDTO[]) => {\r\n dispatch(addSeasonPasses(passes));\r\n },\r\n addShortStayPassesRequest: (passes: AddShortStayPassDTO[]) => {\r\n dispatch(addShortStayPasses(passes));\r\n },\r\n closeSuccessModal: () => {\r\n dispatch({ type: SET_ADD_PASS_SUCCESSFUL_MODAL_OPEN, payload: false });\r\n },\r\n closeErrorModal: () => {\r\n dispatch({ type: SET_ADD_PASS_ERROR_MODAL_OPEN, payload: false });\r\n dispatch({ type: SET_IS_ADD_PASS_MODAL_OPEN, payload: false });\r\n },\r\n openErrorModal: () => {\r\n dispatch({ type: SET_ADD_PASS_ERROR_MODAL_OPEN, payload: true });\r\n },\r\n openAddPassPhotoModal: () => {\r\n dispatch({ type: SET_IS_ADD_PASS_PHOTO_MODAL_OPEN, payload: true });\r\n },\r\n closeAddPassPhotoModal: () => {\r\n dispatch({ type: SET_IS_ADD_PASS_PHOTO_MODAL_OPEN, payload: false });\r\n dispatch({ type: ANALYZE_PASS_PHOTO_SUCCESS, payload: false });\r\n dispatch({ type: ANALYZE_PASS_PHOTO_FAILURE, payload: undefined });\r\n },\r\n analyzePassPhotoRequest: (passPhotoFile: File) => {\r\n dispatch(analyzePassPhoto(passPhotoFile));\r\n }\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AddPass);\r\n","import React, { Component } from 'react';\r\nimport './Description.scss';\r\nimport { Desktop, Mobile } from './ResponsiveViews';\r\nimport classNames from 'classnames';\r\n\r\ninterface DescriptionProps {\r\n description: string;\r\n descriptionHeader?: string;\r\n descriptionSubHeader?: string;\r\n descriptionClassName?: string;\r\n descriptionHeaderClassName?: string;\r\n descriptionSubHeaderClassName?: string;\r\n descriptionContainerClassName?: string;\r\n hasHtml?: boolean;\r\n}\r\n\r\nexport default class Description extends Component {\r\n render() {\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n {this.props.descriptionHeader}\r\n
\r\n
\r\n {this.props.descriptionSubHeader}\r\n
\r\n {this.props.hasHtml ? (\r\n
\r\n ) : (\r\n
{this.props.description}
\r\n )}\r\n \r\n
\r\n \r\n
\r\n
\r\n {this.props.descriptionHeader}\r\n
\r\n
\r\n {this.props.descriptionSubHeader}\r\n
\r\n {this.props.hasHtml ? (\r\n
\r\n ) : (\r\n
{this.props.description}
\r\n )}\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostGetSeasonPassesCall extends PostApiCall {\r\n constructor(lodgeId: string, passIds: string[]) {\r\n let url: string = 'passes/' + lodgeId + '/getSeasonPasses';\r\n\r\n super(url);\r\n\r\n this.body = passIds;\r\n }\r\n}\r\n","import React, { FormEvent, useState, useEffect } from 'react';\r\nimport { Modal, ModalProps } from '../../../Shared/Components/Presentational/Modal';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport AddPassModalHeader from './AddPassModalHeader';\r\nimport AddPassModalFooter from './AddPassModalFooter';\r\nimport AddPassRow from './AddPassRow';\r\nimport ShortStayPassFields from './PassFields/ShortStayPassFields';\r\nimport CarPassFields from './PassFields/CarPassFields';\r\nimport SeasonPassFields from './PassFields/SeasonPassFields';\r\nimport './AddPassModal.scss';\r\nimport PassFunctionalityTypes from '../../../Constants/PassFunctionalityTypes';\r\nimport classNames from 'classnames';\r\nimport { PostGetSeasonPassesCall } from '../../../Api/Calls/PostGetSeasonPassesCall';\r\nimport { Post } from '../../../Api/ApiService';\r\n\r\ninterface RenewPassModalProps extends ModalProps {\r\n onBackButtonClick: () => void;\r\n renewPassesRequest: (passes: AddPassDTO[]) => void;\r\n submittedOption: ParkPassTypeDTO;\r\n passesToRenew: PassHeaderDTO[];\r\n lodgeId: string;\r\n isLoading?: boolean;\r\n isAnalyzingPassPhoto?: boolean;\r\n analyzingPassPhotoError?: any;\r\n isAnalyzingPassPhotoSuccessful?: boolean;\r\n isAddPassPhotoModalOpen: boolean;\r\n PassPhotoSizeLimitInKb: number;\r\n openAddPassPhotoModal: () => void;\r\n closeAddPassPhotoModal: () => void;\r\n analyzePassPhotoRequest: (passPhotoFile: File) => void;\r\n requirePassPhoto?: boolean;\r\n}\r\n\r\nconst RenewPassModal: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n\r\n const getFieldList = (functionalityCode: string): FormField[] => {\r\n switch (functionalityCode) {\r\n case PassFunctionalityTypes.ShortStay:\r\n return filterFieldList(ShortStayPassFields);\r\n case PassFunctionalityTypes.Car:\r\n return CarPassFields;\r\n case PassFunctionalityTypes.SeasonOwner:\r\n case PassFunctionalityTypes.SeasonResort:\r\n return filterFieldList(SeasonPassFields);\r\n default:\r\n return [];\r\n }\r\n };\r\n\r\n const filterFieldList = (fieldList: FormField[]): FormField[] => {\r\n if(props.requirePassPhoto) { return fieldList; }\r\n return fieldList.filter(a => a.id !== \"passPhoto\");\r\n };\r\n\r\n const createNewPass = (): AddPassForm => {\r\n return {\r\n isValid: false,\r\n pass: {\r\n FirstName: '',\r\n LastName: '',\r\n ParkPassTypeId: '',\r\n LodgeId: 0,\r\n PassTypeFriendlyName: t(props.submittedOption.NameTranslationKey),\r\n } as AddPassDTO,\r\n fieldList: getFieldList(props.submittedOption.FunctionalityCode)\r\n };\r\n };\r\n\r\n const [passes, setPasses] = useState[]>([createNewPass()]);\r\n\r\n useEffect(() => {\r\n if (props.passesToRenew && props.passesToRenew.length > 0) {\r\n Post(\r\n new PostGetSeasonPassesCall(\r\n props.lodgeId,\r\n props.passesToRenew.map((x) => x.PassId)\r\n )\r\n ).then((response) => {\r\n if (response.data && response.data.length > 0) {\r\n const passFormsToAdd: AddPassForm[] = [];\r\n for (let i = 0; i < response.data.length; i++) {\r\n const pass = response.data[i];\r\n pass.PassTypeFriendlyName = t(props.submittedOption.NameTranslationKey);\r\n passFormsToAdd.push({\r\n pass,\r\n fieldList: getFieldList(props.submittedOption.FunctionalityCode),\r\n isValid: true\r\n });\r\n }\r\n setPasses(passFormsToAdd);\r\n }\r\n });\r\n }\r\n }, [props.passesToRenew, props.submittedOption, t]);\r\n\r\n const updatePasses = (formObject: AddPassForm) => {\r\n setPasses((prevPasses) => {\r\n prevPasses[prevPasses.indexOf(formObject)].isValid = formObject.isValid;\r\n return [...prevPasses];\r\n });\r\n };\r\n\r\n const handleSubmit = (e: FormEvent) => {\r\n e.preventDefault();\r\n\r\n props.renewPassesRequest(\r\n passes.map((tp) => {\r\n return tp.pass;\r\n })\r\n );\r\n };\r\n\r\n const formContents = (\r\n <>\r\n \r\n

{t('myGuests.passes.renew.description')}

\r\n {passes.map((newPassForm, index) => (\r\n \r\n props.analyzePassPhotoRequest(file)}\r\n submittedOption={props.submittedOption}\r\n PassPhotoSizeLimitInKb={props.PassPhotoSizeLimitInKb}\r\n >\r\n {index === passes.length - 1 ? null :
}\r\n
\r\n ))}\r\n {\r\n return !np.isValid;\r\n }).length > 0\r\n }\r\n addAnotherDisabled={true}\r\n isRenew={true}\r\n primaryButtonText={t('myGuests.passes.renew.passes')}\r\n isLoading={props.isLoading}\r\n />\r\n \r\n );\r\n\r\n return (\r\n \r\n \r\n
{formContents}
\r\n
\r\n \r\n
\r\n {formContents}\r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default RenewPassModal;\r\n","import React, { Component } from 'react';\r\nimport { Translation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { ErrorModal, SuccessModal } from '../../../Shared/Components/Presentational/Modal';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { analyzePassPhoto, renewSeasonPasses } from '../../Redux/ActionCreators';\r\nimport {\r\n ANALYZE_PASS_PHOTO_FAILURE,\r\n ANALYZE_PASS_PHOTO_SUCCESS,\r\n SET_IS_ADD_PASS_PHOTO_MODAL_OPEN,\r\n SET_IS_RENEW_PASS_MODAL_OPEN,\r\n SET_RENEW_PASS_ERROR_MODAL_OPEN,\r\n SET_RENEW_PASS_SUCCESSFUL_MODAL_OPEN\r\n} from '../../Redux/ActionTypes';\r\nimport RenewPassModal from '../Presentational/RenewPassModal';\r\nimport PassFunctionalityTypes from '../../../Constants/PassFunctionalityTypes';\r\n\r\ninterface RenewPassProps {\r\n isOpen: boolean;\r\n onBackButtonClick: () => void;\r\n renewSeasonPassesRequest: (passes: AddSeasonPassDTO[]) => void;\r\n isRenewPassSuccessfulModalOpen: boolean;\r\n closeSuccessModal: () => void;\r\n isRenewPassErrorModalOpen: boolean;\r\n closeErrorModal: () => void;\r\n openErrorModal: () => void;\r\n submittedOption: ParkPassTypeDTO;\r\n passesToRenew: PassHeaderDTO[];\r\n onPassesRenewed: () => void;\r\n lodgeId: string;\r\n isSavingPass: boolean;\r\n isAnalyzingPassPhoto: boolean;\r\n isAnalyzingPassPhotoSuccessful: boolean;\r\n analyzingPassPhotoError: any;\r\n PassPhotoSizeLimitInKb: number;\r\n isAddPassPhotoModalOpen: boolean;\r\n openAddPassPhotoModal: () => void;\r\n closeAddPassPhotoModal: () => void;\r\n analyzePassPhotoRequest: (passPhotoFile: File) => void;\r\n requirePassPhoto?: boolean;\r\n}\r\n\r\ninterface RenewPassState {\r\n hasRenewed: boolean;\r\n}\r\n\r\nclass RenewPass extends Component {\r\n public state: RenewPassState = {\r\n hasRenewed: false\r\n };\r\n\r\n componentDidUpdate(prevProps: RenewPassProps) {\r\n if (this.props.isRenewPassSuccessfulModalOpen && !this.state.hasRenewed) {\r\n this.setState({ hasRenewed: true });\r\n this.props.onPassesRenewed();\r\n }\r\n\r\n if (prevProps.isRenewPassSuccessfulModalOpen && !this.props.isRenewPassSuccessfulModalOpen) {\r\n this.setState({ hasRenewed: false });\r\n }\r\n }\r\n\r\n private canRenewPassForSelectedType = (selectedItem: ParkPassTypeDTO): boolean => {\r\n const result = selectedItem.CurrentNumberOfPasses < selectedItem.MaxNumberOfPasses;\r\n\r\n if (!result) {\r\n this.props.openErrorModal();\r\n }\r\n\r\n return result;\r\n };\r\n\r\n public render(): JSX.Element {\r\n return (\r\n \r\n {(t: (key: string, args?: {}) => string) => {\r\n return (\r\n <>\r\n {this.props.isOpen && this.canRenewPassForSelectedType(this.props.submittedOption) && (\r\n <>\r\n \r\n this.renewPassesRequest(this.props.submittedOption, passes)}\r\n submittedOption={this.props.submittedOption}\r\n passesToRenew={this.props.passesToRenew}\r\n lodgeId={this.props.lodgeId}\r\n isLoading={this.props.isSavingPass}\r\n isAnalyzingPassPhoto={this.props.isAnalyzingPassPhoto}\r\n analyzingPassPhotoError={this.props.analyzingPassPhotoError}\r\n PassPhotoSizeLimitInKb={this.props.PassPhotoSizeLimitInKb}\r\n isAnalyzingPassPhotoSuccessful={this.props.isAnalyzingPassPhotoSuccessful}\r\n isAddPassPhotoModalOpen={this.props.isAddPassPhotoModalOpen}\r\n openAddPassPhotoModal={this.props.openAddPassPhotoModal}\r\n closeAddPassPhotoModal={this.props.closeAddPassPhotoModal}\r\n analyzePassPhotoRequest={(file: File) => this.props.analyzePassPhotoRequest(file)}\r\n requirePassPhoto={this.props.requirePassPhoto}/>\r\n \r\n \r\n \r\n this.renewPassesRequest(this.props.submittedOption, passes)\r\n }\r\n submittedOption={this.props.submittedOption}\r\n passesToRenew={this.props.passesToRenew}\r\n lodgeId={this.props.lodgeId}\r\n isLoading={this.props.isSavingPass}\r\n PassPhotoSizeLimitInKb={this.props.PassPhotoSizeLimitInKb}\r\n isAnalyzingPassPhoto={this.props.isAnalyzingPassPhoto}\r\n analyzingPassPhotoError={this.props.analyzingPassPhotoError}\r\n isAnalyzingPassPhotoSuccessful={this.props.isAnalyzingPassPhotoSuccessful}\r\n isAddPassPhotoModalOpen={this.props.isAddPassPhotoModalOpen}\r\n openAddPassPhotoModal={this.props.openAddPassPhotoModal}\r\n closeAddPassPhotoModal={this.props.closeAddPassPhotoModal}\r\n analyzePassPhotoRequest={(file: File) => this.props.analyzePassPhotoRequest(file)}\r\n requirePassPhoto={this.props.requirePassPhoto}\r\n />\r\n \r\n \r\n )}\r\n {this.props.isOpen && !this.canRenewPassForSelectedType(this.props.submittedOption) && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n {\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n }\r\n \r\n );\r\n }}\r\n \r\n );\r\n }\r\n\r\n public renewPassesRequest(submittedOption: ParkPassTypeDTO, passes: AddPassDTO[]) {\r\n switch (submittedOption.FunctionalityCode) {\r\n case PassFunctionalityTypes.SeasonOwner:\r\n case PassFunctionalityTypes.SeasonResort:\r\n this.props.renewSeasonPassesRequest((passes as any[]) as AddSeasonPassDTO[]);\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isOpen: state.guests.isRenewPassModalOpen,\r\n isRenewPassErrorModalOpen: state.guests.isRenewPassErrorModalOpen,\r\n isRenewPassSuccessfulModalOpen: state.guests.isRenewPassSuccessfulModalOpen,\r\n lodgeId: state.user.lodge.LodgeId,\r\n isSavingPass: state.guests.isSavingPass,\r\n isAddPassPhotoModalOpen: state.guests.isAddPassPhotoModalOpen,\r\n isAnalyzingPassPhoto: state.guests.isAnalyzingPassPhoto,\r\n isAnalyzingPassPhotoSuccessful: state.guests.isAnalyzingPassPhotoSuccessful,\r\n analyzingPassPhotoError: state.guests.analyzingPassPhotoError,\r\n PassPhotoSizeLimitInKb: state.guests.PassPhotoSizeLimitInKb\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n closeSuccessModal: () => {\r\n dispatch({ type: SET_RENEW_PASS_SUCCESSFUL_MODAL_OPEN, payload: false });\r\n },\r\n closeErrorModal: () => {\r\n dispatch({ type: SET_RENEW_PASS_ERROR_MODAL_OPEN, payload: false });\r\n dispatch({ type: SET_IS_RENEW_PASS_MODAL_OPEN, payload: false });\r\n },\r\n openErrorModal: () => {\r\n dispatch({ type: SET_RENEW_PASS_ERROR_MODAL_OPEN, payload: true });\r\n },\r\n renewSeasonPassesRequest: (passes: AddSeasonPassDTO[]) => {\r\n dispatch(renewSeasonPasses(passes));\r\n },\r\n openAddPassPhotoModal: () => {\r\n dispatch({ type: SET_IS_ADD_PASS_PHOTO_MODAL_OPEN, payload: true });\r\n },\r\n closeAddPassPhotoModal: () => {\r\n dispatch({ type: SET_IS_ADD_PASS_PHOTO_MODAL_OPEN, payload: false });\r\n dispatch({ type: ANALYZE_PASS_PHOTO_SUCCESS, payload: false });\r\n dispatch({ type: ANALYZE_PASS_PHOTO_FAILURE, payload: undefined });\r\n },\r\n analyzePassPhotoRequest: (passPhotoFile: File) => {\r\n dispatch(analyzePassPhoto(passPhotoFile));\r\n }\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RenewPass);\r\n","import React, { Component } from \"react\";\r\nimport { WithTranslation, withTranslation } from \"react-i18next\";\r\nimport { Widget } from \"../../../Shared/Components/Presentational/Widget\";\r\nimport Fab from \"../../../Shared/Components/Presentational/Fab\";\r\nimport \"./MyGuestsPage.scss\";\r\nimport Table, {\r\n ColumnDefinition,\r\n} from \"../../../Shared/Components/Presentational/Table\";\r\nimport { faPlus } from \"@fortawesome/free-solid-svg-icons\";\r\nimport PassesFilter from \"./PassesFilter\";\r\nimport AddPass from \"../Container/AddPass\";\r\nimport Description from \"../../../Shared/Components/Presentational/Description\";\r\nimport { PrimaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport RenewPass from \"../Container/RenewPass\";\r\n\r\ninterface MyGuestsPageProps extends WithTranslation {\r\n columns: ColumnDefinition[];\r\n pagedResults: PagedResultDTO;\r\n filter: PassFilterDTO;\r\n selectedFilter: ParkPassTypeDTO;\r\n filters: ParkPassTypeDTO[];\r\n onFilterChange: (newFilter: any) => void;\r\n onFilterSelected: (filter: ParkPassTypeDTO) => void;\r\n pageSize: number;\r\n isSearchingPasses: boolean;\r\n openAddPassesModal: () => void;\r\n closeAddPassesModal: () => void;\r\n isHeaderOpen: boolean;\r\n passesToRenew: PassHeaderDTO[];\r\n openRenewPassesModal: () => void;\r\n closeRenewPassesModal: () => void;\r\n onPassesRenewed: () => void;\r\n coOwnerAccessTypes: DropdownListOption[];\r\n requirePassPhoto?: boolean;\r\n}\r\n\r\nclass MyGuestsPage extends Component {\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n const isRenewable =\r\n this.props.selectedFilter &&\r\n this.props.passesToRenew.length +\r\n this.props.selectedFilter.CurrentNumberOfPasses >\r\n this.props.selectedFilter.MaxNumberOfPasses;\r\n return (\r\n
\r\n {!this.props.isHeaderOpen && (\r\n <>\r\n

{t(\"myGuests.title\")}

\r\n

{t(\"myGuests.message\")}

\r\n \r\n )}\r\n \r\n this.props.openAddPassesModal()}\r\n className=\"add-pass\"\r\n />\r\n \r\n }\r\n descriptionComponent={\r\n \r\n }\r\n isLoading={this.props.isSearchingPasses}\r\n />\r\n {this.props.passesToRenew &&\r\n this.props.passesToRenew.length > 0 &&\r\n (!isRenewable ? (\r\n
\r\n this.props.openRenewPassesModal()}\r\n disabled={\r\n this.props.passesToRenew.length +\r\n this.props.selectedFilter.CurrentNumberOfPasses >\r\n this.props.selectedFilter.MaxNumberOfPasses\r\n }\r\n />\r\n
\r\n ) : (\r\n
\r\n The selected passes will exceed the maximum active number of{\" \"}\r\n {this.props.selectedFilter.MaxNumberOfPasses} for this pass type\r\n
\r\n ))}\r\n this.props.closeAddPassesModal()}\r\n />\r\n this.props.closeRenewPassesModal()}\r\n onPassesRenewed={this.props.onPassesRenewed}\r\n />\r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(MyGuestsPage);\r\n","import React, { Component } from 'react';\r\nimport { Translation } from 'react-i18next';\r\nimport { Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport Table, { ColumnDefinition } from '../../../Shared/Components/Presentational/Table';\r\nimport Fab from '../../../Shared/Components/Presentational/Fab';\r\nimport { faPlus } from '@fortawesome/free-solid-svg-icons';\r\nimport './MyGuestsPage.scss';\r\nimport AddPass from '../Container/AddPass';\r\nimport PassesFilter from './PassesFilter';\r\nimport Description from '../../../Shared/Components/Presentational/Description';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport RenewPass from '../Container/RenewPass';\r\n\r\ninterface MyGuestsPageMobileProps {\r\n columns: ColumnDefinition[];\r\n pagedResults: PagedResultDTO;\r\n filter: PassFilterDTO;\r\n selectedFilter: ParkPassTypeDTO;\r\n filters: ParkPassTypeDTO[];\r\n onFilterChange: (newFilter: any) => void;\r\n onFilterSelected: (filter: ParkPassTypeDTO) => void;\r\n pageSize: number;\r\n isSearchingPasses: boolean;\r\n openAddPassesModal: () => void;\r\n closeAddPassesModal: () => void;\r\n isHeaderOpen: boolean;\r\n passesToRenew: PassHeaderDTO[];\r\n openRenewPassesModal: () => void;\r\n closeRenewPassesModal: () => void;\r\n onPassesRenewed: () => void;\r\n requirePassPhoto?: boolean;\r\n}\r\n\r\nclass MyGuestsPageMobile extends Component {\r\n public render(): JSX.Element {\r\n const isRenewable =\r\n this.props.selectedFilter &&\r\n this.props.passesToRenew.length + this.props.selectedFilter.CurrentNumberOfPasses >\r\n this.props.selectedFilter.MaxNumberOfPasses;\r\n return (\r\n \r\n {(t: (key: string, args?: {}) => string) => {\r\n return (\r\n
\r\n

{t('myGuests.title')}

\r\n

{t('myGuests.message')}

\r\n \r\n this.props.openAddPassesModal()}\r\n className=\"add-pass\"\r\n />\r\n \r\n }\r\n descriptionComponent={\r\n \r\n }\r\n isLoading={this.props.isSearchingPasses}\r\n />\r\n {this.props.passesToRenew &&\r\n this.props.passesToRenew.length > 0 &&\r\n (!isRenewable ? (\r\n
\r\n this.props.openRenewPassesModal()}\r\n disabled={\r\n this.props.passesToRenew.length +\r\n this.props.selectedFilter.CurrentNumberOfPasses >\r\n this.props.selectedFilter.MaxNumberOfPasses\r\n }\r\n />\r\n
\r\n ) : (\r\n
\r\n The selected passes will exceed the maximum active number of{' '}\r\n {this.props.selectedFilter.MaxNumberOfPasses} for this pass type\r\n
\r\n ))}\r\n this.props.closeAddPassesModal()}\r\n />\r\n this.props.closeRenewPassesModal()}\r\n onPassesRenewed={this.props.onPassesRenewed}\r\n />\r\n \r\n
\r\n );\r\n }}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default MyGuestsPageMobile;\r\n","export default class PassStatus {\r\n public static AwaitingApproval: string = 'AwaitingApproval';\r\n public static AwaitingPhoto: string = 'AwaitingPhoto';\r\n public static Expired: string = 'Expired';\r\n public static Approved: string = 'Approved';\r\n public static PendingDeletion: string = 'PendingDeletion';\r\n public static Deleted: string = 'Deleted';\r\n}\r\n","import React from 'react';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport {\r\n faQuestionCircle,\r\n IconDefinition,\r\n faExclamationCircle,\r\n faCheckCircle\r\n} from '@fortawesome/free-solid-svg-icons';\r\nimport { CustomColumnCellRendererProps } from '../../../Shared/Components/Presentational/Table';\r\nimport './PassStatusColumnCellRenderer.scss';\r\nimport PassStatus from '../../../Constants/PassStatus';\r\n\r\nconst getIconByStatusCode = (code: string): IconDefinition => {\r\n switch (code) {\r\n case PassStatus.AwaitingApproval:\r\n case PassStatus.AwaitingPhoto:\r\n return faQuestionCircle;\r\n case PassStatus.Expired:\r\n return faExclamationCircle;\r\n case PassStatus.Approved:\r\n return faCheckCircle;\r\n default:\r\n return faQuestionCircle;\r\n }\r\n};\r\n\r\nconst getClassNameStatusCode = (code: string): string => {\r\n switch (code) {\r\n case PassStatus.AwaitingApproval:\r\n case PassStatus.AwaitingPhoto:\r\n return 'awaiting-approval';\r\n case PassStatus.Expired:\r\n return 'expired';\r\n case PassStatus.Approved:\r\n return 'approved';\r\n default:\r\n return '';\r\n }\r\n};\r\n\r\nconst PassStatusColumnCellRenderer: React.FC = props => {\r\n return (\r\n
\r\n \r\n
{props.rowValue.Status}
\r\n
\r\n );\r\n};\r\n\r\nexport { getIconByStatusCode, getClassNameStatusCode, PassStatusColumnCellRenderer as default };\r\n","import React from 'react';\r\nimport { CustomColumnCellRendererProps } from '../../../Shared/Components/Presentational/Table';\r\nimport './RemovePassColumnCellRenderer.scss';\r\nimport { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { ClickableIcon } from '../../../Shared/Components/Presentational/Icons';\r\nimport PassFunctionalityTypes from '../../../Constants/PassFunctionalityTypes';\r\nimport PassStatus from '../../../Constants/PassStatus';\r\n\r\nconst RemovePassColumnCellRenderer = (props: CustomColumnCellRendererProps) => {\r\n const { rowValue, clickAction } = props;\r\n const filter = props.filter as PassFilterDTO;\r\n\r\n const deletePass = () => {\r\n if (clickAction) {\r\n clickAction(rowValue);\r\n }\r\n };\r\n\r\n const canDeletePass = () => {\r\n if (\r\n filter.FunctionalityCode === PassFunctionalityTypes.Car ||\r\n filter.FunctionalityCode === PassFunctionalityTypes.ShortStay\r\n ) {\r\n return true;\r\n }\r\n\r\n // only season resort/owner passes should show the delete button if they're expired\r\n return rowValue.StatusCode === PassStatus.Expired;\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default RemovePassColumnCellRenderer;\r\n","import React from \"react\";\r\nimport \"./CoOwnerAccessCellRenderer.scss\";\r\nimport DropdownList from \"../../../Shared/Components/Presentational/DropdownList\";\r\nimport { CustomColumnCellRendererProps } from \"../../../Shared/Components/Presentational/Table\";\r\nimport PassStatus from \"../../../Constants/PassStatus\";\r\n\r\nconst CoOwnerAccessCellRenderer: React.FC = (\r\n props\r\n) => {\r\n const { clickAction, rowValue } = props;\r\n\r\n const dropdownOptions: DropdownListOption[] =\r\n (props.globalCellProps && props.globalCellProps.coOwnerAccessTypes) || [];\r\n\r\n return (\r\n
\r\n {[PassStatus.AwaitingApproval, PassStatus.Approved, PassStatus.AwaitingPhoto].includes(\r\n rowValue.StatusCode\r\n ) && (\r\n \r\n clickAction\r\n ? clickAction({ ...rowValue, CoOwnerAccessTypeCode: opt.value })\r\n : null\r\n }\r\n selectedOption={\r\n dropdownOptions.find(\r\n (o) => o.value == rowValue.CoOwnerAccessTypeCode\r\n ) || dropdownOptions.find((o) => o.value == \"None\")\r\n }\r\n isLoading={dropdownOptions == []}\r\n />\r\n )}\r\n
\r\n );\r\n};\r\n\r\nexport default CoOwnerAccessCellRenderer;\r\n","import React from 'react';\r\nimport PassStatus from '../../../Constants/PassStatus';\r\nimport { CustomColumnCellRendererProps } from '../../../Shared/Components/Presentational/Table';\r\nimport './PassRenewColumnCellRenderer.scss';\r\n\r\nconst PassRenewColumnCellRenderer: React.FC = (props) => {\r\n const { clickAction, rowValue } = props;\r\n\r\n const onCheck = (event: React.ChangeEvent) => {\r\n if (rowValue.StatusCode === PassStatus.Expired && clickAction) {\r\n clickAction(rowValue);\r\n }\r\n };\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default PassRenewColumnCellRenderer;\r\n","import React from 'react';\r\nimport { CustomColumnCellRendererProps } from '../../../Shared/Components/Presentational/Table';\r\nimport './PassNameMobileColumnCellRenderer.scss';\r\nimport PassFunctionalityTypes from '../../../Constants/PassFunctionalityTypes';\r\nimport PassStatus from '../../../Constants/PassStatus';\r\n\r\nexport default function PassNameMobileColumnCellRenderer(props: CustomColumnCellRendererProps) {\r\n const filter = props.filter as PassFilterDTO;\r\n\r\n const { clickAction, rowValue } = props;\r\n const isSeasonPass =\r\n filter.FunctionalityCode === PassFunctionalityTypes.SeasonOwner ||\r\n filter.FunctionalityCode === PassFunctionalityTypes.SeasonResort;\r\n\r\n const onCheck = (event: React.ChangeEvent) => {\r\n // we need the check for status code here again because the checkbox is still able to be checked if the\r\n // opacity is set to 0. We need to set opacity to make sure the text is always aligned for rows with or\r\n // without checkboxes\r\n if (rowValue.StatusCode === PassStatus.Expired && clickAction) {\r\n clickAction(rowValue);\r\n }\r\n };\r\n\r\n return (\r\n
\r\n {isSeasonPass && (\r\n \r\n )}\r\n\r\n
\r\n

\r\n {filter.FunctionalityCode === PassFunctionalityTypes.Car\r\n ? props.rowValue.RegistrationNumber\r\n : props.rowValue.PassDates}\r\n

\r\n

{props.rowValue.Name}

\r\n
\r\n
\r\n );\r\n}\r\n","import { faTimes } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport React from 'react';\r\nimport { ClickableIcon } from '../../../Shared/Components/Presentational/Icons';\r\nimport { CustomColumnCellRendererProps } from '../../../Shared/Components/Presentational/Table';\r\nimport { getClassNameStatusCode, getIconByStatusCode } from './PassStatusColumnCellRenderer';\r\nimport './PassStatusColumnCellRenderer.scss';\r\nimport PassFunctionalityTypes from '../../../Constants/PassFunctionalityTypes';\r\nimport PassStatus from '../../../Constants/PassStatus';\r\n\r\nexport function PassStatusMobileColumnCellRenderer(props: CustomColumnCellRendererProps) {\r\n const { rowValue, clickAction } = props;\r\n const filter = props.filter as PassFilterDTO;\r\n\r\n const deletePass = () => {\r\n if (clickAction) {\r\n clickAction(props.rowValue);\r\n }\r\n };\r\n\r\n const canDeletePass = () => {\r\n if (\r\n filter.FunctionalityCode === PassFunctionalityTypes.Car ||\r\n filter.FunctionalityCode === PassFunctionalityTypes.ShortStay\r\n ) {\r\n return true;\r\n }\r\n\r\n // only season resort/owner passes should show the delete button if they're expired\r\n return rowValue.StatusCode === PassStatus.Expired;\r\n };\r\n\r\n return (\r\n
\r\n
\r\n \r\n
{rowValue.Status}
\r\n
\r\n {canDeletePass() && }\r\n
\r\n );\r\n}\r\n","import { PutApiCall } from \"./ApiCall\";\r\n\r\nexport class PutUpdateSeasonPassCall extends PutApiCall {\r\n constructor(lodgeId: Number, id: string, coOwnerAccessType: string) {\r\n let url: string = `passes/${lodgeId}/UpdateSeasonPassAccess`;\r\n\r\n super(url);\r\n this.body = { coOwnerAccessType, id };\r\n }\r\n}\r\n","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetCoOwnerAccessTypesCall extends GetApiCall {\r\n constructor() {\r\n let url: string = \"Passes/CoOwnerAccessTypes\";\r\n\r\n super(url);\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport {\r\n Desktop,\r\n Mobile,\r\n} from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { connect } from \"react-redux\";\r\nimport MyGuestsPage from \"../Presentational/MyGuestsPage\";\r\nimport MyGuestsPageMobile from \"../Presentational/MyGuestsPage.mobile\";\r\nimport { ColumnDefinition } from \"../../../Shared/Components/Presentational/Table\";\r\nimport {\r\n getPasses,\r\n getParkPassTypes,\r\n setSelectedPassType,\r\n removeCarPass,\r\n removeShortStayPass,\r\n updateFilter,\r\n removeSeasonPass,\r\n getPassPhotoSizeLimit,\r\n} from \"../../Redux/ActionCreators\";\r\nimport {\r\n SEARCH_PASSES_REQUEST,\r\n SET_IS_ADD_PASS_MODAL_OPEN,\r\n SET_DELETE_PASS_CONFIRMATION_MODAL_OPEN,\r\n SET_IS_RENEW_PASS_MODAL_OPEN,\r\n} from \"../../Redux/ActionTypes\";\r\nimport PassStatusColumnCellRenderer from \"../Presentational/PassStatusColumnCellRenderer\";\r\nimport RemovePassColumnCellRenderer from \"../Presentational/RemovePassColumnCellRenderer\";\r\nimport CoOwnerAccessCellRenderer from \"../Presentational/CoOwnerAccessCellRenderer\";\r\nimport PassFunctionalityTypes from \"../../../Constants/PassFunctionalityTypes\";\r\nimport {\r\n ConfirmModal,\r\n SuccessModal,\r\n} from \"../../../Shared/Components/Presentational/Modal\";\r\nimport {\r\n useTranslation,\r\n withTranslation,\r\n WithTranslation,\r\n} from \"react-i18next\";\r\nimport { compose } from \"redux\";\r\nimport PassRenewColumnCellRenderer from \"../Presentational/PassRenewColumnCellRenderer\";\r\nimport PassNameMobileColumnCellRenderer from \"../Presentational/PassNameMobileColumnCellRenderer\";\r\nimport { PassStatusMobileColumnCellRenderer } from \"../Presentational/PassStatusMobileColumnCellRenderer\";\r\nimport { Get, Post, Put } from \"../../../Api/ApiService\";\r\nimport { PutUpdateSeasonPassCall } from \"../../../Api/Calls/PutUpdateSeasonPassCall\";\r\nimport { GetCoOwnerAccessTypesCall } from \"../../../Api/Calls/GetCoOwnerAccessTypesCall\";\r\nimport { JsxEmit } from \"typescript\";\r\nimport { PostGetSeasonPassesCall } from \"../../../Api/Calls/PostGetSeasonPassesCall\";\r\nimport { GetParkCall } from \"../../../Contentful/Calls/GetParkCall\";\r\nimport { Entry } from \"contentful\";\r\n\r\ninterface MyGuestsProps extends WithTranslation {\r\n dispatch: any;\r\n filter: PassFilterDTO;\r\n selectedFilter: ParkPassTypeDTO;\r\n filters: ParkPassTypeDTO[];\r\n searchResults: PagedResultDTO;\r\n selectedLodge: SelectedLodgeDTO;\r\n isSearchingPasses: boolean;\r\n selectedPark: any;\r\n isLoadingParkPassTypes: boolean;\r\n onFilterSelected: (filter: ParkPassTypeDTO) => void;\r\n onFilterChange(newFilter: PassFilterDTO): void;\r\n openAddPassesModal: () => void;\r\n closeAddPassesModal: () => void;\r\n isHeaderOpen: boolean;\r\n openDeletePassModal: () => void;\r\n isDeletePassModalOpen: boolean;\r\n closeDeletePassModal: () => void;\r\n removeCarPass: (passId: string) => void;\r\n removeSeasonPass: (passId: string) => void;\r\n removeShortStayPass: (passId: string, passFriendlyName: string) => void;\r\n openRenewPassesModal: () => void;\r\n closeRenewPassesModal: () => void;\r\n user: any;\r\n}\r\n\r\ninterface MyGuestsState {\r\n columns: ColumnDefinition[];\r\n mobileColumns: ColumnDefinition[];\r\n rowToDelete: any;\r\n passesToRenew: PassHeaderDTO[];\r\n coOwnerAccessTypes: DropdownListOption[];\r\n contentfulPark?: Entry;\r\n requirePassPhoto?: boolean;\r\n showCoOwnerAccessGrantedModal: boolean;\r\n}\r\n\r\nclass MyGuests extends Component {\r\n public componentDidMount(): void {\r\n Get(new GetCoOwnerAccessTypesCall()).then(\r\n (result) => {\r\n let accessTypes = result.data.map((c) => {\r\n return { label: c.Name, value: c.Code } as DropdownListOption;\r\n });\r\n\r\n this.setState({\r\n coOwnerAccessTypes: accessTypes,\r\n });\r\n },\r\n (err) => {}\r\n );\r\n\r\n GetParkCall(this.props.selectedPark.parkCode).then((result) => {\r\n this.setState({\r\n contentfulPark: result,\r\n requirePassPhoto: result.fields.myHaulfrynRequireGuestPhotos\r\n });\r\n });\r\n\r\n this.props.dispatch({\r\n type: SEARCH_PASSES_REQUEST,\r\n payload: undefined,\r\n });\r\n\r\n if (this.props.selectedPark) {\r\n this.props.dispatch(getParkPassTypes());\r\n }\r\n this.props.dispatch(getPassPhotoSizeLimit());\r\n }\r\n updateSeasonPassCoOwnerAccess = (rowVal: PassHeaderDTO): void => {\r\n Put(\r\n new PutUpdateSeasonPassCall(\r\n this.props.selectedLodge.LodgeId,\r\n rowVal.Id!,\r\n rowVal.CoOwnerAccessTypeCode\r\n )\r\n ).then(() => {\r\n if (rowVal.CoOwnerAccessTypeCode == \"FullAccess\") {\r\n this.setState({ showCoOwnerAccessGrantedModal: true });\r\n }\r\n });\r\n };\r\n\r\n onFilterSelected = (parkPassType: ParkPassTypeDTO) => {\r\n this.setState({ passesToRenew: [] });\r\n this.props.onFilterSelected(parkPassType);\r\n };\r\n\r\n openDeletePassModal = (rowVal: any): void => {\r\n this.setState({ rowToDelete: rowVal });\r\n this.props.openDeletePassModal();\r\n };\r\n\r\n toggleRenewPass = (rowVal: PassHeaderDTO): void => {\r\n if (this.state.passesToRenew.findIndex((p) => p.Id === rowVal.Id) > -1) {\r\n this.setState((prev) => {\r\n return {\r\n passesToRenew: prev.passesToRenew.filter((p) => p.Id !== rowVal.Id),\r\n };\r\n });\r\n } else {\r\n this.setState((prev) => {\r\n return { passesToRenew: [...prev.passesToRenew, rowVal] };\r\n });\r\n }\r\n };\r\n\r\n onPassesRenewed = (): void => {\r\n this.setState({ passesToRenew: [] });\r\n };\r\n\r\n public state: MyGuestsState = {\r\n columns: [\r\n {\r\n fieldName: \"Renew\",\r\n displayName: \"\",\r\n canShowColumn: (filter) =>\r\n [\r\n PassFunctionalityTypes.SeasonResort,\r\n PassFunctionalityTypes.SeasonOwner,\r\n ].includes((filter as PassFilterDTO).FunctionalityCode),\r\n customCellRenderer: PassRenewColumnCellRenderer,\r\n customCellClickAction: this.toggleRenewPass,\r\n fitContent: true,\r\n headerClassname: \"renew-checkbox-header\",\r\n cellClassname: \"renew-checkbox-header\",\r\n },\r\n {\r\n fieldName: \"Name\",\r\n displayName: \"myGuests.passes.nameColumn\",\r\n bold: true,\r\n canShowColumn: (_) => true,\r\n },\r\n {\r\n fieldName: \"PassDates\",\r\n displayName: \"myGuests.passes.passDatesColumn\",\r\n canShowColumn: (filter) =>\r\n [\r\n PassFunctionalityTypes.ShortStay,\r\n PassFunctionalityTypes.SeasonOwner,\r\n PassFunctionalityTypes.SeasonResort,\r\n ].includes((filter as PassFilterDTO).FunctionalityCode),\r\n },\r\n {\r\n fieldName: \"RegistrationNumber\",\r\n displayName: \"myGuests.passes.registrationNumberColumn\",\r\n canShowColumn: (filter) =>\r\n [PassFunctionalityTypes.Car].includes(\r\n (filter as PassFilterDTO).FunctionalityCode\r\n ),\r\n },\r\n {\r\n fieldName: \"CoOwnerAccessType\",\r\n displayName: \"myGuests.passes.coOwnerAccessType\",\r\n customCellRenderer: CoOwnerAccessCellRenderer,\r\n canShowColumn: (filter) =>\r\n [\r\n PassFunctionalityTypes.SeasonOwner,\r\n PassFunctionalityTypes.SeasonResort,\r\n ].includes((filter as PassFilterDTO).FunctionalityCode) &&\r\n !!this.props.user.ownerId &&\r\n !!this.state.contentfulPark &&\r\n !!this.state.contentfulPark!.fields\r\n .myHaulfrynAllowPermissionDelegation,\r\n customCellClickAction: this.updateSeasonPassCoOwnerAccess,\r\n },\r\n {\r\n fieldName: \"Status\",\r\n displayName: \"myGuests.passes.statusColumn\",\r\n translateField: false,\r\n customCellRenderer: PassStatusColumnCellRenderer,\r\n canShowColumn: (_) => true,\r\n },\r\n {\r\n fieldName: \"Delete\",\r\n displayName: \"\",\r\n canShowColumn: (_) => true,\r\n customCellRenderer: RemovePassColumnCellRenderer,\r\n customCellClickAction: this.openDeletePassModal,\r\n fitContent: true,\r\n headerClassname: \"remove-pass-cell-header\",\r\n },\r\n ],\r\n mobileColumns: [\r\n {\r\n fieldName: \"Name\",\r\n displayName: \"myGuests.passes.nameColumn\",\r\n canShowColumn: (_) => true,\r\n customCellRenderer: PassNameMobileColumnCellRenderer,\r\n customCellClickAction: this.toggleRenewPass,\r\n },\r\n {\r\n fieldName: \"Status\",\r\n displayName: \"myGuests.passes.statusColumn\",\r\n canShowColumn: (_) => true,\r\n customCellRenderer: PassStatusMobileColumnCellRenderer,\r\n customCellClickAction: this.openDeletePassModal,\r\n fitContent: true,\r\n cellClassname: \"pass-status-cell-mobile-container\",\r\n },\r\n ],\r\n rowToDelete: undefined,\r\n passesToRenew: [],\r\n coOwnerAccessTypes: [],\r\n contentfulPark: undefined,\r\n showCoOwnerAccessGrantedModal: false,\r\n };\r\n\r\n public onDeletePass(submitted: boolean): void {\r\n if (submitted && this.state.rowToDelete) {\r\n if (\r\n this.props.selectedFilter.FunctionalityCode ===\r\n PassFunctionalityTypes.Car\r\n ) {\r\n this.props.removeCarPass(this.state.rowToDelete.PassId);\r\n } else if (\r\n this.props.selectedFilter.FunctionalityCode ===\r\n PassFunctionalityTypes.ShortStay\r\n ) {\r\n const friendlyName = this.props.selectedFilter.NameTranslationKey;\r\n const translatedFriendlyName = this.props.t(friendlyName);\r\n this.props.removeShortStayPass(\r\n this.state.rowToDelete.PassId,\r\n translatedFriendlyName\r\n );\r\n } else {\r\n // season passes\r\n this.props.removeSeasonPass(this.state.rowToDelete.PassId);\r\n }\r\n }\r\n this.props.closeDeletePassModal();\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n this.onDeletePass(submitted)}\r\n />\r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n this.setState({ showCoOwnerAccessGrantedModal: false });\r\n }}\r\n title={t(\"myGuests.passes.coOwnerAccessSuccessModal.title\")}\r\n message={t(\"myGuests.passes.coOwnerAccessSuccessModal.body\")}\r\n buttonText={t(\"general.ok\")}\r\n />\r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n filter: state.guests.passesFilter,\r\n selectedFilter: state.guests.selectedParkPassType,\r\n filters: state.guests.parkPassTypes,\r\n searchResults: state.guests.passes,\r\n selectedLodge: state.user.lodge,\r\n selectedPark: state.user.park,\r\n user: state.user,\r\n isLoadingParkPassTypes: state.guests.isLoadingParkPassTypes,\r\n isSearchingPasses: state.guests.isSearchingPasses,\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n isDeletePassModalOpen: state.guests.isDeletePassModalOpen\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n getPasses,\r\n getPassPhotoSizeLimit,\r\n getParkPassTypes,\r\n onFilterSelected: (passType: ParkPassTypeDTO) => {\r\n dispatch(setSelectedPassType(passType, getPasses));\r\n },\r\n onFilterChange: (filter: PassFilterDTO) => {\r\n if (filter) {\r\n dispatch(updateFilter(filter));\r\n }\r\n },\r\n openAddPassesModal: () =>\r\n dispatch({ type: SET_IS_ADD_PASS_MODAL_OPEN, payload: true }),\r\n closeAddPassesModal: () =>\r\n dispatch({ type: SET_IS_ADD_PASS_MODAL_OPEN, payload: false }),\r\n openRenewPassesModal: () =>\r\n dispatch({ type: SET_IS_RENEW_PASS_MODAL_OPEN, payload: true }),\r\n closeRenewPassesModal: () =>\r\n dispatch({ type: SET_IS_RENEW_PASS_MODAL_OPEN, payload: false }),\r\n openDeletePassModal: () =>\r\n dispatch({\r\n type: SET_DELETE_PASS_CONFIRMATION_MODAL_OPEN,\r\n payload: true,\r\n }),\r\n closeDeletePassModal: () =>\r\n dispatch({\r\n type: SET_DELETE_PASS_CONFIRMATION_MODAL_OPEN,\r\n payload: false,\r\n }),\r\n removeCarPass: (passId: string) => dispatch(removeCarPass(passId)),\r\n removeSeasonPass: (passId: string) => dispatch(removeSeasonPass(passId)),\r\n removeShortStayPass: (passId: string, passFriendlyName: string) =>\r\n dispatch(removeShortStayPass(passId, passFriendlyName)),\r\n };\r\n};\r\n\r\nexport default compose(\r\n withTranslation(),\r\n connect(mapStateToProps, mapDispatchToProps)\r\n)(MyGuests);\r\nfunction getFieldList(FunctionalityCode: any): FormField[] {\r\n throw new Error(\"Function not implemented.\");\r\n}\r\n","import { faTrash } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport React from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { SecondaryButton } from '../../../../Shared/Components/Presentational/Buttons';\r\nimport { formatDate } from '../../../../Shared/Utilities/DateUtils';\r\n\r\ninterface FinaliseContainerProps extends WithTranslation {\r\n membership: MembershipDTO;\r\n editButtonFunction?: (value: any) => void;\r\n nowlaterButtonFunction: (membership: MembershipDTO,current: boolean) => void;\r\n state: string;\r\n isNow: boolean;\r\n deleteFunction: (isOpen: boolean, membershipId: string) => void;\r\n membershipText: string;\r\n}\r\n\r\nconst FinaliseContainer: React.FC = (props: FinaliseContainerProps) => {\r\n const { t } = props;\r\n\r\n const handleNowLaterClick = () => {\r\n props.nowlaterButtonFunction(props.membership, props.isNow);\r\n }\r\n\r\n const handleEditClick = () => {\r\n props.editButtonFunction && props.editButtonFunction({ state: props.state, membership: props.membership } as MembershipContainer);\r\n }\r\n\r\n const handleDelete = () => {\r\n props.membership && props.deleteFunction && props.deleteFunction(true, props.membership.id!);\r\n }\r\n\r\n const showDate = () => {\r\n let startDate: string = \"\";\r\n let endDate: string = \"\";\r\n if(props.membership && props.membership.startDate){\r\n startDate = formatDate(props.membership.startDate);\r\n }\r\n\r\n if (props.membership && props.membership.endDate){\r\n endDate = formatDate(props.membership.endDate);\r\n }\r\n\r\n if (startDate !== \"\" && endDate !== \"\"){\r\n return startDate + \" to \" + endDate;\r\n }\r\n return \"\";\r\n }\r\n\r\n\r\n return (\r\n <>\r\n

{props.membership.firstName} {props.membership.lastName}

\r\n

{props.membership && props.membership.email}

\r\n

{props.membership && props.membership.membershipType}

\r\n

{props.membership && showDate()}

\r\n

{props.membershipText}

\r\n {props.editButtonFunction && (\r\n
\r\n \r\n \r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default withTranslation()(FinaliseContainer);","export default class MembershipStates {\r\n public static readonly Finalise: string = \"Finalise\";\r\n public static readonly Draft: string = \"Draft\";\r\n public static readonly Active: string = \"Active\";\r\n public static readonly Expired: string = \"Expired\";\r\n public static readonly Referrals: string = \"Referrals\";\r\n}","import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport React from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { SecondaryButton } from '../../../../Shared/Components/Presentational/Buttons';\r\nimport { faTrash } from '@fortawesome/free-solid-svg-icons';\r\nimport MembershipStates from '../../../../Constants/MembershipStates';\r\nimport { formatDate } from '../../../../Shared/Utilities/DateUtils';\r\nimport { Link } from 'react-router-dom';\r\nimport * as Routes from \"../../../../Constants/Routes\";\r\n\r\ninterface MembershipDashboardCardProps extends WithTranslation {\r\n referredMembership?: ReferralDTO;\r\n membership?: MembershipDTO;\r\n buttonFunction?: (value: any) => void;\r\n state: string;\r\n deleteFunction?: (isOpen: boolean, membershipId: string) => void;\r\n membershipText?: string;\r\n canRenew?: boolean;\r\n renewFunction?: (value: any) => void;\r\n}\r\n\r\nconst MembershipDashboardCard: React.FC = (props: MembershipDashboardCardProps) => {\r\n const { t } = props;\r\n\r\n const handleClick = () => {\r\n props.buttonFunction && props.buttonFunction({ state: props.state, membership: props.membership } as MembershipContainer);\r\n }\r\n\r\n const handleDelete = () => {\r\n props.membership && props.deleteFunction && props.deleteFunction(true, props.membership.id!);\r\n }\r\n\r\n const handleRenew = () => {\r\n props.renewFunction && props.renewFunction({ state: props.state, membership: props.membership } as MembershipContainer);\r\n }\r\n\r\n const formatMembershipDates = () => {\r\n if (props.membership && props.membership.startDate && props.membership.endDate) {\r\n return `${formatDate(props.membership.startDate)} to ${formatDate(props.membership.endDate)}`;\r\n } else {\r\n return '';\r\n }\r\n }\r\n\r\n const getFormattedName = () => {\r\n if (props.membership) {\r\n return props.membership.firstName + \" \" + props.membership.lastName;\r\n }\r\n\r\n if (props.referredMembership) {\r\n return props.referredMembership.firstName + \" \" + props.referredMembership.lastName;\r\n }\r\n\r\n return '';\r\n }\r\n\r\n return (\r\n <>\r\n

{getFormattedName()}\r\n\r\n {props.state === MembershipStates.Draft &&\r\n \r\n \r\n \r\n }\r\n

\r\n

{props.membership && props.membership.email}

\r\n

{props.membership && props.membership.membershipType}

\r\n

{props.membership && formatMembershipDates()}

\r\n

{props.membershipText}

\r\n\r\n {\r\n props.referredMembership &&\r\n <>\r\n

Club membership transferred: {props.referredMembership.transferredMemberships} {props.referredMembership.transferredMemberships != 0 ? \"(\" + props.referredMembership.availableMemberships + \" available)\" : \"\"}

\r\n

Members managed:

\r\n
    \r\n {props.referredMembership.memberships.map((member) => {\r\n return
  • {member.firstName} {member.lastName} - {member.membershipType}
  • \r\n })}\r\n
\r\n \r\n }\r\n {props.buttonFunction && (\r\n
\r\n {props.canRenew && (\r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default withTranslation()(MembershipDashboardCard);\r\n","import React from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\n\r\ninterface GenericDisplayContainerProps extends WithTranslation {\r\n membershipContainers?: MembershipContainer[];\r\n referredContainer?: ReferralDTO[];\r\n state: string;\r\n renderComponent: (container: MembershipContainer | undefined, isNow: boolean | undefined, referredMembership?: ReferralDTO | undefined) => any;\r\n}\r\n\r\nconst GenericMembershipCardContainer: React.FC = (props: GenericDisplayContainerProps) => {\r\n const { t } = props;\r\n\r\n return (\r\n
\r\n

{t(\"myMemberships.\" + props.state + \".title\")}

\r\n\r\n
\r\n {props.membershipContainers && props.membershipContainers.map(membership => props.renderComponent(membership, undefined))}\r\n {props.referredContainer && props.referredContainer.map(referredMembership => props.renderComponent(undefined, undefined, referredMembership))}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default withTranslation()(GenericMembershipCardContainer);\r\n","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport UserRoles from '../../../Constants/UserRoles';\r\nimport { getOwnerMembershipAvailability } from '../../../User/Redux/ActionCreators';\r\nimport './RemainingMemberships.scss';\r\n\r\ninterface RemainingMembershipsProps {\r\n ownerMembershipsAvailability: OwnerMembershipAvailabilityDTO;\r\n getOwnerMembershipAvailability: () => void;\r\n userRoles: UserRoleDTO[];\r\n}\r\n\r\nconst RemainingMemberships: React.FC = (props) => {\r\n if (!props.ownerMembershipsAvailability) {\r\n props.getOwnerMembershipAvailability();\r\n }\r\n\r\n useEffect(() => {\r\n props.getOwnerMembershipAvailability();\r\n }, []);\r\n\r\n return (\r\n <>\r\n {props.userRoles && props.ownerMembershipsAvailability && (UserRoles.IsOwner(props.userRoles) || props.ownerMembershipsAvailability.allocated > 0) && (\r\n
\r\n {props.ownerMembershipsAvailability && (\r\n
\r\n\r\n {props.ownerMembershipsAvailability ? (\r\n

\r\n {props.ownerMembershipsAvailability && props.ownerMembershipsAvailability.numberUsed} of {props.ownerMembershipsAvailability && props.ownerMembershipsAvailability.allocated} Club memberships used\r\n

\r\n ) : (\r\n

\r\n Club memberships remaining unavailable\r\n

\r\n )}\r\n
\r\n )}\r\n
\r\n )}\r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n ownerMembershipsAvailability: state.user.ownerMembershipsAvailability,\r\n userRoles: state.user.userRoles,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n getOwnerMembershipAvailability: () => {\r\n dispatch(getOwnerMembershipAvailability());\r\n }\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RemainingMemberships);","import React, { useEffect, useState } from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { PrimaryButton } from '../../../../Shared/Components/Presentational/Buttons';\r\nimport RemainingMemberships from '../../../../Shared/Components/Presentational/RemainingMemberships';\r\n\r\ninterface FinaliseDisplayContainerProps extends WithTranslation {\r\n finaliseNowContainers: MembershipContainer[];\r\n finaliseLaterContainers: MembershipContainer[];\r\n state: string;\r\n signAndPay?: () => void;\r\n renderComponent: (container: MembershipContainer | undefined, isNow: boolean | undefined, referredMembership?: ReferralDTO | undefined) => any;\r\n willRequirePayment: (membershipContainers: MembershipContainer[]) => Promise;\r\n}\r\n\r\nconst FinaliseDisplayContainer: React.FC = (props: FinaliseDisplayContainerProps) => {\r\n const { t } = props;\r\n const [paymentRequired, setPaymentRequired] = useState(false);\r\n\r\n useEffect(() => {\r\n if (props.finaliseNowContainers) {\r\n props.willRequirePayment(props.finaliseNowContainers)\r\n .then(r => {\r\n setPaymentRequired(r);\r\n })\r\n }\r\n }, [props.finaliseNowContainers]);\r\n\r\n const handleSignAndPayClick = () => {\r\n props.signAndPay && props.signAndPay();\r\n }\r\n\r\n return (\r\n <>\r\n {props.finaliseNowContainers && props.finaliseNowContainers.length > 0 && (\r\n
\r\n
\r\n \r\n
\r\n

{t(\"myMemberships.\" + props.state + \".nowTitle\")}

\r\n\r\n
\r\n
\r\n {props.finaliseNowContainers && props.finaliseNowContainers.map((membership, key) => props.renderComponent(membership, true))}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n {props.finaliseLaterContainers && props.finaliseLaterContainers.length > 0 && (\r\n
\r\n

{t(\"myMemberships.\" + props.state + \".laterTitle\")}

\r\n\r\n
\r\n
\r\n {props.finaliseLaterContainers && props.finaliseLaterContainers.map(membership => props.renderComponent(membership, undefined))}\r\n
\r\n
\r\n
\r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default withTranslation()(FinaliseDisplayContainer);","import classNames from \"classnames\";\r\nimport React, { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { PrimaryButton, SecondaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { Modal, ModalHeader, ModalProps } from \"../../../Shared/Components/Presentational/Modal\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport { Entry } from \"contentful\";\r\n\r\ninterface ReferMembershipsPromptModalProps extends ModalProps {\r\n isOpen: boolean;\r\n setReferMembershipModalOpen: (isOpen: boolean) => void;\r\n clearMembershipForm: () => void;\r\n modalText: ContentfulContentObject;\r\n canAdd: boolean;\r\n canRefer: boolean;\r\n}\r\n\r\nconst ReferMembershipsPromptModal: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const open = props.isOpen;\r\n const setReferMembershipModalOpen = props.setReferMembershipModalOpen;\r\n const handleClick1 = async () => {\r\n setReferMembershipModalOpen(false);\r\n props.clearMembershipForm();\r\n }\r\n\r\n const handleClick2 = async () => {\r\n setReferMembershipModalOpen(false);\r\n props.clearMembershipForm();\r\n }\r\n\r\n const handleClick3 = () => {\r\n setReferMembershipModalOpen(false);\r\n }\r\n\r\n const formContents = (\r\n
\r\n
\r\n \r\n
\r\n {documentToReactComponents(props.modalText.content)}\r\n
\r\n {props.canAdd && \r\n \r\n }\r\n {props.canRefer && \r\n \r\n }\r\n \r\n
\r\n
\r\n )\r\n\r\n return (\r\n <>\r\n \r\n \r\n
{formContents}
\r\n
\r\n \r\n
\r\n {formContents}\r\n
\r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nexport default ReferMembershipsPromptModal;","import { Component } from \"react\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { SET_REFER_MEMBERSHIPS_PROMPT_OPEN } from '../../../Modal/Redux/ActionTypes';\r\nimport ReferMembershipsPromptModal from \"../Presentational/ReferMembershipsPromptModal\";\r\nimport React from \"react\";\r\nimport * as ActionTypes from '../../../Guests/Redux/ActionTypes';\r\nimport { GetHTMlContentBlockCall } from \"../../../Contentful/Calls/GetHTMLContentBlockCall\";\r\nimport { Entry } from \"contentful\";\r\n\r\ninterface ReferMembershipsPromptProps extends WithTranslation {\r\n showReferPrompt: boolean;\r\n setReferMembershipModalOpen: (isOpen: boolean) => void;\r\n clearMembershipForm: () => void;\r\n contentfulMembershipTypes: Entry[];\r\n canRefer: boolean;\r\n}\r\n\r\ninterface ReferMembershipsPromptState {\r\n modalText: ContentfulContentObject | undefined;\r\n contentLoaded: boolean;\r\n}\r\n\r\nclass ReferMembershipsPrompt extends Component {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n modalText: undefined,\r\n contentLoaded: false,\r\n }\r\n Promise.all([\r\n this.getModalText(\"My Haulfryn - Membership - Add or Refer\", \"modalText\")\r\n ]).then(r => {\r\n r.forEach(c => this.setState({ ...this.state, [c.name]: c }));\r\n this.setState({ contentLoaded: true });\r\n })\r\n }\r\n\r\n getModalText = async (name: string, label: string) => {\r\n const modalText = await GetHTMlContentBlockCall(name, label);\r\n return modalText;\r\n }\r\n\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n {this.state.contentLoaded && (\r\n <>\r\n \r\n 0}\r\n canRefer={this.props.canRefer}\r\n />\r\n \r\n \r\n 0}\r\n canRefer={this.props.canRefer}\r\n />\r\n \r\n \r\n )}\r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n showReferPrompt: state.modal.referMembership.isOpen,\r\n contentfulMembershipTypes: state.guests.contentfulMembershipTypes,\r\n canRefer: state.user.canReferWithMemberships || state.user.canReferWithOutMemberships,\r\n };\r\n};\r\n\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setReferMembershipModalOpen: (isOpen: boolean) => {\r\n dispatch({ type: SET_REFER_MEMBERSHIPS_PROMPT_OPEN, payload: isOpen })\r\n },\r\n clearMembershipForm: () => {\r\n dispatch({ type: ActionTypes.SAVE_AND_EXIT });\r\n },\r\n };\r\n};\r\n\r\n\r\nexport default withTranslation()(\r\n connect(mapStateToProps, mapDispatchToProps)(ReferMembershipsPrompt)\r\n)","import React from \"react\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Modal, ModalHeader, ModalProps } from \"../../../Shared/Components/Presentational/Modal\";\r\nimport { PrimaryButton, SecondaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport classNames from \"classnames\";\r\n\r\ninterface DeleteMembershipPromptProps extends ModalProps {\r\n isOpen: boolean;\r\n closeModal: (isOpen: boolean, membershipId: string | undefined) => void;\r\n deleteMembership: (membershipId: string) => void;\r\n membershipToDelete: string;\r\n}\r\n\r\nconst DeleteMembershipPrompt: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n\r\n const handleConfirm = () => {\r\n props.membershipToDelete && props.deleteMembership(props.membershipToDelete);\r\n props.closeModal(false, undefined);\r\n }\r\n\r\n const handleCancel = () => {\r\n props.closeModal(false, undefined);\r\n }\r\n\r\n const formContents = (\r\n
\r\n
\r\n \r\n

{t(\"myMemberships.deleteModal.message\")}

\r\n\r\n\r\n \r\n \r\n
\r\n
\r\n )\r\n\r\n return (\r\n <>\r\n\r\n \r\n \r\n
{formContents}
\r\n \r\n
\r\n \r\n \r\n
\r\n {formContents}\r\n
\r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nexport default DeleteMembershipPrompt;","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetMembershipPaymentSummaryCall extends GetApiCall {\r\n constructor(membershipBasketId: string) {\r\n let url: string = \"Membership/GetMembershipsPaymentSummary\";\r\n let params: any = { membershipBasketId };\r\n\r\n super(url, params);\r\n }\r\n}","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class CheckFriendMembershipQuotaCall extends GetApiCall {\r\n constructor(membershipBasketId: string) {\r\n let url: string = \"Membership/CheckFriendMembershipQuota\";\r\n let params: any = { membershipBasketId };\r\n\r\n super(url, params);\r\n }\r\n}","import classNames from 'classnames';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Link } from 'react-router-dom';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { Modal, ModalHeader, ModalProps } from '../../../Shared/Components/Presentational/Modal';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { GetHTMlContentBlockCall } from '../../../Contentful/Calls/GetHTMLContentBlockCall';\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\n\r\ninterface FriendMembershipModalProps extends ModalProps {\r\n isOpen: boolean;\r\n closeModal: () => void;\r\n datesExceededFriendQuota: FriendQuotaExceededDTO[];\r\n isFinalisePage: boolean;\r\n}\r\n\r\nconst FriendMembershipModal: React.FC = (props: FriendMembershipModalProps) => {\r\n const { t } = useTranslation();\r\n\r\n const organiseDates = (dates: FriendQuotaExceededDTO[]) => {\r\n let dateRanges: DateRange[] = [];\r\n for (let date of dates) {\r\n let dateMinusOne = new Date(date.dateExceeded);\r\n dateMinusOne.setDate(dateMinusOne.getDate() - 1);\r\n let dateRange = dateRanges.find(d => d.endDate.toLocaleDateString() === dateMinusOne.toLocaleDateString() && d.quotaExceededBy === (date.quotaUsed - date.authorisedOverlaps - date.quota));\r\n if (dateRange === undefined) {\r\n dateRange = {\r\n startDate: date.dateExceeded,\r\n endDate: date.dateExceeded,\r\n quotaExceededBy: date.quotaUsed - date.authorisedOverlaps - date.quota\r\n };\r\n dateRanges = dateRanges.concat(dateRange);\r\n } else {\r\n dateRange.endDate = date.dateExceeded;\r\n }\r\n }\r\n return dateRanges;\r\n }\r\n\r\n const [quota, setQuota] = useState(props.datesExceededFriendQuota[0].quota);\r\n const [dateRanges, setDateRanges] = useState(organiseDates(props.datesExceededFriendQuota));\r\n const [membershipsExceedingQuota, setMembershipExceedingQuota] = useState([]);\r\n\r\n\r\n useEffect(() => {\r\n let tempArray: MembershipWithDates[] = [];\r\n props.datesExceededFriendQuota.map(date => {\r\n for (let membership of date.membershipsOnDate) {\r\n if (tempArray.findIndex(m => m.id === membership.id) === -1) {\r\n tempArray.push(membership);\r\n }\r\n }\r\n });\r\n setMembershipExceedingQuota(tempArray);\r\n }, [props.datesExceededFriendQuota]);\r\n\r\n const handleClick = () => {\r\n props.closeModal();\r\n }\r\n\r\n const toPluralise = (array: any) => {\r\n return array.length > 1;\r\n }\r\n\r\n const formContents = (\r\n
\r\n
\r\n \r\n
\r\n

You are trying to finalise {toPluralise(membershipsExceedingQuota) ? \"\" : \" a \"}Friend membership{toPluralise(membershipsExceedingQuota) ? \"s\" : \"\"} that will exceed the daily quota of {quota} on {toPluralise(props.datesExceededFriendQuota) ? \"these\" : \"this\"} date{toPluralise(props.datesExceededFriendQuota) ? \"s\" : \"\"}:

\r\n
    \r\n {dateRanges.map((dateRange) => (\r\n //TO-DO: Change date formula calculation to use function that is on James' branch\r\n
  • Between {dateRange.startDate.getDate().toString() + \"/\" + String(dateRange.startDate.getMonth() + 1) + \"/\" + dateRange.startDate.getFullYear().toString()} and {dateRange.endDate.getDate().toString() + \"/\" + String(dateRange.endDate.getMonth() + 1) + \"/\" + dateRange.endDate.getFullYear().toString()} the quota will exceed by {dateRange.quotaExceededBy}
  • \r\n ))}\r\n
\r\n
\r\n\r\n
\r\n {props.isFinalisePage ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )}\r\n
\r\n
\r\n
\r\n );\r\n\r\n return (\r\n <>\r\n {membershipsExceedingQuota && membershipsExceedingQuota.length > 0 && (\r\n <>\r\n \r\n \r\n {formContents}\r\n \r\n \r\n \r\n \r\n {formContents}\r\n \r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default FriendMembershipModal;","import React from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { formatDate } from '../../../../Shared/Utilities/DateUtils';\r\nimport { Link } from 'react-router-dom';\r\nimport * as Routes from \"../../../../Constants/Routes\";\r\nimport { Entry } from 'contentful';\r\nimport { SecondaryButton } from '../../../../Shared/Components/Presentational/Buttons';\r\nimport MembershipStates from '../../../../Constants/MembershipStates';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport { faTrash } from '@fortawesome/free-solid-svg-icons';\r\n\r\ninterface ExpiredMembershipCardProps extends WithTranslation {\r\n membership: MembershipDTO;\r\n contentfulMembershipTypes: Entry[];\r\n deleteFunction?: (isOpen: boolean, membershipId: string) => void;\r\n}\r\n\r\nconst ExpiredMembershipCard: React.FC = (props: ExpiredMembershipCardProps) => {\r\n const { t } = props;\r\n\r\n const handleDelete = () => {\r\n props.membership && props.deleteFunction && props.deleteFunction(true, props.membership.id!);\r\n }\r\n\r\n const getMembershipText = (type: string) => {\r\n let text = \"\";\r\n let membershipType = props.contentfulMembershipTypes.find(mt => mt.sys.id === type);\r\n if (membershipType) {\r\n text = membershipType.fields.publicName;\r\n }\r\n return text;\r\n }\r\n\r\n return (\r\n \r\n
\r\n

\r\n {props.membership.firstName + \" \" + props.membership.lastName}\r\n \r\n \r\n

\r\n \r\n\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n\r\n

{props.membership && props.membership.email}

\r\n

{props.membership.membershipType}

\r\n

{`${formatDate(props.membership.startDate)} to ${formatDate(props.membership.endDate)}`}

\r\n

{getMembershipText(props.membership.contentfulMembershipTypeId)}

\r\n \r\n )\r\n}\r\n\r\nexport default withTranslation()(ExpiredMembershipCard);\r\n","import React from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport MembershipStates from '../../../../Constants/MembershipStates';\r\nimport { Entry } from 'contentful';\r\nimport ExpiredMembershipCard from './ExpiredMembershipCard';\r\n\r\ninterface ExpiredMembershipContainerProps extends WithTranslation {\r\n memberships: MembershipDTO[];\r\n contentfulMembershipTypes: Entry[];\r\n deleteFunction?: (isOpen: boolean, membershipId: string) => void;\r\n}\r\n\r\nconst ExpiredMembershipContainer: React.FC = (props: ExpiredMembershipContainerProps) => {\r\n const { t } = props;\r\n\r\n return (\r\n
\r\n

{t(\"myMemberships.\" + MembershipStates.Expired + \".title\")}

\r\n\r\n
\r\n {props.memberships.map(m => \r\n \r\n )}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default withTranslation()(ExpiredMembershipContainer);\r\n","export default class MembershipTypes {\r\n public static readonly Club: string = \"M6YnmNVtBesMdYNq7NEPK\";\r\n public static readonly Friend: string = \"6QNr3RAaSu4CIcxGs9pPpG\";\r\n public static readonly Guest: string = \"6ANNYQJyKM6Z31p3x1761I\";\r\n}","import { faPlus } from '@fortawesome/free-solid-svg-icons';\r\nimport React, { Component } from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { compose } from 'redux';\r\nimport { SET_REFER_MEMBERSHIPS_PROMPT_OPEN } from '../../../Modal/Redux/ActionTypes';\r\nimport Fab from '../../../Shared/Components/Presentational/Fab';\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\nimport { Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport {\r\n getAddMembershipById,\r\n getEditMemberDetailsById,\r\n getMembershipsThenMapToContainers,\r\n deleteMembership,\r\n createMembershipBasket,\r\n getReferredMembershipsByOwner,\r\n getContentfulMembershipTypes\r\n}\r\n from '../../Redux/ActionCreators';\r\nimport * as ActionTypes from '../../Redux/ActionTypes';\r\nimport FinaliseContainer from '../Presentational/MyMembershipsContainers/FinaliseContainer';\r\nimport MembershipDashboardCard from '../Presentational/MyMembershipsContainers/MembershipDashboardCard';\r\nimport GenericMembershipCardContainer from '../Presentational/MyMembershipsContainers/GenericDisplayContainer';\r\nimport \"./MyMemberships.scss\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport FinaliseDisplayContainer from '../Presentational/MyMembershipsContainers/FinaliseDisplayContainer';\r\nimport ReferMembershipsPrompt from '../../../Modal/Components/Container/ReferMembershipsPrompt';\r\nimport DeleteMembershipPromptModal from '../../../Modal/Components/Container/DeleteMembershipPromptModal';\r\nimport MembershipStates from '../../../Constants/MembershipStates';\r\nimport { Get } from '../../../Api/ApiService';\r\nimport { GetMembershipPaymentSummaryCall } from '../../../Api/Calls/GetMembershipPaymentSummaryCall';\r\nimport { Desktop } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { Entry } from 'contentful';\r\nimport RemainingMemberships from '../../../Shared/Components/Presentational/RemainingMemberships';\r\nimport { GetHTMlContentBlockCall } from '../../../Contentful/Calls/GetHTMLContentBlockCall';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { GetEntryCall } from '../../../Contentful/Calls/GetEntryCall';\r\nimport { CheckFriendMembershipQuotaCall } from '../../../Api/Calls/CheckFriendMembershipQuotaCall';\r\nimport FriendMembershipModal from '../../../Modal/Components/Container/FriendMembershipQuotaModal';\r\nimport ExpiredMembershipContainer from '../Presentational/MyMembershipsContainers/ExpiredMembershipContainer';\r\nimport { isWithinInterval, endOfToday, subWeeks, subDays } from 'date-fns';\r\nimport MembershipTypes from '../../../Constants/MembershipTypes';\r\n\r\ninterface MyMembershipsDashboardProps extends WithTranslation {\r\n isHeaderOpen: boolean;\r\n userRoles: UserRoleDTO[];\r\n memberships: MembershipDTO[];\r\n getMembershipsThenMapToContainers: () => void;\r\n getReferredMembershipsByOwner: () => void;\r\n getAddMembershipById: (membershipId: string) => void;\r\n isGettingMemberships: boolean;\r\n gettingMembershipsSuccess: boolean;\r\n gettingMembershipsFailure: boolean;\r\n isGettingAddMembershipById: boolean;\r\n gettingAddMembershipByIdSuccess: boolean;\r\n isReferPromptOpen: boolean;\r\n setReferMembershipModalOpen: (isOpen: boolean) => void;\r\n clearMembershipForm: () => void;\r\n updateMembershipBasket: (membershipBasket: MembershipDTO[]) => Promise;\r\n updateMembershipFormPage: (page: number) => void;\r\n isGettingEditMemberDetailsById: boolean;\r\n gettingEditMemberDetailsByIdSuccess: boolean;\r\n getEditMemberDetailsById: (membershipId: string) => void;\r\n membershipContainers: MembershipContainer[];\r\n finaliseNowContainers: MembershipContainer[];\r\n finaliseLaterContainers: MembershipContainer[];\r\n referredMemberships: ReferralDTO[];\r\n setFinaliseNowContainers: (containers: MembershipContainer[]) => void;\r\n setFinaliseLaterContainers: (containers: MembershipContainer[]) => void;\r\n deleteMembership: (membershipId: string) => void;\r\n createMembershipBasket: (membershipIds: string[]) => Promise;\r\n basketId: string;\r\n setPaymentDetailsDTO: (paymentDetails: PaymentBreakdownDTO) => Promise;\r\n setPaymentRequired: (isPaymentRequired: boolean) => void;\r\n contentfulMembershipTypes: Entry[];\r\n setContentfulMembershipTypes: () => void;\r\n canRefer: boolean;\r\n}\r\n\r\ninterface MyMembershipsDashboardState {\r\n isLoading: boolean;\r\n isDraft: boolean;\r\n isDeleteModalOpen: boolean;\r\n membershipToDelete: string;\r\n changePage: boolean;\r\n pageToChangeTo: string;\r\n headerText: ContentfulContentObject | undefined;\r\n descriptionText: ContentfulContentObject | undefined;\r\n noMembershipText: ContentfulContentObject | undefined;\r\n contentLoaded: boolean;\r\n datesExceededFriendQuota: FriendQuotaExceededDTO[] | undefined;\r\n isFriendMembershipQuotaModalOpen: boolean;\r\n showAddButton: boolean | undefined;\r\n}\r\n\r\nclass MyMembershipsDashboard extends Component {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n isLoading: false,\r\n isDraft: false,\r\n isDeleteModalOpen: false,\r\n membershipToDelete: \"\",\r\n changePage: false,\r\n pageToChangeTo: \"\",\r\n headerText: undefined,\r\n descriptionText: undefined,\r\n noMembershipText: undefined,\r\n contentLoaded: false,\r\n datesExceededFriendQuota: undefined,\r\n isFriendMembershipQuotaModalOpen: false,\r\n showAddButton: undefined,\r\n }\r\n\r\n this.props.getMembershipsThenMapToContainers();\r\n this.props.getReferredMembershipsByOwner();\r\n Promise.all([\r\n this.getContentBlock(\"My Haulfryn - Membership - My Members\", \"headerText\"),\r\n this.getContentBlock(\"My Haulfryn- New Membership - My Membership Summary.\", \"descriptionText\"),\r\n this.getContentBlock(\"My Haulfryn - My Memberships - No Membership\", \"noMembershipText\"),\r\n ]).then(r => {\r\n r.forEach(c => this.setState({ ...this.state, [c.name]: c }));\r\n this.setState({ contentLoaded: true })\r\n })\r\n }\r\n\r\n getContentBlock = async (name: string, label: string) => {\r\n const text = await GetHTMlContentBlockCall(name, label);\r\n return text;\r\n }\r\n\r\n componentDidMount() {\r\n if (!this.props.contentfulMembershipTypes) {\r\n this.props.setContentfulMembershipTypes();\r\n }\r\n this.setState({ isLoading: true });\r\n this.showAddButton();\r\n }\r\n\r\n showAddButton() {\r\n if (this.props.contentfulMembershipTypes) {\r\n this.setState({ showAddButton: this.props.canRefer || this.props.contentfulMembershipTypes.length > 0 });\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly, prevState: Readonly, snapshot?: any): void {\r\n // What do all these conditions amount to?\r\n if ((prevProps.isGettingAddMembershipById || prevProps.isGettingEditMemberDetailsById) &&\r\n (\r\n (!this.props.isGettingAddMembershipById && this.props.gettingAddMembershipByIdSuccess) ||\r\n (!this.props.isGettingEditMemberDetailsById && this.props.gettingEditMemberDetailsByIdSuccess)\r\n )) {\r\n this.state.isDraft ? this.setState({ pageToChangeTo: Routes.AddMembership, changePage: true }) : this.setState({ pageToChangeTo: Routes.ManageActiveMemberDetails, changePage: true })\r\n }\r\n\r\n if (this.state.isLoading && this.props.contentfulMembershipTypes) {\r\n this.setState({ isLoading: false });\r\n }\r\n\r\n if (this.props.membershipContainers && (!this.props.finaliseNowContainers || prevProps.membershipContainers !== this.props.membershipContainers)) {\r\n this.props.setFinaliseNowContainers(this.props.membershipContainers.filter(membership => membership.state === MembershipStates.Finalise));\r\n this.props.setFinaliseLaterContainers([]);\r\n };\r\n\r\n if (this.state.showAddButton === undefined\r\n && this.props.contentfulMembershipTypes) {\r\n this.showAddButton();\r\n }\r\n }\r\n\r\n // What does nowLaterOnClick mean?\r\n nowLaterOnClick(membership: MembershipDTO, current: boolean) {\r\n if (current) {\r\n this.props.setFinaliseNowContainers(this.props.finaliseNowContainers.filter(m => m.membership.id !== membership.id));\r\n\r\n this.props.setFinaliseLaterContainers(\r\n this.props.finaliseLaterContainers ?\r\n this.props.finaliseLaterContainers.concat({ state: MembershipStates.Finalise, membership: membership }) :\r\n [{ state: MembershipStates.Finalise, membership: membership }]\r\n );\r\n } else {\r\n this.props.setFinaliseLaterContainers(this.props.finaliseLaterContainers.filter(m => m.membership.id !== membership.id));\r\n\r\n this.props.setFinaliseNowContainers(\r\n this.props.finaliseNowContainers ?\r\n this.props.finaliseNowContainers.concat({ state: MembershipStates.Finalise, membership: membership }) :\r\n [{ state: MembershipStates.Finalise, membership: membership }]\r\n );\r\n }\r\n }\r\n\r\n async willbasketRequirePayment(membershipContainers: MembershipContainer[]): Promise {\r\n let requirePayment = false;\r\n for (let container of membershipContainers) {\r\n let ageBracketPrice: Entry = await GetEntryCall(container.membership.contentfulAgeBracketPriceId);\r\n if (ageBracketPrice.fields.price > 0) {\r\n requirePayment = true;\r\n break;\r\n }\r\n }\r\n this.props.setPaymentRequired(requirePayment);\r\n return requirePayment;\r\n }\r\n\r\n async signAndPay() {\r\n let membershipIds: string[] = [];\r\n let membershipBasket: MembershipDTO[] = [];\r\n\r\n for (let container of this.props.finaliseNowContainers) {\r\n membershipIds = membershipIds.concat(container.membership && container.membership.id!);\r\n membershipBasket = membershipBasket.concat(container.membership && container.membership);\r\n }\r\n\r\n this.setState({ isLoading: true });\r\n\r\n try {\r\n const basketId = await this.props.createMembershipBasket(membershipIds);\r\n await this.props.updateMembershipBasket(membershipBasket);\r\n const datesExceedingFriendQuota = (await Get(new CheckFriendMembershipQuotaCall(basketId))).data;\r\n if (datesExceedingFriendQuota.length > 0) {\r\n datesExceedingFriendQuota.map(quota => { quota.dateExceeded = new Date(quota.dateExceeded) });\r\n this.setState({ datesExceededFriendQuota: datesExceedingFriendQuota, isFriendMembershipQuotaModalOpen: true });\r\n throw new DOMException(\"Basket Exceeds Friend Membership Quota\");\r\n }\r\n const paymentSummary = await Get(new GetMembershipPaymentSummaryCall(basketId));\r\n await this.props.setPaymentDetailsDTO(paymentSummary.data);\r\n this.checkRouting(paymentSummary);\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n checkRouting(paymentSummary: any) {\r\n if (paymentSummary.status === 200) {\r\n this.setState({ pageToChangeTo: Routes.SelectPayment, changePage: true })\r\n }\r\n }\r\n\r\n setDeleteMembershipModalOpen(isOpen: boolean, membershipId: string | undefined) {\r\n this.setState({ isDeleteModalOpen: isOpen, membershipToDelete: membershipId ? membershipId : \"\" });\r\n }\r\n\r\n getMembershipText(type: string) {\r\n let text = \"\";\r\n let membershipType = this.props.contentfulMembershipTypes.find(mt => mt.sys.id === type);\r\n if (membershipType) {\r\n text = membershipType.fields.publicName;\r\n }\r\n return text;\r\n }\r\n\r\n isCurrentDateWithinFourWeeksOfTargetDate(targetDate: Date): boolean {\r\n targetDate = new Date(targetDate);\r\n let currentDate = endOfToday();\r\n let endMinusFourDate = subWeeks(targetDate, 4);\r\n return isWithinInterval(currentDate, { start: endMinusFourDate, end: targetDate }) || currentDate.toDateString() === targetDate.toDateString();\r\n }\r\n\r\n canRenew(membership: MembershipDTO): boolean {\r\n return this.isCurrentDateWithinFourWeeksOfTargetDate(membership.endDate) \r\n && membership.contentfulMembershipTypeId == MembershipTypes.Club;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n\r\n const renderComponent = (\r\n membership: MembershipContainer | undefined,\r\n isNow: boolean | undefined,\r\n referredMembership: ReferralDTO | undefined\r\n ) => {\r\n if (membership) {\r\n let membershipText = this.getMembershipText(membership.membership.contentfulMembershipTypeId);\r\n if (membership.state === MembershipStates.Finalise) {\r\n return (\r\n
\r\n \r\n
\r\n )\r\n } else {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n } else {\r\n // render Referred component\r\n if (referredMembership) {\r\n return (\r\n
\r\n {\r\n this.setState({ changePage: true, pageToChangeTo: Routes.ReferMembership + \"?id=\" + referredMembership.id })\r\n }}\r\n />\r\n
\r\n )\r\n }\r\n }\r\n }\r\n\r\n const getAddMembership = (membership: MembershipContainer) => {\r\n if (membership && membership.membership.id) {\r\n if (membership.state === MembershipStates.Draft || membership.state === MembershipStates.Finalise) {\r\n this.props.getAddMembershipById(membership.membership.id);\r\n this.props.updateMembershipFormPage(0);\r\n this.setState({ isLoading: true, isDraft: true });\r\n } else if (membership.state === MembershipStates.Active) {\r\n this.props.getEditMemberDetailsById(membership.membership.id);\r\n this.setState({ isDraft: false });\r\n }\r\n }\r\n }\r\n\r\n if (this.state.changePage) {\r\n return (\r\n \r\n )\r\n } else {\r\n return (\r\n <>\r\n {(this.state.contentLoaded && this.props.contentfulMembershipTypes) ? (\r\n
\r\n \r\n {!this.props.isHeaderOpen && (\r\n <>\r\n

{this.state.headerText!.title}

\r\n

{documentToReactComponents(this.state.headerText!.content)}

\r\n \r\n )}\r\n
\r\n \r\n {this.state.showAddButton && (\r\n {\r\n this.props.setReferMembershipModalOpen(true);\r\n }}\r\n className='add-pass'\r\n id={\"addMembership\"}\r\n />\r\n )}\r\n {(this.state.isLoading || this.props.isGettingMemberships) ? (\r\n
\r\n \r\n
\r\n ) : (this.props.gettingMembershipsSuccess && (\r\n <>\r\n
\r\n
\r\n

{this.state.descriptionText!.title}

\r\n
\r\n
\r\n
\r\n {documentToReactComponents(this.state.descriptionText!.content)}\r\n
\r\n\r\n {!this.props.membershipContainers || this.props.membershipContainers.filter(membership => membership.state === MembershipStates.Finalise).length === 0 && (\r\n
\r\n \r\n
\r\n )}\r\n\r\n {(this.props.memberships && this.props.membershipContainers && this.props.membershipContainers.length > 0) ? (\r\n <>\r\n {/* *** Finalise Memberships *** */}\r\n {this.props.membershipContainers.filter(membership => membership.state === MembershipStates.Finalise).length > 0 && (\r\n \r\n )}\r\n\r\n {/* *** Draft Memberships *** */}\r\n {this.props.membershipContainers.filter((membership) => membership.state === MembershipStates.Draft).length > 0 && (\r\n membership.state === MembershipStates.Draft)}\r\n state={MembershipStates.Draft}\r\n renderComponent={renderComponent.bind(this)}\r\n />\r\n )}\r\n {/* *** Active Memberships *** */}\r\n {this.props.membershipContainers.filter(membership => membership.state === MembershipStates.Active).length > 0 && (\r\n membership.state === MembershipStates.Active)}\r\n state={MembershipStates.Active}\r\n renderComponent={renderComponent.bind(this)}\r\n />\r\n )}\r\n\r\n {/* *** Expired Memberships *** */}\r\n {this.props.membershipContainers.filter(membership => membership.state === MembershipStates.Expired).length > 0 && (\r\n membership.state === MembershipStates.Expired)\r\n .map(container => container.membership)\r\n }\r\n contentfulMembershipTypes={this.props.contentfulMembershipTypes}\r\n deleteFunction={this.setDeleteMembershipModalOpen.bind(this)}\r\n />\r\n )}\r\n \r\n ) : (\r\n // *** No Memberships ***\r\n <>\r\n
\r\n {documentToReactComponents(this.state.noMembershipText!.content)}\r\n
\r\n \r\n )}\r\n\r\n {/* *** Referrals *** */}\r\n {(this.props.referredMemberships && this.props.referredMemberships.length > 0) && (\r\n \r\n )}\r\n \r\n ))}\r\n \r\n\r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n\r\n {this.props.isReferPromptOpen && ()}\r\n\r\n \r\n\r\n {this.state.datesExceededFriendQuota && (\r\n this.setState({ isFriendMembershipQuotaModalOpen: false })}\r\n datesExceededFriendQuota={this.state.datesExceededFriendQuota}\r\n isFinalisePage={false}\r\n />\r\n )}\r\n \r\n )\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n memberships: state.guests.memberships,\r\n isGettingMemberships: state.guests.isGettingMemberships,\r\n gettingMembershipsSuccess: state.guests.gettingMembershipsSuccess,\r\n gettingMembershipsFailure: state.guests.gettingMembershipsFailure,\r\n isGettingAddMembershipById: state.guests.isGettingAddMembershipById,\r\n gettingAddMembershipByIdSuccess: state.guests.gettingAddMembershipByIdSuccess,\r\n isGettingEditMemberDetailsById: state.guests.isGettingEditMemberDetailsById,\r\n gettingEditMemberDetailsByIdSuccess: state.guests.gettingEditMemberDetailsByIdSuccess,\r\n isReferPromptOpen: state.modal.referMembership.isOpen,\r\n membershipContainers: state.guests.membershipContainers,\r\n referredMemberships: state.guests.referredMemberships,\r\n finaliseNowContainers: state.guests.finaliseNowContainers,\r\n finaliseLaterContainers: state.guests.finaliseLaterContainers,\r\n basketId: state.guests.basketId,\r\n contentfulMembershipTypes: state.guests.contentfulMembershipTypes,\r\n userRoles: state.user.userRoles,\r\n canRefer: state.user.canRefer,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n getReferredMembershipsByOwner: () => { dispatch(getReferredMembershipsByOwner()) },\r\n getMembershipsThenMapToContainers: () => { dispatch(getMembershipsThenMapToContainers()) },\r\n getAddMembershipById: (membershipId: string) => dispatch(getAddMembershipById(membershipId)),\r\n clearMembershipForm: () => {\r\n dispatch({ type: ActionTypes.SAVE_AND_EXIT })\r\n },\r\n updateMembershipFormPage: (page: number) => {\r\n dispatch({ type: ActionTypes.UPDATE_MEMBERSHIP_FORM_PAGE, payload: page })\r\n },\r\n setReferMembershipModalOpen: (isOpen: boolean) => {\r\n dispatch({ type: SET_REFER_MEMBERSHIPS_PROMPT_OPEN, payload: isOpen })\r\n },\r\n getEditMemberDetailsById: (membershipId: string) => {\r\n dispatch(getEditMemberDetailsById(membershipId));\r\n },\r\n setFinaliseNowContainers: (finaliseNowContainers: MembershipContainer[]) => {\r\n dispatch({ type: ActionTypes.SET_FINALISE_NOW_CONTAINERS, payload: finaliseNowContainers });\r\n },\r\n setFinaliseLaterContainers: (finaliseLaterContainers: MembershipContainer[]) => {\r\n dispatch({ type: ActionTypes.SET_FINALISE_LATER_CONTAINERS, payload: finaliseLaterContainers });\r\n },\r\n deleteMembership: (membershipId: string) => {\r\n dispatch(deleteMembership(membershipId));\r\n },\r\n createMembershipBasket: async (membershipIds: string[]) => {\r\n let basketId = await dispatch(createMembershipBasket(membershipIds));\r\n return Promise.resolve(basketId);\r\n },\r\n updateMembershipBasket: (membershipBasket: MembershipDTO[]) => {\r\n dispatch({ type: ActionTypes.UPDATE_MEMBERSHIP_BASKET, payload: membershipBasket });\r\n return Promise.resolve();\r\n },\r\n setPaymentDetailsDTO: (paymentDetails: PaymentBreakdownDTO) => {\r\n dispatch({ type: ActionTypes.SET_PAYMENT_SUMMARY_DTO, payload: paymentDetails });\r\n return Promise.resolve();\r\n },\r\n setPaymentRequired: (isPaymentRequired: boolean) => {\r\n dispatch({ type: ActionTypes.SET_PAYMENT_REQUIRED, payload: isPaymentRequired });\r\n },\r\n setContentfulMembershipTypes: () => {\r\n dispatch(getContentfulMembershipTypes());\r\n },\r\n }\r\n}\r\n\r\nexport default compose(\r\n withTranslation(),\r\n connect(mapStateToProps, mapDispatchToProps)\r\n)(MyMembershipsDashboard);\r\n","import React, { Component } from 'react';\r\nimport './Details.scss';\r\nimport { Desktop, Mobile } from './ResponsiveViews';\r\nimport { Translation } from 'react-i18next';\r\nimport classNames from 'classnames';\r\n\r\ninterface DetailsProps {\r\n details: Map;\r\n detailsContainerClassName?: string;\r\n detailKeyClassName?: string;\r\n detailValueClassName?: string;\r\n}\r\n\r\nexport default class Details extends Component {\r\n createDetails = (t: any) => {\r\n let detailrows: JSX.Element[] = [];\r\n\r\n this.props.details.forEach((detailValue, detailKey) => {\r\n if (detailValue) {\r\n detailrows.push(\r\n
\r\n {t(detailKey)}\r\n {detailValue}\r\n
\r\n );\r\n }\r\n });\r\n\r\n return detailrows;\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n {(t: (key: string) => string) => {\r\n return (\r\n <>\r\n \r\n
\r\n {this.createDetails(t)}\r\n
\r\n
\r\n \r\n \r\n {this.createDetails(t)}\r\n \r\n \r\n \r\n );\r\n }}\r\n
\r\n );\r\n }\r\n}\r\n","import { icon, library, Icon, IconProp } from '@fortawesome/fontawesome-svg-core';\r\nimport { fas, IconLookup, IconName, IconPrefix } from '@fortawesome/free-solid-svg-icons';\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport './ImportantInformationWidget.scss';\r\nimport classNames from 'classnames';\r\nimport { Entry } from 'contentful';\r\nimport { fab } from '@fortawesome/free-brands-svg-icons';\r\n\r\ninterface ImportantInformationWidgetProps {\r\n importantInformation: Entry;\r\n onClick: () => void;\r\n containerClassName?: string;\r\n}\r\n\r\nconst ImportantInformationWidget: React.FC = ({\r\n importantInformation,\r\n onClick,\r\n containerClassName,\r\n}) => {\r\n const [fontAwesomeIcon, setFontAwesomeIcon] = useState();\r\n useEffect(() => {\r\n let faIcon: IconLookup = { prefix: '' as IconPrefix, iconName: '' as IconName };\r\n if (importantInformation.fields.icon) {\r\n const split = importantInformation.fields.icon.split(' ');\r\n if (split.length === 2) {\r\n faIcon = {\r\n prefix: split[0] as IconPrefix,\r\n iconName: split[1].replace('fa-', '') as IconName,\r\n };\r\n library.add(fas);\r\n library.add(fab);\r\n\r\n setFontAwesomeIcon(icon(faIcon));\r\n } else {\r\n const split = importantInformation.fields.icon.split('-');\r\n let faIcon: IconLookup = {\r\n prefix: split.splice(0, 1).toString() as IconPrefix,\r\n iconName: split.join('-') as IconName,\r\n };\r\n library.add(fas);\r\n library.add(fab);\r\n setFontAwesomeIcon(icon(faIcon));\r\n }\r\n }\r\n }, [importantInformation.fields.icon]);\r\n\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n {fontAwesomeIcon && }\r\n
\r\n
{importantInformation.fields.title}
\r\n
\r\n
\r\n
\r\n
\r\n {fontAwesomeIcon && }\r\n
\r\n
{importantInformation.fields.title}
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default ImportantInformationWidget;\r\n","import React, { Component } from 'react';\r\nimport {\r\n Accordion,\r\n AccordionItem,\r\n AccordionItemButton,\r\n AccordionItemHeading,\r\n AccordionItemPanel\r\n} from 'react-accessible-accordion';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\n//@ts-ignore\r\nimport Zoom from 'react-reveal/Zoom';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport ContactModal from '../../../Shared/Components/Presentational/ContactModal';\r\nimport Description from '../../../Shared/Components/Presentational/Description';\r\nimport Details from '../../../Shared/Components/Presentational/Details';\r\nimport { Widget, WidgetList } from '../../../Shared/Components/Presentational/Widget';\r\nimport NewsCardContainer from '../Container/NewsCardContainer';\r\nimport ImportantInformationWidget from './ImportantInformationWidget';\r\nimport './MyParkAndHomePage.scss';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Entry } from 'contentful';\r\nimport { INLINES } from '@contentful/rich-text-types';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport UserRoles from '../../../Constants/UserRoles';\r\n\r\ninterface MyParkAndHomePageProps extends WithTranslation {\r\n lodgeDetails: Map;\r\n isHeaderOpen: boolean;\r\n parkName: string;\r\n closeMyContactParkModal: () => void;\r\n openMyContactParkModal: () => void;\r\n isContactParkModalOpen: boolean;\r\n faqs: Entry[];\r\n importantInformation: Entry[];\r\n parkInformation: Entry;\r\n setSelectedImportantInformation: (selectedImportantInformationId: string) => void;\r\n setSelectedNewsItem: (selectedNewsItemId: string) => void;\r\n userRoles: UserRoleDTO[];\r\n}\r\n\r\ninterface MyParkAndHomePageState {\r\n navigateTo: string | undefined;\r\n}\r\n\r\nclass MyParkAndHomePage extends Component {\r\n public state: MyParkAndHomePageState = {\r\n navigateTo: undefined\r\n };\r\n\r\n navigateToImportantInfo(information: Entry): void {\r\n if (information && information.sys.id) {\r\n this.props.setSelectedImportantInformation(information.sys.id);\r\n this.setState({ navigateTo: Routes.ImportantInformation });\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n const options = {\r\n renderNode: {\r\n [INLINES.HYPERLINK]: ({ data }: any, children: any) => {\r\n return {children};\r\n }\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n {this.state.navigateTo && }\r\n {!this.state.navigateTo && (\r\n
\r\n {!this.props.isHeaderOpen && (!UserRoles.IsOwner(this.props.userRoles) ? (\r\n <>\r\n

{t('myParkAndHome.memberTitle')}

\r\n

{t('myParkAndHome.memberMessage')}

\r\n \r\n ) : (\r\n <>\r\n

{t('myParkAndHome.title')}

\r\n

{t('myParkAndHome.message')}

\r\n \r\n ))}\r\n \r\n
\r\n
\r\n {this.props.parkInformation && }\r\n \r\n
\r\n\r\n
\r\n {this.props.parkInformation && this.props.parkInformation.fields.image && \r\n \"image\r\n }\r\n
\r\n
\r\n
\r\n {this.props.importantInformation && this.props.importantInformation.length > 0 ? (\r\n <>\r\n
\r\n {t('myParkAndHome.importantInfo.header')}\r\n
\r\n
\r\n {this.props.importantInformation.map((information, i) => (\r\n this.navigateToImportantInfo(information)}\r\n />\r\n ))}\r\n
\r\n \r\n ) : null}\r\n
\r\n {UserRoles.IsOwner(this.props.userRoles) &&\r\n
\r\n \r\n
}\r\n {this.props.faqs && this.props.faqs.length > 0 ? (\r\n <>\r\n
{t('myParkAndHome.faqTitle')}
\r\n \r\n {this.props.faqs.map(f => (\r\n \r\n \r\n \r\n \"arrow\"\r\n {f.fields.question}\r\n \r\n \r\n \r\n {documentToReactComponents(f.fields.answer, options)}\r\n \r\n \r\n ))}\r\n \r\n \r\n ) : null}\r\n \r\n \r\n

{t('myParkAndHome.parkNewsFeed')}

\r\n \r\n
\r\n {this.props.parkInformation && this.props.closeMyContactParkModal()}\r\n contactDetails={{\r\n Title: t('myParkAndHome.contactPark'),\r\n Address: this.props.parkInformation.fields.postalAddress,\r\n PhoneNumber: this.props.parkInformation.fields.phoneNumber,\r\n Email: this.props.parkInformation.fields.emailAddress\r\n }}\r\n />}\r\n
\r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(MyParkAndHomePage);\r\n","import React, { Component } from 'react';\r\nimport {\r\n Accordion,\r\n AccordionItem,\r\n AccordionItemButton,\r\n AccordionItemHeading,\r\n AccordionItemPanel\r\n} from 'react-accessible-accordion';\r\nimport 'react-accessible-accordion/dist/fancy-example.css';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\n//@ts-ignore\r\nimport Zoom from 'react-reveal/Zoom';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport ContactModal from '../../../Shared/Components/Presentational/ContactModal';\r\nimport Description from '../../../Shared/Components/Presentational/Description';\r\nimport Details from '../../../Shared/Components/Presentational/Details';\r\nimport { Widget, WidgetList } from '../../../Shared/Components/Presentational/Widget';\r\nimport NewsCardContainer from '../Container/NewsCardContainer';\r\nimport ImportantInformationWidget from './ImportantInformationWidget';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { Redirect } from 'react-router-dom';\r\nimport { Entry } from 'contentful';\r\nimport { INLINES } from '@contentful/rich-text-types';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport UserRoles from '../../../Constants/UserRoles';\r\n\r\ninterface MyParkAndHomePageMobileProps extends WithTranslation {\r\n lodgeDetails: Map;\r\n isHeaderOpen: boolean;\r\n parkName: string;\r\n closeMyContactParkModal: () => void;\r\n openMyContactParkModal: () => void;\r\n isContactParkModalOpen: boolean;\r\n faqs: Entry[];\r\n importantInformation: Entry[];\r\n parkInformation: Entry;\r\n setSelectedImportantInformation: (selectedImportantInformationId: string) => void;\r\n setSelectedNewsItem: (selectedNewsItemId: string) => void;\r\n userRoles: UserRoleDTO[];\r\n}\r\n\r\ninterface MyParkAndHomePageMobileState {\r\n navigateTo: string | undefined;\r\n}\r\n\r\nclass MyParkAndHomePageMobile extends Component {\r\n public state: MyParkAndHomePageMobileState = {\r\n navigateTo: undefined\r\n };\r\n\r\n navigateToImportantInfo(information: Entry): void {\r\n if (information && information.sys.id) {\r\n this.props.setSelectedImportantInformation(information.sys.id);\r\n this.setState({ navigateTo: Routes.ImportantInformation });\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n const options = {\r\n renderNode: {\r\n [INLINES. HYPERLINK]: ({ data }: any, children: any) => {\r\n return {children};\r\n }\r\n }\r\n }\r\n return (\r\n <>\r\n {this.state.navigateTo && }\r\n {!this.state.navigateTo && (\r\n
\r\n {!UserRoles.IsOwner(this.props.userRoles) ? (\r\n <>\r\n

{t('myParkAndHome.memberTitle')}

\r\n

{t('myParkAndHome.memberMessage')}

\r\n \r\n ) : (\r\n <>\r\n

{t('myParkAndHome.title')}

\r\n

{t('myParkAndHome.message')}

\r\n \r\n )}\r\n \r\n {this.props.parkInformation && this.props.parkInformation.fields.image && \r\n \r\n }\r\n\r\n {this.props.parkInformation && }\r\n\r\n \r\n {/* */}\r\n
\r\n {this.props.importantInformation && this.props.importantInformation.length > 0 ? (\r\n \r\n
\r\n
\r\n {t('myParkAndHome.importantInfo.header')}\r\n
\r\n {this.props.importantInformation.map((information, i) => (\r\n this.navigateToImportantInfo(information)}\r\n />\r\n ))}\r\n
\r\n \r\n ) : null}\r\n
\r\n {this.props.faqs && this.props.faqs.length > 0 ? (\r\n <>\r\n
{t('myParkAndHome.faqTitle')}
\r\n \r\n {this.props.faqs.map(f => (\r\n \r\n \r\n \r\n \"arrow\"\r\n {f.fields.question}\r\n \r\n \r\n \r\n {documentToReactComponents(f.fields.answer, options)}\r\n \r\n \r\n ))}\r\n \r\n \r\n ) : null}\r\n
\r\n \r\n

{t('myParkAndHome.parkNewsFeed')}

\r\n \r\n
\r\n\r\n {this.props.parkInformation && this.props.closeMyContactParkModal()}\r\n contactDetails={{\r\n Title: t('myParkAndHome.contactPark'),\r\n Address: this.props.parkInformation.fields.postalAddress,\r\n PhoneNumber: this.props.parkInformation.fields.phoneNumber,\r\n Email: this.props.parkInformation.fields.emailAddress\r\n }}\r\n />}\r\n
\r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(MyParkAndHomePageMobile);\r\n","import React, { Component } from 'react';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { connect } from 'react-redux';\r\nimport MyParkAndHomePage from '../Presentational/MyParkAndHomePage';\r\nimport MyParkAndHomePageMobile from '../Presentational/MyParkAndHomePage.mobile';\r\nimport {\r\n SET_IS_CONTACT_PARK_MODAL_OPEN,\r\n SET_SELECTED_IMPORTANT_INFORMATION,\r\n SET_SELECTED_NEWS_ITEM,\r\n RELOAD_TRANSLATIONS\r\n} from '../../Redux/ActionTypes';\r\nimport { getFaqs, getImportantInformation, getParkInformation } from '../../Redux/ActionCreators';\r\nimport { Entry } from 'contentful';\r\n\r\ninterface MyParkAndHomeProps {\r\n dispatch: any;\r\n lodgeDetails: Map;\r\n isHeaderOpen: boolean;\r\n parkCode: string;\r\n parkName: string;\r\n closeMyContactParkModal: () => void;\r\n openMyContactParkModal: () => void;\r\n isContactParkModalOpen: boolean;\r\n faqs: Entry[];\r\n importantInformation: Entry[];\r\n parkInformation: Entry;\r\n setSelectedImportantInformation: (selectedImportantInformationId: string) => void;\r\n setSelectedNewsItem: (selectedNewsItemId: string) => void;\r\n userRoles: UserRoleDTO[];\r\n}\r\n\r\nclass MyParkAndHome extends Component {\r\n public componentDidMount(): void {\r\n this.props.dispatch(getFaqs(this.props.userRoles));\r\n this.props.dispatch(getImportantInformation(this.props.userRoles));\r\n this.props.dispatch(getParkInformation());\r\n // reload translation file\r\n this.props.dispatch({ type: RELOAD_TRANSLATIONS });\r\n }\r\n public render(): JSX.Element {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n let details = new Map();\r\n\r\n if (state.information.lodgeDetails && state.information.lodgeDetails.Details) {\r\n state.information.lodgeDetails.Details.forEach((detail: any) => {\r\n details.set('myParkAndHome.' + detail.Key, detail.Value);\r\n });\r\n }\r\n\r\n return {\r\n lodgeDetails: details,\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n parkCode: state.user.park ? state.user.park.ParkCode : undefined,\r\n parkName: (state.user.park && state.user.park.parkName) || 'your park',\r\n isContactParkModalOpen: state.information.isContactParkModalOpen,\r\n faqs: state.information.faqs,\r\n importantInformation: state.information.importantInformation,\r\n parkInformation: state.information.parkInformation,\r\n news: state.information.news,\r\n userRoles: state.user.userRoles,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n openMyContactParkModal: () => dispatch({ type: SET_IS_CONTACT_PARK_MODAL_OPEN, payload: true }),\r\n closeMyContactParkModal: () => dispatch({ type: SET_IS_CONTACT_PARK_MODAL_OPEN, payload: false }),\r\n setSelectedImportantInformation: (selectedImportantInformationId: string) =>\r\n dispatch({ type: SET_SELECTED_IMPORTANT_INFORMATION, payload: selectedImportantInformationId }),\r\n setSelectedNewsItem: (selectedNewsItemId: string) =>\r\n dispatch({ type: SET_SELECTED_NEWS_ITEM, payload: selectedNewsItemId })\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MyParkAndHome);\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostDownloadStatementCall extends PostApiCall {\r\n constructor(filter: TransactionFilterDTO) {\r\n let url: string = 'account/' + filter.AccountId + '/statement/download';\r\n\r\n super(url);\r\n\r\n this.body = filter;\r\n }\r\n}\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostDownloadStatementPdfCall extends PostApiCall {\r\n constructor(filter: TransactionFilterDTO) {\r\n let url: string = 'account/' + filter.AccountId + '/statementpdf/download';\r\n\r\n super(url);\r\n this.headers['Accept'] = 'application/pdf';\r\n this.body = filter;\r\n }\r\n}\r\n","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetMyBankDetailsCall extends GetApiCall {\r\n constructor(lodgeId: string) {\r\n let url: string = \"account/\" + lodgeId + \"/bankdetails\";\r\n\r\n super(url);\r\n }\r\n}","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetHaulfrynBankDetailsCall extends GetApiCall {\r\n constructor() {\r\n let url: string = \"account/haulfrynbankdetails\";\r\n\r\n super(url);\r\n }\r\n}","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostConfirmPaymentCall extends PostApiCall {\r\n constructor(paymentDetails: ConfirmPaymentDTO) {\r\n let url: string = 'payment/confirmPayment';\r\n\r\n super(url);\r\n\r\n this.body = paymentDetails;\r\n }\r\n}\r\n","import { useState, useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Post } from '../../Api/ApiService';\r\nimport { PostConfirmPaymentCall } from '../../Api/Calls/PostConfirmPaymentCall';\r\nimport { MyAccountPageProps } from '../Components/Presentational/MyAccountPage';\r\nimport { MyAccountPageMobileProps } from '../Components/Presentational/MyAccountPage.mobile';\r\n\r\nexport default function useMyAccountPage(props: MyAccountPageProps | MyAccountPageMobileProps) {\r\n const [paymentResultModalOpen, setPaymentResultModalOpen] = useState(false);\r\n const [paymentResultModalText, setPaymentResultModalText] = useState('');\r\n const [refreshPage, setRefreshPage] = useState(false);\r\n const { t } = useTranslation();\r\n\r\n useEffect(() => {\r\n props.onFilterChange(props.filter);\r\n\r\n const search = window.location.search;\r\n const params = new URLSearchParams(search);\r\n const paymentResult = params.get('paymentSuccess') as string;\r\n\r\n if (paymentResult) {\r\n props.setPaymentWindowOpen(false);\r\n const paymentSuccess = paymentResult === 'true';\r\n if (paymentSuccess && props.paymentDetails) {\r\n const confirmPaymentDetails: ConfirmPaymentDTO = {\r\n AccountId: props.ownerAccountId,\r\n Amount: props.paymentDetails.amount,\r\n ThirdPartyPaymentReference: props.paymentDetails.thirdPartyPaymentRef,\r\n };\r\n props.paymentConfirming();\r\n Post(new PostConfirmPaymentCall(confirmPaymentDetails)).then((result) => {\r\n props.paymentConfirmed(result.data.CurrentRentLedgerBalance);\r\n props.onFilterChange(props.filter);\r\n });\r\n }\r\n setPaymentResultModalOpen(true);\r\n setPaymentResultModalText(\r\n paymentSuccess ? t('myAccount.payment.paymentSuccess') : t('myAccount.payment.paymentFailure')\r\n );\r\n }\r\n }, []);\r\n\r\n const closePaymentResultModal = () => {\r\n setPaymentResultModalOpen(false);\r\n setPaymentResultModalText('');\r\n setRefreshPage(true);\r\n };\r\n\r\n return {\r\n closePaymentResultModal,\r\n paymentResultModalOpen,\r\n paymentResultModalText,\r\n refreshPage,\r\n };\r\n}\r\n","import React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport {\r\n Modal,\r\n ModalFooter,\r\n ModalHeader,\r\n ModalProps\r\n} from '../../../Shared/Components/Presentational/Modal';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport './MyBankDetailsModal.scss';\r\nimport classNames from 'classnames';\r\n\r\ninterface MyBankDetailsModalProps extends ModalProps {\r\n onBackButtonClick: () => void;\r\n myBankDetails: MyBankDetailsDTO;\r\n}\r\n\r\nconst MyBankDetailsModal: React.FC = props => {\r\n const { t } = useTranslation();\r\n const [bankDetails] = useState({\r\n accountNumber: props.myBankDetails.AccountNumber,\r\n sortCode: props.myBankDetails.SortCode\r\n });\r\n\r\n const getInput = (name: string, value: string) => {\r\n return {value};\r\n };\r\n\r\n const handleBackButton = () => {\r\n props.onBackButtonClick();\r\n };\r\n\r\n const formContents = (\r\n <>\r\n \r\n\r\n
\r\n
\r\n \r\n {getInput('accountNumber', bankDetails.accountNumber)}\r\n
\r\n
\r\n \r\n {getInput('sortCode', bankDetails.sortCode)}\r\n
\r\n
\r\n\r\n \r\n \r\n \r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n
{formContents}
\r\n
\r\n \r\n
{formContents}
\r\n
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default MyBankDetailsModal;\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { SET_IS_MY_BANK_DETAILS_MODAL_OPEN } from '../../Redux/ActionTypes';\r\nimport MyBankDetailsModal from '../Presentational/MyBankDetailsModal';\r\n\r\ninterface MyBankDetailsProps {\r\n isOpen: boolean;\r\n myBankDetails: MyBankDetailsDTO;\r\n onBackButtonClick: () => void;\r\n}\r\n\r\nclass MyBankDetails extends Component {\r\n public render(): JSX.Element {\r\n return (\r\n <>\r\n {this.props.isOpen && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isOpen: state.account.isMyBankDetailsModalOpen\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n onBackButtonClick: () => dispatch({ type: SET_IS_MY_BANK_DETAILS_MODAL_OPEN, payload: false })\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MyBankDetails);\r\n","import moment from \"moment\";\r\nimport React from \"react\";\r\nimport { CustomColumnCellRendererProps } from \"./Table\";\r\n\r\nconst DateColumnCellRenderer: React.FC = ({\r\n rowValue,\r\n}) => {\r\n const getDate = () => {\r\n const date = moment(rowValue.TransactionDate);\r\n return date.format(\"DD/MM/YYYY\");\r\n };\r\n\r\n return
{getDate()}
;\r\n};\r\n\r\nexport default DateColumnCellRenderer;\r\n","import React from 'react';\r\nimport { CustomColumnCellRendererProps } from '../../../Shared/Components/Presentational/Table';\r\nimport { getAmount } from '../../../Shared/Utilities/TransactionUtils';\r\n\r\nconst TransactionAmountCellRenderer: React.FC = ({ rowValue }) => {\r\n return
{getAmount(rowValue.Amount)}
;\r\n};\r\n\r\nexport default TransactionAmountCellRenderer;\r\n","import React, { Component } from 'react';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { ModalFooter, ModalHeader } from '../../../Shared/Components/Presentational/Modal';\r\nimport { PrimaryButton, SecondaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport './MakeAPaymentModal.scss';\r\n\r\ninterface MakeAPaymentModalProps extends WithTranslation {\r\n onBackButtonClick: () => void;\r\n paymentTypeClickEvent: (paymentType: any) => void;\r\n}\r\n\r\nclass MakeAPaymentModalDefault extends Component {\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n
\r\n this.props.paymentTypeClickEvent('card')}\r\n />\r\n this.props.paymentTypeClickEvent('bank')}\r\n />\r\n
\r\n
\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(MakeAPaymentModalDefault);\r\n","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetCountriesCall extends GetApiCall {\r\n constructor() {\r\n let url: string = \"payment/countries\";\r\n\r\n super(url);\r\n }\r\n}\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostMakeAPaymentCall extends PostApiCall {\r\n constructor(accountNo: string, paymentDetails: SagePayPaymentDetailsDTO) {\r\n let url: string = 'payment/' + accountNo + '/makeapayment';\r\n\r\n super(url);\r\n\r\n this.body = paymentDetails;\r\n }\r\n}\r\n","import React, { Component, ChangeEvent } from \"react\";\r\nimport { WithTranslation, withTranslation } from \"react-i18next\";\r\nimport {\r\n ModalFooter,\r\n ModalHeader,\r\n} from \"../../../Shared/Components/Presentational/Modal\";\r\nimport \"./MakeAPaymentModal.scss\";\r\nimport { PrimaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport DropdownList from \"../../../Shared/Components/Presentational/DropdownList\";\r\nimport { Get, Post } from \"../../../Api/ApiService\";\r\nimport { GetCountriesCall } from \"../../../Api/Calls/GetCountriesCall\";\r\nimport { PostMakeAPaymentCall } from \"../../../Api/Calls/PostMakeAPaymentCall\";\r\nimport { sagepayUrl } from \"../../../Shared/Environment\";\r\n\r\ninterface MakeAPaymentModalCardAddressProps extends WithTranslation {\r\n onBackButtonClick: () => void;\r\n paymentAmount: number;\r\n accountNumber: string;\r\n makePayment: (paymentDetails: PaymentDetails) => void;\r\n}\r\n\r\ninterface MakeAPaymentModalCardAddressState {\r\n address: {\r\n firstname: string;\r\n surname: string;\r\n addressLine1: string;\r\n addressLine2: string;\r\n city: string;\r\n postCode: string;\r\n country: string;\r\n };\r\n countries: DropdownListOption[];\r\n paymentRequestDetails: SagePayRequestDTO;\r\n hasValidAddress: boolean;\r\n}\r\n\r\nclass MakeAPaymentModalCardAddress extends Component {\r\n constructor(props: MakeAPaymentModalCardAddressProps) {\r\n super(props);\r\n\r\n this.handleInputChange = this.handleInputChange.bind(this);\r\n this.handleDropdownChange = this.handleDropdownChange.bind(this);\r\n this.proceed = this.proceed.bind(this);\r\n }\r\n\r\n private form = React.createRef();\r\n\r\n public state: MakeAPaymentModalCardAddressState = {\r\n address: {\r\n firstname: \"\",\r\n surname: \"\",\r\n addressLine1: \"\",\r\n addressLine2: \"\",\r\n city: \"\",\r\n postCode: \"\",\r\n country: \"\",\r\n },\r\n countries: [],\r\n paymentRequestDetails: {\r\n VPSProtocol: \"\",\r\n TxType: \"\",\r\n Vendor: \"\",\r\n Crypt: \"\",\r\n ThirdPartyPaymentReference: \"\",\r\n },\r\n hasValidAddress: false,\r\n };\r\n\r\n componentDidMount() {\r\n Get(new GetCountriesCall()).then(\r\n (result) => {\r\n let address = { ...this.state.address };\r\n address.country = \"GB\";\r\n\r\n this.setState({\r\n countries: result.data.map((c) => {\r\n return { label: c.Name, value: c.Code } as DropdownListOption;\r\n }),\r\n address: address,\r\n });\r\n },\r\n (err) => {}\r\n );\r\n }\r\n\r\n handleInputChange(e: ChangeEvent) {\r\n const { name, value } = e.target;\r\n let address = { ...this.state.address } as any;\r\n address[name] = value;\r\n this.setState({ address });\r\n }\r\n\r\n handleDropdownChange(ddlo: DropdownListOption) {\r\n if (ddlo) {\r\n let address = { ...this.state.address };\r\n address.country = ddlo.value;\r\n\r\n this.setState({ address });\r\n }\r\n }\r\n\r\n proceed() {\r\n const paymentDetails = {\r\n Amount: this.props.paymentAmount,\r\n FirstName: this.state.address.firstname,\r\n Surname: this.state.address.surname,\r\n AddressLine1: this.state.address.addressLine1,\r\n AddressLine2: this.state.address.addressLine2,\r\n City: this.state.address.city,\r\n PostCode: this.state.address.postCode,\r\n Country: this.state.address.country,\r\n } as SagePayPaymentDetailsDTO;\r\n\r\n Post(\r\n new PostMakeAPaymentCall(this.props.accountNumber, paymentDetails)\r\n ).then((res) => {\r\n // dispatch action to set\r\n this.setState({ paymentRequestDetails: res.data }, () => {\r\n if (this.state.paymentRequestDetails.VPSProtocol) {\r\n this.props.makePayment({\r\n amount: this.props.paymentAmount,\r\n thirdPartyPaymentRef: res.data.ThirdPartyPaymentReference,\r\n });\r\n (this.form as any).current.submit();\r\n }\r\n });\r\n });\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n\r\n
\r\n \r\n \r\n {!this.state.address.firstname && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n \r\n {!this.state.address.surname && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n \r\n {!this.state.address.addressLine1 && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n \r\n {!this.state.address.city && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n \r\n {!this.state.address.postCode && (\r\n \r\n )}\r\n
\r\n
\r\n \r\n c.value === this.state.address.country\r\n )[0]\r\n }\r\n />\r\n {!this.state.address.country && (\r\n \r\n )}\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(MakeAPaymentModalCardAddress);\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { MAKE_PAYMENT } from '../../Redux/ActionTypes';\r\nimport MakeAPaymentModalCardAddress from '../Presentational/MakeAPaymentModalCardAddress';\r\nimport { AppState } from '../../../RootReducer';\r\n\r\ninterface MakeAPaymentModalCardAddressContainerProps {\r\n onBackButtonClick: () => void;\r\n paymentAmount: number;\r\n accountNumber: string;\r\n makePayment: (paymentDetails: PaymentDetails) => void;\r\n}\r\n\r\nclass MakeAPaymentModalCardAddressContainer extends Component {\r\n public render(): JSX.Element {\r\n return (\r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: AppState) => {\r\n return {\r\n accountNumber: state.user.lodge.AccountNo,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n makePayment: (paymentDetails: PaymentDetails) => {\r\n dispatch({ type: MAKE_PAYMENT, payload: paymentDetails });\r\n },\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MakeAPaymentModalCardAddressContainer);\r\n","import React, { Component, ChangeEvent } from 'react';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { ModalFooter, ModalHeader } from '../../../Shared/Components/Presentational/Modal';\r\nimport './MakeAPaymentModal.scss';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport MakeAPaymentModalCardAddress from './MakeAPaymentModalCardAddress';\r\nimport MakeAPaymentModalCardAddressContainer from '../Container/MakeAPaymentModalCardAddressContainer';\r\n\r\ninterface MakeAPaymentModalCardProps extends WithTranslation {\r\n onBackButtonClick: () => void;\r\n currentBalance: number;\r\n accountNumber: string;\r\n}\r\n\r\ninterface MakeAPaymentModalCardState {\r\n amount: number;\r\n addressModalOpen: boolean;\r\n}\r\n\r\nclass MakeAPaymentModalCard extends Component {\r\n constructor(props: MakeAPaymentModalCardProps) {\r\n super(props);\r\n\r\n this.handleAmountInputChange = this.handleAmountInputChange.bind(this);\r\n this.handleAddressBackButton = this.handleAddressBackButton.bind(this);\r\n\r\n this.formatInput = this.formatInput.bind(this);\r\n this.proceed = this.proceed.bind(this);\r\n }\r\n\r\n public state: MakeAPaymentModalCardState = {\r\n amount: 0,\r\n addressModalOpen: false,\r\n };\r\n\r\n componentDidMount() {\r\n this.setState({ amount: this.props.currentBalance.toFixed(2) });\r\n }\r\n\r\n handleAmountInputChange(e: ChangeEvent) {\r\n const newAmount = e.target.value;\r\n this.setState({ amount: newAmount });\r\n }\r\n\r\n handleAddressBackButton() {\r\n this.setState({ addressModalOpen: false });\r\n }\r\n\r\n formatInput() {\r\n const amountFromState = this.state.amount;\r\n this.setState({ amount: parseFloat(amountFromState.toString()).toFixed(2) });\r\n }\r\n\r\n proceed() {\r\n this.setState({ addressModalOpen: true });\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n {!this.state.addressModalOpen && (\r\n <>\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n \r\n
\r\n \r\n \r\n )}\r\n {this.state.addressModalOpen && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(MakeAPaymentModalCard);\r\n","import React, { Component } from 'react';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { ModalFooter, ModalHeader } from '../../../Shared/Components/Presentational/Modal';\r\nimport './MakeAPaymentModal.scss';\r\n\r\ninterface MakeAPaymentModalBankProps extends WithTranslation {\r\n onBackButtonClick: () => void;\r\n bankAccountDetails?: HaulfrynBankDetailsDTO;\r\n}\r\n\r\nclass MakeAPaymentModalBank extends Component {\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n \r\n

{t('myAccount.payment.bankTransfer')}

\r\n
\r\n {this.props.bankAccountDetails && (\r\n
\r\n
\r\n

{t('myAccount.accountName')}

\r\n

{this.props.bankAccountDetails.AccountName}

\r\n
\r\n
\r\n

{t('myAccount.myBankDetails.sortCode')}

\r\n

{this.props.bankAccountDetails.SortCode}

\r\n
\r\n
\r\n

{t('myAccount.myBankDetails.accountNumber')}

\r\n

{this.props.bankAccountDetails.AccountNumber}

\r\n
\r\n
\r\n )}\r\n
\r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(MakeAPaymentModalBank);\r\n","import React, { Component } from 'react';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { Modal } from '../../../Shared/Components/Presentational/Modal';\r\nimport MakeAPaymentModalDefault from './MakeAPaymentModalDefault';\r\nimport MakeAPaymentModalCard from './MakeAPaymentModalCard';\r\nimport MakeAPaymentModalBank from './MakeAPaymentModalBank';\r\nimport './MakeAPaymentModal.scss';\r\n\r\ninterface MakeAPaymentProps extends WithTranslation {\r\n isOpen: boolean;\r\n onBackButtonClick: () => void;\r\n bankTransferClick: () => void;\r\n haulfryBankDetails?: HaulfrynBankDetailsDTO;\r\n currentBalance: undefined | number;\r\n accountNumber: string;\r\n}\r\n\r\ninterface MakeAPaymentState {\r\n paymentType: 'card' | 'bank' | undefined;\r\n}\r\n\r\nclass MakeAPaymentModal extends Component {\r\n public state: MakeAPaymentState = {\r\n paymentType: undefined,\r\n };\r\n\r\n onBackBtnClick = () => {\r\n this.setState({ paymentType: undefined });\r\n };\r\n\r\n setPaymentType = (paymentType: 'card' | 'bank' | undefined) => {\r\n if (paymentType === 'bank') {\r\n this.props.bankTransferClick();\r\n }\r\n this.setState({ paymentType });\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n {!this.state.paymentType && (\r\n \r\n )}\r\n {this.state.paymentType === 'bank' && (\r\n \r\n )}\r\n {this.state.paymentType === 'card' && (\r\n \r\n )}\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(MakeAPaymentModal);\r\n","import React, { Component } from 'react';\r\nimport './TransactionBalance.scss';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport MakeAPaymentModal from './MakeAPaymentModal';\r\nimport { PrimaryButton, SecondaryButton, TertiaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\n\r\ninterface TransactionBalanceProps extends WithTranslation {\r\n balance: undefined | number;\r\n downloadStatement: () => void;\r\n downloadPdfStatement: () => void;\r\n bankTransferClick: () => void;\r\n isDownloadingStatement: boolean;\r\n isDownloadingPdfStatement: boolean;\r\n setPaymentWindowOpen: (isOpen: boolean) => void;\r\n isPaymentWindowOpen: boolean;\r\n haulfryBankDetails?: HaulfrynBankDetailsDTO;\r\n accountNumber: string;\r\n}\r\n\r\nclass TransactionBalance extends Component {\r\n render() {\r\n const {\r\n t,\r\n balance,\r\n downloadStatement,\r\n downloadPdfStatement,\r\n isDownloadingStatement,\r\n isDownloadingPdfStatement,\r\n bankTransferClick,\r\n isPaymentWindowOpen,\r\n setPaymentWindowOpen,\r\n } = this.props;\r\n return (\r\n <>\r\n
\r\n
{t('myAccount.myBalance')}
\r\n {this.props.balance !== undefined && (\r\n
£{(balance as number).toFixed(2)}
\r\n )}\r\n setPaymentWindowOpen(true)}\r\n />\r\n \r\n \r\n \r\n
\r\n setPaymentWindowOpen(false)}\r\n bankTransferClick={bankTransferClick}\r\n haulfryBankDetails={this.props.haulfryBankDetails}\r\n currentBalance={this.props.balance}\r\n accountNumber={this.props.accountNumber}\r\n />\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(TransactionBalance);\r\n","import ContentfulClient from \"../ContentfulClient\";\r\n\r\nexport async function GetTransactionCategoriesCall() {\r\n let filter ={\r\n content_type: 'parcVuTransactionCategory',\r\n select: 'fields.categoryName'\r\n }\r\n const result = await ContentfulClient.getEntries(filter);\r\n\r\n if (result.errors){\r\n throw {message: \"GetTransactionCategoriesCall returned error/s\", errors: result.errors} \r\n }\r\n const finalResult = result.items.map(x=>x.fields.categoryName as string).filter((x, i, a) => a.indexOf(x) == i); \r\n\r\n return finalResult;\r\n}","import classNames from 'classnames';\r\nimport React, { Component, FormEvent } from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { SecondaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { ButtonContainer } from '../../../Shared/Components/Presentational/Containers';\r\nimport { isNotFutureDate, isValidDate } from '../../../Shared/Utilities/Validation';\r\nimport './TransactionFilter.scss';\r\nimport DropdownList from '../../../Shared/Components/Presentational/DropdownList';\r\nimport { GetTransactionCategoriesCall } from '../../../Contentful/Calls/GetTransactionCategoriesCall';\r\nimport DatePicker from 'react-datepicker';\r\nimport { NativeDatePicker } from '../../../Shared/Components/Presentational/NativeDatePicker';\r\nimport moment from 'moment';\r\nimport { Mobile, Desktop } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\n\r\ninterface TransactionFilterProps extends WithTranslation {\r\n onFilterChange: (newFilter: any) => void;\r\n filter: TransactionFilterDTO;\r\n}\r\n\r\ninterface TransactionFilterState {\r\n fromDate: Date | undefined;\r\n toDate: Date | undefined;\r\n fromDateValid: boolean;\r\n toDateValid: boolean;\r\n selectedFilter: string;\r\n transactionCategories: DropdownListOption[];\r\n}\r\n\r\nclass TransactionFilter extends Component {\r\n public state: TransactionFilterState = {\r\n fromDate: moment(this.props.filter.FromDate, 'DD/MM/YYYY').toDate(),\r\n toDate: moment(this.props.filter.ToDate, 'DD/MM/YYYY').toDate(),\r\n fromDateValid: true,\r\n toDateValid: true,\r\n selectedFilter: '',\r\n transactionCategories: [],\r\n };\r\n\r\n componentDidMount() {\r\n //get transaction types\r\n GetTransactionCategoriesCall().then((results) => {\r\n const transactionCategories = results.map((t) => {\r\n return {\r\n label: t,\r\n value: t,\r\n } as DropdownListOption;\r\n });\r\n\r\n transactionCategories.unshift({ label: '', value: '' });\r\n\r\n this.setState({ transactionCategories });\r\n });\r\n }\r\n\r\n handleDropdownChange = (newValue: DropdownListOption) => {\r\n this.setState({ selectedFilter: newValue.value }, () => this.search());\r\n };\r\n\r\n setDate(date: Date | null, type: 'from' | 'to') {\r\n const isValid = isNotFutureDate(date);\r\n let date2 = undefined;\r\n if (date !== null) {\r\n date2 = date;\r\n }\r\n if (type === 'from') {\r\n this.setState({ fromDate: date2, fromDateValid: isValid });\r\n } else {\r\n this.setState({ toDate: date2, toDateValid: isValid });\r\n }\r\n }\r\n\r\n searchButtonClicked(event: FormEvent) {\r\n event.preventDefault();\r\n this.search();\r\n }\r\n\r\n search = () => {\r\n const newFilter: TransactionFilterDTO = {\r\n ...this.props.filter,\r\n FromDate: moment(this.state.fromDate).format('DD/MM/YYYY'),\r\n ToDate: moment(this.state.toDate).format('DD/MM/YYYY'),\r\n TransactionCategory: this.state.selectedFilter,\r\n PageSize: 10,\r\n };\r\n this.props.onFilterChange(newFilter);\r\n };\r\n\r\n render() {\r\n return (\r\n
this.searchButtonClicked(event)}>\r\n
\r\n
\r\n \r\n \r\n this.setDate(e, 'from')}\r\n className={classNames('form-input', 'date-filter', {\r\n invalid: !this.state.fromDateValid,\r\n })}\r\n dateFormat=\"dd/MM/yyyy\"\r\n />\r\n \r\n \r\n this.setDate(e, 'from')}\r\n selected={this.state.fromDate}\r\n invalid={!this.state.fromDateValid}\r\n />\r\n \r\n
\r\n
\r\n \r\n \r\n this.setDate(e, 'to')}\r\n className={classNames('form-input', 'date-filter', {\r\n invalid: !this.state.toDateValid,\r\n })}\r\n dateFormat=\"dd/MM/yyyy\"\r\n />\r\n \r\n \r\n this.setDate(e, 'to')}\r\n selected={this.state.toDate}\r\n invalid={!this.state.toDateValid}\r\n />\r\n \r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(TransactionFilter);\r\n","import { faFileDownload } from '@fortawesome/free-solid-svg-icons';\r\nimport React from 'react';\r\nimport { ClickableIcon } from '../../../Shared/Components/Presentational/Icons';\r\nimport { CustomColumnCellRendererProps } from '../../../Shared/Components/Presentational/Table';\r\nimport useDownloadInvoice from '../../Hooks/useDownloadInvoice';\r\nimport './TransactionInvoiceCellRenderer.scss';\r\n\r\nconst TransactionInvoiceCellRenderer: React.FC = ({ rowValue }) => {\r\n const download = useDownloadInvoice(rowValue.InvoiceNo);\r\n\r\n if (!rowValue.HasInvoice) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default TransactionInvoiceCellRenderer;\r\n","import React from 'react';\r\nimport { TransactionIcon } from '../../../Shared/Components/Presentational/Icons';\r\nimport { CustomColumnCellRendererProps } from '../../../Shared/Components/Presentational/Table';\r\nimport './TransactionTypeCellRenderer.scss';\r\nimport { useTranslation } from 'react-i18next';\r\n\r\ninterface TransactionTypeProps {\r\n icon: TransactionIconDTO;\r\n description: string;\r\n}\r\n\r\nexport const TransactionType: React.FC = ({ icon, description }) => {\r\n const { t } = useTranslation();\r\n return (\r\n
\r\n \r\n
{t(description)}
\r\n
\r\n );\r\n};\r\n\r\nconst TransactionTypeCellRenderer: React.FC = ({ rowValue }) => {\r\n return ;\r\n};\r\n\r\nexport default TransactionTypeCellRenderer;\r\n","import React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport TableFilterPosition from \"../../../Constants/TableFilterPosition\";\r\nimport {\r\n PrimaryButton,\r\n TertiaryButton,\r\n} from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport {\r\n Modal,\r\n ModalHeader,\r\n} from \"../../../Shared/Components/Presentational/Modal\";\r\nimport { Desktop } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport Table, {\r\n ColumnDefinition,\r\n} from \"../../../Shared/Components/Presentational/Table\";\r\nimport { Widget } from \"../../../Shared/Components/Presentational/Widget\";\r\nimport useMyAccountPage from \"../../Hooks/useMyAccountPage\";\r\nimport MyBankDetails from \"../Container/MyBankDetails\";\r\nimport DateColumnCellRenderer from \"../../../Shared/Components/Presentational/DateColumnCellRenderer\";\r\nimport \"./MyAccountPage.scss\";\r\nimport TransactionAmountCellRenderer from \"./TransactionAmountCellRenderer\";\r\nimport TransactionBalance from \"./TransactionBalance\";\r\nimport TransactionFilter from \"./TransactionFilter\";\r\nimport TransactionInvoiceCellRenderer from \"./TransactionInvoiceCellRenderer\";\r\nimport TransactionTypeCellRenderer from \"./TransactionTypeCellRenderer\";\r\n\r\nconst columns: ColumnDefinition[] = [\r\n {\r\n fieldName: \"Description\",\r\n displayName: \"myAccount.transactionTypeColumn\",\r\n bold: true,\r\n canShowColumn: (_) => true,\r\n customCellRenderer: TransactionTypeCellRenderer,\r\n },\r\n {\r\n fieldName: \"TransactionDate\",\r\n displayName: \"myAccount.transactionDateColumn\",\r\n canShowColumn: (_) => true,\r\n customCellRenderer: DateColumnCellRenderer,\r\n },\r\n {\r\n fieldName: \"InvoiceNo\",\r\n displayName: \"myAccount.transactionNumberColumn\",\r\n canShowColumn: (_) => true,\r\n },\r\n {\r\n fieldName: \"Amount\",\r\n displayName: \"myAccount.transactionAmountColumn\",\r\n canShowColumn: (_) => true,\r\n customCellRenderer: TransactionAmountCellRenderer,\r\n headerAlignment: \"right\",\r\n },\r\n {\r\n fieldName: \"HasInvoice\",\r\n displayName: \"Invoice\",\r\n canShowColumn: (_) => true,\r\n customCellRenderer: TransactionInvoiceCellRenderer,\r\n headerAlignment: \"right\",\r\n },\r\n];\r\n\r\nexport interface MyAccountPageProps {\r\n isHeaderOpen: boolean;\r\n pageSize: number;\r\n isSearchingTransactions: boolean;\r\n searchResults: PagedResultDTO;\r\n filter: TransactionFilterDTO;\r\n onFilterChange: (newFilter: any) => void;\r\n myBankDetails?: MyBankDetailsDTO;\r\n openMyBankDetailsModal: () => void;\r\n downloadStatement: () => void;\r\n downloadPdfStatement: () => void;\r\n bankTransferClick: () => void;\r\n setPaymentWindowOpen: (isOpen: boolean) => void;\r\n isMakeAPaymentModalOpen: boolean;\r\n haulfryBankDetails?: HaulfrynBankDetailsDTO;\r\n isDownloadingStatement: boolean;\r\n isDownloadingPdfStatement: boolean;\r\n ownerAccountNumber: string;\r\n ownerAccountId: number;\r\n accountBalance: undefined | number;\r\n paymentDetails?: PaymentDetails;\r\n paymentConfirmed: (newBalance: number) => void;\r\n paymentConfirming: () => void;\r\n}\r\n\r\nexport default function MyAccountPage(props: MyAccountPageProps) {\r\n const {\r\n closePaymentResultModal,\r\n paymentResultModalOpen,\r\n paymentResultModalText,\r\n refreshPage,\r\n } = useMyAccountPage(props);\r\n\r\n const { t } = useTranslation();\r\n const { accountBalance } = props;\r\n\r\n return (\r\n
\r\n {!props.isHeaderOpen && (\r\n <>\r\n

{t(\"myAccount.title\")}

\r\n

{t(\"myAccount.message\")}

\r\n \r\n )}\r\n \r\n \r\n }\r\n filterPosition={TableFilterPosition.Below}\r\n isLoading={props.isSearchingTransactions}\r\n />\r\n \r\n \r\n
\r\n {t(\"myAccount.accountNumber\") + \" - \" + props.ownerAccountNumber}\r\n
\r\n \r\n {props.myBankDetails && (\r\n props.openMyBankDetailsModal()}\r\n text={t(\"myAccount.viewBankDetails\")}\r\n />\r\n )}\r\n \r\n {props.myBankDetails && (\r\n \r\n )}\r\n\r\n \r\n \r\n \r\n
\r\n

{paymentResultModalText}

\r\n \r\n
\r\n
\r\n
\r\n\r\n {refreshPage && }\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Redirect } from 'react-router';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { Modal, ModalHeader } from '../../../Shared/Components/Presentational/Modal';\r\nimport { Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport Table, { ColumnDefinition } from '../../../Shared/Components/Presentational/Table';\r\nimport { Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport useMyAccountPage from '../../Hooks/useMyAccountPage';\r\nimport MyBankDetails from '../Container/MyBankDetails';\r\nimport './MyAccountPage.scss';\r\nimport TransactionBalance from './TransactionBalance';\r\nimport TransactionFilter from './TransactionFilter';\r\nimport TransactionTypeMobileCellRenderer from './TransactionTypeMobileCellRenderer';\r\n\r\nconst columns: ColumnDefinition[] = [\r\n {\r\n fieldName: 'Description',\r\n displayName: 'myAccount.transactionNumberColumn',\r\n canShowColumn: (_) => true,\r\n customCellRenderer: TransactionTypeMobileCellRenderer,\r\n },\r\n];\r\n\r\nexport interface MyAccountPageMobileProps {\r\n pageSize: number;\r\n isSearchingTransactions: boolean;\r\n searchResults: PagedResultDTO;\r\n filter: TransactionFilterDTO;\r\n onFilterChange: (newFilter: any) => void;\r\n myBankDetails?: MyBankDetailsDTO;\r\n openMyBankDetailsModal: () => void;\r\n downloadStatement: () => void;\r\n downloadPdfStatement: () => void;\r\n bankTransferClick: () => void;\r\n setPaymentWindowOpen: (isOpen: boolean) => void;\r\n isMakeAPaymentModalOpen: boolean;\r\n haulfryBankDetails?: HaulfrynBankDetailsDTO;\r\n isDownloadingStatement: boolean;\r\n isDownloadingPdfStatement: boolean;\r\n ownerAccountNumber: string;\r\n ownerAccountId: number;\r\n accountBalance: undefined | number;\r\n paymentDetails?: PaymentDetails;\r\n paymentConfirmed: (newBalance: number) => void;\r\n paymentConfirming: () => void;\r\n}\r\n\r\nexport default function MyAccountPageMobile(props: MyAccountPageMobileProps) {\r\n const { closePaymentResultModal, paymentResultModalOpen, paymentResultModalText, refreshPage } = useMyAccountPage(\r\n props\r\n );\r\n const { t } = useTranslation();\r\n const { accountBalance } = props;\r\n\r\n return (\r\n
\r\n

{t('myAccount.title')}

\r\n

{t('myAccount.message')}

\r\n \r\n
\r\n {t('myAccount.accountNumber') + ' - ' + props.ownerAccountNumber}\r\n
\r\n \r\n {props.myBankDetails && (\r\n
props.openMyBankDetailsModal()}>\r\n {t('myAccount.viewBankDetails')}\r\n
\r\n )}\r\n \r\n \r\n }\r\n isLoading={props.isSearchingTransactions}\r\n />\r\n \r\n {props.myBankDetails && }\r\n\r\n \r\n \r\n \r\n
\r\n

{paymentResultModalText}

\r\n \r\n
\r\n
\r\n
\r\n\r\n {refreshPage && }\r\n
\r\n );\r\n}\r\n","import React from 'react';\r\nimport { CustomColumnCellRendererProps } from '../../../Shared/Components/Presentational/Table';\r\nimport './TransactionTypeMobileCellRenderer.scss';\r\nimport TransactionItem from '../../../Home/Components/Presentational/TransactionItem';\r\n\r\nconst TransactionTypeMobileCellRenderer: React.FC = ({ rowValue }) => {\r\n return ;\r\n};\r\n\r\nexport default TransactionTypeMobileCellRenderer;\r\n","import React, { Component } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { AppState } from '../../../RootReducer';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { updateTransactionFilter } from '../../Redux/ActionCreators';\r\nimport MyAccountPage from '../Presentational/MyAccountPage';\r\nimport MyAccountPageMobile from '../Presentational/MyAccountPage.mobile';\r\nimport {\r\n SET_IS_MY_BANK_DETAILS_MODAL_OPEN,\r\n SET_IS_HAULFRYN_BANK_DETAILS_MODAL_OPEN,\r\n PAYMENT_CONFIRMED,\r\n PAYMENT_CONFIRMING,\r\n} from '../../Redux/ActionTypes';\r\nimport { getMyBankDetails, downloadStatement, downloadPdfStatement, getHaulfrynBankDetails } from '../../Redux/ActionCreators';\r\n\r\ninterface MyAccountProps {\r\n dispatch: any;\r\n selectedLodge: SelectedLodgeDTO;\r\n isHeaderOpen: boolean;\r\n filter: TransactionFilterDTO;\r\n searchResults: PagedResultDTO;\r\n isSearchingTransactions: boolean;\r\n onFilterChange: (newFilter: TransactionFilterDTO) => void;\r\n myBankDetails?: MyBankDetailsDTO;\r\n openMyBankDetailsModal: () => void;\r\n getMyBankDetails: any;\r\n downloadStatement: () => void;\r\n downloadPdfStatement: () => void;\r\n bankTransferClick: () => void;\r\n openMakeAPaymentModal: () => void;\r\n setPaymentWindowOpen: (isOpen: boolean) => void;\r\n haulfryBankDetails?: HaulfrynBankDetailsDTO;\r\n isDownloadingStatement: boolean;\r\n isDownloadingPdfStatement: boolean;\r\n isMakeAPaymentModalOpen: boolean;\r\n paymentDetails?: PaymentDetails;\r\n paymentConfirmed: (newBalance: number) => void;\r\n paymentConfirming: () => void;\r\n}\r\n\r\nclass MyAccount extends Component {\r\n componentDidMount() {\r\n this.props.getMyBankDetails();\r\n }\r\n render() {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: AppState) => {\r\n return {\r\n selectedLodge: state.user.lodge,\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n filter: state.account.transactionFilter,\r\n searchResults: state.account.transactions,\r\n isSearchingTransactions: state.account.isSearchingTransactions,\r\n myBankDetails: state.account.myBankDetails,\r\n isDownloadingStatement: state.account.isDownloadingStatement,\r\n isDownloadingPdfStatement: state.account.isDownloadingPdfStatement,\r\n isMakeAPaymentModalOpen: state.account.isMakeAPaymentModalOpen,\r\n haulfryBankDetails: state.account.haulfrynBankDetails,\r\n paymentDetails: state.account.paymentDetails,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n downloadStatement: () => dispatch(downloadStatement()),\r\n downloadPdfStatement: () => dispatch(downloadPdfStatement()),\r\n getMyBankDetails: () => dispatch(getMyBankDetails()),\r\n openMyBankDetailsModal: () => dispatch({ type: SET_IS_MY_BANK_DETAILS_MODAL_OPEN, payload: true }),\r\n bankTransferClick: () => dispatch(getHaulfrynBankDetails()),\r\n onFilterChange: (newFilter: TransactionFilterDTO) => {\r\n dispatch(updateTransactionFilter(newFilter));\r\n },\r\n setPaymentWindowOpen: (isOpen: boolean) => {\r\n dispatch({ type: SET_IS_HAULFRYN_BANK_DETAILS_MODAL_OPEN, payload: isOpen });\r\n },\r\n paymentConfirmed: (newBalance: number) => dispatch({ type: PAYMENT_CONFIRMED, payload: newBalance }),\r\n paymentConfirming: () => dispatch({ type: PAYMENT_CONFIRMING }),\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MyAccount);\r\n","import moment from 'moment';\r\nimport { Action } from 'redux';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport { Get, Post } from '../../Api/ApiService';\r\nimport { PostDownloadStatementCall } from '../../Api/Calls/PostDownloadStatementCall';\r\nimport { PostDownloadStatementPdfCall } from '../../Api/Calls/PostDownloadStatementPdfCall';\r\nimport { GetMyBankDetailsCall } from '../../Api/Calls/GetMyBankDetailsCall';\r\nimport { GetHaulfrynBankDetailsCall } from '../../Api/Calls/GetHaulfrynBankDetailsCall';\r\nimport { PostTransactionSearchCall } from '../../Api/Calls/PostTransactionSearchCall';\r\nimport { AppState } from '../../RootReducer';\r\nimport * as ActionTypes from './ActionTypes';\r\n\r\nexport const getTransactions = (): ThunkAction => async (dispatch, getState) => {\r\n var filter = getState().account.transactionFilter;\r\n dispatch({ type: ActionTypes.SEARCH_TRANSACTIONS_REQUEST, payload: true });\r\n\r\n Post(new PostTransactionSearchCall(filter))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.SEARCH_TRANSACTIONS_SUCCESS, payload: response.data });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.SEARCH_TRANSACTIONS_FAILURE, payload: error });\r\n });\r\n};\r\n\r\nexport const updateTransactionFilter = (\r\n newFilter: TransactionFilterDTO\r\n): ThunkAction => async (dispatch, getState) => {\r\n const selectedAccountId = getState().user.lodge.AccountId;\r\n const selectedAccountnumber = getState().user.lodge.AccountNo;\r\n newFilter.AccountId = selectedAccountId;\r\n newFilter.AccountNumber = selectedAccountnumber;\r\n dispatch({ type: ActionTypes.SET_TRANSACTION_FILTER, payload: newFilter });\r\n dispatch(getTransactions());\r\n};\r\n\r\nexport const getMyBankDetails = (): ThunkAction => async (dispatch, getState) => {\r\n const lodge: SelectedLodgeDTO = getState().user.lodge;\r\n\r\n dispatch({ type: ActionTypes.GET_MY_BANK_DETAILS_REQUEST, payload: true });\r\n Get(new GetMyBankDetailsCall(lodge.LodgeId.toString()))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.GET_MY_BANK_DETAILS_SUCCESS, payload: response.data });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.GET_MY_BANK_DETAILS_FAILURE, payload: error });\r\n });\r\n};\r\n\r\nexport const getHaulfrynBankDetails = (): ThunkAction => async (dispatch) => {\r\n dispatch({ type: ActionTypes.GET_HAULFRYN_BANK_DETAILS_REQUEST, payload: true });\r\n Get(new GetHaulfrynBankDetailsCall())\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.GET_HAULFRYN_BANK_DETAILS_SUCCESS, payload: response.data });\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.GET_HAULFRYN_BANK_DETAILS_FAILURE, payload: error });\r\n });\r\n};\r\n\r\nexport const downloadStatement = (): ThunkAction => async (dispatch, getState) => {\r\n const filter = getState().account.transactionFilter;\r\n const lodgeName = getState().user.lodge.LodgeName;\r\n const now = moment().format('DD MM YYYY');\r\n\r\n dispatch({ type: ActionTypes.DOWNLOAND_STATEMENT_REQUEST, payload: true });\r\n Post(new PostDownloadStatementCall(filter))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.DOWNLOAND_STATEMENT_SUCCESS, payload: false });\r\n\r\n const blob = new Blob([response.data], { type: 'text/csv;charset=utf-8' });\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n const fileName = `${lodgeName + ' ' + now}.csv`;\r\n link.setAttribute('download', fileName);\r\n document.body.appendChild(link);\r\n link.click();\r\n link.remove();\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.DOWNLOAND_STATEMENT_FAILURE, payload: error });\r\n });\r\n};\r\n\r\nexport const downloadPdfStatement = (): ThunkAction => async (dispatch, getState) => {\r\n const filter = getState().account.transactionFilter;\r\n const lodgeName = getState().user.lodge.LodgeName;\r\n const now = moment().format('DD MM YYYY');\r\n\r\n dispatch({ type: ActionTypes.DOWNLOAND_PDF_STATEMENT_REQUEST, payload: true });\r\n Post(new PostDownloadStatementPdfCall(filter), {responseType: 'blob'})\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.DOWNLOAND_PDF_STATEMENT_SUCCESS, payload: false });\r\n \r\n const blob = new Blob([response.data], { type: 'application/octet-stream' });\r\n const url = window.URL.createObjectURL(blob);\r\n const link = document.createElement('a');\r\n link.href = url;\r\n const fileName = `${lodgeName + ' ' + now}.pdf`;\r\n link.setAttribute('download', fileName);\r\n document.body.appendChild(link);\r\n link.click();\r\n link.remove();\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.DOWNLOAND_PDF_STATEMENT_FAILURE, payload: error });\r\n });\r\n};\r\n","import Table, {\r\n ColumnDefinition,\r\n} from \"../../../Shared/Components/Presentational/Table\";\r\nimport React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { PrimaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { Widget } from \"../../../Shared/Components/Presentational/Widget\";\r\nimport { useIsDesktop } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\n\r\ninterface TicketListProps {\r\n contactEmail?: string;\r\n onTicketClicked: (ticket: FreshDeskTicketDTO) => void;\r\n isLoading: boolean;\r\n columns: ColumnDefinition[];\r\n pagedResults: PagedResultDTO;\r\n filter: OrderedFilterDTO;\r\n onFilterChange: (newFilter: any) => void;\r\n}\r\n\r\nconst TicketList: React.FC = (props) => {\r\n const { contactEmail } = props;\r\n const { t } = useTranslation();\r\n\r\n return (\r\n <>\r\n {(!!contactEmail && (\r\n <>\r\n \r\n
Raise a New Ticket
\r\n

\r\n {t(\"requestsAndQueries.tickets.add.helpText\", { contactEmail })}\r\n

\r\n

\r\n {t(\"requestsAndQueries.tickets.add.responseHelpText\")}\r\n

\r\n\r\n window.open(`mailto:${contactEmail}`)}\r\n className=\"request-and-queries-btn\"\r\n />\r\n \r\n \r\n \r\n props.onTicketClicked(rowValue as FreshDeskTicketDTO)\r\n }\r\n />\r\n \r\n \r\n )) || (\r\n \r\n \r\n props.onTicketClicked(rowValue as FreshDeskTicketDTO)\r\n }\r\n />\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default TicketList;\r\n","export default class FreshDeskSourceTypes {\r\n public static Reply = \"Reply\";\r\n public static Note = \"Note\";\r\n public static CreatedFromTweets = \"CreatedFromTweets\";\r\n public static CreatedFromSurveyFeedback = \"CreatedFromSurveyFeedback\";\r\n public static CreatedFromFaceBookPost = \"CreatedFromFaceBookPost\";\r\n public static CreatedFromForwardedEmail = \"CreatedFromForwardedEmail\";\r\n public static CreatedFromPhone = \"CreatedFromPhone\";\r\n public static ECommerce = \"ECommerce\";\r\n}\r\n","import moment from \"moment\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport React from \"react\";\r\nimport {\r\n Desktop,\r\n Mobile,\r\n} from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\n\r\ninterface SelectedTicketTableProps {\r\n selectedTicket: FreshDeskTicketDTO;\r\n}\r\n\r\nconst SelectedTicketTable: React.FC = ({\r\n selectedTicket,\r\n}) => {\r\n const { t } = useTranslation();\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{t(\"requestsAndQueries.tickets.ticketNumber\")}{t(\"requestsAndQueries.tickets.subject\")}{t(\"requestsAndQueries.tickets.group\")}{t(\"requestsAndQueries.tickets.status\")}{t(\"requestsAndQueries.tickets.dateSubmitted\")}{t(\"requestsAndQueries.tickets.lastUpdated\")}
\r\n {selectedTicket.Id}\r\n \r\n {selectedTicket.Subject}\r\n {selectedTicket.GroupName}{selectedTicket.StatusCode}\r\n {moment(selectedTicket.GetCreatedAt).format(\"DD/MM/YYYY\")}\r\n \r\n {moment(selectedTicket.GetUpdatedAt).format(\"DD/MM/YYYY\")}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
{t(\"requestsAndQueries.tickets.ticketNumber\")}\r\n {selectedTicket.Id}\r\n
{t(\"requestsAndQueries.tickets.subject\")}\r\n {selectedTicket.Subject}\r\n
{t(\"requestsAndQueries.tickets.group\")}{selectedTicket.GroupName}
{t(\"requestsAndQueries.tickets.status\")}{selectedTicket.StatusCode}
{t(\"requestsAndQueries.tickets.dateSubmitted\")}{moment(selectedTicket.GetCreatedAt).format(\"DD/MM/YYYY\")}
{t(\"requestsAndQueries.tickets.lastUpdated\")}{moment(selectedTicket.GetUpdatedAt).format(\"DD/MM/YYYY\")}
\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default SelectedTicketTable;\r\n","import { faArrowLeft } from \"@fortawesome/free-solid-svg-icons\";\r\nimport moment from \"moment\";\r\nimport React from \"react\";\r\nimport InfiniteScroll from \"react-infinite-scroller\";\r\nimport FreshDeskSourceTypes from \"../../../Constants/FreshDeskSourceTypes\";\r\nimport { PrimaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { ClickableIcon } from \"../../../Shared/Components/Presentational/Icons\";\r\nimport {\r\n Desktop,\r\n Mobile,\r\n} from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport SelectableChip from \"../../../Shared/Components/Presentational/SelectableChip\";\r\nimport Spinner from \"../../../Shared/Components/Presentational/Spinner\";\r\nimport { Widget } from \"../../../Shared/Components/Presentational/Widget\";\r\nimport SelectedTicketTable from \"./SelectedTicketTable\";\r\n\r\ninterface ConversationListProps {\r\n isLoading: boolean;\r\n selectdTicket: FreshDeskTicketDTO;\r\n onBackPress: () => void;\r\n conversations: PagedResultDTO;\r\n filter: OrderedFilterDTO;\r\n loadMoreResults: () => void;\r\n openQuickReplyModal: () => void;\r\n}\r\n\r\nconst ConversationList: React.FC = (props) => {\r\n const obtainStraplineText = (\r\n source?: string,\r\n isPrivate?: boolean\r\n ): string => {\r\n if (isPrivate) {\r\n return \"Added a Private Note\";\r\n }\r\n\r\n switch (source) {\r\n case FreshDeskSourceTypes.Reply:\r\n return \"Replied to Conversation\";\r\n case FreshDeskSourceTypes.Note:\r\n return \"Added a Note\";\r\n case FreshDeskSourceTypes.CreatedFromTweets:\r\n return \"Added from Tweet\";\r\n case FreshDeskSourceTypes.CreatedFromSurveyFeedback:\r\n return \"Added from Survey Feedback\";\r\n case FreshDeskSourceTypes.CreatedFromFaceBookPost:\r\n return \"Added from Facebook post\";\r\n case FreshDeskSourceTypes.CreatedFromForwardedEmail:\r\n return \"Forwarded from Email\";\r\n case FreshDeskSourceTypes.CreatedFromPhone:\r\n return \"Added from Mobile\";\r\n case FreshDeskSourceTypes.ECommerce:\r\n return \"Added from EComerce\";\r\n default:\r\n return \"\";\r\n }\r\n };\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n }\r\n >\r\n \r\n {!props.isLoading &&\r\n props.conversations &&\r\n (props.conversations.Dtos as FreshDeskConversationDTO[]).map(\r\n (con) => (\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n

{con.UserName || \"User\"}

\r\n

\r\n {obtainStraplineText(con.Source, con.Private)}\r\n

\r\n {con.Private &&

Private Note

}\r\n {!con.Private && (\r\n \r\n )}\r\n\r\n {con.Attachments.length > 0 && (\r\n
\r\n {con.Attachments.map((attachment) => (\r\n \r\n window.open(attachment.attachment_url)\r\n }\r\n >\r\n {attachment.Name}\r\n \r\n ))}\r\n
\r\n )}\r\n \r\n )\r\n )}\r\n \r\n
\r\n \r\n \r\n \r\n );\r\n};\r\n\r\nexport default ConversationList;\r\n","import React, { Component } from \"react\";\r\nimport { WithTranslation, withTranslation } from \"react-i18next\";\r\nimport { Widget } from \"../../../Shared/Components/Presentational/Widget\";\r\nimport Fab from \"../../../Shared/Components/Presentational/Fab\";\r\nimport \"./MyRequestsAndQueriesPage.scss\";\r\nimport Table, {\r\n ColumnDefinition,\r\n} from \"../../../Shared/Components/Presentational/Table\";\r\nimport { PrimaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport TicketList from \"./TicketList\";\r\nimport ConversationList from \"./ConversationList\";\r\n\r\ninterface MyRequestsAndQueriesPageProps extends WithTranslation {\r\n columns: ColumnDefinition[];\r\n pagedResults: PagedResultDTO;\r\n filter: OrderedFilterDTO;\r\n onFilterChange: (newFilter: any) => void;\r\n loadMoreConvesations: () => void;\r\n pageSize: number;\r\n isHeaderOpen: boolean;\r\n contactEmail?: string;\r\n onTicketClicked: (ticket: FreshDeskTicketDTO) => void;\r\n setSelectedTicket: (ticket?: FreshDeskTicketDTO) => void;\r\n selectedTicket?: FreshDeskTicketDTO;\r\n conversations?: PagedResultDTO;\r\n conversationLoading: boolean;\r\n ticketsLoading: boolean;\r\n openQuickReplyModal: () => void;\r\n loginEmail: string;\r\n}\r\n\r\nclass MyRequestsAndQueriesPage extends Component {\r\n public render(): JSX.Element {\r\n const { t, contactEmail, selectedTicket, loginEmail } = this.props;\r\n\r\n return (\r\n
\r\n {!this.props.isHeaderOpen && (\r\n <>\r\n

\r\n {t(\"requestsAndQueries.title\")}\r\n

\r\n

\r\n {t(\"requestsAndQueries.message\", { loginEmail })}\r\n

\r\n \r\n )}\r\n {!selectedTicket && (\r\n \r\n )}\r\n {selectedTicket && (\r\n this.props.setSelectedTicket()}\r\n selectdTicket={this.props.selectedTicket!}\r\n isLoading={this.props.conversationLoading}\r\n conversations={this.props.conversations!}\r\n filter={this.props.filter}\r\n loadMoreResults={this.props.loadMoreConvesations}\r\n />\r\n )}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(MyRequestsAndQueriesPage);\r\n","import Table, {\r\n ColumnDefinition,\r\n} from \"../../../Shared/Components/Presentational/Table\";\r\nimport React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { PrimaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { Widget } from \"../../../Shared/Components/Presentational/Widget\";\r\n\r\ninterface TicketListMobileProps {\r\n contactEmail?: string;\r\n onTicketClicked: (ticket: FreshDeskTicketDTO) => void;\r\n isLoading: boolean;\r\n columns: ColumnDefinition[];\r\n pagedResults: PagedResultDTO;\r\n filter: OrderedFilterDTO;\r\n onFilterChange: (newFilter: any) => void;\r\n}\r\n\r\nconst TicketListMobile: React.FC = (props) => {\r\n const { contactEmail } = props;\r\n const { t } = useTranslation();\r\n return (\r\n <>\r\n {(!!contactEmail && (\r\n <>\r\n \r\n
Raise a New Ticket
\r\n

\r\n {t(\"requestsAndQueries.tickets.add.helpText\", { contactEmail })}\r\n

\r\n

\r\n {t(\"requestsAndQueries.tickets.add.responseHelpText\")}\r\n

\r\n\r\n window.open(`mailto:${contactEmail}`)}\r\n className=\"request-and-queries-btn-mobile\"\r\n />\r\n \r\n \r\n \r\n props.onTicketClicked(rowValue as FreshDeskTicketDTO)\r\n }\r\n />\r\n \r\n \r\n )) || (\r\n \r\n \r\n props.onTicketClicked(rowValue as FreshDeskTicketDTO)\r\n }\r\n />\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default TicketListMobile;\r\n","import React, { Component } from \"react\";\r\nimport { Translation } from \"react-i18next\";\r\nimport { Widget } from \"../../../Shared/Components/Presentational/Widget\";\r\nimport Table, {\r\n ColumnDefinition,\r\n} from \"../../../Shared/Components/Presentational/Table\";\r\nimport \"./MyRequestsAndQueriesPage.scss\";\r\nimport { PrimaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport TicketListMobile from \"./TicketListMobile\";\r\nimport ConversationList from \"./ConversationList\";\r\n\r\ninterface MyRequestsAndQueriesPageMobileProps {\r\n columns: ColumnDefinition[];\r\n pagedResults: PagedResultDTO;\r\n filter: OrderedFilterDTO;\r\n onFilterChange: (newFilter: any) => void;\r\n loadMoreConvesations: () => void;\r\n pageSize: number;\r\n isHeaderOpen: boolean;\r\n contactEmail?: string;\r\n onTicketClicked: (ticket: FreshDeskTicketDTO) => void;\r\n setSelectedTicket: (ticket?: FreshDeskTicketDTO) => void;\r\n selectedTicket?: FreshDeskTicketDTO;\r\n conversations?: PagedResultDTO;\r\n conversationLoading: boolean;\r\n ticketsLoading: boolean;\r\n openQuickReplyModal: () => void;\r\n loginEmail: string;\r\n}\r\n\r\nclass MyRequestsAndQueriesPageMobile extends Component {\r\n public render(): JSX.Element {\r\n const { contactEmail, selectedTicket, loginEmail } = this.props;\r\n return (\r\n \r\n {(t: (key: string, args?: {}) => string) => {\r\n return (\r\n
\r\n {!this.props.isHeaderOpen && (\r\n <>\r\n

\r\n {t(\"requestsAndQueries.title\")}\r\n

\r\n

\r\n {t(\"requestsAndQueries.message\", { loginEmail })}\r\n

\r\n \r\n )}\r\n {!selectedTicket && (\r\n \r\n )}\r\n {selectedTicket && (\r\n this.props.setSelectedTicket()}\r\n selectdTicket={this.props.selectedTicket!}\r\n isLoading={this.props.conversationLoading}\r\n conversations={this.props.conversations!}\r\n filter={this.props.filter}\r\n loadMoreResults={this.props.loadMoreConvesations}\r\n />\r\n )}\r\n
\r\n );\r\n }}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default MyRequestsAndQueriesPageMobile;\r\n","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostFreshDeskTicketsSearchCall extends PostApiCall {\r\n constructor(filter: OrderedFilterDTO) {\r\n let url: string = \"requestsAndQueries/tickets\";\r\n\r\n super(url);\r\n\r\n this.body = filter;\r\n }\r\n}\r\n","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostFreshDeskConversationSearchCall extends PostApiCall {\r\n constructor(ticketId: string, filter: OrderedFilterDTO) {\r\n let url: string = `requestsAndQueries/tickets/${ticketId}/conversations`;\r\n\r\n super(url);\r\n\r\n this.body = filter;\r\n }\r\n}\r\n","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostFreshDeskTicketReplyCall extends PostApiCall {\r\n constructor(ticketId: string, message: string) {\r\n let url: string = `requestsAndQueries/tickets/${ticketId}/reply`;\r\n\r\n super(url);\r\n\r\n this.body = { MessageContent: message };\r\n }\r\n}\r\n","import moment from \"moment\";\r\nimport React from \"react\";\r\nimport { CustomColumnCellRendererProps } from \"./Table\";\r\n\r\nconst ShortenedTextCellRenderer: React.FC = ({\r\n rowValue,\r\n}) => {\r\n return (\r\n \r\n {rowValue.Subject.length > 20\r\n ? rowValue.Subject.substring(0, 20) + \"...\"\r\n : rowValue.Subject}\r\n \r\n );\r\n};\r\n\r\nexport default ShortenedTextCellRenderer;\r\n","import React, { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport {\r\n Modal,\r\n ModalFooter,\r\n ModalHeader,\r\n ModalProps,\r\n} from \"../../../Shared/Components/Presentational/Modal\";\r\nimport {\r\n Desktop,\r\n Mobile,\r\n} from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport classNames from \"classnames\";\r\nimport { PrimaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\n\r\ninterface QuickReplyModalProps extends ModalProps {\r\n onBackButtonClick: () => void;\r\n sendReply: (message: string) => void;\r\n isLoading?: boolean;\r\n}\r\n\r\nconst QuickReplyModal: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const [message, setMessage] = useState(\"\");\r\n\r\n const handleBackButton = () => {\r\n props.onBackButtonClick();\r\n setMessage(\"\");\r\n };\r\n\r\n const reply = () => {\r\n props.sendReply(message);\r\n setMessage(\"\");\r\n };\r\n\r\n const formContents = (\r\n <>\r\n \r\n\r\n
\r\n
\r\n \r\n {\r\n setMessage(e.target.value as string);\r\n }}\r\n className=\"form-input\"\r\n required\r\n maxLength={500}\r\n />\r\n
\r\n
\r\n\r\n \r\n
\r\n \r\n \r\n );\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n
{formContents}
\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n
{formContents}
\r\n
\r\n \r\n
\r\n \r\n );\r\n};\r\n\r\nexport default QuickReplyModal;\r\n","import React, { Component } from \"react\";\r\nimport {\r\n Desktop,\r\n Mobile,\r\n} from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { connect } from \"react-redux\";\r\nimport { ColumnDefinition } from \"../../../Shared/Components/Presentational/Table\";\r\nimport { compose } from \"redux\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { Entry } from \"contentful\";\r\nimport MyRequestsAndQueriesPage from \"../Presentational/MyRequestsAndQueriesPage\";\r\nimport MyRequestsAndQueriesPageMobile from \"../Presentational/MyRequestsAndQueriesPage.mobile\";\r\nimport { Post } from \"../../../Api/ApiService\";\r\nimport { PostFreshDeskTicketsSearchCall } from \"../../../Api/Calls/PostFreshDeskTicketsSearchCall\";\r\nimport { PostFreshDeskConversationSearchCall } from \"../../../Api/Calls/PostFreshDeskConversationSearchCall\";\r\nimport { PostFreshDeskTicketReplyCall } from \"../../../Api/Calls/PostFreshDeskTicketReplyCall\";\r\nimport { GetParkCall } from \"../../../Contentful/Calls/GetParkCall\";\r\nimport DateColumnCellRenderer from \"../../../Shared/Components/Presentational/DateColumnCellRenderer\";\r\nimport ShortenedTextCellRenderer from \"../../../Shared/Components/Presentational/ShortenedTextCellRenderer\";\r\nimport QuickReplyModal from \"../Presentational/QuickReplyModal\";\r\nimport \"./MyRequestsAndQueries.scss\";\r\n\r\ninterface MyRequestsAndQueriesProps extends WithTranslation {\r\n dispatch: any;\r\n selectedPark: any;\r\n loginEmail: string;\r\n}\r\n\r\ninterface MyRequestAndQueryState {\r\n columns: ColumnDefinition[];\r\n rowToDelete: any;\r\n filter: OrderedFilterDTO;\r\n conversationFilter: OrderedFilterDTO;\r\n pagedResults: PagedResultDTO;\r\n loadingResults: boolean;\r\n contentfulPark?: Entry;\r\n selectedTicket?: FreshDeskTicketDTO;\r\n conversations?: PagedResultDTO;\r\n conversationLoading: boolean;\r\n postReplyLoading: boolean;\r\n showQuickReplyModal: boolean;\r\n}\r\n\r\nclass MyRequestsAndQueries extends Component<\r\n MyRequestsAndQueriesProps,\r\n MyRequestAndQueryState\r\n> {\r\n public getTickets() {\r\n this.setState({ loadingResults: true });\r\n Post(new PostFreshDeskTicketsSearchCall(this.state.filter))\r\n .then((success) => {\r\n this.setState({ pagedResults: success.data });\r\n })\r\n .finally(() => {\r\n this.setState({ loadingResults: false });\r\n });\r\n }\r\n\r\n getConversations = (ticketId: string) => {\r\n Post(\r\n new PostFreshDeskConversationSearchCall(\r\n ticketId,\r\n this.state.conversationFilter\r\n )\r\n )\r\n .then((success) => {\r\n this.setState({ conversations: success.data });\r\n })\r\n .finally(() => {\r\n this.setState({ conversationLoading: false });\r\n });\r\n };\r\n\r\n postQuickReply = (message: string) => {\r\n if (this.state.selectedTicket == null) {\r\n return;\r\n }\r\n\r\n this.setState({ postReplyLoading: true });\r\n Post(\r\n new PostFreshDeskTicketReplyCall(this.state.selectedTicket.Id, message)\r\n )\r\n .then((_) => {\r\n this.getConversations(this.state.selectedTicket!.Id);\r\n })\r\n .finally(() => {\r\n this.setState({ postReplyLoading: false, showQuickReplyModal: false });\r\n });\r\n };\r\n\r\n onFilterChange = (filter: OrderedFilterDTO) => {\r\n this.setState({ filter });\r\n this.getTickets();\r\n };\r\n\r\n public componentDidMount() {\r\n GetParkCall(this.props.selectedPark.parkCode).then((result) => {\r\n this.setState({\r\n contentfulPark: result,\r\n });\r\n });\r\n this.getTickets();\r\n }\r\n\r\n onTicketSelect = (ticket: FreshDeskTicketDTO) => {\r\n this.setState({ selectedTicket: ticket, conversationLoading: true });\r\n this.getConversations(ticket.Id);\r\n };\r\n\r\n loadMoreConvesations = () => {\r\n if (\r\n !this.state.selectedTicket ||\r\n !this.state.conversations ||\r\n this.state.conversationLoading\r\n ) {\r\n return;\r\n }\r\n\r\n const totalPages = Math.max(\r\n 1,\r\n Math.ceil(\r\n this.state.conversations.Total / this.state.conversationFilter.PageSize\r\n )\r\n );\r\n\r\n if (this.state.conversationFilter.Page < totalPages) {\r\n const filter = { ...this.state.conversationFilter };\r\n\r\n filter.Page = 1;\r\n if (filter.PageSize < 20) {\r\n filter.PageSize = 20;\r\n } else {\r\n filter.PageSize += 20;\r\n }\r\n\r\n this.setState({ conversationFilter: filter });\r\n this.getConversations(this.state.selectedTicket.Id);\r\n }\r\n };\r\n\r\n public state: MyRequestAndQueryState = {\r\n columns: [\r\n {\r\n fieldName: \"Id\",\r\n displayName: \"requestsAndQueries.tickets.ticketNumber\",\r\n canShowColumn: (_) => true,\r\n bold: true,\r\n },\r\n {\r\n fieldName: \"Subject\",\r\n displayName: \"requestsAndQueries.tickets.subject\",\r\n canShowColumn: (_) => true,\r\n customCellRenderer: ShortenedTextCellRenderer,\r\n bold: true,\r\n },\r\n {\r\n fieldName: \"GroupName\",\r\n displayName: \"requestsAndQueries.tickets.group\",\r\n canShowColumn: (_) => true,\r\n },\r\n {\r\n fieldName: \"StatusCode\",\r\n displayName: \"requestsAndQueries.tickets.status\",\r\n canShowColumn: (_) => true,\r\n },\r\n {\r\n fieldName: \"GetCreatedAt\",\r\n displayName: \"requestsAndQueries.tickets.dateSubmitted\",\r\n customCellRenderer: DateColumnCellRenderer,\r\n canShowColumn: (_) => true,\r\n },\r\n {\r\n fieldName: \"GetUpdatedAt\",\r\n displayName: \"requestsAndQueries.tickets.lastUpdated\",\r\n customCellRenderer: DateColumnCellRenderer,\r\n canShowColumn: (_) => true,\r\n },\r\n ],\r\n rowToDelete: undefined,\r\n contentfulPark: undefined,\r\n filter: { PageSize: 20, Page: 1 },\r\n conversationFilter: { PageSize: 20, Page: 1 },\r\n pagedResults: { Total: 0, PageSize: 20, Dtos: [] },\r\n loadingResults: true,\r\n selectedTicket: undefined,\r\n conversations: undefined,\r\n conversationLoading: false,\r\n postReplyLoading: false,\r\n showQuickReplyModal: false,\r\n };\r\n\r\n public render(): JSX.Element {\r\n return (\r\n <>\r\n \r\n {\r\n this.setState({ showQuickReplyModal: true });\r\n }}\r\n setSelectedTicket={(ticket) =>\r\n this.setState({ selectedTicket: ticket })\r\n }\r\n loadMoreConvesations={this.loadMoreConvesations}\r\n columns={this.state.columns}\r\n selectedTicket={this.state.selectedTicket}\r\n pagedResults={this.state.pagedResults}\r\n filter={this.state.filter}\r\n onFilterChange={this.onFilterChange}\r\n pageSize={20}\r\n ticketsLoading={this.state.loadingResults}\r\n conversationLoading={this.state.conversationLoading}\r\n conversations={this.state.conversations}\r\n isHeaderOpen={false}\r\n onTicketClicked={this.onTicketSelect}\r\n loginEmail={this.props.loginEmail}\r\n contactEmail={\r\n this.state.contentfulPark\r\n ? this.state.contentfulPark!.fields.emailAddress\r\n : undefined\r\n }\r\n />\r\n \r\n \r\n {\r\n this.setState({ showQuickReplyModal: true });\r\n }}\r\n setSelectedTicket={(ticket) =>\r\n this.setState({ selectedTicket: ticket })\r\n }\r\n loadMoreConvesations={this.loadMoreConvesations}\r\n columns={this.state.columns.filter(\r\n (c) => ![\"StatusCode\", \"GetCreatedAt\"].includes(c.fieldName)\r\n )}\r\n selectedTicket={this.state.selectedTicket}\r\n pagedResults={this.state.pagedResults}\r\n filter={this.state.filter}\r\n onFilterChange={this.onFilterChange}\r\n pageSize={20}\r\n ticketsLoading={this.state.loadingResults}\r\n conversationLoading={this.state.conversationLoading}\r\n conversations={this.state.conversations}\r\n isHeaderOpen={false}\r\n onTicketClicked={this.onTicketSelect}\r\n loginEmail={this.props.loginEmail}\r\n contactEmail={\r\n this.state.contentfulPark\r\n ? this.state.contentfulPark!.fields.emailAddress\r\n : undefined\r\n }\r\n />\r\n \r\n {\r\n this.setState({ showQuickReplyModal: false });\r\n }}\r\n sendReply={this.postQuickReply}\r\n isLoading={this.state.postReplyLoading}\r\n />\r\n \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return { selectedPark: state.user.park, loginEmail: state.user.loginEmail };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {};\r\n};\r\n\r\nexport default compose(\r\n withTranslation(),\r\n connect(mapStateToProps, mapDispatchToProps)\r\n)(MyRequestsAndQueries);\r\nfunction getFieldList(FunctionalityCode: any): FormField[] {\r\n throw new Error(\"Function not implemented.\");\r\n}\r\n","import React, { Component } from 'react';\r\nimport './Layout.scss';\r\nimport { Desktop, Mobile } from './ResponsiveViews';\r\nimport history from '../../../History';\r\nimport HeaderContainer from '../Container/HeaderContainer';\r\nimport UserRoles from '../../../Constants/UserRoles';\r\nimport MemberHeader from '../Container/MemberHeader';\r\n\r\ninterface LayoutProps {\r\n lodges: LodgeDTO[];\r\n lodgeOptions: [DropdownListOption];\r\n selectedLodge: DropdownListOption;\r\n setSelectedLodge: (lodge: SelectedLodgeDTO) => void;\r\n setSelectedPark: (parkCode: string, parkName: string, parkFeatures: string[]) => void;\r\n logoutClick: () => void;\r\n contractEndDate: string;\r\n myContactDetails: MyContactDetailsDTO;\r\n openMyContactDetailsModal: () => void;\r\n hasSublettings: boolean;\r\n ownerId: number;\r\n showContactDetailsModal: boolean;\r\n userRoles: UserRoleDTO[];\r\n useMemberships: boolean;\r\n}\r\n\r\nexport default class Layout extends Component {\r\n render() {\r\n if (!UserRoles.IsOwner(this.props.userRoles)) {\r\n return (\r\n <>\r\n \r\n \r\n
\r\n
\r\n {this.props && this.props.children ? this.props.children : <>}\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {this.props && this.props.children ? this.props.children : <>}\r\n
\r\n
\r\n
\r\n \r\n )\r\n } else {\r\n return (\r\n <>\r\n \r\n \r\n
\r\n
\r\n {this.props && this.props.children ? this.props.children : <>}\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n
\r\n {this.props && this.props.children ? this.props.children : <>}\r\n
\r\n
\r\n
\r\n \r\n );\r\n }\r\n }\r\n\r\n private onSelectedLodgeChanged(newValue: DropdownListOption) {\r\n if (newValue) {\r\n const selectedLodge = this.props.lodges.find((l) => l.LodgeId.toString() === newValue.value);\r\n\r\n if (selectedLodge) {\r\n this.props.setSelectedPark(selectedLodge.ParkCode, selectedLodge.ParkName, selectedLodge.ParkFeatures);\r\n this.props.setSelectedLodge({\r\n LodgeId: selectedLodge.LodgeId,\r\n LodgeName: selectedLodge.Name,\r\n ContractEndDate: selectedLodge.ContractEndDate,\r\n HasSublettings: selectedLodge.HasSublettings,\r\n AccountId: selectedLodge.AccountId,\r\n AccountNo: selectedLodge.AccountNo,\r\n AccountBalance: selectedLodge.RecentTransactions[0]\r\n ? selectedLodge.RecentTransactions[0].Balance\r\n : undefined,\r\n });\r\n }\r\n history.push('/');\r\n }\r\n }\r\n}\r\n","import React, { Component } from \"react\";\r\nimport { Route } from \"react-router\";\r\nimport { connect } from \"react-redux\";\r\nimport Layout from \"./Shared/Components/Presentational/Layout\";\r\nimport { logout } from \"./Login/Redux/ActionCreators\";\r\nimport {\r\n setUserLodge,\r\n setUserPark,\r\n getMyContactDetails,\r\n getMarketingPreferences,\r\n} from \"./User/Redux/ActionCreators\";\r\nimport { setLodgeDetails } from \"./Information/Redux/ActionCreators\";\r\nimport { getParkPassTypes } from \"./Guests/Redux/ActionCreators\";\r\nimport MyContactDetails from \"./Modal/Components/Container/MyContactDetails\";\r\nimport { SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN } from \"./Modal/Redux/ActionTypes\";\r\n\r\ninterface DefaultLayoutRouteProps {\r\n lodges: LodgeDTO[];\r\n lodgeOptions: [DropdownListOption];\r\n selectedLodge: DropdownListOption;\r\n setSelectedLodge: (lodge: SelectedLodgeDTO) => void;\r\n setSelectedPark: (\r\n parkCode: string,\r\n parkName: string,\r\n parkFeatures: string[]\r\n ) => void;\r\n logoutClick: () => void;\r\n contractEndDate: string;\r\n myContactDetails: MyContactDetailsDTO;\r\n openMyContactDetailsModal: () => void;\r\n closeMyContactDetailsModal: () => void;\r\n getMyContactDetails: any;\r\n getMarketingPreferences: any;\r\n marketingPreferences: MarketingPreferencesDTO | undefined;\r\n hasSublettings: boolean;\r\n ownerId: number;\r\n loginMethod: string;\r\n userRoles: UserRoleDTO[];\r\n useMemberships: boolean;\r\n}\r\n\r\nclass DefaultLayoutRoute extends Component {\r\n componentDidMount() {\r\n if (!this.props.myContactDetails) {\r\n this.props.getMyContactDetails();\r\n }\r\n\r\n if (!this.props.marketingPreferences && this.props.ownerId > 0) {\r\n this.props.getMarketingPreferences();\r\n }\r\n }\r\n\r\n public isEmptyOrUndefined(obj: {} | undefined) {\r\n if (obj !== undefined) {\r\n return Object.keys(obj).length === 0;\r\n } else {\r\n return true;\r\n }\r\n }\r\n\r\n public showContactDetailsModal() {\r\n return ((this.props.loginMethod === \"email\" && this.props.ownerId < 1) || (this.props.ownerId > 0 && !this.isEmptyOrUndefined(this.props.marketingPreferences) && !this.isEmptyOrUndefined(this.props.myContactDetails)));\r\n }\r\n\r\n render() {\r\n return (\r\n (\r\n \r\n {this.props.children}\r\n {(this.showContactDetailsModal()) && (\r\n \r\n )}\r\n \r\n )}\r\n />\r\n );\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n logoutClick: () => {\r\n dispatch(logout(false));\r\n },\r\n setSelectedLodge: (lodge: SelectedLodgeDTO) => {\r\n dispatch(setUserLodge(lodge));\r\n dispatch(setLodgeDetails(lodge.LodgeId.toString()));\r\n dispatch(getParkPassTypes());\r\n },\r\n setSelectedPark: (\r\n parkCode: string,\r\n parkName: string,\r\n parkFeatures: string[]\r\n ) => {\r\n dispatch(setUserPark({ parkCode, parkName, parkFeatures }));\r\n },\r\n getMyContactDetails: () => dispatch(getMyContactDetails()),\r\n getMarketingPreferences: () => dispatch(getMarketingPreferences()),\r\n openMyContactDetailsModal: () =>\r\n dispatch({ type: SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN, payload: true }),\r\n closeMyContactDetailsModal: () =>\r\n dispatch({ type: SET_IS_MY_CONTACT_DETAILS_MODAL_OPEN, payload: false }),\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n let lodges: LodgeDTO[] = [];\r\n let selectedLodge: DropdownListOption = { value: \"\", label: \"\" };\r\n let lodgeOptions: [DropdownListOption] = [{ value: \"\", label: \"\" }];\r\n let contractEndDate: string = \"\";\r\n let hasSublettings = false;\r\n\r\n if (state.user) {\r\n lodges = state.user.lodges ? state.user.lodges : [];\r\n\r\n for (var i = 0; i < lodges.length; i++) {\r\n lodgeOptions[i] = {\r\n value: lodges[i].LodgeId.toString(),\r\n label: lodges[i].Name,\r\n };\r\n\r\n if (state.user.lodge && state.user.lodge.LodgeId === lodges[i].LodgeId) {\r\n selectedLodge = lodgeOptions[i];\r\n }\r\n }\r\n\r\n if (state.user.lodge) {\r\n contractEndDate = state.user.lodge.ContractEndDate;\r\n\r\n const selectedLodge: LodgeDTO = state.user.lodges.find(\r\n (x: LodgeDTO) => x.LodgeId === state.user.lodge.LodgeId\r\n );\r\n if (selectedLodge) {\r\n hasSublettings = selectedLodge.HasSublettings;\r\n }\r\n }\r\n }\r\n\r\n return {\r\n lodges,\r\n selectedLodge,\r\n lodgeOptions,\r\n contractEndDate,\r\n myContactDetails: state.user.myContactDetails || {},\r\n marketingPreferences: state.user.marketingPreferences,\r\n ownerId: state.user.ownerId,\r\n hasSublettings,\r\n loginMethod: state.login.loginMethod,\r\n userRoles: state.user.userRoles,\r\n useMemberships: state.guests.useMemberships,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DefaultLayoutRoute);\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostConfirmEmailCall extends PostApiCall {\r\n constructor(body: ConfirmDTO) {\r\n let url: string = `account/confirmEmail`;\r\n\r\n super(url);\r\n\r\n this.body = body;\r\n this.logoutOn401 = false;\r\n }\r\n}\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostResendConfirmEmailCall extends PostApiCall {\r\n constructor(body: ConfirmDTO) {\r\n let url: string = `account/resendConfirmEmail`;\r\n\r\n super(url);\r\n\r\n this.body = body;\r\n this.logoutOn401 = false;\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { Redirect } from 'react-router';\r\nimport { setTimeout } from 'timers';\r\nimport { Post } from './Api/ApiService';\r\nimport { PostConfirmEmailCall } from './Api/Calls/PostConfirmEmailCall';\r\nimport { PostResendConfirmEmailCall } from './Api/Calls/PostResendConfirmEmailCall';\r\nimport './Confirm.scss';\r\nimport * as Routes from './Constants/Routes';\r\nimport { ImageBackground, VerticalBackground } from './Shared/Components/Presentational/Backgrounds';\r\nimport { SecondaryButton, PrimaryButton } from './Shared/Components/Presentational/Buttons';\r\nimport { Desktop, Mobile } from './Shared/Components/Presentational/ResponsiveViews';\r\n\r\ninterface ConfirmEmailProps extends WithTranslation {}\r\ninterface ConfirmEmailState {\r\n codeConfirmed: boolean;\r\n readyToRedirect: boolean;\r\n requestFailed: boolean;\r\n emailResent: boolean;\r\n userId: string;\r\n code: string;\r\n}\r\n\r\nclass ConfirmEmail extends Component {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n const search = window.location.search;\r\n const params = new URLSearchParams(search);\r\n const userId = params.get('userId') as string;\r\n const code = params.get('code') as string;\r\n\r\n this.state = {\r\n codeConfirmed: false,\r\n readyToRedirect: false,\r\n requestFailed: false,\r\n emailResent: false,\r\n userId: userId,\r\n code: code\r\n };\r\n\r\n Post<{}>(new PostConfirmEmailCall({ UserId: userId, Code: code }))\r\n .then(() => {\r\n this.setState({ codeConfirmed: true });\r\n\r\n setTimeout(() => {\r\n this.setState({ readyToRedirect: true });\r\n }, 5000);\r\n })\r\n .catch(() => {\r\n this.setState({ requestFailed: true });\r\n });\r\n }\r\n\r\n private resendConfirmationEmail() {\r\n this.setState({ emailResent: false });\r\n\r\n const code = this.state.code;\r\n const userId = this.state.userId;\r\n\r\n Post<{}>(new PostResendConfirmEmailCall({ UserId: userId, Code: code })).then(() => {\r\n this.setState({ emailResent: true });\r\n });\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n \r\n
\r\n \r\n

{t('login.welcomeTitle')}

\r\n

{t('login.welcomeMessage')}

\r\n \r\n
\r\n {this.state.codeConfirmed && (\r\n
\r\n

{t('login.emailConfirmationComplete')}

\r\n

{t('login.redirectToLogin')}

\r\n
\r\n )}\r\n {!this.state.codeConfirmed && !this.state.requestFailed && (\r\n
\r\n

{t('login.validateCode')}

\r\n

{t('login.checkingCode')}

\r\n
\r\n )}\r\n {!this.state.codeConfirmed && this.state.requestFailed && (\r\n
\r\n

{t('login.emailConfirmationFailed')}

\r\n

{t('login.emailLinkExpired')}

\r\n this.resendConfirmationEmail()}\r\n text={t('login.requestNewLink')}\r\n disabled={this.state.emailResent}\r\n />\r\n {this.state.emailResent &&

{t('login.emailConfirmationResent')}

}\r\n
\r\n )}\r\n {this.state.readyToRedirect && }\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n {this.state.codeConfirmed && (\r\n
\r\n

{t('login.emailConfirmationComplete')}

\r\n

{t('login.redirectToLogin')}

\r\n
\r\n )}\r\n {!this.state.codeConfirmed && !this.state.requestFailed && (\r\n
\r\n

{t('login.validateCode')}

\r\n

{t('login.checkingCode')}

\r\n
\r\n )}\r\n {!this.state.codeConfirmed && this.state.requestFailed && (\r\n
\r\n

{t('login.emailConfirmationFailed')}

\r\n

{t('login.emailLinkExpired')}

\r\n this.resendConfirmationEmail()}\r\n text={t('login.requestNewLink')}\r\n disabled={this.state.emailResent}\r\n >\r\n {this.state.emailResent &&

{t('login.emailConfirmationResent')}

}\r\n
\r\n )}\r\n {this.state.readyToRedirect && }\r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(ConfirmEmail);\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostForgotPasswordEmailCall extends PostApiCall {\r\n constructor(userName: SendPasswordResetEmailDto) {\r\n const url = `account/sendForgottenPassword`;\r\n\r\n super(url);\r\n\r\n this.body = userName;\r\n }\r\n}\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostResetPasswordCall extends PostApiCall {\r\n constructor(resetPasswordDto: SendPasswordResetEmailDto) {\r\n const url = `account/setNewPassword`;\r\n\r\n super(url);\r\n\r\n this.body = resetPasswordDto;\r\n this.logoutOn401 = false;\r\n }\r\n}\r\n","import React, { ChangeEvent, Component, FormEvent } from 'react';\r\nimport { Translation } from 'react-i18next';\r\nimport { Redirect } from 'react-router';\r\nimport { Post } from './Api/ApiService';\r\nimport { PostForgotPasswordEmailCall } from './Api/Calls/PostForgotPasswordEmailCall';\r\nimport { PostResetPasswordCall } from './Api/Calls/PostResetPasswordCall';\r\nimport * as Routes from './Constants/Routes';\r\nimport './ForgottenPassword.scss';\r\nimport PasswordRequirements from './Shared/Components/Presentational/PasswordRequirements';\r\nimport { ImageBackground, VerticalBackground } from './Shared/Components/Presentational/Backgrounds';\r\nimport { BackLinkButton, PrimaryButton, SecondaryButton } from './Shared/Components/Presentational/Buttons';\r\nimport { ButtonContainer, InputContainer } from './Shared/Components/Presentational/Containers';\r\nimport { Desktop, Mobile } from './Shared/Components/Presentational/ResponsiveViews';\r\n\r\ninterface ForgottenPasswordState {\r\n passwordChanged: boolean;\r\n readyToRedirect: boolean;\r\n requestFailed: boolean;\r\n emailSent: boolean;\r\n newPassword: string;\r\n cPassword: string;\r\n passwordsMatchAndIsValid: boolean;\r\n code: string;\r\n isLoading: boolean;\r\n emailAddress: string;\r\n}\r\n\r\nclass ForgottenPassword extends Component<{}, ForgottenPasswordState> {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n const search = window.location.search;\r\n const params = new URLSearchParams(search);\r\n const emailAddress = params.get('emailAddress') as string;\r\n const code = params.get('code') as string;\r\n\r\n this.state = {\r\n passwordChanged: false,\r\n readyToRedirect: false,\r\n requestFailed: false,\r\n emailSent: code ? true : false,\r\n code: code,\r\n isLoading: false,\r\n newPassword: '',\r\n cPassword: '',\r\n passwordsMatchAndIsValid: false,\r\n emailAddress: emailAddress ? emailAddress : ''\r\n };\r\n\r\n this.handleEmailChange = this.handleEmailChange.bind(this);\r\n this.handlePasswordChange = this.handlePasswordChange.bind(this);\r\n this.sendForgottenPasswordEmail = this.sendForgottenPasswordEmail.bind(this);\r\n this.resendForgottenPasswordEmail = this.resendForgottenPasswordEmail.bind(this);\r\n this.onEmailSubmit = this.onEmailSubmit.bind(this);\r\n this.onPasswordSubmit = this.onPasswordSubmit.bind(this);\r\n this.setPasswordMatch = this.setPasswordMatch.bind(this);\r\n }\r\n\r\n private handleEmailChange(e: ChangeEvent) {\r\n const { value } = e.target;\r\n this.setState({ emailAddress: value });\r\n }\r\n\r\n private handlePasswordChange(e: ChangeEvent) {\r\n const { name, value } = e.target;\r\n if (name === 'password') {\r\n this.setState({ newPassword: value }, () => {\r\n this.setPasswordMatch();\r\n });\r\n }\r\n if (name === 'c_password') {\r\n this.setState({ cPassword: value }, () => {\r\n this.setPasswordMatch();\r\n });\r\n }\r\n }\r\n\r\n private setPasswordMatch() {\r\n if (this.state.newPassword !== this.state.cPassword && this.state.newPassword.length > 0) {\r\n this.setState({ passwordsMatchAndIsValid: false });\r\n } else {\r\n this.setState({ passwordsMatchAndIsValid: true });\r\n }\r\n }\r\n\r\n private sendForgottenPasswordEmail() {\r\n this.setState({ emailSent: false });\r\n this.setState({ requestFailed: false });\r\n\r\n const resetPasswordDto: SendPasswordResetEmailDto = {\r\n EmailAddress: this.state.emailAddress\r\n };\r\n\r\n Post<{}>(new PostForgotPasswordEmailCall(resetPasswordDto))\r\n .then(() => {\r\n this.setState({ emailSent: true });\r\n })\r\n .catch(() => {});\r\n }\r\n\r\n private resendForgottenPasswordEmail() {\r\n const resetPasswordDto: SendPasswordResetEmailDto = {\r\n EmailAddress: this.state.emailAddress\r\n };\r\n\r\n Post<{}>(new PostForgotPasswordEmailCall(resetPasswordDto))\r\n .then(() => {\r\n this.setState({ emailSent: true });\r\n })\r\n .catch(() => {});\r\n }\r\n\r\n private onEmailSubmit = (e: FormEvent) => {\r\n e.preventDefault();\r\n this.setState({ emailSent: false });\r\n this.setState({ requestFailed: false });\r\n\r\n const resetPasswordDto: SendPasswordResetEmailDto = {\r\n EmailAddress: this.state.emailAddress\r\n };\r\n\r\n Post<{}>(new PostForgotPasswordEmailCall(resetPasswordDto))\r\n .then(() => {\r\n this.setState({ emailSent: true });\r\n })\r\n .catch(() => {});\r\n };\r\n\r\n private onPasswordSubmit = (e: FormEvent) => {\r\n e.preventDefault();\r\n this.setState({ requestFailed: false });\r\n\r\n const resetPasswordDto: SendPasswordResetEmailDto = {\r\n EmailAddress: this.state.emailAddress,\r\n NewPassword: this.state.newPassword,\r\n ConfirmedNewPassword: this.state.cPassword,\r\n ResetPasswordToken: this.state.code\r\n };\r\n Post<{}>(new PostResetPasswordCall(resetPasswordDto))\r\n .then(() => {\r\n this.setState({ passwordChanged: true, emailSent: false });\r\n setTimeout(() => {\r\n this.setState({ readyToRedirect: true });\r\n }, 3000);\r\n })\r\n .catch(() => {\r\n this.setState({ requestFailed: true });\r\n this.setState({ passwordChanged: false, readyToRedirect: false });\r\n });\r\n };\r\n\r\n render() {\r\n return (\r\n \r\n {(t: (key: string) => string) => {\r\n return (\r\n <>\r\n \r\n
\r\n \r\n

{t('login.welcomeTitle')}

\r\n

{t('login.welcomeMessage')}

\r\n \r\n
\r\n {!this.state.emailSent && !(this.state.code && this.state.emailAddress) && (\r\n
\r\n \r\n
\r\n \r\n

{t('login.forgottenPassword.forgotYourPassword')}

\r\n

\r\n {t('login.forgottenPassword.forgotYourPasswordDescription')}\r\n

\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n {this.state.emailSent && !this.state.code && (\r\n
\r\n \r\n
\r\n \r\n

\r\n {t('login.forgottenPassword.passwordResetIfEmailExist')}\r\n

\r\n

\r\n {t('login.forgottenPassword.didNotGetEmail')}\r\n \r\n {' '}\r\n {t('login.forgottenPassword.resendLink')}\r\n \r\n

\r\n
\r\n
\r\n
\r\n )}\r\n {this.state.code && this.state.emailAddress && !this.state.passwordChanged && (\r\n
\r\n \r\n
\r\n \r\n

{t('login.forgottenPassword.resetPassword')}

\r\n

{t('login.forgottenPassword.pleaseEnterNewPassword')}

\r\n isValid}\r\n />\r\n \r\n \r\n

\r\n {this.state.requestFailed\r\n ? t('login.forgottenPassword.error')\r\n : ''}\r\n

\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n {this.state.code && this.state.emailAddress && this.state.passwordChanged && (\r\n
\r\n \r\n
\r\n \r\n

{t('login.forgottenPassword.forgotYourPassword')}

\r\n

{t('login.redirectToLogin')}

\r\n
\r\n
\r\n
\r\n )}\r\n {this.state.readyToRedirect && }\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n {!this.state.emailSent && !(this.state.code && this.state.emailAddress) && (\r\n
\r\n
\r\n \r\n

{t('login.forgottenPassword.forgotYourPassword')}

\r\n

\r\n {t('login.forgottenPassword.forgotYourPasswordDescription')}\r\n

\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n {this.state.emailSent && !this.state.code && (\r\n
\r\n
\r\n \r\n

\r\n {t('login.forgottenPassword.passwordResetIfEmailExist')}\r\n

\r\n

\r\n {t('login.forgottenPassword.didNotGetEmail')}\r\n \r\n {t('login.forgottenPassword.resendLink')}\r\n \r\n

\r\n
\r\n
\r\n
\r\n )}\r\n {this.state.code && this.state.emailAddress && !this.state.passwordChanged && (\r\n
\r\n
\r\n \r\n

{t('login.forgottenPassword.resetPassword')}

\r\n

{t('login.forgottenPassword.pleaseEnterNewPassword')}

\r\n isValid}\r\n />\r\n \r\n \r\n

\r\n {this.state.requestFailed\r\n ? t('login.forgottenPassword.error')\r\n : ''}\r\n

\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n )}\r\n {this.state.code && this.state.emailAddress && this.state.passwordChanged && (\r\n
\r\n
\r\n \r\n

{t('login.forgottenPassword.forgotYourPassword')}

\r\n

{t('login.redirectToLogin')}

\r\n
\r\n
\r\n
\r\n )}\r\n {this.state.readyToRedirect && }\r\n
\r\n \r\n
\r\n \r\n );\r\n }}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default ForgottenPassword;\r\n","import React, { useEffect } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { ModalBackButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { Widget, WidgetList } from '../../../Shared/Components/Presentational/Widget';\r\nimport './ImportantInformationPage.scss';\r\nimport ImportantInformationWidget from './ImportantInformationWidget';\r\nimport './NewsCard.scss';\r\nimport { Link } from 'react-router-dom';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { Entry } from 'contentful';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport { INLINES } from '@contentful/rich-text-types';\r\n\r\nexport interface ImportantInformationPageProps {\r\n selectedId: string;\r\n importantInformation: Entry[];\r\n isHeaderOpen: boolean;\r\n setSelectedImportantInformation: (selectedImportantInformationId: string) => void;\r\n}\r\n\r\nconst ImportantInformationPage: React.FC = ({\r\n selectedId,\r\n importantInformation,\r\n isHeaderOpen,\r\n setSelectedImportantInformation\r\n}) => {\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, []);\r\n const selectedItem = importantInformation.find(a => a.sys.id == selectedId);\r\n \r\n const { t } = useTranslation();\r\n const options = {\r\n renderNode: {\r\n [INLINES. HYPERLINK]: ({ data }: any, children: any) => {\r\n return {children};\r\n }\r\n }\r\n }\r\n return (\r\n
\r\n {!isHeaderOpen && (\r\n <>\r\n

{t('myParkAndHome.title')}

\r\n

{t('myParkAndHome.message')}

\r\n \r\n )}\r\n\r\n \r\n
\r\n {selectedItem &&

{selectedItem.fields.title}

}\r\n {selectedItem && documentToReactComponents(selectedItem.fields.content, options)}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n {importantInformation\r\n .filter(x => x.sys.id !== selectedId)\r\n .map((information, i) => (\r\n setSelectedImportantInformation(information.sys.id)}\r\n containerClassName=\"sidebar\"\r\n />\r\n ))}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default ImportantInformationPage;\r\n","import React, { useEffect } from 'react';\r\nimport './NewsCard.scss';\r\nimport { useTranslation } from 'react-i18next';\r\nimport ImportantInformationWidget from './ImportantInformationWidget';\r\nimport { Widget, WidgetList } from '../../../Shared/Components/Presentational/Widget';\r\nimport './ImportantInformationPage.scss';\r\nimport { ImportantInformationPageProps } from './ImportantInformationPage';\r\nimport { ModalBackButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { Link } from 'react-router-dom';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport { INLINES } from '@contentful/rich-text-types';\r\n\r\nconst ImportantInformationPageMobile: React.FC = ({\r\n selectedId,\r\n importantInformation,\r\n setSelectedImportantInformation\r\n}) => {\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, []);\r\n const selectedItem = importantInformation.find(a => a.sys.id == selectedId);\r\n\r\n const { t } = useTranslation();\r\n const options = {\r\n renderNode: {\r\n [INLINES. HYPERLINK]: ({ data }: any, children: any) => {\r\n return {children};\r\n }\r\n }\r\n }\r\n return (\r\n
\r\n

{t('myParkAndHome.title')}

\r\n

{t('myParkAndHome.message')}

\r\n \r\n
\r\n {selectedItem &&

{selectedItem.fields.title}

}\r\n {selectedItem && documentToReactComponents(selectedItem.fields.content, options)}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n \r\n {importantInformation\r\n .filter(x => x.sys.id !== selectedId)\r\n .map((information, i) => (\r\n setSelectedImportantInformation(information.sys.id)}\r\n containerClassName=\"sidebar\"\r\n />\r\n ))}\r\n \r\n
\r\n );\r\n};\r\n\r\nexport default ImportantInformationPageMobile;\r\n","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport ImportantInformationPage from '../Presentational/ImportantInformationPage';\r\nimport { SET_SELECTED_IMPORTANT_INFORMATION } from '../../Redux/ActionTypes';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport ImportantInformationPageMobile from '../Presentational/ImportantInformationPage.mobile';\r\nimport { Entry } from 'contentful';\r\n\r\ninterface ImportantInformationProps extends RouteComponentProps {\r\n selectedId: string;\r\n importantInformation: Entry[];\r\n isHeaderOpen: boolean;\r\n setSelectedImportantInformation: (selectedImportantInformationId: string) => void;\r\n}\r\n\r\nconst ImportantInformation: React.FC = ({\r\n selectedId,\r\n importantInformation,\r\n history,\r\n isHeaderOpen,\r\n setSelectedImportantInformation,\r\n}) => {\r\n useEffect(() => {\r\n if (!selectedId) {\r\n history.push(Routes.MyParkAndHome);\r\n }\r\n }, [selectedId, history]);\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setSelectedImportantInformation: (selectedImportantInformationId: string) => {\r\n dispatch({ type: SET_SELECTED_IMPORTANT_INFORMATION, payload: selectedImportantInformationId });\r\n window.scrollTo(0, 0);\r\n },\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n selectedId: state.information.selectedImportantInformationId,\r\n importantInformation: state.information.importantInformation,\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(ImportantInformation));\r\n","import ContentfulClient from \"../ContentfulClient\";\r\n\r\nexport function GetNewsArticleCall(ContentfulId : string) {\r\n let filter ={\r\n content_type: 'newsArticle',\r\n }\r\n return ContentfulClient.getEntry(ContentfulId, filter);\r\n}","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Link } from 'react-router-dom';\r\nimport { Get } from '../../../Api/ApiService';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { ModalBackButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\nimport { Widget, WidgetList } from '../../../Shared/Components/Presentational/Widget';\r\nimport NewsCardContainer from '../Container/NewsCardContainer';\r\nimport './ParkNewsPage.scss';\r\nimport { formatDateString } from '../../../Shared/Utilities/DateUtils';\r\nimport { GetNewsArticleCall } from '../../../Contentful/Calls/GetNewsArticleCall';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport { Entry } from 'contentful';\r\nimport RichTextRenderOptions from '../../../Contentful/RichTextOptions';\r\n\r\nexport interface ParkNewsPageProps {\r\n selectedId: string;\r\n newsItem: Entry;\r\n setSelectedNewsItem: (setSelectedNewsItem: string) => void;\r\n}\r\n\r\nconst ParkNewsPage: React.FC = ({ selectedId, newsItem, setSelectedNewsItem }) => {\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, []);\r\n\r\n const [news, setNews] = useState>(Object);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const { t } = useTranslation();\r\n\r\n useEffect(() => {\r\n if (selectedId) {\r\n GetNewsArticleCall(selectedId).then(\r\n result => {\r\n setNews(result);\r\n setIsLoading(false);\r\n },\r\n err => {\r\n setIsLoading(false);\r\n }\r\n );\r\n }else{\r\n setIsLoading(false);\r\n }\r\n }, [selectedId]);\r\n\r\n return (\r\n
\r\n

{t('myParkAndHome.title')}

\r\n

{t('myParkAndHome.message')}

\r\n \r\n {!isLoading && \r\n
\r\n
\r\n \"news\"\r\n
\r\n
\r\n
{news.fields.title}
\r\n
Posted {formatDateString(news.fields.published)}
\r\n
\r\n {documentToReactComponents(news.fields.content, RichTextRenderOptions)}\r\n
\r\n
\r\n
\r\n }\r\n {isLoading && \r\n
\r\n \r\n
\r\n }\r\n \r\n
\r\n \r\n \r\n \r\n
\r\n \r\n \r\n

{t('myParkAndHome.parkNewsFeed')}

\r\n \r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ParkNewsPage;\r\n","import React, { useEffect, useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { Link } from 'react-router-dom';\r\nimport { Get } from '../../../Api/ApiService';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { ModalBackButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\nimport { Widget, WidgetList } from '../../../Shared/Components/Presentational/Widget';\r\nimport './ParkNewsPage.scss';\r\nimport { formatDateString } from '../../../Shared/Utilities/DateUtils';\r\nimport { GetNewsArticleCall } from '../../../Contentful/Calls/GetNewsArticleCall'\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer'\r\nimport { Entry } from 'contentful';\r\n\r\nexport interface ParkNewsPageProps {\r\n selectedId: string;\r\n newsItem: Entry;\r\n setSelectedNewsItem: (setSelectedNewsItem: string) => void;\r\n}\r\n\r\nconst ParkNewsPageMobile: React.FC = ({ selectedId, newsItem, setSelectedNewsItem }) => {\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, []);\r\n\r\n const [news, setNews] = useState>(Object);\r\n const [isLoading, setIsLoading] = useState(true);\r\n const { t } = useTranslation();\r\n\r\n useEffect(() => {\r\n if (selectedId) {\r\n setIsLoading(true);\r\n GetNewsArticleCall(selectedId).then(\r\n result => {\r\n setNews(result);\r\n setIsLoading(false);\r\n },\r\n err => {\r\n setIsLoading(false);\r\n }\r\n );\r\n }else{\r\n setIsLoading(false);\r\n }\r\n }, [selectedId]);\r\n\r\n return (\r\n
\r\n \r\n {!isLoading && \r\n
\r\n
\r\n \"news\"\r\n
\r\n
\r\n
{news.fields.title}
\r\n
Posted {formatDateString(news.fields.published)}
\r\n
\r\n {documentToReactComponents(news.fields.content)}\r\n
\r\n
\r\n
\r\n }\r\n {isLoading && \r\n
\r\n \r\n
\r\n }\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default ParkNewsPageMobile;\r\n","import React, { useEffect } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { RouteComponentProps, withRouter } from 'react-router-dom';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport ParkNewsPage from '../Presentational/ParkNewsPage';\r\nimport { SET_SELECTED_NEWS_ITEM } from '../../Redux/ActionTypes';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport ParkNewsPageMobile from '../Presentational/ParkNewsPage.mobile';\r\nimport { Entry } from 'contentful';\r\n\r\ninterface ParkNewsProps extends RouteComponentProps {\r\n selectedId: string;\r\n news:Entry;\r\n setSelectedNewsItem: (setSelectedNewsItem: string) => void;\r\n}\r\n\r\nconst ParkNews: React.FC = ({ selectedId, news, history, setSelectedNewsItem }) => {\r\n useEffect(() => {\r\n if (!selectedId) {\r\n history.push(Routes.MyParkAndHome);\r\n }\r\n }, [selectedId, history]);\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setSelectedNewsItem: (selectedNewsItemId: string) => {\r\n dispatch({ type: SET_SELECTED_NEWS_ITEM, payload: selectedNewsItemId });\r\n window.scrollTo(0, 0);\r\n },\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n selectedId: state.information.selectedNewsItemId,\r\n news: state.information.news,\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(ParkNews));\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostRegisterCall extends PostApiCall {\r\n constructor(details: UserDTO) {\r\n let url: string = 'account/register';\r\n\r\n super(url);\r\n\r\n this.body = details;\r\n this.logoutOn401 = false;\r\n }\r\n}\r\n","import React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { InputContainer, ButtonContainer } from '../../../Shared/Components/Presentational/Containers';\r\nimport { PrimaryButton, SecondaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport Version from '../../../Shared/Components/Presentational/Version'\r\nimport classNames from 'classnames';\r\nimport { isValidEmail } from '../../../Shared/Utilities/Validation';\r\n\r\ninterface RegisterDetailsProps {\r\n onSubmit: (email: string, firstName: string, lastName: string) => void;\r\n firstName: string;\r\n lastName: string;\r\n email: string;\r\n isMobile: boolean;\r\n isLoggingIn: boolean;\r\n}\r\n\r\nexport default function RegisterDetails(props: RegisterDetailsProps) {\r\n const [firstName, setFirstName] = useState(props.firstName);\r\n const [lastName, setLastName] = useState(props.lastName);\r\n const [email, setEmail] = useState(props.email);\r\n const [isEmailValid, setIsEmailValid] = useState(true);\r\n\r\n const ContinueButton = props.isMobile ? SecondaryButton : PrimaryButton;\r\n\r\n const { t } = useTranslation();\r\n\r\n const onEmailChange = (e: any) => {\r\n setEmail(e.target.value);\r\n\r\n setIsEmailValid(isValidEmail(e.target.value));\r\n };\r\n\r\n const onContinue = (e: any) => {\r\n e.preventDefault();\r\n props.onSubmit(email, firstName, lastName);\r\n };\r\n\r\n return (\r\n
\r\n

{t('register.yourDetails')}

\r\n\r\n \r\n setFirstName(e.target.value)}\r\n maxLength={50}\r\n />\r\n setLastName(e.target.value)}\r\n maxLength={50}\r\n />\r\n onEmailChange(e)}\r\n maxLength={256}\r\n />\r\n \r\n \r\n {t('register.passwordRequirements.emailInvalid')}\r\n

\r\n\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n}\r\n","import classNames from 'classnames';\r\nimport React, { useState } from 'react';\r\nimport { useTranslation } from 'react-i18next';\r\nimport { PrimaryButton, SecondaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { ButtonContainer, InputContainer } from '../../../Shared/Components/Presentational/Containers';\r\nimport Version from '../../../Shared/Components/Presentational/Version'\r\nimport PasswordRequirements from '../../../Shared/Components/Presentational/PasswordRequirements';\r\n\r\ninterface RegisterPasswordProps {\r\n onSubmit: (e: any, password: string) => void;\r\n isRegistering: boolean;\r\n errorMessage: string;\r\n isMobile: boolean;\r\n}\r\n\r\nconst getErrorMessage = (errorPlaceholder: string): string => {\r\n switch (errorPlaceholder) {\r\n case 'EMAIL_IN_USE':\r\n return 'register.emailInUse';\r\n case 'USER_NOT_FOUND':\r\n return 'register.emailNotAvailable';\r\n case 'PARCVU_ERROR':\r\n default:\r\n return 'register.genericError';\r\n }\r\n};\r\n\r\nexport default function RegisterPassword(props: RegisterPasswordProps) {\r\n const [password, setPassword] = useState('');\r\n const [confirmPassword, setConfirmPassword] = useState('');\r\n const [isPasswordValid, setPasswordValid] = useState(false);\r\n\r\n const CreateAccountButton = props.isMobile ? SecondaryButton : PrimaryButton;\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n
props.onSubmit(e, password)}>\r\n

{t('register.createAPassword')}

\r\n
\r\n setPasswordValid(isValid)} />\r\n \r\n setPassword(e.target.value)}\r\n autoFocus={true}\r\n />\r\n setConfirmPassword(e.target.value)}\r\n />\r\n \r\n \r\n {password !== confirmPassword && t('register.passwordRequirements.passwordsDontMatch')}\r\n {password !== confirmPassword && props.errorMessage &&
}\r\n {props.errorMessage && }\r\n

\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n );\r\n}\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostResendConfirmAccountCall extends PostApiCall {\r\n constructor(body: ConfirmDTO) {\r\n let url: string = `account/resendConfirmAccount`;\r\n\r\n super(url);\r\n\r\n this.body = body;\r\n this.logoutOn401 = false;\r\n }\r\n}\r\n","import classNames from 'classnames';\r\nimport React, { Component } from 'react';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { Post } from '../../../Api/ApiService';\r\nimport { PostRegisterCall } from '../../../Api/Calls/PostRegisterCall';\r\nimport { BackButton, LinkButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport './Register.scss';\r\nimport RegisterDetails from './RegisterDetails';\r\nimport RegisterPassword from './RegisterPassword';\r\nimport { Redirect } from 'react-router-dom';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { PostResendConfirmAccountCall } from '../../../Api/Calls/PostResendConfirmAccountCall';\r\nimport GoogleLogin from 'react-google-login';\r\nimport { googleClientId, facebookAppId } from '../../../Shared/Environment';\r\n//@ts-ignore\r\nimport FacebookLogin from 'react-facebook-login/dist/facebook-login-render-props';\r\n\r\n\r\nexport interface RegisterPopupState {\r\n email: string;\r\n firstName: string;\r\n lastName: string;\r\n isOnDetails: boolean;\r\n registerComplete: boolean;\r\n isRegistering: boolean;\r\n errorMessage: string;\r\n redirectLogin: boolean;\r\n newUserId: string;\r\n}\r\n\r\nexport interface RegisterPopupProps extends WithTranslation {\r\n isMobile: boolean;\r\n isLoggingIn: boolean;\r\n loginClick: (email: string, password: string, type: string) => void;\r\n loginFailureMessage: string;\r\n}\r\n\r\nclass RegisterPopup extends Component {\r\n\r\n constructor(props: RegisterPopupProps) {\r\n super(props);\r\n\r\n this.responseGoogle = this.responseGoogle.bind(this);\r\n this.responseFacebook = this.responseFacebook.bind(this);\r\n }\r\n\r\n public state: RegisterPopupState = {\r\n email: '',\r\n firstName: '',\r\n lastName: '',\r\n isOnDetails: true,\r\n registerComplete: false,\r\n isRegistering: false,\r\n errorMessage: '',\r\n redirectLogin: false,\r\n newUserId: ''\r\n };\r\n\r\n onDetailsEntered = (email: string, firstName: string, lastName: string) => {\r\n this.setState({ email, firstName, lastName, isOnDetails: false });\r\n };\r\n\r\n onSubmit = async (e: any, password: string) => {\r\n e.preventDefault();\r\n this.setState({ isRegistering: true });\r\n\r\n const details: UserDTO = {\r\n Email: this.state.email,\r\n FirstName: this.state.firstName,\r\n LastName: this.state.lastName,\r\n Password: password\r\n };\r\n\r\n try {\r\n await Post(new PostRegisterCall(details)).then(userId => { \r\n this.setState({ registerComplete: true, newUserId: userId.data });\r\n });\r\n } catch (e) {\r\n this.setState({ errorMessage: e.response.data });\r\n } finally {\r\n this.setState({ isRegistering: false });\r\n }\r\n };\r\n\r\n handleBack = () => {\r\n if (this.state.registerComplete || this.state.isOnDetails) {\r\n this.setState({ redirectLogin: true });\r\n } else {\r\n this.setState({ isOnDetails: true });\r\n }\r\n };\r\n\r\n resendConfirmationEmail = () => {\r\n\r\n const userId = this.state.newUserId;\r\n\r\n Post<{}>(new PostResendConfirmAccountCall({ UserId: userId, Code: '' })).then(() => {\r\n });\r\n }\r\n\r\n private responseGoogle(response: any) {\r\n if (response.tokenId) {\r\n this.props.loginClick('', response.tokenId, 'google');\r\n }\r\n }\r\n\r\n private responseFacebook(response: any) {\r\n if (response.accessToken) {\r\n this.props.loginClick('', response.accessToken, 'facebook');\r\n }\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n\r\n if (this.state.redirectLogin) {\r\n return ;\r\n }\r\n\r\n return (\r\n
\r\n \r\n\r\n

If your Google account also uses this email address, you can use it to register; otherwise, please complete the form below.\" }}>

{/*t('register.registrationExplanation') old explanation*/}\r\n\r\n
\r\n {/*
disabled as broken\r\n (\r\n \r\n \"Facebook\"\r\n Continue with Facebook\r\n \r\n )}\r\n />\r\n
*/}\r\n
\r\n (\r\n \r\n \"Google\"\r\n Continue with Google\r\n \r\n )}\r\n onSuccess={this.responseGoogle}\r\n onFailure={this.responseGoogle}\r\n />\r\n
\r\n \r\n {t(this.props.loginFailureMessage)}\r\n

\r\n
\r\n\r\n {!this.state.registerComplete && this.state.isOnDetails && (\r\n \r\n )}\r\n {!this.state.registerComplete && !this.state.isOnDetails && (\r\n \r\n )}\r\n {this.state.registerComplete && (\r\n
\r\n

{t('register.registrationComplete')}

\r\n

\r\n {t('register.thankForRegister')}\r\n

\r\n

{t('register.accountCreated')}

\r\n

\r\n {t('register.resendLinkPre')} \r\n \r\n

\r\n
\r\n )}\r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(RegisterPopup);\r\n","import React, { Component } from 'react';\r\nimport { VerticalBackground } from '../../../Shared/Components/Presentational/Backgrounds';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport RegisterPopup from './RegisterPopup';\r\n\r\ninterface RegisterPageProps extends WithTranslation {\r\n loginClick: (email: string, password: string, type: string) => void;\r\n isLoggingIn: boolean;\r\n loginFailureMessage: string;\r\n}\r\n\r\nclass RegisterPage extends Component {\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n
\r\n \r\n

{t('register.title')}

\r\n \r\n \r\n
\r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(RegisterPage);\r\n","import React from 'react';\r\nimport { ImageBackground } from '../../../Shared/Components/Presentational/Backgrounds';\r\nimport RegisterPopup from './RegisterPopup';\r\n\r\ninterface RegisterPageMobleProps {\r\n loginClick: (email: string, password: string, type: string) => void;\r\n isLoggingIn: boolean;\r\n loginFailureMessage: string;\r\n}\r\n\r\nconst RegisterPageMobile: React.FC = (props: RegisterPageMobleProps) => (\r\n \r\n \r\n \r\n);\r\n\r\nexport default RegisterPageMobile;\r\n","import React from 'react';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport RegisterPage from '../Presentational/RegisterPage';\r\nimport RegisterPageMobile from '../Presentational/RegisterPage.mobile';\r\nimport { login } from '../../Redux/ActionCreators';\r\nimport { connect } from 'react-redux';\r\nimport { Redirect } from 'react-router';\r\n\r\ninterface RegisterProps {\r\n loginClick: (email: string, password: string, type: string) => void;\r\n isLoggingIn: boolean;\r\n loginFailureMessage: string;\r\n location: any;\r\n isLoggedIn: boolean;\r\n}\r\n\r\nclass Register extends React.Component {\r\n render() {\r\n\r\n const { location, loginClick } = this.props;\r\n\r\n if (this.props.isLoggedIn) {\r\n return ();\r\n } else {\r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n }\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isLoggingIn: state.login.loggingIn,\r\n loginFailureMessage: state.login.loginFailureMessage,\r\n isLoggedIn: state.login.loggedIn\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n loginClick: (email: string, password: string, type: string) => {\r\n dispatch(login(email, password, type))\r\n }\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Register);\r\n","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostConfirmAccountCall extends PostApiCall {\r\n constructor(body: ConfirmDTO) {\r\n let url: string = `account/confirmAccount`;\r\n\r\n super(url);\r\n\r\n this.body = body;\r\n this.logoutOn401 = false;\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { Redirect } from 'react-router';\r\nimport { setTimeout } from 'timers';\r\nimport { Post } from './Api/ApiService';\r\nimport { PostConfirmAccountCall } from './Api/Calls/PostConfirmAccountCall';\r\nimport { PostResendConfirmAccountCall } from './Api/Calls/PostResendConfirmAccountCall';\r\nimport './Confirm.scss';\r\nimport * as Routes from './Constants/Routes';\r\nimport { ImageBackground, VerticalBackground } from './Shared/Components/Presentational/Backgrounds';\r\nimport { SecondaryButton, PrimaryButton } from './Shared/Components/Presentational/Buttons';\r\nimport { Desktop, Mobile } from './Shared/Components/Presentational/ResponsiveViews';\r\n\r\ninterface ConfirmAccountProps extends WithTranslation {}\r\ninterface ConfirmAccountState {\r\n codeConfirmed: boolean;\r\n readyToRedirect: boolean;\r\n requestFailed: boolean;\r\n emailResent: boolean;\r\n userId: string;\r\n code: string;\r\n}\r\n\r\nclass ConfirmAccount extends Component {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n const search = window.location.search;\r\n const params = new URLSearchParams(search);\r\n const userId = params.get('userId') as string;\r\n const code = params.get('code') as string;\r\n\r\n this.state = {\r\n codeConfirmed: false,\r\n readyToRedirect: false,\r\n requestFailed: false,\r\n emailResent: false,\r\n userId: userId,\r\n code: code\r\n };\r\n\r\n Post<{}>(new PostConfirmAccountCall({ UserId: userId, Code: code }))\r\n .then(() => {\r\n this.setState({ codeConfirmed: true });\r\n\r\n setTimeout(() => {\r\n this.setState({ readyToRedirect: true });\r\n }, 5000);\r\n })\r\n .catch(() => {\r\n this.setState({ requestFailed: true });\r\n });\r\n }\r\n\r\n private resendConfirmationEmail() {\r\n this.setState({ emailResent: false });\r\n\r\n const code = this.state.code;\r\n const userId = this.state.userId;\r\n\r\n Post<{}>(new PostResendConfirmAccountCall({ UserId: userId, Code: code })).then(() => {\r\n this.setState({ emailResent: true });\r\n });\r\n }\r\n\r\n render() {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n \r\n
\r\n \r\n

{t('login.welcomeTitle')}

\r\n

{t('login.welcomeMessage')}

\r\n \r\n
\r\n {this.state.codeConfirmed && (\r\n
\r\n

{t('register.confirmationComplete')}

\r\n

{t('login.redirectToLogin')}

\r\n
\r\n )}\r\n {!this.state.codeConfirmed && !this.state.requestFailed && (\r\n
\r\n

{t('register.confirmingAccount')}

\r\n

{t('login.checkingCode')}

\r\n
\r\n )}\r\n {!this.state.codeConfirmed && this.state.requestFailed && (\r\n
\r\n

{t('register.confirmationFailed')}

\r\n

{t('register.confirmationLinkExpired')}

\r\n this.resendConfirmationEmail()}\r\n text={t('login.requestNewLink')}\r\n disabled={this.state.emailResent}\r\n />\r\n {this.state.emailResent &&

{t('login.activationEmailResent')}

}\r\n
\r\n )}\r\n {this.state.readyToRedirect && }\r\n
\r\n
\r\n
\r\n \r\n \r\n
\r\n {this.state.codeConfirmed && (\r\n
\r\n

{t('register.confirmationComplete')}

\r\n

{t('login.redirectToLogin')}

\r\n
\r\n )}\r\n {!this.state.codeConfirmed && !this.state.requestFailed && (\r\n
\r\n

{t('register.confirmingAccount')}

\r\n

{t('login.checkingCode')}

\r\n
\r\n )}\r\n {!this.state.codeConfirmed && this.state.requestFailed && (\r\n
\r\n

{t('register.confirmationFailed')}

\r\n

{t('register.confirmationLinkExpired')}

\r\n this.resendConfirmationEmail()}\r\n text={t('login.requestNewLink')}\r\n disabled={this.state.emailResent}\r\n >\r\n {this.state.emailResent &&

{t('login.emailConfirmationResent')}

}\r\n
\r\n )}\r\n {this.state.readyToRedirect && }\r\n
\r\n \r\n
\r\n \r\n );\r\n }\r\n}\r\n\r\nexport default withTranslation()(ConfirmAccount);\r\n","import React from 'react';\r\nimport CookieConsent from 'react-cookie-consent';\r\nimport { SecondaryButton } from './Buttons';\r\nimport { Translation } from 'react-i18next';\r\n\r\nconst AcceptButton = (props: any) => {\r\n return (\r\n \r\n {(t: (key: string) => string) => {\r\n return (\r\n \r\n );\r\n }}\r\n );\r\n};\r\n\r\nexport default function CookiePopup() {\r\n return (\r\n \r\n {(t: (key: string) => string) => {\r\n return (\r\n {t('general.cookies')}\r\n \r\n );\r\n }}\r\n \r\n );\r\n}\r\n","import { useTranslation } from \"react-i18next\"\r\nimport React from 'react';\r\nimport DatePicker from 'react-datepicker';\r\nimport \"./FormStyles.scss\";\r\nimport { Desktop, Mobile } from \"../../../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { NativeDatePicker } from \"../../../../../Shared/Components/Presentational/NativeDatePicker\";\r\n\r\ninterface DateInputFieldProps {\r\n name: string;\r\n formInput: FormInput;\r\n labeltranslationKey: string;\r\n onInput: (value: Date, name: any, errors: string[]) => void;\r\n containerClass?: string;\r\n showErrors?: boolean;\r\n validators: Validator[];\r\n tabindex?: number;\r\n minDate?: Date;\r\n maxDate?: Date;\r\n}\r\n\r\nconst DateInputField: React.FC = (props: DateInputFieldProps) => {\r\n\r\n function updateValue(date: Date) {\r\n const errors: string[] = [];\r\n for (let validator of props.validators) {\r\n if (!validator.validator(date)) {\r\n errors.push(validator.name);\r\n }\r\n }\r\n props.onInput(date, props.name, errors);\r\n }\r\n\r\n const { t } = useTranslation()\r\n\r\n return (\r\n
\r\n \r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n { (props.showErrors && (props.formInput.errors && props.formInput.errors.length > 0)) &&

{props.formInput && t(\"addMembership.errors.\" + props.formInput.errors[0])}

}\r\n
\r\n )\r\n}\r\n\r\nexport default DateInputField","import { useTranslation } from \"react-i18next\"\r\nimport { useEffect, useState } from \"react\";\r\nimport React, { ChangeEvent } from 'react';\r\nimport \"./FormStyles.scss\";\r\n\r\ninterface InputFieldProps {\r\n name: string;\r\n formInput: FormInput;\r\n labeltranslationKey: string;\r\n onInput: (value: any, name: any, errors: string[]) => void;\r\n containerClass?: string;\r\n showErrors?: boolean;\r\n validators: Validator[];\r\n type?: string;\r\n disabled?: boolean;\r\n tabindex?: number;\r\n}\r\n\r\n\r\n\r\nconst InputField: React.FC = (props: InputFieldProps) => {\r\n const [input, setInput] = useState(props.formInput ? props.formInput.value : '');\r\n\r\n useEffect(() => {\r\n if (props.formInput && props.formInput.value !== input) {\r\n setInput(props.formInput.value);\r\n }\r\n }, [props.formInput]);\r\n\r\n function updateValue(e: ChangeEvent) {\r\n const errors: string[] = [];\r\n for (let validator of props.validators) {\r\n if (!validator.validator(e.target.value)) {\r\n errors.push(validator.name);\r\n }\r\n }\r\n setInput(e.target.value);\r\n props.onInput(e.target.value, props.name, errors);\r\n }\r\n\r\n const { t } = useTranslation();\r\n\r\n return (\r\n
\r\n \r\n
\r\n {props.disabled ? (\r\n

{input}

\r\n ) : (\r\n \r\n )}\r\n {(props.showErrors && (props.formInput.errors && props.formInput.errors.length > 0)) &&\r\n

{props.formInput && t(\"addMembership.errors.\" + props.formInput.errors[0])}

\r\n }\r\n
\r\n );\r\n}\r\n\r\nexport default InputField;\r\n","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetMembershipEndDateCall extends GetApiCall {\r\n constructor(date: Date, termFormula: string) {\r\n let url: string = \"MembershipTerm/GetMembershipEndDate\";\r\n let startDate = date !== null ? date.toDateString() : null;\r\n let params: any = {startDate, termFormula};\r\n\r\n super(url, params);\r\n }\r\n}","import React, { useState, useEffect, ChangeEvent } from \"react\";\r\nimport DateInputField from \"./FormInputs/DateInputField\";\r\nimport InputField from \"./FormInputs/InputField\";\r\nimport \"./MembershipPageStyles.scss\";\r\nimport { hasValue, isValidEmail, isValidUKPhoneNumber, isNotFutureDate, isTextOnly, isDateNotInPast, CreateXDaysValidator } from \"../../../../Shared/Utilities/Validation\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport GooglePlacesAutocomplete, { geocodeByPlaceId } from \"react-google-places-autocomplete\";\r\nimport { Desktop, Mobile } from \"../../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\nimport { getDate, getYear, isLeapYear } from \"date-fns\";\r\nimport { Get } from \"../../../../Api/ApiService\";\r\nimport { GetMembershipEndDateCall } from \"../../../../Api/Calls/GetMembershipEndDateCall\";\r\nimport UserRoles from \"../../../../Constants/UserRoles\";\r\nimport { formatDate } from \"../../../../Shared/Utilities/DateUtils\";\r\n\r\ninterface PersonalDetailsProps extends WithTranslation {\r\n onInput: (value: any, name: any, errors: string[]) => void;\r\n membershipForm: any;\r\n showErrors: boolean;\r\n marketingPreferencesText: ContentfulContentObject;\r\n hasOwnMembership: boolean;\r\n userRoles: UserRoleDTO[];\r\n detailsDescription: any;\r\n membershipExist: boolean;\r\n}\r\n\r\nconst PersonalDetails: React.FC = (props: PersonalDetailsProps) => {\r\n const { t } = props;\r\n\r\n let age: number = 0;\r\n const [input, setInput] = useState(null);\r\n const [scrollPosition, setscrollPosition] = useState('');\r\n const [endDate, setEndDate] = useState(\"\");\r\n const [todayPlus30, settodayPlus30] = useState(new Date());\r\n\r\n useEffect(() => {\r\n if (todayPlus30) {\r\n todayPlus30.setDate(todayPlus30.getDate() + 30);\r\n }\r\n }, []);\r\n\r\n const getEndDate = async (startDate: Date, termFormula: string): Promise => {\r\n let endDate = await Get(new GetMembershipEndDateCall(startDate, termFormula))\r\n .then(response => {\r\n return response.data\r\n }\r\n ).catch(() => {\r\n return;\r\n })\r\n\r\n if (endDate) {\r\n let displayEndDate = formatDate(endDate);\r\n setEndDate(displayEndDate);\r\n }\r\n\r\n }\r\n\r\n useEffect(() => {\r\n if (age && age > 18) {\r\n if (props.membershipForm && props.membershipForm.marketing && !props.membershipForm.marketing.value) {\r\n props.onInput(false, \"marketing\", []);\r\n }\r\n } else if (age && age < 18) {\r\n props.onInput(undefined, \"marketing\", []);\r\n }\r\n }, [props.membershipForm.dateOfBirth.value]);\r\n\r\n useEffect(() => {\r\n if (props.membershipForm && props.membershipForm.startDate && props.membershipForm.termFormula) {\r\n getEndDate(props.membershipForm.startDate.value, props.membershipForm.termFormula.value.value)\r\n }\r\n }, [props.membershipForm.startDate.value]);\r\n\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, []);\r\n\r\n const calculateAge = (dateOfBirth: Date): number => {\r\n let today = new Date();\r\n let birthDate = new Date(dateOfBirth);\r\n let ageNow = today.getFullYear() - birthDate.getFullYear();\r\n let m = today.getMonth() - birthDate.getMonth();\r\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\r\n ageNow--;\r\n }\r\n return ageNow;\r\n }\r\n\r\n if (props.membershipForm.dateOfBirth && props.membershipForm.dateOfBirth.value) {\r\n age = calculateAge(props.membershipForm.dateOfBirth.value);\r\n } else {\r\n age = 0;\r\n }\r\n\r\n function updateValue(e: ChangeEvent) {\r\n const valueToBool = e.target.value && e.target.value === \"1\" ? true : false;\r\n props.onInput(valueToBool, e.target.name, []);\r\n }\r\n\r\n function onDOBChange(value: any, name: any, errors: string[]) {\r\n age = value ? calculateAge(value) : 0\r\n props.onInput(value, name, errors)\r\n }\r\n\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n
\r\n

{t(\"addMembership.personalDetails.title\")}

\r\n
\r\n
\r\n\r\n
\r\n {documentToReactComponents(props.detailsDescription)}\r\n
\r\n\r\n
\r\n
\r\n \r\n\r\n {(props.membershipExist || props.hasOwnMembership || UserRoles.IsOwner(props.userRoles)) ? (\r\n \r\n ) : (\r\n
\r\n \r\n

\r\n {props.membershipForm.email.value}\r\n

\r\n
\r\n )}\r\n\r\n \r\n\r\n
\r\n\r\n
\r\n\r\n \r\n\r\n \r\n\r\n
\r\n \r\n

\r\n {endDate}\r\n

\r\n
\r\n\r\n
\r\n\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n
\r\n {age >= 18 && (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {documentToReactComponents(props.marketingPreferencesText.content)}\r\n
\r\n {/*

{t(\"addMembership.preferences.fields.marketingPreferences.description\")}

*/}\r\n\r\n
\r\n \r\n Yes\r\n No\r\n
\r\n
\r\n {(props.showErrors && (props.membershipForm.marketing.errors && props.membershipForm.marketing.errors.length > 0)) &&\r\n

Errors: {props.membershipForm.marketing && props.membershipForm.marketing.errors}

\r\n }\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

{t(\"addMembership.personalDetails.title\")}

\r\n
\r\n
\r\n\r\n
\r\n {documentToReactComponents(props.detailsDescription)}\r\n
\r\n\r\n
\r\n \r\n\r\n \r\n\r\n \r\n\r\n {(props.hasOwnMembership || UserRoles.IsOwner(props.userRoles)) ? (\r\n \r\n ) : (\r\n
\r\n \r\n

\r\n {props.membershipForm.email.value}\r\n

\r\n
\r\n )}\r\n\r\n \r\n\r\n \r\n\r\n
\r\n \r\n

\r\n {endDate}\r\n

\r\n
\r\n\r\n {age >= 18 && (\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n {documentToReactComponents(props.marketingPreferencesText.content)}\r\n
\r\n {/*

{t(\"addMembership.preferences.fields.marketingPreferences.description\")}

*/}\r\n\r\n
\r\n \r\n Yes\r\n No\r\n
\r\n\r\n
\r\n {(props.showErrors && (props.membershipForm.marketing.errors && props.membershipForm.marketing.errors.length > 0)) &&\r\n

Errors: {props.membershipForm.marketing && props.membershipForm.marketing.errors}

\r\n }\r\n
\r\n )}\r\n\r\n
\r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default withTranslation()(PersonalDetails);","import React, { Component, useState } from \"react\";\r\nimport { WithTranslation, withTranslation } from \"react-i18next\";\r\nimport { Widget } from \"./Widget\";\r\nimport Fab from \"./Fab\";\r\nimport \"./Breadcrumb.scss\";\r\nimport { faPlus, faChevronRight } from \"@fortawesome/free-solid-svg-icons\";\r\nimport { PrimaryButton } from \"./Buttons\";\r\nimport { FontAwesomeIcon } from '@fortawesome/react-fontawesome';\r\n\r\ninterface BreadcrumbProps extends WithTranslation {\r\n title: string;\r\n section: any;\r\n selected: boolean;\r\n length: number;\r\n}\r\n\r\nconst Breadcrumb: React.FC = (props) => {\r\n const { t } = props;\r\n\r\n return (\r\n \r\n {t(props.title)}   \r\n {props.section.key != (props.length-1) && }\r\n \r\n );\r\n};\r\n\r\nexport default withTranslation()(Breadcrumb);","import React, { useEffect, useState } from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { PrimaryButton } from '../../../../Shared/Components/Presentational/Buttons';\r\nimport { Desktop, Mobile } from '../../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport './MembershipPageStyles.scss'\r\nimport DropdownList from '../../../../Shared/Components/Presentational/DropdownList';\r\nimport { Entry } from 'contentful';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\n\r\ninterface SelectMembershipTypeProps extends WithTranslation {\r\n name: string;\r\n form: any;\r\n onInput: (value: any, name: any, errors: string[]) => void;\r\n nextStep: () => void;\r\n showErrors?: boolean;\r\n ownerMembershipsLeft: boolean;\r\n ownerMembershipsAvailability: OwnerMembershipAvailabilityDTO;\r\n contentfulMembershipTypes: Entry[];\r\n termDurations: DropdownListOption[][];\r\n userRoles: UserRoleDTO[];\r\n}\r\n\r\nconst SelectMembershipType: React.FC = (props: SelectMembershipTypeProps) => {\r\n const { t } = props;\r\n const [selectedDurations, setSelectedDurations] = useState([]);\r\n\r\n useEffect(() => {\r\n // Selects value in dropdown for the membership duration\r\n // Will use the selected duration from the form\r\n let array: any[] = [];\r\n for (let i = 0; i < props.contentfulMembershipTypes.length; i++) {\r\n if (props.termDurations[i].length === 1) {\r\n array[i] = props.termDurations[i][0];\r\n } else {\r\n if (props.form.contentfulMembershipTypeId && props.form.termFormula && props.form.contentfulMembershipTypeId.value === props.contentfulMembershipTypes[i].sys.id) {\r\n array[i] = props.form.termFormula.value;\r\n } else {\r\n array[i] = undefined;\r\n }\r\n }\r\n }\r\n setSelectedDurations(array);\r\n }, [props.termDurations]);\r\n\r\n useEffect(() => {\r\n if (props.form.contentfulMembershipTypeId.value === undefined || \r\n props.form.contentfulMembershipTypeId.value === '' && \r\n props.form.contentfulMembershipTypeId.errors[0] !== 'isMembershipType') {\r\n props.onInput('', props.name, [\"isMembershipType\"]);\r\n }\r\n });\r\n\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, []);\r\n\r\n const handleMembershipSelection = (type: number) => {\r\n if (props.contentfulMembershipTypes) {\r\n if (selectedDurations[type] !== undefined) {\r\n props.onInput(props.contentfulMembershipTypes[type].sys.id, props.name, []);\r\n props.onInput(selectedDurations[type], \"termFormula\", []);\r\n props.nextStep();\r\n } else {\r\n props.onInput(props.contentfulMembershipTypes[type].sys.id, props.name, [\"noDuration\"]);\r\n }\r\n }\r\n }\r\n\r\n const handleButtonColour = (type: number, screen: string): string => {\r\n if (props.contentfulMembershipTypes) {\r\n if (props.form.contentfulMembershipTypeId != undefined && props.form.contentfulMembershipTypeId.value === props.contentfulMembershipTypes[type].sys.id) {\r\n if (screen === \"Desktop\") {\r\n return \"save-cnt-btn membership-btn selected-button\";\r\n } else {\r\n return \"membership-btn selected-button\";\r\n }\r\n }\r\n else {\r\n if (screen === \"Desktop\") {\r\n return \"save-cnt-btn membership-btn\";\r\n } else {\r\n return \"membership-btn\";\r\n }\r\n }\r\n }\r\n return \"membership-btn\";\r\n }\r\n\r\n const handleButtonText = (type: number): string => {\r\n if (props.form.contentfulMembershipTypeId.value && props.contentfulMembershipTypes) {\r\n if (props.form.contentfulMembershipTypeId.value === props.contentfulMembershipTypes[type].sys.id) {\r\n return \"Selected\";\r\n }\r\n }\r\n return \"Select\";\r\n }\r\n\r\n const calcColumns = () => {\r\n let columnPercentages = \"\";\r\n if (props.contentfulMembershipTypes) {\r\n let columns = props.contentfulMembershipTypes.length;\r\n let percentage = 100 / columns;\r\n for (let i = 0; i < columns; i++) {\r\n columnPercentages += percentage.toString() + \"% \";\r\n }\r\n }\r\n return columnPercentages;\r\n }\r\n\r\n return (\r\n <>\r\n {(props.contentfulMembershipTypes && props.termDurations) && (\r\n <>\r\n \r\n
\r\n
\r\n
\r\n

{t(\"addMembership.membership.title\")}

\r\n
\r\n
\r\n\r\n
\r\n {props.contentfulMembershipTypes.map(type => (\r\n
\r\n

{type.fields.publicName}

\r\n {type.fields.description.content && (\r\n
\r\n {documentToReactComponents(type.fields.description)}\r\n
\r\n )}\r\n
\r\n ))}\r\n\r\n {props.contentfulMembershipTypes.map((type, key) => (\r\n
\r\n {(props.termDurations && props.termDurations[key] && props.termDurations[key].length > 1) ? (\r\n
\r\n setSelectedDurations({ ...selectedDurations, [key]: term })}\r\n selectedOption={selectedDurations[key]}\r\n />\r\n
\r\n ) : (props.termDurations && props.termDurations[key] && props.termDurations[key].length === 1) ? (\r\n
\r\n

{props.termDurations[key][0].label}

\r\n
\r\n ) : (\r\n
\r\n

Term Unknown

\r\n
\r\n )}\r\n
\r\n ))}\r\n\r\n {props.contentfulMembershipTypes.map((type, key) => (\r\n
\r\n
\r\n {type.fields.debitsQuota ? (\r\n

\r\n {props.ownerMembershipsAvailability && props.ownerMembershipsAvailability.numberUsed} of {props.ownerMembershipsAvailability && props.ownerMembershipsAvailability.allocated} Club memberships used\r\n

\r\n ) : (\r\n

\r\n )}\r\n
\r\n
\r\n ))}\r\n\r\n {props.contentfulMembershipTypes.map((type, key) => (\r\n
\r\n
\r\n {(!type.fields.debitsQuota || (props.ownerMembershipsLeft || (props.form.contentfulMembershipTypeId && props.form.contentfulMembershipTypeId.value === type.sys.id))) ? (\r\n
\r\n
\r\n {\r\n handleMembershipSelection(key);\r\n }}\r\n className={handleButtonColour(key, \"Desktop\")}\r\n />\r\n
\r\n\r\n
\r\n ) : (\r\n

No Club memberships available

\r\n )}\r\n
\r\n
\r\n ))}\r\n
\r\n {(props.showErrors && (props.form.contentfulMembershipTypeId.errors && props.form.contentfulMembershipTypeId.errors.length > 0)) &&\r\n <>\r\n
\r\n

{props.form && props.form.contentfulMembershipTypeId && t(\"addMembership.errors.\" + props.form.contentfulMembershipTypeId.errors)}

\r\n \r\n }\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

{t(\"addMembership.membership.title\")}

\r\n
\r\n
\r\n\r\n {props.contentfulMembershipTypes.map((type, key) => (\r\n
\r\n

{type.fields.publicName}

\r\n {type.fields.description.content && (\r\n
\r\n {documentToReactComponents(type.fields.description)}\r\n
\r\n )}\r\n\r\n {(props.termDurations && props.termDurations[key] && props.termDurations[key].length > 1) ? (\r\n
\r\n setSelectedDurations({ ...selectedDurations, [key]: term })}\r\n selectedOption={selectedDurations[key]}\r\n />\r\n
\r\n ) : (props.termDurations && props.termDurations[key] && props.termDurations[key].length === 1) ? (\r\n
\r\n

{props.termDurations[key][0].label}

\r\n
\r\n ) : (\r\n
\r\n

Term Unknown

\r\n
\r\n )}\r\n\r\n
\r\n {(!type.fields.debitsQuota || (props.ownerMembershipsLeft || (props.form.contentfulMembershipTypeId && props.form.contentfulMembershipTypeId.value === type.sys.id))) ? (\r\n
\r\n {\r\n handleMembershipSelection(key);\r\n }}\r\n className={handleButtonColour(key, \"Mobile\")}\r\n />\r\n
\r\n {type.fields.debitsQuota ? (\r\n

\r\n {props.ownerMembershipsAvailability && props.ownerMembershipsAvailability.numberUsed} of {props.ownerMembershipsAvailability && props.ownerMembershipsAvailability.allocated} Club memberships used\r\n

\r\n ) : (\r\n

\r\n )}\r\n
\r\n
\r\n ) : (\r\n

No Club memberships available

\r\n )}\r\n
\r\n
\r\n ))}\r\n
\r\n
\r\n \r\n )}\r\n \r\n );\r\n}\r\n\r\nexport default withTranslation()(SelectMembershipType);","import React, { ChangeEvent, useRef, useState } from \"react\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { PrimaryButton } from \"./Buttons\";\r\n\r\ninterface FileUploadProps extends WithTranslation {\r\n handleFile: (file: any, membershipId: string) => void;\r\n membershipId?: string;\r\n id?: string;\r\n textOverride?: boolean;\r\n}\r\n\r\nconst FileUpload: React.FC = (props) => {\r\n const { t } = props;\r\n\r\n const [isUploaded, setIsUploaded] = useState(false);\r\n\r\n const inputRef = useRef(null);\r\n\r\n const onFileInputChange = (event: React.ChangeEvent) => {\r\n if (event.target.files && event.target.files[0]) {\r\n props.membershipId && props.handleFile(event.target.files![0], props.membershipId);\r\n }\r\n setIsUploaded(true);\r\n };\r\n\r\n const fileUpload = () => {\r\n inputRef.current.click();\r\n };\r\n\r\n return (\r\n
\r\n \r\n \r\n {isUploaded && !props.textOverride && (\r\n

File Uploaded

\r\n )}\r\n\r\n
\r\n );\r\n}\r\n\r\nexport default withTranslation()(FileUpload);","import { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\nimport React, { useEffect, useState } from \"react\";\r\nimport { WithTranslation, withTranslation } from \"react-i18next\";\r\nimport { SecondaryButton } from \"../../../../Shared/Components/Presentational/Buttons\";\r\nimport FileUpload from \"../../../../Shared/Components/Presentational/FileUpload\";\r\nimport { Desktop, Mobile } from \"../../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport \"./MembershipPageStyles.scss\";\r\n\r\ninterface AgeVerificationProps extends WithTranslation {\r\n form: IMembershipForm;\r\n uploadFile: (file: any, membershipId: string, firstName: string, lastName: string, dateOfBirth: Date) => void;\r\n showErrors: boolean;\r\n description: ContentfulContentObject;\r\n uploadSuccess: boolean;\r\n disableSaveFunc: (disable: boolean) => void;\r\n isLoading: boolean;\r\n addingAgeVerificationImageError: boolean;\r\n addingAgeVerificationImageErrorMessage: string;\r\n}\r\n\r\nconst AgeVerification: React.FC = (props) => {\r\n const { t } = props;\r\n\r\n useEffect(() => {\r\n props.disableSaveFunc(!props.form.ageVerificationSent && !props.uploadSuccess);\r\n window.scrollTo(0, 0);\r\n }, []);\r\n\r\n const calculateAge = (dateOfBirth: Date): number => {\r\n let today = new Date();\r\n let birthDate = new Date(dateOfBirth);\r\n let ageNow = today.getFullYear() - birthDate.getFullYear();\r\n let m = today.getMonth() - birthDate.getMonth();\r\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\r\n ageNow--;\r\n }\r\n return ageNow;\r\n }\r\n\r\n const handleUpload = (file: any, membershipId: string) => {\r\n props.form && props.uploadFile(file, membershipId, props.form.firstName!.value, props.form.lastName!.value, props.form.dateOfBirth!.value);\r\n }\r\n\r\n const [age, setAge] = useState(props.form.dateOfBirth ? calculateAge(props.form.dateOfBirth.value) : 0);\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n

{t(\"addMembership.ageVerification.title\")}

\r\n
\r\n \r\n

{t(\"addMembership.ageVerification.title\")}

\r\n
\r\n
\r\n
\r\n\r\n
\r\n {documentToReactComponents(props.description.content)}\r\n
\r\n {props.form && props.uploadSuccess ? (\r\n

File Uploaded

\r\n ) : (\r\n \r\n )}\r\n\r\n {props.form && props.form.ageVerificationSent && (\r\n

File already uploaded

\r\n )}\r\n\r\n {props.addingAgeVerificationImageError && (\r\n

{props.addingAgeVerificationImageErrorMessage}

\r\n )}\r\n\r\n {props.isLoading && !props.uploadSuccess && (\r\n
File Uploading ...
\r\n )}\r\n\r\n\r\n {props.showErrors &&\r\n

Cannot continue without uploading a file

\r\n }\r\n
\r\n );\r\n};\r\n\r\nexport default withTranslation()(AgeVerification);","import React, { ChangeEvent, useEffect, useState } from \"react\";\r\nimport { WithTranslation, withTranslation } from \"react-i18next\";\r\nimport { vehicleValidation, isUnder10Characters } from \"../../../../Shared/Utilities/Validation\";\r\nimport \"./MembershipPageStyles.scss\";\r\nimport \"./FormInputs/FormStyles.scss\";\r\nimport { Desktop, Mobile } from \"../../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\n\r\ninterface VehiclesPageProps extends WithTranslation {\r\n membershipForm: any;\r\n onInput: (value: any, name: any, errors: string[]) => void;\r\n vehicleName: string;\r\n showErrors?: boolean;\r\n bypassAge?: boolean;\r\n description?: ContentfulContentObject;\r\n}\r\n\r\ninterface Vehicle {\r\n registration: string;\r\n description: string;\r\n}\r\n\r\nconst VehiclesPage: React.FC = (props) => {\r\n const { t } = props;\r\n const [vehicle1, setVehicle1] = useState((props.membershipForm && props.membershipForm.vehicles.value && props.membershipForm.vehicles.value[0]) ? props.membershipForm.vehicles.value[0] : { registration: '', description: '' });\r\n const [vehicle2, setVehicle2] = useState((props.membershipForm && props.membershipForm.vehicles.value && props.membershipForm.vehicles.value[1]) ? props.membershipForm.vehicles.value[1] : { registration: '', description: '' });\r\n const [formFields, setFormFields] = useState([vehicle1, vehicle2]);\r\n const [scrollPosition, setscrollPosition] = useState('');\r\n\r\n const validators: Validator[] = [{ name: \"isUnder10Characters\", validator: isUnder10Characters }, { name: \"vehicleValidation\", validator: vehicleValidation }];\r\n\r\n const calculateAge = (dateOfBirth: Date): number => {\r\n let today = new Date();\r\n let birthDate = new Date(dateOfBirth);\r\n let ageNow = today.getFullYear() - birthDate.getFullYear();\r\n let m = today.getMonth() - birthDate.getMonth();\r\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\r\n ageNow--;\r\n }\r\n return ageNow;\r\n }\r\n\r\n const [age, setAge] = useState(props.membershipForm && props.membershipForm.dateOfBirth ? calculateAge(props.membershipForm.dateOfBirth.value) : 0);\r\n\r\n const handleFormChange = (e: ChangeEvent, index: number) => {\r\n const key = e.target.name as keyof Vehicle;\r\n switch (index) {\r\n case 0:\r\n switch (key) {\r\n case \"registration\":\r\n setVehicle1({ ...vehicle1, registration: e.target.value });\r\n break;\r\n default:\r\n setVehicle1({ ...vehicle1, description: e.target.value });\r\n }\r\n break;\r\n default:\r\n switch (key) {\r\n case \"registration\":\r\n setVehicle2({ ...vehicle2, registration: e.target.value });\r\n break;\r\n default:\r\n setVehicle2({ ...vehicle2, description: e.target.value });\r\n }\r\n break;\r\n }\r\n }\r\n\r\n useEffect(() => {\r\n setFormFields([vehicle1, vehicle2]);\r\n }, [vehicle1]);\r\n useEffect(() => {\r\n setFormFields([vehicle1, vehicle2]);\r\n }, [vehicle2]);\r\n useEffect(() => {\r\n updateChange();\r\n }, [formFields]);\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n }, []);\r\n\r\n const updateChange = () => {\r\n //Need to add section to check vehicle info against validators here\r\n const errors: string[] = [];\r\n for (let validator of validators) {\r\n for (let vehicle of formFields) {\r\n if (!validator.validator(vehicle)) {\r\n errors.push(validator.name);\r\n }\r\n }\r\n }\r\n props.onInput(formFields, props.vehicleName, errors);\r\n }\r\n\r\n const removeFields = (index: number) => {\r\n let data = [...formFields];\r\n data.splice(index, 1);\r\n setFormFields(data);\r\n }\r\n\r\n const addFields = () => {\r\n let object = { registration: '', description: '' };\r\n setFormFields([...formFields, object]);\r\n }\r\n\r\n const trimmedErrors = (errors: string[]) => {\r\n return errors.filter((val, id, array) => array.indexOf(val) == id);\r\n }\r\n\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n

{t(\"addMembership.vehicles.title\")}

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{t(\"addMembership.vehicles.title\")}

\r\n
\r\n
\r\n
\r\n\r\n {age >= 16 || props.bypassAge ? (\r\n <>\r\n \r\n {props.description && (\r\n
\r\n {documentToReactComponents(props.description.content)}\r\n
\r\n )}\r\n {/*

{t(\"addMembership.vehicles.message\")}

*/}\r\n

Vehicle 1:

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
Registration NumberDescription (optional)
\r\n handleFormChange(event, 0)}\r\n value={vehicle1.registration}\r\n className=\"add-form-input form-input\"\r\n />\r\n \r\n handleFormChange(event, 0)}\r\n value={vehicle1.description}\r\n className=\"add-form-input form-input\"\r\n />\r\n
\r\n

Vehicle 2:

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n

\r\n {(props.showErrors && (props.membershipForm.vehicles.errors && props.membershipForm.vehicles.errors.length > 0)) &&\r\n

{props.membershipForm && t(\"addMembership.errors.\" + trimmedErrors(props.membershipForm.vehicles.errors))}

}\r\n
Registration NumberDescription (optional)
\r\n handleFormChange(event, 1)}\r\n value={vehicle2.registration}\r\n className=\"add-form-input form-input\"\r\n />\r\n \r\n handleFormChange(event, 1)}\r\n value={vehicle2.description}\r\n className=\"add-form-input form-input\"\r\n />\r\n
\r\n
\r\n \r\n {props.description && (\r\n
\r\n {documentToReactComponents(props.description.content)}\r\n
\r\n )}\r\n

Vehicle 1:

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Registration Number
\r\n handleFormChange(event, 0)}\r\n value={vehicle1.registration}\r\n className=\"add-form-input form-input\"\r\n />\r\n
Description (optional)
\r\n handleFormChange(event, 0)}\r\n value={vehicle1.description}\r\n className=\"add-form-input form-input\"\r\n />\r\n
\r\n

Vehicle 2:

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

\r\n {(props.showErrors && (props.membershipForm.vehicles.errors && props.membershipForm.vehicles.errors.length > 0)) &&\r\n

{props.membershipForm && t(\"addMembership.errors.\" + trimmedErrors(props.membershipForm.vehicles.errors))}

}\r\n
Registration Number
\r\n handleFormChange(event, 1)}\r\n value={vehicle2.registration}\r\n className=\"add-form-input form-input\"\r\n />\r\n
Description (optional)
\r\n handleFormChange(event, 1)}\r\n value={vehicle2.description}\r\n className=\"add-form-input form-input\"\r\n />\r\n
\r\n
\r\n \r\n ) : (\r\n <>\r\n

This member is under 16 and is therefore not able to add vehicles

\r\n

Please continue to the next section

\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\nexport default withTranslation()(VehiclesPage);","import { GetApiCall } from './ApiCall';\r\n\r\nexport class GetPhotoPassCall extends GetApiCall {\r\n constructor(membershipId: string) {\r\n let url: string = 'photo-pass/' + membershipId;\r\n\r\n super(url);\r\n }\r\n}","import { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport { Entry } from 'contentful';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { Get } from '../../../../Api/ApiService';\r\nimport { GetPhotoPassCall } from '../../../../Api/Calls/GetPhotoPassCall';\r\nimport { SecondaryButton } from '../../../../Shared/Components/Presentational/Buttons';\r\nimport { Desktop, Mobile } from '../../../../Shared/Components/Presentational/ResponsiveViews';\r\n\r\ninterface SummaryProps extends WithTranslation {\r\n membershipForm: any;\r\n startNewMembership: (membershipForm: FormInput[]) => void;\r\n ownerMembershipsAvailability: OwnerMembershipAvailabilityDTO;\r\n contentfulMembershipTypes: Entry[];\r\n proceedDescription: ContentfulContentObject;\r\n}\r\n\r\nconst SummaryPage: React.FC = (props) => {\r\n const { t } = props;\r\n const [scrollPosition, setscrollPosition] = useState('');\r\n const [fileUrl, setFileUrl] = useState('');\r\n useEffect(() => {\r\n window.scrollTo(0, 0);\r\n getPhotoPassCall();\r\n }, []);\r\n const addMembership = () => {\r\n props.startNewMembership(props.membershipForm as FormInput[]);\r\n }\r\n\r\n let summary: any = {};\r\n\r\n for (const prop in props.membershipForm) {\r\n if (prop !== 'id' && prop !== 'membershipState' && prop !== 'transferredMemberships' && prop !== 'ageVerificationSent') {\r\n summary[prop] = props.membershipForm[prop] !== undefined ? props.membershipForm[prop].value : '';\r\n }\r\n }\r\n\r\n const getPhotoPassCall = () => Get(new GetPhotoPassCall(props.membershipForm.id))\r\n .then(result => {\r\n setFileUrl(result.data.PhotoUrl);\r\n })\r\n .catch(() => {\r\n });\r\n\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n
\r\n

{t(\"addMembership.summary.title\")}

\r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n
Name:\r\n {props.membershipForm.firstName && props.membershipForm.firstName.value} {props.membershipForm.lastName && props.membershipForm.lastName.value}\r\n
Email:\r\n {props.membershipForm.email && props.membershipForm.email.value}\r\n
Membership Type: \r\n {props.membershipForm.contentfulMembershipTypeId && props.contentfulMembershipTypes.filter(type => type.sys.id === props.membershipForm.contentfulMembershipTypeId.value)[0].fields.publicName}\r\n
Term Duration:\r\n {props.membershipForm.termFormula && props.membershipForm.termFormula.value && props.membershipForm.termFormula.value.label}\r\n
Marketing Preferences:\r\n {props.membershipForm.marketing && props.membershipForm.marketing.value == true ? 'Yes' : 'No'}\r\n
\r\n
\r\n { fileUrl !== '' &&\r\n \"Member\r\n }\r\n
\r\n
\r\n
\r\n {documentToReactComponents(props.proceedDescription.content)}\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n

{t(\"addMembership.summary.title\")}

\r\n
\r\n
\r\n\r\n
\r\n { fileUrl !== '' && \r\n \"Member\r\n }\r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n
Name:
\r\n
{props.membershipForm.firstName && props.membershipForm.firstName.value} {props.membershipForm.lastName && props.membershipForm.lastName.value}
\r\n
\r\n\r\n
\r\n
Email:
\r\n
{props.membershipForm.email && props.membershipForm.email.value}
\r\n
\r\n\r\n
\r\n
Membership Type:
\r\n
{props.membershipForm.contentfulMembershipTypeId && props.contentfulMembershipTypes.filter(type => type.sys.id === props.membershipForm.contentfulMembershipTypeId.value)[0].fields.publicName}
\r\n
\r\n\r\n
\r\n
Term Duration:
\r\n
{props.membershipForm.termFormula && props.membershipForm.termFormula.value && props.membershipForm.termFormula.value.label}
\r\n
\r\n\r\n
\r\n
Marketing Preferences:
\r\n
{props.membershipForm.marketing && props.membershipForm.marketing.value == true ? 'Yes' : 'No'}
\r\n
\r\n\r\n
\r\n
\r\n
\r\n {documentToReactComponents(props.proceedDescription.content)}\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default withTranslation()(SummaryPage);","import { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\nimport classNames from \"classnames\";\r\nimport { Entry } from \"contentful\";\r\nimport React, { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { PrimaryButton, SecondaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { Modal, ModalHeader, ModalProps } from \"../../../Shared/Components/Presentational/Modal\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\n\r\ninterface MembershipFlowContactPromptModalProps extends ModalProps {\r\n isOpen: boolean;\r\n promptType: string;\r\n setMembershipContactWarningModalOpen: (isOpen: boolean) => void;\r\n onNextStep: (form: any) => void;\r\n form: any;\r\n modalTextWOutEmail: ContentfulContentObject;\r\n modalTextWOutMobile: ContentfulContentObject;\r\n modalTextWOutBoth: ContentfulContentObject;\r\n}\r\n\r\nconst MembershipFlowContactPromptModal: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const open = props.isOpen;\r\n const setMembershipContactWarningModalOpen = props.setMembershipContactWarningModalOpen;\r\n const handleClick1 = async () => {\r\n setMembershipContactWarningModalOpen(false);\r\n }\r\n\r\n const handleClick2 = async () => {\r\n setMembershipContactWarningModalOpen(false);\r\n props.onNextStep(props.form);\r\n }\r\n\r\n const formContents = (\r\n
\r\n
\r\n {\r\n props.promptType == \"email\" &&\r\n \r\n\r\n }\r\n {\r\n props.promptType == \"email\" && documentToReactComponents(props.modalTextWOutEmail.content)\r\n }\r\n {\r\n props.promptType == \"phone\" &&\r\n \r\n }\r\n {\r\n props.promptType == \"phone\" && documentToReactComponents(props.modalTextWOutMobile.content)\r\n }\r\n {\r\n props.promptType == \"emailandphone\" &&\r\n \r\n }\r\n {\r\n props.promptType == \"emailandphone\" && documentToReactComponents(props.modalTextWOutBoth.content)\r\n }\r\n\r\n\r\n \r\n \r\n
\r\n
\r\n )\r\n\r\n return (\r\n <>\r\n \r\n \r\n
{formContents}
\r\n
\r\n \r\n
\r\n {formContents}\r\n
\r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nexport default MembershipFlowContactPromptModal;\r\n","import { Component } from \"react\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { SET_MEMBERSHIPS_CONTACT_PROMPT_NEXT_STEP, SET_MEMBERSHIPS_FLOW_CONTACT_PROMPT_OPEN } from '../../Redux/ActionTypes';\r\nimport React from \"react\";\r\nimport MembershipFlowContactPromptModal from \"../Presentational/MembershipFlowContactPromptModal\";\r\nimport { GetHTMlContentBlockCall } from \"../../../Contentful/Calls/GetHTMLContentBlockCall\";\r\n\r\ninterface MembershipFlowContactPromptProps extends WithTranslation {\r\n showContactEmptyPrompt: boolean;\r\n promptType: string;\r\n setMembershipContactWarningModalOpen: (isOpen: boolean) => void;\r\n onNextStep: (form: any) => void;\r\n form: any;\r\n}\r\n\r\ninterface MembershipFlowContactPromptState {\r\n modalTextWOutEmail: ContentfulContentObject | undefined;\r\n modalTextWOutMobile: ContentfulContentObject | undefined;\r\n modalTextWOutBoth: ContentfulContentObject | undefined;\r\n contentLoaded: boolean;\r\n}\r\n\r\nclass MembershipFlowContactPrompt extends Component {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n modalTextWOutEmail: undefined,\r\n modalTextWOutMobile: undefined,\r\n modalTextWOutBoth: undefined,\r\n contentLoaded: false\r\n }\r\n\r\n Promise.all([\r\n this.getModalText(\"My Haulfryn - Email - Member Details\", \"modalTextWOutEmail\"),\r\n this.getModalText(\"My Haulfryn - Member Details - Mobile Number\", \"modalTextWOutMobile\"),\r\n this.getModalText(\"My Haulfryn - Member Details - Email & Mobile Number\", \"modalTextWOutBoth\")\r\n ]).then(r => {\r\n r.forEach(c => this.setState({ ...this.state, [c.name]: c }));\r\n this.setState({ contentLoaded: true })\r\n });\r\n }\r\n\r\n getModalText = async (name: string, label: string): Promise => {\r\n const modalText = await GetHTMlContentBlockCall(name, label);\r\n return modalText;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n\r\n return (\r\n <>\r\n {this.state.contentLoaded && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n showContactEmptyPrompt: state.modal.membershipflowContactprompt.isOpen,\r\n promptType: state.modal.membershipflowContactprompt.type,\r\n };\r\n};\r\n\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setMembershipContactWarningModalOpen: (isOpen: boolean) => {\r\n dispatch({ type: SET_MEMBERSHIPS_FLOW_CONTACT_PROMPT_OPEN, payload: { isOpen: isOpen, type: \"\" } })\r\n },\r\n setPromptNextStep: (nextStep: boolean) => {\r\n dispatch({ type: SET_MEMBERSHIPS_CONTACT_PROMPT_NEXT_STEP, payload: nextStep })\r\n }\r\n };\r\n};\r\n\r\n\r\nexport default withTranslation()(\r\n connect(mapStateToProps, mapDispatchToProps)(MembershipFlowContactPrompt)\r\n)","import React from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { Desktop, Mobile } from '../../../../Shared/Components/Presentational/ResponsiveViews';\r\n\r\ninterface FinalisePageProps extends WithTranslation {\r\n membershipForm: any;\r\n}\r\n\r\nconst FinalisePage: React.FC = (props) => {\r\n const { t } = props;\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n \r\n

{t(\"addMembership.finalisePage.title\")}

\r\n
\r\n \r\n

{t(\"addMembership.finalisePage.title\")}

\r\n
\r\n
\r\n
\r\n\r\n
\r\n

{t(\"addMembership.finalisePage.message\")}

\r\n
\r\n\r\n \r\n )\r\n}\r\n\r\nexport default withTranslation()(FinalisePage);","import classNames from \"classnames\";\r\nimport React from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { PrimaryButton, SecondaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { Modal, ModalHeader, ModalProps } from \"../../../Shared/Components/Presentational/Modal\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\n\r\ninterface ExitPromptModalProps extends ModalProps {\r\n isOpen: boolean;\r\n setExitModalOpen: (isOpen: boolean) => void;\r\n saveAndExit: () => void;\r\n modalText: ContentfulContentObject;\r\n}\r\n\r\nconst ExitPromptModal: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const open = props.isOpen;\r\n const setExitModalOpen = props.setExitModalOpen;\r\n const handleClick1 = async () => {\r\n setExitModalOpen(false);\r\n props.saveAndExit();\r\n }\r\n\r\n const handleClick3 = () => {\r\n setExitModalOpen(false);\r\n }\r\n\r\n const formContents = (\r\n
\r\n
\r\n \r\n
\r\n {documentToReactComponents(props.modalText.content)}\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n\r\n return (\r\n <>\r\n \r\n \r\n
{formContents}
\r\n
\r\n \r\n
\r\n {formContents}\r\n
\r\n
\r\n \r\n \r\n );\r\n}\r\n\r\nexport default ExitPromptModal;","import { Component } from \"react\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { SET_EXIT_PROMPT_OPEN } from '../../../Modal/Redux/ActionTypes';\r\nimport React from \"react\";\r\nimport ExitPromptModal from \"../Presentational/ExitPromptModal\";\r\nimport { SAVE_AND_EXIT } from \"../../../Guests/Redux/ActionTypes\";\r\nimport { GetHTMlContentBlockCall } from \"../../../Contentful/Calls/GetHTMLContentBlockCall\";\r\n\r\ninterface ExitPromptProps extends WithTranslation {\r\n showExitPrompt: boolean;\r\n setExitModalOpen: (isOpen: boolean) => void;\r\n saveAndExit: () => void;\r\n}\r\n\r\ninterface ReferMembershipsPromptState {\r\n modalText: ContentfulContentObject | undefined;\r\n contentLoaded: boolean;\r\n}\r\n\r\nclass ExitPrompt extends Component {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n modalText: undefined,\r\n contentLoaded: false,\r\n }\r\n Promise.all([\r\n this.getModalText(\"My Haulfryn - Membership - Other\", \"modalText\")\r\n ]).then(r => {\r\n r.forEach(c => this.setState({ ...this.state, [c.name]: c }));\r\n this.setState({ contentLoaded: true });\r\n })\r\n }\r\n\r\n getModalText = async (name: string, label: string) => {\r\n const modalText = await GetHTMlContentBlockCall(name, label);\r\n return modalText;\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n {this.state.contentLoaded && (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n showExitPrompt: state.modal.exit.isOpen,\r\n };\r\n};\r\n\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setExitModalOpen: (isOpen: boolean) => {\r\n dispatch({ type: SET_EXIT_PROMPT_OPEN, payload: isOpen })\r\n },\r\n saveAndExit: () => {\r\n dispatch({ type: SAVE_AND_EXIT })\r\n },\r\n };\r\n};\r\n\r\n\r\nexport default withTranslation()(\r\n connect(mapStateToProps, mapDispatchToProps)(ExitPrompt)\r\n)","import React, { useState, useRef, useImperativeHandle, useEffect } from 'react';\r\nimport { faRedo, faTrash, faUpload } from '@fortawesome/free-solid-svg-icons';\r\nimport ReactCrop, {\r\n centerCrop,\r\n makeAspectCrop,\r\n Crop,\r\n PixelCrop,\r\n PercentCrop,\r\n} from 'react-image-crop';\r\nimport './SimpleImageCropper.scss';\r\nimport 'react-image-crop/dist/ReactCrop.css';\r\nimport { ClickableIcon } from './Icons';\r\nimport classNames from 'classnames';\r\nimport imageCompression from 'browser-image-compression';\r\n\r\ninterface SimpleImageCropperProps {\r\n fileUrl: string;\r\n photoSizeLimitInKb: number;\r\n fileFromCrop: (photoFile: File) => void;\r\n onImageRemoved: () => void;\r\n imageLoaded: () => void;\r\n setNewImage: () => void;\r\n onSizeError: () => void;\r\n}\r\n\r\nexport interface IFileFromCrop {\r\n getFile: () => void;\r\n}\r\n\r\nconst SimpleImageCropper = React.forwardRef((props, cropperRef) => {\r\n const [crop, setCrop] = useState();\r\n const [pixelCrop, setPixelCrop] = useState();\r\n const containerRef = useRef(null);\r\n const aspectRatio = 35 / 45;\r\n\r\n // Allows the button to trigger the hidden file input element\r\n const hiddenFileInput = useRef(null);\r\n const openFileInput = (event: any) => hiddenFileInput.current && hiddenFileInput.current.click();\r\n\r\n const imgRef = useRef(null);\r\n const [srcImg, setSrcImg] = useState('');\r\n const [rotate, setRotate] = useState(0);\r\n const [checkedForExistingImage, setCheckedForExistingImage] = useState(false);\r\n\r\n const previewCanvasRef = useRef(null);\r\n\r\n useImperativeHandle(cropperRef, () => ({\r\n getFile() {\r\n fileFromCrop();\r\n }\r\n }));\r\n\r\n useEffect(() => {\r\n if (!checkedForExistingImage && props.fileUrl !== '') {\r\n setSrcImg(props.fileUrl);\r\n setCheckedForExistingImage(true);\r\n }\r\n });\r\n\r\n const onFileSelected = (e: React.ChangeEvent) => {\r\n if (e.target.files && e.target.files.length > 0) {\r\n if (e.target.files[0].size > props.photoSizeLimitInKb * 1000) {\r\n props.onSizeError();\r\n return;\r\n }\r\n\r\n setCrop(undefined);\r\n const reader = new FileReader();\r\n reader.addEventListener('load', () => {\r\n const dataUrl: string = reader.result ? reader.result.toString() : '';\r\n setSrcImg(dataUrl);\r\n });\r\n reader.readAsDataURL(e.target.files[0]);\r\n }\r\n }\r\n\r\n const handleRemove = () => {\r\n if (hiddenFileInput && hiddenFileInput.current && hiddenFileInput.current.value) {\r\n hiddenFileInput.current.value = '';\r\n }\r\n setSrcImg('');\r\n props.onImageRemoved();\r\n }\r\n\r\n const handleRotate = () => {\r\n var newAngleInDegrees = rotate + 90;\r\n if (newAngleInDegrees == 360) {\r\n newAngleInDegrees = 0;\r\n }\r\n setRotate(newAngleInDegrees);\r\n }\r\n\r\n const onImageLoaded = (e: React.SyntheticEvent) => {\r\n const { width, height } = e.currentTarget;\r\n\r\n const partialCrop: Partial = { unit: 'px' }\r\n width > height ? partialCrop.height = height : partialCrop.width = width;\r\n\r\n const offsetX =\r\n containerRef.current &&\r\n imgRef.current &&\r\n (containerRef.current.clientWidth - imgRef.current.width) / 2;\r\n\r\n setCrop(centerAspectCrop(width, height, aspectRatio, partialCrop, offsetX || 0));\r\n\r\n props.imageLoaded();\r\n }\r\n\r\n function centerAspectCrop(\r\n mediaWidth: number,\r\n mediaHeight: number,\r\n aspect: number,\r\n partialCrop: Partial,\r\n offsetX: number\r\n ) {\r\n const initial = centerCrop(\r\n makeAspectCrop(\r\n partialCrop,\r\n aspect,\r\n mediaWidth,\r\n mediaHeight,\r\n ),\r\n mediaWidth,\r\n mediaHeight,\r\n )\r\n\r\n initial.x += offsetX;\r\n return initial;\r\n }\r\n\r\n const fileFromCrop = () => {\r\n const image: HTMLImageElement = imgRef.current as HTMLImageElement;\r\n const crop: PixelCrop = pixelCrop as PixelCrop;\r\n const canvas: HTMLCanvasElement = previewCanvasRef.current as HTMLCanvasElement;\r\n\r\n const ctx = canvas.getContext('2d') as CanvasRenderingContext2D;\r\n\r\n const scale = image.naturalWidth / image.width;\r\n canvas.width = Math.floor(crop.width * scale);\r\n canvas.height = Math.floor(crop.height * scale);\r\n\r\n ctx.imageSmoothingQuality = 'high';\r\n\r\n const clientWidth = containerRef.current && containerRef.current.clientWidth || 0;\r\n const offsetX = (clientWidth - image.width) / 2;\r\n crop.x -= offsetX;\r\n\r\n ctx.drawImage(image, (crop.x * scale), (crop.y * scale), (crop.width * scale), (crop.height * scale), 0, 0, canvas.width, canvas.height);\r\n ctx.restore();\r\n\r\n let url = canvas.toDataURL(\"image/jpeg\", 0.8);\r\n let blob = dataURItoBlob(url);\r\n\r\n const filename: string = 'image' + new Date().getTime().toString();\r\n let file = new File([blob], filename, { type: blob.type });\r\n props.fileFromCrop(file);\r\n };\r\n\r\n const dataURItoBlob = (dataURI: string) => {\r\n // convert base64/URLEncoded data component to raw binary data held in a string\r\n var byteString;\r\n if (dataURI.split(',')[0].indexOf('base64') >= 0)\r\n byteString = atob(dataURI.split(',')[1]);\r\n else\r\n byteString = unescape(dataURI.split(',')[1]);\r\n // separate out the mime component\r\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\r\n // write the bytes of the string to a typed array\r\n var ia = new Uint8Array(byteString.length);\r\n for (var i = 0; i < byteString.length; i++) {\r\n ia[i] = byteString.charCodeAt(i);\r\n }\r\n return new Blob([ia], { type: mimeString });\r\n }\r\n\r\n const hiddenFileInputElement = <>\r\n \r\n {pixelCrop &&\r\n \r\n }\r\n ;\r\n\r\n var className = \"add-pass-photo\";\r\n if (srcImg == null || srcImg == undefined || srcImg == '') {\r\n className += \" no-photo\";\r\n }\r\n\r\n return (\r\n
\r\n
{\r\n if (className === \"add-pass-photo no-photo\") {\r\n openFileInput(containerRef);\r\n }\r\n }}>\r\n {hiddenFileInputElement}\r\n {\r\n setCrop(percentCrop);\r\n props.setNewImage();\r\n }}\r\n onComplete={(c) => setPixelCrop(c)}\r\n minHeight={90}\r\n minWidth={70}\r\n aspect={aspectRatio}\r\n >\r\n \r\n \r\n\r\n null}\r\n />\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n
\r\n );\r\n});\r\n\r\nexport default SimpleImageCropper","import { GetApiCall } from './ApiCall';\r\n\r\nexport class GetPhotoByMemberIdCall extends GetApiCall {\r\n constructor(memberId: string) {\r\n let url: string = 'photo-pass/member/' + memberId;\r\n\r\n super(url);\r\n }\r\n}","import { PostApiCall } from \"../ApiCall\";\r\n\r\nexport class UpdateMemberPhotoCall extends PostApiCall {\r\n constructor(memberId: string, file: File) {\r\n let url: string = \"photo-pass/member-image/\" + memberId;\r\n\r\n var data = new FormData();\r\n data.append('file', file);\r\n\r\n super(url);\r\n\r\n this.body = data;\r\n }\r\n}","import { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\nimport React, { useEffect, useImperativeHandle, useRef, useState } from \"react\";\r\nimport { Get, Post } from \"../../../../Api/ApiService\";\r\nimport { GetPassPhotoSizeLimit } from \"../../../../Api/Calls/GetPassPhotoSizeLimit\";\r\nimport SimpleImageCropper, { IFileFromCrop } from \"../../../../Shared/Components/Presentational/SimpleImageCropper\";\r\nimport \"../AddMembershipPage.scss\";\r\nimport AddPassPhotoHeader from \"../AddPassPhotoHeader\";\r\nimport { ICallSave } from \"./ICallSave\";\r\nimport { GetPhotoByMemberIdCall } from \"../../../../Api/Calls/GetPhotoByMemberIdCall\";\r\nimport { UpdateMemberPhotoCall } from \"../../../../Api/Calls/Member/UpdateMemberPhotoCall\";\r\n\r\ninterface PhotoUploadPageProps {\r\n memberId: string;\r\n instructions: ContentfulContentObject;\r\n fileRestrictions: ContentfulContentObject;\r\n exception: ContentfulContentObject;\r\n enableSaveAndContinue: () => void;\r\n disableSaveAndContinue: () => void;\r\n triggerNextPage: () => void;\r\n setIsLoading: (isLoading: boolean) => void;\r\n isLoading: boolean;\r\n onSaveError: () => void;\r\n}\r\n\r\nconst PhotoUpload = React.forwardRef((props, ref) => {\r\n const [photoSizeLimitInKb, setphotoSizeLimitInKb] = useState(10000);\r\n const [fileUrl, setFileUrl] = useState('');\r\n const [errorMessage, setErrorMessage] = useState(false);\r\n const [isNewPhoto, setIsNewPhoto] = useState(true);\r\n const cropperRef = useRef(null);\r\n const [isSubmittingPhoto, setIsSubmittingPhoto] = useState(false);\r\n\r\n useEffect(() => {\r\n if (fileUrl === '') {\r\n getPhotoPassCall();\r\n getPhotoPassSizeLimit();\r\n }\r\n window.scrollTo(0, 0);\r\n }, []);\r\n\r\n // If it is a new photo, the prop is called to enable save in the\r\n // AddMembership component\r\n // When save is called, we use the cropper ref to get the image file\r\n // SimpleCropper calls fileFromCrop to return the file, which\r\n // in turn calls submitPhotoPass\r\n // submitPhotoPass sends the image, and if a 200 response is recieved\r\n // then nextPage is trigger, else saveAndContinue is disabled\r\n\r\n useImperativeHandle(ref, () => ({\r\n save() {\r\n if (!isSubmittingPhoto && isNewPhoto && cropperRef.current) {\r\n setIsSubmittingPhoto(true);\r\n cropperRef.current.getFile();\r\n }\r\n }\r\n }));\r\n\r\n const fileFromCrop = (photoFile: File) => {\r\n props.setIsLoading(true);\r\n submitPhotoPass(photoFile);\r\n }\r\n\r\n const onSizeError = () => {\r\n\r\n }\r\n\r\n const onImageRemoved = () => {\r\n // TODO - delete image?\r\n props.disableSaveAndContinue();\r\n setIsNewPhoto(true);\r\n }\r\n\r\n const onImageLoad = () => {\r\n props.enableSaveAndContinue();\r\n setIsNewPhoto(true);\r\n }\r\n\r\n const getPhotoPassCall = () => Get(new GetPhotoByMemberIdCall(props.memberId))\r\n .then(result => {\r\n setFileUrl(result.data.PhotoUrl);\r\n setIsNewPhoto(false);\r\n setIsSubmittingPhoto(false);\r\n props.enableSaveAndContinue();\r\n })\r\n .catch(() => {\r\n setFileUrl('');\r\n setIsNewPhoto(true);\r\n setIsSubmittingPhoto(false);\r\n });\r\n\r\n const getPhotoPassSizeLimit = () => Get(new GetPassPhotoSizeLimit())\r\n .then((response) => {\r\n setphotoSizeLimitInKb(response.data.PhotoPassSizeLimit);\r\n })\r\n .catch((error) => console.log(error));\r\n\r\n const submitPhotoPass = async (photoFile: File) => {\r\n await Post(new UpdateMemberPhotoCall(props.memberId, photoFile))\r\n .then((response) => {\r\n props.setIsLoading(false);\r\n props.triggerNextPage();\r\n })\r\n .catch((error) => {\r\n props.onSaveError();\r\n props.setIsLoading(false);\r\n props.disableSaveAndContinue();\r\n setIsSubmittingPhoto(false);\r\n setErrorMessage(true);\r\n });\r\n }\r\n\r\n return (\r\n
\r\n
\r\n
\r\n \r\n
\r\n\r\n
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n {errorMessage && (\r\n
\r\n {documentToReactComponents(props.exception.content)}\r\n
\r\n )}\r\n\r\n {\r\n props.enableSaveAndContinue();\r\n }}\r\n onSizeError={onSizeError}\r\n />\r\n\r\n
\r\n {documentToReactComponents(props.fileRestrictions.content)}\r\n
\r\n\r\n {props.isLoading && (\r\n
Photo Uploading ...
\r\n )}\r\n
\r\n
\r\n
\r\n );\r\n});\r\n\r\nexport default PhotoUpload;","import React, { Component, RefObject } from \"react\";\r\nimport { connect } from \"react-redux\";\r\nimport { addMembership, updateMembershipFormBasket, updateMembershipBasketField, updateMembershipForm, addAgeVerificationFile, createMembershipBasket, getContentfulMembershipTypes } from \"../../Redux/ActionCreators\";\r\nimport { CHANGE_MEMBERSHIP_FORM_PAGE } from \"../../Redux/ActionTypes\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { compose } from \"redux\";\r\nimport * as ActionTypes from '../../Redux/ActionTypes';\r\nimport { Widget } from \"../../../Shared/Components/Presentational/Widget\";\r\nimport PersonalDetails from \"../Presentational/AddMembershipSubPages/PersonalDetails\";\r\nimport Breadcrumb from \"../../../Shared/Components/Presentational/Breadcrumb\";\r\nimport { PrimaryButton, SecondaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { Redirect } from \"react-router-dom\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport \"./AddMembershipStyles.scss\";\r\nimport SelectMembershipType from \"../Presentational/AddMembershipSubPages/SelectMembershipType\";\r\nimport AgeVerification from \"../Presentational/AddMembershipSubPages/AgeVerification\";\r\nimport Vehicles from \"../Presentational/AddMembershipSubPages/Vehicles\";\r\nimport SummaryPage from \"../Presentational/AddMembershipSubPages/Summary\";\r\nimport { getOwnerMembershipAvailability } from \"../../../User/Redux/ActionCreators\";\r\nimport { faArrowAltCircleLeft } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { ClickableIcon } from \"../../../Shared/Components/Presentational/Icons\";\r\nimport { SET_EXIT_PROMPT_OPEN, SET_MEMBERSHIPS_CONTACT_PROMPT_NEXT_STEP, SET_MEMBERSHIPS_FLOW_CONTACT_PROMPT_OPEN } from \"../../../Modal/Redux/ActionTypes\";\r\nimport MembershipFlowContactPrompt from \"../../../Modal/Components/Container/MembershipFlowContactPrompt\";\r\nimport { GetMembershipPaymentSummaryCall } from \"../../../Api/Calls/GetMembershipPaymentSummaryCall\";\r\nimport { Get } from \"../../../Api/ApiService\";\r\nimport FinalisePage from \"../Presentational/AddMembershipSubPages/FinalisePage\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { Entry } from \"contentful\";\r\nimport { GetEntryCall } from \"../../../Contentful/Calls/GetEntryCall\";\r\nimport ExitPrompt from \"../../../Modal/Components/Container/ExitPrompt\";\r\nimport { GetHTMlContentBlockCall } from \"../../../Contentful/Calls/GetHTMLContentBlockCall\";\r\nimport { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\nimport Spinner from \"../../../Shared/Components/Presentational/Spinner\";\r\nimport UserRoles from \"../../../Constants/UserRoles\";\r\nimport { ICallSave } from \"../Presentational/AddMembershipSubPages/ICallSave\";\r\nimport PhotoUpload from \"../Presentational/AddMembershipSubPages/PhotoUpload\";\r\n\r\ninterface AddMembershipProps extends WithTranslation {\r\n isHeaderOpen: boolean;\r\n isExitPromptOpen: boolean;\r\n isValidated: boolean;\r\n promptNextStep: boolean;\r\n membershipFormPage: number;\r\n newMembership: NewMembershipDTO;\r\n membershipForm: FormInput[];\r\n membershipBasket: IMembershipForm[];\r\n addMembershipRequest: (membership: NewMembershipDTO) => Promise;\r\n setPromptNextStep: (nextStep: boolean) => void;\r\n saveAndExit: () => void;\r\n updateMembershipFormPage: (pageNum: number) => void;\r\n setExitModalOpen: (isOpen: boolean) => void;\r\n setMembershipContactWarningModalOpen: (isOpen: boolean, type: string) => void;\r\n setValidateAndUploadPhotoFlag: (validate: boolean) => void;\r\n startNewMembership: () => void;\r\n updateMembershipForm: (fieldName: any, value: any, errors: string[]) => void;\r\n updateMembershipFormBasket: (membershipForm: IMembershipForm | undefined, membershipBasket: IMembershipForm[] | undefined) => void;\r\n getOwnerMembershipAvailability: () => void;\r\n ownerMembershipsAvailability: OwnerMembershipAvailabilityDTO;\r\n uploadFile: (file: any, membershipId: string, firstName: string, lastName: string, dateOfBirth: Date) => void;\r\n basketId: string;\r\n isMembershipContactWarningPromptOpen: boolean;\r\n paymentDetails: PaymentBreakdownDTO;\r\n contentfulMembershipTypes: Entry[];\r\n isAddingAgeVerificationImage: boolean;\r\n addingAgeVerificationImageSuccess: boolean;\r\n addingAgeVerificationImageError: boolean;\r\n addingAgeVerificationImageErrorMessage: string;\r\n setContentfulMembershipTypes: (withTerms?: boolean) => void;\r\n addingMembershipErrorMessage: string | undefined;\r\n hasOwnMembership: boolean;\r\n userFirstName: string;\r\n userLastName: string;\r\n userEmail: string;\r\n userPhoneNumber: string;\r\n userRoles: UserRoleDTO[];\r\n membershipContainers: MembershipContainer[];\r\n termDurations: DropdownListOption[][] | undefined;\r\n}\r\n\r\ninterface AddMembershipState {\r\n showErrors: boolean;\r\n flowFinished: boolean;\r\n isLoading: boolean;\r\n descriptionText: ContentfulContentObject | undefined;\r\n memberDetailsDescriptionText: ContentfulContentObject | undefined,\r\n ownerResponsibilities: ContentfulContentObject | undefined;\r\n photoUploadInstructions: ContentfulContentObject | undefined;\r\n photoUploadFileRestrictions: ContentfulContentObject | undefined;\r\n photoUploadException: ContentfulContentObject | undefined;\r\n ageVerificationDescription: ContentfulContentObject | undefined;\r\n marketingPreferencesText: ContentfulContentObject | undefined;\r\n vehicleDescription: ContentfulContentObject | undefined;\r\n proceedDescription: ContentfulContentObject | undefined;\r\n contentLoaded: boolean;\r\n disableSaveButton: boolean;\r\n}\r\n\r\ntype Section = {\r\n key: number;\r\n title: string;\r\n name: string;\r\n}\r\n\r\nclass AddMembership extends Component {\r\n private ageVerificationPage: number;\r\n private vehiclePage: number;\r\n private summaryPage: number;\r\n private finalisePage: number;\r\n private photoUploadRef: RefObject;\r\n private membershipExist: boolean;\r\n\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.photoUploadRef = React.createRef();\r\n\r\n this.state = {\r\n showErrors: false,\r\n flowFinished: false,\r\n isLoading: false,\r\n descriptionText: undefined,\r\n memberDetailsDescriptionText: undefined,\r\n ownerResponsibilities: undefined,\r\n photoUploadInstructions: undefined,\r\n photoUploadFileRestrictions: undefined,\r\n photoUploadException: undefined,\r\n ageVerificationDescription: undefined,\r\n marketingPreferencesText: undefined,\r\n vehicleDescription: undefined,\r\n proceedDescription: undefined,\r\n contentLoaded: false,\r\n disableSaveButton: false,\r\n }\r\n\r\n this.ageVerificationPage = -1;\r\n this.vehiclePage = -1;\r\n this.summaryPage = -1;\r\n this.finalisePage = -1;\r\n this.membershipExist = false;\r\n this.changeSectionsOnBasisOfBirthDate();\r\n\r\n Promise.all([\r\n this.getContentBlock(\"Add Member Step 1: Member Details\", \"memberDetailsDescriptionText\"),\r\n this.getContentBlock(\"My Haulfryn - Add New Membership\", \"descriptionText\"),\r\n this.getContentBlock(\"My Haulfryn - Membership Type - Owners Responsibiliies\", \"ownerResponsibilities\"),\r\n this.getContentBlock(\"My Haulfryn - Photo Upload - Set- by- Step Guide\", \"photoUploadInstructions\"),\r\n this.getContentBlock(\"My Haulfryn - Photo Upload - File Restrictions\", \"photoUploadFileRestrictions\"),\r\n this.getContentBlock(\"My Haulfryn - Photo Upload - Exception\", \"photoUploadException\"),\r\n this.getContentBlock(\"My Haulfryn - Age Verification - Description\", \"ageVerificationDescription\"),\r\n this.getContentBlock(\"My Haulfryn - Memberships - Preferences\", \"marketingPreferencesText\"),\r\n this.getContentBlock(\"My Haulfryn - Memberships - Vehicles\", \"vehicleDescription\"),\r\n this.getContentBlock(\"My Haulfryn - Membership - Review\", \"proceedDescription\"),\r\n ]).then(r => {\r\n r.forEach(c => this.setState({ ...this.state, [c.name]: c }));\r\n this.setState({ contentLoaded: true });\r\n })\r\n\r\n if (this.props.addingAgeVerificationImageSuccess) {\r\n this.setState({ disableSaveButton: false });\r\n }\r\n\r\n if (!UserRoles.IsOwner(this.props.userRoles) && this.props.hasOwnMembership === false) {\r\n const form = this.props.membershipForm as IMembershipForm;\r\n\r\n let membershipExist: boolean = false;\r\n if (this.props.membershipContainers) {\r\n this.props.membershipContainers.forEach((membership: MembershipContainer) => {\r\n if (membership.membership.email === this.props.userEmail) {\r\n this.membershipExist = true;\r\n }\r\n })\r\n }\r\n\r\n if (!this.membershipExist) {\r\n if (this.props.userEmail !== null && (!form.email || form.email && !form.email.value)) {\r\n this.props.updateMembershipForm(this.props.userEmail, \"email\", []);\r\n }\r\n if (this.props.userFirstName !== null && (!form.firstName || form.firstName && !form.firstName.value)) {\r\n this.props.updateMembershipForm(this.props.userFirstName, \"firstName\", []);\r\n }\r\n if (this.props.userLastName !== null && (!form.lastName || form.lastName && !form.lastName.value)) {\r\n this.props.updateMembershipForm(this.props.userLastName, \"lastName\", []);\r\n }\r\n if (this.props.userPhoneNumber !== null && (!form.phonenumber || form.phonenumber && !form.phonenumber.value)) {\r\n this.props.updateMembershipForm(this.props.userPhoneNumber, \"phonenumber\", []);\r\n }\r\n }\r\n }\r\n }\r\n\r\n async moveToNextStep(membershipForm: any) {\r\n const form = await this.createMembershipDTO(membershipForm);\r\n let apiSucceeded = await this.props.addMembershipRequest(form);\r\n\r\n if (!apiSucceeded) {\r\n if (this.props.addingMembershipErrorMessage && this.props.addingMembershipErrorMessage === \"The email address provided is already in use, please enter another\") {\r\n this.updateValue(form.email!, \"email\", [\"duplicateEmail\"]);\r\n } else if (this.props.addingMembershipErrorMessage && this.props.addingMembershipErrorMessage === \"The mobile number provided is already in use, please enter another\") {\r\n this.updateValue(form.phonenumber!, \"phonenumber\", [\"duplicateMobile\"]);\r\n }\r\n this.setState({ showErrors: true, isLoading: false });\r\n return;\r\n }\r\n\r\n if (this.props.membershipFormPage + 1 < this.sections.length) {\r\n this.props.updateMembershipFormPage(this.props.membershipFormPage + 1);\r\n }\r\n }\r\n\r\n calculateAge = (dateOfBirth: Date): number => {\r\n let today = new Date();\r\n let birthDate = new Date(dateOfBirth);\r\n let ageNow = today.getFullYear() - birthDate.getFullYear();\r\n let m = today.getMonth() - birthDate.getMonth();\r\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\r\n ageNow--;\r\n }\r\n return ageNow;\r\n }\r\n\r\n async changeSectionsOnBasisOfBirthDate() {\r\n let localSection: Section[] = [];\r\n let ageVerificationOperation: string = \"\"; // add, remove, index change.\r\n let vehiclesOperation: string = \"\"; // add, remove, index change.\r\n\r\n if ((this.props.membershipForm as IMembershipForm).dateOfBirth!.value !== undefined) {\r\n let memberAgeInYears: number = this.calculateAge(new Date((this.props.membershipForm as IMembershipForm).dateOfBirth!.value));\r\n if (memberAgeInYears >= 18) {\r\n // See index no 3 for ageVerfication, index no 4 for preferences and index no 5 for vehicles\r\n // if there is no object for these index add it in sections.\r\n ageVerificationOperation = \"remove\";\r\n vehiclesOperation = \"add\";\r\n } else {\r\n\r\n if (memberAgeInYears === 17) {\r\n // age is 17\r\n // check for the index \r\n vehiclesOperation = \"add\";\r\n // show them vehicles index no 5\r\n } else {\r\n // age is < 17\r\n // do not show them vehicles\r\n vehiclesOperation = \"remove\";\r\n }\r\n\r\n //Plan - Check chosen membership age bracket price, if cost > 0 add, else remove\r\n if ((this.props.membershipForm as IMembershipForm).contentfulAgeBracketPriceId) {\r\n let price: Entry = await GetEntryCall((this.props.membershipForm as IMembershipForm).contentfulAgeBracketPriceId!);\r\n if (price.fields.price > 0) {\r\n ageVerificationOperation = \"remove\"; //Should be add here not remove normally but page is being hidden temporarily until a better solution for age verification is found\r\n } else {\r\n ageVerificationOperation = \"remove\";\r\n }\r\n }\r\n\r\n }\r\n\r\n if ((this.props.membershipForm as IMembershipForm).contentfulMembershipTypeId) {\r\n let membershipType = this.props.contentfulMembershipTypes.find(m => m.sys.id === (this.props.membershipForm as IMembershipForm).contentfulMembershipTypeId!.value);\r\n if (membershipType && membershipType.fields.debitsQuota) {\r\n ageVerificationOperation = \"remove\";\r\n }\r\n }\r\n\r\n // iterate over sections again and make a new section array again with proper data and reassigned it to sections.\r\n localSection[0] = this.sections[0];\r\n localSection[1] = this.sections[1];\r\n localSection[2] = this.sections[2];\r\n if (ageVerificationOperation === \"add\") {\r\n this.ageVerificationPage = localSection.length;\r\n localSection[localSection.length] = {\r\n key: localSection.length,\r\n title: \"addMembership.ageVerification.title\",\r\n name: 'ageVerification'\r\n }\r\n\r\n } else {\r\n this.ageVerificationPage = -1;\r\n }\r\n\r\n if (vehiclesOperation === \"add\") {\r\n this.vehiclePage = localSection.length;\r\n localSection[localSection.length] = {\r\n key: localSection.length,\r\n title: \"addMembership.vehicles.title\",\r\n name: 'vehicles'\r\n }\r\n } else {\r\n this.vehiclePage = -1;\r\n }\r\n\r\n this.summaryPage = localSection.length;\r\n localSection[localSection.length] = {\r\n key: localSection.length,\r\n title: \"addMembership.summary.title\",\r\n name: 'summary'\r\n }\r\n this.sections = localSection;\r\n }\r\n }\r\n\r\n getContentBlock = async (name: string, label: string) => {\r\n const text = await GetHTMlContentBlockCall(name, label);\r\n return text;\r\n }\r\n\r\n componentDidMount() {\r\n this.props.setContentfulMembershipTypes(true);\r\n this.props.getOwnerMembershipAvailability();\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly, prevState: Readonly, snapshot?: any): void {\r\n if ((prevProps && prevProps.basketId) !== (this.props.basketId && this.props.basketId)) {\r\n this.props.basketId && this.getPaymentBreakdownsDetails(this.props.basketId);\r\n }\r\n\r\n // Will disable the Save and Continue button \r\n // if the next page is photo upload\r\n // and enable save and continue if other page\r\n if (prevProps.membershipFormPage !== this.props.membershipFormPage) {\r\n if (this.sections[this.props.membershipFormPage].name == 'photoUpload') {\r\n this.setState({ disableSaveButton: true });\r\n } else {\r\n this.setState({ disableSaveButton: false });\r\n }\r\n }\r\n\r\n if (!prevProps.addingAgeVerificationImageSuccess && this.props.addingAgeVerificationImageSuccess) {\r\n this.setState({ disableSaveButton: false });\r\n this.setState({ isLoading: false });\r\n }\r\n\r\n if (!prevProps.addingAgeVerificationImageError && this.props.addingAgeVerificationImageError) {\r\n this.setState({ disableSaveButton: false, isLoading: false });\r\n }\r\n }\r\n\r\n updateValue(fieldName: any, value: any, errors: string[]) {\r\n this.props.updateMembershipForm(fieldName, value, errors);\r\n }\r\n\r\n getPaymentBreakdownsDetails(membershipBasketId: string) {\r\n Get(new GetMembershipPaymentSummaryCall(membershipBasketId))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.SET_PAYMENT_SUMMARY_DTO, payload: response.data });\r\n return response.data;\r\n })\r\n .catch((error) => console.log(error));\r\n }\r\n\r\n onBack() {\r\n this.setState({ showErrors: false });\r\n if (this.props.membershipFormPage - 1 >= 0) {\r\n switch (this.props.membershipFormPage) {\r\n case 1:\r\n if (!(this.props.membershipForm as IMembershipForm).contentfulMembershipTypeId!.value) {\r\n this.updateValue('', \"contentfulMembershipTypeId\", []);\r\n }\r\n break;\r\n case 4:\r\n if (!(this.props.membershipForm as IMembershipForm).myHaulfrynAccess!.value) {\r\n this.updateValue('', \"myHaulfrynAccess\", []);\r\n }\r\n if (!(this.props.membershipForm as IMembershipForm).marketing!.value) {\r\n this.updateValue('', \"marketing\", []);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n this.props.updateMembershipFormPage(this.props.membershipFormPage - 1);\r\n }\r\n }\r\n\r\n onTypeNextStep() {\r\n if (this.props.membershipFormPage + 1 < this.sections.length) {\r\n this.props.updateMembershipFormPage(this.props.membershipFormPage + 1);\r\n }\r\n }\r\n\r\n sleep(ms: number) {\r\n return new Promise(resolve => setTimeout(resolve, ms));\r\n }\r\n\r\n onSaveAndContinue = async () => {\r\n if (this.sections[this.props.membershipFormPage].name == 'photoUpload') {\r\n if (this.photoUploadRef.current !== null) {\r\n this.photoUploadRef.current.save();\r\n }\r\n return;\r\n }\r\n\r\n this.setState({ isLoading: true });\r\n this.changeSectionsOnBasisOfBirthDate();\r\n let invalid = false;\r\n let email: string = \"\";\r\n let phonenumber: string = \"\";\r\n let scrollPosition: number = 0;\r\n\r\n if (this.props.membershipFormPage === this.ageVerificationPage) {\r\n if (!this.props.addingAgeVerificationImageSuccess && !(this.props.membershipForm as IMembershipForm).ageVerificationSent) {\r\n invalid = true;\r\n }\r\n }\r\n\r\n for (let formObject in this.props.membershipForm) {\r\n if (formObject !== \"hasValueErrorForm\" &&\r\n formObject !== \"id\" &&\r\n formObject !== \"membershipState\" && formObject !== \"contentfulMembershipTypeId\" && formObject !== \"contentfulAgeBracketPriceId\" && formObject != \"ageVerificationSent\" &&\r\n (this.props.membershipForm[formObject] && this.props.membershipForm[formObject].errors.length > 0)) {\r\n invalid = true;\r\n\r\n if (formObject === \"email\" || formObject === \"phonenumber\") {\r\n scrollPosition = 500;\r\n }\r\n\r\n break;\r\n }\r\n if (formObject === \"email\") {\r\n if (this.props.membershipForm[formObject].value != undefined) {\r\n email = this.props.membershipForm[formObject].value;\r\n }\r\n }\r\n if (formObject === \"phonenumber\") {\r\n if (this.props.membershipForm[formObject].value != undefined) {\r\n phonenumber = this.props.membershipForm[formObject].value;\r\n }\r\n }\r\n }\r\n\r\n if (invalid) {\r\n if (this.props.membershipFormPage === 0) {\r\n const membershipForm = await this.createMembershipDTO(this.props.membershipForm);\r\n const apiSucceeded = await this.props.addMembershipRequest(membershipForm);\r\n this.setState({ isLoading: false });\r\n\r\n if (this.props.membershipFormPage + 1 < this.sections.length) {\r\n this.props.updateMembershipFormPage(this.props.membershipFormPage + 1);\r\n }\r\n this.setState({ isLoading: false });\r\n } else {\r\n this.setState({ showErrors: true, isLoading: false });\r\n window.scrollTo(500, scrollPosition);\r\n return;\r\n }\r\n } else {\r\n this.setState({ showErrors: false });\r\n }\r\n\r\n if (this.props.membershipFormPage === 1) {\r\n if (email === \"\") {\r\n this.props.setMembershipContactWarningModalOpen(true, \"email\");\r\n this.setState({ isLoading: false });\r\n } else {\r\n const membershipForm = await this.createMembershipDTO(this.props.membershipForm);\r\n const apiSucceeded = await this.props.addMembershipRequest(membershipForm);\r\n if (!apiSucceeded) {\r\n if (this.props.addingMembershipErrorMessage && this.props.addingMembershipErrorMessage === \"This email address is already in use, please use another\") {\r\n this.updateValue(membershipForm.email!, \"email\", [\"duplicateEmail\"]);\r\n scrollPosition = 500;\r\n } else if (this.props.addingMembershipErrorMessage && this.props.addingMembershipErrorMessage === \"This mobile number is already in use, please use another\") {\r\n this.updateValue(membershipForm.phonenumber!, \"phonenumber\", [\"duplicateMobile\"]);\r\n scrollPosition = 500;\r\n }\r\n this.setState({ showErrors: true, isLoading: false });\r\n window.scrollTo(500, scrollPosition);\r\n return;\r\n }\r\n this.setState({ isLoading: false });\r\n\r\n if (this.props.membershipFormPage + 1 < this.sections.length) {\r\n this.props.updateMembershipFormPage(this.props.membershipFormPage + 1);\r\n }\r\n }\r\n } else {\r\n const membershipForm = await this.createMembershipDTO(this.props.membershipForm);\r\n const apiSucceeded = await this.props.addMembershipRequest(membershipForm);\r\n this.setState({ isLoading: false });\r\n\r\n if (this.props.membershipFormPage === this.summaryPage) {\r\n this.setState({ flowFinished: true });\r\n }\r\n\r\n if (this.props.membershipFormPage + 1 < this.sections.length) {\r\n this.props.updateMembershipFormPage(this.props.membershipFormPage + 1);\r\n }\r\n }\r\n\r\n this.changeSectionsOnBasisOfBirthDate();\r\n }\r\n\r\n async createMembershipDTO(form: FormInput[]): Promise {\r\n let membershipState = this.props.newMembership.membershipState;\r\n if (this.props.membershipFormPage === this.finalisePage || this.props.membershipFormPage === this.summaryPage) {\r\n if (membershipState!.includes(\"TakeOver\")) {\r\n membershipState = \"TakeOverPendingAgreement\";\r\n } else {\r\n membershipState = \"PendingAgreement\";\r\n }\r\n }\r\n let newMembership: NewMembershipDTO =\r\n {\r\n id: this.props.newMembership.id,\r\n membershipState: membershipState,\r\n ageVerificationSent: this.props.newMembership.ageVerificationSent,\r\n parkId: this.props.newMembership.parkId,\r\n memberId: this.props.newMembership.memberId,\r\n };\r\n for (let formObject in form) {\r\n if (formObject !== \"id\" && formObject !== \"membershipState\" && formObject !== \"ageVerificationSent\") {\r\n if (form[formObject]) {\r\n if (formObject === \"termFormula\") {\r\n let priceId = await this.getAgeBracketPriceId(form);\r\n if (priceId && priceId !== \"\") {\r\n newMembership = { ...newMembership, [\"contentfulAgeBracketPriceId\"]: priceId };\r\n }\r\n } else {\r\n newMembership = { ...newMembership, [formObject]: form[formObject].value };\r\n }\r\n }\r\n }\r\n }\r\n if (newMembership && newMembership.vehicles) {\r\n for (let i = 0; i < newMembership.vehicles!.length; i++) {\r\n if (newMembership.vehicles![i].registration === \"\" && newMembership.vehicles![i].description === \"\") {\r\n if (newMembership.vehicles![i].id) {\r\n newMembership.vehicles![i].registration = undefined;\r\n newMembership.vehicles![i].description = undefined;\r\n } else {\r\n newMembership.vehicles!.splice(i, 1);\r\n i--;\r\n }\r\n }\r\n\r\n }\r\n }\r\n return newMembership;\r\n }\r\n\r\n async getAgeBracketPriceId(form: any): Promise {\r\n let contentfulAgeBracketPriceId: string = \"\";\r\n const type = this.props.contentfulMembershipTypes.filter(type => type.sys.id === form.contentfulMembershipTypeId.value)[0];\r\n let ageGroup: Entry | undefined = undefined;\r\n for (ageGroup of type.fields.ageGroups) {\r\n let age = this.calculateAge(form.dateOfBirth.value);\r\n if (ageGroup.fields.minimumAge <= age && age <= ageGroup.fields.maximumAge) {\r\n break;\r\n }\r\n }\r\n if (ageGroup) {\r\n ageGroup = await GetEntryCall(ageGroup.sys.id);\r\n if (ageGroup.fields.prices) {\r\n if (form.termFormula.value) {\r\n contentfulAgeBracketPriceId = ageGroup.fields.prices.filter(price => price.fields.termFormula === form.termFormula.value.value)[0].sys.id;\r\n }\r\n }\r\n }\r\n return contentfulAgeBracketPriceId;\r\n }\r\n\r\n onSaveAndExit() {\r\n this.props.setExitModalOpen(true);\r\n }\r\n\r\n onAddNewMember = async () => {\r\n const membershipForm = await this.createMembershipDTO(this.props.membershipForm);\r\n const apiSucceeded = await this.props.addMembershipRequest(membershipForm);\r\n this.setState({ isLoading: false });\r\n this.props.saveAndExit();\r\n this.props.startNewMembership();\r\n }\r\n\r\n enableSaveAndContinue() {\r\n this.setState({ disableSaveButton: false });\r\n }\r\n\r\n disableSaveAndContinue() {\r\n this.setState({ disableSaveButton: true });\r\n }\r\n\r\n triggerNextPage() {\r\n this.onTypeNextStep();\r\n }\r\n\r\n setIsLoading(isLoading: boolean) {\r\n this.setState({ isLoading: isLoading });\r\n }\r\n\r\n sections: Section[] =\r\n [\r\n {\r\n key: 0,\r\n title: \"addMembership.membership.title\",\r\n name: 'membershipType'\r\n },\r\n {\r\n key: 1,\r\n title: \"addMembership.personalDetails.title\",\r\n name: 'personalDetails'\r\n },\r\n {\r\n key: 2,\r\n title: \"addMembership.photoUpload.title\",\r\n name: 'photoUpload'\r\n },\r\n {\r\n key: 3,\r\n title: \"addMembership.vehicles.title\",\r\n name: 'vehicles'\r\n },\r\n {\r\n key: 4,\r\n title: \"addMembership.summary.title\",\r\n name: 'summary'\r\n }\r\n ]\r\n\r\n\r\n\r\n disableSaveButtonFunc(disable: boolean) {\r\n this.setState({ disableSaveButton: disable });\r\n }\r\n\r\n uploadAgeVerificationFile(file: any, membershipId: string, firstName: string, lastName: string, dateOfBirth: Date) {\r\n this.setState({ isLoading: true });\r\n this.props.uploadFile(file, membershipId, firstName, lastName, dateOfBirth);\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n\r\n if (this.state.flowFinished) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n return (\r\n <>\r\n {(this.state.contentLoaded && this.props.termDurations && this.props.termDurations.length > 0) ? (\r\n
\r\n \r\n {!this.props.isHeaderOpen && (\r\n <>\r\n

{t(\"addMembership.title\")}

\r\n
\r\n {documentToReactComponents(this.state.descriptionText!.content)}\r\n
\r\n \r\n )}\r\n
\r\n\r\n \r\n {(this.props.membershipFormPage > 0) && (\r\n \r\n )}\r\n\r\n
\r\n {this.sections.map((s) =>\r\n \r\n )}\r\n
\r\n\r\n
\r\n {this.props.membershipFormPage === 0 &&\r\n \r\n }\r\n\r\n {this.props.membershipFormPage === 1 &&\r\n \r\n }\r\n\r\n {this.props.membershipFormPage === 2 &&\r\n {}}\r\n />\r\n }\r\n\r\n {this.props.membershipFormPage === this.ageVerificationPage &&\r\n \r\n }\r\n\r\n {this.props.membershipFormPage === this.vehiclePage &&\r\n \r\n }\r\n\r\n {this.props.membershipFormPage === this.summaryPage &&\r\n \r\n }\r\n\r\n {this.props.membershipFormPage === this.finalisePage &&\r\n \r\n }\r\n\r\n
\r\n\r\n
\r\n \r\n {this.props.membershipFormPage !== this.summaryPage && (\r\n \r\n )}\r\n\r\n {this.props.membershipFormPage != 0 &&\r\n\r\n \r\n }\r\n \r\n \r\n {this.props.membershipFormPage != 0 &&\r\n \r\n }\r\n\r\n {this.props.membershipFormPage !== this.summaryPage && (\r\n \r\n )}\r\n \r\n
\r\n \r\n {this.props.isMembershipContactWarningPromptOpen && ()\r\n }\r\n {\r\n this.props.isExitPromptOpen && ()\r\n }\r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n membershipFormPage: state.guests.membershipFormPage,\r\n newMembership: state.guests.newMembership,\r\n membershipForm: state.guests.membershipForm,\r\n membershipBasket: state.guests.membershipBasket,\r\n ownerMembershipsAvailability: state.user.ownerMembershipsAvailability,\r\n basketId: state.guests.basketId,\r\n isMembershipContactWarningPromptOpen: state.modal.membershipflowContactprompt.isOpen,\r\n promptNextStep: state.modal.membershipContactPromptNextStep.nextStep,\r\n isValidated: state.guests.validateAndUploadPhoto,\r\n contentfulMembershipTypes: state.guests.contentfulMembershipTypes,\r\n isAddingAgeVerificationImage: state.guests.isAddingAgeVerificationImage,\r\n addingAgeVerificationImageSuccess: state.guests.addingAgeVerificationImageSuccess,\r\n isExitPromptOpen: state.modal.exit.isOpen,\r\n addingMembershipErrorMessage: state.guests.addingMembershipErrorMessage,\r\n hasOwnMembership: state.user.hasOwnMembership,\r\n userFirstName: state.user.firstname,\r\n userLastName: state.user.lastName,\r\n userEmail: state.user.loginEmail,\r\n userPhoneNumber: state.user.phoneNumber,\r\n userRoles: state.user.userRoles,\r\n membershipContainers: state.guests.membershipContainers,\r\n addingAgeVerificationImageError: state.guests.addingAgeVerificationImageError,\r\n addingAgeVerificationImageErrorMessage: state.guests.addingAgeVerificationImageErrorMessage,\r\n termDurations: state.guests.termDurations,\r\n };\r\n};\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n updateMembershipFormPage: (pageNo: number) => {\r\n dispatch({ type: CHANGE_MEMBERSHIP_FORM_PAGE, payload: pageNo })\r\n },\r\n addMembershipRequest: async (membership: NewMembershipDTO) => {\r\n let result = dispatch(addMembership(membership));\r\n return result;\r\n },\r\n setExitModalOpen: (isOpen: boolean) => {\r\n dispatch({ type: SET_EXIT_PROMPT_OPEN, payload: isOpen })\r\n },\r\n saveAndExit: () => {\r\n dispatch({ type: ActionTypes.SAVE_AND_EXIT })\r\n },\r\n updateMembershipForm: ((fieldName: any, value: any, errors: string[]) => {\r\n dispatch(updateMembershipForm(fieldName, value, errors));\r\n }),\r\n updateMembershipFormBasket: ((membershipForm?: IMembershipForm | undefined, membershipBasket?: IMembershipForm[] | undefined) => {\r\n dispatch(updateMembershipFormBasket(membershipForm, membershipBasket));\r\n }),\r\n updateMembershipBasketField: ((index: number, fieldName: any, value: any) => {\r\n dispatch(updateMembershipBasketField(index, fieldName, value));\r\n }),\r\n startNewMembership: () => {\r\n dispatch({ type: ActionTypes.START_NEW_MEMBERSHIP });\r\n },\r\n getOwnerMembershipAvailability: () => {\r\n dispatch(getOwnerMembershipAvailability());\r\n },\r\n uploadFile: (file: any, membershipId: string, firstName: string, lastName: string, dateOfBirth: Date) => {\r\n dispatch(addAgeVerificationFile(file, membershipId, firstName, lastName, dateOfBirth));\r\n },\r\n setMembershipContactWarningModalOpen: (isOpen: boolean, type: string) => {\r\n dispatch({ type: SET_MEMBERSHIPS_FLOW_CONTACT_PROMPT_OPEN, payload: { isOpen: isOpen, type: type } })\r\n },\r\n setPromptNextStep: (nextStep: boolean) => {\r\n dispatch({ type: SET_MEMBERSHIPS_CONTACT_PROMPT_NEXT_STEP, payload: nextStep })\r\n },\r\n setContentfulMembershipTypes: (withTerms?: boolean) => {\r\n dispatch(getContentfulMembershipTypes(withTerms));\r\n },\r\n }\r\n}\r\n\r\nexport default compose(\r\n withTranslation(),\r\n connect(mapStateToProps, mapDispatchToProps)\r\n)(AddMembership);\r\nfunction dispatch(arg0: { type: string; payload: any; }) {\r\n throw new Error(\"Function not implemented.\");\r\n}\r\n\r\n","import { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport React, { Component } from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { PrimaryButton } from '../../../../Shared/Components/Presentational/Buttons';\r\nconst iconPath = process.env.PUBLIC_URL + '/images/';\r\n\r\ninterface ManageDigitalPassProps extends WithTranslation {\r\n memberId: string | undefined;\r\n description?: ContentfulContentObject;\r\n cardNumber?: string;\r\n isDecommissionedPark: boolean;\r\n}\r\n\r\nconst ManageDigitalPass: React.FC = (props: ManageDigitalPassProps) => {\r\n const { t } = props;\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n {props.description && (\r\n

{props.description.title}

\r\n )}\r\n
\r\n
\r\n\r\n
\r\n {props.description && (\r\n
\r\n {documentToReactComponents(props.description.content)}\r\n
\r\n )}\r\n
\r\n\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n {!props.isDecommissionedPark && (\r\n
\r\n {props.cardNumber ? (\r\n \r\n \"Add\r\n {/* */}\r\n \r\n ) : (\r\n

Apple Wallet pass currently unavailable

\r\n )}\r\n
\r\n )}\r\n\r\n {!props.cardNumber && (\r\n

No digital pass currently available

\r\n )}\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default withTranslation()(ManageDigitalPass);","import React, { ChangeEvent, Component, MouseEventHandler } from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { Link } from 'react-router-dom';\r\nimport { Tab, TabList, TabPanel, Tabs } from 'react-tabs';\r\nimport { compose } from 'redux';\r\nimport { Desktop, Mobile } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport \"./AddMembershipStyles.scss\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport ManageDigitalPass from '../Presentational/ManageActiveMemberSubPages/ManageDigitalPass';\r\nimport Vehicles from '../Presentational/AddMembershipSubPages/Vehicles';\r\nimport { updateEditMemberDetailsForm, updateEditMemberDetailsRequest } from '../../Redux/ActionCreators';\r\nimport { GetHTMlContentBlockCall } from '../../../Contentful/Calls/GetHTMLContentBlockCall';\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\n\r\ninterface EditMemberDetailsProps extends WithTranslation {\r\n isHeaderOpen: boolean;\r\n editMemberDetails: EditMemberDetailsDTO;\r\n editMemberDetailsForm: FormInput[];\r\n updateEditMemberDetailsRequest: (editMemberDetails: EditMemberDetailsDTO) => void;\r\n saveAndExit: () => void;\r\n updateEditMemberDetailsForm: (fieldName: any, value: any, errors: string[]) => void;\r\n decommissionedParks: string[];\r\n parkCode: string;\r\n}\r\n\r\ninterface EditMemberDetailsState {\r\n currentTab: string;\r\n isEditting: boolean;\r\n showErrors: boolean;\r\n titleDescription: ContentfulContentObject | undefined;\r\n vehicleTitleDescription: ContentfulContentObject | undefined;\r\n passTitleDescription: ContentfulContentObject | undefined;\r\n contentLoaded: boolean;\r\n}\r\n\r\nclass ManageActiveMember extends Component {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n currentTab: \"digitalPass\",\r\n isEditting: false,\r\n showErrors: false,\r\n titleDescription: undefined,\r\n vehicleTitleDescription: undefined,\r\n passTitleDescription: undefined,\r\n contentLoaded: false,\r\n }\r\n\r\n Promise.all([\r\n this.getContentBlock(\"My Haulfryn - Memberships - Manage Membership - Vehicles\", \"vehicleTitleDescription\"),\r\n this.getContentBlock(\"My Haulfryn - Memberships - Manage Membership - Digital Pass\", \"passTitleDescription\"),\r\n ]).then(r => {\r\n r.forEach(c => this.setState({ ...this.state, [c.name]: c }));\r\n this.setState({ contentLoaded: true });\r\n })\r\n }\r\n\r\n getContentBlock = async (name: string, label: string) => {\r\n const text = await GetHTMlContentBlockCall(name, label);\r\n return text;\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly, prevState: Readonly, snapshot?: any): void {\r\n\r\n }\r\n\r\n onTabSwitch(index: number) {\r\n switch (index) {\r\n case 0:\r\n this.setState({ currentTab: \"digitalPass\" });\r\n break;\r\n case 1:\r\n this.setState({ currentTab: \"vehicles\" });\r\n break;\r\n default:\r\n break;\r\n }\r\n }\r\n\r\n onSave() {\r\n // This is needed to provide a required parameter to the Primary button\r\n }\r\n\r\n onSaveAndExit(e: React.MouseEvent) {\r\n let invalid = false;\r\n\r\n for (let formObject in this.props.editMemberDetailsForm) {\r\n if (formObject === \"vehicles\" && (this.props.editMemberDetailsForm[formObject] && this.props.editMemberDetailsForm[formObject].errors.length > 0)) {\r\n invalid = true;\r\n break;\r\n }\r\n }\r\n\r\n if (invalid) {\r\n this.setState({ showErrors: true });\r\n e.preventDefault();\r\n return;\r\n } else {\r\n this.setState({ showErrors: false });\r\n }\r\n const editmembership = this.createEditMemberDetailsDTO(this.props.editMemberDetailsForm);\r\n\r\n this.props.updateEditMemberDetailsRequest(editmembership);\r\n }\r\n\r\n createEditMemberDetailsDTO(form: FormInput[]): EditMemberDetailsDTO {\r\n let editMemberDetails: EditMemberDetailsDTO =\r\n {\r\n id: this.props.editMemberDetails && this.props.editMemberDetails.id,\r\n };\r\n for (let formObject in form) {\r\n if (formObject !== \"id\" && formObject !== \"autoRenew\") {\r\n editMemberDetails = { ...editMemberDetails, [formObject]: form[formObject].value };\r\n }\r\n }\r\n\r\n if (editMemberDetails && editMemberDetails.vehicles) {\r\n for (let i = 0; i < editMemberDetails.vehicles!.length; i++) {\r\n if (editMemberDetails.vehicles![i].registration === \"\" && editMemberDetails.vehicles![i].description === \"\") {\r\n if (editMemberDetails.vehicles![i].id) {\r\n editMemberDetails.vehicles![i].registration = undefined;\r\n editMemberDetails.vehicles![i].description = undefined;\r\n } else {\r\n editMemberDetails.vehicles!.splice(i, 1);\r\n i--;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return editMemberDetails;\r\n }\r\n\r\n updateValue(fieldName: string, value: any, errors: string[]) {\r\n this.props.updateEditMemberDetailsForm(fieldName, value, errors);\r\n }\r\n\r\n calculateAge = (dateOfBirth: Date): number => {\r\n let today = new Date();\r\n let birthDate = new Date(dateOfBirth);\r\n let ageNow = today.getFullYear() - birthDate.getFullYear();\r\n let m = today.getMonth() - birthDate.getMonth();\r\n if (m < 0 || (m === 0 && today.getDate() < birthDate.getDate())) {\r\n ageNow--;\r\n }\r\n return ageNow;\r\n }\r\n\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n\r\n return (\r\n <>\r\n {this.state.contentLoaded ? (\r\n
\r\n \r\n {!this.props.isHeaderOpen && (\r\n <>\r\n

{t(\"editMembership.title\")}

\r\n

{t(\"editMembership.message\")}

\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n {t(\"editMembership.digitalPass.title\")}\r\n {t(\"editMembership.digitalPass.titleMobile\")}\r\n \r\n {this.props.editMemberDetails && this.props.editMemberDetails.dateOfBirth && this.calculateAge(this.props.editMemberDetails.dateOfBirth) >= 17 && (\r\n {t(\"editMembership.vehicles.title\")}\r\n )}\r\n \r\n\r\n \r\n p == this.props.parkCode).length > 0}\r\n />\r\n \r\n {this.props.editMemberDetails && this.props.editMemberDetails.dateOfBirth && this.calculateAge(this.props.editMemberDetails.dateOfBirth) >= 17 && (\r\n \r\n
\r\n \r\n
\r\n
\r\n )}\r\n \r\n\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n };\r\n\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n editMemberDetails: state.guests.editMemberDetails,\r\n editMemberDetailsForm: state.guests.editMemberDetailsForm,\r\n decommissionedParks: state.user.decommissionedParks,\r\n parkCode: state.user.park.parkCode,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n updateEditMemberDetailsRequest: (editMemberDetails: EditMemberDetailsDTO) => {\r\n dispatch(updateEditMemberDetailsRequest(editMemberDetails));\r\n },\r\n saveAndExit: () => {\r\n //Add dispatch to reducer to clear edit membership Dto and form here\r\n },\r\n updateEditMemberDetailsForm: (fieldName: any, value: any, errors: string[]) => {\r\n dispatch(updateEditMemberDetailsForm(fieldName, value, errors));\r\n },\r\n }\r\n}\r\n\r\nexport default compose(\r\n withTranslation(),\r\n connect(mapStateToProps, mapDispatchToProps)\r\n)(ManageActiveMember);","import React, { useEffect, useState } from \"react\";\r\nimport \"./MembershipPageStyles.scss\";\r\nimport { hasValue, isValidEmail, isValidUKPhoneNumber, isTextOnly } from \"../../../../Shared/Utilities/Validation\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport InputField from \"../AddMembershipSubPages/FormInputs/InputField\";\r\nimport { Entry } from \"contentful\";\r\nimport { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\nimport DropdownList from \"../../../../Shared/Components/Presentational/DropdownList\";\r\nimport { relative } from \"path\";\r\nimport { props } from \"cypress/types/bluebird\";\r\nimport Checkbox from \"../../../../Shared/Components/Presentational/Checkbox\";\r\n\r\ninterface MemberDetailsProps extends WithTranslation {\r\n onInput: (value: any, name: any, errors: string[]) => void;\r\n membershipForm: any;\r\n showErrors: boolean;\r\n isReferred: boolean;\r\n remainingMembership: number;\r\n transferMemberText: ContentfulContentObject;\r\n reallocateMemberText: ContentfulContentObject;\r\n memberDetailText: ContentfulContentObject;\r\n manageMemberText: ContentfulContentObject;\r\n ownerMembershipAvailability: OwnerMembershipAvailabilityDTO;\r\n usedMembership: number;\r\n availableMemberships: number;\r\n transferredMemberships: number;\r\n referWMemberships: boolean;\r\n referWOutMemberships: boolean;\r\n}\r\n\r\nconst MemberDetails: React.FC = (props: MemberDetailsProps) => {\r\n const { t } = props;\r\n const [input, setInput] = useState(null);\r\n\r\n const getReferredDropdownList = (remainingMemberships: number): Array => {\r\n let minValue = props.isReferred ? (props.transferredMemberships - props.availableMemberships) : (props.referWOutMemberships ? 0 : 1);\r\n let list: Array = new Array();\r\n for (let i = minValue; i < (remainingMemberships + 1); i++) {\r\n list.push({ value: i, label: i.toString() });\r\n }\r\n return list;\r\n }\r\n\r\n const getSelectedOption = (): DropdownListOption => {\r\n let selectedOption: DropdownListOption | null = null;\r\n if (props.isReferred) {\r\n selectedOption = { value: props.membershipForm.transferredMemberships.value, label: props.membershipForm.transferredMemberships.value.toString() }\r\n } else {\r\n if (props.referWOutMemberships) {\r\n selectedOption = { value: \"0\", label: \"0\" }\r\n } else {\r\n selectedOption = { value: \"1\", label: \"1\" }\r\n }\r\n }\r\n\r\n if (selectedOption != null) {\r\n props.onInput(selectedOption.value, \"transferredMemberships\", []);\r\n return selectedOption;\r\n } else {\r\n return { value: \"0\", label: \"0\" }\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n

{props.isReferred ? props.manageMemberText.title : props.memberDetailText.title}

\r\n
\r\n
\r\n {props.isReferred ? documentToReactComponents(props.manageMemberText.content) : documentToReactComponents(props.memberDetailText.content)}\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n
\r\n\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n {props.referWMemberships && (\r\n
\r\n
\r\n

{props.isReferred ? props.reallocateMemberText.title : props.transferMemberText.title}

\r\n
\r\n
\r\n {props.isReferred ? documentToReactComponents(props.reallocateMemberText.content) : documentToReactComponents(props.transferMemberText.content)}\r\n
\r\n\r\n
\r\n {(props.transferredMemberships && props.transferredMemberships > 0) ? (\r\n props.transferredMemberships === 1 ? (\r\n

You have previously allocated {props.transferredMemberships} club membership to {props.membershipForm.firstName.value + \" \" + props.membershipForm.lastName.value}.

\r\n ) : (\r\n

You have previously allocated {props.transferredMemberships} club memberships to {props.membershipForm.firstName.value + \" \" + props.membershipForm.lastName.value} and you have {props.isReferred ? props.remainingMembership : props.ownerMembershipAvailability && props.ownerMembershipAvailability.available} club memberships remaining.

\r\n )\r\n ) : undefined}\r\n
\r\n\r\n
\r\n

{props.isReferred ? \"Change allocation to \" : \"Allocate\"}

  \r\n {props.membershipForm && props.membershipForm.transferredMemberships && (\r\n {\r\n props.onInput(newValue.value, \"transferredMemberships\", [])\r\n }}\r\n />\r\n )}\r\n   \r\n

of my {props.isReferred ? props.remainingMembership : props.ownerMembershipAvailability && props.ownerMembershipAvailability.available} remaining Club memberships.

\r\n
\r\n
\r\n
\r\n
\r\n {(props.showErrors && (props.membershipForm.transferredMemberships.errors && props.membershipForm.transferredMemberships.errors.length > 0)) &&\r\n

{props.membershipForm.transferredMemberships && t(\"addMembership.errors.\" + props.membershipForm.transferredMemberships.errors[0])}

\r\n }\r\n
\r\n
\r\n {props.availableMemberships < props.transferredMemberships && (\r\n props.availableMemberships > 0 ? (\r\n

Note: As some of the club memberships that you have allocated might be in use by the user, you can only reduce you allocation by the amount still available.

\r\n ) : (\r\n props.transferredMemberships > 0 ? (\r\n

Note: As all of the club memberships that you have allocated them are in use, you cannot reduce the allocation until they become available

\r\n ) : (\r\n

Note: As the club membership that you have allocated them is in use, you cannot reduce the allocation until it becomes available

\r\n )\r\n )\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n

{props.isReferred ? props.manageMemberText.title : props.memberDetailText.title}

\r\n
\r\n
\r\n
\r\n {props.isReferred ? documentToReactComponents(props.manageMemberText.content) : documentToReactComponents(props.memberDetailText.content)}\r\n
\r\n
\r\n
\r\n \r\n\r\n \r\n\r\n \r\n\r\n \r\n\r\n {props.referWMemberships && (\r\n
\r\n

{props.isReferred ? props.reallocateMemberText.title : props.transferMemberText.title}

\r\n
\r\n {props.isReferred ? documentToReactComponents(props.reallocateMemberText.content) : documentToReactComponents(props.transferMemberText.content)}\r\n
\r\n\r\n
\r\n {(props.transferredMemberships && props.transferredMemberships > 0) ? (\r\n props.transferredMemberships === 1 ? (\r\n

You have previously allocated {props.transferredMemberships} club memberships to {props.membershipForm.firstName.value + \" \" + props.membershipForm.lastName.value} and you have {props.isReferred ? props.remainingMembership : props.ownerMembershipAvailability && props.ownerMembershipAvailability.available} club memberships remaining.

\r\n ) : (\r\n

You have previously allocated {props.transferredMemberships} club memberships to {props.membershipForm.firstName.value + \" \" + props.membershipForm.lastName.value} and you have {props.isReferred ? props.remainingMembership : props.ownerMembershipAvailability && props.ownerMembershipAvailability.available} club memberships remaining.

\r\n )\r\n ) : undefined}\r\n
\r\n\r\n

{props.isReferred ? \"Change allocation to \" : \"Allocate\"}

\r\n {props.membershipForm && props.membershipForm.transferredMemberships && (\r\n {\r\n props.onInput(newValue.value, \"transferredMemberships\", [])\r\n }}\r\n />\r\n )}\r\n

of my {props.isReferred ? props.remainingMembership : props.ownerMembershipAvailability && props.ownerMembershipAvailability.available} remaining club memberships.

\r\n\r\n
\r\n {(props.showErrors && (props.membershipForm.transferredMemberships.errors && props.membershipForm.transferredMemberships.errors.length > 0)) &&\r\n

{props.membershipForm.transferredMemberships && t(\"addMembership.errors.\" + props.membershipForm.transferredMemberships.errors[0])}

\r\n }\r\n
\r\n {props.availableMemberships < props.transferredMemberships && (\r\n props.availableMemberships > 0 ? (\r\n

Note: As some of the club memberships that you have allocated might be in use by the user, you can only reduce you allocation by the amount still available.

\r\n ) : (\r\n props.transferredMemberships > 0 ? (\r\n

Note: As all of the club memberships that you have allocated them are in use, you cannot reduce the allocation until they become available

\r\n ) : (\r\n

Note: As the club membership that you have allocated them is in use, you cannot reduce the allocation until it becomes available

\r\n )\r\n )\r\n )}\r\n
\r\n
\r\n\r\n
\r\n )}\r\n
\r\n
\r\n \r\n );\r\n}\r\n\r\nexport default withTranslation()(MemberDetails);","import classNames from \"classnames\";\r\nimport React, { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { PrimaryButton, SecondaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { Modal, ModalHeader, ModalProps } from \"../../../Shared/Components/Presentational/Modal\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\n\r\ninterface ReferralSentAlertModalProps extends ModalProps {\r\n isOpen: boolean;\r\n setReferralSentModalOpen: (isOpen: boolean) => void;\r\n modalText: ContentfulContentObject;\r\n}\r\n\r\n\r\nconst ReferralSentAlertModal: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const open = props.isOpen;\r\n const setReferralSentModalOpen = props.setReferralSentModalOpen;\r\n const handleClick1 = async () => {\r\n setReferralSentModalOpen(false);\r\n }\r\n\r\n const formContents = (\r\n
\r\n
\r\n \r\n\r\n
\r\n {documentToReactComponents(props.modalText.content)}\r\n
\r\n\r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n\r\n return (\r\n <>\r\n\r\n \r\n\r\n \r\n
{formContents}
\r\n \r\n
\r\n \r\n \r\n {formContents}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ReferralSentAlertModal;","import { Component } from \"react\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { SET_REFER_SENT_PROMPT_OPEN } from '../../../Modal/Redux/ActionTypes';\r\nimport React from \"react\";\r\nimport ReferralSentAlertModal from \"../Presentational/ReferralSentAlertModal\";\r\nimport { GetHTMlContentBlockCall } from \"../../../Contentful/Calls/GetHTMLContentBlockCall\";\r\nimport Spinner from \"../../../Shared/Components/Presentational/Spinner\";\r\n\r\ninterface ReferralSentAlertProps extends WithTranslation {\r\n showReferSentPrompt: boolean;\r\n setReferralSentModalOpen: (isOpen: boolean) => void;\r\n operationType: string;\r\n}\r\n\r\ninterface ReferralSentAlertState {\r\n createModalText: ContentfulContentObject | undefined;\r\n updateModalText: ContentfulContentObject | undefined;\r\n contentLoaded: boolean;\r\n}\r\n\r\nclass ReferralSentAlert extends Component {\r\n constructor(props: any) {\r\n super(props);\r\n\r\n this.state = {\r\n createModalText: undefined,\r\n updateModalText: undefined,\r\n contentLoaded: false,\r\n }\r\n\r\n Promise.all([\r\n this.getModalText(\"My Haulfryn - Membership - Referral - Transfer Confirmation\", \"createModalText\"),\r\n this.getModalText(\"My Haulfryn - Membership - Referral - Update Confirmation\", \"updateModalText\"),\r\n ]).then(r => {\r\n r.forEach(c => this.setState({ ...this.state, [c.name]: c }));\r\n this.setState({ contentLoaded: true });\r\n })\r\n }\r\n\r\n getModalText = async (name: string, label: string) => {\r\n const modalText = await GetHTMlContentBlockCall(name, label);\r\n return modalText;\r\n }\r\n\r\n applyModalText(): ContentfulContentObject {\r\n if(this.props.operationType === \"create\"){\r\n return this.state.createModalText!\r\n }else if(this.props.operationType === \"update\"){\r\n return this.state.updateModalText!\r\n }else{\r\n return {\r\n title: \"\",\r\n content: \"\",\r\n name: \"\"\r\n }\r\n }\r\n }\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n {this.state.contentLoaded ? (\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n showReferSentPrompt: state.modal.referralSent.isOpen,\r\n };\r\n };\r\n \r\n \r\n const mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setReferralSentModalOpen: (isOpen: boolean) => {\r\n dispatch({ type: SET_REFER_SENT_PROMPT_OPEN, payload: isOpen })\r\n } \r\n };\r\n };\r\n\r\n\r\nexport default withTranslation()(\r\n connect(mapStateToProps, mapDispatchToProps)(ReferralSentAlert)\r\n)","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostReferralMembership extends PostApiCall {\r\n constructor(ReferMembership: ReferMembershipDTO) {\r\n let url: string = \"Membership/ReferMembership\";\r\n\r\n super(url);\r\n\r\n this.body = ReferMembership;\r\n }\r\n}","import classNames from \"classnames\";\r\nimport React, { useState } from \"react\";\r\nimport { useTranslation } from \"react-i18next\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { PrimaryButton, SecondaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { Modal, ModalHeader, ModalProps } from \"../../../Shared/Components/Presentational/Modal\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\n\r\ninterface ErrorPromptModalProps extends ModalProps {\r\n isOpen: boolean;\r\n setErrorModalOpen: (isOpen: boolean) => void;\r\n}\r\n\r\nconst ErrorPromptModal: React.FC = (props) => {\r\n const { t } = useTranslation();\r\n const open = props.isOpen;\r\n const setErrorModalOpen = props.setErrorModalOpen;\r\n const handleClick1 = async () => {\r\n setErrorModalOpen(false);\r\n }\r\n \r\n const formContents = (\r\n
\r\n
\r\n \r\n
\r\n

It looks like something has gone wrong, please try again later.

\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n
\r\n )\r\n \r\n return (\r\n <>\r\n \r\n \r\n \r\n \r\n
{formContents}
\r\n \r\n
\r\n \r\n \r\n {formContents}\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default ErrorPromptModal;","import { Component } from \"react\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { SET_ERROR_PROMPT_OPEN, SET_REFER_SENT_PROMPT_OPEN } from '../../../Modal/Redux/ActionTypes';\r\nimport React from \"react\";\r\nimport ReferralSentAlertModal from \"../Presentational/ReferralSentAlertModal\";\r\nimport ErrorPromptModal from \"../Presentational/ErrorPromptModal\";\r\n\r\ninterface ErrorProps extends WithTranslation {\r\n showErrorPrompt: boolean;\r\n setErrorModalOpen: (isOpen: boolean) => void;\r\n}\r\n\r\nclass ErrorPrompt extends Component {\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n <>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n };\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n \r\n return {\r\n showErrorPrompt: state.modal.error.isOpen,\r\n };\r\n };\r\n \r\n \r\n const mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setErrorModalOpen: (isOpen: boolean) => {\r\n dispatch({ type: SET_ERROR_PROMPT_OPEN, payload: isOpen })\r\n } \r\n };\r\n };\r\n\r\n\r\nexport default withTranslation()(\r\n connect(mapStateToProps, mapDispatchToProps)(ErrorPrompt)\r\n)","import React, { Component } from \"react\";\r\nimport { faArrowAltCircleLeft } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport { compose } from \"redux\";\r\nimport { ClickableIcon } from \"../../../Shared/Components/Presentational/Icons\";\r\nimport { Widget } from \"../../../Shared/Components/Presentational/Widget\";\r\nimport { PrimaryButton, SecondaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport MemberDetails from \"../Presentational/ReferMembershipSubPages/MemberDetails\";\r\nimport { SAVE_AND_EXIT, UPDATE_REFER_MEMBERSHIP_FORM_PAGE } from \"../../Redux/ActionTypes\";\r\nimport { getOwnerMembershipAvailability } from \"../../../User/Redux/ActionCreators\";\r\nimport { SET_ERROR_PROMPT_OPEN, SET_EXIT_PROMPT_OPEN, SET_REFER_SENT_PROMPT_OPEN } from \"../../../Modal/Redux/ActionTypes\";\r\nimport ReferralSentAlert from \"../../../Modal/Components/Container/ReferralSentAlert\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { GetHTMlContentBlockCall } from \"../../../Contentful/Calls/GetHTMLContentBlockCall\";\r\nimport { ReferMembershipForm } from \"../../../ReferMembershipForm\";\r\nimport ExitPrompt from \"../../../Modal/Components/Container/ExitPrompt\";\r\nimport Spinner from \"../../../Shared/Components/Presentational/Spinner\";\r\nimport { PostReferralMembership } from \"../../../Api/Calls/PostReferralMembership\";\r\nimport { Post, Put } from \"../../../Api/ApiService\";\r\nimport ErrorPrompt from \"../../../Modal/Components/Container/ErrorPrompt\";\r\nimport { getReferredMembershipsByOwner } from \"../../Redux/ActionCreators\";\r\nimport { withRouter, RouteComponentProps, Redirect } from \"react-router-dom\";\r\nimport { StaticContext } from \"react-router\";\r\nimport * as Routes from '../../../Constants/Routes';\r\n\r\ninterface ReferMembershipProps extends WithTranslation {\r\n isHeaderOpen: boolean;\r\n isReferSentPromptOpen: boolean;\r\n isErrorPrompt: boolean;\r\n referMembershipFormPage: number;\r\n referMembership: ReferMembershipDTO;\r\n referredMemberships: ReferralDTO[];\r\n ownerMembershipsAvailability: OwnerMembershipAvailabilityDTO;\r\n updateReferMembershipFormPage: (pageNum: number) => void;\r\n getReferredMembershipsByOwner: () => void;\r\n setReferralSentModalOpen: (isOpen: boolean) => void;\r\n setErrorModalOpen: (isOpen: boolean) => void;\r\n saveAndExit: () => void;\r\n getOwnerMembershipAvailability: () => void;\r\n canReferWithMemberships: boolean;\r\n canReferWithOutMemberships: boolean;\r\n}\r\n\r\ninterface ReferMembershipState {\r\n showErrors: boolean;\r\n transferMembershipText: ContentfulContentObject | undefined;\r\n contentLoaded: boolean;\r\n isReferringinProcess: boolean;\r\n isButtonDisabled: boolean;\r\n referMembershipForm: ReferMembershipForm;\r\n isReferred: boolean;\r\n usedMembership: number;\r\n exit: boolean;\r\n memberDetailText: ContentfulContentObject | undefined;\r\n manageMemberText: ContentfulContentObject | undefined;\r\n reallocateMemberText: ContentfulContentObject | undefined;\r\n remainingMemberships: number;\r\n availableMemberships: number;\r\n transferredMemberships: number;\r\n}\r\n\r\ntype Section = {\r\n key: number;\r\n title: string;\r\n name: string;\r\n}\r\n\r\nclass ReferMembership extends Component{\r\n\r\n constructor(props: any) {\r\n super(props);\r\n this.state = {\r\n showErrors: false,\r\n transferMembershipText: undefined,\r\n contentLoaded: false,\r\n isReferringinProcess: false,\r\n isButtonDisabled: false,\r\n exit: false,\r\n referMembershipForm: new ReferMembershipForm() as IReferMembership,\r\n isReferred: false,\r\n usedMembership: 0,\r\n memberDetailText: undefined,\r\n manageMemberText: undefined,\r\n reallocateMemberText: undefined,\r\n remainingMemberships: -1,\r\n availableMemberships: -1,\r\n transferredMemberships: -1,\r\n }\r\n this.props.getOwnerMembershipAvailability();\r\n Promise.all([\r\n this.getContentBlock(\"My Haulfryn - Membership - Referral - Transfer quota\", \"transferMembershipText\"),\r\n this.getContentBlock(\"My Haulfryn - Membership - Create Referral\", \"memberDetailText\"),\r\n this.getContentBlock(\"My Haulfryn - Membership - Referral - Manage Referral\", \"manageMemberText\"),\r\n this.getContentBlock(\"My Haulfryn - Membership - Referral - Reallocate quota\", \"reallocateMemberText\"),\r\n ]).then(r => {\r\n r.forEach(c => this.setState({ ...this.state, [c.name]: c }));\r\n this.setState({ contentLoaded: true });\r\n })\r\n }\r\n\r\n resolveQueryParams(queryParams: string): { [keys: string]: string } {\r\n let KVParams: {\r\n [keys: string]: string\r\n } = {};\r\n\r\n if (queryParams.startsWith(\"?\", 0)) {\r\n queryParams = queryParams.slice(1);\r\n let params: string[] = queryParams.split(\"&\");\r\n params.forEach((p) => {\r\n let keyValue = p.split(\"=\");\r\n if (keyValue.length === 2) {\r\n KVParams[keyValue[0]] = keyValue[1];\r\n }\r\n });\r\n }\r\n return KVParams\r\n }\r\n\r\n resolveReferralId() {\r\n let queryParam: string = window.location.search;\r\n let params: { [keys: string]: string } = this.resolveQueryParams(queryParam);\r\n let form = new ReferMembershipForm();\r\n let idFound: boolean = false;\r\n if (this.props.referredMemberships) {\r\n this.props.referredMemberships.forEach((ref) => {\r\n if (ref.id && params[\"id\"] === ref.id) {\r\n form = ReferMembershipForm.fromReferDTO(ref);\r\n this.setState({ referMembershipForm: form });\r\n this.setState({ usedMembership: ref.usedMembership });\r\n this.setState({ availableMemberships: ref.availableMemberships, transferredMemberships: ref.transferredMemberships });\r\n idFound = true;\r\n }\r\n })\r\n }\r\n if (idFound) {\r\n this.setState({ isReferred: true });\r\n }\r\n }\r\n\r\n getContentBlock = async (name: string, label: string) => {\r\n const transferText = await GetHTMlContentBlockCall(name, label);\r\n return transferText;\r\n }\r\n\r\n componentDidMount() {\r\n this.resolveReferralId();\r\n }\r\n\r\n componentDidUpdate(prevProps: Readonly, prevState: Readonly, snapshot?: RouteComponentProps<{}, StaticContext, any> | undefined): void {\r\n if (this.props.ownerMembershipsAvailability && this.state.remainingMemberships === -1 && this.state.referMembershipForm && this.state.usedMembership !== undefined) {\r\n this.setState({ remainingMemberships: (this.props.ownerMembershipsAvailability.available + this.state.referMembershipForm.transferredMemberships.value) });\r\n }\r\n\r\n if (prevProps.ownerMembershipsAvailability !== this.props.ownerMembershipsAvailability) {\r\n this.setState({ remainingMemberships: (this.props.ownerMembershipsAvailability.available + this.state.referMembershipForm.transferredMemberships.value) });\r\n }\r\n }\r\n\r\n onBack() {\r\n this.setState({ showErrors: false });\r\n if (this.props.referMembershipFormPage - 1 >= 0) {\r\n switch (this.props.referMembershipFormPage) {\r\n case 1:\r\n if (!(this.state.referMembershipForm as IMembershipForm).contentfulMembershipTypeId!.value) {\r\n this.updateValue('', \"contentfulMembershipTypeId\", []);\r\n }\r\n break;\r\n default:\r\n break;\r\n }\r\n this.props.updateReferMembershipFormPage(this.props.referMembershipFormPage - 1);\r\n }\r\n }\r\n\r\n referMembershipDTO(referMembershipForm: ReferMembershipForm): ReferMembershipDTO {\r\n let referMembership: ReferMembershipDTO =\r\n {\r\n Id: referMembershipForm.id,\r\n FirstName: referMembershipForm.firstName.value,\r\n LastName: referMembershipForm.lastName.value,\r\n Email: referMembershipForm.email.value,\r\n PhoneNumber: referMembershipForm.phoneNumber.value,\r\n TransferredMemberships: referMembershipForm.transferredMemberships.value,\r\n AllowFurtherReferrals: referMembershipForm.allowFurtherReferrals.value,\r\n };\r\n return referMembership;\r\n }\r\n\r\n onSendReferral() {\r\n this.setState({ isReferringinProcess: true, isButtonDisabled: true });\r\n let invalid = this.state.referMembershipForm.IsNotValid();\r\n let form = this.state.referMembershipForm as IReferMembership;\r\n if (form.transferredMemberships) {\r\n if (this.props.ownerMembershipsAvailability) {\r\n if ((this.state.isReferred && form.transferredMemberships.value > this.state.remainingMemberships) && form.transferredMemberships.value > 0) {\r\n this.updateValue(form.transferredMemberships.value, \"transferredMemberships\", [\"isLessThanRemaining\"]);\r\n invalid = true;\r\n }\r\n }\r\n }\r\n\r\n if (invalid) {\r\n this.setState({ showErrors: true });\r\n this.setState({ isReferringinProcess: false, isButtonDisabled: false });\r\n return;\r\n } else {\r\n this.setState({ showErrors: false });\r\n Post(new PostReferralMembership(this.referMembershipDTO(this.state.referMembershipForm)))\r\n .then((response) => {\r\n if (response.status === 200) {\r\n this.setState({ isReferringinProcess: false, isButtonDisabled: false });\r\n this.props.setReferralSentModalOpen(true)\r\n } else {\r\n this.setState({ isReferringinProcess: false, isButtonDisabled: false });\r\n this.props.setErrorModalOpen(true);\r\n }\r\n }).catch((error) => {\r\n this.setState({ isReferringinProcess: false, isButtonDisabled: false });\r\n this.props.setErrorModalOpen(true);\r\n });\r\n }\r\n }\r\n\r\n\r\n onSaveAndExit() {\r\n this.setState({exit: true});\r\n }\r\n\r\n updateValue(value: any, fieldName: any, errors: string[]) {\r\n const form = this.state.referMembershipForm as unknown as FormInput[];\r\n if (fieldName === \"phoneNumber\" && value === \"\") {\r\n form[fieldName] = { value: value, errors: [] };\r\n } else {\r\n form[fieldName] = { value: value, errors: errors };\r\n }\r\n }\r\n\r\n sections: Section[] =\r\n [\r\n {\r\n key: 0,\r\n title: \"referMembership.memberDetails.title\",\r\n name: 'memberDetails'\r\n },\r\n {\r\n key: 1,\r\n title: \"referMembership.membership.title\",\r\n name: 'membershipType'\r\n },\r\n {\r\n key: 2,\r\n title: \"referMembership.transfer.title\",\r\n name: 'transfer'\r\n },\r\n {\r\n key: 3,\r\n title: \"referMembership.confirm.title\",\r\n name: 'confirm'\r\n }\r\n ]\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n return (\r\n <>\r\n {this.state.exit && }\r\n {this.state.contentLoaded ? (\r\n
\r\n \r\n {!this.props.isHeaderOpen && (\r\n <>\r\n {/*

{t(\"referMembership.title\")}

*/}\r\n {/*

{t(\"referMembership.message\")}

*/}\r\n \r\n )}\r\n
\r\n\r\n \r\n\r\n {(this.props.referMembershipFormPage > 0) && (\r\n \r\n )}\r\n\r\n
\r\n {this.props.referMembershipFormPage === 0 &&\r\n \r\n }\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n
\r\n\r\n \r\n {this.props.isReferSentPromptOpen && (\r\n \r\n )}\r\n {this.props.isErrorPrompt && (\r\n \r\n )}\r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n };\r\n};\r\n\r\n\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n isReferSentPromptOpen: state.modal.referralSent.isOpen,\r\n referMembershipFormPage: state.guests.referMembershipFormPage,\r\n referMembership: state.guests.referMembership,\r\n ownerMembershipsAvailability: state.user.ownerMembershipsAvailability,\r\n referredMemberships: state.guests.referredMemberships,\r\n isErrorPrompt: state.modal.error.isOpen,\r\n canReferWithMemberships: state.user.canReferWithMemberships,\r\n canReferWithOutMemberships: state.user.canReferWithOutMemberships,\r\n };\r\n};\r\n\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n getReferredMembershipsByOwner: () => { dispatch(getReferredMembershipsByOwner()) },\r\n updateReferMembershipFormPage: (pageNo: number) => {\r\n dispatch({ type: UPDATE_REFER_MEMBERSHIP_FORM_PAGE, payload: pageNo })\r\n },\r\n saveAndExit: () => {\r\n dispatch({ type: SAVE_AND_EXIT })\r\n },\r\n setErrorModalOpen: (isOpen: boolean) => {\r\n dispatch({ type: SET_ERROR_PROMPT_OPEN, payload: isOpen })\r\n },\r\n getOwnerMembershipAvailability: () => {\r\n dispatch(getOwnerMembershipAvailability());\r\n },\r\n setReferralSentModalOpen: (isOpen: boolean) => {\r\n dispatch({ type: SET_REFER_SENT_PROMPT_OPEN, payload: isOpen })\r\n },\r\n }\r\n}\r\n\r\nexport default compose(\r\n withTranslation(),\r\n withRouter,\r\n connect(mapStateToProps, mapDispatchToProps)\r\n)(ReferMembership);","import React, { Component } from 'react';\r\nimport './DropdownList.scss';\r\nimport classNames from 'classnames';\r\nimport { ValueType } from 'react-select/src/types';\r\nimport { useTranslation, withTranslation, WithTranslation } from 'react-i18next';\r\n\r\ninterface RadioButtonGroupProps extends WithTranslation {\r\n name: string;\r\n options: DropdownListOption[];\r\n selectedOption?: boolean | undefined;\r\n className?: string;\r\n classNamePrefix?: string;\r\n handleInputChange: any;\r\n isDisabled?: boolean;\r\n isLoading?: boolean;\r\n}\r\n\r\nclass RadioButtonGroup extends Component {\r\n constructor(props: RadioButtonGroupProps) {\r\n super(props);\r\n }\r\n\r\n\r\n public render(): JSX.Element {\r\n const { t } = this.props;\r\n return (\r\n
\r\n {this.props.options.map((v) => (\r\n <>\r\n \r\n \r\n \r\n ))}\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default withTranslation()(RadioButtonGroup);","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostSetParQInformationCall extends PostApiCall {\r\n constructor(parQForm: ParQFormDTO) {\r\n let url: string = \"Membership/AddParQInformation\";\r\n\r\n super(url);\r\n\r\n this.body = parQForm;\r\n }\r\n}","import React, { ChangeEvent, useEffect, useState, useRef } from 'react';\r\nimport { connect } from 'react-redux';\r\nimport { useLocation } from 'react-router';\r\nimport { Link } from 'react-router-dom';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport RadioButtonGroup from '../../../Shared/Components/Presentational/RadioButtonGroup';\r\nimport { Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport { hasValue } from '../../../Shared/Utilities/Validation';\r\nimport { setParQInforation, updateParQForm } from '../../Redux/ActionCreators';\r\nimport * as ActionTypes from '../../Redux/ActionTypes';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\n\r\ninterface ParQFormProps extends WithTranslation {\r\n setMembershipKey: (membershipKey: string | null) => void;\r\n membershipKey: string;\r\n parQFormDTO: ParQFormDTO;\r\n parQFormInputs: IParQFormInputs;\r\n updateParQFormInputs: (fieldName: any, value: any, errors: string[]) => void;\r\n updateParQFormDTO: (dto: ParQFormDTO) => void;\r\n setParQInformation: (dto: ParQFormDTO) => void;\r\n setParQInformationSuccess: boolean;\r\n setParQInformationFailure: boolean;\r\n}\r\n\r\nconst useQuery = () => new URLSearchParams(useLocation().search);\r\n\r\nconst ParQForm: React.FC = (props) => {\r\n const { t } = props;\r\n const [showErrors, setShowErrors] = useState(false);\r\n const [isSubmitted, setIsSubmitted] = useState(false);\r\n const [membershipKey, setMembershipKey] = useState({ value: \"\", errors: [\"hasValue\"] });\r\n const query = useQuery();\r\n const key = query.get(\"key\");\r\n props.setMembershipKey(key);\r\n\r\n const createParQFormDTO = (form: FormInput[]) => {\r\n let formDTO = {} as ParQFormDTO;\r\n if (key) {\r\n formDTO.membershipKey = props.membershipKey;\r\n } else {\r\n formDTO.membershipNumber = membershipKey.value;\r\n }\r\n for (let input in form) {\r\n if (input !== \"membershipKey\") {\r\n formDTO = { ...formDTO, [input]: form[input].value };\r\n }\r\n }\r\n return formDTO;\r\n }\r\n\r\n const handleClick = () => {\r\n const form = props.parQFormInputs as FormInput[];\r\n let invalid = false;\r\n for (let formObject in form) {\r\n if (form[formObject] && form[formObject].errors.length > 0) {\r\n invalid = true;\r\n break;\r\n }\r\n }\r\n if (membershipKey.value === \"\" && !key) {\r\n invalid = true;\r\n }\r\n if (invalid) {\r\n setShowErrors(true);\r\n return;\r\n } else {\r\n setShowErrors(false);\r\n setIsSubmitted(true);\r\n }\r\n const dto = createParQFormDTO(props.parQFormInputs as FormInput[]);\r\n props.updateParQFormDTO(dto);\r\n props.setParQInformation(dto);\r\n }\r\n\r\n const updateValue = (e: ChangeEvent | ChangeEvent) => {\r\n let value = null;\r\n if (e.target.value == \"true\") {\r\n value = true;\r\n } else if (e.target.value == \"false\") {\r\n value = false;\r\n } else {\r\n value = e.target.value;\r\n }\r\n\r\n if (e.target.name !== \"membershipKey\") {\r\n const errors: string[] = [];\r\n if (e.target.name != \"loseBalance\") {\r\n if (!hasValue(e.target.value)) {\r\n errors.push(\"hasValue\");\r\n }\r\n }\r\n props.updateParQFormInputs(e.target.name, value, errors);\r\n } else {\r\n const errors: string[] = [];\r\n if (!hasValue(e.target.value)) {\r\n errors.push(\"hasValue\");\r\n }\r\n setMembershipKey({ value: e.target.value, errors: errors });\r\n }\r\n }\r\n\r\n return (\r\n
\r\n \r\n
\r\n
\r\n
\r\n

{t(\"parQForm.title\")}

\r\n
\r\n
\r\n {!isSubmitted && !props.setParQInformationSuccess ? (\r\n <>\r\n {!key && (\r\n
\r\n \r\n \r\n
\r\n {showErrors && membershipKey && membershipKey.errors.length > 0 && (\r\n

{t(\"addMembership.errors.hasValue\")}

\r\n )}\r\n
\r\n )}\r\n
\r\n

{t(\"parQForm.initialWarning\")}

\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {showErrors && props.parQFormInputs[\"heartConditionHistory\"] && props.parQFormInputs[\"heartConditionHistory\"].errors.length > 0 && (\r\n

{t(\"addMembership.errors.hasValue\")}

\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {showErrors && props.parQFormInputs[\"chestPainActivity\"] && props.parQFormInputs[\"chestPainActivity\"].errors.length > 0 && (\r\n

{t(\"addMembership.errors.hasValue\")}

\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {showErrors && props.parQFormInputs[\"chestPainNoActivity\"] && props.parQFormInputs[\"chestPainNoActivity\"].errors.length > 0 && (\r\n

{t(\"addMembership.errors.hasValue\")}

\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {showErrors && props.parQFormInputs[\"loseBalance\"] && props.parQFormInputs[\"loseBalance\"].errors.length > 0 && (\r\n

{t(\"addMembership.errors.hasValue\")}

\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {showErrors && props.parQFormInputs[\"boneJointProblem\"] && props.parQFormInputs[\"boneJointProblem\"].errors.length > 0 && (\r\n

{t(\"addMembership.errors.hasValue\")}

\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {showErrors && props.parQFormInputs[\"bloodPressureHeartMedication\"] && props.parQFormInputs[\"bloodPressureHeartMedication\"].errors.length > 0 && (\r\n

{t(\"addMembership.errors.hasValue\")}

\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n {showErrors && props.parQFormInputs[\"otherReason\"] && props.parQFormInputs[\"otherReason\"].errors.length > 0 && (\r\n

{t(\"addMembership.errors.hasValue\")}

\r\n )}\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n

{t(\"parQForm.answerYesBold\")}{t(\"parQForm.answerYesText\")}

\r\n

{t(\"parQForm.answerNoBold\")}{t(\"parQForm.answerNoText\")}

\r\n

{t(\"parQForm.readUnderstoodQuestionnaire\")}

\r\n
\r\n
\r\n \r\n {props.setParQInformationFailure && (\r\n

{t(\"parQForm.failedToSend\")}

\r\n )}\r\n
\r\n \r\n ) : (\r\n <>\r\n

{t(\"parQForm.onceSubmittedMessage\")}

\r\n \r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n membershipKey: state.parQForm.membershipKey,\r\n parQFormDTO: state.parQForm.parQFormDTO,\r\n parQFormInputs: state.parQForm.parQFormInputs,\r\n setParQInformationSuccess: state.parQForm.setParQInformationSuccess,\r\n setParQInformationFailure: state.parQForm.setParQInformationFailure,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setMembershipKey: (membershipKey: string | null) => {\r\n dispatch({ type: ActionTypes.SET_MEMBERSHIP_KEY, payload: membershipKey });\r\n },\r\n updateParQFormInputs: (fieldName: any, value: any, errors: string[]) => {\r\n dispatch(updateParQForm(fieldName, value, errors));\r\n },\r\n updateParQFormDTO: (dto: ParQFormDTO) => {\r\n dispatch({ type: ActionTypes.UPDATE_PAR_Q_FORM_DTO, payload: dto });\r\n },\r\n setParQInformation: (dto: ParQFormDTO) => {\r\n dispatch(setParQInforation(dto));\r\n }\r\n }\r\n}\r\n\r\nexport default withTranslation()(connect(mapStateToProps, mapDispatchToProps)(ParQForm));","import * as ActionTypes from './ActionTypes';\r\nimport { ThunkAction } from 'redux-thunk';\r\nimport { AppState } from '../../RootReducer';\r\nimport { Action } from 'redux';\r\nimport { Get, Post, Delete, Put } from '../../Api/ApiService';\r\nimport { PostSetParQInformationCall } from '../../Api/Calls/PostSetParQInformation';\r\n\r\nexport const setParQInforation = \r\n (parQForm: ParQFormDTO): ThunkAction =>\r\n async (dispatch, getState) => {\r\n Post(new PostSetParQInformationCall(parQForm))\r\n .then((response) => {\r\n dispatch({ type: ActionTypes.SET_PAR_Q_INFORMATION_SUCCESS});\r\n })\r\n .catch((error) => {\r\n dispatch({ type: ActionTypes.SET_PAR_Q_INFORMATION_FAILURE});\r\n });\r\n };\r\n\r\nexport const updateParQForm = \r\n (fieldName: any, value: any, errors: string[]): ThunkAction =>\r\n async (dispatch, getState) => {\r\n const form = { ...getState().parQForm.parQFormInputs as FormInput[] };\r\n form[fieldName] = { value: value, errors: errors };\r\n dispatch({ type: ActionTypes.UPDATE_PAR_Q_FORM, payload: form as IParQFormInputs });\r\n }","import React, { useEffect, useState } from \"react\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport { useLocation } from \"react-router\";\r\nimport { Link, Redirect } from \"react-router-dom\";\r\nimport { Widget } from \"../../../Shared/Components/Presentational/Widget\";\r\nimport * as ActionTypes from '../../Redux/ActionTypes';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { SecondaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { CheckoutStates } from \"../../../Constants/CheckoutStates\";\r\nimport { Desktop } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { GetHTMlContentBlockCall } from \"../../../Contentful/Calls/GetHTMLContentBlockCall\";\r\nimport Spinner from \"../../../Shared/Components/Presentational/Spinner\";\r\nimport { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\n\r\n\r\ninterface PaymentSuccessProps extends WithTranslation {\r\n isHeaderOpen: boolean;\r\n isPaymentRequired: boolean;\r\n checkoutSession: CheckoutSession;\r\n}\r\n\r\nconst useQuery = () => new URLSearchParams(useLocation().search);\r\n\r\nconst PaymentSuccess: React.FC = (props) => {\r\n const { t } = props;\r\n const query = useQuery();\r\n const sessionId = query.get(\"session_id\");\r\n const basketId = query.get(\"basket_id\");\r\n const [isValidSession, setIsValidSession] = useState((basketId === props.checkoutSession.sessionId) && (props.checkoutSession.state === CheckoutStates.Active));\r\n\r\n const [contentLoaded, setContentLoaded] = useState(false);\r\n const [paymentSuccess, setPaymentSuccess] = useState(undefined);\r\n\r\n\r\n useEffect(() => {\r\n Promise.all([\r\n getContentBlock(\"My Haulfryn - Membership - Payment Outcomes - Success\", \"paymentSuccess\"),\r\n ]).then(r => {\r\n setPaymentSuccess(r[0]);\r\n setContentLoaded(true);\r\n })\r\n }, []);\r\n\r\n const getContentBlock = async (name: string, label: string) => {\r\n const text = await GetHTMlContentBlockCall(name, label);\r\n return text;\r\n }\r\n\r\n return (\r\n <>\r\n {contentLoaded ? (\r\n
\r\n \r\n
\r\n
\r\n

{paymentSuccess!.title}

\r\n
\r\n
\r\n
\r\n {/*

{props.isPaymentRequired ? t(\"addMembership.completeMembership.messagePaid\") : t(\"addMembership.completeMembership.message\")}

*/}\r\n {documentToReactComponents(paymentSuccess!.content)}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n\r\n \r\n\r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n isPaymentRequired: state.guests.isPaymentRequired,\r\n checkoutSession: state.guests.checkoutSession,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setSessionId: (sessionId: string | null) => {\r\n dispatch({ type: ActionTypes.SET_SESSION_ID, payload: sessionId });\r\n },\r\n }\r\n}\r\n\r\nexport default withTranslation()(connect(mapStateToProps, mapDispatchToProps)(PaymentSuccess));","import React, { useEffect, useState } from \"react\";\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { connect } from \"react-redux\";\r\nimport { useLocation } from \"react-router\";\r\nimport { Link } from \"react-router-dom\";\r\nimport { Widget } from \"../../../Shared/Components/Presentational/Widget\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { PrimaryButton, SecondaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { Desktop } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { GetHTMlContentBlockCall } from \"../../../Contentful/Calls/GetHTMLContentBlockCall\";\r\nimport Spinner from \"../../../Shared/Components/Presentational/Spinner\";\r\nimport { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\n\r\n\r\ninterface PaymentCancelledProps extends WithTranslation {\r\n isHeaderOpen: boolean;\r\n}\r\n\r\nconst useQuery = () => new URLSearchParams(useLocation().search);\r\n\r\nconst PaymentCancelled: React.FC = (props) => {\r\n const { t } = props;\r\n\r\n const [contentLoaded, setContentLoaded] = useState(false);\r\n const [paymentCancelled, setPaymentCancelled] = useState(undefined);\r\n\r\n useEffect(() => {\r\n Promise.all([\r\n getContentBlock(\"My Haulfryn - Membership - Payment Outcomes - Failure\", \"paymentCancelled\"),\r\n ]).then(r => {\r\n setPaymentCancelled(r[0]);\r\n setContentLoaded(true);\r\n })\r\n }, []);\r\n\r\n const getContentBlock = async (name: string, label: string) => {\r\n const text = await GetHTMlContentBlockCall(name, label);\r\n return text;\r\n }\r\n\r\n return (\r\n <>\r\n {contentLoaded ? (\r\n
\r\n \r\n {!props.isHeaderOpen && (\r\n <>\r\n

{t(\"addMembership.payment.title\")}

\r\n \r\n )}\r\n
\r\n\r\n \r\n
\r\n
\r\n

{paymentCancelled!.title}

\r\n
\r\n
\r\n
\r\n {/*

{t(\"addMembership.paymentCancelled.message\")}

*/}\r\n {documentToReactComponents(paymentCancelled!.content)}\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n\r\n \r\n\r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n\r\n }\r\n}\r\n\r\nexport default withTranslation()(connect(mapStateToProps, mapDispatchToProps)(PaymentCancelled));","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetStripeMembershipCheckoutUrlCall extends GetApiCall {\r\n constructor(membershipBasketId: string) {\r\n let url: string = \"Stripe/MembershipCheckoutUrl\";\r\n \r\n let params: any = { membershipBasketId };\r\n\r\n super(url, params);\r\n }\r\n}","import React, { useState } from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { useLocation } from 'react-router';\r\nimport { Link, Redirect } from 'react-router-dom';\r\nimport { PrimaryButton, SecondaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport * as ActionTypes from '../../Redux/ActionTypes';\r\nimport { Get } from '../../../Api/ApiService';\r\nimport { GetStripeMembershipCheckoutUrlCall } from '../../../Api/Calls/GetStripeMembershipCheckoutUrlCall';\r\nimport { CheckoutStates } from '../../../Constants/CheckoutStates';\r\nimport { Desktop } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\n\r\ninterface DocuSignSignedProps extends WithTranslation {\r\n isHeaderOpen: boolean;\r\n docuSignMessage: string | null;\r\n setDocuSignMessage: (message: string | null) => void;\r\n basketId: string;\r\n checkoutSession: CheckoutSession;\r\n isPaymentRequired: boolean;\r\n}\r\n\r\nconst useQuery = () => new URLSearchParams(useLocation().search);\r\n\r\nconst DocuSignSigned: React.FC = (props) => {\r\n const { t } = props;\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [completeMembership, setCompleteMembership] = useState(false);\r\n\r\n const query = useQuery();\r\n const event = query.get(\"event\");\r\n if (props.docuSignMessage !== event) {\r\n props.setDocuSignMessage(event);\r\n }\r\n const sessionId = query.get(\"basket_id\");\r\n\r\n if (completeMembership) {\r\n console.log(`${Routes.PaymentSuccess} + \"?basket_id=\" + ${sessionId}`)\r\n return (\r\n \r\n )\r\n }\r\n\r\n const onClick = () => {\r\n GetStripeUrl();\r\n }\r\n\r\n const GetStripeUrl = () => {\r\n setIsLoading(true);\r\n Get(new GetStripeMembershipCheckoutUrlCall(props.basketId))\r\n .then(response => {\r\n window.location.assign(response.data.CheckoutUrl)\r\n })\r\n .catch(() => {\r\n setIsLoading(false);\r\n })\r\n }\r\n\r\n return (\r\n
\r\n \r\n {!props.isHeaderOpen && (\r\n

{t(\"addMembership.membershipAgreement.title\")}

\r\n )}\r\n
\r\n\r\n \r\n
\r\n
\r\n

Agreement Signed

\r\n
\r\n
\r\n
\r\n

{props.isPaymentRequired ? t(\"addMembership.membershipAgreement.signed.messageToPay\") : t(\"addMembership.membershipAgreement.signed.message\")}

\r\n
\r\n
\r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n docuSignMessage: state.guests.docuSignMessage,\r\n basketId: state.guests.basketId,\r\n checkoutSession: state.guests.checkoutSession,\r\n isPaymentRequired: state.guests.isPaymentRequired,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setDocuSignMessage: (message: string | null) => {\r\n dispatch({ type: ActionTypes.SET_DOCU_SIGN_MESSAGE, payload: message })\r\n }\r\n }\r\n}\r\n\r\nexport default withTranslation()(connect(mapStateToProps, mapDispatchToProps)(DocuSignSigned));","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostSetPaymentMethodCall extends PostApiCall {\r\n constructor(paymentMethodDTO: PaymentMethodDTO) {\r\n let url: string = 'Membership/SetPaymentMethod';\r\n\r\n super(url);\r\n\r\n this.body = paymentMethodDTO;\r\n }\r\n}","import React, { useState } from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\n\r\ninterface MemberBreakdownContainerProps extends WithTranslation {\r\n currencySymbol: string;\r\n details: MemberBreakdownDTO;\r\n isAnnually: boolean;\r\n}\r\n\r\nconst MemberBreakdownContainer: React.FC = (props: MemberBreakdownContainerProps) => {\r\n const { t } = props;\r\n\r\n return (\r\n
\r\n

{props.details.FirstName + \" \" + props.details.LastName}

\r\n

{props.details.MembershipName + \" \" + props.details.TermDescription}

\r\n
    \r\n {props.details.StartDate && (\r\n
  • Membership Start Date: {(new Date(props.details.StartDate)).toDateString()}

  • \r\n )}\r\n {props.details.Notes.length > 0 && props.details.Notes.map(note => (\r\n
  • Note: {note}

  • \r\n ))}\r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default withTranslation()(MemberBreakdownContainer);","export default class FrequencyFormula {\r\n public static readonly OneOff: string = \"OneOff\";\r\n public static readonly Monthly: string = \"Monthly\";\r\n public static readonly Annually: string = \"Annually\";\r\n}","import React, { useState } from 'react';\r\nimport FrequencyFormula from './../../../../Constants/FrequencyFormula';\r\n\r\ninterface MemberPaymentContainerProps {\r\n currencySymbol: string;\r\n membership: MemberBreakdownDTO;\r\n frequencyFormula: string;\r\n}\r\n\r\nconst MemberPaymentContainer: React.FC = (props: MemberPaymentContainerProps) => {\r\n const [paymentPlan, setPaymentPlan] = useState(props.membership.PaymentPlans.find(plan => plan.FrequencyFormula === props.frequencyFormula));\r\n\r\n if (paymentPlan && (paymentPlan.InitialFee > 0 || paymentPlan.InitialPayment > 0 || paymentPlan.RecurringFee > 0)) {\r\n return (\r\n
\r\n {props.frequencyFormula === FrequencyFormula.OneOff ? (\r\n

{props.membership.FirstName + \" \" + props.membership.LastName + \": \" + props.currencySymbol + paymentPlan.InitialPayment}

\r\n ) : (\r\n <>\r\n

{props.membership.FirstName + \" \" + props.membership.LastName}

\r\n
    \r\n {(paymentPlan && paymentPlan.InitialFee > 0) &&\r\n (paymentPlan.RecurringFee > 0 ? (\r\n
  • Initial fee: {props.currencySymbol + paymentPlan.InitialPayment}

  • \r\n ) : (\r\n
  • One off fee: {props.currencySymbol + paymentPlan.InitialPayment}

  • \r\n ))}\r\n {paymentPlan && paymentPlan.RecurringFee > 0 && (\r\n <>\r\n {paymentPlan.FrequencyFormula === FrequencyFormula.Monthly && (\r\n
  • Monthly fee: {props.currencySymbol + paymentPlan.RecurringFee}

  • \r\n )}\r\n {paymentPlan.FrequencyFormula === FrequencyFormula.Annually && (\r\n
  • Yearly fee: {props.currencySymbol + paymentPlan.RecurringFee}

  • \r\n )}\r\n \r\n )}\r\n
\r\n \r\n )}\r\n
\r\n )\r\n } else {\r\n return null\r\n }\r\n}\r\n\r\nexport default MemberPaymentContainer;","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetUpdateTermsAndConditionsSignedDateCall extends GetApiCall {\r\n constructor(basketId: string) {\r\n let url: string = \"Membership/UpdateTermsAndConditionsSignedDate\";\r\n\r\n let params: any = { basketId };\r\n\r\n super(url, params);\r\n }\r\n}","import FrequencyFormula from \"../../Constants/FrequencyFormula\";\r\nimport { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetStripeCheckoutUrlsCall extends GetApiCall {\r\n\r\n constructor(membershipBasketId: string, frequencyFormula: FrequencyFormula) {\r\n let url: string = \"Stripe/MembershipCheckoutUrls\";\r\n\r\n let params: any = { membershipBasketId };\r\n\r\n super(url, params);\r\n }\r\n}","import { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport React, { ChangeEvent, Component, useEffect, useState } from \"react\";\r\nimport { PrimaryButton } from \"../../../../Shared/Components/Presentational/Buttons\";\r\nimport { connect } from \"react-redux\";\r\nimport { Widget } from \"../../../../Shared/Components/Presentational/Widget\";\r\nimport { PostSetPaymentMethodCall } from \"../../../../Api/Calls/PostSetPaymentMethodCall\";\r\nimport { Get, Post } from \"../../../../Api/ApiService\";\r\nimport { Desktop, Mobile } from \"../../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { GetHTMlContentBlockCall } from \"../../../../Contentful/Calls/GetHTMLContentBlockCall\";\r\nimport { documentToReactComponents } from \"@contentful/rich-text-react-renderer\";\r\nimport Spinner from \"../../../../Shared/Components/Presentational/Spinner\";\r\nimport * as ActionTypes from '../../../Redux/ActionTypes';\r\nimport MemberBreakdownContainer from \"./MemberBreakdownContainer\";\r\nimport { FontAwesomeIcon } from \"@fortawesome/react-fontawesome\";\r\nimport { faChevronDown } from \"@fortawesome/free-solid-svg-icons\";\r\nimport MemberPaymentContainer from \"./MemberPaymentContainer\";\r\nimport { GetUpdateTermsAndConditionsSignedDateCall } from \"../../../../Api/Calls/GetUpdateTermsAndConditionsSignedDateCall\";\r\nimport FrequencyFormula from './../../../../Constants/FrequencyFormula';\r\nimport { GetStripeCheckoutUrlsCall } from \"../../../../Api/Calls/GetStripeCheckoutUrlsCall\";\r\nimport FriendMembershipModal from \"../../../../Modal/Components/Container/FriendMembershipQuotaModal\";\r\nimport { INLINES } from '@contentful/rich-text-types';\r\n\r\ninterface SelectPaymentProps extends WithTranslation {\r\n isHeaderOpen: boolean;\r\n membershipForm?: any;\r\n basketId: string;\r\n paymentDetails: PaymentBreakdownDTO;\r\n}\r\n\r\nconst SelectPayment: React.FC = (props: SelectPaymentProps) => {\r\n const { t } = props;\r\n const [isLoading, setIsLoading] = useState(false);\r\n\r\n const [titleDescription, setTitleDescription] = useState(undefined as ContentfulContentObject | undefined);\r\n const [noPaymentDescription, setNoPaymentDescription] = useState(undefined as ContentfulContentObject | undefined);\r\n const [paymentDescription, setPaymentDescription] = useState(undefined as ContentfulContentObject | undefined);\r\n const [contentLoaded, setContentLoaded] = useState(false);\r\n\r\n const [isAgreementChecked, setisAgreementChecked] = useState(false);\r\n const [paymentPlan, setPaymentPlan] = useState(undefined);\r\n\r\n const [datesExceededFriendQuota, setDatesExceededFriendQuota] = useState();\r\n const [isFriendQuotaModalOpen, setIsFriendQuotaModalOpen] = useState(false);\r\n\r\n\r\n useEffect(() => {\r\n Promise.all([\r\n getContentBlock(\"My Haulfryn - Membership - Finalise Memberships - Title and description\", \"titleDescription\"),\r\n getContentBlock(\"My Haulfryn - Membership - Finalise Memberships - No payment due body & button\", \"noPaymentDescription\"),\r\n getContentBlock(\"My Haulfryn - Membership - Finalise Memberships - Payment due body & button\", \"paymentDescription\"),\r\n ]).then(r => {\r\n setTitleDescription(r[0]);\r\n setNoPaymentDescription(r[1]);\r\n setPaymentDescription(r[2]);\r\n setContentLoaded(true);\r\n })\r\n }, []);\r\n\r\n const options = {\r\n renderNode: {\r\n [INLINES. HYPERLINK]: ({ data }: any, children: any) => {\r\n return {children};\r\n }\r\n }\r\n}\r\n\r\n const getContentBlock = async (name: string, label: string) => {\r\n const text = await GetHTMlContentBlockCall(name, label);\r\n return text;\r\n }\r\n\r\n const setPaymentMethod = async (basketId: string, paymentMethod: string): Promise => {\r\n let paymentMethodDTO = { basketId: basketId, paymentMethod: paymentMethod } as PaymentMethodDTO;\r\n\r\n let value = await Post(new PostSetPaymentMethodCall(paymentMethodDTO))\r\n .then(() => {\r\n return true;\r\n })\r\n .catch(() => {\r\n return false;\r\n })\r\n\r\n return value;\r\n }\r\n\r\n const updateTermsAndConditionsSignedDate = async (basketId: string): Promise => {\r\n let value = await Get(new GetUpdateTermsAndConditionsSignedDateCall(basketId))\r\n .then(() => {\r\n return true;\r\n })\r\n .catch(() => {\r\n return false;\r\n })\r\n return value;\r\n }\r\n\r\n const finaliseAndPay = async () => {\r\n setIsLoading(true);\r\n await updateTermsAndConditionsSignedDate(props.basketId);\r\n\r\n let frequencyFormula: FrequencyFormula;\r\n\r\n if (paymentPlan) {\r\n frequencyFormula = props.paymentDetails.PaymentTypes[0].FrequencyFormula\r\n } else {\r\n frequencyFormula = FrequencyFormula.OneOff;\r\n }\r\n\r\n if (paymentPlan) {\r\n let value = await setPaymentMethod(paymentPlan.basketId, paymentPlan.paymentMethod);\r\n } else {\r\n if (props.paymentDetails.PaymentTypes.length === 1) {\r\n if (props.paymentDetails.PaymentTypes[0].FrequencyFormula === FrequencyFormula.OneOff) {\r\n let value = await setPaymentMethod(props.basketId, \"Card\");\r\n } else if (props.paymentDetails.PaymentTypes[0].FrequencyFormula === FrequencyFormula.Monthly) {\r\n let value = await setPaymentMethod(props.basketId, \"DirectDebit\");\r\n } else if (props.paymentDetails.PaymentTypes[0].FrequencyFormula === FrequencyFormula.Annually) {\r\n let value = await setPaymentMethod(props.basketId, \"Card\");\r\n }\r\n }\r\n else {\r\n setIsLoading(false);\r\n }\r\n }\r\n\r\n GetStripeUrl(frequencyFormula);\r\n }\r\n\r\n const GetStripeUrl = (frequencyFormula: FrequencyFormula) => {\r\n Get(new GetStripeCheckoutUrlsCall(props.basketId, frequencyFormula))\r\n .then(response => {\r\n let data = (response.data as MembershipPaymentLinksDTO);\r\n if (data.CheckoutRequired === undefined) {\r\n let dates = response.data as FriendQuotaExceededDTO[];\r\n dates.map(quota => { quota.dateExceeded = new Date(quota.dateExceeded) });\r\n setDatesExceededFriendQuota(dates);\r\n setIsLoading(false);\r\n setIsFriendQuotaModalOpen(true);\r\n } else {\r\n if (data.CheckoutRequired) {\r\n window.location.assign(data.InitialCheckoutLink);\r\n } else {\r\n window.location.assign(data.CompleteLink);\r\n }\r\n }\r\n })\r\n .catch(() => {\r\n setIsLoading(false);\r\n })\r\n }\r\n\r\n const onAgreementSeen = (event: React.ChangeEvent) => {\r\n if (event.target.checked) {\r\n setisAgreementChecked(true);\r\n } else {\r\n setisAgreementChecked(false);\r\n }\r\n };\r\n\r\n const getFormulaText = (frequencyFormula: FrequencyFormula) => {\r\n if (frequencyFormula === FrequencyFormula.OneOff) {\r\n return \"One Off\";\r\n } else if (frequencyFormula === FrequencyFormula.Monthly) {\r\n return \"Monthly\";\r\n } else {\r\n return \"Yearly\";\r\n }\r\n }\r\n\r\n const updateValue = (e: ChangeEvent) => {\r\n if (e.target.value === \"0\") {\r\n setPaymentPlan({ basketId: props.basketId, paymentMethod: \"Card\" });\r\n } else if (e.target.value === \"1\") {\r\n setPaymentPlan({ basketId: props.basketId, paymentMethod: \"DirectDebit\" });\r\n } else if (e.target.value === \"2\") {\r\n setPaymentPlan({ basketId: props.basketId, paymentMethod: \"Card\" });\r\n }\r\n }\r\n\r\n const isPaymentRequired = (paymentTypes: PaymentTypeDTO[]) => {\r\n for (let i = 0; i < paymentTypes.length; i++) {\r\n if (paymentTypes[i].DueToday > 0) {\r\n return true;\r\n } else if (paymentTypes[i].Recurring > 0) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n return (\r\n <>\r\n {contentLoaded ? (\r\n
\r\n \r\n {!props.isHeaderOpen && (\r\n <>\r\n

{t(\"finaliseMemberships.title\")}

\r\n

{t(\"finaliseMembership.message\")}

\r\n \r\n )}\r\n
\r\n\r\n \r\n
\r\n\r\n
\r\n
\r\n

{titleDescription!.title}

\r\n
\r\n
\r\n\r\n
\r\n {documentToReactComponents(titleDescription!.content, options)}\r\n
\r\n\r\n {props.paymentDetails && (\r\n <>\r\n
\r\n
\r\n
\r\n Memberships \r\n {props.paymentDetails.Memberships.map(member => (\r\n \r\n ))}\r\n
\r\n {props.paymentDetails.PaymentTypes.length > 0 && isPaymentRequired(props.paymentDetails.PaymentTypes) && (\r\n <>\r\n {props.paymentDetails.PaymentTypes.length > 1 && (\r\n

Payment Plans:

\r\n )}\r\n {props.paymentDetails.PaymentTypes.map(paymentType => (\r\n <>\r\n {props.paymentDetails.PaymentTypes.length > 1 && (\r\n

{getFormulaText(paymentType.FrequencyFormula) + \":\"}

\r\n )}\r\n
\r\n \r\n {paymentType.DueToday > 0 && (\r\n

Due today: {props.paymentDetails.PaymentCurrencySymbol + paymentType.DueToday}

\r\n )}\r\n {paymentType.Recurring > 0 && (\r\n

{getFormulaText(paymentType.FrequencyFormula) + \" fee: \" + props.paymentDetails.PaymentCurrencySymbol + paymentType.Recurring}

\r\n )}\r\n
\r\n {props.paymentDetails.Memberships.map(membership => (\r\n \r\n ))}\r\n {paymentType.NextPaymentDate && (\r\n

Your next payment will be taken {(new Date(paymentType.NextPaymentDate)).toDateString()}

\r\n )}\r\n
\r\n
\r\n
\r\n \r\n ))}\r\n \r\n )}\r\n\r\n
\r\n {props.paymentDetails.PaymentTypes.length > 1 && isPaymentRequired(props.paymentDetails.PaymentTypes) && (\r\n <>\r\n \r\n
\r\n {props.paymentDetails.PaymentTypes.map(paymentType => (\r\n
\r\n \r\n {getFormulaText(paymentType.FrequencyFormula)}\r\n
\r\n ))}\r\n
\r\n \r\n )}\r\n
\r\n\r\n
\r\n\r\n

\r\n {(props.paymentDetails.PaymentTypes.length > 0 && isPaymentRequired(props.paymentDetails.PaymentTypes)) ? documentToReactComponents(paymentDescription!.content, options) : documentToReactComponents(noPaymentDescription!.content, options)}\r\n

\r\n\r\n
\r\n \r\n \r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n 0 && isPaymentRequired(props.paymentDetails.PaymentTypes)) ? paymentDescription!.title : noPaymentDescription!.title}\r\n onClick={finaliseAndPay}\r\n isLoading={isLoading}\r\n disabled={isLoading || !isAgreementChecked}\r\n width=\"300px\"\r\n />\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n {/*
\r\n
\r\n \r\n
\r\n
*/}\r\n {/*
*/}\r\n
\r\n 0 && isPaymentRequired(props.paymentDetails.PaymentTypes)) ? paymentDescription!.title : noPaymentDescription!.title}\r\n onClick={finaliseAndPay}\r\n isLoading={isLoading}\r\n disabled={isLoading || !isAgreementChecked}\r\n width=\"500px\"\r\n />\r\n
\r\n {/*
*/}\r\n
\r\n
\r\n \r\n )}\r\n
\r\n \r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n {datesExceededFriendQuota && (\r\n setIsFriendQuotaModalOpen(false)}\r\n datesExceededFriendQuota={datesExceededFriendQuota}\r\n isFinalisePage={true}\r\n />\r\n )}\r\n \r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n basketId: state.guests.basketId,\r\n paymentDetails: state.guests.paymentSummary\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setPaymentDetailsDTO: (paymentDetails: PaymentBreakdownDTO) => {\r\n dispatch({ type: ActionTypes.SET_PAYMENT_SUMMARY_DTO, payload: paymentDetails });\r\n return Promise.resolve();\r\n },\r\n }\r\n}\r\n\r\nexport default withTranslation()(connect(mapStateToProps, mapDispatchToProps)(SelectPayment));\r\n\r\nfunction dispatch(arg0: { type: any; payload: any; }) {\r\n throw new Error(\"Function not implemented.\");\r\n}\r\n","import React, { useState } from 'react';\r\nimport { withTranslation, WithTranslation } from \"react-i18next\";\r\nimport { Link, Redirect } from \"react-router-dom\";\r\nimport { PrimaryButton, SecondaryButton } from \"../../../Shared/Components/Presentational/Buttons\";\r\nimport { Desktop, Mobile } from \"../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { Widget } from \"../../../Shared/Components/Presentational/Widget\";\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { connect } from \"react-redux\";\r\nimport './MembershipAgreement.scss'\r\nimport * as ActionTypes from '../../Redux/ActionTypes';\r\n\r\ninterface MembershipAgreementProps extends WithTranslation {\r\n isHeaderOpen: boolean;\r\n basketId: string;\r\n}\r\n\r\nconst MembershipAgreement: React.FC = (props) => {\r\n\r\n const { t } = props;\r\n\r\n\r\n\r\n\r\n return (\r\n <>\r\n
\r\n \r\n \r\n
\r\n {!props.isHeaderOpen && (\r\n

{t(\"addMembership.membershipAgreement.title\")}

\r\n )}\r\n
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
\r\n
\r\n \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"\r\n

\r\n \"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?\"\r\n

\r\n \"But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?\"\r\n

\r\n \"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.\"\r\n

\r\n \"On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains.\"\r\n \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"\r\n

\r\n \"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?\"\r\n

\r\n \"But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?\"\r\n

\r\n \"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.\"\r\n

\r\n \"On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains.\"\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
\r\n
\r\n \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"\r\n

\r\n \"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?\"\r\n

\r\n \"But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?\"\r\n

\r\n \"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.\"\r\n

\r\n \"On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains.\"\r\n \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\"\r\n

\r\n \"Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?\"\r\n

\r\n \"But I must explain to you how all this mistaken idea of denouncing pleasure and praising pain was born and I will give you a complete account of the system, and expound the actual teachings of the great explorer of the truth, the master-builder of human happiness. No one rejects, dislikes, or avoids pleasure itself, because it is pleasure, but because those who do not know how to pursue pleasure rationally encounter consequences that are extremely painful. Nor again is there anyone who loves or pursues or desires to obtain pain of itself, because it is pain, but because occasionally circumstances occur in which toil and pain can procure him some great pleasure. To take a trivial example, which of us ever undertakes laborious physical exercise, except to obtain some advantage from it? But who has any right to find fault with a man who chooses to enjoy a pleasure that has no annoying consequences, or one who avoids a pain that produces no resultant pleasure?\"\r\n

\r\n \"At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos dolores et quas molestias excepturi sint occaecati cupiditate non provident, similique sunt in culpa qui officia deserunt mollitia animi, id est laborum et dolorum fuga. Et harum quidem rerum facilis est et expedita distinctio. Nam libero tempore, cum soluta nobis est eligendi optio cumque nihil impedit quo minus id quod maxime placeat facere possimus, omnis voluptas assumenda est, omnis dolor repellendus. Temporibus autem quibusdam et aut officiis debitis aut rerum necessitatibus saepe eveniet ut et voluptates repudiandae sint et molestiae non recusandae. Itaque earum rerum hic tenetur a sapiente delectus, ut aut reiciendis voluptatibus maiores alias consequatur aut perferendis doloribus asperiores repellat.\"\r\n

\r\n \"On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains.\"\r\n
\r\n\r\n
\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n \r\n
\r\n \r\n );\r\n\r\n\r\n\r\n}\r\n\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n basketId: state.guests.basketId,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n\r\n }\r\n}\r\n\r\nexport default withTranslation()(connect(mapStateToProps, mapDispatchToProps)(MembershipAgreement));","import React from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { Link } from 'react-router-dom';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { Desktop } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\n\r\ninterface InvalidSessionPageProps extends WithTranslation {\r\n isHeaderOpen: boolean;\r\n}\r\n\r\nconst InvalidSessionPage: React.FC = (props) => {\r\n const { t } = props;\r\n\r\n return (\r\n
\r\n \r\n {!props.isHeaderOpen && (\r\n

{t(\"addMembership.membershipAgreement.title\")}

\r\n )}\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n

{t(\"finaliseMemberships.invalidSessionPage.title\")}

\r\n
\r\n
\r\n
\r\n\r\n
\r\n

{t(\"finaliseMemberships.invalidSessionPage.message\")}

\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n \r\n\r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n\r\n }\r\n}\r\n\r\nexport default withTranslation()(connect(mapStateToProps, mapDispatchToProps)(InvalidSessionPage));","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostConfirmMemberAccountCall extends PostApiCall {\r\n constructor(memberDetails: ConfirmMemberDetailsDTO) {\r\n let url: string = 'account/confirm-member-account';\r\n\r\n super(url);\r\n\r\n this.body = memberDetails;\r\n }\r\n}","import React, { useEffect, useState } from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { Link, Redirect } from 'react-router-dom';\r\nimport InputField from '../../../Guests/Components/Presentational/AddMembershipSubPages/FormInputs/InputField';\r\nimport { VerticalBackground } from '../../../Shared/Components/Presentational/Backgrounds';\r\nimport { PrimaryButton } from '../../../Shared/Components/Presentational/Buttons';\r\nimport { Desktop } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { hasValue } from '../../../Shared/Utilities/Validation';\r\nimport { useLocation } from 'react-router';\r\nimport \"./ConfirmMembership.scss\";\r\nimport { PostConfirmMemberAccountCall } from '../../../Api/Calls/PostConfirmMemberAccountCall';\r\nimport { Post } from '../../../Api/ApiService';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport { GetHTMlContentBlockCall } from '../../../Contentful/Calls/GetHTMLContentBlockCall';\r\nimport Spinner from '../../../Shared/Components/Presentational/Spinner';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport PasswordRequirements from '../../../Shared/Components/Presentational/PasswordRequirements';\r\n\r\ninterface ConfirmMembershipProps extends WithTranslation {\r\n isLoggedIn: boolean;\r\n location: any;\r\n}\r\n\r\nconst useQuery = () => new URLSearchParams(useLocation().search);\r\n\r\nconst ConfirmMembership: React.FC = (props) => {\r\n const { t } = props;\r\n const { location } = props;\r\n\r\n const [response, setResponse] = useState(\"\");\r\n const [createPassword, setCreatePassword] = useState(undefined as ContentfulContentObject | undefined);\r\n const [passwordConfirmed, setPasswordConfirmed] = useState(undefined as ContentfulContentObject | undefined);\r\n const [contentLoaded, setContentLoaded] = useState(false);\r\n\r\n const query = useQuery();\r\n const userId = query.get(\"userId\");\r\n const code = query.get(\"code\");\r\n\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [apiError, setApiError] = useState();\r\n\r\n const validators = [{ name: \"hasValue\", validator: hasValue }] as Validator[];\r\n\r\n const [showErrors, setShowErrors] = useState(false);\r\n const [isPasswordValid, setPasswordValid] = useState(false);\r\n const [form, setForm] = useState({\r\n password: { value: \"\", errors: [\"hasValue\"] } as FormInput,\r\n confirmPassword: { value: \"\", errors: [\"hasValue\"] } as FormInput,\r\n });\r\n\r\n const onInput = (value: any, name: any, errors: string[]) => {\r\n setForm({ ...form, [name]: { value: value, errors: errors } });\r\n }\r\n\r\n const getContentBlock = async (name: string, label: string) => {\r\n const text = await GetHTMlContentBlockCall(name, label);\r\n return text;\r\n }\r\n\r\n useEffect(() => {\r\n Promise.all([\r\n getContentBlock(\"My Haulfryn - Membership - Password - Create\", \"createPassword\"),\r\n getContentBlock(\"My Haulfryn - Membership - Password - Confirmation\", \"passwordConfirmed\"),\r\n ]).then(r => {\r\n setCreatePassword(r[0]);\r\n setPasswordConfirmed(r[1]);\r\n setContentLoaded(true);\r\n })\r\n }, [])\r\n\r\n const confirmMembership = async () => {\r\n let invalid = false;\r\n if (form.password.errors && form.password.errors.length > 0) {\r\n invalid = true;\r\n } else if (form.confirmPassword.errors && form.confirmPassword.errors.length > 0) {\r\n invalid = true;\r\n }\r\n if (form.password && form.confirmPassword) {\r\n if (form.password.value !== form.confirmPassword.value) {\r\n setForm({ ...form, confirmPassword: { value: form.confirmPassword.value, errors: [\"confirmDoesNotMatchPass\"] } });\r\n invalid = true;\r\n } else {\r\n setForm({ ...form, confirmPassword: { value: form.confirmPassword.value, errors: [] } });\r\n invalid = false;\r\n }\r\n }\r\n\r\n if (invalid) {\r\n setShowErrors(true);\r\n return;\r\n } else {\r\n setShowErrors(false);\r\n }\r\n\r\n let memberDetails = createMemberDetailsDTO(userId!, code!, form.password.value!);\r\n setIsLoading(true);\r\n let response = await postConfirmMembership(memberDetails);\r\n setResponse(response);\r\n }\r\n\r\n const createMemberDetailsDTO = (userId: string, code: string, password: string): ConfirmMemberDetailsDTO => {\r\n return {\r\n userId: userId,\r\n code: code,\r\n password: password,\r\n }\r\n }\r\n\r\n const postConfirmMembership = async (memberDetails: ConfirmMemberDetailsDTO): Promise => {\r\n let response = await Post(new PostConfirmMemberAccountCall(memberDetails))\r\n .then((r) => {\r\n setApiError(\"\");\r\n return \"200\";\r\n })\r\n .catch((error) => {\r\n setApiError(error.response.data ? error.response.data.FriendlyMessage : \"Password request failed, please ensure you follow the requirements stated above and try again\");\r\n setIsLoading(false);\r\n return error.response.status;\r\n })\r\n return response;\r\n }\r\n\r\n if (props.isLoggedIn) {\r\n return (\r\n )\r\n } else if (response === \"200\") {\r\n return (\r\n <>\r\n {contentLoaded ? (\r\n
\r\n \r\n \r\n

{t('confirmMembership.verticalBackground.title')}

\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{passwordConfirmed!.title}

\r\n
\r\n
\r\n
\r\n {documentToReactComponents(passwordConfirmed!.content)}\r\n
\r\n
\r\n \r\n \r\n \r\n
\r\n {apiError !== \"\" &&\r\n

{apiError}

\r\n }\r\n
\r\n
\r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n \r\n )\r\n } else {\r\n return (\r\n <>\r\n {contentLoaded ? (\r\n
\r\n \r\n \r\n

{t('confirmMembership.verticalBackground.title')}

\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

{createPassword!.title}

\r\n
\r\n
\r\n {/*
\r\n {documentToReactComponents(createPassword!.content)}\r\n
*/}\r\n setPasswordValid(isValid)} />\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n \r\n
\r\n {apiError !== \"\" &&\r\n

{apiError}

\r\n }\r\n
\r\n
\r\n
\r\n ) : (\r\n
\r\n \r\n
\r\n )}\r\n \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n isLoggedIn: state.login.loggedIn,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n }\r\n}\r\n\r\nexport default withTranslation()(connect(mapStateToProps, mapDispatchToProps)(ConfirmMembership));","import React, { useEffect, useState } from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { PrimaryButton } from '../../../../Shared/Components/Presentational/Buttons';\r\nimport { Desktop, Mobile } from '../../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport './MembershipPageStyles.scss';\r\nimport './RenewMembershipStyles.scss';\r\nimport DropdownList from '../../../../Shared/Components/Presentational/DropdownList';\r\nimport { Entry } from 'contentful';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\n\r\ninterface SelectMembershipTypeFormProps extends WithTranslation {\r\n contentfulMembershipTypes: Entry[];\r\n termDurations: DropdownListOption[][];\r\n ownerMembershipsAvailability: OwnerMembershipAvailabilityDTO;\r\n onValueSelected: (membershipType: string, termFormula: string) => void;\r\n}\r\n\r\nconst SelectMembershipTypeForm: React.FC = (props: SelectMembershipTypeFormProps) => {\r\n const { t } = props;\r\n const [selectedDurations, setSelectedDurations] = useState([]);\r\n const [noSelectionError, setNoSelectionError] = useState(false);\r\n\r\n // TODO - check if we can just use ownerMembershipsAvailability.available\r\n const ownerMembershipsLeft = () => {\r\n return !!props.ownerMembershipsAvailability &&\r\n props.ownerMembershipsAvailability.numberUsed < props.ownerMembershipsAvailability.allocated\r\n }\r\n\r\n const calcColumns = () => {\r\n let columnPercentages = \"\";\r\n if (props.contentfulMembershipTypes) {\r\n let columns = props.contentfulMembershipTypes.length;\r\n let percentage = 100 / columns;\r\n for (let i = 0; i < columns; i++) {\r\n columnPercentages += percentage.toString() + \"% \";\r\n }\r\n }\r\n return columnPercentages;\r\n }\r\n\r\n useEffect(() => {\r\n // The annual membership option only has one term length so there is no drop down for it\r\n // So, this bit of code preselects the term duration for the annual membership to 'Annual'\r\n let array: any[] = [];\r\n for (let i = 0; i < props.contentfulMembershipTypes.length; i++) {\r\n if (props.termDurations[i].length === 1) {\r\n array[i] = props.termDurations[i][0];\r\n }\r\n }\r\n setSelectedDurations(array);\r\n }, [props.termDurations]);\r\n\r\n const handleMembershipSelection = (type: number) => {\r\n if (selectedDurations[type] !== undefined) {\r\n const membershipType = props.contentfulMembershipTypes[type].sys.id;\r\n const termFormula = selectedDurations[type];\r\n props.onValueSelected(membershipType, termFormula);\r\n } else {\r\n setNoSelectionError(true);\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n \r\n
\r\n {props.contentfulMembershipTypes.map(type => (\r\n
\r\n

{type.fields.publicName}

\r\n {type.fields.description.content && (\r\n
\r\n {documentToReactComponents(type.fields.description)}\r\n
\r\n )}\r\n
\r\n ))}\r\n\r\n {props.contentfulMembershipTypes.map((type, key) => (\r\n
\r\n {(props.termDurations && props.termDurations[key] && props.termDurations[key].length > 1) ? (\r\n
\r\n setSelectedDurations({ ...selectedDurations, [key]: term })}\r\n selectedOption={selectedDurations[key]}\r\n />\r\n
\r\n ) : (props.termDurations && props.termDurations[key] && props.termDurations[key].length === 1) ? (\r\n
\r\n

{props.termDurations[key][0].label}

\r\n
\r\n ) : (\r\n
\r\n

Term Unknown

\r\n
\r\n )}\r\n
\r\n ))}\r\n\r\n {props.contentfulMembershipTypes.map((type, key) => (\r\n
\r\n
\r\n {type.fields.debitsQuota ? (\r\n

\r\n {props.ownerMembershipsAvailability.numberUsed} of {props.ownerMembershipsAvailability.allocated} Club memberships used\r\n

\r\n ) : (\r\n

\r\n )}\r\n
\r\n
\r\n ))}\r\n\r\n {props.contentfulMembershipTypes.map((type, key) => (\r\n
\r\n
\r\n {(!type.fields.debitsQuota || ownerMembershipsLeft()) ? (\r\n
\r\n
\r\n {\r\n handleMembershipSelection(key);\r\n }}\r\n className={\"membership-btn\"}\r\n />\r\n
\r\n\r\n
\r\n ) : (\r\n

No Club memberships available

\r\n )}\r\n
\r\n
\r\n ))}\r\n
\r\n {noSelectionError &&\r\n <>\r\n
\r\n

\r\n {\r\n // props.selectedContentfulMembershipTypeId && \r\n t(\"addMembership.errors.isMembershipType\")}\r\n

\r\n \r\n }\r\n\r\n
\r\n\r\n \r\n
\r\n {props.contentfulMembershipTypes.map((type, key) => (\r\n
\r\n

{type.fields.publicName}

\r\n {type.fields.description.content && (\r\n
\r\n {documentToReactComponents(type.fields.description)}\r\n
\r\n )}\r\n\r\n {(props.termDurations && props.termDurations[key] && props.termDurations[key].length > 1) ? (\r\n
\r\n setSelectedDurations({ ...selectedDurations, [key]: term })}\r\n selectedOption={selectedDurations[key]}\r\n />\r\n
\r\n ) : (props.termDurations && props.termDurations[key] && props.termDurations[key].length === 1) ? (\r\n
\r\n

{props.termDurations[key][0].label}

\r\n
\r\n ) : (\r\n
\r\n

Term Unknown

\r\n
\r\n )}\r\n\r\n
\r\n {(!type.fields.debitsQuota ||\r\n props.ownerMembershipsAvailability.numberUsed < props.ownerMembershipsAvailability.allocated) ? (\r\n
\r\n {\r\n handleMembershipSelection(key);\r\n }}\r\n className={\"membership-btn\"}\r\n />\r\n
\r\n {type.fields.debitsQuota ? (\r\n

\r\n {props.ownerMembershipsAvailability && props.ownerMembershipsAvailability.numberUsed} of {props.ownerMembershipsAvailability && props.ownerMembershipsAvailability.allocated} Club memberships used\r\n

\r\n ) : (\r\n

\r\n )}\r\n
\r\n
\r\n ) : (\r\n

No Club memberships available

\r\n )}\r\n
\r\n
\r\n ))}\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default withTranslation()(SelectMembershipTypeForm);","import React, { useEffect, useState } from 'react';\r\nimport { Redirect, RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport { useLocation } from \"react-router\";\r\nimport SelectMembershipTypeForm from '../Presentational/AddMembershipSubPages/SelectMembershipTypeForm';\r\nimport { compose } from \"redux\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { connect } from 'react-redux';\r\nimport { Entry } from 'contentful';\r\nimport { getContentfulMembershipTypes } from '../../Redux/ActionCreators';\r\nimport { getOwnerMembershipAvailability } from '../../../User/Redux/ActionCreators';\r\nimport RenewalSummary from '../Presentational/AddMembershipSubPages/RenewalSummary';\r\nimport { Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport { Desktop } from '../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { GetMemberByIdCall } from '../../../Api/Calls/GetMemberIdByCall';\r\nimport { Get, Post } from '../../../Api/ApiService';\r\nimport { PostMembershipRenewalCall } from '../../../Api/Calls/PostMembershipRenewalCall';\r\nimport * as Routes from '../../../Constants/Routes';\r\nimport { PostPhotoFacialRecognitionCheckCall } from '../../../Api/Calls/PostPhotoFacialRecognitionCheckCall';\r\nimport { GetPhotoByMemberIdCall } from '../../../Api/Calls/GetPhotoByMemberIdCall';\r\nimport { GetApiCall } from '../../../Api/Calls/ApiCall';\r\n\r\ninterface RenewMembershipProps extends RouteComponentProps {\r\n contentfulMembershipTypes: Entry[];\r\n termDurations: DropdownListOption[][] | undefined;\r\n ownerMembershipsAvailability: OwnerMembershipAvailabilityDTO;\r\n setContentfulMembershipTypes: () => void;\r\n getOwnerMembershipAvailability: () => void;\r\n isHeaderOpen: boolean;\r\n}\r\n\r\nenum RenewPage {\r\n MembershipType,\r\n Summary\r\n}\r\n\r\nconst useQuery = () => new URLSearchParams(useLocation().search);\r\n\r\nconst RenewMembership: React.FC = (props: RenewMembershipProps) => {\r\n const query = useQuery();\r\n const [page, setPage] = useState(RenewPage.MembershipType);\r\n const [memberId, setMemberId] = useState()\r\n const [membershipType, setMembershipType] = useState();\r\n const [termFormula, setTermFormula] = useState();\r\n const [membershipStartDate, setMembershipStartDate] = useState();\r\n const [membershipTypeName, setMembershipTypeName] = useState();\r\n const [member, setMember] = useState();\r\n const [membershipTermLabel, setMembershipTermLabel] = useState();\r\n const [editMemberChecked, setEditMemberChecked] = useState(false);\r\n const [redirectToDashboard, setRedirectToDashboard] = useState(false);\r\n const [redirectToEditMember, setRedirectToEditMember] = useState(false);\r\n const [existingEndDate, setExistingEndDate] = useState(new Date());\r\n\r\n const [fileUrl, setFileUrl] = useState();\r\n const [newFile, setFile] = useState();\r\n\r\n useEffect(() => {\r\n props.getOwnerMembershipAvailability();\r\n props.setContentfulMembershipTypes();\r\n \r\n setMembershipStartDate(new Date());\r\n \r\n const id = query.get('member-id');\r\n if (!!id) {\r\n setMemberId(id);\r\n getMemberCall(id);\r\n }\r\n\r\n const existingEndDate = query.get('existingEndDate');\r\n if (existingEndDate) {\r\n let endDate = new Date(existingEndDate);\r\n endDate.setDate(endDate.getDate() + 1);\r\n setExistingEndDate(endDate);\r\n setMembershipStartDate(endDate);\r\n }\r\n\r\n }, []);\r\n\r\n useEffect(() => {\r\n getPhotoPassCall();\r\n }, [memberId]);\r\n\r\n const getPhotoPassCall = () => Get(new GetPhotoByMemberIdCall(memberId!))\r\n .then(result => {\r\n setFileUrl(result.data.PhotoUrl);\r\n })\r\n .catch(() => { });\r\n\r\n const onMembershipTypeSelected = (membershipTypeId: string, termFormula: any) => {\r\n setMembershipType(membershipTypeId);\r\n setTermFormula(termFormula.value);\r\n setMembershipTermLabel(termFormula.label);\r\n setPage(RenewPage.Summary);\r\n const constentfulMembershipType = props.contentfulMembershipTypes\r\n .filter(type => type.sys.id === membershipTypeId);\r\n setMembershipTypeName(constentfulMembershipType[0].fields.publicName);\r\n }\r\n\r\n const onStartDateUpdate = (startDate: Date) => {\r\n setMembershipStartDate(startDate);\r\n }\r\n\r\n const onSummaryBackButton = () => {\r\n setPage(RenewPage.MembershipType);\r\n }\r\n\r\n const onConfirm = async () => {\r\n if (memberId &&\r\n termFormula &&\r\n membershipStartDate &&\r\n membershipType) {\r\n\r\n const dto: RenewMembershipDTO = {\r\n memberId: memberId,\r\n termFormula: termFormula,\r\n startDate: membershipStartDate,\r\n contentfulMembershipTypeId: membershipType,\r\n }\r\n\r\n await Post(new PostPhotoFacialRecognitionCheckCall(memberId))\r\n .then(r => {\r\n Post(new PostMembershipRenewalCall(dto))\r\n .then(r => {\r\n editMemberChecked ? setRedirectToEditMember(true) : setRedirectToDashboard(true)\r\n })\r\n .catch(e => {});\r\n })\r\n .catch(e => {\r\n setRedirectToEditMember(true)\r\n });\r\n\r\n \r\n \r\n }\r\n }\r\n\r\n const getMemberCall = (memberId: string) => Get(new GetMemberByIdCall(memberId))\r\n .then(result => {\r\n setMember(result.data)\r\n })\r\n .catch((e) => {console.log(e)});\r\n\r\n return (\r\n <>\r\n {redirectToDashboard && }\r\n {\r\n redirectToEditMember && \r\n \r\n }\r\n\r\n
\r\n \r\n {!props.isHeaderOpen && (\r\n <>\r\n

{\"Renew Membership\"}

\r\n
\r\n Complete the information to renew the selected membership.\r\n
\r\n \r\n )}\r\n
\r\n\r\n \r\n
\r\n {\r\n page === RenewPage.MembershipType &&\r\n props.termDurations &&\r\n props.contentfulMembershipTypes &&\r\n props.ownerMembershipsAvailability &&\r\n memberId &&\r\n \r\n }\r\n\r\n {\r\n page === RenewPage.Summary &&\r\n memberId &&\r\n termFormula &&\r\n membershipStartDate &&\r\n membershipTypeName &&\r\n member &&\r\n membershipTermLabel &&\r\n {setEditMemberChecked(value)}}\r\n fileUrl={fileUrl}\r\n minDatePickerDate={existingEndDate}\r\n />\r\n }\r\n
\r\n \r\n
\r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n contentfulMembershipTypes: state.guests.contentfulMembershipTypes,\r\n termDurations: state.guests.termDurations,\r\n ownerMembershipsAvailability: state.user.ownerMembershipsAvailability,\r\n isHeaderOpen: state.application.isHeaderOpen,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n setContentfulMembershipTypes: () => {\r\n dispatch(getContentfulMembershipTypes(true));\r\n },\r\n getOwnerMembershipAvailability: () => {\r\n dispatch(getOwnerMembershipAvailability());\r\n },\r\n }\r\n}\r\n\r\nexport default compose(\r\n withTranslation(),\r\n withRouter,\r\n connect(mapStateToProps, mapDispatchToProps))\r\n (RenewMembership);\r\n","import { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport { Entry } from 'contentful';\r\nimport React, { ChangeEvent, useEffect, useState } from 'react';\r\nimport { withTranslation, WithTranslation } from 'react-i18next';\r\nimport { Get } from '../../../../Api/ApiService';\r\nimport { PrimaryButton, SecondaryButton } from '../../../../Shared/Components/Presentational/Buttons';\r\nimport { Desktop, Mobile } from '../../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { NativeDatePicker } from '../../../../Shared/Components/Presentational/NativeDatePicker';\r\nimport \"./RenewMembershipStyles.scss\";\r\nimport { ClickableIcon } from '../../../../Shared/Components/Presentational/Icons';\r\nimport { faArrowAltCircleLeft } from \"@fortawesome/free-regular-svg-icons\";\r\nimport { GetPhotoByMemberIdCall } from '../../../../Api/Calls/GetPhotoByMemberIdCall';\r\nimport Checkbox from '../../../../Shared/Components/Presentational/Checkbox';\r\n\r\ninterface RenewalSummaryProps extends WithTranslation {\r\n memberId: string;\r\n memberName: string;\r\n memberEmail: string;\r\n membershipTypeName: string;\r\n termDuration: string;\r\n startDate: Date;\r\n termFormula: string;\r\n onStartDateUpdate: (date: Date) => void;\r\n onBackButton: () => void;\r\n onConfirm: () => void;\r\n onEditMemberCheckChange: (value: boolean) => void;\r\n fileUrl: string | undefined;\r\n minDatePickerDate: Date;\r\n}\r\n\r\nconst RewewalSummary: React.FC = (props) => {\r\n const { t } = props;\r\n const [editMemberChecked, setEditMemberChecked] = useState(false);\r\n\r\n const updateValueEditMemberCheck = (e: ChangeEvent) => {\r\n if (e.target.checked) {\r\n setEditMemberChecked(true);\r\n props.onEditMemberCheckChange(true)\r\n } else {\r\n setEditMemberChecked(false);\r\n props.onEditMemberCheckChange(false);\r\n }\r\n }\r\n\r\n const dayPlus30 = (date: Date) => {\r\n let newDate = new Date(date);\r\n newDate.setDate(date.getDate() + 30);\r\n return newDate;\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n

{\"Renew Membership Summary\"}

\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n\r\n \r\n \r\n
\r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n
Name:{props.memberName}
Email:{props.memberEmail}
Membership Type:{props.membershipTypeName}
Term Duration:{props.termFormula}
Start Date\r\n \r\n
Update Member Details\r\n \r\n
\r\n
\r\n {props.fileUrl !== '' &&\r\n \"Member\r\n }\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n
\r\n

{\"Renew Membership Summary\"}

\r\n
\r\n
\r\n\r\n
\r\n {props.fileUrl !== '' &&\r\n \"Member\r\n }\r\n
\r\n\r\n
\r\n \r\n\r\n
\r\n
Name:
\r\n
{props.memberName}
\r\n
\r\n\r\n
\r\n
Email:
\r\n
{props.memberEmail}
\r\n
\r\n\r\n
\r\n
Membership Type:
\r\n
{props.membershipTypeName}
\r\n
\r\n\r\n
\r\n
Term Duration:
\r\n
{props.termFormula}
\r\n
\r\n\r\n
\r\n
Start Date:
\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
Update Member Details:
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default withTranslation()(RewewalSummary);","import { GetApiCall } from \"./ApiCall\";\r\n\r\nexport class GetMemberByIdCall extends GetApiCall {\r\n constructor(memberId: string) {\r\n let url: string = \"Membership/GetByMemberId\";\r\n\r\n let params: any = { memberId }\r\n\r\n super(url, params);\r\n }\r\n}","import { PostApiCall } from './ApiCall';\r\n\r\nexport class PostMembershipRenewalCall extends PostApiCall {\r\n constructor(renewalDto: RenewMembershipDTO) {\r\n const url = 'Membership/renew-membership';\r\n super(url);\r\n\r\n this.body = renewalDto;\r\n }\r\n}\r\n","import { PostApiCall } from \"./ApiCall\";\r\n\r\nexport class PostPhotoFacialRecognitionCheckCall extends PostApiCall {\r\n constructor(memberId: string) {\r\n let url: string = \"photo-pass/photo-check/\" + memberId;\r\n \r\n super(url);\r\n }\r\n}","import { GetApiCall } from \"../ApiCall\";\r\n\r\nexport class GetMemberPersonalDetailsCall extends GetApiCall {\r\n constructor(memberId: string) {\r\n super('member/personal-details', { memberId });\r\n }\r\n}","import React, { useEffect, useState } from 'react';\r\nimport { hasValue, isTextOnly, isValidEmail, isNotFutureDate, isValidUKPhoneNumber } from '../../../../Shared/Utilities/Validation';\r\nimport InputField from '../AddMembershipSubPages/FormInputs/InputField';\r\nimport DateInputField from '../AddMembershipSubPages/FormInputs/DateInputField';\r\nimport { Desktop, Mobile } from '../../../../Shared/Components/Presentational/ResponsiveViews';\r\n\r\ninterface PersonalDetailsFormProps {\r\n showErrors?: boolean;\r\n existingDetails: MemberPersonalDetailsDTO;\r\n returnValue: (value: MemberPersonalDetailsDTO) => void;\r\n returnErrorState: (hasError: boolean) => void;\r\n validationError: string | undefined;\r\n}\r\n\r\ninterface PersonalDetailsFormFields {\r\n FirstName: FormInput;\r\n LastName: FormInput;\r\n Email: FormInput;\r\n PhoneNumber: FormInput;\r\n DateOfBirth: FormInput;\r\n}\r\n\r\nconst PersonalDetailsForm: React.FC = (props: PersonalDetailsFormProps) => {\r\n const [form, setForm] = useState();\r\n\r\n useEffect(() => {\r\n if (props.existingDetails) {\r\n setForm(dtoToForm(props.existingDetails));\r\n }\r\n }, [])\r\n\r\n useEffect(() => {\r\n if (form) {\r\n props.returnValue(formToDto(form));\r\n let isFormError = false;\r\n let k: keyof typeof form;\r\n for (k in form) {\r\n if (form[k].errors.length > 0)\r\n isFormError = true;\r\n }\r\n props.returnErrorState(isFormError);\r\n }\r\n }, [form])\r\n\r\n useEffect(() => {\r\n if (props.validationError) {\r\n if (props.validationError === \"duplicateEmail\") {\r\n let email: FormInput = form!.Email;\r\n email.errors.push(props.validationError);\r\n setForm({ ...form!, Email: email});\r\n }\r\n else if (props.validationError === \"duplicateMobile\") {\r\n let phoneNumber: FormInput = form!.PhoneNumber;\r\n phoneNumber.errors.push(props.validationError);\r\n setForm({ ...form!, PhoneNumber: phoneNumber});\r\n }\r\n }\r\n }, [props.validationError]);\r\n\r\n const dtoToForm = (dto: MemberPersonalDetailsDTO) => {\r\n const form = {} as PersonalDetailsFormFields;\r\n form.FirstName = { errors: [], value: dto.FirstName };\r\n form.LastName = { errors: [], value: dto.LastName };\r\n form.Email = { errors: [], value: dto.Email };\r\n form.PhoneNumber = { errors: [], value: dto.PhoneNumber };\r\n form.DateOfBirth = { errors: [], value: dto.DateOfBirth };\r\n return form;\r\n }\r\n\r\n const formToDto = (form: PersonalDetailsFormFields) => {\r\n const dto = {} as MemberPersonalDetailsDTO;\r\n dto.FirstName = form.FirstName.value;\r\n dto.LastName = form.LastName.value;\r\n dto.Email = form.Email.value;\r\n dto.PhoneNumber = form.PhoneNumber.value;\r\n dto.DateOfBirth = form.DateOfBirth.value;\r\n return dto;\r\n }\r\n\r\n return (\r\n <>\r\n {form &&\r\n
\r\n \r\n
\r\n
\r\n setForm({ ...form, FirstName: { value: value, errors: errors } })}\r\n labeltranslationKey=\"addMembership.personalDetails.fields.firstname\"\r\n containerClass=\"input\"\r\n showErrors={props.showErrors}\r\n validators={[{ name: \"hasValue\", validator: hasValue }, { name: \"isTextOnly\", validator: isTextOnly }]}\r\n />\r\n\r\n setForm({ ...form, LastName: { value: value, errors: errors } })}\r\n labeltranslationKey=\"addMembership.personalDetails.fields.lastname\"\r\n containerClass=\"input\"\r\n showErrors={props.showErrors}\r\n validators={[{ name: \"hasValue\", validator: hasValue }, { name: \"isTextOnly\", validator: isTextOnly }]}\r\n />\r\n
\r\n\r\n
\r\n setForm({ ...form, Email: { value: value, errors: errors } })}\r\n labeltranslationKey=\"addMembership.contactDetails.fields.emailAddress\"\r\n containerClass=\"input\"\r\n showErrors={props.showErrors}\r\n validators={[{ name: \"hasValue\", validator: hasValue }, { name: \"isEmail\", validator: isValidEmail }]}\r\n />\r\n\r\n setForm({ ...form, PhoneNumber: { value: value, errors: errors } })}\r\n labeltranslationKey=\"addMembership.contactDetails.fields.telephoneNumber\"\r\n containerClass=\"input\"\r\n showErrors={props.showErrors}\r\n validators={[{ name: \"isPhoneNo\", validator: isValidUKPhoneNumber }]}\r\n />\r\n
\r\n\r\n
\r\n setForm({ ...form, DateOfBirth: { value: value, errors: errors } })}\r\n labeltranslationKey=\"addMembership.personalDetails.fields.dateOfBirth\"\r\n containerClass=\"input\"\r\n tabindex={3}\r\n showErrors={props.showErrors}\r\n validators={[{ name: \"isNotFutureDate\", validator: isNotFutureDate }]}\r\n maxDate={new Date()}\r\n />\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n setForm({ ...form, FirstName: { value: value, errors: errors } })}\r\n labeltranslationKey=\"addMembership.personalDetails.fields.firstname\"\r\n containerClass=\"input\"\r\n showErrors={props.showErrors}\r\n validators={[{ name: \"hasValue\", validator: hasValue }, { name: \"isTextOnly\", validator: isTextOnly }]}\r\n />\r\n\r\n setForm({ ...form, LastName: { value: value, errors: errors } })}\r\n labeltranslationKey=\"addMembership.personalDetails.fields.lastname\"\r\n containerClass=\"input\"\r\n showErrors={props.showErrors}\r\n validators={[{ name: \"hasValue\", validator: hasValue }, { name: \"isTextOnly\", validator: isTextOnly }]}\r\n />\r\n\r\n setForm({ ...form, Email: { value: value, errors: errors } })}\r\n labeltranslationKey=\"addMembership.contactDetails.fields.emailAddress\"\r\n containerClass=\"input\"\r\n showErrors={props.showErrors}\r\n validators={[{ name: \"hasValue\", validator: hasValue }, { name: \"isEmail\", validator: isValidEmail }]}\r\n />\r\n\r\n setForm({ ...form, PhoneNumber: { value: value, errors: errors } })}\r\n labeltranslationKey=\"addMembership.contactDetails.fields.telephoneNumber\"\r\n containerClass=\"input\"\r\n showErrors={props.showErrors}\r\n validators={[{ name: \"isPhoneNo\", validator: isValidUKPhoneNumber }]}\r\n />\r\n\r\n setForm({ ...form, DateOfBirth: { value: value, errors: errors } })}\r\n labeltranslationKey=\"addMembership.personalDetails.fields.dateOfBirth\"\r\n containerClass=\"input\"\r\n tabindex={3}\r\n showErrors={props.showErrors}\r\n validators={[{ name: \"isNotFutureDate\", validator: isNotFutureDate }]}\r\n maxDate={new Date()}\r\n />\r\n
\r\n
\r\n
\r\n\r\n\r\n\r\n }\r\n \r\n );\r\n};\r\n\r\nexport default (PersonalDetailsForm);\r\n","import { PostApiCall } from \"../ApiCall\";\r\n\r\nexport class UpdateMemberPersonalDetailsCall extends PostApiCall {\r\n constructor(memberPersonalDetails: MemberPersonalDetailsDTO, memberId: string) {\r\n\r\n super('member/personal-details?memberId=' + memberId);\r\n this.body = memberPersonalDetails;\r\n }\r\n}","import React, { useEffect, useImperativeHandle, useState } from 'react';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { GetMemberPersonalDetailsCall } from '../../../../Api/Calls/Member/GetMemberPersonalDetailsCall';\r\nimport { Get, Post } from '../../../../Api/ApiService';\r\nimport Spinner from '../../../../Shared/Components/Presentational/Spinner';\r\nimport PersonalDetailsForm from '../ManageActiveMemberSubPages/PersonalDetailsForm';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport '../../Container/AddMembershipStyles.scss';\r\nimport { ICallSave } from './ICallSave';\r\nimport { hasValue } from '../../../../Shared/Utilities/Validation';\r\nimport { UpdateMemberPersonalDetailsCall } from '../../../../Api/Calls/Member/UpdateMemberPersonalDetailsCall';\r\nimport { Desktop, Mobile } from '../../../../Shared/Components/Presentational/ResponsiveViews';\r\n\r\ninterface UpdateMemberPersonalDetailsProps {\r\n memberId: string;\r\n onSaveComplete: () => void;\r\n onSaveError: () => void;\r\n onSaveCancelled: () => void;\r\n}\r\n\r\nconst UpdateMemberPersonalDetails = React.forwardRef((props, ref) => {\r\n const [personalDetails, setPersonalDetails] = useState();\r\n const [isFormErrors, setIsFormErrors] = useState(false);\r\n const [errorGettingDetails, setErrorGettingDetails] = useState(false);\r\n const [showFormErrors, setShowFormErrors] = useState(false);\r\n const [detailsChanged, setDetailsChanged] = useState(false);\r\n const [validationError, setValidationError] = useState();\r\n\r\n useEffect(() => {\r\n Get(new GetMemberPersonalDetailsCall(props.memberId))\r\n .then(r => {\r\n setPersonalDetails(r.data);\r\n })\r\n .catch(e => { setErrorGettingDetails(true) });\r\n }, [])\r\n\r\n const updatePersonalDetails = () => {\r\n if (personalDetails) {\r\n Post(new UpdateMemberPersonalDetailsCall(personalDetails, props.memberId))\r\n .then(r => props.onSaveComplete())\r\n .catch(e => {\r\n props.onSaveError();\r\n setShowFormErrors(true);\r\n setValidationError(e.response.data);\r\n });\r\n }\r\n }\r\n\r\n const onFormInput = (value: MemberPersonalDetailsDTO) => {\r\n setPersonalDetails(value);\r\n setDetailsChanged(true);\r\n }\r\n\r\n useImperativeHandle(ref, () => ({\r\n save() {\r\n console.log('save called in update member personal details');\r\n if (detailsChanged) {\r\n if (!isFormErrors) {\r\n updatePersonalDetails();\r\n } else {\r\n setShowFormErrors(true);\r\n props.onSaveCancelled();\r\n }\r\n } else {\r\n props.onSaveComplete();\r\n }\r\n }\r\n }));\r\n\r\n return (\r\n <>\r\n {!personalDetails && }\r\n\r\n {personalDetails &&\r\n
\r\n \r\n
\r\n
\r\n {/*

{t(\"addMembership.personalDetails.title\")}

*/}\r\n

Personal Details

\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n {/*

{t(\"addMembership.personalDetails.title\")}

*/}\r\n

Personal Details

\r\n
\r\n
\r\n
\r\n\r\n setIsFormErrors(value)}\r\n validationError={validationError}\r\n />\r\n
\r\n }\r\n \r\n )\r\n});\r\n\r\nexport default UpdateMemberPersonalDetails;","import React from \"react\";\r\nimport { Desktop, Mobile } from \"../../../../Shared/Components/Presentational/ResponsiveViews\";\r\nimport { PrimaryButton, SecondaryButton } from \"../../../../Shared/Components/Presentational/Buttons\";\r\nimport \"../../Container/AddMembershipStyles.scss\";\r\n\r\ninterface FormFooterProps {\r\n exitButtonText: string;\r\n continueButtonText: string;\r\n onExitClick: () => void;\r\n onContinueClick: () => void;\r\n showExitButton: boolean;\r\n showContinueButton: boolean;\r\n disableContinueButton: boolean;\r\n showContinueButtonLoading: boolean;\r\n}\r\n\r\nconst FormFooter: React.FC = (props) => {\r\n return (\r\n <>\r\n \r\n {props.showExitButton &&\r\n \r\n }\r\n\r\n {props.showContinueButton &&\r\n \r\n }\r\n \r\n \r\n \r\n {props.showContinueButton &&\r\n \r\n }\r\n\r\n {props.showExitButton && \r\n \r\n }\r\n \r\n \r\n )\r\n}\r\n\r\nexport default FormFooter;","import { GetApiCall } from \"../ApiCall\";\r\n\r\nexport class GetMemberVehicles extends GetApiCall {\r\n constructor(memberId: string) {\r\n super('member/vehicles', { memberId })\r\n }\r\n}\r\n","import React, { ChangeEvent, useEffect, useState } from 'react';\r\nimport { Desktop, Mobile } from '../../../../Shared/Components/Presentational/ResponsiveViews';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\n\r\ninterface VehiclesFormProps extends WithTranslation {\r\n allowVehicles: boolean;\r\n vehicle1: VehicleDTOBack;\r\n vehicle2: VehicleDTOBack;\r\n showErrors: boolean;\r\n onVehicle1Update: (vehicle: VehicleDTOBack) => void;\r\n onVehicle2Update: (vehicle: VehicleDTOBack) => void;\r\n}\r\n\r\nconst VehiclesForm: React.FC = (props) => {\r\n const { t } = props;\r\n\r\n const handleFormChange = (e: ChangeEvent, index: number) => {\r\n const key = e.target.name as keyof VehicleDTOBack;\r\n switch (index) {\r\n case 0:\r\n props.onVehicle1Update({ ...props.vehicle1, [key]: e.target.value})\r\n break;\r\n case 1:\r\n props.onVehicle2Update({ ...props.vehicle1, [key]: e.target.value})\r\n break;\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n { \r\n props.allowVehicles\r\n ? (<>\r\n \r\n {true && (\r\n //
\r\n // {documentToReactComponents(props.description.content)}\r\n //
\r\n
Please provide the registration number of this member's vehicles that you would like to enter the park.
\r\n )}\r\n {/*

{t(\"addMembership.vehicles.message\")}

*/}\r\n

Vehicle 1:

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n
Registration NumberDescription (optional)
\r\n handleFormChange(event, 0)}\r\n value={props.vehicle1.Registration}\r\n className=\"add-form-input form-input\"\r\n />\r\n \r\n handleFormChange(event, 0)}\r\n value={props.vehicle1.Description}\r\n className=\"add-form-input form-input\"\r\n />\r\n
\r\n

Vehicle 2:

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n\r\n

\r\n\r\n {/*\r\n *** There is no validation currently ***\r\n {\r\n (props.showErrors && (props.membershipForm.vehicles.errors && props.membershipForm.vehicles.errors.length > 0)) &&\r\n

{props.membershipForm && t(\"addMembership.errors.\" + trimmedErrors(props.membershipForm.vehicles.errors))}

\r\n } */}\r\n
Registration NumberDescription (optional)
\r\n handleFormChange(event, 1)}\r\n value={props.vehicle2.Registration}\r\n className=\"add-form-input form-input\"\r\n />\r\n \r\n handleFormChange(event, 1)}\r\n value={props.vehicle2.Description}\r\n className=\"add-form-input form-input\"\r\n />\r\n
\r\n
\r\n \r\n {true && (\r\n //
\r\n // {documentToReactComponents(props.description.content)}\r\n //
\r\n
Please provide the registration number of this member's vehicles that you would like to enter the park.
\r\n )}\r\n

Vehicle 1:

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
Registration Number
\r\n handleFormChange(event, 0)}\r\n value={props.vehicle1.Registration}\r\n className=\"add-form-input form-input\"\r\n />\r\n
Description (optional)
\r\n handleFormChange(event, 0)}\r\n value={props.vehicle1.Description}\r\n className=\"add-form-input form-input\"\r\n />\r\n
\r\n

Vehicle 2:

\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n

\r\n {/* \r\n *** There is no validation currently *** \r\n {\r\n (props.showErrors && (props.membershipForm.vehicles.errors && props.membershipForm.vehicles.errors.length > 0)) &&\r\n

{props.membershipForm && t(\"addMembership.errors.\" + trimmedErrors(props.membershipForm.vehicles.errors))}

\r\n } */}\r\n
Registration Number
\r\n handleFormChange(event, 1)}\r\n value={props.vehicle2.Registration}\r\n className=\"add-form-input form-input\"\r\n />\r\n
Description (optional)
\r\n handleFormChange(event, 1)}\r\n value={props.vehicle2.Description}\r\n className=\"add-form-input form-input\"\r\n />\r\n
\r\n
\r\n \r\n ) : (\r\n <>\r\n

This member is under 16 and is therefore not able to add vehicles

\r\n

Please continue to the next section

\r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default withTranslation()(VehiclesForm);","import { PostApiCall } from \"../ApiCall\";\r\n\r\nexport class UpdateMemberVehiclesCall extends PostApiCall {\r\n constructor(memberVehicles: VehiclesDTO, memberId: string) {\r\n\r\n super('member/vehicles?memberId=' + memberId);\r\n this.body = memberVehicles;\r\n }\r\n}","import React, { useEffect, useImperativeHandle, useState } from 'react';\r\nimport { ICallSave } from './ICallSave';\r\nimport '../../Container/AddMembershipStyles.scss';\r\nimport { Get, Post } from '../../../../Api/ApiService';\r\nimport { GetMemberVehicles } from '../../../../Api/Calls/Member/GetMemberVehiclesCals';\r\nimport VehiclesForm from './VehiclesForm';\r\nimport { UpdateMemberVehiclesCall } from '../../../../Api/Calls/Member/UpdateMemberVehiclesCall';\r\nimport { Desktop, Mobile } from '../../../../Shared/Components/Presentational/ResponsiveViews';\r\n\r\ninterface UpdateMemberVehiclesProps {\r\n memberId: string;\r\n onSaveComplete: () => void;\r\n onSaveError: () => void;\r\n onSaveCancelled: () => void;\r\n}\r\n\r\nconst UpdateMemberVehicles = React.forwardRef((props, ref) => {\r\n const [vehicle1, setVehicle1] = useState({ Description: '', Registration: '' });\r\n const [vehicle2, setVehicle2] = useState({ Description: '', Registration: '' });\r\n const [detailsChanged, setDetailsChanged] = useState(false);\r\n\r\n useEffect(() => {\r\n Get(new GetMemberVehicles(props.memberId))\r\n .then(r => setVehicles(r.data))\r\n .catch(e => console.log(e));\r\n }, []);\r\n\r\n const setVehicles = (dto: VehiclesDTO) => {\r\n if (dto.Vehicles && dto.Vehicles.length > 0) {\r\n setVehicle1(dto.Vehicles[0]);\r\n if (dto.Vehicles.length > 1) {\r\n setVehicle2(dto.Vehicles[1]);\r\n }\r\n }\r\n }\r\n\r\n const updateVehicles = () => {\r\n const vehicleList = [] as VehicleDTOBack[];\r\n if (vehicle1.Registration.length > 0)\r\n vehicleList.push(vehicle1);\r\n\r\n if (vehicle2.Registration.length > 0)\r\n vehicleList.push(vehicle2);\r\n\r\n Post(new UpdateMemberVehiclesCall({ Vehicles: vehicleList }, props.memberId))\r\n .then(r => props.onSaveComplete())\r\n .catch(e => props.onSaveError())\r\n }\r\n\r\n useImperativeHandle(ref, () => ({\r\n save() {\r\n if (detailsChanged) {\r\n updateVehicles();\r\n } else {\r\n props.onSaveComplete();\r\n }\r\n }\r\n }));\r\n\r\n const vehicle1Update = (v: VehicleDTOBack) => {\r\n setVehicle1(v);\r\n setDetailsChanged(true);\r\n }\r\n\r\n const vehicle2Update = (v: VehicleDTOBack) => {\r\n setVehicle2(v);\r\n setDetailsChanged(true);\r\n }\r\n\r\n return (\r\n <>\r\n
\r\n \r\n
\r\n
\r\n {/* TODO - Add contentful text */}\r\n {/*

{t(\"addMembership.personalDetails.title\")}

*/}\r\n

Vehicles

\r\n
\r\n
\r\n
\r\n\r\n \r\n
\r\n
\r\n {/* TODO - Add contentful text */}\r\n {/*

{t(\"addMembership.personalDetails.title\")}

*/}\r\n

Vehicles

\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n \r\n )\r\n})\r\n\r\nexport default UpdateMemberVehicles;\r\n","import React, { useEffect, useRef, useState } from 'react';\r\nimport { Redirect, RouteComponentProps, withRouter } from \"react-router-dom\";\r\nimport { connect } from 'react-redux';\r\nimport { WithTranslation, withTranslation } from 'react-i18next';\r\nimport { compose } from 'redux';\r\nimport UpdateMemberPersonalDetails from '../Presentational/AddMembershipSubPages/UpdateMemberPersonalDetails';\r\nimport { Widget } from '../../../Shared/Components/Presentational/Widget';\r\nimport { ClickableIcon } from '../../../Shared/Components/Presentational/Icons';\r\nimport { faArrowAltCircleLeft } from '@fortawesome/free-regular-svg-icons';\r\nimport Breadcrumb from '../../../Shared/Components/Presentational/Breadcrumb';\r\nimport '../Container/AddMembershipStyles.scss';\r\nimport { documentToReactComponents } from '@contentful/rich-text-react-renderer';\r\nimport FormFooter from '../Presentational/AddMembershipSubPages/FormFooter';\r\nimport { ICallSave } from '../Presentational/AddMembershipSubPages/ICallSave';\r\nimport UpdateMemberVehicles from '../Presentational/AddMembershipSubPages/UpdateMemberVehicles';\r\nimport * as Routes from \"../../../Constants/Routes\";\r\nimport PhotoUpload from '../Presentational/AddMembershipSubPages/PhotoUpload';\r\nimport { GetHTMlContentBlockCall } from '../../../Contentful/Calls/GetHTMLContentBlockCall';\r\n\r\ninterface EditMemberProps extends RouteComponentProps, WithTranslation {\r\n}\r\n\r\nconst sections =\r\n [\r\n {\r\n key: 0,\r\n title: \"addMembership.personalDetails.title\",\r\n name: 'personalDetails'\r\n },\r\n {\r\n key: 1,\r\n title: \"addMembership.vehicles.title\",\r\n name: 'vehicles'\r\n },\r\n {\r\n key: 2,\r\n title: \"addMembership.photoUpload.title\",\r\n name: 'photoUpload'\r\n }\r\n ]\r\n\r\nconst EditMember: React.FC = (props: EditMemberProps) => {\r\n const [pageNo, setPageNo] = useState(0);\r\n const [saveSpinnerOn, setSaveSpinnerOn] = useState(false);\r\n const { t } = props;\r\n const childPageRef = useRef(null);\r\n const [redirectToDashboard, setRedirectToDashboard] = useState(false);\r\n const [photoUploadInstructions, setphotoUploadInstructions] = useState();\r\n const [photoUploadFileRestrictions, setphotoUploadFileRestrictions] = useState();\r\n const [photoUploadException, setPhotoUploadException] = useState();\r\n\r\n\r\n useEffect(() => {\r\n getContentBlock(\"My Haulfryn - Photo Upload - Set- by- Step Guide\", \"photoUploadInstructions\")\r\n .then(r => setphotoUploadInstructions(r));\r\n getContentBlock(\"My Haulfryn - Photo Upload - File Restrictions\", \"photoUploadFileRestrictions\")\r\n .then(r => setphotoUploadFileRestrictions(r));\r\n getContentBlock(\"My Haulfryn - Photo Upload - Exception\", \"photoUploadException\")\r\n .then(r => setPhotoUploadException(r));\r\n }, [])\r\n\r\n const getContentBlock = async (name: string, label: string) => {\r\n try {\r\n const text = await GetHTMlContentBlockCall(name, label);\r\n return text;\r\n } catch (e) {\r\n console.log(e);\r\n }\r\n }\r\n\r\n const onBackButton = () => {\r\n if (pageNo - 1 >= 0) {\r\n setPageNo(pageNo - 1);\r\n }\r\n }\r\n\r\n const onSaveError = () => {\r\n setSaveSpinnerOn(false);\r\n }\r\n\r\n const onSaveCancelled = () => {\r\n setSaveSpinnerOn(false);\r\n }\r\n\r\n const onExitButton = () => {\r\n setRedirectToDashboard(true);\r\n }\r\n\r\n const onContinueButton = () => {\r\n setSaveSpinnerOn(true);\r\n if (childPageRef.current !== null) {\r\n console.log('save called');\r\n childPageRef.current.save();\r\n } else {\r\n setSaveSpinnerOn(false);\r\n }\r\n }\r\n\r\n const onSaveComplete = () => {\r\n if (pageNo + 1 >= sections.length) {\r\n setRedirectToDashboard(true);\r\n } else {\r\n setSaveSpinnerOn(false);\r\n setPageNo(pageNo + 1);\r\n }\r\n }\r\n\r\n const enableSaveAndContinue = () => {\r\n }\r\n\r\n const disableSaveAndContinue = () => {\r\n\r\n }\r\n\r\n return (\r\n <>\r\n {redirectToDashboard &&\r\n \r\n }\r\n
\r\n

{t(\"editMember.title\")}

\r\n
\r\n {/* TODO - Add contentful text */}\r\n Update any of your member details that may have changed.\r\n
\r\n\r\n \r\n {pageNo > 0 &&\r\n \r\n }\r\n\r\n
\r\n {sections.map((s) =>\r\n \r\n )}\r\n
\r\n\r\n {props.location.state.memberId &&\r\n
\r\n {pageNo === 0 &&\r\n \r\n }\r\n {pageNo === 1 &&\r\n
\r\n \r\n
\r\n }\r\n {\r\n pageNo === 2 &&\r\n photoUploadInstructions &&\r\n photoUploadFileRestrictions &&\r\n photoUploadException &&\r\n {}}\r\n isLoading={saveSpinnerOn}\r\n onSaveError={onSaveError}\r\n />\r\n }\r\n
\r\n }\r\n\r\n
\r\n \r\n
\r\n \r\n
\r\n \r\n );\r\n}\r\n\r\nconst mapStateToProps = (state: any) => { }\r\n\r\nconst mapDispatchToProps = (dispatch: any) => { }\r\n\r\nexport default compose(\r\n withTranslation(),\r\n withRouter,\r\n connect(mapStateToProps, mapDispatchToProps))\r\n (EditMember);\r\n","import React, { useEffect } from \"react\";\r\nimport Home from \"./Home/Components/Container/Home\";\r\nimport MemberHomePage from \"./Home/Components/Container/MemberHomePage\";\r\nimport Login from \"./Login/Components/Container/Login\";\r\nimport ProtectedRoute from \"./ProtectedRoute\";\r\nimport * as Routes from \"./Constants/Routes\";\r\nimport MyCalendar from \"./Calendar/Components/Container/MyCalendar\";\r\nimport MyGuests from \"./Guests/Components/Container/MyGuests\";\r\nimport MyMembershipsDashboard from \"./Guests/Components/Container/MyMembershipsDashboard\";\r\nimport MyParkAndHome from \"./Information/Components/Container/MyParkAndHome\";\r\nimport MyAccount from \"./Account/Components/Container/MyAccount\";\r\nimport MyRequestsAndQueries from \"./RequestsAndQueries/Components/Container/MyRequestsAndQueries\";\r\nimport DefaultLayoutRoute from \"./DefaultLayoutRoute\";\r\nimport { Switch, Route } from \"react-router\";\r\nimport { LOGIN_SUCCESS } from \"./Login/Redux/ActionTypes\";\r\nimport { connect } from \"react-redux\";\r\nimport ConfirmEmail from \"./ConfirmEmail\";\r\nimport ForgottenPassword from \"./ForgottenPassword\";\r\nimport ImportantInformation from \"./Information/Components/Container/ImportantInformation\";\r\nimport ParkNews from \"./Information/Components/Container/ParkNews\";\r\nimport Register from \"./Login/Components/Container/Register\";\r\nimport ConfirmAccount from \"./ConfirmAccount\";\r\nimport CookiePopup from \"./Shared/Components/Presentational/CookiePopup\";\r\nimport AddMembership from './Guests/Components/Container/AddMembership';\r\nimport ManageActiveMember from './Guests/Components/Container/ManageActiveMember';\r\nimport ReferMembership from \"./Guests/Components/Container/ReferMembership\";\r\nimport ParQForm from \"./ParQForm/Components/Container/ParQForm\";\r\nimport PaymentSuccess from './Guests/Components/LandingPages/PaymentSuccess';\r\nimport PaymentCancelled from './Guests/Components/LandingPages/PaymentCancelled';\r\nimport DocuSignSigned from \"./Guests/Components/LandingPages/DocuSignSigned\";\r\nimport SelectPayment from \"./Guests/Components/Presentational/AddMembershipSubPages/SelectPayment\";\r\nimport MembershipAgreement from \"./Guests/Components/LandingPages/MembershipAgreement\";\r\nimport InvalidSessionPage from \"./Guests/Components/LandingPages/InvalidSessionPage\";\r\nimport ConfirmMembership from \"./Login/Components/Container/ConfirmMembership\";\r\nimport UserRoles from \"./Constants/UserRoles\";\r\nimport RenewMembership from \"./Guests/Components/Container/RenewMembership\";\r\nimport EditMember from \"./Guests/Components/Container/EditMember\";\r\n\r\ninterface RootAppProps {\r\n restoreLogin: () => void;\r\n userRoles: UserRoleDTO[];\r\n}\r\n\r\nconst RootApp: React.FC = (props) => {\r\n const { restoreLogin } = props;\r\n useEffect(() => {\r\n if (sessionStorage.getItem(\"access_token\")) {\r\n restoreLogin();\r\n }\r\n }, [restoreLogin]);\r\n\r\n return (\r\n <>\r\n \r\n {(props.userRoles && !UserRoles.IsOwner(props.userRoles)) ? (\r\n \r\n ) : (\r\n \r\n )}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\nconst mapStateToProps = (state: any) => {\r\n return {\r\n userRoles: state.user.userRoles,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch: any) => {\r\n return {\r\n restoreLogin: () => dispatch({ type: LOGIN_SUCCESS, payload: true }),\r\n };\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(RootApp);\r\n","import 'react-app-polyfill/ie11';\r\nimport 'react-app-polyfill/stable';\r\nimport React, { FunctionComponent } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.scss';\r\nimport * as serviceWorker from './serviceWorker';\r\nimport { Router } from 'react-router';\r\nimport history from './History';\r\nimport { createStore, applyMiddleware, Middleware } from 'redux';\r\nimport { persistStore, persistReducer } from 'redux-persist';\r\nimport { PersistGate } from 'redux-persist/integration/react';\r\nimport storageSession from 'redux-persist/lib/storage/session';\r\nimport { composeWithDevTools } from 'redux-devtools-extension';\r\nimport thunk from 'redux-thunk';\r\nimport { Provider, ConnectedComponentClass } from 'react-redux';\r\nimport { rootReducer } from './RootReducer';\r\nimport i18nPromise from './i18n';\r\nimport './myHaulfryn.d';\r\nimport ErrorBoundary from './ErrorBoundary';\r\nimport RootApp from './App';\r\nimport i18n from 'i18next';\r\nimport axios, { AxiosResponse } from 'axios';\r\nimport 'react-datepicker/dist/react-datepicker.css';\r\nimport { RELOAD_TRANSLATIONS } from './Information/Redux/ActionTypes';\r\nimport { LOGIN_SUCCESS } from './Login/Redux/ActionTypes';\r\nimport { SET_SELECTED_PARK } from './User/Redux/ActionTypes';\r\ndeclare const module: { hot: { accept: (path: string, func: () => void) => void } };\r\n\r\ninterface RootAppProps {\r\n restoreLogin: () => void;\r\n userRoles: UserRoleDTO[];\r\n}\r\n\r\nconst persistConfig = {\r\n key: 'root',\r\n storage: storageSession,\r\n};\r\n\r\nexport const LanguageChangeDetector: Middleware = (api) => (next) => (action) => {\r\n let parkCode: string | undefined = undefined;\r\n if (action.type === SET_SELECTED_PARK) {\r\n parkCode = action.payload.parkCode;\r\n }\r\n if (action.type === LOGIN_SUCCESS || action.type === RELOAD_TRANSLATIONS) {\r\n var state = api.getState();\r\n if (state && state.user && state.user.park) {\r\n parkCode = state.user.park.parkCode;\r\n }\r\n }\r\n\r\n if (action.type === RELOAD_TRANSLATIONS) {\r\n parkCode && i18n.removeResourceBundle(parkCode as string, 'translation');\r\n }\r\n\r\n if (parkCode) {\r\n if (i18n.hasResourceBundle(parkCode, 'translation')) {\r\n i18n.changeLanguage(parkCode);\r\n } else {\r\n axios.get('/api/translation/GetByLanguage/' + parkCode).then((result: AxiosResponse) => {\r\n i18n.addResourceBundle(parkCode as string, 'translation', result.data);\r\n i18n.changeLanguage(parkCode as string);\r\n });\r\n }\r\n }\r\n return next(action);\r\n};\r\n\r\nconst persistedReducer = persistReducer(persistConfig, rootReducer);\r\nexport const store = createStore(persistedReducer, composeWithDevTools(applyMiddleware(thunk, LanguageChangeDetector)));\r\nconst persistor = persistStore(store);\r\n\r\nif (module.hot) {\r\n module.hot.accept('./RootReducer', () => {\r\n store.replaceReducer(persistedReducer);\r\n });\r\n}\r\n\r\nconst render = (Component: ConnectedComponentClass, Pick>) => {\r\n return ReactDOM.render(\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n );\r\n};\r\n\r\ni18nPromise.then(\r\n () => {\r\n render(RootApp);\r\n },\r\n () => {\r\n render(RootApp);\r\n }\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n\r\nif (module.hot) {\r\n module.hot.accept('./App', () => {\r\n const NextApp = require('./App').default;\r\n render(NextApp);\r\n });\r\n}\r\n"],"sourceRoot":""}