{"version":3,"file":"app-main.179cc082336314a99f06.hashedasset.js","mappings":"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","sources":["webpack://@cpt/commercial-billing-public-portal/./app/components/NavigationSidebarLayout/style.module.less?10c0","webpack://@cpt/commercial-billing-public-portal/./app/components/PopoverHelp/style.module.less?03eb","webpack://@cpt/commercial-billing-public-portal/./app/components/Section/style.module.less?6676","webpack://@cpt/commercial-billing-public-portal/./app/global.less?d13f","webpack://@cpt/commercial-billing-public-portal/./app/config/LuxonConfig.ts","webpack://@cpt/commercial-billing-public-portal/./app/utils/envConfig.ts","webpack://@cpt/commercial-billing-public-portal/./app/environment.ts","webpack://@cpt/commercial-billing-public-portal/./app/hooks/useAsyncRequest.ts","webpack://@cpt/commercial-billing-public-portal/./app/utils/CloudSubscription/CloudSubscriptionOutageWindowFrequency.ts","webpack://@cpt/commercial-billing-public-portal/./app/client/api/CloudSubscriptionApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/client/api/ServerLicenseApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/utils/navigationHelpers.ts","webpack://@cpt/commercial-billing-public-portal/./app/client/api/CsrfApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/client/axios-client.ts","webpack://@cpt/commercial-billing-public-portal/./app/client/api/ConfigurationApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/contexts/ConfigurationProvider/ConfigurationProvider.tsx","webpack://@cpt/commercial-billing-public-portal/./app/contexts/FrontendMonitoringProvider/FrontendMonitoringProvider.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/AlertProvider/AlertProvider.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Theme/GlobalThemeApplier.tsx","webpack://@cpt/commercial-billing-public-portal/./app/setupAppInsights.ts","webpack://@cpt/commercial-billing-public-portal/./app/client/api/LoggingApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/FrontendMonitoring.ts","webpack://@cpt/commercial-billing-public-portal/./app/RoutesMap.ts","webpack://@cpt/commercial-billing-public-portal/./app/client/api/UserApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/contexts/UserProvider/UserProvider.tsx","webpack://@cpt/commercial-billing-public-portal/./app/utils/ExternalUriMap.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/CopyToClipboardWrapper/CopyToClipboardWrapper.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/CopyToClipboardWrapper/index.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/PageHeading/Help.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/PageHeading/UserInfo.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Theme/theme.ts","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/CloudSubscriptionRoutesMap.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/PageHeading/ControlCenterHeader.tsx","webpack://@cpt/commercial-billing-public-portal/./app/shared/EnvironmentBanner.tsx","webpack://@cpt/commercial-billing-public-portal/./app/shared/layouts/ClassicLayout.tsx","webpack://@cpt/commercial-billing-public-portal/./app/shared/layouts/TwentyFiveRedesignLayout.tsx","webpack://@cpt/commercial-billing-public-portal/./app/shared/layouts/Layout.tsx","webpack://@cpt/commercial-billing-public-portal/./app/shared/layouts/AuthenticatedLayout.tsx","webpack://@cpt/commercial-billing-public-portal/./app/client/api/UserGrantApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/StripTrailingSlash.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/alert/EnhanceMessage.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/alert/ErrorAlert.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/alert/AlertWithShadow.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/alert/NavigationAlert.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/ServerLicensesRoutesMap.ts","webpack://@cpt/commercial-billing-public-portal/./app/pages/InviteAcceptPage.tsx","webpack://@cpt/commercial-billing-public-portal/./app/utils/UserGrantsTypeHelpers.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/Link/Link.tsx","webpack://@cpt/commercial-billing-public-portal/./app/shared/LoadablePage.tsx","webpack://@cpt/commercial-billing-public-portal/./app/client/api/SerialApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/Section/Section.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Section/index.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/NavigationSidebarLayout/NavigationSidebarLayout.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/PaperLayout/PaperLayout.tsx","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/blob-badly-drawn-octopus.svg","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/components/BackToDashboard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/pages/LoadViaSerial.tsx","webpack://@cpt/commercial-billing-public-portal/./app/pages/NotFoundPage.tsx","webpack://@cpt/commercial-billing-public-portal/./app/client/api/CheckoutApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/client/api/PurchaseIntentApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/success_rocket.svg","webpack://@cpt/commercial-billing-public-portal/./app/components/UpgradeSuccessBanner/UpgradeSuccessBanner.tsx","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/stripe_to_octopus.svg","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/background_blob.svg","webpack://@cpt/commercial-billing-public-portal/./app/pages/PollingPage.tsx","webpack://@cpt/commercial-billing-public-portal/./app/pages/utils/get-default-delays.ts","webpack://@cpt/commercial-billing-public-portal/./app/pages/StripePaymentCompletingPage.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/RenewSuccessBanner/RenewSuccessBanner.tsx","webpack://@cpt/commercial-billing-public-portal/./app/pages/StripeSetupRenewalCompletingPage.tsx","webpack://@cpt/commercial-billing-public-portal/./app/client/api/UpgradePlan.ts","webpack://@cpt/commercial-billing-public-portal/./app/utils/CloudSubscriptionLicensingChannelTypeHelpers.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/StripeUpgradeSuccessAlert/StripeUpgradeSuccessAlert.tsx","webpack://@cpt/commercial-billing-public-portal/./app/pages/StripeUpgradeCompletingPage.tsx","webpack://@cpt/commercial-billing-public-portal/./app/hooks/usePolling.ts","webpack://@cpt/commercial-billing-public-portal/./app/utils/formatters/DnsFormatters.ts","webpack://@cpt/commercial-billing-public-portal/./app/client/api/FulfillmentApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/Trials/TrialFulfillmentContent.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Trials/TrialFulfillmentError.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Trials/TrialFulfillmentPending.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Button/GreenButton.tsx","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/rocket.svg","webpack://@cpt/commercial-billing-public-portal/./app/components/Trials/TrialFulfillmentSuccess.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Trials/TrialFulfillmentTimeout.tsx","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/blob-k8s.svg","webpack://@cpt/commercial-billing-public-portal/./app/pages/TrialFulfillmentPollingPage.tsx","webpack://@cpt/commercial-billing-public-portal/./app/hooks/usePageTitle.ts","webpack://@cpt/commercial-billing-public-portal/./app/shared/PaymentEvents.ts","webpack://@cpt/commercial-billing-public-portal/./app/shared/ZuoraCallbackPageTypes.ts","webpack://@cpt/commercial-billing-public-portal/./app/pages/ZuoraCallbackPage.tsx","webpack://@cpt/commercial-billing-public-portal/./app/contexts/EntityProvider/EntityProvider.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/CopyToClipboardButton/CopyToClipboardButton.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/authorization/RbacPermissions.ts","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/blob-octopus.svg","webpack://@cpt/commercial-billing-public-portal/./app/utils/CloudSubscription/CloudSubscriptionStatus.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/Dashboard/CloudSubscriptions/CloudSubscriptionStatusIcon.tsx","webpack://@cpt/commercial-billing-public-portal/./app/utils/noOp.ts","webpack://@cpt/commercial-billing-public-portal/./app/client/api/ContactRequestsApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/Dialogs/ContactSalesDialog/ContactSalesReasons.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/form/LoadingSubmitButton.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/form/SubmittableForm.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Dialogs/ContactSalesDialog/ContactSalesDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/utils/recordUtils.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/components/UserCanAccessCloudInstance.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/ContactSalesSuccessAlert.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/components/CloudSubscriptionHeader.tsx","webpack://@cpt/commercial-billing-public-portal/./app/pages/ForbiddenPage.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/authorization/ProtectedRoute.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/CloudSubscriptionLayout.tsx","webpack://@cpt/commercial-billing-public-portal/./app/utils/CloudSubscription/CanUpgrade.ts","webpack://@cpt/commercial-billing-public-portal/./app/utils/CloudStaticIpAddressPool.ts","webpack://@cpt/commercial-billing-public-portal/./app/utils/formatters/CloudRegionFormatters.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/Dialogs/RenameDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/ExternalLink/ExternalLink.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/LinkButton/LinkButton.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/authorization/PolicyAuthorized.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/ActiveCloudSubscriptionOnly.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/CloudSubscriptionNewDnsPrefixDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/utils/Validation/isDurationGreaterThan.ts","webpack://@cpt/commercial-billing-public-portal/./app/utils/nameof.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/form/FormTimePicker.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/CloudSubscriptionOutageWindowDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/PopoverHelp/PopoverHelp.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/FileUsageWarningContent.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/FileUsageWarning.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/ResourceUsageCopy.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/fileUsageThresholds.ts","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/getAlertLevel.ts","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/FileUsageLineItem.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/CloudSubscriptionConfiguration.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/GridDivider/GridDivider.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/LicensedEntitlementsView/LicensedEntitlementsView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/InfastructureLicensingChannelView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/ChangePlanFinanceLine/ChangePlanFinanceLine.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/OrdersFinanceLine/OrdersFinanceLine.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/CloudSubscriptionProps.ts","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/LegacyBraintreeLicensingChannelView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/SalesforceContractedLicensingChannelView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/RouterLink/RouterLink.tsx","webpack://@cpt/commercial-billing-public-portal/./app/utils/ServerLicenseLicensingChannelTypeHelpers.ts","webpack://@cpt/commercial-billing-public-portal/./app/utils/isTrial.ts","webpack://@cpt/commercial-billing-public-portal/./app/client/api/TrialApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/CloudSubscriptionCancelPlanDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/ChangeCustomerSpecifiedMachineLimitDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/CustomerSpecifiedMachineLimitLine.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/StripeSubscriptionLicensingChannelView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/utils/isTemporary.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/LicenseChannelChip/LicenseChannelChip.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/TrialLicensingChannelView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/ImportedTrialLicensingChannelView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/ZuoraLicensingChannelView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/CloudSubscriptionFinance.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/CloudSubscriptionLoadViaSerial.tsx","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/ccv1_to_ccv2_migration.svg","webpack://@cpt/commercial-billing-public-portal/./app/components/ControlCenterV2MigrationBanner/ControlCenterV2MigrationBanner.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/DetailOverviewBanner/DetailOverviewBanner.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Dashboard/FufillmentProgressChip.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/IconAndText.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/CloudSubscriptionPlanCard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/CloudSubscriptionStatusCard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/StripeCustomerPortalLink/StripeCustomerPortalLinkButton.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/RenewalCard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/FileUsageBar.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/WarningChip/WarningChip.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/FileUsageWarningChip.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/InfoIcon.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/overview/ResourceUsageCard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/CloudSubscriptionOverview.tsx","webpack://@cpt/commercial-billing-public-portal/./app/client/api/ProductPricingApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/AddOns/AddOns.tsx","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/icon_tenant_boxed.svg","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/icon_machine_boxed.svg","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/icon_support_boxed.svg","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/icon_tam_boxed.svg","webpack://@cpt/commercial-billing-public-portal/./app/components/Faq/FaqGroupHeading.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Faq/FaqTitle.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Faq/FaqItem.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Faq/FaqBulletedList.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Faq/Faqs.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/PlansChangedInfoBanner/PlansChangedInfoBanner.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/PopoverHelp/PopoverCloseButton.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/PricingCard/PricingCardCurrentPlanChip.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/PricingCard/PricingCardFeatureListElements.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/PricingCard/PricingCardFeatureListItem.tsx","webpack://@cpt/commercial-billing-public-portal/./app/utils/formatters/MoneyFormatter.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/PricingCard/PricingCardPrice.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/PricingCard/PricingCardPriceSelector.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/PricingCard/PricingCardTitle.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/PurchasingRoutesMap.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/ActionDialog/ActionDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/upgrade/ConfirmStripeUpgradeDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/upgrade/PricingCardAction.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/upgrade/EnterprisePricingCard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/upgrade/ProfessionalPricingCard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/components/finance/upgrade/StarterPricingCard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/CloudSubscriptionUpgrade.tsx","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/icon_cloud.svg","webpack://@cpt/commercial-billing-public-portal/./app/components/UserGrantTable/UserGrantRow.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/UserGrantTable/UserGrantsTable.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/UserGrantsInviteTable/UserGrantInviteRow.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/UserGrantsInviteTable/UserGrantsInviteTable.tsx","webpack://@cpt/commercial-billing-public-portal/./app/fontWeights.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/Dialogs/InviteUserDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/UserGrantDescription/UserGrantDescriptionList.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/UserGrantDescription/UserGrantDescriptionTitle.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/components/InviteUserToCloudSubscription.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/detail/CloudSubscriptionUsers.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/cloudSubscriptions/CloudSubscriptionRoutes.tsx","webpack://@cpt/commercial-billing-public-portal/./app/client/api/SubscriptionGroupApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/Banner/OldControlCenterBanner.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/CollapsibleLayout/CollapsibleList.tsx","webpack://@cpt/commercial-billing-public-portal/./app/utils/formatters/DateFormatters.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/Dashboard/CloudSubscriptions/CloudSubscriptionNextDate.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Dashboard/CloudSubscriptions/CloudSubscriptionWarningChip.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Dashboard/CloudSubscriptions/CloudSubscription.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Dashboard/ServerLicenses/ServerLicenseNextDate.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/Dashboard/ServerLicenses/ServerLicense.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/OverflowMenu/OverflowMenu.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/components/SubscriptionGroups/DeleteSubscriptionGroupDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/components/SubscriptionHeader.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/components/SubscriptionGroups/InviteUserToSubscriptionGroup.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/components/SubscriptionGroups/AccessControlDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/components/SubscriptionGroups/GroupedSubscriptions.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/components/LicenseHeader.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/components/DashboardHeader.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/components/UngroupedSubscriptions.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/components/DashboardProducts.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/components/views/ClassicDashboard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/components/views/TwentyFiveRedesignDashboard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/dashboard/Dashboard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/client/api/PurchaseApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/MonitoredErrorBoundary/MonitoredErrorBoundary.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/alert/CustomErrorAlert.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/AsteriskIcon.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckoutTextInput.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/ChevronDownIcon.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckoutAutocompleteInput.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckoutDropdownInput.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckoutButtons.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/TentacleHeartIcon.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/LoadingPlaceholder/LoadingPlaceholder.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/LoadingPlaceholder/index.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/ResourceLink/ResourceLink.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/form/FormattedTextAreaStyles/DarkStyle.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/HoverOverlay/HoverOverlay.tsx","webpack://@cpt/commercial-billing-public-portal/./app/components/HoverOverlay/index.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/form/FormattedTextAreaStyles/LightStyle.ts","webpack://@cpt/commercial-billing-public-portal/./app/components/form/FormattedTextArea.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/components/LicenseKeyView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/CheckoutComplete.tsx","webpack://@cpt/commercial-billing-public-portal/./app/contexts/CountriesProvider/CountriesProvider.tsx","webpack://@cpt/commercial-billing-public-portal/./app/client/api/CountriesApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckoutFormField.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckoutTextArea.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/Dialogs/CheckoutContactSalesDialog/CheckoutContactSalesDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/Dialogs/CheckoutContactSalesDialog/CheckoutContactSalesDialogProvider.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckIcon.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckoutCheckbox.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutOrderSummary/SummaryLine.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutOrderSummary/TaxSummary.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutOrderSummary/OrderPreviewSummary.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutOrderSummary/CheckoutOrderSummary.tsx","webpack://@cpt/commercial-billing-public-portal/./app/utils/formatters/StreetAddressFormatter.ts","webpack://@cpt/commercial-billing-public-portal/./app/shared/ZuoraLibraryTypes.ts","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckoutLockIcon.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutStepLayout.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckoutButtonLikeRadio.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckoutPlanConfigRadio.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutPlanConfigurationStep.tsx","webpack://@cpt/commercial-billing-public-portal/./app/resources/scripts/zuora-1.3.1.min.js","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/constants/Zuora.ts","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutZuoraIframe.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutZuoraServerSideErrors.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutPaymentStep.tsx","webpack://@cpt/commercial-billing-public-portal/./app/utils/emailHelpers.ts","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckoutAddressField.tsx","webpack://@cpt/commercial-billing-public-portal/./app/client/api/AddressSearchApi.ts","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckoutStreetAddressInput.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutPersonalDetailsStep.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/components/ServerLicenseExpiryBanner.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/ServerLicenseLayout.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/CheckoutLayout.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutContactSalesStep.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/checkout/components/CheckIconSimple.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutStepProgress.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/components/CheckoutUpgradePlanTitle.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/Checkout.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/components/ServerLicenseHeader.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/finance/SalesforceContractedServerLicensingChannelView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/ServerLicenseCancelPlanDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/finance/StripeSubscriptionServerLicensingChannelView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/finance/TrialServerLicensingChannelView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/finance/ZuoraServerLicensingChannelView.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/ServerLicenseFinance.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/ServerLicenseLoadViaSerial.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/ServerLicenseInstallation/InstallGuide.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/ServerLicenseInstallation/LinuxInstallGuide.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/ServerLicenseInstallation/WindowsInstallGuide.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/ServerLicenseInstallation/KubernetesInstallGuide.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/ServerLicenseInstallation/ServerLicenseInstallation.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/ServerLicenseOverview.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/upgrade/ConfirmStripeUpgradeDialog.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/upgrade/ServerPricingCardAction.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/upgrade/ServerEnterprisePricingCard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/upgrade/ServerProfessionalPricingCard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/components/upgrade/ServerStarterPricingCard.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/ServerLicenseUpgrade.tsx","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/svgs/icon_server.svg","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/components/InviteUserToServerLicense.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/detail/ServerLicenseUsers.tsx","webpack://@cpt/commercial-billing-public-portal/./app/Routes.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/purchasing/PurchasingRoutes.tsx","webpack://@cpt/commercial-billing-public-portal/./app/areas/serverLicenses/ServerLicensesRoutes.tsx","webpack://@cpt/commercial-billing-public-portal/./app/index.tsx","webpack://@cpt/commercial-billing-public-portal/./app/App.tsx","webpack://@cpt/commercial-billing-public-portal/./app/resources/images/error.png"],"sourcesContent":["// extracted by mini-css-extract-plugin\nmodule.exports = {\"hide-sm\":\"style-module_hide-sm__cjkwHWiLe0lYPgohHWiX\",\"hideSm\":\"style-module_hide-sm__cjkwHWiLe0lYPgohHWiX\",\"visible-sm\":\"style-module_visible-sm__oIepSWqFhRnEej68fTAw\",\"visibleSm\":\"style-module_visible-sm__oIepSWqFhRnEej68fTAw\",\"hide-md\":\"style-module_hide-md__tm0B2zFLLJfd7PgzsTZ3\",\"hideMd\":\"style-module_hide-md__tm0B2zFLLJfd7PgzsTZ3\",\"visible-md\":\"style-module_visible-md__ByYksPDNZOiMkXyXm3lv\",\"visibleMd\":\"style-module_visible-md__ByYksPDNZOiMkXyXm3lv\",\"sideMenu\":\"style-module_sideMenu__ilUUbulmcANwsYFhkz_G\",\"breakword\":\"style-module_breakword__W5Et4I1tvD4mZe41_gUY\",\"name\":\"style-module_name__oHx4uOGN6rcZmyP2mmuZ\",\"nameHorizontal\":\"style-module_nameHorizontal__jYJARiWlpweL2v7e0aKQ\",\"resourceType\":\"style-module_resourceType__rAdOIWektZy77zpvInNA\",\"description\":\"style-module_description__SIoXhS5rMf9wpKgDhl5A\",\"preNav\":\"style-module_preNav__aaV7yDeWKPeL1hId4dHG\",\"links\":\"style-module_links__uRk7S_a_XPf7OHG9JW1n\",\"link\":\"style-module_link__KUpBmY8nQWtbIqqKPdXP\",\"selected\":\"style-module_selected__zitui4FAln6EPyHkP3lW\",\"stackedLayout\":\"style-module_stackedLayout__Go8X_dhY538BF1tQ71xw\",\"title\":\"style-module_title__xPde7CdzsjV4kUqOYrqG\",\"logo\":\"style-module_logo__Dx6AHzXN06Bowlxx7akr\",\"horizontalLinks\":\"style-module_horizontalLinks__EyqTi8X8xknnhupRaGfS\",\"sidebarLayout\":\"style-module_sidebarLayout___Y4BuMbA7palYxHZAOCb\",\"sidebarLayoutContent\":\"style-module_sidebarLayoutContent__caSeCjC6Hlf3GItNBHxw\",\"sidebarListSubtitle\":\"style-module_sidebarListSubtitle__Ilptd60hf5dwkU4EwQza\",\"nestedNavLinks\":\"style-module_nestedNavLinks__wis43onsV28G9P8klxuK\",\"nestedNavLinksParent\":\"style-module_nestedNavLinksParent__mfI58lr2gsVMMLsH6d6r\",\"nestedNavLinksParentSelected\":\"style-module_nestedNavLinksParentSelected__wrYyQ9bE3jNlYH4jm5nO\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"hide-sm\":\"style-module_hide-sm__LC8TQ85NSuu5Rnw4sTbW\",\"hideSm\":\"style-module_hide-sm__LC8TQ85NSuu5Rnw4sTbW\",\"visible-sm\":\"style-module_visible-sm__ERBOjEQcLqqBVu0USiNn\",\"visibleSm\":\"style-module_visible-sm__ERBOjEQcLqqBVu0USiNn\",\"hide-md\":\"style-module_hide-md__gw82mZkD32E81VPBrFpE\",\"hideMd\":\"style-module_hide-md__gw82mZkD32E81VPBrFpE\",\"visible-md\":\"style-module_visible-md__GzFiiEgKQcn_O8asUEv8\",\"visibleMd\":\"style-module_visible-md__GzFiiEgKQcn_O8asUEv8\",\"paper\":\"style-module_paper__Uodff4vtba1UZRHZenCF\",\"arrow\":\"style-module_arrow__imEEjBDiMuFfcFgFflCw\",\"popper\":\"style-module_popper__gmrta8Cd7iFAVZIJylFj\",\"globalContainer\":\"style-module_globalContainer__ex3TUj4cvhtWhRPsU3Mb\",\"absolute\":\"style-module_absolute__gV3DuXPG_wyLBJbAbl0r\",\"iconContainer\":\"style-module_iconContainer__LxbgIWj4sOTWWeJhnA8k\",\"circle\":\"style-module_circle__mkhBRwj8kVm5Vd4HeWch\",\"infoIcon\":\"style-module_infoIcon__THb7fIIV5IgmrhQk4SBJ\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {\"hide-sm\":\"style-module_hide-sm__xKY5a44GA3OZMUdJg42y\",\"hideSm\":\"style-module_hide-sm__xKY5a44GA3OZMUdJg42y\",\"visible-sm\":\"style-module_visible-sm__MNHR3OHGow6p9wtmCeeT\",\"visibleSm\":\"style-module_visible-sm__MNHR3OHGow6p9wtmCeeT\",\"hide-md\":\"style-module_hide-md__jgsGAfxAPi6y_jc9Rxeg\",\"hideMd\":\"style-module_hide-md__jgsGAfxAPi6y_jc9Rxeg\",\"visible-md\":\"style-module_visible-md__Uvsz3q8wA4NW1lGJYXsX\",\"visibleMd\":\"style-module_visible-md__Uvsz3q8wA4NW1lGJYXsX\",\"secondary\":\"style-module_secondary__yGEgEtxNxhBHnO_Mx62H\",\"section\":\"style-module_section__E_zfgegB0jT4n5Iy4og5\",\"sectionHeader\":\"style-module_sectionHeader__PDZCuH4y4Vd9jy9R3VIW\",\"sectionBody\":\"style-module_sectionBody__Mt4ppvdS7yC1Tyjk3Hxt\",\"sectionNoHeader\":\"style-module_sectionNoHeader__XUeCPdeSKJdu_yoZIIDV\"};","// extracted by mini-css-extract-plugin\nmodule.exports = {};","// Luxon Configuration\nimport type { Zone } from \"luxon\";\nimport { DateTime, Settings } from \"luxon\";\n\n// documentation has this always being a `Zone` when getting\n// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\nexport const localZone: Zone = Settings.defaultZone as Zone;\nexport const utcZone: Zone = DateTime.utc().zone;\n","export type EnvConfig = {\n WebAppUrl: string;\n ApiUrl: string;\n AppVersion: string;\n Environment: string;\n IsProdEnvironment: boolean;\n OctopusCloudDomain: string;\n OctopusComDomain: string;\n CsrfCookieDomain: string;\n AppInsightsConnectionString: string;\n ClientIpAddress?: string;\n};\n\nexport const envConfig: EnvConfig = {\n WebAppUrl: process.env.WEB_APP_URL || \"NO_WEB_APP_URL_DEFINED\",\n ApiUrl: process.env.API_URL || \"NO_API_URL_DEFINED\",\n AppVersion: process.env.APP_VERSION || \"0.0.0-local-dev\",\n Environment: process.env.ENVIRONMENT || \"Local\",\n IsProdEnvironment: process.env.ENVIRONMENT?.localeCompare(\"Production\") === 0,\n OctopusCloudDomain: process.env.OCTOPUS_CLOUD_DOMAIN || \"NO_CLOUD_DOMAIN_DEFINED\",\n OctopusComDomain: process.env.OCTOPUS_COM_DOMAIN || \"NO_OCTOPUS_COM_DEFINED\",\n CsrfCookieDomain: process.env.CSRF_COOKIE_DOMAIN || \"\",\n AppInsightsConnectionString:\n process.env.PUBLIC_WEB_APP_APP_INSIGHTS_CONNECTION_STRING || \"NO_APP_INSIGHTS_CONNECTION_STRING_DEFINED\",\n /** In local dev can override the ClientIpAddress to support geolocation */\n ClientIpAddress: process.env.CLIENT_IP_ADDRESS || undefined,\n};\n","import { envConfig } from \"utils/envConfig\";\n\nexport default class Environment {\n static isInDevelopmentMode(): boolean {\n return !process.env.NODE_ENV || process.env.NODE_ENV !== \"production\";\n }\n\n // Used for setting the throttle delay duration for the useAsyncRequest hook, this allows us to have a different value in a test environment\n static ApiThrottleDelayMs(): number {\n return process.env.API_THROTTLE_DELAY_MS ? parseInt(process.env.API_THROTTLE_DELAY_MS) : 1000;\n }\n\n // Used to override the ip address in local dev to support geolocation, otherwise expected to be undefined\n static clientIpAddress = () => {\n if (Environment.isInDevelopmentMode() && envConfig.ClientIpAddress) {\n return envConfig.ClientIpAddress;\n }\n return undefined;\n };\n\n static csrfCookieName = \"XSRF-TOKEN\";\n}\n","import { useRef, useState } from \"react\";\nimport type { AxiosError } from \"axios\";\nimport Environment from \"environment\";\nimport { throttle } from \"lodash\";\nimport useDeepCompareEffect from \"use-deep-compare-effect\";\n\nexport type AsyncRequestFunction = (...params: R) => Promise;\n\nexport interface AsyncResponse {\n loading: boolean;\n refresh: () => void;\n data?: T;\n error?: AxiosError;\n}\n\nfunction useAsyncRequest(func: AsyncRequestFunction, ...params: R): AsyncResponse {\n const [data, setData] = useState(undefined);\n const [error, setError] = useState(undefined);\n const [loading, setLoading] = useState(true);\n const [shouldRefresh, setShouldRefresh] = useState(false);\n\n // throttles api calls e.g. only 1 api call will be made within the set delay\n const throttled = useRef(\n throttle((isCleaningUp, params) => {\n setLoading(true);\n setError(undefined);\n func(...params)\n .then((result) => {\n if (!isCleaningUp) {\n setData(result);\n }\n })\n .catch((ex) => {\n if (!isCleaningUp) {\n setError(ex);\n }\n })\n .finally(() => {\n if (!isCleaningUp) {\n setLoading(false);\n }\n });\n }, Environment.ApiThrottleDelayMs())\n );\n\n useDeepCompareEffect(() => {\n let isCleaningUp = false;\n throttled.current(isCleaningUp, params);\n\n return () => {\n isCleaningUp = true;\n };\n }, [func, params, shouldRefresh]);\n\n return {\n data,\n refresh: () => setShouldRefresh(!shouldRefresh),\n loading,\n error,\n };\n}\n\nexport default useAsyncRequest;\n","export enum CloudSubscriptionOutageWindowFrequency {\n Daily = \"Daily\",\n MondayOfEachWeek = \"MondayOfEachWeek\",\n TuesdayOfEachWeek = \"TuesdayOfEachWeek\",\n WednesdayOfEachWeek = \"WednesdayOfEachWeek\",\n ThursdayOfEachWeek = \"ThursdayOfEachWeek\",\n FridayOfEachWeek = \"FridayOfEachWeek\",\n SundayOfEachWeek = \"SundayOfEachWeek\",\n FirstMondayOfEachMonth = \"FirstMondayOfEachMonth\",\n SecondMondayOfEachMonth = \"SecondMondayOfEachMonth\",\n ThirdMondayOfEachMonth = \"ThirdMondayOfEachMonth\",\n}\n\nexport const cloudSubscriptionOutageWindowFrequencyDescriptions: Record<\n CloudSubscriptionOutageWindowFrequency,\n string\n> = {\n [CloudSubscriptionOutageWindowFrequency.Daily]: \"Daily\",\n [CloudSubscriptionOutageWindowFrequency.MondayOfEachWeek]: \"Monday of each week\",\n [CloudSubscriptionOutageWindowFrequency.TuesdayOfEachWeek]: \"Tuesday of each week\",\n [CloudSubscriptionOutageWindowFrequency.WednesdayOfEachWeek]: \"Wednesday of each week\",\n [CloudSubscriptionOutageWindowFrequency.ThursdayOfEachWeek]: \"Thursday of each week\",\n [CloudSubscriptionOutageWindowFrequency.FridayOfEachWeek]: \"Friday of each week\",\n [CloudSubscriptionOutageWindowFrequency.SundayOfEachWeek]: \"Sunday of each week\",\n [CloudSubscriptionOutageWindowFrequency.FirstMondayOfEachMonth]: \"First Monday of each month\",\n [CloudSubscriptionOutageWindowFrequency.SecondMondayOfEachMonth]: \"Second Monday of each month\",\n [CloudSubscriptionOutageWindowFrequency.ThirdMondayOfEachMonth]: \"Third Monday of each month\",\n};\n\nexport function isDailyOutageWindow(outageWindowFrequency: CloudSubscriptionOutageWindowFrequency) {\n return outageWindowFrequency === CloudSubscriptionOutageWindowFrequency.Daily;\n}\n","import { DateTime } from \"luxon\";\nimport { CloudSubscriptionOutageWindowFrequency } from \"utils/CloudSubscription/CloudSubscriptionOutageWindowFrequency\";\nimport type { CloudSubscriptionStatus } from \"utils/CloudSubscription/CloudSubscriptionStatus\";\nimport type { CheckoutSessionDto } from \"client/api/CheckoutSessionDto\";\nimport type { UserGrantInviteDto } from \"client/api/UserGrantApi\";\nimport type { ListQuery } from \"client/api/common/ListQuery\";\nimport axiosClient from \"../axios-client\";\nimport type { IntLimitFeatureDto } from \"./FeatureApi\";\nimport type { UpgradePlan } from \"./UpgradePlan\";\nimport type { ListEntitiesResponse } from \"./common/ListEntitiesResponse\";\nimport type { SubscriptionGroupDto } from \"./common/SubscriptionGroupDto\";\n\nexport type CloudLicensingChannel =\n | SalesforceContractedCloudSubscriptionLicensingChannelDto\n | StripeSubscriptionCloudSubscriptionLicensingChannelDto\n | ZuoraCloudSubscriptionLicensingChannelDto\n | LegacyBraintreeCloudSubscriptionLicensingChannelDto\n | ImportedTrialCloudSubscriptionLicensingChannelDto\n | TrialCloudSubscriptionLicensingChannelDto\n | InfrastructureCloudSubscriptionLicensingChannelDto;\n\nexport type CloudLicensingChannelTypes = (typeof CloudLicensingChannelTypesArr)[number];\n\nexport enum CloudSubscriptionRenewalPeriod {\n Monthly = \"Monthly\",\n Annually = \"Annually\",\n}\n\nexport type MaintenanceWindowDto = {\n startTime: DateTime;\n endTime: DateTime;\n timeZone: string;\n} & (\n | {\n frequency: \"Daily\";\n }\n | {\n frequency: \"Weekly\";\n dayOfWeek: \"Sunday\" | \"Monday\" | \"Tuesday\" | \"Wednesday\" | \"Thursday\" | \"Friday\";\n }\n | {\n frequency: \"Monthly\";\n weekOfMonth: \"First\" | \"Second\" | \"Third\";\n dayOfWeek: \"Monday\";\n }\n);\n\nexport function mapMaintenanceWindowDtoToRequest(maintenanceWindow: MaintenanceWindowDto) {\n function getFrequency() {\n switch (maintenanceWindow.frequency) {\n case \"Daily\":\n return CloudSubscriptionOutageWindowFrequency.Daily;\n break;\n case \"Weekly\":\n switch (maintenanceWindow.dayOfWeek) {\n case \"Monday\":\n return CloudSubscriptionOutageWindowFrequency.MondayOfEachWeek;\n break;\n case \"Tuesday\":\n return CloudSubscriptionOutageWindowFrequency.TuesdayOfEachWeek;\n break;\n case \"Wednesday\":\n return CloudSubscriptionOutageWindowFrequency.WednesdayOfEachWeek;\n break;\n case \"Thursday\":\n return CloudSubscriptionOutageWindowFrequency.ThursdayOfEachWeek;\n break;\n case \"Friday\":\n return CloudSubscriptionOutageWindowFrequency.FridayOfEachWeek;\n break;\n case \"Sunday\":\n return CloudSubscriptionOutageWindowFrequency.SundayOfEachWeek;\n break;\n }\n break;\n case \"Monthly\":\n switch (maintenanceWindow.weekOfMonth) {\n case \"First\":\n return CloudSubscriptionOutageWindowFrequency.FirstMondayOfEachMonth;\n break;\n case \"Second\":\n return CloudSubscriptionOutageWindowFrequency.SecondMondayOfEachMonth;\n break;\n case \"Third\":\n return CloudSubscriptionOutageWindowFrequency.ThirdMondayOfEachMonth;\n break;\n }\n break;\n }\n }\n\n return {\n outageWindowFrequency: getFrequency(),\n outageWindowTimeZone: maintenanceWindow.timeZone,\n outageWindowStart: maintenanceWindow.startTime,\n outageWindowEnd: maintenanceWindow.endTime,\n };\n}\n\nexport const CloudLicensingChannelTypesKeys = {\n Salesforce: \"SalesforceContractedCloudSubscriptionLicensingChannelDto\",\n Stripe: \"StripeSubscriptionCloudSubscriptionLicensingChannelDto\",\n LegacyBraintree: \"LegacyBraintreeCloudSubscriptionLicensingChannelDto\",\n ImportedTrial: \"ImportedTrialCloudSubscriptionLicensingChannelDto\",\n Trial: \"TrialCloudSubscriptionLicensingChannelDto\",\n Zuora: \"ZuoraCloudSubscriptionLicensingChannelDto\",\n Infrastructure: \"InfrastructureCloudSubscriptionLicensingChannelDto\",\n} as const;\n\nexport const CloudLicensingChannelTypesArr = Object.values(CloudLicensingChannelTypesKeys);\n\nexport interface SalesforceContractedCloudSubscriptionLicensingChannelDto {\n id: string;\n channelType: typeof CloudLicensingChannelTypesKeys.Salesforce;\n expiryDate: DateTime;\n salesforceContractId: string;\n}\n\nexport interface StripeSubscriptionCloudSubscriptionLicensingChannelDto {\n id: string;\n channelType: typeof CloudLicensingChannelTypesKeys.Stripe;\n stripeId: string;\n customerId: string;\n status: \"active\" | \"canceled\" | \"incomplete\" | \"incomplete_expired\" | \"trialing\" | \"unpaid\" | \"past_due\";\n nextRenewalDate: DateTime;\n cancelAtPeriodEnd: boolean;\n freemium: boolean;\n priceCode: string | undefined;\n productName: string | undefined;\n outOfOrderTimestamp: DateTime;\n}\n\nexport interface CloudSubscriptionLicensingChannelBase {\n id: string;\n channelType: CloudLicensingChannelTypes;\n}\n\nexport interface RenewableLicensingChannelDto extends CloudSubscriptionLicensingChannelBase {\n /** Note for Zuora this is actually the license expiry currently, see https://github.com/OctopusDeploy/Commercial-Billing/pull/1744 */\n nextRenewalDate: DateTime;\n cancelAtPeriodEnd: boolean;\n}\n\nexport interface ExpiringLicensingChannelDto extends CloudSubscriptionLicensingChannelBase {\n expiryDate: DateTime;\n}\n\nexport interface InternalLicensingChannelDto extends ExpiringLicensingChannelDto {\n autoRenew: boolean;\n renewalPeriod?: CloudSubscriptionRenewalPeriod;\n comment: string;\n}\n\nexport interface ZuoraCloudSubscriptionLicensingChannelDto extends RenewableLicensingChannelDto {\n channelType: typeof CloudLicensingChannelTypesKeys.Zuora;\n zuoraSubscriptionKey: string;\n}\n\nexport interface LegacyBraintreeCloudSubscriptionLicensingChannelDto {\n id: string;\n channelType: typeof CloudLicensingChannelTypesKeys.LegacyBraintree;\n}\n\nexport interface ImportedTrialCloudSubscriptionLicensingChannelDto extends ExpiringLicensingChannelDto {\n id: string;\n channelType: typeof CloudLicensingChannelTypesKeys.ImportedTrial;\n}\n\nexport interface TrialCloudSubscriptionLicensingChannelDto extends ExpiringLicensingChannelDto {\n id: string;\n channelType: typeof CloudLicensingChannelTypesKeys.Trial;\n trialId: string;\n createdDate: DateTime;\n}\n\nexport interface InfrastructureCloudSubscriptionLicensingChannelDto extends InternalLicensingChannelDto {\n channelType: typeof CloudLicensingChannelTypesKeys.Infrastructure;\n}\n\nexport interface CloudSubscriptionDto {\n id: string;\n serial: string;\n isFulfilled: boolean;\n serialHash: string;\n friendlyName: string;\n cloudRegionId: string;\n dnsPrefix: string;\n maintenanceWindow: MaintenanceWindowDto;\n isInstanceProvisioned: boolean;\n cloudSubscriptionStatus: CloudSubscriptionStatus;\n taskCap?: number;\n storageLimitInGb?: number;\n fileUsageInGb?: number;\n tenantLimit: IntLimitFeatureDto;\n machineLimit: IntLimitFeatureDto;\n projectLimit: IntLimitFeatureDto;\n retentionLimitInDays?: IntLimitFeatureDto;\n subscriptionGroup?: SubscriptionGroupDto;\n createdDate: DateTime;\n licensingChannel: LicensingChannel;\n customerSpecifiedMachineLimit?: number;\n}\n\nexport enum AssumedInstanceProvisioningState {\n Succeeded,\n Provisioning,\n Failed,\n}\n\nconst BASE_URL = \"cloud-subscriptions\";\n\nexport type GetCloudSubscriptionsResponse = ListEntitiesResponse;\n\nexport const getCloudSubscriptions = async (query: ListQuery): Promise => {\n const response = await axiosClient.get(BASE_URL, {\n params: query,\n });\n return response.data;\n};\n\nexport const getCloudSubscriptionById = async (cloudSubscriptionId: string): Promise => {\n const response = await axiosClient.get(`${BASE_URL}/${cloudSubscriptionId}`);\n return response.data;\n};\n\nexport const getCloudSubscriptionBySerial = async (serialId: string): Promise => {\n const response = await axiosClient.get(`${BASE_URL}/serial/${serialId}`);\n return response.data;\n};\n\nexport type CustomerPortalSessionDto = {\n url: string;\n};\n\nexport const createCloudSubscriptionCheckoutUrl = async (\n cloudSubscriptionId: string,\n targetPlan: UpgradePlan,\n machineLimitOverride: number | null\n): Promise => {\n const response = await axiosClient.post(`${BASE_URL}/${cloudSubscriptionId}/checkout-sessions`, {\n targetPlan,\n machineLimitOverride,\n });\n return response.data;\n};\n\nexport const createCloudSubscriptionCustomerPortalUrl = async (\n cloudSubscriptionId: string,\n returnUrl: string\n): Promise => {\n const response = await axiosClient.post(\n `${BASE_URL}/${cloudSubscriptionId}/customer-portal-sessions`,\n {\n returnUrl,\n }\n );\n return response.data;\n};\n\nexport const inviteUserToCloudSubscription = async (\n cloudSubscriptionId: string | undefined,\n email: string,\n fullName: string,\n senderName: string,\n team: string\n): Promise => {\n const response = await axiosClient.post(`${BASE_URL}/${cloudSubscriptionId}/invites`, {\n email,\n fullName,\n senderName,\n team,\n });\n return response.data;\n};\n\nexport const updateCloudSubscriptionOutageWindow = async (\n cloudSubscriptionId: string,\n outageWindowStartUtc: DateTime,\n outageWindowEndUtc: DateTime\n) => {\n const response = await axiosClient.put(`${BASE_URL}/${cloudSubscriptionId}/outage-window`, {\n outageWindowStartUtc: outageWindowStartUtc.toUTC().toLocaleString(DateTime.TIME_24_WITH_SECONDS),\n outageWindowEndUtc: outageWindowEndUtc.toUTC().toLocaleString(DateTime.TIME_24_WITH_SECONDS),\n });\n return response.data;\n};\n\nexport const changeCloudSubscriptionDnsPrefix = async (cloudSubscriptionId: string, dnsPrefix: string) => {\n await axiosClient.put(`${BASE_URL}/${cloudSubscriptionId}/dns-prefix`, { dnsPrefix: dnsPrefix });\n};\n\nexport const updateCloudSubscriptionFriendlyName = async (cloudSubscriptionId: string, friendlyName: string) => {\n const response = await axiosClient.put(`${BASE_URL}/${cloudSubscriptionId}/friendly-name`, {\n friendlyName,\n });\n return response.data;\n};\n\nexport const cancelCloudSubscription = async (\n cloudSubscription: CloudSubscriptionDto\n): Promise => {\n const response = await axiosClient.delete(`${BASE_URL}/${cloudSubscription.id}`);\n return response.data;\n};\n\nexport const updateCustomerSpecifiedMachineLimit = async (\n cloudSubscription: CloudSubscriptionDto,\n machineLimit?: number\n): Promise => {\n const response = await axiosClient.put(\n `${BASE_URL}/${cloudSubscription.id}/customer-specified-machine-limit`,\n {\n machineLimit,\n }\n );\n return response.data;\n};\n\nexport const changeStripeProduct = async (cloudSubscriptionId: string, targetPlan: UpgradePlan): Promise => {\n await axiosClient.put(`${BASE_URL}/${cloudSubscriptionId}/licensing-channel/product`, {\n cloudSubscriptionId,\n targetPlan,\n });\n};\n\nexport const checkCloudSubscriptionFulfilled = async (cloudSubscriptionId: string): Promise => {\n const response = await axiosClient.get(`${BASE_URL}/${cloudSubscriptionId}/fulfilled`);\n return response.data;\n};\n\nexport function isTrialLicensingChannel(\n licensingChannel: CloudLicensingChannel\n): licensingChannel is TrialCloudSubscriptionLicensingChannelDto {\n return licensingChannel.channelType === \"TrialCloudSubscriptionLicensingChannelDto\";\n}\n","import type { DateTime } from \"luxon\";\nimport type { CheckoutSessionDto } from \"client/api/CheckoutSessionDto\";\nimport type { CustomerPortalSessionDto } from \"client/api/CloudSubscriptionApi\";\nimport type { ListQuery } from \"client/api/common/ListQuery\";\nimport axiosClient from \"../axios-client\";\nimport type { IntLimitFeatureDto } from \"./FeatureApi\";\nimport type { UpgradePlan } from \"./UpgradePlan\";\nimport type { UserGrantInviteDto } from \"./UserGrantApi\";\nimport type { ListEntitiesResponse } from \"./common/ListEntitiesResponse\";\nimport type { SubscriptionGroupDto } from \"./common/SubscriptionGroupDto\";\n\nexport interface ServerLicenseDto {\n id: string;\n friendlyName?: string;\n serial: string;\n serialHash: string;\n validFromDate: DateTime;\n maintenanceExpiresDate: DateTime;\n expiryDate: DateTime;\n tenantLimit: IntLimitFeatureDto;\n machineLimit: IntLimitFeatureDto;\n projectLimit?: IntLimitFeatureDto;\n userLimit?: IntLimitFeatureDto;\n taskCap?: number;\n workerLimit?: IntLimitFeatureDto;\n spaceLimit?: IntLimitFeatureDto;\n nodeLimit?: IntLimitFeatureDto;\n restrictedPermissions?: boolean;\n serviceNowFeatureExpiryDate: DateTime;\n spaceLevelInsightsFeatureExpiryDate: DateTime;\n auditLogFeedsFeatureExpiryDate: DateTime;\n jiraServiceManagementFeatureExpiryDate: DateTime;\n subscriptionGroup?: SubscriptionGroupDto;\n createdDate: DateTime;\n licensingChannel: ServerLicensingChannel;\n isFulfilled: boolean;\n}\n\nexport type ServerLicensingChannel =\n | SalesforceContractedServerLicensingChannelDto\n | StripeSubscriptionServerLicensingChannelDto\n | TemporaryServerLicensingChannelDto\n | TrialServerLicensingChannelDto\n | ZuoraServerLicensingChannelDto;\n\nexport type ServerLicensingChannelTypes = (typeof ServerLicensingChannelTypesArr)[number];\n\nexport const ServerLicensingChannelTypesKeys = {\n Temporary: \"TemporaryServerLicensingChannelDto\",\n Trial: \"TrialServerLicensingChannelDto\",\n Salesforce: \"SalesforceContractedServerLicensingChannelDto\",\n Stripe: \"StripeSubscriptionServerLicensingChannelDto\",\n Zuora: \"ZuoraServerLicensingChannelDto\",\n} as const;\n\nexport const ServerLicensingChannelTypesArr = Object.values(ServerLicensingChannelTypesKeys);\n\nexport interface ServerLicensingChannelBase {\n id: string;\n channelType: ServerLicensingChannelTypes;\n}\nexport interface RenewableLicensingChannelDto extends ServerLicensingChannelBase {\n /** Note for Zuora this is actually the license expiry currently, see https://github.com/OctopusDeploy/Commercial-Billing/pull/1744 */\n nextRenewalDate: DateTime;\n cancelAtPeriodEnd: boolean;\n}\n\nexport interface TemporaryServerLicensingChannelDto extends ServerLicensingChannelBase {\n id: string;\n channelType: typeof ServerLicensingChannelTypesKeys.Temporary;\n createdDate: DateTime;\n expiryDate: DateTime;\n}\n\nexport interface TrialServerLicensingChannelDto extends ServerLicensingChannelBase {\n id: string;\n channelType: typeof ServerLicensingChannelTypesKeys.Trial;\n trialId: string;\n createdDate: DateTime;\n expiryDate: DateTime;\n}\n\nexport interface ZuoraServerLicensingChannelDto extends RenewableLicensingChannelDto {\n channelType: typeof ServerLicensingChannelTypesKeys.Zuora;\n zuoraSubscriptionKey: string;\n}\n\nexport interface SalesforceContractedServerLicensingChannelDto extends ServerLicensingChannelBase {\n id: string;\n channelType: typeof ServerLicensingChannelTypesKeys.Salesforce;\n expiryDate: DateTime;\n salesforceContractId: string;\n}\n\nexport interface StripeSubscriptionServerLicensingChannelDto extends ServerLicensingChannelBase {\n id: string;\n channelType: typeof ServerLicensingChannelTypesKeys.Stripe;\n stripeId: string;\n customerId: string;\n status: \"active\" | \"canceled\" | \"incomplete\" | \"incomplete_expired\" | \"trialing\" | \"unpaid\" | \"past_due\";\n nextRenewalDate: DateTime;\n cancelAtPeriodEnd: boolean;\n freemium: boolean;\n priceCode: string | undefined;\n productName: string | undefined;\n outOfOrderTimestamp: DateTime;\n}\n\nexport function isZuoraServerLicenseChannel(\n licensingChannel: ServerLicensingChannel\n): licensingChannel is ZuoraServerLicensingChannelDto {\n return licensingChannel.channelType === ServerLicensingChannelTypesKeys.Zuora;\n}\n\nexport function isStripeServerLicenseChannel(\n licensingChannel: ServerLicensingChannel\n): licensingChannel is StripeSubscriptionServerLicensingChannelDto {\n return licensingChannel.channelType === ServerLicensingChannelTypesKeys.Stripe;\n}\n\nexport function isPaymentOverdue(serverLicense: ServerLicenseDto): boolean {\n return isStripeServerLicenseChannel(serverLicense.licensingChannel)\n ? serverLicense.licensingChannel.status === \"past_due\" || serverLicense.licensingChannel.status === \"unpaid\"\n : false;\n}\n\nconst BASE_URL = \"server-licenses\";\n\nexport type GetServerLicensesResponse = ListEntitiesResponse;\n\nexport const getServerLicenses = async (query: ListQuery): Promise => {\n const response = await axiosClient.get(BASE_URL, {\n params: query,\n });\n return response.data;\n};\n\nexport const getServerLicenseById = async (serverLicenseId: string): Promise => {\n const response = await axiosClient.get(`${BASE_URL}/${serverLicenseId}`);\n return response.data;\n};\n\nexport const getServerLicenseBySerial = async (serialId: string): Promise => {\n const response = await axiosClient.get(`${BASE_URL}/serial/${serialId}`);\n return response.data;\n};\n\nexport interface LicenseXmlDto {\n id: string;\n licenseXml: string;\n}\n\nexport const getLicenseXmlById = async (licenseId: string): Promise => {\n const response = await axiosClient.get(`${BASE_URL}/${licenseId}/license-xml`);\n return response.data;\n};\n\nexport const checkServerLicenseFulfilled = async (licenseId: string): Promise => {\n const response = await axiosClient.get(`${BASE_URL}/${licenseId}/fulfilled`);\n return response.data;\n};\n\nexport const createServerLicenseCustomerPortalUrl = async (\n serverLicenseId: string,\n returnUrl: string\n): Promise => {\n const response = await axiosClient.post(\n `${BASE_URL}/${serverLicenseId}/customer-portal-sessions`,\n {\n returnUrl,\n }\n );\n return response.data;\n};\n\n/*\n public enum MachineLimitUpdateTiming\n {\n Immediately,\n NextRenewal\n }\n */\n\nexport type MachineLimitUpdateTiming = \"Immediately\" | \"NextRenewal\";\n\nexport const updateMachineLimit = async (\n serverLicenseId: string,\n machineLimit: number,\n updatesAt: MachineLimitUpdateTiming,\n previewDate?: DateTime\n): Promise => {\n const response = await axiosClient.put(`${BASE_URL}/${serverLicenseId}/machine-limit`, {\n id: serverLicenseId,\n machineLimit,\n updatesAt,\n previewDate: previewDate?.toUTC()?.toISODate(),\n });\n\n return response.data;\n};\n\nexport interface PreviewServerLicenseMachineLimitUpdateResponse {\n currency: string;\n amountDue: number;\n tax?: number;\n previewDate: DateTime;\n}\n\nexport const previewMachineLimitUpdate = async (\n serverLicenseId: string,\n machineLimit: number,\n updatesAt: MachineLimitUpdateTiming,\n previewNoChange: boolean\n): Promise => {\n const response = await axiosClient.post(\n `${BASE_URL}/${serverLicenseId}/machine-limit/preview`,\n {\n machineLimit,\n updatesAt,\n previewNoChange,\n }\n );\n\n return response.data;\n};\n\nexport const createServerLicenseCheckoutUrl = async (\n serverLicenseId: string,\n targetPlan: UpgradePlan\n): Promise => {\n const response = await axiosClient.post(`${BASE_URL}/${serverLicenseId}/checkout-sessions`, {\n targetPlan,\n });\n return response.data;\n};\n\nexport const cancelServerLicense = async (serverLicense: ServerLicenseDto): Promise => {\n const response = await axiosClient.delete(`${BASE_URL}/${serverLicense.id}`);\n return response.data;\n};\n\nexport const changeStripeProduct = async (serverLicenseId: string, targetPlan: UpgradePlan): Promise => {\n await axiosClient.put(`${BASE_URL}/${serverLicenseId}/licensing-channel/product`, {\n serverLicenseId,\n targetPlan,\n });\n};\n\nexport const inviteUserToServerLicense = async (\n serverLicenseId: string | undefined,\n email: string,\n fullName: string,\n senderName: string,\n team: string\n): Promise => {\n const response = await axiosClient.post(`${BASE_URL}/${serverLicenseId}/invites`, {\n email,\n fullName,\n senderName,\n team,\n });\n return response.data;\n};\n","// Wrapper functions for methods that don't exist in JSdom, since it's easier to mock these than it is to mock JSDom implementations\n// All of these functions are auto mocked - See testUtils/setup for details;\nimport type { ProductType } from \"shared/ProductType\";\nimport type { CustomerPortalSessionDto } from \"client/api/CloudSubscriptionApi\";\nimport { createCloudSubscriptionCustomerPortalUrl } from \"client/api/CloudSubscriptionApi\";\nimport { createServerLicenseCustomerPortalUrl } from \"client/api/ServerLicenseApi\";\nimport type { UpgradePlan } from \"client/api/UpgradePlan\";\n\nexport const navigateToAuth = (): void =>\n window.location.assign(`/auth?returnUrl=${window.location.pathname}${window.location.search}`);\n\nexport const navigateToExternalSite = (url: string): void => window.location.assign(url);\nexport const openTabToExternalSite = (url: string): void => window.open(url, \"_blank\")?.focus();\n\nexport const navigateToStripeCustomerPortal = async (\n productType: ProductType,\n productId: string,\n newTab: boolean = false\n): Promise => {\n let customerPortalSession: CustomerPortalSessionDto | null = null;\n\n switch (productType) {\n case \"CloudSubscription\":\n customerPortalSession = await createCloudSubscriptionCustomerPortalUrl(productId, window.location.href);\n break;\n case \"ServerLicense\":\n customerPortalSession = await createServerLicenseCustomerPortalUrl(productId, window.location.href);\n break;\n }\n\n if (customerPortalSession !== null) {\n newTab ? openTabToExternalSite(customerPortalSession.url) : navigateToExternalSite(customerPortalSession.url);\n }\n};\n\nexport const navigateToStripeCheckoutPage = async (\n productType: ProductType,\n productId: string,\n targetPlan: UpgradePlan,\n machineLimitOverride: number | null\n): Promise => {\n return; // temporary disable self-serve\n // let session: CheckoutSessionDto | null = null;\n\n // switch (productType) {\n // case \"CloudSubscription\":\n // session = await createCloudSubscriptionCheckoutUrl(productId, targetPlan, machineLimitOverride);\n // break;\n // case \"ServerLicense\":\n // session = await createServerLicenseCheckoutUrl(productId, targetPlan);\n // break;\n // }\n\n // if (session !== null) {\n // navigateToExternalSite(session.checkoutUrl);\n // }\n};\n","import axiosClient from \"client/axios-client\";\n\nexport const BASE_URL = \"csrf\";\n\nexport const getCsrfToken = async (): Promise => {\n const response = await axiosClient.get(BASE_URL, {});\n return response.data;\n};\n","import type { AxiosRequestConfig, AxiosResponse } from \"axios\";\nimport axios from \"axios\";\nimport Environment from \"environment\";\nimport Cookies from \"js-cookie\";\nimport qs from \"qs\";\nimport { interceptAndDeserializeDateTimes } from \"@cpt/shared\";\nimport { navigateToAuth } from \"utils/navigationHelpers\";\nimport { BASE_URL as CSRF_BASE_URL, getCsrfToken } from \"./api/CsrfApi\";\n\nconst defaultAxiosConfig: AxiosRequestConfig = {\n baseURL: process.env.API_URL,\n paramsSerializer: (params) => {\n return qs.stringify(params, { allowDots: true });\n },\n};\n\nlet isRedirecting = false;\n\nexport const unauthenticatedAxiosClient = axios.create(defaultAxiosConfig);\nconst axiosClient = axios.create({\n ...defaultAxiosConfig,\n withCredentials: true, // Note: auth token is sent in cookies\n});\n\naxiosClient.interceptors.request.use(\n async (req) => {\n // resolve query requests early\n const nonCsrfMethods = [\"get\", \"head\", \"options\", \"trace\"];\n if (req.method && nonCsrfMethods.includes(req.method.toLowerCase())) {\n return Promise.resolve(req);\n }\n\n // if we're already redirecting then bail out of making the request to allow the navigation to be processed more quickly\n if (isRedirecting) {\n return Promise.reject();\n }\n\n // for commands, check if we already have a csrf token, if not then get one before making the request\n const csrfToken = Cookies.get(Environment.csrfCookieName);\n if (!csrfToken && req.url !== CSRF_BASE_URL) {\n await getCsrfToken();\n }\n\n return Promise.resolve(req);\n },\n (error) => Promise.reject(error)\n);\n\naxiosClient.interceptors.response.use(\n (req) => Promise.resolve(req),\n async (error) => {\n // if unauthenticated send user through auth flow\n if (error?.response?.status === 401) {\n isRedirecting = true;\n navigateToAuth();\n }\n\n throw error;\n }\n);\n\naxiosClient.interceptors.response.use((res: AxiosResponse) => {\n if (window.MiniProfiler) {\n const header = res.headers[\"x-miniprofiler-ids\"];\n if (header) {\n const ids: string[] = JSON.parse(header);\n window.MiniProfiler.fetchResults(ids);\n }\n }\n\n return res;\n});\n\naxiosClient.interceptors.response.use(interceptAndDeserializeDateTimes);\n\nexport default axiosClient;\n","import axiosClient from \"client/axios-client\";\n\nconst BASE_URL = \"configuration\";\n\nexport type ConfigurationResponseDto = {\n serverLicenseUpgradeMaximumTargets: number;\n zuoraHostedPaymentPageId: string;\n zuoraHostedPaymentPageUri: string;\n zuoraTenantId: number;\n zuoraPaymentGatewayName: string;\n};\n\nexport const getConfiguration = async (): Promise => {\n const response = await axiosClient.get(`${BASE_URL}`, {});\n return response.data;\n};\n\nexport type FeatureFlagResponseDto = Record;\nexport const getFeatureFlags = async (): Promise => {\n const response = await axiosClient.get(`${BASE_URL}/features`, {});\n return response.data;\n};\n","import type { ReactNode } from \"react\";\nimport React, { createContext, useContext } from \"react\";\nimport type { FeatureFlag } from \"contexts/ConfigurationProvider/FeatureFlag\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport type { ConfigurationResponseDto } from \"client/api/ConfigurationApi\";\nimport { getConfiguration, getFeatureFlags } from \"client/api/ConfigurationApi\";\n\nexport interface ConfigurationState {\n configuration: ConfigurationResponseDto | undefined;\n isFeatureFlagEnabled(flag: FeatureFlag): boolean;\n refresh: () => void;\n}\n\ninterface ConfigurationProviderProps {\n children: ReactNode;\n}\nconst ConfigurationProviderContext = createContext({\n configuration: undefined,\n isFeatureFlagEnabled: (flag: FeatureFlag) => {\n return false;\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n refresh: () => {},\n});\n\nexport const useConfiguration = () => {\n return useContext(ConfigurationProviderContext);\n};\n\nexport function ConfigurationProvider(props: ConfigurationProviderProps) {\n const { children } = props;\n const { data: configuration, refresh: refreshConfiguration } = useAsyncRequest(getConfiguration);\n const { data: featureFlags = {}, refresh: refreshFeatureFlags } = useAsyncRequest(getFeatureFlags);\n\n const isFeatureFlagEnabled = (flag: FeatureFlag) => {\n return featureFlags[flag] ?? false;\n };\n\n const refresh = () => {\n refreshConfiguration();\n refreshFeatureFlags();\n };\n\n return (\n \n {children}\n \n );\n}\n\nexport const useFeatureFlag = (flag: FeatureFlag) => {\n const { isFeatureFlagEnabled } = useConfiguration();\n return isFeatureFlagEnabled(flag);\n};\n","import React, { createContext, useContext } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { FrontendMonitoring } from \"FrontendMonitoring\";\n\ninterface FrontendMonitoringContextProps {\n frontendMonitoring: FrontendMonitoring;\n}\n\nconst FrontendMonitoringContext = createContext(undefined);\n\ninterface FrontendMonitoringProviderProps {\n children: ReactNode;\n frontendMonitoring: FrontendMonitoring;\n}\n\nexport const FrontendMonitoringProvider: React.FC = ({\n children,\n frontendMonitoring,\n}) => {\n return (\n {children}\n );\n};\n\nexport const useFrontendMonitoring = (): FrontendMonitoringContextProps => {\n const context = useContext(FrontendMonitoringContext);\n if (context === undefined) {\n throw new Error(\"useFrontendMonitoring must be used within a FrontendMonitoringProvider\");\n }\n return context;\n};\n","import React, { createContext, useContext, useEffect, useState } from \"react\";\nimport type { PropsWithChildren } from \"react\";\nimport type { AlertColor } from \"@mui/material\";\nimport { Snackbar } from \"@mui/material\";\nimport type { AlertProps } from \"@mui/material/Alert\";\nimport MuiAlert from \"@mui/material/Alert\";\n\nconst Alert = React.forwardRef(function Alert(props, ref) {\n return ;\n});\n\nexport interface AlertProviderState {\n sendNewAlert: (message: string, severity?: AlertSeverity) => void;\n}\n\nconst AlertProviderContext = createContext({\n sendNewAlert: (message: string, severity?: AlertSeverity) => {\n return;\n },\n});\n\nexport const useAlerts = (): AlertProviderState => {\n return useContext(AlertProviderContext);\n};\n\ntype AlertProviderProps = PropsWithChildren<{\n sendNewAlert?: (message: string, severity?: AlertSeverity) => void;\n}>;\nexport enum AlertSeverity {\n Error = \"error\",\n Warning = \"Warning\",\n Info = \"info\",\n Success = \"success\",\n}\n\nexport interface AlertMessage {\n message: string;\n severity: AlertSeverity;\n key: number;\n}\n\nexport function AlertProvider(props: AlertProviderProps) {\n const { children } = props;\n const [alerts, setAlerts] = useState([]);\n const [messageInfo, setMessageInfo] = useState(undefined);\n const [open, setOpen] = useState(false);\n\n useEffect(() => {\n if (alerts.length && !messageInfo) {\n const firstItem = alerts[0];\n\n if (!firstItem) {\n return;\n }\n setMessageInfo({ ...firstItem });\n setAlerts((prev) => prev.slice(1));\n setOpen(true);\n } else if (alerts.length && messageInfo && open) {\n // Close an active alert when a new one is added\n setOpen(false);\n }\n }, [alerts, messageInfo, open]);\n\n const handleClose = (event: React.SyntheticEvent | Event, reason?: string) => {\n if (reason === \"clickaway\") {\n return;\n }\n\n setOpen(false);\n };\n\n const handleExited = () => {\n setMessageInfo(undefined);\n };\n\n const createNewAlert = (message: string, severity: AlertSeverity = AlertSeverity.Info) => {\n setAlerts((prev) => [...prev, { message, severity, key: new Date().getTime() }]);\n };\n\n return (\n \n {children}\n \n {/* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */}\n \n {messageInfo?.message}\n \n \n \n );\n}\n","// TODO: replace this with the export from @octopusdeploy/design-system-components\n// when that package can be installed. Context: https://octopusdeploy.slack.com/archives/C02PAUNL6J0/p1683699335495959\nimport type { PropsWithChildren } from \"react\";\nimport React from \"react\";\nimport type { OctopusTheme } from \"@octopusdeploy/design-system-tokens\";\nimport { darkTheme, lightTheme } from \"@octopusdeploy/design-system-tokens\";\n\nexport type ThemeName = \"light\" | \"dark\";\n\nexport interface GlobalThemeProps {\n themeName: ThemeName;\n}\n\nexport function GlobalThemeApplier({ themeName }: PropsWithChildren) {\n React.useEffect(() => {\n const theme: OctopusTheme = themeName === \"light\" ? lightTheme : darkTheme;\n const themeCssVariableProps = Object.entries(theme).map(\n ([cssVariableName, value]) => `--${cssVariableName}: ${value};`\n );\n\n const serializedCss = `:root {\n${themeCssVariableProps.join(\"\\n\")}\n}`;\n\n // We manually inject the styles ourselves rather than using injectGlobals from emotion\n // injectGlobals does not have a way to remove or replace previously injected styles, so changing themes causes a new global style to be added\n let styleElement = document.querySelector(`#${globalStyleNodeId}`);\n if (styleElement) {\n styleElement.innerHTML = serializedCss;\n } else {\n styleElement = document.createElement(\"style\");\n styleElement.setAttribute(\"id\", globalStyleNodeId);\n styleElement.innerHTML = serializedCss;\n document.head.appendChild(styleElement);\n }\n }, [themeName]);\n\n return null;\n}\n\nconst globalStyleNodeId = \"octopus-global-theme\";\n","import { ReactPlugin } from \"@microsoft/applicationinsights-react-js\";\nimport { ApplicationInsights } from \"@microsoft/applicationinsights-web\";\nimport { envConfig } from \"utils/envConfig\";\n\nexport const setupAppInsights = () => {\n if (\n envConfig.AppInsightsConnectionString &&\n envConfig.AppInsightsConnectionString != \"NO_APP_INSIGHTS_CONNECTION_STRING_DEFINED\"\n ) {\n const reactPlugin = new ReactPlugin();\n const appInsights = new ApplicationInsights({\n config: {\n connectionString: envConfig.AppInsightsConnectionString,\n enableAutoRouteTracking: true,\n enableCorsCorrelation: true,\n disableExceptionTracking: true, // we manually collect errors on window error event\n extensions: [reactPlugin],\n },\n });\n\n appInsights.loadAppInsights();\n return appInsights;\n }\n return undefined;\n};\n","import type { AxiosResponse } from \"axios\";\nimport { envConfig } from \"utils/envConfig\";\nimport axiosClient from \"../axios-client\";\n\nconst BASE_URL = \"ingest\";\n\n// See the definition of this format here: https://github.com/serilog/serilog-formatting-compact\nexport interface SerilogCompactFormatLogEvent {\n \"@t\": string; // An ISO 8601 timestamp\n \"@m\": string;\n \"@l\": SerilogLogLevel;\n \"@x\"?: string; // Stack trace\n SourceContext: string; //App name (ControlCenter or AdminPortal)\n Environment: string; // Environment (Local, Dev *, PreProd, Production)\n}\n\nexport type SerilogLogLevel = \"Verbose\" | \"Debug\" | \"Information\" | \"Warning\" | \"Error\" | \"Fatal\";\n\n// There are some types we don't support here - such as symbols or functions.\n// There is probably never a useful time to pass them to a logger,\n// and knowing this fact makes the logging pipeline easier to implement\nexport type SerilogPropertyValue = string | number | object | boolean | undefined | null;\n\nexport const logError = async (message: string) => {\n await axiosClient\n .post(BASE_URL, {\n \"@t\": new Date().toISOString(),\n \"@m\": message,\n \"@l\": \"Error\",\n SourceContext: \"ControlCenter\",\n Environment: envConfig.Environment,\n })\n .catch(() => {});\n};\n\nexport const logErrorWithException = async (\n message: string,\n exception: string,\n customProperties?: Record\n) => {\n await axiosClient\n .post }>(\n BASE_URL,\n {\n \"@t\": new Date().toISOString(),\n \"@m\": message,\n \"@x\": exception,\n \"@l\": \"Error\",\n SourceContext: \"ControlCenter\",\n Environment: envConfig.Environment,\n ExceptionProperties: { ...customProperties },\n }\n )\n .catch(() => {});\n};\n","import axios from \"axios\";\nimport { setupAppInsights } from \"setupAppInsights\";\nimport { logErrorWithException } from \"client/api/LoggingApi\";\n\nexport enum SeverityLevel {\n Verbose = 0,\n Information = 1,\n Warning = 2,\n Error = 3,\n Critical = 4,\n}\n\ninterface ExceptionTelemetry {\n id?: string;\n exception?: Error;\n severityLevel: SeverityLevel;\n}\n\ninterface PageViewTelemetry {\n /** Name of the pageview. Defaults to the document title. */\n name?: string;\n /** A relative or absolute URL that identifies the page or other item. Defaults to the window location. */\n uri?: string;\n /** The URL of the source page where current page is loaded from. */\n refUri?: string;\n /** Page Type string. Describes how you classify this page, e.g. errorPage, formPage, etc. */\n pageType?: string;\n /** Is the user logged in? */\n isLoggedIn?: boolean;\n /** Time first page view is triggered. */\n startTime?: Date;\n}\n\ninterface TraceTelemetry {\n message: string;\n severityLevel: SeverityLevel;\n}\n\nexport class FrontendMonitoring {\n private _appInsights;\n private _eventHandlers: {\n onError?: void;\n onUnhandledRejection?: void;\n } = {};\n private _authedUserId?: string;\n\n constructor() {\n this._appInsights = this.setupAppInsights();\n this._authedUserId = undefined;\n }\n\n private setupAppInsights = () => {\n const appInsights = setupAppInsights();\n this.addEventHandlers();\n return appInsights;\n };\n\n private addEventHandlers = () => {\n this._eventHandlers.onError = window.addEventListener(\"error\", (event) => {\n const { filename, lineno, colno, error } = event;\n error.message = `Uncaught Error: ${error.message}`;\n this.trackException(\n { exception: error, severityLevel: SeverityLevel.Error },\n {\n url: filename,\n errorSrc: `window.onerror@${filename}:${lineno}:${colno}`,\n lineNumber: lineno,\n columnNumber: colno,\n }\n );\n });\n\n this._eventHandlers.onUnhandledRejection = window.addEventListener(\"unhandledrejection\", (event) => {\n const url = axios.isAxiosError(event.reason) ? event.reason.config.url : undefined;\n this.trackException(\n {\n exception: new Error(`Unhandled Rejection: ${event.reason.message}, url: ${url}`),\n severityLevel: SeverityLevel.Error,\n },\n {\n typeName: \"UnhandledRejection\",\n url,\n }\n );\n });\n };\n\n private removeEventHandlers = () => {\n this._eventHandlers?.onError && window.removeEventListener(\"error\", this._eventHandlers.onError);\n this._eventHandlers?.onUnhandledRejection &&\n window.removeEventListener(\"unhandledrejection\", this._eventHandlers.onUnhandledRejection);\n };\n\n /**\n * Identify the authenticated user in logs\n * @param userId\n */\n public identifyUser = (userId: string) => {\n // If the id hasn't changed there should be no need to identify them again so exit early\n if (userId === this._authedUserId) {\n return;\n }\n if (this._appInsights) {\n this._authedUserId = userId;\n this._appInsights.setAuthenticatedUserContext(userId);\n }\n };\n\n /**\n * Log an exception that you have caught.\n * @param exception\n * @param customProperties\n */\n public trackException = (exception: ExceptionTelemetry, customProperties?: Record) => {\n this._appInsights?.trackException(exception, customProperties);\n\n const message = exception.exception?.message ?? \"\";\n const errorString = exception.exception?.stack ?? exception.exception?.toString() ?? \"\";\n logErrorWithException(message, errorString, customProperties);\n };\n\n /**\n * Log a user action or other occurrence.\n * @param event\n * @param event.name\n * @param customProperties\n */\n public trackEvent = (event: { name: string }, customProperties?: Record) => {\n this._appInsights?.trackEvent(event, customProperties);\n };\n\n /**\n * Logs that a page, or similar container was displayed to the user.\n * @param pageView\n */\n public trackPageView = (pageView?: PageViewTelemetry) => {\n this._appInsights?.trackPageView(pageView);\n };\n\n /**\n * Log a diagnostic scenario such as entering or leaving a function\n * @param trace\n * @param customProperties\n */\n public trackTrace = (trace: TraceTelemetry, customProperties?: Record) => {\n this._appInsights?.trackTrace(trace, customProperties);\n };\n}\n","export const RoutesMap = {\n root: \"/\",\n inviteAccept: (invite: string) => ({\n root: `/subscription-groups/invite/accept/${invite}`,\n }),\n loadSerial: (serialId: string) => ({\n upgrade: `/serial/${serialId}/upgrade`,\n }),\n serial: {\n upgrade: \"/serial/upgrade\",\n },\n completingPayment: \"/completing-payment\",\n completingUpgrade: \"/completing-upgrade\",\n completingSetup: \"/completing-renewal-setup\",\n completingTrialFulfillment: \"/completing-trial\",\n zuoraCallbackPage: `/zuora/callback`,\n notFound: \"/not-found\",\n fallback: \"*\",\n};\n","import axiosClient from \"client/axios-client\";\nimport type { RbacPermission } from \"components/authorization/RbacPermissions\";\n\nexport type UserDto = {\n id: string;\n firstName: string | undefined;\n lastName: string | undefined;\n email: string | undefined;\n profileImage: string | undefined;\n permissions: Record;\n};\n\nconst BASE_URL = \"user\";\n\nexport const getUserInfo = async (): Promise => {\n const response = await axiosClient.get(BASE_URL, {});\n return response.data;\n};\n","import React, { createContext, useContext } from \"react\";\nimport type { PropsWithChildren } from \"react\";\nimport { CircularProgress, Grid } from \"@mui/material\";\nimport { useFrontendMonitoring } from \"contexts/FrontendMonitoringProvider/FrontendMonitoringProvider\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport type { UserDto } from \"client/api/UserApi\";\nimport { getUserInfo } from \"client/api/UserApi\";\nimport type { RbacPermission } from \"components/authorization/RbacPermissions\";\n\ntype UserProviderProps = PropsWithChildren;\nexport type UserContextState = {\n hasPermissionForAsset: (\n expectedPermission: RbacPermission,\n assetId: string | undefined,\n subscriptionGroupId: string | undefined\n ) => boolean;\n userInfo?: UserDto;\n refresh: () => void;\n};\n\nconst UserContext = createContext({\n hasPermissionForAsset: (\n expectedPermission: RbacPermission,\n assetId: string | undefined,\n subscriptionGroupId: string | undefined\n ) => false,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n refresh: () => {},\n});\n\nexport const useUserContext = (): UserContextState => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return useContext(UserContext);\n};\n\nexport function UserProvider(props: UserProviderProps) {\n const { children } = props;\n const { data: userInfo, loading, refresh } = useAsyncRequest(getUserInfo);\n\n const hasPermissionForAsset = (\n expectedPermission: RbacPermission,\n assetId: string | undefined,\n subscriptionGroupId: string | undefined\n ): boolean => {\n if (loading || !userInfo || !assetId) {\n return false;\n }\n const { permissions } = userInfo;\n\n const subscriptionGroupPermissions = permissions[subscriptionGroupId ?? \"\"] ?? [];\n const hasExpectedSubscriptionGroupPermission = subscriptionGroupPermissions.includes(expectedPermission);\n\n const assetPermissions = permissions[assetId ?? \"\"] ?? [];\n const hasExpectedAssetPermission = assetPermissions.includes(expectedPermission);\n\n return hasExpectedSubscriptionGroupPermission || hasExpectedAssetPermission;\n };\n\n const { frontendMonitoring } = useFrontendMonitoring();\n if (userInfo?.id) {\n frontendMonitoring.identifyUser(userInfo.id);\n }\n\n return (\n \n {loading ? (\n \n \n

Loading user data...

\n
\n ) : (\n children\n )}\n
\n );\n}\n","import { envConfig } from \"./envConfig\";\n\nconst octopusComRoot = envConfig.OctopusComDomain;\n\n// Pricing\nconst octopusComPricingRootPath = `${octopusComRoot}/pricing`;\nconst octopusComPricingOverviewPath = `${octopusComPricingRootPath}/overview`;\nconst octopusComPricingFeaturesPath = `${octopusComPricingOverviewPath}#features`;\nconst octopusComPricingFaqPath = `${octopusComPricingRootPath}/faq`;\nconst octopusComPricingFaqCloudPath = `${octopusComPricingFaqPath}#octopus-cloud-section`;\nconst octopusComPricingFaqCloudPricingPath = `${octopusComPricingFaqPath}#what-is-the-pricing-for-octopus-cloud`;\nconst octopusComPricingFaqMachinesPath = `${octopusComPricingFaqPath}#what-is-a-machine`;\n\n// Docs\nconst octopusComDocsRootPath = `${octopusComRoot}/docs`;\nconst octopusComDocsInstallationPath = `${octopusComDocsRootPath}/installation`;\nconst octopusComDocsLinuxInstallationPath = `${octopusComDocsInstallationPath}/octopus-server-linux-container`;\n\nconst octopusComDocsProjectsPath = `${octopusComDocsRootPath}/projects`;\nconst octopusComDocsDeploymentProcessPath = `${octopusComDocsProjectsPath}/deployment-process`;\n\nconst octopusComDocsAdministrationPath = `${octopusComDocsRootPath}/administration`;\nconst octopusComDocsLicenseManagementPath = `${octopusComDocsAdministrationPath}/managing-licenses`;\nconst octopusComDocsLicenseManagementCommunityPath = `${octopusComDocsLicenseManagementPath}/community`;\n\nconst octopusComDocsGettingStartedPath = `${octopusComDocsRootPath}/getting-started`;\nconst octopusComDocsManagingOctopusSubscriptionsPath = `${octopusComDocsGettingStartedPath}/managing-octopus-subscriptions`;\n\nconst octopusComDocsFirstDeploymentPath = `${octopusComDocsGettingStartedPath}/first-deployment`;\nconst octopusComDocsFirstKubernetesDeploymentPath = `${octopusComDocsRootPath}/kubernetes/tutorials`;\n\nconst octopusComDocsBestPractices = `${octopusComDocsGettingStartedPath}/best-practices`;\nconst octopusComDocsInstallationGuidelinesPath = `${octopusComDocsBestPractices}/installation-guidelines`;\n\nconst octopusComDocsRetentionPolicyPath = \"https://oc.to/AcceptableUsage\";\n\nconst octopusComDocsInfrastructureDeploymentTargetsPath = `${octopusComDocsRootPath}/infrastructure/deployment-targets`;\n\nconst octopusComDocsCloudPath = `${octopusComDocsRootPath}/octopus-cloud`;\nconst octopusComDocsCloudInvitingUsersPath = `${octopusComDocsCloudPath}/getting-started-with-cloud#inviting-octopus-cloud-users`;\n\nconst octopusComDocsAccessControlPath = `${octopusComDocsGettingStartedPath}/managing-octopus-subscriptions#access-control`;\n\n// Legal\nconst octopusComAcceptableUsagePolicyPath = \"https://oc.to/RetentionPolicies\";\nconst octopusComCustomerAgreementPath = `${octopusComRoot}/legal/customer-agreement`;\n\n// Downloads\nconst octopusComDownloadsRootPath = `${octopusComRoot}/downloads`;\nconst octopusComDownloadsServerPath = `${octopusComDownloadsRootPath}/server`;\n\n// Support\nconst octopusComSupportRootPath = `${octopusComRoot}/support`;\nconst octopusComSupportFilesRootPath = `${octopusComRoot}/support-files`;\nconst octopusComContactUsPath = `${octopusComRoot}/company/contact`;\n\n// Profile\nconst octopusComProfilePath = `${octopusComRoot}/profile`;\n\n// Sign Out\nconst octopusComSignOutPath = `${octopusComRoot}/signout`;\n\n// Control Center V1\nconst octopusComControlCenterV1RootPath = `${octopusComRoot}/control-center`;\n\n// Azure Marketplace\nconst azureMarketPlaceRoot = \"https://azuremarketplace.microsoft.com\";\nconst azureMarketPlaceOctopusDeployOverviewPath = `${azureMarketPlaceRoot}/en-us/marketplace/apps/octopusdeployptyltd1664464418055.octopus_cloud_saas_offer?tab=overview`;\n\n// Helm Chart\nconst githubHelmChartRootPath = `https://github.com/OctopusDeploy/helm-charts`;\nconst githubHelmChartOctopusRootPath = `${githubHelmChartRootPath}/tree/main/charts/octopus-deploy`;\nconst githubHelmChartOctopusIngressDocsPath = `${githubHelmChartOctopusRootPath}#ingress`;\n\n// Slack\nconst octopusCommunitySlackInvitePath = \"https://oc.to/community-slack\";\n\n// Roadmap\nconst octopusComRoadmapRootPath = \"https://roadmap.octopus.com\";\nconst octopusComRoadmapBluePrintsAndGuardRailsPath = `${octopusComRoadmapRootPath}/c/117-project-templates`;\n\nexport const ExternalUriMap = {\n octopusComRoot,\n octopusComPricingRootPath,\n octopusComPricingFeaturesPath,\n octopusComPricingFaqPath,\n octopusComPricingFaqCloudPath,\n octopusComPricingFaqCloudPricingPath,\n octopusComPricingFaqMachinesPath,\n octopusComDocsRootPath,\n octopusComDocsInstallationPath,\n octopusComDocsLinuxInstallationPath,\n octopusComDocsProjectsPath,\n octopusComDocsDeploymentProcessPath,\n octopusComDocsAdministrationPath,\n octopusComDocsLicenseManagementPath,\n octopusComDocsLicenseManagementCommunityPath,\n octopusComDocsGettingStartedPath,\n octopusComDocsManagingOctopusSubscriptionsPath,\n octopusComDocsFirstDeploymentPath,\n octopusComDocsFirstKubernetesDeploymentPath,\n octopusComDocsBestPractices,\n octopusComDocsInstallationGuidelinesPath,\n octopusComDocsRetentionPolicyPath,\n octopusComDownloadsRootPath,\n octopusComDownloadsServerPath,\n octopusComSupportRootPath,\n octopusComSupportFilesRootPath,\n octopusComAcceptableUsagePolicyPath,\n octopusComCustomerAgreementPath,\n octopusComControlCenterV1RootPath,\n octopusComDocsInfrastructureDeploymentTargetsPath,\n octopusComDocsCloudPath,\n octopusComDocsCloudInvitingUsersPath,\n octopusComProfilePath,\n octopusComSignOutPath,\n azureMarketPlaceOctopusDeployOverviewPath,\n githubHelmChartRootPath,\n githubHelmChartOctopusRootPath,\n githubHelmChartOctopusIngressDocsPath,\n octopusCommunitySlackInvitePath,\n octopusComDocsAccessControlPath,\n octopusComContactUsPath,\n octopusComRoadmapRootPath,\n octopusComRoadmapBluePrintsAndGuardRailsPath,\n};\n","import React from \"react\";\nimport { styled } from \"@mui/material\";\nimport { AlertSeverity, useAlerts } from \"../AlertProvider/AlertProvider\";\n\ntype CopyToClipboardWrapperProps = React.PropsWithChildren<{\n value?: string | null | undefined;\n alertMessage?: string;\n onCopied?: () => void;\n}>;\nconst Wrapper = styled(\"div\")`\n cursor: pointer;\n`;\nfunction CopyToClipboardWrapper(props: CopyToClipboardWrapperProps) {\n const { children, value, alertMessage } = props;\n const { sendNewAlert } = useAlerts();\n\n const copyToClipboard = async () => {\n if (value) {\n await navigator.clipboard.writeText(value);\n props.onCopied?.();\n sendNewAlert(alertMessage ?? \"Copied to clipboard!\", AlertSeverity.Success);\n }\n };\n\n return {children};\n}\n\nexport default CopyToClipboardWrapper;\n","import CopyToClipboardWrapper from \"./CopyToClipboardWrapper\";\n\nexport default CopyToClipboardWrapper;\n","import React from \"react\";\nimport { QuestionMark } from \"@mui/icons-material\";\nimport ArticleIcon from \"@mui/icons-material/Article\";\nimport ContentCopyIcon from \"@mui/icons-material/ContentCopy\";\nimport MailIcon from \"@mui/icons-material/Mail\";\nimport OpenInNewIcon from \"@mui/icons-material/OpenInNew\";\nimport SupportIcon from \"@mui/icons-material/Support\";\nimport { Box, Button, IconButton, Link, Popover, Tooltip, Typography } from \"@mui/material\";\nimport ListItemIcon from \"@mui/material/ListItemIcon\";\nimport ListItemText from \"@mui/material/ListItemText\";\nimport MenuItem from \"@mui/material/MenuItem\";\nimport MenuList from \"@mui/material/MenuList\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport CopyToClipboardWrapper from \"../CopyToClipboardWrapper\";\n\nexport function Help() {\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const open = Boolean(anchorEl);\n const id = open ? \"simple-popover\" : undefined;\n\n return (\n <>\n \n \n \n \n \n Help\n \n Resources for managing your Octopus subscriptions.\n \n \n \n \n \n \n Visit docs\n \n \n \n \n \n \n \n \n Email support\n \n \n \n \n \n \n \n \n Upload support files\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { KeyboardArrowDown } from \"@mui/icons-material\";\nimport type { MenuProps } from \"@mui/material\";\nimport { Avatar, Menu, MenuItem, Stack, Box, ButtonBase } from \"@mui/material\";\nimport { styled, alpha } from \"@mui/material/styles\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport { envConfig } from \"utils/envConfig\";\nimport { navigateToExternalSite } from \"utils/navigationHelpers\";\n\nconst StyledMenu = styled((props: MenuProps) => (\n \n))(({ theme }) => ({\n \"& .MuiPaper-root\": {\n borderRadius: 6,\n marginTop: theme.spacing(1),\n minWidth: 180,\n color: theme.palette.mode === \"light\" ? \"rgb(55, 65, 81)\" : theme.palette.grey[300],\n \"& .MuiMenu-list\": {\n padding: \"4px 0\",\n },\n \"& .MuiMenuItem-root\": {\n \"& .MuiSvgIcon-root\": {\n fontSize: 18,\n color: theme.palette.text.secondary,\n marginRight: theme.spacing(1.5),\n },\n \"&:active\": {\n backgroundColor: alpha(theme.palette.primary.main, theme.palette.action.selectedOpacity),\n },\n },\n },\n}));\n\nconst UserMenuButton = styled(ButtonBase)(({ theme }) => ({\n fontSize: theme.typography.body1.fontSize,\n fontFamily: theme.typography.body1.fontFamily,\n \":focus-visible\": {\n outline: \"auto\",\n },\n}));\n\nexport function UserInfo() {\n const { userInfo } = useUserContext();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const open = Boolean(anchorEl);\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n if (userInfo === undefined || userInfo.firstName === undefined) return <>;\n return (\n <>\n \n \n \n {userInfo?.firstName.charAt(0)}\n {\" \"}\n \n {userInfo?.firstName} {userInfo?.lastName}\n \n \n \n \n \n \n \n navigateToExternalSite(`${envConfig.OctopusComDomain}/profile`)} disableRipple={true}>\n Profile\n \n navigateToExternalSite(`${envConfig.OctopusComDomain}/signout`)} disableRipple={true}>\n Sign Out\n \n \n \n );\n}\n","// eslint-disable-next-line no-restricted-imports -- this is the one place we want to allow importing themeTokens from @octopusdeploy/design-system-tokens\nimport { themeTokens as designSystemThemeTokens } from \"@octopusdeploy/design-system-tokens\";\n\n/** Wrapper of @octopusdeploy/design-system-tokens */\nexport const themeTokens = Object.assign({}, designSystemThemeTokens, {\n color: {\n ...designSystemThemeTokens.color,\n text: {\n ...designSystemThemeTokens.color.text,\n link: {\n ...designSystemThemeTokens.color.text.link,\n hover: designSystemThemeTokens.color.text.link.pressed,\n },\n },\n },\n});\n","const root = \"/cloud-subscriptions\";\n\nexport const CloudSubscriptionsRoutesMap = {\n root: \"/\",\n detail: (cloudSubscriptionId: string) => ({\n root: `${root}/${cloudSubscriptionId}`,\n finance: `${root}/${cloudSubscriptionId}/finance`,\n upgrade: `${root}/${cloudSubscriptionId}/upgrade`,\n users: `${root}/${cloudSubscriptionId}/users`,\n configuration: `${root}/${cloudSubscriptionId}/configuration`,\n }),\n loadBySerial: (serialId: string) => ({\n root: `${root}/serial/${serialId}`,\n }),\n inviteAccept: (invite: string) => `${root}/invite/accept/${invite}`,\n};\n","import React from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport { Link, Stack, Typography } from \"@mui/material\";\nimport { envConfig } from \"utils/envConfig\";\nimport { Help } from \"components/PageHeading/Help\";\nimport { UserInfo } from \"components/PageHeading/UserInfo\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\n\nexport function ControlCenterHeader() {\n return (\n \n \n \n
\n \n \n \n Control Center\n \n V2\n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Box, Typography } from \"@mui/material\";\nimport { envConfig } from \"utils/envConfig\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nexport const EnvironmentBanner = () => {\n return (\n <>\n {!envConfig.IsProdEnvironment && (\n \n \n {envConfig.Environment}\n \n \n )}\n \n );\n};\n","import React from \"react\";\nimport { Outlet } from \"react-router-dom\";\nimport { Container } from \"@mui/material\";\nimport { ControlCenterHeader } from \"components/PageHeading/ControlCenterHeader\";\nimport { EnvironmentBanner } from \"../EnvironmentBanner\";\n\nexport const ClassicLayout = () => {\n return (\n <>\n \n \n \n \n \n \n );\n};\n","import React from \"react\";\nimport { Outlet } from \"react-router-dom\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { EnvironmentBanner } from \"../EnvironmentBanner\";\n\nexport const TwentyFiveRedesignLayout = () => {\n const useTwentyFiveRedesignLayout = useFeatureFlag(\"SubscriptionVisibilityAndContext\");\n\n if (!useTwentyFiveRedesignLayout) {\n throw new Error(\"Missing required feature flag\");\n }\n\n return (\n <>\n \n \n \n );\n};\n","import React from \"react\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { ClassicLayout } from \"./ClassicLayout\";\nimport { TwentyFiveRedesignLayout } from \"./TwentyFiveRedesignLayout\";\n\nexport function Layout() {\n const useTwentyFiveRedesignLayout = useFeatureFlag(\"SubscriptionVisibilityAndContext\");\n const Layout = useTwentyFiveRedesignLayout ? TwentyFiveRedesignLayout : ClassicLayout;\n\n return ;\n}\n","import React from \"react\";\nimport { useMiniProfiler } from \"@cpt/hooks/useMiniProfiler\";\nimport { UserProvider } from \"contexts/UserProvider/UserProvider\";\nimport { envConfig } from \"utils/envConfig\";\nimport { Layout } from \"./Layout\";\n\nexport function AuthenticatedLayout() {\n useMiniProfiler({\n isProductionEnvironment: envConfig.IsProdEnvironment,\n rootUrl: envConfig.ApiUrl,\n });\n\n return (\n \n \n \n );\n}\n","import type { ListEntitiesResponse } from \"client/api/common/ListEntitiesResponse\";\nimport axiosClient from \"../axios-client\";\n\nexport interface ListUserGrantsDto {\n directUserGrants: Array;\n}\n\nexport interface UserGrantDto {\n id: string;\n role: RoleDto;\n user: UserDto;\n}\n\nexport interface CloudSubscriptionOrSubscriptionGroupUserGrantDto extends UserGrantDto {\n grantType: string;\n}\n\nexport interface CloudSubscriptionUserGrantDto extends UserGrantDto {\n cloudSubscriptionId: string;\n cloudSubscriptionName: string;\n}\n\nexport interface ServerLicenseOrSubscriptionGroupUserGrantDto extends UserGrantDto {\n grantType: string;\n}\n\nexport interface ServerLicenseUserGrantDto extends UserGrantDto {\n serverLicenseId: string;\n serverLicenseName: string;\n}\n\nexport interface SubscriptionGroupUserGrantDto extends UserGrantDto {\n subscriptionGroupId: string;\n subscriptionGroupName: string;\n}\n\nexport interface ListRolesDto {\n roles: RoleDto[];\n}\n\nexport interface RoleDto {\n id: string;\n name: string;\n description: string;\n}\n\nexport interface UserDto {\n id: string;\n firstName: string;\n lastName?: string;\n email: string;\n}\n\nexport interface UserGrantInviteDto {\n id: string;\n role: RoleDto;\n email: string;\n}\n\nexport class BaseUserGrantsApi {\n constructor(private assetUrl: string) {}\n\n public async listUserGrants(assetId: string | undefined): Promise> {\n const response = await axiosClient.get>(this.buildUrl(assetId || \"\"));\n return response.data;\n }\n\n public async deleteUserGrant(assetId: string, userGrantId: string): Promise {\n await axiosClient.delete(`${this.buildUrl(assetId)}/${userGrantId}`);\n }\n\n public async acceptUserGrantInvite(encodedInvite: string): Promise {\n const response = await axiosClient.get(`${this.assetUrl}/invite/accept/${encodedInvite}`);\n return response.data;\n }\n\n public async getInvites(assetId: string | undefined): Promise> {\n const response = await axiosClient.get>(\n `${this.buildInvitesUrl(assetId ?? \"\")}`\n );\n return response.data;\n }\n\n public async revokeInvite(assetId: string, inviteId: string): Promise {\n await axiosClient.delete(`${this.buildInvitesUrl(assetId)}/${inviteId}`);\n }\n\n private buildUrl(assetId: string): string {\n return `${this.assetUrl}/${assetId}/user-grants`;\n }\n\n private buildInvitesUrl(assetId: string): string {\n return `${this.assetUrl}/${assetId}/invites`;\n }\n}\n\nexport const cloudSubscriptionUserGrantsApi = new BaseUserGrantsApi(\n \"cloud-subscriptions\"\n);\n\nexport const serverLicenseUserGrantsApi = new BaseUserGrantsApi(\n \"server-licenses\"\n);\n\nexport const subscriptionGroupUserGrantsApi = new BaseUserGrantsApi(\n \"subscription-groups\"\n);\n","import React from \"react\";\nimport { Navigate, useLocation } from \"react-router-dom\";\n\nexport function StripTrailingSlash({ ...rest }) {\n const location = useLocation();\n\n if (location.pathname !== \"/\" && location.pathname.match(/.*\\/$/)) {\n return (\n \n );\n }\n return null;\n}\n","import React from \"react\";\nimport { Link } from \"@mui/material\";\n\nconst FormattedEmail = ({ email }: { email: string }) => {\n return (\n \n {email}\n \n );\n};\n\n/**\n * Enhances plain text transforming email addresses in to mailto links\n * @param root0\n * @param root0.message Plain text message\n */\nexport const EnhanceMessage = ({ message }: { message: string }) => {\n const emailAddresses = [\"sales@octopus.com\", \"support@octopus.com\"];\n const emailRegex = new RegExp(`(${emailAddresses.join(\"|\")})`, \"g\");\n const parts = message.split(emailRegex);\n\n return (\n <>\n {parts.map((part, index) => {\n if (emailAddresses.includes(part)) {\n return ;\n }\n return {part};\n })}\n \n );\n};\n","import React, { Fragment } from \"react\";\nimport { Alert, AlertTitle, Grid, Typography } from \"@mui/material\";\nimport axios from \"axios\";\nimport type { RequestError } from \"client/RequestError\";\nimport { EnhanceMessage } from \"./EnhanceMessage\";\n\ninterface ErrorAlertProps {\n error: unknown;\n}\n\nfunction isRequestError(error: unknown): error is RequestError {\n if (!error) {\n return false;\n }\n\n if (typeof error !== \"object\") {\n return false;\n }\n\n return \"title\" in error && \"status\" in error && \"traceId\" in error;\n}\n\ninterface ErrorContent {\n title: string;\n content: string | Record;\n}\n\nfunction getAlertContent(error: unknown): ErrorContent {\n if (axios.isAxiosError(error)) {\n const errorResponse = error.response?.data;\n if (!errorResponse) {\n return {\n title: \"Something went wrong!\",\n content: error.message ?? \"Please try again or reach out for assistance.\",\n };\n }\n const isKnownError = isRequestError(errorResponse);\n if (isKnownError) {\n return {\n title: errorResponse.title,\n content: errorResponse.detail ?? errorResponse.errors ?? \"\",\n };\n }\n }\n\n return {\n title: \"Something went wrong!\",\n content: error instanceof Error ? error.message : \"Please try again or reach out for assistance.\",\n };\n}\n\nexport function ErrorAlert({ error }: ErrorAlertProps) {\n const errorContent = getAlertContent(error);\n\n return (\n \n \n {errorContent.title}\n {typeof errorContent.content === \"string\" ? (\n \n \n \n ) : (\n Object.keys(errorContent.content).map((errKey, i) => (\n \n {errKey && (\n \n {errKey}:\n \n )}\n {typeof errorContent.content === \"object\" &&\n errorContent.content[errKey]?.map((err, j) => (\n \n \n \n ))}\n \n ))\n )}\n \n \n );\n}\n","import { Alert, styled } from \"@mui/material\";\n\nexport const AlertWithShadow = styled(Alert)(({ theme }) => ({\n boxShadow: theme.shadows[1],\n}));\n","import React from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { AlertTitle } from \"@mui/material\";\nimport type { AlertColor } from \"@mui/material/Alert/Alert\";\nimport { AlertWithShadow } from \"components/alert/AlertWithShadow\";\n\ntype NavigationAlertProps = {\n sx?: SxProps;\n};\nexport type NavigationAlertMessage = {\n title?: string;\n content?: string;\n severity: AlertColor;\n};\nexport function createNavigationAlert(message: NavigationAlertMessage) {\n return {\n state: {\n navigationAlert: message,\n },\n };\n}\n\nexport function NavigationAlert(props: NavigationAlertProps) {\n const { sx } = props;\n const { state } = useLocation();\n\n const { navigationAlert } = state ?? {};\n\n if (!navigationAlert) {\n return null;\n }\n\n const { title, content, severity } = navigationAlert;\n return (\n \n {title && {title}}\n
{content}
\n
\n );\n}\n","const root = \"/server-licenses\";\n\nexport const ServerLicensesRoutesMap = {\n root: root,\n detail: (serverLicenseId: string) => ({\n root: `${root}/${serverLicenseId}`,\n finance: `${root}/${serverLicenseId}/finance`,\n upgrade: `${root}/${serverLicenseId}/upgrade`,\n users: `${root}/${serverLicenseId}/users`,\n }),\n loadBySerial: (serialId: string) => ({\n root: `${root}/serial/${serialId}`,\n }),\n inviteAccept: (invite: string) => `${root}/invite/accept/${invite}`,\n};\n","import React, { useEffect, useMemo } from \"react\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { CircularProgress, Grid } from \"@mui/material\";\nimport { RoutesMap } from \"RoutesMap\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport {\n isCloudSubscriptionUserGrantDto,\n isServerLicenseUserGrantDto,\n isSubscriptionGroupUserGrantDto,\n} from \"utils/UserGrantsTypeHelpers\";\nimport type { BaseUserGrantsApi } from \"client/api/UserGrantApi\";\nimport type { UserGrantDto } from \"client/api/UserGrantApi\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\nimport { createNavigationAlert } from \"components/alert/NavigationAlert\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\nimport { ServerLicensesRoutesMap } from \"areas/serverLicenses/ServerLicensesRoutesMap\";\n\nexport type InviteAcceptPageProps = {\n userGrantsApi: BaseUserGrantsApi;\n};\nexport function InviteAcceptPage(props: InviteAcceptPageProps) {\n let { encodedInvite } = useParams();\n encodedInvite = encodedInvite ?? \"\";\n\n const { userGrantsApi } = props;\n\n const getRequest = useMemo(\n () => (encodedInvite: string) => userGrantsApi.acceptUserGrantInvite(encodedInvite),\n [userGrantsApi]\n );\n const { data, error } = useAsyncRequest(getRequest, encodedInvite);\n const navigate = useNavigate();\n\n const { userInfo, refresh } = useUserContext();\n\n useEffect(() => {\n let isCleaningUp = false;\n\n if (data && !isCleaningUp) {\n if (isCloudSubscriptionUserGrantDto(data)) {\n navigate(\n CloudSubscriptionsRoutesMap.detail(data.cloudSubscriptionId).root,\n createNavigationAlert({\n content: `Hi ${userInfo?.firstName ?? \"there\"}, you now have access to the ${\n data.cloudSubscriptionName\n } cloud instance.`,\n severity: \"success\",\n })\n );\n } else if (isServerLicenseUserGrantDto(data)) {\n navigate(\n ServerLicensesRoutesMap.detail(data.serverLicenseId).root,\n createNavigationAlert({\n content: data.serverLicenseName\n ? `Hi ${userInfo?.firstName ?? \"there\"}, you now have access to the ${\n data.serverLicenseName\n } server license.`\n : `Hi ${userInfo?.firstName ?? \"there\"}, you now have access to the server license.`,\n severity: \"success\",\n })\n );\n } else if (isSubscriptionGroupUserGrantDto(data)) {\n navigate(\n RoutesMap.root,\n createNavigationAlert({\n content: `Hi ${userInfo?.firstName ?? \"there\"}, you now have access to the ${\n data.subscriptionGroupName\n } subscription group.`,\n severity: \"success\",\n })\n );\n }\n refresh();\n }\n\n return () => {\n isCleaningUp = true;\n };\n }, [navigate, data, refresh, userInfo]);\n\n if (error) {\n return ;\n }\n\n return (\n \n \n

Accepting invitation...

\n
\n );\n}\n","/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport type {\n CloudSubscriptionUserGrantDto,\n ServerLicenseUserGrantDto,\n SubscriptionGroupUserGrantDto,\n UserGrantDto,\n} from \"client/api/UserGrantApi\";\n\nexport function isCloudSubscriptionUserGrantDto(\n userGrantDto: UserGrantDto\n): userGrantDto is CloudSubscriptionUserGrantDto {\n return (userGrantDto as CloudSubscriptionUserGrantDto).cloudSubscriptionId !== undefined;\n}\n\nexport function isServerLicenseUserGrantDto(userGrantDto: UserGrantDto): userGrantDto is ServerLicenseUserGrantDto {\n return (userGrantDto as ServerLicenseUserGrantDto).serverLicenseId !== undefined;\n}\n\nexport function isSubscriptionGroupUserGrantDto(\n userGrantDto: UserGrantDto\n): userGrantDto is SubscriptionGroupUserGrantDto {\n return (userGrantDto as SubscriptionGroupUserGrantDto).subscriptionGroupId !== undefined;\n}\n","import React from \"react\";\nimport type { LinkProps } from \"@mui/material\";\nimport { Link as MuiLink, styled } from \"@mui/material\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nconst StyledLink = styled(MuiLink)(\n ({ fontWeight, color }) => `\n cursor: pointer;\n font-weight: ${fontWeight ?? 500};\n color: ${color ?? themeTokens.color.text.link.default};\n &:hover {\n color: ${themeTokens.color.text.link.hover};\n }\n &:focus {\n outline-color: revert;\n }\n`\n);\n\n/**\n * A link with an href\n * @param props\n */\nexport const Link = (props: LinkProps) => {\n return {props.children};\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Alert, CircularProgress, Stack } from \"@mui/material\";\nimport type { AxiosError } from \"axios\";\nimport { Link } from \"components/Link/Link\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\n\ninterface LoadablePageProps {\n loading?: boolean;\n error?: AxiosError;\n}\n\nexport function LoadablePage({ loading, error, children }: React.PropsWithChildren) {\n const [shouldShowLoading, setShouldShowLoading] = useState(false);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setShouldShowLoading(true);\n }, 1000);\n return () => clearTimeout(timer);\n }, []);\n\n if (loading)\n return (\n <>\n \n \n \n \n );\n if (error) {\n if (error.response?.status === 403) {\n return You are unauthorized to access this resource.;\n }\n if (error.response?.status === 401) {\n return (\n <>\n \n \n \n You are not currently logged in. Please wait while we redirect you to authenticate.\n \n \n \n Or click here if your browser doesn't automatically redirect you.\n \n \n \n \n );\n }\n return ;\n }\n\n return <>{children};\n}\n","import type { ProductType } from \"shared/ProductType\";\nimport axiosClient from \"client/axios-client\";\nimport type { CloudSubscriptionDto } from \"./CloudSubscriptionApi\";\nimport type { ServerLicenseDto } from \"./ServerLicenseApi\";\n\nexport interface SerialResult {\n id: string;\n type: ProductType;\n}\n\nexport const getBySerial = async (serialId: string): Promise => {\n const response = await axiosClient.get(`serial/${serialId}`);\n if (response.data) {\n return {\n id: response.data.id,\n type: \"dnsPrefix\" in response.data ? \"CloudSubscription\" : \"ServerLicense\",\n };\n }\n throw new Error(\"Not found\");\n};\n","import React from \"react\";\nimport type { PropsWithChildren } from \"react\";\nimport cn from \"classnames\";\nimport styles from \"./style.module.less\";\n\nexport enum SectionHeadingType {\n Heading1,\n Heading2,\n Heading3,\n Heading4,\n}\n\ntype SectionProps = PropsWithChildren<{\n className?: string;\n sectionHeader?: string;\n headingType?: SectionHeadingType;\n bodyClassName?: string;\n}>;\n\nexport function Section(props: SectionProps) {\n const renderSectionHeading = () => {\n if (!props.sectionHeader) {\n return null;\n }\n switch (props.headingType) {\n case SectionHeadingType.Heading1:\n return

{props.sectionHeader}

;\n case SectionHeadingType.Heading2:\n return

{props.sectionHeader}

;\n case SectionHeadingType.Heading3:\n return

{props.sectionHeader}

;\n default:\n return

{props.sectionHeader}

;\n }\n };\n return (\n
\n {renderSectionHeading()}\n
{props.children}
\n
\n );\n}\n","import { Section } from \"./Section\";\n\nexport default Section;\n","/* eslint-disable @typescript-eslint/consistent-type-assertions */\nimport * as React from \"react\";\nimport type { PropsWithChildren } from \"react\";\nimport { matchPath } from \"react-router-dom\";\nimport { NavLink as ReactNavLink } from \"react-router-dom\";\nimport { useLocation } from \"react-router-dom\";\nimport classNames from \"classnames\";\nimport { flatten } from \"lodash\";\nimport Section from \"components/Section\";\nimport styles from \"./style.module.less\";\n\nexport class Navigation {\n static navItem(label: string | JSX.Element, path: string, exact?: boolean, show: boolean = true) {\n return { label, path, exact: exact || false, show };\n }\n\n static navGroup(label: string, path: string | undefined, children: NavItem[], alwaysOpen?: boolean): NavGroup {\n return {\n groupLabel: label,\n defaultChildPath: path,\n children,\n alwaysOpen,\n };\n }\n}\n\ninterface NavLink {\n label: string | JSX.Element;\n path: string;\n exact: boolean;\n show: boolean;\n}\n\ninterface NavGroup {\n groupLabel: string;\n defaultChildPath: string | undefined;\n children: NavItem[];\n alwaysOpen?: boolean;\n}\n\nexport type NavItem = NavLink | NavGroup;\n\ntype NavigationSidebarLayoutProps = PropsWithChildren<{\n name?: string;\n resourceType?: string;\n preNavbarComponent?: React.ReactNode;\n preNavbarComponentVisible?: boolean;\n navLinks: NavItem[];\n navLinksVisible?: boolean;\n}>;\n\nconst NavigationSidebarLayout = (props: NavigationSidebarLayoutProps) => {\n const shouldDisplay = (value?: boolean) => value ?? true;\n\n return (\n
\n
\n
\n
\n {props.name && (\n
\n {props.resourceType &&
{props.resourceType}
}\n {props.name}\n
\n )}\n {props.preNavbarComponent && shouldDisplay(props.preNavbarComponentVisible) && (\n
{props.preNavbarComponent}
\n )}\n
\n {shouldDisplay(props.navLinksVisible) && (\n \n )}\n
\n
\n {props.children}\n
\n
\n
\n );\n};\n\nfunction isGroup(item: NavItem): item is NavGroup {\n return (item as NavGroup).children !== undefined;\n}\n\ntype NavItemComponentProps = { item: NavItem };\n\nconst NavItemComponent = (props: NavItemComponentProps) => {\n const item = props.item;\n return isGroup(item) ? renderNavLinkGroup(item) : renderNavLink(item.label, item.path, item.exact, item.show);\n\n function renderNavLinkGroup(group: NavGroup) {\n return ;\n }\n};\n\nfunction renderNavLink(label: string | JSX.Element, path: string, exact: boolean, show: boolean) {\n if (!show) return <>;\n\n return (\n (isActive ? classNames(styles.link, styles.selected) : styles.link)}\n >\n {label}\n \n );\n}\n\nconst NavLinkGroup = (props: { group: NavGroup }) => {\n const location = useLocation();\n const allDescendantLinks = getDescendantLinks(props.group);\n const anyDescendantsMatch = allDescendantLinks.some((l) => !!matchPath(location.pathname, l.path));\n return (\n
\n \n {!!props.group.defaultChildPath ? (\n renderNavLink(props.group.groupLabel, props.group.defaultChildPath, true, true)\n ) : (\n
{props.group.groupLabel}
\n )}\n
\n {(anyDescendantsMatch || props.group.alwaysOpen) && (\n
\n {props.group.children.map((g, index) => (\n \n ))}\n
\n )}\n
\n );\n};\n\nfunction getDescendantLinks(group: NavGroup): NavLink[] {\n return flatten(\n group.children.map((c) => {\n if (isGroup(c)) {\n return getDescendantLinks(c);\n }\n return [c];\n })\n );\n}\n\nexport default NavigationSidebarLayout;\n","import React from \"react\";\nimport type { PropsWithChildren } from \"react\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { Container, Paper } from \"@mui/material\";\n\nexport function PaperLayout(props: PropsWithChildren<{ elevation?: number; sx?: SxProps }>) {\n const { children, elevation = 3, sx } = props;\n return (\n \n \n {children}\n \n \n );\n}\n","var _path, _path2, _path3;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgBlobBadlyDrawnOctopus = function SvgBlobBadlyDrawnOctopus(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 230,\n height: 230,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M101.906 1.892c36.188-11.24 66.934 29.987 90.292 60.557 23.089 30.215 45.81 66.678 35.053 103.481-10.298 35.228-48.764 50.475-83.084 60.833-26.848 8.104-53.396-.178-78.936-11.932-26.88-12.37-64.125-24.141-65.213-54.407-1.072-29.828 45.195-32.391 61.199-57.291C81.815 71.083 66.147 13 101.906 1.893Z\",\n fill: \"#F5F6F8\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M129.825 123.328h-3.661c-.416 0-.798-.145-1.162-.327a26.024 26.024 0 0 0-.29-.143c-.566-.278-1.133-.555-1.616-.969-.816-.702-1.417-1.54-1.561-2.615-.088-.647-.008-1.297.467-1.832.073-.081.102-.222.105-.338.006-.436-.135-.844-.316-1.237a10.818 10.818 0 0 1-.945-3.201c-.138-1.072-.226-2.144-.167-3.225.007-.145.012-.29.017-.436.009-.266.019-.532.042-.797a3.572 3.572 0 0 1 .698-1.876 7.29 7.29 0 0 0 .348-.528c.16-.258.32-.515.52-.74a9.213 9.213 0 0 1 2.646-2.063 14.051 14.051 0 0 1 2.387-.997c1.024-.309 2.057-.488 3.121-.482.54 0 1.083.029 1.622.075.892.078 1.693.433 2.488.812.021.009.04.024.059.039.027.02.054.041.085.047.368.072.644.291.919.51.093.074.187.148.283.216.687.482 1.203 1.138 1.684 1.808.279.388.493.821.584 1.303.014.082.072.156.131.231.034.044.068.088.094.134.203.353.292.741.381 1.128.037.164.075.328.121.49.002.009.001.019.001.028l-.001.008v.004c.49 1.8.607 3.638.537 5.493-.011.281-.002.563.008.844.006.172.011.344.012.517.003.849-.19 1.667-.469 2.464-.065.186-.125.375-.184.564-.119.377-.237.755-.406 1.109-.457.977-.962 1.927-1.774 2.684-.525.489-1.132.777-1.828.968-1.218.336-2.457.332-3.697.327a53.516 53.516 0 0 0-.694 0h-.589v.003Zm-5.864-3.17c.42.514.93.8 1.461 1.046l.027.013c.405.186.823.379 1.296.337.293-.026.586-.047.877-.047.267 0 .533.005.799.009.266.004.533.009.8.009l.505.001c.547.002 1.094.004 1.639-.016.245-.01.492-.002.738.006.483.016.965.032 1.441-.087l.101-.025c.466-.116.932-.232 1.386-.388.197-.069.373-.243.519-.402.171-.182.326-.387.44-.603.159-.299.308-.601.458-.903v-.001c.133-.269.266-.538.405-.804.166-.316.262-.655.358-.995.079-.278.158-.556.275-.822.121-.271.124-.604.126-.91l.001-.024c.003-1.202-.003-2.404-.033-3.606a5.54 5.54 0 0 0-.082-.747 9.618 9.618 0 0 1-.064-.478l-.029-.287c-.047-.489-.095-.975-.244-1.458-.062-.199-.117-.4-.172-.601-.134-.486-.268-.973-.494-1.439-.349-.713-.689-1.395-1.299-1.944-.743-.665-1.602-1.115-2.508-1.482-.225-.092-.472-.116-.722-.139-.244-.024-.492-.047-.724-.136-.017-.006-.038.005-.061.017-.018.009-.036.018-.054.021a4.006 4.006 0 0 0-.191.033c-.154.028-.307.057-.46.05a7.577 7.577 0 0 0-2.364.278c-.907.26-1.76.638-2.576 1.098a5.69 5.69 0 0 0-1.141.835l-.119.113c-.37.353-.745.709-1.013 1.155-.064.105-.132.207-.2.31a6.064 6.064 0 0 0-.304.491 2.053 2.053 0 0 0-.232.603c-.05.284-.065.575-.056.861.026.87.068 1.74.117 2.61.021.384.065.768.124 1.147.085.565.292 1.092.499 1.62.132.339.265.677.366 1.026.249.224.283.527.317.827l.005.044.003.031c.01.083.024.166.038.249.028.166.056.332.05.496-.02.59-.035 1.165.482 1.595.048.04.078.102.109.163l.024.048a.602.602 0 0 0 .019.035c.197.309.161.5-.123.722-.158.125-.314.255-.478.391l-.065.054h.003ZM104.913 109.023c-.262.193-.558.433-.449.837v.003c-.017.002-.037.002-.056.002-.046.001-.092.001-.103.021l-.095.165c-.16.277-.321.555-.453.847-.089.2-.146.416-.203.631l-.049.184c-.031.107-.064.215-.097.323-.094.303-.188.607-.211.916-.024.311 0 .627.025.943.014.189.029.379.033.568l.006.244c.012.457.024.914-.023 1.366a4.106 4.106 0 0 0 .407 2.297c.165.335.332.667.514.993.363.659.824 1.243 1.452 1.682l.172.125c.202.149.405.298.631.395.104.044.209.081.315.117.18.062.36.124.533.224.525.303 1.138.327 1.737.347.399.014.798.004 1.198-.005a15.562 15.562 0 0 1 1.512.011c.092.008.189-.02.284-.046.042-.012.083-.024.124-.032.237-.05.447-.158.657-.265.109-.057.219-.113.331-.16 1.578-.659 2.992-1.566 4.306-2.638.279-.228.549-.48.76-.766.303-.414.563-.867.82-1.316l.004-.007c.055-.095.061-.222.067-.34l.004-.065c.006-.095.014-.19.022-.286a8.21 8.21 0 0 0 .039-.858c-.012-.56-.064-1.109-.589-1.496-.269-.199-.518-.424-.768-.649-.12-.109-.241-.219-.365-.325l-.068-.06c-.103-.09-.205-.18-.316-.261-.19-.141-.383-.279-.575-.417-.157-.113-.314-.226-.469-.34a9.502 9.502 0 0 1-.281-.215 4.911 4.911 0 0 0-.523-.377 33.441 33.441 0 0 0-1.672-.948c-.83-.439-1.687-.82-2.643-.901a24.398 24.398 0 0 0-.778-.05c-.121-.006-.243-.012-.366-.02-.025-.037-.058-.074-.09-.111-.069-.079-.139-.16-.153-.25-.042-.255-.219-.32-.41-.39l-.03-.012a2.55 2.55 0 0 1-.264-.106c-.689-.327-1.42-.347-2.159-.275-.648.064-1.194.376-1.695.746Zm1.055 1.693c.174-.266.405-.442.751-.509v.003c-.554.653-.683 1.364-.349 2.173.241.171.538.229.841.288.122.023.245.047.365.079.067.017.199-.026.223-.075l.043-.094c.091-.195.184-.395.209-.6.062-.503.194-.659.713-.664.154-.003.309-.008.463-.014.424-.015.847-.031 1.262.022.545.07 1.105.211 1.604.44.775.355 1.534.757 2.232 1.236.567.389 1.095.83 1.624 1.27.221.185.443.37.667.55.019.016.034.036.05.056.019.025.037.05.062.066l.065.042c.194.124.397.254.413.501l.002.029c.023.358.046.723-.117 1.072-.243.517-.633.907-1.061 1.271-1.194 1.011-2.576 1.714-3.984 2.375a1.694 1.694 0 0 1-.645.174l-.477.018c-.808.034-1.619.068-2.418-.082-1.235-.231-2.209-.85-2.775-1.999-.055-.112-.116-.222-.176-.332a7.143 7.143 0 0 1-.229-.443c-.261-.577-.244-1.188-.226-1.806v-.02c.018-.592.003-1.184-.017-1.774-.041-1.176.231-2.262.885-3.253Zm.998 1.491.012.028-.121.037-.12.036-.023-.055.225-.107.027.061Z\",\n fill: \"#1A77CA\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M145.116 135.847c-.008.185-.014.371-.019.557-.011.324-.021.648-.04.972-.033.553-.071 1.106-.108 1.661l-.001.002-.058.862-.001.015c-.105 1.555-.211 3.111-.313 4.666a50.672 50.672 0 0 0-.097 1.866c-.023.916-.155 1.815-.299 2.719-.123.77-.228 1.542-.333 2.315l-.001.003c-.047.349-.095.699-.144 1.048a89.236 89.236 0 0 0-.213 1.696 54.043 54.043 0 0 1-.374 2.742c-.274 1.607-.671 3.182-1.067 4.759l-.001.003-.193.768c-.044.178-.11.349-.177.521-.053.138-.107.276-.149.418a11.868 11.868 0 0 1-1.407 3.08c-.505.792-1.098 1.54-1.977 1.994-.182.094-.359.196-.536.298-.22.126-.439.253-.667.364-.704.341-1.458.54-2.232.655-.716.107-1.432.174-2.156.139a4.23 4.23 0 0 0-.477.014c-.146.009-.291.019-.436.015-.536-.014-.944-.144-1.525-.5-.463-.28-.927-.569-1.346-.904a7.007 7.007 0 0 1-.962-.971c-.226-.268-.433-.548-.642-.828a22.522 22.522 0 0 0-.438-.579c-.373-.475-.662-1.001-.951-1.527-.124-.225-.247-.451-.378-.672-.34-.576-.529-1.203-.719-1.831-.065-.215-.13-.431-.202-.645-.372-1.115-.742-2.234-1.041-3.366-.215-.82-.387-1.652-.56-2.483-.074-.358-.148-.717-.226-1.074-.109-.506-.217-1.014-.32-1.52a22.431 22.431 0 0 1-.41-3.164c-.023-.403-.077-.804-.13-1.206a39.015 39.015 0 0 1-.061-.478 6.718 6.718 0 0 0-.051-.321v-.001a9.825 9.825 0 0 1-.04-.233 5.534 5.534 0 0 1-.11.124 2.288 2.288 0 0 0-.172.206l-.002.003a658.625 658.625 0 0 0-2.717 3.738c-.315.439-.624.883-.933 1.327a74.297 74.297 0 0 1-1.305 1.837 95.352 95.352 0 0 1-2.349 3.022 27.962 27.962 0 0 1-1.467 1.65 40.192 40.192 0 0 1-1.528 1.534c-1.015.968-2.03 1.933-3.068 2.875-.47.428-.962.844-1.499 1.182-.789.497-1.637.89-2.608.876a27.594 27.594 0 0 1-1.464-.076 1.357 1.357 0 0 1-.85-.401l-.24-.237c-.327-.321-.656-.644-.925-1.006-.451-.606-.845-1.259-1.22-1.915-.122-.213-.186-.459-.249-.703a7.43 7.43 0 0 0-.062-.233c-.223-.764-.34-1.548-.456-2.332a27.956 27.956 0 0 0-.242-1.453c-.164-.809-.208-1.647-.232-2.474-.05-1.612-.067-3.227-.055-4.842a11.14 11.14 0 0 1 .199-1.896c.128-.685.283-1.365.438-2.045.066-.289.132-.578.195-.867a.46.46 0 0 0-.017-.283l-.171.15c-.125.109-.25.217-.369.332-.68.659-1.443 1.222-2.217 1.769-.158.111-.311.229-.464.348-.178.137-.355.274-.54.4a317.33 317.33 0 0 1-3.109 2.106c-.498.333-1 .662-1.513.971-.165.099-.339.183-.512.268a6.987 6.987 0 0 0-.492.255c-.998.589-1.99 1.183-2.985 1.778l-.752.45-.457.272c-.4.238-.8.476-1.197.719-.315.194-.627.392-.94.59-.595.378-1.19.756-1.802 1.103-.4.224-.823.407-1.246.589-.23.099-.461.198-.688.304a.513.513 0 0 1-.273.024c-.102-.008-.2-.017-.287.042-.135.095-.275.087-.417.079a1.834 1.834 0 0 0-.149-.004l-.12.004c-.602.019-1.204.038-1.804.095a2.14 2.14 0 0 1-1.496-.391c-.188-.135-.317-.384-.408-.609-.264-.653-.29-1.347-.279-2.04 0-.038.024-.078.05-.107a.212.212 0 0 1 .077-.049 1.35 1.35 0 0 0-.049-.092c-.038-.068-.075-.134-.078-.2a16.704 16.704 0 0 1 .012-1.546c.039-.725.077-1.455.285-2.158.054-.185.105-.371.157-.557.14-.507.28-1.016.482-1.5.12-.285.22-.576.32-.866.078-.224.155-.448.24-.668.531-1.364 1.115-2.696 1.887-3.947.305-.496.599-1 .893-1.503.306-.525.613-1.051.934-1.569a26.618 26.618 0 0 1 2.857-3.776c.25-.278.491-.564.732-.851.285-.339.57-.679.873-1.004.31-.334.642-.647.974-.961.203-.191.406-.383.604-.579.72-.714 1.497-1.363 2.275-2.013l.002-.001.544-.456c.276-.232.547-.469.817-.706.357-.312.714-.625 1.081-.924a55.864 55.864 0 0 1 2.276-1.78 41.582 41.582 0 0 1 2.473-1.719 38.3 38.3 0 0 0 .933-.615c.727-.489 1.454-.978 2.259-1.353.55-.255 1.073-.565 1.596-.875.247-.146.494-.293.744-.433a.992.992 0 0 1 .134-.059c.032-.013.064-.025.095-.04l.761-.375.779-.385c-.229-.569-.587-1.002-.991-1.378-.376-.351-.775-.677-1.173-1.004-.216-.176-.431-.353-.643-.533-.091-.078-.229-.199-.214-.283.01-.061.011-.125.013-.19.006-.185.011-.374.207-.506a.935.935 0 0 0 .19-.199c.033-.044.072-.092.118-.145-.09-.026-.171-.052-.246-.076-.142-.045-.262-.083-.385-.101a2.726 2.726 0 0 1-1.305-.543 1.916 1.916 0 0 0-.233-.146c-.066-.037-.13-.074-.193-.117-.794-.549-1.446-1.225-1.927-2.063a66.307 66.307 0 0 0-.559-.947c-.23-.385-.46-.771-.681-1.162a9.256 9.256 0 0 1-.496-1.052l-.125-.299c-.293-.706-.587-1.411-.846-2.128-.39-1.08-.66-2.195-.871-3.322-.074-.393-.11-.792-.147-1.192a17.934 17.934 0 0 0-.117-1.043v-.001a32.31 32.31 0 0 1-.035-.269c-.153-1.197-.156-2.399-.147-3.603.004-.44-.014-.882-.032-1.324a48.82 48.82 0 0 1-.044-1.964l-.004-.46v-.003c-.005-.422-.01-.845.004-1.268.011-.399.055-.795.108-1.19.138-1.026.607-1.945 1.068-2.848l.035-.068c.455-.896.927-1.794 1.552-2.597.058-.074.105-.157.152-.24.029-.05.057-.1.088-.148l.464-.723.001-.002c.353-.55.707-1.1 1.049-1.655.086-.14.203-.156.321-.171.043-.006.086-.012.128-.023l-.135-.02-.073-.012-.05-.008c.06-.085.115-.17.17-.252.124-.185.242-.362.384-.52.728-.811 1.466-1.617 2.203-2.422l.001-.002.574-.627a11.245 11.245 0 0 1 2.156-1.84c.136-.09.27-.18.404-.272.28-.19.561-.381.854-.55.451-.258.909-.501 1.368-.745l.638-.34c.194-.105.391-.211.581-.324.245-.145.488-.291.732-.437.437-.263.872-.524 1.313-.777a20.605 20.605 0 0 1 3.112-1.444c.213-.079.423-.167.634-.254.252-.106.505-.211.762-.301 1.188-.416 2.376-.826 3.573-1.21.61-.197 1.235-.362 1.865-.483.64-.122 1.291-.188 1.939-.24a46.89 46.89 0 0 1 2.626-.15c.63-.018 1.261-.014 1.891-.01.276.002.552.004.828.004.211 0 .419-.003.63-.014.96-.047 1.895.133 2.829.313l.128.025c.302.057.61.118.909.193.133.033.263.075.394.117.176.057.353.114.533.149.706.133 1.344.427 1.982.72.196.09.391.18.588.265.24.103.478.212.716.321.169.078.339.155.51.231l.047.021c.782.349 1.563.696 2.291 1.158.386.245.747.522 1.107.798l.356.271c.256.19.537.35.819.509.522.294.977.667 1.414 1.074.284.266.579.52.875.775.273.236.546.472.811.716.226.21.435.44.644.668l.219.24c.531.572 1.035 1.152 1.419 1.843.191.343.428.66.667.977.154.206.309.413.451.627.288.433.561.876.835 1.32l.274.442.271.437.009.014c.28.45.56.9.834 1.355.05.082.082.175.114.269.018.05.036.103.056.153.058.135.118.27.178.406.125.282.251.566.35.856.103.297.193.599.282.9.112.373.223.747.358 1.111.331.904.461 1.844.591 2.784.05.358.099.717.16 1.074.278 1.632.268 3.278.259 4.924-.002.261-.004.523-.004.785 0 .612-.02 1.213-.12 1.814-.032.2-.067.399-.101.598-.048.277-.096.553-.137.83-.019.13-.026.261-.033.393a4.582 4.582 0 0 1-.017.263l-.048.474c-.044.447-.089.894-.16 1.337a14.09 14.09 0 0 0-.158 2.274c0 .44.003.879.006 1.318.007.958.014 1.916-.012 2.875-.03 1.071.176 2.089.548 3.082a36.942 36.942 0 0 0 1.793 4.011c.701 1.346 1.654 2.496 2.648 3.623.262.298.568.557.874.817.142.121.285.243.423.368.24.215.479.432.718.648.669.604 1.337 1.208 2.016 1.799.203.177.418.341.634.505.238.181.476.363.697.561.339.302.69.59 1.04.877.367.301.733.601 1.084.917.422.379.807.804 1.167 1.24.423.511.813 1.049 1.197 1.589.119.169.226.347.333.524.114.189.228.378.356.557.344.485.572 1.023.8 1.562.109.256.217.513.339.764.052.109.093.234.114.352l.063.378.036.215c.159.943.317 1.885.455 2.831.026.177.023.358.02.539-.003.212-.007.424.036.628.052.246-.025.432-.103.621l-.023.056-.021.051c-.102.257-.237.269-.53.275-.628.009-1.259.046-1.884.092-.657.049-1.311.116-1.965.182a7.65 7.65 0 0 0-.334.046c-.138.02-.277.041-.417.053-.32.026-.642.046-.962.046-.63 0-1.261-.01-1.891-.02h-.001l-.628-.009c-.684-.01-1.294-.27-1.905-.529l-.274-.115a2.096 2.096 0 0 1-.083-.038c-.044-.021-.087-.042-.134-.055a3.432 3.432 0 0 0-.224-.048 2.366 2.366 0 0 1-.383-.099c-.698-.272-1.397-.543-2.083-.847-.727-.321-1.458-.647-2.156-1.028-.339-.186-.662-.4-.985-.614-.28-.186-.56-.372-.851-.539-.568-.325-1.075-.726-1.581-1.127a35.84 35.84 0 0 0-.578-.451c-.16-.123-.331-.233-.502-.344-.085-.055-.171-.11-.255-.167l-.047.019-.061.024h-.006Zm-43.371 4.776.001.015h-.309l.1-.129.093-.12c-.167-.032-.302-.058-.478-.089l.039.167.017.072-.021.011a.6.6 0 0 0-.026.015 25.664 25.664 0 0 0-.205-.277c-.074-.059-.157-.043-.238-.028-.104.02-.203.039-.273-.108-.273.208-.405.465-.437.809a1.141 1.141 0 0 1-.258.59c-.364.436-.754.855-1.153 1.262-.437.448-.883.887-1.346 1.309-.226.205-.46.401-.695.597-.225.188-.45.377-.67.573-.562.509-1.18.948-1.797 1.388-.232.165-.464.33-.692.499-.394.288-.807.555-1.219.822-.174.113-.348.225-.52.34-.132.086-.265.17-.398.254-.244.154-.49.309-.723.479-.476.348-.99.623-1.507.9l-.294.158a31.74 31.74 0 0 0-1.252.724 51.73 51.73 0 0 1-.517.307l-.54.315v.001c-.556.324-1.112.647-1.663.979-.178.107-.358.213-.537.319-.574.339-1.147.678-1.684 1.065-.476.345-.984.636-1.493.926-.3.171-.599.342-.891.524l-.131.082c-.359.224-.735.46-1.195.496-.098.007-.19.055-.283.103-.071.037-.143.075-.219.094-.05.012-.1.031-.15.05-.153.059-.308.119-.471-.019-.021-.011-.06-.02-.083-.011-.277.083-.554.053-.832.022-.183-.02-.366-.041-.55-.028-.342.023-.392-.035-.395-.381-.003-.286.002-.571.007-.856.004-.222.007-.444.007-.667 0-.145-.005-.291-.011-.437-.01-.24-.02-.48-.003-.719.038-.523.09-1.049.193-1.563.115-.566.264-1.13.45-1.679.112-.331.244-.656.376-.981.125-.309.25-.617.36-.931.58-1.685 1.43-3.239 2.337-4.765a72.641 72.641 0 0 1 2.13-3.334c.25-.371.544-.716.837-1.06.123-.144.246-.288.365-.434l.191-.234c.382-.468.764-.937 1.159-1.393a21.825 21.825 0 0 1 2.302-2.302c.114-.098.214-.211.315-.324.095-.106.19-.212.295-.306.318-.281.642-.555.966-.829l.524-.445.9-.771c.597-.514 1.196-1.029 1.802-1.535.208-.174.426-.335.645-.497.253-.187.506-.374.743-.581.65-.572 1.364-1.057 2.082-1.537.283-.189.564-.38.845-.571.434-.295.869-.591 1.308-.877.183-.118.375-.224.566-.33.237-.131.474-.263.695-.418.474-.332.993-.583 1.51-.833h.001c.17-.083.342-.165.51-.25.266-.134.513-.288.759-.442.127-.079.253-.158.383-.234.061-.035.123-.07.187-.096l.261-.107.001-.001c.297-.122.593-.244.888-.371l.01-.005c.097-.042.209-.091.272-.169.152-.195.358-.309.564-.422.084-.046.168-.092.248-.144.041-.026.115-.075.109-.098-.027-.102.043-.175.099-.233.037-.039.069-.072.059-.103-.047-.141-.056-.242.032-.358.006-.008.006-.029 0-.04-.093-.166-.139-.351-.186-.536-.07-.282-.141-.564-.377-.779l-.032-.027c-.046-.038-.096-.079-.106-.126-.048-.249-.205-.43-.362-.61a2.506 2.506 0 0 1-.224-.283c-.129-.193-.267-.396-.52-.468-.037-.011-.066-.049-.095-.086a.83.83 0 0 0-.045-.053l-.156-.155a30.691 30.691 0 0 1-.311-.313l-.347-.36-.081-.085c.076-.268.153-.531.229-.794.135-.477.006-.792-.423-1.023-.116-.063-.24-.115-.363-.167-.26-.109-.52-.218-.719-.434-.263.054-.5-.025-.735-.103a3.51 3.51 0 0 0-.28-.085c-.305-.075-.566-.182-.795-.422a3.79 3.79 0 0 0-.453-.38c-.162-.122-.324-.244-.462-.388-.177-.186-.311-.415-.444-.642l-.105-.176c-.206-.342-.409-.687-.612-1.032v-.001l-.379-.64c-.005-.01-.015-.019-.025-.029-.013-.012-.025-.023-.025-.034-.01-.286-.153-.512-.296-.74-.1-.158-.199-.316-.255-.494-.11-.343-.254-.675-.4-1.008-.091-.211-.183-.422-.266-.636-.27-.694-.454-1.411-.637-2.128-.07-.272-.14-.543-.214-.813-.136-.493-.174-.993-.21-1.495a20.765 20.765 0 0 0-.179-1.571c-.1-.711-.197-1.419-.142-2.141a7.42 7.42 0 0 0-.001-.863 15.566 15.566 0 0 1-.013-.414c-.015-1.13-.03-2.26-.05-3.39-.004-.204-.01-.41-.017-.614-.011-.332-.022-.664-.018-.995.005-.497.064-.99.246-1.462.373-.97.81-1.9 1.344-2.8.356-.596.728-1.182 1.1-1.767.28-.442.562-.884.835-1.33.4-.65.825-1.286 1.273-1.904a4.57 4.57 0 0 1 .898-.96c.303-.234.554-.53.805-.827.101-.12.202-.239.307-.354.117-.13.233-.26.348-.392.455-.515.91-1.03 1.462-1.454.73-.56 1.472-1.098 2.29-1.529l.16-.083a56.154 56.154 0 0 0 1.9-1.026c.382-.22.758-.449 1.135-.678.407-.248.814-.496 1.229-.732.314-.178.644-.33.974-.48l.422-.196c.148-.07.296-.138.445-.205l.121-.055-.017-.028a3.979 3.979 0 0 1-.088-.148c.374.077.683-.042.986-.16l.207-.078a91.609 91.609 0 0 0 2.059-.748l.109-.04c.177-.066.352-.136.528-.205.28-.111.56-.222.845-.318.272-.09.549-.17.826-.248.236-.067.472-.134.705-.209.654-.208 1.314-.387 2.006-.427l.481-.03c.161-.01.322-.02.481-.028l.505-.026c.841-.044 1.682-.088 2.523-.121.169-.008.339-.002.509.005.21.008.421.017.629-.003.367-.033.736-.02 1.103-.007.404.014.806.028 1.205-.019.238-.027.44.028.64.082.117.031.233.062.355.077a14.494 14.494 0 0 1 4.03 1.136h.001c.231.099.463.197.697.289.046.017.09.04.135.064.126.066.253.133.411.077.029-.011.082.003.102.026.154.17.358.257.561.344.08.034.16.068.237.107.187.095.378.183.569.271l.261.122.36.171.69.329c.042.223.21.29.379.36.106.042.213.085.29.166.131.135.296.239.461.343.082.052.165.104.243.16.086.06.17.126.254.191.114.088.228.177.347.256.123.082.25.157.378.233.184.108.368.217.538.345.26.197.504.416.748.636l.079.07a12.755 12.755 0 0 0 .303.269l.002.001c.238.207.476.415.701.633.315.306.62.622.925.938l.184.19.122.126c.123.127.246.254.368.385.04.043.084.086.128.129.117.114.235.228.306.365.366.716.849 1.352 1.332 1.988.194.256.388.51.574.771.056.077.095.167.133.257.033.076.065.151.108.22.17.274.344.546.518.819.191.3.383.6.57.903.27.436.51.887.648 1.387a.747.747 0 0 0 .112.21.898.898 0 0 1 .102.18c.213.56.391 1.13.569 1.7.109.35.218.698.335 1.045.184.542.258 1.096.332 1.65.038.284.076.567.128.849.352 1.875.37 3.77.344 5.669-.003.131.004.263.011.395.01.187.02.374.003.558-.036.384-.091.764-.146 1.144-.029.204-.059.408-.086.613-.044.338-.085.678-.127 1.017l-.066.538-.015.124-.014.115c-.032.262-.064.525-.091.786-.028.262-.06.524-.092.785-.074.603-.148 1.206-.166 1.81-.027.846-.01 1.694.007 2.541.008.382.015.764.019 1.146l.003.798c.001.466.002.932.012 1.398.011.667.108 1.317.393 1.933.038.08.06.168.082.256.018.074.036.148.064.217l.202.505c.254.634.509 1.27.787 1.894.165.37.347.734.529 1.097.164.328.328.656.48.989.396.866.956 1.618 1.554 2.352.129.156.249.32.37.484.168.228.335.457.525.666.238.262.502.503.765.743.117.106.233.212.347.32.034.032.07.061.107.09.029.023.059.047.086.072l.49.444 1.018.928c.195.177.388.358.581.538l.001.001c.373.347.746.695 1.134 1.024.262.222.55.415.838.607.128.086.257.172.382.26a.199.199 0 0 0 .048.025c.024.01.048.02.058.039.144.248.363.42.582.593.114.09.229.181.333.282.031.03.06.063.09.095a.947.947 0 0 0 .212.194c.85.514 1.48 1.251 2.11 1.986l.008.009.132.155c.61.707 1.082 1.508 1.552 2.308.088.15.172.304.255.458.108.198.215.396.334.588.22.353.291.746.363 1.138.017.096.034.192.054.287.041.202.074.406.107.61.053.329.106.657.195.976.111.397.13.792.151 1.231l.004.081-.394.033c-.318.027-.63.053-.94.088a71.83 71.83 0 0 0-.932.115c-.438.055-.876.111-1.315.157-.232.024-.465.026-.699.029-.13.001-.259.003-.389.008-.481.02-.965.015-1.446 0a.558.558 0 0 1-.07-.01c-.103-.018-.237-.042-.194.14a15.845 15.845 0 0 0-.245-.076l-.002-.001c-.126-.039-.247-.076-.366-.116-.599-.206-1.197-.414-1.794-.622l-.579-.202h-.002v-.001c-.495-.17-.99-.34-1.48-.522-.1-.037-.194-.09-.289-.143-.052-.029-.104-.059-.157-.085l-.768-.389h-.001a111.54 111.54 0 0 0-1.73-.865c-.372-.182-.698-.427-1.024-.671a16.292 16.292 0 0 0-.263-.196 59.16 59.16 0 0 1-1.266-.958c-.265-.205-.53-.409-.797-.611-.618-.465-1.325-.792-2.029-1.106-.206-.093-.514-.197-.787 0-.041.028-.123.001-.214-.029-.045-.015-.092-.031-.137-.041-.467.098-.54.465-.54.879l.002.482c.002.32.004.641-.002.962-.008.461-.028.921-.049 1.382v.001l-.01.229-.026.653c-.035.872-.069 1.743-.112 2.615-.01.226-.036.454-.061.681l-.03.267-.026.251v.001c-.018.176-.037.353-.053.531a63.22 63.22 0 0 1-.038.433c-.039.434-.078.867-.103 1.301a39.88 39.88 0 0 0-.037.914c-.014.414-.027.828-.059 1.241a29.92 29.92 0 0 1-.173 1.555l-.068.54c-.059.494-.123.985-.194 1.476-.021.159-.048.318-.074.478-.03.181-.061.363-.084.545-.057.445-.111.89-.166 1.335-.054.445-.108.89-.165 1.335l-.058.44c-.097.743-.194 1.486-.312 2.227a70.262 70.262 0 0 1-.519 2.892c-.089.431-.211.853-.332 1.275a52.108 52.108 0 0 0-.302 1.093c-.134.503-.268 1.006-.437 1.498-.185.546-.434 1.072-.683 1.592-.121.25-.266.49-.411.729l-.167.279a3.983 3.983 0 0 1-1.66 1.563c-.575.298-1.144.59-1.778.728l-.09.02-.065.015c-.593.131-1.187.263-1.807.226a9.116 9.116 0 0 0-.843.001c-.166.005-.332.01-.498.01a.862.862 0 0 1-.322-.046c-.584-.243-1.115-.572-1.549-1.026-.748-.783-1.464-1.603-2.024-2.531l-.138-.225-.002-.003c-.428-.701-.858-1.404-1.107-2.199-.137-.436-.281-.87-.426-1.303-.218-.655-.436-1.308-.627-1.971a56.958 56.958 0 0 1-.889-3.49 43.599 43.599 0 0 1-.412-2.244c-.045-.271-.089-.542-.136-.813a82.544 82.544 0 0 1-.308-1.921c-.026-.173-.036-.348-.047-.523a9.625 9.625 0 0 0-.029-.384 36.678 36.678 0 0 1-.232-3.424l-.003-.03c-.003-.018-.006-.036 0-.051.135-.305.101-.611.068-.919-.011-.101-.022-.202-.027-.303a1.003 1.003 0 0 0-.199-.549c-.018-.026-.047-.047-.077-.069-.073-.053-.151-.111-.085-.238.009-.023-.053-.109-.094-.124-.448-.156-.9-.3-1.378-.104l-.039.014c-.045.014-.092.029-.105.058-.031.066-.063.13-.096.195-.104.209-.208.417-.253.637a1.401 1.401 0 0 1-.226.521 32.32 32.32 0 0 0-.527.83c-.096.154-.191.308-.288.461l-.108.169c-.225.351-.449.701-.684 1.047-.273.402-.552.801-.842 1.191-.235.315-.472.627-.71.94l-.001.001c-.36.473-.719.945-1.067 1.425a132.87 132.87 0 0 0-1.069 1.512c-.443.632-.886 1.263-1.342 1.886-.804 1.095-1.648 2.161-2.575 3.158a64.796 64.796 0 0 1-2.218 2.262c-.472.462-.957.912-1.442 1.362l-.001.001c-.267.248-.535.496-.801.747a9.705 9.705 0 0 0-.415.421c-.274.289-.548.578-.875.786-.112.072-.223.147-.335.223-.552.376-1.116.76-1.862.688-.091-.009-.182-.001-.274.006a1.998 1.998 0 0 1-.19.011c-.416.006-.739-.142-1.03-.459-.686-.749-1.267-1.555-1.607-2.508a7.724 7.724 0 0 1-.302-1.237 79.007 79.007 0 0 1-.346-2.207l-.042-.277c-.078-.521-.157-1.044-.202-1.57-.144-1.704-.115-3.411-.086-5.118.006-.342.012-.683.016-1.025.009-.684.161-1.372.314-2.042.153-.674.338-1.339.523-2.004l.178-.643c.182-.667.369-1.332.563-1.994.014-.049.042-.096.069-.142.03-.051.06-.101.072-.155.037-.155.083-.308.13-.461.122-.396.243-.794.192-1.224a10.444 10.444 0 0 1-.034-.382l-.014-.172h.007l-.008-.015Z\",\n fill: \"#1A77CA\"\n })));\n};\nexport { SvgBlobBadlyDrawnOctopus as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjMwIiBoZWlnaHQ9IjIzMCIgdmlld0JveD0iMCAwIDIzMCAyMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTAxLjkwNiAxLjg5MjM0QzEzOC4wOTQgLTkuMzQ4MjQgMTY4Ljg0IDMxLjg3OTEgMTkyLjE5OCA2Mi40NDg2QzIxNS4yODcgOTIuNjY0MiAyMzguMDA4IDEyOS4xMjcgMjI3LjI1MSAxNjUuOTNDMjE2Ljk1MyAyMDEuMTU4IDE3OC40ODcgMjE2LjQwNSAxNDQuMTY3IDIyNi43NjNDMTE3LjMxOSAyMzQuODY3IDkwLjc3MSAyMjYuNTg1IDY1LjIzMTEgMjE0LjgzMUMzOC4zNTA5IDIwMi40NjEgMS4xMDYxNSAxOTAuNjkgMC4wMTgzMjI4IDE2MC40MjRDLTEuMDUzNzMgMTMwLjU5NiA0NS4yMTMzIDEyOC4wMzMgNjEuMjE2NSAxMDMuMTMzQzgxLjgxNDggNzEuMDgzMiA2Ni4xNDY2IDEyLjk5OTUgMTAxLjkwNiAxLjg5MjM0WiIgZmlsbD0iI0Y1RjZGOCIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTEyOS44MjUgMTIzLjMyOEgxMjYuMTY0QzEyNS43NDggMTIzLjMyOCAxMjUuMzY2IDEyMy4xODMgMTI1LjAwMiAxMjMuMDAxQzEyNC45MDYgMTIyLjk1MyAxMjQuODA5IDEyMi45MDUgMTI0LjcxMiAxMjIuODU4QzEyNC4xNDYgMTIyLjU4IDEyMy41NzkgMTIyLjMwMyAxMjMuMDk2IDEyMS44ODlDMTIyLjI4IDEyMS4xODcgMTIxLjY3OSAxMjAuMzQ5IDEyMS41MzUgMTE5LjI3NEMxMjEuNDQ3IDExOC42MjcgMTIxLjUyNyAxMTcuOTc3IDEyMi4wMDIgMTE3LjQ0MkMxMjIuMDc1IDExNy4zNjEgMTIyLjEwNCAxMTcuMjIgMTIyLjEwNyAxMTcuMTA0QzEyMi4xMTMgMTE2LjY2OCAxMjEuOTcyIDExNi4yNiAxMjEuNzkxIDExNS44NjdDMTIxLjMxNSAxMTQuODQ0IDEyMC45OSAxMTMuNzg0IDEyMC44NDYgMTEyLjY2NkMxMjAuNzA4IDExMS41OTQgMTIwLjYyIDExMC41MjIgMTIwLjY3OSAxMDkuNDQxQzEyMC42ODYgMTA5LjI5NiAxMjAuNjkxIDEwOS4xNTEgMTIwLjY5NiAxMDkuMDA1QzEyMC43MDUgMTA4LjczOSAxMjAuNzE1IDEwOC40NzMgMTIwLjczOCAxMDguMjA4QzEyMC43OTYgMTA3LjUyMyAxMjEuMDE2IDEwNi44OTYgMTIxLjQzNiAxMDYuMzMyQzEyMS41NjEgMTA2LjE2NCAxMjEuNjczIDEwNS45ODQgMTIxLjc4NCAxMDUuODA0QzEyMS45NDQgMTA1LjU0NiAxMjIuMTA0IDEwNS4yODkgMTIyLjMwNCAxMDUuMDY0QzEyMy4wNTUgMTA0LjIyIDEyMy45MzUgMTAzLjUzIDEyNC45NSAxMDMuMDAxQzEyNS43MTggMTAyLjYwMiAxMjYuNTAxIDEwMi4yNTkgMTI3LjMzNyAxMDIuMDA0QzEyOC4zNjEgMTAxLjY5NSAxMjkuMzk0IDEwMS41MTYgMTMwLjQ1OCAxMDEuNTIyQzEzMC45OTggMTAxLjUyMiAxMzEuNTQxIDEwMS41NTEgMTMyLjA4IDEwMS41OTdDMTMyLjk3MiAxMDEuNjc1IDEzMy43NzMgMTAyLjAzIDEzNC41NjggMTAyLjQwOUMxMzQuNTg5IDEwMi40MTggMTM0LjYwOCAxMDIuNDMzIDEzNC42MjcgMTAyLjQ0OEMxMzQuNjU0IDEwMi40NjggMTM0LjY4MSAxMDIuNDg5IDEzNC43MTIgMTAyLjQ5NUMxMzUuMDggMTAyLjU2NyAxMzUuMzU2IDEwMi43ODYgMTM1LjYzMSAxMDMuMDA1QzEzNS43MjQgMTAzLjA3OSAxMzUuODE4IDEwMy4xNTMgMTM1LjkxNCAxMDMuMjIxQzEzNi42MDEgMTAzLjcwMyAxMzcuMTE3IDEwNC4zNTkgMTM3LjU5OCAxMDUuMDI5QzEzNy44NzcgMTA1LjQxNyAxMzguMDkxIDEwNS44NSAxMzguMTgyIDEwNi4zMzJDMTM4LjE5NiAxMDYuNDE0IDEzOC4yNTQgMTA2LjQ4OCAxMzguMzEzIDEwNi41NjNDMTM4LjM0NyAxMDYuNjA3IDEzOC4zODEgMTA2LjY1MSAxMzguNDA3IDEwNi42OTdDMTM4LjYxIDEwNy4wNSAxMzguNjk5IDEwNy40MzggMTM4Ljc4OCAxMDcuODI1QzEzOC44MjUgMTA3Ljk4OSAxMzguODYzIDEwOC4xNTMgMTM4LjkwOSAxMDguMzE1QzEzOC45MTEgMTA4LjMyNCAxMzguOTEgMTA4LjMzNCAxMzguOTEgMTA4LjM0M0MxMzguOTA5IDEwOC4zNDYgMTM4LjkwOSAxMDguMzQ5IDEzOC45MDkgMTA4LjM1MUMxMzguOTA5IDEwOC4zNTIgMTM4LjkwOSAxMDguMzU0IDEzOC45MDkgMTA4LjM1NUMxMzkuMzk5IDExMC4xNTUgMTM5LjUxNiAxMTEuOTkzIDEzOS40NDYgMTEzLjg0OEMxMzkuNDM1IDExNC4xMjkgMTM5LjQ0NCAxMTQuNDExIDEzOS40NTQgMTE0LjY5MkMxMzkuNDYgMTE0Ljg2NCAxMzkuNDY1IDExNS4wMzYgMTM5LjQ2NiAxMTUuMjA5QzEzOS40NjkgMTE2LjA1OCAxMzkuMjc2IDExNi44NzYgMTM4Ljk5NyAxMTcuNjczQzEzOC45MzIgMTE3Ljg1OSAxMzguODcyIDExOC4wNDggMTM4LjgxMyAxMTguMjM3QzEzOC42OTQgMTE4LjYxNCAxMzguNTc2IDExOC45OTIgMTM4LjQwNyAxMTkuMzQ2QzEzNy45NSAxMjAuMzIzIDEzNy40NDUgMTIxLjI3MyAxMzYuNjMzIDEyMi4wM0MxMzYuMTA4IDEyMi41MTkgMTM1LjUwMSAxMjIuODA3IDEzNC44MDUgMTIyLjk5OEMxMzMuNTg3IDEyMy4zMzQgMTMyLjM0OCAxMjMuMzMgMTMxLjEwOCAxMjMuMzI1QzEzMC44NzcgMTIzLjMyNCAxMzAuNjQ2IDEyMy4zMjMgMTMwLjQxNCAxMjMuMzI1SDEyOS44MjVWMTIzLjMyOFpNMTIzLjk2MSAxMjAuMTU4QzEyNC4zODEgMTIwLjY3MiAxMjQuODkxIDEyMC45NTggMTI1LjQyMiAxMjEuMjA0TDEyNS40NDkgMTIxLjIxN0MxMjUuODU0IDEyMS40MDMgMTI2LjI3MiAxMjEuNTk2IDEyNi43NDUgMTIxLjU1NEMxMjcuMDM4IDEyMS41MjggMTI3LjMzMSAxMjEuNTA3IDEyNy42MjIgMTIxLjUwN0MxMjcuODg5IDEyMS41MDcgMTI4LjE1NSAxMjEuNTEyIDEyOC40MjEgMTIxLjUxNkMxMjguNjg3IDEyMS41MiAxMjguOTU0IDEyMS41MjUgMTI5LjIyMSAxMjEuNTI1QzEyOS4zODkgMTIxLjUyNSAxMjkuNTU3IDEyMS41MjUgMTI5LjcyNiAxMjEuNTI2QzEzMC4yNzMgMTIxLjUyOCAxMzAuODIgMTIxLjUzIDEzMS4zNjUgMTIxLjUxQzEzMS42MSAxMjEuNSAxMzEuODU3IDEyMS41MDggMTMyLjEwMyAxMjEuNTE2QzEzMi41ODYgMTIxLjUzMiAxMzMuMDY4IDEyMS41NDggMTMzLjU0NCAxMjEuNDI5TDEzMy42NDUgMTIxLjQwNEMxMzQuMTExIDEyMS4yODggMTM0LjU3NyAxMjEuMTcyIDEzNS4wMzEgMTIxLjAxNkMxMzUuMjI4IDEyMC45NDcgMTM1LjQwNCAxMjAuNzczIDEzNS41NSAxMjAuNjE0QzEzNS43MjEgMTIwLjQzMiAxMzUuODc2IDEyMC4yMjcgMTM1Ljk5IDEyMC4wMTFDMTM2LjE0OSAxMTkuNzEyIDEzNi4yOTggMTE5LjQxIDEzNi40NDggMTE5LjEwOEwxMzYuNDQ4IDExOS4xMDdDMTM2LjU4MSAxMTguODM4IDEzNi43MTQgMTE4LjU2OSAxMzYuODUzIDExOC4zMDNDMTM3LjAxOSAxMTcuOTg3IDEzNy4xMTUgMTE3LjY0OCAxMzcuMjExIDExNy4zMDhDMTM3LjI5IDExNy4wMyAxMzcuMzY5IDExNi43NTIgMTM3LjQ4NiAxMTYuNDg2QzEzNy42MDcgMTE2LjIxNSAxMzcuNjEgMTE1Ljg4MiAxMzcuNjEyIDExNS41NzZMMTM3LjYxMyAxMTUuNTUyQzEzNy42MTYgMTE0LjM1IDEzNy42MSAxMTMuMTQ4IDEzNy41OCAxMTEuOTQ2QzEzNy41NzUgMTExLjY5NiAxMzcuNTM3IDExMS40NDcgMTM3LjQ5OCAxMTEuMTk5QzEzNy40NzQgMTExLjA0IDEzNy40NSAxMTAuODgxIDEzNy40MzQgMTEwLjcyMUMxMzcuNDI0IDExMC42MjUgMTM3LjQxNCAxMTAuNTMgMTM3LjQwNSAxMTAuNDM0QzEzNy4zNTggMTA5Ljk0NSAxMzcuMzEgMTA5LjQ1OSAxMzcuMTYxIDEwOC45NzZDMTM3LjA5OSAxMDguNzc3IDEzNy4wNDQgMTA4LjU3NiAxMzYuOTg5IDEwOC4zNzVDMTM2Ljg1NSAxMDcuODg5IDEzNi43MjEgMTA3LjQwMiAxMzYuNDk1IDEwNi45MzZDMTM2LjE0NiAxMDYuMjIzIDEzNS44MDYgMTA1LjU0MSAxMzUuMTk2IDEwNC45OTJDMTM0LjQ1MyAxMDQuMzI3IDEzMy41OTQgMTAzLjg3NyAxMzIuNjg4IDEwMy41MUMxMzIuNDYzIDEwMy40MTggMTMyLjIxNiAxMDMuMzk0IDEzMS45NjYgMTAzLjM3MUMxMzEuNzIyIDEwMy4zNDcgMTMxLjQ3NCAxMDMuMzI0IDEzMS4yNDIgMTAzLjIzNUMxMzEuMjI1IDEwMy4yMjkgMTMxLjIwNCAxMDMuMjQgMTMxLjE4MSAxMDMuMjUyQzEzMS4xNjMgMTAzLjI2MSAxMzEuMTQ1IDEwMy4yNyAxMzEuMTI3IDEwMy4yNzNDMTMxLjA2MyAxMDMuMjgyIDEzMC45OTkgMTAzLjI5NCAxMzAuOTM2IDEwMy4zMDZDMTMwLjc4MiAxMDMuMzM0IDEzMC42MjkgMTAzLjM2MyAxMzAuNDc2IDEwMy4zNTZDMTI5LjY3MiAxMDMuMzMgMTI4Ljg4NiAxMDMuNDExIDEyOC4xMTIgMTAzLjYzNEMxMjcuMjA1IDEwMy44OTQgMTI2LjM1MiAxMDQuMjcyIDEyNS41MzYgMTA0LjczMkMxMjUuMTI2IDEwNC45NjMgMTI0LjczMyAxMDUuMjQzIDEyNC4zOTUgMTA1LjU2N0MxMjQuMzU2IDEwNS42MDUgMTI0LjMxNiAxMDUuNjQyIDEyNC4yNzYgMTA1LjY4QzEyMy45MDYgMTA2LjAzMyAxMjMuNTMxIDEwNi4zODkgMTIzLjI2MyAxMDYuODM1QzEyMy4xOTkgMTA2Ljk0IDEyMy4xMzEgMTA3LjA0MiAxMjMuMDYzIDEwNy4xNDVDMTIyLjk1NiAxMDcuMzA2IDEyMi44NSAxMDcuNDY2IDEyMi43NTkgMTA3LjYzNkMxMjIuNjU2IDEwNy44MjMgMTIyLjU2NSAxMDguMDMxIDEyMi41MjcgMTA4LjIzOUMxMjIuNDc3IDEwOC41MjMgMTIyLjQ2MiAxMDguODE0IDEyMi40NzEgMTA5LjFDMTIyLjQ5NyAxMDkuOTcgMTIyLjUzOSAxMTAuODQgMTIyLjU4OCAxMTEuNzFDMTIyLjYwOSAxMTIuMDk0IDEyMi42NTMgMTEyLjQ3OCAxMjIuNzEyIDExMi44NTdDMTIyLjc5NyAxMTMuNDIyIDEyMy4wMDQgMTEzLjk0OSAxMjMuMjExIDExNC40NzdDMTIzLjM0MyAxMTQuODE2IDEyMy40NzYgMTE1LjE1NCAxMjMuNTc3IDExNS41MDNDMTIzLjgyNiAxMTUuNzI3IDEyMy44NiAxMTYuMDMgMTIzLjg5NCAxMTYuMzNDMTIzLjg5NiAxMTYuMzQ1IDEyMy44OTcgMTE2LjM2IDEyMy44OTkgMTE2LjM3NEMxMjMuOSAxMTYuMzg0IDEyMy45MDEgMTE2LjM5NSAxMjMuOTAyIDExNi40MDVDMTIzLjkxMiAxMTYuNDg4IDEyMy45MjYgMTE2LjU3MSAxMjMuOTQgMTE2LjY1NEMxMjMuOTY4IDExNi44MiAxMjMuOTk2IDExNi45ODYgMTIzLjk5IDExNy4xNUMxMjMuOTcgMTE3Ljc0IDEyMy45NTUgMTE4LjMxNSAxMjQuNDcyIDExOC43NDVDMTI0LjUyIDExOC43ODUgMTI0LjU1IDExOC44NDcgMTI0LjU4MSAxMTguOTA4QzEyNC41ODkgMTE4LjkyNCAxMjQuNTk2IDExOC45NCAxMjQuNjA1IDExOC45NTZDMTI0LjYxMSAxMTguOTY4IDEyNC42MTcgMTE4Ljk3OSAxMjQuNjI0IDExOC45OTFDMTI0LjgyMSAxMTkuMyAxMjQuNzg1IDExOS40OTEgMTI0LjUwMSAxMTkuNzEzQzEyNC4zNDMgMTE5LjgzOCAxMjQuMTg3IDExOS45NjggMTI0LjAyMyAxMjAuMTA0TDEyMy45NTggMTIwLjE1OEgxMjMuOTYxWiIgZmlsbD0iIzFBNzdDQSIvPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTEwNC45MTMgMTA5LjAyM0MxMDQuNjUxIDEwOS4yMTYgMTA0LjM1NSAxMDkuNDU2IDEwNC40NjQgMTA5Ljg2VjEwOS44NjNDMTA0LjQ0NyAxMDkuODY1IDEwNC40MjcgMTA5Ljg2NSAxMDQuNDA4IDEwOS44NjVDMTA0LjM2MiAxMDkuODY2IDEwNC4zMTYgMTA5Ljg2NiAxMDQuMzA1IDEwOS44ODZDMTA0LjI3NCAxMDkuOTQxIDEwNC4yNDIgMTA5Ljk5NiAxMDQuMjEgMTEwLjA1MUMxMDQuMDUgMTEwLjMyOCAxMDMuODg5IDExMC42MDYgMTAzLjc1NyAxMTAuODk4QzEwMy42NjggMTExLjA5OCAxMDMuNjExIDExMS4zMTQgMTAzLjU1NCAxMTEuNTI5QzEwMy41MzggMTExLjU5MSAxMDMuNTIxIDExMS42NTIgMTAzLjUwNSAxMTEuNzEzQzEwMy40NzQgMTExLjgyIDEwMy40NDEgMTExLjkyOCAxMDMuNDA4IDExMi4wMzZDMTAzLjMxNCAxMTIuMzM5IDEwMy4yMiAxMTIuNjQzIDEwMy4xOTcgMTEyLjk1MkMxMDMuMTczIDExMy4yNjMgMTAzLjE5NyAxMTMuNTc5IDEwMy4yMjIgMTEzLjg5NUMxMDMuMjM2IDExNC4wODQgMTAzLjI1MSAxMTQuMjc0IDEwMy4yNTUgMTE0LjQ2M0MxMDMuMjU3IDExNC41NDQgMTAzLjI1OSAxMTQuNjI2IDEwMy4yNjEgMTE0LjcwN0MxMDMuMjczIDExNS4xNjQgMTAzLjI4NSAxMTUuNjIxIDEwMy4yMzggMTE2LjA3M0MxMDMuMTUzIDExNi44ODQgMTAzLjI4NyAxMTcuNjQ0IDEwMy42NDUgMTE4LjM3QzEwMy44MSAxMTguNzA1IDEwMy45NzcgMTE5LjAzNyAxMDQuMTU5IDExOS4zNjNDMTA0LjUyMiAxMjAuMDIyIDEwNC45ODMgMTIwLjYwNiAxMDUuNjExIDEyMS4wNDVDMTA1LjY2OCAxMjEuMDg2IDEwNS43MjUgMTIxLjEyOCAxMDUuNzgzIDEyMS4xN0MxMDUuOTg1IDEyMS4zMTkgMTA2LjE4OCAxMjEuNDY4IDEwNi40MTQgMTIxLjU2NUMxMDYuNTE4IDEyMS42MDkgMTA2LjYyMyAxMjEuNjQ2IDEwNi43MjkgMTIxLjY4MkMxMDYuOTA5IDEyMS43NDQgMTA3LjA4OSAxMjEuODA2IDEwNy4yNjIgMTIxLjkwNkMxMDcuNzg3IDEyMi4yMDkgMTA4LjQgMTIyLjIzMyAxMDguOTk5IDEyMi4yNTNDMTA5LjM5OCAxMjIuMjY3IDEwOS43OTcgMTIyLjI1NyAxMTAuMTk3IDEyMi4yNDhDMTEwLjcwMSAxMjIuMjM1IDExMS4yMDUgMTIyLjIyMyAxMTEuNzA5IDEyMi4yNTlDMTExLjgwMSAxMjIuMjY3IDExMS44OTggMTIyLjIzOSAxMTEuOTkzIDEyMi4yMTNDMTEyLjAzNSAxMjIuMjAxIDExMi4wNzYgMTIyLjE4OSAxMTIuMTE3IDEyMi4xODFDMTEyLjM1NCAxMjIuMTMxIDExMi41NjQgMTIyLjAyMyAxMTIuNzc0IDEyMS45MTZDMTEyLjg4MyAxMjEuODU5IDExMi45OTMgMTIxLjgwMyAxMTMuMTA1IDEyMS43NTZDMTE0LjY4MyAxMjEuMDk3IDExNi4wOTcgMTIwLjE5IDExNy40MTEgMTE5LjExOEMxMTcuNjkgMTE4Ljg5IDExNy45NiAxMTguNjM4IDExOC4xNzEgMTE4LjM1MkMxMTguNDc0IDExNy45MzggMTE4LjczNCAxMTcuNDg1IDExOC45OTEgMTE3LjAzNkwxMTguOTk1IDExNy4wMjlDMTE5LjA1IDExNi45MzQgMTE5LjA1NiAxMTYuODA3IDExOS4wNjIgMTE2LjY4OUMxMTkuMDYzIDExNi42NjcgMTE5LjA2NCAxMTYuNjQ1IDExOS4wNjYgMTE2LjYyNEMxMTkuMDcyIDExNi41MjkgMTE5LjA4IDExNi40MzQgMTE5LjA4OCAxMTYuMzM4QzExOS4xMTEgMTE2LjA1MiAxMTkuMTM0IDExNS43NjYgMTE5LjEyNyAxMTUuNDhDMTE5LjExNSAxMTQuOTIgMTE5LjA2MyAxMTQuMzcxIDExOC41MzggMTEzLjk4NEMxMTguMjY5IDExMy43ODUgMTE4LjAyIDExMy41NiAxMTcuNzcgMTEzLjMzNUMxMTcuNjUgMTEzLjIyNiAxMTcuNTI5IDExMy4xMTYgMTE3LjQwNSAxMTMuMDFDMTE3LjM4MiAxMTIuOTkgMTE3LjM2IDExMi45NyAxMTcuMzM3IDExMi45NUMxMTcuMjM0IDExMi44NiAxMTcuMTMyIDExMi43NyAxMTcuMDIxIDExMi42ODlDMTE2LjgzMSAxMTIuNTQ4IDExNi42MzggMTEyLjQxIDExNi40NDYgMTEyLjI3MkMxMTYuMjg5IDExMi4xNTkgMTE2LjEzMiAxMTIuMDQ2IDExNS45NzcgMTExLjkzMkMxMTUuODgyIDExMS44NjMgMTE1Ljc4OSAxMTEuNzkgMTE1LjY5NiAxMTEuNzE3QzExNS41MjcgMTExLjU4MyAxMTUuMzU3IDExMS40NSAxMTUuMTczIDExMS4zNEMxMTQuNjI3IDExMS4wMDggMTE0LjA2NyAxMTAuNjkzIDExMy41MDEgMTEwLjM5MkMxMTIuNjcxIDEwOS45NTMgMTExLjgxNCAxMDkuNTcyIDExMC44NTggMTA5LjQ5MUMxMTAuNjAxIDEwOS40NjkgMTEwLjM0MiAxMDkuNDU1IDExMC4wOCAxMDkuNDQxQzEwOS45NTkgMTA5LjQzNSAxMDkuODM3IDEwOS40MjkgMTA5LjcxNCAxMDkuNDIxQzEwOS42ODkgMTA5LjM4NCAxMDkuNjU2IDEwOS4zNDcgMTA5LjYyNCAxMDkuMzFDMTA5LjU1NSAxMDkuMjMxIDEwOS40ODUgMTA5LjE1IDEwOS40NzEgMTA5LjA2QzEwOS40MjkgMTA4LjgwNSAxMDkuMjUyIDEwOC43NCAxMDkuMDYxIDEwOC42N0MxMDkuMDUxIDEwOC42NjYgMTA5LjA0MSAxMDguNjYyIDEwOS4wMzEgMTA4LjY1OEMxMDguOTQgMTA4LjYyNyAxMDguODUyIDEwOC41OTIgMTA4Ljc2NyAxMDguNTUyQzEwOC4wNzggMTA4LjIyNSAxMDcuMzQ3IDEwOC4yMDUgMTA2LjYwOCAxMDguMjc3QzEwNS45NiAxMDguMzQxIDEwNS40MTQgMTA4LjY1MyAxMDQuOTEzIDEwOS4wMjNaTTEwNS45NjggMTEwLjcxNkMxMDYuMTQyIDExMC40NSAxMDYuMzczIDExMC4yNzQgMTA2LjcxOSAxMTAuMjA3VjExMC4yMUMxMDYuMTY1IDExMC44NjMgMTA2LjAzNiAxMTEuNTc0IDEwNi4zNyAxMTIuMzgzQzEwNi42MTEgMTEyLjU1NCAxMDYuOTA4IDExMi42MTIgMTA3LjIxMSAxMTIuNjcxQzEwNy4zMzMgMTEyLjY5NCAxMDcuNDU2IDExMi43MTggMTA3LjU3NiAxMTIuNzVDMTA3LjY0MyAxMTIuNzY3IDEwNy43NzUgMTEyLjcyNCAxMDcuNzk5IDExMi42NzVDMTA3LjgxMyAxMTIuNjQ0IDEwNy44MjcgMTEyLjYxMyAxMDcuODQyIDExMi41ODFDMTA3LjkzMyAxMTIuMzg2IDEwOC4wMjYgMTEyLjE4NiAxMDguMDUxIDExMS45ODFDMTA4LjExMyAxMTEuNDc4IDEwOC4yNDUgMTExLjMyMiAxMDguNzY0IDExMS4zMTdDMTA4LjkxOCAxMTEuMzE0IDEwOS4wNzMgMTExLjMwOSAxMDkuMjI3IDExMS4zMDNDMTA5LjY1MSAxMTEuMjg4IDExMC4wNzQgMTExLjI3MiAxMTAuNDg5IDExMS4zMjVDMTExLjAzNCAxMTEuMzk1IDExMS41OTQgMTExLjUzNiAxMTIuMDkzIDExMS43NjVDMTEyLjg2OCAxMTIuMTIgMTEzLjYyNyAxMTIuNTIyIDExNC4zMjUgMTEzLjAwMUMxMTQuODkyIDExMy4zOSAxMTUuNDIgMTEzLjgzMSAxMTUuOTQ5IDExNC4yNzFDMTE2LjE3IDExNC40NTYgMTE2LjM5MiAxMTQuNjQxIDExNi42MTYgMTE0LjgyMUMxMTYuNjM1IDExNC44MzcgMTE2LjY1IDExNC44NTcgMTE2LjY2NiAxMTQuODc3QzExNi42ODUgMTE0LjkwMiAxMTYuNzAzIDExNC45MjcgMTE2LjcyOCAxMTQuOTQzQzExNi43NDkgMTE0Ljk1NyAxMTYuNzcxIDExNC45NzEgMTE2Ljc5MyAxMTQuOTg1QzExNi45ODcgMTE1LjEwOSAxMTcuMTkgMTE1LjIzOSAxMTcuMjA2IDExNS40ODZMMTE3LjIwOCAxMTUuNTE1QzExNy4yMzEgMTE1Ljg3MyAxMTcuMjU0IDExNi4yMzggMTE3LjA5MSAxMTYuNTg3QzExNi44NDggMTE3LjEwNCAxMTYuNDU4IDExNy40OTQgMTE2LjAzIDExNy44NThDMTE0LjgzNiAxMTguODY5IDExMy40NTQgMTE5LjU3MiAxMTIuMDQ2IDEyMC4yMzNDMTExLjg0NyAxMjAuMzI2IDExMS42MTggMTIwLjQwMSAxMTEuNDAxIDEyMC40MDdDMTExLjI0MiAxMjAuNDEyIDExMS4wODMgMTIwLjQxOCAxMTAuOTI0IDEyMC40MjVDMTEwLjExNiAxMjAuNDU5IDEwOS4zMDUgMTIwLjQ5MyAxMDguNTA2IDEyMC4zNDNDMTA3LjI3MSAxMjAuMTEyIDEwNi4yOTcgMTE5LjQ5MyAxMDUuNzMxIDExOC4zNDRDMTA1LjY3NiAxMTguMjMyIDEwNS42MTUgMTE4LjEyMiAxMDUuNTU1IDExOC4wMTJDMTA1LjQ3NSAxMTcuODY2IDEwNS4zOTUgMTE3LjcxOSAxMDUuMzI2IDExNy41NjlDMTA1LjA2NSAxMTYuOTkyIDEwNS4wODIgMTE2LjM4MSAxMDUuMSAxMTUuNzYzTDEwNS4xIDExNS43NDNDMTA1LjExOCAxMTUuMTUxIDEwNS4xMDMgMTE0LjU1OSAxMDUuMDgzIDExMy45NjlDMTA1LjA0MiAxMTIuNzkzIDEwNS4zMTQgMTExLjcwNyAxMDUuOTY4IDExMC43MTZaTTEwNi45NjYgMTEyLjIwN0MxMDYuOTcgMTEyLjIxNyAxMDYuOTc0IDExMi4yMjYgMTA2Ljk3OCAxMTIuMjM1QzEwNi45MzggMTEyLjI0NyAxMDYuODk4IDExMi4yNTkgMTA2Ljg1NyAxMTIuMjcyQzEwNi44MTcgMTEyLjI4NCAxMDYuNzc3IDExMi4yOTYgMTA2LjczNyAxMTIuMzA4TDEwNi43MTQgMTEyLjI1M0wxMDYuOTM5IDExMi4xNDZDMTA2Ljk0NyAxMTIuMTY2IDEwNi45NTcgMTEyLjE4NyAxMDYuOTY2IDExMi4yMDdaIiBmaWxsPSIjMUE3N0NBIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTQ1LjExNiAxMzUuODQ3QzE0NS4xMDggMTM2LjAzMiAxNDUuMTAyIDEzNi4yMTggMTQ1LjA5NyAxMzYuNDA0QzE0NS4wODYgMTM2LjcyOCAxNDUuMDc2IDEzNy4wNTIgMTQ1LjA1NyAxMzcuMzc2QzE0NS4wMjQgMTM3LjkyOSAxNDQuOTg2IDEzOC40ODIgMTQ0Ljk0OSAxMzkuMDM3TDE0NC45NDggMTM5LjAzOUMxNDQuOTI5IDEzOS4zMjYgMTQ0LjkwOSAxMzkuNjEzIDE0NC44OSAxMzkuOTAxTDE0NC44ODkgMTM5LjkxNkMxNDQuNzg0IDE0MS40NzEgMTQ0LjY3OCAxNDMuMDI3IDE0NC41NzYgMTQ0LjU4MkMxNDQuNTM1IDE0NS4yMDMgMTQ0LjQ5NyAxNDUuODI3IDE0NC40NzkgMTQ2LjQ0OEMxNDQuNDU2IDE0Ny4zNjQgMTQ0LjMyNCAxNDguMjYzIDE0NC4xOCAxNDkuMTY3QzE0NC4wNTcgMTQ5LjkzNyAxNDMuOTUyIDE1MC43MDkgMTQzLjg0NyAxNTEuNDgyTDE0My44NDYgMTUxLjQ4NUMxNDMuNzk5IDE1MS44MzQgMTQzLjc1MSAxNTIuMTg0IDE0My43MDIgMTUyLjUzM0MxNDMuNjI0IDE1My4wOTggMTQzLjU1NiAxNTMuNjY0IDE0My40ODkgMTU0LjIyOUMxNDMuMzggMTU1LjE0NSAxNDMuMjcxIDE1Ni4wNiAxNDMuMTE1IDE1Ni45NzFDMTQyLjg0MSAxNTguNTc4IDE0Mi40NDQgMTYwLjE1MyAxNDIuMDQ4IDE2MS43M0wxNDIuMDQ3IDE2MS43MzNDMTQxLjk4MiAxNjEuOTg5IDE0MS45MTggMTYyLjI0NSAxNDEuODU0IDE2Mi41MDFDMTQxLjgxIDE2Mi42NzkgMTQxLjc0NCAxNjIuODUgMTQxLjY3NyAxNjMuMDIyQzE0MS42MjQgMTYzLjE2IDE0MS41NyAxNjMuMjk4IDE0MS41MjggMTYzLjQ0QzE0MS4yMTIgMTY0LjUzNSAxNDAuNzI4IDE2NS41NjcgMTQwLjEyMSAxNjYuNTJDMTM5LjYxNiAxNjcuMzEyIDEzOS4wMjMgMTY4LjA2IDEzOC4xNDQgMTY4LjUxNEMxMzcuOTYyIDE2OC42MDggMTM3Ljc4NSAxNjguNzEgMTM3LjYwOCAxNjguODEyQzEzNy4zODggMTY4LjkzOCAxMzcuMTY5IDE2OS4wNjUgMTM2Ljk0MSAxNjkuMTc2QzEzNi4yMzcgMTY5LjUxNyAxMzUuNDgzIDE2OS43MTYgMTM0LjcwOSAxNjkuODMxQzEzMy45OTMgMTY5LjkzOCAxMzMuMjc3IDE3MC4wMDUgMTMyLjU1MyAxNjkuOTdDMTMyLjM5NSAxNjkuOTYzIDEzMi4yMzUgMTY5Ljk3MyAxMzIuMDc2IDE2OS45ODRDMTMxLjkzIDE2OS45OTMgMTMxLjc4NSAxNzAuMDAzIDEzMS42NCAxNjkuOTk5QzEzMS4xMDQgMTY5Ljk4NSAxMzAuNjk2IDE2OS44NTUgMTMwLjExNSAxNjkuNDk5QzEyOS42NTIgMTY5LjIxOSAxMjkuMTg4IDE2OC45MyAxMjguNzY5IDE2OC41OTVDMTI4LjQxNCAxNjguMzEyIDEyOC4xIDE2Ny45NzEgMTI3LjgwNyAxNjcuNjI0QzEyNy41ODEgMTY3LjM1NiAxMjcuMzc0IDE2Ny4wNzYgMTI3LjE2NSAxNjYuNzk2QzEyNy4wMjEgMTY2LjYwMSAxMjYuODc3IDE2Ni40MDcgMTI2LjcyNyAxNjYuMjE3QzEyNi4zNTQgMTY1Ljc0MiAxMjYuMDY1IDE2NS4yMTYgMTI1Ljc3NiAxNjQuNjlDMTI1LjY1MiAxNjQuNDY1IDEyNS41MjkgMTY0LjIzOSAxMjUuMzk4IDE2NC4wMThDMTI1LjA1OCAxNjMuNDQyIDEyNC44NjkgMTYyLjgxNSAxMjQuNjc5IDE2Mi4xODdDMTI0LjYxNCAxNjEuOTcyIDEyNC41NDkgMTYxLjc1NiAxMjQuNDc3IDE2MS41NDJDMTI0LjEwNSAxNjAuNDI3IDEyMy43MzUgMTU5LjMwOCAxMjMuNDM2IDE1OC4xNzZDMTIzLjIyMSAxNTcuMzU2IDEyMy4wNDkgMTU2LjUyNCAxMjIuODc2IDE1NS42OTNDMTIyLjgwMiAxNTUuMzM1IDEyMi43MjggMTU0Ljk3NiAxMjIuNjUgMTU0LjYxOUMxMjIuNTQxIDE1NC4xMTMgMTIyLjQzMyAxNTMuNjA1IDEyMi4zMyAxNTMuMDk5QzEyMi4xMjIgMTUyLjA1MyAxMjEuOTc4IDE1MS4wMDIgMTIxLjkyIDE0OS45MzVDMTIxLjg5NyAxNDkuNTMyIDEyMS44NDMgMTQ5LjEzMSAxMjEuNzkgMTQ4LjcyOUMxMjEuNzY5IDE0OC41NyAxMjEuNzQ4IDE0OC40MSAxMjEuNzI5IDE0OC4yNTFDMTIxLjcxNiAxNDguMTQ5IDEyMS42OTkgMTQ4LjA0OSAxMjEuNjc4IDE0Ny45M0wxMjEuNjc4IDE0Ny45MjlDMTIxLjY2NSAxNDcuODU5IDEyMS42NTIgMTQ3Ljc4MyAxMjEuNjM4IDE0Ny42OTZDMTIxLjU5OSAxNDcuNzQxIDEyMS41NjMgMTQ3Ljc4MiAxMjEuNTI4IDE0Ny44MkMxMjEuNDYyIDE0Ny44OTMgMTIxLjQwNSAxNDcuOTU3IDEyMS4zNTYgMTQ4LjAyNkwxMjEuMzU0IDE0OC4wMjlDMTIwLjQ0NSAxNDkuMjczIDExOS41MzcgMTUwLjUxNyAxMTguNjM3IDE1MS43NjdDMTE4LjMyMiAxNTIuMjA2IDExOC4wMTMgMTUyLjY1IDExNy43MDQgMTUzLjA5NEMxMTcuMjc1IDE1My43MTEgMTE2Ljg0NiAxNTQuMzI4IDExNi4zOTkgMTU0LjkzMUMxMTUuNjM5IDE1NS45NTcgMTE0Ljg1IDE1Ni45NTkgMTE0LjA1IDE1Ny45NTNDMTEzLjU4OSAxNTguNTI1IDExMy4wODggMTU5LjA2OSAxMTIuNTgzIDE1OS42MDNDMTEyLjA4NyAxNjAuMTI5IDExMS41NzcgMTYwLjY0IDExMS4wNTUgMTYxLjEzN0MxMTAuMDQgMTYyLjEwNSAxMDkuMDI1IDE2My4wNyAxMDcuOTg3IDE2NC4wMTJDMTA3LjUxNyAxNjQuNDQgMTA3LjAyNSAxNjQuODU2IDEwNi40ODggMTY1LjE5NEMxMDUuNjk5IDE2NS42OTEgMTA0Ljg1MSAxNjYuMDg0IDEwMy44OCAxNjYuMDdDMTAzLjM5MyAxNjYuMDYxIDEwMi45MDMgMTY2LjAyOSAxMDIuNDE2IDE2NS45OTRDMTAyLjA4NSAxNjUuOTY4IDEwMS43OTQgMTY1LjgxOCAxMDEuNTY2IDE2NS41OTNDMTAxLjQ4NyAxNjUuNTE0IDEwMS40MDYgMTY1LjQzNSAxMDEuMzI2IDE2NS4zNTZDMTAwLjk5OSAxNjUuMDM1IDEwMC42NyAxNjQuNzEyIDEwMC40MDEgMTY0LjM1Qzk5Ljk0OTUgMTYzLjc0NCA5OS41NTY0IDE2My4wOTEgOTkuMTgxIDE2Mi40MzVDOTkuMDU4NiAxNjIuMjIyIDk4Ljk5NTMgMTYxLjk3NiA5OC45MzIyIDE2MS43MzJDOTguOTEyMSAxNjEuNjUzIDk4Ljg5MiAxNjEuNTc1IDk4Ljg3IDE2MS40OTlDOTguNjQ3MiAxNjAuNzM1IDk4LjUzMDcgMTU5Ljk1MSA5OC40MTQgMTU5LjE2N0M5OC4zNDE4IDE1OC42ODEgOTguMjY5NSAxNTguMTk1IDk4LjE3MTkgMTU3LjcxNEM5OC4wMDc2IDE1Ni45MDUgOTcuOTYzNiAxNTYuMDY3IDk3Ljk0MDIgMTU1LjI0Qzk3Ljg5MDMgMTUzLjYyOCA5Ny44NzI3IDE1Mi4wMTMgOTcuODg0NSAxNTAuMzk4Qzk3Ljg5MDMgMTQ5Ljc2NSA5Ny45Njk1IDE0OS4xMjYgOTguMDgzOSAxNDguNTAyQzk4LjIxMTYgMTQ3LjgxNyA5OC4zNjY3IDE0Ny4xMzcgOTguNTIxOSAxNDYuNDU3Qzk4LjU4NzggMTQ2LjE2OCA5OC42NTM3IDE0NS44NzkgOTguNzE3NSAxNDUuNTlDOTguNzM1MSAxNDUuNTEyIDk4Ljc0MzkgMTQ1LjQzMSA5OC42OTk5IDE0NS4zMDdDOTguNjQzIDE0NS4zNTcgOTguNTg1OSAxNDUuNDA3IDk4LjUyODkgMTQ1LjQ1N0M5OC40MDM2IDE0NS41NjYgOTguMjc5MSAxNDUuNjc0IDk4LjE2MDIgMTQ1Ljc4OUM5Ny40Nzk3IDE0Ni40NDggOTYuNzE3IDE0Ny4wMTEgOTUuOTQyNiAxNDcuNTU4Qzk1Ljc4NTEgMTQ3LjY2OSA5NS42MzE5IDE0Ny43ODcgOTUuNDc4NyAxNDcuOTA2Qzk1LjMwMTIgMTQ4LjA0MyA5NS4xMjM3IDE0OC4xOCA5NC45Mzk1IDE0OC4zMDZDOTMuOTA2OSAxNDkuMDE0IDkyLjg3MTUgMTQ5LjcxNiA5MS44MzAyIDE1MC40MTJDOTEuMzMxNSAxNTAuNzQ1IDkwLjgzIDE1MS4wNzQgOTAuMzE2NiAxNTEuMzgzQzkwLjE1MiAxNTEuNDgyIDg5Ljk3ODIgMTUxLjU2NiA4OS44MDQ2IDE1MS42NTFDODkuNjM4IDE1MS43MzIgODkuNDcxNSAxNTEuODEzIDg5LjMxMzUgMTUxLjkwNkM4OC4zMTUyIDE1Mi40OTUgODcuMzIyNiAxNTMuMDg5IDg2LjMyODEgMTUzLjY4NEM4Ni4wNzc3IDE1My44MzQgODUuODI3MiAxNTMuOTg0IDg1LjU3NjUgMTU0LjEzNEM4NS40MjQyIDE1NC4yMjUgODUuMjcxNyAxNTQuMzE1IDg1LjExOTEgMTU0LjQwNkM4NC43MTkzIDE1NC42NDQgODQuMzE5MiAxNTQuODgyIDgzLjkyMjEgMTU1LjEyNUM4My42MDczIDE1NS4zMTkgODMuMjk1IDE1NS41MTcgODIuOTgyNiAxNTUuNzE1QzgyLjM4NzEgMTU2LjA5MyA4MS43OTEzIDE1Ni40NzEgODEuMTc5NSAxNTYuODE4QzgwLjc4MDYgMTU3LjA0MiA4MC4zNTcxIDE1Ny4yMjUgNzkuOTMzNyAxNTcuNDA3Qzc5LjcwMzMgMTU3LjUwNiA3OS40NzI5IDE1Ny42MDUgNzkuMjQ2NSAxNTcuNzExQzc5LjE1NzUgMTU3Ljc1MiA3OS4wNjM5IDE1Ny43NDQgNzguOTcyNiAxNTcuNzM1Qzc4Ljg3MTIgMTU3LjcyNyA3OC43NzI2IDE1Ny43MTggNzguNjg2MiAxNTcuNzc3Qzc4LjU1MTEgMTU3Ljg3MiA3OC40MTExIDE1Ny44NjQgNzguMjY4NiAxNTcuODU2Qzc4LjIxOTQgMTU3Ljg1MyA3OC4xNjk4IDE1Ny44NTEgNzguMTIwMSAxNTcuODUyTDc4LjAwMDEgMTU3Ljg1NkM3Ny4zOTc3IDE1Ny44NzUgNzYuNzk1NSAxNTcuODk0IDc2LjE5NTkgMTU3Ljk1MUM3NS42Mzg2IDE1OC4wMDUgNzUuMTM0MSAxNTcuODcyIDc0LjY5OTkgMTU3LjU2Qzc0LjUxMjIgMTU3LjQyNSA3NC4zODMxIDE1Ny4xNzYgNzQuMjkyMiAxNTYuOTUxQzc0LjAyODIgMTU2LjI5OCA3NC4wMDE4IDE1NS42MDQgNzQuMDEzNSAxNTQuOTExQzc0LjAxMzUgMTU0Ljg3MyA3NC4wMzcgMTU0LjgzMyA3NC4wNjM0IDE1NC44MDRDNzQuMDg5OCAxNTQuNzc1IDc0LjEzMDkgMTU0Ljc1OCA3NC4xMzk3IDE1NC43NTVDNzQuMTI1MiAxNTQuNzI0IDc0LjEwOCAxNTQuNjkzIDc0LjA5MSAxNTQuNjYzQzc0LjA1MjggMTU0LjU5NSA3NC4wMTU2IDE1NC41MjkgNzQuMDEzNSAxNTQuNDYzQzc0LjAwMTggMTU0LjAyMSA3My45OTAxIDE1My41NzYgNzQuMDEzNSAxNTMuMTM3Qzc0LjAxNzYgMTUzLjA2NCA3NC4wMjE1IDE1Mi45OSA3NC4wMjUzIDE1Mi45MTdDNzQuMDYzNiAxNTIuMTkyIDc0LjEwMjEgMTUxLjQ2MiA3NC4zMDk4IDE1MC43NTlDNzQuMzY0MSAxNTAuNTc0IDc0LjQxNTUgMTUwLjM4OCA3NC40NjY5IDE1MC4yMDJDNzQuNjA3MSAxNDkuNjk1IDc0Ljc0NzUgMTQ5LjE4NiA3NC45NDkzIDE0OC43MDJDNzUuMDY4NCAxNDguNDE3IDc1LjE2ODggMTQ4LjEyNiA3NS4yNjkgMTQ3LjgzNkM3NS4zNDY1IDE0Ny42MTIgNzUuNDIzOCAxNDcuMzg4IDc1LjUwOTUgMTQ3LjE2OEM3Ni4wNDA0IDE0NS44MDQgNzYuNjI0MiAxNDQuNDcyIDc3LjM5NTYgMTQzLjIyMUM3Ny43MDEzIDE0Mi43MjUgNzcuOTk1IDE0Mi4yMjEgNzguMjg4OCAxNDEuNzE4Qzc4LjU5NTUgMTQxLjE5MyA3OC45MDI0IDE0MC42NjcgNzkuMjIzIDE0MC4xNDlDODAuMDU2MSAxMzguODA2IDgxLjAxODIgMTM3LjU1MiA4Mi4wOCAxMzYuMzczQzgyLjMzMDkgMTM2LjA5NSA4Mi41NzEzIDEzNS44MDkgODIuODExNyAxMzUuNTIyQzgzLjA5NjkgMTM1LjE4MyA4My4zODIxIDEzNC44NDMgODMuNjg0NSAxMzQuNTE4QzgzLjk5NTkgMTM0LjE4NCA4NC4zMjc1IDEzMy44NzEgODQuNjU5MiAxMzMuNTU3Qzg0Ljg2MTkgMTMzLjM2NiA4NS4wNjQ2IDEzMy4xNzQgODUuMjYyNiAxMzIuOTc4Qzg1Ljk4MjYgMTMyLjI2NCA4Ni43NjAzIDEzMS42MTUgODcuNTM4MSAxMzAuOTY1TDg3LjUzOTcgMTMwLjk2NEM4Ny43MjE1IDEzMC44MTIgODcuOTAzMyAxMzAuNjYgODguMDg0NCAxMzAuNTA4Qzg4LjM1OTkgMTMwLjI3NiA4OC42MzA2IDEzMC4wMzkgODguOTAxIDEyOS44MDJDODkuMjU4MiAxMjkuNDkgODkuNjE1IDEyOS4xNzcgODkuOTgyMiAxMjguODc4QzkwLjcyNzMgMTI4LjI2OCA5MS40ODExIDEyNy42NyA5Mi4yNTg1IDEyNy4wOThDOTMuMDY1MSAxMjYuNTAzIDkzLjg4MzUgMTI1LjkxNCA5NC43MzEyIDEyNS4zNzlDOTUuMDQ2MyAxMjUuMTggOTUuMzU1NCAxMjQuOTcyIDk1LjY2NDQgMTI0Ljc2NEM5Ni4zOTEyIDEyNC4yNzUgOTcuMTE3OSAxMjMuNzg2IDk3LjkyMjYgMTIzLjQxMUM5OC40NzI3IDEyMy4xNTYgOTguOTk1NiAxMjIuODQ2IDk5LjUxOTEgMTIyLjUzNkM5OS43NjYgMTIyLjM5IDEwMC4wMTMgMTIyLjI0MyAxMDAuMjYzIDEyMi4xMDNDMTAwLjMwNiAxMjIuMDc5IDEwMC4zNTIgMTIyLjA2MSAxMDAuMzk3IDEyMi4wNDRDMTAwLjQyOSAxMjIuMDMxIDEwMC40NjEgMTIyLjAxOSAxMDAuNDkyIDEyMi4wMDRDMTAwLjc0NiAxMjEuODc5IDEwMC45OTkgMTIxLjc1NSAxMDEuMjUzIDEyMS42MjlDMTAxLjUxIDEyMS41MDIgMTAxLjc2OSAxMjEuMzc0IDEwMi4wMzIgMTIxLjI0NEMxMDEuODAzIDEyMC42NzUgMTAxLjQ0NSAxMjAuMjQyIDEwMS4wNDEgMTE5Ljg2NkMxMDAuNjY1IDExOS41MTUgMTAwLjI2NiAxMTkuMTg5IDk5Ljg2NzUgMTE4Ljg2MkM5OS42NTIyIDExOC42ODYgOTkuNDM2NyAxMTguNTA5IDk5LjIyNSAxMTguMzI5Qzk5LjEzNCAxMTguMjUxIDk4Ljk5NjIgMTE4LjEzIDk5LjAxMDggMTE4LjA0NkM5OS4wMjA3IDExNy45ODUgOTkuMDIyNSAxMTcuOTIxIDk5LjAyNDMgMTE3Ljg1NkM5OS4wMjk2IDExNy42NzEgOTkuMDM1IDExNy40ODIgOTkuMjMwOCAxMTcuMzVDOTkuMjk5MSAxMTcuMzAzIDk5LjM1MTggMTE3LjIzNyA5OS40MjAxIDExNy4xNTFDOTkuNDU0NCAxMTcuMTA3IDk5LjQ5MjcgMTE3LjA1OSA5OS41Mzg4IDExNy4wMDZDOTkuNDQ4MiAxMTYuOTggOTkuMzY3NiAxMTYuOTU0IDk5LjI5MzIgMTE2LjkzQzk5LjE1MTEgMTE2Ljg4NSA5OS4wMzEzIDExNi44NDcgOTguOTA4MiAxMTYuODI5Qzk4LjQyNDIgMTE2Ljc2IDk3Ljk5MDEgMTE2LjU4NCA5Ny42MDI5IDExNi4yODZDOTcuNTI5OSAxMTYuMjMgOTcuNDQ5OSAxMTYuMTg1IDk3LjM2OTYgMTE2LjE0Qzk3LjMwNDUgMTE2LjEwMyA5Ny4yMzkyIDExNi4wNjYgOTcuMTc3NSAxMTYuMDIzQzk2LjM4MjYgMTE1LjQ3NCA5NS43MzE0IDExNC43OTggOTUuMjUwNCAxMTMuOTZDOTUuMDY3MSAxMTMuNjQyIDk0Ljg3OTEgMTEzLjMyNyA5NC42OTExIDExMy4wMTNDOTQuNDYwOSAxMTIuNjI4IDk0LjIzMDggMTEyLjI0MiA5NC4wMDk2IDExMS44NTFDOTMuODE4OSAxMTEuNTEzIDkzLjY2MDYgMTExLjE1OCA5My41MTM5IDExMC43OTlDOTMuNDcyNSAxMTAuNyA5My40MzEgMTEwLjYgOTMuMzg5NCAxMTAuNUM5My4wOTU5IDEwOS43OTQgOTIuODAyNSAxMDkuMDg5IDkyLjU0MyAxMDguMzcyQzkyLjE1MjkgMTA3LjI5MiA5MS44ODMgMTA2LjE3NyA5MS42NzE4IDEwNS4wNUM5MS41OTgyIDEwNC42NTcgOTEuNTYxNyAxMDQuMjU4IDkxLjUyNTIgMTAzLjg1OEM5MS41MDYzIDEwMy42NTIgOTEuNDg3NSAxMDMuNDQ2IDkxLjQ2MzUgMTAzLjI0MUM5MS40NDc0IDEwMy4wOTggOTEuNDI4IDEwMi45NTYgOTEuNDA4NyAxMDIuODE1TDkxLjQwODUgMTAyLjgxNEM5MS4zOTYyIDEwMi43MjQgOTEuMzg0IDEwMi42MzQgOTEuMzcyNiAxMDIuNTQ1QzkxLjIyMDEgMTAxLjM0OCA5MS4yMTcxIDEwMC4xNDYgOTEuMjI1OSA5OC45NDE2QzkxLjIyOTcgOTguNTAxMyA5MS4yMTE2IDk4LjA1OTcgOTEuMTkzNiA5Ny42MTg0QzkxLjE4MzYgOTcuMzczNyA5MS4xNzM2IDk3LjEyODcgOTEuMTY3MyA5Ni44ODQ0QzkxLjE1NTYgOTYuNDc0NCA5MS4xNTI2IDk2LjA2NDMgOTEuMTQ5NyA5NS42NTQyVjk1LjY1MzZDOTEuMTQ4OSA5NS41IDkxLjE0NzMgOTUuMzQ2NiA5MS4xNDU3IDk1LjE5MzRMOTEuMTQ1NyA5NS4xOTEyQzkxLjE0MTIgOTQuNzY4NSA5MS4xMzY4IDk0LjM0NjQgOTEuMTQ5NyA5My45MjI5QzkxLjE2MTQgOTMuNTI0MSA5MS4yMDU0IDkzLjEyODMgOTEuMjU4MiA5Mi43MzI1QzkxLjM5NTYgOTEuNzA2NSA5MS44NjUxIDkwLjc4NzggOTIuMzI2NCA4OS44ODUxTDkyLjM2MTEgODkuODE3MUM5Mi44MTU4IDg4LjkyMTQgOTMuMjg4IDg4LjAyMjggOTMuOTEyOCA4Ny4yMTk2QzkzLjk3MTIgODcuMTQ1OSA5NC4wMTgyIDg3LjA2MzMgOTQuMDY1MiA4Ni45ODA4Qzk0LjA5MzcgODYuOTMwNyA5NC4xMjIzIDg2Ljg4MDQgOTQuMTUzMyA4Ni44MzI0Qzk0LjMwNzIgODYuNTkxIDk0LjQ2MjEgODYuMzQ5OSA5NC42MTcxIDg2LjEwODdMOTQuNjE4MiA4Ni4xMDdDOTQuOTcxMiA4NS41NTc1IDk1LjMyNDcgODUuMDA3NCA5NS42NjY5IDg0LjQ1MTZDOTUuNzUzMiA4NC4zMTE0IDk1Ljg2OTcgODQuMjk2MSA5NS45ODgzIDg0LjI4MDdDOTYuMDMwOSA4NC4yNzUxIDk2LjA3MzggODQuMjY5NSA5Ni4xMTU3IDg0LjI1OEM5Ni4wNzU4IDg0LjI1MjcgOTYuMDM1OSA4NC4yNDYyIDk1Ljk4MDggODQuMjM3M0M5NS45NTkzIDg0LjIzMzggOTUuOTM1NSA4NC4yMjk5IDk1LjkwODQgODQuMjI1NkM5NS44OTI2IDg0LjIyMzEgOTUuODc1NyA4NC4yMjA0IDk1Ljg1NzYgODQuMjE3NkM5NS45MTczIDg0LjEzMjkgOTUuOTczNCA4NC4wNDg4IDk2LjAyODQgODMuOTY2MkM5Ni4xNTE4IDgzLjc4MTIgOTYuMjcgODMuNjA0IDk2LjQxMiA4My40NDYxQzk3LjE0MDQgODIuNjM0NiA5Ny44NzgxIDgxLjgyODUgOTguNjE0NyA4MS4wMjM2TDk4LjYxNiA4MS4wMjIyQzk4LjgwNzQgODAuODEzMSA5OC45OTg3IDgwLjYwNCA5OS4xODk4IDgwLjM5NUM5OS44MjkyIDc5LjY5MjkgMTAwLjU0OCA3OS4wNzc1IDEwMS4zNDYgNzguNTU0NUMxMDEuNDgyIDc4LjQ2NTYgMTAxLjYxNiA3OC4zNzQzIDEwMS43NSA3OC4yODNDMTAyLjAzIDc4LjA5MjQgMTAyLjMxMSA3Ny45MDE5IDEwMi42MDQgNzcuNzMzOUMxMDMuMDU1IDc3LjQ3NTUgMTAzLjUxMyA3Ny4yMzIgMTAzLjk3MiA3Ni45ODg1QzEwNC4xODUgNzYuODc1MyAxMDQuMzk4IDc2Ljc2MjEgMTA0LjYxIDc2LjY0NzVDMTA0LjgwNCA3Ni41NDM1IDEwNS4wMDEgNzYuNDM2NiAxMDUuMTkxIDc2LjMyMzlDMTA1LjQzNiA3Ni4xNzkxIDEwNS42NzkgNzYuMDMyOCAxMDUuOTIzIDc1Ljg4NjZMMTA1LjkyMyA3NS44ODYyQzEwNi4zNiA3NS42MjQyIDEwNi43OTUgNzUuMzYyNiAxMDcuMjM2IDc1LjExMDRDMTA4LjIzIDc0LjU0MTIgMTA5LjI2OCA3NC4wNjQ1IDExMC4zNDggNzMuNjY1N0MxMTAuNTYxIDczLjU4NyAxMTAuNzcxIDczLjQ5OTIgMTEwLjk4MiA3My40MTE1QzExMS4yMzQgNzMuMzA2MiAxMTEuNDg3IDczLjIwMDggMTExLjc0NCA3My4xMTFDMTEyLjkzMiA3Mi42OTQ5IDExNC4xMiA3Mi4yODQ2IDExNS4zMTcgNzEuOTAwNEMxMTUuOTI3IDcxLjcwMzkgMTE2LjU1MiA3MS41MzkyIDExNy4xODIgNzEuNDE3OEMxMTcuODIyIDcxLjI5NjUgMTE4LjQ3MyA3MS4yMyAxMTkuMTIxIDcxLjE3OEMxMTkuOTk1IDcxLjEwNTggMTIwLjg3IDcxLjA1MDkgMTIxLjc0NyA3MS4wMjc4QzEyMi4zNzcgNzEuMDA5NyAxMjMuMDA4IDcxLjAxNCAxMjMuNjM4IDcxLjAxODNDMTIzLjkxNCA3MS4wMjAxIDEyNC4xOSA3MS4wMjIgMTI0LjQ2NiA3MS4wMjJDMTI0LjY3NyA3MS4wMjIgMTI0Ljg4NSA3MS4wMTkxIDEyNS4wOTYgNzEuMDA3NkMxMjYuMDU2IDcwLjk2MDYgMTI2Ljk5MSA3MS4xNDA5IDEyNy45MjUgNzEuMzIxTDEyOC4wNTMgNzEuMzQ1NkMxMjguMzU1IDcxLjQwMzQgMTI4LjY2MyA3MS40NjQxIDEyOC45NjIgNzEuNTM5MkMxMjkuMDk1IDcxLjU3MjQgMTI5LjIyNSA3MS42MTQ0IDEyOS4zNTYgNzEuNjU2NUMxMjkuNTMyIDcxLjcxMzMgMTI5LjcwOSA3MS43NzAxIDEyOS44ODkgNzEuODA1QzEzMC41OTUgNzEuOTM3OCAxMzEuMjMzIDcyLjIzMTYgMTMxLjg3MSA3Mi41MjU0QzEzMi4wNjcgNzIuNjE1MiAxMzIuMjYyIDcyLjcwNTEgMTMyLjQ1OSA3Mi43OTAzQzEzMi42OTkgNzIuODkzMiAxMzIuOTM3IDczLjAwMjEgMTMzLjE3NSA3My4xMTExQzEzMy4zNDQgNzMuMTg4NiAxMzMuNTE0IDczLjI2NjUgMTMzLjY4NSA3My4zNDIxTDEzMy43MzIgNzMuMzYzMkMxMzQuNTE0IDczLjcxMTUgMTM1LjI5NSA3NC4wNTkzIDEzNi4wMjMgNzQuNTIxQzEzNi40MDkgNzQuNzY2NSAxMzYuNzcgNzUuMDQzMSAxMzcuMTMgNzUuMzE4OEMxMzcuMjQ5IDc1LjQwOTcgMTM3LjM2NyA3NS41MDA1IDEzNy40ODYgNzUuNTlDMTM3Ljc0MiA3NS43ODA3IDEzOC4wMjMgNzUuOTM5NiAxMzguMzA1IDc2LjA5ODZDMTM4LjgyNyA3Ni4zOTMzIDEzOS4yODIgNzYuNzY2IDEzOS43MTkgNzcuMTczNEMxNDAuMDAzIDc3LjQzODkgMTQwLjI5OCA3Ny42OTM1IDE0MC41OTQgNzcuOTQ4MUMxNDAuODY3IDc4LjE4MzkgMTQxLjE0IDc4LjQxOTggMTQxLjQwNSA3OC42NjQzQzE0MS42MzEgNzguODc0MiAxNDEuODQgNzkuMTAzMyAxNDIuMDQ5IDc5LjMzMjVDMTQyLjEyMSA3OS40MTI0IDE0Mi4xOTQgNzkuNDkyNCAxNDIuMjY4IDc5LjU3MTVDMTQyLjc5OSA4MC4xNDM2IDE0My4zMDMgODAuNzI0NCAxNDMuNjg3IDgxLjQxNDlDMTQzLjg3OCA4MS43NTgzIDE0NC4xMTUgODIuMDc1MSAxNDQuMzU0IDgyLjM5MjRDMTQ0LjUwOCA4Mi41OTg0IDE0NC42NjMgODIuODA0NyAxNDQuODA1IDgzLjAxODVDMTQ1LjA5MyA4My40NTE5IDE0NS4zNjYgODMuODk1MSAxNDUuNjQgODQuMzM4MkMxNDUuNzMxIDg0LjQ4NiAxNDUuODIyIDg0LjYzMzcgMTQ1LjkxNCA4NC43ODFDMTQ2LjAwNCA4NC45MjY5IDE0Ni4wOTUgODUuMDcyNiAxNDYuMTg1IDg1LjIxODNMMTQ2LjE5NCA4NS4yMzIyQzE0Ni40NzQgODUuNjgyMSAxNDYuNzU0IDg2LjEzMiAxNDcuMDI4IDg2LjU4NjhDMTQ3LjA3OCA4Ni42Njg5IDE0Ny4xMSA4Ni43NjE5IDE0Ny4xNDIgODYuODU1NUMxNDcuMTYgODYuOTA2OSAxNDcuMTc4IDg2Ljk1ODUgMTQ3LjE5OCA4Ny4wMDg3QzE0Ny4yNTYgODcuMTQ0NSAxNDcuMzE2IDg3LjI3OTggMTQ3LjM3NiA4Ny40MTUyQzE0Ny41MDEgODcuNjk3MyAxNDcuNjI3IDg3Ljk4MDYgMTQ3LjcyNiA4OC4yNzEzQzE0Ny44MjkgODguNTY4MSAxNDcuOTE5IDg4Ljg2OTUgMTQ4LjAwOCA4OS4xNzA5QzE0OC4xMiA4OS41NDQyIDE0OC4yMzEgODkuOTE3OSAxNDguMzY2IDkwLjI4MjNDMTQ4LjY5NyA5MS4xODU4IDE0OC44MjcgOTIuMTI1NiAxNDguOTU3IDkzLjA2NTZDMTQ5LjAwNyA5My40MjQyIDE0OS4wNTYgOTMuNzgyOSAxNDkuMTE3IDk0LjEzOTZDMTQ5LjM5NSA5NS43NzIzIDE0OS4zODUgOTcuNDE3OSAxNDkuMzc2IDk5LjA2MzVDMTQ5LjM3NCA5OS4zMjUzIDE0OS4zNzIgOTkuNTg3MSAxNDkuMzcyIDk5Ljg0ODlDMTQ5LjM3MiAxMDAuNDYxIDE0OS4zNTIgMTAxLjA2MiAxNDkuMjUyIDEwMS42NjNDMTQ5LjIyIDEwMS44NjMgMTQ5LjE4NSAxMDIuMDYyIDE0OS4xNTEgMTAyLjI2MUMxNDkuMTAzIDEwMi41MzggMTQ5LjA1NSAxMDIuODE0IDE0OS4wMTQgMTAzLjA5MUMxNDguOTk1IDEwMy4yMjEgMTQ4Ljk4OCAxMDMuMzUyIDE0OC45ODEgMTAzLjQ4NEMxNDguOTc3IDEwMy41NzIgMTQ4Ljk3MyAxMDMuNjYgMTQ4Ljk2NCAxMDMuNzQ3QzE0OC45NDcgMTAzLjkwNSAxNDguOTMyIDEwNC4wNjMgMTQ4LjkxNiAxMDQuMjIxQzE0OC44NzIgMTA0LjY2OCAxNDguODI3IDEwNS4xMTUgMTQ4Ljc1NiAxMDUuNTU4QzE0OC42MzMgMTA2LjMxMiAxNDguNTk4IDEwNy4wNzIgMTQ4LjU5OCAxMDcuODMyQzE0OC41OTggMTA4LjI3MiAxNDguNjAxIDEwOC43MTEgMTQ4LjYwNCAxMDkuMTVDMTQ4LjYxMSAxMTAuMTA4IDE0OC42MTggMTExLjA2NiAxNDguNTkyIDExMi4wMjVDMTQ4LjU2MiAxMTMuMDk2IDE0OC43NjggMTE0LjExNCAxNDkuMTQgMTE1LjEwN0MxNDkuNjU3IDExNi40OCAxNTAuMjU1IDExNy44MTIgMTUwLjkzMyAxMTkuMTE4QzE1MS42MzQgMTIwLjQ2NCAxNTIuNTg3IDEyMS42MTQgMTUzLjU4MSAxMjIuNzQxQzE1My44NDMgMTIzLjAzOSAxNTQuMTQ5IDEyMy4yOTggMTU0LjQ1NSAxMjMuNTU4QzE1NC41OTcgMTIzLjY3OSAxNTQuNzQgMTIzLjgwMSAxNTQuODc4IDEyMy45MjZDMTU1LjExOCAxMjQuMTQxIDE1NS4zNTcgMTI0LjM1OCAxNTUuNTk2IDEyNC41NzRDMTU2LjI2NSAxMjUuMTc4IDE1Ni45MzMgMTI1Ljc4MiAxNTcuNjEyIDEyNi4zNzNDMTU3LjgxNSAxMjYuNTUgMTU4LjAzIDEyNi43MTQgMTU4LjI0NiAxMjYuODc4QzE1OC40ODQgMTI3LjA1OSAxNTguNzIyIDEyNy4yNDEgMTU4Ljk0MyAxMjcuNDM5QzE1OS4yODIgMTI3Ljc0MSAxNTkuNjMzIDEyOC4wMjkgMTU5Ljk4MyAxMjguMzE2QzE2MC4zNSAxMjguNjE3IDE2MC43MTYgMTI4LjkxNyAxNjEuMDY3IDEyOS4yMzNDMTYxLjQ4OSAxMjkuNjEyIDE2MS44NzQgMTMwLjAzNyAxNjIuMjM0IDEzMC40NzNDMTYyLjY1NyAxMzAuOTg0IDE2My4wNDcgMTMxLjUyMiAxNjMuNDMxIDEzMi4wNjJDMTYzLjU1IDEzMi4yMzEgMTYzLjY1NyAxMzIuNDA5IDE2My43NjQgMTMyLjU4NkMxNjMuODc4IDEzMi43NzUgMTYzLjk5MiAxMzIuOTY0IDE2NC4xMiAxMzMuMTQzQzE2NC40NjQgMTMzLjYyOCAxNjQuNjkyIDEzNC4xNjYgMTY0LjkyIDEzNC43MDVDMTY1LjAyOSAxMzQuOTYxIDE2NS4xMzcgMTM1LjIxOCAxNjUuMjU5IDEzNS40NjlDMTY1LjMxMSAxMzUuNTc4IDE2NS4zNTIgMTM1LjcwMyAxNjUuMzczIDEzNS44MjFDMTY1LjM5NCAxMzUuOTQ3IDE2NS40MTUgMTM2LjA3MyAxNjUuNDM2IDEzNi4xOTlMMTY1LjQ3MiAxMzYuNDE0QzE2NS42MzEgMTM3LjM1NyAxNjUuNzg5IDEzOC4yOTkgMTY1LjkyNyAxMzkuMjQ1QzE2NS45NTMgMTM5LjQyMiAxNjUuOTUgMTM5LjYwMyAxNjUuOTQ3IDEzOS43ODRDMTY1Ljk0NCAxMzkuOTk2IDE2NS45NCAxNDAuMjA4IDE2NS45ODMgMTQwLjQxMkMxNjYuMDM1IDE0MC42NTggMTY1Ljk1OCAxNDAuODQ0IDE2NS44OCAxNDEuMDMzQzE2NS44NzIgMTQxLjA1MiAxNjUuODY0IDE0MS4wNyAxNjUuODU3IDE0MS4wODlDMTY1Ljg1IDE0MS4xMDYgMTY1Ljg0MyAxNDEuMTIzIDE2NS44MzYgMTQxLjE0QzE2NS43MzQgMTQxLjM5NyAxNjUuNTk5IDE0MS40MDkgMTY1LjMwNiAxNDEuNDE1QzE2NC42NzggMTQxLjQyNCAxNjQuMDQ3IDE0MS40NjEgMTYzLjQyMiAxNDEuNTA3QzE2Mi43NjUgMTQxLjU1NiAxNjIuMTExIDE0MS42MjMgMTYxLjQ1NyAxNDEuNjg5QzE2MS4zNDYgMTQxLjcwMSAxNjEuMjM0IDE0MS43MTggMTYxLjEyMyAxNDEuNzM1QzE2MC45ODUgMTQxLjc1NSAxNjAuODQ2IDE0MS43NzYgMTYwLjcwNiAxNDEuNzg4QzE2MC4zODYgMTQxLjgxNCAxNjAuMDY0IDE0MS44MzQgMTU5Ljc0NCAxNDEuODM0QzE1OS4xMTQgMTQxLjgzNCAxNTguNDgzIDE0MS44MjQgMTU3Ljg1MyAxNDEuODE0TDE1Ny44NTIgMTQxLjgxNEMxNTcuNjQyIDE0MS44MTEgMTU3LjQzMyAxNDEuODA4IDE1Ny4yMjQgMTQxLjgwNUMxNTYuNTQgMTQxLjc5NSAxNTUuOTMgMTQxLjUzNSAxNTUuMzE5IDE0MS4yNzZDMTU1LjIyOCAxNDEuMjM3IDE1NS4xMzYgMTQxLjE5OSAxNTUuMDQ1IDE0MS4xNjFDMTU1LjAxNyAxNDEuMTQ5IDE1NC45ODkgMTQxLjEzNiAxNTQuOTYyIDE0MS4xMjNDMTU0LjkxOCAxNDEuMTAyIDE1NC44NzUgMTQxLjA4MSAxNTQuODI4IDE0MS4wNjhDMTU0Ljc1NCAxNDEuMDQ5IDE1NC42NzkgMTQxLjAzNCAxNTQuNjA0IDE0MS4wMkMxNTQuNDc0IDE0MC45OTQgMTU0LjM0NCAxNDAuOTY4IDE1NC4yMjEgMTQwLjkyMUMxNTMuNTIzIDE0MC42NDkgMTUyLjgyNCAxNDAuMzc4IDE1Mi4xMzggMTQwLjA3NEMxNTEuNDExIDEzOS43NTMgMTUwLjY4IDEzOS40MjcgMTQ5Ljk4MiAxMzkuMDQ2QzE0OS42NDMgMTM4Ljg2IDE0OS4zMiAxMzguNjQ2IDE0OC45OTcgMTM4LjQzMkMxNDguNzE3IDEzOC4yNDYgMTQ4LjQzNyAxMzguMDYgMTQ4LjE0NiAxMzcuODkzQzE0Ny41NzggMTM3LjU2OCAxNDcuMDcxIDEzNy4xNjcgMTQ2LjU2NSAxMzYuNzY2QzE0Ni4zNzMgMTM2LjYxNCAxNDYuMTgyIDEzNi40NjMgMTQ1Ljk4NyAxMzYuMzE1QzE0NS44MjcgMTM2LjE5MiAxNDUuNjU2IDEzNi4wODIgMTQ1LjQ4NSAxMzUuOTcxQzE0NS40IDEzNS45MTYgMTQ1LjMxNCAxMzUuODYxIDE0NS4yMyAxMzUuODA0QzE0NS4yMTUgMTM1LjgxIDE0NS4xOTkgMTM1LjgxNyAxNDUuMTgzIDEzNS44MjNDMTQ1LjE2MyAxMzUuODMxIDE0NS4xNDMgMTM1LjgzOSAxNDUuMTIyIDEzNS44NDdIMTQ1LjExNlpNMTAxLjc0NSAxNDAuNjIzTDEwMS43NDYgMTQwLjYzOEgxMDEuNDM3QzEwMS40NzIgMTQwLjU5MyAxMDEuNTAxIDE0MC41NTUgMTAxLjUzNyAxNDAuNTA5QzEwMS41NjMgMTQwLjQ3NSAxMDEuNTkzIDE0MC40MzcgMTAxLjYzIDE0MC4zODlDMTAxLjQ2MyAxNDAuMzU3IDEwMS4zMjggMTQwLjMzMSAxMDEuMTUyIDE0MC4zQzEwMS4xNjkgMTQwLjM3MiAxMDEuMTgxIDE0MC40MjMgMTAxLjE5MSAxNDAuNDY3TDEwMS4yMDggMTQwLjUzOUMxMDEuMiAxNDAuNTQzIDEwMS4xOTMgMTQwLjU0NyAxMDEuMTg3IDE0MC41NUMxMDEuMTc4IDE0MC41NTUgMTAxLjE2OSAxNDAuNTYgMTAxLjE2MSAxNDAuNTY1QzEwMS4wODUgMTQwLjQ2MSAxMDEuMDA4IDE0MC4zNTcgMTAwLjk1NiAxNDAuMjg4QzEwMC44ODIgMTQwLjIyOSAxMDAuNzk5IDE0MC4yNDUgMTAwLjcxOCAxNDAuMjZDMTAwLjYxNCAxNDAuMjggMTAwLjUxNSAxNDAuMjk5IDEwMC40NDUgMTQwLjE1MkMxMDAuMTcyIDE0MC4zNiAxMDAuMDQgMTQwLjYxNyAxMDAuMDA4IDE0MC45NjFDOTkuOTkwNSAxNDEuMTYzIDk5Ljg4NDkgMTQxLjM4OSA5OS43NSAxNDEuNTUxQzk5LjM4NjMgMTQxLjk4NyA5OC45OTYyIDE0Mi40MDYgOTguNTk3MiAxNDIuODEzQzk4LjE2MDIgMTQzLjI2MSA5Ny43MTQzIDE0My43IDk3LjI1MDkgMTQ0LjEyMkM5Ny4wMjQ5IDE0NC4zMjcgOTYuNzkwNiAxNDQuNTIzIDk2LjU1NiAxNDQuNzE5Qzk2LjMzMDggMTQ0LjkwNyA5Ni4xMDUzIDE0NS4wOTYgOTUuODg2OSAxNDUuMjkyQzk1LjMyMzkgMTQ1LjgwMSA5NC43MDY3IDE0Ni4yNCA5NC4wODkyIDE0Ni42OEw5NC4wODg3IDE0Ni42OEM5My44NTcxIDE0Ni44NDUgOTMuNjI1NCAxNDcuMDEgOTMuMzk2NiAxNDcuMTc5QzkzLjAwMjggMTQ3LjQ2NyA5Mi41OTAyIDE0Ny43MzQgOTIuMTc4MSAxNDguMDAxQzkyLjAwNCAxNDguMTE0IDkxLjgyOTYgMTQ4LjIyNiA5MS42NTcxIDE0OC4zNDFDOTEuNTI2MSAxNDguNDI3IDkxLjM5MzIgMTQ4LjUxMSA5MS4yNjAzIDE0OC41OTVDOTEuMDE1NiAxNDguNzQ5IDkwLjc3MDQgMTQ4LjkwNCA5MC41MzY2IDE0OS4wNzRDOTAuMDYxMSAxNDkuNDIyIDg5LjU0NjIgMTQ5LjY5NyA4OS4wMzAyIDE0OS45NzRDODguOTMyIDE1MC4wMjYgODguODMzNyAxNTAuMDc5IDg4LjczNTYgMTUwLjEzMkM4OC4zMTA5IDE1MC4zNjEgODcuODk3OSAxNTAuNjA4IDg3LjQ4NDIgMTUwLjg1NkM4Ny4zMTIyIDE1MC45NTkgODcuMTQgMTUxLjA2MiA4Ni45NjY4IDE1MS4xNjNDODYuNzg3IDE1MS4yNjkgODYuNjA3MSAxNTEuMzczIDg2LjQyNzQgMTUxLjQ3OEw4Ni40MjYyIDE1MS40NzlDODUuODcwNSAxNTEuODAzIDg1LjMxNTUgMTUyLjEyNiA4NC43NjQgMTUyLjQ1OEM4NC41ODU3IDE1Mi41NjUgODQuNDA2MyAxNTIuNjcxIDg0LjIyNjkgMTUyLjc3N0M4My42NTM0IDE1My4xMTYgODMuMDc5NyAxNTMuNDU1IDgyLjU0MzUgMTUzLjg0MkM4Mi4wNjczIDE1NC4xODcgODEuNTU4NiAxNTQuNDc4IDgxLjA1MDMgMTU0Ljc2OEM4MC43NTA4IDE1NC45MzkgODAuNDUxMiAxNTUuMTEgODAuMTU4NyAxNTUuMjkyQzgwLjExNTMgMTU1LjMxOSA4MC4wNzE3IDE1NS4zNDYgODAuMDI3OCAxNTUuMzc0Qzc5LjY2OTEgMTU1LjU5OCA3OS4yOTI4IDE1NS44MzQgNzguODMyOSAxNTUuODdDNzguNzM1MiAxNTUuODc3IDc4LjY0MzEgMTU1LjkyNSA3OC41NTAzIDE1NS45NzNDNzguNDc4NyAxNTYuMDEgNzguNDA2NyAxNTYuMDQ4IDc4LjMzMTMgMTU2LjA2N0M3OC4yODEzIDE1Ni4wNzkgNzguMjMxMyAxNTYuMDk4IDc4LjE4MTEgMTU2LjExN0M3OC4wMjggMTU2LjE3NiA3Ny44NzI5IDE1Ni4yMzYgNzcuNzA5NSAxNTYuMDk4Qzc3LjY4ODkgMTU2LjA4NyA3Ny42NTA4IDE1Ni4wNzggNzcuNjI3MyAxNTYuMDg3Qzc3LjM1IDE1Ni4xNyA3Ny4wNzI3IDE1Ni4xNCA3Ni43OTUzIDE1Ni4xMDlDNzYuNjEyMSAxNTYuMDg5IDc2LjQyOSAxNTYuMDY4IDc2LjI0NTggMTU2LjA4MUM3NS45MDI2IDE1Ni4xMDQgNzUuODUyNyAxNTYuMDQ2IDc1Ljg0OTggMTU1LjdDNzUuODQ2NSAxNTUuNDE0IDc1Ljg1MTUgMTU1LjEyOSA3NS44NTY2IDE1NC44NDRDNzUuODYwNSAxNTQuNjIyIDc1Ljg2NDQgMTU0LjQgNzUuODY0NCAxNTQuMTc3Qzc1Ljg2NDQgMTU0LjAzMiA3NS44NTg2IDE1My44ODYgNzUuODUyNyAxNTMuNzRDNzUuODQzIDE1My41IDc1LjgzMzQgMTUzLjI2IDc1Ljg0OTggMTUzLjAyMUM3NS44ODc5IDE1Mi40OTggNzUuOTQwNyAxNTEuOTcyIDc2LjA0MzQgMTUxLjQ1OEM3Ni4xNTc4IDE1MC44OTIgNzYuMzA3NCAxNTAuMzI4IDc2LjQ5MjIgMTQ5Ljc3OUM3Ni42MDQ5IDE0OS40NDggNzYuNzM2OSAxNDkuMTIzIDc2Ljg2ODggMTQ4Ljc5OEM3Ni45OTQzIDE0OC40ODkgNzcuMTE5NyAxNDguMTgxIDc3LjIyODQgMTQ3Ljg2N0M3Ny44MDkyIDE0Ni4xODIgNzguNjU5OCAxNDQuNjI4IDc5LjU2NjIgMTQzLjEwMkM4MC4yNDA5IDE0MS45NyA4MC45NTk1IDE0MC44NjMgODEuNjk1OCAxMzkuNzY4QzgxLjk0NiAxMzkuMzk3IDgyLjIzOTkgMTM5LjA1MiA4Mi41MzM0IDEzOC43MDhDODIuNjU2MiAxMzguNTY0IDgyLjc3OTEgMTM4LjQyIDgyLjg5ODQgMTM4LjI3NEw4My4wODk0IDEzOC4wNEM4My40NzEyIDEzNy41NzIgODMuODUzIDEzNy4xMDMgODQuMjQ3NyAxMzYuNjQ3Qzg0Ljk2MDUgMTM1LjgyNyA4NS43MjAyIDEzNS4wNTMgODYuNTUwMyAxMzQuMzQ1Qzg2LjY2MzUgMTM0LjI0NyA4Ni43NjQzIDEzNC4xMzQgODYuODY1IDEzNC4wMjFDODYuOTYgMTMzLjkxNSA4Ny4wNTUxIDEzMy44MDkgODcuMTYwNCAxMzMuNzE1Qzg3LjQ3ODIgMTMzLjQzNCA4Ny44MDIxIDEzMy4xNiA4OC4xMjU3IDEzMi44ODZDODguMzAxMSAxMzIuNzM4IDg4LjQ3NjMgMTMyLjU5IDg4LjY1MDUgMTMyLjQ0MUM4OC45NTA3IDEzMi4xODQgODkuMjUgMTMxLjkyNyA4OS41NDkyIDEzMS42N0M5MC4xNDc1IDEzMS4xNTYgOTAuNzQ1OSAxMzAuNjQxIDkxLjM1MjEgMTMwLjEzNUM5MS41NTk4IDEyOS45NjEgOTEuNzc4MyAxMjkuOCA5MS45OTY2IDEyOS42MzhDOTIuMjUgMTI5LjQ1MSA5Mi41MDMyIDEyOS4yNjQgOTIuNzM5NSAxMjkuMDU3QzkzLjM5MDcgMTI4LjQ4NSA5NC4xMDM1IDEyOCA5NC44MjIxIDEyNy41MkM5NS4xMDQ4IDEyNy4zMzEgOTUuMzg2IDEyNy4xNCA5NS42Njc0IDEyNi45NDlDOTYuMTAxNCAxMjYuNjU0IDk2LjUzNTYgMTI2LjM1OCA5Ni45NzUxIDEyNi4wNzJDOTcuMTU4MiAxMjUuOTU0IDk3LjM0OTUgMTI1Ljg0OCA5Ny41NDA1IDEyNS43NDJDOTcuNzc4IDEyNS42MTEgOTguMDE1NCAxMjUuNDc5IDk4LjIzNjQgMTI1LjMyNEM5OC43MTA0IDEyNC45OTIgOTkuMjI5MSAxMjQuNzQxIDk5Ljc0NjQgMTI0LjQ5MUw5OS43NDcgMTI0LjQ5MUM5OS45MTc5IDEyNC40MDggMTAwLjA4OSAxMjQuMzI2IDEwMC4yNTcgMTI0LjI0MUMxMDAuNTIzIDEyNC4xMDcgMTAwLjc3IDEyMy45NTMgMTAxLjAxNiAxMjMuNzk5QzEwMS4xNDMgMTIzLjcyIDEwMS4yNjkgMTIzLjY0MSAxMDEuMzk5IDEyMy41NjVDMTAxLjQ2IDEyMy41MyAxMDEuNTIyIDEyMy40OTUgMTAxLjU4NiAxMjMuNDY5QzEwMS42NzMgMTIzLjQzMyAxMDEuNzYgMTIzLjM5NyAxMDEuODQ3IDEyMy4zNjJMMTAxLjg0OCAxMjMuMzYxQzEwMi4xNDUgMTIzLjIzOSAxMDIuNDQxIDEyMy4xMTcgMTAyLjczNiAxMjIuOTlMMTAyLjc0NiAxMjIuOTg1QzEwMi44NDMgMTIyLjk0MyAxMDIuOTU1IDEyMi44OTQgMTAzLjAxOCAxMjIuODE2QzEwMy4xNyAxMjIuNjIxIDEwMy4zNzYgMTIyLjUwNyAxMDMuNTgyIDEyMi4zOTRDMTAzLjY2NiAxMjIuMzQ4IDEwMy43NSAxMjIuMzAyIDEwMy44MyAxMjIuMjVDMTAzLjg3MSAxMjIuMjI0IDEwMy45NDUgMTIyLjE3NSAxMDMuOTM5IDEyMi4xNTJDMTAzLjkxMiAxMjIuMDUgMTAzLjk4MiAxMjEuOTc3IDEwNC4wMzggMTIxLjkxOUMxMDQuMDc1IDEyMS44OCAxMDQuMTA3IDEyMS44NDcgMTA0LjA5NyAxMjEuODE2QzEwNC4wNSAxMjEuNjc1IDEwNC4wNDEgMTIxLjU3NCAxMDQuMTI5IDEyMS40NThDMTA0LjEzNSAxMjEuNDUgMTA0LjEzNSAxMjEuNDI5IDEwNC4xMjkgMTIxLjQxOEMxMDQuMDM2IDEyMS4yNTIgMTAzLjk5IDEyMS4wNjcgMTAzLjk0MyAxMjAuODgyQzEwMy44NzMgMTIwLjYgMTAzLjgwMiAxMjAuMzE4IDEwMy41NjYgMTIwLjEwM0MxMDMuNTU2IDEyMC4wOTQgMTAzLjU0NSAxMjAuMDg1IDEwMy41MzQgMTIwLjA3NkMxMDMuNDg4IDEyMC4wMzggMTAzLjQzOCAxMTkuOTk3IDEwMy40MjggMTE5Ljk1QzEwMy4zOCAxMTkuNzAxIDEwMy4yMjMgMTE5LjUyIDEwMy4wNjYgMTE5LjM0QzEwMi45ODYgMTE5LjI0OSAxMDIuOTA3IDExOS4xNTcgMTAyLjg0MiAxMTkuMDU3QzEwMi43MTMgMTE4Ljg2NCAxMDIuNTc1IDExOC42NjEgMTAyLjMyMiAxMTguNTg5QzEwMi4yODUgMTE4LjU3OCAxMDIuMjU2IDExOC41NCAxMDIuMjI3IDExOC41MDNDMTAyLjIxMiAxMTguNDg0IDEwMi4xOTcgMTE4LjQ2NiAxMDIuMTgyIDExOC40NUMxMDIuMTMgMTE4LjM5OCAxMDIuMDc4IDExOC4zNDcgMTAyLjAyNiAxMTguMjk1QzEwMS45MjIgMTE4LjE5MiAxMDEuODE5IDExOC4wODggMTAxLjcxNSAxMTcuOTgyQzEwMS42IDExNy44NjQgMTAxLjQ4NyAxMTcuNzQ2IDEwMS4zNjggMTE3LjYyMkwxMDEuMjg3IDExNy41MzdDMTAxLjM2MyAxMTcuMjY5IDEwMS40NCAxMTcuMDA2IDEwMS41MTYgMTE2Ljc0M0MxMDEuNjUxIDExNi4yNjYgMTAxLjUyMiAxMTUuOTUxIDEwMS4wOTMgMTE1LjcyQzEwMC45NzcgMTE1LjY1NyAxMDAuODUzIDExNS42MDUgMTAwLjczIDExNS41NTNDMTAwLjQ3IDExNS40NDQgMTAwLjIxIDExNS4zMzUgMTAwLjAxMSAxMTUuMTE5Qzk5Ljc0NzggMTE1LjE3MyA5OS41MTE4IDExNS4wOTQgOTkuMjc1OSAxMTUuMDE2Qzk5LjE4MzIgMTE0Ljk4NSA5OS4wOTA1IDExNC45NTQgOTguOTk2MiAxMTQuOTMxQzk4LjY5MTEgMTE0Ljg1NiA5OC40MyAxMTQuNzQ5IDk4LjIwMTIgMTE0LjUwOUM5OC4wNjYxIDExNC4zNjkgOTcuOTA3MiAxMTQuMjQ5IDk3Ljc0OCAxMTQuMTI5Qzk3LjU4NiAxMTQuMDA3IDk3LjQyMzcgMTEzLjg4NSA5Ny4yODYxIDExMy43NDFDOTcuMTA5MyAxMTMuNTU1IDk2Ljk3NDkgMTEzLjMyNiA5Ni44NDIgMTEzLjA5OUw5Ni44NDE3IDExMy4wOTlDOTYuODA3MSAxMTMuMDQgOTYuNzcyNiAxMTIuOTgxIDk2LjczNzUgMTEyLjkyM0M5Ni41MzEyIDExMi41ODEgOTYuMzI4MSAxMTIuMjM2IDk2LjEyNSAxMTEuODkxTDk2LjEyNDIgMTExLjg5Qzk1Ljk5ODUgMTExLjY3NyA5NS44NzI3IDExMS40NjMgOTUuNzQ2MSAxMTEuMjVDOTUuNzQxIDExMS4yNCA5NS43MzA5IDExMS4yMzEgOTUuNzIxMSAxMTEuMjIxQzk1LjcwODQgMTExLjIwOSA5NS42OTYyIDExMS4xOTggOTUuNjk2MiAxMTEuMTg3Qzk1LjY4NTggMTEwLjkwMSA5NS41NDMxIDExMC42NzUgOTUuMzk5NyAxMTAuNDQ3Qzk1LjMwMDYgMTEwLjI4OSA5NS4yMDExIDExMC4xMzEgOTUuMTQ0OCAxMDkuOTUzQzk1LjAzNTMgMTA5LjYxIDk0Ljg5MDYgMTA5LjI3OCA5NC43NDU3IDEwOC45NDVDOTQuNjUzOSAxMDguNzM0IDk0LjU2MiAxMDguNTIzIDk0LjQ3ODkgMTA4LjMwOUM5NC4yMDg4IDEwNy42MTUgOTQuMDI1MSAxMDYuODk4IDkzLjg0MTYgMTA2LjE4MUM5My43NzIgMTA1LjkwOSA5My43MDI1IDEwNS42MzggOTMuNjI4MyAxMDUuMzY4QzkzLjQ5MTcgMTA0Ljg3NSA5My40NTQ1IDEwNC4zNzUgOTMuNDE3MiAxMDMuODczQzkzLjQwOTYgMTAzLjc3MSA5My40MDIgMTAzLjY2OSA5My4zOTM2IDEwMy41NjdDOTMuMzU4NCAxMDMuMTQ2IDkzLjI5OTggMTAyLjcyNCA5My4yMzgyIDEwMi4zMDJDOTMuMTM4NCAxMDEuNTkxIDkzLjA0MTYgMTAwLjg4MyA5My4wOTc0IDEwMC4xNjFDOTMuMTE5MiA5OS44NzU3IDkzLjEwNzUgOTkuNTg2NSA5My4wOTU4IDk5LjI5NzlDOTMuMDkwMiA5OS4xNTk4IDkzLjA4NDYgOTkuMDIxMiA5My4wODI3IDk4Ljg4MzhDOTMuMDY4IDk3Ljc1NDEgOTMuMDUzNCA5Ni42MjQ0IDkzLjAzMjggOTUuNDk0N0M5My4wMjk1IDk1LjI4OTYgOTMuMDIyNyA5NS4wODQ2IDkzLjAxNTkgOTQuODc5N0M5My4wMDUgOTQuNTQ3NiA5Mi45OTQgOTQuMjE1OSA5Mi45OTc2IDkzLjg4NTNDOTMuMDAzNSA5My4zODgzIDkzLjA2MjIgOTIuODk0MyA5My4yNDQgOTIuNDIzM0M5My42MTY2IDkxLjQ1MjUgOTQuMDUzNiA5MC41MjIxIDk0LjU4NzUgODkuNjIzNUM5NC45NDM2IDg5LjAyNzMgOTUuMzE1OSA4OC40NDE0IDk1LjY4ODIgODcuODU1N0M5NS45Njg5IDg3LjQxNCA5Ni4yNDk4IDg2Ljk3MiA5Ni41MjM0IDg2LjUyNjJDOTYuOTIyMyA4NS44NzYxIDk3LjM0NzcgODUuMjQwNCA5Ny43OTY1IDg0LjYyMjFDOTguMDUxNiA4NC4yNjk2IDk4LjMzMzIgODMuOTQzMSA5OC42OTQgODMuNjYyOEM5OC45OTczIDgzLjQyOCA5OS4yNDg0IDgzLjEzMTQgOTkuNDk5NCA4Mi44MzQ5Qzk5LjYwMDQgODIuNzE1NiA5OS43MDE0IDgyLjU5NjMgOTkuODA1NyA4Mi40ODExQzk5LjkyMyA4Mi4zNTE1IDEwMC4wMzkgODIuMjIwNCAxMDAuMTU0IDgyLjA4OTNDMTAwLjYwOSA4MS41NzQxIDEwMS4wNjQgODEuMDU4NiAxMDEuNjE2IDgwLjYzNDhDMTAyLjM0NiA4MC4wNzQzIDEwMy4wODggNzkuNTM2OSAxMDMuOTA2IDc5LjEwNjRMMTA0LjA2NiA3OS4wMjI5QzEwNC43MDMgNzguNjg5NCAxMDUuMzQzIDc4LjM1NDIgMTA1Ljk2NiA3Ny45OTY4QzEwNi4zNDggNzcuNzc3NSAxMDYuNzI0IDc3LjU0ODEgMTA3LjEwMSA3Ny4zMTg3QzEwNy41MDggNzcuMDcwNyAxMDcuOTE1IDc2LjgyMjUgMTA4LjMzIDc2LjU4NjlDMTA4LjY0NCA3Ni40MDg4IDEwOC45NzQgNzYuMjU3NyAxMDkuMzA0IDc2LjEwNjdDMTA5LjQ0NSA3Ni4wNDIxIDEwOS41ODYgNzUuOTc3NCAxMDkuNzI2IDc1LjkxMDdDMTA5Ljg3NCA3NS44NDAzIDExMC4wMjIgNzUuNzczMyAxMTAuMTcxIDc1LjcwNThMMTEwLjI5MiA3NS42NTA3QzExMC4yODYgNzUuNjQwOCAxMTAuMjggNzUuNjMxNiAxMTAuMjc1IDc1LjYyMjVDMTEwLjI0OCA3NS41Nzg4IDExMC4yMjUgNzUuNTQxNSAxMTAuMTg3IDc1LjQ3NDVDMTEwLjU2MSA3NS41NTIxIDExMC44NyA3NS40MzI1IDExMS4xNzMgNzUuMzE1MkMxMTEuMjQyIDc1LjI4ODQgMTExLjMxMSA3NS4yNjE3IDExMS4zOCA3NS4yMzc1QzExMi4wNzEgNzQuOTk4OCAxMTIuNzU0IDc0Ljc0NDUgMTEzLjQzOSA3NC40ODk0TDExMy41NDggNzQuNDQ4N0MxMTMuNzI1IDc0LjM4MyAxMTMuOSA3NC4zMTMzIDExNC4wNzYgNzQuMjQzN0MxMTQuMzU2IDc0LjEzMjcgMTE0LjYzNiA3NC4wMjE2IDExNC45MjEgNzMuOTI1OEMxMTUuMTkzIDczLjgzNTMgMTE1LjQ3IDczLjc1NjYgMTE1Ljc0NyA3My42Nzc5QzExNS45ODMgNzMuNjEwOCAxMTYuMjE5IDczLjU0MzcgMTE2LjQ1MiA3My40NjkzQzExNy4xMDYgNzMuMjYxMiAxMTcuNzY2IDczLjA4MjEgMTE4LjQ1OCA3My4wNDE2QzExOC42MTggNzMuMDMzIDExOC43NzkgNzMuMDIyOSAxMTguOTM5IDczLjAxMjhDMTE5LjEgNzMuMDAyNiAxMTkuMjYxIDcyLjk5MjUgMTE5LjQyIDcyLjk4MzlMMTE5LjkyNSA3Mi45NTc3QzEyMC43NjYgNzIuOTE0IDEyMS42MDcgNzIuODcwMiAxMjIuNDQ4IDcyLjgzNjVDMTIyLjYxNyA3Mi44Mjg4IDEyMi43ODcgNzIuODM1NCAxMjIuOTU3IDcyLjg0MjFDMTIzLjE2NyA3Mi44NTAzIDEyMy4zNzggNzIuODU4NiAxMjMuNTg2IDcyLjgzOTRDMTIzLjk1MyA3Mi44MDYzIDEyNC4zMjIgNzIuODE5MiAxMjQuNjg5IDcyLjgzMjFDMTI1LjA5MyA3Mi44NDYyIDEyNS40OTUgNzIuODYwMyAxMjUuODk0IDcyLjgxMzRDMTI2LjEzMiA3Mi43ODYgMTI2LjMzNCA3Mi44NDA2IDEyNi41MzQgNzIuODk0NkMxMjYuNjUxIDcyLjkyNjEgMTI2Ljc2NyA3Mi45NTc0IDEyNi44ODkgNzIuOTcyM0MxMjcuODk1IDczLjA5NjUgMTI4Ljg3NCA3My4zNDUgMTI5LjgzMSA3My42NzQ0QzEzMC4yIDczLjgwMSAxMzAuNTYgNzMuOTU0MiAxMzAuOTE5IDc0LjEwNzZMMTMwLjkyIDc0LjEwNzlDMTMxLjE1MSA3NC4yMDY1IDEzMS4zODMgNzQuMzA1MiAxMzEuNjE3IDc0LjM5NjdDMTMxLjY2MyA3NC40MTQzIDEzMS43MDcgNzQuNDM3NyAxMzEuNzUyIDc0LjQ2MTNDMTMxLjg3OCA3NC41MjY5IDEzMi4wMDUgNzQuNTkzNiAxMzIuMTYzIDc0LjUzODNDMTMyLjE5MiA3NC41MjY4IDEzMi4yNDUgNzQuNTQxMiAxMzIuMjY1IDc0LjU2NDNDMTMyLjQxOSA3NC43MzQ0IDEzMi42MjMgNzQuODIxMSAxMzIuODI2IDc0LjkwNzhDMTMyLjkwNiA3NC45NDE4IDEzMi45ODYgNzQuOTc1OSAxMzMuMDYzIDc1LjAxNTFDMTMzLjI1IDc1LjExMDEgMTMzLjQ0MSA3NS4xOTg0IDEzMy42MzIgNzUuMjg2NEMxMzMuNzE5IDc1LjMyNjggMTMzLjgwNyA3NS4zNjcxIDEzMy44OTMgNzUuNDA4QzEzNC4wMTQgNzUuNDY1MyAxMzQuMTM0IDc1LjUyMjIgMTM0LjI1MyA3NS41NzkxQzEzNC40ODQgNzUuNjg4NSAxMzQuNzE0IDc1Ljc5NzYgMTM0Ljk0MyA3NS45MDc5QzEzNC45ODUgNzYuMTMwNiAxMzUuMTUzIDc2LjE5ODQgMTM1LjMyMiA3Ni4yNjcxQzEzNS40MjggNzYuMzA5OCAxMzUuNTM1IDc2LjM1MjkgMTM1LjYxMiA3Ni40MzM3QzEzNS43NDMgNzYuNTY4NiAxMzUuOTA4IDc2LjY3MjYgMTM2LjA3MyA3Ni43NzY2QzEzNi4xNTUgNzYuODI4NiAxMzYuMjM4IDc2Ljg4MDYgMTM2LjMxNiA3Ni45MzY1QzEzNi40MDIgNzYuOTk3OSAxMzYuNDg2IDc3LjA2MjkgMTM2LjU3IDc3LjEyODFDMTM2LjY4NCA3Ny4yMTYyIDEzNi43OTggNzcuMzA0NiAxMzYuOTE3IDc3LjM4NDNDMTM3LjA0IDc3LjQ2NTkgMTM3LjE2NyA3Ny41NDEzIDEzNy4yOTUgNzcuNjE2N0MxMzcuNDc5IDc3LjcyNTQgMTM3LjY2MyA3Ny44MzQyIDEzNy44MzMgNzcuOTYyMkMxMzguMDkzIDc4LjE1OTMgMTM4LjMzNyA3OC4zNzg1IDEzOC41ODEgNzguNTk3N0MxMzguNjA3IDc4LjYyMTMgMTM4LjYzMyA3OC42NDUgMTM4LjY2IDc4LjY2ODdDMTM4LjcwNyA3OC43MTE3IDEzOC43NTUgNzguNzU0NiAxMzguODAzIDc4Ljc5NzJDMTM4Ljg1NyA3OC44NDM3IDEzOC45MSA3OC44OTAxIDEzOC45NjMgNzguOTM2NkwxMzguOTY1IDc4LjkzODJDMTM5LjIwMyA3OS4xNDUxIDEzOS40NDEgNzkuMzUyNiAxMzkuNjY2IDc5LjU3MTVDMTM5Ljk4MSA3OS44NzcyIDE0MC4yODYgODAuMTkzIDE0MC41OTEgODAuNTA4N0MxNDAuNjUyIDgwLjU3MTkgMTQwLjcxMyA4MC42MzUyIDE0MC43NzUgODAuNjk4NEMxNDAuODE1IDgwLjc0MDYgMTQwLjg1NiA4MC43ODI3IDE0MC44OTcgODAuODI0N0MxNDEuMDIgODAuOTUyMyAxNDEuMTQzIDgxLjA3OTQgMTQxLjI2NSA4MS4yMDk4QzE0MS4zMDUgODEuMjUzMyAxNDEuMzQ5IDgxLjI5NiAxNDEuMzkzIDgxLjMzODlDMTQxLjUxIDgxLjQ1MjUgMTQxLjYyOCA4MS41Njc1IDE0MS42OTkgODEuNzAzOUMxNDIuMDY1IDgyLjQxOTYgMTQyLjU0OCA4My4wNTU4IDE0My4wMzEgODMuNjkyNEMxNDMuMjI1IDgzLjk0NzUgMTQzLjQxOSA4NC4yMDI4IDE0My42MDUgODQuNDYzMkMxNDMuNjYxIDg0LjU0MDIgMTQzLjcgODQuNjMwMSAxNDMuNzM4IDg0LjcyMDJDMTQzLjc3MSA4NC43OTU3IDE0My44MDMgODQuODcxNCAxNDMuODQ2IDg0LjkzOTlDMTQ0LjAxNiA4NS4yMTM3IDE0NC4xOSA4NS40ODYyIDE0NC4zNjQgODUuNzU5TDE0NC4zNjQgODUuNzU5N0MxNDQuNTU1IDg2LjA1OTQgMTQ0Ljc0NyA4Ni4zNTk1IDE0NC45MzQgODYuNjYyQzE0NS4yMDQgODcuMDk4MyAxNDUuNDQ0IDg3LjU0OSAxNDUuNTgyIDg4LjA0ODhDMTQ1LjYwMyA4OC4xMjM1IDE0NS42NDggODguMTkwNyAxNDUuNjk0IDg4LjI1ODRDMTQ1LjczMyA4OC4zMTY0IDE0NS43NzIgODguMzc0OSAxNDUuNzk2IDg4LjQzODlDMTQ2LjAwOSA4OC45OTgyIDE0Ni4xODcgODkuNTY4NyAxNDYuMzY1IDkwLjEzOTJDMTQ2LjQ3NCA5MC40ODgyIDE0Ni41ODMgOTAuODM3MiAxNDYuNyA5MS4xODM4QzE0Ni44ODQgOTEuNzI2NCAxNDYuOTU4IDkyLjI4MDQgMTQ3LjAzMiA5Mi44MzQxQzE0Ny4wNyA5My4xMTc3IDE0Ny4xMDggOTMuNDAxMiAxNDcuMTYgOTMuNjgzQzE0Ny41MTIgOTUuNTU4MiAxNDcuNTMgOTcuNDUzNiAxNDcuNTA0IDk5LjM1MTlDMTQ3LjUwMSA5OS40ODMzIDE0Ny41MDggOTkuNjE1MSAxNDcuNTE1IDk5Ljc0NjlDMTQ3LjUyNSA5OS45MzM5IDE0Ny41MzUgMTAwLjEyMSAxNDcuNTE4IDEwMC4zMDVDMTQ3LjQ4MiAxMDAuNjg5IDE0Ny40MjcgMTAxLjA2OSAxNDcuMzcyIDEwMS40NDlDMTQ3LjM0MyAxMDEuNjUzIDE0Ny4zMTMgMTAxLjg1NyAxNDcuMjg2IDEwMi4wNjJDMTQ3LjI0MiAxMDIuNCAxNDcuMjAxIDEwMi43NCAxNDcuMTU5IDEwMy4wNzlDMTQ3LjEzNyAxMDMuMjU4IDE0Ny4xMTUgMTAzLjQzOCAxNDcuMDkzIDEwMy42MTdDMTQ3LjA4OCAxMDMuNjU4IDE0Ny4wODMgMTAzLjcgMTQ3LjA3OCAxMDMuNzQxTDE0Ny4wNjQgMTAzLjg1NkMxNDcuMDMyIDEwNC4xMTggMTQ3IDEwNC4zODEgMTQ2Ljk3MyAxMDQuNjQyQzE0Ni45NDUgMTA0LjkwNCAxNDYuOTEzIDEwNS4xNjYgMTQ2Ljg4MSAxMDUuNDI3QzE0Ni44MDcgMTA2LjAzIDE0Ni43MzMgMTA2LjYzMyAxNDYuNzE1IDEwNy4yMzdDMTQ2LjY4OCAxMDguMDgzIDE0Ni43MDUgMTA4LjkzMSAxNDYuNzIyIDEwOS43NzhDMTQ2LjczIDExMC4xNiAxNDYuNzM3IDExMC41NDIgMTQ2Ljc0MSAxMTAuOTI0QzE0Ni43NDMgMTExLjE5IDE0Ni43NDQgMTExLjQ1NiAxNDYuNzQ0IDExMS43MjJDMTQ2Ljc0NSAxMTIuMTg4IDE0Ni43NDYgMTEyLjY1NCAxNDYuNzU2IDExMy4xMkMxNDYuNzY3IDExMy43ODcgMTQ2Ljg2NCAxMTQuNDM3IDE0Ny4xNDkgMTE1LjA1M0MxNDcuMTg3IDExNS4xMzMgMTQ3LjIwOSAxMTUuMjIxIDE0Ny4yMzEgMTE1LjMwOUMxNDcuMjQ5IDExNS4zODMgMTQ3LjI2NyAxMTUuNDU3IDE0Ny4yOTUgMTE1LjUyNkMxNDcuMzYzIDExNS42OTQgMTQ3LjQzIDExNS44NjIgMTQ3LjQ5NyAxMTYuMDMxQzE0Ny43NTEgMTE2LjY2NSAxNDguMDA2IDExNy4zMDEgMTQ4LjI4NCAxMTcuOTI1QzE0OC40NDkgMTE4LjI5NSAxNDguNjMxIDExOC42NTkgMTQ4LjgxMyAxMTkuMDIyQzE0OC45NzcgMTE5LjM1IDE0OS4xNDEgMTE5LjY3OCAxNDkuMjkzIDEyMC4wMTFDMTQ5LjY4OSAxMjAuODc3IDE1MC4yNDkgMTIxLjYyOSAxNTAuODQ3IDEyMi4zNjNDMTUwLjk3NiAxMjIuNTE5IDE1MS4wOTYgMTIyLjY4MyAxNTEuMjE3IDEyMi44NDdDMTUxLjM4NSAxMjMuMDc1IDE1MS41NTIgMTIzLjMwNCAxNTEuNzQyIDEyMy41MTNDMTUxLjk4IDEyMy43NzUgMTUyLjI0NCAxMjQuMDE2IDE1Mi41MDcgMTI0LjI1NkMxNTIuNjI0IDEyNC4zNjIgMTUyLjc0IDEyNC40NjggMTUyLjg1NCAxMjQuNTc2QzE1Mi44ODggMTI0LjYwOCAxNTIuOTI0IDEyNC42MzcgMTUyLjk2MSAxMjQuNjY2QzE1Mi45OSAxMjQuNjg5IDE1My4wMiAxMjQuNzEzIDE1My4wNDcgMTI0LjczOEMxNTMuMjEgMTI0Ljg4NiAxNTMuMzczIDEyNS4wMzQgMTUzLjUzNyAxMjUuMTgyQzE1My44NzYgMTI1LjQ5MSAxNTQuMjE2IDEyNS44IDE1NC41NTUgMTI2LjExQzE1NC43NSAxMjYuMjg3IDE1NC45NDMgMTI2LjQ2OCAxNTUuMTM2IDEyNi42NDhMMTU1LjEzNyAxMjYuNjQ5QzE1NS41MSAxMjYuOTk2IDE1NS44ODMgMTI3LjM0NCAxNTYuMjcxIDEyNy42NzNDMTU2LjUzMyAxMjcuODk1IDE1Ni44MjEgMTI4LjA4OCAxNTcuMTA5IDEyOC4yOEMxNTcuMjM3IDEyOC4zNjYgMTU3LjM2NiAxMjguNDUyIDE1Ny40OTEgMTI4LjU0QzE1Ny41MDUgMTI4LjU1MSAxNTcuNTIyIDEyOC41NTggMTU3LjUzOSAxMjguNTY1QzE1Ny41NjMgMTI4LjU3NSAxNTcuNTg3IDEyOC41ODUgMTU3LjU5NyAxMjguNjA0QzE1Ny43NDEgMTI4Ljg1MiAxNTcuOTYgMTI5LjAyNCAxNTguMTc5IDEyOS4xOTdDMTU4LjI5MyAxMjkuMjg3IDE1OC40MDggMTI5LjM3OCAxNTguNTEyIDEyOS40NzlDMTU4LjU0MyAxMjkuNTA5IDE1OC41NzIgMTI5LjU0MiAxNTguNjAyIDEyOS41NzRDMTU4LjY2NyAxMjkuNjQ3IDE1OC43MzMgMTI5LjcyIDE1OC44MTQgMTI5Ljc2OEMxNTkuNjY0IDEzMC4yODIgMTYwLjI5NCAxMzEuMDE5IDE2MC45MjQgMTMxLjc1NEwxNjAuOTMyIDEzMS43NjNDMTYwLjk3NiAxMzEuODE1IDE2MS4wMiAxMzEuODY2IDE2MS4wNjQgMTMxLjkxOEMxNjEuNjc0IDEzMi42MjUgMTYyLjE0NiAxMzMuNDI2IDE2Mi42MTYgMTM0LjIyNkMxNjIuNzA0IDEzNC4zNzYgMTYyLjc4OCAxMzQuNTMgMTYyLjg3MSAxMzQuNjg0QzE2Mi45NzkgMTM0Ljg4MiAxNjMuMDg2IDEzNS4wOCAxNjMuMjA1IDEzNS4yNzJDMTYzLjQyNSAxMzUuNjI1IDE2My40OTYgMTM2LjAxOCAxNjMuNTY4IDEzNi40MUMxNjMuNTg1IDEzNi41MDYgMTYzLjYwMiAxMzYuNjAyIDE2My42MjIgMTM2LjY5N0MxNjMuNjYzIDEzNi44OTkgMTYzLjY5NiAxMzcuMTAzIDE2My43MjkgMTM3LjMwN0MxNjMuNzgyIDEzNy42MzYgMTYzLjgzNSAxMzcuOTY0IDE2My45MjQgMTM4LjI4M0MxNjQuMDM1IDEzOC42OCAxNjQuMDU0IDEzOS4wNzUgMTY0LjA3NSAxMzkuNTE0TDE2NC4wNzkgMTM5LjU5NUMxNjMuOTQ3IDEzOS42MDYgMTYzLjgxNSAxMzkuNjE3IDE2My42ODUgMTM5LjYyOEMxNjMuMzY3IDEzOS42NTUgMTYzLjA1NSAxMzkuNjgxIDE2Mi43NDUgMTM5LjcxNkMxNjIuNDM0IDEzOS43NTIgMTYyLjEyMyAxMzkuNzkxIDE2MS44MTMgMTM5LjgzMUwxNjEuODEzIDEzOS44MzFDMTYxLjM3NSAxMzkuODg2IDE2MC45MzcgMTM5Ljk0MiAxNjAuNDk4IDEzOS45ODhDMTYwLjI2NiAxNDAuMDEyIDE2MC4wMzMgMTQwLjAxNCAxNTkuNzk5IDE0MC4wMTdDMTU5LjY2OSAxNDAuMDE4IDE1OS41NCAxNDAuMDIgMTU5LjQxIDE0MC4wMjVDMTU4LjkyOSAxNDAuMDQ1IDE1OC40NDUgMTQwLjA0IDE1Ny45NjQgMTQwLjAyNUMxNTcuOTQ1IDE0MC4wMjQgMTU3LjkyIDE0MC4wMiAxNTcuODk0IDE0MC4wMTVDMTU3Ljc5MSAxMzkuOTk3IDE1Ny42NTcgMTM5Ljk3MyAxNTcuNyAxNDAuMTU1QzE1Ny42MTYgMTQwLjEyOCAxNTcuNTM0IDE0MC4xMDMgMTU3LjQ1NSAxNDAuMDc5TDE1Ny40NTMgMTQwLjA3OEMxNTcuMzI3IDE0MC4wMzkgMTU3LjIwNiAxNDAuMDAyIDE1Ny4wODcgMTM5Ljk2MkMxNTYuNDg4IDEzOS43NTYgMTU1Ljg5IDEzOS41NDggMTU1LjI5MyAxMzkuMzRDMTU1LjEgMTM5LjI3MiAxNTQuOTA2IDEzOS4yMDUgMTU0LjcxNCAxMzkuMTM4TDE1NC43MTIgMTM5LjEzOEwxNTQuNzEyIDEzOS4xMzdDMTU0LjIxNyAxMzguOTY3IDE1My43MjIgMTM4Ljc5NyAxNTMuMjMyIDEzOC42MTVDMTUzLjEzMiAxMzguNTc4IDE1My4wMzggMTM4LjUyNSAxNTIuOTQzIDEzOC40NzJDMTUyLjg5MSAxMzguNDQzIDE1Mi44MzkgMTM4LjQxMyAxNTIuNzg2IDEzOC4zODdDMTUyLjUzIDEzOC4yNTggMTUyLjI3NCAxMzguMTI4IDE1Mi4wMTggMTM3Ljk5OEwxNTIuMDE3IDEzNy45OThDMTUxLjQ0MiAxMzcuNzA2IDE1MC44NjcgMTM3LjQxNSAxNTAuMjg3IDEzNy4xMzNDMTQ5LjkxNSAxMzYuOTUxIDE0OS41ODkgMTM2LjcwNiAxNDkuMjYzIDEzNi40NjJDMTQ5LjE3NiAxMzYuMzk2IDE0OS4wODggMTM2LjMzIDE0OSAxMzYuMjY2QzE0OC41NzIgMTM1Ljk1NCAxNDguMTUzIDEzNS42MzEgMTQ3LjczNCAxMzUuMzA4QzE0Ny40NjkgMTM1LjEwMyAxNDcuMjA0IDEzNC44OTkgMTQ2LjkzNyAxMzQuNjk3QzE0Ni4zMTkgMTM0LjIzMiAxNDUuNjEyIDEzMy45MDUgMTQ0LjkwOCAxMzMuNTkxQzE0NC43MDIgMTMzLjQ5OCAxNDQuMzk0IDEzMy4zOTQgMTQ0LjEyMSAxMzMuNTkxQzE0NC4wOCAxMzMuNjE5IDE0My45OTggMTMzLjU5MiAxNDMuOTA3IDEzMy41NjJDMTQzLjg2MiAxMzMuNTQ3IDE0My44MTUgMTMzLjUzMSAxNDMuNzcgMTMzLjUyMUMxNDMuMzAzIDEzMy42MTkgMTQzLjIzIDEzMy45ODYgMTQzLjIzIDEzNC40QzE0My4yMyAxMzQuNTYgMTQzLjIzMSAxMzQuNzIxIDE0My4yMzIgMTM0Ljg4MkMxNDMuMjM0IDEzNS4yMDIgMTQzLjIzNiAxMzUuNTIzIDE0My4yMyAxMzUuODQ0QzE0My4yMjIgMTM2LjMwNSAxNDMuMjAyIDEzNi43NjUgMTQzLjE4MSAxMzcuMjI2TDE0My4xODEgMTM3LjIyN0wxNDMuMTcxIDEzNy40NTZDMTQzLjE2MiAxMzcuNjc0IDE0My4xNTQgMTM3Ljg5MSAxNDMuMTQ1IDEzOC4xMDlDMTQzLjExIDEzOC45ODEgMTQzLjA3NiAxMzkuODUyIDE0My4wMzMgMTQwLjcyNEMxNDMuMDIzIDE0MC45NSAxNDIuOTk3IDE0MS4xNzggMTQyLjk3MiAxNDEuNDA1QzE0Mi45NjIgMTQxLjQ5NCAxNDIuOTUxIDE0MS41ODMgMTQyLjk0MiAxNDEuNjcyQzE0Mi45MzQgMTQxLjc1NiAxNDIuOTI1IDE0MS44MzkgMTQyLjkxNiAxNDEuOTIzTDE0Mi45MTYgMTQxLjkyNEMxNDIuODk4IDE0Mi4xIDE0Mi44NzkgMTQyLjI3NyAxNDIuODYzIDE0Mi40NTVDMTQyLjg1MSAxNDIuNTk5IDE0Mi44MzggMTQyLjc0NCAxNDIuODI1IDE0Mi44ODhDMTQyLjc4NiAxNDMuMzIyIDE0Mi43NDcgMTQzLjc1NSAxNDIuNzIyIDE0NC4xODlDMTQyLjcwNSAxNDQuNDk0IDE0Mi42OTUgMTQ0Ljc5OCAxNDIuNjg1IDE0NS4xMDNDMTQyLjY3MSAxNDUuNTE3IDE0Mi42NTggMTQ1LjkzMSAxNDIuNjI2IDE0Ni4zNDRDMTQyLjU4NiAxNDYuODY1IDE0Mi41MiAxNDcuMzgyIDE0Mi40NTMgMTQ3Ljg5OUwxNDIuNDUzIDE0Ny44OTlDMTQyLjQzIDE0OC4wNzkgMTQyLjQwNyAxNDguMjU5IDE0Mi4zODUgMTQ4LjQzOUMxNDIuMzI2IDE0OC45MzMgMTQyLjI2MiAxNDkuNDI0IDE0Mi4xOTEgMTQ5LjkxNUMxNDIuMTcgMTUwLjA3NCAxNDIuMTQzIDE1MC4yMzMgMTQyLjExNyAxNTAuMzkzQzE0Mi4wODcgMTUwLjU3NCAxNDIuMDU2IDE1MC43NTYgMTQyLjAzMyAxNTAuOTM4QzE0MS45NzYgMTUxLjM4MyAxNDEuOTIyIDE1MS44MjggMTQxLjg2NyAxNTIuMjczQzE0MS44MTMgMTUyLjcxOCAxNDEuNzU5IDE1My4xNjMgMTQxLjcwMiAxNTMuNjA4QzE0MS42ODIgMTUzLjc1NSAxNDEuNjYzIDE1My45MDEgMTQxLjY0NCAxNTQuMDQ4QzE0MS41NDcgMTU0Ljc5MSAxNDEuNDUgMTU1LjUzNCAxNDEuMzMyIDE1Ni4yNzVDMTQxLjE3NiAxNTcuMjQzIDE0MS4wMDkgMTU4LjIwOCAxNDAuODEzIDE1OS4xNjdDMTQwLjcyNCAxNTkuNTk4IDE0MC42MDIgMTYwLjAyIDE0MC40ODEgMTYwLjQ0MkMxNDAuNDMgMTYwLjYxOCAxNDAuMzggMTYwLjc5MyAxNDAuMzMyIDE2MC45N0MxNDAuMjggMTYxLjE1OCAxNDAuMjI5IDE2MS4zNDYgMTQwLjE3OSAxNjEuNTM1QzE0MC4wNDUgMTYyLjAzOCAxMzkuOTExIDE2Mi41NDEgMTM5Ljc0MiAxNjMuMDMzQzEzOS41NTcgMTYzLjU3OSAxMzkuMzA4IDE2NC4xMDUgMTM5LjA1OSAxNjQuNjI1QzEzOC45MzggMTY0Ljg3NSAxMzguNzkzIDE2NS4xMTUgMTM4LjY0OCAxNjUuMzU0QzEzOC41OTIgMTY1LjQ0NyAxMzguNTM2IDE2NS41NCAxMzguNDgxIDE2NS42MzNDMTM4LjA4MiAxNjYuMzE1IDEzNy41MzkgMTY2LjgyNCAxMzYuODIxIDE2Ny4xOTZDMTM2LjI0NiAxNjcuNDk0IDEzNS42NzcgMTY3Ljc4NiAxMzUuMDQzIDE2Ny45MjRDMTM1LjAxMyAxNjcuOTMxIDEzNC45ODMgMTY3LjkzOCAxMzQuOTUzIDE2Ny45NDRMMTM0Ljg4OCAxNjcuOTU5QzEzNC4yOTUgMTY4LjA5IDEzMy43MDEgMTY4LjIyMiAxMzMuMDgxIDE2OC4xODVDMTMyLjggMTY4LjE2OCAxMzIuNTE5IDE2OC4xNzcgMTMyLjIzOCAxNjguMTg2QzEzMi4wNzIgMTY4LjE5MSAxMzEuOTA2IDE2OC4xOTYgMTMxLjc0IDE2OC4xOTZDMTMxLjYzMiAxNjguMTk2IDEzMS41MTQgMTY4LjE5IDEzMS40MTggMTY4LjE1QzEzMC44MzQgMTY3LjkwNyAxMzAuMzAzIDE2Ny41NzggMTI5Ljg2OSAxNjcuMTI0QzEyOS4xMjEgMTY2LjM0MSAxMjguNDA1IDE2NS41MjEgMTI3Ljg0NSAxNjQuNTkzQzEyNy43OTkgMTY0LjUxOCAxMjcuNzUzIDE2NC40NDMgMTI3LjcwNyAxNjQuMzY4TDEyNy43MDUgMTY0LjM2NUMxMjcuMjc3IDE2My42NjQgMTI2Ljg0NyAxNjIuOTYxIDEyNi41OTggMTYyLjE2NkMxMjYuNDYxIDE2MS43MyAxMjYuMzE3IDE2MS4yOTYgMTI2LjE3MiAxNjAuODYzQzEyNS45NTQgMTYwLjIwOCAxMjUuNzM2IDE1OS41NTUgMTI1LjU0NSAxNTguODkyQzEyNS4yMTQgMTU3Ljc0IDEyNC45MTQgMTU2LjU3NSAxMjQuNjU2IDE1NS40MDJDMTI0LjQ5MyAxNTQuNjU5IDEyNC4zNjggMTUzLjkwOSAxMjQuMjQ0IDE1My4xNThDMTI0LjE5OSAxNTIuODg3IDEyNC4xNTUgMTUyLjYxNiAxMjQuMTA4IDE1Mi4zNDVDMTIzLjk5OSAxNTEuNzA3IDEyMy44OTQgMTUxLjA2NSAxMjMuOCAxNTAuNDI0QzEyMy43NzQgMTUwLjI1MSAxMjMuNzY0IDE1MC4wNzYgMTIzLjc1MyAxNDkuOTAxQzEyMy43NDUgMTQ5Ljc3MiAxMjMuNzM3IDE0OS42NDQgMTIzLjcyNCAxNDkuNTE3QzEyMy42IDE0OC4zNzggMTIzLjUwOSAxNDcuMjM3IDEyMy40OTIgMTQ2LjA5M0MxMjMuNDkyIDE0Ni4wODMgMTIzLjQ5IDE0Ni4wNzMgMTIzLjQ4OSAxNDYuMDYzQzEyMy40ODYgMTQ2LjA0NSAxMjMuNDgzIDE0Ni4wMjcgMTIzLjQ4OSAxNDYuMDEyQzEyMy42MjQgMTQ1LjcwNyAxMjMuNTkgMTQ1LjQwMSAxMjMuNTU3IDE0NS4wOTNDMTIzLjU0NiAxNDQuOTkyIDEyMy41MzUgMTQ0Ljg5MSAxMjMuNTMgMTQ0Ljc5QzEyMy41MTggMTQ0LjU2NyAxMjMuNDQ4IDE0NC40MTQgMTIzLjMzMSAxNDQuMjQxQzEyMy4zMTMgMTQ0LjIxNSAxMjMuMjg0IDE0NC4xOTQgMTIzLjI1NCAxNDQuMTcyQzEyMy4xODEgMTQ0LjExOSAxMjMuMTAzIDE0NC4wNjEgMTIzLjE2OSAxNDMuOTM0QzEyMy4xNzggMTQzLjkxMSAxMjMuMTE2IDE0My44MjUgMTIzLjA3NSAxNDMuODFDMTIyLjYyNyAxNDMuNjU0IDEyMi4xNzUgMTQzLjUxIDEyMS42OTcgMTQzLjcwNkMxMjEuNjg0IDE0My43MTEgMTIxLjY3MSAxNDMuNzE1IDEyMS42NTggMTQzLjcyQzEyMS42MTMgMTQzLjczNCAxMjEuNTY2IDE0My43NDkgMTIxLjU1MyAxNDMuNzc4QzEyMS41MjIgMTQzLjg0NCAxMjEuNDkgMTQzLjkwOCAxMjEuNDU3IDE0My45NzNDMTIxLjM1MyAxNDQuMTgyIDEyMS4yNDkgMTQ0LjM5IDEyMS4yMDQgMTQ0LjYxQzEyMS4xNjMgMTQ0LjgxMyAxMjEuMDg3IDE0NC45NjYgMTIwLjk3OCAxNDUuMTMxQzEyMC43OTcgMTQ1LjQwNCAxMjAuNjI0IDE0NS42ODIgMTIwLjQ1MSAxNDUuOTYxQzEyMC4zNTUgMTQ2LjExNSAxMjAuMjYgMTQ2LjI2OSAxMjAuMTYzIDE0Ni40MjJMMTIwLjA1NSAxNDYuNTkxQzExOS44MyAxNDYuOTQyIDExOS42MDYgMTQ3LjI5MiAxMTkuMzcxIDE0Ny42MzhDMTE5LjA5OCAxNDguMDQgMTE4LjgxOSAxNDguNDM5IDExOC41MjkgMTQ4LjgyOUMxMTguMjk0IDE0OS4xNDQgMTE4LjA1NyAxNDkuNDU2IDExNy44MTkgMTQ5Ljc2OUwxMTcuODE4IDE0OS43N0MxMTcuNDU4IDE1MC4yNDMgMTE3LjA5OSAxNTAuNzE1IDExNi43NTEgMTUxLjE5NUMxMTYuMzkgMTUxLjY5NiAxMTYuMDM2IDE1Mi4yMDEgMTE1LjY4MiAxNTIuNzA3QzExNS4yMzkgMTUzLjMzOSAxMTQuNzk2IDE1My45NyAxMTQuMzQgMTU0LjU5M0MxMTMuNTM2IDE1NS42ODggMTEyLjY5MiAxNTYuNzU0IDExMS43NjUgMTU3Ljc1MUMxMTEuMDQ5IDE1OC41MjUgMTEwLjMwMSAxNTkuMjc0IDEwOS41NDcgMTYwLjAxM0MxMDkuMDc1IDE2MC40NzUgMTA4LjU5IDE2MC45MjUgMTA4LjEwNSAxNjEuMzc1TDEwOC4xMDQgMTYxLjM3NkMxMDcuODM3IDE2MS42MjQgMTA3LjU2OSAxNjEuODcyIDEwNy4zMDMgMTYyLjEyM0MxMDcuMTYgMTYyLjI1NyAxMDcuMDI0IDE2Mi40IDEwNi44ODggMTYyLjU0NEMxMDYuNjE0IDE2Mi44MzMgMTA2LjM0IDE2My4xMjIgMTA2LjAxMyAxNjMuMzNDMTA1LjkwMSAxNjMuNDAyIDEwNS43OSAxNjMuNDc3IDEwNS42NzggMTYzLjU1M0MxMDUuMTI2IDE2My45MjkgMTA0LjU2MiAxNjQuMzEzIDEwMy44MTYgMTY0LjI0MUMxMDMuNzI1IDE2NC4yMzIgMTAzLjYzNCAxNjQuMjQgMTAzLjU0MiAxNjQuMjQ3QzEwMy40NzkgMTY0LjI1MyAxMDMuNDE2IDE2NC4yNTggMTAzLjM1MiAxNjQuMjU4QzEwMi45MzYgMTY0LjI2NCAxMDIuNjEzIDE2NC4xMTYgMTAyLjMyMiAxNjMuNzk5QzEwMS42MzYgMTYzLjA1IDEwMS4wNTUgMTYyLjI0NCAxMDAuNzE1IDE2MS4yOTFDMTAwLjU3NCAxNjAuODkyIDEwMC40ODYgMTYwLjQ3IDEwMC40MTMgMTYwLjA1NEMxMDAuMjg0IDE1OS4zMiAxMDAuMTc1IDE1OC41ODMgMTAwLjA2NyAxNTcuODQ3QzEwMC4wNTMgMTU3Ljc1NSAxMDAuMDM5IDE1Ny42NjIgMTAwLjAyNSAxNTcuNTdDOTkuOTQ3IDE1Ny4wNDkgOTkuODY4MiAxNTYuNTI2IDk5LjgyMzMgMTU2Qzk5LjY3OTEgMTU0LjI5NiA5OS43MDggMTUyLjU4OSA5OS43MzcgMTUwLjg4MkM5OS43NDI4IDE1MC41NCA5OS43NDg1IDE1MC4xOTkgOTkuNzUyOSAxNDkuODU3Qzk5Ljc2MTcgMTQ5LjE3MyA5OS45MTQzIDE0OC40ODUgMTAwLjA2NyAxNDcuODE1QzEwMC4yMiAxNDcuMTQxIDEwMC40MDUgMTQ2LjQ3NiAxMDAuNTkgMTQ1LjgxMUMxMDAuNjUgMTQ1LjU5NyAxMDAuNzA5IDE0NS4zODIgMTAwLjc2OCAxNDUuMTY4QzEwMC45NSAxNDQuNTAxIDEwMS4xMzcgMTQzLjgzNiAxMDEuMzMxIDE0My4xNzRDMTAxLjM0NSAxNDMuMTI1IDEwMS4zNzMgMTQzLjA3OCAxMDEuNCAxNDMuMDMyQzEwMS40MyAxNDIuOTgxIDEwMS40NiAxNDIuOTMxIDEwMS40NzIgMTQyLjg3N0MxMDEuNTA5IDE0Mi43MjIgMTAxLjU1NSAxNDIuNTY5IDEwMS42MDIgMTQyLjQxNkMxMDEuNzI0IDE0Mi4wMiAxMDEuODQ1IDE0MS42MjIgMTAxLjc5NCAxNDEuMTkyQzEwMS43OCAxNDEuMDY3IDEwMS43NyAxNDAuOTQzIDEwMS43NiAxNDAuODFDMTAxLjc1NSAxNDAuNzU0IDEwMS43NTEgMTQwLjY5NyAxMDEuNzQ2IDE0MC42MzhIMTAxLjc1M0wxMDEuNzQ1IDE0MC42MjNaIiBmaWxsPSIjMUE3N0NBIi8+Cjwvc3ZnPgo=\";","import React from \"react\";\nimport { NavLink } from \"react-router-dom\";\nimport ChevronLeftIcon from \"@mui/icons-material/ChevronLeft\";\nimport { Link, Stack, Typography } from \"@mui/material\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nexport function BackToDashboard() {\n return (\n \n \n \n \n Dashboard\n \n \n \n );\n}\n","import React from \"react\";\nimport { useSearchParams, useNavigate } from \"react-router-dom\";\nimport { Box, Grid, Stack, styled, Typography } from \"@mui/material\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { LoadablePage } from \"shared/LoadablePage\";\nimport { getBySerial } from \"client/api/SerialApi\";\nimport { Link } from \"components/Link/Link\";\nimport NavigationSidebarLayout from \"components/NavigationSidebarLayout/NavigationSidebarLayout\";\nimport { PaperLayout } from \"components/PaperLayout/PaperLayout\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport BadlyDrawnOctopus from \"resources/images/svgs/blob-badly-drawn-octopus.svg\";\nimport { BackToDashboard } from \"areas/dashboard/components/BackToDashboard\";\n\nconst ImageContainer = styled(\"img\")`\n display: block;\n margin-left: auto;\n margin-right: auto;\n margin-bottom: 0.35em;\n`;\n\nexport function LoadViaSerial({ redirectPath }: { redirectPath: string }) {\n const [searchParams] = useSearchParams();\n const serialId = searchParams.get(\"serial\");\n\n const { data, loading, error } = useAsyncRequest(getBySerial, serialId || \"\");\n\n const navigate = useNavigate();\n\n if (data) {\n navigate(\n `/${data.type == \"CloudSubscription\" ? \"cloud-subscriptions\" : \"server-licenses\"}/${data.id}/${redirectPath}`\n );\n }\n\n return (\n <>\n } navLinksVisible={!error}>\n \n \n \n \n \n \n \n \n Sorry, you don't have permission to view this subscription\n \n \n If you should have access, make sure you're signed into the correct account. You can see which account\n you're signed into under{\" \"}\n \n Profile\n \n .\n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Grid, styled, Typography } from \"@mui/material\";\nimport ErrorImage from \"resources/images/error.png\";\n\nconst ImageContainer = styled(\"img\")`\n display: block;\n margin-left: auto;\n margin-right: auto;\n margin-bottom: 0.35em;\n`;\n\nexport function NotFoundPage() {\n return (\n \n \n \n \n \n \n Could not find the resource you requested.\n \n \n The resource you requested does not exist, or you may not have permission to access it\n \n \n \n );\n}\n","import type { DateTime } from \"luxon\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport axiosClient from \"../axios-client\";\n\nexport interface CheckoutDto {\n completed?: DateTime;\n id: string;\n serverLicense?: Pick & Partial;\n cloudSubscription?: Pick & Partial;\n}\n\nconst BASE_URL = \"checkouts\";\n\nexport const getCheckout = async (checkoutId: string): Promise => {\n const response = await axiosClient.get(`${BASE_URL}/${checkoutId}`);\n return response.data;\n};\n","import { unauthenticatedAxiosClient } from \"client/axios-client\";\n\nexport interface PurchaseIntentDto {\n cloudSubscriptionId?: string;\n serverLicenseId?: string;\n}\n\nconst BASE_URL = \"purchase-intents\";\n\nexport const getPurchaseIntent = async (intentId: string, isFirstCheckRequest: boolean): Promise => {\n const response = await unauthenticatedAxiosClient.get(\n `${BASE_URL}/${intentId}?firstCheckOfCompletion=${isFirstCheckRequest}`\n );\n return response.data;\n};\n","var _g, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgSuccessRocket = function SvgSuccessRocket(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 160,\n height: 160,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#success_rocket_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M13.865 58.79s-4.498 4.645-10.804 4.058c0 0 .146 4.254 3.422 5.525 0 0 4.302.977 10.853-5.623-.048.05-3.373-1.368-3.47-3.96ZM43.874 42.108c2.102-1.76 3.911-4.155 2.835-6.942-.635-1.711-2.004-3.08-3.568-3.96a6.814 6.814 0 0 0-.44-1.858c-.88-1.907-2.64-3.031-4.4-4.009-.44-.244-2.152-1.075-3.765-2.053-2.347-.734-4.302-1.81-4.547-4.84-3.031 3.47 3.178 6.306 5.476 7.577 1.711.93 4.791 2.298 5.573 4.303-.44-.098-.88-.196-1.27-.245-2.103-.244-7.823.196-7.823 3.276-.05 3.129 4.84 3.276 6.893 2.885 1.81-.392 3.276-1.516 3.96-2.983 1.663 1.027 2.787 2.69 2.054 4.84-.44 1.32-1.663 2.445-3.08 3.325-.587-.147-1.125-.196-1.663-.245-1.564-.049-7.04.636-5.622 3.423 1.271 2.493 5.818 0 7.578-1.174.684.196 1.32.44 1.907.734 2.493 1.222 5.964 4.449 4.4 7.48.538.391 1.026.88 1.369 1.418 2.884-4.45-1.32-9.045-5.867-10.952Zm-3.129-9.289c-.636 1.076-2.347 1.614-3.471 1.76-.831.098-2.885.05-2.885-1.124-.049-1.467 3.031-1.37 4.01-1.418.782 0 1.71.147 2.59.391-.146.147-.195.293-.244.391Zm-4.498 11.05c-.489-1.467 3.52-1.076 3.52-1.076-2.2 1.711-3.52 1.075-3.52 1.075ZM146.295 137.738c.684-.636 2.346-.685 2.933-.782a5.143 5.143 0 0 0 2.102-.734c-.684-.293-1.32-.782-1.906-1.222-1.076.293-2.347.196-3.325.684-1.173.538-2.249 1.467-2.053 2.885.097.636.684.929 1.173.88.929.342 3.618 1.369 4.693 2.249-1.271.098-2.64-.342-3.911.196-1.075.488-1.711 1.32-1.907 2.444-.048.391.049.929.489 1.076 1.076.44 2.103.88 3.08 1.466.587.343 2.836 1.076 1.32 1.369-1.417.245-2.688-.44-4.106.098-2.64 1.027-1.956 3.471-1.174 5.573.049.098.049.147.098.245.147-.636.538-1.173 1.174-1.662a.365.365 0 0 1 .195-.098c-.342-.831-.489-1.76.538-2.347.929-.489 2.298.147 3.324.098.929-.049 2.2-.196 2.64-1.173.978-2.2-3.177-4.107-5.28-4.987 1.076-1.125 4.156-.342 5.427-.929.293-.147.489-.538.489-.88 0-2.151-3.813-3.667-6.013-4.449ZM21.262 14.296c-.684-.048-1.662-.586-2.15-1.27.928-.196 1.906-.538 2.737-1.125.929-.587 1.907-1.467 1.613-2.64-.293-1.125-1.564-1.37-2.59-1.223-1.516.245-2.983 1.565-3.619 3.13a4.406 4.406 0 0 1-1.564-.44c-.88.293-1.76.39-2.689.244.049.147.147.342.293.44 1.076.978 2.298 1.515 3.618 1.662 0 .245.05.538.147.782.831 2.69 3.911 2.592 6.356 2.054.146-.147.342-.294.488-.49.44-.537.392-1.124.44-1.71l-.048-.05c-.93.343-2.054.734-3.032.636Zm.196-4.546s1.711.83-2.591 1.71c0 0 1.466-2.541 2.591-1.71ZM82.95 46.886s-4.01 1.858-5.182 11.098c0 0 3.47-.928 5.133 1.027 0 0 .733-6.453 6.111-9.827 0 0-2.689-3.276-6.062-2.298ZM129.434 123.262s-3.373 2.836-2.053 12.027c0 0 3.128-1.858 5.231-.342 0 0-.978-6.405 3.275-11.098 0 .048-3.471-2.396-6.453-.587ZM61.883 110.616c-1.19-1.518-3.5-4.033-3.406-6.161l1.086.735c1.824 1.05 7.275 2.866 8.496.049 1.24-2.883-3.148-4.904-5.226-5.307-1.834-.371-3.627.131-4.823 1.196-1.129-1.609-1.551-3.558-.035-5.252.911-1.073 2.485-1.565 4.136-1.82.477.35.972.632 1.444.872 1.432.653 6.715 2.17 6.477-.948-.222-2.791-5.32-2.282-7.446-1.873-.524-.434-1.048-.868-1.47-1.417-1.785-2.081-3.749-6.474-1.138-8.614-.378-.572-.628-1.217-.702-1.848-4.43 2.994-2.35 8.891 1.081 12.403-2.632.806-5.207 2.31-5.326 5.292-.086 1.843.635 3.625 1.753 5.016a5.95 5.95 0 0 0-.304 1.853c.057 2.099 1.191 3.817 2.471 5.397.325.378 1.533 1.83 2.657 3.33 1.893 1.572 3.269 3.322 2.271 6.238 4.193-2.019-.385-7.073-1.996-9.141Zm6.263-16.698c-.144 1.54-3.696-.39-3.696-.39 2.68-.721 3.696.39 3.696.39Zm-8.819 8.657c.104-.115.19-.162.294-.277.993-.727 2.775-.55 3.883-.275.798.224 2.678 1.074 2.228 2.169-.568 1.384-3.324.073-4.237-.255-.714-.272-1.48-.739-2.167-1.362ZM104.763 51.335l-.342-.342c-1.418-.978-2.885.244-3.862 1.417-.049.147-.049.294-.049.392 0 .44.195.684.44.977.342-.489.782-1.124 1.271-1.418.342-.195 1.027-.342 1.516-.195-.392.44-.734.978-.929 1.564-.245.636-.392 1.418.195 1.858.538.391 1.271.05 1.711-.39.636-.685.88-1.859.636-2.837.293-.195.587-.293.929-.39a3.822 3.822 0 0 1 1.222-1.125c-.098-.049-.196-.098-.293-.098a4.328 4.328 0 0 0-2.445.587Zm-1.026 3.324s-1.125.245.635-1.809c.049.05.245 1.81-.635 1.81Z\",\n fill: \"#DAE2E9\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M14.398 139.229s.147 1.222-.586 1.76c0 0 2.053.538 2.884 2.493 0 0 1.173-.782 1.076-2.004-.05 0-.44-1.467-3.374-2.249ZM13.966 99.23s-1.613 1.368-3.716.879c0 0-.049 1.418 1.027 2.005 0 0 1.418.538 3.765-1.418-.05 0-1.125-.587-1.076-1.467Z\",\n fill: \"#F4F6F8\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M8.353 131.351c-.147 1.027-.293 2.201-.782 3.032-.342.586-1.222 1.271-2.054 1.417.245-.928.294-1.955.147-2.982-.147-1.075-.489-2.347-1.711-2.542-1.125-.196-1.907.831-2.2 1.809-.391 1.467.195 3.373 1.271 4.595a4.32 4.32 0 0 1-1.076 1.223 5.352 5.352 0 0 1-.928 2.542c.146.049.342 0 .537-.049a6.512 6.512 0 0 0 3.031-2.542c.245.098.49.195.783.195 2.786.392 4.009-2.444 4.547-4.889a3.39 3.39 0 0 0-.245-.635c-.195-.685-.782-.88-1.32-1.174Zm-4.351 3.961s-1.662-2.396-.44-3.081c0 0 1.418-1.222.44 3.081ZM60.956 145s-.294 3.765-1.956 5.867c0 0 3.813 1.271 5.867 0 0 0 2.004-2.054 2.738-5.036.049-.049-4.547 2.005-6.65-.831ZM97.23 14.11c-.636.05-.978.587-.978 1.125-.391.88-1.662 3.52-2.64 4.498 0-1.272.587-2.64.098-3.912-.391-1.124-1.174-1.809-2.298-2.102-.391-.098-.93 0-1.125.391-.489 1.027-1.026 2.005-1.71 2.934-.392.586-1.32 2.738-1.468 1.222-.097-1.418.636-2.64.196-4.107-.831-2.738-3.276-2.2-5.476-1.613-.097 0-.146.049-.244.098.587.195 1.173.635 1.564 1.27a.44.44 0 0 1 .05.245c.88-.244 1.808-.391 2.297.733.391.978-.342 2.25-.342 3.276 0 .929.049 2.2.978 2.69 2.102 1.172 4.35-2.837 5.378-4.89 1.026 1.173 0 4.205.489 5.476.097.342.488.538.83.538 2.25.146 4.059-3.472 5.036-5.623.538.733.538 2.396.538 2.982.049.783.196 1.467.538 2.152.391-.685.88-1.271 1.369-1.81-.196-1.075 0-2.346-.391-3.373-.44-1.124-1.271-2.298-2.69-2.2Z\",\n fill: \"#DAE2E9\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M58.214 18.007s-1.418-.146-2.102.88c0 0-.636 1.37 1.124 3.863 0 0 .685-1.027 1.565-.93 0-.048-1.223-1.76-.587-3.813ZM72.2 10.697c-.782.294-2.15.93-3.08.636.147-.098.294-.245.44-.342.685-.636 2.2-2.69 1.174-3.57-1.027-.928-2.494.685-2.934 1.467-.39.734-.44 1.565-.147 2.2-.83.245-1.71.147-2.2-.684-.342-.538-.342-1.271-.195-2.004.196-.147.391-.343.538-.49.489-.488 1.809-2.542.489-2.884-1.223-.293-1.663 1.956-1.81 2.885a3.162 3.162 0 0 1-.782.44c-1.124.489-3.226.733-3.813-.685a1.795 1.795 0 0 1-.88.05c.684 2.297 3.422 2.2 5.378 1.221 0 1.223.293 2.494 1.516 2.983.782.293 1.613.244 2.346-.05.196.148.44.294.734.392.88.244 1.76 0 2.64-.293.195-.098.977-.392 1.76-.685.929-.587 1.858-.929 2.933-.147-.244-2.102-3.031-.83-4.107-.44Zm-6.209-4.889c.636.245-.635 1.516-.635 1.516.049-1.222.635-1.516.635-1.516Zm2.445 4.89c-.05-.05-.05-.098-.05-.147-.195-.538.148-1.271.392-1.663.196-.293.831-.977 1.222-.635.49.44-.39 1.418-.684 1.76-.196.196-.49.489-.88.684Z\",\n fill: \"#F4F6F8\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M142.934 86.944c-.342-1.222-1.076-2.445-2.494-2.493-.635 0-1.026.488-1.075 1.026-.489.831-1.907 3.374-2.982 4.254.097-1.271.782-2.591.44-3.863-.294-1.124-.978-1.906-2.103-2.249-.391-.097-.929-.097-1.173.294a21.924 21.924 0 0 1-1.956 2.787c-.44.537-1.515 2.59-1.564 1.075 0-1.418.88-2.591.538-4.107-.587-2.786-3.08-2.493-5.329-2.053-.098 0-.147.049-.245.098.587.244 1.076.733 1.418 1.418.049.097.049.146.049.244.88-.196 1.858-.196 2.2.929.342.978-.538 2.249-.636 3.227-.097.928-.146 2.2.734 2.786 2.004 1.32 4.595-2.444 5.769-4.4.929 1.222-.342 4.156 0 5.525.098.342.44.538.782.587 2.249.342 4.351-3.13 5.476-5.183.489.782.293 2.445.293 3.031 0 .783.098 1.516.391 2.2.44-.635.978-1.173 1.516-1.662-.049-1.173.244-2.396-.049-3.471ZM113.594 113.289s.586.293.782.586c0 0 .978-1.857 3.716-3.275l-1.027-.587s-2.053 1.125-3.471 3.276ZM163.264 53.314c-.749-2.623-2.243-5.26-5.168-5.412-1.869-.092-3.644.555-5.079 1.683a4.56 4.56 0 0 0-1.884-.31c-2.08.032-3.867 1.14-5.471 2.367-.439.315-1.825 1.527-3.394 2.62-1.626 1.864-3.398 3.19-6.291 2.226 1.95 4.184 7.055-.35 9.181-1.94 1.52-1.178 4.081-3.478 6.218-3.317a8.577 8.577 0 0 0-.739 1.058c-1.039 1.803-3.015 7.219-.209 8.518 2.848 1.274 4.965-3.034 5.436-5.126.402-1.825-.027-3.614-1.14-4.831 1.612-1.118 3.56-1.47 5.265.079 1.032.982 1.53 2.504 1.775 4.174-.34.484-.637.942-.868 1.418-.691 1.428-2.305 6.688.84 6.54 2.794-.169 2.378-5.313 2.036-7.437a9.74 9.74 0 0 1 1.413-1.455c2.137-1.767 6.547-3.624 8.611-.981.59-.347 1.23-.61 1.884-.654-2.962-4.554-8.832-2.576-12.416.78Zm-9.569 3.019c-.208.803-1.113 2.64-2.241 2.168-1.353-.565-.029-3.329.348-4.23.3-.745.818-1.503 1.428-2.202.116.102.166.186.24.312.729 1.046.52 2.814.225 3.952Zm8.034 4.69c-1.567-.156.451-3.669.451-3.669.689 2.715-.451 3.669-.451 3.669Z\",\n fill: \"#DAE2E9\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M69.286 118.661c.667-2.438-.04-5.111-1.715-7.494-.404-.525-.635-.929-1.152-1.291.356 1.702.486 3.729-.53 5.196-2.544 3.301-8.41 5.487-12.925 4.987-2.032-4.084-2.137-10.209-.11-13.872.845-1.587 2.782-2.167 4.493-2.421-.344-.241-.974-.44-1.604-.639-2.632-.633-5.371-.372-7.416 1.1-5.907 4.093-7.473 15.582-3.382 27.401 12.733-.281 22.854-6.022 24.341-12.967Z\",\n fill: \"#EA7325\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M66.198 109.87c-1.61-1.37-3.16-2.455-4.021-3.058-.862-.603-2.412-1.689-4.248-2.732-6.576-1.217-9.24 8.533-5.97 17.842 9.934-.304 17.766-6.436 14.239-12.052Z\",\n fill: \"#FFDF62\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M109.274 40.572s-21.95-.434-45.886 33.552c-7.197 10.33-12.203 27.545-12.203 27.545l10.279 7.161 47.81-68.258Z\",\n fill: \"#0F4778\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M108.876 40.348s7.901 20.604-15.746 54.547c-7.197 10.331-21.785 20.871-21.785 20.871l-10.279-7.161 47.81-68.257Z\",\n fill: \"#0F4778\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M97.632 86.91c2.3 14.485.465 29.727.465 29.727s-12.41 15.633-24.32 21.651l3.082-31.865 20.773-19.512ZM69.18 66.97c-14.35 2.857-27.864 9.7-27.864 9.7S30.815 93.633 29.31 106.918l28.81-13.655L69.18 66.97Z\",\n fill: \"#87BFEC\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M114.903 32.044s-26.017-2.16-51.502 34.167c-7.718 11.114-12.16 30.102-12.16 30.102l12.64 8.833 12.639 8.833s16.216-10.759 23.934-21.873c25.484-36.327 14.449-60.062 14.449-60.062Z\",\n fill: \"#1A77CA\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M86.78 72.553c4.75 3.327 11.126 2.381 14.24-2.114 3.114-4.495 1.787-10.836-2.963-14.163-4.75-3.328-11.125-2.382-14.24 2.113-3.113 4.495-1.787 10.836 2.963 14.164Z\",\n fill: \"#CDE4F7\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M85.594 74.09c-5.575-3.904-7.064-11.597-3.296-17.034 3.767-5.438 11.46-6.7 17.035-2.795 5.574 3.905 7.063 11.598 3.296 17.035-3.878 5.597-11.46 6.7-17.035 2.795Zm11.19-16.15c-3.443-2.412-8.278-1.761-10.715 1.757-2.327 3.358-1.534 8.19 2.073 10.716 3.443 2.411 8.278 1.76 10.716-1.758 2.162-3.473 1.259-8.144-2.074-10.716Z\",\n fill: \"#0F4778\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M99.303 44.217c1.269.08 2.966-.123 3.332-1.503.199-.752.255-1.477.664-2.154a4.583 4.583 0 0 1 1.375-1.437c2.212-1.477 5.267-.771 6.983 1.343 1.597 1.961 1.443 5.122-.701 6.447-1.238.767-2.051 1.483-1.578 3.075.126.435.585 1.273.295 1.684-.374.54-1.041-.901-1.1-1.081-.021.335.422 2.716-.545 2.188-.889-.487-.86-2.09-1.03-2.908-.287-1.373-1.35.475-1.603.832-.395.57-1.629 1.43-1.864.139-.197-1.06.725-1.882.764-2.877.046-1.09-1.798-.14-2.19.008-.437.154-2.583.868-2.473-.237.082-.9 1.365-1.508 2.054-1.902-.248.14-1.191-.063-1.48-.103a3.618 3.618 0 0 1-1.738-.727c-1.065-.862.184-.824.833-.784l.002-.003Z\",\n fill: \"#fff\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M79.621 82.239c-4.162.025-7.73 2.17-9.668 5.694l-19.031 35.481 26.705-30.137c2.636-3.038 3.413-7.127 1.995-11.038Z\",\n fill: \"#87BFEC\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"success_rocket_svg__a\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M0 0h160v160H0z\"\n })))));\n};\nexport { SvgSuccessRocket as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYwIiBoZWlnaHQ9IjE2MCIgdmlld0JveD0iMCAwIDE2MCAxNjAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF80OTZfMjU4NCkiPgo8cGF0aCBkPSJNMTMuODY1MiA1OC43OTAzQzEzLjg2NTIgNTguNzkwMyA5LjM2NzM2IDYzLjQzNDggMy4wNjA1NSA2Mi44NDgyQzMuMDYwNTUgNjIuODQ4MiAzLjIwNzIyIDY3LjEwMTYgNi40ODI4NSA2OC4zNzI3QzYuNDgyODUgNjguMzcyNyAxMC43ODUyIDY5LjM1MDUgMTcuMzM2NCA2Mi43NTA0QzE3LjI4NzYgNjIuNzk5MyAxMy45NjMgNjEuMzgxNSAxMy44NjUyIDU4Ljc5MDNaIiBmaWxsPSIjREFFMkU5Ii8+CjxwYXRoIGQ9Ik00My44NzM5IDQyLjEwODNDNDUuOTc2MiA0MC4zNDgzIDQ3Ljc4NTEgMzcuOTUyNyA0Ni43MDk1IDM1LjE2NkM0Ni4wNzQgMzMuNDU0OCA0NC43MDUxIDMyLjA4NTkgNDMuMTQwNiAzMS4yMDU5QzQzLjA5MTcgMzAuNjE5MiA0Mi45NDUgMjkuOTgzNiA0Mi43MDA2IDI5LjM0OEM0MS44MjA1IDI3LjQ0MTMgNDAuMDYwNSAyNi4zMTY5IDM4LjMwMDQgMjUuMzM5MUMzNy44NjA0IDI1LjA5NDYgMzYuMTQ5MyAyNC4yNjM1IDM0LjUzNTkgMjMuMjg1N0MzMi4xODkyIDIyLjU1MjMgMzAuMjMzNiAyMS40NzY3IDI5Ljk4OTEgMTguNDQ1NkMyNi45NTggMjEuOTE2OCAzMy4xNjcgMjQuNzUyNCAzNS40NjQ4IDI2LjAyMzVDMzcuMTc2IDI2Ljk1MjQgNDAuMjU2IDI4LjMyMTMgNDEuMDM4MyAzMC4zMjU4QzQwLjU5ODMgMzAuMjI4MSA0MC4xNTgzIDMwLjEzMDMgMzkuNzY3MiAzMC4wODE0QzM3LjY2NDkgMjkuODM2OSAzMS45NDQ3IDMwLjI3NjkgMzEuOTQ0NyAzMy4zNTdDMzEuODk1OSAzNi40ODYgMzYuNzg0OCAzNi42MzI3IDM4LjgzODIgMzYuMjQxNUM0MC42NDcyIDM1Ljg1MDQgNDIuMTEzOSAzNC43MjU5IDQyLjc5ODMgMzMuMjU5MkM0NC40NjA2IDM0LjI4NTkgNDUuNTg1MSAzNS45NDgyIDQ0Ljg1MTcgMzguMDk5NEM0NC40MTE3IDM5LjQxOTQgNDMuMTg5NCA0MC41NDM5IDQxLjc3MTYgNDEuNDIzOUM0MS4xODUgNDEuMjc3MiA0MC42NDcyIDQxLjIyODMgNDAuMTA5NCA0MS4xNzk0QzM4LjU0NDkgNDEuMTMwNSAzMy4wNjkyIDQxLjgxNSAzNC40ODcgNDQuNjAxN0MzNS43NTgyIDQ3LjA5NTEgNDAuMzA0OSA0NC42MDE3IDQyLjA2NSA0My40Mjg0QzQyLjc0OTQgNDMuNjIzOSA0My4zODUgNDMuODY4NCA0My45NzE3IDQ0LjE2MTdDNDYuNDY1MSA0NS4zODQgNDkuOTM2MyA0OC42MTA3IDQ4LjM3MTggNTEuNjQxOUM0OC45MDk2IDUyLjAzMyA0OS4zOTg1IDUyLjUyMTkgNDkuNzQwNyA1My4wNTk3QzUyLjYyNTIgNDguNjEwNyA0OC40MjA3IDQ0LjAxNTEgNDMuODczOSA0Mi4xMDgzWk00MC43NDUgMzIuODE5MkM0MC4xMDk0IDMzLjg5NDggMzguMzk4MiAzNC40MzI2IDM3LjI3MzggMzQuNTc5M0MzNi40NDI2IDM0LjY3NzEgMzQuMzg5MiAzNC42MjgyIDM0LjM4OTIgMzMuNDU0OEMzNC4zNDA0IDMxLjk4ODEgMzcuNDIwNCAzMi4wODU5IDM4LjM5ODIgMzIuMDM3QzM5LjE4MDUgMzIuMDM3IDQwLjEwOTQgMzIuMTgzNyA0MC45ODk0IDMyLjQyODFDNDAuODQyNyAzMi41NzQ4IDQwLjc5MzggMzIuNzIxNCA0MC43NDUgMzIuODE5MlpNMzYuMjQ3MSA0My44Njg0QzM1Ljc1ODIgNDIuNDAxNyAzOS43NjcyIDQyLjc5MjggMzkuNzY3MiA0Mi43OTI4QzM3LjU2NzEgNDQuNTA0IDM2LjI0NzEgNDMuODY4NCAzNi4yNDcxIDQzLjg2ODRaIiBmaWxsPSIjREFFMkU5Ii8+CjxwYXRoIGQ9Ik0xNDYuMjk1IDEzNy43MzhDMTQ2Ljk3OSAxMzcuMTAyIDE0OC42NDEgMTM3LjA1MyAxNDkuMjI4IDEzNi45NTZDMTUwLjAxIDEzNi44NTggMTUwLjY5NSAxMzYuNjEzIDE1MS4zMyAxMzYuMjIyQzE1MC42NDYgMTM1LjkyOSAxNTAuMDEgMTM1LjQ0IDE0OS40MjQgMTM1QzE0OC4zNDggMTM1LjI5MyAxNDcuMDc3IDEzNS4xOTYgMTQ2LjA5OSAxMzUuNjg0QzE0NC45MjYgMTM2LjIyMiAxNDMuODUgMTM3LjE1MSAxNDQuMDQ2IDEzOC41NjlDMTQ0LjE0MyAxMzkuMjA1IDE0NC43MyAxMzkuNDk4IDE0NS4yMTkgMTM5LjQ0OUMxNDYuMTQ4IDEzOS43OTEgMTQ4LjgzNyAxNDAuODE4IDE0OS45MTIgMTQxLjY5OEMxNDguNjQxIDE0MS43OTYgMTQ3LjI3MiAxNDEuMzU2IDE0Ni4wMDEgMTQxLjg5NEMxNDQuOTI2IDE0Mi4zODIgMTQ0LjI5IDE0My4yMTQgMTQ0LjA5NCAxNDQuMzM4QzE0NC4wNDYgMTQ0LjcyOSAxNDQuMTQzIDE0NS4yNjcgMTQ0LjU4MyAxNDUuNDE0QzE0NS42NTkgMTQ1Ljg1NCAxNDYuNjg2IDE0Ni4yOTQgMTQ3LjY2MyAxNDYuODhDMTQ4LjI1IDE0Ny4yMjMgMTUwLjQ5OSAxNDcuOTU2IDE0OC45ODMgMTQ4LjI0OUMxNDcuNTY2IDE0OC40OTQgMTQ2LjI5NSAxNDcuODA5IDE0NC44NzcgMTQ4LjM0N0MxNDIuMjM3IDE0OS4zNzQgMTQyLjkyMSAxNTEuODE4IDE0My43MDMgMTUzLjkyQzE0My43NTIgMTU0LjAxOCAxNDMuNzUyIDE1NC4wNjcgMTQzLjgwMSAxNTQuMTY1QzE0My45NDggMTUzLjUyOSAxNDQuMzM5IDE1Mi45OTIgMTQ0Ljk3NSAxNTIuNTAzQzE0NS4wMjMgMTUyLjQ1NCAxNDUuMTIxIDE1Mi40MDUgMTQ1LjE3IDE1Mi40MDVDMTQ0LjgyOCAxNTEuNTc0IDE0NC42ODEgMTUwLjY0NSAxNDUuNzA4IDE1MC4wNThDMTQ2LjYzNyAxNDkuNTY5IDE0OC4wMDYgMTUwLjIwNSAxNDkuMDMyIDE1MC4xNTZDMTQ5Ljk2MSAxNTAuMTA3IDE1MS4yMzIgMTQ5Ljk2IDE1MS42NzIgMTQ4Ljk4M0MxNTIuNjUgMTQ2Ljc4MyAxNDguNDk1IDE0NC44NzYgMTQ2LjM5MiAxNDMuOTk2QzE0Ny40NjggMTQyLjg3MSAxNTAuNTQ4IDE0My42NTQgMTUxLjgxOSAxNDMuMDY3QzE1Mi4xMTIgMTQyLjkyIDE1Mi4zMDggMTQyLjUyOSAxNTIuMzA4IDE0Mi4xODdDMTUyLjMwOCAxNDAuMDM2IDE0OC40OTUgMTM4LjUyIDE0Ni4yOTUgMTM3LjczOFoiIGZpbGw9IiNEQUUyRTkiLz4KPHBhdGggZD0iTTIxLjI2MjQgMTQuMjk2NEMyMC41Nzc5IDE0LjI0NzUgMTkuNjAwMiAxMy43MDk3IDE5LjExMTMgMTMuMDI1M0MyMC4wNDAyIDEyLjgyOTcgMjEuMDE4IDEyLjQ4NzUgMjEuODQ5MSAxMS45MDA4QzIyLjc3OCAxMS4zMTQxIDIzLjc1NTggMTAuNDM0MSAyMy40NjI0IDkuMjYwNzRDMjMuMTY5MSA4LjEzNjI3IDIxLjg5OCA3Ljg5MTgyIDIwLjg3MTMgOC4wMzg0OUMxOS4zNTU3IDguMjgyOTQgMTcuODg5IDkuNjAyOTcgMTcuMjUzNCAxMS4xNjc1QzE2LjcxNTYgMTEuMTE4NiAxNi4xNzc5IDEwLjk3MTkgMTUuNjg5IDEwLjcyNzRDMTQuODA4OSAxMS4wMjA4IDEzLjkyODkgMTEuMTE4NiAxMyAxMC45NzE5QzEzLjA0ODkgMTEuMTE4NiAxMy4xNDY3IDExLjMxNDEgMTMuMjkzMyAxMS40MTE5QzE0LjM2ODkgMTIuMzg5NyAxNS41OTEyIDEyLjkyNzUgMTYuOTExMiAxMy4wNzQyQzE2LjkxMTIgMTMuMzE4NiAxNi45NjAxIDEzLjYxMiAxNy4wNTc5IDEzLjg1NjRDMTcuODg5IDE2LjU0NTQgMjAuOTY5MSAxNi40NDc2IDIzLjQxMzYgMTUuOTA5OEMyMy41NjAyIDE1Ljc2MzEgMjMuNzU1OCAxNS42MTY0IDIzLjkwMjUgMTUuNDIwOUMyNC4zNDI1IDE0Ljg4MzEgMjQuMjkzNiAxNC4yOTY0IDI0LjM0MjUgMTMuNzA5N0MyNC4zNDI1IDEzLjcwOTcgMjQuMzQyNSAxMy43MDk3IDI0LjI5MzYgMTMuNjYwOEMyMy4zNjQ3IDE0LjAwMzEgMjIuMjQwMiAxNC4zOTQyIDIxLjI2MjQgMTQuMjk2NFpNMjEuNDU4IDkuNzQ5NjRDMjEuNDU4IDkuNzQ5NjQgMjMuMTY5MSAxMC41ODA4IDE4Ljg2NjggMTEuNDYwOEMxOC44NjY4IDExLjQ2MDggMjAuMzMzNSA4LjkxODUxIDIxLjQ1OCA5Ljc0OTY0WiIgZmlsbD0iI0RBRTJFOSIvPgo8cGF0aCBkPSJNODIuOTQ5OSA0Ni44ODYzQzgyLjk0OTkgNDYuODg2MyA3OC45NDA5IDQ4Ljc0NDIgNzcuNzY3NiA1Ny45ODQ0Qzc3Ljc2NzYgNTcuOTg0NCA4MS4yMzg4IDU3LjA1NTUgODIuOTAxIDU5LjAxMTFDODIuOTAxIDU5LjAxMTEgODMuNjM0NCA1Mi41NTc2IDg5LjAxMjMgNDkuMTg0MkM4OS4wMTIzIDQ5LjE4NDIgODYuMzIzNCA0NS45MDg1IDgyLjk0OTkgNDYuODg2M1oiIGZpbGw9IiNEQUUyRTkiLz4KPHBhdGggZD0iTTEyOS40MzQgMTIzLjI2MkMxMjkuNDM0IDEyMy4yNjIgMTI2LjA2MSAxMjYuMDk4IDEyNy4zODEgMTM1LjI4OUMxMjcuMzgxIDEzNS4yODkgMTMwLjUwOSAxMzMuNDMxIDEzMi42MTIgMTM0Ljk0N0MxMzIuNjEyIDEzNC45NDcgMTMxLjYzNCAxMjguNTQyIDEzNS44ODcgMTIzLjg0OUMxMzUuODg3IDEyMy44OTcgMTMyLjQxNiAxMjEuNDUzIDEyOS40MzQgMTIzLjI2MloiIGZpbGw9IiNEQUUyRTkiLz4KPHBhdGggZD0iTTYxLjg4MzMgMTEwLjYxNkM2MC42OTM1IDEwOS4wOTggNTguMzgyOSAxMDYuNTgzIDU4LjQ3NzEgMTA0LjQ1NUM1OC44MzkyIDEwNC43IDU5LjIwMTMgMTA0Ljk0NSA1OS41NjM0IDEwNS4xOUM2MS4zODcyIDEwNi4yNCA2Ni44MzggMTA4LjA1NiA2OC4wNTkgMTA1LjIzOUM2OS4yOTg2IDEwMi4zNTYgNjQuOTEwNSAxMDAuMzM1IDYyLjgzMzQgOTkuOTMxOUM2MC45OTg2IDk5LjU2MDkgNTkuMjA2IDEwMC4wNjMgNTguMDA5OCAxMDEuMTI4QzU2Ljg4MTMgOTkuNTE5MSA1Ni40NTg3IDk3LjU2OTUgNTcuOTc0OCA5NS44NzYzQzU4Ljg4NjEgOTQuODAzNSA2MC40NjAyIDk0LjMxMTQgNjIuMTExNSA5NC4wNTY1QzYyLjU4ODEgOTQuNDA1NiA2My4wODMzIDk0LjY4ODEgNjMuNTU0NiA5NC45MjhDNjQuOTg3MSA5NS41ODExIDcwLjI3MDMgOTcuMDk4OCA3MC4wMzIgOTMuOThDNjkuODA5NSA5MS4xODg5IDY0LjcxMTkgOTEuNjk4IDYyLjU4NjQgOTIuMTA3MkM2Mi4wNjIgOTEuNjcyOSA2MS41Mzc1IDkxLjIzODYgNjEuMTE2OSA5MC42ODk4QzU5LjMzMDggODguNjA5IDU3LjM2NzMgODQuMjE2NSA1OS45NzgyIDgyLjA3NjRDNTkuNjAwMiA4MS41MDM3IDU5LjM1MDIgODAuODU5MSA1OS4yNzU5IDgwLjIyNzlDNTQuODQ1NyA4My4yMjIxIDU2LjkyNTcgODkuMTE5MyA2MC4zNTcxIDkyLjYzMDlDNTcuNzI1NSA5My40MzY3IDU1LjE0OTUgOTQuOTQwMyA1NS4wMzExIDk3LjkyMzFDNTQuOTQ1IDk5Ljc2NiA1NS42NjYgMTAxLjU0OCA1Ni43ODM5IDEwMi45MzlDNTYuNTkxOSAxMDMuNDk1IDU2LjQ5MDUgMTA0LjExMyA1Ni40Nzk1IDEwNC43OTJDNTYuNTM3MiAxMDYuODkxIDU3LjY3MSAxMDguNjA5IDU4Ljk1MTMgMTEwLjE4OUM1OS4yNzYxIDExMC41NjcgNjAuNDg0NSAxMTIuMDE5IDYxLjYwNzcgMTEzLjUxOUM2My41MDA2IDExNS4wOTEgNjQuODc2NyAxMTYuODQxIDYzLjg3OTQgMTE5Ljc1N0M2OC4wNzIyIDExNy43MzggNjMuNDkzNyAxMTIuNjg0IDYxLjg4MzMgMTEwLjYxNlpNNjguMTQ2NCA5My45MThDNjguMDAyIDk1LjQ1NzIgNjQuNDUwMSA5My41Mjc1IDY0LjQ1MDEgOTMuNTI3NUM2Ny4xMjk2IDkyLjgwNyA2OC4xNDY0IDkzLjkxOCA2OC4xNDY0IDkzLjkxOFpNNTkuMzI3NSAxMDIuNTc1QzU5LjQzMTQgMTAyLjQ2IDU5LjUxNjYgMTAyLjQxMyA1OS42MjA1IDEwMi4yOThDNjAuNjE0MiAxMDEuNTcxIDYyLjM5NTggMTAxLjc0OCA2My41MDM2IDEwMi4wMjNDNjQuMzAyNSAxMDIuMjQ3IDY2LjE4MjMgMTAzLjA5NyA2NS43MzE4IDEwNC4xOTJDNjUuMTYzOSAxMDUuNTc2IDYyLjQwODEgMTA0LjI2NSA2MS40OTQ3IDEwMy45MzdDNjAuNzgxMSAxMDMuNjY1IDYwLjAxNDMgMTAzLjE5OCA1OS4zMjc1IDEwMi41NzVaIiBmaWxsPSIjREFFMkU5Ii8+CjxwYXRoIGQ9Ik0xMDQuNzYzIDUxLjMzNDhDMTA0LjY2NSA1MS4yMzcxIDEwNC41MTkgNTEuMDkwNCAxMDQuNDIxIDUwLjk5MjZDMTAzLjAwMyA1MC4wMTQ4IDEwMS41MzYgNTEuMjM3MSAxMDAuNTU5IDUyLjQxMDRDMTAwLjUxIDUyLjU1NzEgMTAwLjUxIDUyLjcwMzggMTAwLjUxIDUyLjgwMTVDMTAwLjUxIDUzLjI0MTUgMTAwLjcwNSA1My40ODYgMTAwLjk1IDUzLjc3OTNDMTAxLjI5MiA1My4yOTA0IDEwMS43MzIgNTIuNjU0OSAxMDIuMjIxIDUyLjM2MTVDMTAyLjU2MyA1Mi4xNjYgMTAzLjI0OCA1Mi4wMTkzIDEwMy43MzcgNTIuMTY2QzEwMy4zNDUgNTIuNjA2IDEwMy4wMDMgNTMuMTQzOCAxMDIuODA4IDUzLjczMDRDMTAyLjU2MyA1NC4zNjYgMTAyLjQxNiA1NS4xNDgzIDEwMy4wMDMgNTUuNTg4M0MxMDMuNTQxIDU1Ljk3OTQgMTA0LjI3NCA1NS42MzcyIDEwNC43MTQgNTUuMTk3MUMxMDUuMzUgNTQuNTEyNyAxMDUuNTk0IDUzLjMzOTMgMTA1LjM1IDUyLjM2MTVDMTA1LjY0MyA1Mi4xNjYgMTA1LjkzNyA1Mi4wNjgyIDEwNi4yNzkgNTEuOTcwNEMxMDYuNjIxIDUxLjQ4MTUgMTA3LjAxMiA1MS4xMzkzIDEwNy41MDEgNTAuODQ1OUMxMDcuNDAzIDUwLjc5NyAxMDcuMzA1IDUwLjc0ODIgMTA3LjIwOCA1MC43NDgyQzEwNi4yMyA1MC42OTkzIDEwNS40NDggNTAuOTQzNyAxMDQuNzYzIDUxLjMzNDhaTTEwMy43MzcgNTQuNjU5NEMxMDMuNzM3IDU0LjY1OTQgMTAyLjYxMiA1NC45MDM4IDEwNC4zNzIgNTIuODUwNEMxMDQuNDIxIDUyLjg5OTMgMTA0LjYxNyA1NC42NTk0IDEwMy43MzcgNTQuNjU5NFoiIGZpbGw9IiNEQUUyRTkiLz4KPHBhdGggZD0iTTE0LjM5ODIgMTM5LjIyOUMxNC4zOTgyIDEzOS4yMjkgMTQuNTQ0OSAxNDAuNDUxIDEzLjgxMTUgMTQwLjk4OUMxMy44MTE1IDE0MC45ODkgMTUuODY0OSAxNDEuNTI3IDE2LjY5NiAxNDMuNDgyQzE2LjY5NiAxNDMuNDgyIDE3Ljg2OTQgMTQyLjcgMTcuNzcxNiAxNDEuNDc4QzE3LjcyMjcgMTQxLjQ3OCAxNy4zMzE2IDE0MC4wMTEgMTQuMzk4MiAxMzkuMjI5WiIgZmlsbD0iI0Y0RjZGOCIvPgo8cGF0aCBkPSJNMTMuOTY2IDk5LjIyOTRDMTMuOTY2IDk5LjIyOTQgMTIuMzUyNiAxMDAuNTk4IDEwLjI1MDMgMTAwLjEwOUMxMC4yNTAzIDEwMC4xMDkgMTAuMjAxNCAxMDEuNTI3IDExLjI3NyAxMDIuMTE0QzExLjI3NyAxMDIuMTE0IDEyLjY5NDggMTAyLjY1MiAxNS4wNDE2IDEwMC42OTZDMTQuOTkyNyAxMDAuNjk2IDEzLjkxNzEgMTAwLjEwOSAxMy45NjYgOTkuMjI5NFoiIGZpbGw9IiNGNEY2RjgiLz4KPHBhdGggZD0iTTguMzUzMDQgMTMxLjM1MUM4LjIwNjM3IDEzMi4zNzggOC4wNTk3MSAxMzMuNTUyIDcuNTcwODEgMTM0LjM4M0M3LjIyODU4IDEzNC45NjkgNi4zNDg1NSAxMzUuNjU0IDUuNTE3NDIgMTM1LjhDNS43NjE4NyAxMzQuODcyIDUuODEwNzYgMTMzLjg0NSA1LjY2NDA5IDEzMi44MThDNS41MTc0MiAxMzEuNzQzIDUuMTc1MTkgMTMwLjQ3MSAzLjk1MjkzIDEzMC4yNzZDMi44Mjg0NiAxMzAuMDggMi4wNDYyMiAxMzEuMTA3IDEuNzUyODggMTMyLjA4NUMxLjM2MTc2IDEzMy41NTIgMS45NDg0MyAxMzUuNDU4IDMuMDI0MDEgMTM2LjY4QzIuNzMwNjcgMTM3LjE2OSAyLjM4ODQ2IDEzNy41NiAxLjk0ODQ1IDEzNy45MDNDMS44NTA2NyAxMzguODMyIDEuNTU3MzIgMTM5LjY2MyAxLjAxOTUzIDE0MC40NDVDMS4xNjYyIDE0MC40OTQgMS4zNjE3NSAxNDAuNDQ1IDEuNTU3MzEgMTQwLjM5NkMyLjg3NzM0IDEzOS44NTggMy45MDQwNCAxMzguOTI5IDQuNTg4NSAxMzcuODU0QzQuODMyOTUgMTM3Ljk1MiA1LjA3NzQyIDEzOC4wNDkgNS4zNzA3NiAxMzguMDQ5QzguMTU3NDkgMTM4LjQ0MSA5LjM3OTczIDEzNS42MDUgOS45MTc1MyAxMzMuMTZDOS44Njg2NCAxMzIuOTY1IDkuNzcwODYgMTMyLjcyIDkuNjczMDggMTMyLjUyNUM5LjQ3NzUyIDEzMS44NCA4Ljg5MDgzIDEzMS42NDUgOC4zNTMwNCAxMzEuMzUxWk00LjAwMTgxIDEzNS4zMTJDNC4wMDE4MSAxMzUuMzEyIDIuMzM5NTcgMTMyLjkxNiAzLjU2MTgyIDEzMi4yMzFDMy41NjE4MiAxMzIuMjMxIDQuOTc5NjEgMTMxLjAwOSA0LjAwMTgxIDEzNS4zMTJaIiBmaWxsPSIjREFFMkU5Ii8+CjxwYXRoIGQ9Ik02MC45NTU2IDE0NUM2MC45NTU2IDE0NSA2MC42NjIzIDE0OC43NjUgNTkgMTUwLjg2N0M1OSAxNTAuODY3IDYyLjgxMzQgMTUyLjEzOCA2NC44NjY4IDE1MC44NjdDNjQuODY2OCAxNTAuODY3IDY2Ljg3MTMgMTQ4LjgxMyA2Ny42MDQ3IDE0NS44MzFDNjcuNjUzNiAxNDUuNzgyIDYzLjA1NzkgMTQ3LjgzNiA2MC45NTU2IDE0NVoiIGZpbGw9IiNEQUUyRTkiLz4KPHBhdGggZD0iTTk3LjIyOTggMTQuMTEwMkM5Ni41OTQyIDE0LjE1OTEgOTYuMjUyIDE0LjY5NjkgOTYuMjUyIDE1LjIzNDdDOTUuODYwOSAxNi4xMTQ3IDk0LjU4OTcgMTguNzU0OCA5My42MTE5IDE5LjczMjZDOTMuNjExOSAxOC40NjE0IDk0LjE5ODYgMTcuMDkyNSA5My43MDk3IDE1LjgyMTRDOTMuMzE4NiAxNC42OTY5IDkyLjUzNjMgMTQuMDEyNCA5MS40MTE4IDEzLjcxOTFDOTEuMDIwNyAxMy42MjEzIDkwLjQ4MjkgMTMuNzE5MSA5MC4yODc0IDE0LjExMDJDODkuNzk4NSAxNS4xMzY5IDg5LjI2MDcgMTYuMTE0NyA4OC41NzYyIDE3LjA0MzZDODguMTg1MSAxNy42MzAzIDg3LjI1NjIgMTkuNzgxNSA4Ny4xMDk1IDE4LjI2NTlDODcuMDExNyAxNi44NDgxIDg3Ljc0NTEgMTUuNjI1OCA4Ny4zMDUxIDE0LjE1OTFDODYuNDc0IDExLjQyMTMgODQuMDI5NSAxMS45NTkxIDgxLjgyOTQgMTIuNTQ1N0M4MS43MzE2IDEyLjU0NTcgODEuNjgyNyAxMi41OTQ2IDgxLjU4NSAxMi42NDM1QzgyLjE3MTYgMTIuODM5MSA4Mi43NTgzIDEzLjI3OTEgODMuMTQ5NCAxMy45MTQ3QzgzLjE5ODMgMTQuMDEyNCA4My4xOTgzIDE0LjA2MTMgODMuMTk4MyAxNC4xNTkxQzg0LjA3ODMgMTMuOTE0NyA4NS4wMDczIDEzLjc2OCA4NS40OTYyIDE0Ljg5MjVDODUuODg3MyAxNS44NzAzIDg1LjE1MzkgMTcuMTQxNCA4NS4xNTM5IDE4LjE2ODFDODUuMTUzOSAxOS4wOTcgODUuMjAyOCAyMC4zNjgyIDg2LjEzMTcgMjAuODU3MUM4OC4yMzQgMjIuMDMwNCA5MC40ODI5IDE4LjAyMTQgOTEuNTA5NiAxNS45NjgxQzkyLjUzNjMgMTcuMTQxNCA5MS41MDk2IDIwLjE3MjYgOTEuOTk4NSAyMS40NDM3QzkyLjA5NjMgMjEuNzg2IDkyLjQ4NzQgMjEuOTgxNSA5Mi44Mjk3IDIxLjk4MTVDOTUuMDc4NiAyMi4xMjgyIDk2Ljg4NzUgMTguNTEwMyA5Ny44NjUzIDE2LjM1OTJDOTguNDAzMSAxNy4wOTI1IDk4LjQwMzEgMTguNzU0OCA5OC40MDMxIDE5LjM0MTVDOTguNDUyIDIwLjEyMzcgOTguNTk4NyAyMC44MDgyIDk4Ljk0MDkgMjEuNDkyNkM5OS4zMzIgMjAuODA4MiA5OS44MjA5IDIwLjIyMTUgMTAwLjMxIDE5LjY4MzdDMTAwLjExNCAxOC42MDgxIDEwMC4zMSAxNy4zMzcgOTkuOTE4NyAxNi4zMTAzQzk5LjQ3ODcgMTUuMTg1OCA5OC42NDc2IDE0LjAxMjQgOTcuMjI5OCAxNC4xMTAyWiIgZmlsbD0iI0RBRTJFOSIvPgo8cGF0aCBkPSJNNTguMjE0IDE4LjAwNzJDNTguMjE0IDE4LjAwNzIgNTYuNzk2MiAxNy44NjA2IDU2LjExMTggMTguODg3M0M1Ni4xMTE4IDE4Ljg4NzMgNTUuNDc2MiAyMC4yNTYyIDU3LjIzNjIgMjIuNzQ5NkM1Ny4yMzYyIDIyLjc0OTYgNTcuOTIwNyAyMS43MjI5IDU4LjgwMDcgMjEuODIwN0M1OC44MDA3IDIxLjc3MTggNTcuNTc4NSAyMC4wNjA2IDU4LjIxNCAxOC4wMDcyWiIgZmlsbD0iI0Y0RjZGOCIvPgo8cGF0aCBkPSJNNzIuMjAwMyAxMC42OTc0QzcxLjQxODEgMTAuOTkwOCA3MC4wNDkyIDExLjYyNjMgNjkuMTIwMiAxMS4zMzNDNjkuMjY2OSAxMS4yMzUyIDY5LjQxMzYgMTEuMDg4NSA2OS41NjAyIDEwLjk5MDhDNzAuMjQ0NyAxMC4zNTUyIDcxLjc2MDMgOC4zMDE4MSA3MC43MzM2IDcuNDIxNzlDNjkuNzA2OSA2LjQ5Mjg4IDY4LjI0MDIgOC4xMDYyNSA2Ny44MDAyIDguODg4NDlDNjcuNDA5MSA5LjYyMTg1IDY3LjM2MDIgMTAuNDUzIDY3LjY1MzUgMTEuMDg4NUM2Ni44MjI0IDExLjMzMyA2NS45NDI0IDExLjIzNTIgNjUuNDUzNSAxMC40MDQxQzY1LjExMTMgOS44NjYzIDY1LjExMTIgOS4xMzI5NCA2NS4yNTc5IDguMzk5NTlDNjUuNDUzNSA4LjI1MjkyIDY1LjY0OTEgOC4wNTczNiA2NS43OTU3IDcuOTEwNjlDNjYuMjg0NiA3LjQyMTc5IDY3LjYwNDcgNS4zNjg0MSA2Ni4yODQ2IDUuMDI2MThDNjUuMDYyNCA0LjczMjg0IDY0LjYyMjQgNi45ODE3OCA2NC40NzU3IDcuOTEwNjlDNjQuMjMxMiA4LjEwNjI1IDYzLjkzNzkgOC4yNTI5MiA2My42OTM0IDguMzUwN0M2Mi41NjkgOC44Mzk2IDYwLjQ2NjcgOS4wODQwNSA1OS44OCA3LjY2NjI0QzU5LjU4NjcgNy43NjQwMiA1OS4yOTMzIDcuNzY0MDIgNTkgNy43MTUxM0M1OS42ODQ1IDEwLjAxMyA2Mi40MjIzIDkuOTE1MTkgNjQuMzc3OSA4LjkzNzM4QzY0LjM3NzkgMTAuMTU5NiA2NC42NzEyIDExLjQzMDggNjUuODkzNSAxMS45MTk3QzY2LjY3NTcgMTIuMjEzIDY3LjUwNjkgMTIuMTY0MSA2OC4yNDAyIDExLjg3MDhDNjguNDM1OCAxMi4wMTc1IDY4LjY4MDIgMTIuMTY0MSA2OC45NzM2IDEyLjI2MTlDNjkuODUzNiAxMi41MDY0IDcwLjczMzYgMTIuMjYxOSA3MS42MTM2IDExLjk2ODZDNzEuODA5MiAxMS44NzA4IDcyLjU5MTQgMTEuNTc3NCA3My4zNzM3IDExLjI4NDFDNzQuMzAyNiAxMC42OTc0IDc1LjIzMTUgMTAuMzU1MiA3Ni4zMDcxIDExLjEzNzRDNzYuMDYyNiA5LjAzNTE2IDczLjI3NTkgMTAuMzA2MyA3Mi4yMDAzIDEwLjY5NzRaTTY1Ljk5MTMgNS44MDg0MkM2Ni42MjY4IDYuMDUyODcgNjUuMzU1NyA3LjMyNDAxIDY1LjM1NTcgNy4zMjQwMUM2NS40MDQ2IDYuMTAxNzYgNjUuOTkxMyA1LjgwODQyIDY1Ljk5MTMgNS44MDg0MlpNNjguNDM1OCAxMC42OTc0QzY4LjM4NjkgMTAuNjQ4NSA2OC4zODY5IDEwLjU5OTYgNjguMzg2OSAxMC41NTA4QzY4LjE5MTMgMTAuMDEzIDY4LjUzMzYgOS4yNzk2MSA2OC43NzggOC44ODg0OUM2OC45NzM2IDguNTk1MTUgNjkuNjA5MSA3LjkxMDY5IDcwLjAwMDMgOC4yNTI5MkM3MC40ODkyIDguNjkyOTMgNjkuNjA5MSA5LjY3MDc0IDY5LjMxNTggMTAuMDEzQzY5LjEyMDIgMTAuMjA4NSA2OC44MjY5IDEwLjUwMTkgNjguNDM1OCAxMC42OTc0WiIgZmlsbD0iI0Y0RjZGOCIvPgo8cGF0aCBkPSJNMTQyLjkzNCA4Ni45NDM5QzE0Mi41OTIgODUuNzIxNyAxNDEuODU4IDg0LjQ5OTQgMTQwLjQ0IDg0LjQ1MDZDMTM5LjgwNSA4NC40NTA2IDEzOS40MTQgODQuOTM5NCAxMzkuMzY1IDg1LjQ3NzJDMTM4Ljg3NiA4Ni4zMDg0IDEzNy40NTggODguODUwNyAxMzYuMzgzIDg5LjczMDdDMTM2LjQ4IDg4LjQ1OTUgMTM3LjE2NSA4Ny4xMzk1IDEzNi44MjMgODUuODY4NEMxMzYuNTI5IDg0Ljc0MzkgMTM1Ljg0NSA4My45NjE3IDEzNC43MiA4My42MTk0QzEzNC4zMjkgODMuNTIxNiAxMzMuNzkxIDgzLjUyMTYgMTMzLjU0NyA4My45MTI4QzEzMi45NiA4NC44OTA2IDEzMi4zMjUgODUuODE5NSAxMzEuNTkxIDg2LjY5OTVDMTMxLjE1MSA4Ny4yMzczIDEzMC4wNzYgODkuMjkwNyAxMzAuMDI3IDg3Ljc3NTFDMTMwLjAyNyA4Ni4zNTczIDEzMC45MDcgODUuMTgzOSAxMzAuNTY1IDgzLjY2ODNDMTI5Ljk3OCA4MC44ODE2IDEyNy40ODUgODEuMTc0OSAxMjUuMjM2IDgxLjYxNDlDMTI1LjEzOCA4MS42MTQ5IDEyNS4wODkgODEuNjYzOCAxMjQuOTkxIDgxLjcxMjdDMTI1LjU3OCA4MS45NTcyIDEyNi4wNjcgODIuNDQ2MSAxMjYuNDA5IDgzLjEzMDVDMTI2LjQ1OCA4My4yMjgzIDEyNi40NTggODMuMjc3MiAxMjYuNDU4IDgzLjM3NUMxMjcuMzM4IDgzLjE3OTQgMTI4LjMxNiA4My4xNzk0IDEyOC42NTggODQuMzAzOUMxMjkgODUuMjgxNyAxMjguMTIgODYuNTUyOCAxMjguMDIyIDg3LjUzMDZDMTI3LjkyNSA4OC40NTk1IDEyNy44NzYgODkuNzMwNyAxMjguNzU2IDkwLjMxNzRDMTMwLjc2IDkxLjYzNzQgMTMzLjM1MSA4Ny44NzI5IDEzNC41MjUgODUuOTE3M0MxMzUuNDU0IDg3LjEzOTUgMTM0LjE4MyA5MC4wNzI5IDEzNC41MjUgOTEuNDQxOEMxMzQuNjIzIDkxLjc4NDEgMTM0Ljk2NSA5MS45Nzk2IDEzNS4zMDcgOTIuMDI4NUMxMzcuNTU2IDkyLjM3MDcgMTM5LjY1OCA4OC44OTk1IDE0MC43ODMgODYuODQ2MkMxNDEuMjcyIDg3LjYyODQgMTQxLjA3NiA4OS4yOTA3IDE0MS4wNzYgODkuODc3M0MxNDEuMDc2IDkwLjY1OTYgMTQxLjE3NCA5MS4zOTI5IDE0MS40NjcgOTIuMDc3NEMxNDEuOTA3IDkxLjQ0MTggMTQyLjQ0NSA5MC45MDQgMTQyLjk4MyA5MC40MTUxQzE0Mi45MzQgODkuMjQxOCAxNDMuMjI3IDg4LjAxOTUgMTQyLjkzNCA4Ni45NDM5WiIgZmlsbD0iI0RBRTJFOSIvPgo8cGF0aCBkPSJNMTEzLjU5NCAxMTMuMjg5QzExMy41OTQgMTEzLjI4OSAxMTQuMTggMTEzLjU4MiAxMTQuMzc2IDExMy44NzVDMTE0LjM3NiAxMTMuODc1IDExNS4zNTQgMTEyLjAxOCAxMTguMDkyIDExMC42TDExNy4wNjUgMTEwLjAxM0MxMTcuMDY1IDExMC4wMTMgMTE1LjAxMiAxMTEuMTM4IDExMy41OTQgMTEzLjI4OVoiIGZpbGw9IiNEQUUyRTkiLz4KPHBhdGggZD0iTTE2My4yNjQgNTMuMzEzOEMxNjIuNTE1IDUwLjY5MTIgMTYxLjAyMSA0OC4wNTM3IDE1OC4wOTYgNDcuOTAyM0MxNTYuMjI3IDQ3LjgxMDUgMTU0LjQ1MiA0OC40NTc0IDE1My4wMTcgNDkuNTg1MkMxNTIuNDMyIDQ5LjM2MiAxNTEuODU0IDQ5LjI0OCAxNTEuMTMzIDQ5LjI3NTJDMTQ5LjA1MyA0OS4zMDczIDE0Ny4yNjYgNTAuNDE1MyAxNDUuNjYyIDUxLjY0MjJDMTQ1LjIyMyA1MS45NTcgMTQzLjgzNyA1My4xNjkxIDE0Mi4yNjggNTQuMjYyMkMxNDAuNjQyIDU2LjEyNjEgMTM4Ljg3IDU3LjQ1MjIgMTM1Ljk3NyA1Ni40ODc4QzEzNy45MjcgNjAuNjcyMiAxNDMuMDMyIDU2LjEzODcgMTQ1LjE1OCA1NC41NDc0QzE0Ni42NzggNTMuMzcgMTQ5LjIzOSA1MS4wNjk4IDE1MS4zNzYgNTEuMjMxQzE1MS4xMTMgNTEuNTU1NyAxNTAuODMzIDUxLjk0NzQgMTUwLjYzNyA1Mi4yODk0QzE0OS41OTggNTQuMDkxNSAxNDcuNjIyIDU5LjUwNzYgMTUwLjQyOCA2MC44MDY3QzE1My4yNzYgNjIuMDgwOSAxNTUuMzkzIDU3Ljc3MjggMTU1Ljg2NCA1NS42ODA3QzE1Ni4yNjYgNTMuODU2MyAxNTUuODM3IDUyLjA2NjYgMTU0LjcyNCA1MC44NDk1QzE1Ni4zMzYgNDkuNzMxNiAxNTguMjg0IDQ5LjM3OTcgMTU5Ljk4OSA1MC45MjlDMTYxLjAyMSA1MS45MTA3IDE2MS41MTkgNTMuNDMyNyAxNjEuNzY0IDU1LjEwMzVDMTYxLjQyNCA1NS41ODY4IDE2MS4xMjcgNTYuMDQ1NCAxNjAuODk2IDU2LjUyMTNDMTYwLjIwNSA1Ny45NDkxIDE1OC41OTEgNjMuMjA5MSAxNjEuNzM2IDYzLjA2MDVDMTY0LjUzIDYyLjg5MjEgMTY0LjExNCA1Ny43NDg1IDE2My43NzIgNTUuNjI0MUMxNjQuMTk2IDU1LjA5MTIgMTY0LjY4NyA1NC41NzU2IDE2NS4xODUgNTQuMTY5MUMxNjcuMzIyIDUyLjQwMTggMTcxLjczMiA1MC41NDU0IDE3My43OTYgNTMuMTg4QzE3NC4zODYgNTIuODQxIDE3NS4wMjYgNTIuNTc4MiAxNzUuNjggNTIuNTMzNkMxNzIuNzE4IDQ3Ljk3OTkgMTY2Ljg0OCA0OS45NTc3IDE2My4yNjQgNTMuMzEzOFpNMTUzLjY5NSA1Ni4zMzI2QzE1My40ODcgNTcuMTM1NyAxNTIuNTgyIDU4Ljk3MjUgMTUxLjQ1NCA1OC41MDE0QzE1MC4xMDEgNTcuOTM2MiAxNTEuNDI1IDU1LjE3MjQgMTUxLjgwMiA1NC4yNzAxQzE1Mi4xMDIgNTMuNTI2NSAxNTIuNjIgNTIuNzY3OSAxNTMuMjMgNTIuMDY4OUMxNTMuMzQ2IDUyLjE3MDYgMTUzLjM5NiA1Mi4yNTQ5IDE1My40NyA1Mi4zODEzQzE1NC4xOTkgNTMuNDI3NCAxNTMuOTkgNTUuMTk0OCAxNTMuNjk1IDU2LjMzMjZaTTE2MS43MjkgNjEuMDIyOUMxNjAuMTYyIDYwLjg2NjcgMTYyLjE4IDU3LjM1NDMgMTYyLjE4IDU3LjM1NDNDMTYyLjg2OSA2MC4wNjg2IDE2MS43MjkgNjEuMDIyOSAxNjEuNzI5IDYxLjAyMjlaIiBmaWxsPSIjREFFMkU5Ii8+CjxwYXRoIGQ9Ik02OS4yODY0IDExOC42NjFDNjkuOTUyNiAxMTYuMjIzIDY5LjI0NjMgMTEzLjU1IDY3LjU3MTMgMTExLjE2N0M2Ny4xNjc0IDExMC42NDIgNjYuOTM1OCAxMTAuMjM4IDY2LjQxODkgMTA5Ljg3NkM2Ni43NzQ5IDExMS41NzggNjYuOTA1MSAxMTMuNjA1IDY1Ljg4ODYgMTE1LjA3MkM2My4zNDQ2IDExOC4zNzMgNTcuNDc5MyAxMjAuNTU5IDUyLjk2MzUgMTIwLjA1OUM1MC45MzI1IDExNS45NzUgNTAuODI3MiAxMDkuODUgNTIuODU0NSAxMDYuMTg3QzUzLjY5ODYgMTA0LjYgNTUuNjM1OSAxMDQuMDIgNTcuMzQ3MiAxMDMuNzY2QzU3LjAwMjcgMTAzLjUyNSA1Ni4zNzI5IDEwMy4zMjYgNTUuNzQzMSAxMDMuMTI3QzUzLjExMSAxMDIuNDk0IDUwLjM3MTcgMTAyLjc1NSA0OC4zMjcyIDEwNC4yMjdDNDIuNDE5OCAxMDguMzIgNDAuODUzOSAxMTkuODA5IDQ0Ljk0NDYgMTMxLjYyOEM1Ny42NzgzIDEzMS4zNDcgNjcuNzk5IDEyNS42MDYgNjkuMjg2NCAxMTguNjYxWiIgZmlsbD0iI0VBNzMyNSIvPgo8cGF0aCBkPSJNNjYuMTk3OSAxMDkuODdDNjQuNTg4MiAxMDguNSA2My4wMzc5IDEwNy40MTUgNjIuMTc2NiAxMDYuODEyQzYxLjMxNTMgMTA2LjIwOSA1OS43NjUgMTA1LjEyMyA1Ny45Mjk0IDEwNC4wOEM1MS4zNTMgMTAyLjg2MyA0OC42ODg2IDExMi42MTMgNTEuOTU5NiAxMjEuOTIyQzYxLjg5MzMgMTIxLjYxOCA2OS43MjU0IDExNS40ODYgNjYuMTk3OSAxMDkuODdaIiBmaWxsPSIjRkZERjYyIi8+CjxwYXRoIGQ9Ik0xMDkuMjc0IDQwLjU3MjRDMTA5LjI3NCA0MC41NzI0IDg3LjMyMzEgNDAuMTM3NiA2My4zODggNzQuMTIzNkM1Ni4xOTEyIDg0LjQ1NDEgNTEuMTg1MiAxMDEuNjY5IDUxLjE4NTIgMTAxLjY2OUw2MS40NjQgMTA4LjgzTDEwOS4yNzQgNDAuNTcyNFoiIGZpbGw9IiMwRjQ3NzgiLz4KPHBhdGggZD0iTTEwOC44NzYgNDAuMzQ3OUMxMDguODc2IDQwLjM0NzkgMTE2Ljc3NyA2MC45NTE5IDkzLjEzIDk0Ljg5NTJDODUuOTMzMiAxMDUuMjI2IDcxLjM0NTEgMTE1Ljc2NiA3MS4zNDUxIDExNS43NjZMNjEuMDY2MiAxMDguNjA1TDEwOC44NzYgNDAuMzQ3OVoiIGZpbGw9IiMwRjQ3NzgiLz4KPHBhdGggZD0iTTk3LjYzMjQgODYuOTEwNkM5OS45MzEzIDEwMS4zOTUgOTguMDk2OSAxMTYuNjM3IDk4LjA5NjkgMTE2LjYzN0M5OC4wOTY5IDExNi42MzcgODUuNjg3MSAxMzIuMjcgNzMuNzc2MyAxMzguMjg4TDc2Ljg1OTUgMTA2LjQyM0w5Ny42MzI0IDg2LjkxMDZaIiBmaWxsPSIjODdCRkVDIi8+CjxwYXRoIGQ9Ik02OS4xNzk4IDY2Ljk2OThDNTQuODI5OSA2OS44MjY3IDQxLjMxNjMgNzYuNjY5NSA0MS4zMTYzIDc2LjY2OTVDNDEuMzE2MyA3Ni42Njk1IDMwLjgxNDYgOTMuNjM0MSAyOS4zMDk3IDEwNi45MTlMNTguMTE5MiA5My4yNjM3TDY5LjE3OTggNjYuOTY5OFoiIGZpbGw9IiM4N0JGRUMiLz4KPHBhdGggZD0iTTExNC45MDMgMzIuMDQzN0MxMTQuOTAzIDMyLjA0MzcgODguODg2IDI5Ljg4MzUgNjMuNDAxNSA2Ni4yMTA3QzU1LjY4MzIgNzcuMzI0OSA1MS4yNDEyIDk2LjMxMjYgNTEuMjQxMiA5Ni4zMTI2TDYzLjg4MDUgMTA1LjE0Nkw3Ni41MTk5IDExMy45NzlDNzYuNTE5OSAxMTMuOTc5IDkyLjczNTYgMTAzLjIyIDEwMC40NTQgOTIuMTA1OUMxMjUuOTM4IDU1Ljc3ODcgMTE0LjkwMyAzMi4wNDM3IDExNC45MDMgMzIuMDQzN1oiIGZpbGw9IiMxQTc3Q0EiLz4KPHBhdGggZD0iTTg2Ljc4IDcyLjU1MjlDOTEuNTMwMiA3NS44ODAzIDk3LjkwNTUgNzQuOTM0IDEwMS4wMiA3MC40MzkxQzEwNC4xMzQgNjUuOTQ0MyAxMDIuODA3IDU5LjYwMyA5OC4wNTcxIDU2LjI3NTZDOTMuMzA2OSA1Mi45NDgxIDg2LjkzMTYgNTMuODk0NCA4My44MTc1IDU4LjM4OTNDODAuNzAzNSA2Mi44ODQxIDgyLjAyOTggNjkuMjI1NCA4Ni43OCA3Mi41NTI5WiIgZmlsbD0iI0NERTRGNyIvPgo8cGF0aCBkPSJNODUuNTkzNiA3NC4wOTA3QzgwLjAxODkgNzAuMTg2IDc4LjUzMDMgNjIuNDkyNyA4Mi4yOTc1IDU3LjA1NTZDODYuMDY0NiA1MS42MTg1IDkzLjc1NzkgNTAuMzU2NiA5OS4zMzI2IDU0LjI2MTNDMTA0LjkwNyA1OC4xNjYxIDEwNi4zOTYgNjUuODU5NCAxMDIuNjI5IDcxLjI5NjVDOTguNzUwOCA3Ni44OTM1IDkxLjE2ODMgNzcuOTk1NSA4NS41OTM2IDc0LjA5MDdaTTk2Ljc4NDMgNTcuOTM5M0M5My4zNDExIDU1LjUyNzYgODguNTA2MiA1Ni4xNzg5IDg2LjA2ODYgNTkuNjk3QzgzLjc0MTggNjMuMDU1MiA4NC41MzQ4IDY3Ljg4NjEgODguMTQyIDcwLjQxMjdDOTEuNTg1MiA3Mi44MjQ0IDk2LjQyIDcyLjE3MzEgOTguODU3NiA2OC42NTVDMTAxLjAyIDY1LjE4MTkgMTAwLjExNyA2MC41MTEgOTYuNzg0MyA1Ny45MzkzWiIgZmlsbD0iIzBGNDc3OCIvPgo8cGF0aCBkPSJNOTkuMzAzNCA0NC4yMTY5QzEwMC41NzIgNDQuMjk2MiAxMDIuMjY5IDQ0LjA5NDMgMTAyLjYzNSA0Mi43MTRDMTAyLjgzNCA0MS45NjE4IDEwMi44OSA0MS4yMzczIDEwMy4yOTkgNDAuNTYwNUMxMDMuNjQ2IDM5Ljk4NzMgMTA0LjExNCAzOS40OTggMTA0LjY3NCAzOS4xMjM0QzEwNi44ODYgMzcuNjQ1OCAxMDkuOTQxIDM4LjM1MTYgMTExLjY1NyA0MC40NjU5QzExMy4yNTQgNDIuNDI3NCAxMTMuMSA0NS41ODggMTEwLjk1NiA0Ni45MTI3QzEwOS43MTggNDcuNjc5OCAxMDguOTA1IDQ4LjM5NTUgMTA5LjM3OCA0OS45ODc5QzEwOS41MDQgNTAuNDIzMiAxMDkuOTYzIDUxLjI2MTIgMTA5LjY3MyA1MS42NzIxQzEwOS4yOTkgNTIuMjExOCAxMDguNjMyIDUwLjc3MSAxMDguNTczIDUwLjU5MDhDMTA4LjU1MiA1MC45MjU2IDEwOC45OTUgNTMuMzA2OSAxMDguMDI4IDUyLjc3OTFDMTA3LjEzOSA1Mi4yOTI1IDEwNy4xNjggNTAuNjg4NSAxMDYuOTk4IDQ5Ljg3MDZDMTA2LjcxMSA0OC40OTgzIDEwNS42NDggNTAuMzQ2IDEwNS4zOTUgNTAuNzAzM0MxMDUgNTEuMjcyNSAxMDMuNzY2IDUyLjEzMjEgMTAzLjUzMSA1MC44NDE5QzEwMy4zMzQgNDkuNzgxNyAxMDQuMjU2IDQ4Ljk1OTggMTA0LjI5NSA0Ny45NjQ5QzEwNC4zNDEgNDYuODc0NCAxMDIuNDk3IDQ3LjgyNTUgMTAyLjEwNSA0Ny45NzI2QzEwMS42NjggNDguMTI2NiA5OS41MjE2IDQ4Ljg0MDggOTkuNjMxOSA0Ny43MzZDOTkuNzE0NSA0Ni44MzU0IDEwMC45OTcgNDYuMjI3NiAxMDEuNjg2IDQ1LjgzNDNDMTAxLjQzOCA0NS45NzM4IDEwMC40OTUgNDUuNzcxMSAxMDAuMjA2IDQ1LjczMDdDOTkuNTc4NSA0NS42NDg1IDk4Ljk3NjcgNDUuMzk3IDk4LjQ2ODIgNDUuMDA0MUM5Ny40MDMgNDQuMTQyNCA5OC42NTIzIDQ0LjE3OTcgOTkuMzAxIDQ0LjIyMDNMOTkuMzAzNCA0NC4yMTY5WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTc5LjYyMTUgODIuMjM4OUM3NS40NTg2IDgyLjI2NDQgNzEuODkwNyA4NC40MDk3IDY5Ljk1MjcgODcuOTMzNUw1MC45MjE4IDEyMy40MTRMNzcuNjI3NCA5My4yNzY5QzgwLjI2MzEgOTAuMjM4OSA4MS4wNDAyIDg2LjE1MDUgNzkuNjIxNSA4Mi4yMzg5WiIgZmlsbD0iIzg3QkZFQyIvPgo8L2c+CjxkZWZzPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzQ5Nl8yNTg0Ij4KPHJlY3Qgd2lkdGg9IjE2MCIgaGVpZ2h0PSIxNjAiIGZpbGw9IndoaXRlIi8+CjwvY2xpcFBhdGg+CjwvZGVmcz4KPC9zdmc+Cg==\";","import React from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport CheckCircleIcon from \"@mui/icons-material/CheckCircle\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Grid, IconButton, Link, Paper, Typography } from \"@mui/material\";\nimport { DateTime, Duration } from \"luxon\";\nimport useLocalStorage from \"@cpt/hooks/useLocalStorage\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport type { ProductType } from \"shared/ProductType\";\nimport SuccessRocket from \"../../resources/images/svgs/success_rocket.svg\";\n\ntype UpgradeSuccessBannerProps = {\n id: string;\n type: ProductType;\n financePageRoute: string;\n};\n\nexport type UpgradedProducts = Record;\nexport const UPGRADED_PRODUCTS_KEY = \"upgraded_products\";\n\nexport function UpgradeSuccessBanner(props: UpgradeSuccessBannerProps) {\n const { id, type, financePageRoute } = props;\n\n const [upgradedProducts, setUpgradedProducts] = useLocalStorage(UPGRADED_PRODUCTS_KEY, {});\n\n const removeFromLocalStorage = () => {\n const updated = {\n ...upgradedProducts,\n };\n\n delete updated[id];\n\n //remove this item from\n setUpgradedProducts(updated);\n };\n\n //if there is no record for this id, don't render anything\n const upgradeDate = upgradedProducts[id];\n if (!upgradeDate) {\n return null;\n }\n\n //if we upgrade more than 1 day ago, remove from local storage and don't render\n const diffFromNow = DateTime.now().diff(DateTime.fromISO(upgradeDate), \"milliseconds\").as(\"milliseconds\");\n const oneDay = Duration.fromObject({ days: 1 }).as(\"milliseconds\");\n if (diffFromNow > oneDay) {\n removeFromLocalStorage();\n return null;\n }\n\n const productLong = type === \"CloudSubscription\" ? \"Cloud Subscription\" : \"Server License\";\n const productShort = type === \"CloudSubscription\" ? \"subscriptions\" : \"licenses\";\n\n return (\n \n \n \n \n \n \n \n \n Your {productLong} has been upgraded, happy deployments!\n \n \n We've sent an email containing the purchase receipt and invoice to the email address you provided in Stripe.\n You can also access these documents on the{\" \"}\n \n Finance\n {\" \"}\n page.\n \n \n This {productLong} has been moved to Control Center V2. If you have {productShort} that haven't been\n purchased or renewed recently, they may be in{\" \"}\n \n Control Center V1\n \n .\n \n \n \n {\"Happy\n \n \n \n );\n}\n","var _g, _g2, _g3, _path, _path2, _path3, _circle, _circle2, _circle3, _circle4, _circle5, _circle6, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgStripeToOctopus = function SvgStripeToOctopus(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 454,\n height: 216,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#stripe_to_octopus_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: 8,\n y: 7,\n width: 120,\n height: 120,\n rx: 8,\n fill: \"#fff\"\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#stripe_to_octopus_svg__b)\",\n fill: \"#635BFF\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M110.51 67.6c0-6.151-2.911-11.006-8.474-11.006-5.587 0-8.968 4.855-8.968 10.959 0 7.233 3.991 10.886 9.719 10.886 2.794 0 4.906-.649 6.503-1.562v-4.806c-1.597.817-3.428 1.322-5.752 1.322-2.277 0-4.296-.818-4.554-3.653h11.479c0-.313.047-1.562.047-2.14Zm-11.596-2.282c0-2.716 1.619-3.845 3.098-3.845 1.432 0 2.958 1.13 2.958 3.845h-6.056ZM84.007 56.594c-2.3 0-3.78 1.106-4.601 1.875l-.306-1.49h-5.164V85l5.869-1.274.023-6.8c.845.624 2.09 1.513 4.155 1.513 4.202 0 8.029-3.46 8.029-11.078-.024-6.97-3.897-10.767-8.005-10.767Zm-1.409 16.558c-1.385 0-2.206-.505-2.77-1.13l-.023-8.915c.61-.697 1.455-1.178 2.793-1.178 2.137 0 3.615 2.451 3.615 5.6 0 3.22-1.455 5.623-3.615 5.623ZM65.86 55.176l5.893-1.297V49l-5.893 1.274v4.902Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M71.753 57.003H65.86V78.03h5.893V57.003Z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"m59.546 58.781-.376-1.778H54.1V78.03h5.868V63.78c1.385-1.85 3.733-1.514 4.46-1.25v-5.527c-.75-.289-3.497-.817-4.882 1.778ZM47.808 51.788l-5.728 1.25-.023 19.25c0 3.556 2.605 6.175 6.08 6.175 1.925 0 3.333-.36 4.108-.793v-4.878c-.751.312-4.46 1.418-4.46-2.14v-8.53h4.46v-5.12h-4.46l.023-5.214ZM31.94 63.107c0-.938.75-1.298 1.995-1.298 1.784 0 4.037.553 5.821 1.538V57.7c-1.948-.794-3.873-1.106-5.821-1.106-4.766 0-7.935 2.547-7.935 6.801 0 6.633 8.92 5.576 8.92 8.435 0 1.106-.939 1.466-2.253 1.466-1.949 0-4.437-.817-6.409-1.922v5.72a15.95 15.95 0 0 0 6.409 1.37c4.883 0 8.24-2.476 8.24-6.778-.024-7.161-8.968-5.888-8.968-8.58Z\"\n }))), _g3 || (_g3 = /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#stripe_to_octopus_svg__c)\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: 326,\n y: 87,\n width: 120,\n height: 120,\n rx: 8,\n fill: \"#fff\"\n }))), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M359.092 163.328c4.89-3.15 10.64-8.56 8.46-14.93-1.19-3.47-2.84-6.44-3.06-10.19a23.002 23.002 0 0 1 1.4-9.34c4.39-11.78 17.48-17.36 29.23-13.81 10.92 3.28 18.44 16 13.91 27-2.61 6.36-3.78 11.36 2.04 16.27 1.58 1.35 5.42 3.36 5.4 5.75 0 3.12-6.15-.67-6.83-1.21.78 1.36 8.51 9.42 3.59 10-4.53.53-8.53-5.79-11.25-8.51-4.57-4.56-3.77 5.53-3.79 7.61 0 3.29-2.36 10-6.53 5.62-3.44-3.59-2.14-9.3-4.54-13.28-2.62-4.37-7 4.36-8.07 6-1.22 1.79-7.32 10.42-9.74 5.82-2-3.73 1.18-9.59 2.72-13-.56 1.22-4.56 3-5.73 3.63a15.584 15.584 0 0 1-8.28 1.91c-6.14-.45-1.43-3.71 1.07-5.32v-.02Z\",\n fill: \"#0D80D8\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M202.02 67h17a8 8 0 0 1 8 8v64a8 8 0 0 0 8 8h17\",\n stroke: \"#7C98B4\",\n strokeWidth: 6,\n strokeLinecap: \"round\"\n })), _path3 || (_path3 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M249.704 152.663a2.205 2.205 0 0 0 .003 3.197c.444.435 1.016.63 1.592.63.56 0 1.132-.21 1.566-.644l7.488-7.488a2.204 2.204 0 0 0 0-3.196l-7.476-7.476a2.205 2.205 0 0 0-3.184-.013 2.206 2.206 0 0 0 .012 3.185l5.885 5.884-5.886 5.921ZM204.335 72.663a2.205 2.205 0 0 1-.003 3.197 2.24 2.24 0 0 1-1.592.63 2.21 2.21 0 0 1-1.566-.644l-7.488-7.488a2.204 2.204 0 0 1 0-3.196l7.476-7.476a2.204 2.204 0 0 1 3.184-.013 2.205 2.205 0 0 1-.012 3.185l-5.885 5.884 5.886 5.92Z\",\n fill: \"#7C98B4\",\n stroke: \"#7C98B4\",\n strokeWidth: 2\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 151,\n cy: 67,\n r: 3,\n fill: \"#DAE2E9\"\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 165,\n cy: 67,\n r: 3,\n fill: \"#A9BBCB\"\n })), _circle3 || (_circle3 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 179,\n cy: 67,\n r: 3,\n fill: \"#7C98B4\"\n })), _circle4 || (_circle4 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 3,\n cy: 3,\n r: 3,\n transform: \"matrix(-1 0 0 1 278 144)\",\n fill: \"#7C98B4\"\n })), _circle5 || (_circle5 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 3,\n cy: 3,\n r: 3,\n transform: \"matrix(-1 0 0 1 292 144)\",\n fill: \"#A9BBCB\"\n })), _circle6 || (_circle6 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 3,\n cy: 3,\n r: 3,\n transform: \"matrix(-1 0 0 1 306 144)\",\n fill: \"#DAE2E9\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"stripe_to_octopus_svg__a\",\n x: 0,\n y: 0,\n width: 136,\n height: 136,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n \"in\": \"SourceAlpha\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 1\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 4\n }), /*#__PURE__*/React.createElement(\"feComposite\", {\n in2: \"hardAlpha\",\n operator: \"out\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_172_1669\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"effect1_dropShadow_172_1669\",\n result: \"shape\"\n })), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"stripe_to_octopus_svg__c\",\n x: 318,\n y: 80,\n width: 136,\n height: 136,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n \"in\": \"SourceAlpha\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 1\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 4\n }), /*#__PURE__*/React.createElement(\"feComposite\", {\n in2: \"hardAlpha\",\n operator: \"out\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_172_1669\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"effect1_dropShadow_172_1669\",\n result: \"shape\"\n })), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"stripe_to_octopus_svg__b\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n transform: \"translate(26 49)\",\n d: \"M0 0h85.2v36H0z\"\n })))));\n};\nexport { SvgStripeToOctopus as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDU0IiBoZWlnaHQ9IjIxNiIgdmlld0JveD0iMCAwIDQ1NCAyMTYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGZpbHRlcj0idXJsKCNmaWx0ZXIwX2RfMTcyXzE2NjkpIj4KPHJlY3QgeD0iOCIgeT0iNyIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIxMjAiIHJ4PSI4IiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xNzJfMTY2OSkiPgo8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTExMC41MSA2Ny42MDA4QzExMC41MSA2MS40NDg2IDEwNy41OTkgNTYuNTk0MSAxMDIuMDM2IDU2LjU5NDFDOTYuNDQ4OCA1Ni41OTQxIDkzLjA2ODQgNjEuNDQ4NiA5My4wNjg0IDY3LjU1MjdDOTMuMDY4NCA3NC43ODY0IDk3LjA1OTEgNzguNDM5MiAxMDIuNzg3IDc4LjQzOTJDMTA1LjU4MSA3OC40MzkyIDEwNy42OTMgNzcuNzkwNCAxMDkuMjkgNzYuODc3MlY3Mi4wNzA4QzEwNy42OTMgNzIuODg3OCAxMDUuODYyIDczLjM5MjUgMTAzLjUzOCA3My4zOTI1QzEwMS4yNjEgNzMuMzkyNSA5OS4yNDIzIDcyLjU3NTQgOTguOTg0MSA2OS43Mzk2SDExMC40NjNDMTEwLjQ2MyA2OS40MjcyIDExMC41MSA2OC4xNzc2IDExMC41MSA2Ny42MDA4Wk05OC45MTM2IDY1LjMxNzdDOTguOTEzNiA2Mi42MDIxIDEwMC41MzMgNjEuNDcyNiAxMDIuMDEyIDYxLjQ3MjZDMTAzLjQ0NCA2MS40NzI2IDEwNC45NyA2Mi42MDIxIDEwNC45NyA2NS4zMTc3SDk4LjkxMzZaIiBmaWxsPSIjNjM1QkZGIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNODQuMDA2OCA1Ni41OTQxQzgxLjcwNjMgNTYuNTk0MSA4MC4yMjczIDU3LjY5OTYgNzkuNDA1NyA1OC40Njg2TDc5LjEwMDUgNTYuOTc4Nkg3My45MzZWODVMNzkuODA0OCA4My43MjYzTDc5LjgyODMgNzYuOTI1MkM4MC42NzM0IDc3LjU1MDEgODEuOTE3NiA3OC40MzkyIDgzLjk4MzQgNzguNDM5MkM4OC4xODU0IDc4LjQzOTIgOTIuMDExOCA3NC45Nzg2IDkyLjAxMTggNjcuMzYwNUM5MS45ODg0IDYwLjM5MTIgODguMTE1IDU2LjU5NDEgODQuMDA2OCA1Ni41OTQxWk04Mi41OTgzIDczLjE1MjJDODEuMjEzMyA3My4xNTIyIDgwLjM5MTcgNzIuNjQ3NSA3OS44MjgzIDcyLjAyMjdMNzkuODA0OCA2My4xMDY4QzgwLjQxNTIgNjIuNDA5OSA4MS4yNjAzIDYxLjkyOTIgODIuNTk4MyA2MS45MjkyQzg0LjczNDYgNjEuOTI5MiA4Ni4yMTM1IDY0LjM4MDUgODYuMjEzNSA2Ny41Mjg3Qzg2LjIxMzUgNzAuNzQ5IDg0Ljc1OCA3My4xNTIyIDgyLjU5ODMgNzMuMTUyMloiIGZpbGw9IiM2MzVCRkYiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik02NS44NjA0IDU1LjE3NjJMNzEuNzUyNiA1My44Nzg1VjQ5TDY1Ljg2MDQgNTAuMjczN1Y1NS4xNzYyWiIgZmlsbD0iIzYzNUJGRiIvPgo8cGF0aCBkPSJNNzEuNzUyNiA1Ny4wMDI3SDY1Ljg2MDRWNzguMDMwN0g3MS43NTI2VjU3LjAwMjdaIiBmaWxsPSIjNjM1QkZGIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNTkuNTQ1OCA1OC43ODExTDU5LjE3MDIgNTcuMDAyN0g1NC4wOTk2Vjc4LjAzMDdINTkuOTY4NFY2My43Nzk3QzYxLjM1MzQgNjEuOTI5MiA2My43MDA5IDYyLjI2NTcgNjQuNDI4NiA2Mi41MzAxVjU3LjAwMjdDNjMuNjc3NCA1Ni43MTQzIDYwLjkzMDkgNTYuMTg1NiA1OS41NDU4IDU4Ljc4MTFaIiBmaWxsPSIjNjM1QkZGIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDcuODA4IDUxLjc4NzdMNDIuMDgwMSA1My4wMzc0TDQyLjA1NjYgNzIuMjg3MUM0Mi4wNTY2IDc1Ljg0MzggNDQuNjYyNCA3OC40NjMzIDQ4LjEzNjcgNzguNDYzM0M1MC4wNjE2IDc4LjQ2MzMgNTEuNDcwMSA3OC4xMDI4IDUyLjI0NDggNzcuNjcwMlY3Mi43OTE3QzUxLjQ5MzYgNzMuMTA0MSA0Ny43ODQ2IDc0LjIwOTYgNDcuNzg0NiA3MC42NTI5VjYyLjEyMTVINTIuMjQ0OFY1Ny4wMDI3SDQ3Ljc4NDZMNDcuODA4IDUxLjc4NzdaIiBmaWxsPSIjNjM1QkZGIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMzEuOTM5MiA2My4xMDY4QzMxLjkzOTIgNjIuMTY5NSAzMi42OTA0IDYxLjgwOTEgMzMuOTM0NiA2MS44MDkxQzM1LjcxODcgNjEuODA5MSAzNy45NzIzIDYyLjM2MTggMzkuNzU2NCA2My4zNDcxVjU3LjY5OTZDMzcuODA4IDU2LjkwNjUgMzUuODgzIDU2LjU5NDEgMzMuOTM0NiA1Ni41OTQxQzI5LjE2OTEgNTYuNTk0MSAyNiA1OS4xNDE1IDI2IDYzLjM5NTJDMjYgNzAuMDI4IDM0LjkyMDUgNjguOTcwNiAzNC45MjA1IDcxLjgzMDRDMzQuOTIwNSA3Mi45MzU5IDMzLjk4MTUgNzMuMjk2NCAzMi42NjY5IDczLjI5NjRDMzAuNzE4NSA3My4yOTY0IDI4LjIzMDEgNzIuNDc5MyAyNi4yNTgyIDcxLjM3MzhWNzcuMDkzNEMyOC40NDE0IDc4LjA1NDcgMzAuNjQ4MSA3OC40NjMzIDMyLjY2NjkgNzguNDYzM0MzNy41NDk3IDc4LjQ2MzMgNDAuOTA2NyA3NS45ODggNDAuOTA2NyA3MS42ODYyQzQwLjg4MzIgNjQuNTI0NyAzMS45MzkyIDY1Ljc5ODQgMzEuOTM5MiA2My4xMDY4WiIgZmlsbD0iIzYzNUJGRiIvPgo8L2c+CjxnIGZpbHRlcj0idXJsKCNmaWx0ZXIxX2RfMTcyXzE2NjkpIj4KPHJlY3QgeD0iMzI2IiB5PSI4NyIgd2lkdGg9IjEyMCIgaGVpZ2h0PSIxMjAiIHJ4PSI4IiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjxwYXRoIGQ9Ik0zNTkuMDkyIDE2My4zMjhDMzYzLjk4MiAxNjAuMTc4IDM2OS43MzIgMTU0Ljc2OCAzNjcuNTUyIDE0OC4zOThDMzY2LjM2MiAxNDQuOTI4IDM2NC43MTIgMTQxLjk1OCAzNjQuNDkyIDEzOC4yMDhDMzY0LjMwOCAxMzUuMDMxIDM2NC43ODQgMTMxLjg1MSAzNjUuODkyIDEyOC44NjhDMzcwLjI4MiAxMTcuMDg4IDM4My4zNzIgMTExLjUwOCAzOTUuMTIyIDExNS4wNThDNDA2LjA0MiAxMTguMzM4IDQxMy41NjIgMTMxLjA1OCA0MDkuMDMyIDE0Mi4wNThDNDA2LjQyMiAxNDguNDE4IDQwNS4yNTIgMTUzLjQxOCA0MTEuMDcyIDE1OC4zMjhDNDEyLjY1MiAxNTkuNjc4IDQxNi40OTIgMTYxLjY4OCA0MTYuNDcyIDE2NC4wNzhDNDE2LjQ3MiAxNjcuMTk4IDQxMC4zMjIgMTYzLjQwOCA0MDkuNjQyIDE2Mi44NjhDNDEwLjQyMiAxNjQuMjI4IDQxOC4xNTIgMTcyLjI4OCA0MTMuMjMyIDE3Mi44NjhDNDA4LjcwMiAxNzMuMzk4IDQwNC43MDIgMTY3LjA3OCA0MDEuOTgyIDE2NC4zNThDMzk3LjQxMiAxNTkuNzk4IDM5OC4yMTIgMTY5Ljg4OCAzOTguMTkyIDE3MS45NjhDMzk4LjE5MiAxNzUuMjU4IDM5NS44MzIgMTgxLjk2OCAzOTEuNjYyIDE3Ny41ODhDMzg4LjIyMiAxNzMuOTk4IDM4OS41MjIgMTY4LjI4OCAzODcuMTIyIDE2NC4zMDhDMzg0LjUwMiAxNTkuOTM4IDM4MC4xMjIgMTY4LjY2OCAzNzkuMDUyIDE3MC4zMDhDMzc3LjgzMiAxNzIuMDk4IDM3MS43MzIgMTgwLjcyOCAzNjkuMzEyIDE3Ni4xMjhDMzY3LjMxMiAxNzIuMzk4IDM3MC40OTIgMTY2LjUzOCAzNzIuMDMyIDE2My4xMjhDMzcxLjQ3MiAxNjQuMzQ4IDM2Ny40NzIgMTY2LjEyOCAzNjYuMzAyIDE2Ni43NThDMzYzLjc3MiAxNjguMTQ5IDM2MC45MDYgMTY4LjgxMSAzNTguMDIyIDE2OC42NjhDMzUxLjg4MiAxNjguMjE4IDM1Ni41OTIgMTY0Ljk1OCAzNTkuMDkyIDE2My4zNDhWMTYzLjMyOFoiIGZpbGw9IiMwRDgwRDgiLz4KPHBhdGggZD0iTTIwMi4wMiA2N0gyMTkuMDJDMjIzLjQzOCA2NyAyMjcuMDIgNzAuNTgxNyAyMjcuMDIgNzVWMTM5QzIyNy4wMiAxNDMuNDE4IDIzMC42MDEgMTQ3IDIzNS4wMiAxNDdIMjUyLjAyIiBzdHJva2U9IiM3Qzk4QjQiIHN0cm9rZS13aWR0aD0iNiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0yNDkuNzA0IDE1Mi42NjNDMjQ4Ljc5IDE1My41MjYgMjQ4Ljc5MSAxNTQuOTk5IDI0OS43MDcgMTU1Ljg2QzI1MC4xNTEgMTU2LjI5NSAyNTAuNzIzIDE1Ni40OSAyNTEuMjk5IDE1Ni40OUMyNTEuODU5IDE1Ni40OSAyNTIuNDMxIDE1Ni4yOCAyNTIuODY1IDE1NS44NDZMMjYwLjM1MyAxNDguMzU4QzI2MS4yNjggMTQ3LjQ5NiAyNjEuMjY4IDE0Ni4wMjQgMjYwLjM1MyAxNDUuMTYyTDI1Mi44NzcgMTM3LjY4NkMyNTIuMDE5IDEzNi43NzYgMjUwLjU1NiAxMzYuNzcxIDI0OS42OTMgMTM3LjY3M0MyNDguNzkxIDEzOC41MzcgMjQ4Ljc5NSAxNDAgMjQ5LjcwNSAxNDAuODU4TDI1NS41OSAxNDYuNzQyTDI0OS43MDQgMTUyLjY2M1oiIGZpbGw9IiM3Qzk4QjQiIHN0cm9rZT0iIzdDOThCNCIgc3Ryb2tlLXdpZHRoPSIyIi8+CjxwYXRoIGQ9Ik0yMDQuMzM1IDcyLjY2MjlDMjA1LjI0OSA3My41MjU1IDIwNS4yNDggNzQuOTk4NyAyMDQuMzMyIDc1Ljg1OThDMjAzLjg4OCA3Ni4yOTUxIDIwMy4zMTYgNzYuNDkwMiAyMDIuNzQgNzYuNDkwMkMyMDIuMTggNzYuNDkwMiAyMDEuNjA4IDc2LjI3OTkgMjAxLjE3NCA3NS44NDU4TDE5My42ODYgNjguMzU3OEMxOTIuNzcxIDY3LjQ5NiAxOTIuNzcxIDY2LjAyMzUgMTkzLjY4NiA2NS4xNjE3TDIwMS4xNjIgNTcuNjg1OEMyMDIuMDIgNTYuNzc1NSAyMDMuNDgzIDU2Ljc3MTQgMjA0LjM0NiA1Ny42NzM0QzIwNS4yNDggNTguNTM2OCAyMDUuMjQ0IDU5Ljk5OTkgMjA0LjMzNCA2MC44NTc4TDE5OC40NDkgNjYuNzQyM0wyMDQuMzM1IDcyLjY2MjlaIiBmaWxsPSIjN0M5OEI0IiBzdHJva2U9IiM3Qzk4QjQiIHN0cm9rZS13aWR0aD0iMiIvPgo8Y2lyY2xlIGN4PSIxNTEiIGN5PSI2NyIgcj0iMyIgZmlsbD0iI0RBRTJFOSIvPgo8Y2lyY2xlIGN4PSIxNjUiIGN5PSI2NyIgcj0iMyIgZmlsbD0iI0E5QkJDQiIvPgo8Y2lyY2xlIGN4PSIxNzkiIGN5PSI2NyIgcj0iMyIgZmlsbD0iIzdDOThCNCIvPgo8Y2lyY2xlIGN4PSIzIiBjeT0iMyIgcj0iMyIgdHJhbnNmb3JtPSJtYXRyaXgoLTEgMCAwIDEgMjc4IDE0NCkiIGZpbGw9IiM3Qzk4QjQiLz4KPGNpcmNsZSBjeD0iMyIgY3k9IjMiIHI9IjMiIHRyYW5zZm9ybT0ibWF0cml4KC0xIDAgMCAxIDI5MiAxNDQpIiBmaWxsPSIjQTlCQkNCIi8+CjxjaXJjbGUgY3g9IjMiIGN5PSIzIiByPSIzIiB0cmFuc2Zvcm09Im1hdHJpeCgtMSAwIDAgMSAzMDYgMTQ0KSIgZmlsbD0iI0RBRTJFOSIvPgo8ZGVmcz4KPGZpbHRlciBpZD0iZmlsdGVyMF9kXzE3Ml8xNjY5IiB4PSIwIiB5PSIwIiB3aWR0aD0iMTM2IiBoZWlnaHQ9IjEzNiIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlQWxwaGEiIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIgcmVzdWx0PSJoYXJkQWxwaGEiLz4KPGZlT2Zmc2V0IGR5PSIxIi8+CjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjQiLz4KPGZlQ29tcG9zaXRlIGluMj0iaGFyZEFscGhhIiBvcGVyYXRvcj0ib3V0Ii8+CjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjA2IDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfMTcyXzE2NjkiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QxX2Ryb3BTaGFkb3dfMTcyXzE2NjkiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjFfZF8xNzJfMTY2OSIgeD0iMzE4IiB5PSI4MCIgd2lkdGg9IjEzNiIgaGVpZ2h0PSIxMzYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMSIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI0Ii8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4wNiAwIi8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0iZWZmZWN0MV9kcm9wU2hhZG93XzE3Ml8xNjY5Ii8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iZWZmZWN0MV9kcm9wU2hhZG93XzE3Ml8xNjY5IiByZXN1bHQ9InNoYXBlIi8+CjwvZmlsdGVyPgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzE3Ml8xNjY5Ij4KPHJlY3Qgd2lkdGg9Ijg1LjIiIGhlaWdodD0iMzYiIGZpbGw9IndoaXRlIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNiA0OSkiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K\";","var _path, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgBackgroundBlob = function SvgBackgroundBlob(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 953,\n height: 927,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M422.273 8.065C572.14-37.195 699.464 128.81 796.199 251.9c95.616 121.665 189.712 268.485 145.161 416.674-42.645 141.847-201.944 203.24-344.07 244.948-111.185 32.629-221.129-.717-326.897-48.045C159.075 815.665 4.834 768.272.329 646.401c-4.44-120.104 187.165-130.423 253.439-230.685 85.303-129.049 20.416-362.927 168.505-407.65Z\",\n fill: \"url(#background_blob_svg__a)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"background_blob_svg__a\",\n x1: 952.746,\n y1: 0.446,\n x2: -174.216,\n y2: 330.087,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#C5E6FF\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#E5F4FF\"\n })))));\n};\nexport { SvgBackgroundBlob as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iOTUzIiBoZWlnaHQ9IjkyNyIgdmlld0JveD0iMCAwIDk1MyA5MjciIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNNDIyLjI3MyA4LjA2NTQzQzU3Mi4xNCAtMzcuMTk1NCA2OTkuNDY0IDEyOC44MDkgNzk2LjE5OSAyNTEuODk5Qzg5MS44MTUgMzczLjU2NCA5ODUuOTExIDUyMC4zODQgOTQxLjM2IDY2OC41NzNDODk4LjcxNSA4MTAuNDIgNzM5LjQxNiA4NzEuODEzIDU5Ny4yOSA5MTMuNTIxQzQ4Ni4xMDUgOTQ2LjE1IDM3Ni4xNjEgOTEyLjgwNCAyNzAuMzkzIDg2NS40NzZDMTU5LjA3NSA4MTUuNjY1IDQuODM0MzEgNzY4LjI3MiAwLjMyOTI5OCA2NDYuNDAxQy00LjExMDM3IDUyNi4yOTcgMTg3LjQ5NCA1MTUuOTc4IDI1My43NjggNDE1LjcxNkMzMzkuMDcxIDI4Ni42NjcgMjc0LjE4NCA1Mi43ODkxIDQyMi4yNzMgOC4wNjU0M1oiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl81NTlfMjMxNSkiLz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl81NTlfMjMxNSIgeDE9Ijk1Mi43NDYiIHkxPSIwLjQ0NTg0OSIgeDI9Ii0xNzQuMjE2IiB5Mj0iMzMwLjA4NyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjQzVFNkZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0U1RjRGRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=\";","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\nimport { Box, CircularProgress, Grid, Link, Typography } from \"@mui/material\";\nimport { getDefaultDelays } from \"pages/utils/get-default-delays\";\nimport BackgroundBlob from \"../resources/images/svgs/background_blob.svg\";\n\ntype PollingPageProps = {\n query: (hasSentFirstRequest: boolean) => Promise;\n inProgressTitle: string;\n errorTitle: string;\n errorMessage: string;\n svgImage: string;\n svgImageAlt: string;\n};\n\n// This is the base page for showing progress while polling\nexport function PollingPage(props: PollingPageProps) {\n const { query, inProgressTitle, errorTitle, errorMessage, svgImage, svgImageAlt } = props;\n const defaultDelays = useMemo(() => getDefaultDelays(), []);\n const pollDelay = useRef(defaultDelays.subsequent);\n const [hasStartedPolling, setHasStartedPolling] = useState(false);\n const hasSentFirstRequest = useRef(false);\n const [showError, setShowError] = useState(false);\n const pollTimerRef = useRef(0);\n\n const pollingCallback = useCallback(async () => {\n const response = await query(!hasSentFirstRequest.current);\n if (!response) {\n hasSentFirstRequest.current = true;\n pollTimerRef.current = window.setTimeout(() => pollingCallback(), pollDelay.current);\n }\n }, [query, hasSentFirstRequest, pollDelay]);\n\n useEffect(() => {\n if (!hasStartedPolling) {\n // we wait and initial delay (default 2.5s) seconds until the 1st API call so the user doesn't see a flash of screen (and it looks like we are doing something)\n pollTimerRef.current = window.setTimeout(pollingCallback, defaultDelays.initial);\n //once we've started polling, we don't want to ever re-trigger this\n setHasStartedPolling(true);\n }\n }, [pollingCallback, defaultDelays, hasStartedPolling, setHasStartedPolling]);\n\n // After 1 min, show an error message and drop the interval to every 30s to reduce database load\n useEffect(() => {\n const id = window.setTimeout(() => {\n pollDelay.current = defaultDelays.long;\n setShowError(true);\n }, defaultDelays.changeToError);\n return () => window.clearTimeout(id);\n }, [defaultDelays]);\n\n // if there is any timeout running clear it on unmount\n useEffect(() => {\n return () => window.clearTimeout(pollTimerRef.current);\n }, []);\n\n const inProgressMessageBlock = (\n \n \n \n \n {inProgressTitle}\n \n \n This will just take a couple of seconds. Please don't leave this page.\n \n );\n\n const errorMessageBlock = (\n \n \n \n \n {errorTitle}\n \n \n {errorMessage}\n \n For more information, check{\" \"}\n \n Octopus system status\n \n , email{\" \"}\n \n sales@octopus.com\n {\" \"}\n or phone{\" \"}\n \n +1 512-823-0256\n {\" \"}\n \n \n );\n\n return (\n \n \n \n {showError ? errorMessageBlock : inProgressMessageBlock}\n \n \n \n \n \n \n \"Background\n \n \n \n \n );\n}\n","export function getDefaultDelays() {\n return {\n initial: 2500, // 2.5s\n subsequent: 1000, // 1s\n changeToError: 60 * 1000, // 1 min\n long: 30 * 1000, // 30s\n };\n}\n","import React from \"react\";\nimport { Navigate, useNavigate, useSearchParams } from \"react-router-dom\";\nimport { RoutesMap } from \"RoutesMap\";\nimport { DateTime } from \"luxon\";\nimport useLocalStorage from \"@cpt/hooks/useLocalStorage\";\nimport { getCheckout } from \"client/api/CheckoutApi\";\nimport { getPurchaseIntent } from \"client/api/PurchaseIntentApi\";\nimport type { UpgradedProducts } from \"components/UpgradeSuccessBanner/UpgradeSuccessBanner\";\nimport { UPGRADED_PRODUCTS_KEY } from \"components/UpgradeSuccessBanner/UpgradeSuccessBanner\";\nimport StripeToOctopus from \"resources/images/svgs/stripe_to_octopus.svg\";\nimport { PollingPage } from \"pages/PollingPage\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\nimport { ServerLicensesRoutesMap } from \"areas/serverLicenses/ServerLicensesRoutesMap\";\n\nexport function StripePaymentCompletingPage() {\n const [, setUpgradedProducts] = useLocalStorage(UPGRADED_PRODUCTS_KEY, {});\n\n const [searchParams] = useSearchParams();\n const navigate = useNavigate();\n\n const intentId = searchParams.get(\"purchaseIntentId\");\n const checkoutId = searchParams.get(\"co\");\n\n if (!intentId && !checkoutId) return ;\n\n const intentQuery = async (hasSentFirstRequest: boolean): Promise => {\n if (!intentId) {\n throw new Error(\"Intent query called with null intent.\");\n }\n const response = await getPurchaseIntent(intentId, !hasSentFirstRequest);\n\n if (!!response.cloudSubscriptionId) {\n markProductAsUpgraded(response.cloudSubscriptionId);\n navigate(CloudSubscriptionsRoutesMap.detail(response.cloudSubscriptionId).root);\n } else if (!!response.serverLicenseId) {\n markProductAsUpgraded(response.serverLicenseId);\n navigate(ServerLicensesRoutesMap.detail(response.serverLicenseId).root);\n } else {\n return false;\n }\n\n return true;\n };\n\n const checkoutQuery = async (hasSentFirstRequest: boolean): Promise => {\n if (!checkoutId) {\n throw new Error(\"Checkout query called with null id.\");\n }\n const response = await getCheckout(checkoutId);\n if (!response.completed) {\n return false;\n }\n\n let destination = \"\";\n if (response.cloudSubscription) {\n destination = CloudSubscriptionsRoutesMap.detail(response.cloudSubscription.id).root;\n } else if (response.serverLicense) {\n destination = ServerLicensesRoutesMap.detail(response.serverLicense.id).root;\n } else {\n throw Error(\"Checkout did not return a license.\");\n }\n navigate(destination);\n return true;\n };\n\n const markProductAsUpgraded = (id: string) => {\n setUpgradedProducts((prev) => {\n return {\n ...prev,\n [id]: DateTime.now().toISO(),\n };\n });\n };\n\n return (\n \n );\n}\n","import React, { useMemo } from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport CheckCircleIcon from \"@mui/icons-material/CheckCircle\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Grid, IconButton, Link, Paper, Typography } from \"@mui/material\";\nimport { DateTime, Duration } from \"luxon\";\nimport { DateText } from \"@cpt/components\";\nimport useLocalStorage from \"@cpt/hooks/useLocalStorage\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { ServerLicensesRoutesMap } from \"areas/serverLicenses/ServerLicensesRoutesMap\";\n\ntype RenewSuccessBannerProps = {\n id: string;\n nextRenewalDate: DateTime;\n};\n\nexport type RenewedProducts = Record;\nexport const RENEWED_PRODUCTS_KEY = \"renewed_products\";\n\nexport function RenewSuccessBanner(props: RenewSuccessBannerProps) {\n const { id, nextRenewalDate } = props;\n\n const [renewedProducts, setRenewedProducts] = useLocalStorage(RENEWED_PRODUCTS_KEY, {});\n\n const removeFromLocalStorage = () => {\n const updated = {\n ...renewedProducts,\n };\n\n delete updated[id];\n\n //remove this item from\n setRenewedProducts(updated);\n };\n\n const daysTillRenewal = useMemo(() => {\n const diff = nextRenewalDate.diffNow(\"days\");\n\n return Math.ceil(diff.days);\n }, [nextRenewalDate]);\n\n const daysTillRenewalText = `${daysTillRenewal} day${daysTillRenewal !== 1 ? \"s\" : \"\"}`;\n\n //if there is no record for this id, don't render anything\n const renewDate = renewedProducts[id];\n if (!renewDate) {\n return null;\n }\n\n //if we upgrade more than 1 day ago, remove from local storage and don't render\n const diffFromNow = DateTime.now().diff(DateTime.fromISO(renewDate), \"milliseconds\").as(\"milliseconds\");\n const oneDay = Duration.fromObject({ days: 1 }).as(\"milliseconds\");\n if (diffFromNow > oneDay) {\n removeFromLocalStorage();\n return null;\n }\n\n return (\n \n \n \n \n \n \n \n \n Annual auto-renewal is set up\n \n \n Your license will be automatically renewed and charged in {daysTillRenewalText} (\n \n ). You can review your license details on the{\" \"}\n \n Finance\n {\" \"}\n page. Upon renewal, we’ll send a reminder email to update your license key XML.\n \n \n This Server license has been moved to Control Center V2. If you have licenses that haven't been purchased or\n renewed recently, they may be in{\" \"}\n \n Control Center V1\n \n .\n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Navigate, useNavigate, useSearchParams } from \"react-router-dom\";\nimport { RoutesMap } from \"RoutesMap\";\nimport { DateTime } from \"luxon\";\nimport useLocalStorage from \"@cpt/hooks/useLocalStorage\";\nimport { getPurchaseIntent } from \"client/api/PurchaseIntentApi\";\nimport type { RenewedProducts } from \"components/RenewSuccessBanner/RenewSuccessBanner\";\nimport { RENEWED_PRODUCTS_KEY } from \"components/RenewSuccessBanner/RenewSuccessBanner\";\nimport StripeToOctopus from \"resources/images/svgs/stripe_to_octopus.svg\";\nimport { PollingPage } from \"pages/PollingPage\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\nimport { ServerLicensesRoutesMap } from \"areas/serverLicenses/ServerLicensesRoutesMap\";\n\nexport function StripeSetupRenewalCompletingPage() {\n const [, setRenewedProducts] = useLocalStorage(RENEWED_PRODUCTS_KEY, {});\n\n const [searchParams] = useSearchParams();\n const navigate = useNavigate();\n\n const intentId = searchParams.get(\"setupIntentId\");\n\n if (!intentId) return ;\n\n const query = async (hasSentFirstRequest: boolean): Promise => {\n const response = await getPurchaseIntent(intentId, !hasSentFirstRequest);\n\n if (!!response.cloudSubscriptionId) {\n markProductAsRenewed(response.cloudSubscriptionId);\n navigate(CloudSubscriptionsRoutesMap.detail(response.cloudSubscriptionId).root);\n } else if (!!response.serverLicenseId) {\n markProductAsRenewed(response.serverLicenseId);\n navigate(ServerLicensesRoutesMap.detail(response.serverLicenseId).root);\n } else {\n return false;\n }\n\n return true;\n };\n\n const markProductAsRenewed = (id: string) => {\n setRenewedProducts((prev) => {\n return {\n ...prev,\n [id]: DateTime.now().toISO(),\n };\n });\n };\n\n return (\n \n );\n}\n","export enum UpgradePlan {\n Trial = \"trial\",\n Cloud_Monthly_LegacyFree = \"oc-monthly-legacy-free\",\n Cloud_Monthly_Professional = \"oc-monthly-professional\",\n Cloud_Monthly_Community = \"oc-monthly-community\",\n Cloud_Annually_Starter = \"oc-annually-starter\",\n Cloud_Annually_Professional = \"oc-annually-professional\",\n Cloud_Annually_Enterprise = \"oc-annually-enterprise\",\n Server_Annually_Starter = \"os-annually-starter\",\n Server_Annually_Professional_Oct_21 = \"os-annually-professional-oct21-legacy\",\n Server_Annually_Professional = \"os-annually-professional\",\n Server_Annually_Enterprise = \"os-annually-enterprise\",\n}\n","import { CloudLicensingChannelTypesArr, CloudLicensingChannelTypesKeys } from \"client/api/CloudSubscriptionApi\";\nimport type {\n CloudLicensingChannel,\n CloudLicensingChannelTypes,\n StripeSubscriptionCloudSubscriptionLicensingChannelDto,\n ZuoraCloudSubscriptionLicensingChannelDto,\n TrialCloudSubscriptionLicensingChannelDto,\n InfrastructureCloudSubscriptionLicensingChannelDto,\n} from \"client/api/CloudSubscriptionApi\";\nimport { UpgradePlan } from \"client/api/UpgradePlan\";\n\nexport function IsZuoraSubscriptionLicensingChannel(\n licensingChannel: CloudLicensingChannel\n): licensingChannel is ZuoraCloudSubscriptionLicensingChannelDto {\n return licensingChannel.channelType === CloudLicensingChannelTypesKeys.Zuora;\n}\n\nexport function IsInfrastructureSubscriptionLicensingChannel(\n licensingChannel: CloudLicensingChannel\n): licensingChannel is InfrastructureCloudSubscriptionLicensingChannelDto {\n return licensingChannel.channelType === CloudLicensingChannelTypesKeys.Infrastructure;\n}\n\nexport function IsStripeSubscriptionLicensingChannel(\n licensingChannel: CloudLicensingChannel\n): licensingChannel is StripeSubscriptionCloudSubscriptionLicensingChannelDto {\n return licensingChannel.channelType === CloudLicensingChannelTypesKeys.Stripe;\n}\n\nexport function isCloudSubscriptionLicenseChannelType(\n licensingChannelType: string\n): licensingChannelType is CloudLicensingChannelTypes {\n const arr: string[] = CloudLicensingChannelTypesArr;\n return arr.includes(licensingChannelType);\n}\n\nexport function isTrialLicensingChannel(\n licensingChannel: CloudLicensingChannel\n): licensingChannel is TrialCloudSubscriptionLicensingChannelDto {\n return licensingChannel.channelType === CloudLicensingChannelTypesKeys.Trial;\n}\n\nexport function getUpgradePlanForPriceCode(priceCode: string): UpgradePlan | undefined {\n return enumFromStringValue(UpgradePlan, priceCode);\n}\n\nfunction enumFromStringValue(enm: { [s: string]: T }, value: string): T | undefined {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return (Object.values(enm) as unknown as string[]).includes(value) ? (value as unknown as T) : undefined;\n}\n","import React from \"react\";\nimport { faCheckCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Alert, IconButton, Typography } from \"@mui/material\";\nimport { DateTime, Duration } from \"luxon\";\nimport { FontAwesomeSvgIcon } from \"@cpt/components\";\nimport useLocalStorage from \"@cpt/hooks/useLocalStorage\";\nimport { designSystemColors } from \"@cpt/shared\";\nimport type { ProductType } from \"shared/ProductType\";\n\ntype StripeUpgradeSuccessAlertProps = {\n id: string;\n type: ProductType;\n};\n\ntype UpgradedStripeProduct = {\n upgradedAt: string;\n productName: string | undefined;\n};\n\nexport type UpgradedStripeProducts = Record;\nexport const UPGRADED_STRIPE_PRODUCTS_KEY = \"upgraded_stripe_products\";\n\nexport function StripeUpgradeSuccessAlert(props: StripeUpgradeSuccessAlertProps) {\n const { id, type } = props;\n\n const [upgradedStripeProducts, setUpgradedStripeProducts] = useLocalStorage(\n UPGRADED_STRIPE_PRODUCTS_KEY,\n {}\n );\n\n const removeFromLocalStorage = () => {\n const updated = {\n ...upgradedStripeProducts,\n };\n\n delete updated[id];\n setUpgradedStripeProducts(updated);\n };\n\n //if there is no record for this id, don't render anything\n const upgradeData = upgradedStripeProducts[id];\n if (!upgradeData) {\n return null;\n }\n\n //if we upgrade more than 1 day ago, remove from local storage and don't render\n const diffFromNow = DateTime.now().diff(DateTime.fromISO(upgradeData.upgradedAt), \"milliseconds\").as(\"milliseconds\");\n const oneDay = Duration.fromObject({ days: 1 }).as(\"milliseconds\");\n if (diffFromNow > oneDay) {\n removeFromLocalStorage();\n return null;\n }\n\n const productType = type === \"CloudSubscription\" ? \"subscription\" : \"license\";\n\n return (\n \n }\n action={\n \n \n \n }\n >\n \n Your {productType} has been upgraded to {upgradeData.productName}.\n \n Happy deployments!\n \n );\n}\n","import React from \"react\";\nimport { Navigate, useNavigate, useSearchParams } from \"react-router-dom\";\nimport { RoutesMap } from \"RoutesMap\";\nimport { DateTime } from \"luxon\";\nimport useLocalStorage from \"@cpt/hooks/useLocalStorage\";\nimport { IsStripeSubscriptionLicensingChannel } from \"utils/CloudSubscriptionLicensingChannelTypeHelpers\";\nimport { getCloudSubscriptionById } from \"client/api/CloudSubscriptionApi\";\nimport type { UpgradedStripeProducts } from \"components/StripeUpgradeSuccessAlert/StripeUpgradeSuccessAlert\";\nimport { UPGRADED_STRIPE_PRODUCTS_KEY } from \"components/StripeUpgradeSuccessAlert/StripeUpgradeSuccessAlert\";\nimport StripeToOctopus from \"resources/images/svgs/stripe_to_octopus.svg\";\nimport { PollingPage } from \"pages/PollingPage\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\n\nexport function StripeUpgradeCompletingPage() {\n const [, setUpgradedProducts] = useLocalStorage(UPGRADED_STRIPE_PRODUCTS_KEY, {});\n\n const [searchParams] = useSearchParams();\n const navigate = useNavigate();\n\n const cloudSubscriptionId = searchParams.get(\"cloudSubscriptionId\");\n const expectedPriceCode = searchParams.get(\"priceCode\");\n\n if (!cloudSubscriptionId) return ;\n\n const query = async (_: boolean): Promise => {\n const response = await getCloudSubscriptionById(cloudSubscriptionId);\n\n if (!IsStripeSubscriptionLicensingChannel(response?.licensingChannel)) return false;\n if (response.licensingChannel.priceCode !== expectedPriceCode) return false;\n\n markProductAsUpgraded(response.id, response.licensingChannel.productName);\n navigate(CloudSubscriptionsRoutesMap.detail(response.id).root);\n return true;\n };\n\n const markProductAsUpgraded = (id: string, productName: string | undefined) => {\n setUpgradedProducts((prev) => {\n return {\n ...prev,\n [id]: { upgradedAt: DateTime.now().toISO(), productName: productName },\n };\n });\n };\n\n return (\n \n );\n}\n","import { useEffect, useMemo, useRef, useState } from \"react\";\nimport { getDefaultDelays } from \"pages/utils/get-default-delays\";\n\nexport type PollingCallback = () => Promise;\n\nexport function usePolling(callback: PollingCallback, enabled: boolean) {\n const pollTimerRef = useRef(0);\n const defaultDelays = useMemo(() => getDefaultDelays(), []);\n const [warmedUp, setWarmedUp] = useState(false);\n\n // Warm up - delay the initial poll so the user doesn't see a flash of screen\n useEffect(() => {\n const startPoll = () => {\n setWarmedUp(true);\n };\n const t = window.setTimeout(startPoll, defaultDelays.initial);\n return () => window.clearTimeout(t);\n }, [defaultDelays]);\n\n useEffect(() => {\n if (!warmedUp || !enabled) {\n return;\n }\n const asyncCallback = async () => {\n try {\n await callback();\n } catch {\n // do nothing\n } finally {\n clearTimeout(pollTimerRef.current);\n if (enabled) {\n pollTimerRef.current = window.setTimeout(asyncCallback, defaultDelays.subsequent);\n }\n }\n };\n asyncCallback();\n\n return () => {\n clearTimeout(pollTimerRef.current);\n };\n }, [enabled, defaultDelays, callback, warmedUp]);\n}\n","import { envConfig } from \"utils/envConfig\";\n\nexport function getHostname(dnsPrefix: string) {\n return `${dnsPrefix}.${envConfig.OctopusCloudDomain}`;\n}\n","import axiosClient from \"../axios-client\";\n\nexport enum TrialFulfillmentErrorCode {\n ActivePlatformLimitExceeded = \"ActivePlatformLimitExceeded\",\n HistoricalLimitExceeded = \"HistoricalLimitExceeded\",\n}\n\nexport interface TrialFulfillmentDto {\n fulfilled: boolean;\n error?: TrialFulfillmentErrorCode;\n serverLicenses: string[];\n cloudSubscriptions: CloudTrialFulfillmentDto[];\n}\n\nexport interface CloudTrialFulfillmentDto {\n serial: string;\n provisioned: boolean;\n dnsPrefix: string;\n}\n\nconst BASE_URL = \"bff/fulfillment\";\n\nexport const getTrialFulfilled = async (trialIntentId: string): Promise => {\n const response = await axiosClient.get(`${BASE_URL}/trial?i=${trialIntentId}`);\n return response.data;\n};\n","import React from \"react\";\nimport type { PropsWithChildren } from \"react\";\nimport { Box } from \"@mui/material\";\n\nexport function TrialFulfillmentContent(props: PropsWithChildren) {\n return (\n \n {props.children}\n \n );\n}\n","import React from \"react\";\nimport ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\nimport { Box, Link, Typography } from \"@mui/material\";\nimport { RoutesMap } from \"RoutesMap\";\n\nexport interface TrialFulfillmentErrorProps {\n error: string;\n}\n\nexport function TrialFulfillmentError(props: TrialFulfillmentErrorProps) {\n return (\n \n \n \n \n {props.error}\n \n \n \n For more information, email{\" \"}\n \n sales@octopus.com\n {\" \"}\n or phone{\" \"}\n \n +1 512-823-0256\n {\" \"}\n \n \n Need to manage your account? Visit the{\" \"}\n \n Control Center\n \n \n \n );\n}\n","import React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport { Box, CircularProgress, Typography } from \"@mui/material\";\nimport { RoutesMap } from \"RoutesMap\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nexport interface TrialFulfillmentPendingProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function TrialFulfillmentPending(props: TrialFulfillmentPendingProps) {\n return (\n \n \n \n Preparing to launch\n \n \n You're less than a minute away from getting started with Octopus.\n \n \n Need to manage your account? Visit the{\" \"}\n \n Control Center\n \n \n \n );\n}\n","import { Button, styled } from \"@mui/material\";\nimport { designSystemColors } from \"@cpt/shared\";\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\nexport const GreenButton = styled(Button)(\n ({ theme }) => `\n text-transform: none;\n color: #fff;\n background-color: ${designSystemColors.green[\"500\"]};\n &:hover {\n background-color: #25d284;\n color: #fff;\n box-shadow: 2px 2px 10px #afffc7;\n }\n `\n) as typeof Button;\n","var _g, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgRocket = function SvgRocket(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 128,\n height: 128,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#rocket_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M48.24 93.379c1.402-2.287 1.498-5.141.535-7.939-.248-.624-.358-1.086-.768-1.575-.155 1.795-.635 3.862-2.097 5.088-3.547 2.7-10.092 3.476-14.474 1.882-.809-4.592.93-10.767 4.068-13.954 1.325-1.39 3.444-1.503 5.238-1.344-.274-.326-.846-.678-1.418-1.03-2.451-1.272-5.279-1.673-7.774-.689-7.162 2.68-12.193 13.837-11.646 26.693 12.865 2.798 24.752-.519 28.336-7.132Z\",\n fill: \"#EA7325\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M47.708 83.839c-1.203-1.764-2.433-3.23-3.115-4.043-.684-.814-1.913-2.28-3.441-3.771-6.235-2.813-11.846 6.334-11.366 16.472 10.063 2.097 19.772-2.166 17.922-8.658Z\",\n fill: \"#FFDF62\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M108.165 26.984s-20.841-5.472-53.487 21.654c-9.849 8.264-19.586 23.644-19.586 23.644l7.756 9.243 65.317-54.54Z\",\n fill: \"#0F4778\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M108.165 26.985s1.614 21.606-30.745 48.758c-9.848 8.264-26.816 15.026-26.816 15.026l-7.757-9.243 65.318-54.541Z\",\n fill: \"#0F4778\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M84.506 69.265C82.53 83.737 76.37 97.983 76.37 97.983S59.95 110.16 46.783 113.2L58.94 83.242l25.566-13.977ZM62.289 42.788C47.693 42.219 32.75 45.68 32.75 45.68s-14.975 13.9-20.254 26.34l31.589-6.483 18.204-22.75Z\",\n fill: \"#449BE1\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M116.296 20.165s-24.384-8.107-59.375 20.987c-10.63 8.92-20.385 26.183-20.385 26.183l9.596 11.437 9.597 11.437s18.695-6.61 29.325-15.53c34.991-29.093 31.242-54.514 31.242-54.514Z\",\n fill: \"#1A77CA\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M77.477 52.733c3.63 4.326 10.073 4.897 14.39 1.275 4.316-3.622 4.873-10.066 1.242-14.392-3.63-4.327-10.072-4.897-14.389-1.275-4.317 3.622-4.873 10.065-1.243 14.392Z\",\n fill: \"#F2F8FD\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M75.602 54.309c-4.47-5.327-3.773-13.387 1.542-17.847 5.314-4.46 13.372-3.745 17.842 1.581 4.47 5.327 3.774 13.387-1.541 17.847-5.471 4.59-13.373 3.745-17.843-1.581ZM91.391 41.06c-2.76-3.29-7.785-3.88-11.224-.994-3.282 2.754-3.861 7.779-.97 11.226 2.761 3.29 7.785 3.88 11.224.994 3.152-2.911 3.574-7.804.97-11.226Z\",\n fill: \"#0F4778\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M97.45 28.47c1.089.338 2.626.519 3.309-.612.371-.616.61-1.238 1.145-1.744a4.531 4.531 0 0 1 1.58-.967c2.323-.827 4.811.435 5.758 2.647.882 2.052-.082 4.785-2.305 5.492-1.285.41-2.184.865-2.188 2.358-.004.407.178 1.237-.184 1.536-.469.393-.674-1.008-.679-1.178-.106.288-.343 2.465-1.05 1.8-.65-.614-.205-2.011-.138-2.763.109-1.26-1.306.132-1.621.391-.495.415-1.8.907-1.668-.272.107-.969 1.128-1.494 1.424-2.356.327-.944-1.537-.5-1.918-.455-.423.043-2.488.215-2.102-.728.309-.77 1.59-1.032 2.297-1.23-.254.069-1.026-.307-1.268-.403a3.05 3.05 0 0 1-1.33-1.003c-.706-.978.378-.682.934-.51l.004-.002Z\",\n fill: \"#F2F8FD\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M68.171 60.275c-3.979-.932-8 .306-10.864 3.243l-28.372 29.68L63.09 70.413c3.39-2.31 5.308-6.056 5.08-10.137Z\",\n fill: \"#449BE1\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"rocket_svg__a\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M0 0h128v128H0z\"\n })))));\n};\nexport { SvgRocket as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF80OThfMTYwNykiPgo8cGF0aCBkPSJNNDguMjM5NyA5My4zNzg4QzQ5LjY0MjQgOTEuMDkyMiA0OS43MzgyIDg4LjIzNzggNDguNzc0NiA4NS40NDAyQzQ4LjUyNzMgODQuODE1NSA0OC40MTY1IDg0LjM1MzcgNDguMDA2OCA4My44NjUzQzQ3Ljg1MTggODUuNjU5NyA0Ny4zNzIgODcuNzI2NyA0NS45MTAyIDg4Ljk1MzNDNDIuMzYyOCA5MS42NTI1IDM1LjgxNzkgOTIuNDI4NyAzMS40MzYgOTAuODM0OUMzMC42Mjc0IDg2LjI0MjkgMzIuMzY1OCA4MC4wNjg0IDM1LjUwMzUgNzYuODgwOUMzNi44Mjg2IDc1LjQ5MTUgMzguOTQ3NSA3NS4zNzc5IDQwLjc0MTYgNzUuNTM2OUM0MC40Njg0IDc1LjIxMTMgMzkuODk2MiA3NC44NTkyIDM5LjMyNCA3NC41MDcyQzM2Ljg3MjggNzMuMjM1MiAzNC4wNDUyIDcyLjgzNCAzMS41NDk4IDczLjgxODNDMjQuMzg4NCA3Ni40OTg2IDE5LjM1NzQgODcuNjU1MSAxOS45MDQyIDEwMC41MTFDMzIuNzY5MSAxMDMuMzA5IDQ0LjY1NTYgOTkuOTkyNCA0OC4yMzk3IDkzLjM3ODhaIiBmaWxsPSIjRUE3MzI1Ii8+CjxwYXRoIGQ9Ik00Ny43MDgzIDgzLjgzODZDNDYuNTA0OCA4Mi4wNzQ1IDQ1LjI3NTQgODAuNjA5NCA0NC41OTI1IDc5Ljc5NTVDNDMuOTA5NSA3OC45ODE2IDQyLjY4MDIgNzcuNTE2NSA0MS4xNTE5IDc2LjAyNUMzNC45MTY5IDczLjIxMjMgMjkuMzA2MiA4Mi4zNTg2IDI5Ljc4NjUgOTIuNDk2NkMzOS44NDk1IDk0LjU5MzggNDkuNTU4IDkwLjMzMSA0Ny43MDgzIDgzLjgzODZaIiBmaWxsPSIjRkZERjYyIi8+CjxwYXRoIGQ9Ik0xMDguMTY1IDI2Ljk4NDJDMTA4LjE2NSAyNi45ODQyIDg3LjMyMzkgMjEuNTExOCA1NC42Nzc2IDQ4LjYzODRDNDQuODI5MyA1Ni45MDIxIDM1LjA5MTUgNzIuMjgxNiAzNS4wOTE1IDcyLjI4MTZMNDIuODQ3OCA4MS41MjUzTDEwOC4xNjUgMjYuOTg0MloiIGZpbGw9IiMwRjQ3NzgiLz4KPHBhdGggZD0iTTEwOC4xNjUgMjYuOTg0NkMxMDguMTY1IDI2Ljk4NDYgMTA5Ljc3OSA0OC41OTA5IDc3LjQyMDIgNzUuNzQzQzY3LjU3MiA4NC4wMDY3IDUwLjYwMzcgOTAuNzY5MyA1MC42MDM3IDkwLjc2OTNMNDIuODQ3NCA4MS41MjU2TDEwOC4xNjUgMjYuOTg0NloiIGZpbGw9IiMwRjQ3NzgiLz4KPHBhdGggZD0iTTg0LjUwNTggNjkuMjY0N0M4Mi41MzEgODMuNzM3IDc2LjM3MDkgOTcuOTgzNCA3Ni4zNzA5IDk3Ljk4MzRDNzYuMzcwOSA5Ny45ODM0IDU5Ljk1IDExMC4xNiA0Ni43ODMxIDExMy4xOTlMNTguOTM5OSA4My4yNDE3TDg0LjUwNTggNjkuMjY0N1oiIGZpbGw9IiM0NDlCRTEiLz4KPHBhdGggZD0iTTYyLjI4ODggNDIuNzg3OEM0Ny42OTM1IDQyLjIxOTUgMzIuNzUwMiA0NS42ODEgMzIuNzUwMiA0NS42ODFDMzIuNzUwMiA0NS42ODEgMTcuNzc1NCA1OS41ODE0IDEyLjQ5NjMgNzIuMDIwNUw0NC4wODQ3IDY1LjUzODNMNjIuMjg4OCA0Mi43ODc4WiIgZmlsbD0iIzQ0OUJFMSIvPgo8cGF0aCBkPSJNMTE2LjI5NiAyMC4xNjQ3QzExNi4yOTYgMjAuMTY0NyA5MS45MTIyIDEyLjA1OCA1Ni45MjEgNDEuMTUyMkM0Ni4yOTEyIDUwLjA3MTcgMzYuNTM1NyA2Ny4zMzUgMzYuNTM1NyA2Ny4zMzVMNDYuMTMyNSA3OC43NzJMNTUuNzI5MyA5MC4yMDkxQzU1LjcyOTMgOTAuMjA5MSA3NC40MjQzIDgzLjU5OTUgODUuMDU0MSA3NC42Nzk5QzEyMC4wNDUgNDUuNTg1OCAxMTYuMjk2IDIwLjE2NDcgMTE2LjI5NiAyMC4xNjQ3WiIgZmlsbD0iIzFBNzdDQSIvPgo8cGF0aCBkPSJNNzcuNDc3MiA1Mi43MzI4QzgxLjEwNzQgNTcuMDU5MiA4Ny41NDk3IDU3LjYzIDkxLjg2NjQgNTQuMDA3OUM5Ni4xODMxIDUwLjM4NTcgOTYuNzM5NiA0My45NDIyIDkzLjEwOTMgMzkuNjE1OEM4OS40NzkxIDM1LjI4OTQgODMuMDM2OCAzNC43MTg2IDc4LjcyMDEgMzguMzQwN0M3NC40MDM0IDQxLjk2MjkgNzMuODQ2OSA0OC40MDY0IDc3LjQ3NzIgNTIuNzMyOFoiIGZpbGw9IiNGMkY4RkQiLz4KPHBhdGggZD0iTTc1LjYwMjQgNTQuMzA4NUM3MS4xMzI2IDQ4Ljk4MTcgNzEuODI4NiA0MC45MjIxIDc3LjE0MzYgMzYuNDYyNEM4Mi40NTg1IDMyLjAwMjYgOTAuNTE2NSAzMi43MTY3IDk0Ljk4NjIgMzguMDQzNUM5OS40NTYgNDMuMzcwMyA5OC43NTk5IDUxLjQyOTkgOTMuNDQ1IDU1Ljg4OTdDODcuOTczNyA2MC40ODA2IDgwLjA3MjEgNTkuNjM1NCA3NS42MDI0IDU0LjMwODVaTTkxLjM5MDggNDEuMDYwNEM4OC42MzAxIDM3Ljc3MDMgODMuNjA2MyAzNy4xODAxIDgwLjE2NzIgNDAuMDY1OEM3Ni44ODQ1IDQyLjgyMDQgNzYuMzA1NiA0Ny44NDQ4IDc5LjE5NzcgNTEuMjkxNkM4MS45NTg1IDU0LjU4MTcgODYuOTgyMyA1NS4xNzE5IDkwLjQyMTMgNTIuMjg2MkM5My41NzI2IDQ5LjM3NSA5My45OTUyIDQ0LjQ4MTcgOTEuMzkwOCA0MS4wNjA0WiIgZmlsbD0iIzBGNDc3OCIvPgo8cGF0aCBkPSJNOTcuNDQ5NSAyOC40NzA4Qzk4LjUzODggMjguODA3NyAxMDAuMDc2IDI4Ljk4ODggMTAwLjc1OSAyNy44NTgzQzEwMS4xMyAyNy4yNDIxIDEwMS4zNjkgMjYuNjE5OSAxMDEuOTA0IDI2LjExNDFDMTAyLjM1OSAyNS42ODU5IDEwMi44OTcgMjUuMzU2NCAxMDMuNDg0IDI1LjE0NjZDMTA1LjgwNyAyNC4zMjAzIDEwOC4yOTUgMjUuNTgxOSAxMDkuMjQyIDI3Ljc5MzVDMTEwLjEyNCAyOS44NDY0IDEwOS4xNiAzMi41NzkyIDEwNi45MzcgMzMuMjg2MUMxMDUuNjUyIDMzLjY5NjIgMTA0Ljc1MyAzNC4xNTEgMTA0Ljc0OSAzNS42NDM5QzEwNC43NDUgMzYuMDUxMyAxMDQuOTI3IDM2Ljg4MTIgMTA0LjU2NSAzNy4xNzk2QzEwNC4wOTYgMzcuNTczIDEwMy44OTEgMzYuMTcxOCAxMDMuODg2IDM2LjAwMTZDMTAzLjc4IDM2LjI5MDIgMTAzLjU0MyAzOC40NjcgMTAyLjgzNiAzNy44MDE1QzEwMi4xODYgMzcuMTg4MiAxMDIuNjMxIDM1Ljc5MDkgMTAyLjY5OCAzNS4wMzk1QzEwMi44MDcgMzMuNzc4NSAxMDEuMzkyIDM1LjE3MDggMTAxLjA3NyAzNS40MzAxQzEwMC41ODIgMzUuODQ0OSA5OS4yNzY3IDM2LjMzNjcgOTkuNDA5NSAzNS4xNTg0Qzk5LjUxNTcgMzQuMTg5MyAxMDAuNTM3IDMzLjY2NDUgMTAwLjgzMyAzMi44MDI0QzEwMS4xNiAzMS44NTggOTkuMjk2MiAzMi4zMDEyIDk4LjkxNSAzMi4zNDc0Qzk4LjQ5MjMgMzIuMzg5OSA5Ni40MjcxIDMyLjU2MjMgOTYuODEzNSAzMS42MTlDOTcuMTIyIDMwLjg0ODQgOTguNDAzMiAzMC41ODcgOTkuMTA5NiAzMC4zODgyQzk4Ljg1NTcgMzAuNDU3OSA5OC4wODQ0IDMwLjA4MTkgOTcuODQyMyAyOS45ODU3Qzk3LjMxNDUgMjkuNzgxNCA5Ni44NTQxIDI5LjQzNDQgOTYuNTEyMyAyOC45ODM1Qzk1LjgwNjQgMjguMDA0OSA5Ni44ODk2IDI4LjMwMSA5Ny40NDY1IDI4LjQ3MzNMOTcuNDQ5NSAyOC40NzA4WiIgZmlsbD0iI0YyRjhGRCIvPgo8cGF0aCBkPSJNNjguMTcxNSA2MC4yNzUzQzY0LjE5MjIgNTkuMzQyNiA2MC4xNzA0IDYwLjU4MTUgNTcuMzA2OSA2My41MTgyTDI4LjkzNDggOTMuMTk4OUw2My4wOTEzIDcwLjQxMThDNjYuNDgwNyA2OC4xMDE3IDY4LjM5OTEgNjQuMzU2MSA2OC4xNzE1IDYwLjI3NTNaIiBmaWxsPSIjNDQ5QkUxIi8+CjwvZz4KPGRlZnM+CjxjbGlwUGF0aCBpZD0iY2xpcDBfNDk4XzE2MDciPgo8cmVjdCB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgZmlsbD0id2hpdGUiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K\";","import React from \"react\";\nimport { Link } from \"react-router-dom\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport { Box, Typography } from \"@mui/material\";\nimport { RoutesMap } from \"RoutesMap\";\nimport { GreenButton } from \"components/Button/GreenButton\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport Rocket from \"resources/images/svgs/rocket.svg\";\n\nexport interface TrialFulfillmentSuccessProps {\n href: string;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function TrialFulfillmentSuccess(props: TrialFulfillmentSuccessProps) {\n return (\n \n \n Your Octopus is ready!\n } sx={{ minWidth: \"8em\", fontSize: \"1.2em\" }}>\n Let's Go\n \n \n Need to manage your account? Visit the{\" \"}\n \n Control Center\n \n \n \n );\n}\n","import React from \"react\";\nimport ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\nimport { Box, Link, Typography } from \"@mui/material\";\n\nexport interface TrialFulfillmentTimeoutProps {\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function TrialFulfillmentTimeout(props: TrialFulfillmentTimeoutProps) {\n return (\n \n \n \n \n Your request to trial Octopus was received, however preparing it may have been delayed.\n \n \n \n Our team has been notified and will setup the trial as soon as possible. You will receive an email confirmation\n once complete.\n \n \n For more information, check{\" \"}\n \n Octopus system status\n \n , email{\" \"}\n \n sales@octopus.com\n {\" \"}\n or phone{\" \"}\n \n +1 512-823-0256\n {\" \"}\n \n \n );\n}\n","var _path,_path2,_path3,_path4,_path5,_path6,_path7,_path8,_path9,_path10,_path11,_g,_g2,_g3,_g4,_g5,_path12,_path13,_path14,_path15,_path16,_path17,_path18,_path19,_path20,_path21,_path22,_path23,_path24,_path25,_path26,_path27,_path28,_path29,_path30,_path31,_path32,_path33,_path34,_path35,_path36,_path37,_path38,_path39,_path40,_path41,_path42,_path43,_path44,_path45,_path46,_path47,_path48,_path49,_path50,_path51,_path52,_path53,_path54,_path55,_path56,_path57,_path58,_path59,_path60,_path61,_path62,_path63,_path64,_path65,_path66,_path67,_path68,_path69,_path70,_path71,_path72,_path73,_path74,_path75,_path76,_path77,_path78,_path79,_path80,_path81,_path82,_path83,_path84,_path85,_path86,_path87,_path88,_path89,_path90,_path91,_path92,_path93,_path94,_path95,_path96,_path97,_path98,_path99,_path100,_path101,_path102,_path103,_path104,_path105,_path106,_path107,_path108,_path109,_path110,_path111,_path112,_path113,_path114,_path115,_path116,_path117,_path118,_path119,_path120,_path121,_path122,_path123,_path124,_path125,_path126,_path127,_path128,_path129,_path130,_path131,_path132,_path133,_path134,_path135,_path136,_path137,_path138,_path139,_path140,_path141,_path142,_path143,_path144,_path145,_path146,_path147,_path148,_path149,_path150,_path151,_path152,_path153,_path154,_path155,_path156,_path157,_path158,_path159,_path160,_path161,_path162,_path163,_path164,_path165,_path166,_path167,_path168,_path169,_path170,_path171,_defs;function _extends(){_extends=Object.assign?Object.assign.bind():function(target){for(var i=1;i(\"\");\n const [error, setError] = useState(null);\n const [loading, setLoading] = useState(true);\n const setTitle = usePageTitle(\"Octopus: Preparing to launch\");\n\n const checkProvisioned = async () => {\n if (!intentId) {\n navigate({ pathname: RoutesMap.notFound });\n return;\n }\n const response = await getTrialFulfilled(intentId);\n if (response.error) {\n switch (response.error) {\n case TrialFulfillmentErrorCode.ActivePlatformLimitExceeded:\n case TrialFulfillmentErrorCode.HistoricalLimitExceeded:\n setError(\"You have reached the limit for the number of allowed trials.\");\n break;\n default:\n setError(\"Sorry, an unknown error occurred.\");\n break;\n }\n setLoading(false);\n }\n if (response.fulfilled) {\n setTitle(\"Your Octopus is ready!\");\n\n if (response.serverLicenses.length > 0 && response.serverLicenses[0]) {\n setHref(ServerLicensesRoutesMap.loadBySerial(response.serverLicenses[0]).root);\n }\n if (response.cloudSubscriptions.length > 0 && response.cloudSubscriptions[0]) {\n setHref(`https://${getHostname(response.cloudSubscriptions[0].dnsPrefix)}`);\n }\n setError(null);\n setLoading(false);\n }\n };\n\n useEffect(() => {\n const timeout = () => setLoading(false);\n const t = setTimeout(timeout, timeoutMs ?? 90000);\n return () => clearTimeout(t);\n }, [timeoutMs]);\n\n usePolling(checkProvisioned, loading);\n\n return (\n \n \n \n {error && }\n {loading && }\n {!error && !loading && href && }\n {!loading && !error && !href && }\n \n \n \n );\n}\n","import { useEffect, useState } from \"react\";\n\nexport function usePageTitle(initialTitle: string) {\n const [title, setTitle] = useState(initialTitle);\n\n useEffect(() => {\n if (title) {\n document.title = title;\n }\n }, [title]);\n\n return setTitle;\n}\n","import type { ZuoraCallbackPageErrorParams, ZuoraCallbackPageSuccessParams } from \"./ZuoraCallbackPageTypes\";\n\nexport const PaymentEventTypes = {\n PaymentSuccessful: \"paymentSuccessful\",\n PaymentFailure: \"paymentFailure\",\n} as const;\n\nexport type PaymentEventTypes = (typeof PaymentEventTypes)[keyof typeof PaymentEventTypes];\n\nexport type EventPaymentFailure = CustomEvent<\n Pick & {\n searchParams: string;\n }\n>;\n\nexport type EventPaymentSuccessful = CustomEvent<\n Pick<\n ZuoraCallbackPageSuccessParams,\n | \"responseFrom\"\n | \"refId\"\n | \"signature\"\n | \"tenantId\"\n | \"token\"\n | \"timestamp\"\n | \"pageId\"\n | \"fieldPassthrough1\"\n | \"fieldPassthrough2\"\n | \"fieldPassthrough3\"\n | \"fieldPassthrough4\"\n | \"fieldPassthrough5\"\n >\n>;\n","export const ResponseFrom = {\n SubmitPage: \"Response_From_Submit_Page\",\n \"3DS\": \"Response_From_3D_Validation\",\n} as const;\n\nexport type ResponseFrom = (typeof ResponseFrom)[keyof typeof ResponseFrom] | (string & {});\n\nexport type ZuoraCallbackPageSuccessParams = {\n success: true;\n /** The payment method Id */\n refId: string;\n} & ZuoraCallbackPageBaseParams;\n\nexport type ZuoraCallbackPageErrorParams = {\n success: false;\n errorCode?: string;\n errorField?: string;\n errorMessage: string;\n} & ZuoraCallbackPageBaseParams;\n\ntype ZuoraCallbackPageBaseParams = {\n success: boolean;\n responseFrom: ResponseFrom;\n /** rawGatewayInfo is a stringified object */\n rawGatewayInfo?: string;\n tenantId: string;\n token: string;\n timestamp: string;\n pageId: string;\n /** Verifies the values originated from Zuora. See [Validate the digital Signature](https://knowledgecenter.zuora.com/Zuora_Payments/Payment_Page_and_Payment_Link/Payment_Pages_2.0/EB_Advanced_Integration_of_Payment_Pages_2.0/Validate_the_Digital_Signature_for_Payment_Pages_2.0) */\n signature: string;\n fieldPassthrough1?: string;\n fieldPassthrough2?: string;\n fieldPassthrough3?: string;\n fieldPassthrough4?: string;\n fieldPassthrough5?: string;\n};\n\nexport type ZuoraCallbackPageParams = ZuoraCallbackPageSuccessParams | ZuoraCallbackPageErrorParams;\n","import React from \"react\";\nimport { useSearchParams } from \"react-router-dom\";\nimport { CircularProgress, Grid, Typography, styled } from \"@mui/material\";\nimport { PaymentEventTypes } from \"shared/PaymentEvents\";\nimport type { ZuoraCallbackPageParams } from \"shared/ZuoraCallbackPageTypes\";\nimport { ResponseFrom } from \"shared/ZuoraCallbackPageTypes\";\n\nconst getZuoraCallbackParams = (searchParams: URLSearchParams): ZuoraCallbackPageParams => {\n const baseParams = {\n success: searchParams.get(\"success\") === \"true\",\n responseFrom: searchParams.get(\"responseFrom\") ?? \"unknown\",\n rawGatewayInfo: searchParams.get(\"rawGatewayInfo\") ?? \"\",\n signature: searchParams.get(\"signature\") ?? \"\",\n token: searchParams.get(\"token\") ?? \"\",\n tenantId: searchParams.get(\"tenantId\") ?? \"\",\n pageId: searchParams.get(\"pageId\") ?? \"\",\n timestamp: searchParams.get(\"timestamp\") ?? \"\",\n fieldPassthrough1: searchParams.get(\"fieldPassthrough1\") ?? undefined,\n fieldPassthrough2: searchParams.get(\"fieldPassthrough2\") ?? undefined,\n fieldPassthrough3: searchParams.get(\"fieldPassthrough3\") ?? undefined,\n fieldPassthrough4: searchParams.get(\"fieldPassthrough4\") ?? undefined,\n fieldPassthrough5: searchParams.get(\"fieldPassthrough5\") ?? undefined,\n };\n\n if (baseParams.success) {\n return {\n responseFrom: baseParams.responseFrom,\n success: baseParams.success,\n rawGatewayInfo: baseParams.rawGatewayInfo,\n signature: baseParams.signature,\n token: baseParams.token,\n tenantId: baseParams.tenantId,\n pageId: baseParams.pageId,\n timestamp: baseParams.timestamp,\n refId: searchParams.get(\"refId\") ?? \"\",\n fieldPassthrough1: baseParams.fieldPassthrough1,\n fieldPassthrough2: baseParams.fieldPassthrough2,\n fieldPassthrough3: baseParams.fieldPassthrough3,\n fieldPassthrough4: baseParams.fieldPassthrough4,\n fieldPassthrough5: baseParams.fieldPassthrough5,\n };\n }\n\n return {\n responseFrom: baseParams.responseFrom,\n success: baseParams.success,\n rawGatewayInfo: baseParams.rawGatewayInfo,\n signature: baseParams.signature,\n token: baseParams.token,\n tenantId: baseParams.tenantId,\n pageId: baseParams.pageId,\n timestamp: baseParams.timestamp,\n errorField: searchParams.get(\"errorField\") ?? \"\",\n errorCode: searchParams.get(\"errorCode\") ?? \"\",\n errorMessage: searchParams.get(\"errorMessage\") ?? \"\",\n fieldPassthrough1: baseParams.fieldPassthrough1,\n fieldPassthrough2: baseParams.fieldPassthrough2,\n fieldPassthrough3: baseParams.fieldPassthrough3,\n fieldPassthrough4: baseParams.fieldPassthrough4,\n fieldPassthrough5: baseParams.fieldPassthrough5,\n };\n};\n\nconst BodyStyle = () => ;\n\nconst Container = styled(\"div\")`\n display: flex;\n align-items: center;\n justify-content: center;\n min-height: 412px;\n`;\n\nexport function ZuoraCallbackPage() {\n const [searchParams] = useSearchParams();\n const callbackParams = getZuoraCallbackParams(searchParams);\n const { success, responseFrom } = callbackParams;\n const error = !success || !(responseFrom === ResponseFrom.SubmitPage || responseFrom === ResponseFrom[\"3DS\"]);\n\n if ((responseFrom === ResponseFrom.SubmitPage || responseFrom === ResponseFrom[\"3DS\"]) && callbackParams.success) {\n // payment successful\n const {\n tenantId,\n token,\n timestamp,\n pageId,\n refId,\n signature,\n fieldPassthrough1,\n fieldPassthrough2,\n fieldPassthrough3,\n fieldPassthrough4,\n fieldPassthrough5,\n } = callbackParams;\n const event = new CustomEvent(PaymentEventTypes.PaymentSuccessful, {\n detail: {\n responseFrom,\n tenantId,\n token,\n timestamp,\n pageId,\n refId,\n signature,\n fieldPassthrough1,\n fieldPassthrough2,\n fieldPassthrough3,\n fieldPassthrough4,\n fieldPassthrough5,\n },\n });\n window.parent.dispatchEvent(event);\n } else {\n // payment failure\n const errorDetails = (() => {\n if (!callbackParams.success) {\n const { errorCode, errorField, errorMessage } = callbackParams;\n return { errorCode, errorField, errorMessage };\n }\n })();\n const event = new CustomEvent(PaymentEventTypes.PaymentFailure, {\n detail: { responseFrom, ...errorDetails, searchParams: searchParams.toString() },\n });\n window.parent.dispatchEvent(event);\n }\n\n return (\n <>\n \n \n \n \n {!error && (\n \n Processing your payment\n \n )}\n \n \n \n );\n}\n","import React, { createContext, useContext, useEffect, useState } from \"react\";\nimport type { PropsWithChildren } from \"react\";\n\nexport interface EntityProviderState {\n entity: T | undefined;\n refresh?: () => void | Promise;\n update: (entity: T) => void;\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst EntityProviderContext = createContext>({\n entity: undefined,\n refresh: undefined,\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n update: () => {},\n});\n\nexport const useEntity = (): EntityProviderState => {\n return useContext(EntityProviderContext);\n};\n\nexport type EntityProviderProps = PropsWithChildren<{\n entity: T;\n refresh?: () => void | Promise;\n}>;\n\nexport function EntityProvider(props: EntityProviderProps) {\n const { entity, refresh, children } = props;\n\n const [stateValue, setStateValue] = useState(entity);\n\n useEffect(() => {\n setStateValue(entity);\n }, [entity]);\n\n return (\n \n {children}\n \n );\n}\n","import React from \"react\";\nimport styled from \"@emotion/styled\";\nimport type { ButtonProps } from \"@mui/material\";\nimport { Button, Popover, Typography } from \"@mui/material\";\n\nconst SecondaryStyledButton = styled(Button)`\n text-transform: none;\n background-color: rgba(26, 119, 202, 0.06);\n color: #1a77ca;\n font-weight: 700;\n line-height: 24px;\n height: 44px;\n\n &.MuiButton-root:hover,\n &.MuiButton-root:focus {\n background-color: rgba(26, 119, 202, 0.16);\n }\n`;\n\nexport interface CopyToClipboardButtonProps extends ButtonProps {\n value: string;\n alertMessage?: string;\n onCopied?: () => void;\n}\n\nexport function CopyToClipboardButton(props: CopyToClipboardButtonProps) {\n const { value, alertMessage } = props;\n const [anchorEl, setAnchorEl] = React.useState(null);\n\n const handleClick = (event: React.MouseEvent) => {\n copyToClipboard();\n setAnchorEl(event.currentTarget);\n };\n\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const copyToClipboard = async () => {\n if (value) {\n await navigator.clipboard.writeText(value);\n props.onCopied?.();\n }\n };\n\n const open = Boolean(anchorEl);\n const id = open ? \"simple-popover\" : undefined;\n\n return (\n <>\n \n \n {alertMessage || \"Copied\"}\n \n \n );\n}\n","// Should be kept up to date with Commercial.Billing.Persistence.Models.Permission.cs\nexport const RbacPermissions = {\n CloudSubscription: {\n AuthenticateToInstanceAsUser: \"CloudSubscription.AuthenticateToInstanceAsUser\",\n AuthenticateToInstanceAsAdmin: \"CloudSubscription.AuthenticateToInstanceAsAdmin\",\n ViewConfiguration: \"CloudSubscription.ViewConfiguration\",\n ManageConfiguration: \"CloudSubscription.ManageConfiguration\",\n ViewBilling: \"CloudSubscription.ViewBilling\",\n ManageBilling: \"CloudSubscription.ManageBilling\",\n ViewAccessControl: \"CloudSubscription.ViewAccessControl\",\n ManageAccessControl: \"CloudSubscription.ManageAccessControl\",\n },\n SubscriptionGroup: {\n Rename: \"SubscriptionGroup.Rename\",\n Delete: \"SubscriptionGroup.Delete\",\n ViewAccessControl: \"SubscriptionGroup.ViewAccessControl\",\n ManageAccessControl: \"SubscriptionGroup.ManageAccessControl\",\n },\n ServerLicense: {\n ViewLicenseKeyXml: \"ServerLicense.ViewLicenseKeyXml\",\n ViewBilling: \"ServerLicense.ViewBilling\",\n ManageBilling: \"ServerLicense.ManageBilling\",\n ViewAccessControl: \"ServerLicense.ViewAccessControl\",\n ManageAccessControl: \"ServerLicense.ManageAccessControl\",\n },\n} as const;\n\ntype CloudSubscriptionPermissions =\n (typeof RbacPermissions.CloudSubscription)[keyof typeof RbacPermissions.CloudSubscription];\ntype SubscriptionGroupPermissions =\n (typeof RbacPermissions.SubscriptionGroup)[keyof typeof RbacPermissions.SubscriptionGroup];\ntype ServerLicensePermissions = (typeof RbacPermissions.ServerLicense)[keyof typeof RbacPermissions.ServerLicense];\n\nexport type RbacPermission = CloudSubscriptionPermissions | SubscriptionGroupPermissions | ServerLicensePermissions;\n","var _path, _path2;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgBlobOctopus = function SvgBlobOctopus(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 236,\n height: 230,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M104.564 1.892c37.133-11.24 68.68 29.987 92.648 60.557 23.691 30.215 47.005 66.678 35.967 103.481-10.566 35.228-50.036 50.475-85.251 60.833-27.548 8.104-54.789-.178-80.995-11.932C39.35 202.461 1.135 190.69.019 160.424c-1.1-29.828 46.374-32.391 62.794-57.291C83.95 71.083 67.873 13 104.564 1.893Z\",\n fill: \"#F5F6F8\"\n })), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M82.215 146.099c7.51-4.796 16.34-13.032 12.991-22.73-1.827-5.283-4.36-9.805-4.699-15.514a34.741 34.741 0 0 1 2.15-14.22C99.4 75.702 119.5 67.206 137.544 72.61c16.77 4.994 28.318 24.36 21.361 41.107-4.008 9.682-5.804 17.295 3.133 24.77 2.426 2.055 8.323 5.115 8.293 8.754 0 4.75-9.445-1.02-10.489-1.842 1.198 2.07 13.068 14.341 5.513 15.224-6.956.807-13.099-8.815-17.276-12.956-7.018-6.942-5.789 8.419-5.82 11.586 0 5.009-3.624 15.225-10.028 8.556-5.283-5.465-3.286-14.159-6.972-20.218-4.023-6.653-10.749 6.638-12.393 9.135-1.873 2.725-11.241 15.864-14.957 8.86-3.071-5.678 1.812-14.6 4.177-19.791-.86 1.857-7.002 4.567-8.8 5.526a24.095 24.095 0 0 1-12.714 2.908c-9.43-.685-2.196-5.648 1.643-8.099v-.031Z\",\n fill: \"#0D80D8\"\n })));\n};\nexport { SvgBlobOctopus as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjM2IiBoZWlnaHQ9IjIzMCIgdmlld0JveD0iMCAwIDIzNiAyMzAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTA0LjU2NCAxLjg5MjM0QzE0MS42OTcgLTkuMzQ4MjQgMTczLjI0NCAzMS44NzkxIDE5Ny4yMTIgNjIuNDQ4NkMyMjAuOTAzIDkyLjY2NDIgMjQ0LjIxNyAxMjkuMTI3IDIzMy4xNzkgMTY1LjkzQzIyMi42MTMgMjAxLjE1OCAxODMuMTQzIDIxNi40MDUgMTQ3LjkyOCAyMjYuNzYzQzEyMC4zOCAyMzQuODY3IDkzLjEzOSAyMjYuNTg1IDY2LjkzMjggMjE0LjgzMUMzOS4zNTE0IDIwMi40NjEgMS4xMzUwMSAxOTAuNjkgMC4wMTg4MDA4IDE2MC40MjRDLTEuMDgxMjIgMTMwLjU5NiA0Ni4zOTI4IDEyOC4wMzMgNjIuODEzNSAxMDMuMTMzQzgzLjk0OTEgNzEuMDgzMiA2Ny44NzIxIDEyLjk5OTUgMTA0LjU2NCAxLjg5MjM0WiIgZmlsbD0iI0Y1RjZGOCIvPgo8cGF0aCBkPSJNODIuMjE0NyAxNDYuMDk5Qzg5LjcyNDEgMTQxLjMwMyA5OC41NTQxIDEzMy4wNjcgOTUuMjA2MyAxMjMuMzY5QzkzLjM3ODkgMTE4LjA4NiA5MC44NDUxIDExMy41NjQgOTAuNTA3MiAxMDcuODU1QzkwLjIyNCAxMDMuMDE5IDkwLjk1NjEgOTguMTc3IDkyLjY1NzIgOTMuNjM1NkM5OS4zOTg3IDc1LjcwMTEgMTE5LjUgNjcuMjA1OCAxMzcuNTQ0IDcyLjYxMDVDMTU0LjMxNCA3Ny42MDQyIDE2NS44NjIgOTYuOTY5NyAxNTguOTA1IDExMy43MTdDMTU0Ljg5NyAxMjMuMzk5IDE1My4xMDEgMTMxLjAxMiAxNjIuMDM4IDEzOC40ODdDMTY0LjQ2NCAxNDAuNTQyIDE3MC4zNjEgMTQzLjYwMiAxNzAuMzMxIDE0Ny4yNDFDMTcwLjMzMSAxNTEuOTkxIDE2MC44ODYgMTQ2LjIyMSAxNTkuODQyIDE0NS4zOTlDMTYxLjA0IDE0Ny40NjkgMTcyLjkxIDE1OS43NCAxNjUuMzU1IDE2MC42MjNDMTU4LjM5OSAxNjEuNDMgMTUyLjI1NiAxNTEuODA4IDE0OC4wNzkgMTQ3LjY2N0MxNDEuMDYxIDE0MC43MjUgMTQyLjI5IDE1Ni4wODYgMTQyLjI1OSAxNTkuMjUzQzE0Mi4yNTkgMTY0LjI2MiAxMzguNjM1IDE3NC40NzggMTMyLjIzMSAxNjcuODA5QzEyNi45NDggMTYyLjM0NCAxMjguOTQ1IDE1My42NSAxMjUuMjU5IDE0Ny41OTFDMTIxLjIzNiAxNDAuOTM4IDExNC41MSAxNTQuMjI5IDExMi44NjYgMTU2LjcyNkMxMTAuOTkzIDE1OS40NTEgMTAxLjYyNSAxNzIuNTkgOTcuOTA5MSAxNjUuNTg2Qzk0LjgzNzggMTU5LjkwOCA5OS43MjEyIDE1MC45ODYgMTAyLjA4NiAxNDUuNzk1QzEwMS4yMjYgMTQ3LjY1MiA5NS4wODM1IDE1MC4zNjIgOTMuMjg2OCAxNTEuMzIxQzg5LjQwMiAxNTMuNDQgODQuOTk5OSAxNTQuNDQ2IDgwLjU3MTYgMTU0LjIyOUM3MS4xNDI2IDE1My41NDQgNzguMzc1NiAxNDguNTgxIDgyLjIxNDcgMTQ2LjEzVjE0Ni4wOTlaIiBmaWxsPSIjMEQ4MEQ4Ii8+Cjwvc3ZnPgo=\";","export enum CloudSubscriptionStatus {\n None = \"None\",\n Subscribed = \"Subscribed\",\n Lapsed = \"Lapsed\",\n Cancelled = \"Cancelled\",\n Terminated = \"Terminated\",\n Unused = \"Unused\",\n Abandoned = \"Abandoned\",\n}\n\nexport function IsSubscribedOrLapsed(status: CloudSubscriptionStatus) {\n return status === CloudSubscriptionStatus.Subscribed || status === CloudSubscriptionStatus.Lapsed;\n}\n","import React from \"react\";\nimport CloudIcon from \"@mui/icons-material/Cloud\";\nimport HelpIcon from \"@mui/icons-material/Help\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { Box, CircularProgress, Tooltip } from \"@mui/material\";\nimport { DateTime, Duration } from \"luxon\";\nimport { CloudSubscriptionStatus } from \"utils/CloudSubscription/CloudSubscriptionStatus\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { AssumedInstanceProvisioningState } from \"client/api/CloudSubscriptionApi\";\nimport { themeTokens } from \"components/Theme/theme\";\n\ninterface CloudSubscriptionProps {\n cloudSubscription: CloudSubscriptionDto;\n size?: \"large\" | \"small\" | \"inherit\" | \"medium\";\n sx?: SxProps;\n}\n\nconst getAssumedProvisioningState = (cloudSubscription: CloudSubscriptionDto) => {\n if (cloudSubscription.isInstanceProvisioned) return AssumedInstanceProvisioningState.Succeeded;\n\n const now = DateTime.utc();\n\n return now.diff(cloudSubscription.createdDate, \"minute\") <= Duration.fromISO(\"PT10M\") // InstanceProvisioningFailureTimeouts.InitialProvision\n ? AssumedInstanceProvisioningState.Provisioning\n : AssumedInstanceProvisioningState.Failed;\n};\n\nexport function CloudSubscriptionStatusIcon(props: CloudSubscriptionProps) {\n const { cloudSubscription, size = \"large\", sx } = props;\n\n const assumedProvisioningState = getAssumedProvisioningState(cloudSubscription);\n\n let color: string = themeTokens.color.icon.link.default;\n let icon = ;\n let tooltipText = \"This cloud subscription is active\";\n\n switch (cloudSubscription.cloudSubscriptionStatus) {\n case CloudSubscriptionStatus.Subscribed:\n if (assumedProvisioningState == AssumedInstanceProvisioningState.Succeeded) break; //it's still provisioning and we don't assume it's failed\n\n icon = ;\n tooltipText = \"This cloud subscription is still provisioning\";\n break;\n case CloudSubscriptionStatus.Lapsed:\n color = themeTokens.color.icon.danger;\n tooltipText = \"This cloud subscription has a payment issue\";\n break;\n\n case CloudSubscriptionStatus.Cancelled:\n color = themeTokens.color.icon.disabled;\n tooltipText = \"This cloud subscription has been cancelled\";\n break;\n\n case CloudSubscriptionStatus.Terminated:\n color = \"\";\n tooltipText = \"This cloud subscription has been deleted\";\n break;\n\n case CloudSubscriptionStatus.None:\n default:\n icon = ;\n color = themeTokens.color.icon.warning;\n tooltipText = \"This cloud subscription is in an unknown state, please contact support\";\n break;\n }\n\n return (\n \n {icon}\n \n );\n}\n","export function noOp() {\n //empty on purpose\n}\n","import axiosClient from \"client/axios-client\";\n\nconst BASE_URL = \"contact-requests\";\n\nexport type ContactRequestSource = \"ControlCenterCloud\" | \"ControlCenterSelfHosted\" | \"Dashboard\";\n\ntype CreateContactRequestDto = {\n name: string;\n email: string;\n phone: string;\n reason: string;\n message: string;\n source: ContactRequestSource;\n licenseSerial?: string;\n projectQuantity?: string;\n};\n\nexport const createContactRequest = async (request: CreateContactRequestDto): Promise => {\n await axiosClient.post(`${BASE_URL}/sales`, request);\n};\n","const ContactSalesReasonsKeys = {\n BillingOptions: \"billing-options\",\n ServerLicenseRenewal: \"server-license-renewal\",\n Enterprise: \"enterprise\",\n Professional: \"professional\",\n Starter: \"starter\",\n Community: \"community\",\n UsageEstimation: \"usage-estimation\",\n VolumePricing: \"volume-pricing\",\n ModifySubscription: \"modify-subscription\",\n Other: \"other\",\n} as const;\n\nexport const contactSalesReasons = Object.values(ContactSalesReasonsKeys);\n\nexport type ContactSalesReason = (typeof contactSalesReasons)[number];\n\nexport const ContactSalesReasonLabels: Record = {\n \"billing-options\": \"Billing options\",\n \"server-license-renewal\": \"Arrange license renewal\",\n enterprise: \"Enterprise\",\n professional: \"Professional\",\n starter: \"Starter\",\n community: \"Community\",\n \"usage-estimation\": \"Usage estimation\",\n \"volume-pricing\": \"Volume pricing\",\n \"modify-subscription\": \"Make changes to my subscription\",\n other: \"Other\",\n};\n\nexport const ContactSalesMessageTemplates: Record = {\n \"billing-options\": \"\",\n \"server-license-renewal\":\n \"Hello,\\n\\nI would like to arrange my next Server license renewal. \\n\\nThanks.\",\n enterprise: \"\",\n professional: \"\",\n starter: \"\",\n community: \"\",\n \"usage-estimation\": \"\",\n \"volume-pricing\": \"\",\n \"modify-subscription\": \"\",\n other: \"\",\n};\n","import React from \"react\";\nimport { LoadingButton } from \"@mui/lab\";\nimport type { LoadingButtonProps } from \"@mui/lab/LoadingButton/LoadingButton\";\n\ntype LoadingSubmitButtonProps = LoadingButtonProps & {\n isLoading?: boolean;\n isDisabled?: boolean;\n disableIcon?: boolean;\n label?: string;\n formName?: string;\n};\n\nexport function LoadingSubmitButton(props: LoadingSubmitButtonProps) {\n const { isLoading, isDisabled, disableIcon, label, formName, ...rest } = props;\n return (\n \n {label || \"Submit\"}\n \n );\n}\n","import React, { useState } from \"react\";\nimport { Button, Grid } from \"@mui/material\";\nimport { FormProvider, useForm } from \"react-hook-form\";\nimport type { FieldValues, UseFormReturn } from \"react-hook-form/dist/types\";\nimport type { DefaultValues } from \"react-hook-form/dist/types/form\";\nimport { ErrorAlert } from \"../alert/ErrorAlert\";\nimport { LoadingSubmitButton } from \"./LoadingSubmitButton\";\n\nexport type SubmittableFormProps = {\n submitAction: (data: T, e?: React.BaseSyntheticEvent) => Promise | void;\n children: (formController: UseFormReturn) => React.ReactNode;\n defaultValues?: DefaultValues;\n readOnly?: boolean;\n submitLabel?: string;\n onCancel?: () => void;\n cancelLabel?: string;\n alwaysEnableSubmit?: boolean;\n noValidate?: boolean;\n};\n\nexport function SubmittableForm(props: SubmittableFormProps) {\n const {\n submitAction,\n children,\n defaultValues,\n readOnly,\n submitLabel,\n onCancel,\n cancelLabel,\n alwaysEnableSubmit,\n noValidate,\n } = props;\n const [isLoading, setIsLoading] = useState(false);\n const [apiError, setApiError] = useState(undefined);\n\n const formController = useForm({ mode: \"onChange\", defaultValues });\n\n const onSubmit = async (data: T, e?: React.BaseSyntheticEvent) => {\n try {\n setIsLoading(true);\n\n // The UnpackNestedValue type doesn't play well with Luxon's DateTime type so if we cast as the generic type everything works\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n await submitAction(data as T, e);\n } catch (ex) {\n setApiError(ex);\n } finally {\n setIsLoading(false);\n }\n };\n\n return (\n \n
\n \n <>\n {!!apiError && }\n {children(formController)}\n {!readOnly && (\n \n {onCancel && (\n \n {cancelLabel ?? \"Cancel\"}\n \n )}\n \n \n )}\n \n \n
\n
\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport {\n Box,\n Dialog,\n DialogContent,\n DialogContentText,\n DialogTitle,\n Grid,\n IconButton,\n Link,\n Stack,\n TextField,\n} from \"@mui/material\";\nimport { FormSelect } from \"@cpt/components\";\nimport { recordEntries } from \"utils/recordUtils\";\nimport type { ContactRequestSource } from \"client/api/ContactRequestsApi\";\nimport { createContactRequest } from \"client/api/ContactRequestsApi\";\nimport type { ContactSalesReason } from \"components/Dialogs/ContactSalesDialog/ContactSalesReasons\";\nimport { ContactSalesReasonLabels } from \"components/Dialogs/ContactSalesDialog/ContactSalesReasons\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\nimport { SubmittableForm } from \"components/form/SubmittableForm\";\nimport type { DialogProps } from \"../DialogProps\";\n\n//we want a custom onClose\ntype ContactSalesModalProps = Omit & {\n onClose: (data?: ContactSalesFields) => void;\n defaults?: Partial;\n reasons?: ContactSalesReason[];\n source: ContactRequestSource;\n serial?: string;\n};\n\nexport type ContactSalesFields = {\n name: string;\n email: string;\n phone: string;\n message: string;\n reason: ContactSalesReason;\n projectQuantity?: string;\n};\n\nexport function ContactSalesDialog(props: ContactSalesModalProps) {\n const { open, onClose, defaults, source, serial, reasons } = props;\n\n const [error, setError] = useState();\n\n const reasonListItems = useMemo(() => {\n return recordEntries(ContactSalesReasonLabels).filter(([k]) => {\n //if no reasons are specified, use them all\n if (!reasons || reasons.length === 0) {\n return true;\n }\n\n //include this entry if it's been specified\n return reasons.indexOf(k) !== -1;\n });\n }, [reasons]);\n\n const contactSales = async (fields: ContactSalesFields) => {\n try {\n await createContactRequest({\n ...fields,\n projectQuantity: fields.projectQuantity,\n reason: ContactSalesReasonLabels[fields.reason],\n source,\n licenseSerial: serial,\n });\n\n onClose(fields);\n } catch (ex) {\n if (ex instanceof Error) {\n setError(ex);\n }\n }\n };\n\n return (\n onClose()} maxWidth={\"md\"}>\n \n Contact sales\n {onClose && (\n onClose()}\n sx={{\n position: \"absolute\",\n right: 8,\n top: 8,\n color: (theme) => theme.palette.grey[500],\n }}\n >\n \n \n )}\n \n \n {error && }\n \n Fill in the form and we'll get back to you in 1–3 business days. If you prefer to get in touch directly,\n email sales@octopus.com or phone{\" \"}\n +1 512-823-0256.\n \n onClose()}\n cancelLabel=\"Close\"\n defaultValues={defaults}\n alwaysEnableSubmit\n >\n {(formController) => {\n const { register, formState } = formController;\n return (\n \n \n \n\n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n }}\n \n \n \n );\n}\n","/*\n Provides the ability to get an array of the keys from a Record in the correct type\n */\nexport function recordKeys(obj: Record) {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return Object.keys(obj) as K[];\n}\n/*\n Provides the ability to get an array of the entries from a Record in the correct types\n */\nexport function recordEntries(obj: Record) {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return Object.entries(obj) as [K, T][];\n}\n","import type { PropsWithChildren } from \"react\";\nimport { createContext, useContext, useState } from \"react\";\nimport React from \"react\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport { noOp } from \"utils/noOp\";\nimport type { ContactRequestSource } from \"client/api/ContactRequestsApi\";\nimport type { ContactSalesFields } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialog\";\nimport { ContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialog\";\nimport type { ContactSalesReason } from \"./ContactSalesReasons\";\n\ntype ContactSalesDialogState = {\n showDialog: (defaultValues: Partial) => void;\n open: boolean;\n submittedData?: ContactSalesFields;\n};\n\nconst ContactSalesDialogContext = createContext({\n showDialog: noOp,\n open: false,\n});\n\nexport const useContactSalesDialog = (): ContactSalesDialogState => {\n return useContext(ContactSalesDialogContext);\n};\n\ntype ContactSalesDialogProviderProps = PropsWithChildren<{\n source: ContactRequestSource;\n serial?: string;\n reasons?: ContactSalesReason[];\n}>;\n\nexport function ContactSalesDialogProvider(props: ContactSalesDialogProviderProps) {\n const { children, source, serial, reasons } = props;\n const { userInfo } = useUserContext();\n const [open, setOpen] = useState(false);\n const [submittedData, setSubmittedData] = useState();\n\n const [defaults, setDefaults] = useState | undefined>({\n name: userInfo ? `${userInfo.firstName} ${userInfo.lastName}` : undefined,\n email: userInfo?.email,\n });\n\n const showDialog = (defaultValues: Partial) => {\n setDefaults({\n ...defaults,\n projectQuantity: undefined,\n ...defaultValues,\n });\n setOpen(true);\n };\n\n const hideDialog = (data?: ContactSalesFields) => {\n setOpen(false);\n setSubmittedData(data);\n };\n\n return (\n \n {children}\n \n \n );\n}\n","import React from \"react\";\nimport type { ReactElement } from \"react\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport { IsSubscribedOrLapsed } from \"utils/CloudSubscription/CloudSubscriptionStatus\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\n\ntype UserCanAccessCloudInstanceProps = React.PropsWithChildren<{\n subscription: CloudSubscriptionDto;\n withoutAccess?: ReactElement;\n}>;\n\nexport function UserCanAccessCloudInstance(props: UserCanAccessCloudInstanceProps) {\n const { subscription } = props;\n const { hasPermissionForAsset } = useUserContext();\n\n const isSubscriptionActive = IsSubscribedOrLapsed(subscription?.cloudSubscriptionStatus);\n\n const isInstanceUser = hasPermissionForAsset(\n RbacPermissions.CloudSubscription.AuthenticateToInstanceAsUser,\n subscription?.id,\n subscription?.subscriptionGroup?.id\n );\n const isInstanceAdmin = hasPermissionForAsset(\n RbacPermissions.CloudSubscription.AuthenticateToInstanceAsAdmin,\n subscription?.id,\n subscription?.subscriptionGroup?.id\n );\n const canAccessCloudInstance = isSubscriptionActive && (isInstanceUser || isInstanceAdmin);\n\n return <>{canAccessCloudInstance ? props.children : props.withoutAccess};\n}\n","import React from \"react\";\nimport { Alert } from \"@mui/material\";\nimport type { ContactSalesReason } from \"components/Dialogs/ContactSalesDialog/ContactSalesReasons\";\n\nexport function ContactSalesSuccessAlert(props: { reason?: ContactSalesReason }) {\n const { reason } = props;\n\n const getReasonText = (reason: ContactSalesReason): string => {\n switch (reason) {\n case \"server-license-renewal\":\n return \"license renewal request\";\n case \"enterprise\":\n return \"enterprise inquiry\";\n case \"usage-estimation\":\n return \"usage estimation inquiry\";\n case \"volume-pricing\":\n return \"volume pricing inquiry\";\n default:\n return \"inquiry\";\n }\n };\n\n if (!reason) {\n return null;\n }\n\n return (\n \n {/* eslint-disable-next-line @typescript-eslint/consistent-type-assertions */}\n The Sales team received your {getReasonText(reason)}. They will be in touch in 1–3 business days.\n \n );\n}\n","import React from \"react\";\nimport { OpenInNew } from \"@mui/icons-material\";\nimport { Box, Button, Grid, Stack, Typography } from \"@mui/material\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { getHostname } from \"utils/formatters/DnsFormatters\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { CloudSubscriptionStatusIcon } from \"components/Dashboard/CloudSubscriptions/CloudSubscriptionStatusIcon\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { UserCanAccessCloudInstance } from \"areas/cloudSubscriptions/components/UserCanAccessCloudInstance\";\nimport { ContactSalesSuccessAlert } from \"areas/serverLicenses/detail/components/ContactSalesSuccessAlert\";\n\ninterface CloudSubscriptionHeaderProps {\n pageName: string;\n actions?: React.ReactNode[];\n}\n\nexport function CloudSubscriptionHeader(props: CloudSubscriptionHeaderProps) {\n const { pageName, actions } = props;\n const { entity: cloudSubscription } = useEntity();\n const { submittedData } = useContactSalesDialog();\n\n const hostname = cloudSubscription && getHostname(cloudSubscription.dnsPrefix);\n\n if (!cloudSubscription) return <>;\n\n return (\n <>\n \n \n \n \n \n \n \n {cloudSubscription.friendlyName}\n \n \n {pageName}\n \n \n \n \n \n \n \n {actions}\n \n }\n >\n {hostname}\n \n \n \n \n \n \n \n {submittedData && (\n \n \n \n )}\n \n );\n}\n","import React, { useEffect } from \"react\";\nimport { useLocation } from \"react-router-dom\";\nimport { ContentCopy } from \"@mui/icons-material\";\nimport { Box, Grid, Stack, styled, Typography } from \"@mui/material\";\nimport { useFrontendMonitoring } from \"contexts/FrontendMonitoringProvider/FrontendMonitoringProvider\";\nimport { CopyToClipboardButton } from \"components/CopyToClipboardButton/CopyToClipboardButton\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport type { RbacPermission } from \"components/authorization/RbacPermissions\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport BlobOctopus from \"resources/images/svgs/blob-octopus.svg\";\nimport { CloudSubscriptionHeader } from \"areas/cloudSubscriptions/components/CloudSubscriptionHeader\";\n\nconst ImageContainer = styled(\"img\")`\n display: block;\n margin-left: auto;\n margin-right: auto;\n margin-bottom: 0.35em;\n`;\n\ntype ForbiddenPageProps = {\n permission: RbacPermission;\n};\n\nexport function ForbiddenPage(props: ForbiddenPageProps) {\n const { frontendMonitoring } = useFrontendMonitoring();\n const location = useLocation();\n useEffect(() => {\n frontendMonitoring.trackEvent({ name: \"ForbiddenPage\" }, { urlPath: location.pathname });\n }, [frontendMonitoring, location.pathname]);\n\n const { permission } = props;\n const { title, message, showCopyLinkButton } = getPermissionError(permission);\n return (\n <>\n \n \n \n \n \n \n \n {title}\n \n \n {message}\n \n {showCopyLinkButton && (\n \n \n Copy URL to clipboard\n \n )}\n \n \n \n );\n}\n\nconst Default = {\n title: \"Permission Denied\",\n message: \"You do not have the required permissions to perform this action.\",\n showCopyLinkButton: false,\n};\n\nfunction getPermissionError(permission: RbacPermission): {\n title: string;\n message: string;\n showCopyLinkButton: boolean;\n} {\n switch (permission) {\n case RbacPermissions.CloudSubscription.AuthenticateToInstanceAsUser:\n case RbacPermissions.CloudSubscription.AuthenticateToInstanceAsAdmin:\n case RbacPermissions.CloudSubscription.ViewConfiguration:\n case RbacPermissions.CloudSubscription.ManageConfiguration:\n case RbacPermissions.CloudSubscription.ViewBilling:\n case RbacPermissions.CloudSubscription.ViewAccessControl:\n case RbacPermissions.CloudSubscription.ManageAccessControl:\n case RbacPermissions.SubscriptionGroup.Rename:\n case RbacPermissions.SubscriptionGroup.Delete:\n case RbacPermissions.SubscriptionGroup.ViewAccessControl:\n case RbacPermissions.SubscriptionGroup.ManageAccessControl:\n case RbacPermissions.ServerLicense.ViewLicenseKeyXml:\n case RbacPermissions.ServerLicense.ViewBilling:\n case RbacPermissions.ServerLicense.ManageBilling:\n case RbacPermissions.ServerLicense.ViewAccessControl:\n case RbacPermissions.ServerLicense.ManageAccessControl:\n return Default;\n\n case RbacPermissions.CloudSubscription.ManageBilling:\n return {\n title: \"Sorry, you don't have permission to purchase a subscription\",\n message: \"You can share this link with your billing administrator and ask them to complete the purchase.\",\n showCopyLinkButton: true,\n };\n\n default:\n return Default;\n }\n}\n","import React from \"react\";\nimport { Outlet } from \"react-router-dom\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport type { SubscriptionGroupDto } from \"client/api/common/SubscriptionGroupDto\";\nimport type { RbacPermission } from \"components/authorization/RbacPermissions\";\nimport { ForbiddenPage } from \"pages/ForbiddenPage\";\n\ntype ProtectedRouteProps = {\n permission: RbacPermission;\n element?: React.ReactNode;\n};\ntype ObjectWithAssetId = object & {\n id: string;\n subscriptionGroup?: SubscriptionGroupDto;\n};\n\nfunction getAssetIds(entity?: ObjectWithAssetId): [string | undefined, string | undefined] {\n return [entity?.id, entity?.subscriptionGroup?.id];\n}\n\nexport function ProtectedRoute(props: ProtectedRouteProps) {\n const { permission, element } = props;\n const { entity } = useEntity();\n const [assetId, subscriptionGroupId] = getAssetIds(entity);\n const { hasPermissionForAsset } = useUserContext();\n return hasPermissionForAsset(permission, assetId, subscriptionGroupId) ? (\n <>{element || }\n ) : (\n \n );\n}\n","import React from \"react\";\nimport { Outlet, useMatch, useParams } from \"react-router-dom\";\nimport { Container } from \"@mui/material\";\nimport { EntityProvider } from \"contexts/EntityProvider/EntityProvider\";\nimport type { UserContextState } from \"contexts/UserProvider/UserProvider\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { canUpgradeCloudSubscription } from \"utils/CloudSubscription/CanUpgrade\";\nimport { IsSubscribedOrLapsed } from \"utils/CloudSubscription/CloudSubscriptionStatus\";\nimport { LoadablePage } from \"shared/LoadablePage\";\nimport { getCloudSubscriptionById } from \"client/api/CloudSubscriptionApi\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { ContactSalesDialogProvider } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { contactSalesReasons } from \"components/Dialogs/ContactSalesDialog/ContactSalesReasons\";\nimport NavigationSidebarLayout, { Navigation } from \"components/NavigationSidebarLayout/NavigationSidebarLayout\";\nimport { PaperLayout } from \"components/PaperLayout/PaperLayout\";\nimport { NavigationAlert } from \"components/alert/NavigationAlert\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { NotFoundPage } from \"pages/NotFoundPage\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\nimport { BackToDashboard } from \"areas/dashboard/components/BackToDashboard\";\n\nfunction isActiveCloudSubscription(cloudSubscription?: CloudSubscriptionDto) {\n return cloudSubscription && IsSubscribedOrLapsed(cloudSubscription.cloudSubscriptionStatus);\n}\n\nexport function getNavLinks({\n cloudSubscription,\n hasPermissionForAsset,\n}: {\n cloudSubscription: CloudSubscriptionDto;\n hasPermissionForAsset: UserContextState[\"hasPermissionForAsset\"];\n}) {\n const canViewAccessControl = hasPermissionForAsset(\n RbacPermissions.CloudSubscription.ViewAccessControl,\n cloudSubscription?.id,\n cloudSubscription?.subscriptionGroup?.id\n );\n const canViewBilling = hasPermissionForAsset(\n RbacPermissions.CloudSubscription.ViewBilling,\n cloudSubscription?.id,\n cloudSubscription?.subscriptionGroup?.id\n );\n const canViewConfiguration = hasPermissionForAsset(\n RbacPermissions.CloudSubscription.ViewConfiguration,\n cloudSubscription?.id,\n cloudSubscription?.subscriptionGroup?.id\n );\n\n const navLinks = [\n Navigation.navItem(\"Overview\", CloudSubscriptionsRoutesMap.detail(cloudSubscription.id).root, true),\n Navigation.navItem(\n \"Billing\",\n CloudSubscriptionsRoutesMap.detail(cloudSubscription.id).finance,\n true,\n canViewBilling\n ),\n Navigation.navItem(\n \"Configuration\",\n CloudSubscriptionsRoutesMap.detail(cloudSubscription.id).configuration,\n true,\n canViewConfiguration\n ),\n ];\n if (isActiveCloudSubscription(cloudSubscription)) {\n navLinks.push(\n Navigation.navItem(\n \"Access Control\",\n CloudSubscriptionsRoutesMap.detail(cloudSubscription.id).users,\n true,\n canViewAccessControl\n )\n );\n }\n\n return navLinks;\n}\n\nexport function CloudSubscriptionLayout() {\n const { cloudSubscriptionId = \"UNKNOWN\" } = useParams();\n const isUpgradePage = useMatch(CloudSubscriptionsRoutesMap.detail(\":cloudSubscriptionId\").upgrade);\n const {\n data: cloudSubscription,\n loading,\n error,\n refresh,\n } = useAsyncRequest(getCloudSubscriptionById, cloudSubscriptionId ?? \"\");\n const { hasPermissionForAsset } = useUserContext();\n const canManageBilling = hasPermissionForAsset(\n RbacPermissions.CloudSubscription.ManageBilling,\n cloudSubscription?.id,\n cloudSubscription?.subscriptionGroup?.id\n );\n const canUpgrade = canUpgradeCloudSubscription(canManageBilling, cloudSubscription);\n const navLinks = (cloudSubscription && getNavLinks({ cloudSubscription, hasPermissionForAsset })) || [];\n\n if (error && error.response?.status === 404) {\n return ;\n }\n\n return (\n \n \n } navLinksVisible={!error}>\n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import { DateTime } from \"luxon\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { CloudSubscriptionStatus } from \"./CloudSubscriptionStatus\";\n\n// Only cloud subscriptions that are cancelled or have no stripe licensing channel can be upgraded\nexport function canUpgradeCloudSubscription(canManageBilling: boolean, cloudSubscription?: CloudSubscriptionDto) {\n if (!cloudSubscription) {\n return false;\n }\n if (!canManageBilling) {\n return false;\n }\n if (cloudSubscription?.cloudSubscriptionStatus == CloudSubscriptionStatus.Terminated) {\n return false;\n }\n if (cloudSubscription?.cloudSubscriptionStatus === CloudSubscriptionStatus.Cancelled) {\n return true;\n }\n\n switch (cloudSubscription.licensingChannel.channelType) {\n case \"LegacyBraintreeCloudSubscriptionLicensingChannelDto\":\n case \"ImportedTrialCloudSubscriptionLicensingChannelDto\":\n return true;\n case \"StripeSubscriptionCloudSubscriptionLicensingChannelDto\":\n return false;\n case \"SalesforceContractedCloudSubscriptionLicensingChannelDto\":\n if (cloudSubscription.licensingChannel.expiryDate < DateTime.now()) {\n return true;\n } else {\n return false;\n }\n default:\n return false;\n }\n}\n","export const CloudStaticIpAddressPool: Record = {\n WestUS2: [\"52.250.93.128/28\"],\n WestEurope: [\"20.54.231.112/28\"],\n AustraliaEast: [\"20.53.101.128/28\"],\n};\n","export const formatCloudRegionForDisplay = (cloudRegion: string) => {\n switch (cloudRegion) {\n case \"AustraliaEast\":\n return \"Australia East\";\n case \"WestEurope\":\n return \"West Europe\";\n case \"WestUS2\":\n return \"West US 2\";\n default:\n return cloudRegion;\n }\n};\n","import React, { useState } from \"react\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Button, Dialog, DialogContent, DialogTitle, FormControl, IconButton, TextField } from \"@mui/material\";\nimport DialogActions from \"@mui/material/DialogActions\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\n\ntype RenameDialogProps = {\n value?: string;\n title: string;\n open: boolean;\n handleClose: () => void;\n submitRename: (value: string) => Promise;\n};\nexport function RenameDialog(props: RenameDialogProps) {\n const { value, title, open, handleClose, submitRename } = props;\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState();\n const [newValue, setNewValue] = useState(value ?? \"\");\n\n return (\n \n <>\n {!!error && }\n \n {title}\n theme.palette.grey[500],\n }}\n >\n \n \n \n \n \n setNewValue(e.target.value)}\n />\n \n \n \n {\n setLoading(true);\n try {\n await submitRename(newValue);\n } catch (e) {\n setError(e);\n } finally {\n setLoading(false);\n }\n }}\n >\n {loading ? \"Updating...\" : \"Update\"}\n \n \n \n \n );\n}\n","import React from \"react\";\nimport OpenInNewIcon from \"@mui/icons-material/OpenInNew\";\nimport type { LinkProps } from \"@mui/material\";\nimport { Link as MuiLink, styled } from \"@mui/material\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nconst StyledLink = styled(MuiLink)`\n margin-right: 4px;\n cursor: pointer;\n text-decoration: none;\n color: ${themeTokens.color.text.link.default};\n &:hover {\n color: ${themeTokens.color.text.link.hover};\n }\n &:focus {\n outline-color: revert;\n }\n`;\n\n// eslint-disable-next-line jsdoc/require-param\n/** A link to an external resource */\nexport function ExternalLink({ href, children, fontSize = \"inherit\", fontWeight = 500, textAlign }: LinkProps) {\n return (\n \n {children}\n \n \n );\n}\n","import React from \"react\";\nimport { Link } from \"@mui/material\";\nimport type { LinkProps } from \"@mui/material\";\nimport { themeTokens } from \"components/Theme/theme\";\n\ntype LinkButtonProps = Pick<\n LinkProps,\n \"children\" | \"variant\" | \"fontSize\" | \"fontWeight\" | \"underline\" | \"textAlign\" | \"sx\"\n> & { type?: \"button\" | \"submit\"; onClick?: React.MouseEventHandler };\n\n// eslint-disable-next-line jsdoc/require-param\n/**\n * A button that is styled to look like a link\n */\nexport function LinkButton({\n children,\n type = \"button\",\n onClick,\n variant = \"body2\",\n fontSize = \"inherit\",\n fontWeight = 500,\n underline = \"none\",\n textAlign,\n sx,\n}: LinkButtonProps) {\n return (\n \n {children}\n \n );\n}\n","import React from \"react\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport type { RbacPermission } from \"components/authorization/RbacPermissions\";\n\ntype PolicyAuthorizedProps = React.PropsWithChildren<{\n permission: RbacPermission;\n assetId: string | undefined;\n subscriptionGroupId: string | undefined;\n}>;\n\nexport function PolicyAuthorized(props: PolicyAuthorizedProps) {\n const { permission, assetId, subscriptionGroupId } = props;\n const { hasPermissionForAsset } = useUserContext();\n\n return <>{hasPermissionForAsset(permission, assetId, subscriptionGroupId) ? props.children : undefined};\n}\n","import React from \"react\";\nimport { CloudSubscriptionStatus, IsSubscribedOrLapsed } from \"utils/CloudSubscription/CloudSubscriptionStatus\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\n\ntype ActiveCloudSubscriptionOnlyProps = React.PropsWithChildren<{\n subscription?: CloudSubscriptionDto;\n}>;\n\nexport function ActiveCloudSubscriptionOnly(props: ActiveCloudSubscriptionOnlyProps) {\n const { subscription } = props;\n const isActive = IsSubscribedOrLapsed(subscription?.cloudSubscriptionStatus || CloudSubscriptionStatus.None);\n\n return <>{isActive ? props.children : <>};\n}\n","import React from \"react\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Alert, Dialog, DialogContent, DialogTitle, Grid, IconButton, InputAdornment, TextField } from \"@mui/material\";\nimport { envConfig } from \"utils/envConfig\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { changeCloudSubscriptionDnsPrefix } from \"client/api/CloudSubscriptionApi\";\nimport { SubmittableForm } from \"components/form/SubmittableForm\";\n\ntype CloudSubscriptionNewDnsPrefixDialogProps = {\n cloudSubscription?: CloudSubscriptionDto;\n onClose: () => void;\n onConfirm: () => Promise;\n open: boolean;\n};\n\ntype CloudSubscriptionNewDnsPrefixDialogSubmitArgs = {\n dnsPrefix: string;\n};\n\nconst dnsPrefixOptions = {\n required: {\n value: true,\n message: \"Please enter new URL\",\n },\n};\n\nexport function CloudSubscriptionNewDnsPrefixDialog(props: CloudSubscriptionNewDnsPrefixDialogProps) {\n const { cloudSubscription, onClose, onConfirm, open } = props;\n\n if (!cloudSubscription) return <>;\n\n const changeDnsPrefix = async (args: CloudSubscriptionNewDnsPrefixDialogSubmitArgs) => {\n await changeCloudSubscriptionDnsPrefix(cloudSubscription.id, args.dnsPrefix);\n await onConfirm();\n };\n\n return (\n \n \n Change instance URL\n theme.palette.grey[500],\n }}\n >\n \n \n \n \n \n \n \n Changing the URL of your instance will cause it to go offline momentarily.\n
It will be back up and running typically within 3 - 10 minutes.\n
\n
\n \n \n {(formController) => {\n const { register, formState } = formController;\n return (\n \n .{envConfig.OctopusCloudDomain},\n }}\n error={!!formState?.errors?.dnsPrefix}\n helperText={formState?.errors?.dnsPrefix?.message}\n {...register(\"dnsPrefix\", dnsPrefixOptions)}\n />\n \n );\n }}\n \n \n
\n
\n
\n );\n}\n","import { Duration } from \"luxon\";\nimport type { DateTime } from \"luxon\";\n\n/*\nCalculate the duration between start and end time and check if its greater than the minDuration.\nAssumes both startTime and endTime have the same date.\nIf start time is greater than end time, add one extra day to the end time \nFor example, for start time 11pm, end time 1am,\nthen the duration is 1am tomorrow - 11pm = 2 hrs. \n*/\nexport function isDurationGreaterThan(startTime: DateTime, endTime: DateTime, minDuration: Duration) {\n if (endTime >= startTime) {\n return endTime > startTime.plus(minDuration);\n } else {\n // add one extra day\n return endTime.plus(Duration.fromObject({ days: 1 })) > startTime.plus(minDuration);\n }\n}\n","export function nameof(obj: TObject, key: keyof TObject): string;\nexport function nameof(key: keyof TObject): string;\n\n/* eslint-disable-next-line @typescript-eslint/no-explicit-any */\nexport function nameof(key1: any, key2?: any): any {\n return key2 ?? key1;\n}\n","import React, { useMemo, useState } from \"react\";\nimport { TextField } from \"@mui/material\";\nimport { TimePicker, LocalizationProvider } from \"@mui/x-date-pickers\";\nimport { AdapterLuxon } from \"@mui/x-date-pickers/AdapterLuxon\";\nimport { Settings, DateTime } from \"luxon\";\nimport { Controller, useFormContext } from \"react-hook-form\";\nimport type { UseControllerProps } from \"react-hook-form/dist/types/controller\";\nimport { getShortTimeZoneName } from \"@cpt/shared\";\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\ninterface FormTimePickerProps extends UseControllerProps {\n label: string;\n}\n\nexport function FormTimePicker(props: FormTimePickerProps) {\n const { setValue, control, trigger } = useFormContext();\n\n const [time, setTime] = useState(props.defaultValue ?? null);\n\n const localTimeZoneName = useMemo(() => {\n return getShortTimeZoneName(props.defaultValue, { locale: Settings.defaultLocale });\n }, [props.defaultValue]);\n\n return (\n \n (\n {\n setTime(value);\n setValue(props.name, value);\n trigger(props.name);\n }}\n value={time}\n label={`${props.label} (${localTimeZoneName})`}\n renderInput={(params) => {\n let helperText = null;\n\n if (time && time.isValid) {\n helperText = `${time.toUTC().toLocaleString(DateTime.TIME_SIMPLE)} (UTC)`;\n }\n\n if (fieldState.invalid) {\n helperText = fieldState.error?.message;\n }\n return (\n \n );\n }}\n />\n )}\n />\n \n );\n}\n","import React from \"react\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { Alert, Dialog, DialogContent, DialogContentText, DialogTitle, Grid, IconButton } from \"@mui/material\";\nimport type { DateTime } from \"luxon\";\nimport { Duration } from \"luxon\";\nimport { isDurationGreaterThan } from \"utils/Validation/isDurationGreaterThan\";\nimport { nameof } from \"utils/nameof\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { updateCloudSubscriptionOutageWindow } from \"client/api/CloudSubscriptionApi\";\nimport { FormTimePicker } from \"components/form/FormTimePicker\";\nimport { SubmittableForm } from \"components/form/SubmittableForm\";\n\ntype CloudSubscriptionOutageWindowDialogProps = {\n cloudSubscription?: CloudSubscriptionDto;\n onClose: () => void;\n onConfirm: () => Promise;\n open: boolean;\n};\n\ntype CloudSubscriptionOutageWindowUpdateInputs = {\n outageWindowStart: DateTime;\n outageWindowEnd: DateTime;\n};\n\nconst baseTimeOptions = {\n required: {\n value: true,\n message: \"Please enter or select a time.\",\n },\n validate: {\n validDate: (v: DateTime) => v.isValid || \"Please enter a valid time.\",\n },\n};\n\nexport function CloudSubscriptionOutageWindowDialog(props: CloudSubscriptionOutageWindowDialogProps) {\n const { cloudSubscription, onClose, onConfirm, open } = props;\n\n if (!cloudSubscription) return <>;\n\n const handleFormSubmit = async (inputs: CloudSubscriptionOutageWindowUpdateInputs) => {\n await updateCloudSubscriptionOutageWindow(cloudSubscription.id, inputs.outageWindowStart, inputs.outageWindowEnd);\n await onConfirm();\n };\n\n return (\n \n \n Set maintenance window\n theme.palette.grey[500],\n }}\n >\n \n \n \n \n \n \n \n Let us know a suitable window where you are unlikely to be using your Octopus instance, and we'll use this\n time to perform updates to the Octopus Deploy software, so you can take advantage of fixes and\n enhancements.\n \n \n \n A minimum of 2 hours is required.\n \n \n \n {(formController) => {\n const { watch } = formController;\n const currentOutageWindowStart = watch(\"outageWindowStart\");\n const currentOutageWindowEnd = watch(\"outageWindowEnd\");\n\n return (\n <>\n \n (\"outageWindowStart\")}\n defaultValue={cloudSubscription.maintenanceWindow.startTime.toLocal()}\n rules={{\n ...baseTimeOptions,\n deps: [nameof(\"outageWindowEnd\")],\n validate: {\n ...baseTimeOptions.validate,\n lessThanEndTime: (v: DateTime) => {\n return (\n !currentOutageWindowEnd ||\n isDurationGreaterThan(\n v,\n currentOutageWindowEnd,\n Duration.fromObject({\n hours: 1,\n minute: 59,\n })\n ) ||\n \"Maintenance window start time should be at least 2 hours before the maintenance window ends.\"\n );\n },\n },\n }}\n />\n \n \n (\"outageWindowEnd\")}\n defaultValue={cloudSubscription.maintenanceWindow.endTime.toLocal()}\n rules={{\n ...baseTimeOptions,\n deps: [nameof(\"outageWindowStart\")],\n validate: {\n ...baseTimeOptions.validate,\n greaterThanStartTime: (v: DateTime) => {\n return (\n !currentOutageWindowStart ||\n isDurationGreaterThan(\n currentOutageWindowStart,\n v,\n Duration.fromObject({\n hours: 1,\n minutes: 59,\n })\n ) ||\n \"Maintenance window end time should be at least 2 hours after the maintenance window starts.\"\n );\n },\n },\n }}\n />\n \n \n );\n }}\n \n \n \n \n \n );\n}\n","import type { PropsWithChildren } from \"react\";\nimport React, { useRef } from \"react\";\nimport { Fade } from \"@mui/material\";\nimport ClickAwayListener from \"@mui/material/ClickAwayListener\";\nimport Popper from \"@mui/material/Popper\";\nimport cn from \"classnames\";\nimport styles from \"./style.module.less\";\n\nexport type Placement =\n | \"bottom-end\"\n | \"bottom-start\"\n | \"left-end\"\n | \"left-start\"\n | \"right-end\"\n | \"right-start\"\n | \"top-end\"\n | \"top-start\";\n\ntype ContextualHelpProps = PropsWithChildren<{\n trigger: \"click\" | \"hover\";\n button?: React.ReactNode;\n startOpened?: boolean;\n placement: Placement;\n absolutePosition?: boolean; // this helps keep the icon interactive even when the parent element would otherwise take precedence\n onOpen?: () => void;\n forceHide?: boolean;\n}>;\n\nexport const PopoverContext = React.createContext({\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n closePopover: () => {},\n});\n\nconst Popover = ({\n trigger,\n button,\n children,\n placement,\n absolutePosition = false,\n startOpened = false,\n onOpen,\n forceHide,\n}: ContextualHelpProps): JSX.Element => {\n const [anchorEl, setAnchorEl] = React.useState(null);\n const [arrowRef, setArrowRef] = React.useState(null);\n const iconContainerRef = useRef(null);\n\n const toggleOpen = (target: EventTarget & HTMLElement) => {\n const isOpen = anchorEl !== null;\n setAnchorEl(isOpen ? null : target);\n if (!isOpen) onOpen?.();\n };\n\n const handleClick = (event: React.FormEvent) => {\n if (trigger !== \"click\") return;\n\n toggleOpen(event.currentTarget);\n };\n\n const handleSpace = (event: React.KeyboardEvent) => {\n if (event.keyCode === 32) {\n event.preventDefault();\n handleClick(event);\n }\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.keyCode === 32) {\n event.preventDefault();\n } else if (event.keyCode === 13) {\n event.preventDefault();\n handleClick(event);\n }\n };\n\n const handleMouseIn = (event: React.FormEvent) => {\n if (trigger !== \"hover\") return;\n\n if (anchorEl) {\n iconContainerRef.current?.blur();\n }\n\n toggleOpen(event.currentTarget);\n };\n\n const handleMouseOut = (event: React.FormEvent) => {\n if (trigger !== \"hover\") return;\n\n setAnchorEl(null);\n iconContainerRef.current?.blur();\n };\n\n const handleClickAway = () => {\n setAnchorEl(null);\n };\n\n let open = startOpened ? true : Boolean(anchorEl);\n if (forceHide) {\n open = false;\n }\n\n const id = open ? \"transitions-popper\" : undefined;\n\n const offsetValue = getOffsetValue(placement);\n\n const closePopover = () => {\n setAnchorEl(null);\n };\n\n return (\n \n
\n \n
{button || }
\n
\n \n {({ TransitionProps }) => (\n <>\n
setArrowRef(ref)} />\n \n
\n {children}\n
\n
\n \n )}\n \n
\n
\n );\n};\n\nconst getOffsetValue = (placement: Placement) => {\n switch (placement) {\n case \"left-end\":\n return [35, 15];\n case \"left-start\":\n return [-35, 15];\n case \"right-end\":\n return [35, 15];\n case \"right-start\":\n return [-30, 17];\n case \"top-end\":\n return [35, 15];\n case \"top-start\":\n return [-35, 15];\n case \"bottom-end\":\n return [35, 15];\n case \"bottom-start\":\n return [-35, 15];\n }\n};\n\nexport default Popover;\n","import React from \"react\";\nimport { styled, Typography, Link } from \"@mui/material\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { ExternalLink } from \"components/ExternalLink/ExternalLink\";\nimport type { AlertLevel } from \"./getAlertLevel\";\n\ntype FileUsageWarningContentPaidProps = {\n alertLevel: AlertLevel;\n};\n\nexport function FileUsageWarningContent({ alertLevel }: FileUsageWarningContentPaidProps) {\n const heading = getHeading(alertLevel);\n\n return (\n <>\n {heading && (\n \n {heading}\n \n )}\n\n {alertLevel === \"none\" ? : }\n\n \n\n \n Acceptable usage policy\n \n \n );\n}\n\nconst List = styled(\"ul\")({\n listStyleType: \"disc\",\n paddingLeft: \"1rem\",\n});\n\nconst BoldLink = styled(Link)({\n fontWeight: 500,\n});\n\nfunction getHeading(alertLevel: AlertLevel) {\n switch (alertLevel) {\n case \"warning\":\n return \"You are close to the resource usage limit\";\n case \"danger\":\n return \"Immediate action is required to continue deployments\";\n case \"none\":\n return null;\n }\n}\n\nconst Recommendations = () => (\n \n We recommend implementing stricter{\" \"}\n \n retention policies\n {\" \"}\n for releases and packages and using external package repositories like{\" \"}\n \n Feedz\n {\" \"}\n or{\" \"}\n \n MyGet\n {\" \"}\n to help manage your usage.\n \n);\n\nconst HowTo = () => (\n <>\n \n To free up space, please review these resources in your Octopus Cloud instance for anything that can be removed:\n \n \n
  • Artifacts
  • \n
  • Task logs
  • \n
  • Packages
  • \n
  • Package cache
  • \n
    \n \n);\n\nconst Info = () => (\n \n Resource usage indicates the storage space used by the artifacts, task logs, packages and package\n cache in your Octopus Cloud instance\n \n);\n","import React from \"react\";\nimport InfoIcon from \"@mui/icons-material/Info\";\nimport { styled, Typography } from \"@mui/material\";\nimport { designSystemColors } from \"@cpt/shared\";\nimport PopoverHelp from \"components/PopoverHelp/PopoverHelp\";\nimport { FileUsageWarningContent } from \"./FileUsageWarningContent\";\nimport type { AlertLevel } from \"./getAlertLevel\";\n\ntype FileUsageWarningProps = {\n alertLevel: AlertLevel;\n};\n\nexport function FileUsageWarning({ alertLevel }: FileUsageWarningProps) {\n if (alertLevel === \"none\") return null;\n const label = alertLevel === \"warning\" ? \"You are close to the resource usage limit\" : \"Immediate action required\";\n\n return (\n \n \n {label}\n \n }>\n \n \n \n );\n}\n\nconst Info = styled(InfoIcon, {\n shouldForwardProp: (prop) => prop !== \"alertLevel\",\n})<{ alertLevel: AlertLevel }>(({ theme, alertLevel }) => {\n let iconBg = alertLevel === \"warning\" ? designSystemColors.orange[\"600\"] : designSystemColors.red[\"600\"];\n // We'll be inserting iconBg into a URL, so we need to escape the # character\n // See https://codepen.io/gunnarbittersmann/pen/BoovjR for more info\n iconBg = iconBg.replace(\"#\", \"%23\");\n\n return {\n color: alertLevel === \"warning\" ? designSystemColors.orange[\"200\"] : designSystemColors.red[\"200\"],\n backgroundImage: `\n url(\"data:image/svg+xml;utf8,\")`,\n backgroundRepeat: \"no-repeat\",\n backgroundPosition: \"center\",\n fontSize: \"24px\",\n [\"&:focus .focusVisible\"]: {\n outlineColor: theme.palette.primary.main,\n },\n };\n});\n\nconst Wrapper = styled(\"div\")({\n display: \"flex\",\n justifyContent: \"center\",\n alignItems: \"center\",\n});\n","import React from \"react\";\n\ntype ResourceUsageCopyProps = {\n limitInGb?: number;\n usageInGb?: number;\n};\n\nexport function ResourceUsageCopy({ limitInGb, usageInGb }: ResourceUsageCopyProps) {\n if (limitInGb === undefined || usageInGb === undefined) return null;\n\n return (\n <>\n {formatUnits(usageInGb)} of {formatUnits(limitInGb)} used\n \n );\n}\n\nfunction formatUnits(amountInGb: number) {\n return amountInGb >= 1000 ? `${amountInGb / 1000}TB` : `${amountInGb}GB`;\n}\n","export const warningPercentage = 70;\nexport const dangerPercentage = 95;\n","import { dangerPercentage, warningPercentage } from \"./fileUsageThresholds\";\n\nexport type AlertLevel = \"none\" | \"warning\" | \"danger\";\n\nexport function getAlertLevel(usageInGb: number, limitInGb: number): AlertLevel {\n const percentageUsed = (usageInGb / limitInGb) * 100;\n if (percentageUsed >= dangerPercentage) {\n return \"danger\";\n }\n if (percentageUsed >= warningPercentage) {\n return \"warning\";\n }\n return \"none\";\n}\n","import React from \"react\";\nimport { Typography } from \"@mui/material\";\nimport { FileUsageWarning } from \"./FileUsageWarning\";\nimport { ResourceUsageCopy } from \"./ResourceUsageCopy\";\nimport { getAlertLevel } from \"./getAlertLevel\";\n\ntype FileUsageLineItemProps = {\n usageInGb: number;\n limitInGb: number;\n};\n\nexport function FileUsageLineItem({ usageInGb, limitInGb }: FileUsageLineItemProps) {\n return (\n <>\n \n \n \n \n \n );\n}\n","import type { ReactNode } from \"react\";\nimport React, { useState } from \"react\";\nimport { Grid, Stack, styled, Typography, Box } from \"@mui/material\";\nimport type { DateTime } from \"luxon\";\nimport { Settings } from \"luxon\";\nimport { TimeText } from \"@cpt/components\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { CloudStaticIpAddressPool } from \"utils/CloudStaticIpAddressPool\";\nimport { cloudSubscriptionOutageWindowFrequencyDescriptions } from \"utils/CloudSubscription/CloudSubscriptionOutageWindowFrequency\";\nimport { IsSubscribedOrLapsed } from \"utils/CloudSubscription/CloudSubscriptionStatus\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { formatCloudRegionForDisplay } from \"utils/formatters/CloudRegionFormatters\";\nimport { getHostname } from \"utils/formatters/DnsFormatters\";\nimport type { CloudSubscriptionDto, MaintenanceWindowDto } from \"client/api/CloudSubscriptionApi\";\nimport { mapMaintenanceWindowDtoToRequest, updateCloudSubscriptionFriendlyName } from \"client/api/CloudSubscriptionApi\";\nimport { RenameDialog } from \"components/Dialogs/RenameDialog\";\nimport { ExternalLink } from \"components/ExternalLink/ExternalLink\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { CloudSubscriptionHeader } from \"areas/cloudSubscriptions/components/CloudSubscriptionHeader\";\nimport { ActiveCloudSubscriptionOnly } from \"areas/cloudSubscriptions/detail/components/ActiveCloudSubscriptionOnly\";\nimport { CloudSubscriptionNewDnsPrefixDialog } from \"areas/cloudSubscriptions/detail/components/CloudSubscriptionNewDnsPrefixDialog\";\nimport { CloudSubscriptionOutageWindowDialog } from \"areas/cloudSubscriptions/detail/components/CloudSubscriptionOutageWindowDialog\";\nimport { FileUsageLineItem } from \"./components/overview/FileUsageLineItem\";\n\nfunction Divider() {\n return (\n \n );\n}\n\ntype ItemLineProps = {\n title: string;\n content: ReactNode;\n action?: ReactNode;\n hideDivider?: boolean;\n};\n\nfunction ItemLine(props: ItemLineProps) {\n const { title, content, action, hideDivider } = props;\n\n return (\n <>\n \n {title}\n \n \n {content}\n \n {action && (\n \n {action}\n \n )}\n {!hideDivider && }\n \n );\n}\n\nconst CodeText = styled(\"code\")(({ theme }) => ({\n margin: 0,\n padding: \"0.1rem\",\n color: theme.palette.primary.dark,\n}));\n\nconst getOutageWindowContent = (maintenanceWindow: MaintenanceWindowDto): ReactNode => {\n return (\n <>\n \n In order to update your instance to newer releases of Octopus Deploy, we may occasionally need to take it\n offline for a short period.\n \n {isDailyOutageWindow(maintenanceWindow) && (\n \n )}\n {!isDailyOutageWindow(maintenanceWindow) && }\n \n );\n};\n\nfunction isDailyOutageWindow(maintenanceWindow: MaintenanceWindowDto) {\n return maintenanceWindow.frequency === \"Daily\";\n}\n\nfunction DailyOutageWindowContent({ start, end }: { start: DateTime; end: DateTime }) {\n return (\n <>\n You have nominated the following maintenance window:\n \n \n \n —\n \n \n \n \n In your timezone\n \n \n );\n}\n\nfunction NonDailyOutageWindowContent({ maintenanceWindow }: { maintenanceWindow: MaintenanceWindowDto }) {\n const labelFormat = \"h:mm a\";\n const localeOptions = {\n locale: Settings.defaultLocale,\n outputCalendar: Settings.defaultOutputCalendar,\n numberingSystem: Settings.defaultNumberingSystem,\n };\n\n return (\n <>\n You have nominated the following maintenance window:\n \n \n {\n cloudSubscriptionOutageWindowFrequencyDescriptions[\n mapMaintenanceWindowDtoToRequest(maintenanceWindow).outageWindowFrequency\n ]\n }\n \n \n {maintenanceWindow.startTime.toFormat(labelFormat, localeOptions)}\n \n \n —\n \n \n {maintenanceWindow.endTime.toFormat(labelFormat, localeOptions)}\n \n  {maintenanceWindow.timeZone}\n \n \n );\n}\nexport function CloudSubscriptionConfiguration() {\n const { entity: cloudSubscriptionEntity, refresh } = useEntity();\n const [showOutageWindowDialog, setShowOutageWindowDialog] = useState(false);\n const [showNewDnsChangeDialog, setShowNewDnsChangeDialog] = useState(false);\n const [showRenameDisplayNameDialog, setShowRenameDisplayNameDialog] = useState(false);\n\n if (!cloudSubscriptionEntity) {\n // This shouldn't happen, but we need to handle based on type hints\n return null;\n }\n\n const cloudSubscription: CloudSubscriptionDto = cloudSubscriptionEntity;\n const isActiveCloudSubscription = IsSubscribedOrLapsed(cloudSubscription.cloudSubscriptionStatus);\n const canEditOutageWindow = isActiveCloudSubscription && isDailyOutageWindow(cloudSubscription.maintenanceWindow);\n\n const handleOutageWindowChange = async () => {\n setShowOutageWindowDialog(false);\n if (refresh) {\n refresh();\n }\n };\n\n const handleOutageWindowDialogClose = () => {\n setShowOutageWindowDialog(false);\n };\n\n const handleOutageWindowDialogOpen = () => {\n setShowOutageWindowDialog(true);\n };\n\n const openNewDnsPrefixDialog = () => setShowNewDnsChangeDialog(true);\n const closeNewDnsPrefixDialog = () => setShowNewDnsChangeDialog(false);\n const onDnsPrefixChanged = async () => {\n closeNewDnsPrefixDialog();\n if (refresh) {\n refresh();\n }\n };\n\n const handleRenameDisplayNameOpen = () => setShowRenameDisplayNameDialog(true);\n const handleRenameDisplayNameClose = () => setShowRenameDisplayNameDialog(false);\n\n async function handleDisplayNameChange(value: string) {\n await updateCloudSubscriptionFriendlyName(cloudSubscription.id, value);\n setShowRenameDisplayNameDialog(false);\n if (refresh) {\n refresh();\n }\n }\n\n return (\n <>\n \n \n \n Rename\n \n }\n />\n \n \n Change URL\n \n \n }\n />\n \n }\n action={\n \n More Info\n \n }\n />\n \n {(CloudStaticIpAddressPool[cloudSubscription.cloudRegionId ?? \"\"] ?? []).join(\", \")}\n }\n />\n \n Change Window\n \n )\n }\n hideDivider\n />\n \n \n {canEditOutageWindow && (\n \n )}\n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Grid } from \"@mui/material\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nexport function GridDivider() {\n return (\n \n );\n}\n","import React from \"react\";\nimport { Grid, Table, TableBody, TableRow, TableCell, Typography } from \"@mui/material\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport type { IntLimitFeatureDto } from \"client/api/FeatureApi\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\n\nexport type LicensedEntitlementsViewProps = { license: ServerLicenseDto | CloudSubscriptionDto };\n\nexport function LicensedEntitlementsView(props: LicensedEntitlementsViewProps) {\n const { license } = props;\n\n const EntitlementRow = ({ item, label }: { item: IntLimitFeatureDto | undefined; label: string }) => {\n let limitText: string = \"Unlimited\";\n if (!!item?.limit && !item?.isUnlimited) {\n limitText = item.limit.toFixed(0);\n }\n return (\n \n \n {label}\n \n \n {limitText}\n \n \n );\n };\n\n return (\n <>\n \n Entitlements\n \n \n \n \n \n \n \n \n
    \n
    \n \n );\n}\n","import React from \"react\";\nimport { Grid, Stack, Typography } from \"@mui/material\";\nimport { DateText } from \"@cpt/components\";\nimport type {\n CloudSubscriptionDto,\n InfrastructureCloudSubscriptionLicensingChannelDto,\n} from \"client/api/CloudSubscriptionApi\";\nimport { GridDivider } from \"components/GridDivider/GridDivider\";\nimport { LicensedEntitlementsView } from \"components/LicensedEntitlementsView/LicensedEntitlementsView\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport type { LicensingChannelViewProps } from \"areas/cloudSubscriptions/detail/components/finance/LicensingChannelViewProps\";\n\ntype EntitlementViewProps = { cloudSubscription: CloudSubscriptionDto };\nfunction EntitlementView(props: EntitlementViewProps) {\n const { cloudSubscription } = props;\n return ;\n}\n\nexport function InfrastructureLicensingChannelView(\n props: LicensingChannelViewProps\n) {\n const { channel, cloudSubscription } = props;\n const autoRenewalText = channel.autoRenew\n ? `Auto renews ${channel.renewalPeriod?.toLowerCase()}`\n : \"Will not auto renew\";\n\n return (\n <>\n \n Plan\n \n \n \n Infrastructure\n \n {\"License expiry\"} \n \n {autoRenewalText}\n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Grid, Typography } from \"@mui/material\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\n\nexport function ChangePlanFinanceLine() {\n const { showDialog } = useContactSalesDialog();\n return (\n \n \n Change plan\n \n \n Contact our sales team to make changes to your subscription\n \n \n showDialog({ reason: \"modify-subscription\" })}>Get in Touch\n \n \n );\n}\n","import React, { useMemo } from \"react\";\nimport { Grid, Typography } from \"@mui/material\";\nimport type { ProductType } from \"shared/ProductType\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport type { CloudSubscriptionProps } from \"areas/cloudSubscriptions/CloudSubscriptionProps\";\nimport { isCloudSubscriptionProps } from \"areas/cloudSubscriptions/CloudSubscriptionProps\";\nimport type { ServerLicenseProps } from \"areas/serverLicenses/ServerLicenseProps\";\n\nexport function OrdersFinanceLine(props: CloudSubscriptionProps | ServerLicenseProps) {\n const { showDialog } = useContactSalesDialog();\n const {\n isStripeSubscriptionLicensingChannel,\n productType,\n productId,\n }: {\n isStripeSubscriptionLicensingChannel: boolean;\n productType: ProductType;\n productId: string;\n } = useMemo(() => {\n if (isCloudSubscriptionProps(props)) {\n return {\n isStripeSubscriptionLicensingChannel:\n props.cloudSubscription.licensingChannel.channelType ===\n \"StripeSubscriptionCloudSubscriptionLicensingChannelDto\",\n productType: \"CloudSubscription\",\n productId: props.cloudSubscription.id,\n };\n } else {\n return {\n isStripeSubscriptionLicensingChannel:\n props.serverLicense.licensingChannel.channelType === \"StripeSubscriptionServerLicensingChannelDto\",\n productType: \"ServerLicense\",\n productId: props.serverLicense.id,\n };\n }\n }, [props]);\n\n return (\n <>\n \n Orders\n \n \n Older orders\n \n \n showDialog({ reason: \"other\" })}>Contact Sales\n \n \n );\n}\n","import type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\n\nexport type CloudSubscriptionProps = {\n cloudSubscription: CloudSubscriptionDto;\n};\n\nexport function isCloudSubscriptionProps(props: unknown): props is CloudSubscriptionProps {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return (props as CloudSubscriptionProps).cloudSubscription !== undefined;\n}\n","import React from \"react\";\nimport { Grid, Typography } from \"@mui/material\";\nimport type { LegacyBraintreeCloudSubscriptionLicensingChannelDto } from \"client/api/CloudSubscriptionApi\";\nimport { ChangePlanFinanceLine } from \"components/ChangePlanFinanceLine/ChangePlanFinanceLine\";\nimport { GridDivider } from \"components/GridDivider/GridDivider\";\nimport { OrdersFinanceLine } from \"components/OrdersFinanceLine/OrdersFinanceLine\";\nimport type { LicensingChannelViewProps } from \"areas/cloudSubscriptions/detail/components/finance/LicensingChannelViewProps\";\n\nexport function LegacyBraintreeLicensingChannelView(\n props: LicensingChannelViewProps\n) {\n const { cloudSubscription } = props;\n return (\n <>\n {/**/}\n <>\n \n Current plan\n \n \n Cloud\n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Grid, Typography } from \"@mui/material\";\nimport type {\n CloudSubscriptionDto,\n SalesforceContractedCloudSubscriptionLicensingChannelDto,\n} from \"client/api/CloudSubscriptionApi\";\nimport { ChangePlanFinanceLine } from \"components/ChangePlanFinanceLine/ChangePlanFinanceLine\";\nimport { GridDivider } from \"components/GridDivider/GridDivider\";\nimport { LicensedEntitlementsView } from \"components/LicensedEntitlementsView/LicensedEntitlementsView\";\nimport { OrdersFinanceLine } from \"components/OrdersFinanceLine/OrdersFinanceLine\";\nimport type { LicensingChannelViewProps } from \"areas/cloudSubscriptions/detail/components/finance/LicensingChannelViewProps\";\n\ntype EntitlementViewProps = { cloudSubscription: CloudSubscriptionDto };\nfunction EntitlementView(props: EntitlementViewProps) {\n const { cloudSubscription } = props;\n return ;\n}\n\nexport function SalesforceContractedLicensingChannelView(\n props: LicensingChannelViewProps\n) {\n const { cloudSubscription } = props;\n return (\n <>\n {/**/}\n <>\n \n Platform\n \n \n Cloud\n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport type { LinkProps } from \"react-router-dom\";\nimport { Link } from \"react-router-dom\";\nimport { styled } from \"@mui/material\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nconst StyledLink = styled(Link)(\n ({ fontSize, fontWeight, color }: RouterLinkProps) => `\n font-size: ${fontSize ?? \"inherit\"};\n font-weight: ${fontWeight ?? 500};\n color: ${color ?? themeTokens.color.text.link.default};\n &:hover {\n color: ${themeTokens.color.text.link.hover};\n }\n`\n);\n\ntype RouterLinkProps = {\n fontSize?: string;\n fontWeight?: number | string;\n} & LinkProps;\n\n/**\n * A react router based link\n * @param props\n */\nexport const RouterLink = (props: RouterLinkProps) => {\n return {props.children};\n};\n","import { ServerLicensingChannelTypesArr, ServerLicensingChannelTypesKeys } from \"client/api/ServerLicenseApi\";\nimport type {\n ServerLicensingChannel,\n ServerLicensingChannelBase,\n ServerLicensingChannelTypes,\n StripeSubscriptionServerLicensingChannelDto,\n TrialServerLicensingChannelDto,\n} from \"client/api/ServerLicenseApi\";\nimport type { UpgradePlan } from \"client/api/UpgradePlan\";\n\nexport function IsServerLicenseStripeSubscriptionLicensingChannel(\n licensingChannel: ServerLicensingChannel\n): licensingChannel is StripeSubscriptionServerLicensingChannelDto {\n return licensingChannel.channelType === ServerLicensingChannelTypesKeys.Stripe;\n}\n\nexport function isServerLicenseTrialLicensingChannel(\n licensingChannel: ServerLicensingChannel\n): licensingChannel is TrialServerLicensingChannelDto {\n return licensingChannel.channelType === ServerLicensingChannelTypesKeys.Trial;\n}\n\nexport function isServerLicenseChannelType(\n licensingChannelType: string\n): licensingChannelType is ServerLicensingChannelTypes {\n const arr: string[] = ServerLicensingChannelTypesArr;\n return arr.includes(licensingChannelType);\n}\n\nexport function hasStatus(\n licensingChannel: ServerLicensingChannelBase & { status?: string }\n): licensingChannel is Required {\n return typeof licensingChannel.status === \"string\";\n}\n\nexport function hasPriceCode(\n licensingChannel: ServerLicensingChannelBase & { priceCode?: string }\n): licensingChannel is Required {\n return typeof licensingChannel.priceCode === \"string\";\n}\n","import type { CloudLicensingChannelTypes } from \"client/api/CloudSubscriptionApi\";\nimport { CloudLicensingChannelTypesKeys } from \"client/api/CloudSubscriptionApi\";\nimport type { ServerLicensingChannelTypes } from \"client/api/ServerLicenseApi\";\nimport { ServerLicensingChannelTypesKeys } from \"client/api/ServerLicenseApi\";\nimport { isCloudSubscriptionLicenseChannelType } from \"./CloudSubscriptionLicensingChannelTypeHelpers\";\nimport { isServerLicenseChannelType } from \"./ServerLicenseLicensingChannelTypeHelpers\";\n\nexport const isCloudTrial = (channelType: CloudLicensingChannelTypes) =>\n channelType === CloudLicensingChannelTypesKeys.Trial;\n\nexport const isServerTrial = (channelType: ServerLicensingChannelTypes) =>\n channelType === ServerLicensingChannelTypesKeys.Trial;\n\nexport const isTrial = (channelType: CloudLicensingChannelTypes | ServerLicensingChannelTypes) => {\n if (isCloudSubscriptionLicenseChannelType(channelType)) {\n return isCloudTrial(channelType);\n } else if (isServerLicenseChannelType(channelType)) {\n return isServerTrial(channelType);\n }\n throw new Error(\"Unexpected channelType\");\n};\n","import axiosClient from \"client/axios-client\";\n\nconst BASE_URL = \"trials\";\n\nexport const cancelCloudTrial = async (trialId: string): Promise => {\n await axiosClient.post(`${BASE_URL}/${trialId}/cancel`);\n};\n","import React, { useState } from \"react\";\nimport { LoadingButton } from \"@mui/lab\";\nimport {\n Box,\n Button,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from \"@mui/material\";\nimport axios from \"axios\";\nimport type { AxiosError } from \"axios\";\nimport type { DateTime } from \"luxon\";\nimport { DateText } from \"@cpt/components\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { isTrial } from \"utils/isTrial\";\nimport type { CloudLicensingChannelTypes, CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { cancelCloudSubscription, isTrialLicensingChannel } from \"client/api/CloudSubscriptionApi\";\nimport { cancelCloudTrial } from \"client/api/TrialApi\";\nimport { AlertSeverity, useAlerts } from \"components/AlertProvider/AlertProvider\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\n\ntype CloudSubscriptionCancelPlanDialogProps = React.PropsWithChildren<{\n open: boolean;\n channelType: CloudLicensingChannelTypes;\n onClose: () => void;\n cloudSubscription: CloudSubscriptionDto;\n}>;\n\nexport function CloudSubscriptionCancelPlanDialog(props: CloudSubscriptionCancelPlanDialogProps) {\n const { update, refresh } = useEntity();\n const { open, onClose, cloudSubscription, channelType } = props;\n const { sendNewAlert } = useAlerts();\n\n const productTypeName = isTrial(channelType) ? \"trial\" : \"subscription\";\n\n const [isCancelling, setIsCancelling] = useState(false);\n\n const [error, setError] = useState(undefined);\n\n const cancelPlan = async () => {\n setIsCancelling(true);\n\n try {\n if (isTrialLicensingChannel(cloudSubscription.licensingChannel)) {\n await cancelCloudTrial(cloudSubscription.licensingChannel.trialId);\n if (refresh) refresh();\n } else {\n const changedCloudSubscription = await cancelCloudSubscription(cloudSubscription);\n update(changedCloudSubscription);\n }\n\n sendNewAlert(`Cloud ${productTypeName} cancelled`, AlertSeverity.Success);\n handleOnClose(true);\n } catch (e) {\n if (axios.isAxiosError(e)) {\n setError(e);\n } else {\n console.error(e);\n }\n } finally {\n setIsCancelling(false);\n }\n };\n\n const handleOnClose = (force = false) => {\n if (isCancelling && !force) {\n return;\n }\n onClose();\n };\n\n return (\n handleOnClose()}\n aria-labelledby=\"cancel-subscription-dialog-title\"\n aria-describedby=\"cancel-subscription-dialog-description\"\n >\n Cancel {productTypeName}?\n \n {error && }\n {props.children}\n \n If you change your mind within 90 days, you can re-subscribe, and we will reactivate your instance from the\n secure backups.\n \n \n \n \n \n \n {\"Cancelling...\"}\n \n }\n >\n Cancel {productTypeName}\n \n \n \n );\n}\n\nexport const CloudSubscriptionCancelPlanDialogText = ({\n channelType,\n endDate,\n}: {\n channelType: CloudLicensingChannelTypes;\n endDate: DateTime;\n}) => {\n const subscriptionVerb = isTrial(channelType) ? \"trialing\" : \"subscribed\";\n return (\n \n You are currently {subscriptionVerb} until . If you cancel now, your\n instance will be immediately deactivated. After 90 days, your data will be automatically deleted. If you want your\n data deleted sooner, email support@octopus.com, and we'll delete your\n data immediately.\n \n );\n};\n","import type { ChangeEvent } from \"react\";\nimport React, { useEffect, useState } from \"react\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport { LoadingButton } from \"@mui/lab\";\nimport {\n Box,\n Button,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n FormControl,\n FormControlLabel,\n FormLabel,\n IconButton,\n Radio,\n RadioGroup,\n TextField,\n} from \"@mui/material\";\nimport type { AxiosError } from \"axios\";\nimport axios from \"axios\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { updateCustomerSpecifiedMachineLimit } from \"client/api/CloudSubscriptionApi\";\nimport { AlertSeverity, useAlerts } from \"components/AlertProvider/AlertProvider\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\nimport type { CloudSubscriptionProps } from \"areas/cloudSubscriptions/CloudSubscriptionProps\";\nimport { hasCustomerSpecifiedMachineLimit } from \"areas/cloudSubscriptions/detail/components/finance/CustomerSpecifiedMachineLimitLine\";\n\ntype ChangeCustomerSpecifiedMachineLimitDialogProps = CloudSubscriptionProps & {\n open: boolean;\n onClose: () => void;\n};\n\nexport function ChangeCustomerSpecifiedMachineLimitDialog(props: ChangeCustomerSpecifiedMachineLimitDialogProps) {\n const { open, onClose, cloudSubscription } = props;\n const { update } = useEntity();\n const { sendNewAlert } = useAlerts();\n\n const [isUpdating, setIsUpdating] = useState(false);\n const [error, setError] = useState(undefined);\n const [value, setValue] = useState(1);\n const [hasSpecifiedLimit, setHasSpecifiedLimit] = useState(\n hasCustomerSpecifiedMachineLimit(cloudSubscription)\n );\n const [title, setTitle] = useState(\"\");\n\n useEffect(() => {\n //when the dialog opens, set the initial values\n if (open) {\n setValue(cloudSubscription.customerSpecifiedMachineLimit ?? 1);\n setHasSpecifiedLimit(hasCustomerSpecifiedMachineLimit(cloudSubscription));\n setTitle(`${hasCustomerSpecifiedMachineLimit(cloudSubscription) ? \"Change\" : \"Set\"} maximum targets`);\n }\n }, [open, cloudSubscription]);\n\n const updateMaximumTargets = async () => {\n setIsUpdating(true);\n\n try {\n const machineLimit = hasSpecifiedLimit && value ? value : undefined;\n\n const changedCloudSubscription = await updateCustomerSpecifiedMachineLimit(cloudSubscription, machineLimit);\n\n sendNewAlert(\"Maximum targets updated\", AlertSeverity.Success);\n handleOnClose(true);\n\n //update after close\n update(changedCloudSubscription);\n } catch (e) {\n if (axios.isAxiosError(e)) {\n setError(e);\n } else {\n console.error(e);\n }\n } finally {\n setIsUpdating(false);\n }\n };\n\n const handleOnClose = (force = false) => {\n if (isUpdating && !force) {\n return;\n }\n onClose();\n };\n\n const handleHasMaximumChanged = (event: ChangeEvent) => {\n setHasSpecifiedLimit(event.target.checked);\n if (hasSpecifiedLimit && (!value || value < 0)) {\n setValue(1);\n }\n };\n\n const handleOnValueChanged = (event: ChangeEvent) => {\n setValue(parseInt(event.target.value));\n };\n\n return (\n handleOnClose()}\n aria-labelledby=\"change-customer-specified-machine-limit-dialog-title\"\n aria-describedby=\"change-customer-specified-machine-limit-dialog-description\"\n >\n \n {title}\n handleOnClose()}\n sx={{\n position: \"absolute\",\n right: 8,\n top: 8,\n color: themeTokens.color.callout.icon.default,\n }}\n >\n \n \n \n \n {error && }\n \n Setting a maximum target limit can help to control your spend. You will only be charged for the number of\n targets in your subscription on the renewal date.\n \n \n \n Maximum deployment target usage\n \n setHasSpecifiedLimit(e.target.value === \"true\")}\n aria-labelledby=\"maximum-targets-group-label\"\n >\n }\n label={\"Unlimited\"}\n id={\"maximum-targets-unlimited-option-label\"}\n />\n }\n label={\"Limited\"}\n id={\"maximum-targets-limited-option-label\"}\n />\n \n \n {hasSpecifiedLimit && (\n \n \n \n )}\n \n \n \n \n \n {\"Updating...\"}\n \n }\n >\n Update\n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport { Grid, Stack, Typography } from \"@mui/material\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport type { CloudSubscriptionProps } from \"areas/cloudSubscriptions/CloudSubscriptionProps\";\nimport { ChangeCustomerSpecifiedMachineLimitDialog } from \"areas/cloudSubscriptions/detail/components/finance/ChangeCustomerSpecifiedMachineLimitDialog\";\n\nexport function hasCustomerSpecifiedMachineLimit(cloudSubscription: CloudSubscriptionDto): boolean {\n return !!cloudSubscription.customerSpecifiedMachineLimit && cloudSubscription.customerSpecifiedMachineLimit > 0;\n}\n\ntype CustomerSpecifiedMachineLimitLineProps = CloudSubscriptionProps & {\n editable: boolean;\n};\n\nexport function CustomerSpecifiedMachineLimitLine(props: CustomerSpecifiedMachineLimitLineProps) {\n const { cloudSubscription, editable } = props;\n const [showChangeLimitDialog, setShowChangeLimitDialog] = useState(false);\n\n const buttonPrefix = hasCustomerSpecifiedMachineLimit(cloudSubscription) ? \"Change\" : \"Set\";\n\n const pluralSuffix =\n !props.cloudSubscription.customerSpecifiedMachineLimit || props.cloudSubscription.customerSpecifiedMachineLimit > 1\n ? \"s\"\n : undefined;\n\n return (\n <>\n \n Maximum targets\n \n \n \n {cloudSubscription.customerSpecifiedMachineLimit || \"Unlimited\"} deployment target{pluralSuffix}\n \n \n \n \n {editable && (\n \n setShowChangeLimitDialog(true)}>{buttonPrefix} maximum targets\n setShowChangeLimitDialog(false)}\n />\n \n )}\n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport { Grid, Stack, Typography } from \"@mui/material\";\nimport { DateText } from \"@cpt/components\";\nimport { IsSubscribedOrLapsed } from \"utils/CloudSubscription/CloudSubscriptionStatus\";\nimport type {\n CloudSubscriptionDto,\n StripeSubscriptionCloudSubscriptionLicensingChannelDto,\n} from \"client/api/CloudSubscriptionApi\";\nimport { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { ChangePlanFinanceLine } from \"components/ChangePlanFinanceLine/ChangePlanFinanceLine\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { GridDivider } from \"components/GridDivider/GridDivider\";\nimport { LicensedEntitlementsView } from \"components/LicensedEntitlementsView/LicensedEntitlementsView\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { OrdersFinanceLine } from \"components/OrdersFinanceLine/OrdersFinanceLine\";\nimport { RouterLink } from \"components/RouterLink/RouterLink\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\nimport { CloudSubscriptionCancelPlanDialog } from \"areas/cloudSubscriptions/detail/components/finance/CloudSubscriptionCancelPlanDialog\";\nimport { CustomerSpecifiedMachineLimitLine } from \"areas/cloudSubscriptions/detail/components/finance/CustomerSpecifiedMachineLimitLine\";\nimport type { LicensingChannelViewProps } from \"areas/cloudSubscriptions/detail/components/finance/LicensingChannelViewProps\";\n\ntype EntitlementViewProps = { cloudSubscription: CloudSubscriptionDto };\nfunction EntitlementView(props: EntitlementViewProps) {\n const { cloudSubscription } = props;\n return ;\n}\n\nconst ResubscribeOrManageSubscription = ({\n show,\n canResubscribe,\n cloudSubscription,\n}: {\n show: boolean;\n canResubscribe: boolean;\n cloudSubscription: CloudSubscriptionDto;\n}) => {\n const { showDialog } = useContactSalesDialog();\n if (!show) {\n return <>;\n }\n if (canResubscribe) {\n return showDialog({ reason: \"other\" })}>Resubscribe;\n }\n\n return showDialog({ reason: \"other\" })}>Manage subscription;\n};\n\nexport function StripeSubscriptionLicensingChannelView(\n props: LicensingChannelViewProps\n) {\n const { cloudSubscription, channel } = props;\n const [showCancelDialog, setShowCancelDialog] = useState(false);\n\n const isCommunity = channel.productName?.toLowerCase().includes(\"community\");\n const isSubscriptionPtm = [\n UpgradePlan.Cloud_Annually_Starter,\n UpgradePlan.Cloud_Annually_Professional,\n UpgradePlan.Cloud_Annually_Enterprise,\n ].some((val) => val === channel.priceCode);\n const stripeSubscriptionCancelled = channel.status == \"canceled\";\n const isCancelledOrCancelling = channel.status === \"canceled\" || channel.cancelAtPeriodEnd;\n const isCanceledNonPtm = !isSubscriptionPtm && (channel.status === \"canceled\" || channel.cancelAtPeriodEnd);\n const showCustomStripeControls =\n IsSubscribedOrLapsed(cloudSubscription.cloudSubscriptionStatus) && !channel.cancelAtPeriodEnd;\n //if the status is canceled, show when it was canceled\n const planStatusPrefix =\n channel.status === \"canceled\" ? \"Cancelled on\" : channel.cancelAtPeriodEnd ? \"Cancels on\" : \"Renews on\";\n\n return (\n <>\n <>\n \n Current plan\n \n \n \n {channel.productName}\n \n {planStatusPrefix} \n \n \n \n \n \n \n \n {showCustomStripeControls && (\n \n \n Change plan\n \n {!isCancelledOrCancelling && (\n <>\n setShowCancelDialog(true)}>Cancel subscription\n setShowCancelDialog(false)}\n cloudSubscription={cloudSubscription}\n >\n \n If you cancel now, you can use your subscription until{\" \"}\n . We'll then automatically\n deactivate the plan and put secure backups of your data into cold-storage. After 90 days, your\n data will be automatically deleted. If you want your data deleted sooner, email{\" \"}\n support@octopus.com after you've deactivated your\n instance, and we'll delete your data immediately.\n \n \n \n )}\n \n )}\n \n \n \n \n \n {!showCustomStripeControls && !stripeSubscriptionCancelled && (\n <>\n \n \n \n )}\n {!isCommunity && !isSubscriptionPtm && (\n <>\n \n \n \n )}\n {isCommunity && (\n <>\n \n \n \n )}\n \n \n );\n}\n","import { isServerLicenseChannelType } from \"utils/ServerLicenseLicensingChannelTypeHelpers\";\nimport type { CloudLicensingChannelTypes } from \"client/api/CloudSubscriptionApi\";\nimport type { ServerLicensingChannelTypes } from \"client/api/ServerLicenseApi\";\nimport { ServerLicensingChannelTypesKeys } from \"client/api/ServerLicenseApi\";\n\nexport const isServerTemporary = (channelType: ServerLicensingChannelTypes) =>\n channelType === ServerLicensingChannelTypesKeys.Temporary;\n\nexport const isTemporary = (channelType: CloudLicensingChannelTypes | ServerLicensingChannelTypes) =>\n isServerLicenseChannelType(channelType) && isServerTemporary(channelType);\n","import React from \"react\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { alpha, Chip } from \"@mui/material\";\nimport { designSystemColors } from \"@cpt/shared/Theme/designSystemColors\";\nimport { isTemporary } from \"utils/isTemporary\";\nimport { isTrial } from \"utils/isTrial\";\nimport type { CloudLicensingChannelTypes } from \"client/api/CloudSubscriptionApi\";\nimport type { ServerLicensingChannelTypes } from \"client/api/ServerLicenseApi\";\n\ntype LicenseChannelChipProps = {\n channelType: LicensingChannelTypes;\n sx?: SxProps;\n};\n\ntype LicensingChannelTypes = CloudLicensingChannelTypes | ServerLicensingChannelTypes;\n\nfunction ChannelChipLabel({ channelType }: { channelType: LicensingChannelTypes }) {\n if (isTrial(channelType)) {\n return \"Trial\";\n }\n if (isTemporary(channelType)) {\n return \"Temporary\";\n }\n return null;\n}\n\nexport function LicenseChannelChip(props: LicenseChannelChipProps) {\n const { channelType, sx } = props;\n\n if (!isTrial(channelType) && !isTemporary(channelType)) {\n return <>;\n }\n\n const label = ChannelChipLabel({ channelType });\n\n return (\n \n );\n}\n","import React, { useState } from \"react\";\nimport { Grid, Stack, Typography } from \"@mui/material\";\nimport { DateTime } from \"luxon\";\nimport { DateText } from \"@cpt/components\";\nimport { IsSubscribedOrLapsed } from \"utils/CloudSubscription/CloudSubscriptionStatus\";\nimport { isCloudTrial } from \"utils/isTrial\";\nimport type { TrialCloudSubscriptionLicensingChannelDto } from \"client/api/CloudSubscriptionApi\";\nimport { GridDivider } from \"components/GridDivider/GridDivider\";\nimport { LicenseChannelChip } from \"components/LicenseChannelChip/LicenseChannelChip\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { OrdersFinanceLine } from \"components/OrdersFinanceLine/OrdersFinanceLine\";\nimport { RouterLink } from \"components/RouterLink/RouterLink\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\nimport type { LicensingChannelViewProps } from \"areas/cloudSubscriptions/detail/components/finance/LicensingChannelViewProps\";\nimport {\n CloudSubscriptionCancelPlanDialog,\n CloudSubscriptionCancelPlanDialogText,\n} from \"./CloudSubscriptionCancelPlanDialog\";\n\nexport function TrialLicensingChannelView(props: LicensingChannelViewProps) {\n const { cloudSubscription, channel } = props;\n const [showCancelDialog, setShowCancelDialog] = useState(false);\n\n const isTrial = isCloudTrial(channel.channelType);\n\n if (!isTrial) {\n throw new Error(\"Rendering TrialLicensingChannelView for non-trial subscription.\");\n }\n\n const now = DateTime.now();\n let planStatusPrefix = \"Expires\";\n if (channel.expiryDate < now) {\n planStatusPrefix = \"Expired\";\n }\n\n return (\n <>\n <>\n \n Current plan\n \n \n \n Cloud Trial \n \n \n {planStatusPrefix} \n \n \n \n \n {cloudSubscription.isFulfilled && (\n \n \n Upgrade Plan\n \n \n )}\n {cloudSubscription.isFulfilled && IsSubscribedOrLapsed(cloudSubscription.cloudSubscriptionStatus) && (\n \n setShowCancelDialog(true)}>Cancel trial\n setShowCancelDialog(false)}\n cloudSubscription={cloudSubscription}\n >\n \n \n \n )}\n \n \n \n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport { Grid, Typography } from \"@mui/material\";\nimport { IsSubscribedOrLapsed } from \"utils/CloudSubscription/CloudSubscriptionStatus\";\nimport type { ImportedTrialCloudSubscriptionLicensingChannelDto } from \"client/api/CloudSubscriptionApi\";\nimport { ChangePlanFinanceLine } from \"components/ChangePlanFinanceLine/ChangePlanFinanceLine\";\nimport { GridDivider } from \"components/GridDivider/GridDivider\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { OrdersFinanceLine } from \"components/OrdersFinanceLine/OrdersFinanceLine\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport {\n CloudSubscriptionCancelPlanDialog,\n CloudSubscriptionCancelPlanDialogText,\n} from \"areas/cloudSubscriptions/detail/components/finance/CloudSubscriptionCancelPlanDialog\";\nimport type { LicensingChannelViewProps } from \"areas/cloudSubscriptions/detail/components/finance/LicensingChannelViewProps\";\n\nexport function ImportedTrialLicensingChannelView(\n props: LicensingChannelViewProps\n) {\n const { cloudSubscription, channel } = props;\n const [showCancelDialog, setShowCancelDialog] = useState(false);\n return (\n <>\n {/**/}\n <>\n \n Current plan\n \n \n Cloud\n \n \n {IsSubscribedOrLapsed(cloudSubscription.cloudSubscriptionStatus) && (\n \n setShowCancelDialog(true)}>Cancel subscription\n setShowCancelDialog(false)}\n cloudSubscription={cloudSubscription}\n >\n \n \n \n )}\n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Grid, Stack, Typography } from \"@mui/material\";\nimport { DateText } from \"@cpt/components\";\nimport type { CloudSubscriptionDto, ZuoraCloudSubscriptionLicensingChannelDto } from \"client/api/CloudSubscriptionApi\";\nimport { ChangePlanFinanceLine } from \"components/ChangePlanFinanceLine/ChangePlanFinanceLine\";\nimport { GridDivider } from \"components/GridDivider/GridDivider\";\nimport { LicensedEntitlementsView } from \"components/LicensedEntitlementsView/LicensedEntitlementsView\";\nimport { OrdersFinanceLine } from \"components/OrdersFinanceLine/OrdersFinanceLine\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport type { LicensingChannelViewProps } from \"areas/cloudSubscriptions/detail/components/finance/LicensingChannelViewProps\";\n\ntype EntitlementViewProps = { cloudSubscription: CloudSubscriptionDto };\nfunction EntitlementView(props: EntitlementViewProps) {\n const { cloudSubscription } = props;\n return ;\n}\n\nexport function ZuoraLicensingChannelView(props: LicensingChannelViewProps) {\n const { channel, cloudSubscription } = props;\n const planStatusPrefix = channel.cancelAtPeriodEnd ? \"Cancels on\" : \"License expiry\";\n return (\n <>\n \n Platform and licensing\n \n \n \n Cloud {/* TODO: get actual plan name (sc-94081) */}\n \n {planStatusPrefix} \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Grid } from \"@mui/material\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { CloudLicensingChannelTypesKeys } from \"client/api/CloudSubscriptionApi\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { CloudSubscriptionHeader } from \"areas/cloudSubscriptions/components/CloudSubscriptionHeader\";\nimport { InfrastructureLicensingChannelView } from \"areas/cloudSubscriptions/detail/components/finance/InfastructureLicensingChannelView\";\nimport { LegacyBraintreeLicensingChannelView } from \"areas/cloudSubscriptions/detail/components/finance/LegacyBraintreeLicensingChannelView\";\nimport { SalesforceContractedLicensingChannelView } from \"areas/cloudSubscriptions/detail/components/finance/SalesforceContractedLicensingChannelView\";\nimport { StripeSubscriptionLicensingChannelView } from \"areas/cloudSubscriptions/detail/components/finance/StripeSubscriptionLicensingChannelView\";\nimport { TrialLicensingChannelView } from \"areas/cloudSubscriptions/detail/components/finance/TrialLicensingChannelView\";\nimport { ImportedTrialLicensingChannelView } from \"./components/finance/ImportedTrialLicensingChannelView\";\nimport { ZuoraLicensingChannelView } from \"./components/finance/ZuoraLicensingChannelView\";\n\nexport function LicensingChannelGridView(props: CloudSubscriptionDto) {\n const cloudSubscription = props;\n\n switch (cloudSubscription.licensingChannel.channelType) {\n case CloudLicensingChannelTypesKeys.Zuora:\n return (\n \n );\n case CloudLicensingChannelTypesKeys.LegacyBraintree:\n return (\n \n );\n case CloudLicensingChannelTypesKeys.Salesforce:\n return (\n \n );\n case CloudLicensingChannelTypesKeys.Stripe:\n return (\n \n );\n case CloudLicensingChannelTypesKeys.ImportedTrial:\n return (\n \n );\n case CloudLicensingChannelTypesKeys.Trial:\n return (\n \n );\n case CloudLicensingChannelTypesKeys.Infrastructure:\n return (\n \n );\n }\n}\n\nexport function CloudSubscriptionFinance() {\n const { entity: cloudSubscription } = useEntity();\n\n // if we don't have a cloud subscription, don't do anything\n if (!cloudSubscription) return <>;\n\n return (\n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { Alert } from \"@mui/material\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { getCloudSubscriptionBySerial } from \"client/api/CloudSubscriptionApi\";\n\nexport function CloudSubscriptionLoadViaSerial() {\n const { serialId } = useParams();\n\n const { data, loading, error, refresh } = useAsyncRequest(getCloudSubscriptionBySerial, serialId || \"\");\n\n const navigate = useNavigate();\n\n if (data) {\n navigate(`/cloud-subscriptions/${data.id}`);\n }\n\n if (error) {\n return {error.message};\n }\n\n return <>;\n}\n","var _g, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgCcv1ToCcv2Migration = function SvgCcv1ToCcv2Migration(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 200,\n height: 200,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#ccv1_to_ccv2_migration_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M0 0h200v200H0z\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n fillRule: \"evenodd\",\n clipRule: \"evenodd\",\n d: \"M89.856 24.721c15.131 3.514 26.88 13.168 40.582 20.483 16.679 8.904 42.518 8.976 48.312 26.973 5.798 18.007-15.827 32.838-23.486 50.135-6.562 14.819-6.174 32.881-18.121 43.832-12.584 11.535-30.7 20.157-47.287 16.121-16.152-3.931-22.972-22.477-33.077-35.677-7.016-9.163-11.369-19.121-16.708-29.351-6.752-12.937-17.543-23.866-18.66-38.416-1.502-19.566-4.005-44.122 11.39-56.29 15.306-12.099 38.051-2.223 57.055 2.19Z\",\n fill: \"url(#ccv1_to_ccv2_migration_svg__b)\"\n }), /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#ccv1_to_ccv2_migration_svg__c)\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: 11,\n y: 43,\n width: 72,\n height: 72,\n rx: 8,\n fill: \"#fff\"\n })), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M34.497 78.275c2.386-1.55 5.193-4.213 4.129-7.348-.581-1.707-1.386-3.169-1.494-5.014-.09-1.563.143-3.128.684-4.596 2.142-5.797 8.53-8.543 14.265-6.796 5.329 1.614 8.999 7.873 6.788 13.286-1.274 3.13-1.845 5.59.996 8.007.77.664 2.645 1.653 2.635 2.83 0 1.535-3.001-.33-3.333-.596.38.67 4.153 4.636 1.752 4.921-2.211.261-4.163-2.85-5.49-4.188-2.23-2.244-1.84 2.722-1.85 3.745 0 1.62-1.152 4.921-3.187 2.766-1.679-1.767-1.044-4.577-2.216-6.535-1.278-2.15-3.416 2.145-3.938 2.952-.595.881-3.572 5.128-4.753 2.864-.976-1.835.575-4.719 1.327-6.397-.273.6-2.225 1.476-2.796 1.786a7.552 7.552 0 0 1-4.041.94c-2.997-.221-.698-1.825.522-2.618v-.01Z\",\n fill: \"#0D80D8\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m43.385 100.922 2.345-7.875h2.283L44.547 103h-1.504l.342-2.078Zm-2.16-7.875 2.337 7.875.356 2.078H42.4l-3.445-9.953h2.27ZM53.536 93.026V103h-1.969v-7.704l-2.365.752v-1.552l4.122-1.47h.212Z\",\n fill: \"#113049\"\n }), /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#ccv1_to_ccv2_migration_svg__d)\"\n }, /*#__PURE__*/React.createElement(\"rect\", {\n x: 124,\n y: 91,\n width: 72,\n height: 72,\n rx: 8,\n fill: \"#fff\"\n })), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M147.497 126.274c2.386-1.55 5.193-4.212 4.129-7.347-.581-1.707-1.386-3.169-1.494-5.014-.09-1.563.143-3.129.684-4.596 2.142-5.797 8.53-8.543 14.265-6.796 5.329 1.614 8.999 7.873 6.788 13.286-1.274 3.13-1.845 5.591.996 8.007.771.664 2.645 1.653 2.635 2.83 0 1.535-3.001-.33-3.333-.596.38.669 4.153 4.636 1.752 4.921-2.211.261-4.163-2.849-5.491-4.188-2.23-2.244-1.839 2.722-1.849 3.745 0 1.619-1.152 4.921-3.187 2.766-1.679-1.767-1.044-4.577-2.216-6.535-1.278-2.151-3.416 2.145-3.938 2.952-.595.881-3.572 5.128-4.753 2.864-.976-1.835.576-4.719 1.327-6.397-.273.6-2.225 1.476-2.796 1.786a7.546 7.546 0 0 1-4.041.94c-2.997-.221-.698-1.825.522-2.618v-.01Z\",\n fill: \"#0D80D8\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"m156.385 148.922 2.344-7.875h2.284L157.547 151h-1.504l.342-2.078Zm-2.16-7.875 2.337 7.875.356 2.078H155.4l-3.445-9.953h2.27ZM168.546 149.462V151h-6.809v-1.312l3.22-3.453c.324-.36.579-.676.766-.95.187-.278.321-.526.403-.745a1.75 1.75 0 0 0 .13-.636c0-.3-.05-.558-.151-.772a1.114 1.114 0 0 0-.444-.506c-.191-.119-.428-.178-.711-.178-.301 0-.56.073-.779.219a1.397 1.397 0 0 0-.492.608c-.11.26-.164.554-.164.882h-1.976c0-.592.141-1.135.424-1.627a3.102 3.102 0 0 1 1.196-1.182c.515-.297 1.126-.445 1.832-.445.697 0 1.285.114 1.764.342.483.223.848.547 1.094.971.25.419.376.92.376 1.504 0 .328-.053.649-.158.964a4.33 4.33 0 0 1-.451.929 7.405 7.405 0 0 1-.697.93c-.273.314-.577.64-.909.978l-1.73 1.941h4.266Z\",\n fill: \"#113049\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M91 79h4a8 8 0 0 1 8 8v32a8 8 0 0 0 8 8h4\",\n stroke: \"#7C98B4\",\n strokeWidth: 4,\n strokeLinecap: \"round\"\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M111.062 132.06a1.315 1.315 0 0 0 0 1.911c.261.258.602.379.962.379.337 0 .678-.126.935-.384l-.247-.247.247.247 5.999-5.999a1.315 1.315 0 0 0 0-1.911l-5.994-5.994a1.315 1.315 0 0 0-1.907-.005 1.315 1.315 0 0 0 .005 1.907l5.033 5.033-5.033 5.063Z\",\n fill: \"#7C98B4\",\n stroke: \"#7C98B4\",\n strokeWidth: 0.7\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"ccv1_to_ccv2_migration_svg__c\",\n x: 3,\n y: 36,\n width: 88,\n height: 88,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n \"in\": \"SourceAlpha\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 1\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 4\n }), /*#__PURE__*/React.createElement(\"feComposite\", {\n in2: \"hardAlpha\",\n operator: \"out\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_11_275\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"effect1_dropShadow_11_275\",\n result: \"shape\"\n })), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"ccv1_to_ccv2_migration_svg__d\",\n x: 116,\n y: 84,\n width: 88,\n height: 88,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n \"in\": \"SourceAlpha\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 1\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 4\n }), /*#__PURE__*/React.createElement(\"feComposite\", {\n in2: \"hardAlpha\",\n operator: \"out\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.06 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_11_275\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"effect1_dropShadow_11_275\",\n result: \"shape\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"ccv1_to_ccv2_migration_svg__b\",\n x1: 179.726,\n y1: 16.726,\n x2: -10.938,\n y2: 68.641,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#C5E6FF\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#E5F4FF\"\n })), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"ccv1_to_ccv2_migration_svg__a\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n d: \"M0 0h200v200H0z\"\n })))));\n};\nexport { SvgCcv1ToCcv2Migration as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjAwIiBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMCAwIDIwMCAyMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGNsaXAtcGF0aD0idXJsKCNjbGlwMF8xMV8yNzUpIj4KPHJlY3Qgd2lkdGg9IjIwMCIgaGVpZ2h0PSIyMDAiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgY2xpcC1ydWxlPSJldmVub2RkIiBkPSJNODkuODU2NSAyNC43MjEzQzEwNC45ODcgMjguMjM1IDExNi43MzYgMzcuODg5NCAxMzAuNDM4IDQ1LjIwNDRDMTQ3LjExNyA1NC4xMDgzIDE3Mi45NTYgNTQuMTgwMiAxNzguNzUgNzIuMTc2OUMxODQuNTQ4IDkwLjE4NDMgMTYyLjkyMyAxMDUuMDE1IDE1NS4yNjQgMTIyLjMxMkMxNDguNzAyIDEzNy4xMzEgMTQ5LjA5IDE1NS4xOTMgMTM3LjE0MyAxNjYuMTQ0QzEyNC41NTkgMTc3LjY3OSAxMDYuNDQzIDE4Ni4zMDEgODkuODU2NSAxODIuMjY1QzczLjcwMzggMTc4LjMzNCA2Ni44ODQzIDE1OS43ODggNTYuNzc4NiAxNDYuNTg4QzQ5Ljc2MzMgMTM3LjQyNSA0NS40MTAzIDEyNy40NjcgNDAuMDcwOSAxMTcuMjM3QzMzLjMxOSAxMDQuMyAyMi41Mjc4IDkzLjM3MTIgMjEuNDExIDc4LjgyMUMxOS45MDkgNTkuMjU0NSAxNy40MDU2IDM0LjY5OTEgMzIuODAxMiAyMi41MzA0QzQ4LjEwNzIgMTAuNDMyNCA3MC44NTIzIDIwLjMwOCA4OS44NTY1IDI0LjcyMTNaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMTFfMjc1KSIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kXzExXzI3NSkiPgo8cmVjdCB4PSIxMSIgeT0iNDMiIHdpZHRoPSI3MiIgaGVpZ2h0PSI3MiIgcng9IjgiIGZpbGw9IndoaXRlIi8+CjwvZz4KPHBhdGggZD0iTTM0LjQ5NyA3OC4yNzQ1QzM2Ljg4MzUgNzYuNzI0MyAzOS42ODk2IDc0LjA2MjEgMzguNjI1NyA3MC45MjczQzM4LjA0NSA2OS4yMTk3IDM3LjIzOTggNjcuNzU4MiAzNy4xMzI0IDY1LjkxMjhDMzcuMDQyNCA2NC4zNDk2IDM3LjI3NSA2Mi43ODQ1IDM3LjgxNTYgNjEuMzE2NUMzOS45NTgxIDU1LjUxOTYgNDYuMzQ2MyA1Mi43NzM2IDUyLjA4MDYgNTQuNTIwNkM1Ny40MDk5IDU2LjEzNDcgNjEuMDc5OCA2Mi4zOTQzIDU4Ljg2OTEgNjcuODA3NEM1Ny41OTUzIDcwLjkzNzIgNTcuMDI0MyA3My4zOTc3IDU5Ljg2NDYgNzUuODEzOUM2MC42MzU3IDc2LjQ3ODMgNjIuNTA5NyA3Ny40Njc0IDYyLjUgNzguNjQzNUM2Mi41IDgwLjE3ODkgNTkuNDk4NiA3OC4zMTM4IDU5LjE2NjcgNzguMDQ4MUM1OS41NDc0IDc4LjcxNzQgNjMuMzE5OCA4Mi42ODM3IDYwLjkxODggODIuOTY5MUM1OC43MDggODMuMjMgNTYuNzU1OSA4MC4xMTk5IDU1LjQyODUgNzguNzgxM0M1My4xOTgyIDc2LjUzNzMgNTMuNTg4NiA4MS41MDI3IDUzLjU3ODkgODIuNTI2M0M1My41Nzg5IDg0LjE0NTMgNTIuNDI3MSA4Ny40NDczIDUwLjM5MiA4NS4yOTE5QzQ4LjcxMzIgODMuNTI1MiA0OS4zNDc3IDgwLjcxNTMgNDguMTc2NCA3OC43NTY3QzQ2Ljg5NzggNzYuNjA2MiA0NC43NjAyIDgwLjkwMjMgNDQuMjM4IDgxLjcwOTRDNDMuNjQyNyA4Mi41OTAyIDQwLjY2NTcgODYuODM3MSAzOS40ODQ3IDg0LjU3MzRDMzguNTA4NiA4Mi43Mzc5IDQwLjA2MDUgNzkuODU0MSA0MC44MTIxIDc4LjE3NkM0MC41Mzg4IDc4Ljc3NjQgMzguNTg2NyA3OS42NTI0IDM4LjAxNTcgNzkuOTYyNEMzNi43ODEyIDgwLjY0NzIgMzUuMzgyMiA4MC45NzI2IDMzLjk3NDkgODAuOTAyM0MzMC45Nzg0IDgwLjY4MDkgMzMuMjc3IDc5LjA3NjYgMzQuNDk3IDc4LjI4NDNWNzguMjc0NVoiIGZpbGw9IiMwRDgwRDgiLz4KPHBhdGggZD0iTTQzLjM4NDggMTAwLjkyMkw0NS43Mjk1IDkzLjA0NjlINDguMDEyN0w0NC41NDY5IDEwM0g0My4wNDNMNDMuMzg0OCAxMDAuOTIyWk00MS4yMjQ2IDkzLjA0NjlMNDMuNTYyNSAxMDAuOTIyTDQzLjkxOCAxMDNINDIuNDAwNEwzOC45NTUxIDkzLjA0NjlINDEuMjI0NloiIGZpbGw9IiMxMTMwNDkiLz4KPHBhdGggZD0iTTUzLjUzNjEgOTMuMDI2NFYxMDNINTEuNTY3NFY5NS4yOTU5TDQ5LjIwMjEgOTYuMDQ3OVY5NC40OTYxTDUzLjMyNDIgOTMuMDI2NEg1My41MzYxWiIgZmlsbD0iIzExMzA0OSIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMV9kXzExXzI3NSkiPgo8cmVjdCB4PSIxMjQiIHk9IjkxIiB3aWR0aD0iNzIiIGhlaWdodD0iNzIiIHJ4PSI4IiBmaWxsPSJ3aGl0ZSIvPgo8L2c+CjxwYXRoIGQ9Ik0xNDcuNDk3IDEyNi4yNzRDMTQ5Ljg4MyAxMjQuNzI0IDE1Mi42OSAxMjIuMDYyIDE1MS42MjYgMTE4LjkyN0MxNTEuMDQ1IDExNy4yMiAxNTAuMjQgMTE1Ljc1OCAxNTAuMTMyIDExMy45MTNDMTUwLjA0MiAxMTIuMzUgMTUwLjI3NSAxMTAuNzg0IDE1MC44MTYgMTA5LjMxN0MxNTIuOTU4IDEwMy41MiAxNTkuMzQ2IDEwMC43NzQgMTY1LjA4MSAxMDIuNTIxQzE3MC40MSAxMDQuMTM1IDE3NC4wOCAxMTAuMzk0IDE3MS44NjkgMTE1LjgwN0MxNzAuNTk1IDExOC45MzcgMTcwLjAyNCAxMjEuMzk4IDE3Mi44NjUgMTIzLjgxNEMxNzMuNjM2IDEyNC40NzggMTc1LjUxIDEyNS40NjcgMTc1LjUgMTI2LjY0NEMxNzUuNSAxMjguMTc5IDE3Mi40OTkgMTI2LjMxNCAxNzIuMTY3IDEyNi4wNDhDMTcyLjU0NyAxMjYuNzE3IDE3Ni4zMiAxMzAuNjg0IDE3My45MTkgMTMwLjk2OUMxNzEuNzA4IDEzMS4yMyAxNjkuNzU2IDEyOC4xMiAxNjguNDI4IDEyNi43ODFDMTY2LjE5OCAxMjQuNTM3IDE2Ni41ODkgMTI5LjUwMyAxNjYuNTc5IDEzMC41MjZDMTY2LjU3OSAxMzIuMTQ1IDE2NS40MjcgMTM1LjQ0NyAxNjMuMzkyIDEzMy4yOTJDMTYxLjcxMyAxMzEuNTI1IDE2Mi4zNDggMTI4LjcxNSAxNjEuMTc2IDEyNi43NTdDMTU5Ljg5OCAxMjQuNjA2IDE1Ny43NiAxMjguOTAyIDE1Ny4yMzggMTI5LjcwOUMxNTYuNjQzIDEzMC41OSAxNTMuNjY2IDEzNC44MzcgMTUyLjQ4NSAxMzIuNTczQzE1MS41MDkgMTMwLjczOCAxNTMuMDYxIDEyNy44NTQgMTUzLjgxMiAxMjYuMTc2QzE1My41MzkgMTI2Ljc3NiAxNTEuNTg3IDEyNy42NTIgMTUxLjAxNiAxMjcuOTYyQzE0OS43ODEgMTI4LjY0NyAxNDguMzgyIDEyOC45NzMgMTQ2Ljk3NSAxMjguOTAyQzE0My45NzggMTI4LjY4MSAxNDYuMjc3IDEyNy4wNzcgMTQ3LjQ5NyAxMjYuMjg0VjEyNi4yNzRaIiBmaWxsPSIjMEQ4MEQ4Ii8+CjxwYXRoIGQ9Ik0xNTYuMzg1IDE0OC45MjJMMTU4LjcyOSAxNDEuMDQ3SDE2MS4wMTNMMTU3LjU0NyAxNTFIMTU2LjA0M0wxNTYuMzg1IDE0OC45MjJaTTE1NC4yMjUgMTQxLjA0N0wxNTYuNTYyIDE0OC45MjJMMTU2LjkxOCAxNTFIMTU1LjRMMTUxLjk1NSAxNDEuMDQ3SDE1NC4yMjVaIiBmaWxsPSIjMTEzMDQ5Ii8+CjxwYXRoIGQ9Ik0xNjguNTQ2IDE0OS40NjJWMTUxSDE2MS43MzdWMTQ5LjY4OEwxNjQuOTU3IDE0Ni4yMzVDMTY1LjI4MSAxNDUuODc1IDE2NS41MzYgMTQ1LjU1OSAxNjUuNzIzIDE0NS4yODVDMTY1LjkxIDE0NS4wMDcgMTY2LjA0NCAxNDQuNzU5IDE2Ni4xMjYgMTQ0LjU0QzE2Ni4yMTMgMTQ0LjMxNyAxNjYuMjU2IDE0NC4xMDUgMTY2LjI1NiAxNDMuOTA0QzE2Ni4yNTYgMTQzLjYwNCAxNjYuMjA2IDE0My4zNDYgMTY2LjEwNSAxNDMuMTMyQzE2Ni4wMDUgMTQyLjkxMyAxNjUuODU3IDE0Mi43NDQgMTY1LjY2MSAxNDIuNjI2QzE2NS40NyAxNDIuNTA3IDE2NS4yMzMgMTQyLjQ0OCAxNjQuOTUgMTQyLjQ0OEMxNjQuNjQ5IDE0Mi40NDggMTY0LjM5IDE0Mi41MjEgMTY0LjE3MSAxNDIuNjY3QzE2My45NTcgMTQyLjgxMyAxNjMuNzkzIDE0My4wMTYgMTYzLjY3OSAxNDMuMjc1QzE2My41NjkgMTQzLjUzNSAxNjMuNTE1IDE0My44MjkgMTYzLjUxNSAxNDQuMTU3SDE2MS41MzlDMTYxLjUzOSAxNDMuNTY1IDE2MS42OCAxNDMuMDIyIDE2MS45NjMgMTQyLjUzQzE2Mi4yNDUgMTQyLjAzNCAxNjIuNjQ0IDE0MS42MzkgMTYzLjE1OSAxNDEuMzQ4QzE2My42NzQgMTQxLjA1MSAxNjQuMjg1IDE0MC45MDMgMTY0Ljk5MSAxNDAuOTAzQzE2NS42ODggMTQwLjkwMyAxNjYuMjc2IDE0MS4wMTcgMTY2Ljc1NSAxNDEuMjQ1QzE2Ny4yMzggMTQxLjQ2OCAxNjcuNjAzIDE0MS43OTIgMTY3Ljg0OSAxNDIuMjE2QzE2OC4wOTkgMTQyLjYzNSAxNjguMjI1IDE0My4xMzYgMTY4LjIyNSAxNDMuNzJDMTY4LjIyNSAxNDQuMDQ4IDE2OC4xNzIgMTQ0LjM2OSAxNjguMDY3IDE0NC42ODRDMTY3Ljk2MyAxNDQuOTkzIDE2Ny44MTIgMTQ1LjMwMyAxNjcuNjE2IDE0NS42MTNDMTY3LjQyNSAxNDUuOTE5IDE2Ny4xOTIgMTQ2LjIyOSAxNjYuOTE5IDE0Ni41NDNDMTY2LjY0NiAxNDYuODU3IDE2Ni4zNDIgMTQ3LjE4MyAxNjYuMDEgMTQ3LjUyMUwxNjQuMjggMTQ5LjQ2MkgxNjguNTQ2WiIgZmlsbD0iIzExMzA0OSIvPgo8cGF0aCBkPSJNOTEgNzlIOTVDOTkuNDE4MyA3OSAxMDMgODIuNTgxNyAxMDMgODdWMTE5QzEwMyAxMjMuNDE4IDEwNi41ODIgMTI3IDExMSAxMjdIMTE1IiBzdHJva2U9IiM3Qzk4QjQiIHN0cm9rZS13aWR0aD0iNCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+CjxwYXRoIGQ9Ik0xMTEuMDYyIDEzMi4wNkMxMTAuNTEzIDEzMi41NzMgMTEwLjUxMyAxMzMuNDU4IDExMS4wNjIgMTMzLjk3MUMxMTEuMzIzIDEzNC4yMjkgMTExLjY2NCAxMzQuMzUgMTEyLjAyNCAxMzQuMzVDMTEyLjM2MSAxMzQuMzUgMTEyLjcwMiAxMzQuMjI0IDExMi45NTkgMTMzLjk2NkwxMTIuNzEyIDEzMy43MTlMMTEyLjk1OSAxMzMuOTY2TDExOC45NTggMTI3Ljk2N0MxMTkuNTA3IDEyNy40NTQgMTE5LjUwNyAxMjYuNTY5IDExOC45NTggMTI2LjA1NkwxMTIuOTY0IDEyMC4wNjJDMTEyLjQ1MyAxMTkuNTE0IDExMS41NzEgMTE5LjUxMyAxMTEuMDU3IDEyMC4wNTdDMTEwLjUxMyAxMjAuNTcxIDExMC41MTQgMTIxLjQ1MyAxMTEuMDYyIDEyMS45NjRMMTE2LjA5NSAxMjYuOTk3TDExMS4wNjIgMTMyLjA2WiIgZmlsbD0iIzdDOThCNCIgc3Ryb2tlPSIjN0M5OEI0IiBzdHJva2Utd2lkdGg9IjAuNyIvPgo8L2c+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2RfMTFfMjc1IiB4PSIzIiB5PSIzNiIgd2lkdGg9Ijg4IiBoZWlnaHQ9Ijg4IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+CjxmZUNvbG9yTWF0cml4IGluPSJTb3VyY2VBbHBoYSIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIiByZXN1bHQ9ImhhcmRBbHBoYSIvPgo8ZmVPZmZzZXQgZHk9IjEiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNCIvPgo8ZmVDb21wb3NpdGUgaW4yPSJoYXJkQWxwaGEiIG9wZXJhdG9yPSJvdXQiLz4KPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMDYgMCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18xMV8yNzUiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QxX2Ryb3BTaGFkb3dfMTFfMjc1IiByZXN1bHQ9InNoYXBlIi8+CjwvZmlsdGVyPgo8ZmlsdGVyIGlkPSJmaWx0ZXIxX2RfMTFfMjc1IiB4PSIxMTYiIHk9Ijg0IiB3aWR0aD0iODgiIGhlaWdodD0iODgiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iMSIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI0Ii8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMC4wNiAwIi8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0iZWZmZWN0MV9kcm9wU2hhZG93XzExXzI3NSIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd18xMV8yNzUiIHJlc3VsdD0ic2hhcGUiLz4KPC9maWx0ZXI+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8xMV8yNzUiIHgxPSIxNzkuNzI2IiB5MT0iMTYuNzI2MSIgeDI9Ii0xMC45MzgyIiB5Mj0iNjguNjQwNyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjQzVFNkZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0U1RjRGRiIvPgo8L2xpbmVhckdyYWRpZW50Pgo8Y2xpcFBhdGggaWQ9ImNsaXAwXzExXzI3NSI+CjxyZWN0IHdpZHRoPSIyMDAiIGhlaWdodD0iMjAwIiBmaWxsPSJ3aGl0ZSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=\";","import React from \"react\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport InfoIcon from \"@mui/icons-material/Info\";\nimport { Grid, IconButton, Link, Paper, Typography } from \"@mui/material\";\nimport { designSystemColors } from \"@cpt/shared\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport type { ProductType } from \"shared/ProductType\";\nimport ControlCenterMigration from \"../../resources/images/svgs/ccv1_to_ccv2_migration.svg\";\n\ntype UpgradeSuccessBannerProps = {\n id: string;\n type: ProductType;\n onDismiss: () => void;\n};\n\nexport function ControlCenterV2MigrationBanner(props: UpgradeSuccessBannerProps) {\n const { id, type, onDismiss } = props;\n\n const productLong = type === \"CloudSubscription\" ? \"Cloud instance\" : \"Server license\";\n const productShort = type === \"CloudSubscription\" ? \"instances\" : \"licenses\";\n\n return (\n \n \n \n \n \n \n \n \n Your {productLong} has been moved to Control Center V2\n \n \n Control Center V2 is the future of Control Center. To learn more about managing your subscription in Control\n Center V2,{\" \"}\n \n read more\n \n .\n \n \n If you have any trials or {productShort} that haven't been renewed recently, they may be in{\" \"}\n \n Control Center V1\n \n .\n \n \n \n {\"Happy\n \n \n \n );\n}\n","import React from \"react\";\nimport { Grid } from \"@mui/material\";\nimport { DateTime, Duration } from \"luxon\";\nimport useLocalStorage from \"@cpt/hooks/useLocalStorage\";\nimport type { ProductType } from \"shared/ProductType\";\nimport { ControlCenterV2MigrationBanner } from \"components/ControlCenterV2MigrationBanner/ControlCenterV2MigrationBanner\";\nimport type { RenewedProducts } from \"components/RenewSuccessBanner/RenewSuccessBanner\";\nimport { RENEWED_PRODUCTS_KEY, RenewSuccessBanner } from \"components/RenewSuccessBanner/RenewSuccessBanner\";\nimport type { UpgradedStripeProducts } from \"components/StripeUpgradeSuccessAlert/StripeUpgradeSuccessAlert\";\nimport {\n StripeUpgradeSuccessAlert,\n UPGRADED_STRIPE_PRODUCTS_KEY,\n} from \"components/StripeUpgradeSuccessAlert/StripeUpgradeSuccessAlert\";\nimport type { UpgradedProducts } from \"components/UpgradeSuccessBanner/UpgradeSuccessBanner\";\nimport { UPGRADED_PRODUCTS_KEY, UpgradeSuccessBanner } from \"components/UpgradeSuccessBanner/UpgradeSuccessBanner\";\n\nexport type MigratedProducts = Record;\nexport const MIGRATED_PRODUCTS_KEY = \"migrated_products\";\n\ntype DetailOverviewBannerProps = {\n id: string;\n freemium: boolean;\n financePageRoute: string;\n type: ProductType;\n nextRenewalDate?: DateTime;\n};\n\nfunction ShowMigrationBanner(freemium: boolean, date?: string) {\n if (!freemium) {\n return false;\n }\n\n if (!date) {\n return true;\n }\n\n const diffFromNow = DateTime.now().diff(DateTime.fromISO(date), \"milliseconds\").as(\"milliseconds\");\n const oneDay = Duration.fromObject({ days: 1 }).as(\"milliseconds\");\n return diffFromNow <= oneDay;\n}\n\nexport function DetailOverviewBanner(props: DetailOverviewBannerProps) {\n const { id, freemium, financePageRoute, type, nextRenewalDate } = props;\n\n const [upgradedProducts] = useLocalStorage(UPGRADED_PRODUCTS_KEY, {});\n const [renewedProducts] = useLocalStorage(RENEWED_PRODUCTS_KEY, {});\n const [migratedProducts, setMigratedProducts] = useLocalStorage(MIGRATED_PRODUCTS_KEY, {});\n const [upgradedStripeProducts] = useLocalStorage(UPGRADED_STRIPE_PRODUCTS_KEY, {});\n\n const upgradeDate = upgradedProducts[id];\n const renewedDate = renewedProducts[id];\n const migratedProduct = migratedProducts[id];\n const stripeUpgradeData = upgradedStripeProducts[id];\n\n // If we haven't seen this migrated product before add it to local storage with today's date\n if (!migratedProduct && freemium) {\n const updated = {\n ...migratedProducts,\n [id]: DateTime.now().toISODate(),\n };\n setMigratedProducts(updated);\n }\n\n const showUpgradeBanner = upgradeDate && !freemium;\n const showRenewBanner = renewedDate && nextRenewalDate && type === \"ServerLicense\" && !showUpgradeBanner && !freemium;\n const showMigrationBanner = ShowMigrationBanner(freemium, migratedProduct);\n const showStripeUpgradeAlert = stripeUpgradeData?.upgradedAt;\n const showBanner = showUpgradeBanner || showRenewBanner || showMigrationBanner || showStripeUpgradeAlert;\n\n const onBannerDismiss = () => {\n if (showUpgradeBanner) {\n // TODO lift more of the state up from UpgradeSuccessBanner\n }\n\n if (showMigrationBanner) {\n const updated = {\n ...migratedProducts,\n [id]: DateTime.now().minus({ days: 1 }).toISODate(),\n };\n setMigratedProducts(updated);\n }\n };\n\n return (\n <>\n {showBanner && (\n \n {showUpgradeBanner && }\n {showRenewBanner && }\n {showMigrationBanner && }\n {showStripeUpgradeAlert && }\n \n )}\n \n );\n}\n","import React from \"react\";\nimport { Chip, CircularProgress, styled } from \"@mui/material\";\nimport { designSystemColors } from \"@cpt/shared\";\n\nconst StyledCircularProgress = styled(CircularProgress)`\n &.MuiChip-icon {\n color: ${designSystemColors.blue[\"500\"]};\n }\n`;\n\nexport function FulfillmentProgressChip() {\n return (\n }\n size={\"small\"}\n label={\"Fulfillment in progress\"}\n sx={{\n fontSize: \"12px\",\n alignSelf: \"center\",\n justifyContent: \"end\",\n backgroundColor: \"#FFFFFF\",\n color: \"#282F38\",\n border: \"1px solid #DEE1E6\",\n }}\n />\n );\n}\n","import React from \"react\";\nimport type { ReactElement } from \"react\";\nimport { Avatar, ListItem, ListItemText } from \"@mui/material\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nexport type IconAndTextProps = {\n icon: ReactElement;\n primary: string | ReactElement;\n secondary?: string | ReactElement;\n};\n\nexport function IconAndText(props: IconAndTextProps) {\n const { icon, primary, secondary } = props;\n\n return (\n \n theme.palette.grey[200],\n width: 56,\n height: 56,\n marginRight: 2,\n color: themeTokens.color.text.secondary,\n }}\n >\n {icon}\n \n \n \n );\n}\n\nexport function IconAndErrorText(props: IconAndTextProps) {\n const { icon, primary, secondary } = props;\n\n return (\n \n theme.palette.grey[200],\n width: 56,\n height: 56,\n marginRight: 2,\n color: themeTokens.color.text.secondary,\n }}\n >\n {icon}\n \n \n \n );\n}\n","import React from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport CalendarMonthIcon from \"@mui/icons-material/CalendarMonth\";\nimport CloudIcon from \"@mui/icons-material/Cloud\";\nimport { Card, Grid, Typography } from \"@mui/material\";\nimport type { DateTime } from \"luxon\";\nimport { DateText } from \"@cpt/components\";\nimport { IsZuoraSubscriptionLicensingChannel } from \"utils/CloudSubscriptionLicensingChannelTypeHelpers\";\nimport { isCloudTrial } from \"utils/isTrial\";\nimport type {\n CloudSubscriptionDto,\n CloudLicensingChannel,\n CloudLicensingChannelTypes,\n} from \"client/api/CloudSubscriptionApi\";\nimport { CloudLicensingChannelTypesKeys } from \"client/api/CloudSubscriptionApi\";\nimport { GreenButton } from \"components/Button/GreenButton\";\nimport { FulfillmentProgressChip } from \"components/Dashboard/FufillmentProgressChip\";\nimport { LicenseChannelChip } from \"components/LicenseChannelChip/LicenseChannelChip\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\nimport { IconAndText } from \"areas/cloudSubscriptions/detail/components/overview/IconAndText\";\n\nfunction PlanCard(props: {\n productName: string;\n additionalProductDetails?: string;\n expiryDate: DateTime;\n expiryDateLabel: string;\n channelType: CloudLicensingChannelTypes;\n cloudSubscription: CloudSubscriptionDto;\n}) {\n const { productName, expiryDate, expiryDateLabel, channelType, cloudSubscription, additionalProductDetails } = props;\n const isTrial = isCloudTrial(channelType) && cloudSubscription.isFulfilled;\n const isZuora = IsZuoraSubscriptionLicensingChannel(cloudSubscription.licensingChannel);\n\n return (\n \n \n {isZuora ? \"Platform and licensing\" : \"Plan\"}\n \n \n \n }\n primary={\n <>\n {productName} {isTrial && }\n \n }\n secondary={\n <>\n {additionalProductDetails}\n {!cloudSubscription.isFulfilled && }\n \n }\n />\n {isTrial && (\n \n \n Upgrade Plan\n \n \n )}\n \n \n }\n primary={\n \n }\n secondary={<>{expiryDateLabel}}\n />\n \n \n \n );\n}\n\nexport function PlanCardByLicensingChannel({\n cloudSubscription,\n licensingChannel,\n}: {\n cloudSubscription: CloudSubscriptionDto;\n licensingChannel: CloudLicensingChannel;\n}) {\n const defaultProductName = \"Cloud\";\n switch (licensingChannel.channelType) {\n case CloudLicensingChannelTypesKeys.Salesforce:\n case CloudLicensingChannelTypesKeys.ImportedTrial:\n case CloudLicensingChannelTypesKeys.Trial:\n return (\n \n );\n case CloudLicensingChannelTypesKeys.Zuora:\n return (\n \n );\n case CloudLicensingChannelTypesKeys.Infrastructure:\n return (\n \n );\n case CloudLicensingChannelTypesKeys.Stripe:\n return (\n \n );\n case CloudLicensingChannelTypesKeys.LegacyBraintree:\n default:\n return null;\n }\n}\n","import React from \"react\";\nimport { Card, Link, Stack, Typography } from \"@mui/material\";\nimport { CloudSubscriptionStatus } from \"utils/CloudSubscription/CloudSubscriptionStatus\";\nimport { isTrialLicensingChannel } from \"utils/CloudSubscriptionLicensingChannelTypeHelpers\";\nimport { getHostname } from \"utils/formatters/DnsFormatters\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { CloudSubscriptionStatusIcon } from \"components/Dashboard/CloudSubscriptions/CloudSubscriptionStatusIcon\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { UserCanAccessCloudInstance } from \"areas/cloudSubscriptions/components/UserCanAccessCloudInstance\";\nimport { IconAndText } from \"areas/cloudSubscriptions/detail/components/overview/IconAndText\";\n\nexport function CloudSubscriptionStatusCard(cloudSubscription: CloudSubscriptionDto) {\n const hostname = cloudSubscription && getHostname(cloudSubscription.dnsPrefix);\n const isCancelled = cloudSubscription.cloudSubscriptionStatus == \"Cancelled\";\n let status = \"\";\n switch (cloudSubscription.cloudSubscriptionStatus) {\n case CloudSubscriptionStatus.Subscribed:\n status = isTrialLicensingChannel(cloudSubscription.licensingChannel)\n ? \"Active\"\n : cloudSubscription.cloudSubscriptionStatus;\n break;\n default:\n status = cloudSubscription.cloudSubscriptionStatus || \"\";\n break;\n }\n\n return (\n \n Status\n \n }\n primary={status}\n secondary={\n isCancelled ? undefined : (\n  }>\n \n View Instance\n \n \n )\n }\n />\n \n \n );\n}\n","import React, { useState } from \"react\";\nimport OpenInNewIcon from \"@mui/icons-material/OpenInNew\";\nimport { LoadingButton } from \"@mui/lab\";\nimport type { ButtonProps } from \"@mui/material\";\nimport { navigateToStripeCustomerPortal } from \"utils/navigationHelpers\";\nimport type { ProductType } from \"shared/ProductType\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport type { RbacPermission } from \"components/authorization/RbacPermissions\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\n\ntype StripeCustomerPortalLinkButtonProps = ButtonProps<\n \"button\",\n CloudSubscriptionLinkButtonProps | ServerLicenseLinkButtonProps\n>;\n\ntype BaseLinkButtonProps = {\n subscriptionGroupId?: string;\n label: string;\n buttonIcon?: React.ReactNode;\n newTab?: boolean;\n};\n\ntype CloudSubscriptionLinkButtonProps = BaseLinkButtonProps & {\n cloudSubscriptionId: string;\n};\n\ntype ServerLicenseLinkButtonProps = BaseLinkButtonProps & {\n serverLicenseId: string;\n};\n\ntype InitialDestructuredProps = Omit;\n\nfunction isServerLicenseLinkProps(\n props: InitialDestructuredProps\n): props is Omit, keyof BaseLinkButtonProps> {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return (props as ServerLicenseLinkButtonProps).serverLicenseId !== undefined;\n}\n\nfunction isCloudSubscriptionLinkProps(\n props: InitialDestructuredProps\n): props is Omit, keyof BaseLinkButtonProps> {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n return (props as CloudSubscriptionLinkButtonProps).cloudSubscriptionId !== undefined;\n}\n\nexport function StripeCustomerPortalLinkButton(props: StripeCustomerPortalLinkButtonProps) {\n const { subscriptionGroupId, label, buttonIcon, newTab, ...remainingProps } = props;\n\n let productId: string = \"\";\n let permission: RbacPermission = RbacPermissions.CloudSubscription.ManageBilling;\n let productType: ProductType = \"CloudSubscription\";\n let buttonProps: ButtonProps<\"button\"> = {};\n\n if (isServerLicenseLinkProps(remainingProps)) {\n const { serverLicenseId, ...rest } = remainingProps;\n buttonProps = rest;\n productId = serverLicenseId;\n permission = RbacPermissions.ServerLicense.ManageBilling;\n productType = \"ServerLicense\";\n } else if (isCloudSubscriptionLinkProps(remainingProps)) {\n const { cloudSubscriptionId, ...rest } = remainingProps;\n productId = cloudSubscriptionId;\n buttonProps = rest;\n }\n\n const [loadingPortal, setLoadingPortal] = useState(false);\n const navigateToStripePortal = async () => {\n try {\n setLoadingPortal(true);\n await navigateToStripeCustomerPortal(productType, productId, newTab || false);\n } finally {\n setLoadingPortal(false);\n }\n };\n\n const defaultButtonIcon = buttonIcon || newTab ? : null;\n\n return (\n \n \n {label}\n \n \n );\n}\n","import React from \"react\";\nimport PaymentsIcon from \"@mui/icons-material/Payments\";\nimport { Box, Card, Typography } from \"@mui/material\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { StripeCustomerPortalLinkButton } from \"components/StripeCustomerPortalLink/StripeCustomerPortalLinkButton\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { IconAndErrorText, IconAndText } from \"areas/cloudSubscriptions/detail/components/overview/IconAndText\";\n\nexport type RenewalCardProps = {\n cloudSubscriptionId: string;\n subscriptionGroupId?: string;\n isPastDue?: boolean;\n};\n\nexport function RenewalCard(props: RenewalCardProps) {\n const { cloudSubscriptionId, subscriptionGroupId, isPastDue } = props;\n const { showDialog } = useContactSalesDialog();\n\n const iconAndText = isPastDue ? (\n }\n primary={\"Payment overdue\"}\n secondary={\n \n }\n />\n ) : (\n }\n primary={\"\"}\n secondary={ showDialog({ reason: \"other\" })}>Manage subscription}\n />\n );\n\n return (\n \n Renewal\n \n {iconAndText}\n \n \n );\n}\n","import * as React from \"react\";\nimport LinearProgress, { linearProgressClasses } from \"@mui/material/LinearProgress\";\nimport { styled } from \"@mui/material/styles\";\nimport { designSystemColors } from \"@cpt/shared\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { dangerPercentage, warningPercentage } from \"./fileUsageThresholds\";\n\nconst BorderLinearProgress = styled(LinearProgress)(({ theme, value }) => ({\n height: 10,\n borderRadius: 5,\n width: 200,\n [`&.${linearProgressClasses.colorPrimary}`]: {\n backgroundColor: getTrackColor(value ?? 0),\n },\n [`& .${linearProgressClasses.bar}`]: {\n borderRadius: 5,\n backgroundColor: getBarColor(value ?? 0),\n },\n}));\n\nexport default function FileUsageBar({ percentageUsed }: { percentageUsed: number }) {\n return ;\n}\n\nfunction getTrackColor(percentageUsed: number) {\n if (percentageUsed >= dangerPercentage) {\n return themeTokens.color.chip.filled.background.danger;\n }\n if (percentageUsed >= warningPercentage) {\n return designSystemColors.orange[\"200\"];\n }\n return themeTokens.color.chip.filled.background.info;\n}\n\nfunction getBarColor(percentageUsed: number) {\n if (percentageUsed >= dangerPercentage) {\n return themeTokens.color.callout.border.danger;\n }\n if (percentageUsed >= warningPercentage) {\n return designSystemColors.orange[\"400\"];\n }\n return themeTokens.color.callout.border.info;\n}\n","import type { ReactNode } from \"react\";\nimport React from \"react\";\nimport WarningIcon from \"@mui/icons-material/Warning\";\nimport { Chip } from \"@mui/material\";\nimport { designSystemColors } from \"@cpt/shared\";\nimport { themeTokens } from \"components/Theme/theme\";\n\ntype WarningChipProps = {\n label?: ReactNode;\n type: \"warning\" | \"error\";\n role: string;\n};\n\nexport function WarningChip(props: WarningChipProps) {\n const { label, type, role } = props;\n\n return (\n \n \n {label}\n \n \n \n }\n role={role}\n />\n );\n}\n","import React from \"react\";\nimport { WarningChip } from \"components/WarningChip/WarningChip\";\nimport type { AlertLevel } from \"./getAlertLevel\";\n\ntype FileUsageWarningChipProps = {\n alertLevel: AlertLevel;\n};\n\nexport function FileUsageWarningChip({ alertLevel }: FileUsageWarningChipProps) {\n if (alertLevel === \"none\") return null;\n const label = alertLevel === \"warning\" ? \"Near limit\" : \"Action required\";\n\n return (\n \n );\n}\n","import React from \"react\";\nimport { SvgIcon } from \"@mui/material\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nexport function InfoIcon() {\n return (\n \n \n \n );\n}\n","import React from \"react\";\nimport { Card, styled, Typography } from \"@mui/material\";\nimport PopoverHelp from \"components/PopoverHelp/PopoverHelp\";\nimport FileUsageBar from \"./FileUsageBar\";\nimport { FileUsageWarningChip } from \"./FileUsageWarningChip\";\nimport { FileUsageWarningContent } from \"./FileUsageWarningContent\";\nimport { InfoIcon } from \"./InfoIcon\";\nimport { ResourceUsageCopy } from \"./ResourceUsageCopy\";\nimport { getAlertLevel } from \"./getAlertLevel\";\n\ntype ResourceUsageCardProps = {\n limitInGb?: number;\n usageInGb?: number;\n};\n\nexport function ResourceUsageCard({ usageInGb, limitInGb }: ResourceUsageCardProps) {\n if (limitInGb === undefined || usageInGb === undefined) return null;\n const percentageUsed = (usageInGb / limitInGb) * 100;\n const alertLevel = getAlertLevel(usageInGb, limitInGb);\n\n return (\n \n \n Resource Usage\n : }\n >\n \n \n \n\n \n \n \n \n \n );\n}\n\nconst Heading = styled(\"div\")({\n width: \"100%\",\n display: \"flex\",\n flexWrap: \"wrap\",\n alignItems: \"flex-end\",\n});\n","import React, { useState } from \"react\";\nimport { Grid, Stack } from \"@mui/material\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport { usePolling } from \"hooks/usePolling\";\nimport { IsStripeSubscriptionLicensingChannel } from \"utils/CloudSubscriptionLicensingChannelTypeHelpers\";\nimport {\n checkCloudSubscriptionFulfilled,\n getCloudSubscriptionById,\n type CloudSubscriptionDto,\n} from \"client/api/CloudSubscriptionApi\";\nimport { DetailOverviewBanner } from \"components/DetailOverviewBanner/DetailOverviewBanner\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\nimport { CloudSubscriptionHeader } from \"areas/cloudSubscriptions/components/CloudSubscriptionHeader\";\nimport { PlanCardByLicensingChannel } from \"areas/cloudSubscriptions/detail/components/overview/CloudSubscriptionPlanCard\";\nimport { CloudSubscriptionStatusCard } from \"areas/cloudSubscriptions/detail/components/overview/CloudSubscriptionStatusCard\";\nimport { RenewalCard } from \"areas/cloudSubscriptions/detail/components/overview/RenewalCard\";\nimport { ResourceUsageCard } from \"./components/overview/ResourceUsageCard\";\n\nexport function CloudSubscriptionOverview() {\n const { entity: cloudSubscription, update } = useEntity();\n const { hasPermissionForAsset } = useUserContext();\n const [loading, setLoading] = useState(!cloudSubscription?.isFulfilled);\n\n const checkProvisioned = async () => {\n if (cloudSubscription?.id && !cloudSubscription?.isFulfilled) {\n const check = await checkCloudSubscriptionFulfilled(cloudSubscription?.id);\n if (check) {\n const updatedLicense = await getCloudSubscriptionById(cloudSubscription?.id);\n setLoading(false);\n update(updatedLicense);\n }\n }\n };\n\n usePolling(checkProvisioned, loading);\n\n if (!cloudSubscription) return <>;\n\n const hasStripeSubscription = IsStripeSubscriptionLicensingChannel(cloudSubscription.licensingChannel);\n const canManageSubscriptionViaStripe =\n IsStripeSubscriptionLicensingChannel(cloudSubscription.licensingChannel) &&\n cloudSubscription.licensingChannel.status != \"canceled\";\n const isBillingUser = hasPermissionForAsset(\n RbacPermissions.CloudSubscription.ViewBilling,\n cloudSubscription.id,\n cloudSubscription.subscriptionGroup?.id\n );\n const isPastDue =\n IsStripeSubscriptionLicensingChannel(cloudSubscription.licensingChannel) &&\n cloudSubscription?.licensingChannel.status == \"past_due\";\n\n const showRenewalCard = isBillingUser && hasStripeSubscription && canManageSubscriptionViaStripe;\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \n {showRenewalCard && (\n \n \n \n )}\n \n \n \n \n \n \n );\n}\n","import axiosClient from \"client/axios-client\";\n\nconst BASE_URL = \"bff/productpricing\";\n\nexport type GetProductPricingResponse = {\n products: {\n name: string;\n prices: {\n projectQuantity: string;\n totalPrice: number;\n }[];\n }[];\n};\n\nexport const getProductPricing = async (): Promise => {\n const response = await axiosClient.get(BASE_URL);\n\n return response.data;\n};\n\nexport const CloudPricingCatalogProducts = {\n CloudStarter: \"CloudStarter\",\n CloudProfessional: \"CloudProfessional\",\n CloudEnterprise: \"CloudEnterprise\",\n} as const;\n\nexport const ServerPricingCatalogProducts = {\n ServerStarter: \"ServerStarter\",\n ServerProfessional: \"ServerProfessional\",\n ServerEnterprise: \"ServerEnterprise\",\n} as const;\n","import React from \"react\";\nimport { Button, Container, Grid, styled } from \"@mui/material\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport IconMachine from \"resources/images/svgs/icon_machine_boxed.svg\";\nimport IconSupport from \"resources/images/svgs/icon_support_boxed.svg\";\nimport IconTam from \"resources/images/svgs/icon_tam_boxed.svg\";\nimport IconTenant from \"resources/images/svgs/icon_tenant_boxed.svg\";\n\nconst SectionTitle = styled(\"h2\")(\n ({ theme }) => `\n margin: 0;\n margin-bottom: 1.8rem;\n text-align: center;\n font-size: 1.8rem;\n font-weight: ${theme.typography.fontWeightBold};\n`\n);\n\nconst AddOnCard = styled(\"div\")(\n ({ theme }) => `\n display: flex;\n flex-direction: column;\n height: 100%;\n background: ${theme.palette.background.paper};\n border-radius: 9px;\n `\n);\n\nconst AddOnCardHeader = styled(\"div\")(\n ({ theme }) => `\n display: flex;\n padding: 16px;\n border-bottom: 1px solid #E6E8EA;\n `\n);\n\nconst AddOnCardIconWrapper = styled(\"div\")(\n ({ theme }) => `\n width: 53px;\n `\n);\n\nconst AddOnCardTitle = styled(\"p\")(\n ({ theme }) => `\n margin: 0px;\n margin-left: 20px;\n margin-bottom: 5px;\n align-self: center;\n font-size: 1.25rem;\n font-family: ${theme.typography.fontFamily};\n font-weight: ${theme.typography.fontWeightBold};\n line-height: 1.3;\n `\n);\n\nconst AddOnCardDesc = styled(\"p\")(\n ({ theme }) => `\n margin-bottom: 0.5rem;\n font-family: ${theme.typography.fontFamily};\n font-weight: ${theme.typography.fontWeightRegular};\n line-height: 1.6;\n color: #586978;\n `\n);\n\nconst AddOnCardPrice = styled(\"p\")(\n ({ theme }) => `\n margin-bottom: 0;\n font-size: 1.25rem;\n font-family: ${theme.typography.fontFamily};\n font-weight: ${theme.typography.fontWeightBold};\n line-height: 1.6;\n `\n);\n\nconst AddOnCardPricePer = styled(\"span\")(\n ({ theme }) => `\n font-size: 1rem;\n `\n);\n\nconst AddOnCardContactSalesHeading = styled(\"p\")(\n ({ theme }) => `\n margin-top: calc(.75rem + .25rem);\n margin-bottom: 0;\n font-size: 1rem;\n font-family: ${theme.typography.fontFamily};\n font-weight: ${theme.typography.fontWeightBold};\n line-height: 1.6;\n `\n);\n\nconst AddOnCardBody = styled(\"div\")(\n ({ theme }) => `\n display: flex;\n flex-direction: column;\n justify-content: flex-start;\n flex-grow: 1;\n padding: 16px;\n padding-top: 0px;\n `\n);\n\nconst AddOnsCallToActionSection = styled(\"div\")(\n ({ theme }) => `\n display: flex;\n justify-content: center;\n margin-top: 14px;\n `\n);\n\nexport const AddOns = () => {\n const { showDialog } = useContactSalesDialog();\n return (\n \n Add-ons\n \n \n \n \n \n \n \n \n \n Tenants\n \n \n \n $72 per tenant / year\n \n \n Eliminate pipeline sprawl by modelling the physical locations you deploy to, like retail stores, or\n customer-specific cloud resources and configuration.\n \n \n \n \n \n \n \n \n \n \n Machines\n \n \n \n $72 per machine / year\n \n \n Deploy to Linux, Windows, and other application hosts easily with our bi-directional Tentacle\n deployment agent and SSH endpoints. Volume pricing available.\n \n \n \n \n \n \n \n \n \n \n Premium Support\n \n \n Contact Sales for details\n \n Premium Support is a quick response addition to your Octopus Enterprise license. We aim to resolve\n your high-priority issues in the fastest time possible.\n \n \n \n \n \n \n \n \n \n \n TAM Services\n \n \n Contact Sales for details\n \n Keep your Octopus instance and DevOps processes performing at their best with expert advice from our\n Technical Account Managers (TAMs).\n \n \n \n \n \n \n \n \n showDialog({ reason: \"modify-subscription\" })}\n >\n Contact Sales\n \n \n \n );\n};\n","var _rect, _rect2, _g, _path, _g2, _path2, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconTenantBoxed = function SvgIconTenantBoxed(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 53,\n height: 53,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.408,\n y: 0.408,\n width: 52.185,\n height: 52.185,\n rx: 7.746,\n fill: \"#F2F8FD\",\n stroke: \"#CDE4F7\",\n strokeWidth: 0.815\n })), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"icon_tenant_boxed_svg__a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 0,\n y: 0,\n width: 53,\n height: 53\n }, _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 53,\n height: 53,\n rx: 7.26,\n fill: \"#152B3D\"\n }))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#icon_tenant_boxed_svg__b)\",\n mask: \"url(#icon_tenant_boxed_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.288 53.023c0 2.76-7.801 2.691-17.425 2.691-9.623 0-17.425.07-17.425-2.69s7.802-3.844 17.425-3.844c9.623 0 17.425 1.084 17.425 3.843Z\",\n fill: \"#1FAEFF\",\n fillOpacity: 0.65\n }))), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"icon_tenant_boxed_svg__c\",\n style: {\n maskType: \"luminance\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 4,\n y: 4,\n width: 46,\n height: 46\n }, _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M4.344 4.125h45.312v45.313H4.344V4.124Z\",\n fill: \"#fff\"\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#icon_tenant_boxed_svg__c)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M41.672 28.916a.535.535 0 0 1-.267.464l-9.316 5.379a.536.536 0 0 1-.804-.464v-10.67c0-.192.102-.369.268-.464l9.316-5.38a.536.536 0 0 1 .803.465v10.67Z\",\n stroke: \"url(#icon_tenant_boxed_svg__d)\",\n strokeWidth: 1.11\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M31.358 34.295c0 .413-.447.67-.803.464l-4.39-2.535-4.927-2.844a.535.535 0 0 1-.267-.464v-10.67c0-.413.446-.67.803-.464l9.316 5.379a.536.536 0 0 1 .268.464v10.67Z\",\n stroke: \"url(#icon_tenant_boxed_svg__e)\",\n strokeOpacity: 0.6,\n strokeWidth: 1.11\n }), /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.83 16.865a.536.536 0 0 1 0 .927l-9.316 5.38a.535.535 0 0 1-.536 0l-9.24-5.336a.536.536 0 0 1 0-.928l9.316-5.379a.535.535 0 0 1 .535 0l9.241 5.336Z\",\n stroke: \"url(#icon_tenant_boxed_svg__f)\",\n strokeWidth: 1.11\n }), /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#icon_tenant_boxed_svg__g)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M27.398 22.972c-1.087-3.073-3.747-5.1-5.224-6.258-2.317-1.922-5.685-1.329-7.362 0-2.77 2.202-3.081 7.459-.764 12.99l2.92 6.99 1.839 4.73c.35.892 1.042 1.524 1.625 1.622.343.104.653.045.854-.235l1.256-1.772 3.503-4.306c2.317-2.847 3.289-8.293 1.354-13.76ZM16.554 24.44c0-2.228 1.567-3.12 3.496-2 1.735 1.01 3.172 3.296 3.444 5.368.026.215.039.423.039.632 0 2.227-1.567 3.12-3.495 2-1.736-1.01-3.172-3.296-3.444-5.368a5.091 5.091 0 0 1-.04-.632Z\",\n fill: \"url(#icon_tenant_boxed_svg__h)\"\n })))), _path2 || (_path2 = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M22.075 25.048c.433.749.82 1.897.9 2.946.084 1.107-.184 1.756-.614 2.005-.499.288-1.264.23-2.165-.25-.877-.468-1.668-1.234-2.078-1.942-.432-.75-.819-1.897-.899-2.947-.084-1.107.183-1.756.613-2.004.5-.289 1.264-.23 2.165.25.878.468 1.67 1.233 2.078 1.942Z\",\n stroke: \"#0C1A24\",\n strokeWidth: 1.563\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"icon_tenant_boxed_svg__d\",\n x1: 41.399,\n y1: 24.931,\n x2: 32.941,\n y2: 25.714,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#1FF2FF\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#0D80D8\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"icon_tenant_boxed_svg__e\",\n x1: 31.085,\n y1: 24.931,\n x2: 22.627,\n y2: 25.714,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#1FF2FF\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#0D80D8\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"icon_tenant_boxed_svg__f\",\n x1: 41.089,\n y1: 16.457,\n x2: 25.292,\n y2: 20.814,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#1FF2FF\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#0D80D8\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"icon_tenant_boxed_svg__h\",\n x1: 28.399,\n y1: 15.485,\n x2: 4.543,\n y2: 29.249,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#1FF2FF\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#0D80D8\"\n })), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"icon_tenant_boxed_svg__b\",\n x: -1.452,\n y: 38.289,\n width: 56.63,\n height: 28.315,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"BackgroundImageFix\",\n result: \"shape\"\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 5.445,\n result: \"effect1_foregroundBlur_2439_1350\"\n })), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"icon_tenant_boxed_svg__g\",\n x: 1.151,\n y: 4.135,\n width: 38.63,\n height: 50.309,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n \"in\": \"SourceAlpha\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", null), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 5.675\n }), /*#__PURE__*/React.createElement(\"feComposite\", {\n in2: \"hardAlpha\",\n operator: \"out\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0.121569 0 0 0 0 0.683765 0 0 0 0 1 0 0 0 0.6 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_2439_1350\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"effect1_dropShadow_2439_1350\",\n result: \"shape\"\n })))));\n};\nexport { SvgIconTenantBoxed as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iNTMiIHZpZXdCb3g9IjAgMCA1MyA1MyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC40MDc2OTIiIHk9IjAuNDA3NjkyIiB3aWR0aD0iNTIuMTg0NiIgaGVpZ2h0PSI1Mi4xODQ2IiByeD0iNy43NDYxNSIgZmlsbD0iI0YyRjhGRCIgc3Ryb2tlPSIjQ0RFNEY3IiBzdHJva2Utd2lkdGg9IjAuODE1Mzg1Ii8+CjxtYXNrIGlkPSJtYXNrMF8yNDM5XzEzNTAiIHN0eWxlPSJtYXNrLXR5cGU6YWxwaGEiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjAiIHk9IjAiIHdpZHRoPSI1MyIgaGVpZ2h0PSI1MyI+CjxyZWN0IHdpZHRoPSI1MyIgaGVpZ2h0PSI1MyIgcng9IjcuMjYwMjciIGZpbGw9IiMxNTJCM0QiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzI0MzlfMTM1MCkiPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9mXzI0MzlfMTM1MCkiPgo8cGF0aCBkPSJNNDQuMjg3OCA1My4wMjM1QzQ0LjI4NzggNTUuNzgzMSAzNi40ODY1IDU1LjcxNCAyNi44NjMxIDU1LjcxNEMxNy4yMzk4IDU1LjcxNCA5LjQzODQ4IDU1Ljc4MzEgOS40Mzg0OCA1My4wMjM1QzkuNDM4NDggNTAuMjYzOSAxNy4yMzk4IDQ5LjE3OTkgMjYuODYzMSA0OS4xNzk5QzM2LjQ4NjUgNDkuMTc5OSA0NC4yODc4IDUwLjI2MzkgNDQuMjg3OCA1My4wMjM1WiIgZmlsbD0iIzFGQUVGRiIgZmlsbC1vcGFjaXR5PSIwLjY1Ii8+CjwvZz4KPC9nPgo8bWFzayBpZD0ibWFzazFfMjQzOV8xMzUwIiBzdHlsZT0ibWFzay10eXBlOmx1bWluYW5jZSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iNCIgeT0iNCIgd2lkdGg9IjQ2IiBoZWlnaHQ9IjQ2Ij4KPHBhdGggZD0iTTQuMzQzNzUgNC4xMjVINDkuNjU2MlY0OS40Mzc1SDQuMzQzNzVWNC4xMjVaIiBmaWxsPSJ3aGl0ZSIvPgo8L21hc2s+CjxnIG1hc2s9InVybCgjbWFzazFfMjQzOV8xMzUwKSI+CjxwYXRoIGQ9Ik00MS42NzIzIDI4LjkxNjJDNDEuNjcyMyAyOS4xMDc2IDQxLjU3MDMgMjkuMjg0NCA0MS40MDQ1IDI5LjM4MDFMMzIuMDg4NSAzNC43NTlDMzEuNzMxNSAzNC45NjUxIDMxLjI4NTIgMzQuNzA3NSAzMS4yODUyIDM0LjI5NTJWMjMuNjI0NkMzMS4yODUyIDIzLjQzMzMgMzEuMzg3MyAyMy4yNTY0IDMxLjU1MyAyMy4xNjA3TDQwLjg2ODkgMTcuNzgxOEM0MS4yMjYgMTcuNTc1NiA0MS42NzIzIDE3LjgzMzQgNDEuNjcyMyAxOC4yNDU2VjI4LjkxNjJaIiBzdHJva2U9InVybCgjcGFpbnQwX2xpbmVhcl8yNDM5XzEzNTApIiBzdHJva2Utd2lkdGg9IjEuMTEwMTYiLz4KPHBhdGggZD0iTTMxLjM1NzkgMzQuMjk1MkMzMS4zNTc5IDM0LjcwNzUgMzAuOTExNSAzNC45NjUxIDMwLjU1NDUgMzQuNzU5TDI2LjE2NDIgMzIuMjI0MkwyMS4yMzg1IDI5LjM4MDFDMjEuMDcyNyAyOS4yODQ0IDIwLjk3MDcgMjkuMTA3NiAyMC45NzA3IDI4LjkxNjJWMjIuMjQ5OVYxOC4yNDU2QzIwLjk3MDcgMTcuODMzNCAyMS40MTcgMTcuNTc1NiAyMS43NzQxIDE3Ljc4MThMMzEuMDkwMSAyMy4xNjA3QzMxLjI1NTcgMjMuMjU2NCAzMS4zNTc5IDIzLjQzMzMgMzEuMzU3OSAyMy42MjQ2VjM0LjI5NTJaIiBzdHJva2U9InVybCgjcGFpbnQxX2xpbmVhcl8yNDM5XzEzNTApIiBzdHJva2Utb3BhY2l0eT0iMC42IiBzdHJva2Utd2lkdGg9IjEuMTEwMTYiLz4KPHBhdGggZD0iTTQwLjgzIDE2Ljg2NDZDNDEuMTg3IDE3LjA3MDggNDEuMTg3IDE3LjU4NjEgNDAuODMgMTcuNzkyM0wzMS41MTQgMjMuMTcxMkMzMS4zNDgzIDIzLjI2NjkgMzEuMTQ0MSAyMy4yNjY5IDMwLjk3ODQgMjMuMTcxMkwyMS43Mzc1IDE3LjgzNTdDMjEuMzgwNSAxNy42Mjk1IDIxLjM4MDUgMTcuMTE0MiAyMS43Mzc1IDE2LjkwOEwzMS4wNTM2IDExLjUyOTVDMzEuMjE5MyAxMS40MzM4IDMxLjQyMzQgMTEuNDMzOCAzMS41ODkxIDExLjUyOTVMNDAuODMgMTYuODY0NloiIHN0cm9rZT0idXJsKCNwYWludDJfbGluZWFyXzI0MzlfMTM1MCkiIHN0cm9rZS13aWR0aD0iMS4xMTAxNiIvPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMV9kXzI0MzlfMTM1MCkiPgo8cGF0aCBkPSJNMjcuMzk4MSAyMi45NzIyQzI2LjMxMDYgMTkuODk5MSAyMy42NTA4IDE3Ljg3MjcgMjIuMTc0NSAxNi43MTM2QzE5Ljg1NzIgMTQuNzkxNSAxNi40ODg3IDE1LjM4NTEgMTQuODEyMSAxNi43MTM2QzEyLjA0MTcgMTguOTE1OCAxMS43MzA5IDI0LjE3MyAxNC4wNDgxIDI5LjcwMzhMMTYuOTY4MSAzNi42OTM3TDE4LjgwNjkgNDEuNDIzNUMxOS4xNTY3IDQyLjMxNjEgMTkuODQ5IDQyLjk0NzggMjAuNDMxOCA0My4wNDU2QzIwLjc3NTIgNDMuMTQ5OSAyMS4wODUyIDQzLjA5MDkgMjEuMjg2NCA0Mi44MTA5TDIyLjU0MjQgNDEuMDM5MkwyNi4wNDUxIDM2LjczMjdDMjguMzYyNCAzMy44ODYyIDI5LjMzMzkgMjguNDM5NiAyNy4zOTkgMjIuOTcyMkgyNy4zOTgxWk0xNi41NTM5IDI0LjQzOTRDMTYuNTUzOSAyMi4yMTA5IDE4LjEyMDggMjEuMzE5MiAyMC4wNTAyIDIyLjQzOTNDMjEuNzg0OCAyMy40NDg5IDIzLjIyMjEgMjUuNzM1NCAyMy40OTQgMjcuODA3QzIzLjUyMDMgMjguMDIxOCAyMy41MzI5IDI4LjIzMDMgMjMuNTMyOSAyOC40Mzg3QzIzLjUzMjkgMzAuNjY2MyAyMS45NjYgMzEuNTU4OSAyMC4wMzc1IDMwLjQzODhDMTguMzAyMSAyOS40MjkyIDE2Ljg2NTcgMjcuMTQyOCAxNi41OTM4IDI1LjA3MTFDMTYuNTY3NSAyNC44NjI2IDE2LjU1NDggMjQuNjQ3OSAxNi41NTQ4IDI0LjQzOTRIMTYuNTUzOVoiIGZpbGw9InVybCgjcGFpbnQzX2xpbmVhcl8yNDM5XzEzNTApIi8+CjwvZz4KPC9nPgo8cGF0aCBkPSJNMjIuMDc1NCAyNS4wNDc3QzIyLjUwOCAyNS43OTcgMjIuODk0MyAyNi45NDQ1IDIyLjk3NDQgMjcuOTk0QzIzLjA1OSAyOS4xMDEzIDIyLjc5MTQgMjkuNzUwMiAyMi4zNjEyIDI5Ljk5ODZDMjEuODYyMSAzMC4yODY3IDIxLjA5NzIgMzAuMjI5IDIwLjE5NjIgMjkuNzQ4NEMxOS4zMTkzIDI5LjI4MDYgMTguNTI3NiAyOC41MTUzIDE4LjExODQgMjcuODA2NUMxNy42ODU4IDI3LjA1NzIgMTcuMjk5NSAyNS45MDk3IDE3LjIxOTMgMjQuODYwMkMxNy4xMzQ3IDIzLjc1MjkgMTcuNDAyMyAyMy4xMDQgMTcuODMyNSAyMi44NTU3QzE4LjMzMTYgMjIuNTY3NSAxOS4wOTY1IDIyLjYyNTMgMTkuOTk3NSAyMy4xMDU5QzIwLjg3NDUgMjMuNTczNiAyMS42NjYyIDI0LjMzOSAyMi4wNzU0IDI1LjA0NzdaIiBzdHJva2U9IiMwQzFBMjQiIHN0cm9rZS13aWR0aD0iMS41NjI1Ii8+CjxkZWZzPgo8ZmlsdGVyIGlkPSJmaWx0ZXIwX2ZfMjQzOV8xMzUwIiB4PSItMS40NTE5MyIgeT0iMzguMjg5NSIgd2lkdGg9IjU2LjYzMDQiIGhlaWdodD0iMjguMzE1IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIi8+CjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjUuNDQ1MjEiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8yNDM5XzEzNTAiLz4KPC9maWx0ZXI+CjxmaWx0ZXIgaWQ9ImZpbHRlcjFfZF8yNDM5XzEzNTAiIHg9IjEuMTUxMSIgeT0iNC4xMzQ3NCIgd2lkdGg9IjM4LjYzMDQiIGhlaWdodD0iNTAuMzA4OSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlQWxwaGEiIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIgcmVzdWx0PSJoYXJkQWxwaGEiLz4KPGZlT2Zmc2V0Lz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNS42NzQ5NCIvPgo8ZmVDb21wb3NpdGUgaW4yPSJoYXJkQWxwaGEiIG9wZXJhdG9yPSJvdXQiLz4KPGZlQ29sb3JNYXRyaXggdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMC4xMjE1NjkgMCAwIDAgMCAwLjY4Mzc2NSAwIDAgMCAwIDEgMCAwIDAgMC42IDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfMjQzOV8xMzUwIi8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iZWZmZWN0MV9kcm9wU2hhZG93XzI0MzlfMTM1MCIgcmVzdWx0PSJzaGFwZSIvPgo8L2ZpbHRlcj4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzI0MzlfMTM1MCIgeDE9IjQxLjM5OTQiIHkxPSIyNC45MzE1IiB4Mj0iMzIuOTQxMyIgeTI9IjI1LjcxMzYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzFGRjJGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwRDgwRDgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDFfbGluZWFyXzI0MzlfMTM1MCIgeDE9IjMxLjA4NDciIHkxPSIyNC45MzE1IiB4Mj0iMjIuNjI2NyIgeTI9IjI1LjcxMzYiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzFGRjJGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwRDgwRDgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDJfbGluZWFyXzI0MzlfMTM1MCIgeDE9IjQxLjA4ODYiIHkxPSIxNi40NTcyIiB4Mj0iMjUuMjkxNyIgeTI9IjIwLjgxNDQiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzFGRjJGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwRDgwRDgiLz4KPC9saW5lYXJHcmFkaWVudD4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDNfbGluZWFyXzI0MzlfMTM1MCIgeDE9IjI4LjM5ODYiIHkxPSIxNS40ODQ4IiB4Mj0iNC41NDMzOSIgeTI9IjI5LjI0ODkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzFGRjJGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwRDgwRDgiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K\";","var _rect, _rect2, _g, _g2, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconMachineBoxed = function SvgIconMachineBoxed(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 53,\n height: 53,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.408,\n y: 0.408,\n width: 52.185,\n height: 52.185,\n rx: 7.746,\n fill: \"#F2F8FD\",\n stroke: \"#CDE4F7\",\n strokeWidth: 0.815\n })), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"icon_machine_boxed_svg__a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 0,\n y: 0,\n width: 53,\n height: 53\n }, _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 53,\n height: 53,\n rx: 7.26,\n fill: \"#152B3D\"\n }))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#icon_machine_boxed_svg__b)\",\n mask: \"url(#icon_machine_boxed_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.288 55.023c0 2.76-7.801 2.691-17.425 2.691-9.623 0-17.425.07-17.425-2.69s7.802-3.844 17.425-3.844c9.623 0 17.425 1.084 17.425 3.843Z\",\n fill: \"#1FAEFF\",\n fillOpacity: 0.65\n }))), _g2 || (_g2 = /*#__PURE__*/React.createElement(\"g\", {\n clipPath: \"url(#icon_machine_boxed_svg__c)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#icon_machine_boxed_svg__d)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M43 29.125v5.25C43 35.825 41.843 37 40.417 37H14.583C13.157 37 12 35.825 12 34.375v-5.25c0-1.45 1.157-2.625 2.583-2.625h25.834c1.426 0 2.583 1.175 2.583 2.625Zm-2.583-4.375c.568 0 1.131.114 1.656.337l-5.195-7.918a2.598 2.598 0 0 0-.93-.858 2.551 2.551 0 0 0-1.22-.311H20.271c-.425 0-.844.107-1.219.31a2.598 2.598 0 0 0-.93.859l-5.195 7.918a4.224 4.224 0 0 1 1.656-.337h25.834ZM37.833 30c-.95 0-1.722.784-1.722 1.75 0 .967.771 1.75 1.722 1.75.952 0 1.723-.783 1.723-1.75 0-.966-.771-1.75-1.723-1.75Zm-5.166 0c-.952 0-1.723.784-1.723 1.75 0 .967.771 1.75 1.723 1.75.95 0 1.722-.783 1.722-1.75 0-.966-.771-1.75-1.722-1.75Z\",\n fill: \"url(#icon_machine_boxed_svg__e)\"\n })), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 33,\n cy: 32,\n r: 2,\n fill: \"#0C1A24\"\n }), /*#__PURE__*/React.createElement(\"circle\", {\n cx: 38,\n cy: 32,\n r: 2,\n fill: \"#0C1A24\"\n }))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"icon_machine_boxed_svg__b\",\n x: -1.452,\n y: 40.289,\n width: 56.63,\n height: 28.315,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"BackgroundImageFix\",\n result: \"shape\"\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 5.445,\n result: \"effect1_foregroundBlur_2439_1351\"\n })), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"icon_machine_boxed_svg__d\",\n x: 1,\n y: 9,\n width: 53,\n height: 43,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n \"in\": \"SourceAlpha\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 4\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 5.5\n }), /*#__PURE__*/React.createElement(\"feComposite\", {\n in2: \"hardAlpha\",\n operator: \"out\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0.121569 0 0 0 0 0.682353 0 0 0 0 1 0 0 0 0.45 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_2439_1351\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"effect1_dropShadow_2439_1351\",\n result: \"shape\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"icon_machine_boxed_svg__e\",\n x1: 42.935,\n y1: 16,\n x2: 23.471,\n y2: 44.731,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#1FF2FF\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#0D80D8\"\n })), /*#__PURE__*/React.createElement(\"clipPath\", {\n id: \"icon_machine_boxed_svg__c\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n fill: \"#fff\",\n transform: \"translate(2 1)\",\n d: \"M0 0h50v50H0z\"\n })))));\n};\nexport { SvgIconMachineBoxed as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iNTMiIHZpZXdCb3g9IjAgMCA1MyA1MyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC40MDc2OTIiIHk9IjAuNDA3NjkyIiB3aWR0aD0iNTIuMTg0NiIgaGVpZ2h0PSI1Mi4xODQ2IiByeD0iNy43NDYxNSIgZmlsbD0iI0YyRjhGRCIgc3Ryb2tlPSIjQ0RFNEY3IiBzdHJva2Utd2lkdGg9IjAuODE1Mzg1Ii8+CjxtYXNrIGlkPSJtYXNrMF8yNDM5XzEzNTEiIHN0eWxlPSJtYXNrLXR5cGU6YWxwaGEiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjAiIHk9IjAiIHdpZHRoPSI1MyIgaGVpZ2h0PSI1MyI+CjxyZWN0IHdpZHRoPSI1MyIgaGVpZ2h0PSI1MyIgcng9IjcuMjYwMjciIGZpbGw9IiMxNTJCM0QiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzI0MzlfMTM1MSkiPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9mXzI0MzlfMTM1MSkiPgo8cGF0aCBkPSJNNDQuMjg3OCA1NS4wMjM1QzQ0LjI4NzggNTcuNzgzMSAzNi40ODY1IDU3LjcxNCAyNi44NjMxIDU3LjcxNEMxNy4yMzk4IDU3LjcxNCA5LjQzODQ4IDU3Ljc4MzEgOS40Mzg0OCA1NS4wMjM1QzkuNDM4NDggNTIuMjYzOSAxNy4yMzk4IDUxLjE3OTkgMjYuODYzMSA1MS4xNzk5QzM2LjQ4NjUgNTEuMTc5OSA0NC4yODc4IDUyLjI2MzkgNDQuMjg3OCA1NS4wMjM1WiIgZmlsbD0iIzFGQUVGRiIgZmlsbC1vcGFjaXR5PSIwLjY1Ii8+CjwvZz4KPC9nPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfMjQzOV8xMzUxKSI+CjxnIGZpbHRlcj0idXJsKCNmaWx0ZXIxX2RfMjQzOV8xMzUxKSI+CjxwYXRoIGQ9Ik00MyAyOS4xMjVWMzQuMzc1QzQzIDM1LjgyNDggNDEuODQzNCAzNyA0MC40MTY3IDM3SDE0LjU4MzNDMTMuMTU2NiAzNyAxMiAzNS44MjQ4IDEyIDM0LjM3NVYyOS4xMjVDMTIgMjcuNjc1MiAxMy4xNTY2IDI2LjUgMTQuNTgzMyAyNi41SDQwLjQxNjdDNDEuODQzNCAyNi41IDQzIDI3LjY3NTIgNDMgMjkuMTI1Wk00MC40MTY3IDI0Ljc1QzQwLjk4NTQgMjQuNzQ5NSA0MS41NDg0IDI0Ljg2NDEgNDIuMDczMSAyNS4wODcxTDM2Ljg3OCAxNy4xNjg5QzM2LjY0MjEgMTYuODA5MyAzNi4zMjI1IDE2LjUxNDUgMzUuOTQ3NSAxNi4zMTA2QzM1LjU3MjUgMTYuMTA2NyAzNS4xNTM4IDE2IDM0LjcyODUgMTZIMjAuMjcxNUMxOS44NDYyIDE2IDE5LjQyNzUgMTYuMTA2NyAxOS4wNTI1IDE2LjMxMDZDMTguNjc3NSAxNi41MTQ1IDE4LjM1NzkgMTYuODA5MyAxOC4xMjIgMTcuMTY4OUwxMi45MjY5IDI1LjA4NzFDMTMuNDUxNiAyNC44NjQxIDE0LjAxNDYgMjQuNzQ5NSAxNC41ODMzIDI0Ljc1SDQwLjQxNjdaTTM3LjgzMzMgMzBDMzYuODgyMiAzMCAzNi4xMTExIDMwLjc4MzUgMzYuMTExMSAzMS43NUMzNi4xMTExIDMyLjcxNjUgMzYuODgyMiAzMy41IDM3LjgzMzMgMzMuNUMzOC43ODQ1IDMzLjUgMzkuNTU1NiAzMi43MTY1IDM5LjU1NTYgMzEuNzVDMzkuNTU1NiAzMC43ODM1IDM4Ljc4NDUgMzAgMzcuODMzMyAzMFpNMzIuNjY2NyAzMEMzMS43MTU1IDMwIDMwLjk0NDQgMzAuNzgzNSAzMC45NDQ0IDMxLjc1QzMwLjk0NDQgMzIuNzE2NSAzMS43MTU1IDMzLjUgMzIuNjY2NyAzMy41QzMzLjYxNzggMzMuNSAzNC4zODg5IDMyLjcxNjUgMzQuMzg4OSAzMS43NUMzNC4zODg5IDMwLjc4MzUgMzMuNjE3OCAzMCAzMi42NjY3IDMwWiIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzI0MzlfMTM1MSkiLz4KPC9nPgo8Y2lyY2xlIGN4PSIzMyIgY3k9IjMyIiByPSIyIiBmaWxsPSIjMEMxQTI0Ii8+CjxjaXJjbGUgY3g9IjM4IiBjeT0iMzIiIHI9IjIiIGZpbGw9IiMwQzFBMjQiLz4KPC9nPgo8ZGVmcz4KPGZpbHRlciBpZD0iZmlsdGVyMF9mXzI0MzlfMTM1MSIgeD0iLTEuNDUxOTMiIHk9IjQwLjI4OTUiIHdpZHRoPSI1Ni42MzA0IiBoZWlnaHQ9IjI4LjMxNSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI1LjQ0NTIxIiByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfMjQzOV8xMzUxIi8+CjwvZmlsdGVyPgo8ZmlsdGVyIGlkPSJmaWx0ZXIxX2RfMjQzOV8xMzUxIiB4PSIxIiB5PSI5IiB3aWR0aD0iNTMiIGhlaWdodD0iNDMiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj4KPGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz4KPGZlQ29sb3JNYXRyaXggaW49IlNvdXJjZUFscGhhIiB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiIHJlc3VsdD0iaGFyZEFscGhhIi8+CjxmZU9mZnNldCBkeT0iNCIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI1LjUiLz4KPGZlQ29tcG9zaXRlIGluMj0iaGFyZEFscGhhIiBvcGVyYXRvcj0ib3V0Ii8+CjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAuMTIxNTY5IDAgMCAwIDAgMC42ODIzNTMgMCAwIDAgMCAxIDAgMCAwIDAuNDUgMCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18yNDM5XzEzNTEiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QxX2Ryb3BTaGFkb3dfMjQzOV8xMzUxIiByZXN1bHQ9InNoYXBlIi8+CjwvZmlsdGVyPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMjQzOV8xMzUxIiB4MT0iNDIuOTM0OCIgeTE9IjE2LjAwMDEiIHgyPSIyMy40NzEiIHkyPSI0NC43MzA2IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMxRkYyRkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMEQ4MEQ4Ii8+CjwvbGluZWFyR3JhZGllbnQ+CjxjbGlwUGF0aCBpZD0iY2xpcDBfMjQzOV8xMzUxIj4KPHJlY3Qgd2lkdGg9IjUwIiBoZWlnaHQ9IjUwIiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMiAxKSIvPgo8L2NsaXBQYXRoPgo8L2RlZnM+Cjwvc3ZnPgo=\";","var _rect, _rect2, _g, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconSupportBoxed = function SvgIconSupportBoxed(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 53,\n height: 53,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.408,\n y: 0.408,\n width: 52.185,\n height: 52.185,\n rx: 7.746,\n fill: \"#F2F8FD\",\n stroke: \"#CDE4F7\",\n strokeWidth: 0.815\n })), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"icon_support_boxed_svg__a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 0,\n y: 0,\n width: 53,\n height: 53\n }, _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 53,\n height: 53,\n rx: 7.26,\n fill: \"#152B3D\"\n }))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#icon_support_boxed_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#icon_support_boxed_svg__b)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M33.318 22.413c0-4.955-5.219-8.968-11.66-8.968-6.44 0-11.658 4.013-11.658 8.968 0 1.922.79 3.694 2.13 5.157-.751 1.692-1.99 3.038-2.007 3.054a.446.446 0 0 0-.084.488c.073.168.23.27.41.27 2.05 0 3.75-.69 4.971-1.402 1.805.88 3.94 1.401 6.239 1.401 6.44 0 11.659-4.013 11.659-8.968Zm6.838 12.331c1.34-1.457 2.13-3.234 2.13-5.157 0-3.75-2.999-6.961-7.248-8.3.05.37.073.745.073 1.126 0 5.936-6.037 10.762-13.452 10.762-.606 0-1.194-.045-1.777-.107 1.765 3.223 5.913 5.488 10.745 5.488 2.298 0 4.434-.516 6.238-1.402 1.222.712 2.92 1.402 4.972 1.402a.45.45 0 0 0 .325-.757c-.016-.017-1.255-1.356-2.006-3.055Z\",\n fill: \"url(#icon_support_boxed_svg__c)\"\n })), /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#icon_support_boxed_svg__d)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.288 55.023c0 2.76-7.801 2.691-17.425 2.691-9.623 0-17.425.07-17.425-2.69s7.802-3.844 17.425-3.844c9.623 0 17.425 1.084 17.425 3.843Z\",\n fill: \"#1FAEFF\",\n fillOpacity: 0.65\n })))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"icon_support_boxed_svg__b\",\n x: 0.213,\n y: 7.216,\n width: 51.861,\n height: 44.686,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n \"in\": \"SourceAlpha\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 3.559\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 4.894\n }), /*#__PURE__*/React.createElement(\"feComposite\", {\n in2: \"hardAlpha\",\n operator: \"out\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0.121569 0 0 0 0 0.682353 0 0 0 0 1 0 0 0 0.45 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_2439_1352\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"effect1_dropShadow_2439_1352\",\n result: \"shape\"\n })), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"icon_support_boxed_svg__d\",\n x: -1.452,\n y: 40.289,\n width: 56.63,\n height: 28.315,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"BackgroundImageFix\",\n result: \"shape\"\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 5.445,\n result: \"effect1_foregroundBlur_2439_1352\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"icon_support_boxed_svg__c\",\n x1: 42.218,\n y1: 13.445,\n x2: 17.927,\n y2: 44.673,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#1FF2FF\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#0D80D8\"\n })))));\n};\nexport { SvgIconSupportBoxed as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iNTMiIHZpZXdCb3g9IjAgMCA1MyA1MyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC40MDc2OTIiIHk9IjAuNDA3NjkyIiB3aWR0aD0iNTIuMTg0NiIgaGVpZ2h0PSI1Mi4xODQ2IiByeD0iNy43NDYxNSIgZmlsbD0iI0YyRjhGRCIgc3Ryb2tlPSIjQ0RFNEY3IiBzdHJva2Utd2lkdGg9IjAuODE1Mzg1Ii8+CjxtYXNrIGlkPSJtYXNrMF8yNDM5XzEzNTIiIHN0eWxlPSJtYXNrLXR5cGU6YWxwaGEiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjAiIHk9IjAiIHdpZHRoPSI1MyIgaGVpZ2h0PSI1MyI+CjxyZWN0IHdpZHRoPSI1MyIgaGVpZ2h0PSI1MyIgcng9IjcuMjYwMjciIGZpbGw9IiMxNTJCM0QiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzI0MzlfMTM1MikiPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kXzI0MzlfMTM1MikiPgo8cGF0aCBkPSJNMzMuMzE3NSAyMi40MTI4QzMzLjMxNzUgMTcuNDU3OSAyOC4wOTkxIDEzLjQ0NDYgMjEuNjU4NyAxMy40NDQ2QzE1LjIxODQgMTMuNDQ0NiAxMCAxNy40NTc5IDEwIDIyLjQxMjhDMTAgMjQuMzM1NCAxMC43OTAzIDI2LjEwNjYgMTIuMTMgMjcuNTY5NkMxMS4zNzg5IDI5LjI2MjMgMTAuMTQwMSAzMC42MDc2IDEwLjEyMzMgMzAuNjI0NEMxMCAzMC43NTMzIDkuOTY2MzcgMzAuOTQzOSAxMC4wMzkyIDMxLjExMkMxMC4xMTIxIDMxLjI4MDIgMTAuMjY5IDMxLjM4MTEgMTAuNDQ4NCAzMS4zODExQzEyLjQ5OTkgMzEuMzgxMSAxNC4xOTgzIDMwLjY5MTcgMTUuNDIwMiAyOS45Nzk4QzE3LjIyNTEgMzAuODU5OCAxOS4zNjA2IDMxLjM4MTEgMjEuNjU4NyAzMS4zODExQzI4LjA5OTEgMzEuMzgxMSAzMy4zMTc1IDI3LjM2NzggMzMuMzE3NSAyMi40MTI4Wk00MC4xNTU4IDM0Ljc0NDJDNDEuNDk1NCAzMy4yODY4IDQyLjI4NTcgMzEuNTEgNDIuMjg1NyAyOS41ODc0QzQyLjI4NTcgMjUuODM3NiAzOS4yODcgMjIuNjI1OCAzNS4wMzgyIDIxLjI4NjJDMzUuMDg4NyAyMS42NTYxIDM1LjExMTEgMjIuMDMxNyAzNS4xMTExIDIyLjQxMjhDMzUuMTExMSAyOC4zNDg3IDI5LjA3NDQgMzMuMTc0NyAyMS42NTg3IDMzLjE3NDdDMjEuMDUzNCAzMy4xNzQ3IDIwLjQ2NDggMzMuMTI5OSAxOS44ODE5IDMzLjA2ODJDMjEuNjQ3NSAzNi4yOTEyIDI1Ljc5NTMgMzguNTU1NyAzMC42MjcgMzguNTU1N0MzMi45MjUxIDM4LjU1NTcgMzUuMDYwNyAzOC4wNCAzNi44NjU1IDM3LjE1NDRDMzguMDg3NSAzNy44NjYzIDM5Ljc4NTggMzguNTU1NyA0MS44MzczIDM4LjU1NTdDNDIuMDE2NyAzOC41NTU3IDQyLjE3OTIgMzguNDQ5MiA0Mi4yNDY1IDM4LjI4NjZDNDIuMzE5MyAzOC4xMjQxIDQyLjI4NTcgMzcuOTMzNSA0Mi4xNjI0IDM3Ljc5OUM0Mi4xNDU2IDM3Ljc4MjIgNDAuOTA2OCAzNi40NDI1IDQwLjE1NTggMzQuNzQ0MloiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yNDM5XzEzNTIpIi8+CjwvZz4KPGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjFfZl8yNDM5XzEzNTIpIj4KPHBhdGggZD0iTTQ0LjI4NzggNTUuMDIzNUM0NC4yODc4IDU3Ljc4MzEgMzYuNDg2NSA1Ny43MTQgMjYuODYzMSA1Ny43MTRDMTcuMjM5OCA1Ny43MTQgOS40Mzg0OCA1Ny43ODMxIDkuNDM4NDggNTUuMDIzNUM5LjQzODQ4IDUyLjI2MzkgMTcuMjM5OCA1MS4xNzk5IDI2Ljg2MzEgNTEuMTc5OUMzNi40ODY1IDUxLjE3OTkgNDQuMjg3OCA1Mi4yNjM5IDQ0LjI4NzggNTUuMDIzNVoiIGZpbGw9IiMxRkFFRkYiIGZpbGwtb3BhY2l0eT0iMC42NSIvPgo8L2c+CjwvZz4KPGRlZnM+CjxmaWx0ZXIgaWQ9ImZpbHRlcjBfZF8yNDM5XzEzNTIiIHg9IjAuMjEyNTk5IiB5PSI3LjIxNjIzIiB3aWR0aD0iNTEuODYwOSIgaGVpZ2h0PSI0NC42ODU5IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+CjxmZUNvbG9yTWF0cml4IGluPSJTb3VyY2VBbHBoYSIgdHlwZT0ibWF0cml4IiB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIiByZXN1bHQ9ImhhcmRBbHBoYSIvPgo8ZmVPZmZzZXQgZHk9IjMuNTU5MDYiLz4KPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNC44OTM3Ii8+CjxmZUNvbXBvc2l0ZSBpbjI9ImhhcmRBbHBoYSIgb3BlcmF0b3I9Im91dCIvPgo8ZmVDb2xvck1hdHJpeCB0eXBlPSJtYXRyaXgiIHZhbHVlcz0iMCAwIDAgMCAwLjEyMTU2OSAwIDAgMCAwIDAuNjgyMzUzIDAgMCAwIDAgMSAwIDAgMCAwLjQ1IDAiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJlZmZlY3QxX2Ryb3BTaGFkb3dfMjQzOV8xMzUyIi8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iZWZmZWN0MV9kcm9wU2hhZG93XzI0MzlfMTM1MiIgcmVzdWx0PSJzaGFwZSIvPgo8L2ZpbHRlcj4KPGZpbHRlciBpZD0iZmlsdGVyMV9mXzI0MzlfMTM1MiIgeD0iLTEuNDUxOTMiIHk9IjQwLjI4OTUiIHdpZHRoPSI1Ni42MzA0IiBoZWlnaHQ9IjI4LjMxNSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPgo8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI1LjQ0NTIxIiByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfMjQzOV8xMzUyIi8+CjwvZmlsdGVyPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMjQzOV8xMzUyIiB4MT0iNDIuMjE3OCIgeTE9IjEzLjQ0NDciIHgyPSIxNy45Mjc0IiB5Mj0iNDQuNjczMyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBzdG9wLWNvbG9yPSIjMUZGMkZGIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzBEODBEOCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=\";","var _rect, _rect2, _g, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconTamBoxed = function SvgIconTamBoxed(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 53,\n height: 53,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.408,\n y: 0.408,\n width: 52.185,\n height: 52.185,\n rx: 7.746,\n fill: \"#F2F8FD\",\n stroke: \"#CDE4F7\",\n strokeWidth: 0.815\n })), /*#__PURE__*/React.createElement(\"mask\", {\n id: \"icon_tam_boxed_svg__a\",\n style: {\n maskType: \"alpha\"\n },\n maskUnits: \"userSpaceOnUse\",\n x: 0,\n y: 0,\n width: 53,\n height: 53\n }, _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n width: 53,\n height: 53,\n rx: 7.26,\n fill: \"#152B3D\"\n }))), _g || (_g = /*#__PURE__*/React.createElement(\"g\", {\n mask: \"url(#icon_tam_boxed_svg__a)\"\n }, /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#icon_tam_boxed_svg__b)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M40.904 27.95 38.621 18.8a4.443 4.443 0 0 0-2.165-2.81 4.44 4.44 0 0 0-3.534-.319l-.767.256a.805.805 0 0 0-.51 1.02l.255.764c.14.422.596.65 1.018.51l.664-.222c.547-.182 1.158-.18 1.67.087.517.27.884.733 1.025 1.3l1.936 7.745a13.932 13.932 0 0 0-4.088-.628c-1.75 0-3.725.354-5.782 1.346h-3.685c-2.057-.993-4.032-1.346-5.783-1.346-1.581 0-2.971.284-4.088.627l1.936-7.745c.14-.566.508-1.03 1.026-1.3.512-.266 1.122-.269 1.67-.086l.662.22a.805.805 0 0 0 1.019-.509l.255-.764a.805.805 0 0 0-.51-1.02l-.768-.255a4.438 4.438 0 0 0-3.534.319 4.444 4.444 0 0 0-2.165 2.81l-2.282 9.149a3.234 3.234 0 0 0-.096.78v3.537C12 35.432 14.597 38 17.8 38h1.869c3.035 0 5.557-2.312 5.784-5.305l.147-1.945h1.8l.148 1.945c.226 2.993 2.748 5.306 5.783 5.306H35.2c3.203 0 5.8-2.568 5.8-5.734V28.73c0-.263-.032-.525-.096-.78ZM22.24 32.452c-.1 1.304-1.229 2.326-2.571 2.326H17.8c-1.421 0-2.578-1.127-2.578-2.511v-1.89c.912-.327 2.186-.651 3.654-.651 1.202 0 2.38.218 3.521.65l-.157 2.076Zm15.538-.185c0 1.385-1.157 2.511-2.578 2.511h-1.869c-1.343 0-2.472-1.022-2.57-2.326l-.158-2.076a9.881 9.881 0 0 1 3.522-.65c1.466 0 2.74.324 3.652.65v1.891Z\",\n fill: \"url(#icon_tam_boxed_svg__c)\"\n })), /*#__PURE__*/React.createElement(\"g\", {\n filter: \"url(#icon_tam_boxed_svg__d)\"\n }, /*#__PURE__*/React.createElement(\"path\", {\n d: \"M44.288 55.023c0 2.76-7.801 2.691-17.425 2.691-9.623 0-17.425.07-17.425-2.69s7.802-3.844 17.425-3.844c9.623 0 17.425 1.084 17.425 3.843Z\",\n fill: \"#1FAEFF\",\n fillOpacity: 0.65\n })))), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"filter\", {\n id: \"icon_tam_boxed_svg__b\",\n x: -2,\n y: 5.445,\n width: 57,\n height: 50.556,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n \"in\": \"SourceAlpha\",\n values: \"0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0\",\n result: \"hardAlpha\"\n }), /*#__PURE__*/React.createElement(\"feOffset\", {\n dy: 4\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 7\n }), /*#__PURE__*/React.createElement(\"feComposite\", {\n in2: \"hardAlpha\",\n operator: \"out\"\n }), /*#__PURE__*/React.createElement(\"feColorMatrix\", {\n values: \"0 0 0 0 0.121569 0 0 0 0 0.682353 0 0 0 0 1 0 0 0 0.55 0\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n in2: \"BackgroundImageFix\",\n result: \"effect1_dropShadow_2439_1353\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"effect1_dropShadow_2439_1353\",\n result: \"shape\"\n })), /*#__PURE__*/React.createElement(\"filter\", {\n id: \"icon_tam_boxed_svg__d\",\n x: -1.452,\n y: 40.289,\n width: 56.63,\n height: 28.315,\n filterUnits: \"userSpaceOnUse\",\n colorInterpolationFilters: \"sRGB\"\n }, /*#__PURE__*/React.createElement(\"feFlood\", {\n floodOpacity: 0,\n result: \"BackgroundImageFix\"\n }), /*#__PURE__*/React.createElement(\"feBlend\", {\n \"in\": \"SourceGraphic\",\n in2: \"BackgroundImageFix\",\n result: \"shape\"\n }), /*#__PURE__*/React.createElement(\"feGaussianBlur\", {\n stdDeviation: 5.445,\n result: \"effect1_foregroundBlur_2439_1353\"\n })), /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"icon_tam_boxed_svg__c\",\n x1: 40.939,\n y1: 15.445,\n x2: 19.12,\n y2: 43.495,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#1FF2FF\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#0D80D8\"\n })))));\n};\nexport { SvgIconTamBoxed as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTMiIGhlaWdodD0iNTMiIHZpZXdCb3g9IjAgMCA1MyA1MyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3QgeD0iMC40MDc2OTIiIHk9IjAuNDA3NjkyIiB3aWR0aD0iNTIuMTg0NiIgaGVpZ2h0PSI1Mi4xODQ2IiByeD0iNy43NDYxNSIgZmlsbD0iI0YyRjhGRCIgc3Ryb2tlPSIjQ0RFNEY3IiBzdHJva2Utd2lkdGg9IjAuODE1Mzg1Ii8+CjxtYXNrIGlkPSJtYXNrMF8yNDM5XzEzNTMiIHN0eWxlPSJtYXNrLXR5cGU6YWxwaGEiIG1hc2tVbml0cz0idXNlclNwYWNlT25Vc2UiIHg9IjAiIHk9IjAiIHdpZHRoPSI1MyIgaGVpZ2h0PSI1MyI+CjxyZWN0IHdpZHRoPSI1MyIgaGVpZ2h0PSI1MyIgcng9IjcuMjYwMjciIGZpbGw9IiMxNTJCM0QiLz4KPC9tYXNrPgo8ZyBtYXNrPSJ1cmwoI21hc2swXzI0MzlfMTM1MykiPgo8ZyBmaWx0ZXI9InVybCgjZmlsdGVyMF9kXzI0MzlfMTM1MykiPgo8cGF0aCBkPSJNNDAuOTA0MyAyNy45NDk3TDM4LjYyMTEgMTguODAxMUMzOC4zMjM1IDE3LjYwNzkgMzcuNTM0MSAxNi41ODMzIDM2LjQ1NjIgMTUuOTkxMkMzNS4zNzY3IDE1LjQwMDYgMzQuMDkxNCAxNS4yODA4IDMyLjkyMjMgMTUuNjcyNUwzMi4xNTQ1IDE1LjkyODNDMzEuNzMyMSAxNi4wNjg4IDMxLjUwNCAxNi41MjU0IDMxLjY0NSAxNi45NDczTDMxLjg5OTcgMTcuNzExNkMzMi4wNDAyIDE4LjEzMzUgMzIuNDk2NCAxOC4zNjE2IDMyLjkxODMgMTguMjIxMUwzMy41ODE4IDE4LjAwMDFDMzQuMTI5MSAxNy44MTc4IDM0LjczOTggMTcuODIwMyAzNS4yNTE0IDE4LjA4NzJDMzUuNzY5NCAxOC4zNTc1IDM2LjEzNiAxOC44MjAyIDM2LjI3NjkgMTkuMzg3MUwzOC4yMTMzIDI3LjEzMTZDMzcuMDk2MSAyNi43ODg3IDM1LjcwNjUgMjYuNTA0MiAzNC4xMjUxIDI2LjUwNDJDMzIuMzc0NSAyNi41MDQyIDMwLjQwMDQgMjYuODU3NyAyOC4zNDI3IDI3Ljg1MDVIMjQuNjU4M0MyMi42MDA2IDI2Ljg1NjcgMjAuNjI2NSAyNi41MDM3IDE4Ljg3NTQgMjYuNTAzN0MxNy4yOTM1IDI2LjUwMzcgMTUuOTAzOSAyNi43ODgyIDE0Ljc4NjcgMjcuMTMxTDE2LjcyMzEgMTkuMzg2MUMxNi44NjM1IDE4LjgxOTcgMTcuMjMxMSAxOC4zNTY1IDE3Ljc0OTEgMTguMDg2N0MxOC4yNjA3IDE3LjgxOTggMTguODcwOSAxNy44MTczIDE5LjQxODIgMTcuOTk5NkwyMC4wODEyIDE4LjIyMDZDMjAuNTAzMSAxOC4zNjExIDIwLjk1OTMgMTguMTMzIDIxLjA5OTggMTcuNzExMUwyMS4zNTQ1IDE2Ljk0NjhDMjEuNDk1NSAxNi41MjQ5IDIxLjI2NzQgMTYuMDY4MyAyMC44NDUgMTUuOTI3OEwyMC4wNzcyIDE1LjY3MkMxOC45MDgxIDE1LjI4MDMgMTcuNjIyOCAxNS4zOTk2IDE2LjU0MzMgMTUuOTkwN0MxNS40NjU0IDE2LjU4MzMgMTQuNjc2IDE3LjYwNzQgMTQuMzc4NCAxOC44MDAxTDEyLjA5NTcgMjcuOTQ5N0MxMi4wMzIyIDI4LjIwNDggMTIuMDAwMSAyOC40NjY3IDEyIDI4LjcyOTZWMzIuMjY2NUMxMiAzNS40MzMzIDE0LjU5NjkgMzguMDAwNSAxNy44IDM4LjAwMDVIMTkuNjY4OUMyMi43MDM4IDM4LjAwMDUgMjUuMjI1NyAzNS42ODc2IDI1LjQ1MjggMzIuNjk1NEwyNS42MDAzIDMwLjc1MDVIMjcuNDAwMkwyNy41NDc3IDMyLjY5NTRDMjcuNzc0MyAzNS42ODc2IDMwLjI5NjIgMzguMDAwNSAzMy4zMzExIDM4LjAwMDVIMzUuMkMzOC40MDMxIDM4LjAwMDUgNDEgMzUuNDMzMyA0MSAzMi4yNjdWMjguNzMwMUM0MSAyOC40NjY4IDQwLjk2NzggMjguMjA1IDQwLjkwNDMgMjcuOTQ5N1pNMjIuMjM5NiAzMi40NTE3QzIyLjE0MDQgMzMuNzU2MiAyMS4wMTExIDM0Ljc3ODMgMTkuNjY4OSAzNC43NzgzSDE3LjhDMTYuMzc4NyAzNC43NzgzIDE1LjIyMjIgMzMuNjUxNSAxNS4yMjIyIDMyLjI2NjVWMzAuMzc2NEMxNi4xMzQ1IDMwLjA0OTcgMTcuNDA4MyAyOS43MjU5IDE4Ljg3NjQgMjkuNzI1OUMyMC4wNzc3IDI5LjcyNTkgMjEuMjU1OCAyOS45NDM5IDIyLjM5NzIgMzAuMzc2NEwyMi4yMzk2IDMyLjQ1MTdaTTM3Ljc3NzggMzIuMjY3QzM3Ljc3NzggMzMuNjUyIDM2LjYyMTMgMzQuNzc4MyAzNS4yIDM0Ljc3ODNIMzMuMzMxMUMzMS45ODg0IDM0Ljc3ODMgMzAuODU5MSAzMy43NTYyIDMwLjc2MDQgMzIuNDUxN0wzMC42MDI4IDMwLjM3NjRDMzEuNzQ0MiAyOS45NDM5IDMyLjkyMjggMjkuNzI1OSAzNC4xMjQ2IDI5LjcyNTlDMzUuNTkwNyAyOS43MjU5IDM2Ljg2NSAzMC4wNTAyIDM3Ljc3NzMgMzAuMzc2OVYzMi4yNjdIMzcuNzc3OFoiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl8yNDM5XzEzNTMpIi8+CjwvZz4KPGcgZmlsdGVyPSJ1cmwoI2ZpbHRlcjFfZl8yNDM5XzEzNTMpIj4KPHBhdGggZD0iTTQ0LjI4NzggNTUuMDIzNUM0NC4yODc4IDU3Ljc4MzEgMzYuNDg2NSA1Ny43MTQgMjYuODYzMSA1Ny43MTRDMTcuMjM5OCA1Ny43MTQgOS40Mzg0OCA1Ny43ODMxIDkuNDM4NDggNTUuMDIzNUM5LjQzODQ4IDUyLjI2MzkgMTcuMjM5OCA1MS4xNzk5IDI2Ljg2MzEgNTEuMTc5OUMzNi40ODY1IDUxLjE3OTkgNDQuMjg3OCA1Mi4yNjM5IDQ0LjI4NzggNTUuMDIzNVoiIGZpbGw9IiMxRkFFRkYiIGZpbGwtb3BhY2l0eT0iMC42NSIvPgo8L2c+CjwvZz4KPGRlZnM+CjxmaWx0ZXIgaWQ9ImZpbHRlcjBfZF8yNDM5XzEzNTMiIHg9Ii0yIiB5PSI1LjQ0NDU4IiB3aWR0aD0iNTciIGhlaWdodD0iNTAuNTU1OSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPgo8ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPgo8ZmVDb2xvck1hdHJpeCBpbj0iU291cmNlQWxwaGEiIHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIgcmVzdWx0PSJoYXJkQWxwaGEiLz4KPGZlT2Zmc2V0IGR5PSI0Ii8+CjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjciLz4KPGZlQ29tcG9zaXRlIGluMj0iaGFyZEFscGhhIiBvcGVyYXRvcj0ib3V0Ii8+CjxmZUNvbG9yTWF0cml4IHR5cGU9Im1hdHJpeCIgdmFsdWVzPSIwIDAgMCAwIDAuMTIxNTY5IDAgMCAwIDAgMC42ODIzNTMgMCAwIDAgMCAxIDAgMCAwIDAuNTUgMCIvPgo8ZmVCbGVuZCBtb2RlPSJub3JtYWwiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18yNDM5XzEzNTMiLz4KPGZlQmxlbmQgbW9kZT0ibm9ybWFsIiBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJlZmZlY3QxX2Ryb3BTaGFkb3dfMjQzOV8xMzUzIiByZXN1bHQ9InNoYXBlIi8+CjwvZmlsdGVyPgo8ZmlsdGVyIGlkPSJmaWx0ZXIxX2ZfMjQzOV8xMzUzIiB4PSItMS40NTE5MyIgeT0iNDAuMjg5NSIgd2lkdGg9IjU2LjYzMDQiIGhlaWdodD0iMjguMzE1IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+CjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+CjxmZUJsZW5kIG1vZGU9Im5vcm1hbCIgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIi8+CjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjUuNDQ1MjEiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8yNDM5XzEzNTMiLz4KPC9maWx0ZXI+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yNDM5XzEzNTMiIHgxPSI0MC45MzkiIHkxPSIxNS40NDQ3IiB4Mj0iMTkuMTIwMiIgeTI9IjQzLjQ5NTMiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzFGRjJGRiIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwRDgwRDgiLz4KPC9saW5lYXJHcmFkaWVudD4KPC9kZWZzPgo8L3N2Zz4K\";","import { styled } from \"@mui/material\";\n\nexport const FaqGroupHeading = styled(\"h2\")(\n ({ theme }) => `\n margin-top: 3rem;\n font-size: 1.375rem;\n font-weight: ${theme.typography.fontWeightBold};\n `\n);\n","import { styled } from \"@mui/material\";\n\nexport const FaqTitle = styled(\"h2\")(\n ({ theme }) => `\n margin: 0;\n margin-bottom: 1.8rem;\n text-align: center;\n font-size: 1.8rem;\n font-weight: ${theme.typography.fontWeightBold};\n line-height: 1.5;\n `\n);\n","import type { ReactNode } from \"react\";\nimport React from \"react\";\nimport { faChevronDown } from \"@fortawesome/free-solid-svg-icons\";\nimport { styled } from \"@mui/material\";\nimport { FontAwesomeSvgIcon } from \"@cpt/components\";\n\ntype FaqItemProps = {\n title: ReactNode;\n children: ReactNode;\n};\n\nconst StyledSummary = styled(\"summary\")(\n ({ theme }) => `\n display: flex;\n align-items: center;\n justify-content: space-between;\n list-style: none;\n cursor: pointer;\n color: #657079;\n font-size: 1rem;\n padding-left: 24px;\n padding-top: 12px;\n padding-bottom: 12px;\n line-height: 1.5;\n font-weight: ${theme.typography.fontWeightBold};\n`\n);\n\nconst Content = styled(\"div\")`\n padding-left: 24px;\n padding-right: 24px;\n margin-bottom: 1em;\n color: #657079;\n`;\n\nconst StyledArrowIcon = styled(\"div\")`\n display: flex;\n align-items: center;\n justify-content: center;\n margin-right: 18px;\n width: 35px;\n height: 35px;\n background: #fff;\n border-radius: 100%;\n border: 1px solid #a9bbcb;\n flex-shrink: 0;\n`;\n\nconst StyledDetails = styled(\"details\")`\n margin-bottom: 8px;\n border-radius: 10px;\n border: 1px solid #e9edf2;\n background: #f5f7fa;\n &[open] .faq-arrow {\n transform: rotate(180deg);\n }\n`;\n\nconst ArrowIcon = () => (\n \n \n \n);\n\nexport const FaqItem = ({ title, children }: FaqItemProps) => {\n return (\n \n \n {title}\n \n \n {children}\n \n );\n};\n","import { styled } from \"@mui/material\";\n\nexport const FaqBulletedList = styled(\"ul\")`\n list-style-type: disc;\n margin: 0;\n margin-left: 2rem;\n margin-bottom: 1rem;\n line-height: 1.5;\n`;\n","import React from \"react\";\nimport { Link, Typography } from \"@mui/material\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { FaqBulletedList } from \"./FaqBulletedList\";\nimport { FaqItem } from \"./FaqItem\";\n\nexport const FaqWhatIsAProject = () => {\n return (\n \n <>\n \n A project is a resource you configure in Octopus Deploy that primarily represents the deployment configuration\n for an application. An application is a piece of software that is independently deployable.\n \n \n Some examples of an application are (but not limited to):\n \n \n
  • A monolithic application with dozens of components.
  • \n
  • A back-end REST API with a database as the data store.
  • \n
  • A serverless function that monitors a queue.
  • \n
  • A back-end service that runs in a container on a Kubernetes or ECS cluster.
  • \n
  • A scheduling service that uses CRON jobs to schedule tasks for other applications.
  • \n
    \n \n A project is primarily a deployment configuration for an application. However, there are other use cases for\n projects. Some examples of projects that are not deployment configurations for an application are (but not\n limited to):\n \n \n
  • Runbook-only projects that store a shared set of runbooks for common day 2 maintenance tasks.
  • \n
  • \n Orchestrator/traffic cop projects used to orchestrate the deployments of other Octopus Deploy projects.\n
  • \n
    \n \n Octopus Deploy will count all active projects, regardless of whether they deploy an application, are used for\n runbook only, or are used to orchestrate the deployments of other Octopus Deploy projects.\n \n \n
    \n );\n};\n\nexport const FaqWhatIsATenant = () => {\n return (\n \n \n A tenant is a resource you configure in Octopus Deploy that is meant to represent the following:\n \n \n
  • One of your SaaS customers.
  • \n
  • \n A physical location includes a retail store, branch office, hospital, restaurant, factory, city, state,\n country, data center, or car wash.\n
  • \n
  • One of your customers' physical locations (you deploy software to your customers' restaurants).
  • \n
    \n \n Each tenant runs a dedicated copy of your application(s) with slightly different configurations. Octopus Deploy\n will count all tenants, regardless of what they represent (customer, physical location, etc.) and the\n environments they deploy to.\n \n
    \n );\n};\n\nexport const FaqWhatIsAMachine = () => {\n return (\n \n \n A machine is a Windows, Linux, or MacOS application host - or Deployment Target - registered with Octopus\n Deploy. See our{\" \"}\n \n FAQ\n {\" \"}\n for more details.\n \n \n );\n};\n","import React from \"react\";\nimport { faExclamationCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { Alert, Link, Typography } from \"@mui/material\";\nimport { FontAwesomeSvgIcon } from \"@cpt/components\";\n\nexport function PlansChangedInfoBanner() {\n return (\n }\n sx={{\n border: \"1px solid #D4DCE3\",\n background: \"#EEF5FC\",\n borderRadius: \"9px\",\n }}\n >\n \n The below plans have new entitlements for projects, tenants and machines. We recommend reading\n the{\" \"}\n \n FAQ section\n {\" \"}\n to ensure you understand the change.\n \n \n );\n}\n","import React, { useContext } from \"react\";\nimport { PopoverContext } from \"./PopoverHelp\";\n\nexport function PopoverCloseButton({ children }: { children: React.ReactNode }) {\n const { closePopover } = useContext(PopoverContext);\n const handleClick = () => {\n closePopover();\n };\n\n // eslint-disable-next-line @typescript-eslint/no-empty-object-type -- we actually do want to accept anything in this case\n function isValidEl(child: {} | null | undefined): child is React.ReactElement {\n return React.isValidElement(child);\n }\n\n const enhancedChildren = React.Children.map(children, (child) => {\n const el = isValidEl(child);\n if (el) {\n const existingClickHandler = child.props.onClick;\n return React.cloneElement(child, {\n onClick: () => {\n if (typeof existingClickHandler === \"function\") {\n existingClickHandler();\n }\n handleClick();\n },\n });\n }\n });\n\n return <>{enhancedChildren};\n}\n","import React from \"react\";\nimport { Chip, styled } from \"@mui/material\";\n\ntype PricingCardCurrentPlanChipProps = {\n isCurrentPlan: boolean;\n};\n\nconst PlanChip = styled(Chip)`\n position: absolute;\n top: 14px;\n right: 11px;\n`;\n\nexport function PricingCardCurrentPlanChip({ isCurrentPlan }: PricingCardCurrentPlanChipProps) {\n if (isCurrentPlan) {\n return ;\n }\n return null;\n}\n","import React from \"react\";\nimport { Box, Divider, Typography, styled } from \"@mui/material\";\n\nexport const FeatureListItemText = styled(Typography)(\n ({ theme }) => `\n font-size: 0.9375rem;\n line-height: 1.4;\n margin-top: 3px;\n margin-right: -8px;\n white-space: normal;\n flex-grow: 1;\n display: flex;\n font-family: ${theme.typography.body1.fontFamily};\n font-weight: ${theme.typography.fontWeightRegular};\n p {\n line-height: 1.4;\n }\n`\n);\n\nconst StyledMiddleDivider = styled(Divider)`\n border-color: #e6e8ea;\n margin-bottom: 5px;\n`;\nconst StyledFullWidthDivider = styled(Divider)`\n border-color: #e6e8ea;\n margin-bottom: 5px;\n`;\n\nconst MiddleLiDivider = () => {\n return (\n \n \n \n );\n};\n\nexport const FeatureListDivider = () => {\n return (\n \n \n \n );\n};\n\nexport const FeatureItemDivider = styled(MiddleLiDivider)(({ theme }) => ({\n marginLeft: \"1.3rem\",\n marginRight: \"1.3rem\",\n borderColor: \"#E6E8EA\",\n}));\n","import type { ReactNode } from \"react\";\nimport React from \"react\";\nimport { faCheckCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { ListItem, ListItemIcon } from \"@mui/material\";\nimport { FontAwesomeSvgIcon } from \"@cpt/components\";\n\ntype PricingCardFeatureListItemProps = { feature: ReactNode; icon?: ReactNode };\n\nexport function PricingCardFeatureListItem(props: PricingCardFeatureListItemProps) {\n const { feature, icon } = props;\n return (\n \n \n {icon ? icon : }\n \n {feature}\n \n );\n}\n","export const formatMoney = (\n number: number,\n options?: { removeCurrency?: boolean; includeTrailingZeros?: boolean }\n): string => {\n const formatter = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\",\n });\n\n const decPlaces = number % 1 !== 0 ? 2 : 0;\n let result = \"\";\n\n if (options?.removeCurrency) {\n result = formatter\n .formatToParts(number)\n .filter((item) => item.type !== \"currency\")\n .map(({ value }) => value)\n .join(\"\");\n } else {\n result = formatter.format(number);\n }\n\n return decPlaces == 2 ? result : options?.includeTrailingZeros ? result : result.slice(0, -3);\n};\n","import React from \"react\";\nimport type { ReactNode } from \"react\";\nimport { Box, Grid, Typography, styled } from \"@mui/material\";\nimport { formatMoney } from \"utils/formatters/MoneyFormatter\";\n\ntype PricingCardPriceProps = {\n price: number | undefined;\n currency: string | ReactNode;\n pricePerLabel: string | ReactNode;\n priceIsMinimum?: boolean;\n};\n\nconst VolumePricing = styled(Typography)`\n box-sizing: border-box;\n margin: 0;\n padding-top: 0.75rem;\n padding-bottom: 0.5rem;\n line-height: 1.2;\n`;\n\nconst placeholder = <> ;\n\nexport function PricingCardPrice(props: PricingCardPriceProps) {\n const { price, currency, pricePerLabel, priceIsMinimum } = props;\n\n if (typeof price === \"undefined\") {\n return (\n \n \n \n );\n }\n\n if (price < 0) {\n return (\n \n \n \n {placeholder}\n \n \n Contact sales for volume pricing\n \n \n \n );\n }\n\n return (\n \n {priceIsMinimum ? (\n \n from\n \n ) : (\n \n {placeholder}\n \n )}\n\n \n \n $\n \n \n {formatMoney(price, { removeCurrency: true })}\n \n \n  {currency} \n \n \n {pricePerLabel}\n \n \n \n );\n}\n","import React from \"react\";\nimport type { SelectChangeEvent } from \"@mui/material\";\nimport { MenuItem, Select, styled } from \"@mui/material\";\nimport { CloudPricingCatalogProducts, ServerPricingCatalogProducts } from \"client/api/ProductPricingApi\";\nimport type { CatalogProduct } from \"../../areas/cloudSubscriptions/detail/CloudSubscriptionUpgrade\";\nimport { PricingCardPrice } from \"./PricingCardPrice\";\n\nconst StyledSelect = styled(Select, {\n shouldForwardProp: (prop) => prop !== \"isStarter\",\n})<{ isStarter: boolean }>(({ theme, isStarter }) => {\n return `\n width: 100%;\n min-height: 56px;\n ${\n isStarter &&\n `\n font-size: 14px;\n .MuiSelect-select {\n padding-right: 0px !important;\n }\n svg {\n display: none;\n }\n `\n }\n `;\n});\n\nexport const PricingCardPriceSelector = ({\n catalog,\n selectedProjects,\n onChange,\n priceIsMinimum,\n}: {\n catalog: CatalogProduct;\n selectedProjects: string;\n onChange: (e: SelectChangeEvent) => void;\n priceIsMinimum?: boolean;\n}) => {\n const hasCatalog = !!(catalog && catalog.prices.length);\n const selectedPlan = catalog?.prices.find((item) => item.projectQuantity === selectedProjects);\n const price = selectedPlan?.totalPrice;\n\n const handleChangeProjects = (e: SelectChangeEvent) => {\n onChange(e);\n };\n\n const hasCatalogName = !!(catalog && catalog.name);\n const isStarter =\n hasCatalogName &&\n [\n CloudPricingCatalogProducts.CloudStarter.toLowerCase(),\n ServerPricingCatalogProducts.ServerStarter.toLowerCase(),\n ].includes(catalog.name.toLowerCase());\n\n return (\n <>\n \n \n {hasCatalog &&\n catalog.prices.map((item) => {\n const isStarter10 = isStarter && parseInt(item.projectQuantity, 10) === 10;\n if (isStarter10) {\n return (\n \n 10 Projects, 10 Tenants, 10 Machines\n \n );\n }\n return (\n \n {item.projectQuantity} Projects\n \n );\n })}\n \n \n );\n};\n","import React from \"react\";\nimport { Box, Grid, Typography } from \"@mui/material\";\n\ntype PricingCardTitleProps = {\n title: string;\n};\n\nexport function PricingCardTitle(props: PricingCardTitleProps) {\n const { title } = props;\n\n return (\n <>\n \n \n \n {title}\n \n \n \n \n );\n}\n","export const PurchasingRoutesMap = {\n payment: `/checkout`,\n};\n","import React from \"react\";\nimport { faTimes } from \"@fortawesome/free-solid-svg-icons\";\nimport {\n Button,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n IconButton,\n} from \"@mui/material\";\nimport { FontAwesomeSvgIcon } from \"@cpt/components\";\n\ntype ActionDialogProps = {\n title: string;\n description?: string;\n show: boolean;\n confirmText: string;\n confirmColor?: \"inherit\" | \"primary\" | \"secondary\" | \"success\" | \"error\" | \"info\" | \"warning\";\n cancelText?: string;\n onConfirm: () => Promise | void;\n onCancel: () => Promise | void;\n children?: JSX.Element;\n};\n\nexport function ActionDialog(props: ActionDialogProps) {\n const { title, description, show, onConfirm, onCancel, cancelText, confirmText, confirmColor, children } = props;\n\n const handleOnCancel = async () => {\n await onCancel();\n };\n\n const handleOnConfirm = async () => {\n await onConfirm();\n };\n\n return show ? (\n \n \n {title}\n {handleOnCancel ? (\n theme.palette.grey[500],\n }}\n >\n \n \n ) : null}\n \n \n {!!description && {description}}\n {children}\n \n \n handleOnCancel()}\n autoFocus\n sx={{ textTransform: \"none\" }}\n disableElevation\n >\n {cancelText || \"Cancel\"}\n \n handleOnConfirm()}\n sx={{ textTransform: \"none\" }}\n disableElevation\n >\n {confirmText}\n \n \n \n ) : null;\n}\n","import React, { useState } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { faExclamationCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { Alert, Typography } from \"@mui/material\";\nimport { RoutesMap } from \"RoutesMap\";\nimport axios from \"axios\";\nimport type { DateTime } from \"luxon\";\nimport { DateText, FontAwesomeSvgIcon } from \"@cpt/components\";\nimport { changeStripeProduct } from \"client/api/CloudSubscriptionApi\";\nimport type { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { ActionDialog } from \"components/ActionDialog/ActionDialog\";\nimport { StripeCustomerPortalLinkButton } from \"components/StripeCustomerPortalLink/StripeCustomerPortalLinkButton\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\n\ntype ConfirmStripeUpgradeDialogProps = {\n open: boolean;\n setOpen: (value: boolean) => Promise | void;\n productName: string;\n cloudSubscriptionId: string;\n targetPlan: UpgradePlan;\n varyByTarget: boolean;\n nextRenewalDate?: DateTime;\n};\n\nexport function ConfirmStripeUpgradeDialog(props: ConfirmStripeUpgradeDialogProps) {\n const { open, setOpen, productName, cloudSubscriptionId, targetPlan, varyByTarget, nextRenewalDate } = props;\n const navigate = useNavigate();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState();\n const [billingInformationError, setBillingInformationError] = useState(false);\n\n return (\n {\n setLoading(true);\n try {\n await changeStripeProduct(cloudSubscriptionId, targetPlan);\n\n navigate({\n pathname: RoutesMap.completingUpgrade,\n search: `cloudSubscriptionId=${cloudSubscriptionId}&priceCode=${targetPlan}`,\n });\n } catch (e) {\n if (axios.isAxiosError(e)) {\n if (e.response?.data === \"Stripe billing information is incomplete\") setBillingInformationError(true);\n else setError(e);\n } else {\n console.error(e);\n }\n\n setLoading(false);\n }\n }}\n onCancel={() => setOpen(false)}\n >\n <>\n {billingInformationError && }\n {!!error && }\n Your subscription will immediately be updated to Cloud {productName}.\n {!varyByTarget && nextRenewalDate && (\n \n You will be charged for your upgraded plan in your next invoice on{\" \"}\n \n \n )}\n {varyByTarget && nextRenewalDate && (\n \n Your next bill, charged , will be based on the number\n of deployment targets you use during this billing period.\n \n )}\n \n \n );\n}\n\nconst BillingInformationAlert = ({ cloudSubscriptionId }: { cloudSubscriptionId: string }) => (\n \n }\n >\n \n Missing billing information\n \n \n Please set up your billing details in Stripe and then return to this page to complete your upgrade.\n \n \n \n);\n","import React, { useState } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport { Button } from \"@mui/material\";\nimport type { DateTime } from \"luxon\";\nimport { DateText } from \"@cpt/components\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport {\n getUpgradePlanForPriceCode,\n IsStripeSubscriptionLicensingChannel,\n isTrialLicensingChannel,\n} from \"utils/CloudSubscriptionLicensingChannelTypeHelpers\";\nimport type { CloudSubscriptionDto, CloudLicensingChannel } from \"client/api/CloudSubscriptionApi\";\nimport { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { GreenButton } from \"components/Button/GreenButton\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport type { ContactSalesReason } from \"components/Dialogs/ContactSalesDialog/ContactSalesReasons\";\nimport { PurchasingRoutesMap } from \"areas/purchasing/PurchasingRoutesMap\";\nimport {\n CloudSubscriptionCancelPlanDialog,\n CloudSubscriptionCancelPlanDialogText,\n} from \"../CloudSubscriptionCancelPlanDialog\";\nimport { ConfirmStripeUpgradeDialog } from \"./ConfirmStripeUpgradeDialog\";\n\ninterface AllowedPlanChange {\n currentPlan: UpgradePlan;\n targetPlan: UpgradePlan;\n action: UpgradeActions;\n}\n\nconst getAllowedPlanChange = (currentPlan: UpgradePlan, targetPlan: UpgradePlan): AllowedPlanChange | undefined => {\n const allowedPlanChanges: AllowedPlanChange[] = [\n {\n currentPlan: UpgradePlan.Trial,\n targetPlan: UpgradePlan.Cloud_Annually_Starter,\n action: \"self-service-purchase\",\n },\n {\n currentPlan: UpgradePlan.Trial,\n targetPlan: UpgradePlan.Cloud_Annually_Professional,\n action: \"self-service-purchase\",\n },\n ];\n return allowedPlanChanges.find((x) => x.currentPlan === currentPlan && x.targetPlan === targetPlan);\n};\n\nexport function getUpgradeAction(targetPlan: UpgradePlan, licensingChannel: CloudLicensingChannel): UpgradeActions {\n let currentPlan: UpgradePlan | undefined = undefined;\n\n if (IsStripeSubscriptionLicensingChannel(licensingChannel)) {\n if (licensingChannel.status === \"canceled\") return \"contact-sales\";\n if (licensingChannel.priceCode == targetPlan) return \"no-change\";\n if (licensingChannel.priceCode) {\n currentPlan = getUpgradePlanForPriceCode(licensingChannel.priceCode.toLowerCase());\n }\n } else if (isTrialLicensingChannel(licensingChannel)) {\n currentPlan = UpgradePlan.Trial;\n }\n\n if (currentPlan) {\n const planChange = getAllowedPlanChange(currentPlan, targetPlan);\n if (planChange) {\n return planChange.action;\n }\n }\n\n return \"contact-sales\";\n}\n\nexport type UpgradeActions = \"self-service-purchase\" | \"self-service-upgrade\" | \"contact-sales\" | \"no-change\";\n\nexport type PricingCardActionProps = {\n cloudSubscriptionId: string;\n action: UpgradeActions;\n targetPlan: UpgradePlan;\n targetPlanName: string;\n projectQuantity: string;\n nextRenewalDate?: DateTime;\n};\n\nexport function PricingCardAction(props: PricingCardActionProps) {\n const { cloudSubscriptionId, action, targetPlan, targetPlanName, nextRenewalDate, projectQuantity } = props;\n\n const { showDialog: showContactSalesDialog } = useContactSalesDialog();\n const [showUpgradeDialog, setShowUpgradeDialog] = useState(false);\n const useZuoraProfessionalCheckout = useFeatureFlag(\"ZuoraProfessionalCheckout\");\n const useZuoraCheckout = useFeatureFlag(\"ZuoraCheckout\");\n const navigate = useNavigate();\n\n const subscribeButton = (\n \n navigate({\n pathname: PurchasingRoutesMap.payment,\n search: `subscriptionId=${cloudSubscriptionId}&subscriptionType=cloud&plan=${targetPlan}&projects=${projectQuantity}`,\n })\n }\n endIcon={}\n >\n Buy now\n \n );\n\n const upgradeButton = (\n <>\n setShowUpgradeDialog(true)}\n size=\"large\"\n disableElevation\n sx={{ textTransform: \"none\", width: \"100%\", marginTop: \"0.75rem\", backgroundColor: \"#00B065\" }}\n endIcon={}\n >\n Upgrade via Stripe\n \n \n \n );\n\n const contactSalesButton = (targetPlan: UpgradePlan) => {\n let reason: ContactSalesReason = \"modify-subscription\";\n switch (targetPlan) {\n case UpgradePlan.Cloud_Annually_Starter:\n reason = \"starter\";\n break;\n case UpgradePlan.Cloud_Annually_Professional:\n reason = \"professional\";\n break;\n case UpgradePlan.Cloud_Annually_Enterprise:\n reason = \"enterprise\";\n break;\n }\n return (\n <>\n showContactSalesDialog({ reason, projectQuantity })}\n size=\"large\"\n disableElevation\n sx={{\n textTransform: \"none\",\n width: \"100%\",\n marginTop: \"0.75rem\",\n backgroundColor: \"#EEFAF5\",\n color: \"#00874D\",\n border: \"1px solid #00874D\",\n }}\n >\n Talk to us\n \n \n );\n };\n\n const CancelButton = () => {\n const [showCancelDialog, setShowCancelDialog] = useState(false);\n const { entity: cloudSubscription } = useEntity();\n\n switch (cloudSubscription?.licensingChannel.channelType) {\n case \"StripeSubscriptionCloudSubscriptionLicensingChannelDto\":\n return (\n <>\n setShowCancelDialog(true)}\n >\n Cancel\n \n setShowCancelDialog(false)}\n cloudSubscription={cloudSubscription}\n >\n \n If you cancel now, you can use your subscription until{\" \"}\n . We'll then\n automatically deactivate the plan and put secure backups of your data into cold-storage. After 90 days,\n your data will be automatically deleted. If you want your data deleted sooner, email{\" \"}\n support@octopus.com after you've deactivated your instance, and\n we'll delete your data immediately.\n \n \n \n );\n case \"ImportedTrialCloudSubscriptionLicensingChannelDto\":\n return (\n <>\n setShowCancelDialog(true)}\n >\n Cancel\n \n setShowCancelDialog(false)}\n cloudSubscription={cloudSubscription}\n >\n \n \n \n );\n case \"TrialCloudSubscriptionLicensingChannelDto\":\n return (\n <>\n setShowCancelDialog(true)}\n >\n Cancel\n \n setShowCancelDialog(false)}\n cloudSubscription={cloudSubscription}\n >\n \n \n \n );\n\n default:\n return (\n showContactSalesDialog({ reason: \"modify-subscription\" })}\n >\n Cancel\n \n );\n }\n };\n\n let button = <>;\n switch (action) {\n case \"self-service-purchase\":\n if (useZuoraCheckout) {\n !useZuoraProfessionalCheckout && targetPlan === UpgradePlan.Cloud_Annually_Professional\n ? (button = contactSalesButton(targetPlan))\n : (button = subscribeButton);\n } else {\n button = contactSalesButton(targetPlan);\n }\n break;\n case \"self-service-upgrade\":\n // NOTE: stripe upgrades disabled and zuora isn't setup for it yet\n button = contactSalesButton(targetPlan);\n break;\n case \"contact-sales\":\n button = contactSalesButton(targetPlan);\n break;\n case \"no-change\":\n button = ;\n break;\n }\n\n return button;\n}\n","import type { ReactNode } from \"react\";\nimport React, { useState } from \"react\";\nimport { faCheckCircle as faCheckCircleRegular } from \"@fortawesome/free-regular-svg-icons\";\nimport type { SelectChangeEvent } from \"@mui/material\";\nimport { Box, Grid, Link, List, ListItem, Typography } from \"@mui/material\";\nimport type { DateTime } from \"luxon\";\nimport { FontAwesomeSvgIcon, InfoButton } from \"@cpt/components\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { IsStripeSubscriptionLicensingChannel } from \"utils/CloudSubscriptionLicensingChannelTypeHelpers\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { PopoverCloseButton } from \"components/PopoverHelp/PopoverCloseButton\";\nimport PopoverHelp from \"components/PopoverHelp/PopoverHelp\";\nimport { PricingCardCurrentPlanChip } from \"components/PricingCard/PricingCardCurrentPlanChip\";\nimport {\n FeatureItemDivider,\n FeatureListDivider,\n FeatureListItemText,\n} from \"components/PricingCard/PricingCardFeatureListElements\";\nimport { PricingCardFeatureListItem } from \"components/PricingCard/PricingCardFeatureListItem\";\nimport { PricingCardPriceSelector } from \"components/PricingCard/PricingCardPriceSelector\";\nimport { PricingCardTitle } from \"components/PricingCard/PricingCardTitle\";\nimport type { CatalogProduct } from \"areas/cloudSubscriptions/detail/CloudSubscriptionUpgrade\";\nimport { PlanTestId } from \"areas/cloudSubscriptions/detail/CloudSubscriptionUpgrade\";\nimport { PricingCardAction, getUpgradeAction } from \"./PricingCardAction\";\n\nconst PricingCardPriceCode = UpgradePlan.Cloud_Annually_Enterprise;\nconst PlanName = \"Enterprise\";\nconst planStyles = {\n borderRadius: \"10px\",\n background: \"#FFF\",\n boxShadow: \"0px 4px 20px 0px rgba(0, 0, 0, 0.08)\",\n};\nconst currentPlanStyles = { borderRadius: \"10px\", background: \"#FFF\", border: \"1px solid #D4DCE3\" };\n\nexport function EnterprisePricingCard({ catalog }: { catalog: CatalogProduct }) {\n const { entity: cloudSubscription } = useEntity();\n const { showDialog } = useContactSalesDialog();\n const [selectedProjects, setSelectedProjects] = useState(catalog?.prices[0]?.projectQuantity || \"\");\n const useZuoraProfessionalCheckout = useFeatureFlag(\"ZuoraProfessionalCheckout\");\n const useZuoraCheckout = useFeatureFlag(\"ZuoraCheckout\");\n\n if (!cloudSubscription) return <>;\n\n const upgradeAction = getUpgradeAction(PricingCardPriceCode, cloudSubscription.licensingChannel);\n const isCurrentPlan = upgradeAction === \"no-change\";\n\n let nextRenewalDate: DateTime | undefined = undefined;\n if (IsStripeSubscriptionLicensingChannel(cloudSubscription.licensingChannel)) {\n nextRenewalDate = cloudSubscription.licensingChannel?.nextRenewalDate;\n }\n\n const changedProductSelectionHandler = (e: SelectChangeEvent) => {\n if (typeof e.target.value === \"string\" || typeof e.target.value === \"number\") {\n setSelectedProjects(e.target.value.toString());\n }\n };\n\n const features: (ReactNode | ReactNode[])[][] = [\n [\n Best for over 100 projects,\n Unlimited users,\n \n \n Default of 20 concurrent tasks\n \n \n }\n >\n \n Max of 160 concurrent tasks for an{\" \"}\n \n additional fee\n \n .\n \n \n ,\n \n showDialog({ reason: \"enterprise\" })} fontSize={\"1em\"} fontWeight={400}>\n Contact Sales\n \n  for file storage\n ,\n \n showDialog({ reason: \"enterprise\" })} fontSize={\"1em\"} fontWeight={400}>\n Contact Sales\n \n  for database storage\n ,\n ],\n [\n Runbook automation,\n Environment progression,\n SSO and RBAC,\n ],\n [\n Tailored onboarding,\n 24/7 support,\n ],\n [\n \n \n Blueprints and Guardrails\n \n \n }\n >\n \n Coming soon -{\" \"}\n \n showDialog({ reason: \"enterprise\" })} fontSize={\"1em\"} fontWeight={400}>\n Contact Sales\n \n {\" \"}\n to learn more\n \n \n ,\n Insights & DORA metrics,\n SIEM audit log streaming,\n ITSM integration,\n \n \n Custom billing\n \n \n }\n >\n \n \n showDialog({ reason: \"enterprise\" })} fontSize={\"1em\"} fontWeight={400}>\n Contact us\n \n {\" \"}\n or buy through{\" \"}\n \n Azure Marketplace\n \n \n \n ,\n \n \n Customer Success Manager\n \n \n }\n >\n Enterprise licenses >$50k USD are assigned a CSM\n \n ,\n [\n \n Add-on: Premium support\n ,\n ,\n ],\n [\n \n Add-on: TAM services\n ,\n ,\n ],\n ],\n ];\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {useZuoraCheckout && useZuoraProfessionalCheckout && (\n \n \n Placeholder text\n \n \n )}\n \n \n \n {features.map((list, listIndex) => (\n \n \n {listIndex < features.length && }\n {listIndex === 0 && (\n <>\n \n \n All core features\n \n \n }\n />\n \n \n )}\n {list.map((item, index) => {\n let icon = undefined,\n feature = item;\n if (Array.isArray(item)) {\n feature = item[0];\n icon = item[1];\n }\n\n return (\n \n \n {index < list.length - 1 && }\n \n );\n })}\n \n \n ))}\n \n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport type { SelectChangeEvent } from \"@mui/material\";\nimport { Box, Grid, Link, List, ListItem, Typography } from \"@mui/material\";\nimport type { DateTime } from \"luxon\";\nimport { InfoButton } from \"@cpt/components\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { IsStripeSubscriptionLicensingChannel } from \"utils/CloudSubscriptionLicensingChannelTypeHelpers\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport PopoverHelp from \"components/PopoverHelp/PopoverHelp\";\nimport { PricingCardCurrentPlanChip } from \"components/PricingCard/PricingCardCurrentPlanChip\";\nimport {\n FeatureItemDivider,\n FeatureListDivider,\n FeatureListItemText,\n} from \"components/PricingCard/PricingCardFeatureListElements\";\nimport { PricingCardFeatureListItem } from \"components/PricingCard/PricingCardFeatureListItem\";\nimport { PricingCardPriceSelector } from \"components/PricingCard/PricingCardPriceSelector\";\nimport { PricingCardTitle } from \"components/PricingCard/PricingCardTitle\";\nimport type { CatalogProduct } from \"areas/cloudSubscriptions/detail/CloudSubscriptionUpgrade\";\nimport { PlanTestId } from \"areas/cloudSubscriptions/detail/CloudSubscriptionUpgrade\";\nimport { PricingCardAction, getUpgradeAction } from \"./PricingCardAction\";\n\nconst PricingCardPriceCode = UpgradePlan.Cloud_Annually_Professional;\nconst PlanName = \"Professional\";\nconst planStyles = {\n borderRadius: \"10px\",\n background: \"#FFF\",\n boxShadow: \"0px 4px 20px 0px rgba(0, 0, 0, 0.08)\",\n};\nconst currentPlanStyles = { borderRadius: \"10px\", background: \"#FFF\", border: \"1px solid #D4DCE3\" };\n\nexport function ProfessionalPricingCard({ catalog }: { catalog: CatalogProduct }) {\n const { entity: cloudSubscription } = useEntity();\n const [selectedProjects, setSelectedProjects] = useState(catalog?.prices[0]?.projectQuantity || \"\");\n const useZuoraProfessionalCheckout = useFeatureFlag(\"ZuoraProfessionalCheckout\");\n const useZuoraCheckout = useFeatureFlag(\"ZuoraCheckout\");\n const { showDialog: showContactSalesDialog } = useContactSalesDialog();\n\n if (!cloudSubscription) return <>;\n\n const upgradeAction = getUpgradeAction(PricingCardPriceCode, cloudSubscription.licensingChannel);\n const isCurrentPlan = upgradeAction === \"no-change\";\n\n const changedProductSelectionHandler = (e: SelectChangeEvent) => {\n if (typeof e.target.value === \"string\" || typeof e.target.value === \"number\") {\n setSelectedProjects(e.target.value.toString());\n }\n };\n\n let nextRenewalDate: DateTime | undefined = undefined;\n if (IsStripeSubscriptionLicensingChannel(cloudSubscription.licensingChannel)) {\n nextRenewalDate = cloudSubscription.licensingChannel?.nextRenewalDate;\n }\n\n const features = [\n [\n Best for under 100 projects,\n Unlimited users,\n \n \n Default of 5 concurrent tasks\n \n \n }\n >\n \n Max of 20 concurrent tasks for an{\" \"}\n \n additional fee\n \n .\n \n \n ,\n 1TB file storage,\n 100GB database storage,\n ],\n [\n Runbook automation,\n Environment progression,\n SSO and RBAC,\n ],\n [\n Onboarding with an expert guide,\n 8/5 support (9-5pm weekdays),\n ],\n ];\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {useZuoraCheckout && useZuoraProfessionalCheckout && (\n \n showContactSalesDialog({ reason: \"professional\", projectQuantity: selectedProjects })}\n >\n Or talk to us\n \n \n )}\n \n \n \n {features.map((list, listIndex) => (\n \n \n {listIndex < features.length && }\n {listIndex === 0 && (\n <>\n \n \n All core features\n \n \n }\n />\n \n \n )}\n {list.map((feature, index) => (\n \n \n {index < list.length - 1 && }\n \n ))}\n \n \n ))}\n \n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport type { SelectChangeEvent } from \"@mui/material\";\nimport { Box, Grid, List, ListItem, Typography, Link } from \"@mui/material\";\nimport type { DateTime } from \"luxon\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { IsStripeSubscriptionLicensingChannel } from \"utils/CloudSubscriptionLicensingChannelTypeHelpers\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { PricingCardCurrentPlanChip } from \"components/PricingCard/PricingCardCurrentPlanChip\";\nimport {\n FeatureItemDivider,\n FeatureListDivider,\n FeatureListItemText,\n} from \"components/PricingCard/PricingCardFeatureListElements\";\nimport { PricingCardFeatureListItem } from \"components/PricingCard/PricingCardFeatureListItem\";\nimport { PricingCardPriceSelector } from \"components/PricingCard/PricingCardPriceSelector\";\nimport { PricingCardTitle } from \"components/PricingCard/PricingCardTitle\";\nimport type { CatalogProduct } from \"areas/cloudSubscriptions/detail/CloudSubscriptionUpgrade\";\nimport { PlanTestId } from \"areas/cloudSubscriptions/detail/CloudSubscriptionUpgrade\";\nimport { PricingCardAction, getUpgradeAction } from \"./PricingCardAction\";\n\nconst PricingCardPriceCode = UpgradePlan.Cloud_Annually_Starter;\nconst PlanName = \"Starter\";\nconst planStyles = {\n borderRadius: \"10px\",\n background: \"#FFF\",\n boxShadow: \"0px 4px 20px 0px rgba(0, 0, 0, 0.08)\",\n};\nconst currentPlanStyles = { borderRadius: \"10px\", background: \"#FFF\", border: \"1px solid #D4DCE3\" };\n\nexport function StarterPricingCard({ catalog }: { catalog: CatalogProduct }) {\n const { entity: cloudSubscription } = useEntity();\n const [selectedProjects, setSelectedProjects] = useState(catalog?.prices[0]?.projectQuantity || \"\");\n const useZuoraProfessionalCheckout = useFeatureFlag(\"ZuoraProfessionalCheckout\");\n const useZuoraCheckout = useFeatureFlag(\"ZuoraCheckout\");\n\n if (!cloudSubscription) return <>;\n\n const upgradeAction = getUpgradeAction(PricingCardPriceCode, cloudSubscription.licensingChannel);\n const isCurrentPlan = upgradeAction === \"no-change\";\n\n const changedProductSelectionHandler = (e: SelectChangeEvent) => {\n if (typeof e.target.value === \"string\" || typeof e.target.value === \"number\") {\n setSelectedProjects(e.target.value.toString());\n }\n };\n\n let nextRenewalDate: DateTime | undefined = undefined;\n if (IsStripeSubscriptionLicensingChannel(cloudSubscription.licensingChannel)) {\n nextRenewalDate = cloudSubscription.licensingChannel?.nextRenewalDate;\n }\n\n const features = [\n [\n 10 projects, tenants, and machines,\n Unlimited users,\n Default of 5 concurrent tasks,\n 1TB file storage,\n 100GB database storage,\n ],\n [\n Runbook automation,\n Environment progression,\n SSO and RBAC,\n ],\n ];\n\n return (\n \n \n \n \n \n \n \n \n \n \n {useZuoraCheckout && useZuoraProfessionalCheckout && (\n \n \n Placeholder text\n \n \n )}\n \n \n \n \n {features.map((list, listIndex) => (\n \n \n {listIndex < features.length && }\n {listIndex === 0 && (\n <>\n \n \n All core features\n \n \n }\n />\n \n \n )}\n {list.map((feature, index) => (\n \n \n {index < list.length - 1 && }\n \n ))}\n \n \n ))}\n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Container, Grid, Typography, styled } from \"@mui/material\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { LoadablePage } from \"shared/LoadablePage\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { CloudLicensingChannelTypesKeys } from \"client/api/CloudSubscriptionApi\";\nimport type { GetProductPricingResponse } from \"client/api/ProductPricingApi\";\nimport { CloudPricingCatalogProducts, getProductPricing } from \"client/api/ProductPricingApi\";\nimport { AddOns } from \"components/AddOns/AddOns\";\nimport { FaqTitle, FaqGroupHeading, FaqItem } from \"components/Faq\";\nimport { FaqWhatIsAMachine, FaqWhatIsAProject, FaqWhatIsATenant } from \"components/Faq/Faqs\";\nimport { Link } from \"components/Link/Link\";\nimport { PlansChangedInfoBanner } from \"components/PlansChangedInfoBanner/PlansChangedInfoBanner\";\nimport IconCloud from \"resources/images/svgs/icon_cloud.svg\";\nimport { EnterprisePricingCard } from \"areas/cloudSubscriptions/detail/components/finance/upgrade/EnterprisePricingCard\";\nimport { ProfessionalPricingCard } from \"areas/cloudSubscriptions/detail/components/finance/upgrade/ProfessionalPricingCard\";\nimport { StarterPricingCard } from \"areas/cloudSubscriptions/detail/components/finance/upgrade/StarterPricingCard\";\n\nconst GradientBackground = styled(\"div\")`\n position: absolute;\n top: 0px;\n right: 0px;\n height: 300px;\n width: 100%;\n background: linear-gradient(185deg, #00ffa3 -70%, #f7f9fd 23%, #fffeff 100%);\n border-radius: 4px 4px 0px 0px;\n`;\n\nconst GradientBorder = styled(\"div\")`\n position: absolute;\n top: -1px;\n right: -1px;\n height: 4px;\n background: linear-gradient(90deg, #e6e8ea, #00ffa3);\n width: 100%;\n border-radius: 4px 4px 0px 0px;\n`;\n\nconst UpgradeContainer = styled(\"div\")`\n background: #fffeff;\n border-radius: 4px;\n border: 1px solid #e6e8ea;\n`;\n\nconst BackgroundContainer = styled(\"div\")`\n position: relative;\n overflow: visible;\n`;\n\nconst BodyContent = styled(\"div\")`\n position: relative;\n z-index: 2;\n`;\n\nconst WeHostText = styled(\"p\")`\n color: #5b6877;\n text-align: center;\n`;\n\nconst InstanceNameText = styled(\"span\")(\n ({ theme }) => `\n color: #68778D;\n`\n);\n\nconst PlanHeaderTitleHeading = styled(\"h1\")(\n ({ theme }) => `\n margin: 0;\n margin-bottom: 1rem;\n font-size: 1.5rem;\n font-weight: ${theme.typography.fontWeightBold};\n line-height: 1.5;\n text-align: center;\n`\n);\n\nconst PlanSectionHeader = styled(\"div\")(\n ({ theme }) => `\n display: flex;\n flex-direction: column;\n align-items: center;\n`\n);\n\nconst PlanIconWrapper = styled(\"div\")(\n ({ theme }) => `\n margin-top: 30px;\n margin-bottom: 12px;\n`\n);\n\nconst BannerWrapper = styled(\"div\")`\n padding: 6px 18px;\n`;\n\nexport type CatalogProduct = GetProductPricingResponse[\"products\"][0] | undefined;\nexport const PlanTestId = {\n Starter: \"starter-plan\",\n Professional: \"professional-plan\",\n Enterprise: \"enterprise-plan\",\n} as const;\nexport type PlanTestId = (typeof PlanTestId)[keyof typeof PlanTestId];\n\nconst PlanHeaderTitle = ({ cloudSubscription }: { cloudSubscription: CloudSubscriptionDto }) => {\n if (cloudSubscription?.licensingChannel.channelType === CloudLicensingChannelTypesKeys.Trial) {\n return (\n \n Purchase an Octopus Cloud subscription for {cloudSubscription.friendlyName}\n \n );\n }\n\n return (\n \n Change your Octopus Cloud subscription for {cloudSubscription.friendlyName}\n \n );\n};\n\nexport function CloudSubscriptionUpgrade() {\n const { entity: cloudSubscription } = useEntity();\n const { data: catalog, loading, error } = useAsyncRequest(getProductPricing);\n const starterCatalog = catalog?.products.find(\n (item) => item.name.toLowerCase() === CloudPricingCatalogProducts.CloudStarter.toLowerCase()\n );\n const professionalCatalog = catalog?.products.find(\n (item) => item.name.toLowerCase() === CloudPricingCatalogProducts.CloudProfessional.toLowerCase()\n );\n const enterpriseCatalog = catalog?.products.find(\n (item) => item.name.toLowerCase() === CloudPricingCatalogProducts.CloudEnterprise.toLowerCase()\n );\n const useZuoraCheckout = useFeatureFlag(\"ZuoraCheckout\");\n\n // ensure valid channel\n const validChannels: string[] = useZuoraCheckout\n ? [CloudLicensingChannelTypesKeys.Trial]\n : [CloudLicensingChannelTypesKeys.Stripe, CloudLicensingChannelTypesKeys.Trial];\n if (!cloudSubscription || !validChannels.includes(cloudSubscription.licensingChannel.channelType))\n return (\n \n Please email{\" \"}\n \n sales@octopus.com\n {\" \"}\n to make changes to your license\n \n );\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \"cloud\"\n \n We host, no technical setup required\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nconst FrequentlyAskedQuestions = () => {\n return (\n \n Frequently asked questions\n Marketplaces\n \n Yes! Please reach out to{\" \"}\n \n sales@octopus.com\n {\" \"}\n and we can walk you through the process.\n \n Feature questions\n \n \n \n \n );\n};\n","var _path, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconCloud = function SvgIconCloud(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 47,\n height: 33,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _path || (_path = /*#__PURE__*/React.createElement(\"path\", {\n d: \"M42.008 15.2c-1.187-.615-1.94-2.009-1.94-3.345a6.934 6.934 0 0 0-6.933-6.933c-2.208 0-4.768-.523-6.462-1.939A11.499 11.499 0 0 0 19.27.3C12.886.3 7.716 5.47 7.716 11.854c0 .349-.211.661-.532.795a10.405 10.405 0 0 0-6.4 9.604c0 5.741 4.657 10.4 10.398 10.4h26.575a9.243 9.243 0 0 0 4.25-17.453Z\",\n fill: \"url(#icon_cloud_svg__a)\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"icon_cloud_svg__a\",\n x1: 46.908,\n y1: 0.3,\n x2: 16.571,\n y2: 43.639,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n offset: 0.225,\n stopColor: \"#00FFA3\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#11181D\"\n })))));\n};\nexport { SvgIconCloud as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDciIGhlaWdodD0iMzMiIHZpZXdCb3g9IjAgMCA0NyAzMyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHBhdGggZD0iTTQyLjAwNzcgMTUuMjAwMUM0MC44MjA4IDE0LjU4NDcgNDAuMDY3NSAxMy4xOTE0IDQwLjA2NzUgMTEuODU0NUM0MC4wNjc1IDguMDI3MTcgMzYuOTYyMyA0LjkyMTk4IDMzLjEzNSA0LjkyMTk4QzMwLjkyNjYgNC45MjE5OCAyOC4zNjcxIDQuMzk5MzQgMjYuNjcyNyAyLjk4M0MyNC42Njc2IDEuMzA2OTggMjIuMDg3NiAwLjMwMDI5MyAxOS4yNjk5IDAuMzAwMjkzQzEyLjg4NjIgMC4zMDAyOTMgNy43MTU3MyA1LjQ3MDggNy43MTU3MyAxMS44NTQ1QzcuNzE1NzMgMTIuMjAyNSA3LjUwNTAxIDEyLjUxNTMgNy4xODM4MSAxMi42NDkzQzMuNDI3MjggMTQuMjE1NCAwLjc4MzIwMyAxNy45MjUyIDAuNzgzMjAzIDIyLjI1MzNDMC43ODMyMDMgMjcuOTk0MyA1LjQ0MSAzMi42NTIxIDExLjE4MiAzMi42NTIxSDM3Ljc1NjdDNDIuODYyMiAzMi42NTIxIDQ3LjAwMDEgMjguNTE0MiA0Ny4wMDAxIDIzLjQwODdDNDcuMDAwMSAxOS44MzgyIDQ0Ljk3MjggMTYuNzM3NyA0Mi4wMDc3IDE1LjIwMDFaIiBmaWxsPSJ1cmwoI3BhaW50MF9saW5lYXJfMjI2MV80MDQpIi8+CjxkZWZzPgo8bGluZWFyR3JhZGllbnQgaWQ9InBhaW50MF9saW5lYXJfMjI2MV80MDQiIHgxPSI0Ni45MDc5IiB5MT0iMC4zMDAyOTMiIHgyPSIxNi41NzA4IiB5Mj0iNDMuNjM4OSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgo8c3RvcCBvZmZzZXQ9IjAuMjI1IiBzdG9wLWNvbG9yPSIjMDBGRkEzIi8+CjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzExMTgxRCIvPgo8L2xpbmVhckdyYWRpZW50Pgo8L2RlZnM+Cjwvc3ZnPgo=\";","import React from \"react\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport PersonIcon from \"@mui/icons-material/Person\";\nimport { Box, IconButton, Chip, CircularProgress, TableCell, TableRow, Tooltip, Typography } from \"@mui/material\";\nimport type { CloudSubscriptionOrSubscriptionGroupUserGrantDto, UserGrantDto } from \"client/api/UserGrantApi\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nexport type UserGrantRowProps = {\n userGrant: TUserGrant;\n showDelete: boolean;\n onDeleteClicked: () => void | Promise;\n loading?: boolean;\n};\n\nexport function UserGrantRow(\n props: UserGrantRowProps\n) {\n const { userGrant, showDelete, onDeleteClicked, loading } = props;\n\n const friendlyRoleName = (\n \n {userGrant.role.name}\n {(userGrant.grantType === \"SubscriptionGroupUserGrant\" ||\n userGrant.grantType === \"SubscriptionGroupUserGrantProxy\") && (\n \n \n \n )}\n \n );\n\n return (\n \n \n \n \n \n {userGrant.user.firstName} {userGrant.user.lastName}\n \n {userGrant.user.email}\n \n \n \n \n {friendlyRoleName}\n \n {showDelete && }\n \n \n );\n}\n\ntype DeleteUserProps = {\n onDeleteClicked: () => void | Promise;\n loading?: boolean;\n};\n\nfunction DeleteUser({ onDeleteClicked, loading }: DeleteUserProps) {\n return loading ? (\n \n ) : (\n \n \n \n );\n}\n","import type { Dispatch } from \"react\";\nimport React, { useMemo, useState } from \"react\";\nimport { TableCell, TableRow, TableHead, Table, TableBody } from \"@mui/material\";\nimport type { AxiosError } from \"axios\";\nimport type {\n BaseUserGrantsApi,\n CloudSubscriptionOrSubscriptionGroupUserGrantDto,\n UserDto,\n UserGrantDto,\n} from \"client/api/UserGrantApi\";\nimport { ActionDialog } from \"components/ActionDialog/ActionDialog\";\nimport { UserGrantRow } from \"./UserGrantRow\";\n\nexport type UserGrantsTableProps = {\n grants?: TUserGrant[];\n grantsApi: BaseUserGrantsApi;\n assetId: string;\n canDeleteGrant: (userGrant: TUserGrant) => boolean;\n refresh: () => void;\n onDeleteError: Dispatch;\n};\n\nconst getUserNameFormatted = (user?: UserDto): string => {\n if (!user) {\n return \"User\";\n }\n\n const { firstName, lastName } = user;\n if (!firstName) {\n return \"User\";\n }\n\n return `${firstName} ${lastName ?? \"\"} (${user.email})`;\n};\n\nexport function UserGrantsTable(\n props: UserGrantsTableProps\n) {\n const { grants, grantsApi, assetId, canDeleteGrant, refresh, onDeleteError } = props;\n const [userGrantToDelete, setUserGrantToDelete] = useState();\n const onUserGrantDelete = (userGrant: UserGrantDto) => {\n setUserGrantToDelete(userGrant);\n };\n\n const onUserGrantDeleteConfirm = async () => {\n if (!userGrantToDelete) {\n return;\n }\n onDeleteError(undefined);\n await grantsApi.deleteUserGrant(assetId, userGrantToDelete.id).catch((error) => {\n onDeleteError(error);\n });\n setUserGrantToDelete(undefined);\n refresh();\n };\n\n const onUserGrantDeleteCancel = async () => {\n setUserGrantToDelete(undefined);\n };\n\n const sortedUserGrants = useMemo(() => {\n return grants?.sort((a, b) => {\n const buildSortKey = function (userGrant: TUserGrant) {\n return `${userGrant.grantType}${userGrant.user.firstName}${userGrant.user.lastName}${userGrant.user.email}`;\n };\n return buildSortKey(a).localeCompare(buildSortKey(b));\n });\n }, [grants]);\n\n return (\n <>\n \n \n \n User\n Role\n \n \n \n \n {sortedUserGrants?.map((userGrant) => (\n onUserGrantDelete(userGrant)}\n key={userGrant.id}\n loading={userGrant.id === userGrantToDelete?.id}\n />\n ))}\n \n
    \n \n \n );\n}\n","import React from \"react\";\nimport DeleteIcon from \"@mui/icons-material/Delete\";\nimport PersonIcon from \"@mui/icons-material/Person\";\nimport { Box, CircularProgress, IconButton, TableCell, TableRow, Typography } from \"@mui/material\";\nimport type {\n CloudSubscriptionOrSubscriptionGroupUserGrantDto,\n UserGrantDto,\n UserGrantInviteDto,\n} from \"client/api/UserGrantApi\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nexport type UserGrantRowProps = {\n userGrantInvite: UserGrantInviteDto;\n showDelete: boolean;\n onDeleteClicked: () => void | Promise;\n loading?: boolean;\n};\n\nexport function UserGrantInviteRow(\n props: UserGrantRowProps\n) {\n const { userGrantInvite, showDelete, onDeleteClicked, loading } = props;\n\n return (\n \n \n \n \n \n {userGrantInvite.email}\n \n \n \n \n {userGrantInvite.role.name}\n \n \n {showDelete && }\n \n \n );\n}\n\ntype DeleteUserProps = {\n onDeleteClicked: () => void | Promise;\n loading?: boolean;\n};\n\nfunction DeleteUser({ onDeleteClicked, loading }: DeleteUserProps) {\n return loading ? (\n \n ) : (\n \n \n \n );\n}\n","import type { Dispatch } from \"react\";\nimport React, { useMemo, useState } from \"react\";\nimport { TableCell, TableRow, TableHead, Table, TableBody } from \"@mui/material\";\nimport type { AxiosError } from \"axios\";\nimport type {\n BaseUserGrantsApi,\n CloudSubscriptionOrSubscriptionGroupUserGrantDto,\n UserGrantDto,\n UserGrantInviteDto,\n} from \"client/api/UserGrantApi\";\nimport { ActionDialog } from \"components/ActionDialog/ActionDialog\";\nimport { UserGrantInviteRow } from \"./UserGrantInviteRow\";\n\nexport type UserGrantsTableProps = {\n userGrantInvites?: UserGrantInviteDto[];\n grantsApi: BaseUserGrantsApi;\n assetId: string;\n canRevokeInvite: () => boolean;\n refresh: () => void;\n onDeleteError: Dispatch;\n};\n\nexport function UserGrantsInviteTable(\n props: UserGrantsTableProps\n) {\n const { userGrantInvites, grantsApi, assetId, canRevokeInvite, refresh, onDeleteError } = props;\n const [userGrantInviteToRevoke, setUserGrantInviteToRevoke] = useState();\n const onUserGrantInviteRevoke = (userGrantInvite: UserGrantInviteDto) => {\n setUserGrantInviteToRevoke(userGrantInvite);\n };\n\n const onUserGrantInviteRevokeConfirm = async () => {\n if (!userGrantInviteToRevoke) {\n return;\n }\n onDeleteError(undefined);\n await grantsApi.revokeInvite(assetId, userGrantInviteToRevoke.id).catch((error) => {\n onDeleteError(error);\n });\n setUserGrantInviteToRevoke(undefined);\n refresh();\n };\n\n const onUserGrantInviteRevokeCancel = async () => {\n setUserGrantInviteToRevoke(undefined);\n };\n\n const sortedUserGrants = useMemo(() => {\n return userGrantInvites?.sort((a, b) => {\n const buildSortKey = function (invite: UserGrantInviteDto) {\n return `${invite.role.name}${invite.email}`;\n };\n return buildSortKey(a).localeCompare(buildSortKey(b));\n });\n }, [userGrantInvites]);\n\n return (\n <>\n \n \n \n Email\n Role\n \n \n \n \n {sortedUserGrants?.map((userGrantInvite) => (\n onUserGrantInviteRevoke(userGrantInvite)}\n key={userGrantInvite.id}\n loading={userGrantInvite.id === userGrantInviteToRevoke?.id}\n />\n ))}\n \n
    \n \n \n );\n}\n","export const normal = 400;\nexport const light = 300;\nexport const semibold = 500;\nexport const bold = 600;\n\nexport const baseSizeInPx = 16;\n","import type { ReactNode } from \"react\";\nimport React from \"react\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport ExpandLessIcon from \"@mui/icons-material/ExpandLess\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport {\n AlertTitle,\n Autocomplete,\n Collapse,\n Dialog,\n DialogContent,\n DialogTitle,\n Grid,\n IconButton,\n TextField,\n Typography,\n} from \"@mui/material\";\nimport { bold } from \"fontWeights\";\nimport { AlertWithShadow } from \"components/alert/AlertWithShadow\";\nimport { SubmittableForm } from \"components/form/SubmittableForm\";\n\ntype GrantValue = \"User\" | \"Admin\" | \"Tech\" | \"Billing\" | \"Everyone (system team)\" | \"Octopus Managers (system team)\";\n\ntype GrantValueOption = { label: string; value: GrantValue };\n\nexport type InviteUserDialogProps = {\n show: boolean;\n dialogTitle: string;\n description?: ReactNode;\n grantLabel?: string;\n onCancel: () => Promise | void;\n onSubmit: (email: string, firstName: string, lastName: string, grant: string) => Promise | void;\n grantsInfo: ReactNode;\n grantValues: readonly GrantValue[] | readonly GrantValueOption[];\n defaultGrantValue?: GrantValue;\n};\n\nconst emailOptions = {\n required: {\n value: true,\n message: \"Please enter an email address for this user.\",\n },\n pattern: {\n value: /^\\w(?:\\.?[\\w%'+-]+)*@\\w(?:[\\w-]*\\.)+?[a-z]{2,}$/i,\n message: \"Please enter a valid email address.\",\n },\n maxLength: {\n value: 255,\n message: \"Email address is too long, please enter an email address with less than 255 characters.\",\n },\n minLength: {\n value: 4,\n message: \"Email address is too short, please enter an email address with at least 4 characters.\",\n },\n};\n\nconst firstNameOptions = {\n required: {\n value: true,\n message: \"Please enter a first name for this user.\",\n },\n maxLength: {\n value: 30,\n message: \"First name too long, please enter a name with less than 30 characters.\",\n },\n validate: {\n notEmpty: (val: string) => !!val.trim() || \"Please enter a first name for this user.\",\n },\n};\n\nconst lastNameOptions = {\n maxLength: {\n value: 30,\n message: \"Last name too long, please enter a name with less than 30 characters.\",\n },\n validate: {\n notEmpty: (val?: string) => !val || !!val.trim() || \"Please enter a last name for this user.\",\n },\n};\n\nconst isGrantValueOption = (x: unknown): x is GrantValueOption => {\n return typeof x === \"object\" && x !== null && \"label\" in x && \"value\" in x;\n};\n\nexport function InviteUserDialog(props: InviteUserDialogProps) {\n const {\n show,\n dialogTitle,\n description,\n grantLabel = \"Role\",\n onCancel,\n onSubmit,\n grantsInfo,\n grantValues,\n defaultGrantValue,\n } = props;\n const [showGrantsInfo, setShowGrantsInfo] = React.useState(false);\n return (\n \n \n {dialogTitle}\n theme.palette.grey[500],\n }}\n >\n \n \n \n \n {description}\n {\n const chosenValue = grantValues.find((x) => isGrantValueOption(x) && x.label === data.grant);\n const grant = isGrantValueOption(chosenValue) ? chosenValue.value : data.grant;\n await onSubmit(data.email, data.firstName, data.lastName, grant);\n }}\n defaultValues={{\n email: \"\",\n firstName: \"\",\n lastName: \"\",\n grant:\n defaultGrantValue || (isGrantValueOption(grantValues[0]) ? grantValues[0]?.value : grantValues[0]) || \"\",\n }}\n submitLabel={\"Invite\"}\n >\n {(formController) => {\n const { register, formState } = formController;\n return (\n \n \n \n User details\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {grantLabel}\n \n \n \n {\n if (isGrantValueOption(option) && isGrantValueOption(value)) {\n return option.value === value.value;\n }\n if (isGrantValueOption(option) && typeof value === \"string\") {\n return option.value === value;\n }\n return option === value;\n }}\n getOptionLabel={(x) => {\n if (isGrantValueOption(x)) {\n return x.label;\n }\n return x;\n }}\n renderInput={(params) => }\n />\n \n \n \n \n \n setShowGrantsInfo(!showGrantsInfo)}\n action={\n \n {showGrantsInfo ? : }\n \n }\n >\n What does each {grantLabel.toLowerCase()} include?\n {grantsInfo}\n \n \n \n \n );\n }}\n \n \n \n );\n}\n","import styled from \"@emotion/styled\";\nimport { List } from \"@mui/material\";\n\nexport const UserGrantDescriptionList = styled(List)`\n list-style-type: disc;\n padding: 8px;\n padding-left: 16px;\n .MuiListItem-root {\n display: list-item;\n padding: 0;\n }\n`;\n","import React from \"react\";\nimport { Typography } from \"@mui/material\";\n\ninterface UserGrantDescriptionTitleProps {\n title: string;\n}\n\nexport const UserGrantDescriptionTitle = ({ title }: UserGrantDescriptionTitleProps) => {\n return (\n \n {title}\n \n );\n};\n","import React from \"react\";\nimport { ListItem } from \"@mui/material\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport type { CloudLicensingChannel, CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { inviteUserToCloudSubscription } from \"client/api/CloudSubscriptionApi\";\nimport { InviteUserDialog, type InviteUserDialogProps } from \"components/Dialogs/InviteUserDialog\";\nimport { ExternalLink } from \"components/ExternalLink/ExternalLink\";\nimport { UserGrantDescriptionList } from \"components/UserGrantDescription/UserGrantDescriptionList\";\nimport { UserGrantDescriptionTitle } from \"components/UserGrantDescription/UserGrantDescriptionTitle\";\n\ntype InviteUserToCloudSubscriptionProps = Pick & {\n cloudSubscription: CloudSubscriptionDto;\n onSubmitComplete: () => Promise | void;\n};\n\nconst grantValues = [\"Everyone (system team)\", \"Octopus Managers (system team)\"] as const;\n\nconst GrantsInfo = () => (\n <>\n \n \n Authenticate to this subscription as part of the Everyone group\n \n \n \n Authenticate to this subscription as part of the Octopus Managers group\n Manage billing of this subscription\n Manage configuration of this subscription\n Manage access control for this subscription\n \n \n);\n\nexport function InviteUserToCloudSubscription(props: InviteUserToCloudSubscriptionProps) {\n const { show, onCancel, onSubmitComplete, cloudSubscription } = props;\n const { userInfo } = useUserContext();\n\n const onSubmit: InviteUserDialogProps[\"onSubmit\"] = async (email, firstName, lastName, grant) => {\n await inviteUserToCloudSubscription(\n cloudSubscription?.id,\n email,\n `${firstName} ${lastName}`.trim(),\n `${userInfo?.firstName} ${userInfo?.lastName}`.trim(),\n grant\n );\n onSubmitComplete();\n };\n\n return (\n \n Visit the docs to\n learn about inviting users.\n

    \n }\n grantLabel={\"Team\"}\n onCancel={onCancel}\n onSubmit={onSubmit}\n grantsInfo={}\n grantValues={grantValues}\n />\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport { Button, Grid, TableContainer, Typography, Alert, Stack } from \"@mui/material\";\nimport type { AxiosError } from \"axios\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { CloudSubscriptionStatus, IsSubscribedOrLapsed } from \"utils/CloudSubscription/CloudSubscriptionStatus\";\nimport { LoadablePage } from \"shared/LoadablePage\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport type { CloudSubscriptionOrSubscriptionGroupUserGrantDto } from \"client/api/UserGrantApi\";\nimport type { BaseUserGrantsApi } from \"client/api/UserGrantApi\";\nimport { UserGrantsTable } from \"components/UserGrantTable/UserGrantsTable\";\nimport { UserGrantsInviteTable } from \"components/UserGrantsInviteTable/UserGrantsInviteTable\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { NotFoundPage } from \"pages/NotFoundPage\";\nimport { CloudSubscriptionHeader } from \"areas/cloudSubscriptions/components/CloudSubscriptionHeader\";\nimport { InviteUserToCloudSubscription } from \"areas/cloudSubscriptions/components/InviteUserToCloudSubscription\";\n\nexport type BaseUserGrantsViewProps = {\n userGrantsApi: BaseUserGrantsApi;\n};\n\ntype UserGrantsDetailViewProps =\n BaseUserGrantsViewProps;\n\nexport type CloudSubscriptionInactiveBannerProps = {\n isActive: boolean;\n};\n\nexport function CloudSubscriptionInactiveBanner(props: CloudSubscriptionInactiveBannerProps) {\n const { isActive } = props;\n if (isActive) return <>;\n return (\n \n This cloud subscription is not active\n \n );\n}\n\nexport function CloudSubscriptionUsers(\n props: UserGrantsDetailViewProps\n) {\n const { entity: cloudSubscription } = useEntity();\n const { hasPermissionForAsset } = useUserContext();\n\n const { userGrantsApi } = props;\n\n const getUserGrantsRequest = useMemo(() => (id: string) => userGrantsApi.listUserGrants(id), [userGrantsApi]);\n const getInvitesRequest = useMemo(() => (id: string) => userGrantsApi.getInvites(id), [userGrantsApi]);\n\n const canDeleteGrant = (userGrant: TUserGrant) => {\n return (\n hasPermissionForAsset(\n RbacPermissions.CloudSubscription.ManageAccessControl,\n cloudSubscription?.id,\n cloudSubscription?.subscriptionGroup?.id\n ) &&\n (userGrant.grantType === \"CloudSubscriptionUserGrant\" ||\n userGrant.grantType === \"CloudSubscriptionUserGrantProxy\")\n );\n };\n\n const canRevokeInvite = () => {\n return hasPermissionForAsset(\n RbacPermissions.CloudSubscription.ManageAccessControl,\n cloudSubscription?.id,\n cloudSubscription?.subscriptionGroup?.id\n );\n };\n\n const cloudSubscriptionStatus = cloudSubscription?.cloudSubscriptionStatus || \"None\";\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n const isActive = IsSubscribedOrLapsed(CloudSubscriptionStatus[cloudSubscriptionStatus]);\n\n const {\n data: userGrantsData,\n loading: loadingUserGrants,\n error: userGrantsError,\n refresh: refreshUserGrants,\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n } = useAsyncRequest(getUserGrantsRequest, cloudSubscription?.id as string);\n const {\n data: invitesData,\n loading: loadingInvites,\n error: invitesError,\n refresh: refreshInvites,\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n } = useAsyncRequest(getInvitesRequest, cloudSubscription?.id as string);\n\n const loading = loadingUserGrants || loadingInvites;\n const refreshAll = async () => {\n refreshInvites();\n refreshUserGrants();\n };\n\n const [showUserDialog, setShowUserDialog] = useState(false);\n\n const [deleteError, setDeleteError] = useState();\n\n const actions = [];\n if (isActive) {\n actions.push(\n \n setShowUserDialog(true)}\n sx={{ textTransform: \"none\" }}\n disableElevation\n >\n Invite User\n \n \n );\n }\n\n if (!cloudSubscription) {\n return ;\n }\n\n return (\n <>\n \n {deleteError && }\n \n \n \n \n {invitesData?.entities && invitesData?.entities.length > 0 && (\n \n Invitations\n \n \n \n \n )}\n \n \n \n \n \n \n \n {\n await refreshAll();\n setShowUserDialog(false);\n }}\n onCancel={() => setShowUserDialog(false)}\n />\n \n );\n}\n","import React from \"react\";\nimport { Route } from \"react-router-dom\";\nimport { cloudSubscriptionUserGrantsApi } from \"client/api/UserGrantApi\";\nimport { ProtectedRoute } from \"components/authorization/ProtectedRoute\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { InviteAcceptPage } from \"pages/InviteAcceptPage\";\nimport { CloudSubscriptionLayout } from \"areas/cloudSubscriptions/CloudSubscriptionLayout\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\nimport { CloudSubscriptionConfiguration } from \"areas/cloudSubscriptions/detail/CloudSubscriptionConfiguration\";\nimport { CloudSubscriptionFinance } from \"areas/cloudSubscriptions/detail/CloudSubscriptionFinance\";\nimport { CloudSubscriptionLoadViaSerial } from \"areas/cloudSubscriptions/detail/CloudSubscriptionLoadViaSerial\";\nimport { CloudSubscriptionOverview } from \"areas/cloudSubscriptions/detail/CloudSubscriptionOverview\";\nimport { CloudSubscriptionUpgrade } from \"areas/cloudSubscriptions/detail/CloudSubscriptionUpgrade\";\nimport { CloudSubscriptionUsers } from \"areas/cloudSubscriptions/detail/CloudSubscriptionUsers\";\n\nexport const cloudSubscriptionRoutes = () => {\n return (\n \n }\n >\n } />\n }\n />\n }\n />\n }\n />\n }\n />\n }\n />\n }\n />\n }\n />\n }\n />\n \n }\n />\n }\n />\n \n );\n};\n","import type { ListEntitiesResponse } from \"client/api/common/ListEntitiesResponse\";\nimport type { SubscriptionGroupDto } from \"client/api/common/SubscriptionGroupDto\";\nimport axiosClient from \"client/axios-client\";\n\nconst BASE_URL = \"subscription-groups\";\n\nexport type GetSubscriptionGroupsResponse = ListEntitiesResponse;\n\nexport const getSubscriptionGroups = async (): Promise => {\n const response = await axiosClient.get(BASE_URL);\n\n return response.data;\n};\n\nexport const updateSubscriptionGroup = async (\n subscriptionGroupDto: SubscriptionGroupDto\n): Promise => {\n const response = await axiosClient.put(\n `${BASE_URL}/${subscriptionGroupDto.id}`,\n subscriptionGroupDto\n );\n\n return response.data;\n};\n\nexport const deleteSubscriptionGroup = async (groupId: string): Promise => {\n await axiosClient.delete(`${BASE_URL}/${groupId}`);\n};\n\nexport const inviteUserToSubscriptionGroup = async (\n groupId: string | undefined,\n email: string,\n fullName: string,\n senderName: string,\n userRole: string\n): Promise => {\n await axiosClient.post(`${BASE_URL}/${groupId}/invites`, {\n email,\n fullName,\n senderName,\n userRole,\n });\n};\n","import React from \"react\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { Alert, Link } from \"@mui/material\";\nimport AlertTitle from \"@mui/material/AlertTitle\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\n\ntype OldControlCenterBannerProps = {\n sx?: SxProps;\n};\n\nexport function OldControlCenterBanner(props: OldControlCenterBannerProps) {\n const { sx } = props;\n return (\n \n Having trouble finding a license or instance?\n If it hasn't been purchased or renewed recently, it may still be in{\" \"}\n \n Control Center V1\n \n .\n \n );\n}\n","import type { PropsWithChildren, ReactNode, SyntheticEvent } from \"react\";\nimport React, { useState } from \"react\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport ExpandMoreIcon from \"@mui/icons-material/ExpandMore\";\nimport { Box, Collapse, Stack, Typography } from \"@mui/material\";\nimport { designSystemColors } from \"@cpt/shared\";\n\ntype CollapsibleListProps = PropsWithChildren<{\n title: string;\n eyebrowTitle: string;\n initiallyOpen?: boolean;\n leftActions?: ReactNode;\n rightActions?: ReactNode;\n overflowMenu?: ReactNode;\n}>;\n\nexport function CollapsibleList(props: CollapsibleListProps) {\n const expandIconSize = \"medium\";\n const { title, eyebrowTitle, initiallyOpen, leftActions, rightActions, overflowMenu, children } = props;\n const [show, setShow] = useState(initiallyOpen || false);\n\n const handleClick = () => {\n setShow(!show);\n };\n\n const stopPropagation = (e: SyntheticEvent) => {\n e.stopPropagation();\n };\n\n return (\n <>\n \n \n {show && }\n {!show && }\n \n \n {eyebrowTitle}\n \n {title}{\" \"}\n {leftActions && (\n \n {leftActions}\n \n )}\n \n \n \n {rightActions && (\n \n {rightActions}\n \n )}\n {overflowMenu && {overflowMenu}}\n \n \n \n {children}\n \n \n );\n}\n","import { DateTime } from \"luxon\";\nimport type { DateTimeFormatOptions } from \"luxon\";\n\nexport const defaultDateFormat = \"d MMM yyyy\";\n\nexport const formatDateAsLocaleString = (\n date: string,\n useLocalTime: boolean = false,\n formatOpts: DateTimeFormatOptions = DateTime.DATETIME_SHORT_WITH_SECONDS\n): string => {\n const dateTime = DateTime.fromISO(date);\n\n if (useLocalTime) {\n const localTime = dateTime.toLocal();\n return `${localTime.toLocaleString(formatOpts)} (${localTime.zoneName})`;\n }\n return `${dateTime.toLocaleString(formatOpts)} (${dateTime.zoneName})`;\n};\n\nexport const formatDateTimeAsLocaleDateString = (\n date: DateTime,\n dateFormat: Intl.DateTimeFormatOptions = DateTime.DATE_SHORT,\n useLocalTime: boolean = false,\n includeZoneName: boolean = true\n): string => {\n if (useLocalTime) {\n const localTime = date.toLocal();\n return `${localTime.toLocaleString(dateFormat)} ${includeZoneName ? `(${localTime.zoneName})` : \"\"}`;\n }\n return `${date.toLocaleString(dateFormat)} ${includeZoneName ? `(${date.zoneName})` : \"\"}`;\n};\n\nexport const formatDateAsLocaleTimeString = (date: DateTime, useLocalTime?: boolean): string => {\n if (useLocalTime) {\n const localTime = date.toLocal();\n return `${localTime.toLocaleString(DateTime.TIME_SIMPLE)} (${localTime.zoneName})`;\n }\n return `${date.toLocaleString(DateTime.TIME_SIMPLE)} (${date.zoneName})`;\n};\n","import React from \"react\";\nimport { Typography } from \"@mui/material\";\nimport { DateTime } from \"luxon\";\nimport { designSystemColors } from \"@cpt/shared\";\nimport { CloudSubscriptionStatus } from \"utils/CloudSubscription/CloudSubscriptionStatus\";\nimport { defaultDateFormat } from \"utils/formatters/DateFormatters\";\nimport { type CloudSubscriptionDto, CloudLicensingChannelTypesKeys } from \"client/api/CloudSubscriptionApi\";\n\nfunction getStatusText(cloudSubscription: CloudSubscriptionDto): string | React.ReactNode {\n const licensingChannel = cloudSubscription.licensingChannel;\n\n switch (licensingChannel.channelType) {\n case CloudLicensingChannelTypesKeys.LegacyBraintree:\n return \"Inactive\";\n case CloudLicensingChannelTypesKeys.Salesforce:\n case CloudLicensingChannelTypesKeys.Trial:\n case CloudLicensingChannelTypesKeys.ImportedTrial:\n case CloudLicensingChannelTypesKeys.Infrastructure:\n const prefix = licensingChannel.expiryDate < DateTime.now() ? \"Expired\" : \"Expires\";\n if (\n licensingChannel.channelType === CloudLicensingChannelTypesKeys.Infrastructure &&\n licensingChannel.autoRenew\n ) {\n return `Auto renews ${licensingChannel.renewalPeriod?.toLowerCase()}`;\n }\n return `${prefix} ${licensingChannel.expiryDate.toFormat(defaultDateFormat)}`;\n case CloudLicensingChannelTypesKeys.Stripe: {\n if (licensingChannel.status === \"canceled\") {\n return \"Cancelled\";\n } else if (licensingChannel.cancelAtPeriodEnd) {\n return `Cancels ${licensingChannel.nextRenewalDate.toFormat(defaultDateFormat)}`;\n }\n return \"Active\";\n }\n case CloudLicensingChannelTypesKeys.Zuora:\n if (cloudSubscription.cloudSubscriptionStatus === CloudSubscriptionStatus.Cancelled) {\n return \"Cancelled\";\n } else if (licensingChannel.cancelAtPeriodEnd) {\n return `Cancels ${licensingChannel.nextRenewalDate.toFormat(defaultDateFormat)}`;\n }\n return \"Active\";\n }\n}\n\ninterface CloudSubscriptionProps {\n cloudSubscription: CloudSubscriptionDto;\n}\n\nexport function CloudSubscriptionNextDate(props: CloudSubscriptionProps) {\n const { cloudSubscription } = props;\n\n return (\n \n {getStatusText(cloudSubscription)}\n \n );\n}\n","import React from \"react\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { Chip } from \"@mui/material\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\n\ninterface CloudSubscriptionWarningChip {\n cloudSubscription: CloudSubscriptionDto;\n sx?: SxProps;\n}\n\nexport function CloudSubscriptionWarningChip(props: CloudSubscriptionWarningChip) {\n const { cloudSubscription, sx } = props;\n const isPastDue =\n cloudSubscription.licensingChannel.channelType == \"StripeSubscriptionCloudSubscriptionLicensingChannelDto\" &&\n cloudSubscription.licensingChannel.status == \"past_due\";\n return (\n <>\n {isPastDue && (\n \n )}\n \n );\n}\n","import type { MouseEvent } from \"react\";\nimport React, { useRef, useState } from \"react\";\nimport { Link as RouterLink, useLinkClickHandler } from \"react-router-dom\";\nimport { ChevronRightSharp } from \"@mui/icons-material\";\nimport { Box, Grid, ListItem, ListItemButton, ListItemIcon, ListItemText, Stack, alpha, styled } from \"@mui/material\";\nimport { designSystemColors } from \"@cpt/shared\";\nimport { getHostname } from \"utils/formatters/DnsFormatters\";\nimport { isTrial } from \"utils/isTrial\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { GreenButton } from \"components/Button/GreenButton\";\nimport { CloudSubscriptionNextDate } from \"components/Dashboard/CloudSubscriptions/CloudSubscriptionNextDate\";\nimport { CloudSubscriptionStatusIcon } from \"components/Dashboard/CloudSubscriptions/CloudSubscriptionStatusIcon\";\nimport { FulfillmentProgressChip } from \"components/Dashboard/FufillmentProgressChip\";\nimport { LicenseChannelChip } from \"components/LicenseChannelChip/LicenseChannelChip\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\nimport { CloudSubscriptionWarningChip } from \"./CloudSubscriptionWarningChip\";\n\ninterface CloudSubscriptionProps {\n cloudSubscription: CloudSubscriptionDto;\n}\n\nconst UpgradeButton = React.forwardRef<\n HTMLButtonElement,\n {\n cloudSubscription: CloudSubscriptionDto;\n handleMouseOverButtons: () => void;\n handleMouseOutButtons: () => void;\n }\n>(({ cloudSubscription, handleMouseOverButtons, handleMouseOutButtons }, ref) => {\n return (\n (CloudSubscriptionsRoutesMap.detail(cloudSubscription.id).upgrade)}\n onMouseOver={handleMouseOverButtons}\n onMouseOut={handleMouseOutButtons}\n sx={{ fontSize: \"0.8125rem\" }}\n >\n Upgrade Plan\n \n );\n});\n\nconst StyledListItem = styled(ListItem)`\n padding: 0;\n border-top: 1px solid;\n border-color: ${designSystemColors.grey[\"200\"]};\n &:first-of-type {\n border-top-width: 2px;\n }\n`;\n\nexport function CloudSubscription(props: CloudSubscriptionProps) {\n const { cloudSubscription } = props;\n const isFulfilling = !cloudSubscription.isFulfilled;\n\n const upgradeButtonRef = useRef(null);\n const [showRipple, setShowRipple] = useState(false);\n const [showArrow, setShowArrow] = useState(false);\n\n const handleMouseEnter = () => setShowArrow(true);\n const handleMouseLeave = () => setShowArrow(false);\n\n const handleMouseOverButtons = () => {\n setShowRipple(true);\n setShowArrow(false);\n };\n const handleMouseOutButtons = () => {\n setShowRipple(false);\n setShowArrow(true);\n };\n\n const clickedListItem = (e: MouseEvent) => {\n const isEventTargetRef = (ref: React.MutableRefObject) => {\n return e.target instanceof Node && ref.current && ref.current.contains(e.target);\n };\n if (isEventTargetRef(upgradeButtonRef)) {\n e.preventDefault();\n }\n };\n\n return (\n \n \n \n \n \n \n \n \n \n {cloudSubscription.friendlyName}\n
    \n {cloudSubscription.isFulfilled && (\n \n )}\n \n
    \n
    \n }\n primaryTypographyProps={{\n display: \"flex\",\n fontWeight: 700,\n fontSize: \"0.875rem\",\n color: designSystemColors.grey[\"800\"],\n }}\n secondary={<>{getHostname(cloudSubscription.dnsPrefix)} }\n secondaryTypographyProps={{\n component: \"div\",\n fontSize: \"0.8125rem\",\n color: designSystemColors.grey[\"600\"],\n }}\n />\n
    \n \n \n \n \n \n \n \n \n {isFulfilling && }\n {!isFulfilling && isTrial(cloudSubscription.licensingChannel.channelType) && (\n \n \n \n )}\n \n {showArrow && (\n \n )}\n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Typography } from \"@mui/material\";\nimport { DateTime } from \"luxon\";\nimport { designSystemColors } from \"@cpt/shared\";\nimport { defaultDateFormat } from \"utils/formatters/DateFormatters\";\nimport { ServerLicensingChannelTypesKeys, type ServerLicenseDto } from \"client/api/ServerLicenseApi\";\n\ninterface ServerLicenseNextDateProps {\n serverLicense: ServerLicenseDto;\n}\n\nexport function ServerLicenseNextDate(props: ServerLicenseNextDateProps) {\n const { serverLicense } = props;\n\n const now = DateTime.now();\n\n let prefix = \"Expires\";\n if (serverLicense.expiryDate < now) {\n prefix = \"Expired\";\n }\n if (serverLicense.licensingChannel.channelType === ServerLicensingChannelTypesKeys.Stripe) {\n if (serverLicense.licensingChannel.status === \"canceled\") {\n prefix = \"Cancelled\";\n } else if (serverLicense.licensingChannel.cancelAtPeriodEnd) {\n prefix = \"Cancels\";\n }\n } else if (serverLicense.licensingChannel.channelType === ServerLicensingChannelTypesKeys.Zuora) {\n // TODO: handle cancelled state when there is one for zuora\n if (serverLicense.licensingChannel.cancelAtPeriodEnd) {\n prefix = \"Cancels\";\n }\n }\n\n const displayText = serverLicense.expiryDate\n ? `${prefix} ${serverLicense.expiryDate.toFormat(defaultDateFormat)}`\n : null;\n return (\n \n {displayText}\n \n );\n}\n","import type { MouseEvent } from \"react\";\nimport React, { useRef, useState } from \"react\";\nimport { Link, useLinkClickHandler } from \"react-router-dom\";\nimport { ChevronRightSharp } from \"@mui/icons-material\";\nimport StorageIcon from \"@mui/icons-material/Storage\";\nimport {\n Box,\n Chip,\n Grid,\n ListItem,\n ListItemButton,\n ListItemIcon,\n ListItemText,\n Stack,\n alpha,\n styled,\n} from \"@mui/material\";\nimport { designSystemColors } from \"@cpt/shared\";\nimport { isTrial } from \"utils/isTrial\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { isPaymentOverdue } from \"client/api/ServerLicenseApi\";\nimport { GreenButton } from \"components/Button/GreenButton\";\nimport { FulfillmentProgressChip } from \"components/Dashboard/FufillmentProgressChip\";\nimport { ServerLicenseNextDate } from \"components/Dashboard/ServerLicenses/ServerLicenseNextDate\";\nimport { LicenseChannelChip } from \"components/LicenseChannelChip/LicenseChannelChip\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { ServerLicensesRoutesMap } from \"areas/serverLicenses/ServerLicensesRoutesMap\";\n\ninterface ServerLicenseProps {\n serverLicense: ServerLicenseDto;\n}\n\nconst UpgradeButton = React.forwardRef<\n HTMLButtonElement,\n {\n serverLicense: ServerLicenseDto;\n handleMouseOverButtons: () => void;\n handleMouseOutButtons: () => void;\n }\n>(({ serverLicense, handleMouseOverButtons, handleMouseOutButtons }, ref) => {\n return (\n (ServerLicensesRoutesMap.detail(serverLicense.id).upgrade)}\n onMouseOver={handleMouseOverButtons}\n onMouseOut={handleMouseOutButtons}\n sx={{ fontSize: \"0.8125rem\" }}\n >\n Upgrade Plan\n \n );\n});\n\nconst StyledListItem = styled(ListItem)`\n padding: 0;\n border-top: 1px solid;\n border-color: ${designSystemColors.grey[\"200\"]};\n &:first-of-type {\n border-top-width: 2px;\n }\n`;\n\nexport function ServerLicense(props: ServerLicenseProps) {\n const { serverLicense } = props;\n const isFulfilling = !serverLicense.isFulfilled;\n\n const upgradeButtonRef = useRef(null);\n const [showRipple, setShowRipple] = useState(false);\n const [showArrow, setShowArrow] = useState(false);\n\n const handleMouseEnter = () => setShowArrow(true);\n const handleMouseLeave = () => setShowArrow(false);\n\n const handleMouseOverButtons = () => {\n setShowRipple(true);\n setShowArrow(false);\n };\n\n const handleMouseOutButtons = () => {\n setShowRipple(false);\n setShowArrow(true);\n };\n\n const clickedListItem = (e: MouseEvent) => {\n const isEventTargetRef = (ref: React.MutableRefObject) => {\n return e.target instanceof Node && ref.current && ref.current.contains(e.target);\n };\n if (isEventTargetRef(upgradeButtonRef)) {\n e.preventDefault();\n }\n };\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n {serverLicense.friendlyName ?? serverLicense.serial}\n \n
    \n {serverLicense.isFulfilled && (\n \n )}\n {isPaymentOverdue(serverLicense) && (\n \n )}\n
    \n
    \n }\n primaryTypographyProps={{\n display: \"flex\",\n fontWeight: 700,\n fontSize: \"0.875rem\",\n color: designSystemColors.grey[\"800\"],\n }}\n secondary={<>{serverLicense.friendlyName && serverLicense.serial}}\n secondaryTypographyProps={{\n component: \"div\",\n fontSize: \"0.8125rem\",\n color: designSystemColors.grey[\"600\"],\n }}\n />\n
    \n \n \n \n \n \n \n \n \n {isFulfilling && }\n {!isFulfilling && isTrial(serverLicense.licensingChannel.channelType) && (\n \n \n \n )}\n \n {showArrow && (\n \n )}\n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport MoreVertIcon from \"@mui/icons-material/MoreVert\";\nimport { IconButton, Menu, MenuItem } from \"@mui/material\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport type { RbacPermission } from \"components/authorization/RbacPermissions\";\n\nconst ITEM_HEIGHT = 48;\n\nexport const Overflow = {\n menuItem: (label: string, onClick: () => void): OverflowMenuItem => {\n return { label, onClick };\n },\n policyAuthorizedMenuItem: (\n requiredPolicy: RbacPermission,\n assetId: string = \"\",\n subscriptionGroupId: string = \"\",\n label: string,\n onClick: () => void\n ): OverflowMenuItem => {\n return { requiredPolicy, assetId, subscriptionGroupId, label, onClick };\n },\n};\n\ninterface OverflowMenuItem {\n requiredPolicy?: RbacPermission;\n assetId?: string;\n subscriptionGroupId?: string;\n label: string;\n onClick: () => void;\n}\n\nexport type OverflowMenuProps = {\n items: Array;\n hideWhenEmpty?: boolean;\n};\n\nexport function OverflowMenu(props: OverflowMenuProps) {\n const { items, hideWhenEmpty } = props;\n const { hasPermissionForAsset } = useUserContext();\n const [anchorEl, setAnchorEl] = React.useState(null);\n const open = Boolean(anchorEl);\n const authorizedMenuItems = items.filter(\n (it) => !it.requiredPolicy || hasPermissionForAsset(it.requiredPolicy, it.assetId, it.subscriptionGroupId)\n );\n\n const handleClick = (event: React.MouseEvent) => {\n setAnchorEl(event.currentTarget);\n };\n const handleClose = () => {\n setAnchorEl(null);\n };\n\n const onMenuItemClicked = (item: OverflowMenuItem) => {\n handleClose();\n item.onClick();\n };\n\n if (hideWhenEmpty && !authorizedMenuItems.length) {\n return <>;\n }\n\n return (\n
    \n \n \n \n \n {authorizedMenuItems.map((item) => (\n onMenuItemClicked(item)}>\n {item.label}\n \n ))}\n \n
    \n );\n}\n","import React from \"react\";\nimport { Alert } from \"@mui/material\";\nimport { ActionDialog } from \"components/ActionDialog/ActionDialog\";\n\ninterface DeleteSubscriptionGroupDialogProps {\n groupName: string;\n open: boolean;\n onConfirm: () => Promise;\n onCancel: () => void;\n}\n\nexport function DeleteSubscriptionGroupDialog(props: DeleteSubscriptionGroupDialogProps) {\n return (\n \n \n This will remove all existing user access for this subscription group\n \n \n );\n}\n","import React from \"react\";\nimport { Typography, styled } from \"@mui/material\";\nimport { designSystemColors } from \"@cpt/shared\";\n\nexport type SubscriptionHeaderProps = {\n title: string;\n totalCount: number | undefined;\n};\n\nconst Header = styled(Typography)(\n ({ theme }) => `\n padding: 12px 16px 10px 22px;\n color: ${designSystemColors.grey[\"800\"]};\n font-size: 0.875rem;\n font-weight: ${theme.typography.fontWeightBold};\n margin-left: 16px;\n margin-right: 16px;\n @media (min-width: 1200px) {\n border-top: 2px solid;\n border-color: ${designSystemColors.grey[\"200\"]};\n margin-right: 0px;\n }\n`\n);\n\nexport function SubscriptionHeader(props: SubscriptionHeaderProps) {\n const { title } = props;\n\n return
    {title}
    ;\n}\n","import React from \"react\";\nimport { ListItem } from \"@mui/material\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { inviteUserToSubscriptionGroup } from \"client/api/SubscriptionGroupApi\";\nimport type { InviteUserDialogProps } from \"components/Dialogs/InviteUserDialog\";\nimport { InviteUserDialog } from \"components/Dialogs/InviteUserDialog\";\nimport { ExternalLink } from \"components/ExternalLink/ExternalLink\";\nimport { UserGrantDescriptionList } from \"components/UserGrantDescription/UserGrantDescriptionList\";\nimport { UserGrantDescriptionTitle } from \"components/UserGrantDescription/UserGrantDescriptionTitle\";\n\ntype InviteUserToSubscriptionGroupProps = Pick & {\n subscriptionGroupId: string;\n onSubmitComplete: () => Promise | void;\n};\n\nconst grantValues = [\n {\n label: \"Administrator\",\n value: \"Admin\",\n },\n { label: \"Technical Manager\", value: \"Tech\" },\n { label: \"Billing Manager\", value: \"Billing\" },\n] as const;\n\nconst GrantsInfo = () => {\n return (\n <>\n \n \n \n Authenticate to any subscription in this subscription group as part of the Octopus Managers group\n \n Manage billing of any subscription in this subscription group\n Manage configuration of any subscription in this subscription group\n Manage access control for any subscription in this subscription group\n Rename or delete this subscription group\n Manage access control for this subscription group\n \n \n \n \n Authenticate to any subscription in this subscription group as part of the Octopus Managers group\n \n Manage configuration of any subscription in this subscription group\n Manage access control for any subscription in this subscription group\n Rename or delete this subscription group\n Manage access control for this subscription group\n \n \n \n Manage billing of any subscription in this subscription group\n \n \n );\n};\n\nexport function InviteUserToSubscriptionGroup(props: InviteUserToSubscriptionGroupProps) {\n const { show, onCancel, onSubmitComplete, subscriptionGroupId } = props;\n const { userInfo } = useUserContext();\n\n const onSubmit: InviteUserDialogProps[\"onSubmit\"] = async (email, firstName, lastName, grant) => {\n await inviteUserToSubscriptionGroup(\n subscriptionGroupId,\n email,\n `${firstName} ${lastName}`.trim(),\n `${userInfo?.firstName} ${userInfo?.lastName}`.trim(),\n grant\n );\n onSubmitComplete();\n };\n\n return (\n \n Visit the docs to learn\n about inviting users.\n

    \n }\n onCancel={onCancel}\n onSubmit={onSubmit}\n grantsInfo={}\n grantValues={grantValues}\n />\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport { Button, Dialog, DialogContent, DialogTitle, Stack, Typography } from \"@mui/material\";\nimport type { AxiosError } from \"axios\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { LoadablePage } from \"shared/LoadablePage\";\nimport type { CloudSubscriptionOrSubscriptionGroupUserGrantDto } from \"client/api/UserGrantApi\";\nimport { subscriptionGroupUserGrantsApi } from \"client/api/UserGrantApi\";\nimport type { SubscriptionGroupDto } from \"client/api/common/SubscriptionGroupDto\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { UserGrantsTable } from \"components/UserGrantTable/UserGrantsTable\";\nimport { UserGrantsInviteTable } from \"components/UserGrantsInviteTable/UserGrantsInviteTable\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { InviteUserToSubscriptionGroup } from \"./InviteUserToSubscriptionGroup\";\n\nexport interface AccessControlDialogProps {\n open: boolean;\n onClose: () => void;\n subscriptionGroup: SubscriptionGroupDto;\n}\n\ninterface AccessControlContentProps {\n subscriptionGroup: SubscriptionGroupDto;\n}\n\nfunction AccessControlContent(props: AccessControlContentProps) {\n const {\n subscriptionGroup: { id, name },\n } = props;\n const getRequest = useMemo(() => (id: string) => subscriptionGroupUserGrantsApi.listUserGrants(id), []);\n const getInvitesRequest = useMemo(() => (id: string) => subscriptionGroupUserGrantsApi.getInvites(id), []);\n\n const { hasPermissionForAsset } = useUserContext();\n const hasDeletePermission = hasPermissionForAsset(\n RbacPermissions.SubscriptionGroup.ManageAccessControl,\n id,\n undefined\n );\n const deleteGrantCheck = (grant: CloudSubscriptionOrSubscriptionGroupUserGrantDto) => hasDeletePermission;\n const deleteInviteCheck = () => hasDeletePermission;\n const [deleteError, setDeleteError] = useState();\n\n const { data, loading, error, refresh } = useAsyncRequest(getRequest, id);\n const {\n data: invitesData,\n loading: loadingInvites,\n error: invitesError,\n refresh: refreshInvites,\n } = useAsyncRequest(getInvitesRequest, id);\n\n const [showInvite, setShowInvite] = useState(false);\n\n const isLoading = loading || loadingInvites;\n const refreshAll = async () => {\n refreshInvites();\n refresh();\n };\n\n return (\n <>\n \n \n \n \n {name}\n \n Access controls\n \n \n \n setShowInvite(true)}\n sx={{ textTransform: \"none\" }}\n disableElevation\n >\n Invite User\n \n \n \n \n \n setShowInvite(false)}\n onSubmitComplete={async () => {\n await refreshAll();\n setShowInvite(false);\n }}\n />\n \n {deleteError && }\n \n {invitesData?.entities && invitesData?.entities.length > 0 && (\n \n )}\n \n \n \n \n );\n}\n\nexport function AccessControlDialog(props: AccessControlDialogProps) {\n const { subscriptionGroup, onClose, open } = props;\n return (\n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport { Box, Button, Link, styled } from \"@mui/material\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { deleteSubscriptionGroup, updateSubscriptionGroup } from \"client/api/SubscriptionGroupApi\";\nimport type { SubscriptionGroupDto } from \"client/api/common/SubscriptionGroupDto\";\nimport { CollapsibleList } from \"components/CollapsibleLayout/CollapsibleList\";\nimport { CloudSubscription } from \"components/Dashboard/CloudSubscriptions/CloudSubscription\";\nimport { ServerLicense } from \"components/Dashboard/ServerLicenses/ServerLicense\";\nimport { RenameDialog } from \"components/Dialogs/RenameDialog\";\nimport { Overflow, OverflowMenu } from \"components/OverflowMenu/OverflowMenu\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { DeleteSubscriptionGroupDialog } from \"areas/dashboard/components/SubscriptionGroups/DeleteSubscriptionGroupDialog\";\nimport { SubscriptionHeader } from \"areas/dashboard/components/SubscriptionHeader\";\nimport { AccessControlDialog } from \"./AccessControlDialog\";\n\ninterface GroupedSubscriptionsProps {\n subscriptionGroup: SubscriptionGroupDto;\n cloudSubscriptions?: CloudSubscriptionDto[];\n serverSubscriptions?: ServerLicenseDto[];\n refresh: () => void;\n doNotAutoExpand?: boolean;\n}\n\nconst SubscriptionsContainer = styled(\"div\")`\n display: grid;\n grid-template-columns: 1fr;\n margin-bottom: 16px;\n @media (min-width: 1200px) {\n grid-template-columns: 140px 1fr;\n }\n`;\n\nconst SubscriptionsListContainer = styled(\"div\")`\n margin-left: 16px;\n margin-right: 16px;\n @media (min-width: 1200px) {\n margin-left: 0px;\n }\n`;\n\nexport function GroupedSubscriptions({\n cloudSubscriptions,\n serverSubscriptions,\n subscriptionGroup,\n refresh,\n doNotAutoExpand,\n}: GroupedSubscriptionsProps) {\n const [showRenameGroupDialog, setShowRenameGroupDialog] = useState(false);\n const [showAccessControl, setShowAccessControl] = useState(false);\n const [showDeleteDialog, setShowDeleteDialog] = useState(false);\n\n const handleGroupRename = async (value: string) => {\n if (value !== subscriptionGroup.name) {\n await updateSubscriptionGroup({\n id: subscriptionGroup.id,\n name: value,\n });\n }\n\n setShowRenameGroupDialog(false);\n if (refresh) {\n refresh();\n }\n };\n\n const handleGroupDelete = async () => {\n await deleteSubscriptionGroup(subscriptionGroup.id);\n\n setShowDeleteDialog(false);\n if (refresh) {\n refresh();\n }\n };\n const renameItem = (\n \n setShowRenameGroupDialog(true)}\n >\n Rename\n \n \n );\n const accessControlItem = (\n \n setShowAccessControl(true)}\n sx={{ textTransform: \"none\" }}\n >\n Access Control\n \n \n );\n\n const leftActions = [renameItem];\n const rightActions = [accessControlItem];\n const overflowMenuItems = [];\n\n const canDeleteGroup = !cloudSubscriptions?.length && !serverSubscriptions?.length;\n if (canDeleteGroup) {\n const deleteGroupItem = Overflow.policyAuthorizedMenuItem(\n RbacPermissions.SubscriptionGroup.Delete,\n subscriptionGroup.id,\n undefined,\n \"Delete\",\n () => setShowDeleteDialog(true)\n );\n overflowMenuItems.push(deleteGroupItem);\n }\n\n return (\n <>\n setShowRenameGroupDialog(false)}\n submitRename={handleGroupRename}\n />\n setShowAccessControl(false)}\n subscriptionGroup={subscriptionGroup}\n />\n setShowDeleteDialog(false)}\n />\n\n }\n >\n \n \n
    \n {cloudSubscriptions && cloudSubscriptions.length > 0 && (\n \n )}\n
    \n \n {cloudSubscriptions?.map((entity, index) => (\n \n ))}\n \n
    \n \n
    \n {serverSubscriptions && serverSubscriptions.length > 0 && (\n \n )}\n
    \n \n {serverSubscriptions?.map((entity, index) => (\n \n ))}\n \n
    \n
    \n \n \n );\n}\n","import React from \"react\";\nimport { Button, Stack, Typography } from \"@mui/material\";\nimport { envConfig } from \"utils/envConfig\";\n\nexport type LicenseHeaderProps = {\n title: string;\n trialTitle: string;\n trialType?: \"cloud\" | \"server\";\n};\n\nexport function LicenseHeader(props: LicenseHeaderProps) {\n const { title, trialTitle, trialType } = props;\n\n const trialLink = trialType\n ? `${envConfig.OctopusComDomain}/start/${trialType}`\n : `${envConfig.OctopusComDomain}/start/`;\n\n return (\n \n \n \n {title}\n \n \n\n \n \n {trialTitle}\n \n \n \n );\n}\n","import React from \"react\";\nimport { LicenseHeader } from \"areas/dashboard/components/LicenseHeader\";\n\nexport function DashboardHeader() {\n return ;\n}\n","import React from \"react\";\nimport { Box, styled } from \"@mui/material\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { CloudSubscription } from \"components/Dashboard/CloudSubscriptions/CloudSubscription\";\nimport { ServerLicense } from \"components/Dashboard/ServerLicenses/ServerLicense\";\nimport { SubscriptionHeader } from \"./SubscriptionHeader\";\n\ninterface UngroupedSubscriptionsProps {\n cloudSubscriptions?: CloudSubscriptionDto[];\n serverSubscriptions?: ServerLicenseDto[];\n}\n\nconst SubscriptionsContainer = styled(\"div\")`\n display: grid;\n grid-template-columns: 1fr;\n margin-bottom: 16px;\n @media (min-width: 1200px) {\n grid-template-columns: 140px 1fr;\n }\n`;\n\nconst SubscriptionsListContainer = styled(\"div\")`\n margin-left: 16px;\n margin-right: 16px;\n @media (min-width: 1200px) {\n margin-left: 0px;\n }\n`;\n\nexport function UngroupedSubscriptions(props: UngroupedSubscriptionsProps) {\n const { cloudSubscriptions, serverSubscriptions } = props;\n return (\n <>\n \n \n
    \n {cloudSubscriptions && cloudSubscriptions.length > 0 && (\n \n )}\n
    \n \n {cloudSubscriptions?.map((entity, index) => (\n \n ))}\n \n
    \n \n
    \n {serverSubscriptions && serverSubscriptions.length > 0 && (\n \n )}\n
    \n \n {serverSubscriptions?.map((entity, index) => (\n \n ))}\n \n
    \n
    \n \n );\n}\n","import React, { useMemo } from \"react\";\nimport _ from \"lodash\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { nameof } from \"utils/nameof\";\nimport { LoadablePage } from \"shared/LoadablePage\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { getCloudSubscriptions } from \"client/api/CloudSubscriptionApi\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { getServerLicenses } from \"client/api/ServerLicenseApi\";\nimport { getSubscriptionGroups } from \"client/api/SubscriptionGroupApi\";\nimport type { SubscriptionGroupDto } from \"client/api/common/SubscriptionGroupDto\";\nimport { OldControlCenterBanner } from \"components/Banner/OldControlCenterBanner\";\nimport { CollapsibleList } from \"components/CollapsibleLayout/CollapsibleList\";\nimport { PaperLayout } from \"components/PaperLayout/PaperLayout\";\nimport { GroupedSubscriptions } from \"areas/dashboard/components/SubscriptionGroups/GroupedSubscriptions\";\nimport { DashboardHeader } from \"../components/DashboardHeader\";\nimport { UngroupedSubscriptions } from \"./UngroupedSubscriptions\";\n\ntype GroupedSubscriptions = {\n group: SubscriptionGroupDto;\n cloudSubscriptions: CloudSubscriptionDto[];\n serverLicenses: ServerLicenseDto[];\n};\n\nfunction entitiesWithoutSubscriptionGroup(entities: T[]) {\n return entities.filter(({ subscriptionGroup }) => !subscriptionGroup);\n}\n\nfunction groupBySubscriptionGroup(entities: T[]) {\n return _(entities)\n .filter(nameof(\"subscriptionGroup\"))\n .groupBy((dto) => dto.subscriptionGroup?.id)\n .value();\n}\n\nfunction groupEntitiesBySubscriptionGroups(\n subscriptionGroups: SubscriptionGroupDto[] | undefined,\n cloudSubscriptions: CloudSubscriptionDto[],\n serverLicenses: ServerLicenseDto[]\n) {\n const result: GroupedSubscriptions[] = [];\n\n if (!subscriptionGroups) {\n return result;\n }\n\n const groupedCloud = groupBySubscriptionGroup(cloudSubscriptions);\n const groupedServer = groupBySubscriptionGroup(serverLicenses);\n const idsOfGroupsWithSubscriptions = _.union(Object.keys(groupedCloud), Object.keys(groupedServer));\n\n for (const groupId of idsOfGroupsWithSubscriptions) {\n const group = subscriptionGroups.find((g) => g.id === groupId);\n if (!group) {\n continue;\n }\n\n result.push({\n group: group,\n cloudSubscriptions: groupedCloud[groupId] ?? [],\n serverLicenses: groupedServer[groupId] ?? [],\n });\n }\n\n return result;\n}\n\nfunction findEmptyGroups(\n subscriptionGroups: SubscriptionGroupDto[] | undefined,\n cloudSubscriptions: CloudSubscriptionDto[],\n serverLicenses: ServerLicenseDto[]\n) {\n if (!subscriptionGroups) {\n return [];\n }\n\n return subscriptionGroups.filter(\n (group) =>\n cloudSubscriptions.every((entity) => entity.subscriptionGroup?.id !== group.id) &&\n serverLicenses.every((entity) => entity.subscriptionGroup?.id !== group.id)\n );\n}\n\nfunction sortByFriendlyName(subscriptionA: CloudSubscriptionDto, subscriptionB: CloudSubscriptionDto) {\n return subscriptionA.friendlyName.localeCompare(subscriptionB.friendlyName);\n}\n\nfunction sortById(subscriptionA: ServerLicenseDto, subscriptionB: ServerLicenseDto) {\n return subscriptionA.serial.localeCompare(subscriptionB.serial);\n}\n\nfunction sortByName(groupA: SubscriptionGroupDto, groupB: SubscriptionGroupDto) {\n return groupA.name.localeCompare(groupB.name);\n}\n\nexport function DashboardProducts() {\n const {\n data: cloudSubscriptions = { entities: [], totalCount: undefined },\n loading: loadingCloudSubscriptions,\n error: cloudSubscriptionsError,\n refresh: cloudRefresh,\n } = useAsyncRequest(getCloudSubscriptions, {});\n const {\n data: serverLicenses = { entities: [], totalCount: undefined },\n loading: loadingServerLicenses,\n error: serverLicensesError,\n refresh: serverRefresh,\n } = useAsyncRequest(getServerLicenses, {});\n const {\n data: subscriptionGroups = { entities: [], totalCount: undefined },\n loading: loadingSubscriptionGroups,\n error: subscriptionGroupsError,\n refresh: subscriptionGroupsRefresh,\n } = useAsyncRequest(getSubscriptionGroups);\n\n const loading = useMemo(\n () => loadingCloudSubscriptions || loadingServerLicenses || loadingSubscriptionGroups,\n [loadingCloudSubscriptions, loadingServerLicenses, loadingSubscriptionGroups]\n );\n\n const groupedSubscriptions = groupEntitiesBySubscriptionGroups(\n subscriptionGroups.entities,\n cloudSubscriptions.entities,\n serverLicenses.entities\n );\n const emptyGroups = findEmptyGroups(\n subscriptionGroups.entities,\n cloudSubscriptions.entities,\n serverLicenses.entities\n );\n\n return (\n \n \n \n \n \n \n \n \n {groupedSubscriptions.map(({ group, cloudSubscriptions, serverLicenses }: GroupedSubscriptions) => (\n \n \n \n ))}\n {emptyGroups?.sort(sortByName).map((subscriptionGroup: SubscriptionGroupDto) => (\n \n \n \n ))}\n \n );\n}\n","import React from \"react\";\nimport { PaperLayout } from \"components/PaperLayout/PaperLayout\";\nimport { NavigationAlert } from \"components/alert/NavigationAlert\";\nimport { DashboardProducts } from \"areas/dashboard/components/DashboardProducts\";\n\nexport const ClassicDashboard = () => {\n return (\n
    \n \n \n \n \n
    \n );\n};\n","import React from \"react\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { PaperLayout } from \"components/PaperLayout/PaperLayout\";\nimport { NavigationAlert } from \"components/alert/NavigationAlert\";\n\nexport const TwentyFiveRedesignDashboard = () => {\n const useTwentyFiveRedesign = useFeatureFlag(\"SubscriptionVisibilityAndContext\");\n\n if (!useTwentyFiveRedesign) {\n throw new Error(\"Missing required feature flag\");\n }\n\n return (\n
    \n \n \n \n TwentyFiveRedesign dashboard\n
    \n );\n};\n","import React from \"react\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { ClassicDashboard } from \"./components/views/ClassicDashboard\";\nimport { TwentyFiveRedesignDashboard } from \"./components/views/TwentyFiveRedesignDashboard\";\n\nexport function Dashboard() {\n const useTwentyFiveRedesign = useFeatureFlag(\"SubscriptionVisibilityAndContext\");\n const DashboardView = useTwentyFiveRedesign ? TwentyFiveRedesignDashboard : ClassicDashboard;\n\n return ;\n}\n","import type { DateTime } from \"luxon\";\nimport type { DistributiveOmit } from \"utils/DistributiveOmit/DistributiveOmit\";\nimport type {\n SupportOptions,\n ValidMachineValues,\n ValidProjectValues,\n ValidTenantValues,\n} from \"areas/purchasing/components/CheckoutPlanConfigurationStep\";\nimport axiosClient from \"../axios-client\";\n\nconst BASE_URL = \"purchase\";\n\nexport type ZuoraRsaSignature = {\n key: string;\n signature: string;\n success: boolean;\n tenantId: string;\n token: string;\n};\n\nexport enum ProductType {\n StarterServer,\n StarterCloud,\n ProfessionalServer,\n ProfessionalCloud,\n}\n\nexport enum TaxRateType {\n Percentage = \"Percentage\",\n FlatFee = \"FlatFee\",\n}\n\nexport interface PricingParameters {\n projects: number;\n tenants: number;\n machines: number;\n taskCap?: number;\n}\n\nexport interface OrderPreviewRequest {\n product: ProductType;\n city?: string;\n country?: string;\n county?: string;\n postalCode?: string;\n state?: string;\n pricingParameters?: PricingParameters;\n}\n\nexport interface OrderPreview {\n termStartDate: DateTime;\n termEndDate: DateTime;\n\n // Amount including any discounts\n totalAmountExcludingTax: number;\n\n // Amount including any discounts and tax\n totalAmount: number;\n\n discountAmount: number;\n chargeDescription: string;\n chargeName: string;\n productName: string;\n currencyCode: string;\n orderItems: OrderPreviewItem[];\n taxItems: OrderPreviewTaxItem[];\n}\n\nexport interface OrderPreviewTaxItem {\n amount: number;\n rate: number;\n name: string;\n rateType: TaxRateType;\n}\n\nexport interface OrderPreviewItem {\n serviceStartDate: DateTime;\n serviceEndDate: DateTime;\n amountWithoutTax: number;\n taxAmount: number;\n chargeDescription: string;\n chargeName: string;\n quantity: number;\n}\n\nexport interface PurchasePreviewRequestDto {\n billingProduct: ProductType;\n city?: string;\n country?: string;\n county?: string;\n postalCode?: string;\n state?: string;\n pricingParameters?: PricingParameters;\n}\n\ninterface OrderPreviewDto {\n serviceStartDate: DateTime;\n serviceEndDate: DateTime;\n totalAmount: number;\n amountWithoutTax: number;\n taxAmount: number;\n productName: string;\n currencyCode: string;\n orderItems: OrderPreviewItemDto[];\n taxSummaryItems: OrderPreviewTaxationItemDto[];\n}\n\ninterface OrderPreviewItemDto {\n serviceStartDate: DateTime;\n serviceEndDate: DateTime;\n amountWithoutTax: number;\n taxAmount: number;\n chargeDescription: string;\n chargeName: string;\n chargeLineTaxItems: OrderPreviewTaxationItemDto[];\n quantity: number;\n}\n\ninterface OrderPreviewTaxationItemDto {\n taxName: string;\n taxRate: number;\n taxAmount: number;\n taxRateType: TaxRateType;\n}\n\nexport interface PurchasePreviewResponseDto {\n orderPreview: OrderPreviewDto;\n error: \"Unknown\" | \"BadRequest\" | null;\n}\n\ntype BillingContactAddress = {\n address1: string;\n country: string;\n city: string;\n state: string;\n postalCode: string;\n};\n\ntype BillingContact = BillingContactAddress & {\n firstName: string;\n lastName: string;\n email: string;\n phone?: string;\n};\n\nexport type AdvancedDigitalSignature = {\n tenantId: string;\n token: string;\n timestamp: string;\n pageId: string;\n refId: string;\n signature: string;\n errorCode?: string;\n fieldPassthrough1?: string;\n fieldPassthrough2?: string;\n fieldPassthrough3?: string;\n fieldPassthrough4?: string;\n fieldPassthrough5?: string;\n};\n\ntype CheckoutRequest = {\n serial: string;\n billingProduct: ProductType;\n pricingParameters?: PricingParameters;\n billToContact: BillingContact;\n advancedDigitalSignature: AdvancedDigitalSignature;\n} & (\n | {\n businessAccount: true;\n companyName: string;\n taxId?: string;\n }\n | {\n businessAccount: false;\n }\n);\n\ninterface CheckoutResponseDto {\n success: boolean;\n}\n\ntype OrderThroughSalesRequest = DistributiveOmit &\n OrderThroughSalesAdditionalFields;\n\ntype OrderThroughSalesAdditionalFields = {\n reason: string;\n};\n\ntype OrderThroughSalesResponseDto = {\n success: boolean;\n};\n\ntype ContactSalesPlanConfigRequestDto = {\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n organization?: string;\n country: string;\n message: string;\n projectQuantity?: ValidProjectValues;\n taskQuantity?: \"5\" | \"10\" | \"20\" | \">40\";\n support?: SupportOptions;\n tenantQuantity?: ValidTenantValues;\n machineQuantity?: ValidMachineValues;\n source: \"Checkout\";\n targetPlan: ProductType;\n licenseSerial?: string;\n};\n\ntype ContactSalesPlanConfigResponseDto = {\n success: boolean;\n};\n\nexport type GeolocationResponseDto =\n | {\n success: true;\n isoCode: string;\n }\n | {\n success: false;\n errorMessage: string;\n };\n\nexport const getOrderPreview = async (request: OrderPreviewRequest, signal: AbortSignal): Promise => {\n function mapToDto(source: OrderPreviewRequest): PurchasePreviewRequestDto {\n return {\n city: source.city,\n billingProduct: source.product,\n country: source.country,\n county: source.county,\n postalCode: source.postalCode,\n state: source.state,\n pricingParameters: source.pricingParameters,\n };\n }\n\n function mapToOrderPreview(source: PurchasePreviewResponseDto): OrderPreview {\n const firstOrderItem = source.orderPreview.orderItems[0];\n return {\n chargeDescription: firstOrderItem?.chargeDescription ?? \"\",\n totalAmountExcludingTax: source.orderPreview.amountWithoutTax,\n discountAmount: 0,\n currencyCode: source.orderPreview.currencyCode,\n chargeName: firstOrderItem?.chargeName ?? \"\",\n productName: source.orderPreview.productName,\n termStartDate: source.orderPreview.serviceStartDate,\n termEndDate: source.orderPreview.serviceEndDate,\n totalAmount: source.orderPreview.totalAmount,\n orderItems:\n source.orderPreview.orderItems?.map((item) => ({\n serviceStartDate: item.serviceStartDate,\n serviceEndDate: item.serviceEndDate,\n amountWithoutTax: item.amountWithoutTax,\n taxAmount: item.taxAmount,\n chargeDescription: item.chargeDescription,\n chargeName: item.chargeName,\n quantity: item.quantity,\n })) ?? [],\n taxItems:\n source.orderPreview.taxSummaryItems?.map((i) => ({\n name: i.taxName,\n rate: i.taxRate,\n amount: i.taxAmount,\n rateType: i.taxRateType,\n })) ?? [],\n };\n }\n\n const response = await axiosClient.post(`${BASE_URL}/preview`, mapToDto(request), {\n signal,\n });\n return mapToOrderPreview(response.data);\n};\n\nexport const checkout = async (request: CheckoutRequest, signal?: AbortSignal) => {\n const response = await axiosClient.post(`${BASE_URL}/checkout`, request, {\n signal,\n });\n return response.data;\n};\n\nexport const getZuoraRsaSignature = async (signal?: AbortSignal) => {\n const response = await axiosClient.get(`${BASE_URL}/rsa-signature`, {\n signal,\n });\n return response.data;\n};\n\nexport const orderThroughSales = async (request: OrderThroughSalesRequest, signal?: AbortSignal) => {\n const response = await axiosClient.post(`${BASE_URL}/contact-sales`, request, {\n signal,\n });\n return response.data;\n};\n\nexport const getGeolocation = async (ipAddress?: string, signal?: AbortSignal) => {\n const requestParams = ipAddress ? `?ipAddress=${ipAddress}` : \"\";\n const response = await axiosClient.get(`${BASE_URL}/geolocation${requestParams}`, {\n signal,\n });\n return response.data;\n};\n\nexport const checkoutContactSalesRequest = async (request: ContactSalesPlanConfigRequestDto, signal?: AbortSignal) => {\n const response = await axiosClient.post(\n `${BASE_URL}/contact-sales-plan-configuration`,\n request,\n {\n signal,\n }\n );\n return response.data;\n};\n","import type { Component, ErrorInfo, FunctionComponent, PropsWithChildren, ReactElement } from \"react\";\nimport React from \"react\";\nimport { SeverityLevel } from \"FrontendMonitoring\";\nimport { ErrorBoundary } from \"react-error-boundary\";\nimport { useFrontendMonitoring } from \"contexts/FrontendMonitoringProvider/FrontendMonitoringProvider\";\n\ninterface MonitoredErrorBoundaryProps extends PropsWithChildren {\n fallback: ReactElement | null;\n onError?: (error: Error, info: ErrorInfo) => void;\n}\n\nexport const MonitoredErrorBoundary = ({ children, fallback, onError }: MonitoredErrorBoundaryProps) => {\n const { frontendMonitoring } = useFrontendMonitoring();\n\n const onErrorHandler = (error: Error, info: ErrorInfo) => {\n frontendMonitoring.trackException(\n { exception: error, severityLevel: SeverityLevel.Error },\n { reactErrorInfo: info }\n );\n onError && onError(error, info);\n };\n\n return (\n \n {children}\n \n );\n};\n","import React from \"react\";\nimport type { ReactNode } from \"react\";\nimport ReplayIcon from \"@mui/icons-material/Replay\";\nimport { Typography, Alert, AlertTitle, Link, Button, styled } from \"@mui/material\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\n\nconst RetryButton = styled(Button)`\n text-transform: none;\n background-color: rgba(26, 119, 202, 0.06);\n color: #1a77ca;\n font-weight: 700;\n line-height: 24px;\n height: 44px;\n\n &.MuiButton-root:hover,\n &.MuiButton-root:focus {\n background-color: rgba(26, 119, 202, 0.16);\n }\n`;\n\nexport const ErrorMessageWithTryAgainButtonOrContactSales = ({ retry }: { retry?: () => void }) => {\n return (\n <>\n \n Please try again. If you need help, please contact our friendly{\" \"}\n \n sales\n {\" \"}\n team\n \n {retry && (\n \n \n Retry\n \n )}\n \n );\n};\n\nexport const ErrorMessageTryAgainOrContactSupport = () => {\n return (\n \n Please try again. If you need help, please contact our friendly{\" \"}\n \n support\n {\" \"}\n team\n \n );\n};\n\nexport const ErrorMessageContactSupport = () => {\n return (\n \n Please contact our friendly{\" \"}\n \n support\n {\" \"}\n team\n \n );\n};\n\nexport const CustomErrorAlert = ({\n title = \"Something went wrong!\",\n message,\n}: {\n title?: ReactNode;\n message: ReactNode;\n}) => {\n return (\n \n {title}\n {message}\n \n );\n};\n","import React from \"react\";\nimport { SvgIcon } from \"@mui/material\";\n\ninterface AsteriskIconProps {\n error?: boolean;\n ariaLabel?: string;\n}\n\nexport function AsteriskIcon(props: AsteriskIconProps) {\n const { error, ariaLabel } = props;\n const fillColor = error ? \"#C95340\" : \"#7C98B4\";\n\n return (\n \n \n \n );\n}\n","import React from \"react\";\nimport type { InputBaseComponentProps } from \"@mui/material\";\nimport { Input, InputAdornment, styled } from \"@mui/material\";\nimport { AsteriskIcon } from \"./AsteriskIcon\";\n\ninterface CheckoutTextInputProps {\n id?: string;\n inputProps?: InputBaseComponentProps;\n required?: boolean;\n error?: boolean;\n placeholder?: string;\n endAdornment?: React.ReactNode;\n fullWidth?: boolean;\n value?: unknown;\n onChange?: React.ChangeEventHandler;\n className?: string;\n}\n\nconst TextInput = styled(Input)`\n overflow: hidden;\n box-sizing: border-box;\n border: 1px solid #7c98b4;\n border-radius: 8px;\n height: 50px;\n &.Mui-focused:not(.Mui-error) {\n border-color: #0d80d8;\n }\n &.Mui-error {\n border-color: #c95340;\n }\n input {\n box-sizing: border-box;\n padding: 13px 20px;\n height: 100%;\n }\n .MuiInputAdornment-positionEnd {\n padding-right: 20px;\n margin-left: 0;\n }\n`;\n\nconst StyledInputAdornment = styled(InputAdornment)`\n pointer-events: none;\n`;\n\nexport function CheckoutTextInput(props: CheckoutTextInputProps) {\n const {\n id,\n required,\n placeholder,\n error,\n inputProps,\n endAdornment,\n fullWidth = true,\n value,\n onChange,\n className,\n } = props;\n\n return (\n \n \n \n ))\n }\n />\n );\n}\n","import React from \"react\";\nimport { SvgIcon } from \"@mui/material\";\n\ninterface ChevronDownIconProps {\n fill?: string;\n}\n\nexport function ChevronDownIcon(props: ChevronDownIconProps) {\n const fillColor = props.fill || \"#11181D\";\n\n return (\n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport { Search } from \"@mui/icons-material\";\nimport type {\n AutocompleteChangeDetails,\n AutocompleteChangeReason,\n AutocompleteInputChangeReason,\n UseAutocompleteProps,\n InputBaseComponentProps,\n} from \"@mui/material\";\nimport { Autocomplete, CircularProgress, IconButton, InputAdornment, styled } from \"@mui/material\";\nimport { matchSorter } from \"match-sorter\";\nimport { CheckoutTextInput } from \"./CheckoutTextInput\";\nimport { ChevronDownIcon } from \"./ChevronDownIcon\";\n\nexport interface AutocompleteOption {\n label: string;\n value: unknown;\n}\n\ninterface CheckoutAutocompleteInputProps {\n id?: string;\n options?: AutocompleteOption[];\n error?: boolean;\n required?: boolean;\n placeholder?: string;\n fullWidth?: boolean;\n onInputChange?: (\n event: React.SyntheticEvent,\n value: string,\n reason: AutocompleteInputChangeReason\n ) => void;\n onChange?: (\n event: React.SyntheticEvent,\n value: unknown,\n reason: AutocompleteChangeReason,\n details?: AutocompleteChangeDetails | undefined\n ) => void;\n freeSolo?: boolean;\n value?: AutocompleteOption | string | null;\n isOptionEqualToValue?: (option: unknown, value: unknown) => boolean;\n loading?: boolean;\n filterOptions?: UseAutocompleteProps<\n unknown,\n boolean | undefined,\n boolean | undefined,\n boolean | undefined\n >[\"filterOptions\"];\n getOptionKey?: (option: unknown) => string | number;\n InputProps?: InputBaseComponentProps;\n}\n\nconst AutocompleteInput = styled(Autocomplete)`\n .MuiInput-root {\n padding: 0px;\n }\n .MuiInput-input.MuiInput-input {\n box-sizing: border-box;\n padding: 13px 20px;\n height: 100%;\n }\n`;\n\nconst filterOptionsDefault = (options: unknown[], state: { inputValue: string }) => {\n return matchSorter(options, state.inputValue, { keys: [\"label\"] });\n};\n\nexport function CheckoutAutocompleteInput(props: CheckoutAutocompleteInputProps) {\n const {\n id,\n options = [],\n error,\n placeholder,\n fullWidth = true,\n onInputChange,\n onChange,\n required,\n freeSolo = false,\n value,\n isOptionEqualToValue,\n filterOptions = filterOptionsDefault,\n loading,\n getOptionKey,\n InputProps,\n } = props;\n\n const [open, setOpen] = useState(false);\n const displayLoadingState = open && loading;\n\n return (\n {\n setOpen(true);\n }}\n onClose={() => {\n setOpen(false);\n }}\n renderInput={(params) => (\n
    \n \n {displayLoadingState ? (\n \n ) : options.length ? (\n setOpen(!open)}\n sx={{ marginLeft: \"-8px\", marginRight: \"-8px\" }}\n >\n \n \n ) : (\n \n )}\n \n }\n fullWidth={fullWidth}\n inputProps={{\n ...InputProps,\n ...params.inputProps,\n ref: (el: JSX.Element) => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n (params.inputProps.ref as React.MutableRefObject).current = el;\n InputProps && InputProps.ref(el);\n },\n }}\n />\n
    \n )}\n getOptionKey={getOptionKey}\n onKeyDown={(event) => {\n // prefer home and end keys to change cursor position of the text input rather than active item of the listbox\n if (event.key === \"Home\") {\n event.defaultMuiPrevented = true;\n } else if (event.key === \"End\") {\n event.defaultMuiPrevented = true;\n }\n }}\n />\n );\n}\n","import React from \"react\";\nimport type { AutocompleteChangeDetails, AutocompleteChangeReason, InputBaseComponentProps } from \"@mui/material\";\nimport { CheckoutAutocompleteInput } from \"./CheckoutAutocompleteInput\";\n\ntype OnChange = (\n event: React.SyntheticEvent,\n value: unknown | DropdownAutocompleteOption,\n reason: AutocompleteChangeReason,\n details?: AutocompleteChangeDetails | undefined\n) => void;\n\nexport interface DropdownAutocompleteOption {\n label: string;\n value: string;\n}\n\nexport function isDropdownAutocompleteOption(\n obj: string | DropdownAutocompleteOption | null | undefined\n): obj is DropdownAutocompleteOption {\n return obj !== null && typeof obj !== \"undefined\" && typeof obj !== \"string\" && obj.value !== undefined;\n}\n\ntype SetOption = (value: DropdownAutocompleteOption | null) => void;\n\ninterface CheckoutDropdownInputProps {\n id?: string;\n options: DropdownAutocompleteOption[];\n error?: boolean;\n required?: boolean;\n placeholder?: string;\n fullWidth?: boolean;\n value?: DropdownAutocompleteOption | null;\n onSelectOption?: (value: unknown, setOption?: SetOption) => void;\n setOption?: SetOption;\n isOptionEqualToValue?: \"valueMatch\" | ((option: unknown, value: unknown) => boolean);\n InputProps?: InputBaseComponentProps;\n}\n\nexport const getOptionByValue = (\n options: DropdownAutocompleteOption[],\n value: unknown | { label: string; value: string }\n) => {\n if (typeof value === \"object\" && value !== null && \"value\" in value && value.value !== null) {\n const v = value.value;\n if (typeof v === \"string\") {\n const option = options.find((item) => item.value === v);\n return option;\n }\n }\n return undefined;\n};\n\nexport function CheckoutDropdownInput(props: CheckoutDropdownInputProps) {\n const {\n id,\n options,\n error,\n required,\n placeholder = \"Please select an option\",\n fullWidth = true,\n value,\n setOption,\n InputProps,\n } = props;\n\n const isOptionEqualToValueMatchByValue = (option: unknown, value: unknown) => {\n // The usual default for MUI autocomplete is referential equality which can be a bit awkward. e.g. when using react-hook-form\n return JSON.stringify(option) === JSON.stringify(value);\n };\n\n const isOptionEqualToValue =\n props.isOptionEqualToValue === \"valueMatch\" ? isOptionEqualToValueMatchByValue : props.isOptionEqualToValue;\n\n const onChange: OnChange = (_event, value, reason) => {\n if (reason === \"selectOption\" && onSelectOptionDefault) {\n onSelectOptionDefault(value, setOption);\n }\n };\n\n const onSelectOptionDefault = (value: unknown | { label: string; value: string }, setOption?: SetOption) => {\n const option = getOptionByValue(options, value);\n setOption && setOption(option ?? null);\n };\n\n return (\n \n );\n}\n","import React from \"react\";\nimport { Button, styled } from \"@mui/material\";\nimport type { ButtonProps } from \"@mui/material\";\n\nconst PrimaryButton = styled(Button)`\n text-transform: none;\n font-weight: 600;\n font-size: 15px;\n color: #ffffff;\n background-color: #3573ce;\n line-height: 140%;\n height: 44px;\n`;\n\nconst SecondaryButton = styled(Button)`\n text-transform: none;\n background-color: rgba(26, 119, 202, 0.06);\n color: #1a77ca;\n font-weight: 700;\n line-height: 24px;\n height: 44px;\n\n &.MuiButton-root:hover,\n &.MuiButton-root:focus {\n background-color: rgba(26, 119, 202, 0.16);\n }\n`;\n\nexport function CheckoutPrimaryButton(props: ButtonProps) {\n return ;\n}\n\nexport function CheckoutSecondaryButton(props: ButtonProps) {\n return ;\n}\n","import React from \"react\";\nimport { SvgIcon } from \"@mui/material\";\n\nexport function TentacleHeartIcon() {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport ErrorOutlineIcon from \"@mui/icons-material/ErrorOutline\";\nimport { CircularProgress, Grid, keyframes, styled } from \"@mui/material\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nconst Container = styled(Grid)`\n width: 100%;\n height: 100%;\n display: flex;\n align-items: center;\n justify-content: center;\n text-align: center;\n min-height: 46px;\n padding: 8px 12px 8px 12px;\n gap: 8px;\n`;\nconst LoadingContainer = styled(Container)`\n background: ${themeTokens.color.callout.background.info.default};\n`;\nconst ErrorContainer = styled(Container)`\n background: ${themeTokens.color.callout.background.danger.default};\n`;\n\nconst LoadingText = styled(\"div\")`\n font-size: 16px;\n font-weight: 400;\n color: ${themeTokens.color.callout.text.info};\n`;\n\nconst ErrorText = styled(\"div\")`\n font-size: 16px;\n font-weight: 400;\n color: ${themeTokens.color.callout.text.danger};\n`;\n\nconst spin = keyframes`\nto { transform: rotate(360deg); }\n`;\n\nconst SmallSpinner = styled(\"div\")`\n animation: ${spin} 1.5s linear infinite;\n height: 20px;\n`;\n\ntype LoadingOverlayProps = React.PropsWithChildren<{\n loading?: boolean;\n small?: boolean;\n error?: Error;\n loadingLabel?: string;\n secondaryLoadingLabel?: string;\n errorLabel?: string;\n}>;\nfunction LoadingPlaceholder(props: LoadingOverlayProps) {\n const { children, loading, error, loadingLabel, secondaryLoadingLabel, errorLabel, small = false } = props;\n\n return (\n <>\n {!loading && !error && children}\n {loading && !error && (\n \n \n {loadingLabel && {loadingLabel ?? \"Loading\"}}\n {secondaryLoadingLabel && {secondaryLoadingLabel}}\n \n )}\n\n {error && !loading && (\n \n {\" \"}\n {errorLabel ?? error.message}\n \n )}\n \n );\n}\n\nexport default LoadingPlaceholder;\n","import LoadingPlaceholder from \"./LoadingPlaceholder\";\n\nexport default LoadingPlaceholder;\n","import * as React from \"react\";\nimport { styled } from \"@mui/material\";\nimport { borderRadius, colorScales } from \"@octopusdeploy/design-system-tokens\";\n\ntype ResourceLinkProps = {\n icon: React.ReactNode;\n label: string;\n href: string;\n};\n\n// Should be using the design system tokens here text.button.default.small\n// but currently this app is using an outdated version of it which doesn't have the required tokens or the tokens have changed values.\nconst ResourceLinkButton = styled(\"a\")`\n webkitfontsmoothing: \"antialiased\";\n display: flex;\n align-items: center;\n justify-content: flex-start;\n transition-timing-function: ease-in-out;\n transition-property: background-color, border-color, outline, color, fill;\n transition-duration: 0.2s;\n border-radius: ${borderRadius.medium};\n // padding-inline-start: space[12];\n padding-inline-start: 0.75rem;\n // padding-inline-end: space[12];\n padding-inline-end: 0.75rem;\n white-space: nowrap;\n //color: themeTokens.color.button.text.neutral,\n color: ${colorScales.slate[800]};\n //background: themeTokens.color.button.background.neutral.default,\n background: ${colorScales.slate[100]};\n // font: text.button.default.small;\n //padding: space[6];\n padding-left: 0.375rem;\n padding-right: 0.375rem;\n height: 40px;\n gap: 6px;\n\n svg {\n // fill: themeTokens.color.button.icon.neutral;\n fill: ${colorScales.slate[800]};\n }\n \":hover\": {\n // background: themeTokens.color.button.background.neutral.hover;\n background: ${colorScales.slate[200]};\n // color: themeTokens.color.button.text.neutral;\n color: ${colorScales.slate[800]};\n }\n \":focus-visible\": {\n //background: themeTokens.color.button.background.neutral.hover;\n background: ${colorScales.slate[200]};\n }\n \":active\": {\n // background: themeTokens.color.button.background.neutral.pressed;\n background: ${colorScales.slate[200]};\n // color: themeTokens.color.button.text.neutral;\n color: ${colorScales.slate[800]};\n }\n`;\n\nexport function ResourceLink({ label, href, icon }: ResourceLinkProps) {\n return (\n \n {icon}\n {label}\n \n );\n}\n","export const DarkStyle: { [key: string]: React.CSSProperties } = {\n \"hljs-comment\": {\n color: \"#d4d0ab\",\n },\n \"hljs-quote\": {\n color: \"#d4d0ab\",\n },\n \"hljs-variable\": {\n color: \"#ffa07a\",\n },\n \"hljs-template-variable\": {\n color: \"#ffa07a\",\n },\n \"hljs-tag\": {\n color: \"#ffa07a\",\n },\n \"hljs-name\": {\n color: \"#ffa07a\",\n },\n \"hljs-selector-id\": {\n color: \"#ffa07a\",\n },\n \"hljs-selector-class\": {\n color: \"#ffa07a\",\n },\n \"hljs-regexp\": {\n color: \"#ffa07a\",\n },\n \"hljs-deletion\": {\n color: \"#ffa07a\",\n },\n \"hljs-number\": {\n color: \"#f5ab35\",\n },\n \"hljs-built_in\": {\n color: \"#f5ab35\",\n },\n \"hljs-builtin-name\": {\n color: \"#f5ab35\",\n },\n \"hljs-literal\": {\n color: \"#f5ab35\",\n },\n \"hljs-type\": {\n color: \"#f5ab35\",\n },\n \"hljs-params\": {\n color: \"#f5ab35\",\n },\n \"hljs-meta\": {\n color: \"#f5ab35\",\n },\n \"hljs-link\": {\n color: \"#f5ab35\",\n },\n \"hljs-attribute\": {\n color: \"#ffd700\",\n },\n \"hljs-string\": {\n color: \"#abe338\",\n },\n \"hljs-symbol\": {\n color: \"#abe338\",\n },\n \"hljs-bullet\": {\n color: \"#abe338\",\n },\n \"hljs-addition\": {\n color: \"#abe338\",\n },\n \"hljs-title\": {\n color: \"#00e0e0\",\n },\n \"hljs-section\": {\n color: \"#00e0e0\",\n },\n \"hljs-keyword\": {\n color: \"#dcc6e0\",\n },\n \"hljs-selector-tag\": {\n color: \"#dcc6e0\",\n },\n hljs: {\n display: \"block\",\n overflowX: \"auto\",\n background: \"#2b2b2b\",\n color: \"#f8f8f2\",\n padding: \"0.5em\",\n },\n \"hljs-emphasis\": {\n fontStyle: \"italic\",\n },\n \"hljs-strong\": {\n fontWeight: \"bold\",\n },\n};\n","import React from \"react\";\nimport { styled } from \"@mui/material\";\n\nconst Container = styled(\"div\")(({ theme }) => ({\n position: \"relative\",\n width: \"100%\",\n height: \"100%\",\n}));\n\nconst Overlay = styled(\"div\")<{ scrollbarHeight?: number }>(({ scrollbarHeight }) => ({\n position: \"absolute\",\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n width: \"100%\",\n height: scrollbarHeight ? `calc(100% - ${scrollbarHeight}px)` : \"100%\",\n transition: \".5s ease\",\n opacity: 0,\n background: \"rgba(0, 0, 0, 0.5)\",\n \"&:hover\": {\n opacity: 1,\n },\n}));\n\nconst IconContainer = styled(\"div\")(({ theme }) => ({\n position: \"absolute\",\n marginLeft: \"auto\",\n top: 0,\n right: 0,\n padding: 8,\n color: theme.palette.text.primary,\n opacity: 1,\n}));\n\nconst HoverTextContainer = styled(\"div\")(({ theme }) => ({\n position: \"absolute\",\n margin: \"auto\",\n width: \"100%\",\n height: \"100%\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n textAlign: \"center\",\n color: theme.palette.text.primary,\n}));\n\nconst HoverText = styled(\"h2\")(({ theme }) => ({\n color: theme.palette.primary.contrastText,\n}));\n\ntype HoverOverlayProps = React.PropsWithChildren<{\n onClick?: () => void;\n hoverText?: string;\n hoverIcon?: React.ReactNode;\n disabled?: boolean;\n scrollbarHeight?: number;\n}>;\n\nfunction HoverOverlay(props: HoverOverlayProps) {\n const { disabled, children, onClick, hoverIcon, hoverText, scrollbarHeight } = props;\n if (disabled) {\n return {children};\n }\n\n return (\n \n {children}\n \n \n {hoverText}\n \n \n {hoverIcon}\n \n );\n}\n\nexport default HoverOverlay;\n","import HoverOverlay from \"./HoverOverlay\";\n\nexport default HoverOverlay;\n","import { colorScales } from \"@octopusdeploy/design-system-tokens\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nexport const LightStyle: { [key: string]: React.CSSProperties } = {\n \"hljs-comment\": {\n color: colorScales.slate[300],\n },\n \"hljs-quote\": {\n color: colorScales.slate[300],\n },\n \"hljs-variable\": {\n color: colorScales.slate[800],\n },\n \"hljs-template-variable\": {\n color: colorScales.slate[800],\n },\n \"hljs-tag\": {\n color: colorScales.slate[800],\n },\n \"hljs-name\": {\n color: colorScales.slate[800],\n },\n \"hljs-selector-id\": {\n color: colorScales.slate[800],\n },\n \"hljs-selector-class\": {\n color: colorScales.slate[800],\n },\n \"hljs-regexp\": {\n color: colorScales.slate[800],\n },\n \"hljs-deletion\": {\n color: colorScales.slate[800],\n },\n \"hljs-code\": {\n color: colorScales.slate[800],\n },\n \"hljs-attr\": {\n color: colorScales.blue[600],\n },\n \"hljs-number\": {\n color: colorScales.orange[600],\n },\n \"hljs-built_in\": {\n color: colorScales.orange[600],\n },\n \"hljs-builtin-name\": {\n color: colorScales.orange[600],\n },\n \"hljs-literal\": {\n color: colorScales.orange[600],\n },\n \"hljs-type\": {\n color: colorScales.orange[600],\n },\n \"hljs-params\": {\n color: colorScales.orange[600],\n },\n \"hljs-meta\": {\n color: colorScales.orange[600],\n },\n \"hljs-link\": {\n color: colorScales.orange[600],\n },\n \"hljs-attribute\": {\n color: colorScales.orange[600],\n },\n \"hljs-string\": {\n color: colorScales.green[600],\n },\n \"hljs-symbol\": {\n color: colorScales.green[600],\n },\n \"hljs-bullet\": {\n color: colorScales.green[600],\n },\n \"hljs-property\": {\n color: colorScales.green[600],\n },\n \"hljs-addition\": {\n color: colorScales.green[600],\n },\n \"hljs-title\": {\n color: \"#007faa\",\n },\n \"hljs-section\": {\n color: \"#007faa\",\n },\n \"hljs-keyword\": {\n color: \"#7928a1\",\n },\n \"hljs-selector-tag\": {\n color: \"#7928a1\",\n },\n hljs: {\n display: \"block\",\n overflowX: \"auto\",\n background: themeTokens.color.background.secondary.default,\n color: colorScales.slate[800],\n padding: \"0.5em\",\n },\n \"hljs-emphasis\": {\n fontStyle: \"italic\",\n },\n \"hljs-strong\": {\n fontWeight: \"bold\",\n },\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport ContentCopyIcon from \"@mui/icons-material/ContentCopy\";\nimport { useTheme } from \"@mui/material\";\nimport SyntaxHighlighter from \"react-syntax-highlighter\";\nimport { fontSize } from \"@octopusdeploy/design-system-tokens\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { DarkStyle } from \"components/form/FormattedTextAreaStyles/DarkStyle\";\nimport CopyToClipboardWrapper from \"../CopyToClipboardWrapper\";\nimport HoverOverlay from \"../HoverOverlay\";\nimport { LightStyle } from \"./FormattedTextAreaStyles/LightStyle\";\n\nexport type FormattedTextAreaStyleProps = {\n forceTheme?: \"dark\" | \"light\";\n hideLineNumbers?: boolean;\n wrapLongLines?: boolean;\n defaultColorOverride?: string;\n};\n\ntype FormattedTextAreaProps = {\n value: string | null;\n language: string;\n} & FormattedTextAreaStyleProps;\n\nexport function FormattedTextArea({\n value,\n language,\n forceTheme,\n hideLineNumbers,\n wrapLongLines,\n defaultColorOverride,\n}: FormattedTextAreaProps) {\n const theme = useTheme();\n const [copied, setCopied] = useState(false);\n const [scrollbarHeight, setScrollbarHeight] = useState();\n const isDarkMode = (forceTheme ?? theme.palette.mode) === \"dark\";\n const containerRef = useRef(null);\n\n const SyntaxHighlighterContainer = (props: React.PropsWithChildren) => (\n
    \n      {props.children}\n    
    \n );\n\n useEffect(() => {\n if (containerRef.current) {\n const scrollbarHeight = containerRef.current.offsetHeight - containerRef.current.clientHeight;\n\n if (scrollbarHeight > 0) {\n setScrollbarHeight(scrollbarHeight);\n }\n }\n }, []);\n\n const customStyle: { [key: string]: string | number } = {\n borderColor: themeTokens.color.border.primary,\n borderWidth: 1,\n fontSize: fontSize.xSmall,\n padding: \"14px\",\n borderRadius: \"4px\",\n margin: 0,\n };\n\n if (defaultColorOverride) {\n customStyle.color = defaultColorOverride;\n }\n\n return (\n setCopied(true)}>\n }\n scrollbarHeight={scrollbarHeight}\n >\n \n {value ?? \"\"}\n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport { Alert, Card, Grid, styled, Typography } from \"@mui/material\";\nimport { colorScales } from \"@octopusdeploy/design-system-tokens\";\nimport { BookIcon, SlackIcon, FeedbackIcon } from \"@cpt/components\";\nimport { usePolling } from \"hooks/usePolling\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { checkServerLicenseFulfilled, getLicenseXmlById } from \"client/api/ServerLicenseApi\";\nimport LoadingPlaceholder from \"components/LoadingPlaceholder\";\nimport { ResourceLink } from \"components/ResourceLink/ResourceLink\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { FormattedTextArea } from \"components/form/FormattedTextArea\";\n\ntype LicenseKeyViewProps = {\n licenseXml?: string;\n loading?: boolean;\n error?: Error;\n showTitle?: boolean;\n isFulfilled?: boolean;\n serverLicense: ServerLicenseDto;\n};\n\nconst ResourceLinksContainer = styled(\"div\")`\n display: grid;\n grid-template-columns: 1fr;\n gap: 8px;\n`;\n\nexport function LicenseKeyView(props: LicenseKeyViewProps) {\n const { showTitle, licenseXml, loading, isFulfilled, error, serverLicense } = props;\n return (\n \n {showTitle && isFulfilled && (\n License Key\n )}\n {!isFulfilled && (\n <>\n

    \n Your trial license is still being converted\n

    \n

    Your new XML key should be available in less than a minute

    \n \n )}\n \n \n \n \n \n Note: Must be running Octopus Server 2024.2.6041 or newer to use a PTM license\n \n \n \n \n \n \n Resources\n \n } />\n } />\n }\n />\n \n \n \n
    \n );\n}\n\ninterface SelfFetchingLicenseKeyViewProps {\n serverLicense: ServerLicenseDto;\n showTitle?: boolean;\n}\nexport function SelfFetchingLicenseKeyView(props: SelfFetchingLicenseKeyViewProps) {\n const { serverLicense, showTitle } = props;\n const [loading, setLoading] = useState(true);\n const [isFulfilled, setIsFullfilled] = useState(undefined);\n const [licenseXml, setLicenseXml] = useState(undefined);\n const [error, setError] = useState(undefined);\n const serverLicenseId = serverLicense.id;\n\n const checkProvisioned = async () => {\n const check = await checkServerLicenseFulfilled(serverLicenseId);\n if (check) {\n try {\n const updatedLicense = await getLicenseXmlById(serverLicenseId);\n setIsFullfilled(true);\n setLoading(false);\n setLicenseXml(updatedLicense.licenseXml);\n } catch (e) {\n setLoading(false);\n if (e instanceof Error) {\n setError(e);\n }\n }\n }\n };\n\n usePolling(checkProvisioned, loading);\n\n return (\n \n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport { OpenInNew } from \"@mui/icons-material\";\nimport { Box, CircularProgress, Link, Stack, Typography } from \"@mui/material\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { useFrontendMonitoring } from \"contexts/FrontendMonitoringProvider/FrontendMonitoringProvider\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport { usePolling } from \"hooks/usePolling\";\nimport { getHostname } from \"utils/formatters/DnsFormatters\";\nimport { checkCloudSubscriptionFulfilled, type CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { NotFoundPage } from \"pages/NotFoundPage\";\nimport { CheckoutPrimaryButton } from \"areas/checkout/components/CheckoutButtons\";\nimport { TentacleHeartIcon } from \"areas/checkout/components/TentacleHeartIcon\";\nimport { ServerLicensesRoutesMap } from \"areas/serverLicenses/ServerLicensesRoutesMap\";\nimport { SelfFetchingLicenseKeyView } from \"areas/serverLicenses/components/LicenseKeyView\";\n\ninterface CheckoutCompleteInputProps {\n subscriptionId?: string;\n subscriptionType?: \"cloud\" | \"selfhosted\";\n}\n\nexport function CheckoutComplete(props: CheckoutCompleteInputProps) {\n const { userInfo } = useUserContext();\n const { entity: license } = useEntity();\n const { entity: cloudSubscription } = useEntity();\n const { subscriptionId, subscriptionType } = props;\n const { frontendMonitoring } = useFrontendMonitoring();\n\n useEffect(() => {\n frontendMonitoring.trackEvent({ name: \"CheckoutComplete\" }, { subscriptionId, subscriptionType });\n }, [frontendMonitoring, subscriptionId, subscriptionType]);\n\n if (!subscriptionId || (subscriptionType !== \"cloud\" && subscriptionType !== \"selfhosted\")) {\n return ;\n }\n\n if (!license && subscriptionType === \"selfhosted\") return ;\n if (!cloudSubscription && subscriptionType === \"cloud\") return ;\n\n return (\n \n \n \n \n Order complete, thank you for subscribing\n \n \n \n An email was sent to {userInfo?.email} containing the\n receipt and invoice for your purchase.\n \n \n {subscriptionType === \"cloud\" && cloudSubscription && (\n \n )}\n {subscriptionType === \"selfhosted\" && license && }\n \n \n );\n}\n\nconst CheckoutCompleteCloud = ({ cloudSubscription }: { cloudSubscription: CloudSubscriptionDto }) => {\n const cloudSubscriptionId = cloudSubscription?.id;\n const [loading, setLoading] = useState(true);\n const [isFulfilled, setIsFullfilled] = useState(undefined);\n const [error, setError] = useState(undefined);\n\n const checkProvisioned = async () => {\n const check = await checkCloudSubscriptionFulfilled(cloudSubscriptionId);\n if (check) {\n try {\n setIsFullfilled(true);\n setLoading(false);\n } catch (e) {\n setLoading(false);\n if (e instanceof Error) {\n setError(e);\n }\n }\n }\n };\n\n usePolling(checkProvisioned, loading);\n\n const cloudInstanceLink = `https://${getHostname(cloudSubscription.dnsPrefix)}`;\n\n if (!isFulfilled) {\n return (\n <>\n \n \n Your Octopus is being set up\n – this should take less than a minute.\n \n \n \n {loading && (\n <>\n \n Loading Octopus\n \n )}\n {error && }\n \n \n );\n }\n return (\n \n \n \n Your Octopus is ready!\n \n }>\n Check out Octopus\n \n \n \n );\n};\n\nconst CheckoutCompleteSelfHosted = ({ license }: { license: ServerLicenseDto }) => {\n const { hasPermissionForAsset } = useUserContext();\n const canViewLicenseKeyXml = hasPermissionForAsset(\n RbacPermissions.ServerLicense.ViewLicenseKeyXml,\n license.id,\n license.subscriptionGroup?.id\n );\n\n if (!canViewLicenseKeyXml) {\n return <>;\n }\n return (\n \n \n License Key\n \n \n This information is also available on the{\" \"}\n Overview page.\n \n \n \n );\n};\n","import React, { createContext, useState, useEffect, useContext } from \"react\";\nimport type { ReactNode } from \"react\";\nimport Environment from \"environment\";\nimport type { Country } from \"client/api/CountriesApi\";\nimport { listCountries } from \"client/api/CountriesApi\";\nimport { getGeolocation } from \"client/api/PurchaseApi\";\n\ninterface CountriesContextProps {\n countries: Country[];\n getCurrentCountry: () => { label: string; value: string } | null;\n loading: boolean;\n error: Error | null;\n}\n\nconst CountriesContext = createContext(undefined);\n\ninterface CountriesProviderProps {\n children: ReactNode;\n}\n\nexport const CountriesProvider: React.FC = ({ children }) => {\n const [countries, setCountries] = useState([]);\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState(null);\n const [geolocationIsoCode, setGeolocationIsoCode] = useState();\n\n const getCurrentCountry = () => {\n if (!geolocationIsoCode) return null;\n const country = countries.find((item) => item.twoDigitIsoCode === geolocationIsoCode) ?? undefined;\n return country ? { label: country.name, value: country.twoDigitIsoCode } : null;\n };\n\n useEffect(() => {\n const fetchCountries = async () => {\n try {\n const countries = await listCountries();\n setCountries(countries);\n setLoading(false);\n } catch (err) {\n setError({ name: \"CountriesProvider\", message: \"Failed to load countries\" });\n setLoading(false);\n }\n };\n\n fetchCountries();\n }, []);\n\n /** get geolocation on initial render */\n useEffect(() => {\n const getLocation = async () => {\n const controller = new AbortController();\n const envClientIpAddress = Environment.clientIpAddress();\n const fetchData = async () => {\n return await getGeolocation(envClientIpAddress, controller.signal);\n };\n\n try {\n (async () => {\n const data = await fetchData();\n if (data.success) {\n setGeolocationIsoCode(data.isoCode);\n }\n })();\n } catch (err) {\n // it doesn't really matter if we weren't able to fetch geolocation as it's only used to prepopulate country\n }\n\n return () => {\n controller.abort();\n };\n };\n\n getLocation();\n }, []);\n\n return (\n \n {children}\n \n );\n};\n\nexport const useCountries = (): CountriesContextProps => {\n const context = useContext(CountriesContext);\n if (context === undefined) {\n throw new Error(\"useCountries must be used within a CountriesProvider\");\n }\n return context;\n};\n","import axiosClient from \"client/axios-client\";\n\nconst BASE_URL = \"purchase\";\n\nexport type State = {\n twoDigitIsoCode: string;\n name: string;\n};\n\nexport type Country = {\n twoDigitIsoCode: string;\n name: string;\n states: State[];\n};\n\nexport const listCountries = async () => {\n const response = await axiosClient.get(`${BASE_URL}/countries`);\n return response.data;\n};\n","import React from \"react\";\nimport type { ReactElement } from \"react\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { InputLabel, Stack, styled, Typography } from \"@mui/material\";\n\ninterface CheckoutFormFieldProps {\n labelText?: string;\n errorMessage?: string;\n input: ReactElement;\n sx?: SxProps;\n className?: string;\n}\n\nconst ErrorMessage = styled(Typography)`\n font-style: italic;\n color: #c95340;\n line-height: 140%;\n`;\n\nconst StyledInputLabel = styled(InputLabel)`\n font-weight: 500;\n color: #2e475d;\n line-height: 140%;\n`;\n\nexport function CheckoutFormField(props: CheckoutFormFieldProps) {\n const { labelText, input, errorMessage, sx, className } = props;\n\n return (\n \n {labelText && {labelText}}\n {input}\n {errorMessage && {errorMessage}}\n \n );\n}\n","import React from \"react\";\nimport type { InputBaseComponentProps } from \"@mui/material\";\nimport { Input, InputAdornment, styled } from \"@mui/material\";\n\ninterface CheckoutTextAreaProps {\n id?: string;\n inputProps?: InputBaseComponentProps;\n required?: boolean;\n error?: boolean;\n placeholder?: string;\n fullWidth?: boolean;\n multiline?: boolean;\n value?: unknown;\n onChange?: React.ChangeEventHandler;\n}\n\nconst TextArea = styled(Input)`\n overflow: hidden;\n box-sizing: border-box;\n border: 1px solid #7c98b4;\n border-radius: 8px;\n padding: 0;\n &.Mui-focused:not(.Mui-error) {\n border-color: #0d80d8;\n }\n &.Mui-error {\n border-color: #c95340;\n }\n textarea {\n box-sizing: border-box;\n padding: 13px 20px;\n }\n .MuiInputAdornment-positionEnd {\n padding-right: 20px;\n margin-left: 0;\n }\n`;\n\nconst StyledInputAdornment = styled(InputAdornment)`\n pointer-events: none;\n`;\n\nexport function CheckoutTextArea(props: CheckoutTextAreaProps) {\n const { id, required, placeholder, error, inputProps, fullWidth = true, multiline = false, value, onChange } = props;\n\n return (\n \n );\n}\n","import React, { useEffect, useRef, useState } from \"react\";\nimport CloseIcon from \"@mui/icons-material/Close\";\nimport {\n Alert,\n AlertTitle,\n Box,\n Button,\n Dialog,\n DialogContent,\n DialogTitle,\n Grid,\n IconButton,\n Stack,\n styled,\n Typography,\n} from \"@mui/material\";\nimport { fontSize, text } from \"@octopusdeploy/design-system-tokens\";\nimport { useCountries } from \"contexts/CountriesProvider/CountriesProvider\";\nimport { checkoutContactSalesRequest, type ProductType } from \"client/api/PurchaseApi\";\nimport type { DialogProps } from \"components/Dialogs/DialogProps\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\nimport { SubmittableForm } from \"components/form/SubmittableForm\";\nimport type { DropdownAutocompleteOption } from \"areas/checkout/components/CheckoutDropdownInput\";\nimport { CheckoutDropdownInput } from \"areas/checkout/components/CheckoutDropdownInput\";\nimport { CheckoutFormField } from \"areas/checkout/components/CheckoutFormField\";\nimport { CheckoutTextArea } from \"areas/checkout/components/CheckoutTextArea\";\nimport { CheckoutTextInput } from \"areas/checkout/components/CheckoutTextInput\";\nimport type {\n SupportOptions,\n ValidMachineValues,\n ValidProjectValues,\n ValidTenantValues,\n} from \"../../CheckoutPlanConfigurationStep\";\n\n//we want a custom onClose\ntype CheckoutContactSalesModalProps = Omit & {\n onClose: (data?: CheckoutContactSalesFields) => void;\n defaults?: Partial;\n source: \"Checkout\";\n serial?: string;\n targetPlan: ProductType;\n};\n\nexport type CheckoutContactSalesPlanConfigFields = {\n projectQuantity: ValidProjectValues;\n taskQuantity?: \"5\" | \"10\" | \"20\" | \">40\";\n support: SupportOptions;\n tenantQuantity: ValidTenantValues;\n machineQuantity: ValidMachineValues;\n};\n\ntype CheckoutContactSalesFormFields = {\n firstName: string;\n lastName: string;\n email: string;\n phone: string;\n organization?: string;\n country: DropdownAutocompleteOption | null;\n message: string;\n};\n\nexport type CheckoutContactSalesFields = {\n targetPlan: ProductType;\n planConfig: CheckoutContactSalesPlanConfigFields | null;\n} & CheckoutContactSalesFormFields;\n\nconst StyledCheckoutFormField = styled(CheckoutFormField)`\n label {\n font-size: ${fontSize.medium};\n }\n`;\n\nexport function CheckoutContactSalesDialog(props: CheckoutContactSalesModalProps) {\n const { open, onClose, defaults, source, serial, targetPlan } = props;\n const { countries } = useCountries();\n\n const [error, setError] = useState();\n const [showSuccessMessage, setShowSuccessMessage] = useState(false);\n const dialogContentEl = useRef(null);\n\n useEffect(() => {\n // reset the modal after closing it\n if (!open && showSuccessMessage) {\n setTimeout(() => {\n setShowSuccessMessage(false);\n }, 100);\n }\n }, [open, showSuccessMessage]);\n\n const contactSales = async (fields: CheckoutContactSalesFields) => {\n const mappedData = {\n ...fields,\n country: fields.country?.value || \"\", // map the country over\n planConfig: undefined, // clear out the nested property spread from fields because we spread the planConfig objects properties in to the root of this object instead\n ...fields.planConfig,\n };\n\n try {\n await checkoutContactSalesRequest({\n ...mappedData,\n source,\n licenseSerial: serial,\n targetPlan,\n });\n\n setShowSuccessMessage(true);\n } catch (ex) {\n if (ex instanceof Error) {\n setError(ex);\n dialogContentEl.current && dialogContentEl.current.scrollTo({ top: 0 });\n }\n }\n };\n\n if (showSuccessMessage) {\n return (\n onClose()} maxWidth={\"sm\"} fullWidth>\n \n \n \n Thank you\n \n We'll be in touch soon\n onClose()}\n sx={{ textTransform: \"none\" }}\n disableElevation\n disableRipple\n >\n Close\n \n \n \n \n );\n }\n\n return (\n onClose()} maxWidth={\"sm\"} fullWidth>\n \n Contact Sales\n {onClose && (\n onClose()}\n sx={{\n position: \"absolute\",\n right: 8,\n top: 8,\n color: (theme) => theme.palette.grey[500],\n }}\n >\n \n \n )}\n \n \n {error && (\n \n \n \n )}\n \n Let's get your plan just right\n \n So we can help, please let us know the best contact and any other useful information.\n \n \n\n onClose()}\n cancelLabel=\"Close\"\n defaultValues={defaults}\n alwaysEnableSubmit\n submitLabel=\"Send\"\n noValidate\n >\n {(formController) => {\n const { register, formState, watch, setValue } = formController;\n return (\n \n \n \n }\n />\n\n \n }\n />\n\n \n }\n />\n\n \n }\n />\n\n \n }\n />\n\n ({\n label: country.name,\n value: country.twoDigitIsoCode,\n }))}\n value={watch(\"country\")}\n setOption={(value) => {\n setValue(\"country\", value ?? null);\n }}\n isOptionEqualToValue=\"valueMatch\"\n error={!!formState.errors.country}\n placeholder=\"Please select a country\"\n InputProps={{\n ...register(\"country\", {\n required: {\n value: true,\n message: \"Please select a country\",\n },\n }),\n }}\n />\n }\n />\n\n \n }\n />\n \n \n );\n }}\n \n \n \n );\n}\n","import type { PropsWithChildren } from \"react\";\nimport { createContext, useContext, useState } from \"react\";\nimport React from \"react\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport { noOp } from \"utils/noOp\";\nimport { type ProductType } from \"client/api/PurchaseApi\";\nimport type { CheckoutContactSalesFields } from \"./CheckoutContactSalesDialog\";\nimport { CheckoutContactSalesDialog } from \"./CheckoutContactSalesDialog\";\n\ntype CheckoutContactSalesDialogState = {\n showDialog: (defaultValues: Partial) => void;\n open: boolean;\n submittedData?: CheckoutContactSalesFields;\n};\n\nconst CheckoutContactSalesDialogContext = createContext({\n showDialog: noOp,\n open: false,\n});\n\nexport const useCheckoutContactSalesDialog = (): CheckoutContactSalesDialogState => {\n return useContext(CheckoutContactSalesDialogContext);\n};\n\ntype CheckoutContactSalesDialogProviderProps = PropsWithChildren<{\n source: \"Checkout\";\n targetPlan: ProductType;\n serial?: string;\n}>;\n\nexport function CheckoutContactSalesDialogProvider(props: CheckoutContactSalesDialogProviderProps) {\n const { children, source, serial, targetPlan } = props;\n const { userInfo } = useUserContext();\n const [open, setOpen] = useState(false);\n const [submittedData, setSubmittedData] = useState();\n\n const [defaults, setDefaults] = useState | undefined>({\n firstName: userInfo?.firstName,\n lastName: userInfo?.lastName,\n email: userInfo?.email,\n });\n\n const showDialog = (defaultValues: Partial) => {\n setDefaults({\n ...defaults,\n ...defaultValues,\n });\n setOpen(true);\n };\n\n const hideDialog = (data?: CheckoutContactSalesFields) => {\n setOpen(false);\n setSubmittedData(data);\n };\n\n return (\n \n {children}\n \n \n );\n}\n","import React from \"react\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { SvgIcon } from \"@mui/material\";\n\nexport function CheckIcon({ sx, fillColor = \"#fff\" }: { sx?: SxProps; fillColor?: string }) {\n return (\n \n \n \n );\n}\n","import React from \"react\";\nimport { Checkbox, styled } from \"@mui/material\";\nimport type { CheckboxProps } from \"@mui/material\";\nimport { CheckIcon } from \"areas/checkout/components/CheckIcon\";\n\nconst StyledCheckbox = styled(Checkbox)`\n border: solid #0d80d8;\n\n &.MuiCheckbox-sizeMedium {\n border-width: 0.769px;\n border-radius: 4.209px;\n width: 20px;\n height: 20px;\n\n .MuiSvgIcon-root {\n width: 12px;\n height: 9px;\n }\n }\n &.MuiCheckbox-sizeLarge {\n border-width: 1px;\n border-radius: 5.472px;\n width: 26px;\n height: 26px;\n\n .MuiSvgIcon-root {\n width: 15px;\n height: 11px;\n }\n }\n &.Mui-checked {\n background-color: #0d80d8;\n }\n`;\n\nexport function CheckoutCheckbox(props: CheckboxProps) {\n return } checkedIcon={} {...props} />;\n}\n","import React from \"react\";\nimport type { Theme } from \"@emotion/react\";\nimport type { SxProps } from \"@mui/material\";\nimport { Stack, Typography } from \"@mui/material\";\nimport { themeTokens } from \"components/Theme/theme\";\n\ninterface SummaryLineProps {\n label: string;\n value: string | React.ReactElement;\n sx?: SxProps;\n valueTestId?: string;\n}\n\nexport const SummaryLine = (props: SummaryLineProps) => {\n const { label, value, sx, valueTestId } = props;\n return (\n \n \n {label}\n \n \n {value}\n \n \n );\n};\n","import React from \"react\";\nimport { Box, CircularProgress, Stack, styled, Typography } from \"@mui/material\";\nimport { formatMoney } from \"utils/formatters/MoneyFormatter\";\nimport type { OrderPreview, OrderPreviewTaxItem } from \"client/api/PurchaseApi\";\nimport { TaxRateType } from \"client/api/PurchaseApi\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { ChevronDownIcon } from \"areas/checkout/components/ChevronDownIcon\";\nimport type { OrderPreviewError } from \"areas/purchasing/Checkout\";\nimport { SummaryLine } from \"./SummaryLine\";\n\nconst StyledSummary = styled(\"summary\")(\n ({ theme }) => `\n list-style: none;\n cursor: pointer;\n `\n);\n\nconst StyledArrowIcon = styled(\"div\")`\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n`;\n\nconst StyledDetails = styled(\"details\")`\n &[open] .faq-arrow {\n transform: rotate(180deg);\n }\n`;\n\nconst ArrowIcon = () => (\n \n \n \n);\n\ninterface TaxProps {\n taxItem: OrderPreviewTaxItem;\n}\n\nconst TaxItemLine = (props: TaxProps) => {\n const { taxItem } = props;\n\n let rateString = \"\";\n if (taxItem.rateType === TaxRateType.Percentage) {\n rateString = `${(taxItem.rate * 100).toFixed(2)}%`;\n }\n\n return (\n \n \n {taxItem.name} – {rateString}\n \n \n {formatMoney(taxItem.amount, { includeTrailingZeros: true })}\n \n \n );\n};\n\nexport const TaxSummary = ({\n isFetchingTax,\n hasMinimumTaxInfo,\n errorReason,\n taxItems,\n}: {\n isFetchingTax: boolean;\n hasMinimumTaxInfo: boolean;\n errorReason: OrderPreviewError | null;\n taxItems: OrderPreview[\"taxItems\"];\n}) => {\n const taxTotalTestId = \"order-summary-tax-total-amount\";\n // minimum required tax info missing\n if (!hasMinimumTaxInfo) {\n return ;\n }\n\n // loading\n if (isFetchingTax) {\n return (\n \n Calculating tax...\n \n );\n }\n\n // error states\n if (errorReason) {\n if (errorReason.statusCode === 400) {\n return (\n \n Tax couldn't be calculated. Please review the country and address you've entered.\n \n );\n }\n return (\n \n Tax couldn't be calculated.\n \n );\n }\n\n // no tax\n if (taxItems.length === 0) {\n return <>;\n }\n\n // summarize tax items\n const taxSum = taxItems.reduce((acc, val) => acc + val.amount, 0);\n return (\n \n \n \n
    \n \n Taxes\n \n \n \n \n
    \n \n {formatMoney(taxSum, { includeTrailingZeros: true })}\n \n
    \n
    \n\n {taxItems.map((item, a) => {\n return ;\n })}\n
    \n );\n};\n","import React from \"react\";\nimport {\n Typography,\n Box,\n Stack,\n Divider,\n FormControlLabel,\n Alert,\n CircularProgress,\n Link,\n Skeleton,\n} from \"@mui/material\";\nimport { fontSize } from \"@octopusdeploy/design-system-tokens\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { formatMoney } from \"utils/formatters/MoneyFormatter\";\nimport type { OrderPreview } from \"client/api/PurchaseApi\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { CustomErrorAlert, ErrorMessageWithTryAgainButtonOrContactSales } from \"components/alert/CustomErrorAlert\";\nimport { CheckoutCheckbox } from \"areas/checkout/components/CheckoutCheckbox\";\nimport type { OrderPreviewError } from \"areas/purchasing/Checkout\";\nimport { SummaryLine } from \"./SummaryLine\";\nimport { TaxSummary } from \"./TaxSummary\";\n\ninterface OrderPreviewSummaryProps {\n isTaxExempted: boolean;\n onToggleTaxExemption: () => void;\n orderPreview: OrderPreview;\n isLoadingOrderPreview: boolean;\n isRecalculatingBasePrice: boolean;\n hasMinimumTaxInfo: boolean;\n errorReason: OrderPreviewError | null;\n showContactSalesDialog?: () => void;\n}\n\nconst SubscriptionAgreement = ({ planName }: { planName: string }) => {\n return (\n \n By purchasing {planName} you accept our{\" \"}\n \n customer agreement\n \n .\n \n );\n};\n\nexport function OrderPreviewSummary(props: OrderPreviewSummaryProps) {\n const {\n onToggleTaxExemption,\n orderPreview,\n isTaxExempted,\n isLoadingOrderPreview,\n isRecalculatingBasePrice,\n hasMinimumTaxInfo,\n errorReason,\n showContactSalesDialog,\n } = props;\n const useZuoraProfessionalCheckout = useFeatureFlag(\"ZuoraProfessionalCheckout\");\n const discount = orderPreview.discountAmount;\n\n const planPriceDisplayString = formatMoney(orderPreview.totalAmountExcludingTax, { includeTrailingZeros: true });\n const discountDisplayString = formatMoney(discount, { includeTrailingZeros: true });\n const subTotalDisplayString = planPriceDisplayString;\n\n const totalDisplayString = formatMoney(orderPreview.totalAmount, {\n includeTrailingZeros: true,\n });\n\n return (\n <>\n {errorReason && errorReason.statusCode !== 400 && (\n } />\n )}\n \n } spacing={2}>\n \n Order Summary\n \n \n \n \n \n {orderPreview.productName}\n \n {orderPreview.orderItems.length === 1 && (\n \n {orderPreview.chargeDescription}\n \n )}\n \n \n {isRecalculatingBasePrice ? : planPriceDisplayString}\n \n \n {orderPreview.orderItems.length > 1 && (\n \n {isRecalculatingBasePrice ? (\n \n ) : (\n orderPreview.orderItems.map(\n (item, i) =>\n item.amountWithoutTax > 0 && (\n \n )\n )\n )}\n \n )}\n \n {discount != 0 && (\n \n )}\n \n \n : `${subTotalDisplayString}`}\n />\n <>\n \n \n }\n label={\n \n I have a tax exemption certificate\n \n }\n />\n {isTaxExempted && (\n Our sales team will process your order to sight this certificate.\n )}\n \n \n \n \n ) : errorReason ? (\n \"$---.--\"\n ) : (\n `${totalDisplayString} ${orderPreview.currencyCode}`\n )\n }\n sx={{ fontWeight: \"bold\", fontSize: \"18px\", textAlign: \"center\" }}\n valueTestId=\"order-summary-total-price\"\n />\n \n \n \n \n \n \n {useZuoraProfessionalCheckout && (\n \n Contact Sales\n \n )}\n \n );\n}\n","import React from \"react\";\nimport { Alert, AlertTitle, Box, Stack, Typography } from \"@mui/material\";\nimport { styled } from \"@mui/material\";\nimport LinearProgress from \"@mui/material/LinearProgress\";\nimport { fontSize } from \"@octopusdeploy/design-system-tokens\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { useCountries } from \"contexts/CountriesProvider/CountriesProvider\";\nimport type { OrderPreview } from \"client/api/PurchaseApi\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { CustomErrorAlert, ErrorMessageWithTryAgainButtonOrContactSales } from \"components/alert/CustomErrorAlert\";\nimport type { DropdownAutocompleteOption } from \"areas/checkout/components/CheckoutDropdownInput\";\nimport type { OrderPreviewError } from \"areas/purchasing/Checkout\";\nimport { useCheckoutContactSalesDialog } from \"areas/purchasing/components/Dialogs/CheckoutContactSalesDialog/CheckoutContactSalesDialogProvider\";\nimport type { CheckoutContactSalesPlanConfigFields } from \"../Dialogs/CheckoutContactSalesDialog/CheckoutContactSalesDialog\";\nimport { OrderPreviewSummary } from \"./OrderPreviewSummary\";\n\n/* Some style hacks until we can use the design system component :D */\nconst StyledAlert = styled(Alert)(({ theme }) => ({\n borderLeft: `4px solid ${themeTokens.color.callout.border.feature}`,\n borderRadius: 0,\n color: themeTokens.color.callout.text.feature,\n backgroundColor: themeTokens.color.callout.background.feature.default,\n}));\n\ninterface CheckoutOrderSummaryBaseProps {\n subscriptionType: \"cloud\" | \"selfhosted\";\n isTaxExempted: boolean;\n country: DropdownAutocompleteOption | null;\n onToggleTaxExemption: () => void;\n isLoadingOrderPreview: boolean;\n isRecalculatingBasePrice: boolean;\n orderPreview: OrderPreview | null;\n errorReason: OrderPreviewError | null;\n hasMinimumTaxInfo: boolean;\n}\n\ntype CheckoutOrderSummaryProps =\n | ({\n isBeyondStandardEntitlements?: false;\n } & CheckoutOrderSummaryBaseProps)\n | ({\n isBeyondStandardEntitlements: true;\n planConfig: React.RefObject;\n } & CheckoutOrderSummaryBaseProps);\n\nconst Skeleton = () => {\n return (\n \n \n \n \n \n );\n};\n\nexport function CheckoutOrderSummary(props: CheckoutOrderSummaryProps) {\n const {\n orderPreview,\n isTaxExempted,\n onToggleTaxExemption,\n errorReason,\n isLoadingOrderPreview,\n isRecalculatingBasePrice,\n hasMinimumTaxInfo,\n isBeyondStandardEntitlements = false,\n } = props;\n\n const useZuoraProfessionalCheckout = useFeatureFlag(\"ZuoraProfessionalCheckout\");\n const planConfig = props.isBeyondStandardEntitlements ? props.planConfig : null;\n\n const { showDialog } = useCheckoutContactSalesDialog();\n\n const { getCurrentCountry } = useCountries();\n\n const showContactSalesDialog = () =>\n showDialog({ planConfig: planConfig?.current, country: props.country ?? getCurrentCountry() });\n\n if (useZuoraProfessionalCheckout && isBeyondStandardEntitlements) {\n return (\n <>\n {/* TODO: When possible, swap this Alert for the Callout component from the design system */}\n \n Looks like you want more out of your subscription\n Your selection is beyond what we can offer for self-service.\n \n \n Please{\" \"}\n \n contact Sales\n {\" \"}\n to help get your configuration and plan just right.\n \n \n Or, you can adjust your selection to continue with your purchase.\n \n \n Contact Sales\n \n \n );\n }\n\n if (errorReason && !orderPreview) {\n return } />;\n }\n\n if (orderPreview) {\n return (\n \n );\n }\n\n return ;\n}\n","export const formatStreetAddress = (address: {\n streetName: string;\n streetNumber?: string;\n countryCode: string;\n}): string => {\n /** List of countrycodes for countries that have the street name first, followed by the street number */\n const nameThenNumberCountries = [\n \"AL\",\n \"AT\",\n \"AX\",\n \"BA\",\n \"BE\",\n \"BQ\",\n \"BV\",\n \"CH\",\n \"CL\",\n \"CV\",\n \"CY\",\n \"CZ\",\n \"DE\",\n \"DK\",\n \"EE\",\n \"ET\",\n \"FI\",\n \"FO\",\n \"GE\",\n \"GL\",\n \"GR\",\n \"GW\",\n \"HN\",\n \"HR\",\n \"HT\",\n \"IL\",\n \"IS\",\n \"JO\",\n \"LI\",\n \"LR\",\n \"LT\",\n \"ME\",\n \"MK\",\n \"NL\",\n \"NO\",\n \"PL\",\n \"PS\",\n \"PT\",\n \"PW\",\n \"PY\",\n \"RO\",\n \"RS\",\n \"SD\",\n \"SE\",\n \"SI\",\n \"SJ\",\n \"TJ\",\n \"TR\",\n \"UY\",\n \"AW\",\n \"BI\",\n \"BO\",\n \"CF\",\n \"CM\",\n \"CW\",\n \"EH\",\n \"ER\",\n \"GD\",\n \"GQ\",\n \"KI\",\n \"LC\",\n \"LY\",\n \"ML\",\n \"MO\",\n \"QA\",\n \"SB\",\n \"SS\",\n \"ST\",\n \"SX\",\n \"TL\",\n \"VC\",\n \"VU\",\n \"WS\",\n \"AF\",\n \"BW\",\n \"KP\",\n \"NI\",\n \"SO\",\n \"SR\",\n \"TD\",\n \"AR\",\n \"BR\",\n \"CO\",\n \"DR\",\n \"ES\",\n \"IT\",\n \"MX\",\n ];\n if (nameThenNumberCountries.includes(address.countryCode)) {\n return `${address.streetName} ${address.streetNumber ?? \"\"}`.trim();\n }\n return `${address.streetNumber ?? \"\"} ${address.streetName}`.trim();\n};\n","export type ZuoraCallback = (response: {\n success: boolean;\n errorCode: string;\n errorMessage: string;\n responseFrom: string;\n}) => void;\n\n/** Non-exhaustive list of params. See {@link https://knowledgecenter.zuora.com/Zuora_Payments/Payment_Page_and_Payment_Link/Payment_Pages_2.0/F_Client_Parameters_for_Payment_Pages_2.0 | Client Parameters for Payment Pages 2.0} */\ntype ZuoraRenderParams = {\n /** The hosted payment page id */\n id: string;\n /** Public key for encryption */\n key: string;\n /** Signature generated by the rsa-signatures request */\n signature: string;\n /** Token generated by the rsa-signatures request */\n token: string;\n /** Unique Id of your Zuora tenant */\n tenantId: number;\n /** The hosted payment page URL */\n url: string;\n style: \"inline\" | \"overlay\";\n /** Flag to indicate that page submission is handled by Zuora or by the client site */\n submitEnabled: \"true\" | \"false\";\n /** The initial authorization amount. This value overrides the default authorization amount set for the specific payment gateway */\n authorizationAmount?: number;\n /** Indicates whether to perform a duplication check when you create a payment method, default is false */\n checkDuplicated?: boolean;\n /** Locale ID of the payment page form, eg. \"en\", \"fr_CA\" */\n locale?: string;\n /** Name of the payment gateway as set up in Payment Settings. Overrides the default gateway you set up during the Payment Page configuration. */\n paymentGateway?: string;\n /** Overrides the credit card \"Accepted Types\" set up for your payment gateway */\n param_supportedTypes?: string;\n /** Defaults to basic, advanced has stronger security. See {@link https://knowledgecenter.zuora.com/Zuora_Payments/Payment_Page_and_Payment_Link/Payment_Pages_2.0/EB_Advanced_Integration_of_Payment_Pages_2.0/Validate_the_Digital_Signature_for_Payment_Pages_2.0 | Validate the Digital Signature for Payment Pages 2.0} */\n signatureType?: \"basic\" | \"advanced\";\n} & Record;\n\n/** See {@link https://knowledgecenter.zuora.com/Zuora_Payments/Payment_Page_and_Payment_Link/Payment_Pages_2.0/KA_Error_Handling_for_Payment_Pages_2.0/Customize_Error_Messages_for_Payment_Pages_2.0#Render_Payment_Pages_2.0_with_Custom_Error_Handling | Custom Error Messages for Payment Pages 2.0} */\nexport type ZuoraClientErrorMessageCallback = (\n /**\n * In client side validation, a Payment Pages form field name will be returned.\n * See {@link https://knowledgecenter.zuora.com/Zuora_Payments/Payment_Page_and_Payment_Link/Payment_Pages_2.0/G_Payment_Pages_2.0_Form_Fields | Payment Pages 2.0 Form Fields} for the field names used in Payment Pages.\n */\n key: string,\n /**\n * Error code returned when the client-side credit card validation fails or the CAPTCHA challenge is not resolved.\n * - 001: The required field is not completed.\n * - 002: The card number is invalid.\n * - 003: The card type is invalid.\n * - 004: The CVV number is invalid.\n * - 007: The end-user doesn't resolve the challenge of Google reCAPTCHA Enterprise Interactive Test version.\n * - unknown: All client-side errors other than the five above.\n */\n code: \"001\" | \"002\" | \"003\" | \"004\" | \"007\" | \"unknown\",\n message: string,\n rawGatewayInfo: unknown\n) => void;\n\nexport type Zuora = {\n /** Render the hosted payment page */\n render: (params: ZuoraRenderParams, prepopulateFields: Record, callback: ZuoraCallback) => void;\n /** For rendering the hosted payment page with customized client-side errors */\n renderWithErrorHandler: (\n params: ZuoraRenderParams,\n prepopulateFields: Record,\n callback: ZuoraCallback,\n clientErrorMessageCallback: ZuoraClientErrorMessageCallback,\n width?: number | null,\n height?: number | null,\n additionalFunction?: () => void\n ) => void;\n /** For handling server-side errors, the given callback is invoked, then cleared on iframe \"load\" event */\n runAfterRender: (serverErrorMessageCallback: () => void) => void;\n /**\n * Send error messages to the Hosted Payment page, for customizing client-side errors and overwriting messages generated by server-side validation\n * @param key The error key - may be a fieldName or \"error\"\n * @param errorMessage Customized error message to display in Payment Page. Note that this error message will not be localized in Payment Pages 2.0 form.\n */\n sendErrorMessageToHpm: (key: string, errorMessage: string) => void;\n setEventHandler: (\n eventName: \"onSubmit\" | \"onloadCallback\" | (string & {}),\n callback: (response: unknown) => void\n ) => void;\n /** Submits the hosted payment page form */\n submit: () => void;\n} & Record;\n\nexport const isZuoraLibrary = (obj: unknown): obj is Zuora => {\n return (\n typeof obj === \"object\" && obj !== null && \"render\" in obj && \"renderWithErrorHandler\" in obj && \"submit\" in obj\n );\n};\n","import React from \"react\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { SvgIcon } from \"@mui/material\";\n\ninterface CheckoutLockIconProps {\n error?: boolean;\n size?: string;\n sx?: SxProps;\n}\n\nexport function CheckoutLockIcon(props: CheckoutLockIconProps) {\n const { size = \"20px\", sx } = props;\n\n return (\n \n \n \n );\n}\n","import React, { useEffect } from \"react\";\nimport type { ReactNode } from \"react\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { Box, Grid, Stack } from \"@mui/material\";\nimport { useFrontendMonitoring } from \"contexts/FrontendMonitoringProvider/FrontendMonitoringProvider\";\n\nexport interface CheckoutStepLayoutProps {\n children: ReactNode;\n orderSummary: React.ReactElement;\n sx?: SxProps;\n testId?: string;\n name?: string;\n}\n\nexport function CheckoutStepLayout(props: CheckoutStepLayoutProps) {\n const { children, orderSummary, sx, testId } = props;\n const { frontendMonitoring } = useFrontendMonitoring();\n\n useEffect(() => {\n frontendMonitoring.trackEvent({ name: \"CheckoutStep\" }, { stepName: props.name });\n }, [frontendMonitoring, props.name]);\n\n return (\n \n \n \n \n {children}\n \n \n \n \n {orderSummary}\n \n \n );\n}\n","import React from \"react\";\nimport { styled, type SxProps } from \"@mui/material/styles\";\nimport type { ChangeHandler } from \"react-hook-form\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nconst ButtonLikeLabel = styled(\"label\")(\n `\n display: flex;\n box-sizing: border-box;\n height: 44px;\n border: 1px solid #449be1;\n padding: 8px 6px;\n font-size: 14px;\n font-weight: 600;\n line-height: 140%;\n justify-content: center;\n align-items: center;\n border-radius: 4px;\n cursor: pointer;\n text-transform: none;\n background-color: #fff;\n color: #1a77ca;\n `,\n (props: ButtonLikeLabelProps) =>\n props.variant === \"secondary\" &&\n `\n border: 1px solid ${themeTokens.color.button.border.secondary};\n color: ${themeTokens.color.button.text.secondary};\n `,\n (props: ButtonLikeLabelProps) =>\n props.variant === \"tertiary\" &&\n `\n border: 1px solid ${themeTokens.color.border.feature};\n color: ${themeTokens.color.text.feature};\n `,\n (props: ButtonLikeLabelProps) =>\n props.size === \"small\" &&\n `\n height: 32px;\n padding: 6px;\n `\n);\n\nconst HiddenRadio = styled(\"input\")(\n (props) => `\n position: absolute;\n clip: rect(0 0 0 0);\n clip-path: inset(50%);\n width: 1px;\n height: 1px;\n overflow: hidden;\n white-space: nowrap;\n\n :checked + label {\n border: 1px solid ${themeTokens.color.button.background.loud.default};\n color: ${themeTokens.color.button.text.loud};\n background-color: ${themeTokens.color.button.background.loud.default};\n }\n`,\n ({ variant }: { variant: Variants }) =>\n variant === \"secondary\" &&\n `\n :checked + label {\n border: 1px solid ${themeTokens.color.button.border.secondary};\n color: ${themeTokens.color.button.text.secondary};\n background-color: ${themeTokens.color.button.background.secondary.pressed};\n }\n `,\n ({ variant }: { variant: Variants }) =>\n variant === \"tertiary\" &&\n `\n :checked + label {\n border: 1px solid ${themeTokens.color.border.feature};\n color: ${themeTokens.color.text.feature};\n background-color: #C5AEEEA3;\n }\n `\n);\n\nconst Wrapper = styled(\"div\")(\n ({ fullWidth }: { fullWidth?: boolean }) => `\n ${fullWidth && `flex: 1 0 0;`}\n`\n);\n\ntype Variants = \"primary\" | \"secondary\" | \"tertiary\";\ntype Sizes = \"small\" | \"medium\";\n\ntype ButtonLikeLabelProps = {\n sx?: SxProps;\n size?: Sizes;\n variant?: Variants;\n};\n\ntype CheckoutButtonLikeRadioProps = {\n id: string;\n name: string;\n value: string | number;\n fullWidth?: boolean;\n onChange?: React.ChangeEventHandler | ChangeHandler;\n checked?: boolean;\n buttonSx?: SxProps;\n variant?: Variants;\n size?: Sizes;\n} & React.PropsWithChildren;\n\nexport const CheckoutButtonLikeRadio = React.forwardRef(\n (props: CheckoutButtonLikeRadioProps, ref: React.ForwardedRef) => {\n const {\n id,\n name,\n value,\n children,\n fullWidth,\n checked,\n onChange,\n buttonSx,\n variant = \"primary\",\n size = \"medium\",\n } = props;\n return (\n \n \n \n {children}\n \n \n );\n }\n);\n","import type { ComponentPropsWithRef } from \"react\";\nimport React from \"react\";\nimport { noOp } from \"utils/noOp\";\nimport { CheckoutButtonLikeRadio } from \"./CheckoutButtonLikeRadio\";\n\ntype CheckoutPlanConfigRadioProps = Omit, \"id\" | \"name\"> & {\n id?: string;\n} & {\n name?: string;\n field?: { name: string; value: string | undefined };\n};\n\nexport const CheckoutPlanConfigRadio = React.forwardRef(\n (props: CheckoutPlanConfigRadioProps, ref: React.ForwardedRef) => {\n const name = props.name || props.field?.name || \"\";\n const id = props.id || `${name}.${props.value}`;\n const checked = props.checked || props.field?.value === props.value;\n const variant = props.variant || \"secondary\";\n\n return (\n \n {props.children}\n \n );\n }\n);\n","import type { ComponentPropsWithRef } from \"react\";\nimport React from \"react\";\nimport { ChevronLeft } from \"@mui/icons-material\";\nimport { Divider, FormLabel, Link, Stack, styled } from \"@mui/material\";\nimport { Grid, Typography } from \"@mui/material\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { Controller, useForm } from \"react-hook-form\";\nimport { colorScales } from \"@octopusdeploy/design-system-tokens\";\nimport { useCountries } from \"contexts/CountriesProvider/CountriesProvider\";\nimport type { OrderPreview } from \"client/api/PurchaseApi\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { CheckoutPrimaryButton, CheckoutSecondaryButton } from \"areas/checkout/components/CheckoutButtons\";\nimport { CheckoutPlanConfigRadio } from \"areas/checkout/components/CheckoutPlanConfigRadio\";\nimport { CheckoutStepLayout } from \"areas/purchasing/components/CheckoutStepLayout\";\nimport { useCheckoutContactSalesDialog } from \"areas/purchasing/components/Dialogs/CheckoutContactSalesDialog/CheckoutContactSalesDialogProvider\";\nimport type { SubscriptionType } from \"../Checkout\";\n\ninterface CheckoutPlanConfigurationStepProps {\n onBack: () => void;\n onChanged: (data: CheckoutPlanConfigurationInputs) => void;\n onSubmit: (data: CheckoutPlanConfigurationInputs) => void;\n orderSummary: React.ReactElement;\n sx?: SxProps;\n orderPreview: OrderPreview | null;\n subscriptionType: SubscriptionType;\n upgradePlanTitle: React.ReactNode;\n initialData: CheckoutPlanConfigurationInputs;\n isBeyondStandardEntitlements: boolean;\n}\n\nexport enum SupportOptions {\n EightFive = \"8/5\",\n TwentyFourSeven = \"24/7\",\n}\n\ntype ConfigOptionKind = \"self-serve\" | \"exceeds-self-serve\";\n\nclass ConfigOption {\n private readonly _value: T;\n private readonly _label: string;\n private readonly _kind: ConfigOptionKind;\n\n constructor({\n value,\n label = value.toString(),\n kind = \"self-serve\",\n }: {\n value: T;\n label?: string;\n kind?: ConfigOptionKind;\n }) {\n this._value = value;\n this._label = label;\n this._kind = kind;\n }\n\n get value() {\n return this._value;\n }\n\n get label() {\n return this._label;\n }\n\n get kind() {\n return this._kind;\n }\n}\n\nexport const projectOptions = {\n p20: new ConfigOption({ value: \"20\" }),\n p30: new ConfigOption({ value: \"30\" }),\n p40: new ConfigOption({ value: \"40\" }),\n p50: new ConfigOption({ value: \"50\" }),\n p60: new ConfigOption({ value: \"60\" }),\n p70: new ConfigOption({ value: \"70\" }),\n p80: new ConfigOption({ value: \"80\" }),\n p90: new ConfigOption({ value: \"90\" }),\n p100: new ConfigOption({ value: \"100\" }),\n p120: new ConfigOption({ value: \">120\", label: \"120+\", kind: \"exceeds-self-serve\" }),\n} as const;\n\nexport type ValidProjectValues = (typeof projectOptions)[keyof typeof projectOptions][\"value\"];\n\nexport const tenantOptions = {\n t0: new ConfigOption({ value: \"0\" }),\n t10: new ConfigOption({ value: \"10\" }),\n t20: new ConfigOption({ value: \"20\" }),\n t30: new ConfigOption({ value: \"30\" }),\n t40: new ConfigOption({ value: \"40\" }),\n t50: new ConfigOption({ value: \"50\" }),\n t60: new ConfigOption({ value: \"60\" }),\n t70: new ConfigOption({ value: \"70\" }),\n t80: new ConfigOption({ value: \"80\" }),\n t90: new ConfigOption({ value: \"90\" }),\n t100: new ConfigOption({ value: \"100\" }),\n t120: new ConfigOption({ value: \">120\", label: \"120+\", kind: \"exceeds-self-serve\" }),\n} as const;\n\nexport type ValidTenantValues = (typeof tenantOptions)[keyof typeof tenantOptions][\"value\"];\n\nexport const machineOptions = {\n m0: new ConfigOption({ value: \"0\" }),\n m10: new ConfigOption({ value: \"10\" }),\n m20: new ConfigOption({ value: \"20\" }),\n m30: new ConfigOption({ value: \"30\" }),\n m40: new ConfigOption({ value: \"40\" }),\n m50: new ConfigOption({ value: \"50\" }),\n m60: new ConfigOption({ value: \"60\" }),\n m70: new ConfigOption({ value: \"70\" }),\n m80: new ConfigOption({ value: \"80\" }),\n m90: new ConfigOption({ value: \"90\" }),\n m100: new ConfigOption({ value: \"100\" }),\n m120: new ConfigOption({ value: \">120\", label: \"120+\", kind: \"exceeds-self-serve\" }),\n} as const;\n\nexport type ValidMachineValues = (typeof machineOptions)[keyof typeof machineOptions][\"value\"];\n\ntype BaseConfigurationInputs = {\n projects: ValidProjectValues;\n tenants: ValidTenantValues;\n machines: ValidMachineValues;\n support: SupportOptions;\n};\n\ntype ServerConfigurationInputs = BaseConfigurationInputs;\n\ntype CloudConfigurationInputs = BaseConfigurationInputs & {\n tasks: \"5\" | \"10\" | \"20\" | \">40\";\n};\n\nexport type CheckoutPlanConfigurationInputs = CloudConfigurationInputs | ServerConfigurationInputs;\n\nexport function isCloudPlanConfig(config: CheckoutPlanConfigurationInputs): config is CloudConfigurationInputs {\n return config.hasOwnProperty(\"tasks\");\n}\n\n/**\n * Convert plan config quantity string, which may also have a greater than symbol, to an int\n * @param quantity\n */\nexport const convertPlanConfigQuantityToInt = (quantity: string) => parseInt(quantity.replace(\">\", \"\"), 10);\n\nconst PlanConfigInfoText = styled(Typography)`\n color: ${colorScales.slate[600]};\n font-size: 0.875rem;\n`;\n\nconst RadioOptionsOfKind = ({\n options,\n kind,\n radioProps,\n}: {\n options: Record>;\n kind: ConfigOptionKind;\n radioProps: Omit, \"value\">;\n}) => {\n return (\n <>\n {Object.values(options)\n .filter((v) => v.kind === kind)\n .map((option) => {\n return (\n \n {option.label}\n \n );\n })}\n \n );\n};\n\nexport function CheckoutPlanConfigurationStep(props: CheckoutPlanConfigurationStepProps) {\n const {\n onBack,\n onSubmit,\n onChanged,\n orderSummary,\n sx,\n subscriptionType,\n initialData,\n isBeyondStandardEntitlements,\n upgradePlanTitle,\n } = props;\n\n const stepTestId = \"checkout-plan-configuration-step\";\n\n const { handleSubmit, control, setValue, getValues } = useForm();\n const { showDialog } = useCheckoutContactSalesDialog();\n const { getCurrentCountry } = useCountries();\n\n // map plan config for contact sales dialog\n const mapConfigData = (data: CheckoutPlanConfigurationInputs) => {\n return {\n projectQuantity: data.projects,\n taskQuantity: isCloudPlanConfig(data) ? data.tasks : undefined,\n support: data.support,\n tenantQuantity: data.tenants,\n machineQuantity: data.machines,\n };\n };\n\n const showContactSalesDialog = () =>\n showDialog({ planConfig: mapConfigData(getValues()), country: getCurrentCountry() });\n\n return (\n \n
    onSubmit(data))}>\n {upgradePlanTitle}\n }>\n \n \n Professional plan configuration\n \n \n Projects\n \n (\n ) => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const value = e.target.value as CheckoutPlanConfigurationInputs[\"projects\"];\n setValue(field.name, value);\n onChanged(getValues());\n }}\n >\n \n \n \n \n )}\n >\n \n Projects represent each component you deploy (e.g. each application, service, API, or database). We offer\n projects in the Professional plan in groups of 10.\n \n \n If you need more than 100 projects, please{\" \"}\n \n contact us\n \n .\n \n \n Concurrent tasks\n \n {subscriptionType === \"selfhosted\" && (\n \n The number of deployments, runbooks, and other jobs your Octopus instance can run at a time. Task caps\n get handled by your on-site server. See the{\" \"}\n \n recommendations in our docs\n {\" \"}\n for best practices.\n \n )}\n {subscriptionType === \"cloud\" && isCloudPlanConfig(initialData) && (\n <>\n (\n ) => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const value = e.target.value as CloudConfigurationInputs[\"tasks\"];\n setValue(field.name, value);\n onChanged(getValues());\n }}\n >\n \n 5\n \n \n 10\n \n \n 20\n \n \n 40\"} field={field} variant={\"tertiary\"}>\n 40+\n \n \n )}\n >\n \n The number of deployments, runbooks, and other jobs your Octopus instance can run at a time. We offer\n task caps in groups of 5, 10, and 20.\n \n \n If you need more than 20 concurrent tasks, please{\" \"}\n \n contact us\n \n .\n \n \n )}\n \n Support\n \n (\n ) => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const value = e.target.value as SupportOptions;\n setValue(field.name, value);\n onChanged(getValues());\n }}\n >\n \n 9am–5pm Weekdays\n \n \n \n 24/7\n \n \n )}\n >\n \n We offer email support 9-5pm weekdays on the Professional plan. If you need 24/7 support, please{\" \"}\n \n contact us\n \n .\n \n \n \n \n Add-ons\n \n \n Tenants\n \n (\n ) => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const value = e.target.value as CloudConfigurationInputs[\"tenants\"];\n setValue(field.name, value);\n onChanged(getValues());\n }}\n >\n \n \n \n \n )}\n >\n \n Tenants let you model multiple customers, instances, or locations to account for their unique needs,\n without duplicating project configuration.\n \n \n If you need more than 100 tenants, please{\" \"}\n \n contact us\n \n .\n \n \n Machines\n \n (\n ) => {\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const value = e.target.value as CloudConfigurationInputs[\"machines\"];\n setValue(field.name, value);\n onChanged(getValues());\n }}\n >\n \n \n \n \n )}\n >\n \n A machine is a Windows or Linux application host registered as a deployment target with Octopus.\n \n \n If you need more than 100 machines, please{\" \"}\n \n contact us\n \n .\n \n \n \n \n \n \n \n Return to select plan\n \n \n \n \n Continue to information\n \n \n \n \n
    \n );\n}\n","export default __webpack_public_path__ + \"zuora-1.3.1.min.7c97223de40552e9079156746c1b9621.hashedasset.js\";","// @ts-expect-error -- importing as url\nimport Z from \"resources/scripts/zuora-1.3.1.min.js\";\n\n// https://knowledgecenter.zuora.com/Zuora_Payments/Payment_Page_and_Payment_Link/Payment_Pages_2.0/EA_Integrate_Payment_Pages_2.0#Include_the_Zuora_JavaScript_Library\n// eslint-disable-next-line @typescript-eslint/consistent-type-assertions\nexport const zuoraLibraryUrl = Z as string;\nexport const zuoraLibraryScriptId = \"zuora-library\";\nexport const zuoraPaymentIframeId = \"zuora_payment\";\n","import React, { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport { Box, CircularProgress, styled } from \"@mui/material\";\nimport { useConfiguration } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport type { EventListener } from \"shared/EventListener\";\nimport type { EventPaymentFailure, EventPaymentSuccessful } from \"shared/PaymentEvents\";\nimport { PaymentEventTypes } from \"shared/PaymentEvents\";\nimport type { ZuoraClientErrorMessageCallback } from \"shared/ZuoraLibraryTypes\";\nimport { isZuoraLibrary, type ZuoraCallback } from \"shared/ZuoraLibraryTypes\";\nimport { getZuoraRsaSignature } from \"client/api/PurchaseApi\";\nimport { CustomErrorAlert, ErrorMessageTryAgainOrContactSupport } from \"components/alert/CustomErrorAlert\";\nimport { zuoraLibraryUrl, zuoraLibraryScriptId, zuoraPaymentIframeId } from \"areas/checkout/constants/Zuora\";\n\nexport const useZuoraHostedPaymentPage = (\n zuoraCallback: ZuoraCallback,\n clientErrorMessageCallback: ZuoraClientErrorMessageCallback,\n paymentSuccessful: EventListener,\n paymentFailure: EventListener\n) => {\n const config = useConfiguration();\n const [isLoading, setIsLoading] = useState(true);\n const [requestSignatureError, setRequestSignatureError] = useState();\n const [zuoraConfigError, setZuoraConfigError] = useState();\n const controllerRef = useRef(null);\n\n const getZuoraConfig = useCallback(() => {\n if (!config.configuration) {\n const e = new Error(\"Missing Zuora config\");\n setZuoraConfigError(e);\n return;\n }\n\n const {\n zuoraTenantId: tenantId,\n zuoraHostedPaymentPageId: id,\n zuoraHostedPaymentPageUri: url,\n zuoraPaymentGatewayName: paymentGateway,\n } = config.configuration;\n\n return {\n tenantId,\n id,\n url,\n paymentGateway,\n };\n }, [config.configuration]);\n const zuoraConfig = useMemo(getZuoraConfig, [getZuoraConfig]);\n\n const renderZuora = useCallback(async () => {\n if (!zuoraConfig) {\n const e = new Error(\"Missing Zuora config\");\n setZuoraConfigError(e);\n return;\n }\n setIsLoading(true);\n\n // eslint-disable-next-line @typescript-eslint/init-declarations\n let auth;\n try {\n auth = await getZuoraRsaSignature();\n } catch (e) {\n if (e instanceof Error) {\n setRequestSignatureError(e);\n }\n return;\n } finally {\n setIsLoading(false);\n }\n\n const params = {\n ...zuoraConfig,\n authorizationAmount: 1,\n style: \"inline\",\n submitEnabled: \"false\",\n locale: \"en_US\",\n param_supportedTypes: \"AmericanExpress,JCB,Visa,MasterCard,Discover\",\n signatureType: \"advanced\",\n token: auth.token,\n signature: auth.signature,\n key: auth.key,\n } as const;\n\n const Z = window.Z;\n if (isZuoraLibrary(Z)) {\n Z.renderWithErrorHandler(params, {}, zuoraCallback, clientErrorMessageCallback);\n }\n }, [zuoraCallback, clientErrorMessageCallback, zuoraConfig]);\n\n useEffect(() => {\n /** Adds event listeners for events dispatched from the callback page */\n const addZuoraEventListeners = () => {\n if (controllerRef.current) {\n controllerRef.current.abort();\n }\n\n const controller = new AbortController();\n controllerRef.current = controller;\n const signal = controllerRef.current.signal;\n\n window.addEventListener(PaymentEventTypes.PaymentSuccessful, paymentSuccessful, { signal });\n window.addEventListener(PaymentEventTypes.PaymentFailure, paymentFailure, { signal });\n };\n\n addZuoraEventListeners();\n\n return () => {\n // abort event listeners\n if (controllerRef.current) {\n controllerRef.current.abort();\n }\n };\n }, [paymentFailure, paymentSuccessful]);\n\n return { isLoading, renderZuora, requestSignatureError, zuoraConfigError };\n};\n\nexport const useZuoraLibraryScriptLoader = () => {\n const hasLoadedScript =\n !!document.getElementById(zuoraLibraryScriptId) && typeof window.Z === \"object\" && window.Z !== null;\n const [isZuoraLibraryReady, setIsZuoraLibraryReady] = useState(hasLoadedScript);\n const [error, setError] = useState();\n\n useEffect(() => {\n if (document.getElementById(zuoraLibraryScriptId)) {\n // script element already exists, so return early\n return;\n }\n\n const zuoraScriptLoadEvent = () => {\n setIsZuoraLibraryReady(true);\n };\n\n const zuoraScriptError = () => {\n const e = new Error(\"Failed to load Zuora library\");\n setError(e);\n };\n\n // dynamically load zuora library script\n const script = document.createElement(\"script\");\n script.id = zuoraLibraryScriptId;\n script.src = zuoraLibraryUrl;\n script.async = true;\n script.onload = zuoraScriptLoadEvent;\n script.onerror = zuoraScriptError;\n document.body.appendChild(script);\n\n return () => {\n document.getElementById(zuoraLibraryScriptId)?.remove();\n setIsZuoraLibraryReady(false);\n };\n }, []);\n\n return { isZuoraLibraryReady, error };\n};\n\nconst ZuoraContainer = styled(\"div\")`\n min-height: 378px;\n iframe#z_hppm_iframe {\n background: transparent;\n }\n`;\n\nconst LoadingState = styled(\"div\")`\n display: flex;\n justify-content: center;\n align-items: center;\n min-height: 378px;\n`;\n\nexport const ZuoraHostedPaymentFormContainer = ({\n isZuoraLibraryReady,\n zuoraCallback,\n clientErrorMessageCallback,\n paymentSuccessful,\n paymentFailure,\n attempt,\n}: {\n isZuoraLibraryReady: boolean;\n zuoraCallback: ZuoraCallback;\n clientErrorMessageCallback: ZuoraClientErrorMessageCallback;\n paymentSuccessful: EventListener;\n paymentFailure: EventListener;\n attempt: number;\n}) => {\n const {\n isLoading: loadingZuoraHostedPaymentPage,\n renderZuora,\n requestSignatureError,\n zuoraConfigError,\n } = useZuoraHostedPaymentPage(zuoraCallback, clientErrorMessageCallback, paymentSuccessful, paymentFailure);\n const isLoading = useState(isZuoraLibraryReady && !loadingZuoraHostedPaymentPage ? true : false);\n\n /** Render Zuora Hosted Payment Page when the Zuora library becomes ready or the attempt number is updated */\n useEffect(() => {\n if (isZuoraLibraryReady) {\n renderZuora();\n }\n }, [renderZuora, isZuoraLibraryReady, attempt]);\n\n if (requestSignatureError || zuoraConfigError) {\n return (\n \n } />\n \n );\n }\n\n return (\n \n {isLoading && (\n \n \n \n )}\n \n );\n};\n","import React from \"react\";\nimport { Typography, styled } from \"@mui/material\";\n\nexport type ZuoraServerSideError = {\n key: string;\n code?: string;\n field?: string;\n message: string;\n};\n\nconst ServerSideErrorMessage = styled(Typography)`\n margin: 1em 0;\n color: #c95340;\n line-height: 1.4;\n`;\n\nexport const CheckoutZuoraServerSideErrors = ({ errors }: { errors: ZuoraServerSideError[] | undefined }) => {\n const errorItems =\n errors &&\n errors.map((error) => {\n return {error.message};\n });\n return <>{errorItems};\n};\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { ChevronLeft } from \"@mui/icons-material\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { Typography, Grid, Box } from \"@mui/material\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { formatStreetAddress } from \"utils/formatters/StreetAddressFormatter\";\nimport type { EventListener } from \"shared/EventListener\";\nimport type { EventPaymentFailure, EventPaymentSuccessful } from \"shared/PaymentEvents\";\nimport { isZuoraLibrary, type ZuoraCallback, type ZuoraClientErrorMessageCallback } from \"shared/ZuoraLibraryTypes\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport type { AdvancedDigitalSignature, ProductType } from \"client/api/PurchaseApi\";\nimport { checkout } from \"client/api/PurchaseApi\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { CustomErrorAlert, ErrorMessageTryAgainOrContactSupport } from \"components/alert/CustomErrorAlert\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\nimport type { AutocompleteAddressValue } from \"areas/checkout/components/CheckoutAddressField\";\nimport { CheckoutPrimaryButton, CheckoutSecondaryButton } from \"areas/checkout/components/CheckoutButtons\";\nimport { isDropdownAutocompleteOption } from \"areas/checkout/components/CheckoutDropdownInput\";\nimport { CheckoutLockIcon } from \"areas/checkout/components/CheckoutLockIcon\";\nimport { CheckoutStepLayout } from \"areas/purchasing/components/CheckoutStepLayout\";\nimport type { CheckoutCompanyForm, CheckoutIndividualForm } from \"./CheckoutPersonalDetailsStep\";\nimport {\n convertPlanConfigQuantityToInt,\n isCloudPlanConfig,\n type CheckoutPlanConfigurationInputs,\n} from \"./CheckoutPlanConfigurationStep\";\nimport { ZuoraHostedPaymentFormContainer } from \"./CheckoutZuoraIframe\";\nimport type { ZuoraServerSideError } from \"./CheckoutZuoraServerSideErrors\";\nimport { CheckoutZuoraServerSideErrors } from \"./CheckoutZuoraServerSideErrors\";\n\ninterface CheckoutPaymentStepProps {\n onBack: () => void;\n onOrderComplete: () => void;\n orderSummary: React.ReactElement;\n billingProduct: ProductType;\n planConfigData?: CheckoutPlanConfigurationInputs;\n personalStepDetails: CheckoutCompanyForm | CheckoutIndividualForm;\n isZuoraLibraryReady: boolean;\n sx?: SxProps;\n hasOrderPreviewError: boolean;\n}\n\nconst PaymentStepFrame = ({\n children,\n orderSummary,\n sx,\n}: {\n children: React.ReactElement;\n orderSummary: React.ReactElement;\n sx?: SxProps;\n}) => (\n \n \n Payment Details\n \n {children}\n \n);\n\nexport function CheckoutPaymentStep(props: CheckoutPaymentStepProps) {\n const {\n onBack,\n onOrderComplete,\n personalStepDetails,\n billingProduct,\n planConfigData,\n orderSummary,\n isZuoraLibraryReady,\n sx,\n hasOrderPreviewError,\n } = props;\n const [isSubmitEnabled, setIsSubmitEnabled] = useState(false);\n const [serverSideErrors, setServerSideErrors] = useState(undefined);\n const [loadZuoraIframeError, setLoadZuoraIframeError] = useState(undefined);\n const [orderError, setOrderError] = useState(undefined);\n const [attempt, setAttempt] = useState(0);\n\n const { entity: licenseOrSubscription } = useEntity();\n\n const submitPayment = () => {\n setIsSubmitEnabled(false);\n setServerSideErrors(undefined);\n const Z = window.Z;\n if (isZuoraLibrary(Z)) {\n Z.submit();\n }\n };\n\n const convertStreetAddressObjectToAddressLine = (streetAddress: AutocompleteAddressValue): string => {\n return formatStreetAddress({\n streetName: streetAddress.streetName,\n streetNumber: streetAddress.streetNumber ?? \"\",\n countryCode: streetAddress.countryCode,\n });\n };\n\n const onPaymentComplete = useCallback(\n async (advancedDigitalSignature: AdvancedDigitalSignature) => {\n const req = (() => {\n const form = personalStepDetails;\n const businessAccount = form.purchasingAs === \"company\";\n\n const isCloudConfig = planConfigData && isCloudPlanConfig(planConfigData);\n const taskCap = isCloudConfig ? convertPlanConfigQuantityToInt(planConfigData.tasks) : undefined;\n const pricingParameters = planConfigData && {\n projects: convertPlanConfigQuantityToInt(planConfigData.projects),\n tenants: convertPlanConfigQuantityToInt(planConfigData.tenants),\n machines: convertPlanConfigQuantityToInt(planConfigData.machines),\n taskCap: taskCap,\n };\n\n if (businessAccount) {\n const billToContact = {\n firstName: form.billingContact.firstName,\n lastName: form.billingContact.lastName,\n email: form.billingContact.email,\n // Note: uses the company address\n address1:\n typeof form.companyContact.streetAddress === \"string\"\n ? form.companyContact.streetAddress\n : convertStreetAddressObjectToAddressLine(form.companyContact.streetAddress),\n country: form.companyContact.country?.value || \"\",\n city: form.companyContact.city,\n state: isDropdownAutocompleteOption(form.companyContact.state)\n ? form.companyContact.state.value\n : form.companyContact.state ?? \"\",\n postalCode: form.companyContact.postcode,\n };\n const companyName = form.companyContact.name;\n const taxId = typeof form.taxId === \"string\" ? form.taxId.replace(/\\s/g, \"\") : undefined;\n\n return {\n billingProduct,\n pricingParameters,\n serial: licenseOrSubscription?.serial ?? \"\",\n businessAccount,\n billToContact,\n companyName,\n taxId,\n advancedDigitalSignature,\n };\n } else {\n const billToContact = {\n firstName: form.billingContact.firstName,\n lastName: form.billingContact.lastName,\n email: form.billingContact.email,\n address1:\n typeof form.billingContact.streetAddress === \"string\"\n ? form.billingContact.streetAddress\n : convertStreetAddressObjectToAddressLine(form.billingContact.streetAddress),\n country: form.billingContact.country?.value || \"\",\n city: form.billingContact.city,\n state: isDropdownAutocompleteOption(form.billingContact.state)\n ? form.billingContact.state.value\n : form.billingContact.state ?? \"\",\n postalCode: form.billingContact.postcode,\n };\n\n return {\n billingProduct,\n pricingParameters,\n serial: licenseOrSubscription?.serial ?? \"\",\n businessAccount,\n billToContact,\n advancedDigitalSignature,\n };\n }\n })();\n\n try {\n await checkout(req);\n } catch (e) {\n if (e instanceof Error) {\n setOrderError(e);\n }\n return;\n }\n\n onOrderComplete();\n },\n [billingProduct, licenseOrSubscription?.serial, onOrderComplete, personalStepDetails, planConfigData]\n );\n\n const zuoraLoadEvent = () => {\n setIsSubmitEnabled(true);\n };\n\n /** Handles invalid request to get the Zuora Hosted Payment Page, e.g. invalid signature provided */\n const zuoraCallback = useCallback((response) => {\n if (!response.success) {\n const e = new Error(\"Error loading payment form.\");\n setLoadZuoraIframeError(e);\n return;\n }\n setLoadZuoraIframeError(undefined);\n }, []);\n\n /** Respond to Zuora Hosted Payment Page client error */\n const clientErrorMessageCallback = useCallback(\n (key, code, message, rawGatewayInfo) => {\n // error encountered, so re-enable submit\n setIsSubmitEnabled(true);\n\n const errorMessage = message;\n // Note: error messages can optionally be customized/overwritten here\n\n const Z = window.Z;\n if (isZuoraLibrary(Z)) {\n // send the error message to the Hosted Payment Page to be displayed\n Z.sendErrorMessageToHpm(key, errorMessage);\n }\n },\n []\n );\n\n /**\n * Display errors outside the iframe, errors this may receive include an invalid card number, card expiry in the past, etc\n * @param params\n */\n const serverErrorHandler = (params: string) => {\n const searchParams = new URLSearchParams(params);\n const errorCode = searchParams.get(\"errorCode\");\n const errorField = searchParams.get(\"errorField\");\n const errorMessage = searchParams.get(\"errorMessage\");\n const errors = [];\n if (!(errorCode || errorMessage)) {\n const catchAllError = {\n key: \"catchAll\",\n message: \"An error occurred while processing your payment. You haven't been charged, please try again.\",\n };\n errors.push(catchAllError);\n }\n\n if (errorCode || errorMessage) {\n const error = {\n key: \"error\",\n code: errorCode ?? undefined,\n field: errorField ?? undefined,\n message: errorMessage ?? \"\",\n };\n errors.push(error);\n }\n\n setServerSideErrors(errors);\n };\n\n /**\n * After render, within the Zuora Hosted Payment Page, handle server-side errors forwarded from the Zuora Callback page\n * @param _params The forwarded query parameters\n */\n const afterRenderServerErrorMessageCallback = (_params: string) => {\n // Note: this could parse errors from searchParams and use Z.sendErrorMessageToHpm to display errors within the iframe\n };\n\n // Handle paymentSuccessful event emitted from ZuoraCallbackPage\n const paymentSuccessful: EventListener = useCallback(\n (e) => {\n const {\n tenantId,\n token,\n timestamp,\n pageId,\n refId,\n signature,\n fieldPassthrough1,\n fieldPassthrough2,\n fieldPassthrough3,\n fieldPassthrough4,\n fieldPassthrough5,\n } = e.detail;\n\n const advancedDigitalSignature = {\n tenantId,\n token,\n timestamp,\n pageId,\n refId,\n signature,\n fieldPassthrough1,\n fieldPassthrough2,\n fieldPassthrough3,\n fieldPassthrough4,\n fieldPassthrough5,\n };\n\n onPaymentComplete(advancedDigitalSignature);\n },\n [onPaymentComplete]\n );\n\n // Handle paymentFailure event emitted from ZuoraCallbackPage\n const paymentFailure: EventListener = useCallback((e) => {\n const params = e.detail.searchParams;\n // display errors outside iframe\n serverErrorHandler(params);\n // update the attempt to render the Hosted Payment Page form again\n setAttempt((prevState) => {\n return prevState + 1;\n });\n // re-enable submit button\n setIsSubmitEnabled(true);\n // display server errors after iframe render\n const Z = window.Z;\n if (isZuoraLibrary(Z)) {\n Z.runAfterRender(() => afterRenderServerErrorMessageCallback(params));\n }\n }, []);\n\n useEffect(() => {\n if (isZuoraLibraryReady) {\n const Z = window.Z;\n if (isZuoraLibrary(Z)) {\n Z.setEventHandler(\"onloadCallback\", zuoraLoadEvent);\n }\n }\n }, [isZuoraLibraryReady]);\n\n const FormButtons = () => {\n return (\n \n \n \n \n Return to information\n \n \n \n \n Subscribe & pay\n \n \n \n );\n };\n\n if (orderError) {\n return (\n \n <>\n \n \n \n \n \n \n );\n }\n\n if (loadZuoraIframeError) {\n return (\n \n <>\n \n } />\n \n \n \n \n );\n }\n\n return (\n \n <>\n \n \n \n \n \n );\n}\n","export const isEmailValid = (email: string): boolean => {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n return emailRegex.test(email);\n};\n","import React from \"react\";\nimport type { ReactElement } from \"react\";\nimport type { AutocompleteChangeDetails, AutocompleteChangeReason } from \"@mui/material\";\nimport { Stack } from \"@mui/material\";\nimport { useCountries } from \"contexts/CountriesProvider/CountriesProvider\";\nimport type { DropdownAutocompleteOption } from \"./CheckoutDropdownInput\";\nimport { CheckoutFormField } from \"./CheckoutFormField\";\n\nexport interface AutocompleteAddressValue {\n countryCode: string;\n countrySubdivision: string;\n countrySubdivisionName: string;\n municipality: string;\n postalCode: string | null;\n streetName: string;\n streetNumber: string | null;\n freeFormAddress: string;\n}\n\ntype OnInput = React.FormEventHandler;\n\ntype OnChange = (\n event: React.SyntheticEvent,\n value: unknown | AutocompleteAddressValue,\n reason: AutocompleteChangeReason,\n details?: AutocompleteChangeDetails | undefined\n) => void;\n\ninterface AddressSetters {\n /** Address selection callback with country value */\n setCountry?: (value: DropdownAutocompleteOption | null) => void;\n /** Address selection callback with city value */\n setCity?: (value: string) => void;\n /** Address selection callback with state value */\n setState?: (value: DropdownAutocompleteOption | string) => void;\n /** Address selection callback with postcode value */\n setPostcode?: (value: string | null) => void;\n /** Address selection callback with an address object */\n setAddress?: (value: AutocompleteAddressValue | null) => void;\n}\n\nexport interface CheckoutAddressFieldProps extends AddressSetters {\n countryInput?: ReactElement;\n renderStreetAddressInput: ({ onChange }: { onChange?: OnChange }) => ReactElement;\n cityInput?: ReactElement;\n stateInput?: ReactElement;\n postcodeInput?: ReactElement;\n onSelectAddress?: (value: unknown, setters?: AddressSetters) => void;\n errors?: {\n country?: { type: string; message?: string };\n streetAddress?: { type: string; message?: string };\n city?: { type: string; message?: string };\n state?: { type: string; message?: string };\n postcode?: { type: string; message?: string };\n };\n}\n\nexport const isAutocompleteAddressValue = (value: unknown): value is AutocompleteAddressValue => {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (\"countryCode\" in value ||\n \"countrySubdivisionName\" in value ||\n \"municipality\" in value ||\n \"postalCode\" in value ||\n \"streetName\" in value ||\n \"streetNumber\" in value)\n );\n};\n\nexport function CheckoutAddressField(props: CheckoutAddressFieldProps) {\n const { countries } = useCountries();\n\n const findCountryByCountryCode = (val: string | undefined) => {\n return countries.find((item) => item.twoDigitIsoCode === val) ?? undefined;\n };\n\n const onSelectAddressDefault = (\n value: unknown | { label: string; value: AutocompleteAddressValue },\n setters?: AddressSetters\n ) => {\n if (typeof value === \"object\" && value !== null && \"value\" in value && value.value !== null) {\n const v = value.value;\n if (isAutocompleteAddressValue(v)) {\n setters?.setAddress && setters?.setAddress(v ?? null);\n const country = findCountryByCountryCode(v.countryCode);\n const countryOption = country ? { label: country.name, value: country.twoDigitIsoCode } : null;\n setters?.setCountry && setters?.setCountry(countryOption);\n setters?.setCity && setters?.setCity(v.municipality ?? \"\");\n\n const state = country?.states.find((state) => state.twoDigitIsoCode === v.countrySubdivision);\n const stateOption = state ? { label: state.name, value: state.twoDigitIsoCode } : v.countrySubdivision ?? \"\";\n\n setters?.setState && setters?.setState(stateOption);\n setters?.setPostcode && setters?.setPostcode(v.postalCode ?? \"\");\n }\n }\n };\n\n const {\n countryInput,\n renderStreetAddressInput,\n cityInput,\n stateInput,\n postcodeInput,\n onSelectAddress = onSelectAddressDefault,\n errors,\n } = props;\n\n const setters = {\n setAddress: props.setAddress,\n setCountry: props.setCountry,\n setCity: props.setCity,\n setState: props.setState,\n setPostcode: props.setPostcode,\n };\n\n const onChange: OnChange = (event, value, reason, details) => {\n if (reason === \"selectOption\" && onSelectAddress) {\n onSelectAddress(value, setters);\n }\n };\n\n const streetAddressInput = renderStreetAddressInput({ onChange });\n\n return (\n \n {countryInput && (\n \n )}\n \n \n {cityInput && (\n \n )}\n {stateInput && (\n \n )}\n \n \n {postcodeInput && (\n \n )}\n \n \n );\n}\n","import axiosClient from \"client/axios-client\";\n\nconst BASE_URL = \"purchase\";\n\nexport type AddressSearchResultDto = {\n countryCode: string;\n countrySubdivision: string;\n countrySubdivisionName: string;\n municipality: string;\n postalCode: string | null;\n streetName: string;\n streetNumber: string | null;\n freeFormAddress: string;\n};\n\nexport const searchAddress = async (signal: AbortSignal, search: string, countryCode?: string) => {\n const response = await axiosClient.post(\n `${BASE_URL}/address-search`,\n {\n search,\n countryCode,\n },\n {\n signal,\n }\n );\n return response.data;\n};\n","import React, { useCallback, useEffect, useRef, useState } from \"react\";\nimport {\n debounce,\n type AutocompleteChangeDetails,\n type AutocompleteChangeReason,\n type AutocompleteInputChangeReason,\n type InputBaseComponentProps,\n} from \"@mui/material\";\nimport { searchAddress } from \"client/api/AddressSearchApi\";\nimport type { AutocompleteAddressValue } from \"./CheckoutAddressField\";\nimport type { AutocompleteOption } from \"./CheckoutAutocompleteInput\";\nimport { CheckoutAutocompleteInput } from \"./CheckoutAutocompleteInput\";\n\nexport interface StreetAddressAutocompleteOption {\n label: string;\n value: AutocompleteAddressValue;\n}\n\ntype OnChange = (\n event: React.SyntheticEvent,\n value: unknown | StreetAddressAutocompleteOption,\n reason: AutocompleteChangeReason,\n details?: AutocompleteChangeDetails | undefined\n) => void;\n\ntype OnInputChange = (\n event: React.SyntheticEvent,\n value: string,\n reason: AutocompleteInputChangeReason\n) => void;\n\ninterface CheckoutStreetAddressInputProps {\n id?: string;\n defaultOptions?: StreetAddressAutocompleteOption[];\n error?: boolean;\n required?: boolean;\n placeholder?: string;\n fullWidth?: boolean;\n value?: StreetAddressAutocompleteOption | string | null;\n onChange?: OnChange;\n onInputChange?: OnInputChange;\n freeSolo?: boolean;\n countryCode?: string;\n loading?: boolean;\n InputProps?: InputBaseComponentProps;\n}\n\nconst getOptions = async (signal: AbortSignal, inputValue: string, countryCode?: string) => {\n const addresses = await searchAddress(signal, inputValue, countryCode);\n const addressOptions = addresses.map((item) => {\n return { label: item.freeFormAddress, value: item };\n });\n return addressOptions;\n};\n\nconst debouncedGetOptions = debounce(\n async (\n { signal, value, countryCode }: { signal: AbortSignal; value: string; countryCode?: string },\n success: (options: StreetAddressAutocompleteOption[]) => void,\n fail: (e: Error) => void\n ) => {\n try {\n const addressOptions = await getOptions(signal, value, countryCode);\n success(addressOptions);\n } catch (e) {\n if (e instanceof Error) {\n if (e.name === \"CanceledError\") {\n // request was cancelled, ignore it\n return;\n }\n fail(e);\n }\n }\n },\n 400\n);\n\nexport function CheckoutStreetAddressInput(props: CheckoutStreetAddressInputProps) {\n const {\n id,\n error,\n required,\n placeholder,\n fullWidth = true,\n defaultOptions,\n value,\n onChange,\n onInputChange,\n freeSolo = true,\n countryCode,\n InputProps,\n } = props;\n const [options, setOptions] = useState(defaultOptions);\n const [loading, setLoading] = useState(props.loading ?? false);\n const controllerRef = useRef(null);\n const lastSearchValueRef = useRef(undefined);\n const countryCodeRef = useRef(countryCode);\n\n const updateOptions = useCallback((value: string, countryCode: string | undefined) => {\n if (controllerRef.current) {\n controllerRef.current.abort();\n }\n\n const controller = new AbortController();\n controllerRef.current = controller;\n const signal = controllerRef.current.signal;\n\n lastSearchValueRef.current = value;\n countryCodeRef.current = countryCode;\n setLoading(true);\n debouncedGetOptions(\n { signal, value, countryCode },\n (addressOptions) => {\n setOptions(addressOptions);\n setLoading(false);\n },\n () => {\n setLoading(false);\n }\n );\n }, []);\n\n const onInputChangeHandler: OnInputChange = async (event, value, reason) => {\n updateOptions(value, countryCode);\n onInputChange && onInputChange(event, value, reason);\n };\n\n const getOptionKey = (option: unknown) => {\n if (\n typeof option === \"object\" &&\n option !== null &&\n \"value\" in option &&\n typeof option.value === \"object\" &&\n option.value !== null &&\n \"label\" in option\n ) {\n if (\"countryCode\" in option.value) {\n return `${option.value.countryCode}-${option.label}`;\n }\n return `${option.label}`;\n }\n return \"\";\n };\n\n useEffect(() => {\n // refetch options when countryCode is changed\n if (countryCode !== countryCodeRef.current && lastSearchValueRef.current) {\n updateOptions(lastSearchValueRef.current, countryCode);\n }\n\n return () => {\n if (controllerRef.current) {\n controllerRef.current.abort();\n }\n };\n }, [countryCode, updateOptions]);\n\n return (\n x}\n freeSolo={freeSolo}\n loading={loading}\n getOptionKey={getOptionKey}\n InputProps={InputProps}\n />\n );\n}\n","import React, { useEffect, useState } from \"react\";\nimport { faBuilding, faUser } from \"@fortawesome/free-regular-svg-icons\";\nimport { ChevronLeft } from \"@mui/icons-material\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { Box, Typography, Grid, Stack } from \"@mui/material\";\nimport { useErrorBoundary } from \"react-error-boundary\";\nimport type { FormState } from \"react-hook-form\";\nimport { FormProvider, type FieldErrors, useForm } from \"react-hook-form\";\nimport { FontAwesomeSvgIcon } from \"@cpt/components\";\nimport { useCountries } from \"contexts/CountriesProvider/CountriesProvider\";\nimport { isEmailValid } from \"utils/emailHelpers\";\nimport type { State } from \"client/api/CountriesApi\";\nimport type { OrderPreview } from \"client/api/PurchaseApi\";\nimport { CustomErrorAlert, ErrorMessageWithTryAgainButtonOrContactSales } from \"components/alert/CustomErrorAlert\";\nimport type { AutocompleteAddressValue } from \"areas/checkout/components/CheckoutAddressField\";\nimport { CheckoutAddressField, isAutocompleteAddressValue } from \"areas/checkout/components/CheckoutAddressField\";\nimport { CheckoutButtonLikeRadio } from \"areas/checkout/components/CheckoutButtonLikeRadio\";\nimport { CheckoutPrimaryButton, CheckoutSecondaryButton } from \"areas/checkout/components/CheckoutButtons\";\nimport { CheckoutDropdownInput } from \"areas/checkout/components/CheckoutDropdownInput\";\nimport type { DropdownAutocompleteOption } from \"areas/checkout/components/CheckoutDropdownInput\";\nimport { CheckoutFormField } from \"areas/checkout/components/CheckoutFormField\";\nimport type { StreetAddressAutocompleteOption } from \"areas/checkout/components/CheckoutStreetAddressInput\";\nimport { CheckoutStreetAddressInput } from \"areas/checkout/components/CheckoutStreetAddressInput\";\nimport { CheckoutTextInput } from \"areas/checkout/components/CheckoutTextInput\";\nimport { CheckoutStepLayout } from \"areas/purchasing/components/CheckoutStepLayout\";\nimport type { OrderPreviewError } from \"../Checkout\";\nimport { CheckoutStepNames } from \"../Checkout\";\n\ninterface CheckoutPersonalDetailsStepProps {\n orderPreviewError: OrderPreviewError | null;\n initialData: CheckoutPersonalDetailsInputs;\n prevStep: keyof typeof CheckoutStepNames;\n nextStep: keyof typeof CheckoutStepNames;\n onBack: () => void;\n onSubmit: (data: CheckoutPersonalDetailsInputs) => void;\n onAddressChanged: (data: CheckoutPersonalDetailsInputs) => void;\n onPurchasingAsChanged: (data: CheckoutPersonalDetailsInputs) => void;\n orderSummary: React.ReactElement;\n sx?: SxProps;\n orderPreview: OrderPreview | null;\n upgradePlanTitle: React.ReactNode;\n}\n\nexport interface CheckoutBillingAddress {\n streetAddress: string | AutocompleteAddressValue;\n country: DropdownAutocompleteOption | null;\n city: string;\n state: DropdownAutocompleteOption | string | null;\n postcode: string;\n}\n\nexport interface BillingContactBase {\n firstName: string;\n lastName: string;\n email: string;\n}\n\nexport type IndividualBillingContact = BillingContactBase & CheckoutBillingAddress;\n\nexport type CompanyBillingContact = BillingContactBase;\n\nexport type CompanyContact = {\n name: string;\n} & CheckoutBillingAddress;\n\nexport type PurchasingAs = \"company\" | \"individual\" | null;\n\nexport type CheckoutCompanyForm = {\n purchasingAs: \"company\";\n billingContact: CompanyBillingContact;\n companyContact: CompanyContact;\n taxId?: string;\n};\n\nexport type CheckoutIndividualForm = {\n purchasingAs: \"individual\";\n billingContact: IndividualBillingContact;\n};\n\nexport type CheckoutPersonalDetailsInputs =\n | CheckoutCompanyForm\n | CheckoutIndividualForm\n | ({\n purchasingAs: null;\n } & (Omit | Omit));\n\nexport const isCheckoutCompanyForm = (\n formData: FormState,\n purchasingAs: PurchasingAs\n): formData is FormState => {\n return purchasingAs === \"company\";\n};\n\nexport const isCheckoutIndividualForm = (\n formData: FormState,\n purchasingAs: PurchasingAs\n): formData is FormState => {\n return purchasingAs === \"individual\";\n};\n\nconst purchasingAsFieldOptions = { required: \"Please select who you are purchasing as\" };\nconst addressFieldOptions = {\n country: {\n required: {\n value: true,\n message: \"Please select a country\",\n },\n },\n streetAddress: {\n required: {\n value: true,\n message: \"Please enter a street address\",\n },\n },\n city: {\n required: {\n value: true,\n message: \"Please enter a city\",\n },\n },\n state: {\n required: {\n value: true,\n message: \"Please enter a province / state\",\n },\n },\n};\n\ntype ContactType = \"billingContact\" | \"companyContact\";\nconst mapErrors = (errors: FieldErrors, contact: ContactType) => {\n const obj: { [index: string]: { message: string } } = {};\n const contactErrors = errors[contact];\n\n if (contactErrors) {\n for (const k in contactErrors) {\n // @ts-expect-error want string but is weird union type\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const message = contactErrors[k]?.message as string;\n obj[k] = { message };\n }\n }\n\n return obj;\n};\n\nexport function CheckoutPersonalDetailsStep(props: CheckoutPersonalDetailsStepProps) {\n const {\n onBack,\n onSubmit,\n onAddressChanged,\n onPurchasingAsChanged,\n initialData,\n nextStep,\n prevStep,\n orderSummary,\n orderPreviewError,\n sx,\n orderPreview,\n upgradePlanTitle,\n } = props;\n\n const { showBoundary } = useErrorBoundary();\n const { countries, getCurrentCountry } = useCountries();\n const [billingContactStates, setBillingContactStates] = useState([]);\n const [companyContactStates, setCompanyContactStates] = useState([]);\n\n const getStates = (countryCode: string | undefined): State[] => {\n if (!countryCode) return [];\n const matchingCountry = countries.find((country) => country.twoDigitIsoCode === countryCode);\n return matchingCountry?.states ?? [];\n };\n\n const formController = useForm({\n mode: \"onSubmit\",\n reValidateMode: \"onSubmit\",\n defaultValues: initialData,\n });\n\n const { register, unregister, formState, watch, setValue, getValues } = formController;\n\n const billingContactCountryCode = watch(\"billingContact.country.value\");\n const companyCountryCode = watch(\"companyContact.country.value\");\n const purchasingAs = watch(\"purchasingAs\");\n const isPurchasingAsBusiness = watch(\"purchasingAs\") === \"company\";\n\n const showTaxIdField = () => isPurchasingAsBusiness && companyCountryCode === \"AU\";\n\n const requireAbnField = () => {\n return (orderPreview?.totalAmount ?? 0) >= 1000;\n };\n\n const taxIdFieldOptions = {\n required: {\n value: (() => {\n if (showTaxIdField()) {\n return requireAbnField();\n }\n return false;\n })(),\n message: \"Please enter ABN\",\n },\n validate: (value: unknown) => {\n if (typeof value === \"string\") {\n const formattedValue = value.replace(/\\s/g, \"\");\n const hasValue = formattedValue.length > 0;\n if (hasValue) {\n if (formattedValue.match(/^\\d{11}$/)) {\n return true;\n }\n return \"ABN must be 11 digits\";\n }\n }\n return requireAbnField() ? \"ABN must be 11 digits\" : true;\n },\n };\n\n const postcodeFieldOptions = {\n required: {\n value: (() => {\n const postcodeRequiredCountryCodes = [\"AU\", \"CA\", \"GB\", \"US\"];\n if (isPurchasingAsBusiness && postcodeRequiredCountryCodes.includes(companyCountryCode)) {\n return true;\n }\n if (!isPurchasingAsBusiness && postcodeRequiredCountryCodes.includes(billingContactCountryCode)) {\n return true;\n }\n return false;\n })(),\n message: \"Please enter a post or ZIP code\",\n },\n };\n\n /** prepopulate company/individual country using geolocation */\n useEffect(() => {\n const currentCountry = getCurrentCountry();\n\n if (!currentCountry) {\n return;\n }\n\n const companyContactCountry = getValues(\"companyContact.country\");\n const billingContactCountry = getValues(\"billingContact.country\");\n if (!companyContactCountry) {\n setValue(\"companyContact.country\", currentCountry);\n }\n if (!billingContactCountry) {\n setValue(\"billingContact.country\", currentCountry);\n }\n }, [countries, getCurrentCountry, getValues, setValue]);\n\n const handlePurchasingAs = (e: React.ChangeEvent) => {\n const value = e.target.value;\n if (value != \"company\" && value != \"individual\") {\n const error = new TypeError(\"Attempted to set purchasingAs to an invalid value\");\n showBoundary(error);\n return;\n }\n const isPurchasingAsBusiness = value === \"company\";\n if (isPurchasingAsBusiness) {\n unregisterIndividual();\n registerCompany();\n }\n if (!isPurchasingAsBusiness) {\n unregisterCompany();\n registerIndividual();\n }\n setValue(\"purchasingAs\", value);\n onPurchasingAsChanged(getValues());\n };\n\n const registerCompany = () => {\n register(\"companyContact.country\");\n register(\"companyContact.name\");\n register(\"taxId\");\n register(\"companyContact.streetAddress\");\n register(\"companyContact.city\");\n register(\"companyContact.state\");\n register(\"companyContact.postcode\");\n register(\"billingContact.firstName\");\n register(\"billingContact.lastName\");\n register(\"billingContact.email\");\n };\n\n const registerIndividual = () => {\n register(\"billingContact.country\");\n register(\"billingContact.firstName\");\n register(\"billingContact.lastName\");\n register(\"billingContact.email\");\n register(\"billingContact.streetAddress\");\n register(\"billingContact.city\");\n register(\"billingContact.state\");\n register(\"billingContact.postcode\");\n };\n\n const unregisterCompany = () => {\n unregister(\"companyContact.country\", { keepValue: true });\n unregister(\"companyContact.name\", { keepValue: true });\n unregister(\"taxId\", { keepValue: true });\n unregister(\"companyContact.streetAddress\", { keepValue: true });\n unregister(\"companyContact.city\", { keepValue: true });\n unregister(\"companyContact.state\", { keepValue: true });\n unregister(\"companyContact.postcode\", { keepValue: true });\n unregister(\"billingContact.firstName\", { keepValue: true });\n unregister(\"billingContact.lastName\", { keepValue: true });\n unregister(\"billingContact.email\", { keepValue: true });\n };\n\n const unregisterIndividual = () => {\n // NOTE: unregisters fields specifically so validation focus order is correct when swapping between company and individual, also to retain shared field values\n unregister(\"billingContact.country\", { keepValue: true });\n unregister(\"billingContact.firstName\", { keepValue: true });\n unregister(\"billingContact.lastName\", { keepValue: true });\n unregister(\"billingContact.email\", { keepValue: true });\n unregister(\"billingContact.streetAddress\", { keepValue: true });\n unregister(\"billingContact.city\", { keepValue: true });\n unregister(\"billingContact.state\", { keepValue: true });\n unregister(\"billingContact.postcode\", { keepValue: true });\n };\n\n // Always register purchasing as. Other fields are registered based on it's value.\n register(\"purchasingAs\");\n\n /**\n * The address could just be a string or it could be the value of an option chosen from the list, this converts it to either a string or StreetAddressAutocompleteOption the input can handle\n * @param value\n */\n const convertAddressToAddressInputValue = (\n value: AutocompleteAddressValue | string\n ): StreetAddressAutocompleteOption | string =>\n isAutocompleteAddressValue(value) ? { label: value.freeFormAddress, value } : value;\n\n const hasCountry = (() => {\n if (isCheckoutCompanyForm(formState, purchasingAs)) {\n return !!companyCountryCode;\n } else if (isCheckoutIndividualForm(formState, purchasingAs)) {\n return !!billingContactCountryCode;\n }\n return false;\n })();\n const hideForm = orderSummary.props.orderPreview === null && !!orderPreviewError;\n const stepTestId = \"checkout-personal-details-step\";\n\n if (hideForm) {\n return (\n \n } />\n \n \n Return to select plan\n \n \n \n );\n } else {\n return (\n \n \n onSubmit(data))}\n style={{ display: \"flex\", width: \"100%\", height: \"100%\" }}\n noValidate\n >\n \n {upgradePlanTitle}\n \n Purchasing as an\n \n \n {\" \"}\n Organization\n \n \n \n Individual\n \n \n }\n />\n \n {isCheckoutCompanyForm(formState, purchasingAs) && (\n \n \n Organization details\n \n ({\n label: country.name,\n value: country.twoDigitIsoCode,\n }))}\n value={watch(\"companyContact.country\")}\n setOption={(value) => {\n setValue(\"companyContact.country\", value ?? null);\n setValue(\"companyContact.state\", null);\n setCompanyContactStates(\n getStates(typeof value?.value === \"string\" ? value.value : undefined)\n );\n // clear the taxId when company country is changed\n setValue(\"taxId\", \"\");\n onAddressChanged(getValues());\n }}\n isOptionEqualToValue=\"valueMatch\"\n error={!!formState.errors?.companyContact?.country}\n placeholder=\"Please select a country\"\n InputProps={{\n ...register(\"companyContact.country\", addressFieldOptions.country),\n }}\n />\n }\n />\n {hasCountry && (\n <>\n setValue(\"companyContact.name\", event.target.value)}\n inputProps={{\n ...register(\"companyContact.name\", {\n required: \"Please enter an organization name\",\n }),\n autoComplete: \"organization\",\n }}\n />\n }\n />\n {showTaxIdField() && (\n setValue(\"taxId\", event.target.value)}\n inputProps={{\n ...register(\"taxId\", taxIdFieldOptions),\n }}\n />\n }\n />\n )}\n (\n {\n // Note: this handles typing in the input, which will always set the value to a string\n if (\n reason === \"reset\" &&\n isAutocompleteAddressValue(getValues(\"companyContact.streetAddress\"))\n ) {\n // skip updating the value when the input is reset and the value is an autocomplete address value so we can preserve richer object values\n return;\n }\n setValue(\"companyContact.streetAddress\", value);\n onAddressChanged(getValues());\n }}\n error={!!formState.errors.companyContact?.streetAddress}\n InputProps={{\n ...register(\"companyContact.streetAddress\", addressFieldOptions.streetAddress),\n }}\n />\n )}\n cityInput={\n {\n setValue(\"companyContact.city\", event.target.value);\n onAddressChanged(getValues());\n }}\n inputProps={{\n ...register(\"companyContact.city\", addressFieldOptions.city),\n autoComplete: \"address-level2\",\n }}\n />\n }\n stateInput={\n companyContactStates.length > 0 ? (\n ({\n label: state.name,\n value: state.twoDigitIsoCode,\n }))}\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n value={watch(\"companyContact.state\") as DropdownAutocompleteOption}\n setOption={(value) => {\n setValue(\"companyContact.state\", value ?? null);\n onAddressChanged(getValues());\n }}\n isOptionEqualToValue=\"valueMatch\"\n error={!!formState.errors.companyContact?.state}\n placeholder=\"Please select a state\"\n InputProps={{\n ...register(\"companyContact.state\", addressFieldOptions.state),\n autoComplete: \"address-level1\",\n }}\n />\n ) : (\n {\n setValue(\"companyContact.state\", event.target.value);\n onAddressChanged(getValues());\n }}\n error={!!formState.errors.companyContact?.state}\n inputProps={{\n ...register(\"companyContact.state\", addressFieldOptions.state),\n autoComplete: \"address-level1\",\n }}\n />\n )\n }\n postcodeInput={\n {\n setValue(\"companyContact.postcode\", event.target.value);\n onAddressChanged(getValues());\n }}\n error={!!formState.errors?.companyContact?.postcode}\n inputProps={{\n ...register(\"companyContact.postcode\", postcodeFieldOptions),\n autoComplete: \"postal-code\",\n }}\n />\n }\n setAddress={(value) => {\n if (isAutocompleteAddressValue(value)) {\n setValue(\"companyContact.streetAddress\", value);\n }\n onAddressChanged(getValues());\n }}\n setCountry={(value) => {\n setValue(\"companyContact.country\", value ?? null);\n onAddressChanged(getValues());\n }}\n setCity={(value) => setValue(\"companyContact.city\", value)}\n setState={(value) => setValue(\"companyContact.state\", value)}\n setPostcode={(value) => setValue(\"companyContact.postcode\", value ?? \"\")}\n errors={mapErrors(formState.errors, \"companyContact\")}\n />\n \n )}\n \n )}\n {((isCheckoutCompanyForm(formState, purchasingAs) && hasCountry) ||\n isCheckoutIndividualForm(formState, purchasingAs)) && (\n \n \n Billing contact\n \n {isCheckoutIndividualForm(formState, purchasingAs) && (\n ({\n label: country.name,\n value: country.twoDigitIsoCode,\n }))}\n value={watch(\"billingContact.country\")}\n setOption={(value) => {\n setValue(\"billingContact.country\", value ?? null);\n setValue(\"billingContact.state\", null);\n setBillingContactStates(\n getStates(typeof value?.value === \"string\" ? value.value : undefined)\n );\n onAddressChanged(getValues());\n }}\n isOptionEqualToValue=\"valueMatch\"\n error={!!formState.errors.billingContact?.country}\n placeholder=\"Please select a country\"\n InputProps={{\n ...register(\"billingContact.country\", addressFieldOptions.country),\n }}\n />\n }\n />\n )}\n {hasCountry && (\n <>\n \n \n }\n sx={{ flexGrow: 1 }}\n />\n \n }\n sx={{ flexGrow: 1 }}\n />\n \n {\n return isEmailValid(email) || \"Must be a valid email address\";\n },\n },\n }),\n autoComplete: \"email\",\n }}\n />\n }\n sx={{ flexGrow: 1 }}\n />\n {isCheckoutIndividualForm(formState, purchasingAs) && (\n (\n {\n // Note: this handles typing in the input, which will always set the value to a string\n if (\n reason === \"reset\" &&\n isAutocompleteAddressValue(getValues(\"billingContact.streetAddress\"))\n ) {\n // skip updating the value when the input is reset and the value is an autocomplete address value so we can preserve richer object values\n return;\n }\n setValue(\"billingContact.streetAddress\", value);\n onAddressChanged(getValues());\n }}\n error={!!formState.errors.billingContact?.streetAddress}\n InputProps={{\n ...register(\"billingContact.streetAddress\", addressFieldOptions.streetAddress),\n }}\n />\n )}\n cityInput={\n {\n setValue(\"billingContact.city\", event.target.value);\n onAddressChanged(getValues());\n }}\n error={!!formState.errors.billingContact?.city}\n inputProps={{\n ...register(\"billingContact.city\", addressFieldOptions.city),\n autoComplete: \"address-level2\",\n }}\n />\n }\n stateInput={\n billingContactStates.length > 0 ? (\n ({\n label: state.name,\n value: state.twoDigitIsoCode,\n }))}\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n value={watch(\"billingContact.state\") as DropdownAutocompleteOption}\n setOption={(value) => {\n setValue(\"billingContact.state\", value ?? null);\n onAddressChanged(getValues());\n }}\n isOptionEqualToValue=\"valueMatch\"\n error={!!formState.errors.billingContact?.state}\n placeholder=\"Please select a state\"\n InputProps={{\n ...register(\"billingContact.state\", addressFieldOptions.state),\n autoComplete: \"address-level1\",\n }}\n />\n ) : (\n {\n setValue(\"billingContact.state\", event.target.value);\n onAddressChanged(getValues());\n }}\n error={!!formState.errors.billingContact?.state}\n inputProps={{\n ...register(\"billingContact.state\", addressFieldOptions.state),\n autoComplete: \"address-level1\",\n }}\n />\n )\n }\n postcodeInput={\n {\n setValue(\"billingContact.postcode\", event.target.value);\n onAddressChanged(getValues());\n }}\n error={!!formState.errors.billingContact?.postcode}\n inputProps={{\n ...register(\"billingContact.postcode\", postcodeFieldOptions),\n autoComplete: \"postal-code\",\n }}\n />\n }\n setAddress={(value) => {\n if (isAutocompleteAddressValue(value)) {\n setValue(\"billingContact.streetAddress\", value);\n }\n onAddressChanged(getValues());\n }}\n setCountry={(value) => {\n setValue(\"billingContact.country\", value ?? null);\n onAddressChanged(getValues());\n }}\n setCity={(value) => setValue(\"billingContact.city\", value)}\n setState={(value) => setValue(\"billingContact.state\", value)}\n setPostcode={(value) => setValue(\"billingContact.postcode\", value ?? \"\")}\n errors={mapErrors(formState.errors, \"billingContact\")}\n />\n )}\n \n )}\n \n )}\n \n \n \n \n {prevStep === CheckoutStepNames.PlanConfiguration ? (\n <>Return to configuration\n ) : (\n <>Return to select plan\n )}\n \n \n \n \n {nextStep === CheckoutStepNames.Payment ? <>Continue to payment : <>Continue to contact Sales}\n \n \n \n \n \n \n \n );\n }\n}\n","import React from \"react\";\nimport type { AlertColor } from \"@mui/material\";\nimport { DateTime } from \"luxon\";\nimport { formatDateTimeAsLocaleDateString } from \"utils/formatters/DateFormatters\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { AlertWithShadow } from \"components/alert/AlertWithShadow\";\n\ntype ServerLicenseExpiryBannerProps = {\n expiryDate: string | DateTime;\n};\n\nexport function ServerLicenseExpiryBanner(props: ServerLicenseExpiryBannerProps) {\n const { showDialog } = useContactSalesDialog();\n\n const { expiryDate } = props;\n\n const licenseExpiryDate = expiryDate instanceof DateTime ? expiryDate : DateTime.fromISO(expiryDate);\n const daysToExpiry = licenseExpiryDate.diffNow().as(\"days\");\n const formattedExpiryDate = formatDateTimeAsLocaleDateString(licenseExpiryDate, DateTime.DATE_MED, true, false);\n\n const expiresSoon = daysToExpiry > 2 && daysToExpiry <= 7;\n const expiresImmediately = daysToExpiry <= 2 && daysToExpiry >= 0;\n const hasExpired = daysToExpiry < 0;\n const notExpiring = !expiresSoon && !expiresImmediately && !hasExpired;\n const showContactSalesDialog = () => showDialog({ reason: \"server-license-renewal\" });\n\n if (notExpiring) {\n return null;\n }\n\n let bannerLevel: AlertColor = \"warning\";\n let bannerText = null;\n\n if (expiresSoon) {\n bannerText = (\n <>\n This server license will expire on {formattedExpiryDate}, to keep using Octopus Deploy server{\" \"}\n please contact our sales team to renew.\n \n );\n }\n\n if (expiresImmediately) {\n bannerLevel = \"error\";\n bannerText = (\n <>\n This server license is close to expiring on {formattedExpiryDate}, to keep using Octopus Deploy{\" \"}\n please contact our sales team to renew.\n \n );\n }\n\n if (hasExpired) {\n bannerText = (\n <>\n This server license expired on {formattedExpiryDate}, to use this license again{\" \"}\n please contact our sales team to renew.\n \n );\n }\n\n return (\n \n {bannerText}\n \n );\n}\n","import React from \"react\";\nimport { Outlet, useParams } from \"react-router-dom\";\nimport { Container } from \"@mui/material\";\nimport { EntityProvider } from \"contexts/EntityProvider/EntityProvider\";\nimport type { UserContextState } from \"contexts/UserProvider/UserProvider\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { isServerTrial } from \"utils/isTrial\";\nimport { LoadablePage } from \"shared/LoadablePage\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { getServerLicenseById } from \"client/api/ServerLicenseApi\";\nimport { ContactSalesDialogProvider } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { contactSalesReasons } from \"components/Dialogs/ContactSalesDialog/ContactSalesReasons\";\nimport NavigationSidebarLayout, { Navigation } from \"components/NavigationSidebarLayout/NavigationSidebarLayout\";\nimport { PaperLayout } from \"components/PaperLayout/PaperLayout\";\nimport { NavigationAlert } from \"components/alert/NavigationAlert\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { NotFoundPage } from \"pages/NotFoundPage\";\nimport { BackToDashboard } from \"areas/dashboard/components/BackToDashboard\";\nimport { ServerLicensesRoutesMap } from \"areas/serverLicenses/ServerLicensesRoutesMap\";\nimport { ServerLicenseExpiryBanner } from \"areas/serverLicenses/components/ServerLicenseExpiryBanner\";\n\nexport function getNavLinks({\n serverLicense,\n hasPermissionForAsset,\n}: {\n serverLicense: ServerLicenseDto;\n hasPermissionForAsset: UserContextState[\"hasPermissionForAsset\"];\n}) {\n const canViewBilling = hasPermissionForAsset(\n RbacPermissions.ServerLicense.ViewBilling,\n serverLicense?.id,\n serverLicense?.subscriptionGroup?.id\n );\n\n const canViewAccessControl = hasPermissionForAsset(\n RbacPermissions.ServerLicense.ViewAccessControl,\n serverLicense?.id,\n serverLicense?.subscriptionGroup?.id\n );\n\n const navLinks = [\n Navigation.navItem(\"Overview\", ServerLicensesRoutesMap.detail(serverLicense.id).root, true),\n Navigation.navItem(\"Billing\", ServerLicensesRoutesMap.detail(serverLicense.id).finance, true, canViewBilling),\n Navigation.navItem(\n \"Access Control\",\n ServerLicensesRoutesMap.detail(serverLicense.id).users,\n true,\n canViewAccessControl\n ),\n ];\n\n return navLinks;\n}\n\nexport function ServerLicenseLayout() {\n let { serverLicenseId } = useParams();\n serverLicenseId = serverLicenseId || \"UNKNOWN\";\n const { data: serverLicense, loading, error, refresh } = useAsyncRequest(getServerLicenseById, serverLicenseId ?? \"\");\n const { hasPermissionForAsset } = useUserContext();\n const navLinks = (serverLicense && getNavLinks({ serverLicense, hasPermissionForAsset })) || [];\n\n if (error && error.response?.status === 404) {\n return ;\n }\n\n const isTrial = serverLicense && isServerTrial(serverLicense.licensingChannel.channelType);\n\n return (\n \n \n } navLinksVisible={!error}>\n \n {serverLicense && !isTrial && }\n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Container } from \"@mui/material\";\nimport { CountriesProvider } from \"contexts/CountriesProvider/CountriesProvider\";\nimport { EntityProvider } from \"contexts/EntityProvider/EntityProvider\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport type { AsyncResponse } from \"hooks/useAsyncRequest\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { LoadablePage } from \"shared/LoadablePage\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { getCloudSubscriptionById } from \"client/api/CloudSubscriptionApi\";\nimport type { ProductType } from \"client/api/PurchaseApi\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { getServerLicenseById } from \"client/api/ServerLicenseApi\";\nimport type { NavItem } from \"components/NavigationSidebarLayout/NavigationSidebarLayout\";\nimport NavigationSidebarLayout from \"components/NavigationSidebarLayout/NavigationSidebarLayout\";\nimport { PaperLayout } from \"components/PaperLayout/PaperLayout\";\nimport { NotFoundPage } from \"pages/NotFoundPage\";\nimport { getNavLinks as getCloudNavLinks } from \"areas/cloudSubscriptions/CloudSubscriptionLayout\";\nimport { BackToDashboard } from \"areas/dashboard/components/BackToDashboard\";\nimport { CheckoutContactSalesDialogProvider } from \"areas/purchasing/components/Dialogs/CheckoutContactSalesDialog/CheckoutContactSalesDialogProvider\";\nimport { getNavLinks as getServerNavLinks } from \"areas/serverLicenses/ServerLicenseLayout\";\n\nfunction CheckoutLayoutShared({\n children,\n subscription,\n targetPlan,\n refresh,\n navLinks,\n loading,\n error,\n}: {\n children: React.ReactNode;\n subscription: CloudSubscriptionDto | ServerLicenseDto | undefined;\n targetPlan: ProductType;\n refresh: AsyncResponse[\"refresh\"];\n navLinks: NavItem[];\n loading: boolean;\n error: AsyncResponse[\"error\"];\n}) {\n if (error && error.response?.status === 404) {\n return ;\n }\n\n return (\n \n } navLinksVisible={true}>\n \n \n \n \n \n {children}\n \n \n \n \n \n \n \n );\n}\n\nfunction CheckoutLayoutCloud({\n children,\n subscriptionId,\n targetPlan,\n}: {\n children?: React.ReactNode;\n subscriptionId: string;\n targetPlan: ProductType;\n}) {\n const {\n data: cloudSubscription,\n loading,\n error,\n refresh,\n } = useAsyncRequest(getCloudSubscriptionById, subscriptionId);\n const { hasPermissionForAsset } = useUserContext();\n const navLinks = (cloudSubscription && getCloudNavLinks({ cloudSubscription, hasPermissionForAsset })) || [];\n\n return (\n \n {children}\n \n );\n}\n\nfunction CheckoutLayoutServer({\n children,\n subscriptionId,\n targetPlan,\n}: {\n children?: React.ReactNode;\n subscriptionId: string;\n targetPlan: ProductType;\n}) {\n const { data: serverLicense, loading, error, refresh } = useAsyncRequest(getServerLicenseById, subscriptionId);\n const { hasPermissionForAsset } = useUserContext();\n const navLinks = (serverLicense && getServerNavLinks({ serverLicense, hasPermissionForAsset })) || [];\n\n return (\n \n {children}\n \n );\n}\n\nexport function CheckoutLayout({\n children,\n subscriptionId,\n subscriptionType,\n targetPlan,\n}: {\n children?: React.ReactNode;\n subscriptionId: string;\n subscriptionType: \"cloud\" | \"selfhosted\";\n targetPlan: ProductType;\n}) {\n if (subscriptionType === \"cloud\") {\n return (\n \n {children}\n \n );\n } else if (subscriptionType === \"selfhosted\") {\n return (\n \n {children}\n \n );\n } else {\n return null;\n }\n}\n","import React, { useState } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { ChevronLeft } from \"@mui/icons-material\";\nimport { Box, Grid, Link, Typography } from \"@mui/material\";\nimport { RoutesMap } from \"RoutesMap\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { formatStreetAddress } from \"utils/formatters/StreetAddressFormatter\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { orderThroughSales, type ProductType } from \"client/api/PurchaseApi\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { CustomErrorAlert, ErrorMessageTryAgainOrContactSupport } from \"components/alert/CustomErrorAlert\";\nimport type { AutocompleteAddressValue } from \"areas/checkout/components/CheckoutAddressField\";\nimport { CheckoutPrimaryButton, CheckoutSecondaryButton } from \"areas/checkout/components/CheckoutButtons\";\nimport { isDropdownAutocompleteOption } from \"areas/checkout/components/CheckoutDropdownInput\";\nimport type { CheckoutCompanyForm, CheckoutIndividualForm } from \"./CheckoutPersonalDetailsStep\";\nimport { CheckoutStepLayout } from \"./CheckoutStepLayout\";\n\nexport const CheckoutContactSalesReasons = {\n TaxExemption: \"TaxExemption\",\n CheckoutError: \"CheckoutError\",\n} as const;\n\nconst ContactSalesReason = ({ reason }: { reason: keyof typeof CheckoutContactSalesReasons }) => {\n switch (reason) {\n case CheckoutContactSalesReasons.TaxExemption:\n return (\n <>\n You've indicated you have a tax exemption certificate.\n \n To process your order we'll need to sight this certificate.\n \n \n );\n case CheckoutContactSalesReasons.CheckoutError:\n return (\n <>\n It looks like we encountered an issue while processing your order.\n \n We'll need to process your order manually.\n \n \n );\n default:\n return null;\n }\n};\n\nconst StepHeading = () => (\n \n Contact Sales\n \n);\n\nexport const CheckoutContactSalesStep = ({\n orderSummary,\n billingProduct,\n personalDetailsStepData,\n onBack,\n reason,\n}: {\n orderSummary: React.ReactElement;\n billingProduct: ProductType;\n personalDetailsStepData: CheckoutCompanyForm | CheckoutIndividualForm;\n reason: keyof typeof CheckoutContactSalesReasons;\n onBack: () => void;\n}) => {\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [orderError, setOrderError] = useState(undefined);\n const [orderRequested, setOrderRequested] = useState(false);\n const navigate = useNavigate();\n const stepTestId = \"checkout-contact-sales-step\";\n\n const { entity: licenseOrSubscription } = useEntity();\n\n const goToControlCenter = () => {\n navigate(RoutesMap.root);\n };\n\n const convertStreetAddressObjectToAddressLine = (streetAddress: AutocompleteAddressValue): string => {\n return formatStreetAddress({\n streetName: streetAddress.streetName,\n streetNumber: streetAddress.streetNumber ?? \"\",\n countryCode: streetAddress.countryCode,\n });\n };\n\n const onSubmit = async () => {\n setOrderError(undefined);\n setIsSubmitting(true);\n\n const req = (() => {\n const form = personalDetailsStepData;\n const businessAccount = form.purchasingAs === \"company\";\n\n if (businessAccount) {\n const billToContact = {\n firstName: form.billingContact.firstName,\n lastName: form.billingContact.lastName,\n email: form.billingContact.email,\n // Note: uses the company address\n address1:\n typeof form.companyContact.streetAddress === \"string\"\n ? form.companyContact.streetAddress\n : convertStreetAddressObjectToAddressLine(form.companyContact.streetAddress),\n country: form.companyContact.country?.value || \"\",\n city: form.companyContact.city,\n state: isDropdownAutocompleteOption(form.companyContact.state)\n ? form.companyContact.state.value\n : form.companyContact.state ?? \"\",\n postalCode: form.companyContact.postcode,\n };\n const companyName = form.companyContact.name;\n const taxId = form.taxId;\n\n return {\n serial: licenseOrSubscription?.serial ?? \"\",\n billingProduct,\n businessAccount,\n billToContact,\n companyName,\n taxId,\n reason,\n };\n } else {\n const billToContact = {\n firstName: form.billingContact.firstName,\n lastName: form.billingContact.lastName,\n email: form.billingContact.email,\n address1:\n typeof form.billingContact.streetAddress === \"string\"\n ? form.billingContact.streetAddress\n : convertStreetAddressObjectToAddressLine(form.billingContact.streetAddress),\n country: form.billingContact.country?.value || \"\",\n city: form.billingContact.city,\n state: isDropdownAutocompleteOption(form.billingContact.state)\n ? form.billingContact.state.value\n : form.billingContact.state ?? \"\",\n postalCode: form.billingContact.postcode,\n };\n\n return {\n serial: licenseOrSubscription?.serial ?? \"\",\n billingProduct,\n businessAccount,\n billToContact,\n reason,\n };\n }\n })();\n\n try {\n await orderThroughSales(req);\n } catch (e) {\n if (e instanceof Error) {\n setOrderError(e);\n }\n setIsSubmitting(false);\n return;\n }\n\n setOrderRequested(true);\n };\n\n if (orderRequested) {\n return (\n \n \n \n Your request has been sent, we'll get back to you shortly.\n \n \n \n Back to Control Center\n \n \n \n );\n }\n\n return (\n \n \n {orderError && (\n \n } />\n \n )}\n \n \n Submit your order request below and we'll get back to you in 1–3 business days. If you prefer to get in\n touch directly, email sales@octopus.com or phone{\" \"}\n +1 512-823-0256.\n \n \n \n \n \n Return to information\n \n \n \n \n Submit\n \n \n \n \n );\n};\n","import React from \"react\";\nimport type { SxProps, Theme } from \"@mui/material\";\nimport { SvgIcon } from \"@mui/material\";\n\nexport function CheckIconSimple({ sx, fillColor = \"#fff\" }: { sx?: SxProps; fillColor?: string }) {\n return (\n \n \n \n );\n}\n","import React from \"react\";\nimport { styled } from \"@mui/material\";\nimport { CheckIconSimple } from \"areas/checkout/components/CheckIconSimple\";\nimport type { CheckoutStepNames } from \"areas/purchasing/Checkout\";\n\nconst StepsListContainer = styled(\"div\")`\n display: flex;\n justify-content: center;\n`;\n\nconst StepsList = styled(\"ol\")`\n display: flex;\n list-style-type: none;\n padding: 0;\n margin: 0;\n`;\n\nconst StepLi = styled(\"li\")`\n display: flex;\n margin-right: 12px;\n`;\n\nconst StepItemInner = styled(\"div\")`\n display: flex;\n align-content: center;\n height: 38px;\n`;\n\nconst StyledStepNumber = styled(\"div\")<{ isCurrent: boolean }>`\n display: flex;\n align-content: center;\n justify-content: center;\n flex-wrap: wrap;\n margin-right: 12px;\n width: 38px;\n height: 38px;\n border-radius: 38px;\n font-weight: 700;\n font-size: 15px;\n background: ${(props) => (props.isCurrent ? \"#0D80D8\" : \"#F4F6F8\")};\n color: ${(props) => (props.isCurrent ? \"#fff\" : \"#657287\")};\n`;\n\nconst StyledStepComplete = styled(\"div\")`\n box-sizing: border-box;\n display: flex;\n align-content: center;\n justify-content: center;\n flex-wrap: wrap;\n margin-right: 12px;\n width: 38px;\n height: 38px;\n border-radius: 38px;\n border: 1px solid #0d80d8;\n background: rgba(13, 128, 216, 0.1);\n`;\n\nconst StepTitle = styled(\"p\")<{ step: number; currentStep: number }>`\n margin: 0;\n align-self: center;\n font-size: 15px;\n font-weight: ${(props) => (props.currentStep === props.step ? \"500\" : \"400\")};\n color: ${(props) => (props.currentStep === props.step ? \"#2e475d\" : \"#586978\")};\n`;\n\nconst StepNumber = ({ step, currentStep }: { step: number; currentStep: number }) => {\n const isCurrent = step === currentStep;\n const isComplete = currentStep > step;\n\n if (isComplete) {\n return (\n \n \n \n );\n }\n return {step};\n};\n\nconst StepSeparator = styled(\"div\")`\n margin-left: 30px;\n margin-right: 30px;\n width: 50px;\n height: 1px;\n border-top: 1px solid #e6e8ea;\n align-self: center;\n`;\n\nexport interface CheckoutStep {\n number: number;\n title: string;\n name: keyof typeof CheckoutStepNames;\n}\n\nexport const StepProgress = ({ currentStep, steps }: { currentStep: number; steps: CheckoutStep[] }) => {\n return (\n \n \n {steps.map((step) => (\n \n \n \n \n {step.title}\n \n {step.number !== steps.length && }\n \n \n ))}\n \n \n );\n};\n","import React from \"react\";\nimport { Typography } from \"@mui/material\";\nimport { isCloudSubscriptionLicenseChannelType } from \"utils/CloudSubscriptionLicensingChannelTypeHelpers\";\nimport { isServerLicenseChannelType } from \"utils/ServerLicenseLicensingChannelTypeHelpers\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { themeTokens } from \"components/Theme/theme\";\n\ninterface CheckoutUpgradePlanTitleProps {\n subscription: CloudSubscriptionDto | ServerLicenseDto;\n}\n\ninterface CheckoutUpgradePlanTitleDisplayProps {\n planTypeDisplayName: \"Cloud\" | \"Server\";\n subscriptionDisplayName?: string;\n}\n\nconst Title = ({ children }: React.PropsWithChildren) => (\n \n {children}\n \n);\n\nconst CheckoutUpgradePlanTitleDisplay = (props: CheckoutUpgradePlanTitleDisplayProps) => {\n const { planTypeDisplayName, subscriptionDisplayName } = props;\n\n if (subscriptionDisplayName) {\n return (\n \n Upgrade your Octopus {planTypeDisplayName} plan for{\" \"}\n <Typography component={\"span\"} variant=\"h5\" fontWeight=\"600\" color={themeTokens.color.text.tertiary}>\n {subscriptionDisplayName}\n </Typography>\n \n );\n }\n\n return Upgrade your Octopus {planTypeDisplayName} plan;\n};\n\nexport const CheckoutUpgradePlanTitle = (props: CheckoutUpgradePlanTitleProps) => {\n const { subscription } = props;\n\n if (isServerLicenseChannelType(subscription.licensingChannel.channelType)) {\n return (\n \n );\n } else if (isCloudSubscriptionLicenseChannelType(subscription.licensingChannel.channelType)) {\n return (\n \n );\n }\n\n throw new Error(\"Unexpected subscription type\");\n};\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { useNavigate, useSearchParams } from \"react-router-dom\";\nimport { Box, debounce, Divider, styled } from \"@mui/material\";\nimport { useDeepCompareEffectNoCheck } from \"use-deep-compare-effect\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport type { CloudSubscriptionDto } from \"client/api/CloudSubscriptionApi\";\nimport { logError } from \"client/api/LoggingApi\";\nimport { getOrderPreview, type OrderPreview, type OrderPreviewRequest, ProductType } from \"client/api/PurchaseApi\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { MonitoredErrorBoundary } from \"components/MonitoredErrorBoundary/MonitoredErrorBoundary\";\nimport { CustomErrorAlert, ErrorMessageTryAgainOrContactSupport } from \"components/alert/CustomErrorAlert\";\nimport { NotFoundPage } from \"pages/NotFoundPage\";\nimport { isDropdownAutocompleteOption } from \"areas/checkout/components/CheckoutDropdownInput\";\nimport { CloudSubscriptionsRoutesMap } from \"areas/cloudSubscriptions/CloudSubscriptionRoutesMap\";\nimport { CheckoutComplete } from \"areas/purchasing/CheckoutComplete\";\nimport { CheckoutOrderSummary } from \"areas/purchasing/components/CheckoutOrderSummary/CheckoutOrderSummary\";\nimport { CheckoutPaymentStep } from \"areas/purchasing/components/CheckoutPaymentStep\";\nimport type {\n CheckoutCompanyForm,\n CheckoutIndividualForm,\n CheckoutPersonalDetailsInputs,\n PurchasingAs,\n} from \"areas/purchasing/components/CheckoutPersonalDetailsStep\";\nimport { CheckoutPersonalDetailsStep } from \"areas/purchasing/components/CheckoutPersonalDetailsStep\";\nimport type {\n CheckoutPlanConfigurationInputs,\n ValidProjectValues,\n} from \"areas/purchasing/components/CheckoutPlanConfigurationStep\";\nimport {\n convertPlanConfigQuantityToInt,\n machineOptions,\n projectOptions,\n tenantOptions,\n} from \"areas/purchasing/components/CheckoutPlanConfigurationStep\";\nimport {\n CheckoutPlanConfigurationStep,\n isCloudPlanConfig,\n SupportOptions,\n} from \"areas/purchasing/components/CheckoutPlanConfigurationStep\";\nimport { ServerLicensesRoutesMap } from \"areas/serverLicenses/ServerLicensesRoutesMap\";\nimport { CheckoutLayout } from \"./CheckoutLayout\";\nimport { CheckoutContactSalesReasons, CheckoutContactSalesStep } from \"./components/CheckoutContactSalesStep\";\nimport type { CheckoutStep } from \"./components/CheckoutStepProgress\";\nimport { StepProgress } from \"./components/CheckoutStepProgress\";\nimport { CheckoutUpgradePlanTitle } from \"./components/CheckoutUpgradePlanTitle\";\nimport { useZuoraLibraryScriptLoader } from \"./components/CheckoutZuoraIframe\";\n\nexport type SubscriptionType = \"cloud\" | \"selfhosted\";\n\nconst userInitiatedRetryAttemptLimit = 4;\n\nexport type ValidCloudPlans = UpgradePlan.Cloud_Annually_Starter | UpgradePlan.Cloud_Annually_Professional;\nexport type ValidServerPlans = UpgradePlan.Server_Annually_Starter | UpgradePlan.Server_Annually_Professional;\nexport type ValidTargetPlans = ValidCloudPlans | ValidServerPlans;\n\nexport interface OrderPreviewError {\n statusCode: number;\n message: string;\n canRetry: boolean;\n retry?: () => void;\n}\n\nexport const CheckoutStepNames = {\n PlanSelection: \"PlanSelection\",\n PlanConfiguration: \"PlanConfiguration\",\n PersonalDetails: \"PersonalDetails\",\n Payment: \"Payment\",\n ContactSales: \"ContactSales\",\n} as const;\n\nconst StickySidebar = styled(\"div\")`\n position: sticky;\n top: 0;\n`;\n\nconst isCheckoutCompanyForm = (formData: CheckoutPersonalDetailsInputs): formData is CheckoutCompanyForm => {\n return formData.purchasingAs === \"company\";\n};\n\nconst isCheckoutIndividualForm = (formData: CheckoutPersonalDetailsInputs): formData is CheckoutIndividualForm => {\n return formData.purchasingAs === \"individual\";\n};\n\nexport function Checkout() {\n const [searchParams] = useSearchParams();\n const subscriptionId = searchParams.get(\"subscriptionId\");\n const subscriptionType = searchParams.get(\"subscriptionType\") ?? \"\";\n const projectQuantityString = searchParams.get(\"projects\") ?? \"\";\n\n const isValidProjectValue = (value: string): value is ValidProjectValues => {\n return Object.values(projectOptions).some((item) => item.value === value);\n };\n\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n const plan = (searchParams.get(\"plan\") as ValidTargetPlans) ?? \"\";\n const [currentStep, setCurrentStep] = useState(1);\n const [orderPreview, setOrderPreview] = useState(null);\n const [isLoadingOrderPreview, setIsLoadingOrderPreview] = useState(false);\n const [isRecalculatingPrice, setIsRecalculatingBasePrice] = useState(false);\n const [isTaxExempted, setTaxExempted] = useState(false);\n const { userInfo } = useUserContext();\n const getDefaultPlanConfigData = () => {\n const projects = isValidProjectValue(projectQuantityString) ? projectQuantityString : projectOptions.p20.value;\n switch (plan) {\n case UpgradePlan.Cloud_Annually_Professional:\n return {\n projects: projects,\n tenants: tenantOptions.t0.value,\n machines: machineOptions.m0.value,\n tasks: \"5\",\n support: SupportOptions.EightFive,\n } as const;\n case UpgradePlan.Server_Annually_Professional:\n return {\n projects: projects,\n tenants: tenantOptions.t0.value,\n machines: machineOptions.m0.value,\n support: SupportOptions.EightFive,\n } as const;\n default:\n return undefined;\n }\n };\n const [planConfigData, setPlanConfigData] = useState(\n getDefaultPlanConfigData()\n );\n const [personalDetailsStepData, setPersonalDetailsData] = useState({\n billingContact: {\n firstName: userInfo?.firstName ?? \"\",\n lastName: userInfo?.lastName ?? \"\",\n email: userInfo?.email ?? \"\",\n streetAddress: \"\",\n country: null,\n city: \"\",\n state: \"\",\n postcode: \"\",\n },\n companyContact: {\n name: \"\",\n streetAddress: \"\",\n country: null,\n city: \"\",\n state: \"\",\n postcode: \"\",\n },\n taxId: \"\",\n purchasingAs: null,\n });\n const [orderPreviewError, setOrderPreviewError] = useState(null);\n const [userInitiatedRetryAttempt, setUserInitiatedRetryAttempt] = useState(0);\n const { isZuoraLibraryReady, error: zuoraScriptLibraryError } = useZuoraLibraryScriptLoader();\n\n const mapConfigData = (data: CheckoutPlanConfigurationInputs | undefined) => {\n return data\n ? {\n projectQuantity: data.projects,\n taskQuantity: isCloudPlanConfig(data) ? data.tasks : undefined,\n support: data.support,\n tenantQuantity: data.tenants,\n machineQuantity: data.machines,\n }\n : null;\n };\n const planConfigDataRef = useRef(mapConfigData(planConfigData));\n useEffect(() => {\n planConfigDataRef.current = mapConfigData(planConfigData);\n }, [planConfigData]);\n\n const isBeyondSelfServeEntitlements = ((configData) => {\n const isCloudConfig = configData && isCloudPlanConfig(configData);\n\n const limits = [\n [\"projects\", projectOptions.p120.value],\n [\"tasks\", \">40\"],\n [\"support\", SupportOptions.TwentyFourSeven],\n [\"tenants\", tenantOptions.t120.value],\n [\"machines\", machineOptions.m120.value],\n ];\n const values = [\n [\"projects\", configData?.projects],\n [\"support\", configData?.support],\n [\"tenants\", configData?.tenants],\n [\"machines\", configData?.machines],\n ];\n isCloudConfig && values.push([\"tasks\", configData?.tasks]);\n\n return values.some((value) => limits.find((limit) => value[0] === limit[0] && limit[1] === value[1]));\n })(planConfigData);\n\n const billingProduct = (() => {\n switch (subscriptionType) {\n case \"cloud\":\n return plan === UpgradePlan.Cloud_Annually_Professional\n ? ProductType.ProfessionalCloud\n : ProductType.StarterCloud;\n case \"selfhosted\":\n return plan === UpgradePlan.Server_Annually_Professional\n ? ProductType.ProfessionalServer\n : ProductType.StarterServer;\n default:\n return ProductType.StarterServer;\n }\n })();\n\n const taxAddress = (() => {\n if (personalDetailsStepData.purchasingAs === null) {\n return null;\n }\n if (isCheckoutCompanyForm(personalDetailsStepData)) {\n return personalDetailsStepData.companyContact;\n }\n if (isCheckoutIndividualForm(personalDetailsStepData)) {\n return personalDetailsStepData.billingContact;\n }\n return null;\n })();\n\n const hasMinimumTaxInfo = !!(taxAddress && taxAddress.country && taxAddress.streetAddress);\n\n useDeepCompareEffectNoCheck(() => {\n // if beyond self serve entitlements then no need to fetch order preview\n if (isBeyondSelfServeEntitlements) {\n return;\n }\n // don't make unnecessary requests when purchasingAs is set and an address is not entered, note this still allows the initial order preview request to go ahead\n if (personalDetailsStepData.purchasingAs && !hasMinimumTaxInfo) {\n return;\n }\n\n setOrderPreviewError(null);\n setIsLoadingOrderPreview(true);\n\n const isCloudConfig = planConfigData && isCloudPlanConfig(planConfigData);\n const taskCap = isCloudConfig ? convertPlanConfigQuantityToInt(planConfigData.tasks) : undefined;\n\n const request: OrderPreviewRequest = {\n product: billingProduct,\n city: taxAddress?.city,\n county: \"\",\n country: taxAddress?.country?.value,\n postalCode: taxAddress?.postcode,\n state: taxAddress\n ? isDropdownAutocompleteOption(taxAddress.state)\n ? taxAddress.state.value\n : taxAddress.state ?? \"\"\n : \"\",\n pricingParameters: planConfigData && {\n projects: convertPlanConfigQuantityToInt(planConfigData.projects),\n tenants: convertPlanConfigQuantityToInt(planConfigData.tenants),\n machines: convertPlanConfigQuantityToInt(planConfigData.machines),\n taskCap: taskCap,\n },\n };\n\n const controller = new AbortController();\n\n const fetchData = async () => {\n const response = await getOrderPreview(request, controller.signal);\n setOrderPreview(response);\n setIsLoadingOrderPreview(false);\n setIsRecalculatingBasePrice(false);\n };\n\n const debouncedFetch = debounce(\n () =>\n fetchData().catch((e) => {\n if (!controller.signal.aborted) {\n setIsLoadingOrderPreview(false);\n setIsRecalculatingBasePrice(false);\n\n // Only log errors that are not 400, as 400 errors are expected when the user has not entered all required fields\n if (e.response.status !== 400) {\n logError(\n `client received response with status code: ${e.response?.status} and message: ${e.message} when loading an order preview`\n );\n }\n\n setOrderPreviewError({\n statusCode: e.response?.status,\n message: e.message,\n canRetry: userInitiatedRetryAttempt < userInitiatedRetryAttemptLimit,\n retry:\n userInitiatedRetryAttempt < userInitiatedRetryAttemptLimit\n ? () => setUserInitiatedRetryAttempt(userInitiatedRetryAttempt + 1)\n : undefined,\n });\n }\n }),\n 850\n );\n\n debouncedFetch();\n\n return () => {\n setIsLoadingOrderPreview(false);\n controller.abort();\n };\n }, [\n taxAddress,\n taxAddress?.country?.value,\n taxAddress?.city,\n taxAddress?.state,\n taxAddress?.postcode,\n billingProduct,\n personalDetailsStepData.purchasingAs,\n hasMinimumTaxInfo,\n userInitiatedRetryAttempt,\n planConfigData,\n ]);\n\n const advanceStep = () => {\n setCurrentStep(currentStep + 1);\n };\n\n const backStep = () => {\n setCurrentStep(currentStep - 1);\n };\n\n const onSubmitPlanConfigurationData = (data: CheckoutPlanConfigurationInputs) => {\n if (!isBeyondSelfServeEntitlements) {\n advanceStep();\n }\n };\n\n const onPlanConfigurationDataChanged = (data: CheckoutPlanConfigurationInputs) => {\n setPlanConfigData(data);\n setIsRecalculatingBasePrice(true);\n };\n\n const toggleTaxExempted = () => {\n setTaxExempted(!isTaxExempted);\n };\n\n const onSubmitPersonalDetails = (data: CheckoutPersonalDetailsInputs) => {\n setPersonalDetailsData(data);\n advanceStep();\n };\n\n const onAddressChanged = (data: CheckoutPersonalDetailsInputs) => {\n setPersonalDetailsData(data);\n };\n\n const onPurchasingAsChanged = (data: CheckoutPersonalDetailsInputs) => {\n setPersonalDetailsData(data);\n };\n\n if (!subscriptionId) {\n return ;\n }\n if (subscriptionType !== \"cloud\" && subscriptionType !== \"selfhosted\") {\n return ;\n }\n switch (subscriptionType) {\n case \"cloud\":\n if (plan !== UpgradePlan.Cloud_Annually_Professional && plan !== UpgradePlan.Cloud_Annually_Starter)\n return ;\n break;\n case \"selfhosted\":\n if (plan !== UpgradePlan.Server_Annually_Professional && plan !== UpgradePlan.Server_Annually_Starter)\n return ;\n break;\n }\n if (zuoraScriptLibraryError) {\n return } />;\n }\n\n const steps: CheckoutStep[] = !isTaxExempted\n ? [\n { number: 1, title: \"Information\", name: CheckoutStepNames.PersonalDetails },\n { number: 2, title: \"Payment\", name: CheckoutStepNames.Payment },\n ]\n : [\n { number: 1, title: \"Information\", name: CheckoutStepNames.PersonalDetails },\n { number: 2, title: \"Contact Sales\", name: CheckoutStepNames.ContactSales },\n ];\n\n // Insert a new step if upgrading to a professional product\n if (plan === UpgradePlan.Server_Annually_Professional || plan === UpgradePlan.Cloud_Annually_Professional) {\n steps.forEach((step) => (step.number += 1));\n steps.unshift({ number: 1, title: \"Configuration\", name: CheckoutStepNames.PlanConfiguration });\n }\n\n return (\n } />}>\n \n \n \n \n \n\n \n \n \n }\n advanceStep={advanceStep}\n backStep={backStep}\n subscriptionType={subscriptionType}\n billingProduct={billingProduct}\n subscriptionId={subscriptionId}\n isZuoraLibraryReady={isZuoraLibraryReady}\n isTaxExempted={isTaxExempted}\n isBeyondStandardEntitlements={isBeyondSelfServeEntitlements}\n />\n \n \n );\n}\n\nconst getLastStep = ({\n isTaxExempted,\n orderPreviewError,\n}: {\n isTaxExempted: boolean;\n orderPreviewError: OrderPreviewError | null;\n}) => {\n const contactSalesReason = (() => {\n if (isTaxExempted) {\n return CheckoutContactSalesReasons.TaxExemption;\n }\n if (!!orderPreviewError && !orderPreviewError.canRetry) {\n return CheckoutContactSalesReasons.CheckoutError;\n }\n return false;\n })();\n\n if (contactSalesReason) {\n return { step: CheckoutStepNames.ContactSales, reason: contactSalesReason };\n }\n\n return { step: CheckoutStepNames.Payment };\n};\n\nfunction assertSelectedPurchasingAs(val: PurchasingAs): asserts val is \"company\" | \"individual\" {\n if (val != \"company\" && val != \"individual\") {\n throw new TypeError(\"Invalid purchasingAs option\");\n }\n}\n\nconst LastStep = ({\n billingProduct,\n planConfigData,\n personalDetailsStepData,\n orderSummary,\n backStep,\n onOrderComplete,\n isZuoraLibraryReady,\n step,\n hasOrderPreviewError,\n}: {\n billingProduct: ProductType;\n planConfigData?: CheckoutPlanConfigurationInputs;\n personalDetailsStepData: CheckoutPersonalDetailsInputs;\n orderSummary: React.ReactElement;\n backStep: () => void;\n onOrderComplete: () => void;\n isZuoraLibraryReady: boolean;\n hasOrderPreviewError: boolean;\n step:\n | {\n step: typeof CheckoutStepNames.ContactSales;\n reason: keyof typeof CheckoutContactSalesReasons;\n }\n | {\n step: typeof CheckoutStepNames.Payment;\n };\n}) => {\n assertSelectedPurchasingAs(personalDetailsStepData.purchasingAs);\n\n if (step.step === CheckoutStepNames.ContactSales) {\n return (\n \n );\n }\n\n return (\n \n );\n};\n\nconst Steps = ({\n checkoutSteps,\n currentStep,\n advanceStep,\n backStep,\n orderSummary,\n orderPreview,\n orderPreviewError,\n subscriptionId,\n subscriptionType,\n billingProduct,\n onSubmitPlanConfiguration,\n onPlanConfigurationChanged,\n onSubmitPersonalDetails,\n onAddressChanged,\n onPurchasingAsChanged,\n planConfigurationData,\n personalDetailsStepData,\n isZuoraLibraryReady,\n isTaxExempted,\n isBeyondStandardEntitlements,\n}: {\n currentStep: number;\n advanceStep: () => void;\n backStep: () => void;\n checkoutSteps: CheckoutStep[];\n onSubmitPlanConfiguration: (data: CheckoutPlanConfigurationInputs) => void;\n onPlanConfigurationChanged: (data: CheckoutPlanConfigurationInputs) => void;\n onSubmitPersonalDetails: (data: CheckoutPersonalDetailsInputs) => void;\n onAddressChanged: (data: CheckoutPersonalDetailsInputs) => void;\n onPurchasingAsChanged: (data: CheckoutPersonalDetailsInputs) => void;\n planConfigurationData?: CheckoutPlanConfigurationInputs;\n personalDetailsStepData: CheckoutPersonalDetailsInputs;\n orderSummary: React.ReactElement;\n orderPreview: OrderPreview | null;\n orderPreviewError: OrderPreviewError | null;\n subscriptionId: string;\n subscriptionType: SubscriptionType;\n billingProduct: ProductType;\n isZuoraLibraryReady: boolean;\n isTaxExempted: boolean;\n isBeyondStandardEntitlements: boolean;\n}) => {\n const navigate = useNavigate();\n const { entity: subscription } = useEntity();\n\n if (!subscription) {\n throw new Error(\"Subscription is undefined\");\n }\n\n const onOrderComplete = () => {\n advanceStep();\n };\n\n const lastStep = getLastStep({ isTaxExempted, orderPreviewError });\n const upgradePlanTitle = ;\n\n const configStepElement = planConfigurationData && (\n \n navigate({\n pathname: getChangePlanRoute(subscriptionId, subscriptionType),\n })\n }\n />\n );\n\n const personalDetailsStepElement = (\n \n currentStep === 1\n ? navigate({\n pathname: getChangePlanRoute(subscriptionId, subscriptionType),\n })\n : backStep()\n }\n prevStep={currentStep === 1 ? CheckoutStepNames.PlanSelection : CheckoutStepNames.PlanConfiguration}\n nextStep={lastStep.step}\n />\n );\n\n const lastStepElement = (\n \n );\n\n const checkoutCompleteElement = (\n \n );\n\n switch (currentStep) {\n case 1:\n return checkoutSteps[0]?.name === CheckoutStepNames.PlanConfiguration\n ? configStepElement\n : personalDetailsStepElement;\n case 2:\n return checkoutSteps[1]?.name === CheckoutStepNames.PersonalDetails\n ? personalDetailsStepElement\n : lastStepElement;\n case 3:\n return checkoutSteps.length === 2 ? checkoutCompleteElement : lastStepElement;\n case 4:\n return checkoutCompleteElement;\n }\n};\n\nfunction getChangePlanRoute(subscriptionId: string, subscriptionType: SubscriptionType) {\n return subscriptionType === \"cloud\"\n ? CloudSubscriptionsRoutesMap.detail(subscriptionId).upgrade\n : ServerLicensesRoutesMap.detail(subscriptionId).upgrade;\n}\n","import React from \"react\";\nimport { faServer } from \"@fortawesome/free-solid-svg-icons\";\nimport { Box, Grid, Stack, Typography } from \"@mui/material\";\nimport { FontAwesomeSvgIcon } from \"@cpt/components\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { themeTokens } from \"components/Theme/theme\";\n\ninterface ServerLicenseHeaderProps {\n pageTitle: string;\n actions?: React.ReactNode[];\n}\n\nexport function ServerLicenseHeader(props: ServerLicenseHeaderProps) {\n const { pageTitle, actions } = props;\n const { entity: serverLicense } = useEntity();\n\n if (!serverLicense) return <>;\n\n return (\n <>\n \n \n \n \n \n \n \n {pageTitle}\n \n \n \n \n \n \n \n {actions}\n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Grid, Typography } from \"@mui/material\";\nimport { ChangePlanFinanceLine } from \"components/ChangePlanFinanceLine/ChangePlanFinanceLine\";\nimport { GridDivider } from \"components/GridDivider/GridDivider\";\n\nexport function SalesforceContractedServerLicensingChannelView() {\n return (\n <>\n \n Current plan\n \n \n Octopus Server Enterprise, Annually\n \n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport { LoadingButton } from \"@mui/lab\";\nimport {\n Box,\n Button,\n CircularProgress,\n Dialog,\n DialogActions,\n DialogContent,\n DialogContentText,\n DialogTitle,\n} from \"@mui/material\";\nimport type { AxiosError } from \"axios\";\nimport axios from \"axios\";\nimport type { DateTime } from \"luxon\";\nimport { DateText } from \"@cpt/components\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { isTrial } from \"utils/isTrial\";\nimport type { ServerLicenseDto, ServerLicensingChannelTypes } from \"client/api/ServerLicenseApi\";\nimport { cancelServerLicense } from \"client/api/ServerLicenseApi\";\nimport { AlertSeverity, useAlerts } from \"components/AlertProvider/AlertProvider\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\nimport type { ServerLicenseProps } from \"areas/serverLicenses/ServerLicenseProps\";\n\ntype ServerLicenseCancelPlanDialogProps = React.PropsWithChildren<{\n open: boolean;\n onClose: () => void;\n}> &\n ServerLicenseProps;\n\nexport function ServerLicenseCancelPlanDialog(props: ServerLicenseCancelPlanDialogProps) {\n const { update } = useEntity();\n const { open, onClose, serverLicense } = props;\n const { sendNewAlert } = useAlerts();\n\n const [isCancelling, setIsCancelling] = useState(false);\n\n const [error, setError] = useState(undefined);\n\n const cancelPlan = async () => {\n setIsCancelling(true);\n\n try {\n const changedServerLicense = await cancelServerLicense(serverLicense);\n update(changedServerLicense);\n\n sendNewAlert(\"Server license cancelled\", AlertSeverity.Success);\n handleOnClose(true);\n } catch (e) {\n if (axios.isAxiosError(e)) {\n setError(e);\n } else {\n console.error(e);\n }\n } finally {\n setIsCancelling(false);\n }\n };\n\n const handleOnClose = (force = false) => {\n if (isCancelling && !force) {\n return;\n }\n onClose();\n };\n\n return (\n handleOnClose()}\n aria-labelledby=\"cancel-subscription-dialog-title\"\n aria-describedby=\"cancel-subscription-dialog-description\"\n >\n Cancel subscription?\n \n {error && }\n {props.children}\n \n \n \n \n \n {\"Cancelling...\"}\n \n }\n >\n Cancel subscription\n \n \n \n );\n}\n\nexport const ServerLicenseCancelPlanDialogText = ({\n channelType,\n endDate,\n}: {\n channelType: ServerLicensingChannelTypes;\n endDate: DateTime;\n}) => {\n const subscriptionType = isTrial(channelType) ? \"trial\" : \"subscription\";\n return (\n \n If you cancel now, you can continue using your {subscriptionType} until{\" \"}\n .\n \n );\n};\n","import React, { useState } from \"react\";\nimport { Grid, Stack, Typography } from \"@mui/material\";\nimport { DateText } from \"@cpt/components\";\nimport type { ServerLicenseDto, StripeSubscriptionServerLicensingChannelDto } from \"client/api/ServerLicenseApi\";\nimport { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { ChangePlanFinanceLine } from \"components/ChangePlanFinanceLine/ChangePlanFinanceLine\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { GridDivider } from \"components/GridDivider/GridDivider\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { RouterLink } from \"components/RouterLink/RouterLink\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { ServerLicensesRoutesMap } from \"areas/serverLicenses/ServerLicensesRoutesMap\";\nimport {\n ServerLicenseCancelPlanDialog,\n ServerLicenseCancelPlanDialogText,\n} from \"areas/serverLicenses/detail/components/ServerLicenseCancelPlanDialog\";\nimport type { ServerLicensingChannelViewProps } from \"areas/serverLicenses/detail/components/finance/ServerLicensingChannelViewProps\";\n\nconst ResubscribeOrManageSubscription = ({\n show,\n canResubscribe,\n serverLicense,\n}: {\n show: boolean;\n canResubscribe: boolean;\n serverLicense: ServerLicenseDto;\n}) => {\n const { showDialog } = useContactSalesDialog();\n if (!show) {\n return <>;\n }\n if (canResubscribe) {\n return showDialog({ reason: \"other\" })}>Resubscribe;\n }\n\n return showDialog({ reason: \"other\" })}>Manage subscription;\n};\n\nexport function StripeSubscriptionServerLicensingChannelView(\n props: ServerLicensingChannelViewProps\n) {\n const { channel, serverLicense } = props;\n const [showCancelDialog, setShowCancelDialog] = useState(false);\n\n const isSubscriptionPtm = [UpgradePlan.Server_Annually_Starter].some((val) => val === channel.priceCode);\n const isCancelled = channel.status === \"canceled\";\n const isCancelledOrCancelling = channel.status === \"canceled\" || channel.cancelAtPeriodEnd;\n const isCanceledNonPtm = !isSubscriptionPtm && isCancelledOrCancelling;\n const showCustomStripeControls = !isCancelledOrCancelling;\n const planStatusPrefix =\n channel.status === \"canceled\" ? \"Cancelled on\" : channel.cancelAtPeriodEnd ? \"Cancels on\" : \"Renews on\";\n\n return (\n <>\n \n \n Current plan\n \n \n \n {channel.productName}\n \n {planStatusPrefix} \n \n \n \n \n \n \n {showCustomStripeControls && (\n \n Change plan\n {!isCancelledOrCancelling && (\n <>\n setShowCancelDialog(true)}>Cancel subscription\n setShowCancelDialog(false)}\n serverLicense={serverLicense}\n >\n \n \n \n )}\n \n )}\n \n \n \n \n {!showCustomStripeControls && !isCancelled && }\n \n );\n}\n","import React from \"react\";\nimport { Grid, Stack, Typography } from \"@mui/material\";\nimport { DateTime } from \"luxon\";\nimport { DateText } from \"@cpt/components\";\nimport { isServerTrial } from \"utils/isTrial\";\nimport type { TrialServerLicensingChannelDto } from \"client/api/ServerLicenseApi\";\nimport { LicenseChannelChip } from \"components/LicenseChannelChip/LicenseChannelChip\";\nimport { RouterLink } from \"components/RouterLink/RouterLink\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { ServerLicensesRoutesMap } from \"areas/serverLicenses/ServerLicensesRoutesMap\";\nimport type { ServerLicensingChannelViewProps } from \"./ServerLicensingChannelViewProps\";\n\nexport function TrialServerLicensingChannelView({\n serverLicense,\n channel,\n}: ServerLicensingChannelViewProps) {\n const isTrial = isServerTrial(channel.channelType);\n\n if (!isTrial) {\n throw new Error(\"Rendering TrialLicensingChannelView for non-trial subscription.\");\n }\n\n const now = DateTime.now();\n let planStatusPrefix = \"Expires\";\n if (serverLicense.expiryDate < now) {\n planStatusPrefix = \"Expired\";\n }\n\n return (\n <>\n \n Current plan\n \n \n \n Octopus Server Trial \n \n \n {planStatusPrefix} \n \n \n \n \n \n {serverLicense.isFulfilled && (\n Upgrade Plan\n )}\n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Grid, Typography, Stack } from \"@mui/material\";\nimport { DateText } from \"@cpt/components\";\nimport type { ZuoraServerLicensingChannelDto } from \"client/api/ServerLicenseApi\";\nimport { ChangePlanFinanceLine } from \"components/ChangePlanFinanceLine/ChangePlanFinanceLine\";\nimport { GridDivider } from \"components/GridDivider/GridDivider\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport type { ServerLicensingChannelViewProps } from \"./ServerLicensingChannelViewProps\";\n\nexport function ZuoraServerLicensingChannelView(\n props: ServerLicensingChannelViewProps\n) {\n const { channel, serverLicense } = props;\n const planStatusPrefix = channel.cancelAtPeriodEnd ? \"Cancels on\" : \"License expiry\";\n\n return (\n <>\n \n Platform and licensing\n \n \n \n Server {/* TODO: get actual plan name (sc-94081) */}\n \n {planStatusPrefix} \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Grid } from \"@mui/material\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { GridDivider } from \"components/GridDivider/GridDivider\";\nimport { LicensedEntitlementsView } from \"components/LicensedEntitlementsView/LicensedEntitlementsView\";\nimport { OrdersFinanceLine } from \"components/OrdersFinanceLine/OrdersFinanceLine\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport type { ServerLicenseProps } from \"areas/serverLicenses/ServerLicenseProps\";\nimport { ServerLicenseHeader } from \"areas/serverLicenses/components/ServerLicenseHeader\";\nimport { SalesforceContractedServerLicensingChannelView } from \"areas/serverLicenses/detail/components/finance/SalesforceContractedServerLicensingChannelView\";\nimport { StripeSubscriptionServerLicensingChannelView } from \"areas/serverLicenses/detail/components/finance/StripeSubscriptionServerLicensingChannelView\";\nimport { TrialServerLicensingChannelView } from \"./components/finance/TrialServerLicensingChannelView\";\nimport { ZuoraServerLicensingChannelView } from \"./components/finance/ZuoraServerLicensingChannelView\";\n\nfunction ServerLicensingChannelView(props: ServerLicenseProps) {\n const { serverLicense } = props;\n\n switch (serverLicense.licensingChannel.channelType) {\n case \"ZuoraServerLicensingChannelDto\":\n return ;\n case \"SalesforceContractedServerLicensingChannelDto\":\n return ;\n case \"StripeSubscriptionServerLicensingChannelDto\":\n return (\n \n );\n case \"TrialServerLicensingChannelDto\":\n return ;\n case \"TemporaryServerLicensingChannelDto\":\n return null;\n }\n}\n\nfunction EntitlementView(props: ServerLicenseProps) {\n const { serverLicense } = props;\n return ;\n}\n\nexport function ServerLicenseFinance() {\n const { entity: serverLicense } = useEntity();\n\n if (!serverLicense) return <>;\n\n return (\n \n \n \n \n \n \n \n \n \n \n );\n}\n","import React from \"react\";\nimport { useNavigate, useParams } from \"react-router-dom\";\nimport { Alert } from \"@mui/material\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { getServerLicenseBySerial } from \"client/api/ServerLicenseApi\";\n\nexport function ServerLicenseLoadViaSerial() {\n const { serialId } = useParams();\n\n const { data, loading, error, refresh } = useAsyncRequest(getServerLicenseBySerial, serialId || \"\");\n\n const navigate = useNavigate();\n\n if (data) {\n navigate(`/server-licenses/${data.id}`);\n }\n\n if (error) {\n return {error.message};\n }\n\n return <>;\n}\n","import React from \"react\";\nimport { Grid, Stack, styled } from \"@mui/material\";\nimport { colorScales } from \"@octopusdeploy/design-system-tokens\";\nimport { GridDivider } from \"components/GridDivider/GridDivider\";\nimport { themeTokens } from \"components/Theme/theme\";\n\nconst InstallationStepTitle = styled(\"span\")`\n font-weight: 700;\n font-size: 17px;\n color: ${themeTokens.color.text.primary};\n`;\n\nconst InstallationStepTextContainer = styled(\"span\")`\n color: ${colorScales.slate[600]};\n font-weight: 400;\n font-size: 16px;\n`;\n\nexport function InstallationStepText(props: { children: React.ReactNode }) {\n return (\n \n {props.children}\n \n );\n}\n\ninterface InstallationStepProps {\n stepNumber: number;\n label: string;\n children: React.ReactNode;\n}\n\nexport function InstallationStep(props: InstallationStepProps) {\n const { label, children, stepNumber } = props;\n return (\n \n \n {stepNumber}.\n \n \n \n {label}\n \n \n {children}\n \n \n \n );\n}\n\ninterface InstallGuideProps {\n children: React.ReactNode;\n}\nexport function InstallGuide(props: InstallGuideProps) {\n const { children } = props;\n return (\n } spacing={2}>\n {children}\n \n );\n}\n","import React from \"react\";\nimport { Grid } from \"@mui/material\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { ExternalLink } from \"components/ExternalLink/ExternalLink\";\nimport LoadingPlaceholder from \"components/LoadingPlaceholder\";\nimport { FormattedTextArea } from \"components/form/FormattedTextArea\";\nimport {\n InstallationStep,\n InstallationStepText,\n InstallGuide,\n} from \"areas/serverLicenses/detail/components/ServerLicenseInstallation/InstallGuide\";\n\nfunction GetDockerCommand(licenseKeyXml: string) {\n const base64LicenseKey = window.btoa(licenseKeyXml);\n let dockerCommand = `docker run \\\\\\n`;\n dockerCommand += `--interactive \\\\\\n`;\n dockerCommand += `--detach \\\\\\n`;\n dockerCommand += `--privileged \\\\\\n`;\n dockerCommand += `--name OctopusDeploy \\\\\\n`;\n dockerCommand += `--publish 1322:8080 \\\\\\n`;\n dockerCommand += `--env ACCEPT_EULA=\"Y\" \\\\\\n`;\n dockerCommand += `--env DB_CONNECTION_STRING=\"...\" \\\\\\n`;\n dockerCommand += `--env OCTOPUS_SERVER_BASE64_LICENSE=\"${base64LicenseKey}\" \\\\\\n`;\n dockerCommand += `octopusdeploy/octopusdeploy`;\n\n return dockerCommand;\n}\n\ninterface LinuxInstallGuideProps {\n licenseXml?: string;\n loading?: boolean;\n error?: Error;\n}\n\nexport function LinuxInstallGuide(props: LinuxInstallGuideProps) {\n const { licenseXml, loading, error } = props;\n return (\n \n \n \n Here’s an example command to start the Octopus Server container on Linux.\n \n \n \n \n \n \n Read the docs for more configuration options.\n \n Explore the docs\n \n \n\n \n \n Start using your new Octopus instance by doing your first deployment.\n \n \n Follow the tutorial\n \n \n \n );\n}\n","import React from \"react\";\nimport { Grid } from \"@mui/material\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { ExternalLink } from \"components/ExternalLink/ExternalLink\";\nimport {\n InstallationStep,\n InstallationStepText,\n InstallGuide,\n} from \"areas/serverLicenses/detail/components/ServerLicenseInstallation/InstallGuide\";\n\nexport function WindowsInstallGuide() {\n return (\n \n \n \n Click the link below to download the 64-bit MSI installer for Windows.\n \n \n Download Octopus\n \n \n\n \n Copy and paste your license key when prompted.\n \n Read the guide\n \n \n\n \n \n Start using your new Octopus instance by doing your first deployment.\n \n \n Follow the tutorial\n \n \n \n );\n}\n","import React from \"react\";\nimport { Grid, TextField } from \"@mui/material\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { ExternalLink } from \"components/ExternalLink/ExternalLink\";\nimport LoadingPlaceholder from \"components/LoadingPlaceholder\";\nimport { FormattedTextArea } from \"components/form/FormattedTextArea\";\nimport {\n InstallationStep,\n InstallationStepText,\n InstallGuide,\n} from \"areas/serverLicenses/detail/components/ServerLicenseInstallation/InstallGuide\";\n\nfunction GetHelmInstallCommand(licenseKeyXml: string, storageClass: string) {\n const base64LicenseKey = window.btoa(licenseKeyXml);\n let helmCommand = `helm upgrade my-octopus-instance oci://ghcr.io/octopusdeploy/octopusdeploy-helm \\\\\\n`;\n helmCommand += `--install \\\\\\n`;\n helmCommand += `--namespace octopus-deploy \\\\\\n`;\n helmCommand += `--create-namespace \\\\\\n`;\n helmCommand += `--set octopus.acceptEula=\"Y\" \\\\\\n`;\n helmCommand += `--set mssql.enabled=\"true\" \\\\\\n`;\n helmCommand += `--set octopus.licenseKeyBase64=\"${base64LicenseKey}\" \\\\\\n`;\n\n if (storageClass && storageClass.trim().length > 0) {\n helmCommand += `--set global.storageClass=\"${storageClass}\" \\\\\\n`;\n }\n\n helmCommand += `--atomic`;\n\n return helmCommand;\n}\n\ninterface KubernetesInstallGuideProps {\n licenseXml?: string;\n loading?: boolean;\n error?: Error;\n}\nexport function KubernetesInstallGuide(props: KubernetesInstallGuideProps) {\n const { licenseXml, loading, error } = props;\n const [storageClass, setStorageClass] = React.useState(\"\");\n const handleStorageClassChange = (event: React.ChangeEvent) => {\n setStorageClass(event.target.value);\n };\n\n return (\n \n \n \n \n \n \n The Storage Class and your license key will automatically get added to the Helm command below.\n \n \n\n \n \n Run this Helm command to install Octopus server in your Kubernetes cluster.\n \n \n \n \n \n \n \n The command installs Octopus Server and its dependencies, like SQL Server, in a way that’s suitable for\n evaluation. Read the docs for more configuration options.\n \n \n Explore the docs\n \n \n\n \n \n Octopus typically needs two ingress resources for web access and Polling Tentacle communication.\n \n \n Read the guide\n \n \n\n \n \n Start using your new Octopus instance by doing your first deployment to Kubernetes.\n \n \n Read the guide\n \n \n \n );\n}\n","import React from \"react\";\nimport { Card, Grid, Tab, Tabs, Typography } from \"@mui/material\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { LinuxInstallGuide } from \"areas/serverLicenses/detail/components/ServerLicenseInstallation/LinuxInstallGuide\";\nimport { WindowsInstallGuide } from \"areas/serverLicenses/detail/components/ServerLicenseInstallation/WindowsInstallGuide\";\nimport { KubernetesInstallGuide } from \"./KubernetesInstallGuide\";\n\ninterface ServerLicenseInstallationProps {\n licenseXml?: string;\n loading?: boolean;\n error?: Error;\n}\n\nexport function ServerLicenseInstallation(props: ServerLicenseInstallationProps) {\n const { licenseXml, loading, error } = props;\n const [value, setValue] = React.useState(0);\n\n const handleTabChange = (_: React.SyntheticEvent, newValue: number) => {\n setValue(newValue);\n };\n\n const TabContent = [\n ,\n ,\n ,\n ];\n\n return (\n \n \n \n Install Octopus Server\n \n \n \n \n \n \n \n \n \n \n {TabContent[value]}\n \n \n );\n}\n","import type { ReactElement, ReactNode } from \"react\";\nimport React, { useState } from \"react\";\nimport { Link as RouterLink } from \"react-router-dom\";\nimport { faServer } from \"@fortawesome/free-solid-svg-icons\";\nimport CalendarMonthIcon from \"@mui/icons-material/CalendarMonth\";\nimport { Avatar, Card, Grid, ListItem, ListItemIcon, ListItemText, Stack, Typography } from \"@mui/material\";\nimport { DateText, FontAwesomeSvgIcon } from \"@cpt/components\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { usePolling } from \"hooks/usePolling\";\nimport { IsServerLicenseStripeSubscriptionLicensingChannel } from \"utils/ServerLicenseLicensingChannelTypeHelpers\";\nimport { isServerTrial } from \"utils/isTrial\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport {\n checkServerLicenseFulfilled,\n getLicenseXmlById,\n getServerLicenseById,\n isZuoraServerLicenseChannel,\n} from \"client/api/ServerLicenseApi\";\nimport { GreenButton } from \"components/Button/GreenButton\";\nimport { DetailOverviewBanner } from \"components/DetailOverviewBanner/DetailOverviewBanner\";\nimport { LicenseChannelChip } from \"components/LicenseChannelChip/LicenseChannelChip\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { ServerLicensesRoutesMap } from \"areas/serverLicenses/ServerLicensesRoutesMap\";\nimport { LicenseKeyView } from \"areas/serverLicenses/components/LicenseKeyView\";\nimport { ServerLicenseHeader } from \"areas/serverLicenses/components/ServerLicenseHeader\";\nimport { ServerLicenseInstallation } from \"areas/serverLicenses/detail/components/ServerLicenseInstallation/ServerLicenseInstallation\";\n\nexport type IconAndTextProps = {\n icon: ReactElement;\n topText: ReactNode | string;\n bottomItem: ReactElement;\n};\n\nexport function IconAndText(props: IconAndTextProps) {\n const { icon, topText, bottomItem } = props;\n\n return (\n \n \n theme.palette.grey[200],\n width: 56,\n height: 56,\n marginRight: 2,\n color: themeTokens.color.text.secondary,\n }}\n >\n {icon}\n \n \n \n \n );\n}\n\nexport type PlanCardProps = {\n serverLicense: ServerLicenseDto;\n};\n\nexport function PlanCard(props: PlanCardProps) {\n const { serverLicense } = props;\n\n const canUpgrade = isServerTrial(serverLicense.licensingChannel.channelType) && serverLicense.isFulfilled;\n const isZuora = isZuoraServerLicenseChannel(serverLicense.licensingChannel);\n\n let expiryDateLabel: string | undefined = undefined;\n expiryDateLabel = isZuora ? \"License expiry\" : \"Expiry\";\n\n return (\n \n \n {isZuora ? \"Platform and licensing\" : \"Plan\"}\n \n \n \n }\n topText={\n <>\n Server{\" \"}\n {serverLicense.isFulfilled && (\n \n )}\n \n }\n bottomItem={<>Serial: {serverLicense.serial}}\n />\n {canUpgrade && (\n \n \n Upgrade Plan\n \n \n )}\n \n \n }\n topText={\n \n }\n bottomItem={<>{expiryDateLabel}}\n />\n \n \n \n );\n}\n\ninterface LicenseXmlCardsProps {\n serverLicense: ServerLicenseDto;\n isFulfilled: boolean;\n}\n\nfunction LicenseXmlCards({ serverLicense, isFulfilled }: LicenseXmlCardsProps) {\n const { data, loading, error } = useAsyncRequest(getLicenseXmlById, serverLicense.id);\n return (\n <>\n \n \n \n );\n}\n\nexport function ServerLicenseOverview() {\n const { entity: serverLicense, update } = useEntity();\n const { hasPermissionForAsset } = useUserContext();\n\n const canViewLicenseKeyXml = hasPermissionForAsset(\n RbacPermissions.ServerLicense.ViewLicenseKeyXml,\n serverLicense?.id,\n serverLicense?.subscriptionGroup?.id\n );\n const [loading, setLoading] = useState(!serverLicense?.isFulfilled);\n\n const checkProvisioned = async () => {\n if (serverLicense?.id && !serverLicense?.isFulfilled) {\n const check = await checkServerLicenseFulfilled(serverLicense.id);\n if (check) {\n const updatedLicense = await getServerLicenseById(serverLicense.id);\n setLoading(false);\n update(updatedLicense);\n }\n }\n };\n\n usePolling(checkProvisioned, loading);\n\n if (!serverLicense) return <>;\n return (\n <>\n \n \n \n \n {canViewLicenseKeyXml && (\n \n )}\n \n \n );\n}\n","import React, { useState } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport { faExclamationCircle } from \"@fortawesome/free-solid-svg-icons\";\nimport { Alert, Typography } from \"@mui/material\";\nimport { RoutesMap } from \"RoutesMap\";\nimport axios from \"axios\";\nimport type { DateTime } from \"luxon\";\nimport { DateText, FontAwesomeSvgIcon } from \"@cpt/components\";\nimport { changeStripeProduct } from \"client/api/ServerLicenseApi\";\nimport type { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { ActionDialog } from \"components/ActionDialog/ActionDialog\";\nimport { StripeCustomerPortalLinkButton } from \"components/StripeCustomerPortalLink/StripeCustomerPortalLinkButton\";\nimport { themeTokens } from \"components/Theme/theme\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\n\ntype ConfirmStripeUpgradeDialogProps = {\n open: boolean;\n setOpen: (value: boolean) => Promise | void;\n productName: string;\n serverLicenseId: string;\n targetPlan: UpgradePlan;\n varyByTarget: boolean;\n nextRenewalDate?: DateTime;\n};\n\nexport function ConfirmStripeUpgradeDialog(props: ConfirmStripeUpgradeDialogProps) {\n const { open, setOpen, productName, serverLicenseId, targetPlan, varyByTarget, nextRenewalDate } = props;\n const navigate = useNavigate();\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState();\n const [billingInformationError, setBillingInformationError] = useState(false);\n\n return (\n {\n setLoading(true);\n try {\n await changeStripeProduct(serverLicenseId, targetPlan);\n\n navigate({\n pathname: RoutesMap.completingUpgrade,\n search: `serverLicenseId=${serverLicenseId}&priceCode=${targetPlan}`,\n });\n } catch (e) {\n if (axios.isAxiosError(e)) {\n if (e.response?.data === \"Stripe billing information is incomplete\") setBillingInformationError(true);\n else setError(e);\n } else {\n console.error(e);\n }\n\n setLoading(false);\n }\n }}\n onCancel={() => setOpen(false)}\n >\n <>\n {billingInformationError && }\n {!!error && }\n Your subscription will immediately be updated to Server {productName}.\n {!varyByTarget && nextRenewalDate && (\n \n You will be charged for your upgraded plan in your next invoice on{\" \"}\n \n \n )}\n {varyByTarget && nextRenewalDate && (\n \n Your next bill, charged , will be based on the number\n of deployment targets you use during this billing period.\n \n )}\n \n \n );\n}\n\nconst BillingInformationAlert = ({ serverLicenseId }: { serverLicenseId: string }) => (\n \n }\n >\n \n Missing billing information\n \n \n Please set up your billing details in Stripe and then return to this page to complete your upgrade.\n \n \n \n);\n","import React, { useState } from \"react\";\nimport { useNavigate } from \"react-router-dom\";\nimport ChevronRightIcon from \"@mui/icons-material/ChevronRight\";\nimport { Button } from \"@mui/material\";\nimport type { DateTime } from \"luxon\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport {\n hasPriceCode,\n hasStatus,\n IsServerLicenseStripeSubscriptionLicensingChannel,\n isServerLicenseTrialLicensingChannel,\n} from \"utils/ServerLicenseLicensingChannelTypeHelpers\";\nimport type { ServerLicenseDto, ServerLicensingChannel } from \"client/api/ServerLicenseApi\";\nimport { ServerLicensingChannelTypesKeys } from \"client/api/ServerLicenseApi\";\nimport { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { GreenButton } from \"components/Button/GreenButton\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport type { ContactSalesReason } from \"components/Dialogs/ContactSalesDialog/ContactSalesReasons\";\nimport { PurchasingRoutesMap } from \"areas/purchasing/PurchasingRoutesMap\";\nimport { ServerLicenseCancelPlanDialog, ServerLicenseCancelPlanDialogText } from \"../ServerLicenseCancelPlanDialog\";\nimport { ConfirmStripeUpgradeDialog } from \"./ConfirmStripeUpgradeDialog\";\n\nconst isAllowedSelfService = ({\n licensingChannel,\n priceCode,\n targetPriceCode,\n}: {\n licensingChannel: ServerLicensingChannel;\n priceCode: string | undefined;\n targetPriceCode: string;\n}) => {\n const isAllowedChannel = isAllowedSelfServiceLicensingChannel(licensingChannel);\n const isAllowedTransition = isAllowedPlanTransition({ licensingChannel, priceCode, targetPriceCode });\n\n return isAllowedChannel && isAllowedTransition;\n};\n\nconst isAllowedPlanTransition = ({\n licensingChannel,\n priceCode,\n targetPriceCode,\n}: {\n licensingChannel: ServerLicensingChannel;\n priceCode: string | undefined;\n targetPriceCode: string;\n}) => {\n let isAllowedPlanTransition = false;\n const trialBrand = \"Trial\";\n const planBrand = isServerLicenseTrialLicensingChannel(licensingChannel) ? trialBrand : priceCode?.toLowerCase();\n const allowedPlanTransitions = getAllowedSelfServicePlanTransitions();\n\n if (typeof planBrand === \"string\" && allowedPlanTransitions[planBrand]?.includes(targetPriceCode)) {\n isAllowedPlanTransition = true;\n }\n\n return isAllowedPlanTransition;\n};\n\nconst isAllowedSelfServiceLicensingChannel = (licensingChannel: ServerLicensingChannel) => {\n if (IsServerLicenseStripeSubscriptionLicensingChannel(licensingChannel)) {\n return true;\n }\n return !!isServerLicenseTrialLicensingChannel(licensingChannel);\n};\n\n/**\n * Maps the allowed transitions between different plans, for Stripe licenses using priceCode, for Trials using \"Trial\" as brand\n * @returns allowed transitions\n */\nconst getAllowedSelfServicePlanTransitions = () => {\n const trialBrand = \"Trial\";\n const allowed: { [id: string]: string[] } = {\n [trialBrand]: [UpgradePlan.Server_Annually_Starter, UpgradePlan.Server_Annually_Professional],\n };\n return allowed;\n};\n\nexport function getUpgradeAction(\n pricingCardPriceCode: string,\n licensingChannel: ServerLicensingChannel\n): UpgradeActions {\n if (!isAllowedSelfServiceLicensingChannel(licensingChannel)) return \"contact-sales\";\n if (hasStatus(licensingChannel) && licensingChannel.status === \"canceled\") return \"contact-sales\";\n if (\n IsServerLicenseStripeSubscriptionLicensingChannel(licensingChannel) &&\n pricingCardPriceCode == licensingChannel.priceCode\n ) {\n return \"no-change\";\n }\n\n if (\n isAllowedSelfService({\n licensingChannel,\n priceCode: (hasPriceCode(licensingChannel) && licensingChannel.priceCode) || undefined,\n targetPriceCode: pricingCardPriceCode,\n })\n ) {\n return isServerLicenseTrialLicensingChannel(licensingChannel) ? \"self-service-purchase\" : \"self-service-upgrade\";\n }\n\n return \"contact-sales\";\n}\n\nexport type UpgradeActions = \"self-service-purchase\" | \"self-service-upgrade\" | \"contact-sales\" | \"no-change\";\n\nexport type PricingCardActionProps = {\n serverLicenseId: string;\n action: UpgradeActions;\n targetPlan: UpgradePlan;\n targetPlanName: string;\n projectQuantity: string;\n nextRenewalDate?: DateTime;\n};\n\nexport function PricingCardAction(props: PricingCardActionProps) {\n const { serverLicenseId, action, targetPlan, targetPlanName, nextRenewalDate, projectQuantity } = props;\n\n const { showDialog: showContactSalesDialog } = useContactSalesDialog();\n const [showUpgradeDialog, setShowUpgradeDialog] = useState(false);\n const navigate = useNavigate();\n const useZuoraProfessionalCheckout = useFeatureFlag(\"ZuoraProfessionalCheckout\");\n const useZuoraCheckout = useFeatureFlag(\"ZuoraCheckout\");\n\n const subscribeButton = (\n \n navigate({\n pathname: PurchasingRoutesMap.payment,\n search: `subscriptionId=${serverLicenseId}&subscriptionType=selfhosted&plan=${targetPlan}&projects=${projectQuantity}`,\n })\n }\n endIcon={}\n >\n Buy now\n \n );\n\n const upgradeButton = (\n <>\n setShowUpgradeDialog(true)}\n size=\"large\"\n disableElevation\n sx={{ textTransform: \"none\", width: \"100%\", marginTop: \"0.75rem\", backgroundColor: \"#00B065\" }}\n endIcon={}\n >\n Upgrade via Stripe\n \n \n \n );\n\n const contactSalesButton = (targetPlan: UpgradePlan) => {\n let reason: ContactSalesReason = \"modify-subscription\";\n switch (targetPlan) {\n case UpgradePlan.Server_Annually_Starter:\n reason = \"starter\";\n break;\n case UpgradePlan.Server_Annually_Professional:\n reason = \"professional\";\n break;\n case UpgradePlan.Server_Annually_Enterprise:\n reason = \"enterprise\";\n break;\n }\n return (\n <>\n showContactSalesDialog({ reason, projectQuantity })}\n size=\"large\"\n disableElevation\n sx={{\n textTransform: \"none\",\n width: \"100%\",\n marginTop: \"0.75rem\",\n backgroundColor: \"#EEFAF5\",\n color: \"#00874D\",\n border: \"1px solid #00874D\",\n }}\n >\n Talk to us\n \n \n );\n };\n\n const CancelButton = () => {\n const [showCancelDialog, setShowCancelDialog] = useState(false);\n const { entity: serverLicense } = useEntity();\n\n switch (serverLicense?.licensingChannel.channelType) {\n case ServerLicensingChannelTypesKeys.Stripe:\n return (\n <>\n setShowCancelDialog(true)}\n >\n Cancel\n \n setShowCancelDialog(false)}\n serverLicense={serverLicense}\n >\n \n \n \n );\n case ServerLicensingChannelTypesKeys.Trial:\n return (\n <>\n setShowCancelDialog(true)}\n >\n Cancel\n \n setShowCancelDialog(false)}\n serverLicense={serverLicense}\n >\n \n \n \n );\n\n default:\n return (\n showContactSalesDialog({ reason: \"modify-subscription\" })}\n >\n Cancel\n \n );\n }\n };\n\n let button = <>;\n switch (action) {\n case \"self-service-purchase\":\n if (useZuoraCheckout) {\n !useZuoraProfessionalCheckout && targetPlan === UpgradePlan.Server_Annually_Professional\n ? (button = contactSalesButton(targetPlan))\n : (button = subscribeButton);\n } else {\n button = contactSalesButton(targetPlan);\n }\n break;\n case \"self-service-upgrade\":\n // NOTE: stripe upgrades disabled and zuora isn't setup for it yet\n button = contactSalesButton(targetPlan);\n break;\n case \"contact-sales\":\n button = contactSalesButton(targetPlan);\n break;\n case \"no-change\":\n button = ;\n break;\n }\n\n return button;\n}\n","import type { ReactNode } from \"react\";\nimport React, { useState } from \"react\";\nimport { faCheckCircle as faCheckCircleRegular } from \"@fortawesome/free-regular-svg-icons\";\nimport type { SelectChangeEvent } from \"@mui/material\";\nimport { Box, Grid, List, ListItem, Typography, Link } from \"@mui/material\";\nimport type { DateTime } from \"luxon\";\nimport { FontAwesomeSvgIcon, InfoButton } from \"@cpt/components\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { IsServerLicenseStripeSubscriptionLicensingChannel } from \"utils/ServerLicenseLicensingChannelTypeHelpers\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { PopoverCloseButton } from \"components/PopoverHelp/PopoverCloseButton\";\nimport PopoverHelp from \"components/PopoverHelp/PopoverHelp\";\nimport { PricingCardCurrentPlanChip } from \"components/PricingCard/PricingCardCurrentPlanChip\";\nimport {\n FeatureItemDivider,\n FeatureListDivider,\n FeatureListItemText,\n} from \"components/PricingCard/PricingCardFeatureListElements\";\nimport { PricingCardFeatureListItem } from \"components/PricingCard/PricingCardFeatureListItem\";\nimport { PricingCardPriceSelector } from \"components/PricingCard/PricingCardPriceSelector\";\nimport { PricingCardTitle } from \"components/PricingCard/PricingCardTitle\";\nimport type { CatalogProduct } from \"areas/serverLicenses/detail/ServerLicenseUpgrade\";\nimport { PlanTestId } from \"areas/serverLicenses/detail/ServerLicenseUpgrade\";\nimport { PricingCardAction, getUpgradeAction } from \"./ServerPricingCardAction\";\n\nconst PricingCardPriceCode = UpgradePlan.Server_Annually_Enterprise;\nconst PlanName = \"Enterprise\";\nconst planStyles = {\n borderRadius: \"10px\",\n background: \"#FFF\",\n border: \"1px solid #D4DCE3\",\n};\nconst currentPlanStyles = { borderRadius: \"10px\", background: \"#FFF\", border: \"1px solid #D4DCE3\" };\n\nexport function ServerEnterprisePricingCard({ catalog }: { catalog: CatalogProduct }) {\n const { entity: serverLicense } = useEntity();\n const { showDialog } = useContactSalesDialog();\n const [selectedProjects, setSelectedProjects] = useState(catalog?.prices[0]?.projectQuantity || \"\");\n const useZuoraProfessionalCheckout = useFeatureFlag(\"ZuoraProfessionalCheckout\");\n const useZuoraCheckout = useFeatureFlag(\"ZuoraCheckout\");\n\n if (!serverLicense) return <>;\n\n const upgradeAction = getUpgradeAction(PricingCardPriceCode, serverLicense.licensingChannel);\n const isCurrentPlan = upgradeAction === \"no-change\";\n\n let nextRenewalDate: DateTime | undefined = undefined;\n if (IsServerLicenseStripeSubscriptionLicensingChannel(serverLicense.licensingChannel)) {\n nextRenewalDate = serverLicense.licensingChannel?.nextRenewalDate;\n }\n\n const changedProductSelectionHandler = (e: SelectChangeEvent) => {\n if (typeof e.target.value === \"string\" || typeof e.target.value === \"number\") {\n setSelectedProjects(e.target.value.toString());\n }\n };\n\n const features: (ReactNode | ReactNode[])[][] = [\n [\n Best for over 100 projects,\n Unlimited users,\n \n Concurrent tasks best practices\n ,\n Unlimited instances,\n Unlimited high availability nodes,\n ],\n [\n Runbook automation,\n Environment progression,\n SSO and RBAC,\n ],\n [\n Tailored onboarding,\n 24/7 support,\n ],\n [\n \n \n Blueprints and Guardrails\n \n \n }\n >\n \n Coming soon -{\" \"}\n \n showDialog({ reason: \"enterprise\" })} fontSize={\"1em\"} fontWeight={400}>\n Contact Sales\n \n {\" \"}\n to learn more\n \n \n ,\n Insights & DORA metrics,\n SIEM audit log streaming,\n ITSM integration,\n \n \n Custom billing\n \n \n }\n >\n \n \n showDialog({ reason: \"enterprise\" })} fontSize={\"1em\"} fontWeight={400}>\n Contact us\n \n {\" \"}\n or buy through{\" \"}\n \n Azure Marketplace\n \n \n \n ,\n \n \n Customer Success Manager\n \n \n }\n >\n Enterprise licenses >$50k USD are assigned a CSM\n \n ,\n [\n \n Add-on: Premium support\n ,\n ,\n ],\n [\n \n Add-on: TAM services\n ,\n ,\n ],\n ],\n ];\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {useZuoraCheckout && useZuoraProfessionalCheckout && (\n \n \n Placeholder text\n \n \n )}\n \n \n \n {features.map((list, listIndex) => (\n \n \n {listIndex < features.length && }\n {listIndex === 0 && (\n <>\n \n \n All core features\n \n \n }\n />\n \n \n )}\n {list.map((item, index) => {\n let icon = undefined,\n feature = item;\n if (Array.isArray(item)) {\n feature = item[0];\n icon = item[1];\n }\n\n return (\n \n \n {index < list.length - 1 && }\n \n );\n })}\n \n \n ))}\n \n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport type { SelectChangeEvent } from \"@mui/material\";\nimport { Box, Grid, List, ListItem, Typography } from \"@mui/material\";\nimport type { DateTime } from \"luxon\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { IsServerLicenseStripeSubscriptionLicensingChannel } from \"utils/ServerLicenseLicensingChannelTypeHelpers\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { useContactSalesDialog } from \"components/Dialogs/ContactSalesDialog/ContactSalesDialogProvider\";\nimport { LinkButton } from \"components/LinkButton/LinkButton\";\nimport { PricingCardCurrentPlanChip } from \"components/PricingCard/PricingCardCurrentPlanChip\";\nimport {\n FeatureItemDivider,\n FeatureListDivider,\n FeatureListItemText,\n} from \"components/PricingCard/PricingCardFeatureListElements\";\nimport { PricingCardFeatureListItem } from \"components/PricingCard/PricingCardFeatureListItem\";\nimport { PricingCardPriceSelector } from \"components/PricingCard/PricingCardPriceSelector\";\nimport { PricingCardTitle } from \"components/PricingCard/PricingCardTitle\";\nimport type { CatalogProduct } from \"areas/serverLicenses/detail/ServerLicenseUpgrade\";\nimport { PlanTestId } from \"areas/serverLicenses/detail/ServerLicenseUpgrade\";\nimport { PricingCardAction, getUpgradeAction } from \"./ServerPricingCardAction\";\n\nconst PricingCardPriceCode = UpgradePlan.Server_Annually_Professional;\nconst PlanName = \"Professional\";\nconst planStyles = {\n borderRadius: \"10px\",\n background: \"#FFF\",\n border: \"1px solid #D4DCE3\",\n};\nconst currentPlanStyles = { borderRadius: \"10px\", background: \"#FFF\", border: \"1px solid #D4DCE3\" };\n\nexport function ServerProfessionalPricingCard({ catalog }: { catalog: CatalogProduct }) {\n const { entity: serverLicense } = useEntity();\n const [selectedProjects, setSelectedProjects] = useState(catalog?.prices[0]?.projectQuantity || \"\");\n const useZuoraProfessionalCheckout = useFeatureFlag(\"ZuoraProfessionalCheckout\");\n const useZuoraCheckout = useFeatureFlag(\"ZuoraCheckout\");\n const { showDialog: showContactSalesDialog } = useContactSalesDialog();\n\n if (!serverLicense) return <>;\n\n const upgradeAction = getUpgradeAction(PricingCardPriceCode, serverLicense.licensingChannel);\n const isCurrentPlan = upgradeAction === \"no-change\";\n\n const changedProductSelectionHandler = (e: SelectChangeEvent) => {\n if (typeof e.target.value === \"string\" || typeof e.target.value === \"number\") {\n setSelectedProjects(e.target.value.toString());\n }\n };\n\n let nextRenewalDate: DateTime | undefined = undefined;\n if (IsServerLicenseStripeSubscriptionLicensingChannel(serverLicense.licensingChannel)) {\n nextRenewalDate = serverLicense.licensingChannel?.nextRenewalDate;\n }\n\n const features = [\n [\n Best for under 100 projects,\n Unlimited users,\n \n Concurrent tasks best practices\n ,\n 3 instances,\n 2 high availability nodes,\n ],\n [\n Runbook automation,\n Environment progression,\n SSO and RBAC,\n ],\n [\n Onboarding with an expert guide,\n 8/5 support (9-5pm weekdays),\n ],\n ];\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {useZuoraCheckout && useZuoraProfessionalCheckout && (\n \n showContactSalesDialog({ reason: \"professional\", projectQuantity: selectedProjects })}\n >\n Or talk to us\n \n \n )}\n \n \n \n {features.map((list, listIndex) => (\n \n \n {listIndex < features.length && }\n {listIndex === 0 && (\n <>\n \n \n All core features\n \n \n }\n />\n \n \n )}\n {list.map((feature, index) => (\n \n \n {index < list.length - 1 && }\n \n ))}\n \n \n ))}\n \n \n \n \n );\n}\n","import React, { useState } from \"react\";\nimport type { SelectChangeEvent } from \"@mui/material\";\nimport { Box, Grid, List, ListItem, Typography, Link } from \"@mui/material\";\nimport type { DateTime } from \"luxon\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport { IsServerLicenseStripeSubscriptionLicensingChannel } from \"utils/ServerLicenseLicensingChannelTypeHelpers\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { UpgradePlan } from \"client/api/UpgradePlan\";\nimport { PricingCardCurrentPlanChip } from \"components/PricingCard/PricingCardCurrentPlanChip\";\nimport {\n FeatureItemDivider,\n FeatureListDivider,\n FeatureListItemText,\n} from \"components/PricingCard/PricingCardFeatureListElements\";\nimport { PricingCardFeatureListItem } from \"components/PricingCard/PricingCardFeatureListItem\";\nimport { PricingCardPriceSelector } from \"components/PricingCard/PricingCardPriceSelector\";\nimport { PricingCardTitle } from \"components/PricingCard/PricingCardTitle\";\nimport type { CatalogProduct } from \"areas/serverLicenses/detail/ServerLicenseUpgrade\";\nimport { PlanTestId } from \"areas/serverLicenses/detail/ServerLicenseUpgrade\";\nimport { PricingCardAction, getUpgradeAction } from \"./ServerPricingCardAction\";\n\nconst PricingCardPriceCode = UpgradePlan.Server_Annually_Starter;\nconst PlanName = \"Starter\";\nconst planStyles = {\n borderRadius: \"10px\",\n background: \"#FFF\",\n border: \"1px solid #D4DCE3\",\n};\nconst currentPlanStyles = { borderRadius: \"10px\", background: \"#FFF\", border: \"1px solid #D4DCE3\" };\n\nexport function ServerStarterPricingCard({ catalog }: { catalog: CatalogProduct }) {\n const { entity: serverLicense } = useEntity();\n const [selectedProjects, setSelectedProjects] = useState(catalog?.prices[0]?.projectQuantity || \"\");\n const useZuoraProfessionalCheckout = useFeatureFlag(\"ZuoraProfessionalCheckout\");\n const useZuoraCheckout = useFeatureFlag(\"ZuoraCheckout\");\n\n if (!serverLicense) return <>;\n\n const upgradeAction = getUpgradeAction(PricingCardPriceCode, serverLicense.licensingChannel);\n const isCurrentPlan = upgradeAction === \"no-change\";\n\n const changedProductSelectionHandler = (e: SelectChangeEvent) => {\n if (typeof e.target.value === \"string\" || typeof e.target.value === \"number\") {\n setSelectedProjects(e.target.value.toString());\n }\n };\n\n let nextRenewalDate: DateTime | undefined = undefined;\n if (IsServerLicenseStripeSubscriptionLicensingChannel(serverLicense.licensingChannel)) {\n nextRenewalDate = serverLicense.licensingChannel?.nextRenewalDate;\n }\n\n const features = [\n [\n 10 projects, tenants, and machines,\n Unlimited users,\n 5 concurrent tasks max,\n 1 instance,\n 1 high availability node,\n ],\n [\n Runbook automation,\n Environment progression,\n SSO and RBAC,\n ],\n ];\n\n return (\n \n \n \n \n \n \n \n \n \n \n \n {useZuoraCheckout && useZuoraProfessionalCheckout && (\n \n \n Placeholder text\n \n \n )}\n \n \n \n {features.map((list, listIndex) => (\n \n \n {listIndex < features.length && }\n {listIndex === 0 && (\n <>\n \n \n All core features\n \n \n }\n />\n \n \n )}\n {list.map((feature, index) => (\n \n \n {index < list.length - 1 && }\n \n ))}\n \n \n ))}\n \n \n \n \n );\n}\n","import React from \"react\";\nimport { Typography, Container, Link, Grid, styled } from \"@mui/material\";\nimport { useFeatureFlag } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { LoadablePage } from \"shared/LoadablePage\";\nimport type { GetProductPricingResponse } from \"client/api/ProductPricingApi\";\nimport { ServerPricingCatalogProducts, getProductPricing } from \"client/api/ProductPricingApi\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { ServerLicensingChannelTypesKeys } from \"client/api/ServerLicenseApi\";\nimport { AddOns } from \"components/AddOns/AddOns\";\nimport { FaqTitle, FaqGroupHeading } from \"components/Faq\";\nimport { FaqWhatIsAMachine, FaqWhatIsAProject, FaqWhatIsATenant } from \"components/Faq/Faqs\";\nimport { PlansChangedInfoBanner } from \"components/PlansChangedInfoBanner/PlansChangedInfoBanner\";\nimport IconServer from \"resources/images/svgs/icon_server.svg\";\nimport { ServerEnterprisePricingCard } from \"areas/serverLicenses/detail/components/upgrade/ServerEnterprisePricingCard\";\nimport { ServerProfessionalPricingCard } from \"areas/serverLicenses/detail/components/upgrade/ServerProfessionalPricingCard\";\nimport { ServerStarterPricingCard } from \"areas/serverLicenses/detail/components/upgrade/ServerStarterPricingCard\";\n\nconst GradientBackground = styled(\"div\")`\n position: absolute;\n top: 0px;\n right: 0px;\n height: 300px;\n width: 100%;\n background: linear-gradient(185deg, #1fc0ff -100%, #f7f9fd 23%, #fffeff);\n border-radius: 4px 4px 0px 0px;\n`;\n\nconst GradientBorder = styled(\"div\")`\n position: absolute;\n top: -1px;\n right: -1px;\n height: 4px;\n background: linear-gradient(90deg, #e6e8ea, #1fc0ff);\n width: 100%;\n border-radius: 4px 4px 0px 0px;\n`;\n\nconst UpgradeContainer = styled(\"div\")`\n background: #fffeff;\n border-radius: 4px;\n border: 1px solid #e6e8ea;\n`;\n\nconst BackgroundContainer = styled(\"div\")`\n position: relative;\n overflow: visible;\n`;\n\nconst BodyContent = styled(\"div\")`\n position: relative;\n z-index: 2;\n`;\n\nconst PlanHeaderTagLine = styled(\"p\")`\n color: #5b6877;\n text-align: center;\n`;\n\nconst InstanceNameText = styled(\"span\")(\n ({ theme }) => `\n color: #68778D;\n`\n);\n\nconst PlanHeaderTitleHeading = styled(\"h1\")(\n ({ theme }) => `\n margin: 0;\n margin-bottom: 1rem;\n font-size: 1.5rem;\n font-weight: ${theme.typography.fontWeightBold};\n line-height: 1.5;\n text-align: center;\n`\n);\n\nconst PlanSectionHeader = styled(\"div\")(\n ({ theme }) => `\n display: flex;\n flex-direction: column;\n align-items: center;\n`\n);\n\nconst PlanIconWrapper = styled(\"div\")(\n ({ theme }) => `\n margin-top: 30px;\n margin-bottom: 12px;\n`\n);\n\nconst BannerWrapper = styled(\"div\")`\n padding: 6px 18px;\n`;\n\nexport type CatalogProduct = GetProductPricingResponse[\"products\"][0] | undefined;\nexport const PlanTestId = {\n Starter: \"starter-plan\",\n Professional: \"professional-plan\",\n Enterprise: \"enterprise-plan\",\n} as const;\nexport type PlanTestId = (typeof PlanTestId)[keyof typeof PlanTestId];\n\nconst PlanHeaderTitle = ({ serverLicense }: { serverLicense: ServerLicenseDto }) => {\n if (serverLicense?.licensingChannel.channelType === ServerLicensingChannelTypesKeys.Trial) {\n return (\n \n Purchase an Octopus Server plan for {serverLicense.friendlyName}\n \n );\n }\n\n return (\n \n Change your Octopus Server plan for {serverLicense.friendlyName}\n \n );\n};\n\nexport function ServerLicenseUpgrade() {\n const { entity: serverLicense } = useEntity();\n const { data: catalog, loading, error } = useAsyncRequest(getProductPricing);\n const starterCatalog = catalog?.products.find(\n (item) => item.name.toLowerCase() === ServerPricingCatalogProducts.ServerStarter.toLowerCase()\n );\n const professionalCatalog = catalog?.products.find(\n (item) => item.name.toLowerCase() === ServerPricingCatalogProducts.ServerProfessional.toLowerCase()\n );\n const enterpriseCatalog = catalog?.products.find(\n (item) => item.name.toLowerCase() === ServerPricingCatalogProducts.ServerEnterprise.toLowerCase()\n );\n const useZuoraCheckout = useFeatureFlag(\"ZuoraCheckout\");\n\n // ensure valid channel\n const validChannels: string[] = useZuoraCheckout\n ? [ServerLicensingChannelTypesKeys.Trial]\n : [ServerLicensingChannelTypesKeys.Stripe, ServerLicensingChannelTypesKeys.Trial];\n if (!serverLicense || !validChannels.includes(serverLicense.licensingChannel.channelType))\n return (\n \n Please email{\" \"}\n \n sales@octopus.com\n {\" \"}\n to make changes to your license\n \n );\n\n return (\n <>\n \n \n \n \n \n \n \n \n \n \"server\"\n \n Keep using Octopus on your own setup\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nconst FrequentlyAskedQuestions = () => {\n return (\n \n Frequently asked questions\n Feature questions\n \n \n \n \n );\n};\n","var _rect, _rect2, _circle, _circle2, _defs;\nfunction _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\nimport * as React from \"react\";\nvar SvgIconServer = function SvgIconServer(props) {\n return /*#__PURE__*/React.createElement(\"svg\", _extends({\n width: 57,\n height: 17,\n fill: \"none\",\n xmlns: \"http://www.w3.org/2000/svg\"\n }, props), _rect || (_rect = /*#__PURE__*/React.createElement(\"rect\", {\n x: 0.086,\n y: 0.695,\n width: 55.981,\n height: 16.305,\n rx: 2.296,\n fill: \"url(#icon_server_svg__a)\"\n })), _rect2 || (_rect2 = /*#__PURE__*/React.createElement(\"rect\", {\n x: 4.269,\n y: 6.484,\n width: 32.067,\n height: 5.577,\n rx: 2.788,\n fill: \"#09141C\"\n })), _circle || (_circle = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 41.391,\n cy: 8.848,\n r: 2.718,\n fill: \"#09141B\"\n })), _circle2 || (_circle2 = /*#__PURE__*/React.createElement(\"circle\", {\n cx: 48.458,\n cy: 8.848,\n r: 2.718,\n fill: \"#09141B\"\n })), _defs || (_defs = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"linearGradient\", {\n id: \"icon_server_svg__a\",\n x1: 55.955,\n y1: 0.695,\n x2: 47.217,\n y2: 30.695,\n gradientUnits: \"userSpaceOnUse\"\n }, /*#__PURE__*/React.createElement(\"stop\", {\n stopColor: \"#1FF2FF\"\n }), /*#__PURE__*/React.createElement(\"stop\", {\n offset: 1,\n stopColor: \"#0D80D8\"\n })))));\n};\nexport { SvgIconServer as ReactComponent };\nexport default \"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNTciIGhlaWdodD0iMTciIHZpZXdCb3g9IjAgMCA1NyAxNyIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGcgaWQ9Ikljb246IHNlcnZlciI+CjxyZWN0IGlkPSJSZWN0YW5nbGUgNTU4IiB4PSIwLjA4NTkzNzUiIHk9IjAuNjk0ODI0IiB3aWR0aD0iNTUuOTgwOCIgaGVpZ2h0PSIxNi4zMDUxIiByeD0iMi4yOTYxMSIgZmlsbD0idXJsKCNwYWludDBfbGluZWFyXzIyNjFfNjk3KSIvPgo8cmVjdCBpZD0iUmVjdGFuZ2xlIDU1OSIgeD0iNC4yNjg1NSIgeT0iNi40ODM4OSIgd2lkdGg9IjMyLjA2NjciIGhlaWdodD0iNS41NzY4MSIgcng9IjIuNzg4NDEiIGZpbGw9IiMwOTE0MUMiLz4KPGNpcmNsZSBpZD0iRWxsaXBzZSAxMzQiIGN4PSI0MS4zOTEzIiBjeT0iOC44NDc4OSIgcj0iMi43MTc1MSIgZmlsbD0iIzA5MTQxQiIvPgo8Y2lyY2xlIGlkPSJFbGxpcHNlIDEzNSIgY3g9IjQ4LjQ1NzciIGN5PSI4Ljg0Nzg5IiByPSIyLjcxNzUxIiBmaWxsPSIjMDkxNDFCIi8+CjwvZz4KPGRlZnM+CjxsaW5lYXJHcmFkaWVudCBpZD0icGFpbnQwX2xpbmVhcl8yMjYxXzY5NyIgeDE9IjU1Ljk1NTEiIHkxPSIwLjY5NDgyNCIgeDI9IjQ3LjIxNzIiIHkyPSIzMC42OTQ5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IiMxRkYyRkYiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMEQ4MEQ4Ii8+CjwvbGluZWFyR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+Cg==\";","import React from \"react\";\nimport { ListItem } from \"@mui/material\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport { ExternalUriMap } from \"utils/ExternalUriMap\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport { inviteUserToServerLicense } from \"client/api/ServerLicenseApi\";\nimport type { InviteUserDialogProps } from \"components/Dialogs/InviteUserDialog\";\nimport { InviteUserDialog } from \"components/Dialogs/InviteUserDialog\";\nimport { ExternalLink } from \"components/ExternalLink/ExternalLink\";\nimport { UserGrantDescriptionList } from \"components/UserGrantDescription/UserGrantDescriptionList\";\nimport { UserGrantDescriptionTitle } from \"components/UserGrantDescription/UserGrantDescriptionTitle\";\n\ntype InviteUserToServerLicenseProps = Pick & {\n serverLicense: ServerLicenseDto;\n onSubmitComplete: () => Promise | void;\n};\n\nconst grantValues = [\n { label: \"Server License Viewer\", value: \"User\" },\n {\n label: \"Server License Owner\",\n value: \"Admin\",\n },\n] as const;\n\nconst GrantsInfo = () => (\n <>\n \n \n View this server license\n \n \n \n View this server license\n Manage billing of this server license\n Manage access control for this server license\n \n \n);\n\nexport function InviteUserToServerLicense(props: InviteUserToServerLicenseProps) {\n const { show, onCancel, onSubmitComplete, serverLicense } = props;\n const { userInfo } = useUserContext();\n\n const onSubmit: InviteUserDialogProps[\"onSubmit\"] = async (email, firstName, lastName, grant) => {\n await inviteUserToServerLicense(\n serverLicense?.id,\n email,\n `${firstName} ${lastName}`.trim(),\n `${userInfo?.firstName} ${userInfo?.lastName}`.trim(),\n grant\n );\n onSubmitComplete();\n };\n\n const serverName = serverLicense.friendlyName ?? \"server\";\n\n return (\n \n Visit the docs to learn\n about inviting users.\n

    \n }\n onCancel={onCancel}\n onSubmit={onSubmit}\n grantsInfo={}\n grantValues={grantValues}\n />\n );\n}\n","import React, { useMemo, useState } from \"react\";\nimport { Button, Grid, TableContainer, Typography } from \"@mui/material\";\nimport type { AxiosError } from \"axios\";\nimport { useEntity } from \"contexts/EntityProvider/EntityProvider\";\nimport { useUserContext } from \"contexts/UserProvider/UserProvider\";\nimport useAsyncRequest from \"hooks/useAsyncRequest\";\nimport { LoadablePage } from \"shared/LoadablePage\";\nimport type { ServerLicenseDto } from \"client/api/ServerLicenseApi\";\nimport type { BaseUserGrantsApi, ServerLicenseOrSubscriptionGroupUserGrantDto } from \"client/api/UserGrantApi\";\nimport { UserGrantsTable } from \"components/UserGrantTable/UserGrantsTable\";\nimport { UserGrantsInviteTable } from \"components/UserGrantsInviteTable/UserGrantsInviteTable\";\nimport { ErrorAlert } from \"components/alert/ErrorAlert\";\nimport { PolicyAuthorized } from \"components/authorization/PolicyAuthorized\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { NotFoundPage } from \"pages/NotFoundPage\";\nimport { ServerLicenseHeader } from \"areas/serverLicenses/components/ServerLicenseHeader\";\nimport { InviteUserToServerLicense } from \"../components/InviteUserToServerLicense\";\n\nexport type BaseUserGrantsViewProps = {\n userGrantsApi: BaseUserGrantsApi;\n};\n\ntype UserGrantsDetailViewProps =\n BaseUserGrantsViewProps;\n\nexport function ServerLicenseUsers(\n props: UserGrantsDetailViewProps\n) {\n const { entity: serverLicense } = useEntity();\n const { hasPermissionForAsset } = useUserContext();\n\n const { userGrantsApi } = props;\n\n const getUserGrantsRequest = useMemo(() => (id: string) => userGrantsApi.listUserGrants(id), [userGrantsApi]);\n const getInvitesRequest = useMemo(() => (id: string) => userGrantsApi.getInvites(id), [userGrantsApi]);\n\n const canDeleteGrant = (userGrant: TUserGrant) => {\n return (\n hasPermissionForAsset(\n RbacPermissions.ServerLicense.ManageAccessControl,\n serverLicense?.id,\n serverLicense?.subscriptionGroup?.id\n ) &&\n (userGrant.grantType === \"ServerLicenseUserGrant\" || userGrant.grantType === \"ServerLicenseUserGrantProxy\")\n );\n };\n\n const canRevokeInvite = () => {\n return hasPermissionForAsset(\n RbacPermissions.ServerLicense.ManageAccessControl,\n serverLicense?.id,\n serverLicense?.subscriptionGroup?.id\n );\n };\n\n const {\n data: userGrantsData,\n loading: loadingUserGrants,\n error: userGrantsError,\n refresh: refreshUserGrants,\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n } = useAsyncRequest(getUserGrantsRequest, serverLicense?.id as string);\n const {\n data: invitesData,\n loading: loadingInvites,\n error: invitesError,\n refresh: refreshInvites,\n // eslint-disable-next-line @typescript-eslint/consistent-type-assertions\n } = useAsyncRequest(getInvitesRequest, serverLicense?.id as string);\n\n const loading = loadingUserGrants || loadingInvites;\n const refreshAll = async () => {\n refreshInvites();\n refreshUserGrants();\n };\n\n const [showUserDialog, setShowUserDialog] = useState(false);\n\n const [deleteError, setDeleteError] = useState();\n\n const actions = [];\n actions.push(\n \n setShowUserDialog(true)}\n sx={{ textTransform: \"none\" }}\n disableElevation\n >\n Invite User\n \n \n );\n\n if (!serverLicense) {\n return ;\n }\n\n return (\n <>\n \n {deleteError && }\n \n \n \n {invitesData?.entities && invitesData?.entities.length > 0 && (\n \n Invitations\n \n \n \n \n )}\n \n \n \n \n \n \n \n {\n await refreshAll();\n setShowUserDialog(false);\n }}\n onCancel={() => setShowUserDialog(false)}\n />\n \n );\n}\n","import React from \"react\";\nimport { Route, Routes as _Routes } from \"react-router-dom\";\nimport { RoutesMap } from \"RoutesMap\";\nimport { AuthenticatedLayout } from \"shared/layouts/AuthenticatedLayout\";\nimport { subscriptionGroupUserGrantsApi } from \"client/api/UserGrantApi\";\nimport { StripTrailingSlash } from \"components/StripTrailingSlash\";\nimport { InviteAcceptPage } from \"pages/InviteAcceptPage\";\nimport { LoadViaSerial } from \"pages/LoadViaSerial\";\nimport { NotFoundPage } from \"pages/NotFoundPage\";\nimport { StripePaymentCompletingPage } from \"pages/StripePaymentCompletingPage\";\nimport { StripeSetupRenewalCompletingPage } from \"pages/StripeSetupRenewalCompletingPage\";\nimport { StripeUpgradeCompletingPage } from \"pages/StripeUpgradeCompletingPage\";\nimport { TrialFulfillmentPollingPage } from \"pages/TrialFulfillmentPollingPage\";\nimport { ZuoraCallbackPage } from \"pages/ZuoraCallbackPage\";\nimport { cloudSubscriptionRoutes } from \"areas/cloudSubscriptions/CloudSubscriptionRoutes\";\nimport { Dashboard } from \"areas/dashboard/Dashboard\";\nimport { purchasingRoutes } from \"areas/purchasing/PurchasingRoutes\";\nimport { serverLicenseRoutes } from \"areas/serverLicenses/ServerLicensesRoutes\";\n\nexport function Routes() {\n return (\n <>\n \n <_Routes>\n {/* This must go before the root route so that this is directly matched */}\n } />\n } />\n } />\n } />\n } />\n } />\n }>\n } />\n {purchasingRoutes()}\n {cloudSubscriptionRoutes()}\n {serverLicenseRoutes()}\n }\n />\n } />\n } />\n \n \n \n );\n}\n","import React from \"react\";\nimport { Route } from \"react-router-dom\";\nimport { PurchasingRoutesMap } from \"areas/purchasing/PurchasingRoutesMap\";\nimport { Checkout } from \"./Checkout\";\n\nexport const purchasingRoutes = () => {\n return (\n <>\n } />\n \n );\n};\n","import React from \"react\";\nimport { Route } from \"react-router-dom\";\nimport { serverLicenseUserGrantsApi } from \"client/api/UserGrantApi\";\nimport { ProtectedRoute } from \"components/authorization/ProtectedRoute\";\nimport { RbacPermissions } from \"components/authorization/RbacPermissions\";\nimport { InviteAcceptPage } from \"pages/InviteAcceptPage\";\nimport { ServerLicenseLayout } from \"areas/serverLicenses/ServerLicenseLayout\";\nimport { ServerLicensesRoutesMap } from \"areas/serverLicenses/ServerLicensesRoutesMap\";\nimport { ServerLicenseFinance } from \"areas/serverLicenses/detail/ServerLicenseFinance\";\nimport { ServerLicenseLoadViaSerial } from \"areas/serverLicenses/detail/ServerLicenseLoadViaSerial\";\nimport { ServerLicenseOverview } from \"areas/serverLicenses/detail/ServerLicenseOverview\";\nimport { ServerLicenseUpgrade } from \"areas/serverLicenses/detail/ServerLicenseUpgrade\";\nimport { ServerLicenseUsers } from \"./detail/ServerLicenseUsers\";\n\nexport const serverLicenseRoutes = () => {\n return (\n \n }>\n } />\n } />\n }\n />\n }\n />\n }\n />\n }\n />\n }\n />\n \n } />\n }\n />\n \n );\n};\n","import * as React from \"react\";\nimport type { AppProps } from \"App\";\nimport { App } from \"App\";\nimport { FrontendMonitoring } from \"FrontendMonitoring\";\nimport { Routes } from \"Routes\";\nimport Environment from \"environment\";\nimport \"global.less\";\nimport Cookies from \"js-cookie\";\nimport type { Root } from \"react-dom/client\";\nimport { createRoot } from \"react-dom/client\";\nimport { envConfig } from \"utils/envConfig\";\n\ndeclare let module: __WebpackModuleApi.Module;\n\ntype AppComponent = React.ComponentType;\n\nconst frontendMonitoring = new FrontendMonitoring();\n\nfunction render(root: Root, Component: AppComponent) {\n root.render(} frontendMonitoring={frontendMonitoring} />);\n}\n\n// clear the csrf cookie on initial load\nCookies.remove(Environment.csrfCookieName, { domain: envConfig.CsrfCookieDomain });\n\nconst container = document.getElementById(\"app\");\nif (!container) {\n throw new Error(\"App container missing\");\n}\nconst root = createRoot(container);\nrender(root, App);\n\n//Do NOT move to a separate file as this wil break hot reloading\nif (module.hot) {\n module.hot.accept(\"./App\", () => {\n try {\n const NextApp = require(\"./App\").App;\n render(root, NextApp);\n } catch (err) {\n console.error(\"Error updating app\", err);\n }\n });\n}\n","import \"config/LuxonConfig\";\nimport React from \"react\";\nimport { BrowserRouter } from \"react-router-dom\";\nimport { createTheme, GlobalStyles, ThemeProvider } from \"@mui/material\";\nimport type { FrontendMonitoring } from \"FrontendMonitoring\";\nimport { ConfigurationProvider } from \"contexts/ConfigurationProvider/ConfigurationProvider\";\nimport { FrontendMonitoringProvider } from \"contexts/FrontendMonitoringProvider/FrontendMonitoringProvider\";\nimport { AlertProvider } from \"components/AlertProvider/AlertProvider\";\nimport { GlobalThemeApplier } from \"components/Theme/GlobalThemeApplier\";\n\nexport interface AppProps {\n routes: React.ReactElement;\n frontendMonitoring: FrontendMonitoring;\n}\n\nexport function App({ routes, frontendMonitoring }: AppProps) {\n // TODO: When we've implemented darkmode, pass the palette to GlobalThemeApplier's themeName prop\n // const palette = useThemePaletteType();\n // TODO: remove ThemeFromLocalStorage when we have a proper theme switcher\n\n const muiTheme = createTheme({\n typography: {\n fontFamily:\n 'BlinkMacSystemFont, -apple-system, \"Segoe UI\", \"Oxygen Sans\", Ubuntu, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol',\n },\n });\n\n return (\n
    \n \n {/**/}\n \n {/* Temporarily force light mode on, as we not yet implemented dark mode */}\n \n \n \n \n {routes}\n \n \n \n {/**/}\n \n
    \n );\n}\n","module.exports = __webpack_public_path__ + \"error.bd85cffdf23ddf9397a2dac70a02b206.hashedasset.png\";"],"names":["module","exports","defaultZone","utc","zone","envConfig","WebAppUrl","ApiUrl","AppVersion","Environment","IsProdEnvironment","localeCompare","OctopusCloudDomain","OctopusComDomain","CsrfCookieDomain","AppInsightsConnectionString","ClientIpAddress","CLIENT_IP_ADDRESS","undefined","isInDevelopmentMode","ApiThrottleDelayMs","API_THROTTLE_DELAY_MS","parseInt","clientIpAddress","csrfCookieName","func","params","data","setData","useState","error","setError","loading","setLoading","shouldRefresh","setShouldRefresh","throttled","useRef","throttle","isCleaningUp","then","result","catch","ex","finally","current","refresh","CloudSubscriptionOutageWindowFrequency","cloudSubscriptionOutageWindowFrequencyDescriptions","Daily","MondayOfEachWeek","TuesdayOfEachWeek","WednesdayOfEachWeek","ThursdayOfEachWeek","FridayOfEachWeek","SundayOfEachWeek","FirstMondayOfEachMonth","SecondMondayOfEachMonth","ThirdMondayOfEachMonth","CloudSubscriptionRenewalPeriod","Salesforce","Stripe","LegacyBraintree","ImportedTrial","Trial","Zuora","Infrastructure","CloudLicensingChannelTypesArr","Object","values","AssumedInstanceProvisioningState","BASE_URL","getCloudSubscriptions","async","query","get","getCloudSubscriptionById","cloudSubscriptionId","getCloudSubscriptionBySerial","serialId","inviteUserToCloudSubscription","email","fullName","senderName","team","post","updateCloudSubscriptionOutageWindow","outageWindowStartUtc","outageWindowEndUtc","put","toUTC","toLocaleString","TIME_24_WITH_SECONDS","changeCloudSubscriptionDnsPrefix","dnsPrefix","cancelCloudSubscription","cloudSubscription","delete","id","updateCustomerSpecifiedMachineLimit","machineLimit","changeStripeProduct","targetPlan","checkCloudSubscriptionFulfilled","ServerLicensingChannelTypesKeys","Temporary","ServerLicensingChannelTypesArr","isPaymentOverdue","serverLicense","licensingChannel","channelType","status","getServerLicenses","getServerLicenseById","serverLicenseId","getServerLicenseBySerial","getLicenseXmlById","licenseId","checkServerLicenseFulfilled","cancelServerLicense","inviteUserToServerLicense","navigateToExternalSite","url","window","location","assign","navigateToStripeCustomerPortal","productType","productId","newTab","customerPortalSession","returnUrl","createCloudSubscriptionCustomerPortalUrl","href","createServerLicenseCustomerPortalUrl","open","focus","openTabToExternalSite","defaultAxiosConfig","baseURL","paramsSerializer","allowDots","isRedirecting","unauthenticatedAxiosClient","withCredentials","interceptors","request","use","req","method","includes","toLowerCase","Promise","resolve","reject","getCsrfToken","response","pathname","search","res","MiniProfiler","header","headers","ids","JSON","parse","fetchResults","getConfiguration","getFeatureFlags","ConfigurationProviderContext","createContext","configuration","isFeatureFlagEnabled","flag","useConfiguration","useContext","ConfigurationProvider","props","children","refreshConfiguration","featureFlags","refreshFeatureFlags","Provider","value","useFeatureFlag","FrontendMonitoringContext","FrontendMonitoringProvider","frontendMonitoring","useFrontendMonitoring","context","Error","Alert","ref","elevation","variant","AlertProviderContext","sendNewAlert","message","severity","useAlerts","AlertSeverity","AlertProvider","alerts","setAlerts","messageInfo","setMessageInfo","setOpen","useEffect","length","firstItem","prev","slice","handleClose","event","reason","Info","key","Date","getTime","Snackbar","anchorOrigin","vertical","horizontal","autoHideDuration","onClose","TransitionProps","onExited","sx","width","GlobalThemeApplier","themeName","theme","lightTheme","darkTheme","serializedCss","entries","map","cssVariableName","join","styleElement","document","querySelector","globalStyleNodeId","innerHTML","createElement","setAttribute","head","appendChild","SeverityLevel","RoutesMap","root","inviteAccept","invite","loadSerial","upgrade","serial","completingPayment","completingUpgrade","completingSetup","completingTrialFulfillment","zuoraCallbackPage","notFound","fallback","getUserInfo","UserContext","hasPermissionForAsset","expectedPermission","assetId","subscriptionGroupId","useUserContext","UserProvider","userInfo","identifyUser","permissions","hasExpectedSubscriptionGroupPermission","hasExpectedAssetPermission","Grid","item","xs","display","flexDirection","alignItems","paddingTop","CircularProgress","octopusComRoot","octopusComPricingRootPath","octopusComPricingFaqPath","octopusComDocsRootPath","octopusComDocsInstallationPath","octopusComDocsProjectsPath","octopusComDocsAdministrationPath","octopusComDocsLicenseManagementPath","octopusComDocsGettingStartedPath","octopusComDocsBestPractices","octopusComDocsCloudPath","octopusComDownloadsRootPath","githubHelmChartRootPath","githubHelmChartOctopusRootPath","octopusComRoadmapRootPath","octopusComPricingFeaturesPath","octopusComPricingFaqCloudPath","octopusComPricingFaqCloudPricingPath","octopusComPricingFaqMachinesPath","octopusComDocsLinuxInstallationPath","octopusComDocsDeploymentProcessPath","octopusComDocsLicenseManagementCommunityPath","octopusComDocsManagingOctopusSubscriptionsPath","octopusComDocsFirstDeploymentPath","octopusComDocsFirstKubernetesDeploymentPath","octopusComDocsInstallationGuidelinesPath","octopusComDocsRetentionPolicyPath","octopusComDownloadsServerPath","octopusComSupportRootPath","octopusComSupportFilesRootPath","octopusComAcceptableUsagePolicyPath","octopusComCustomerAgreementPath","octopusComControlCenterV1RootPath","octopusComDocsInfrastructureDeploymentTargetsPath","octopusComDocsCloudInvitingUsersPath","octopusComProfilePath","octopusComSignOutPath","azureMarketPlaceOctopusDeployOverviewPath","githubHelmChartOctopusIngressDocsPath","octopusCommunitySlackInvitePath","octopusComDocsAccessControlPath","octopusComContactUsPath","octopusComRoadmapBluePrintsAndGuardRailsPath","Wrapper","styled","alertMessage","onClick","navigator","clipboard","writeText","onCopied","Success","Help","anchorEl","setAnchorEl","Boolean","IconButton","backgroundColor","color","ml","w","h","currentTarget","QuestionMark","height","Popover","transformOrigin","Box","p","pb","fontWeight","pl","pr","fontSize","MenuList","MenuItem","component","target","ListItemIcon","Article","A","ListItemText","OpenInNew","Mail","Support","pt","Tooltip","title","Button","size","startIcon","ContentCopy","StyledMenu","Menu","borderRadius","marginTop","spacing","minWidth","palette","mode","grey","padding","text","secondary","marginRight","primary","main","action","selectedOpacity","UserMenuButton","ButtonBase","typography","body1","fontFamily","outline","UserInfo","firstName","disableRipple","Stack","direction","Avatar","src","profileImage","cursor","charAt","paddingLeft","lastName","lineHeight","KeyboardArrowDown","MenuListProps","disableAutoFocusItem","themeTokens","link","hover","pressed","CloudSubscriptionsRoutesMap","detail","finance","users","loadBySerial","ControlCenterHeader","justifyContent","paddingBottom","paddingRight","className","underline","to","default","marginLeft","EnvironmentBanner","callout","background","attention","textAlign","ClassicLayout","Container","marginBottom","TwentyFiveRedesignLayout","Layout","AuthenticatedLayout","useMiniProfiler","isProductionEnvironment","rootUrl","BaseUserGrantsApi","constructor","assetUrl","listUserGrants","this","buildUrl","deleteUserGrant","userGrantId","acceptUserGrantInvite","encodedInvite","getInvites","buildInvitesUrl","revokeInvite","inviteId","cloudSubscriptionUserGrantsApi","serverLicenseUserGrantsApi","subscriptionGroupUserGrantsApi","StripTrailingSlash","rest","match","replace","FormattedEmail","EnhanceMessage","emailAddresses","emailRegex","RegExp","parts","split","part","index","ErrorAlert","errorContent","errorResponse","content","isKnownError","isRequestError","errors","getAlertContent","AlertTitle","gutterBottom","keys","errKey","i","Fragment","err","j","AlertWithShadow","boxShadow","shadows","createNavigationAlert","state","navigationAlert","NavigationAlert","ServerLicensesRoutesMap","InviteAcceptPage","userGrantsApi","getRequest","useMemo","navigate","cloudSubscriptionName","userGrantDto","isSubscriptionGroupUserGrantDto","subscriptionGroupName","serverLicenseName","StyledLink","LoadablePage","shouldShowLoading","setShouldShowLoading","timer","setTimeout","clearTimeout","mt","mb","getBySerial","type","SectionHeadingType","sectionHeader","headingType","Heading1","Heading2","Heading3","renderSectionHeading","bodyClassName","Navigation","navItem","label","path","exact","show","navGroup","alwaysOpen","groupLabel","defaultChildPath","isGroup","NavItemComponent","group","NavLinkGroup","renderNavLink","caseSensitive","end","isActive","anyDescendantsMatch","getDescendantLinks","some","l","g","flatten","c","shouldDisplay","name","resourceType","preNavbarComponent","preNavbarComponentVisible","navLinksVisible","navLinks","filter","x","PaperLayout","disableGutters","Paper","square","BackToDashboard","ChevronLeft","letterSpacing","ImageContainer","LoadViaSerial","redirectPath","searchParams","alt","margin","align","alignSelf","maxWidth","NotFoundPage","container","getCheckout","checkoutId","getPurchaseIntent","intentId","isFirstCheckRequest","UPGRADED_PRODUCTS_KEY","UpgradeSuccessBanner","financePageRoute","upgradedProducts","setUpgradedProducts","useLocalStorage","removeFromLocalStorage","updated","upgradeDate","now","diff","fromISO","as","fromObject","days","productLong","productShort","position","top","right","Close","mr","lg","CheckCircle","verticalAlign","style","PollingPage","inProgressTitle","errorTitle","errorMessage","svgImage","svgImageAlt","defaultDelays","initial","subsequent","changeToError","long","pollDelay","hasStartedPolling","setHasStartedPolling","hasSentFirstRequest","showError","setShowError","pollTimerRef","pollingCallback","useCallback","inProgressMessageBlock","md","errorMessageBlock","ErrorOutline","rel","minHeight","overflow","zIndex","StripePaymentCompletingPage","markProductAsUpgraded","toISO","completed","destination","RENEWED_PRODUCTS_KEY","RenewSuccessBanner","nextRenewalDate","renewedProducts","setRenewedProducts","daysTillRenewal","diffNow","Math","ceil","daysTillRenewalText","renewDate","date","StripeSetupRenewalCompletingPage","markProductAsRenewed","UpgradePlan","IsStripeSubscriptionLicensingChannel","isCloudSubscriptionLicenseChannelType","licensingChannelType","UPGRADED_STRIPE_PRODUCTS_KEY","StripeUpgradeSuccessAlert","upgradedStripeProducts","setUpgradedStripeProducts","upgradeData","upgradedAt","green","icon","productName","StripeUpgradeCompletingPage","expectedPriceCode","_","priceCode","usePolling","callback","enabled","warmedUp","setWarmedUp","t","asyncCallback","getHostname","TrialFulfillmentErrorCode","getTrialFulfilled","trialIntentId","TrialFulfillmentContent","TrialFulfillmentError","TrialFulfillmentPending","gap","GreenButton","TrialFulfillmentSuccess","endIcon","ChevronRight","TrialFulfillmentTimeout","TrialFulfillmentPollingPage","timeoutMs","setHref","setTitle","initialTitle","usePageTitle","ActivePlatformLimitExceeded","HistoricalLimitExceeded","fulfilled","serverLicenses","cloudSubscriptions","backgroundImage","backgroundRepeat","backgroundSize","backgroundPosition","PaymentEventTypes","PaymentSuccessful","PaymentFailure","ResponseFrom","SubmitPage","getZuoraCallbackParams","baseParams","success","responseFrom","rawGatewayInfo","signature","token","tenantId","pageId","timestamp","fieldPassthrough1","fieldPassthrough2","fieldPassthrough3","fieldPassthrough4","fieldPassthrough5","refId","errorField","errorCode","BodyStyle","ZuoraCallbackPage","callbackParams","errorDetails","CustomEvent","toString","parent","dispatchEvent","EntityProviderContext","entity","update","useEntity","EntityProvider","stateValue","setStateValue","SecondaryStyledButton","CopyToClipboardButton","copyToClipboard","RbacPermissions","CloudSubscription","AuthenticateToInstanceAsUser","AuthenticateToInstanceAsAdmin","ViewConfiguration","ManageConfiguration","ViewBilling","ManageBilling","ViewAccessControl","ManageAccessControl","SubscriptionGroup","Rename","Delete","ServerLicense","ViewLicenseKeyXml","CloudSubscriptionStatus","IsSubscribedOrLapsed","Subscribed","Lapsed","getAssumedProvisioningState","isInstanceProvisioned","Succeeded","createdDate","Provisioning","Failed","CloudSubscriptionStatusIcon","assumedProvisioningState","Cloud","tooltipText","cloudSubscriptionStatus","danger","Cancelled","disabled","Terminated","None","warning","noOp","createContactRequest","contactSalesReasons","BillingOptions","ServerLicenseRenewal","Enterprise","Professional","Starter","Community","UsageEstimation","VolumePricing","ModifySubscription","Other","ContactSalesReasonLabels","enterprise","professional","starter","community","other","LoadingSubmitButton","isLoading","isDisabled","disableIcon","formName","LoadingButton","form","textTransform","disableElevation","SubmittableForm","submitAction","defaultValues","readOnly","submitLabel","onCancel","cancelLabel","alwaysEnableSubmit","noValidate","setIsLoading","apiError","setApiError","formController","onSubmit","handleSubmit","e","formState","isValid","ContactSalesDialog","defaults","source","reasons","reasonListItems","obj","k","indexOf","Dialog","DialogTitle","DialogContent","DialogContentText","fields","projectQuantity","licenseSerial","register","TextField","fullWidth","helperText","required","phone","rules","labelId","selectItems","multiline","minRows","ContactSalesDialogContext","showDialog","useContactSalesDialog","ContactSalesDialogProvider","submittedData","setSubmittedData","setDefaults","UserCanAccessCloudInstance","subscription","isSubscriptionActive","isInstanceUser","subscriptionGroup","isInstanceAdmin","canAccessCloudInstance","withoutAccess","ContactSalesSuccessAlert","getReasonText","CloudSubscriptionHeader","pageName","actions","hostname","friendlyName","m","ForbiddenPage","trackEvent","urlPath","permission","showCopyLinkButton","Default","getPermissionError","ProtectedRoute","element","getAssetIds","getNavLinks","canViewAccessControl","canViewBilling","canViewConfiguration","isActiveCloudSubscription","push","CloudSubscriptionLayout","isUpgradePage","canUpgrade","canManageBilling","expiryDate","canUpgradeCloudSubscription","CloudStaticIpAddressPool","WestUS2","WestEurope","AustraliaEast","formatCloudRegionForDisplay","cloudRegion","RenameDialog","submitRename","newValue","setNewValue","FormControl","flexGrow","defaultValue","onChange","DialogActions","ExternalLink","left","LinkButton","outlineColor","PolicyAuthorized","ActiveCloudSubscriptionOnly","dnsPrefixOptions","CloudSubscriptionNewDnsPrefixDialog","onConfirm","rowSpacing","args","InputProps","endAdornment","InputAdornment","isDurationGreaterThan","startTime","endTime","minDuration","plus","nameof","key1","key2","FormTimePicker","setValue","control","trigger","time","setTime","localTimeZoneName","locale","defaultLocale","LocalizationProvider","dateAdapter","adapterLocale","shouldUnregister","render","field","fieldState","TimePicker","renderInput","TIME_SIMPLE","invalid","baseTimeOptions","validate","validDate","v","CloudSubscriptionOutageWindowDialog","inputs","outageWindowStart","outageWindowEnd","maintenanceWindow","toLocal","watch","currentOutageWindowStart","currentOutageWindowEnd","deps","lessThanEndTime","hours","minute","greaterThanStartTime","minutes","PopoverContext","closePopover","button","placement","absolutePosition","startOpened","onOpen","forceHide","arrowRef","setArrowRef","iconContainerRef","toggleOpen","isOpen","handleClick","offsetValue","getOffsetValue","ClickAwayListener","onClickAway","role","tabIndex","onKeyUp","keyCode","preventDefault","onKeyDown","onMouseEnter","blur","onMouseLeave","Popper","modifiers","options","offset","altBoundary","rootBoundary","transition","Fade","timeout","FileUsageWarningContent","alertLevel","heading","getHeading","HowTo","Recommendations","List","listStyleType","BoldLink","FileUsageWarning","orange","red","PopoverHelp","shouldForwardProp","prop","iconBg","ResourceUsageCopy","limitInGb","usageInGb","formatUnits","amountInGb","warningPercentage","dangerPercentage","getAlertLevel","percentageUsed","FileUsageLineItem","Divider","borderTop","borderColor","border","ItemLine","hideDivider","sm","CodeText","dark","frequency","DailyOutageWindowContent","start","hideRelativeIndicator","mx","tertiary","NonDailyOutageWindowContent","labelFormat","localeOptions","outputCalendar","defaultOutputCalendar","numberingSystem","defaultNumberingSystem","outageWindowFrequency","dayOfWeek","weekOfMonth","getFrequency","outageWindowTimeZone","timeZone","mapMaintenanceWindowDtoToRequest","toFormat","CloudSubscriptionConfiguration","cloudSubscriptionEntity","showOutageWindowDialog","setShowOutageWindowDialog","showNewDnsChangeDialog","setShowNewDnsChangeDialog","showRenameDisplayNameDialog","setShowRenameDisplayNameDialog","canEditOutageWindow","closeNewDnsPrefixDialog","storageLimitInGb","fileUsageInGb","cloudRegionId","paragraph","updateCloudSubscriptionFriendlyName","GridDivider","borderBottom","LicensedEntitlementsView","license","EntitlementRow","limitText","limit","isUnlimited","toFixed","TableRow","TableCell","Table","TableBody","projectLimit","tenantLimit","EntitlementView","InfrastructureLicensingChannelView","channel","autoRenewalText","autoRenew","renewalPeriod","ChangePlanFinanceLine","OrdersFinanceLine","isStripeSubscriptionLicensingChannel","isCloudSubscriptionProps","LegacyBraintreeLicensingChannelView","SalesforceContractedLicensingChannelView","RouterLink","IsServerLicenseStripeSubscriptionLicensingChannel","isServerLicenseTrialLicensingChannel","isServerLicenseChannelType","hasPriceCode","isCloudTrial","isServerTrial","isTrial","cancelCloudTrial","trialId","CloudSubscriptionCancelPlanDialog","productTypeName","isCancelling","setIsCancelling","handleOnClose","force","autoFocus","changedCloudSubscription","console","loadingIndicator","CloudSubscriptionCancelPlanDialogText","endDate","subscriptionVerb","ChangeCustomerSpecifiedMachineLimitDialog","isUpdating","setIsUpdating","hasSpecifiedLimit","setHasSpecifiedLimit","hasCustomerSpecifiedMachineLimit","customerSpecifiedMachineLimit","FormLabel","RadioGroup","FormControlLabel","Radio","inputProps","min","CustomerSpecifiedMachineLimitLine","editable","showChangeLimitDialog","setShowChangeLimitDialog","buttonPrefix","pluralSuffix","ResubscribeOrManageSubscription","canResubscribe","StripeSubscriptionLicensingChannelView","showCancelDialog","setShowCancelDialog","isCommunity","isSubscriptionPtm","Cloud_Annually_Starter","Cloud_Annually_Professional","Cloud_Annually_Enterprise","val","stripeSubscriptionCancelled","isCancelledOrCancelling","cancelAtPeriodEnd","isCanceledNonPtm","showCustomStripeControls","planStatusPrefix","isTemporary","isServerTemporary","LicenseChannelChip","ChannelChipLabel","Chip","designSystemColors","blue","TrialLicensingChannelView","isFulfilled","ImportedTrialLicensingChannelView","ZuoraLicensingChannelView","LicensingChannelGridView","CloudSubscriptionFinance","CloudSubscriptionLoadViaSerial","ControlCenterV2MigrationBanner","onDismiss","htmlColor","MIGRATED_PRODUCTS_KEY","DetailOverviewBanner","freemium","migratedProducts","setMigratedProducts","renewedDate","migratedProduct","stripeUpgradeData","toISODate","showUpgradeBanner","showRenewBanner","showMigrationBanner","ShowMigrationBanner","showStripeUpgradeAlert","showBanner","minus","StyledCircularProgress","FulfillmentProgressChip","IconAndText","ListItem","primaryTypographyProps","secondaryTypographyProps","IconAndErrorText","PlanCard","expiryDateLabel","additionalProductDetails","isZuora","Card","CalendarMonth","PlanCardByLicensingChannel","defaultProductName","CloudSubscriptionStatusCard","isCancelled","flex","textDecoration","StripeCustomerPortalLinkButton","buttonIcon","remainingProps","buttonProps","isServerLicenseLinkProps","isCloudSubscriptionLinkProps","loadingPortal","setLoadingPortal","defaultButtonIcon","RenewalCard","isPastDue","iconAndText","Payments","BorderLinearProgress","LinearProgress","linearProgressClasses","colorPrimary","chip","filled","info","bar","getBarColor","FileUsageBar","WarningChip","alignContent","Warning","FileUsageWarningChip","InfoIcon","SvgIcon","viewBox","xmlns","d","ResourceUsageCard","Heading","flexWrap","CloudSubscriptionOverview","updatedLicense","hasStripeSubscription","canManageSubscriptionViaStripe","isBillingUser","showRenewalCard","getProductPricing","CloudPricingCatalogProducts","CloudStarter","CloudProfessional","CloudEnterprise","ServerPricingCatalogProducts","ServerStarter","ServerProfessional","ServerEnterprise","SectionTitle","fontWeightBold","AddOnCard","paper","AddOnCardHeader","AddOnCardIconWrapper","AddOnCardTitle","AddOnCardDesc","fontWeightRegular","AddOnCardPrice","AddOnCardPricePer","AddOnCardContactSalesHeading","AddOnCardBody","AddOnsCallToActionSection","AddOns","FaqGroupHeading","FaqTitle","StyledSummary","Content","StyledArrowIcon","StyledDetails","ArrowIcon","FaqItem","FaqBulletedList","FaqWhatIsAProject","FaqWhatIsATenant","FaqWhatIsAMachine","PlansChangedInfoBanner","PopoverCloseButton","enhancedChildren","child","el","isValidEl","existingClickHandler","PlanChip","PricingCardCurrentPlanChip","isCurrentPlan","FeatureListItemText","StyledMiddleDivider","StyledFullWidthDivider","FeatureListDivider","FeatureItemDivider","PricingCardFeatureListItem","feature","formatMoney","number","formatter","Intl","NumberFormat","currency","decPlaces","removeCurrency","formatToParts","format","includeTrailingZeros","placeholder","PricingCardPrice","price","pricePerLabel","priceIsMinimum","visibility","StyledSelect","Select","isStarter","PricingCardPriceSelector","catalog","selectedProjects","hasCatalog","prices","selectedPlan","find","totalPrice","PricingCardTitle","PurchasingRoutesMap","payment","ActionDialog","description","cancelText","confirmText","confirmColor","handleOnCancel","handleOnConfirm","ConfirmStripeUpgradeDialog","varyByTarget","billingInformationError","setBillingInformationError","BillingInformationAlert","getAllowedPlanChange","currentPlan","getUpgradeAction","enm","planChange","PricingCardAction","targetPlanName","showContactSalesDialog","showUpgradeDialog","setShowUpgradeDialog","useZuoraProfessionalCheckout","useZuoraCheckout","subscribeButton","contactSalesButton","CancelButton","PricingCardPriceCode","PlanName","planStyles","currentPlanStyles","EnterprisePricingCard","setSelectedProjects","upgradeAction","features","textUnderlineOffset","PlanTestId","disablePadding","list","listIndex","whiteSpace","Array","isArray","ProfessionalPricingCard","StarterPricingCard","GradientBackground","GradientBorder","UpgradeContainer","BackgroundContainer","BodyContent","WeHostText","InstanceNameText","PlanHeaderTitleHeading","PlanSectionHeader","PlanIconWrapper","BannerWrapper","PlanHeaderTitle","CloudSubscriptionUpgrade","starterCatalog","products","professionalCatalog","enterpriseCatalog","validChannels","FrequentlyAskedQuestions","UserGrantRow","userGrant","showDelete","onDeleteClicked","friendlyRoleName","grantType","Person","user","DeleteUser","getUserNameFormatted","UserGrantsTable","grants","grantsApi","canDeleteGrant","onDeleteError","userGrantToDelete","setUserGrantToDelete","sortedUserGrants","sort","a","b","buildSortKey","TableHead","onUserGrantDelete","UserGrantInviteRow","userGrantInvite","UserGrantsInviteTable","userGrantInvites","canRevokeInvite","userGrantInviteToRevoke","setUserGrantInviteToRevoke","onUserGrantInviteRevoke","bold","emailOptions","pattern","maxLength","minLength","firstNameOptions","notEmpty","trim","lastNameOptions","isGrantValueOption","InviteUserDialog","dialogTitle","grantLabel","grantsInfo","grantValues","defaultGrantValue","showGrantsInfo","setShowGrantsInfo","chosenValue","grant","Autocomplete","disableClearable","isOptionEqualToValue","option","getOptionLabel","ExpandLess","ExpandMore","Collapse","in","UserGrantDescriptionList","UserGrantDescriptionTitle","GrantsInfo","InviteUserToCloudSubscription","onSubmitComplete","CloudSubscriptionInactiveBanner","CloudSubscriptionUsers","getUserGrantsRequest","getInvitesRequest","userGrantsData","loadingUserGrants","userGrantsError","refreshUserGrants","invitesData","loadingInvites","invitesError","refreshInvites","showUserDialog","setShowUserDialog","deleteError","setDeleteError","entities","TableContainer","directUserGrants","refreshAll","getSubscriptionGroups","updateSubscriptionGroup","subscriptionGroupDto","deleteSubscriptionGroup","groupId","inviteUserToSubscriptionGroup","userRole","OldControlCenterBanner","CollapsibleList","expandIconSize","eyebrowTitle","initiallyOpen","leftActions","rightActions","overflowMenu","setShow","stopPropagation","defaultDateFormat","formatDateTimeAsLocaleDateString","dateFormat","DATE_SHORT","useLocalTime","includeZoneName","localTime","zoneName","CloudSubscriptionNextDate","prefix","getStatusText","CloudSubscriptionWarningChip","UpgradeButton","handleMouseOverButtons","handleMouseOutButtons","onMouseOver","onMouseOut","StyledListItem","isFulfilling","upgradeButtonRef","showRipple","setShowRipple","showArrow","setShowArrow","ListItemButton","Node","contains","ChevronRightSharp","ServerLicenseNextDate","displayText","Storage","ITEM_HEIGHT","Overflow","menuItem","policyAuthorizedMenuItem","requiredPolicy","OverflowMenu","items","hideWhenEmpty","authorizedMenuItems","it","MoreVert","PaperProps","maxHeight","onMenuItemClicked","DeleteSubscriptionGroupDialog","groupName","marginY","Header","SubscriptionHeader","InviteUserToSubscriptionGroup","AccessControlContent","hasDeletePermission","showInvite","setShowInvite","AccessControlDialog","SubscriptionsContainer","SubscriptionsListContainer","GroupedSubscriptions","serverSubscriptions","doNotAutoExpand","showRenameGroupDialog","setShowRenameGroupDialog","showAccessControl","setShowAccessControl","showDeleteDialog","setShowDeleteDialog","overflowMenuItems","deleteGroupItem","totalCount","LicenseHeader","trialTitle","trialType","trialLink","DashboardHeader","UngroupedSubscriptions","entitiesWithoutSubscriptionGroup","groupBySubscriptionGroup","groupBy","dto","sortByFriendlyName","subscriptionA","subscriptionB","sortById","sortByName","groupA","groupB","DashboardProducts","loadingCloudSubscriptions","cloudSubscriptionsError","cloudRefresh","loadingServerLicenses","serverLicensesError","serverRefresh","subscriptionGroups","loadingSubscriptionGroups","subscriptionGroupsError","subscriptionGroupsRefresh","groupedSubscriptions","groupedCloud","groupedServer","idsOfGroupsWithSubscriptions","groupEntitiesBySubscriptionGroups","emptyGroups","every","findEmptyGroups","borderTopLeftRadius","borderTopRightRadius","ClassicDashboard","TwentyFiveRedesignDashboard","Dashboard","DashboardView","ProductType","TaxRateType","checkoutContactSalesRequest","signal","MonitoredErrorBoundary","onError","trackException","exception","severityLevel","reactErrorInfo","RetryButton","ErrorMessageWithTryAgainButtonOrContactSales","retry","Replay","ErrorMessageTryAgainOrContactSupport","CustomErrorAlert","AsteriskIcon","ariaLabel","fillColor","fill","TextInput","Input","StyledInputAdornment","CheckoutTextInput","disableUnderline","ChevronDownIcon","AutocompleteInput","filterOptionsDefault","inputValue","CheckoutAutocompleteInput","onInputChange","freeSolo","filterOptions","getOptionKey","displayLoadingState","Search","defaultMuiPrevented","isDropdownAutocompleteOption","getOptionByValue","CheckoutDropdownInput","setOption","stringify","onSelectOptionDefault","_event","PrimaryButton","SecondaryButton","CheckoutPrimaryButton","CheckoutSecondaryButton","TentacleHeartIcon","clipPath","y","rx","transform","fillOpacity","stroke","strokeWidth","maskType","maskUnits","mask","strokeMiterlimit","filterUnits","colorInterpolationFilters","floodOpacity","in2","dy","stdDeviation","operator","k2","k3","dx","x1","y1","x2","y2","gradientUnits","stopColor","stopOpacity","LoadingContainer","ErrorContainer","LoadingText","ErrorText","spin","loadingLabel","secondaryLoadingLabel","errorLabel","small","ResourceLinkButton","medium","colorScales","slate","ResourceLink","DarkStyle","hljs","overflowX","fontStyle","Overlay","scrollbarHeight","bottom","opacity","IconContainer","HoverTextContainer","HoverText","contrastText","hoverIcon","hoverText","LightStyle","FormattedTextArea","language","forceTheme","hideLineNumbers","wrapLongLines","defaultColorOverride","useTheme","copied","setCopied","setScrollbarHeight","isDarkMode","containerRef","offsetHeight","clientHeight","customStyle","borderWidth","xSmall","showLineNumbers","PreTag","ResourceLinksContainer","LicenseKeyView","showTitle","licenseXml","purple","SelfFetchingLicenseKeyView","setIsFullfilled","setLicenseXml","CheckoutComplete","subscriptionId","subscriptionType","paddingX","CheckoutCompleteCloud","CheckoutCompleteSelfHosted","cloudInstanceLink","CountriesContext","CountriesProvider","countries","setCountries","geolocationIsoCode","setGeolocationIsoCode","listCountries","fetchCountries","controller","AbortController","envClientIpAddress","ipAddress","requestParams","getGeolocation","fetchData","isoCode","getLocation","getCurrentCountry","country","twoDigitIsoCode","useCountries","ErrorMessage","StyledInputLabel","InputLabel","CheckoutFormField","labelText","input","htmlFor","TextArea","CheckoutTextArea","inputComponent","StyledCheckoutFormField","CheckoutContactSalesDialog","showSuccessMessage","setShowSuccessMessage","dialogContentEl","font","interface","large","mappedData","planConfig","scrollTo","autoComplete","organization","rows","CheckoutContactSalesDialogContext","useCheckoutContactSalesDialog","CheckoutContactSalesDialogProvider","CheckIcon","StyledCheckbox","Checkbox","CheckoutCheckbox","checkedIcon","SummaryLine","valueTestId","TaxItemLine","taxItem","rateString","rateType","Percentage","rate","amount","TaxSummary","isFetchingTax","hasMinimumTaxInfo","errorReason","taxItems","taxTotalTestId","statusCode","taxSum","reduce","acc","SubscriptionAgreement","planName","OrderPreviewSummary","onToggleTaxExemption","orderPreview","isTaxExempted","isLoadingOrderPreview","isRecalculatingBasePrice","discount","discountAmount","planPriceDisplayString","totalAmountExcludingTax","discountDisplayString","subTotalDisplayString","totalDisplayString","totalAmount","divider","orderItems","chargeDescription","Skeleton","amountWithoutTax","quantity","chargeName","checked","currencyCode","StyledAlert","borderLeft","CheckoutOrderSummary","isBeyondStandardEntitlements","formatStreetAddress","address","countryCode","streetName","streetNumber","isZuoraLibrary","CheckoutLockIcon","CheckoutStepLayout","orderSummary","testId","stepName","borderRight","ButtonLikeLabel","HiddenRadio","loud","CheckoutButtonLikeRadio","buttonSx","CheckoutPlanConfigRadio","SupportOptions","ConfigOption","kind","_value","_label","_kind","projectOptions","p20","p30","p40","p50","p60","p70","p80","p90","p100","p120","tenantOptions","t0","t10","t20","t30","t40","t50","t60","t70","t80","t90","t100","t120","machineOptions","m0","m10","m20","m30","m40","m50","m60","m70","m80","m90","m100","m120","isCloudPlanConfig","config","hasOwnProperty","convertPlanConfigQuantityToInt","PlanConfigInfoText","RadioOptionsOfKind","radioProps","CheckoutPlanConfigurationStep","onBack","onChanged","initialData","upgradePlanTitle","getValues","projects","taskQuantity","tasks","support","tenantQuantity","tenants","machineQuantity","machines","orientation","flexItem","EightFive","TwentyFourSeven","zuoraLibraryUrl","zuoraLibraryScriptId","ZuoraContainer","LoadingState","ZuoraHostedPaymentFormContainer","isZuoraLibraryReady","zuoraCallback","clientErrorMessageCallback","paymentSuccessful","paymentFailure","attempt","loadingZuoraHostedPaymentPage","renderZuora","requestSignatureError","zuoraConfigError","setRequestSignatureError","setZuoraConfigError","controllerRef","getZuoraConfig","zuoraTenantId","zuoraHostedPaymentPageId","zuoraHostedPaymentPageUri","zuoraPaymentGatewayName","paymentGateway","zuoraConfig","auth","getZuoraRsaSignature","authorizationAmount","submitEnabled","param_supportedTypes","signatureType","Z","renderWithErrorHandler","abort","addEventListener","addZuoraEventListeners","useZuoraHostedPaymentPage","ServerSideErrorMessage","CheckoutZuoraServerSideErrors","errorItems","PaymentStepFrame","CheckoutPaymentStep","onOrderComplete","personalStepDetails","billingProduct","planConfigData","hasOrderPreviewError","isSubmitEnabled","setIsSubmitEnabled","serverSideErrors","setServerSideErrors","loadZuoraIframeError","setLoadZuoraIframeError","orderError","setOrderError","setAttempt","licenseOrSubscription","submitPayment","submit","convertStreetAddressObjectToAddressLine","streetAddress","onPaymentComplete","advancedDigitalSignature","businessAccount","purchasingAs","taskCap","pricingParameters","billToContact","billingContact","address1","companyContact","city","postalCode","postcode","companyName","taxId","checkout","zuoraLoadEvent","code","sendErrorMessageToHpm","URLSearchParams","catchAllError","serverErrorHandler","prevState","runAfterRender","setEventHandler","FormButtons","isAutocompleteAddressValue","CheckoutAddressField","onSelectAddressDefault","setters","setAddress","findCountryByCountryCode","countryOption","setCountry","setCity","municipality","states","countrySubdivision","stateOption","setState","setPostcode","countryInput","renderStreetAddressInput","cityInput","stateInput","postcodeInput","onSelectAddress","streetAddressInput","details","debouncedGetOptions","debounce","fail","addresses","searchAddress","freeFormAddress","getOptions","CheckoutStreetAddressInput","defaultOptions","setOptions","lastSearchValueRef","countryCodeRef","updateOptions","addressOptions","isCheckoutCompanyForm","formData","isCheckoutIndividualForm","purchasingAsFieldOptions","addressFieldOptions","mapErrors","contact","contactErrors","CheckoutPersonalDetailsStep","onAddressChanged","onPurchasingAsChanged","nextStep","prevStep","orderPreviewError","showBoundary","billingContactStates","setBillingContactStates","companyContactStates","setCompanyContactStates","getStates","matchingCountry","reValidateMode","unregister","billingContactCountryCode","companyCountryCode","isPurchasingAsBusiness","showTaxIdField","requireAbnField","taxIdFieldOptions","formattedValue","postcodeFieldOptions","postcodeRequiredCountryCodes","currentCountry","companyContactCountry","billingContactCountry","handlePurchasingAs","TypeError","unregisterIndividual","registerCompany","unregisterCompany","registerIndividual","keepValue","convertAddressToAddressInputValue","hasCountry","stepTestId","validEmailAddress","test","isEmailValid","CheckoutStepNames","PlanConfiguration","Payment","ServerLicenseExpiryBanner","licenseExpiryDate","daysToExpiry","formattedExpiryDate","DATE_MED","expiresSoon","expiresImmediately","hasExpired","bannerLevel","bannerText","ServerLicenseLayout","CheckoutLayoutShared","CheckoutLayoutCloud","CheckoutLayoutServer","CheckoutLayout","CheckoutContactSalesReasons","ContactSalesReason","StepHeading","CheckoutContactSalesStep","personalDetailsStepData","isSubmitting","setIsSubmitting","orderRequested","setOrderRequested","orderThroughSales","CheckIconSimple","StepsListContainer","StepsList","StepLi","StepItemInner","StyledStepNumber","isCurrent","StyledStepComplete","StepTitle","currentStep","step","StepNumber","StepSeparator","StepProgress","steps","Title","CheckoutUpgradePlanTitleDisplay","planTypeDisplayName","subscriptionDisplayName","CheckoutUpgradePlanTitle","PlanSelection","PersonalDetails","ContactSales","StickySidebar","Checkout","projectQuantityString","plan","setCurrentStep","setOrderPreview","setIsLoadingOrderPreview","isRecalculatingPrice","setIsRecalculatingBasePrice","setTaxExempted","setPlanConfigData","Server_Annually_Professional","getDefaultPlanConfigData","setPersonalDetailsData","setOrderPreviewError","userInitiatedRetryAttempt","setUserInitiatedRetryAttempt","zuoraScriptLibraryError","hasLoadedScript","getElementById","setIsZuoraLibraryReady","script","onload","onerror","body","remove","useZuoraLibraryScriptLoader","mapConfigData","planConfigDataRef","isBeyondSelfServeEntitlements","configData","isCloudConfig","limits","ProfessionalCloud","StarterCloud","ProfessionalServer","StarterServer","taxAddress","product","county","debouncedFetch","firstOrderItem","termStartDate","serviceStartDate","termEndDate","serviceEndDate","taxAmount","taxSummaryItems","taxName","taxRate","taxRateType","mapToOrderPreview","getOrderPreview","aborted","toISOString","SourceContext","logError","canRetry","advanceStep","Server_Annually_Starter","forEach","unshift","Steps","checkoutSteps","onSubmitPlanConfiguration","onPlanConfigurationChanged","onSubmitPersonalDetails","planConfigurationData","backStep","LastStep","assertSelectedPurchasingAs","lastStep","contactSalesReason","getLastStep","configStepElement","getChangePlanRoute","personalDetailsStepElement","lastStepElement","checkoutCompleteElement","ServerLicenseHeader","pageTitle","SalesforceContractedServerLicensingChannelView","ServerLicenseCancelPlanDialog","changedServerLicense","ServerLicenseCancelPlanDialogText","StripeSubscriptionServerLicensingChannelView","TrialServerLicensingChannelView","ZuoraServerLicensingChannelView","ServerLicensingChannelView","ServerLicenseFinance","ServerLicenseLoadViaSerial","InstallationStepTitle","InstallationStepTextContainer","InstallationStepText","InstallationStep","stepNumber","InstallGuide","GetDockerCommand","licenseKeyXml","dockerCommand","btoa","LinuxInstallGuide","WindowsInstallGuide","GetHelmInstallCommand","storageClass","helmCommand","KubernetesInstallGuide","setStorageClass","ServerLicenseInstallation","TabContent","Tabs","Tab","topText","bottomItem","bgcolor","LicenseXmlCards","ServerLicenseOverview","canViewLicenseKeyXml","isAllowedSelfService","targetPriceCode","isAllowedChannel","isAllowedSelfServiceLicensingChannel","isAllowedTransition","isAllowedPlanTransition","planBrand","allowedPlanTransitions","getAllowedSelfServicePlanTransitions","trialBrand","pricingCardPriceCode","hasStatus","Server_Annually_Enterprise","ServerEnterprisePricingCard","ServerProfessionalPricingCard","ServerStarterPricingCard","PlanHeaderTagLine","ServerLicenseUpgrade","InviteUserToServerLicense","serverName","ServerLicenseUsers","Routes","_eventHandlers","setupAppInsights","appInsights","reactPlugin","ReactPlugin","connectionString","enableAutoRouteTracking","enableCorsCorrelation","disableExceptionTracking","extensions","loadAppInsights","addEventHandlers","filename","lineno","colno","errorSrc","lineNumber","columnNumber","onUnhandledRejection","typeName","removeEventHandlers","removeEventListener","userId","_authedUserId","_appInsights","setAuthenticatedUserContext","customProperties","ExceptionProperties","logErrorWithException","stack","trackPageView","pageView","trackTrace","trace","domain","Component","routes","muiTheme","createTheme","GlobalStyles","styles","ThemeProvider"],"sourceRoot":""}